From webhook-mailer at python.org Thu Apr 1 02:00:49 2021 From: webhook-mailer at python.org (methane) Date: Thu, 01 Apr 2021 06:00:49 -0000 Subject: [Python-checkins] Fix typos in 3.10 "What's new" (GH-25104) Message-ID: https://github.com/python/cpython/commit/18701a0608b66a8fa147b31243a95de8d828211c commit: 18701a0608b66a8fa147b31243a95de8d828211c branch: master author: Don Kirkby committer: methane date: 2021-04-01T15:00:30+09:00 summary: Fix typos in 3.10 "What's new" (GH-25104) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index ea2834bc76145..a8ff56745c758 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -420,7 +420,7 @@ Several other key features: - Mapping patterns: ``{"bandwidth": b, "latency": l}`` captures the ``"bandwidth"`` and ``"latency"`` values from a dict. Unlike sequence patterns, extra keys are ignored. A wildcard ``**rest`` is also - supported. (But ``**_`` would be redundant, so it not allowed.) + supported. (But ``**_`` would be redundant, so is not allowed.) - Subpatterns may be captured using the ``as`` keyword:: @@ -462,13 +462,13 @@ Optional ``EncodingWarning`` and ``encoding="locale"`` option The default encoding of :class:`TextIOWrapper` and :func:`open` is platform and locale dependent. Since UTF-8 is used on most Unix platforms, omitting ``encoding`` option when opening UTF-8 files -(e.g. JSON, YAML, TOML, Markdown) is very common bug. For example:: +(e.g. JSON, YAML, TOML, Markdown) is a very common bug. For example:: # BUG: "rb" mode or encoding="utf-8" should be used. with open("data.json") as f: - data = json.laod(f) + data = json.load(f) -To find this type of bugs, optional ``EncodingWarning`` is added. +To find this type of bug, optional ``EncodingWarning`` is added. It is emitted when :data:`sys.flags.warn_default_encoding ` is true and locale-specific default encoding is used. From webhook-mailer at python.org Thu Apr 1 02:10:46 2021 From: webhook-mailer at python.org (methane) Date: Thu, 01 Apr 2021 06:10:46 -0000 Subject: [Python-checkins] Doc: io: Remove "In-memory streams" section (GH-24927) Message-ID: https://github.com/python/cpython/commit/4ea8b24027a514e47bc664e98070f2f2c04cff3f commit: 4ea8b24027a514e47bc664e98070f2f2c04cff3f branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: methane date: 2021-04-01T15:10:38+09:00 summary: Doc: io: Remove "In-memory streams" section (GH-24927) (cherry picked from commit b045cdaf341f80b7d1e4804b932b6e415600c2e1) Co-authored-by: Inada Naoki files: M Doc/library/io.rst diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 32151a0ace458..6d51aa1c8e31d 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -155,16 +155,6 @@ High-level Module Interface when an unsupported operation is called on a stream. -In-memory streams -^^^^^^^^^^^^^^^^^ - -It is also possible to use a :class:`str` or :term:`bytes-like object` as a -file for both reading and writing. For strings :class:`StringIO` can be used -like a file opened in text mode. :class:`BytesIO` can be used like a file -opened in binary mode. Both provide full read-write capabilities with random -access. - - .. seealso:: :mod:`sys` From webhook-mailer at python.org Thu Apr 1 02:11:53 2021 From: webhook-mailer at python.org (methane) Date: Thu, 01 Apr 2021 06:11:53 -0000 Subject: [Python-checkins] Doc: io: Remove "In-memory streams" section (GH-24927) Message-ID: https://github.com/python/cpython/commit/244fa236e422020ad1a0c1be8d5b53496bd3d0f2 commit: 244fa236e422020ad1a0c1be8d5b53496bd3d0f2 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: methane date: 2021-04-01T15:11:49+09:00 summary: Doc: io: Remove "In-memory streams" section (GH-24927) (cherry picked from commit b045cdaf341f80b7d1e4804b932b6e415600c2e1) Co-authored-by: Inada Naoki files: M Doc/library/io.rst diff --git a/Doc/library/io.rst b/Doc/library/io.rst index aecbec56866d7..96e02e839ae65 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -155,16 +155,6 @@ High-level Module Interface when an unsupported operation is called on a stream. -In-memory streams -^^^^^^^^^^^^^^^^^ - -It is also possible to use a :class:`str` or :term:`bytes-like object` as a -file for both reading and writing. For strings :class:`StringIO` can be used -like a file opened in text mode. :class:`BytesIO` can be used like a file -opened in binary mode. Both provide full read-write capabilities with random -access. - - .. seealso:: :mod:`sys` From webhook-mailer at python.org Thu Apr 1 05:30:06 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 01 Apr 2021 09:30:06 -0000 Subject: [Python-checkins] bpo-43688: Run make regen-limited-abi (GH-25134) Message-ID: https://github.com/python/cpython/commit/baf10da75072d1f8ec714d3c2c8550d34db343a9 commit: baf10da75072d1f8ec714d3c2c8550d34db343a9 branch: master author: Victor Stinner committer: vstinner date: 2021-04-01T11:29:46+02:00 summary: bpo-43688: Run make regen-limited-abi (GH-25134) files: M Doc/data/stable_abi.dat diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 3adee103bce2d..ed20521b7f2d6 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -192,6 +192,7 @@ PyExc_ConnectionRefusedError PyExc_ConnectionResetError PyExc_DeprecationWarning PyExc_EOFError +PyExc_EncodingWarning PyExc_EnvironmentError PyExc_Exception PyExc_FileExistsError @@ -615,6 +616,7 @@ PyType_GetFlags PyType_GetModule PyType_GetModuleState PyType_GetSlot +PyType_HasFeature PyType_IsSubtype PyType_Modified PyType_Ready From webhook-mailer at python.org Thu Apr 1 08:14:09 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 01 Apr 2021 12:14:09 -0000 Subject: [Python-checkins] bpo-43690: stable_abi.py no longer parses macros (GH-25136) Message-ID: https://github.com/python/cpython/commit/61092a99c4840f36dbde8457cb566fc3c012930f commit: 61092a99c4840f36dbde8457cb566fc3c012930f branch: master author: Victor Stinner committer: vstinner date: 2021-04-01T14:13:42+02:00 summary: bpo-43690: stable_abi.py no longer parses macros (GH-25136) The stable_abi.py script no longer parse macros. Macro targets can be static inline functions which are not part of the stable ABI, only part of the limited C API. Run "make regen-limited-abi" to exclude PyType_HasFeature from Doc/data/stable_abi.dat. files: M Doc/data/stable_abi.dat M Tools/scripts/stable_abi.py diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index ed20521b7f2d6..cd9e384eaea2b 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -616,7 +616,6 @@ PyType_GetFlags PyType_GetModule PyType_GetModuleState PyType_GetSlot -PyType_HasFeature PyType_IsSubtype PyType_Modified PyType_Ready diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 0f9e36547e765..14fcf2f56a207 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -112,11 +112,10 @@ def generate_limited_api_symbols(args): stable_data, stable_exported_data, stable_functions = get_limited_api_definitions( headers ) - macros = get_limited_api_macros(headers) stable_symbols = { symbol - for symbol in (stable_functions | stable_exported_data | stable_data | macros) + for symbol in (stable_functions | stable_exported_data | stable_data) if symbol.startswith("Py") and symbol in available_symbols } with open(args.output_file, "w") as output_file: @@ -128,36 +127,6 @@ def generate_limited_api_symbols(args): output_file.write(f"{symbol}\n") -def get_limited_api_macros(headers): - """Run the preprocesor over all the header files in "Include" setting - "-DPy_LIMITED_API" to the correct value for the running version of the interpreter - and extracting all macro definitions (via adding -dM to the compiler arguments). - """ - - preprocesor_output_with_macros = subprocess.check_output( - sysconfig.get_config_var("CC").split() - + [ - # Prevent the expansion of the exported macros so we can capture them later - "-DSIZEOF_WCHAR_T=4", # The actual value is not important - f"-DPy_LIMITED_API={sys.version_info.major << 24 | sys.version_info.minor << 16}", - "-I.", - "-I./Include", - "-dM", - "-E", - ] - + [str(file) for file in headers], - text=True, - stderr=subprocess.DEVNULL, - ) - - return { - target - for _, target in re.findall( - r"#define (\w+)\s*(?:\(.*?\))?\s+(\w+)", preprocesor_output_with_macros - ) - } - - def get_limited_api_definitions(headers): """Run the preprocesor over all the header files in "Include" setting "-DPy_LIMITED_API" to the correct value for the running version of the interpreter. From webhook-mailer at python.org Thu Apr 1 09:09:51 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 01 Apr 2021 13:09:51 -0000 Subject: [Python-checkins] bpo-43688: Fix Py_LIMITED_API version of xxlimited (GH-25135) Message-ID: https://github.com/python/cpython/commit/2ac0515027699b5694d9a6ff40f1ddaba82c74c2 commit: 2ac0515027699b5694d9a6ff40f1ddaba82c74c2 branch: master author: Victor Stinner committer: vstinner date: 2021-04-01T15:09:33+02:00 summary: bpo-43688: Fix Py_LIMITED_API version of xxlimited (GH-25135) xxlimited targets Python 3.10, not Python 3.16: fix the hexadecimal version number used in the Py_LIMITED_API macro. files: M Include/methodobject.h M PCbuild/xxlimited.vcxproj M setup.py diff --git a/Include/methodobject.h b/Include/methodobject.h index 7aa4e41ccca1f..9ffe8e1a3ddfc 100644 --- a/Include/methodobject.h +++ b/Include/methodobject.h @@ -79,15 +79,15 @@ PyAPI_FUNC(PyObject *) PyCMethod_New(PyMethodDef *, PyObject *, #define METH_COEXIST 0x0040 -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03100000 -#define METH_FASTCALL 0x0080 +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030a0000 +# define METH_FASTCALL 0x0080 #endif /* This bit is preserved for Stackless Python */ #ifdef STACKLESS -#define METH_STACKLESS 0x0100 +# define METH_STACKLESS 0x0100 #else -#define METH_STACKLESS 0x0000 +# define METH_STACKLESS 0x0000 #endif /* METH_METHOD means the function stores an diff --git a/PCbuild/xxlimited.vcxproj b/PCbuild/xxlimited.vcxproj index ece169127a286..61e4e5784e7ab 100644 --- a/PCbuild/xxlimited.vcxproj +++ b/PCbuild/xxlimited.vcxproj @@ -94,7 +94,7 @@ - %(PreprocessorDefinitions);Py_LIMITED_API=0x03100000 + %(PreprocessorDefinitions);Py_LIMITED_API=0x030A0000 wsock32.lib;%(AdditionalDependencies) diff --git a/setup.py b/setup.py index e3fbd78bc08b8..75bd16375063a 100644 --- a/setup.py +++ b/setup.py @@ -1867,7 +1867,7 @@ def detect_modules(self): if 'd' not in sysconfig.get_config_var('ABIFLAGS'): # Non-debug mode: Build xxlimited with limited API self.add(Extension('xxlimited', ['xxlimited.c'], - define_macros=[('Py_LIMITED_API', '0x03100000')])) + define_macros=[('Py_LIMITED_API', '0x030a0000')])) self.add(Extension('xxlimited_35', ['xxlimited_35.c'], define_macros=[('Py_LIMITED_API', '0x03050000')])) else: From webhook-mailer at python.org Thu Apr 1 11:00:42 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 01 Apr 2021 15:00:42 -0000 Subject: [Python-checkins] bpo-27129: Use instruction offsets, not byte offsets, in bytecode and internally. (GH-25069) Message-ID: https://github.com/python/cpython/commit/fcb55c0037baab6f98f91ee38ce84b6f874f034a commit: fcb55c0037baab6f98f91ee38ce84b6f874f034a branch: master author: Mark Shannon committer: markshannon date: 2021-04-01T16:00:31+01:00 summary: bpo-27129: Use instruction offsets, not byte offsets, in bytecode and internally. (GH-25069) * Use instruction offset, rather than bytecode offset. Streamlines interpreter dispatch a bit, and removes most EXTENDED_ARGs for jumps. * Change some uses of PyCode_Addr2Line to PyFrame_GetLineNumber files: A Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst M Lib/dis.py M Lib/importlib/_bootstrap_external.py M Lib/test/test_dis.py M Objects/codeobject.c M Objects/frameobject.c M Objects/genobject.c M Python/ceval.c M Python/compile.c M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h M Python/traceback.c M Tools/gdb/libpython.py diff --git a/Lib/dis.py b/Lib/dis.py index ccbd65be73255..3fee1ce27725c 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -338,8 +338,11 @@ def _get_instructions_bytes(code, varnames=None, names=None, constants=None, argval, argrepr = _get_const_info(arg, constants) elif op in hasname: argval, argrepr = _get_name_info(arg, names) + elif op in hasjabs: + argval = arg*2 + argrepr = "to " + repr(argval) elif op in hasjrel: - argval = offset + 2 + arg + argval = offset + 2 + arg*2 argrepr = "to " + repr(argval) elif op in haslocal: argval, argrepr = _get_name_info(arg, varnames) @@ -437,9 +440,9 @@ def findlabels(code): for offset, op, arg in _unpack_opargs(code): if arg is not None: if op in hasjrel: - label = offset + 2 + arg + label = offset + 2 + arg*2 elif op in hasjabs: - label = arg + label = arg*2 else: continue if label not in labels: diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index bf7c2686037d7..6c3e0317b7d9f 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -314,6 +314,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10a2 3432 (Function annotation for MAKE_FUNCTION is changed from dict to tuple bpo-42202) # Python 3.10a2 3433 (RERAISE restores f_lasti if oparg != 0) # Python 3.10a6 3434 (PEP 634: Structural Pattern Matching) +# Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). # # MAGIC must change whenever the bytecode emitted by the compiler may no diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index e342a14bf0156..19e5c0f633502 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -127,10 +127,10 @@ def bug708901(): %3d 6 CALL_FUNCTION 2 8 GET_ITER - >> 10 FOR_ITER 4 (to 16) + >> 10 FOR_ITER 2 (to 16) 12 STORE_FAST 0 (res) -%3d 14 JUMP_ABSOLUTE 10 +%3d 14 JUMP_ABSOLUTE 5 (to 10) %3d >> 16 LOAD_CONST 0 (None) 18 RETURN_VALUE @@ -276,11 +276,11 @@ def bug42562(): 10 INPLACE_ADD 12 STORE_NAME 0 (x) - 2 14 JUMP_ABSOLUTE 6 + 2 14 JUMP_ABSOLUTE 3 (to 6) """ dis_traceback = """\ -%3d 0 SETUP_FINALLY 14 (to 16) +%3d 0 SETUP_FINALLY 7 (to 16) %3d 2 LOAD_CONST 1 (1) 4 LOAD_CONST 2 (0) @@ -293,11 +293,11 @@ def bug42562(): %3d >> 16 DUP_TOP 18 LOAD_GLOBAL 0 (Exception) - 20 JUMP_IF_NOT_EXC_MATCH 58 + 20 JUMP_IF_NOT_EXC_MATCH 29 (to 58) 22 POP_TOP 24 STORE_FAST 0 (e) 26 POP_TOP - 28 SETUP_FINALLY 20 (to 50) + 28 SETUP_FINALLY 10 (to 50) %3d 30 LOAD_FAST 0 (e) 32 LOAD_ATTR 1 (__traceback__) @@ -358,7 +358,7 @@ def _tryfinallyconst(b): b() dis_tryfinally = """\ -%3d 0 SETUP_FINALLY 12 (to 14) +%3d 0 SETUP_FINALLY 6 (to 14) %3d 2 LOAD_FAST 0 (a) 4 POP_BLOCK @@ -377,7 +377,7 @@ def _tryfinallyconst(b): ) dis_tryfinallyconst = """\ -%3d 0 SETUP_FINALLY 12 (to 14) +%3d 0 SETUP_FINALLY 6 (to 14) %3d 2 POP_BLOCK @@ -450,13 +450,13 @@ def foo(x): Disassembly of at 0x..., file "%s", line %d>: %3d 0 BUILD_LIST 0 2 LOAD_FAST 0 (.0) - >> 4 FOR_ITER 12 (to 18) + >> 4 FOR_ITER 6 (to 18) 6 STORE_FAST 1 (z) 8 LOAD_DEREF 0 (x) 10 LOAD_FAST 1 (z) 12 BINARY_ADD 14 LIST_APPEND 2 - 16 JUMP_ABSOLUTE 4 + 16 JUMP_ABSOLUTE 2 (to 4) >> 18 RETURN_VALUE """ % (dis_nested_1, __file__, @@ -1009,7 +1009,7 @@ def jumpy(): Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=10, argrepr='10', offset=2, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=4, starts_line=None, is_jump_target=False), Instruction(opname='GET_ITER', opcode=68, arg=None, argval=None, argrepr='', offset=6, starts_line=None, is_jump_target=False), - Instruction(opname='FOR_ITER', opcode=93, arg=34, argval=44, argrepr='to 44', offset=8, starts_line=None, is_jump_target=True), + Instruction(opname='FOR_ITER', opcode=93, arg=17, argval=44, argrepr='to 44', offset=8, starts_line=None, is_jump_target=True), Instruction(opname='STORE_FAST', opcode=125, arg=0, argval='i', argrepr='i', offset=10, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=12, starts_line=4, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=14, starts_line=None, is_jump_target=False), @@ -1018,21 +1018,21 @@ def jumpy(): Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=20, starts_line=5, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=4, argrepr='4', offset=22, starts_line=None, is_jump_target=False), Instruction(opname='COMPARE_OP', opcode=107, arg=0, argval='<', argrepr='<', offset=24, starts_line=None, is_jump_target=False), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=30, argval=30, argrepr='', offset=26, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=8, argval=8, argrepr='', offset=28, starts_line=6, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=15, argval=30, argrepr='to 30', offset=26, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=4, argval=8, argrepr='to 8', offset=28, starts_line=6, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=30, starts_line=7, is_jump_target=True), Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=6, argrepr='6', offset=32, starts_line=None, is_jump_target=False), Instruction(opname='COMPARE_OP', opcode=107, arg=4, argval='>', argrepr='>', offset=34, starts_line=None, is_jump_target=False), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=42, argval=42, argrepr='', offset=36, starts_line=None, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=21, argval=42, argrepr='to 42', offset=36, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=38, starts_line=8, is_jump_target=False), - Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=52, argval=52, argrepr='', offset=40, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=8, argval=8, argrepr='', offset=42, starts_line=7, is_jump_target=True), + Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=26, argval=52, argrepr='to 52', offset=40, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=4, argval=8, argrepr='to 8', offset=42, starts_line=7, is_jump_target=True), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=44, starts_line=10, is_jump_target=True), Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=46, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=48, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=50, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=52, starts_line=11, is_jump_target=True), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=96, argval=96, argrepr='', offset=54, starts_line=None, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=48, argval=96, argrepr='to 96', offset=54, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=56, starts_line=12, is_jump_target=True), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=58, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=60, starts_line=None, is_jump_target=False), @@ -1044,30 +1044,30 @@ def jumpy(): Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=72, starts_line=14, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=6, argrepr='6', offset=74, starts_line=None, is_jump_target=False), Instruction(opname='COMPARE_OP', opcode=107, arg=4, argval='>', argrepr='>', offset=76, starts_line=None, is_jump_target=False), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=82, argval=82, argrepr='', offset=78, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=52, argval=52, argrepr='', offset=80, starts_line=15, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=41, argval=82, argrepr='to 82', offset=78, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=26, argval=52, argrepr='to 52', offset=80, starts_line=15, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=82, starts_line=16, is_jump_target=True), Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=4, argrepr='4', offset=84, starts_line=None, is_jump_target=False), Instruction(opname='COMPARE_OP', opcode=107, arg=0, argval='<', argrepr='<', offset=86, starts_line=None, is_jump_target=False), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=92, argval=92, argrepr='', offset=88, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=104, argval=104, argrepr='', offset=90, starts_line=17, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=46, argval=92, argrepr='to 92', offset=88, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_ABSOLUTE', opcode=113, arg=52, argval=104, argrepr='to 104', offset=90, starts_line=17, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=92, starts_line=11, is_jump_target=True), - Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=56, argval=56, argrepr='', offset=94, starts_line=None, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=28, argval=56, argrepr='to 56', offset=94, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=96, starts_line=19, is_jump_target=True), Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=98, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=100, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=102, starts_line=None, is_jump_target=False), - Instruction(opname='SETUP_FINALLY', opcode=122, arg=96, argval=202, argrepr='to 202', offset=104, starts_line=20, is_jump_target=True), - Instruction(opname='SETUP_FINALLY', opcode=122, arg=12, argval=120, argrepr='to 120', offset=106, starts_line=None, is_jump_target=False), + Instruction(opname='SETUP_FINALLY', opcode=122, arg=48, argval=202, argrepr='to 202', offset=104, starts_line=20, is_jump_target=True), + Instruction(opname='SETUP_FINALLY', opcode=122, arg=6, argval=120, argrepr='to 120', offset=106, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=108, starts_line=21, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=110, starts_line=None, is_jump_target=False), Instruction(opname='BINARY_TRUE_DIVIDE', opcode=27, arg=None, argval=None, argrepr='', offset=112, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=114, starts_line=None, is_jump_target=False), Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=116, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_FORWARD', opcode=110, arg=24, argval=144, argrepr='to 144', offset=118, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=12, argval=144, argrepr='to 144', offset=118, starts_line=None, is_jump_target=False), Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=120, starts_line=22, is_jump_target=True), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=2, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=122, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_IF_NOT_EXC_MATCH', opcode=121, arg=212, argval=212, argrepr='', offset=124, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_IF_NOT_EXC_MATCH', opcode=121, arg=106, argval=212, argrepr='to 212', offset=124, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=126, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=128, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=130, starts_line=None, is_jump_target=False), @@ -1076,9 +1076,9 @@ def jumpy(): Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=136, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False), Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=140, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_FORWARD', opcode=110, arg=44, argval=188, argrepr='to 188', offset=142, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=22, argval=188, argrepr='to 188', offset=142, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=144, starts_line=25, is_jump_target=True), - Instruction(opname='SETUP_WITH', opcode=143, arg=24, argval=172, argrepr='to 172', offset=146, starts_line=None, is_jump_target=False), + Instruction(opname='SETUP_WITH', opcode=143, arg=12, argval=172, argrepr='to 172', offset=146, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=148, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=150, starts_line=26, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Never reach this', argrepr="'Never reach this'", offset=152, starts_line=None, is_jump_target=False), @@ -1090,9 +1090,9 @@ def jumpy(): Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=166, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=168, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_FORWARD', opcode=110, arg=16, argval=188, argrepr='to 188', offset=170, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=8, argval=188, argrepr='to 188', offset=170, starts_line=None, is_jump_target=False), Instruction(opname='WITH_EXCEPT_START', opcode=49, arg=None, argval=None, argrepr='', offset=172, starts_line=None, is_jump_target=True), - Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=178, argval=178, argrepr='', offset=174, starts_line=None, is_jump_target=False), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=89, argval=178, argrepr='to 178', offset=174, starts_line=None, is_jump_target=False), Instruction(opname='RERAISE', opcode=119, arg=1, argval=1, argrepr='', offset=176, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=True), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=False), diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst new file mode 100644 index 0000000000000..b1d6c822ce32c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst @@ -0,0 +1,3 @@ +The bytecode interpreter uses instruction, rather byte, offsets internally. +This reduces the number of EXTENDED_ARG instructions needed and streamlines +instruction dispatch a bit. diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 69cb31c1ababc..9bb49f108be0c 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -1246,7 +1246,7 @@ PyTypeObject PyCode_Type = { int PyCode_Addr2Line(PyCodeObject *co, int addrq) { - if (addrq == -1) { + if (addrq < 0) { return co->co_firstlineno; } assert(addrq >= 0 && addrq < PyBytes_GET_SIZE(co->co_code)); diff --git a/Objects/frameobject.c b/Objects/frameobject.c index a1413d79cc248..9687ba5c7a93f 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -15,7 +15,6 @@ static PyMemberDef frame_memberlist[] = { {"f_code", T_OBJECT, OFF(f_code), READONLY}, {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, - {"f_lasti", T_INT, OFF(f_lasti), READONLY}, {"f_trace_lines", T_BOOL, OFF(f_trace_lines), 0}, {"f_trace_opcodes", T_BOOL, OFF(f_trace_opcodes), 0}, {NULL} /* Sentinel */ @@ -46,7 +45,7 @@ PyFrame_GetLineNumber(PyFrameObject *f) return f->f_lineno; } else { - return PyCode_Addr2Line(f->f_code, f->f_lasti); + return PyCode_Addr2Line(f->f_code, f->f_lasti*2); } } @@ -56,6 +55,15 @@ frame_getlineno(PyFrameObject *f, void *closure) return PyLong_FromLong(PyFrame_GetLineNumber(f)); } +static PyObject * +frame_getlasti(PyFrameObject *f, void *closure) +{ + if (f->f_lasti < 0) { + return PyLong_FromLong(-1); + } + return PyLong_FromLong(f->f_lasti*2); +} + /* Given the index of the effective opcode, scan back to construct the oparg with EXTENDED_ARG */ @@ -135,7 +143,7 @@ markblocks(PyCodeObject *code_obj, int len) case POP_JUMP_IF_FALSE: case POP_JUMP_IF_TRUE: case JUMP_IF_NOT_EXC_MATCH: - j = get_arg(code, i) / sizeof(_Py_CODEUNIT); + j = get_arg(code, i); assert(j < len); if (blocks[j] == -1 && j < i) { todo = 1; @@ -145,7 +153,7 @@ markblocks(PyCodeObject *code_obj, int len) blocks[i+1] = block_stack; break; case JUMP_ABSOLUTE: - j = get_arg(code, i) / sizeof(_Py_CODEUNIT); + j = get_arg(code, i); assert(j < len); if (blocks[j] == -1 && j < i) { todo = 1; @@ -154,7 +162,7 @@ markblocks(PyCodeObject *code_obj, int len) blocks[j] = block_stack; break; case SETUP_FINALLY: - j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1; + j = get_arg(code, i) + i + 1; assert(j < len); except_stack = push_block(block_stack, Except); assert(blocks[j] == -1 || blocks[j] == except_stack); @@ -164,7 +172,7 @@ markblocks(PyCodeObject *code_obj, int len) break; case SETUP_WITH: case SETUP_ASYNC_WITH: - j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1; + j = get_arg(code, i) + i + 1; assert(j < len); except_stack = push_block(block_stack, Except); assert(blocks[j] == -1 || blocks[j] == except_stack); @@ -173,7 +181,7 @@ markblocks(PyCodeObject *code_obj, int len) blocks[i+1] = block_stack; break; case JUMP_FORWARD: - j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1; + j = get_arg(code, i) + i + 1; assert(j < len); assert(blocks[j] == -1 || blocks[j] == block_stack); blocks[j] = block_stack; @@ -186,7 +194,7 @@ markblocks(PyCodeObject *code_obj, int len) case FOR_ITER: blocks[i+1] = block_stack; block_stack = pop_block(block_stack); - j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1; + j = get_arg(code, i) + i + 1; assert(j < len); assert(blocks[j] == -1 || blocks[j] == block_stack); blocks[j] = block_stack; @@ -422,7 +430,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore int64_t target_block_stack = -1; int64_t best_block_stack = -1; int best_addr = -1; - int64_t start_block_stack = blocks[f->f_lasti/sizeof(_Py_CODEUNIT)]; + int64_t start_block_stack = blocks[f->f_lasti]; const char *msg = "cannot find bytecode for specified line"; for (int i = 0; i < len; i++) { if (lines[i] == new_lineno) { @@ -431,7 +439,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore msg = NULL; if (target_block_stack > best_block_stack) { best_block_stack = target_block_stack; - best_addr = i*sizeof(_Py_CODEUNIT); + best_addr = i; } } else if (msg) { @@ -511,6 +519,7 @@ static PyGetSetDef frame_getsetlist[] = { {"f_lineno", (getter)frame_getlineno, (setter)frame_setlineno, NULL}, {"f_trace", (getter)frame_gettrace, (setter)frame_settrace, NULL}, + {"f_lasti", (getter)frame_getlasti, NULL, NULL}, {0} }; diff --git a/Objects/genobject.c b/Objects/genobject.c index 26e27cc84c871..69989678efec1 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -357,7 +357,7 @@ _PyGen_yf(PyGenObject *gen) return NULL; } - if (code[f->f_lasti + sizeof(_Py_CODEUNIT)] != YIELD_FROM) + if (code[(f->f_lasti+1)*sizeof(_Py_CODEUNIT)] != YIELD_FROM) return NULL; assert(f->f_stackdepth > 0); yf = f->f_valuestack[f->f_stackdepth-1]; @@ -481,7 +481,7 @@ _gen_throw(PyGenObject *gen, int close_on_genexit, Py_DECREF(ret); /* Termination repetition of YIELD_FROM */ assert(gen->gi_frame->f_lasti >= 0); - gen->gi_frame->f_lasti += sizeof(_Py_CODEUNIT); + gen->gi_frame->f_lasti += 1; if (_PyGen_FetchStopIterationValue(&val) == 0) { ret = gen_send(gen, val); Py_DECREF(val); diff --git a/Python/ceval.c b/Python/ceval.c index fde08a64e24a5..b9d784a629840 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1338,16 +1338,15 @@ eval_frame_handle_pending(PyThreadState *tstate) /* Code access macros */ /* The integer overflow is checked by an assertion below. */ -#define INSTR_OFFSET() \ - (sizeof(_Py_CODEUNIT) * (int)(next_instr - first_instr)) +#define INSTR_OFFSET() ((int)(next_instr - first_instr)) #define NEXTOPARG() do { \ _Py_CODEUNIT word = *next_instr; \ opcode = _Py_OPCODE(word); \ oparg = _Py_OPARG(word); \ next_instr++; \ } while (0) -#define JUMPTO(x) (next_instr = first_instr + (x) / sizeof(_Py_CODEUNIT)) -#define JUMPBY(x) (next_instr += (x) / sizeof(_Py_CODEUNIT)) +#define JUMPTO(x) (next_instr = first_instr + (x)) +#define JUMPBY(x) (next_instr += (x)) /* OpCode prediction macros Some opcodes tend to come in pairs thus making it possible to @@ -1699,11 +1698,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) to the beginning of the combined pair.) */ assert(f->f_lasti >= -1); - next_instr = first_instr; - if (f->f_lasti >= 0) { - assert(f->f_lasti % sizeof(_Py_CODEUNIT) == 0); - next_instr += f->f_lasti / sizeof(_Py_CODEUNIT) + 1; - } + next_instr = first_instr + f->f_lasti + 1; stack_pointer = f->f_valuestack + f->f_stackdepth; /* Set f->f_stackdepth to -1. * Update when returning or calling trace function. @@ -2627,8 +2622,8 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) assert (gen_status == PYGEN_NEXT); /* receiver remains on stack, retval is value to be yielded */ /* and repeat... */ - assert(f->f_lasti >= (int)sizeof(_Py_CODEUNIT)); - f->f_lasti -= sizeof(_Py_CODEUNIT); + assert(f->f_lasti > 0); + f->f_lasti -= 1; f->f_state = FRAME_SUSPENDED; f->f_stackdepth = (int)(stack_pointer - f->f_valuestack); goto exiting; @@ -5511,7 +5506,7 @@ call_trace(Py_tracefunc func, PyObject *obj, } else { initialize_trace_info(trace_info, frame); - frame->f_lineno = _PyCode_CheckLineNumber(frame->f_lasti, &trace_info->bounds); + frame->f_lineno = _PyCode_CheckLineNumber(frame->f_lasti*2, &trace_info->bounds); } result = func(obj, frame, what, arg); frame->f_lineno = 0; @@ -5552,11 +5547,11 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj, */ initialize_trace_info(trace_info, frame); int lastline = trace_info->bounds.ar_line; - int line = _PyCode_CheckLineNumber(frame->f_lasti, &trace_info->bounds); + int line = _PyCode_CheckLineNumber(frame->f_lasti*2, &trace_info->bounds); if (line != -1 && frame->f_trace_lines) { /* Trace backward edges or first instruction of a new line */ if (frame->f_lasti < trace_info->instr_prev || - (line != lastline && frame->f_lasti == trace_info->bounds.ar_start)) + (line != lastline && frame->f_lasti*2 == trace_info->bounds.ar_start)) { result = call_trace(func, obj, tstate, frame, trace_info, PyTrace_LINE, Py_None); } @@ -6475,7 +6470,7 @@ dtrace_function_entry(PyFrameObject *f) PyCodeObject *code = f->f_code; filename = PyUnicode_AsUTF8(code->co_filename); funcname = PyUnicode_AsUTF8(code->co_name); - lineno = PyCode_Addr2Line(code, f->f_lasti); + lineno = PyFrame_GetLineNumber(f); PyDTrace_FUNCTION_ENTRY(filename, funcname, lineno); } @@ -6490,7 +6485,7 @@ dtrace_function_return(PyFrameObject *f) PyCodeObject *code = f->f_code; filename = PyUnicode_AsUTF8(code->co_filename); funcname = PyUnicode_AsUTF8(code->co_name); - lineno = PyCode_Addr2Line(code, f->f_lasti); + lineno = PyFrame_GetLineNumber(f); PyDTrace_FUNCTION_RETURN(filename, funcname, lineno); } @@ -6506,7 +6501,7 @@ maybe_dtrace_line(PyFrameObject *frame, instruction window, reset the window. */ initialize_trace_info(trace_info, frame); - int line = _PyCode_CheckLineNumber(frame->f_lasti, &trace_info->bounds); + int line = _PyCode_CheckLineNumber(frame->f_lasti*2, &trace_info->bounds); /* If the last instruction falls at the start of a line or if it represents a jump backwards, update the frame's line number and call the trace function. */ diff --git a/Python/compile.c b/Python/compile.c index bed2a1c944d96..308d6866c7dc4 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6398,7 +6398,6 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) if (is_relative_jump(instr)) { instr->i_oparg -= bsize; } - instr->i_oparg *= sizeof(_Py_CODEUNIT); if (instrsize(instr->i_oparg) != isize) { extended_arg_recompile = 1; } diff --git a/Python/importlib.h b/Python/importlib.h index 886b807aba0c0..f360407136768 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -54,8 +54,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 99,105,110,103,32,118,101,114,115,105,111,110,32,111,102,32, 116,104,105,115,32,109,111,100,117,108,101,46,10,10,99,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8, - 0,0,0,67,0,0,0,115,38,0,0,0,122,8,124,0, - 106,0,87,0,83,0,4,0,116,1,121,36,1,0,1,0, + 0,0,0,67,0,0,0,115,38,0,0,0,122,4,124,0, + 106,0,87,0,83,0,4,0,116,1,121,18,1,0,1,0, 1,0,116,2,124,0,131,1,106,0,6,0,89,0,83,0, 119,0,169,1,78,41,3,218,12,95,95,113,117,97,108,110, 97,109,101,95,95,218,14,65,116,116,114,105,98,117,116,101, @@ -67,9 +67,9 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 1,8,1,12,1,14,1,2,255,255,128,114,7,0,0,0, 78,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, 0,0,7,0,0,0,67,0,0,0,115,56,0,0,0,100, - 1,68,0,93,32,125,2,116,0,124,1,124,2,131,2,114, - 36,116,1,124,0,124,2,116,2,124,1,124,2,131,2,131, - 3,1,0,113,4,124,0,106,3,160,4,124,1,106,3,161, + 1,68,0,93,16,125,2,116,0,124,1,124,2,131,2,114, + 18,116,1,124,0,124,2,116,2,124,1,124,2,131,2,131, + 3,1,0,113,2,124,0,106,3,160,4,124,1,106,3,161, 1,1,0,100,2,83,0,41,3,122,47,83,105,109,112,108, 101,32,115,117,98,115,116,105,116,117,116,101,32,102,111,114, 32,102,117,110,99,116,111,111,108,115,46,117,112,100,97,116, @@ -134,10 +134,10 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,67,0,0,0,115,86,0,0,0,116,0,160,1, 161,0,125,1,124,0,106,2,125,2,116,3,131,0,125,3, 9,0,116,4,160,5,124,2,161,1,125,4,124,4,100,0, - 117,0,114,44,100,2,83,0,124,4,106,2,125,2,124,2, - 124,1,107,2,114,62,100,1,83,0,124,2,124,3,118,0, - 114,74,100,2,83,0,124,3,160,6,124,2,161,1,1,0, - 113,22,41,3,78,84,70,41,7,114,26,0,0,0,218,9, + 117,0,114,22,100,2,83,0,124,4,106,2,125,2,124,2, + 124,1,107,2,114,31,100,1,83,0,124,2,124,3,118,0, + 114,37,100,2,83,0,124,3,160,6,124,2,161,1,1,0, + 113,11,41,3,78,84,70,41,7,114,26,0,0,0,218,9, 103,101,116,95,105,100,101,110,116,114,29,0,0,0,218,3, 115,101,116,218,12,95,98,108,111,99,107,105,110,103,95,111, 110,218,3,103,101,116,218,3,97,100,100,41,5,114,33,0, @@ -151,17 +151,17 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 108,111,99,107,99,1,0,0,0,0,0,0,0,0,0,0, 0,2,0,0,0,8,0,0,0,67,0,0,0,115,198,0, 0,0,116,0,160,1,161,0,125,1,124,0,116,2,124,1, - 60,0,122,172,9,0,124,0,106,3,143,126,1,0,124,0, - 106,4,100,2,107,2,115,48,124,0,106,5,124,1,107,2, - 114,92,124,1,124,0,95,5,124,0,4,0,106,4,100,3, + 60,0,122,86,9,0,124,0,106,3,143,63,1,0,124,0, + 106,4,100,2,107,2,115,24,124,0,106,5,124,1,107,2, + 114,46,124,1,124,0,95,5,124,0,4,0,106,4,100,3, 55,0,2,0,95,4,87,0,100,4,4,0,4,0,131,3, 1,0,87,0,116,2,124,1,61,0,100,1,83,0,124,0, - 160,6,161,0,114,112,116,7,100,5,124,0,22,0,131,1, - 130,1,124,0,106,8,160,9,100,6,161,1,114,138,124,0, + 160,6,161,0,114,56,116,7,100,5,124,0,22,0,131,1, + 130,1,124,0,106,8,160,9,100,6,161,1,114,69,124,0, 4,0,106,10,100,3,55,0,2,0,95,10,87,0,100,4, - 4,0,4,0,131,3,1,0,110,16,49,0,115,158,119,1, + 4,0,4,0,131,3,1,0,110,8,49,0,115,79,119,1, 1,0,1,0,1,0,89,0,1,0,124,0,106,8,160,9, - 161,0,1,0,124,0,106,8,160,11,161,0,1,0,113,20, + 161,0,1,0,124,0,106,8,160,11,161,0,1,0,113,10, 116,2,124,1,61,0,119,0,41,7,122,185,10,32,32,32, 32,32,32,32,32,65,99,113,117,105,114,101,32,116,104,101, 32,109,111,100,117,108,101,32,108,111,99,107,46,32,32,73, @@ -190,14 +190,14 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 97,99,113,117,105,114,101,99,1,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,0, 115,144,0,0,0,116,0,160,1,161,0,125,1,124,0,106, - 2,143,110,1,0,124,0,106,3,124,1,107,3,114,34,116, + 2,143,55,1,0,124,0,106,3,124,1,107,3,114,17,116, 4,100,1,131,1,130,1,124,0,106,5,100,2,107,4,115, - 48,74,0,130,1,124,0,4,0,106,5,100,3,56,0,2, - 0,95,5,124,0,106,5,100,2,107,2,114,108,100,0,124, - 0,95,3,124,0,106,6,114,108,124,0,4,0,106,6,100, + 24,74,0,130,1,124,0,4,0,106,5,100,3,56,0,2, + 0,95,5,124,0,106,5,100,2,107,2,114,54,100,0,124, + 0,95,3,124,0,106,6,114,54,124,0,4,0,106,6,100, 3,56,0,2,0,95,6,124,0,106,7,160,8,161,0,1, 0,87,0,100,0,4,0,4,0,131,3,1,0,100,0,83, - 0,49,0,115,130,119,1,1,0,1,0,1,0,89,0,1, + 0,49,0,115,65,119,1,1,0,1,0,1,0,89,0,1, 0,100,0,83,0,41,4,78,250,31,99,97,110,110,111,116, 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, 105,114,101,100,32,108,111,99,107,114,25,0,0,0,114,42, @@ -256,7 +256,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 121,77,111,100,117,108,101,76,111,99,107,46,97,99,113,117, 105,114,101,99,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,3,0,0,0,67,0,0,0,115,36,0,0, - 0,124,0,106,0,100,1,107,2,114,18,116,1,100,2,131, + 0,124,0,106,0,100,1,107,2,114,9,116,1,100,2,131, 1,130,1,124,0,4,0,106,0,100,3,56,0,2,0,95, 0,100,0,83,0,41,4,78,114,25,0,0,0,114,46,0, 0,0,114,42,0,0,0,41,2,114,30,0,0,0,114,47, @@ -319,11 +319,11 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,115,10,0,0,0,8,0,8,2,8,4,12,4,255,128, 114,57,0,0,0,99,1,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,132, - 0,0,0,116,0,160,1,161,0,1,0,122,110,122,14,116, - 2,124,0,25,0,131,0,125,1,87,0,110,18,4,0,116, - 3,121,130,1,0,1,0,1,0,100,1,125,1,89,0,124, - 1,100,1,117,0,114,106,116,4,100,1,117,0,114,70,116, - 5,124,0,131,1,125,1,110,8,116,6,124,0,131,1,125, + 0,0,0,116,0,160,1,161,0,1,0,122,55,122,7,116, + 2,124,0,25,0,131,0,125,1,87,0,110,9,4,0,116, + 3,121,65,1,0,1,0,1,0,100,1,125,1,89,0,124, + 1,100,1,117,0,114,53,116,4,100,1,117,0,114,35,116, + 5,124,0,131,1,125,1,110,4,116,6,124,0,131,1,125, 1,124,0,102,1,100,2,100,3,132,1,125,2,116,7,160, 8,124,1,124,2,161,2,116,2,124,0,60,0,87,0,116, 0,160,9,161,0,1,0,124,1,83,0,116,0,160,9,161, @@ -338,8 +338,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 101,99,116,10,32,32,32,32,95,109,111,100,117,108,101,95, 108,111,99,107,115,46,78,99,2,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,8,0,0,0,83,0,0,0, - 115,54,0,0,0,116,0,160,1,161,0,1,0,122,34,116, - 2,160,3,124,1,161,1,124,0,117,0,114,30,116,2,124, + 115,54,0,0,0,116,0,160,1,161,0,1,0,122,17,116, + 2,160,3,124,1,161,1,124,0,117,0,114,15,116,2,124, 1,61,0,87,0,116,0,160,4,161,0,1,0,100,0,83, 0,116,0,160,4,161,0,1,0,119,0,114,0,0,0,0, 41,5,218,4,95,105,109,112,218,12,97,99,113,117,105,114, @@ -362,8 +362,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 2,128,8,2,4,2,10,254,2,234,255,128,114,60,0,0, 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,8,0,0,0,67,0,0,0,115,54,0,0,0,116, - 0,124,0,131,1,125,1,122,12,124,1,160,1,161,0,1, - 0,87,0,110,18,4,0,116,2,121,52,1,0,1,0,1, + 0,124,0,131,1,125,1,122,6,124,1,160,1,161,0,1, + 0,87,0,110,9,4,0,116,2,121,26,1,0,1,0,1, 0,89,0,100,1,83,0,124,1,160,3,161,0,1,0,100, 1,83,0,119,0,41,2,122,189,65,99,113,117,105,114,101, 115,32,116,104,101,110,32,114,101,108,101,97,115,101,115,32, @@ -414,8 +414,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,41,1,218,9,118,101,114,98,111,115,105,116,121, 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, 0,4,0,0,0,71,0,0,0,115,58,0,0,0,116,0, - 106,1,106,2,124,1,107,5,114,54,124,0,160,3,100,1, - 161,1,115,30,100,2,124,0,23,0,125,0,116,4,124,0, + 106,1,106,2,124,1,107,5,114,27,124,0,160,3,100,1, + 161,1,115,15,100,2,124,0,23,0,125,0,116,4,124,0, 106,5,124,2,142,0,116,0,106,6,100,3,141,2,1,0, 100,4,83,0,100,4,83,0,41,5,122,61,80,114,105,110, 116,32,116,104,101,32,109,101,115,115,97,103,101,32,116,111, @@ -440,7 +440,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,4,0,0,0,19,0,0, - 0,115,38,0,0,0,124,1,116,0,106,1,118,1,114,28, + 0,115,38,0,0,0,124,1,116,0,106,1,118,1,114,14, 116,2,100,1,160,3,124,1,161,1,124,1,100,2,141,2, 130,1,136,0,124,0,124,1,131,2,83,0,41,3,78,250, 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, @@ -468,7 +468,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,32, 102,114,111,122,101,110,46,99,2,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,4,0,0,0,19,0,0,0, - 115,38,0,0,0,116,0,160,1,124,1,161,1,115,28,116, + 115,38,0,0,0,116,0,160,1,124,1,161,1,115,14,116, 2,100,1,160,3,124,1,161,1,124,1,100,2,141,2,130, 1,136,0,124,0,124,1,131,2,83,0,169,3,78,122,27, 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, @@ -489,7 +489,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, 0,115,74,0,0,0,100,1,125,2,116,0,160,1,124,2, 116,2,161,2,1,0,116,3,124,1,124,0,131,2,125,3, - 124,1,116,4,106,5,118,0,114,66,116,4,106,5,124,1, + 124,1,116,4,106,5,118,0,114,33,116,4,106,5,124,1, 25,0,125,4,116,6,124,3,124,4,131,2,1,0,116,4, 106,5,124,1,25,0,83,0,116,7,124,3,131,1,83,0, 41,3,122,130,76,111,97,100,32,116,104,101,32,115,112,101, @@ -521,14 +521,14 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 128,114,111,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,5,0,0,0,8,0,0,0,67,0,0,0,115, 184,0,0,0,116,0,124,0,100,1,100,2,131,3,125,1, - 116,0,124,0,100,3,100,2,131,3,4,0,125,2,114,36, + 116,0,124,0,100,3,100,2,131,3,4,0,125,2,114,18, 116,1,124,2,131,1,83,0,116,2,124,1,100,4,131,2, - 114,74,122,12,124,1,160,3,124,0,161,1,87,0,83,0, - 4,0,116,4,121,182,1,0,1,0,1,0,89,0,122,10, - 124,0,106,5,125,3,87,0,110,18,4,0,116,6,121,180, - 1,0,1,0,1,0,100,5,125,3,89,0,122,10,124,0, - 106,7,125,4,87,0,110,50,4,0,116,6,121,178,1,0, - 1,0,1,0,124,1,100,2,117,0,114,150,100,6,160,8, + 114,37,122,6,124,1,160,3,124,0,161,1,87,0,83,0, + 4,0,116,4,121,91,1,0,1,0,1,0,89,0,122,5, + 124,0,106,5,125,3,87,0,110,9,4,0,116,6,121,90, + 1,0,1,0,1,0,100,5,125,3,89,0,122,5,124,0, + 106,7,125,4,87,0,110,25,4,0,116,6,121,89,1,0, + 1,0,1,0,124,1,100,2,117,0,114,75,100,6,160,8, 124,3,161,1,6,0,89,0,83,0,100,7,160,8,124,3, 124,1,161,2,6,0,89,0,83,0,100,8,160,8,124,3, 124,4,161,2,83,0,119,0,119,0,119,0,41,9,122,44, @@ -662,7 +662,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 103,101,99,3,0,0,0,0,0,0,0,3,0,0,0,6, 0,0,0,2,0,0,0,67,0,0,0,115,54,0,0,0, 124,1,124,0,95,0,124,2,124,0,95,1,124,3,124,0, - 95,2,124,4,124,0,95,3,124,5,114,32,103,0,110,2, + 95,2,124,4,124,0,95,3,124,5,114,16,103,0,110,1, 100,0,124,0,95,4,100,1,124,0,95,5,100,0,124,0, 95,6,100,0,83,0,41,2,78,70,41,7,114,20,0,0, 0,114,122,0,0,0,114,126,0,0,0,114,127,0,0,0, @@ -679,9 +679,9 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, 102,0,0,0,100,1,160,0,124,0,106,1,161,1,100,2, 160,0,124,0,106,2,161,1,103,2,125,1,124,0,106,3, - 100,0,117,1,114,52,124,1,160,4,100,3,160,0,124,0, + 100,0,117,1,114,26,124,1,160,4,100,3,160,0,124,0, 106,3,161,1,161,1,1,0,124,0,106,5,100,0,117,1, - 114,80,124,1,160,4,100,4,160,0,124,0,106,5,161,1, + 114,40,124,1,160,4,100,4,160,0,124,0,106,5,161,1, 161,1,1,0,100,5,160,0,124,0,106,6,106,7,100,6, 160,8,124,1,161,1,161,2,83,0,41,7,78,122,9,110, 97,109,101,61,123,33,114,125,122,11,108,111,97,100,101,114, @@ -699,12 +699,12 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 255,22,2,255,128,122,19,77,111,100,117,108,101,83,112,101, 99,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, - 0,0,0,115,102,0,0,0,124,0,106,0,125,2,122,72, - 124,0,106,1,124,1,106,1,107,2,111,76,124,0,106,2, - 124,1,106,2,107,2,111,76,124,0,106,3,124,1,106,3, - 107,2,111,76,124,2,124,1,106,0,107,2,111,76,124,0, - 106,4,124,1,106,4,107,2,111,76,124,0,106,5,124,1, - 106,5,107,2,87,0,83,0,4,0,116,6,121,100,1,0, + 0,0,0,115,102,0,0,0,124,0,106,0,125,2,122,36, + 124,0,106,1,124,1,106,1,107,2,111,38,124,0,106,2, + 124,1,106,2,107,2,111,38,124,0,106,3,124,1,106,3, + 107,2,111,38,124,2,124,1,106,0,107,2,111,38,124,0, + 106,4,124,1,106,4,107,2,111,38,124,0,106,5,124,1, + 106,5,107,2,87,0,83,0,4,0,116,6,121,50,1,0, 1,0,1,0,116,7,6,0,89,0,83,0,119,0,114,0, 0,0,0,41,8,114,129,0,0,0,114,20,0,0,0,114, 122,0,0,0,114,126,0,0,0,218,6,99,97,99,104,101, @@ -719,8 +719,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 108,101,83,112,101,99,46,95,95,101,113,95,95,99,1,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, 0,0,67,0,0,0,115,58,0,0,0,124,0,106,0,100, - 0,117,0,114,52,124,0,106,1,100,0,117,1,114,52,124, - 0,106,2,114,52,116,3,100,0,117,0,114,38,116,4,130, + 0,117,0,114,26,124,0,106,1,100,0,117,1,114,26,124, + 0,106,2,114,26,116,3,100,0,117,0,114,19,116,4,130, 1,116,3,160,5,124,0,106,1,161,1,124,0,95,0,124, 0,106,0,83,0,114,0,0,0,0,41,6,114,131,0,0, 0,114,126,0,0,0,114,130,0,0,0,218,19,95,98,111, @@ -739,7 +739,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 6,0,0,0,114,135,0,0,0,144,1,0,0,115,4,0, 0,0,10,2,255,128,99,1,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 32,0,0,0,124,0,106,0,100,1,117,0,114,26,124,0, + 32,0,0,0,124,0,106,0,100,1,117,0,114,13,124,0, 106,1,160,2,100,2,161,1,100,3,25,0,83,0,124,0, 106,1,83,0,41,4,122,32,84,104,101,32,110,97,109,101, 32,111,102,32,116,104,101,32,109,111,100,117,108,101,39,115, @@ -775,14 +775,14 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 128,114,125,0,0,0,169,2,114,126,0,0,0,114,128,0, 0,0,99,2,0,0,0,0,0,0,0,2,0,0,0,6, 0,0,0,8,0,0,0,67,0,0,0,115,150,0,0,0, - 116,0,124,1,100,1,131,2,114,74,116,1,100,2,117,0, - 114,22,116,2,130,1,116,1,106,3,125,4,124,3,100,2, - 117,0,114,48,124,4,124,0,124,1,100,3,141,2,83,0, - 124,3,114,56,103,0,110,2,100,2,125,5,124,4,124,0, + 116,0,124,1,100,1,131,2,114,37,116,1,100,2,117,0, + 114,11,116,2,130,1,116,1,106,3,125,4,124,3,100,2, + 117,0,114,24,124,4,124,0,124,1,100,3,141,2,83,0, + 124,3,114,28,103,0,110,1,100,2,125,5,124,4,124,0, 124,1,124,5,100,4,141,3,83,0,124,3,100,2,117,0, - 114,132,116,0,124,1,100,5,131,2,114,128,122,14,124,1, - 160,4,124,0,161,1,125,3,87,0,110,24,4,0,116,5, - 121,148,1,0,1,0,1,0,100,2,125,3,89,0,110,4, + 114,66,116,0,124,1,100,5,131,2,114,64,122,7,124,1, + 160,4,124,0,161,1,125,3,87,0,110,12,4,0,116,5, + 121,74,1,0,1,0,1,0,100,2,125,3,89,0,110,2, 100,6,125,3,116,6,124,0,124,1,124,2,124,3,100,7, 141,4,83,0,119,0,41,8,122,53,82,101,116,117,114,110, 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, @@ -802,158 +802,155 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 1,12,1,6,1,2,1,6,255,8,3,10,1,2,1,14, 1,12,1,8,1,4,3,16,2,2,250,255,128,114,104,0, 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,8, - 0,0,0,8,0,0,0,67,0,0,0,115,44,1,0,0, - 122,10,124,0,106,0,125,3,87,0,110,18,4,0,116,1, - 144,1,121,42,1,0,1,0,1,0,89,0,110,12,124,3, - 100,0,117,1,114,42,124,3,83,0,124,0,106,2,125,4, - 124,1,100,0,117,0,114,84,122,10,124,0,106,3,125,1, - 87,0,110,16,4,0,116,1,144,1,121,40,1,0,1,0, - 1,0,89,0,122,10,124,0,106,4,125,5,87,0,110,20, - 4,0,116,1,144,1,121,38,1,0,1,0,1,0,100,0, - 125,5,89,0,124,2,100,0,117,0,114,170,124,5,100,0, - 117,0,114,166,122,10,124,1,106,5,125,2,87,0,110,26, - 4,0,116,1,144,1,121,36,1,0,1,0,1,0,100,0, - 125,2,89,0,110,4,124,5,125,2,122,10,124,0,106,6, - 125,6,87,0,110,20,4,0,116,1,144,1,121,34,1,0, - 1,0,1,0,100,0,125,6,89,0,122,14,116,7,124,0, - 106,8,131,1,125,7,87,0,110,20,4,0,116,1,144,1, - 121,32,1,0,1,0,1,0,100,0,125,7,89,0,116,9, - 124,4,124,1,124,2,100,1,141,3,125,3,124,5,100,0, - 117,0,144,1,114,10,100,2,110,2,100,3,124,3,95,10, - 124,6,124,3,95,11,124,7,124,3,95,12,124,3,83,0, - 119,0,119,0,119,0,119,0,119,0,119,0,41,4,78,169, - 1,114,126,0,0,0,70,84,41,13,114,113,0,0,0,114, - 2,0,0,0,114,9,0,0,0,114,112,0,0,0,114,121, - 0,0,0,218,7,95,79,82,73,71,73,78,218,10,95,95, - 99,97,99,104,101,100,95,95,218,4,108,105,115,116,218,8, - 95,95,112,97,116,104,95,95,114,125,0,0,0,114,130,0, - 0,0,114,135,0,0,0,114,129,0,0,0,41,8,114,110, - 0,0,0,114,122,0,0,0,114,126,0,0,0,114,109,0, - 0,0,114,20,0,0,0,90,8,108,111,99,97,116,105,111, - 110,114,135,0,0,0,114,129,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,17,95,115,112,101, - 99,95,102,114,111,109,95,109,111,100,117,108,101,191,1,0, - 0,115,86,0,0,0,2,2,10,1,14,1,4,1,8,2, - 4,1,6,2,8,1,2,1,10,1,14,1,2,2,2,1, - 10,1,14,1,6,1,8,1,8,1,2,1,10,1,14,1, - 8,1,4,2,2,1,10,1,14,1,6,1,2,1,14,1, - 14,1,6,1,14,2,20,1,6,1,6,1,4,1,2,249, - 2,252,2,250,2,250,2,251,2,246,255,128,114,155,0,0, - 0,70,169,1,218,8,111,118,101,114,114,105,100,101,99,2, - 0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,8, - 0,0,0,67,0,0,0,115,210,1,0,0,124,2,115,20, - 116,0,124,1,100,1,100,0,131,3,100,0,117,0,114,50, - 122,12,124,0,106,1,124,1,95,2,87,0,110,16,4,0, - 116,3,144,1,121,208,1,0,1,0,1,0,89,0,124,2, - 115,70,116,0,124,1,100,2,100,0,131,3,100,0,117,0, - 114,170,124,0,106,4,125,3,124,3,100,0,117,0,114,142, - 124,0,106,5,100,0,117,1,114,142,116,6,100,0,117,0, - 114,106,116,7,130,1,116,6,106,8,125,4,124,4,160,9, + 0,0,0,8,0,0,0,67,0,0,0,115,30,1,0,0, + 122,5,124,0,106,0,125,3,87,0,110,8,4,0,116,1, + 121,142,1,0,1,0,1,0,89,0,110,6,124,3,100,0, + 117,1,114,20,124,3,83,0,124,0,106,2,125,4,124,1, + 100,0,117,0,114,40,122,5,124,0,106,3,125,1,87,0, + 110,7,4,0,116,1,121,141,1,0,1,0,1,0,89,0, + 122,5,124,0,106,4,125,5,87,0,110,9,4,0,116,1, + 121,140,1,0,1,0,1,0,100,0,125,5,89,0,124,2, + 100,0,117,0,114,81,124,5,100,0,117,0,114,79,122,5, + 124,1,106,5,125,2,87,0,110,12,4,0,116,1,121,139, + 1,0,1,0,1,0,100,0,125,2,89,0,110,2,124,5, + 125,2,122,5,124,0,106,6,125,6,87,0,110,9,4,0, + 116,1,121,138,1,0,1,0,1,0,100,0,125,6,89,0, + 122,7,116,7,124,0,106,8,131,1,125,7,87,0,110,9, + 4,0,116,1,121,137,1,0,1,0,1,0,100,0,125,7, + 89,0,116,9,124,4,124,1,124,2,100,1,141,3,125,3, + 124,5,100,0,117,0,114,126,100,2,110,1,100,3,124,3, + 95,10,124,6,124,3,95,11,124,7,124,3,95,12,124,3, + 83,0,119,0,119,0,119,0,119,0,119,0,119,0,41,4, + 78,169,1,114,126,0,0,0,70,84,41,13,114,113,0,0, + 0,114,2,0,0,0,114,9,0,0,0,114,112,0,0,0, + 114,121,0,0,0,218,7,95,79,82,73,71,73,78,218,10, + 95,95,99,97,99,104,101,100,95,95,218,4,108,105,115,116, + 218,8,95,95,112,97,116,104,95,95,114,125,0,0,0,114, + 130,0,0,0,114,135,0,0,0,114,129,0,0,0,41,8, + 114,110,0,0,0,114,122,0,0,0,114,126,0,0,0,114, + 109,0,0,0,114,20,0,0,0,90,8,108,111,99,97,116, + 105,111,110,114,135,0,0,0,114,129,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,17,95,115, + 112,101,99,95,102,114,111,109,95,109,111,100,117,108,101,191, + 1,0,0,115,86,0,0,0,2,2,10,1,12,1,4,1, + 8,2,4,1,6,2,8,1,2,1,10,1,12,1,2,2, + 2,1,10,1,12,1,6,1,8,1,8,1,2,1,10,1, + 12,1,8,1,4,2,2,1,10,1,12,1,6,1,2,1, + 14,1,12,1,6,1,14,2,18,1,6,1,6,1,4,1, + 2,249,2,252,2,250,2,250,2,251,2,246,255,128,114,155, + 0,0,0,70,169,1,218,8,111,118,101,114,114,105,100,101, + 99,2,0,0,0,0,0,0,0,1,0,0,0,5,0,0, + 0,8,0,0,0,67,0,0,0,115,178,1,0,0,124,2, + 115,10,116,0,124,1,100,1,100,0,131,3,100,0,117,0, + 114,24,122,6,124,0,106,1,124,1,95,2,87,0,110,7, + 4,0,116,3,121,216,1,0,1,0,1,0,89,0,124,2, + 115,34,116,0,124,1,100,2,100,0,131,3,100,0,117,0, + 114,83,124,0,106,4,125,3,124,3,100,0,117,0,114,70, + 124,0,106,5,100,0,117,1,114,70,116,6,100,0,117,0, + 114,52,116,7,130,1,116,6,106,8,125,4,124,4,160,9, 124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3, - 124,0,95,4,100,0,124,1,95,11,122,10,124,3,124,1, - 95,12,87,0,110,16,4,0,116,3,144,1,121,206,1,0, - 1,0,1,0,89,0,124,2,115,190,116,0,124,1,100,3, - 100,0,131,3,100,0,117,0,114,220,122,12,124,0,106,13, - 124,1,95,14,87,0,110,16,4,0,116,3,144,1,121,204, - 1,0,1,0,1,0,89,0,122,10,124,0,124,1,95,15, - 87,0,110,16,4,0,116,3,144,1,121,202,1,0,1,0, - 1,0,89,0,124,2,144,1,115,16,116,0,124,1,100,4, - 100,0,131,3,100,0,117,0,144,1,114,58,124,0,106,5, - 100,0,117,1,144,1,114,58,122,12,124,0,106,5,124,1, - 95,16,87,0,110,16,4,0,116,3,144,1,121,200,1,0, - 1,0,1,0,89,0,124,0,106,17,144,1,114,192,124,2, - 144,1,115,90,116,0,124,1,100,5,100,0,131,3,100,0, - 117,0,144,1,114,120,122,12,124,0,106,18,124,1,95,11, - 87,0,110,16,4,0,116,3,144,1,121,198,1,0,1,0, - 1,0,89,0,124,2,144,1,115,144,116,0,124,1,100,6, - 100,0,131,3,100,0,117,0,144,1,114,192,124,0,106,19, - 100,0,117,1,144,1,114,192,122,14,124,0,106,19,124,1, - 95,20,87,0,124,1,83,0,4,0,116,3,144,1,121,196, - 1,0,1,0,1,0,89,0,124,1,83,0,124,1,83,0, - 119,0,119,0,119,0,119,0,119,0,119,0,119,0,41,7, - 78,114,9,0,0,0,114,112,0,0,0,218,11,95,95,112, - 97,99,107,97,103,101,95,95,114,154,0,0,0,114,121,0, - 0,0,114,152,0,0,0,41,21,114,13,0,0,0,114,20, - 0,0,0,114,9,0,0,0,114,2,0,0,0,114,122,0, - 0,0,114,129,0,0,0,114,139,0,0,0,114,140,0,0, - 0,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,218,7,95,95,110,101,119,95,95,90,5,95,112, - 97,116,104,114,121,0,0,0,114,112,0,0,0,114,143,0, - 0,0,114,158,0,0,0,114,113,0,0,0,114,154,0,0, - 0,114,136,0,0,0,114,126,0,0,0,114,135,0,0,0, - 114,152,0,0,0,41,5,114,109,0,0,0,114,110,0,0, - 0,114,157,0,0,0,114,122,0,0,0,114,159,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 18,95,105,110,105,116,95,109,111,100,117,108,101,95,97,116, - 116,114,115,236,1,0,0,115,114,0,0,0,20,4,2,1, - 12,1,14,1,2,1,20,2,6,1,8,1,10,2,8,1, - 4,1,6,1,10,2,8,1,6,1,6,11,2,1,10,1, - 14,1,2,1,20,2,2,1,12,1,14,1,2,1,2,2, - 10,1,14,1,2,1,24,2,12,1,2,1,12,1,14,1, - 2,1,8,2,24,1,2,1,12,1,14,1,2,1,24,2, - 12,1,2,1,10,1,4,3,14,254,2,1,8,1,2,254, - 2,249,2,249,2,249,2,251,2,250,2,228,255,128,114,161, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,82,0,0, - 0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114, - 30,124,0,106,1,160,2,124,0,161,1,125,1,110,20,116, - 0,124,0,106,1,100,3,131,2,114,50,116,3,100,4,131, - 1,130,1,124,1,100,1,117,0,114,68,116,4,124,0,106, - 5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124, - 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32, - 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, - 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101, - 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117, - 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122, - 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101, - 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102, - 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108, - 101,40,41,41,7,114,11,0,0,0,114,122,0,0,0,114, - 162,0,0,0,114,87,0,0,0,114,21,0,0,0,114,20, - 0,0,0,114,161,0,0,0,169,2,114,109,0,0,0,114, - 110,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,218,16,109,111,100,117,108,101,95,102,114,111,109, - 95,115,112,101,99,52,2,0,0,115,20,0,0,0,4,3, - 12,1,14,3,12,1,8,1,8,2,10,1,10,1,4,1, - 255,128,114,165,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,4,0,0,0,67,0,0,0, - 115,100,0,0,0,124,0,106,0,100,1,117,0,114,14,100, - 2,110,4,124,0,106,0,125,1,124,0,106,1,100,1,117, - 0,114,64,124,0,106,2,100,1,117,0,114,50,100,3,160, - 3,124,1,161,1,83,0,100,4,160,3,124,1,124,0,106, - 2,161,2,83,0,124,0,106,4,114,84,100,5,160,3,124, - 1,124,0,106,1,161,2,83,0,100,6,160,3,124,0,106, - 0,124,0,106,1,161,2,83,0,41,7,122,38,82,101,116, - 117,114,110,32,116,104,101,32,114,101,112,114,32,116,111,32, - 117,115,101,32,102,111,114,32,116,104,101,32,109,111,100,117, - 108,101,46,78,114,115,0,0,0,114,116,0,0,0,114,117, - 0,0,0,114,118,0,0,0,250,18,60,109,111,100,117,108, - 101,32,123,33,114,125,32,40,123,125,41,62,41,5,114,20, - 0,0,0,114,126,0,0,0,114,122,0,0,0,114,50,0, - 0,0,114,136,0,0,0,41,2,114,109,0,0,0,114,20, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,119,0,0,0,69,2,0,0,115,18,0,0,0, - 20,3,10,1,10,1,10,1,14,2,6,2,14,1,16,2, - 255,128,114,119,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,0, - 115,26,1,0,0,124,0,106,0,125,2,116,1,124,2,131, - 1,143,246,1,0,116,2,106,3,160,4,124,2,161,1,124, - 1,117,1,114,54,100,1,160,5,124,2,161,1,125,3,116, - 6,124,3,124,2,100,2,141,2,130,1,122,160,124,0,106, - 7,100,3,117,0,114,106,124,0,106,8,100,3,117,0,114, - 90,116,6,100,4,124,0,106,0,100,2,141,2,130,1,116, - 9,124,0,124,1,100,5,100,6,141,3,1,0,110,80,116, - 9,124,0,124,1,100,5,100,6,141,3,1,0,116,10,124, - 0,106,7,100,7,131,2,115,174,116,11,124,0,106,7,131, - 1,155,0,100,8,157,2,125,3,116,12,160,13,124,3,116, - 14,161,2,1,0,124,0,106,7,160,15,124,2,161,1,1, - 0,110,12,124,0,106,7,160,16,124,1,161,1,1,0,87, - 0,116,2,106,3,160,17,124,0,106,0,161,1,125,1,124, - 1,116,2,106,3,124,0,106,0,60,0,110,28,116,2,106, - 3,160,17,124,0,106,0,161,1,125,1,124,1,116,2,106, - 3,124,0,106,0,60,0,119,0,87,0,100,3,4,0,4, - 0,131,3,1,0,124,1,83,0,49,0,144,1,115,12,119, + 124,0,95,4,100,0,124,1,95,11,122,5,124,3,124,1, + 95,12,87,0,110,7,4,0,116,3,121,215,1,0,1,0, + 1,0,89,0,124,2,115,93,116,0,124,1,100,3,100,0, + 131,3,100,0,117,0,114,107,122,6,124,0,106,13,124,1, + 95,14,87,0,110,7,4,0,116,3,121,214,1,0,1,0, + 1,0,89,0,122,5,124,0,124,1,95,15,87,0,110,7, + 4,0,116,3,121,213,1,0,1,0,1,0,89,0,124,2, + 115,130,116,0,124,1,100,4,100,0,131,3,100,0,117,0, + 114,149,124,0,106,5,100,0,117,1,114,149,122,6,124,0, + 106,5,124,1,95,16,87,0,110,7,4,0,116,3,121,212, + 1,0,1,0,1,0,89,0,124,0,106,17,114,208,124,2, + 115,162,116,0,124,1,100,5,100,0,131,3,100,0,117,0, + 114,176,122,6,124,0,106,18,124,1,95,11,87,0,110,7, + 4,0,116,3,121,211,1,0,1,0,1,0,89,0,124,2, + 115,186,116,0,124,1,100,6,100,0,131,3,100,0,117,0, + 114,208,124,0,106,19,100,0,117,1,114,208,122,7,124,0, + 106,19,124,1,95,20,87,0,124,1,83,0,4,0,116,3, + 121,210,1,0,1,0,1,0,89,0,124,1,83,0,124,1, + 83,0,119,0,119,0,119,0,119,0,119,0,119,0,119,0, + 41,7,78,114,9,0,0,0,114,112,0,0,0,218,11,95, + 95,112,97,99,107,97,103,101,95,95,114,154,0,0,0,114, + 121,0,0,0,114,152,0,0,0,41,21,114,13,0,0,0, + 114,20,0,0,0,114,9,0,0,0,114,2,0,0,0,114, + 122,0,0,0,114,129,0,0,0,114,139,0,0,0,114,140, + 0,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,218,7,95,95,110,101,119,95,95,90,5, + 95,112,97,116,104,114,121,0,0,0,114,112,0,0,0,114, + 143,0,0,0,114,158,0,0,0,114,113,0,0,0,114,154, + 0,0,0,114,136,0,0,0,114,126,0,0,0,114,135,0, + 0,0,114,152,0,0,0,41,5,114,109,0,0,0,114,110, + 0,0,0,114,157,0,0,0,114,122,0,0,0,114,159,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,18,95,105,110,105,116,95,109,111,100,117,108,101,95, + 97,116,116,114,115,236,1,0,0,115,114,0,0,0,20,4, + 2,1,12,1,12,1,2,1,20,2,6,1,8,1,10,2, + 8,1,4,1,6,1,10,2,8,1,6,1,6,11,2,1, + 10,1,12,1,2,1,20,2,2,1,12,1,12,1,2,1, + 2,2,10,1,12,1,2,1,20,2,10,1,2,1,12,1, + 12,1,2,1,6,2,20,1,2,1,12,1,12,1,2,1, + 20,2,10,1,2,1,10,1,4,3,12,254,2,1,8,1, + 2,254,2,249,2,249,2,249,2,251,2,250,2,228,255,128, + 114,161,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,82, + 0,0,0,100,1,125,1,116,0,124,0,106,1,100,2,131, + 2,114,15,124,0,106,1,160,2,124,0,161,1,125,1,110, + 10,116,0,124,0,106,1,100,3,131,2,114,25,116,3,100, + 4,131,1,130,1,124,1,100,1,117,0,114,34,116,4,124, + 0,106,5,131,1,125,1,116,6,124,0,124,1,131,2,1, + 0,124,1,83,0,41,5,122,43,67,114,101,97,116,101,32, + 97,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, + 110,32,116,104,101,32,112,114,111,118,105,100,101,100,32,115, + 112,101,99,46,78,218,13,99,114,101,97,116,101,95,109,111, + 100,117,108,101,218,11,101,120,101,99,95,109,111,100,117,108, + 101,122,66,108,111,97,100,101,114,115,32,116,104,97,116,32, + 100,101,102,105,110,101,32,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,109,117,115,116,32,97,108,115,111,32,100, + 101,102,105,110,101,32,99,114,101,97,116,101,95,109,111,100, + 117,108,101,40,41,41,7,114,11,0,0,0,114,122,0,0, + 0,114,162,0,0,0,114,87,0,0,0,114,21,0,0,0, + 114,20,0,0,0,114,161,0,0,0,169,2,114,109,0,0, + 0,114,110,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,218,16,109,111,100,117,108,101,95,102,114, + 111,109,95,115,112,101,99,52,2,0,0,115,20,0,0,0, + 4,3,12,1,14,3,12,1,8,1,8,2,10,1,10,1, + 4,1,255,128,114,165,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,100,0,0,0,124,0,106,0,100,1,117,0,114, + 7,100,2,110,2,124,0,106,0,125,1,124,0,106,1,100, + 1,117,0,114,32,124,0,106,2,100,1,117,0,114,25,100, + 3,160,3,124,1,161,1,83,0,100,4,160,3,124,1,124, + 0,106,2,161,2,83,0,124,0,106,4,114,42,100,5,160, + 3,124,1,124,0,106,1,161,2,83,0,100,6,160,3,124, + 0,106,0,124,0,106,1,161,2,83,0,41,7,122,38,82, + 101,116,117,114,110,32,116,104,101,32,114,101,112,114,32,116, + 111,32,117,115,101,32,102,111,114,32,116,104,101,32,109,111, + 100,117,108,101,46,78,114,115,0,0,0,114,116,0,0,0, + 114,117,0,0,0,114,118,0,0,0,250,18,60,109,111,100, + 117,108,101,32,123,33,114,125,32,40,123,125,41,62,41,5, + 114,20,0,0,0,114,126,0,0,0,114,122,0,0,0,114, + 50,0,0,0,114,136,0,0,0,41,2,114,109,0,0,0, + 114,20,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,119,0,0,0,69,2,0,0,115,18,0, + 0,0,20,3,10,1,10,1,10,1,14,2,6,2,14,1, + 16,2,255,128,114,119,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,10,0,0,0,67,0, + 0,0,115,24,1,0,0,124,0,106,0,125,2,116,1,124, + 2,131,1,143,123,1,0,116,2,106,3,160,4,124,2,161, + 1,124,1,117,1,114,27,100,1,160,5,124,2,161,1,125, + 3,116,6,124,3,124,2,100,2,141,2,130,1,122,80,124, + 0,106,7,100,3,117,0,114,53,124,0,106,8,100,3,117, + 0,114,45,116,6,100,4,124,0,106,0,100,2,141,2,130, + 1,116,9,124,0,124,1,100,5,100,6,141,3,1,0,110, + 40,116,9,124,0,124,1,100,5,100,6,141,3,1,0,116, + 10,124,0,106,7,100,7,131,2,115,87,116,11,124,0,106, + 7,131,1,155,0,100,8,157,2,125,3,116,12,160,13,124, + 3,116,14,161,2,1,0,124,0,106,7,160,15,124,2,161, + 1,1,0,110,6,124,0,106,7,160,16,124,1,161,1,1, + 0,87,0,116,2,106,3,160,17,124,0,106,0,161,1,125, + 1,124,1,116,2,106,3,124,0,106,0,60,0,110,14,116, + 2,106,3,160,17,124,0,106,0,161,1,125,1,124,1,116, + 2,106,3,124,0,106,0,60,0,119,0,87,0,100,3,4, + 0,4,0,131,3,1,0,124,1,83,0,49,0,115,133,119, 1,1,0,1,0,1,0,89,0,1,0,124,1,83,0,41, 9,122,70,69,120,101,99,117,116,101,32,116,104,101,32,115, 112,101,99,39,115,32,115,112,101,99,105,102,105,101,100,32, @@ -980,895 +977,893 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 50,0,0,0,6,2,10,1,16,1,10,1,12,1,2,1, 10,1,10,1,14,1,16,2,14,2,12,1,16,1,12,2, 14,1,12,2,2,128,14,4,14,1,14,255,26,1,4,1, - 18,128,4,0,255,128,114,106,0,0,0,99,1,0,0,0, + 16,128,4,0,255,128,114,106,0,0,0,99,1,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0, - 67,0,0,0,115,18,1,0,0,122,18,124,0,106,0,160, - 1,124,0,106,2,161,1,1,0,87,0,110,46,1,0,1, - 0,1,0,124,0,106,2,116,3,106,4,118,0,114,64,116, + 67,0,0,0,115,10,1,0,0,122,9,124,0,106,0,160, + 1,124,0,106,2,161,1,1,0,87,0,110,23,1,0,1, + 0,1,0,124,0,106,2,116,3,106,4,118,0,114,32,116, 3,106,4,160,5,124,0,106,2,161,1,125,1,124,1,116, 3,106,4,124,0,106,2,60,0,130,0,116,3,106,4,160, 5,124,0,106,2,161,1,125,1,124,1,116,3,106,4,124, 0,106,2,60,0,116,6,124,1,100,1,100,0,131,3,100, - 0,117,0,114,138,122,12,124,0,106,0,124,1,95,7,87, - 0,110,16,4,0,116,8,144,1,121,16,1,0,1,0,1, - 0,89,0,116,6,124,1,100,2,100,0,131,3,100,0,117, - 0,114,212,122,40,124,1,106,9,124,1,95,10,116,11,124, - 1,100,3,131,2,115,192,124,0,106,2,160,12,100,4,161, - 1,100,5,25,0,124,1,95,10,87,0,110,16,4,0,116, - 8,144,1,121,14,1,0,1,0,1,0,89,0,116,6,124, - 1,100,6,100,0,131,3,100,0,117,0,144,1,114,8,122, - 12,124,0,124,1,95,13,87,0,124,1,83,0,4,0,116, - 8,144,1,121,12,1,0,1,0,1,0,89,0,124,1,83, - 0,124,1,83,0,119,0,119,0,119,0,41,7,78,114,112, - 0,0,0,114,158,0,0,0,114,154,0,0,0,114,141,0, - 0,0,114,25,0,0,0,114,113,0,0,0,41,14,114,122, - 0,0,0,114,170,0,0,0,114,20,0,0,0,114,18,0, - 0,0,114,105,0,0,0,114,171,0,0,0,114,13,0,0, - 0,114,112,0,0,0,114,2,0,0,0,114,9,0,0,0, - 114,158,0,0,0,114,11,0,0,0,114,142,0,0,0,114, - 113,0,0,0,114,164,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,25,95,108,111,97,100,95, - 98,97,99,107,119,97,114,100,95,99,111,109,112,97,116,105, - 98,108,101,116,2,0,0,115,66,0,0,0,2,3,18,1, - 6,1,12,1,14,1,12,1,2,1,14,3,12,1,16,1, - 2,1,12,1,14,1,2,1,16,1,2,1,8,4,10,1, - 18,1,4,128,14,1,2,1,18,1,2,1,8,1,4,3, - 14,254,2,1,8,1,2,254,2,251,2,246,255,128,114,172, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,11,0,0,0,67,0,0,0,115,242,0,0, - 0,124,0,106,0,100,0,117,1,114,58,116,1,124,0,106, - 0,100,1,131,2,115,58,116,2,124,0,106,0,131,1,155, - 0,100,2,157,2,125,1,116,3,160,4,124,1,116,5,161, - 2,1,0,116,6,124,0,131,1,83,0,116,7,124,0,131, - 1,125,2,100,3,124,0,95,8,122,158,124,2,116,9,106, - 10,124,0,106,11,60,0,122,52,124,0,106,0,100,0,117, - 0,114,124,124,0,106,12,100,0,117,0,114,122,116,13,100, - 4,124,0,106,11,100,5,141,2,130,1,110,12,124,0,106, - 0,160,14,124,2,161,1,1,0,87,0,110,38,1,0,1, - 0,1,0,122,14,116,9,106,10,124,0,106,11,61,0,87, - 0,130,0,4,0,116,15,121,240,1,0,1,0,1,0,89, - 0,130,0,116,9,106,10,160,16,124,0,106,11,161,1,125, - 2,124,2,116,9,106,10,124,0,106,11,60,0,116,17,100, - 6,124,0,106,11,124,0,106,0,131,3,1,0,87,0,100, - 7,124,0,95,8,124,2,83,0,100,7,124,0,95,8,119, - 0,119,0,41,8,78,114,163,0,0,0,114,168,0,0,0, - 84,114,167,0,0,0,114,19,0,0,0,122,18,105,109,112, - 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,70, - 41,18,114,122,0,0,0,114,11,0,0,0,114,7,0,0, - 0,114,101,0,0,0,114,102,0,0,0,114,169,0,0,0, - 114,172,0,0,0,114,165,0,0,0,90,13,95,105,110,105, - 116,105,97,108,105,122,105,110,103,114,18,0,0,0,114,105, - 0,0,0,114,20,0,0,0,114,129,0,0,0,114,87,0, - 0,0,114,163,0,0,0,114,70,0,0,0,114,171,0,0, - 0,114,83,0,0,0,41,3,114,109,0,0,0,114,108,0, - 0,0,114,110,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,218,14,95,108,111,97,100,95,117,110, - 108,111,99,107,101,100,152,2,0,0,115,62,0,0,0,10, - 2,12,2,16,1,12,2,8,1,8,2,6,5,2,1,12, - 1,2,1,10,1,10,1,14,1,2,255,12,4,4,128,6, - 1,2,1,12,1,2,3,12,254,2,1,2,1,14,5,12, - 1,18,1,6,2,4,2,8,254,2,245,255,128,114,173,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,8,0,0,0,67,0,0,0,115,54,0,0,0, - 116,0,124,0,106,1,131,1,143,24,1,0,116,2,124,0, - 131,1,87,0,2,0,100,1,4,0,4,0,131,3,1,0, - 83,0,49,0,115,40,119,1,1,0,1,0,1,0,89,0, - 1,0,100,1,83,0,41,2,122,191,82,101,116,117,114,110, - 32,97,32,110,101,119,32,109,111,100,117,108,101,32,111,98, - 106,101,99,116,44,32,108,111,97,100,101,100,32,98,121,32, - 116,104,101,32,115,112,101,99,39,115,32,108,111,97,100,101, - 114,46,10,10,32,32,32,32,84,104,101,32,109,111,100,117, - 108,101,32,105,115,32,110,111,116,32,97,100,100,101,100,32, - 116,111,32,105,116,115,32,112,97,114,101,110,116,46,10,10, - 32,32,32,32,73,102,32,97,32,109,111,100,117,108,101,32, - 105,115,32,97,108,114,101,97,100,121,32,105,110,32,115,121, - 115,46,109,111,100,117,108,101,115,44,32,116,104,97,116,32, - 101,120,105,115,116,105,110,103,32,109,111,100,117,108,101,32, - 103,101,116,115,10,32,32,32,32,99,108,111,98,98,101,114, - 101,100,46,10,10,32,32,32,32,78,41,3,114,57,0,0, - 0,114,20,0,0,0,114,173,0,0,0,169,1,114,109,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,107,0,0,0,197,2,0,0,115,8,0,0,0,12, - 9,22,1,20,128,255,128,114,107,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,64,0,0,0,115,140,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,90,4,101,5,100,3,100,4, - 132,0,131,1,90,6,101,7,100,20,100,6,100,7,132,1, - 131,1,90,8,101,7,100,21,100,8,100,9,132,1,131,1, - 90,9,101,5,100,10,100,11,132,0,131,1,90,10,101,5, - 100,12,100,13,132,0,131,1,90,11,101,7,101,12,100,14, - 100,15,132,0,131,1,131,1,90,13,101,7,101,12,100,16, - 100,17,132,0,131,1,131,1,90,14,101,7,101,12,100,18, - 100,19,132,0,131,1,131,1,90,15,101,7,101,16,131,1, - 90,17,100,5,83,0,41,22,218,15,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,122,144,77,101,116,97,32, - 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, - 46,10,10,32,32,32,32,65,108,108,32,109,101,116,104,111, - 100,115,32,97,114,101,32,101,105,116,104,101,114,32,99,108, - 97,115,115,32,111,114,32,115,116,97,116,105,99,32,109,101, - 116,104,111,100,115,32,116,111,32,97,118,111,105,100,32,116, - 104,101,32,110,101,101,100,32,116,111,10,32,32,32,32,105, - 110,115,116,97,110,116,105,97,116,101,32,116,104,101,32,99, - 108,97,115,115,46,10,10,32,32,32,32,122,8,98,117,105, - 108,116,45,105,110,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,34, - 0,0,0,116,0,160,1,100,1,116,2,161,2,1,0,100, - 2,124,0,106,3,155,2,100,3,116,4,106,5,155,0,100, - 4,157,5,83,0,41,6,250,115,82,101,116,117,114,110,32, - 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, - 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, - 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, - 102,46,10,10,32,32,32,32,32,32,32,32,122,81,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,109,111, - 100,117,108,101,95,114,101,112,114,40,41,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, - 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, - 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,122, - 8,60,109,111,100,117,108,101,32,122,2,32,40,122,2,41, - 62,78,41,6,114,101,0,0,0,114,102,0,0,0,114,103, - 0,0,0,114,9,0,0,0,114,175,0,0,0,114,151,0, - 0,0,169,1,114,110,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,114,0,0,0,223,2,0, - 0,115,10,0,0,0,6,7,2,1,4,255,22,2,255,128, - 122,27,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, - 0,0,0,67,0,0,0,115,42,0,0,0,124,2,100,0, - 117,1,114,12,100,0,83,0,116,0,160,1,124,1,161,1, - 114,38,116,2,124,1,124,0,124,0,106,3,100,1,141,3, - 83,0,100,0,83,0,169,2,78,114,150,0,0,0,41,4, - 114,64,0,0,0,90,10,105,115,95,98,117,105,108,116,105, - 110,114,104,0,0,0,114,151,0,0,0,169,4,218,3,99, - 108,115,114,89,0,0,0,218,4,112,97,116,104,218,6,116, - 97,114,103,101,116,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,9,102,105,110,100,95,115,112,101,99,234, - 2,0,0,115,12,0,0,0,8,2,4,1,10,1,16,1, - 4,2,255,128,122,25,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,99, - 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 4,0,0,0,67,0,0,0,115,30,0,0,0,124,0,160, - 0,124,1,124,2,161,2,125,3,124,3,100,1,117,1,114, - 26,124,3,106,1,83,0,100,1,83,0,41,2,122,175,70, - 105,110,100,32,116,104,101,32,98,117,105,108,116,45,105,110, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,73,102,32,39,112,97,116,104,39,32,105,115,32,101, - 118,101,114,32,115,112,101,99,105,102,105,101,100,32,116,104, - 101,110,32,116,104,101,32,115,101,97,114,99,104,32,105,115, - 32,99,111,110,115,105,100,101,114,101,100,32,97,32,102,97, - 105,108,117,114,101,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, - 2,114,183,0,0,0,114,122,0,0,0,41,4,114,180,0, - 0,0,114,89,0,0,0,114,181,0,0,0,114,109,0,0, + 0,117,0,114,68,122,6,124,0,106,0,124,1,95,7,87, + 0,110,7,4,0,116,8,121,132,1,0,1,0,1,0,89, + 0,116,6,124,1,100,2,100,0,131,3,100,0,117,0,114, + 104,122,20,124,1,106,9,124,1,95,10,116,11,124,1,100, + 3,131,2,115,95,124,0,106,2,160,12,100,4,161,1,100, + 5,25,0,124,1,95,10,87,0,110,7,4,0,116,8,121, + 131,1,0,1,0,1,0,89,0,116,6,124,1,100,6,100, + 0,131,3,100,0,117,0,114,128,122,6,124,0,124,1,95, + 13,87,0,124,1,83,0,4,0,116,8,121,130,1,0,1, + 0,1,0,89,0,124,1,83,0,124,1,83,0,119,0,119, + 0,119,0,41,7,78,114,112,0,0,0,114,158,0,0,0, + 114,154,0,0,0,114,141,0,0,0,114,25,0,0,0,114, + 113,0,0,0,41,14,114,122,0,0,0,114,170,0,0,0, + 114,20,0,0,0,114,18,0,0,0,114,105,0,0,0,114, + 171,0,0,0,114,13,0,0,0,114,112,0,0,0,114,2, + 0,0,0,114,9,0,0,0,114,158,0,0,0,114,11,0, + 0,0,114,142,0,0,0,114,113,0,0,0,114,164,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,11,102,105,110,100,95,109,111,100,117,108,101,243,2,0, - 0,115,6,0,0,0,12,9,18,1,255,128,122,27,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, - 0,0,115,46,0,0,0,124,0,106,0,116,1,106,2,118, - 1,114,34,116,3,100,1,160,4,124,0,106,0,161,1,124, - 0,106,0,100,2,141,2,130,1,116,5,116,6,106,7,124, - 0,131,2,83,0,41,4,122,24,67,114,101,97,116,101,32, - 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,114,85,0,0,0,114,19,0,0,0,78,41,8,114,20, - 0,0,0,114,18,0,0,0,114,86,0,0,0,114,87,0, - 0,0,114,50,0,0,0,114,74,0,0,0,114,64,0,0, - 0,90,14,99,114,101,97,116,101,95,98,117,105,108,116,105, - 110,114,174,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,162,0,0,0,255,2,0,0,115,12, - 0,0,0,12,3,12,1,4,1,6,255,12,2,255,128,122, - 29,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, - 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,16,0,0,0,116,0,116,1, - 106,2,124,0,131,2,1,0,100,1,83,0,41,2,122,22, - 69,120,101,99,32,97,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,78,41,3,114,74,0,0,0,114,64, - 0,0,0,90,12,101,120,101,99,95,98,117,105,108,116,105, - 110,114,177,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,163,0,0,0,7,3,0,0,115,4, - 0,0,0,16,3,255,128,122,27,66,117,105,108,116,105,110, - 73,109,112,111,114,116,101,114,46,101,120,101,99,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,243,4,0, - 0,0,100,1,83,0,41,2,122,57,82,101,116,117,114,110, - 32,78,111,110,101,32,97,115,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,116, - 32,104,97,118,101,32,99,111,100,101,32,111,98,106,101,99, - 116,115,46,78,114,5,0,0,0,169,2,114,180,0,0,0, - 114,89,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,8,103,101,116,95,99,111,100,101,12,3, - 0,0,243,4,0,0,0,4,4,255,128,122,24,66,117,105, - 108,116,105,110,73,109,112,111,114,116,101,114,46,103,101,116, - 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,185, - 0,0,0,41,2,122,56,82,101,116,117,114,110,32,78,111, - 110,101,32,97,115,32,98,117,105,108,116,45,105,110,32,109, - 111,100,117,108,101,115,32,100,111,32,110,111,116,32,104,97, - 118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,78, - 114,5,0,0,0,114,186,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,10,103,101,116,95,115, - 111,117,114,99,101,18,3,0,0,114,188,0,0,0,122,26, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,114,185,0,0,0,41,3,122,52,82,101,116,117, - 114,110,32,70,97,108,115,101,32,97,115,32,98,117,105,108, - 116,45,105,110,32,109,111,100,117,108,101,115,32,97,114,101, - 32,110,101,118,101,114,32,112,97,99,107,97,103,101,115,46, - 70,78,114,5,0,0,0,114,186,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,114,128,0,0,0, - 24,3,0,0,114,188,0,0,0,122,26,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, - 99,107,97,103,101,41,2,78,78,41,1,78,41,18,114,9, - 0,0,0,114,8,0,0,0,114,1,0,0,0,114,10,0, - 0,0,114,151,0,0,0,218,12,115,116,97,116,105,99,109, - 101,116,104,111,100,114,114,0,0,0,218,11,99,108,97,115, - 115,109,101,116,104,111,100,114,183,0,0,0,114,184,0,0, - 0,114,162,0,0,0,114,163,0,0,0,114,95,0,0,0, - 114,187,0,0,0,114,189,0,0,0,114,128,0,0,0,114, - 111,0,0,0,114,170,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,175,0, - 0,0,212,2,0,0,115,48,0,0,0,8,0,4,2,4, - 7,2,2,10,1,2,10,12,1,2,8,12,1,2,11,10, - 1,2,7,10,1,2,4,2,1,12,1,2,4,2,1,12, - 1,2,4,2,1,12,1,12,4,255,128,114,175,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,64,0,0,0,115,144,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,90,4,101,5, - 100,3,100,4,132,0,131,1,90,6,101,7,100,22,100,6, - 100,7,132,1,131,1,90,8,101,7,100,23,100,8,100,9, - 132,1,131,1,90,9,101,5,100,10,100,11,132,0,131,1, - 90,10,101,5,100,12,100,13,132,0,131,1,90,11,101,7, - 100,14,100,15,132,0,131,1,90,12,101,7,101,13,100,16, - 100,17,132,0,131,1,131,1,90,14,101,7,101,13,100,18, - 100,19,132,0,131,1,131,1,90,15,101,7,101,13,100,20, - 100,21,132,0,131,1,131,1,90,16,100,5,83,0,41,24, - 218,14,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 122,142,77,101,116,97,32,112,97,116,104,32,105,109,112,111, - 114,116,32,102,111,114,32,102,114,111,122,101,110,32,109,111, - 100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,32, - 109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,104, - 101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,116, - 105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,118, - 111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,10, - 32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,32, - 116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,32, - 90,6,102,114,111,122,101,110,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, - 0,115,28,0,0,0,116,0,160,1,100,1,116,2,161,2, - 1,0,100,2,160,3,124,0,106,4,116,5,106,6,161,2, - 83,0,41,4,114,176,0,0,0,122,80,70,114,111,122,101, + 218,25,95,108,111,97,100,95,98,97,99,107,119,97,114,100, + 95,99,111,109,112,97,116,105,98,108,101,116,2,0,0,115, + 66,0,0,0,2,3,18,1,6,1,12,1,14,1,12,1, + 2,1,14,3,12,1,16,1,2,1,12,1,12,1,2,1, + 16,1,2,1,8,4,10,1,18,1,4,128,12,1,2,1, + 16,1,2,1,8,1,4,3,12,254,2,1,8,1,2,254, + 2,251,2,246,255,128,114,172,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, + 67,0,0,0,115,242,0,0,0,124,0,106,0,100,0,117, + 1,114,29,116,1,124,0,106,0,100,1,131,2,115,29,116, + 2,124,0,106,0,131,1,155,0,100,2,157,2,125,1,116, + 3,160,4,124,1,116,5,161,2,1,0,116,6,124,0,131, + 1,83,0,116,7,124,0,131,1,125,2,100,3,124,0,95, + 8,122,79,124,2,116,9,106,10,124,0,106,11,60,0,122, + 26,124,0,106,0,100,0,117,0,114,62,124,0,106,12,100, + 0,117,0,114,61,116,13,100,4,124,0,106,11,100,5,141, + 2,130,1,110,6,124,0,106,0,160,14,124,2,161,1,1, + 0,87,0,110,19,1,0,1,0,1,0,122,7,116,9,106, + 10,124,0,106,11,61,0,87,0,130,0,4,0,116,15,121, + 120,1,0,1,0,1,0,89,0,130,0,116,9,106,10,160, + 16,124,0,106,11,161,1,125,2,124,2,116,9,106,10,124, + 0,106,11,60,0,116,17,100,6,124,0,106,11,124,0,106, + 0,131,3,1,0,87,0,100,7,124,0,95,8,124,2,83, + 0,100,7,124,0,95,8,119,0,119,0,41,8,78,114,163, + 0,0,0,114,168,0,0,0,84,114,167,0,0,0,114,19, + 0,0,0,122,18,105,109,112,111,114,116,32,123,33,114,125, + 32,35,32,123,33,114,125,70,41,18,114,122,0,0,0,114, + 11,0,0,0,114,7,0,0,0,114,101,0,0,0,114,102, + 0,0,0,114,169,0,0,0,114,172,0,0,0,114,165,0, + 0,0,90,13,95,105,110,105,116,105,97,108,105,122,105,110, + 103,114,18,0,0,0,114,105,0,0,0,114,20,0,0,0, + 114,129,0,0,0,114,87,0,0,0,114,163,0,0,0,114, + 70,0,0,0,114,171,0,0,0,114,83,0,0,0,41,3, + 114,109,0,0,0,114,108,0,0,0,114,110,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,14, + 95,108,111,97,100,95,117,110,108,111,99,107,101,100,152,2, + 0,0,115,62,0,0,0,10,2,12,2,16,1,12,2,8, + 1,8,2,6,5,2,1,12,1,2,1,10,1,10,1,14, + 1,2,255,12,4,4,128,6,1,2,1,12,1,2,3,12, + 254,2,1,2,1,14,5,12,1,18,1,6,2,4,2,8, + 254,2,245,255,128,114,173,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,67, + 0,0,0,115,54,0,0,0,116,0,124,0,106,1,131,1, + 143,12,1,0,116,2,124,0,131,1,87,0,2,0,100,1, + 4,0,4,0,131,3,1,0,83,0,49,0,115,20,119,1, + 1,0,1,0,1,0,89,0,1,0,100,1,83,0,41,2, + 122,191,82,101,116,117,114,110,32,97,32,110,101,119,32,109, + 111,100,117,108,101,32,111,98,106,101,99,116,44,32,108,111, + 97,100,101,100,32,98,121,32,116,104,101,32,115,112,101,99, + 39,115,32,108,111,97,100,101,114,46,10,10,32,32,32,32, + 84,104,101,32,109,111,100,117,108,101,32,105,115,32,110,111, + 116,32,97,100,100,101,100,32,116,111,32,105,116,115,32,112, + 97,114,101,110,116,46,10,10,32,32,32,32,73,102,32,97, + 32,109,111,100,117,108,101,32,105,115,32,97,108,114,101,97, + 100,121,32,105,110,32,115,121,115,46,109,111,100,117,108,101, + 115,44,32,116,104,97,116,32,101,120,105,115,116,105,110,103, + 32,109,111,100,117,108,101,32,103,101,116,115,10,32,32,32, + 32,99,108,111,98,98,101,114,101,100,46,10,10,32,32,32, + 32,78,41,3,114,57,0,0,0,114,20,0,0,0,114,173, + 0,0,0,169,1,114,109,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,107,0,0,0,197,2, + 0,0,115,8,0,0,0,12,9,22,1,20,128,255,128,114, + 107,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,64,0,0,0,115,140,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,7, + 100,20,100,6,100,7,132,1,131,1,90,8,101,7,100,21, + 100,8,100,9,132,1,131,1,90,9,101,5,100,10,100,11, + 132,0,131,1,90,10,101,5,100,12,100,13,132,0,131,1, + 90,11,101,7,101,12,100,14,100,15,132,0,131,1,131,1, + 90,13,101,7,101,12,100,16,100,17,132,0,131,1,131,1, + 90,14,101,7,101,12,100,18,100,19,132,0,131,1,131,1, + 90,15,101,7,101,16,131,1,90,17,100,5,83,0,41,22, + 218,15,66,117,105,108,116,105,110,73,109,112,111,114,116,101, + 114,122,144,77,101,116,97,32,112,97,116,104,32,105,109,112, + 111,114,116,32,102,111,114,32,98,117,105,108,116,45,105,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, + 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, + 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, + 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, + 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, + 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, + 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, + 32,32,32,122,8,98,117,105,108,116,45,105,110,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0, + 0,0,67,0,0,0,115,34,0,0,0,116,0,160,1,100, + 1,116,2,161,2,1,0,100,2,124,0,106,3,155,2,100, + 3,116,4,106,5,155,0,100,4,157,5,83,0,41,6,250, + 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, + 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,84,104,101,32,105,109,112,111,114,116,32,109,97,99,104, + 105,110,101,114,121,32,100,111,101,115,32,116,104,101,32,106, + 111,98,32,105,116,115,101,108,102,46,10,10,32,32,32,32, + 32,32,32,32,122,81,66,117,105,108,116,105,110,73,109,112, + 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, + 114,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,46,49,50,122,8,60,109,111,100,117,108,101, + 32,122,2,32,40,122,2,41,62,78,41,6,114,101,0,0, + 0,114,102,0,0,0,114,103,0,0,0,114,9,0,0,0, + 114,175,0,0,0,114,151,0,0,0,169,1,114,110,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,114,0,0,0,223,2,0,0,115,10,0,0,0,6,7, + 2,1,4,255,22,2,255,128,122,27,66,117,105,108,116,105, 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, - 95,114,101,112,114,40,41,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, - 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, - 80,121,116,104,111,110,32,51,46,49,50,114,166,0,0,0, - 78,41,7,114,101,0,0,0,114,102,0,0,0,114,103,0, - 0,0,114,50,0,0,0,114,9,0,0,0,114,192,0,0, - 0,114,151,0,0,0,41,1,218,1,109,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,114,0,0,0,44, - 3,0,0,115,10,0,0,0,6,7,2,1,4,255,16,2, - 255,128,122,26,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, - 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 5,0,0,0,67,0,0,0,115,30,0,0,0,116,0,160, - 1,124,1,161,1,114,26,116,2,124,1,124,0,124,0,106, - 3,100,1,141,3,83,0,100,0,83,0,114,178,0,0,0, - 41,4,114,64,0,0,0,114,98,0,0,0,114,104,0,0, - 0,114,151,0,0,0,114,179,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,183,0,0,0,55, - 3,0,0,115,8,0,0,0,10,2,16,1,4,2,255,128, - 122,24,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,18,0,0,0,116,0,160,1,124,1,161,1, - 114,14,124,0,83,0,100,1,83,0,41,2,122,93,70,105, - 110,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,64, - 0,0,0,114,98,0,0,0,41,3,114,180,0,0,0,114, - 89,0,0,0,114,181,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,184,0,0,0,62,3,0, - 0,115,4,0,0,0,18,7,255,128,122,26,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95, - 109,111,100,117,108,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,114, - 185,0,0,0,41,2,122,42,85,115,101,32,100,101,102,97, - 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, - 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, - 110,46,78,114,5,0,0,0,114,174,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,162,0,0, - 0,71,3,0,0,115,4,0,0,0,4,0,255,128,122,28, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,99, - 114,101,97,116,101,95,109,111,100,117,108,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0, - 0,67,0,0,0,115,64,0,0,0,124,0,106,0,106,1, - 125,1,116,2,160,3,124,1,161,1,115,36,116,4,100,1, - 160,5,124,1,161,1,124,1,100,2,141,2,130,1,116,6, - 116,2,106,7,124,1,131,2,125,2,116,8,124,2,124,0, - 106,9,131,2,1,0,100,0,83,0,114,97,0,0,0,41, - 10,114,113,0,0,0,114,20,0,0,0,114,64,0,0,0, - 114,98,0,0,0,114,87,0,0,0,114,50,0,0,0,114, - 74,0,0,0,218,17,103,101,116,95,102,114,111,122,101,110, - 95,111,98,106,101,99,116,218,4,101,120,101,99,114,14,0, - 0,0,41,3,114,110,0,0,0,114,20,0,0,0,218,4, - 99,111,100,101,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,163,0,0,0,75,3,0,0,115,16,0,0, - 0,8,2,10,1,10,1,2,1,6,255,12,2,16,1,255, - 128,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,124, - 1,131,2,83,0,41,2,122,95,76,111,97,100,32,97,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,46,10,10, + 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, + 42,0,0,0,124,2,100,0,117,1,114,6,100,0,83,0, + 116,0,160,1,124,1,161,1,114,19,116,2,124,1,124,0, + 124,0,106,3,100,1,141,3,83,0,100,0,83,0,169,2, + 78,114,150,0,0,0,41,4,114,64,0,0,0,90,10,105, + 115,95,98,117,105,108,116,105,110,114,104,0,0,0,114,151, + 0,0,0,169,4,218,3,99,108,115,114,89,0,0,0,218, + 4,112,97,116,104,218,6,116,97,114,103,101,116,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,9,102,105, + 110,100,95,115,112,101,99,234,2,0,0,115,12,0,0,0, + 8,2,4,1,10,1,16,1,4,2,255,128,122,25,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105, + 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, + 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, + 3,124,3,100,1,117,1,114,13,124,3,106,1,83,0,100, + 1,83,0,41,2,122,175,70,105,110,100,32,116,104,101,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,39,112,97, + 116,104,39,32,105,115,32,101,118,101,114,32,115,112,101,99, + 105,102,105,101,100,32,116,104,101,110,32,116,104,101,32,115, + 101,97,114,99,104,32,105,115,32,99,111,110,115,105,100,101, + 114,101,100,32,97,32,102,97,105,108,117,114,101,46,10,10, 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,78,41,1,114,111,0,0,0, - 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,170,0,0,0,84,3,0,0,115,4,0, - 0,0,10,8,255,128,122,26,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,108,111,97,100,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,243,10,0,0,0, - 116,0,160,1,124,1,161,1,83,0,41,2,122,45,82,101, - 116,117,114,110,32,116,104,101,32,99,111,100,101,32,111,98, - 106,101,99,116,32,102,111,114,32,116,104,101,32,102,114,111, - 122,101,110,32,109,111,100,117,108,101,46,78,41,2,114,64, - 0,0,0,114,194,0,0,0,114,186,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,187,0,0, - 0,94,3,0,0,243,4,0,0,0,10,4,255,128,122,23, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,103, - 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 114,185,0,0,0,41,2,122,54,82,101,116,117,114,110,32, - 78,111,110,101,32,97,115,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,115,32,100,111,32,110,111,116,32,104,97, - 118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,78, - 114,5,0,0,0,114,186,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,114,189,0,0,0,100,3, - 0,0,114,188,0,0,0,122,25,70,114,111,122,101,110,73, + 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, + 32,32,32,32,32,32,78,41,2,114,183,0,0,0,114,122, + 0,0,0,41,4,114,180,0,0,0,114,89,0,0,0,114, + 181,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,11,102,105,110,100,95,109, + 111,100,117,108,101,243,2,0,0,115,6,0,0,0,12,9, + 18,1,255,128,122,27,66,117,105,108,116,105,110,73,109,112, + 111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,67,0,0,0,115,46,0,0,0,124, + 0,106,0,116,1,106,2,118,1,114,17,116,3,100,1,160, + 4,124,0,106,0,161,1,124,0,106,0,100,2,141,2,130, + 1,116,5,116,6,106,7,124,0,131,2,83,0,41,4,122, + 24,67,114,101,97,116,101,32,97,32,98,117,105,108,116,45, + 105,110,32,109,111,100,117,108,101,114,85,0,0,0,114,19, + 0,0,0,78,41,8,114,20,0,0,0,114,18,0,0,0, + 114,86,0,0,0,114,87,0,0,0,114,50,0,0,0,114, + 74,0,0,0,114,64,0,0,0,90,14,99,114,101,97,116, + 101,95,98,117,105,108,116,105,110,114,174,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,162,0, + 0,0,255,2,0,0,115,12,0,0,0,12,3,12,1,4, + 1,6,255,12,2,255,128,122,29,66,117,105,108,116,105,110, + 73,109,112,111,114,116,101,114,46,99,114,101,97,116,101,95, + 109,111,100,117,108,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, + 16,0,0,0,116,0,116,1,106,2,124,0,131,2,1,0, + 100,1,83,0,41,2,122,22,69,120,101,99,32,97,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,78,41, + 3,114,74,0,0,0,114,64,0,0,0,90,12,101,120,101, + 99,95,98,117,105,108,116,105,110,114,177,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,163,0, + 0,0,7,3,0,0,115,4,0,0,0,16,3,255,128,122, + 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, + 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,243,4,0,0,0,100,1,83,0,41,2, + 122,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111, + 100,101,32,111,98,106,101,99,116,115,46,78,114,5,0,0, + 0,169,2,114,180,0,0,0,114,89,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,8,103,101, + 116,95,99,111,100,101,12,3,0,0,243,4,0,0,0,4, + 4,255,128,122,24,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,185,0,0,0,41,2,122,56,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100, + 111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,5,0,0,0,114,186,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,10,103,101,116,95,115,111,117,114,99,101,18,3,0, + 0,114,188,0,0,0,122,26,66,117,105,108,116,105,110,73, 109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114, 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,114,197,0,0,0, - 41,2,122,46,82,101,116,117,114,110,32,84,114,117,101,32, - 105,102,32,116,104,101,32,102,114,111,122,101,110,32,109,111, - 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, - 101,46,78,41,2,114,64,0,0,0,90,17,105,115,95,102, - 114,111,122,101,110,95,112,97,99,107,97,103,101,114,186,0, + 0,0,0,1,0,0,0,67,0,0,0,114,185,0,0,0, + 41,3,122,52,82,101,116,117,114,110,32,70,97,108,115,101, + 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100, + 117,108,101,115,32,97,114,101,32,110,101,118,101,114,32,112, + 97,99,107,97,103,101,115,46,70,78,114,5,0,0,0,114, + 186,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,128,0,0,0,24,3,0,0,114,188,0,0, + 0,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,46,105,115,95,112,97,99,107,97,103,101,41,2,78, + 78,41,1,78,41,18,114,9,0,0,0,114,8,0,0,0, + 114,1,0,0,0,114,10,0,0,0,114,151,0,0,0,218, + 12,115,116,97,116,105,99,109,101,116,104,111,100,114,114,0, + 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, + 183,0,0,0,114,184,0,0,0,114,162,0,0,0,114,163, + 0,0,0,114,95,0,0,0,114,187,0,0,0,114,189,0, + 0,0,114,128,0,0,0,114,111,0,0,0,114,170,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,175,0,0,0,212,2,0,0,115,48, + 0,0,0,8,0,4,2,4,7,2,2,10,1,2,10,12, + 1,2,8,12,1,2,11,10,1,2,7,10,1,2,4,2, + 1,12,1,2,4,2,1,12,1,2,4,2,1,12,1,12, + 4,255,128,114,175,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, + 0,115,144,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,90,4,101,5,100,3,100,4,132,0,131,1, + 90,6,101,7,100,22,100,6,100,7,132,1,131,1,90,8, + 101,7,100,23,100,8,100,9,132,1,131,1,90,9,101,5, + 100,10,100,11,132,0,131,1,90,10,101,5,100,12,100,13, + 132,0,131,1,90,11,101,7,100,14,100,15,132,0,131,1, + 90,12,101,7,101,13,100,16,100,17,132,0,131,1,131,1, + 90,14,101,7,101,13,100,18,100,19,132,0,131,1,131,1, + 90,15,101,7,101,13,100,20,100,21,132,0,131,1,131,1, + 90,16,100,5,83,0,41,24,218,14,70,114,111,122,101,110, + 73,109,112,111,114,116,101,114,122,142,77,101,116,97,32,112, + 97,116,104,32,105,109,112,111,114,116,32,102,111,114,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,32, + 97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,115, + 32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,111, + 100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,32, + 110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,116, + 97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,115, + 115,46,10,10,32,32,32,32,90,6,102,114,111,122,101,110, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,115,28,0,0,0,116,0, + 160,1,100,1,116,2,161,2,1,0,100,2,160,3,124,0, + 106,4,116,5,106,6,161,2,83,0,41,4,114,176,0,0, + 0,122,80,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,109,111,100,117,108,101,95,114,101,112,114,40,41,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, + 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, + 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, + 46,49,50,114,166,0,0,0,78,41,7,114,101,0,0,0, + 114,102,0,0,0,114,103,0,0,0,114,50,0,0,0,114, + 9,0,0,0,114,192,0,0,0,114,151,0,0,0,41,1, + 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,114,0,0,0,44,3,0,0,115,10,0,0,0, + 6,7,2,1,4,255,16,2,255,128,122,26,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,109,111,100,117,108, + 101,95,114,101,112,114,78,99,4,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,0, + 115,30,0,0,0,116,0,160,1,124,1,161,1,114,13,116, + 2,124,1,124,0,124,0,106,3,100,1,141,3,83,0,100, + 0,83,0,114,178,0,0,0,41,4,114,64,0,0,0,114, + 98,0,0,0,114,104,0,0,0,114,151,0,0,0,114,179, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,183,0,0,0,55,3,0,0,115,8,0,0,0, + 10,2,16,1,4,2,255,128,122,24,70,114,111,122,101,110, + 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, + 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0, + 116,0,160,1,124,1,161,1,114,7,124,0,83,0,100,1, + 83,0,41,2,122,93,70,105,110,100,32,97,32,102,114,111, + 122,101,110,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,78,41,2,114,64,0,0,0,114,98,0,0,0, + 41,3,114,180,0,0,0,114,89,0,0,0,114,181,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,184,0,0,0,62,3,0,0,115,4,0,0,0,18,7, + 255,128,122,26,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1, + 0,0,0,67,0,0,0,114,185,0,0,0,41,2,122,42, + 85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97, + 110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101, + 32,99,114,101,97,116,105,111,110,46,78,114,5,0,0,0, + 114,174,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,162,0,0,0,71,3,0,0,115,4,0, + 0,0,4,0,255,128,122,28,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,67,0,0,0,115,64,0, + 0,0,124,0,106,0,106,1,125,1,116,2,160,3,124,1, + 161,1,115,18,116,4,100,1,160,5,124,1,161,1,124,1, + 100,2,141,2,130,1,116,6,116,2,106,7,124,1,131,2, + 125,2,116,8,124,2,124,0,106,9,131,2,1,0,100,0, + 83,0,114,97,0,0,0,41,10,114,113,0,0,0,114,20, + 0,0,0,114,64,0,0,0,114,98,0,0,0,114,87,0, + 0,0,114,50,0,0,0,114,74,0,0,0,218,17,103,101, + 116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,218, + 4,101,120,101,99,114,14,0,0,0,41,3,114,110,0,0, + 0,114,20,0,0,0,218,4,99,111,100,101,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,163,0,0,0, + 75,3,0,0,115,16,0,0,0,8,2,10,1,10,1,2, + 1,6,255,12,2,16,1,255,128,122,26,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,101,120,101,99,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,10, + 0,0,0,116,0,124,0,124,1,131,2,83,0,41,2,122, + 95,76,111,97,100,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,41,1,114,111,0,0,0,114,186,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,170,0,0, + 0,84,3,0,0,115,4,0,0,0,10,8,255,128,122,26, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108, + 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,243,10,0,0,0,116,0,160,1,124,1,161,1, + 83,0,41,2,122,45,82,101,116,117,114,110,32,116,104,101, + 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, + 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,46,78,41,2,114,64,0,0,0,114,194,0,0,0, + 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,187,0,0,0,94,3,0,0,243,4,0, + 0,0,10,4,255,128,122,23,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,114,185,0,0,0,41,2,122, + 54,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,115,32,100, + 111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,5,0,0,0,114,186,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,128,0,0,0,106,3,0,0,114,198,0,0,0,122, + 0,114,189,0,0,0,100,3,0,0,114,188,0,0,0,122, 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,1, - 78,41,17,114,9,0,0,0,114,8,0,0,0,114,1,0, - 0,0,114,10,0,0,0,114,151,0,0,0,114,190,0,0, - 0,114,114,0,0,0,114,191,0,0,0,114,183,0,0,0, - 114,184,0,0,0,114,162,0,0,0,114,163,0,0,0,114, - 170,0,0,0,114,100,0,0,0,114,187,0,0,0,114,189, - 0,0,0,114,128,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,192,0,0, - 0,33,3,0,0,115,50,0,0,0,8,0,4,2,4,7, - 2,2,10,1,2,10,12,1,2,6,12,1,2,8,10,1, - 2,3,10,1,2,8,10,1,2,9,2,1,12,1,2,4, - 2,1,12,1,2,4,2,1,16,1,255,128,114,192,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,64,0,0,0,115,32,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, - 0,90,4,100,4,100,5,132,0,90,5,100,6,83,0,41, - 7,218,18,95,73,109,112,111,114,116,76,111,99,107,67,111, - 110,116,101,120,116,122,36,67,111,110,116,101,120,116,32,109, - 97,110,97,103,101,114,32,102,111,114,32,116,104,101,32,105, - 109,112,111,114,116,32,108,111,99,107,46,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,243,12,0,0,0,116,0,160,1,161,0,1, - 0,100,1,83,0,41,2,122,24,65,99,113,117,105,114,101, - 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, - 46,78,41,2,114,64,0,0,0,114,65,0,0,0,114,52, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,61,0,0,0,119,3,0,0,243,4,0,0,0, - 12,2,255,128,122,28,95,73,109,112,111,114,116,76,111,99, - 107,67,111,110,116,101,120,116,46,95,95,101,110,116,101,114, - 95,95,99,4,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,2,0,0,0,67,0,0,0,114,200,0,0,0, - 41,2,122,60,82,101,108,101,97,115,101,32,116,104,101,32, - 105,109,112,111,114,116,32,108,111,99,107,32,114,101,103,97, - 114,100,108,101,115,115,32,111,102,32,97,110,121,32,114,97, - 105,115,101,100,32,101,120,99,101,112,116,105,111,110,115,46, - 78,41,2,114,64,0,0,0,114,67,0,0,0,41,4,114, - 33,0,0,0,218,8,101,120,99,95,116,121,112,101,218,9, - 101,120,99,95,118,97,108,117,101,218,13,101,120,99,95,116, - 114,97,99,101,98,97,99,107,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,63,0,0,0,123,3,0,0, - 114,201,0,0,0,122,27,95,73,109,112,111,114,116,76,111, - 99,107,67,111,110,116,101,120,116,46,95,95,101,120,105,116, - 95,95,78,41,6,114,9,0,0,0,114,8,0,0,0,114, - 1,0,0,0,114,10,0,0,0,114,61,0,0,0,114,63, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,199,0,0,0,115,3,0,0, - 115,10,0,0,0,8,0,4,2,8,2,12,4,255,128,114, - 199,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,64,0, - 0,0,124,1,160,0,100,1,124,2,100,2,24,0,161,2, - 125,3,116,1,124,3,131,1,124,2,107,0,114,36,116,2, - 100,3,131,1,130,1,124,3,100,4,25,0,125,4,124,0, - 114,60,100,5,160,3,124,4,124,0,161,2,83,0,124,4, - 83,0,41,7,122,50,82,101,115,111,108,118,101,32,97,32, - 114,101,108,97,116,105,118,101,32,109,111,100,117,108,101,32, - 110,97,109,101,32,116,111,32,97,110,32,97,98,115,111,108, - 117,116,101,32,111,110,101,46,114,141,0,0,0,114,42,0, - 0,0,122,50,97,116,116,101,109,112,116,101,100,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,32,98,101, - 121,111,110,100,32,116,111,112,45,108,101,118,101,108,32,112, - 97,99,107,97,103,101,114,25,0,0,0,250,5,123,125,46, - 123,125,78,41,4,218,6,114,115,112,108,105,116,218,3,108, - 101,110,114,87,0,0,0,114,50,0,0,0,41,5,114,20, - 0,0,0,218,7,112,97,99,107,97,103,101,218,5,108,101, - 118,101,108,90,4,98,105,116,115,90,4,98,97,115,101,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,13, - 95,114,101,115,111,108,118,101,95,110,97,109,101,128,3,0, - 0,115,12,0,0,0,16,2,12,1,8,1,8,1,20,1, - 255,128,114,210,0,0,0,99,3,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,60,0,0,0,116,0,124,0,131,1,155,0,100,1,157, - 2,125,3,116,1,160,2,124,3,116,3,161,2,1,0,124, - 0,160,4,124,1,124,2,161,2,125,4,124,4,100,0,117, - 0,114,50,100,0,83,0,116,5,124,1,124,4,131,2,83, - 0,41,2,78,122,53,46,102,105,110,100,95,115,112,101,99, - 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, - 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, - 110,100,95,109,111,100,117,108,101,40,41,41,6,114,7,0, - 0,0,114,101,0,0,0,114,102,0,0,0,114,169,0,0, - 0,114,184,0,0,0,114,104,0,0,0,41,5,218,6,102, - 105,110,100,101,114,114,20,0,0,0,114,181,0,0,0,114, - 108,0,0,0,114,122,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, - 115,112,101,99,95,108,101,103,97,99,121,137,3,0,0,115, - 14,0,0,0,14,1,12,2,12,1,8,1,4,1,10,1, - 255,128,114,212,0,0,0,99,3,0,0,0,0,0,0,0, - 0,0,0,0,10,0,0,0,10,0,0,0,67,0,0,0, - 115,36,1,0,0,116,0,106,1,125,3,124,3,100,1,117, - 0,114,22,116,2,100,2,131,1,130,1,124,3,115,38,116, - 3,160,4,100,3,116,5,161,2,1,0,124,0,116,0,106, - 6,118,0,125,4,124,3,68,0,93,230,125,5,116,7,131, - 0,143,94,1,0,122,10,124,5,106,8,125,6,87,0,110, - 54,4,0,116,9,144,1,121,34,1,0,1,0,1,0,116, - 10,124,5,124,0,124,1,131,3,125,7,124,7,100,1,117, - 0,114,126,89,0,87,0,100,1,4,0,4,0,131,3,1, - 0,113,52,89,0,110,12,124,6,124,0,124,1,124,2,131, - 3,125,7,87,0,100,1,4,0,4,0,131,3,1,0,110, - 16,49,0,115,162,119,1,1,0,1,0,1,0,89,0,1, - 0,124,7,100,1,117,1,144,1,114,26,124,4,144,1,115, - 18,124,0,116,0,106,6,118,0,144,1,114,18,116,0,106, - 6,124,0,25,0,125,8,122,10,124,8,106,11,125,9,87, - 0,110,26,4,0,116,9,144,1,121,32,1,0,1,0,1, - 0,124,7,6,0,89,0,2,0,1,0,83,0,124,9,100, - 1,117,0,144,1,114,10,124,7,2,0,1,0,83,0,124, - 9,2,0,1,0,83,0,124,7,2,0,1,0,83,0,113, - 52,100,1,83,0,119,0,119,0,41,4,122,21,70,105,110, - 100,32,97,32,109,111,100,117,108,101,39,115,32,115,112,101, - 99,46,78,122,53,115,121,115,46,109,101,116,97,95,112,97, - 116,104,32,105,115,32,78,111,110,101,44,32,80,121,116,104, - 111,110,32,105,115,32,108,105,107,101,108,121,32,115,104,117, - 116,116,105,110,103,32,100,111,119,110,122,22,115,121,115,46, - 109,101,116,97,95,112,97,116,104,32,105,115,32,101,109,112, - 116,121,41,12,114,18,0,0,0,218,9,109,101,116,97,95, - 112,97,116,104,114,87,0,0,0,114,101,0,0,0,114,102, - 0,0,0,114,169,0,0,0,114,105,0,0,0,114,199,0, - 0,0,114,183,0,0,0,114,2,0,0,0,114,212,0,0, - 0,114,113,0,0,0,41,10,114,20,0,0,0,114,181,0, - 0,0,114,182,0,0,0,114,213,0,0,0,90,9,105,115, - 95,114,101,108,111,97,100,114,211,0,0,0,114,183,0,0, - 0,114,109,0,0,0,114,110,0,0,0,114,113,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 10,95,102,105,110,100,95,115,112,101,99,147,3,0,0,115, - 66,0,0,0,6,2,8,1,8,2,4,3,12,1,10,5, - 8,1,8,1,2,1,10,1,14,1,12,1,8,1,16,1, - 4,255,12,3,30,128,10,1,18,2,10,1,2,1,10,1, - 14,1,12,4,10,2,8,1,8,2,8,2,2,239,4,19, - 2,243,2,244,255,128,114,214,0,0,0,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,0, - 67,0,0,0,115,110,0,0,0,116,0,124,0,116,1,131, - 2,115,28,116,2,100,1,160,3,116,4,124,0,131,1,161, - 1,131,1,130,1,124,2,100,2,107,0,114,44,116,5,100, - 3,131,1,130,1,124,2,100,2,107,4,114,82,116,0,124, - 1,116,1,131,2,115,70,116,2,100,4,131,1,130,1,124, - 1,115,82,116,6,100,5,131,1,130,1,124,0,115,106,124, - 2,100,2,107,2,114,102,116,5,100,6,131,1,130,1,100, - 7,83,0,100,7,83,0,41,8,122,28,86,101,114,105,102, - 121,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32, - 34,115,97,110,101,34,46,122,31,109,111,100,117,108,101,32, - 110,97,109,101,32,109,117,115,116,32,98,101,32,115,116,114, - 44,32,110,111,116,32,123,125,114,25,0,0,0,122,18,108, - 101,118,101,108,32,109,117,115,116,32,98,101,32,62,61,32, - 48,122,31,95,95,112,97,99,107,97,103,101,95,95,32,110, - 111,116,32,115,101,116,32,116,111,32,97,32,115,116,114,105, - 110,103,122,54,97,116,116,101,109,112,116,101,100,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,32,119,105, - 116,104,32,110,111,32,107,110,111,119,110,32,112,97,114,101, - 110,116,32,112,97,99,107,97,103,101,122,17,69,109,112,116, - 121,32,109,111,100,117,108,101,32,110,97,109,101,78,41,7, - 218,10,105,115,105,110,115,116,97,110,99,101,218,3,115,116, - 114,218,9,84,121,112,101,69,114,114,111,114,114,50,0,0, - 0,114,3,0,0,0,218,10,86,97,108,117,101,69,114,114, - 111,114,114,87,0,0,0,169,3,114,20,0,0,0,114,208, - 0,0,0,114,209,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,13,95,115,97,110,105,116,121, - 95,99,104,101,99,107,194,3,0,0,115,26,0,0,0,10, - 2,18,1,8,1,8,1,8,1,10,1,8,1,4,1,8, - 1,12,2,8,1,8,255,255,128,114,220,0,0,0,122,16, - 78,111,32,109,111,100,117,108,101,32,110,97,109,101,100,32, - 122,4,123,33,114,125,99,2,0,0,0,0,0,0,0,0, - 0,0,0,9,0,0,0,8,0,0,0,67,0,0,0,115, - 22,1,0,0,100,0,125,2,124,0,160,0,100,1,161,1, - 100,2,25,0,125,3,124,3,114,128,124,3,116,1,106,2, - 118,1,114,42,116,3,124,1,124,3,131,2,1,0,124,0, - 116,1,106,2,118,0,114,62,116,1,106,2,124,0,25,0, - 83,0,116,1,106,2,124,3,25,0,125,4,122,10,124,4, - 106,4,125,2,87,0,110,44,4,0,116,5,144,1,121,20, - 1,0,1,0,1,0,116,6,100,3,23,0,160,7,124,0, - 124,3,161,2,125,5,116,8,124,5,124,0,100,4,141,2, - 100,0,130,2,116,9,124,0,124,2,131,2,125,6,124,6, - 100,0,117,0,114,164,116,8,116,6,160,7,124,0,161,1, - 124,0,100,4,141,2,130,1,116,10,124,6,131,1,125,7, - 124,3,144,1,114,14,116,1,106,2,124,3,25,0,125,4, - 124,0,160,0,100,1,161,1,100,5,25,0,125,8,122,18, - 116,11,124,4,124,8,124,7,131,3,1,0,87,0,124,7, - 83,0,4,0,116,5,144,1,121,18,1,0,1,0,1,0, - 100,6,124,3,155,2,100,7,124,8,155,2,157,4,125,5, - 116,12,160,13,124,5,116,14,161,2,1,0,89,0,124,7, - 83,0,124,7,83,0,119,0,119,0,41,8,78,114,141,0, - 0,0,114,25,0,0,0,122,23,59,32,123,33,114,125,32, - 105,115,32,110,111,116,32,97,32,112,97,99,107,97,103,101, - 114,19,0,0,0,233,2,0,0,0,122,27,67,97,110,110, - 111,116,32,115,101,116,32,97,110,32,97,116,116,114,105,98, - 117,116,101,32,111,110,32,122,18,32,102,111,114,32,99,104, - 105,108,100,32,109,111,100,117,108,101,32,41,15,114,142,0, - 0,0,114,18,0,0,0,114,105,0,0,0,114,74,0,0, - 0,114,154,0,0,0,114,2,0,0,0,218,8,95,69,82, - 82,95,77,83,71,114,50,0,0,0,218,19,77,111,100,117, - 108,101,78,111,116,70,111,117,110,100,69,114,114,111,114,114, - 214,0,0,0,114,173,0,0,0,114,12,0,0,0,114,101, - 0,0,0,114,102,0,0,0,114,169,0,0,0,41,9,114, - 20,0,0,0,218,7,105,109,112,111,114,116,95,114,181,0, - 0,0,114,143,0,0,0,90,13,112,97,114,101,110,116,95, - 109,111,100,117,108,101,114,108,0,0,0,114,109,0,0,0, - 114,110,0,0,0,90,5,99,104,105,108,100,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,23,95,102,105, - 110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,111, - 99,107,101,100,213,3,0,0,115,60,0,0,0,4,1,14, - 1,4,1,10,1,10,1,10,2,10,1,10,1,2,1,10, - 1,14,1,16,1,14,1,10,1,8,1,18,1,8,2,6, - 1,10,2,14,1,2,1,14,1,4,4,14,253,16,1,14, - 1,8,1,2,253,2,242,255,128,114,225,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8, - 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, - 131,1,143,62,1,0,116,1,106,2,160,3,124,0,116,4, - 161,2,125,2,124,2,116,4,117,0,114,56,116,5,124,0, - 124,1,131,2,87,0,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,87,0,100,1,4,0,4,0,131,3,1,0, - 110,16,49,0,115,76,119,1,1,0,1,0,1,0,89,0, - 1,0,124,2,100,1,117,0,114,116,100,2,160,6,124,0, - 161,1,125,3,116,7,124,3,124,0,100,3,141,2,130,1, - 116,8,124,0,131,1,1,0,124,2,83,0,41,4,122,25, - 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104, - 101,32,109,111,100,117,108,101,46,78,122,40,105,109,112,111, - 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, - 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, - 117,108,101,115,114,19,0,0,0,41,9,114,57,0,0,0, - 114,18,0,0,0,114,105,0,0,0,114,38,0,0,0,218, - 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, - 225,0,0,0,114,50,0,0,0,114,223,0,0,0,114,72, - 0,0,0,41,4,114,20,0,0,0,114,224,0,0,0,114, - 110,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,14,95,102,105,110,100,95, - 97,110,100,95,108,111,97,100,248,3,0,0,115,28,0,0, - 0,10,2,14,1,8,1,24,1,14,255,16,128,8,3,2, - 1,6,1,2,255,12,2,8,2,4,1,255,128,114,227,0, - 0,0,114,25,0,0,0,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, - 115,42,0,0,0,116,0,124,0,124,1,124,2,131,3,1, - 0,124,2,100,1,107,4,114,32,116,1,124,0,124,1,124, - 2,131,3,125,0,116,2,124,0,116,3,131,2,83,0,41, - 3,97,50,1,0,0,73,109,112,111,114,116,32,97,110,100, - 32,114,101,116,117,114,110,32,116,104,101,32,109,111,100,117, - 108,101,32,98,97,115,101,100,32,111,110,32,105,116,115,32, - 110,97,109,101,44,32,116,104,101,32,112,97,99,107,97,103, - 101,32,116,104,101,32,99,97,108,108,32,105,115,10,32,32, - 32,32,98,101,105,110,103,32,109,97,100,101,32,102,114,111, - 109,44,32,97,110,100,32,116,104,101,32,108,101,118,101,108, - 32,97,100,106,117,115,116,109,101,110,116,46,10,10,32,32, - 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, - 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,103, - 114,101,97,116,101,115,116,32,99,111,109,109,111,110,32,100, - 101,110,111,109,105,110,97,116,111,114,32,111,102,32,102,117, - 110,99,116,105,111,110,97,108,105,116,121,10,32,32,32,32, - 98,101,116,119,101,101,110,32,105,109,112,111,114,116,95,109, - 111,100,117,108,101,32,97,110,100,32,95,95,105,109,112,111, - 114,116,95,95,46,32,84,104,105,115,32,105,110,99,108,117, - 100,101,115,32,115,101,116,116,105,110,103,32,95,95,112,97, - 99,107,97,103,101,95,95,32,105,102,10,32,32,32,32,116, - 104,101,32,108,111,97,100,101,114,32,100,105,100,32,110,111, - 116,46,10,10,32,32,32,32,114,25,0,0,0,78,41,4, - 114,220,0,0,0,114,210,0,0,0,114,227,0,0,0,218, - 11,95,103,99,100,95,105,109,112,111,114,116,114,219,0,0, + 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,114,197,0,0,0,41,2,122,46,82,101,116,117, + 114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,32,105,115,32, + 97,32,112,97,99,107,97,103,101,46,78,41,2,114,64,0, + 0,0,90,17,105,115,95,102,114,111,122,101,110,95,112,97, + 99,107,97,103,101,114,186,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,128,0,0,0,106,3, + 0,0,114,198,0,0,0,122,25,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,97, + 103,101,41,2,78,78,41,1,78,41,17,114,9,0,0,0, + 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, + 151,0,0,0,114,190,0,0,0,114,114,0,0,0,114,191, + 0,0,0,114,183,0,0,0,114,184,0,0,0,114,162,0, + 0,0,114,163,0,0,0,114,170,0,0,0,114,100,0,0, + 0,114,187,0,0,0,114,189,0,0,0,114,128,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,192,0,0,0,33,3,0,0,115,50,0, + 0,0,8,0,4,2,4,7,2,2,10,1,2,10,12,1, + 2,6,12,1,2,8,10,1,2,3,10,1,2,8,10,1, + 2,9,2,1,12,1,2,4,2,1,12,1,2,4,2,1, + 16,1,255,128,114,192,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,32,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,83,0,41,7,218,18,95,73,109,112,111, + 114,116,76,111,99,107,67,111,110,116,101,120,116,122,36,67, + 111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,102, + 111,114,32,116,104,101,32,105,109,112,111,114,116,32,108,111, + 99,107,46,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,243,12,0,0, + 0,116,0,160,1,161,0,1,0,100,1,83,0,41,2,122, + 24,65,99,113,117,105,114,101,32,116,104,101,32,105,109,112, + 111,114,116,32,108,111,99,107,46,78,41,2,114,64,0,0, + 0,114,65,0,0,0,114,52,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,61,0,0,0,119, + 3,0,0,243,4,0,0,0,12,2,255,128,122,28,95,73, + 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, + 46,95,95,101,110,116,101,114,95,95,99,4,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,2,0,0,0,67, + 0,0,0,114,200,0,0,0,41,2,122,60,82,101,108,101, + 97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108, + 111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,111, + 102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,99, + 101,112,116,105,111,110,115,46,78,41,2,114,64,0,0,0, + 114,67,0,0,0,41,4,114,33,0,0,0,218,8,101,120, + 99,95,116,121,112,101,218,9,101,120,99,95,118,97,108,117, + 101,218,13,101,120,99,95,116,114,97,99,101,98,97,99,107, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 63,0,0,0,123,3,0,0,114,201,0,0,0,122,27,95, + 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, + 116,46,95,95,101,120,105,116,95,95,78,41,6,114,9,0, + 0,0,114,8,0,0,0,114,1,0,0,0,114,10,0,0, + 0,114,61,0,0,0,114,63,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 199,0,0,0,115,3,0,0,115,10,0,0,0,8,0,4, + 2,8,2,12,4,255,128,114,199,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,64,0,0,0,124,1,160,0,100,1, + 124,2,100,2,24,0,161,2,125,3,116,1,124,3,131,1, + 124,2,107,0,114,18,116,2,100,3,131,1,130,1,124,3, + 100,4,25,0,125,4,124,0,114,30,100,5,160,3,124,4, + 124,0,161,2,83,0,124,4,83,0,41,7,122,50,82,101, + 115,111,108,118,101,32,97,32,114,101,108,97,116,105,118,101, + 32,109,111,100,117,108,101,32,110,97,109,101,32,116,111,32, + 97,110,32,97,98,115,111,108,117,116,101,32,111,110,101,46, + 114,141,0,0,0,114,42,0,0,0,122,50,97,116,116,101, + 109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105, + 109,112,111,114,116,32,98,101,121,111,110,100,32,116,111,112, + 45,108,101,118,101,108,32,112,97,99,107,97,103,101,114,25, + 0,0,0,250,5,123,125,46,123,125,78,41,4,218,6,114, + 115,112,108,105,116,218,3,108,101,110,114,87,0,0,0,114, + 50,0,0,0,41,5,114,20,0,0,0,218,7,112,97,99, + 107,97,103,101,218,5,108,101,118,101,108,90,4,98,105,116, + 115,90,4,98,97,115,101,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,218,13,95,114,101,115,111,108,118,101, + 95,110,97,109,101,128,3,0,0,115,12,0,0,0,16,2, + 12,1,8,1,8,1,20,1,255,128,114,210,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 4,0,0,0,67,0,0,0,115,60,0,0,0,116,0,124, + 0,131,1,155,0,100,1,157,2,125,3,116,1,160,2,124, + 3,116,3,161,2,1,0,124,0,160,4,124,1,124,2,161, + 2,125,4,124,4,100,0,117,0,114,25,100,0,83,0,116, + 5,124,1,124,4,131,2,83,0,41,2,78,122,53,46,102, + 105,110,100,95,115,112,101,99,40,41,32,110,111,116,32,102, + 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, + 99,107,32,116,111,32,102,105,110,100,95,109,111,100,117,108, + 101,40,41,41,6,114,7,0,0,0,114,101,0,0,0,114, + 102,0,0,0,114,169,0,0,0,114,184,0,0,0,114,104, + 0,0,0,41,5,218,6,102,105,110,100,101,114,114,20,0, + 0,0,114,181,0,0,0,114,108,0,0,0,114,122,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,228,0,0,0,8,4,0,0,115,10,0,0,0,12,9, - 8,1,12,1,10,1,255,128,114,228,0,0,0,169,1,218, - 9,114,101,99,117,114,115,105,118,101,99,3,0,0,0,0, - 0,0,0,1,0,0,0,8,0,0,0,11,0,0,0,67, - 0,0,0,115,218,0,0,0,124,1,68,0,93,206,125,4, - 116,0,124,4,116,1,131,2,115,64,124,3,114,34,124,0, - 106,2,100,1,23,0,125,5,110,4,100,2,125,5,116,3, - 100,3,124,5,155,0,100,4,116,4,124,4,131,1,106,2, - 155,0,157,4,131,1,130,1,124,4,100,5,107,2,114,106, - 124,3,115,104,116,5,124,0,100,6,131,2,114,104,116,6, - 124,0,124,0,106,7,124,2,100,7,100,8,141,4,1,0, - 113,4,116,5,124,0,124,4,131,2,115,210,100,9,160,8, - 124,0,106,2,124,4,161,2,125,6,122,14,116,9,124,2, - 124,6,131,2,1,0,87,0,113,4,4,0,116,10,121,216, - 1,0,125,7,1,0,122,42,124,7,106,11,124,6,107,2, - 114,200,116,12,106,13,160,14,124,6,116,15,161,2,100,10, - 117,1,114,200,87,0,89,0,100,10,125,7,126,7,113,4, - 130,0,100,10,125,7,126,7,119,1,113,4,124,0,83,0, - 119,0,41,11,122,238,70,105,103,117,114,101,32,111,117,116, - 32,119,104,97,116,32,95,95,105,109,112,111,114,116,95,95, - 32,115,104,111,117,108,100,32,114,101,116,117,114,110,46,10, - 10,32,32,32,32,84,104,101,32,105,109,112,111,114,116,95, - 32,112,97,114,97,109,101,116,101,114,32,105,115,32,97,32, - 99,97,108,108,97,98,108,101,32,119,104,105,99,104,32,116, - 97,107,101,115,32,116,104,101,32,110,97,109,101,32,111,102, - 32,109,111,100,117,108,101,32,116,111,10,32,32,32,32,105, - 109,112,111,114,116,46,32,73,116,32,105,115,32,114,101,113, - 117,105,114,101,100,32,116,111,32,100,101,99,111,117,112,108, - 101,32,116,104,101,32,102,117,110,99,116,105,111,110,32,102, - 114,111,109,32,97,115,115,117,109,105,110,103,32,105,109,112, - 111,114,116,108,105,98,39,115,10,32,32,32,32,105,109,112, - 111,114,116,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,105,115,32,100,101,115,105,114,101,100,46,10,10, - 32,32,32,32,122,8,46,95,95,97,108,108,95,95,122,13, - 96,96,102,114,111,109,32,108,105,115,116,39,39,122,8,73, - 116,101,109,32,105,110,32,122,18,32,109,117,115,116,32,98, - 101,32,115,116,114,44,32,110,111,116,32,250,1,42,218,7, - 95,95,97,108,108,95,95,84,114,229,0,0,0,114,205,0, - 0,0,78,41,16,114,215,0,0,0,114,216,0,0,0,114, - 9,0,0,0,114,217,0,0,0,114,3,0,0,0,114,11, - 0,0,0,218,16,95,104,97,110,100,108,101,95,102,114,111, - 109,108,105,115,116,114,232,0,0,0,114,50,0,0,0,114, - 74,0,0,0,114,223,0,0,0,114,20,0,0,0,114,18, - 0,0,0,114,105,0,0,0,114,38,0,0,0,114,226,0, - 0,0,41,8,114,110,0,0,0,218,8,102,114,111,109,108, - 105,115,116,114,224,0,0,0,114,230,0,0,0,218,1,120, - 90,5,119,104,101,114,101,90,9,102,114,111,109,95,110,97, - 109,101,90,3,101,120,99,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,233,0,0,0,23,4,0,0,115, - 58,0,0,0,8,10,10,1,4,1,12,1,4,2,10,1, - 8,1,8,255,8,2,14,1,10,1,2,1,6,255,2,128, - 10,2,14,1,2,1,14,1,14,1,10,4,16,1,2,255, - 12,2,2,1,8,128,2,245,4,12,2,248,255,128,114,233, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,6,0,0,0,67,0,0,0,115,146,0,0, - 0,124,0,160,0,100,1,161,1,125,1,124,0,160,0,100, - 2,161,1,125,2,124,1,100,3,117,1,114,82,124,2,100, - 3,117,1,114,78,124,1,124,2,106,1,107,3,114,78,116, - 2,106,3,100,4,124,1,155,2,100,5,124,2,106,1,155, - 2,100,6,157,5,116,4,100,7,100,8,141,3,1,0,124, - 1,83,0,124,2,100,3,117,1,114,96,124,2,106,1,83, - 0,116,2,106,3,100,9,116,4,100,7,100,8,141,3,1, - 0,124,0,100,10,25,0,125,1,100,11,124,0,118,1,114, - 142,124,1,160,5,100,12,161,1,100,13,25,0,125,1,124, - 1,83,0,41,14,122,167,67,97,108,99,117,108,97,116,101, - 32,119,104,97,116,32,95,95,112,97,99,107,97,103,101,95, - 95,32,115,104,111,117,108,100,32,98,101,46,10,10,32,32, - 32,32,95,95,112,97,99,107,97,103,101,95,95,32,105,115, - 32,110,111,116,32,103,117,97,114,97,110,116,101,101,100,32, - 116,111,32,98,101,32,100,101,102,105,110,101,100,32,111,114, - 32,99,111,117,108,100,32,98,101,32,115,101,116,32,116,111, - 32,78,111,110,101,10,32,32,32,32,116,111,32,114,101,112, - 114,101,115,101,110,116,32,116,104,97,116,32,105,116,115,32, - 112,114,111,112,101,114,32,118,97,108,117,101,32,105,115,32, - 117,110,107,110,111,119,110,46,10,10,32,32,32,32,114,158, - 0,0,0,114,113,0,0,0,78,122,32,95,95,112,97,99, - 107,97,103,101,95,95,32,33,61,32,95,95,115,112,101,99, - 95,95,46,112,97,114,101,110,116,32,40,122,4,32,33,61, - 32,250,1,41,233,3,0,0,0,41,1,90,10,115,116,97, - 99,107,108,101,118,101,108,122,89,99,97,110,39,116,32,114, - 101,115,111,108,118,101,32,112,97,99,107,97,103,101,32,102, - 114,111,109,32,95,95,115,112,101,99,95,95,32,111,114,32, - 95,95,112,97,99,107,97,103,101,95,95,44,32,102,97,108, - 108,105,110,103,32,98,97,99,107,32,111,110,32,95,95,110, - 97,109,101,95,95,32,97,110,100,32,95,95,112,97,116,104, - 95,95,114,9,0,0,0,114,154,0,0,0,114,141,0,0, - 0,114,25,0,0,0,41,6,114,38,0,0,0,114,143,0, - 0,0,114,101,0,0,0,114,102,0,0,0,114,169,0,0, - 0,114,142,0,0,0,41,3,218,7,103,108,111,98,97,108, - 115,114,208,0,0,0,114,109,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,17,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,60,4,0, - 0,115,44,0,0,0,10,7,10,1,8,1,18,1,6,1, - 2,1,4,255,4,1,6,255,4,2,6,254,4,3,8,1, - 6,1,6,2,4,2,6,254,8,3,8,1,14,1,4,1, - 255,128,114,239,0,0,0,114,5,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,9,0,0,0,5,0,0, - 0,67,0,0,0,115,174,0,0,0,124,4,100,1,107,2, - 114,18,116,0,124,0,131,1,125,5,110,36,124,1,100,2, - 117,1,114,30,124,1,110,2,105,0,125,6,116,1,124,6, - 131,1,125,7,116,0,124,0,124,7,124,4,131,3,125,5, - 124,3,115,148,124,4,100,1,107,2,114,84,116,0,124,0, - 160,2,100,3,161,1,100,1,25,0,131,1,83,0,124,0, - 115,92,124,5,83,0,116,3,124,0,131,1,116,3,124,0, - 160,2,100,3,161,1,100,1,25,0,131,1,24,0,125,8, - 116,4,106,5,124,5,106,6,100,2,116,3,124,5,106,6, - 131,1,124,8,24,0,133,2,25,0,25,0,83,0,116,7, - 124,5,100,4,131,2,114,170,116,8,124,5,124,3,116,0, - 131,3,83,0,124,5,83,0,41,5,97,215,1,0,0,73, - 109,112,111,114,116,32,97,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,84,104,101,32,39,103,108,111,98,97,108, - 115,39,32,97,114,103,117,109,101,110,116,32,105,115,32,117, - 115,101,100,32,116,111,32,105,110,102,101,114,32,119,104,101, - 114,101,32,116,104,101,32,105,109,112,111,114,116,32,105,115, - 32,111,99,99,117,114,114,105,110,103,32,102,114,111,109,10, - 32,32,32,32,116,111,32,104,97,110,100,108,101,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,115,46,32, - 84,104,101,32,39,108,111,99,97,108,115,39,32,97,114,103, - 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100, - 46,32,84,104,101,10,32,32,32,32,39,102,114,111,109,108, - 105,115,116,39,32,97,114,103,117,109,101,110,116,32,115,112, - 101,99,105,102,105,101,115,32,119,104,97,116,32,115,104,111, - 117,108,100,32,101,120,105,115,116,32,97,115,32,97,116,116, - 114,105,98,117,116,101,115,32,111,110,32,116,104,101,32,109, - 111,100,117,108,101,10,32,32,32,32,98,101,105,110,103,32, - 105,109,112,111,114,116,101,100,32,40,101,46,103,46,32,96, - 96,102,114,111,109,32,109,111,100,117,108,101,32,105,109,112, - 111,114,116,32,60,102,114,111,109,108,105,115,116,62,96,96, - 41,46,32,32,84,104,101,32,39,108,101,118,101,108,39,10, - 32,32,32,32,97,114,103,117,109,101,110,116,32,114,101,112, - 114,101,115,101,110,116,115,32,116,104,101,32,112,97,99,107, - 97,103,101,32,108,111,99,97,116,105,111,110,32,116,111,32, - 105,109,112,111,114,116,32,102,114,111,109,32,105,110,32,97, - 32,114,101,108,97,116,105,118,101,10,32,32,32,32,105,109, - 112,111,114,116,32,40,101,46,103,46,32,96,96,102,114,111, - 109,32,46,46,112,107,103,32,105,109,112,111,114,116,32,109, - 111,100,96,96,32,119,111,117,108,100,32,104,97,118,101,32, - 97,32,39,108,101,118,101,108,39,32,111,102,32,50,41,46, - 10,10,32,32,32,32,114,25,0,0,0,78,114,141,0,0, - 0,114,154,0,0,0,41,9,114,228,0,0,0,114,239,0, - 0,0,218,9,112,97,114,116,105,116,105,111,110,114,207,0, - 0,0,114,18,0,0,0,114,105,0,0,0,114,9,0,0, - 0,114,11,0,0,0,114,233,0,0,0,41,9,114,20,0, - 0,0,114,238,0,0,0,218,6,108,111,99,97,108,115,114, - 234,0,0,0,114,209,0,0,0,114,110,0,0,0,90,8, - 103,108,111,98,97,108,115,95,114,208,0,0,0,90,7,99, - 117,116,95,111,102,102,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,218,10,95,95,105,109,112,111,114,116,95, - 95,87,4,0,0,115,32,0,0,0,8,11,10,1,16,2, - 8,1,12,1,4,1,8,3,18,1,4,1,4,1,26,4, - 30,3,10,1,12,1,4,2,255,128,114,242,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,160, - 1,124,0,161,1,125,1,124,1,100,0,117,0,114,30,116, - 2,100,1,124,0,23,0,131,1,130,1,116,3,124,1,131, - 1,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116, - 45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100, - 32,41,4,114,175,0,0,0,114,183,0,0,0,114,87,0, - 0,0,114,173,0,0,0,41,2,114,20,0,0,0,114,109, + 218,17,95,102,105,110,100,95,115,112,101,99,95,108,101,103, + 97,99,121,137,3,0,0,115,14,0,0,0,14,1,12,2, + 12,1,8,1,4,1,10,1,255,128,114,212,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, + 10,0,0,0,67,0,0,0,115,24,1,0,0,116,0,106, + 1,125,3,124,3,100,1,117,0,114,11,116,2,100,2,131, + 1,130,1,124,3,115,19,116,3,160,4,100,3,116,5,161, + 2,1,0,124,0,116,0,106,6,118,0,125,4,124,3,68, + 0,93,109,125,5,116,7,131,0,143,46,1,0,122,5,124, + 5,106,8,125,6,87,0,110,26,4,0,116,9,121,139,1, + 0,1,0,1,0,116,10,124,5,124,0,124,1,131,3,125, + 7,124,7,100,1,117,0,114,62,89,0,87,0,100,1,4, + 0,4,0,131,3,1,0,113,26,89,0,110,6,124,6,124, + 0,124,1,124,2,131,3,125,7,87,0,100,1,4,0,4, + 0,131,3,1,0,110,8,49,0,115,80,119,1,1,0,1, + 0,1,0,89,0,1,0,124,7,100,1,117,1,114,135,124, + 4,115,131,124,0,116,0,106,6,118,0,114,131,116,0,106, + 6,124,0,25,0,125,8,122,5,124,8,106,11,125,9,87, + 0,110,12,4,0,116,9,121,138,1,0,1,0,1,0,124, + 7,6,0,89,0,2,0,1,0,83,0,124,9,100,1,117, + 0,114,127,124,7,2,0,1,0,83,0,124,9,2,0,1, + 0,83,0,124,7,2,0,1,0,83,0,113,26,100,1,83, + 0,119,0,119,0,41,4,122,21,70,105,110,100,32,97,32, + 109,111,100,117,108,101,39,115,32,115,112,101,99,46,78,122, + 53,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, + 115,32,78,111,110,101,44,32,80,121,116,104,111,110,32,105, + 115,32,108,105,107,101,108,121,32,115,104,117,116,116,105,110, + 103,32,100,111,119,110,122,22,115,121,115,46,109,101,116,97, + 95,112,97,116,104,32,105,115,32,101,109,112,116,121,41,12, + 114,18,0,0,0,218,9,109,101,116,97,95,112,97,116,104, + 114,87,0,0,0,114,101,0,0,0,114,102,0,0,0,114, + 169,0,0,0,114,105,0,0,0,114,199,0,0,0,114,183, + 0,0,0,114,2,0,0,0,114,212,0,0,0,114,113,0, + 0,0,41,10,114,20,0,0,0,114,181,0,0,0,114,182, + 0,0,0,114,213,0,0,0,90,9,105,115,95,114,101,108, + 111,97,100,114,211,0,0,0,114,183,0,0,0,114,109,0, + 0,0,114,110,0,0,0,114,113,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,10,95,102,105, + 110,100,95,115,112,101,99,147,3,0,0,115,66,0,0,0, + 6,2,8,1,8,2,4,3,12,1,10,5,8,1,8,1, + 2,1,10,1,12,1,12,1,8,1,16,1,4,255,12,3, + 30,128,8,1,14,2,10,1,2,1,10,1,12,1,12,4, + 8,2,8,1,8,2,8,2,2,239,4,19,2,243,2,244, + 255,128,114,214,0,0,0,99,3,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, + 115,110,0,0,0,116,0,124,0,116,1,131,2,115,14,116, + 2,100,1,160,3,116,4,124,0,131,1,161,1,131,1,130, + 1,124,2,100,2,107,0,114,22,116,5,100,3,131,1,130, + 1,124,2,100,2,107,4,114,41,116,0,124,1,116,1,131, + 2,115,35,116,2,100,4,131,1,130,1,124,1,115,41,116, + 6,100,5,131,1,130,1,124,0,115,53,124,2,100,2,107, + 2,114,51,116,5,100,6,131,1,130,1,100,7,83,0,100, + 7,83,0,41,8,122,28,86,101,114,105,102,121,32,97,114, + 103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,110, + 101,34,46,122,31,109,111,100,117,108,101,32,110,97,109,101, + 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111, + 116,32,123,125,114,25,0,0,0,122,18,108,101,118,101,108, + 32,109,117,115,116,32,98,101,32,62,61,32,48,122,31,95, + 95,112,97,99,107,97,103,101,95,95,32,110,111,116,32,115, + 101,116,32,116,111,32,97,32,115,116,114,105,110,103,122,54, + 97,116,116,101,109,112,116,101,100,32,114,101,108,97,116,105, + 118,101,32,105,109,112,111,114,116,32,119,105,116,104,32,110, + 111,32,107,110,111,119,110,32,112,97,114,101,110,116,32,112, + 97,99,107,97,103,101,122,17,69,109,112,116,121,32,109,111, + 100,117,108,101,32,110,97,109,101,78,41,7,218,10,105,115, + 105,110,115,116,97,110,99,101,218,3,115,116,114,218,9,84, + 121,112,101,69,114,114,111,114,114,50,0,0,0,114,3,0, + 0,0,218,10,86,97,108,117,101,69,114,114,111,114,114,87, + 0,0,0,169,3,114,20,0,0,0,114,208,0,0,0,114, + 209,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,13,95,115,97,110,105,116,121,95,99,104,101, + 99,107,194,3,0,0,115,26,0,0,0,10,2,18,1,8, + 1,8,1,8,1,10,1,8,1,4,1,8,1,12,2,8, + 1,8,255,255,128,114,220,0,0,0,122,16,78,111,32,109, + 111,100,117,108,101,32,110,97,109,101,100,32,122,4,123,33, + 114,125,99,2,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,8,0,0,0,67,0,0,0,115,16,1,0,0, + 100,0,125,2,124,0,160,0,100,1,161,1,100,2,25,0, + 125,3,124,3,114,63,124,3,116,1,106,2,118,1,114,21, + 116,3,124,1,124,3,131,2,1,0,124,0,116,1,106,2, + 118,0,114,31,116,1,106,2,124,0,25,0,83,0,116,1, + 106,2,124,3,25,0,125,4,122,5,124,4,106,4,125,2, + 87,0,110,21,4,0,116,5,121,135,1,0,1,0,1,0, + 116,6,100,3,23,0,160,7,124,0,124,3,161,2,125,5, + 116,8,124,5,124,0,100,4,141,2,100,0,130,2,116,9, + 124,0,124,2,131,2,125,6,124,6,100,0,117,0,114,81, + 116,8,116,6,160,7,124,0,161,1,124,0,100,4,141,2, + 130,1,116,10,124,6,131,1,125,7,124,3,114,132,116,1, + 106,2,124,3,25,0,125,4,124,0,160,0,100,1,161,1, + 100,5,25,0,125,8,122,9,116,11,124,4,124,8,124,7, + 131,3,1,0,87,0,124,7,83,0,4,0,116,5,121,134, + 1,0,1,0,1,0,100,6,124,3,155,2,100,7,124,8, + 155,2,157,4,125,5,116,12,160,13,124,5,116,14,161,2, + 1,0,89,0,124,7,83,0,124,7,83,0,119,0,119,0, + 41,8,78,114,141,0,0,0,114,25,0,0,0,122,23,59, + 32,123,33,114,125,32,105,115,32,110,111,116,32,97,32,112, + 97,99,107,97,103,101,114,19,0,0,0,233,2,0,0,0, + 122,27,67,97,110,110,111,116,32,115,101,116,32,97,110,32, + 97,116,116,114,105,98,117,116,101,32,111,110,32,122,18,32, + 102,111,114,32,99,104,105,108,100,32,109,111,100,117,108,101, + 32,41,15,114,142,0,0,0,114,18,0,0,0,114,105,0, + 0,0,114,74,0,0,0,114,154,0,0,0,114,2,0,0, + 0,218,8,95,69,82,82,95,77,83,71,114,50,0,0,0, + 218,19,77,111,100,117,108,101,78,111,116,70,111,117,110,100, + 69,114,114,111,114,114,214,0,0,0,114,173,0,0,0,114, + 12,0,0,0,114,101,0,0,0,114,102,0,0,0,114,169, + 0,0,0,41,9,114,20,0,0,0,218,7,105,109,112,111, + 114,116,95,114,181,0,0,0,114,143,0,0,0,90,13,112, + 97,114,101,110,116,95,109,111,100,117,108,101,114,108,0,0, + 0,114,109,0,0,0,114,110,0,0,0,90,5,99,104,105, + 108,100,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,23,95,102,105,110,100,95,97,110,100,95,108,111,97, + 100,95,117,110,108,111,99,107,101,100,213,3,0,0,115,60, + 0,0,0,4,1,14,1,4,1,10,1,10,1,10,2,10, + 1,10,1,2,1,10,1,12,1,16,1,14,1,10,1,8, + 1,18,1,8,2,4,1,10,2,14,1,2,1,14,1,4, + 4,12,253,16,1,14,1,8,1,2,253,2,242,255,128,114, + 225,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,8,0,0,0,67,0,0,0,115,128,0, + 0,0,116,0,124,0,131,1,143,31,1,0,116,1,106,2, + 160,3,124,0,116,4,161,2,125,2,124,2,116,4,117,0, + 114,28,116,5,124,0,124,1,131,2,87,0,2,0,100,1, + 4,0,4,0,131,3,1,0,83,0,87,0,100,1,4,0, + 4,0,131,3,1,0,110,8,49,0,115,38,119,1,1,0, + 1,0,1,0,89,0,1,0,124,2,100,1,117,0,114,58, + 100,2,160,6,124,0,161,1,125,3,116,7,124,3,124,0, + 100,3,141,2,130,1,116,8,124,0,131,1,1,0,124,2, + 83,0,41,4,122,25,70,105,110,100,32,97,110,100,32,108, + 111,97,100,32,116,104,101,32,109,111,100,117,108,101,46,78, + 122,40,105,109,112,111,114,116,32,111,102,32,123,125,32,104, + 97,108,116,101,100,59,32,78,111,110,101,32,105,110,32,115, + 121,115,46,109,111,100,117,108,101,115,114,19,0,0,0,41, + 9,114,57,0,0,0,114,18,0,0,0,114,105,0,0,0, + 114,38,0,0,0,218,14,95,78,69,69,68,83,95,76,79, + 65,68,73,78,71,114,225,0,0,0,114,50,0,0,0,114, + 223,0,0,0,114,72,0,0,0,41,4,114,20,0,0,0, + 114,224,0,0,0,114,110,0,0,0,114,82,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,14, + 95,102,105,110,100,95,97,110,100,95,108,111,97,100,248,3, + 0,0,115,28,0,0,0,10,2,14,1,8,1,24,1,14, + 255,16,128,8,3,2,1,6,1,2,255,12,2,8,2,4, + 1,255,128,114,227,0,0,0,114,25,0,0,0,99,3,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, + 0,0,67,0,0,0,115,42,0,0,0,116,0,124,0,124, + 1,124,2,131,3,1,0,124,2,100,1,107,4,114,16,116, + 1,124,0,124,1,124,2,131,3,125,0,116,2,124,0,116, + 3,131,2,83,0,41,3,97,50,1,0,0,73,109,112,111, + 114,116,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, + 110,32,105,116,115,32,110,97,109,101,44,32,116,104,101,32, + 112,97,99,107,97,103,101,32,116,104,101,32,99,97,108,108, + 32,105,115,10,32,32,32,32,98,101,105,110,103,32,109,97, + 100,101,32,102,114,111,109,44,32,97,110,100,32,116,104,101, + 32,108,101,118,101,108,32,97,100,106,117,115,116,109,101,110, + 116,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, + 99,116,105,111,110,32,114,101,112,114,101,115,101,110,116,115, + 32,116,104,101,32,103,114,101,97,116,101,115,116,32,99,111, + 109,109,111,110,32,100,101,110,111,109,105,110,97,116,111,114, + 32,111,102,32,102,117,110,99,116,105,111,110,97,108,105,116, + 121,10,32,32,32,32,98,101,116,119,101,101,110,32,105,109, + 112,111,114,116,95,109,111,100,117,108,101,32,97,110,100,32, + 95,95,105,109,112,111,114,116,95,95,46,32,84,104,105,115, + 32,105,110,99,108,117,100,101,115,32,115,101,116,116,105,110, + 103,32,95,95,112,97,99,107,97,103,101,95,95,32,105,102, + 10,32,32,32,32,116,104,101,32,108,111,97,100,101,114,32, + 100,105,100,32,110,111,116,46,10,10,32,32,32,32,114,25, + 0,0,0,78,41,4,114,220,0,0,0,114,210,0,0,0, + 114,227,0,0,0,218,11,95,103,99,100,95,105,109,112,111, + 114,116,114,219,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,228,0,0,0,8,4,0,0,115, + 10,0,0,0,12,9,8,1,12,1,10,1,255,128,114,228, + 0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,101, + 99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,0, + 0,11,0,0,0,67,0,0,0,115,218,0,0,0,124,1, + 68,0,93,103,125,4,116,0,124,4,116,1,131,2,115,32, + 124,3,114,17,124,0,106,2,100,1,23,0,125,5,110,2, + 100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,4, + 124,4,131,1,106,2,155,0,157,4,131,1,130,1,124,4, + 100,5,107,2,114,53,124,3,115,52,116,5,124,0,100,6, + 131,2,114,52,116,6,124,0,124,0,106,7,124,2,100,7, + 100,8,141,4,1,0,113,2,116,5,124,0,124,4,131,2, + 115,105,100,9,160,8,124,0,106,2,124,4,161,2,125,6, + 122,7,116,9,124,2,124,6,131,2,1,0,87,0,113,2, + 4,0,116,10,121,108,1,0,125,7,1,0,122,21,124,7, + 106,11,124,6,107,2,114,100,116,12,106,13,160,14,124,6, + 116,15,161,2,100,10,117,1,114,100,87,0,89,0,100,10, + 125,7,126,7,113,2,130,0,100,10,125,7,126,7,119,1, + 113,2,124,0,83,0,119,0,41,11,122,238,70,105,103,117, + 114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,109, + 112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,101, + 116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,105, + 109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,114, + 32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,119, + 104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,111, + 10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,32, + 105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,100, + 101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,99, + 116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,105, + 110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,32, + 32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,105, + 114,101,100,46,10,10,32,32,32,32,122,8,46,95,95,97, + 108,108,95,95,122,13,96,96,102,114,111,109,32,108,105,115, + 116,39,39,122,8,73,116,101,109,32,105,110,32,122,18,32, + 109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,116, + 32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,229, + 0,0,0,114,205,0,0,0,78,41,16,114,215,0,0,0, + 114,216,0,0,0,114,9,0,0,0,114,217,0,0,0,114, + 3,0,0,0,114,11,0,0,0,218,16,95,104,97,110,100, + 108,101,95,102,114,111,109,108,105,115,116,114,232,0,0,0, + 114,50,0,0,0,114,74,0,0,0,114,223,0,0,0,114, + 20,0,0,0,114,18,0,0,0,114,105,0,0,0,114,38, + 0,0,0,114,226,0,0,0,41,8,114,110,0,0,0,218, + 8,102,114,111,109,108,105,115,116,114,224,0,0,0,114,230, + 0,0,0,218,1,120,90,5,119,104,101,114,101,90,9,102, + 114,111,109,95,110,97,109,101,90,3,101,120,99,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,233,0,0, + 0,23,4,0,0,115,58,0,0,0,8,10,10,1,4,1, + 12,1,4,2,10,1,8,1,8,255,8,2,14,1,10,1, + 2,1,6,255,2,128,10,2,14,1,2,1,14,1,14,1, + 10,4,16,1,2,255,12,2,2,1,8,128,2,245,4,12, + 2,248,255,128,114,233,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,6,0,0,0,67,0, + 0,0,115,146,0,0,0,124,0,160,0,100,1,161,1,125, + 1,124,0,160,0,100,2,161,1,125,2,124,1,100,3,117, + 1,114,41,124,2,100,3,117,1,114,39,124,1,124,2,106, + 1,107,3,114,39,116,2,106,3,100,4,124,1,155,2,100, + 5,124,2,106,1,155,2,100,6,157,5,116,4,100,7,100, + 8,141,3,1,0,124,1,83,0,124,2,100,3,117,1,114, + 48,124,2,106,1,83,0,116,2,106,3,100,9,116,4,100, + 7,100,8,141,3,1,0,124,0,100,10,25,0,125,1,100, + 11,124,0,118,1,114,71,124,1,160,5,100,12,161,1,100, + 13,25,0,125,1,124,1,83,0,41,14,122,167,67,97,108, + 99,117,108,97,116,101,32,119,104,97,116,32,95,95,112,97, + 99,107,97,103,101,95,95,32,115,104,111,117,108,100,32,98, + 101,46,10,10,32,32,32,32,95,95,112,97,99,107,97,103, + 101,95,95,32,105,115,32,110,111,116,32,103,117,97,114,97, + 110,116,101,101,100,32,116,111,32,98,101,32,100,101,102,105, + 110,101,100,32,111,114,32,99,111,117,108,100,32,98,101,32, + 115,101,116,32,116,111,32,78,111,110,101,10,32,32,32,32, + 116,111,32,114,101,112,114,101,115,101,110,116,32,116,104,97, + 116,32,105,116,115,32,112,114,111,112,101,114,32,118,97,108, + 117,101,32,105,115,32,117,110,107,110,111,119,110,46,10,10, + 32,32,32,32,114,158,0,0,0,114,113,0,0,0,78,122, + 32,95,95,112,97,99,107,97,103,101,95,95,32,33,61,32, + 95,95,115,112,101,99,95,95,46,112,97,114,101,110,116,32, + 40,122,4,32,33,61,32,250,1,41,233,3,0,0,0,41, + 1,90,10,115,116,97,99,107,108,101,118,101,108,122,89,99, + 97,110,39,116,32,114,101,115,111,108,118,101,32,112,97,99, + 107,97,103,101,32,102,114,111,109,32,95,95,115,112,101,99, + 95,95,32,111,114,32,95,95,112,97,99,107,97,103,101,95, + 95,44,32,102,97,108,108,105,110,103,32,98,97,99,107,32, + 111,110,32,95,95,110,97,109,101,95,95,32,97,110,100,32, + 95,95,112,97,116,104,95,95,114,9,0,0,0,114,154,0, + 0,0,114,141,0,0,0,114,25,0,0,0,41,6,114,38, + 0,0,0,114,143,0,0,0,114,101,0,0,0,114,102,0, + 0,0,114,169,0,0,0,114,142,0,0,0,41,3,218,7, + 103,108,111,98,97,108,115,114,208,0,0,0,114,109,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, + 101,95,95,60,4,0,0,115,44,0,0,0,10,7,10,1, + 8,1,18,1,6,1,2,1,4,255,4,1,6,255,4,2, + 6,254,4,3,8,1,6,1,6,2,4,2,6,254,8,3, + 8,1,14,1,4,1,255,128,114,239,0,0,0,114,5,0, + 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,5,0,0,0,67,0,0,0,115,174,0,0,0, + 124,4,100,1,107,2,114,9,116,0,124,0,131,1,125,5, + 110,18,124,1,100,2,117,1,114,15,124,1,110,1,105,0, + 125,6,116,1,124,6,131,1,125,7,116,0,124,0,124,7, + 124,4,131,3,125,5,124,3,115,74,124,4,100,1,107,2, + 114,42,116,0,124,0,160,2,100,3,161,1,100,1,25,0, + 131,1,83,0,124,0,115,46,124,5,83,0,116,3,124,0, + 131,1,116,3,124,0,160,2,100,3,161,1,100,1,25,0, + 131,1,24,0,125,8,116,4,106,5,124,5,106,6,100,2, + 116,3,124,5,106,6,131,1,124,8,24,0,133,2,25,0, + 25,0,83,0,116,7,124,5,100,4,131,2,114,85,116,8, + 124,5,124,3,116,0,131,3,83,0,124,5,83,0,41,5, + 97,215,1,0,0,73,109,112,111,114,116,32,97,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,84,104,101,32,39, + 103,108,111,98,97,108,115,39,32,97,114,103,117,109,101,110, + 116,32,105,115,32,117,115,101,100,32,116,111,32,105,110,102, + 101,114,32,119,104,101,114,101,32,116,104,101,32,105,109,112, + 111,114,116,32,105,115,32,111,99,99,117,114,114,105,110,103, + 32,102,114,111,109,10,32,32,32,32,116,111,32,104,97,110, + 100,108,101,32,114,101,108,97,116,105,118,101,32,105,109,112, + 111,114,116,115,46,32,84,104,101,32,39,108,111,99,97,108, + 115,39,32,97,114,103,117,109,101,110,116,32,105,115,32,105, + 103,110,111,114,101,100,46,32,84,104,101,10,32,32,32,32, + 39,102,114,111,109,108,105,115,116,39,32,97,114,103,117,109, + 101,110,116,32,115,112,101,99,105,102,105,101,115,32,119,104, + 97,116,32,115,104,111,117,108,100,32,101,120,105,115,116,32, + 97,115,32,97,116,116,114,105,98,117,116,101,115,32,111,110, + 32,116,104,101,32,109,111,100,117,108,101,10,32,32,32,32, + 98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,40, + 101,46,103,46,32,96,96,102,114,111,109,32,109,111,100,117, + 108,101,32,105,109,112,111,114,116,32,60,102,114,111,109,108, + 105,115,116,62,96,96,41,46,32,32,84,104,101,32,39,108, + 101,118,101,108,39,10,32,32,32,32,97,114,103,117,109,101, + 110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104, + 101,32,112,97,99,107,97,103,101,32,108,111,99,97,116,105, + 111,110,32,116,111,32,105,109,112,111,114,116,32,102,114,111, + 109,32,105,110,32,97,32,114,101,108,97,116,105,118,101,10, + 32,32,32,32,105,109,112,111,114,116,32,40,101,46,103,46, + 32,96,96,102,114,111,109,32,46,46,112,107,103,32,105,109, + 112,111,114,116,32,109,111,100,96,96,32,119,111,117,108,100, + 32,104,97,118,101,32,97,32,39,108,101,118,101,108,39,32, + 111,102,32,50,41,46,10,10,32,32,32,32,114,25,0,0, + 0,78,114,141,0,0,0,114,154,0,0,0,41,9,114,228, + 0,0,0,114,239,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,207,0,0,0,114,18,0,0,0,114,105,0, + 0,0,114,9,0,0,0,114,11,0,0,0,114,233,0,0, + 0,41,9,114,20,0,0,0,114,238,0,0,0,218,6,108, + 111,99,97,108,115,114,234,0,0,0,114,209,0,0,0,114, + 110,0,0,0,90,8,103,108,111,98,97,108,115,95,114,208, + 0,0,0,90,7,99,117,116,95,111,102,102,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,10,95,95,105, + 109,112,111,114,116,95,95,87,4,0,0,115,32,0,0,0, + 8,11,10,1,16,2,8,1,12,1,4,1,8,3,18,1, + 4,1,4,1,26,4,30,3,10,1,12,1,4,2,255,128, + 114,242,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,116,0,160,1,124,0,161,1,125,1,124,1,100, + 0,117,0,114,15,116,2,100,1,124,0,23,0,131,1,130, + 1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,111, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,41,4,114,175,0,0,0,114,183, + 0,0,0,114,87,0,0,0,114,173,0,0,0,41,2,114, + 20,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,124,4,0,0, + 115,10,0,0,0,10,1,8,1,12,1,8,1,255,128,114, + 243,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,10,0,0,0,5,0,0,0,67,0,0,0,115,166,0, + 0,0,124,1,97,0,124,0,97,1,116,2,116,1,131,1, + 125,2,116,1,106,3,160,4,161,0,68,0,93,36,92,2, + 125,3,125,4,116,5,124,4,124,2,131,2,114,49,124,3, + 116,1,106,6,118,0,114,30,116,7,125,5,110,9,116,0, + 160,8,124,3,161,1,114,38,116,9,125,5,110,1,113,13, + 116,10,124,4,124,5,131,2,125,6,116,11,124,6,124,4, + 131,2,1,0,113,13,116,1,106,3,116,12,25,0,125,7, + 100,1,68,0,93,23,125,8,124,8,116,1,106,3,118,1, + 114,69,116,13,124,8,131,1,125,9,110,5,116,1,106,3, + 124,8,25,0,125,9,116,14,124,7,124,8,124,9,131,3, + 1,0,113,57,100,2,83,0,41,3,122,250,83,101,116,117, + 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, + 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, + 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, + 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101, + 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, + 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105, + 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115, + 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32, + 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100, + 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116, + 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44, + 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108, + 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105, + 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46, + 10,10,32,32,32,32,41,3,114,26,0,0,0,114,101,0, + 0,0,114,71,0,0,0,78,41,15,114,64,0,0,0,114, + 18,0,0,0,114,3,0,0,0,114,105,0,0,0,218,5, + 105,116,101,109,115,114,215,0,0,0,114,86,0,0,0,114, + 175,0,0,0,114,98,0,0,0,114,192,0,0,0,114,155, + 0,0,0,114,161,0,0,0,114,9,0,0,0,114,243,0, + 0,0,114,12,0,0,0,41,10,218,10,115,121,115,95,109, + 111,100,117,108,101,218,11,95,105,109,112,95,109,111,100,117, + 108,101,90,11,109,111,100,117,108,101,95,116,121,112,101,114, + 20,0,0,0,114,110,0,0,0,114,122,0,0,0,114,109, + 0,0,0,90,11,115,101,108,102,95,109,111,100,117,108,101, + 90,12,98,117,105,108,116,105,110,95,110,97,109,101,90,14, + 98,117,105,108,116,105,110,95,109,111,100,117,108,101,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,6,95, + 115,101,116,117,112,131,4,0,0,115,42,0,0,0,4,9, + 4,1,8,3,18,1,10,1,10,1,6,1,10,1,6,1, + 2,2,10,1,10,1,2,128,10,3,8,1,10,1,10,1, + 10,2,14,1,4,251,255,128,114,247,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,67,0,0,0,115,38,0,0,0,116,0,124,0,124, + 1,131,2,1,0,116,1,106,2,160,3,116,4,161,1,1, + 0,116,1,106,2,160,3,116,5,161,1,1,0,100,1,83, + 0,41,2,122,48,73,110,115,116,97,108,108,32,105,109,112, + 111,114,116,101,114,115,32,102,111,114,32,98,117,105,108,116, + 105,110,32,97,110,100,32,102,114,111,122,101,110,32,109,111, + 100,117,108,101,115,78,41,6,114,247,0,0,0,114,18,0, + 0,0,114,213,0,0,0,114,132,0,0,0,114,175,0,0, + 0,114,192,0,0,0,41,2,114,245,0,0,0,114,246,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,8,95,105,110,115,116,97,108,108,166,4,0,0,115, + 8,0,0,0,10,2,12,2,16,1,255,128,114,248,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,67,0,0,0,115,32,0,0,0,100, + 1,100,2,108,0,125,0,124,0,97,1,124,0,160,2,116, + 3,106,4,116,5,25,0,161,1,1,0,100,2,83,0,41, + 3,122,57,73,110,115,116,97,108,108,32,105,109,112,111,114, + 116,101,114,115,32,116,104,97,116,32,114,101,113,117,105,114, + 101,32,101,120,116,101,114,110,97,108,32,102,105,108,101,115, + 121,115,116,101,109,32,97,99,99,101,115,115,114,25,0,0, + 0,78,41,6,218,26,95,102,114,111,122,101,110,95,105,109, + 112,111,114,116,108,105,98,95,101,120,116,101,114,110,97,108, + 114,139,0,0,0,114,248,0,0,0,114,18,0,0,0,114, + 105,0,0,0,114,9,0,0,0,41,1,114,249,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 27,95,105,110,115,116,97,108,108,95,101,120,116,101,114,110, + 97,108,95,105,109,112,111,114,116,101,114,115,174,4,0,0, + 115,8,0,0,0,8,3,4,1,20,1,255,128,114,250,0, + 0,0,41,2,78,78,41,1,78,41,2,78,114,25,0,0, + 0,41,4,78,78,114,5,0,0,0,114,25,0,0,0,41, + 54,114,10,0,0,0,114,7,0,0,0,114,26,0,0,0, + 114,101,0,0,0,114,71,0,0,0,114,139,0,0,0,114, + 17,0,0,0,114,21,0,0,0,114,66,0,0,0,114,37, + 0,0,0,114,47,0,0,0,114,22,0,0,0,114,23,0, + 0,0,114,55,0,0,0,114,57,0,0,0,114,60,0,0, + 0,114,72,0,0,0,114,74,0,0,0,114,83,0,0,0, + 114,95,0,0,0,114,100,0,0,0,114,111,0,0,0,114, + 124,0,0,0,114,125,0,0,0,114,104,0,0,0,114,155, + 0,0,0,114,161,0,0,0,114,165,0,0,0,114,119,0, + 0,0,114,106,0,0,0,114,172,0,0,0,114,173,0,0, + 0,114,107,0,0,0,114,175,0,0,0,114,192,0,0,0, + 114,199,0,0,0,114,210,0,0,0,114,212,0,0,0,114, + 214,0,0,0,114,220,0,0,0,90,15,95,69,82,82,95, + 77,83,71,95,80,82,69,70,73,88,114,222,0,0,0,114, + 225,0,0,0,218,6,111,98,106,101,99,116,114,226,0,0, + 0,114,227,0,0,0,114,228,0,0,0,114,233,0,0,0, + 114,239,0,0,0,114,242,0,0,0,114,243,0,0,0,114, + 247,0,0,0,114,248,0,0,0,114,250,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111, - 109,95,110,97,109,101,124,4,0,0,115,10,0,0,0,10, - 1,8,1,12,1,8,1,255,128,114,243,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,5, - 0,0,0,67,0,0,0,115,166,0,0,0,124,1,97,0, - 124,0,97,1,116,2,116,1,131,1,125,2,116,1,106,3, - 160,4,161,0,68,0,93,72,92,2,125,3,125,4,116,5, - 124,4,124,2,131,2,114,98,124,3,116,1,106,6,118,0, - 114,60,116,7,125,5,110,18,116,0,160,8,124,3,161,1, - 114,76,116,9,125,5,110,2,113,26,116,10,124,4,124,5, - 131,2,125,6,116,11,124,6,124,4,131,2,1,0,113,26, - 116,1,106,3,116,12,25,0,125,7,100,1,68,0,93,46, - 125,8,124,8,116,1,106,3,118,1,114,138,116,13,124,8, - 131,1,125,9,110,10,116,1,106,3,124,8,25,0,125,9, - 116,14,124,7,124,8,124,9,131,3,1,0,113,114,100,2, - 83,0,41,3,122,250,83,101,116,117,112,32,105,109,112,111, - 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105, - 110,103,32,110,101,101,100,101,100,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,32,97,110,100,32,105, - 110,106,101,99,116,105,110,103,32,116,104,101,109,10,32,32, - 32,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97, - 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32, - 32,32,65,115,32,115,121,115,32,105,115,32,110,101,101,100, - 101,100,32,102,111,114,32,115,121,115,46,109,111,100,117,108, - 101,115,32,97,99,99,101,115,115,32,97,110,100,32,95,105, - 109,112,32,105,115,32,110,101,101,100,101,100,32,116,111,32, - 108,111,97,100,32,98,117,105,108,116,45,105,110,10,32,32, - 32,32,109,111,100,117,108,101,115,44,32,116,104,111,115,101, - 32,116,119,111,32,109,111,100,117,108,101,115,32,109,117,115, - 116,32,98,101,32,101,120,112,108,105,99,105,116,108,121,32, - 112,97,115,115,101,100,32,105,110,46,10,10,32,32,32,32, - 41,3,114,26,0,0,0,114,101,0,0,0,114,71,0,0, - 0,78,41,15,114,64,0,0,0,114,18,0,0,0,114,3, - 0,0,0,114,105,0,0,0,218,5,105,116,101,109,115,114, - 215,0,0,0,114,86,0,0,0,114,175,0,0,0,114,98, - 0,0,0,114,192,0,0,0,114,155,0,0,0,114,161,0, - 0,0,114,9,0,0,0,114,243,0,0,0,114,12,0,0, - 0,41,10,218,10,115,121,115,95,109,111,100,117,108,101,218, - 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, - 100,117,108,101,95,116,121,112,101,114,20,0,0,0,114,110, - 0,0,0,114,122,0,0,0,114,109,0,0,0,90,11,115, - 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, - 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, - 110,95,109,111,100,117,108,101,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,131, - 4,0,0,115,42,0,0,0,4,9,4,1,8,3,18,1, - 10,1,10,1,6,1,10,1,6,1,2,2,10,1,10,1, - 2,128,10,3,8,1,10,1,10,1,10,2,14,1,4,251, - 255,128,114,247,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,38,0,0,0,116,0,124,0,124,1,131,2,1,0,116, - 1,106,2,160,3,116,4,161,1,1,0,116,1,106,2,160, - 3,116,5,161,1,1,0,100,1,83,0,41,2,122,48,73, - 110,115,116,97,108,108,32,105,109,112,111,114,116,101,114,115, - 32,102,111,114,32,98,117,105,108,116,105,110,32,97,110,100, - 32,102,114,111,122,101,110,32,109,111,100,117,108,101,115,78, - 41,6,114,247,0,0,0,114,18,0,0,0,114,213,0,0, - 0,114,132,0,0,0,114,175,0,0,0,114,192,0,0,0, - 41,2,114,245,0,0,0,114,246,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,8,95,105,110, - 115,116,97,108,108,166,4,0,0,115,8,0,0,0,10,2, - 12,2,16,1,255,128,114,248,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 67,0,0,0,115,32,0,0,0,100,1,100,2,108,0,125, - 0,124,0,97,1,124,0,160,2,116,3,106,4,116,5,25, - 0,161,1,1,0,100,2,83,0,41,3,122,57,73,110,115, - 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,116, - 104,97,116,32,114,101,113,117,105,114,101,32,101,120,116,101, - 114,110,97,108,32,102,105,108,101,115,121,115,116,101,109,32, - 97,99,99,101,115,115,114,25,0,0,0,78,41,6,218,26, - 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, - 98,95,101,120,116,101,114,110,97,108,114,139,0,0,0,114, - 248,0,0,0,114,18,0,0,0,114,105,0,0,0,114,9, - 0,0,0,41,1,114,249,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,27,95,105,110,115,116, - 97,108,108,95,101,120,116,101,114,110,97,108,95,105,109,112, - 111,114,116,101,114,115,174,4,0,0,115,8,0,0,0,8, - 3,4,1,20,1,255,128,114,250,0,0,0,41,2,78,78, - 41,1,78,41,2,78,114,25,0,0,0,41,4,78,78,114, - 5,0,0,0,114,25,0,0,0,41,54,114,10,0,0,0, - 114,7,0,0,0,114,26,0,0,0,114,101,0,0,0,114, - 71,0,0,0,114,139,0,0,0,114,17,0,0,0,114,21, - 0,0,0,114,66,0,0,0,114,37,0,0,0,114,47,0, - 0,0,114,22,0,0,0,114,23,0,0,0,114,55,0,0, - 0,114,57,0,0,0,114,60,0,0,0,114,72,0,0,0, - 114,74,0,0,0,114,83,0,0,0,114,95,0,0,0,114, - 100,0,0,0,114,111,0,0,0,114,124,0,0,0,114,125, - 0,0,0,114,104,0,0,0,114,155,0,0,0,114,161,0, - 0,0,114,165,0,0,0,114,119,0,0,0,114,106,0,0, - 0,114,172,0,0,0,114,173,0,0,0,114,107,0,0,0, - 114,175,0,0,0,114,192,0,0,0,114,199,0,0,0,114, - 210,0,0,0,114,212,0,0,0,114,214,0,0,0,114,220, - 0,0,0,90,15,95,69,82,82,95,77,83,71,95,80,82, - 69,70,73,88,114,222,0,0,0,114,225,0,0,0,218,6, - 111,98,106,101,99,116,114,226,0,0,0,114,227,0,0,0, - 114,228,0,0,0,114,233,0,0,0,114,239,0,0,0,114, - 242,0,0,0,114,243,0,0,0,114,247,0,0,0,114,248, - 0,0,0,114,250,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,8,60,109, - 111,100,117,108,101,62,1,0,0,0,115,106,0,0,0,4, - 0,8,22,4,9,4,1,4,1,4,3,8,3,8,8,4, - 8,4,2,16,3,14,4,14,77,14,21,8,16,8,37,8, - 17,14,11,8,8,8,11,8,12,8,19,14,26,16,101,10, - 26,14,45,8,72,8,17,8,17,8,30,8,36,8,45,14, - 15,14,77,14,82,8,13,8,9,10,10,8,47,4,16,8, - 1,8,2,6,32,8,3,10,16,14,15,8,37,10,27,8, - 37,8,7,8,35,12,8,255,128, + 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, + 115,106,0,0,0,4,0,8,22,4,9,4,1,4,1,4, + 3,8,3,8,8,4,8,4,2,16,3,14,4,14,77,14, + 21,8,16,8,37,8,17,14,11,8,8,8,11,8,12,8, + 19,14,26,16,101,10,26,14,45,8,72,8,17,8,17,8, + 30,8,36,8,45,14,15,14,77,14,82,8,13,8,9,10, + 10,8,47,4,16,8,1,8,2,6,32,8,3,10,16,14, + 15,8,37,10,27,8,37,8,7,8,35,12,8,255,128, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 9b5c720578ad7..0fac913f4cfea 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,15 +1,15 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,64,0,0,0,115,216,2,0,0,100,0, + 0,5,0,0,0,64,0,0,0,115,214,2,0,0,100,0, 90,0,100,1,97,1,100,2,100,1,108,2,90,2,100,2, 100,1,108,3,90,3,100,2,100,1,108,4,90,4,100,2, 100,1,108,5,90,5,100,2,100,1,108,6,90,6,101,4, - 106,7,100,3,107,2,90,8,101,8,114,80,100,2,100,1, - 108,9,90,10,100,2,100,1,108,11,90,11,110,8,100,2, - 100,1,108,12,90,10,101,8,114,102,100,4,100,5,103,2, - 90,13,110,6,100,5,103,1,90,13,101,14,100,6,100,7, - 132,0,101,13,68,0,131,1,131,1,115,130,74,0,130,1, + 106,7,100,3,107,2,90,8,101,8,114,40,100,2,100,1, + 108,9,90,10,100,2,100,1,108,11,90,11,110,4,100,2, + 100,1,108,12,90,10,101,8,114,51,100,4,100,5,103,2, + 90,13,110,3,100,5,103,1,90,13,101,14,100,6,100,7, + 132,0,101,13,68,0,131,1,131,1,115,65,74,0,130,1, 101,13,100,2,25,0,90,15,100,8,160,16,101,13,161,1, 90,13,100,9,100,10,132,0,101,13,68,0,131,1,90,17, 100,11,90,18,100,12,90,19,101,19,101,18,23,0,90,20, @@ -22,2666 +22,2663 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,36,100,37,132,1,90,33,101,34,101,33,106,35,131,1, 90,36,100,38,160,37,100,39,100,40,161,2,100,41,23,0, 90,38,101,39,160,40,101,38,100,40,161,2,90,41,100,42, - 90,42,100,43,90,43,100,44,103,1,90,44,101,8,144,1, - 114,94,101,44,160,45,100,45,161,1,1,0,101,2,160,46, - 161,0,90,47,100,46,103,1,90,48,101,48,4,0,90,49, - 90,50,100,111,100,1,100,47,156,1,100,48,100,49,132,3, - 90,51,100,50,100,51,132,0,90,52,100,52,100,53,132,0, - 90,53,100,54,100,55,132,0,90,54,100,56,100,57,132,0, - 90,55,100,58,100,59,132,0,90,56,100,60,100,61,132,0, - 90,57,100,62,100,63,132,0,90,58,100,64,100,65,132,0, - 90,59,100,66,100,67,132,0,90,60,100,112,100,68,100,69, - 132,1,90,61,100,113,100,70,100,71,132,1,90,62,100,114, - 100,73,100,74,132,1,90,63,100,75,100,76,132,0,90,64, - 101,65,131,0,90,66,100,115,100,1,101,66,100,77,156,2, - 100,78,100,79,132,3,90,67,71,0,100,80,100,81,132,0, - 100,81,131,2,90,68,71,0,100,82,100,83,132,0,100,83, - 131,2,90,69,71,0,100,84,100,85,132,0,100,85,101,69, - 131,3,90,70,71,0,100,86,100,87,132,0,100,87,131,2, - 90,71,71,0,100,88,100,89,132,0,100,89,101,71,101,70, - 131,4,90,72,71,0,100,90,100,91,132,0,100,91,101,71, - 101,69,131,4,90,73,71,0,100,92,100,93,132,0,100,93, - 101,71,101,69,131,4,90,74,71,0,100,94,100,95,132,0, - 100,95,131,2,90,75,71,0,100,96,100,97,132,0,100,97, - 131,2,90,76,71,0,100,98,100,99,132,0,100,99,131,2, - 90,77,71,0,100,100,100,101,132,0,100,101,131,2,90,78, - 100,116,100,102,100,103,132,1,90,79,100,104,100,105,132,0, - 90,80,100,106,100,107,132,0,90,81,100,108,100,109,132,0, - 90,82,100,1,83,0,41,117,97,94,1,0,0,67,111,114, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,112,97,116,104,45,98,97,115,101,100,32,105, - 109,112,111,114,116,46,10,10,84,104,105,115,32,109,111,100, - 117,108,101,32,105,115,32,78,79,84,32,109,101,97,110,116, - 32,116,111,32,98,101,32,100,105,114,101,99,116,108,121,32, - 105,109,112,111,114,116,101,100,33,32,73,116,32,104,97,115, - 32,98,101,101,110,32,100,101,115,105,103,110,101,100,32,115, - 117,99,104,10,116,104,97,116,32,105,116,32,99,97,110,32, - 98,101,32,98,111,111,116,115,116,114,97,112,112,101,100,32, - 105,110,116,111,32,80,121,116,104,111,110,32,97,115,32,116, - 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,105,109,112,111,114,116,46,32,65,115,10, - 115,117,99,104,32,105,116,32,114,101,113,117,105,114,101,115, - 32,116,104,101,32,105,110,106,101,99,116,105,111,110,32,111, - 102,32,115,112,101,99,105,102,105,99,32,109,111,100,117,108, - 101,115,32,97,110,100,32,97,116,116,114,105,98,117,116,101, - 115,32,105,110,32,111,114,100,101,114,32,116,111,10,119,111, - 114,107,46,32,79,110,101,32,115,104,111,117,108,100,32,117, - 115,101,32,105,109,112,111,114,116,108,105,98,32,97,115,32, - 116,104,101,32,112,117,98,108,105,99,45,102,97,99,105,110, - 103,32,118,101,114,115,105,111,110,32,111,102,32,116,104,105, - 115,32,109,111,100,117,108,101,46,10,10,78,233,0,0,0, - 0,90,5,119,105,110,51,50,250,1,92,250,1,47,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,99,0,0,0,115,26,0,0,0,124,0,93,18, - 125,1,116,0,124,1,131,1,100,0,107,2,86,0,1,0, - 113,2,100,1,83,0,41,2,233,1,0,0,0,78,41,1, - 218,3,108,101,110,41,2,218,2,46,48,218,3,115,101,112, - 169,0,114,7,0,0,0,250,38,60,102,114,111,122,101,110, - 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, - 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218, - 9,60,103,101,110,101,120,112,114,62,46,0,0,0,115,4, - 0,0,0,26,0,255,128,114,9,0,0,0,218,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,67,0,0,0,115,22,0,0,0,104,0,124,0, - 93,14,125,1,100,0,124,1,155,0,157,2,146,2,113,4, - 83,0,41,1,250,1,58,114,7,0,0,0,41,2,114,5, - 0,0,0,218,1,115,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,9,60,115,101,116,99,111,109,112,62, - 49,0,0,0,243,4,0,0,0,22,0,255,128,114,13,0, - 0,0,41,1,218,3,119,105,110,41,2,90,6,99,121,103, - 119,105,110,90,6,100,97,114,119,105,110,99,0,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 3,0,0,0,115,62,0,0,0,116,0,106,1,160,2,116, - 3,161,1,114,50,116,0,106,1,160,2,116,4,161,1,114, - 30,100,1,137,0,110,4,100,2,137,0,135,0,102,1,100, - 3,100,4,132,8,125,0,124,0,83,0,100,5,100,4,132, - 0,125,0,124,0,83,0,41,6,78,90,12,80,89,84,72, - 79,78,67,65,83,69,79,75,115,12,0,0,0,80,89,84, - 72,79,78,67,65,83,69,79,75,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,19,0, - 0,0,115,20,0,0,0,116,0,106,1,106,2,12,0,111, - 18,136,0,116,3,106,4,118,0,83,0,41,2,122,94,84, - 114,117,101,32,105,102,32,102,105,108,101,110,97,109,101,115, - 32,109,117,115,116,32,98,101,32,99,104,101,99,107,101,100, - 32,99,97,115,101,45,105,110,115,101,110,115,105,116,105,118, - 101,108,121,32,97,110,100,32,105,103,110,111,114,101,32,101, - 110,118,105,114,111,110,109,101,110,116,32,102,108,97,103,115, - 32,97,114,101,32,110,111,116,32,115,101,116,46,78,41,5, - 218,3,115,121,115,218,5,102,108,97,103,115,218,18,105,103, - 110,111,114,101,95,101,110,118,105,114,111,110,109,101,110,116, - 218,3,95,111,115,90,7,101,110,118,105,114,111,110,114,7, - 0,0,0,169,1,218,3,107,101,121,114,7,0,0,0,114, - 8,0,0,0,218,11,95,114,101,108,97,120,95,99,97,115, - 101,66,0,0,0,243,4,0,0,0,20,2,255,128,122,37, - 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, - 46,60,108,111,99,97,108,115,62,46,95,114,101,108,97,120, - 95,99,97,115,101,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,83,0,0,0,243,4, - 0,0,0,100,1,83,0,41,3,122,53,84,114,117,101,32, - 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, - 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, - 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, - 70,78,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,22,0,0,0, - 70,0,0,0,243,4,0,0,0,4,2,255,128,41,5,114, - 16,0,0,0,218,8,112,108,97,116,102,111,114,109,218,10, - 115,116,97,114,116,115,119,105,116,104,218,27,95,67,65,83, - 69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,76, - 65,84,70,79,82,77,83,218,35,95,67,65,83,69,95,73, - 78,83,69,78,83,73,84,73,86,69,95,80,76,65,84,70, - 79,82,77,83,95,83,84,82,95,75,69,89,41,1,114,22, - 0,0,0,114,7,0,0,0,114,20,0,0,0,114,8,0, - 0,0,218,16,95,109,97,107,101,95,114,101,108,97,120,95, - 99,97,115,101,59,0,0,0,115,18,0,0,0,12,1,12, - 1,6,1,4,2,12,2,4,7,8,253,4,3,255,128,114, - 30,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,67,0,0,0,115,20,0, - 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2, - 100,3,161,2,83,0,41,5,122,42,67,111,110,118,101,114, - 116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103, - 101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100, - 105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233, - 4,0,0,0,218,6,108,105,116,116,108,101,78,41,2,218, - 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, - 218,1,120,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,12,95,112,97,99,107,95,117,105,110,116,51,50, - 78,0,0,0,114,23,0,0,0,114,37,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,67,0,0,0,243,28,0,0,0,116,0,124,0, - 131,1,100,1,107,2,115,16,74,0,130,1,116,1,160,2, - 124,0,100,2,161,2,83,0,41,4,122,47,67,111,110,118, - 101,114,116,32,52,32,98,121,116,101,115,32,105,110,32,108, - 105,116,116,108,101,45,101,110,100,105,97,110,32,116,111,32, - 97,110,32,105,110,116,101,103,101,114,46,114,32,0,0,0, - 114,33,0,0,0,78,169,3,114,4,0,0,0,114,34,0, - 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1, - 218,4,100,97,116,97,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,14,95,117,110,112,97,99,107,95,117, - 105,110,116,51,50,83,0,0,0,243,6,0,0,0,16,2, - 12,1,255,128,114,43,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, - 0,0,114,38,0,0,0,41,4,122,47,67,111,110,118,101, - 114,116,32,50,32,98,121,116,101,115,32,105,110,32,108,105, - 116,116,108,101,45,101,110,100,105,97,110,32,116,111,32,97, - 110,32,105,110,116,101,103,101,114,46,233,2,0,0,0,114, - 33,0,0,0,78,114,39,0,0,0,114,41,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,14, - 95,117,110,112,97,99,107,95,117,105,110,116,49,54,88,0, - 0,0,114,44,0,0,0,114,46,0,0,0,99,0,0,0, + 90,42,100,43,90,43,100,44,103,1,90,44,101,8,114,174, + 101,44,160,45,100,45,161,1,1,0,101,2,160,46,161,0, + 90,47,100,46,103,1,90,48,101,48,4,0,90,49,90,50, + 100,111,100,1,100,47,156,1,100,48,100,49,132,3,90,51, + 100,50,100,51,132,0,90,52,100,52,100,53,132,0,90,53, + 100,54,100,55,132,0,90,54,100,56,100,57,132,0,90,55, + 100,58,100,59,132,0,90,56,100,60,100,61,132,0,90,57, + 100,62,100,63,132,0,90,58,100,64,100,65,132,0,90,59, + 100,66,100,67,132,0,90,60,100,112,100,68,100,69,132,1, + 90,61,100,113,100,70,100,71,132,1,90,62,100,114,100,73, + 100,74,132,1,90,63,100,75,100,76,132,0,90,64,101,65, + 131,0,90,66,100,115,100,1,101,66,100,77,156,2,100,78, + 100,79,132,3,90,67,71,0,100,80,100,81,132,0,100,81, + 131,2,90,68,71,0,100,82,100,83,132,0,100,83,131,2, + 90,69,71,0,100,84,100,85,132,0,100,85,101,69,131,3, + 90,70,71,0,100,86,100,87,132,0,100,87,131,2,90,71, + 71,0,100,88,100,89,132,0,100,89,101,71,101,70,131,4, + 90,72,71,0,100,90,100,91,132,0,100,91,101,71,101,69, + 131,4,90,73,71,0,100,92,100,93,132,0,100,93,101,71, + 101,69,131,4,90,74,71,0,100,94,100,95,132,0,100,95, + 131,2,90,75,71,0,100,96,100,97,132,0,100,97,131,2, + 90,76,71,0,100,98,100,99,132,0,100,99,131,2,90,77, + 71,0,100,100,100,101,132,0,100,101,131,2,90,78,100,116, + 100,102,100,103,132,1,90,79,100,104,100,105,132,0,90,80, + 100,106,100,107,132,0,90,81,100,108,100,109,132,0,90,82, + 100,1,83,0,41,117,97,94,1,0,0,67,111,114,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,112,97,116,104,45,98,97,115,101,100,32,105,109,112, + 111,114,116,46,10,10,84,104,105,115,32,109,111,100,117,108, + 101,32,105,115,32,78,79,84,32,109,101,97,110,116,32,116, + 111,32,98,101,32,100,105,114,101,99,116,108,121,32,105,109, + 112,111,114,116,101,100,33,32,73,116,32,104,97,115,32,98, + 101,101,110,32,100,101,115,105,103,110,101,100,32,115,117,99, + 104,10,116,104,97,116,32,105,116,32,99,97,110,32,98,101, + 32,98,111,111,116,115,116,114,97,112,112,101,100,32,105,110, + 116,111,32,80,121,116,104,111,110,32,97,115,32,116,104,101, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 111,102,32,105,109,112,111,114,116,46,32,65,115,10,115,117, + 99,104,32,105,116,32,114,101,113,117,105,114,101,115,32,116, + 104,101,32,105,110,106,101,99,116,105,111,110,32,111,102,32, + 115,112,101,99,105,102,105,99,32,109,111,100,117,108,101,115, + 32,97,110,100,32,97,116,116,114,105,98,117,116,101,115,32, + 105,110,32,111,114,100,101,114,32,116,111,10,119,111,114,107, + 46,32,79,110,101,32,115,104,111,117,108,100,32,117,115,101, + 32,105,109,112,111,114,116,108,105,98,32,97,115,32,116,104, + 101,32,112,117,98,108,105,99,45,102,97,99,105,110,103,32, + 118,101,114,115,105,111,110,32,111,102,32,116,104,105,115,32, + 109,111,100,117,108,101,46,10,10,78,233,0,0,0,0,90, + 5,119,105,110,51,50,250,1,92,250,1,47,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,99,0,0,0,115,26,0,0,0,124,0,93,9,125,1, + 116,0,124,1,131,1,100,0,107,2,86,0,1,0,113,1, + 100,1,83,0,41,2,233,1,0,0,0,78,41,1,218,3, + 108,101,110,41,2,218,2,46,48,218,3,115,101,112,169,0, + 114,7,0,0,0,250,38,60,102,114,111,122,101,110,32,105, + 109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116, + 114,97,112,95,101,120,116,101,114,110,97,108,62,218,9,60, + 103,101,110,101,120,112,114,62,46,0,0,0,115,4,0,0, + 0,26,0,255,128,114,9,0,0,0,218,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,22,0,0,0,104,0,124,0,93,7, + 125,1,100,0,124,1,155,0,157,2,146,2,113,2,83,0, + 41,1,250,1,58,114,7,0,0,0,41,2,114,5,0,0, + 0,218,1,115,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,9,60,115,101,116,99,111,109,112,62,49,0, + 0,0,243,4,0,0,0,22,0,255,128,114,13,0,0,0, + 41,1,218,3,119,105,110,41,2,90,6,99,121,103,119,105, + 110,90,6,100,97,114,119,105,110,99,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,3,0, + 0,0,115,62,0,0,0,116,0,106,1,160,2,116,3,161, + 1,114,25,116,0,106,1,160,2,116,4,161,1,114,15,100, + 1,137,0,110,2,100,2,137,0,135,0,102,1,100,3,100, + 4,132,8,125,0,124,0,83,0,100,5,100,4,132,0,125, + 0,124,0,83,0,41,6,78,90,12,80,89,84,72,79,78, + 67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,79, + 78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,0, + 115,20,0,0,0,116,0,106,1,106,2,12,0,111,9,136, + 0,116,3,106,4,118,0,83,0,41,2,122,94,84,114,117, + 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, + 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, + 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, + 121,32,97,110,100,32,105,103,110,111,114,101,32,101,110,118, + 105,114,111,110,109,101,110,116,32,102,108,97,103,115,32,97, + 114,101,32,110,111,116,32,115,101,116,46,78,41,5,218,3, + 115,121,115,218,5,102,108,97,103,115,218,18,105,103,110,111, + 114,101,95,101,110,118,105,114,111,110,109,101,110,116,218,3, + 95,111,115,90,7,101,110,118,105,114,111,110,114,7,0,0, + 0,169,1,218,3,107,101,121,114,7,0,0,0,114,8,0, + 0,0,218,11,95,114,101,108,97,120,95,99,97,115,101,66, + 0,0,0,243,4,0,0,0,20,2,255,128,122,37,95,109, + 97,107,101,95,114,101,108,97,120,95,99,97,115,101,46,60, + 108,111,99,97,108,115,62,46,95,114,101,108,97,120,95,99, + 97,115,101,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,83,0,0,0,243,4,0,0, + 0,100,1,83,0,41,3,122,53,84,114,117,101,32,105,102, + 32,102,105,108,101,110,97,109,101,115,32,109,117,115,116,32, + 98,101,32,99,104,101,99,107,101,100,32,99,97,115,101,45, + 105,110,115,101,110,115,105,116,105,118,101,108,121,46,70,78, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,22,0,0,0,70,0, + 0,0,243,4,0,0,0,4,2,255,128,41,5,114,16,0, + 0,0,218,8,112,108,97,116,102,111,114,109,218,10,115,116, + 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, + 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, + 70,79,82,77,83,218,35,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,95,83,84,82,95,75,69,89,41,1,114,22,0,0, + 0,114,7,0,0,0,114,20,0,0,0,114,8,0,0,0, + 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, + 115,101,59,0,0,0,115,18,0,0,0,12,1,12,1,6, + 1,4,2,12,2,4,7,8,253,4,3,255,128,114,30,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,67,0,0,0,115,20,0,0,0, + 116,0,124,0,131,1,100,1,64,0,160,1,100,2,100,3, + 161,2,83,0,41,5,122,42,67,111,110,118,101,114,116,32, + 97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114, + 32,116,111,32,108,105,116,116,108,101,45,101,110,100,105,97, + 110,46,236,3,0,0,0,255,127,255,127,3,0,233,4,0, + 0,0,218,6,108,105,116,116,108,101,78,41,2,218,3,105, + 110,116,218,8,116,111,95,98,121,116,101,115,41,1,218,1, + 120,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,12,95,112,97,99,107,95,117,105,110,116,51,50,78,0, + 0,0,114,23,0,0,0,114,37,0,0,0,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,71,0,0,0,115,20,0,0,0,116,0,160,1,100,1, - 100,2,132,0,124,0,68,0,131,1,161,1,83,0,41,4, - 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111, - 114,32,111,115,46,112,97,116,104,46,106,111,105,110,40,41, - 46,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,5,0,0,0,83,0,0,0,115,26,0,0,0,103, - 0,124,0,93,18,125,1,124,1,114,4,124,1,160,0,116, - 1,161,1,145,2,113,4,83,0,114,7,0,0,0,41,2, - 218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,115, - 101,112,97,114,97,116,111,114,115,41,2,114,5,0,0,0, - 218,4,112,97,114,116,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,10,60,108,105,115,116,99,111,109,112, - 62,96,0,0,0,115,8,0,0,0,6,0,6,1,14,255, - 255,128,122,30,95,112,97,116,104,95,106,111,105,110,46,60, - 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, - 112,62,78,41,2,218,8,112,97,116,104,95,115,101,112,218, - 4,106,111,105,110,41,1,218,10,112,97,116,104,95,112,97, - 114,116,115,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,10,95,112,97,116,104,95,106,111,105,110,94,0, - 0,0,115,8,0,0,0,10,2,2,1,8,255,255,128,114, - 54,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,96,0, - 0,0,116,0,116,1,131,1,100,1,107,2,114,36,124,0, - 160,2,116,3,161,1,92,3,125,1,125,2,125,3,124,1, - 124,3,102,2,83,0,116,4,124,0,131,1,68,0,93,42, - 125,4,124,4,116,1,118,0,114,86,124,0,106,5,124,4, - 100,1,100,2,141,2,92,2,125,1,125,3,124,1,124,3, - 102,2,2,0,1,0,83,0,113,44,100,3,124,0,102,2, - 83,0,41,5,122,32,82,101,112,108,97,99,101,109,101,110, - 116,32,102,111,114,32,111,115,46,112,97,116,104,46,115,112, - 108,105,116,40,41,46,114,3,0,0,0,41,1,90,8,109, - 97,120,115,112,108,105,116,114,10,0,0,0,78,41,6,114, - 4,0,0,0,114,48,0,0,0,218,10,114,112,97,114,116, - 105,116,105,111,110,114,51,0,0,0,218,8,114,101,118,101, - 114,115,101,100,218,6,114,115,112,108,105,116,41,5,218,4, - 112,97,116,104,90,5,102,114,111,110,116,218,1,95,218,4, - 116,97,105,108,114,36,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,11,95,112,97,116,104,95, - 115,112,108,105,116,100,0,0,0,115,20,0,0,0,12,2, - 16,1,8,1,12,1,8,1,18,1,12,1,2,254,8,3, - 255,128,114,61,0,0,0,99,1,0,0,0,0,0,0,0, + 0,67,0,0,0,243,28,0,0,0,116,0,124,0,131,1, + 100,1,107,2,115,8,74,0,130,1,116,1,160,2,124,0, + 100,2,161,2,83,0,41,4,122,47,67,111,110,118,101,114, + 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, + 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, + 32,105,110,116,101,103,101,114,46,114,32,0,0,0,114,33, + 0,0,0,78,169,3,114,4,0,0,0,114,34,0,0,0, + 218,10,102,114,111,109,95,98,121,116,101,115,169,1,218,4, + 100,97,116,97,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,14,95,117,110,112,97,99,107,95,117,105,110, + 116,51,50,83,0,0,0,243,6,0,0,0,16,2,12,1, + 255,128,114,43,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, + 114,38,0,0,0,41,4,122,47,67,111,110,118,101,114,116, + 32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,116, + 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, + 105,110,116,101,103,101,114,46,233,2,0,0,0,114,33,0, + 0,0,78,114,39,0,0,0,114,41,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,14,95,117, + 110,112,97,99,107,95,117,105,110,116,49,54,88,0,0,0, + 114,44,0,0,0,114,46,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,71, + 0,0,0,115,20,0,0,0,116,0,160,1,100,1,100,2, + 132,0,124,0,68,0,131,1,161,1,83,0,41,4,122,31, + 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, + 111,115,46,112,97,116,104,46,106,111,105,110,40,41,46,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 5,0,0,0,83,0,0,0,115,26,0,0,0,103,0,124, + 0,93,9,125,1,124,1,114,2,124,1,160,0,116,1,161, + 1,145,2,113,2,83,0,114,7,0,0,0,41,2,218,6, + 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, + 97,114,97,116,111,114,115,41,2,114,5,0,0,0,218,4, + 112,97,114,116,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,10,60,108,105,115,116,99,111,109,112,62,96, + 0,0,0,115,8,0,0,0,6,0,6,1,14,255,255,128, + 122,30,95,112,97,116,104,95,106,111,105,110,46,60,108,111, + 99,97,108,115,62,46,60,108,105,115,116,99,111,109,112,62, + 78,41,2,218,8,112,97,116,104,95,115,101,112,218,4,106, + 111,105,110,41,1,218,10,112,97,116,104,95,112,97,114,116, + 115,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,10,95,112,97,116,104,95,106,111,105,110,94,0,0,0, + 115,8,0,0,0,10,2,2,1,8,255,255,128,114,54,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,5,0,0,0,67,0,0,0,115,96,0,0,0, + 116,0,116,1,131,1,100,1,107,2,114,18,124,0,160,2, + 116,3,161,1,92,3,125,1,125,2,125,3,124,1,124,3, + 102,2,83,0,116,4,124,0,131,1,68,0,93,21,125,4, + 124,4,116,1,118,0,114,43,124,0,106,5,124,4,100,1, + 100,2,141,2,92,2,125,1,125,3,124,1,124,3,102,2, + 2,0,1,0,83,0,113,22,100,3,124,0,102,2,83,0, + 41,5,122,32,82,101,112,108,97,99,101,109,101,110,116,32, + 102,111,114,32,111,115,46,112,97,116,104,46,115,112,108,105, + 116,40,41,46,114,3,0,0,0,41,1,90,8,109,97,120, + 115,112,108,105,116,114,10,0,0,0,78,41,6,114,4,0, + 0,0,114,48,0,0,0,218,10,114,112,97,114,116,105,116, + 105,111,110,114,51,0,0,0,218,8,114,101,118,101,114,115, + 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, + 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, + 105,108,114,36,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,11,95,112,97,116,104,95,115,112, + 108,105,116,100,0,0,0,115,20,0,0,0,12,2,16,1, + 8,1,12,1,8,1,18,1,12,1,2,254,8,3,255,128, + 114,61,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,10, + 0,0,0,116,0,160,1,124,0,161,1,83,0,41,2,122, + 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, + 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, + 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, + 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, + 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, + 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, + 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, + 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,78, + 41,2,114,19,0,0,0,90,4,115,116,97,116,169,1,114, + 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,112, + 0,0,0,115,4,0,0,0,10,7,255,128,114,63,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,8,0,0,0,67,0,0,0,115,48,0,0,0,122, + 6,116,0,124,0,131,1,125,2,87,0,110,9,4,0,116, + 1,121,23,1,0,1,0,1,0,89,0,100,1,83,0,124, + 2,106,2,100,2,64,0,124,1,107,2,83,0,119,0,41, + 4,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32, + 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116, + 121,112,101,46,70,105,0,240,0,0,78,41,3,114,63,0, + 0,0,218,7,79,83,69,114,114,111,114,218,7,115,116,95, + 109,111,100,101,41,3,114,58,0,0,0,218,4,109,111,100, + 101,90,9,115,116,97,116,95,105,110,102,111,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,18,95,112,97, + 116,104,95,105,115,95,109,111,100,101,95,116,121,112,101,122, + 0,0,0,115,14,0,0,0,2,2,12,1,12,1,6,1, + 14,1,2,254,255,128,114,67,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,10,0,0,0,116,0,124,0,100,1,131, + 2,83,0,41,3,122,31,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, + 115,102,105,108,101,46,105,0,128,0,0,78,41,1,114,67, + 0,0,0,114,62,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,12,95,112,97,116,104,95,105, + 115,102,105,108,101,131,0,0,0,243,4,0,0,0,10,2, + 255,128,114,68,0,0,0,99,1,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,10,0,0,0,116,0,160,1,124,0,161,1,83,0,41, - 2,122,126,83,116,97,116,32,116,104,101,32,112,97,116,104, - 46,10,10,32,32,32,32,77,97,100,101,32,97,32,115,101, - 112,97,114,97,116,101,32,102,117,110,99,116,105,111,110,32, - 116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101, - 114,32,116,111,32,111,118,101,114,114,105,100,101,32,105,110, - 32,101,120,112,101,114,105,109,101,110,116,115,10,32,32,32, - 32,40,101,46,103,46,32,99,97,99,104,101,32,115,116,97, - 116,32,114,101,115,117,108,116,115,41,46,10,10,32,32,32, - 32,78,41,2,114,19,0,0,0,90,4,115,116,97,116,169, - 1,114,58,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,10,95,112,97,116,104,95,115,116,97, - 116,112,0,0,0,115,4,0,0,0,10,7,255,128,114,63, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,8,0,0,0,67,0,0,0,115,48,0,0, - 0,122,12,116,0,124,0,131,1,125,2,87,0,110,18,4, - 0,116,1,121,46,1,0,1,0,1,0,89,0,100,1,83, - 0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,119, - 0,41,4,122,49,84,101,115,116,32,119,104,101,116,104,101, - 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, - 32,116,121,112,101,46,70,105,0,240,0,0,78,41,3,114, - 63,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, - 116,95,109,111,100,101,41,3,114,58,0,0,0,218,4,109, - 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,18,95, - 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, - 101,122,0,0,0,115,14,0,0,0,2,2,12,1,12,1, - 6,1,14,1,2,254,255,128,114,67,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, - 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,100, - 1,131,2,83,0,41,3,122,31,82,101,112,108,97,99,101, - 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, - 46,105,115,102,105,108,101,46,105,0,128,0,0,78,41,1, - 114,67,0,0,0,114,62,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,12,95,112,97,116,104, - 95,105,115,102,105,108,101,131,0,0,0,243,4,0,0,0, - 10,2,255,128,114,68,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,115,22,0,0,0,124,0,115,12,116,0,160,1,161, - 0,125,0,116,2,124,0,100,1,131,2,83,0,41,3,122, - 30,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, - 32,111,115,46,112,97,116,104,46,105,115,100,105,114,46,105, - 0,64,0,0,78,41,3,114,19,0,0,0,218,6,103,101, - 116,99,119,100,114,67,0,0,0,114,62,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, - 112,97,116,104,95,105,115,100,105,114,136,0,0,0,115,8, - 0,0,0,4,2,8,1,10,1,255,128,114,71,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,26,0,0,0,124,0, - 160,0,116,1,161,1,112,24,124,0,100,1,100,2,133,2, - 25,0,116,2,118,0,83,0,41,4,122,142,82,101,112,108, - 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, - 97,116,104,46,105,115,97,98,115,46,10,10,32,32,32,32, - 67,111,110,115,105,100,101,114,115,32,97,32,87,105,110,100, - 111,119,115,32,100,114,105,118,101,45,114,101,108,97,116,105, - 118,101,32,112,97,116,104,32,40,110,111,32,100,114,105,118, - 101,44,32,98,117,116,32,115,116,97,114,116,115,32,119,105, - 116,104,32,115,108,97,115,104,41,32,116,111,10,32,32,32, - 32,115,116,105,108,108,32,98,101,32,34,97,98,115,111,108, - 117,116,101,34,46,10,32,32,32,32,114,3,0,0,0,233, - 3,0,0,0,78,41,3,114,27,0,0,0,114,48,0,0, - 0,218,20,95,112,97,116,104,115,101,112,115,95,119,105,116, - 104,95,99,111,108,111,110,114,62,0,0,0,114,7,0,0, + 115,22,0,0,0,124,0,115,6,116,0,160,1,161,0,125, + 0,116,2,124,0,100,1,131,2,83,0,41,3,122,30,82, + 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, + 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, + 0,0,78,41,3,114,19,0,0,0,218,6,103,101,116,99, + 119,100,114,67,0,0,0,114,62,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,11,95,112,97, - 116,104,95,105,115,97,98,115,143,0,0,0,115,4,0,0, - 0,26,6,255,128,114,74,0,0,0,233,182,1,0,0,99, - 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 11,0,0,0,67,0,0,0,115,170,0,0,0,100,1,160, - 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160, - 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, - 6,66,0,124,2,100,2,64,0,161,3,125,4,122,72,116, - 7,160,8,124,4,100,3,161,2,143,26,125,5,124,5,160, - 9,124,1,161,1,1,0,87,0,100,4,4,0,4,0,131, - 3,1,0,110,16,49,0,115,94,119,1,1,0,1,0,1, - 0,89,0,1,0,116,2,160,10,124,3,124,0,161,2,1, - 0,87,0,100,4,83,0,4,0,116,11,121,168,1,0,1, - 0,1,0,122,14,116,2,160,12,124,3,161,1,1,0,87, - 0,130,0,4,0,116,11,121,166,1,0,1,0,1,0,89, - 0,130,0,119,0,119,0,41,5,122,162,66,101,115,116,45, - 101,102,102,111,114,116,32,102,117,110,99,116,105,111,110,32, - 116,111,32,119,114,105,116,101,32,100,97,116,97,32,116,111, - 32,97,32,112,97,116,104,32,97,116,111,109,105,99,97,108, - 108,121,46,10,32,32,32,32,66,101,32,112,114,101,112,97, - 114,101,100,32,116,111,32,104,97,110,100,108,101,32,97,32, - 70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,32, - 105,102,32,99,111,110,99,117,114,114,101,110,116,32,119,114, - 105,116,105,110,103,32,111,102,32,116,104,101,10,32,32,32, - 32,116,101,109,112,111,114,97,114,121,32,102,105,108,101,32, - 105,115,32,97,116,116,101,109,112,116,101,100,46,250,5,123, - 125,46,123,125,114,75,0,0,0,90,2,119,98,78,41,13, - 218,6,102,111,114,109,97,116,218,2,105,100,114,19,0,0, - 0,90,4,111,112,101,110,90,6,79,95,69,88,67,76,90, - 7,79,95,67,82,69,65,84,90,8,79,95,87,82,79,78, - 76,89,218,3,95,105,111,218,6,70,105,108,101,73,79,218, - 5,119,114,105,116,101,218,7,114,101,112,108,97,99,101,114, - 64,0,0,0,90,6,117,110,108,105,110,107,41,6,114,58, - 0,0,0,114,42,0,0,0,114,66,0,0,0,90,8,112, - 97,116,104,95,116,109,112,90,2,102,100,218,4,102,105,108, + 116,104,95,105,115,100,105,114,136,0,0,0,115,8,0,0, + 0,4,2,8,1,10,1,255,128,114,71,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,115,26,0,0,0,124,0,160,0, + 116,1,161,1,112,12,124,0,100,1,100,2,133,2,25,0, + 116,2,118,0,83,0,41,4,122,142,82,101,112,108,97,99, + 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, + 104,46,105,115,97,98,115,46,10,10,32,32,32,32,67,111, + 110,115,105,100,101,114,115,32,97,32,87,105,110,100,111,119, + 115,32,100,114,105,118,101,45,114,101,108,97,116,105,118,101, + 32,112,97,116,104,32,40,110,111,32,100,114,105,118,101,44, + 32,98,117,116,32,115,116,97,114,116,115,32,119,105,116,104, + 32,115,108,97,115,104,41,32,116,111,10,32,32,32,32,115, + 116,105,108,108,32,98,101,32,34,97,98,115,111,108,117,116, + 101,34,46,10,32,32,32,32,114,3,0,0,0,233,3,0, + 0,0,78,41,3,114,27,0,0,0,114,48,0,0,0,218, + 20,95,112,97,116,104,115,101,112,115,95,119,105,116,104,95, + 99,111,108,111,110,114,62,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,95,112,97,116,104, + 95,105,115,97,98,115,143,0,0,0,115,4,0,0,0,26, + 6,255,128,114,74,0,0,0,233,182,1,0,0,99,3,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,11,0, + 0,0,67,0,0,0,115,170,0,0,0,100,1,160,0,124, + 0,116,1,124,0,131,1,161,2,125,3,116,2,160,3,124, + 3,116,2,106,4,116,2,106,5,66,0,116,2,106,6,66, + 0,124,2,100,2,64,0,161,3,125,4,122,36,116,7,160, + 8,124,4,100,3,161,2,143,13,125,5,124,5,160,9,124, + 1,161,1,1,0,87,0,100,4,4,0,4,0,131,3,1, + 0,110,8,49,0,115,47,119,1,1,0,1,0,1,0,89, + 0,1,0,116,2,160,10,124,3,124,0,161,2,1,0,87, + 0,100,4,83,0,4,0,116,11,121,84,1,0,1,0,1, + 0,122,7,116,2,160,12,124,3,161,1,1,0,87,0,130, + 0,4,0,116,11,121,83,1,0,1,0,1,0,89,0,130, + 0,119,0,119,0,41,5,122,162,66,101,115,116,45,101,102, + 102,111,114,116,32,102,117,110,99,116,105,111,110,32,116,111, + 32,119,114,105,116,101,32,100,97,116,97,32,116,111,32,97, + 32,112,97,116,104,32,97,116,111,109,105,99,97,108,108,121, + 46,10,32,32,32,32,66,101,32,112,114,101,112,97,114,101, + 100,32,116,111,32,104,97,110,100,108,101,32,97,32,70,105, + 108,101,69,120,105,115,116,115,69,114,114,111,114,32,105,102, + 32,99,111,110,99,117,114,114,101,110,116,32,119,114,105,116, + 105,110,103,32,111,102,32,116,104,101,10,32,32,32,32,116, + 101,109,112,111,114,97,114,121,32,102,105,108,101,32,105,115, + 32,97,116,116,101,109,112,116,101,100,46,250,5,123,125,46, + 123,125,114,75,0,0,0,90,2,119,98,78,41,13,218,6, + 102,111,114,109,97,116,218,2,105,100,114,19,0,0,0,90, + 4,111,112,101,110,90,6,79,95,69,88,67,76,90,7,79, + 95,67,82,69,65,84,90,8,79,95,87,82,79,78,76,89, + 218,3,95,105,111,218,6,70,105,108,101,73,79,218,5,119, + 114,105,116,101,218,7,114,101,112,108,97,99,101,114,64,0, + 0,0,90,6,117,110,108,105,110,107,41,6,114,58,0,0, + 0,114,42,0,0,0,114,66,0,0,0,90,8,112,97,116, + 104,95,116,109,112,90,2,102,100,218,4,102,105,108,101,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, + 95,119,114,105,116,101,95,97,116,111,109,105,99,152,0,0, + 0,115,38,0,0,0,16,5,6,1,22,1,4,255,2,2, + 14,3,24,1,16,128,18,1,12,1,2,1,12,1,2,3, + 12,254,2,1,2,1,2,254,2,253,255,128,114,84,0,0, + 0,105,106,13,0,0,114,45,0,0,0,114,33,0,0,0, + 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, + 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122, + 4,46,112,121,119,122,4,46,112,121,99,41,1,218,12,111, + 112,116,105,109,105,122,97,116,105,111,110,99,2,0,0,0, + 0,0,0,0,1,0,0,0,12,0,0,0,5,0,0,0, + 67,0,0,0,115,80,1,0,0,124,1,100,1,117,1,114, + 26,116,0,160,1,100,2,116,2,161,2,1,0,124,2,100, + 1,117,1,114,20,100,3,125,3,116,3,124,3,131,1,130, + 1,124,1,114,24,100,4,110,1,100,5,125,2,116,4,160, + 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, + 4,125,5,124,5,160,7,100,6,161,1,92,3,125,6,125, + 7,125,8,116,8,106,9,106,10,125,9,124,9,100,1,117, + 0,114,57,116,11,100,7,131,1,130,1,100,4,160,12,124, + 6,114,63,124,6,110,1,124,8,124,7,124,9,103,3,161, + 1,125,10,124,2,100,1,117,0,114,86,116,8,106,13,106, + 14,100,8,107,2,114,82,100,4,125,2,110,4,116,8,106, + 13,106,14,125,2,116,15,124,2,131,1,125,2,124,2,100, + 4,107,3,114,112,124,2,160,16,161,0,115,105,116,17,100, + 9,160,18,124,2,161,1,131,1,130,1,100,10,160,18,124, + 10,116,19,124,2,161,3,125,10,124,10,116,20,100,8,25, + 0,23,0,125,11,116,8,106,21,100,1,117,1,114,162,116, + 22,124,4,131,1,115,134,116,23,116,4,160,24,161,0,124, + 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,114, + 152,124,4,100,8,25,0,116,25,118,1,114,152,124,4,100, + 12,100,1,133,2,25,0,125,4,116,23,116,8,106,21,124, + 4,160,26,116,25,161,1,124,11,131,3,83,0,116,23,124, + 4,116,27,124,11,131,3,83,0,41,13,97,254,2,0,0, + 71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,97,32,46,112,121,32,102,105,108,101,44,32,114,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,105,116,115,32,46,112,121,99,32,102,105,108,101,46,10, + 10,32,32,32,32,84,104,101,32,46,112,121,32,102,105,108, + 101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32, + 116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115, + 105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104, + 101,32,112,97,116,104,32,116,111,32,116,104,101,10,32,32, + 32,32,46,112,121,99,32,102,105,108,101,32,99,97,108,99, + 117,108,97,116,101,100,32,97,115,32,105,102,32,116,104,101, + 32,46,112,121,32,102,105,108,101,32,119,101,114,101,32,105, + 109,112,111,114,116,101,100,46,10,10,32,32,32,32,84,104, + 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,112,97,114,97,109,101,116,101,114,32,99,111,110,116,114, + 111,108,115,32,116,104,101,32,112,114,101,115,117,109,101,100, + 32,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, + 118,101,108,32,111,102,10,32,32,32,32,116,104,101,32,98, + 121,116,101,99,111,100,101,32,102,105,108,101,46,32,73,102, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 105,115,32,110,111,116,32,78,111,110,101,44,32,116,104,101, + 32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110, + 116,97,116,105,111,110,10,32,32,32,32,111,102,32,116,104, + 101,32,97,114,103,117,109,101,110,116,32,105,115,32,116,97, + 107,101,110,32,97,110,100,32,118,101,114,105,102,105,101,100, + 32,116,111,32,98,101,32,97,108,112,104,97,110,117,109,101, + 114,105,99,32,40,101,108,115,101,32,86,97,108,117,101,69, + 114,114,111,114,10,32,32,32,32,105,115,32,114,97,105,115, + 101,100,41,46,10,10,32,32,32,32,84,104,101,32,100,101, + 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, + 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,73,102,32,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,105,115,32,110,111,116,32,78, + 111,110,101,44,10,32,32,32,32,97,32,84,114,117,101,32, + 118,97,108,117,101,32,105,115,32,116,104,101,32,115,97,109, + 101,32,97,115,32,115,101,116,116,105,110,103,32,39,111,112, + 116,105,109,105,122,97,116,105,111,110,39,32,116,111,32,116, + 104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,10, + 32,32,32,32,119,104,105,108,101,32,97,32,70,97,108,115, + 101,32,118,97,108,117,101,32,105,115,32,101,113,117,105,118, + 97,108,101,110,116,32,116,111,32,115,101,116,116,105,110,103, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 116,111,32,39,49,39,46,10,10,32,32,32,32,73,102,32, + 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, + 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, + 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, + 70,116,104,101,32,100,101,98,117,103,95,111,118,101,114,114, + 105,100,101,32,112,97,114,97,109,101,116,101,114,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,59,32,117,115,101, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 105,110,115,116,101,97,100,122,50,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,111,114,32,111,112,116,105,109, + 105,122,97,116,105,111,110,32,109,117,115,116,32,98,101,32, + 115,101,116,32,116,111,32,78,111,110,101,114,10,0,0,0, + 114,3,0,0,0,218,1,46,250,36,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,114,0, + 0,0,0,122,24,123,33,114,125,32,105,115,32,110,111,116, + 32,97,108,112,104,97,110,117,109,101,114,105,99,122,7,123, + 125,46,123,125,123,125,114,11,0,0,0,114,45,0,0,0, + 41,28,218,9,95,119,97,114,110,105,110,103,115,218,4,119, + 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, + 87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,114, + 111,114,114,19,0,0,0,218,6,102,115,112,97,116,104,114, + 61,0,0,0,114,55,0,0,0,114,16,0,0,0,218,14, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, + 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,52, + 0,0,0,114,17,0,0,0,218,8,111,112,116,105,109,105, + 122,101,218,3,115,116,114,218,7,105,115,97,108,110,117,109, + 218,10,86,97,108,117,101,69,114,114,111,114,114,77,0,0, + 0,218,4,95,79,80,84,218,17,66,89,84,69,67,79,68, + 69,95,83,85,70,70,73,88,69,83,218,14,112,121,99,97, + 99,104,101,95,112,114,101,102,105,120,114,74,0,0,0,114, + 54,0,0,0,114,70,0,0,0,114,48,0,0,0,218,6, + 108,115,116,114,105,112,218,8,95,80,89,67,65,67,72,69, + 41,12,114,58,0,0,0,90,14,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,114,85,0,0,0,218,7,109,101, + 115,115,97,103,101,218,4,104,101,97,100,114,60,0,0,0, + 90,4,98,97,115,101,114,6,0,0,0,218,4,114,101,115, + 116,90,3,116,97,103,90,15,97,108,109,111,115,116,95,102, + 105,108,101,110,97,109,101,218,8,102,105,108,101,110,97,109, 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,152, - 0,0,0,115,38,0,0,0,16,5,6,1,22,1,4,255, - 2,2,14,3,24,1,16,128,18,1,12,1,2,1,12,1, - 2,3,12,254,2,1,2,1,2,254,2,253,255,128,114,84, - 0,0,0,105,106,13,0,0,114,45,0,0,0,114,33,0, - 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, - 97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112, - 121,122,4,46,112,121,119,122,4,46,112,121,99,41,1,218, - 12,111,112,116,105,109,105,122,97,116,105,111,110,99,2,0, - 0,0,0,0,0,0,1,0,0,0,12,0,0,0,5,0, - 0,0,67,0,0,0,115,88,1,0,0,124,1,100,1,117, - 1,114,52,116,0,160,1,100,2,116,2,161,2,1,0,124, - 2,100,1,117,1,114,40,100,3,125,3,116,3,124,3,131, - 1,130,1,124,1,114,48,100,4,110,2,100,5,125,2,116, - 4,160,5,124,0,161,1,125,0,116,6,124,0,131,1,92, - 2,125,4,125,5,124,5,160,7,100,6,161,1,92,3,125, - 6,125,7,125,8,116,8,106,9,106,10,125,9,124,9,100, - 1,117,0,114,114,116,11,100,7,131,1,130,1,100,4,160, - 12,124,6,114,126,124,6,110,2,124,8,124,7,124,9,103, - 3,161,1,125,10,124,2,100,1,117,0,114,172,116,8,106, - 13,106,14,100,8,107,2,114,164,100,4,125,2,110,8,116, - 8,106,13,106,14,125,2,116,15,124,2,131,1,125,2,124, - 2,100,4,107,3,114,224,124,2,160,16,161,0,115,210,116, - 17,100,9,160,18,124,2,161,1,131,1,130,1,100,10,160, - 18,124,10,116,19,124,2,161,3,125,10,124,10,116,20,100, - 8,25,0,23,0,125,11,116,8,106,21,100,1,117,1,144, - 1,114,76,116,22,124,4,131,1,144,1,115,16,116,23,116, - 4,160,24,161,0,124,4,131,2,125,4,124,4,100,5,25, - 0,100,11,107,2,144,1,114,56,124,4,100,8,25,0,116, - 25,118,1,144,1,114,56,124,4,100,12,100,1,133,2,25, - 0,125,4,116,23,116,8,106,21,124,4,160,26,116,25,161, - 1,124,11,131,3,83,0,116,23,124,4,116,27,124,11,131, - 3,83,0,41,13,97,254,2,0,0,71,105,118,101,110,32, - 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, - 121,32,102,105,108,101,44,32,114,101,116,117,114,110,32,116, + 218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,117, + 114,99,101,87,1,0,0,115,74,0,0,0,8,18,6,1, + 2,1,4,255,8,2,4,1,8,1,12,1,10,1,12,1, + 16,1,8,1,8,1,8,1,24,1,8,1,12,1,6,1, + 8,2,8,1,8,1,8,1,14,1,14,1,12,1,10,1, + 8,9,14,1,24,5,12,1,2,4,4,1,8,1,2,1, + 4,253,12,5,255,128,114,109,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,0, + 67,0,0,0,115,40,1,0,0,116,0,106,1,106,2,100, + 1,117,0,114,10,116,3,100,2,131,1,130,1,116,4,160, + 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, + 1,125,2,100,3,125,3,116,0,106,7,100,1,117,1,114, + 51,116,0,106,7,160,8,116,9,161,1,125,4,124,1,160, + 10,124,4,116,11,23,0,161,1,114,51,124,1,116,12,124, + 4,131,1,100,1,133,2,25,0,125,1,100,4,125,3,124, + 3,115,72,116,6,124,1,131,1,92,2,125,1,125,5,124, + 5,116,13,107,3,114,72,116,14,116,13,155,0,100,5,124, + 0,155,2,157,3,131,1,130,1,124,2,160,15,100,6,161, + 1,125,6,124,6,100,7,118,1,114,88,116,14,100,8,124, + 2,155,2,157,2,131,1,130,1,124,6,100,9,107,2,114, + 132,124,2,160,16,100,6,100,10,161,2,100,11,25,0,125, + 7,124,7,160,10,116,17,161,1,115,112,116,14,100,12,116, + 17,155,2,157,2,131,1,130,1,124,7,116,12,116,17,131, + 1,100,1,133,2,25,0,125,8,124,8,160,18,161,0,115, + 132,116,14,100,13,124,7,155,2,100,14,157,3,131,1,130, + 1,124,2,160,19,100,6,161,1,100,15,25,0,125,9,116, + 20,124,1,124,9,116,21,100,15,25,0,23,0,131,2,83, + 0,41,16,97,110,1,0,0,71,105,118,101,110,32,116,104, + 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,99, + 46,32,102,105,108,101,44,32,114,101,116,117,114,110,32,116, 104,101,32,112,97,116,104,32,116,111,32,105,116,115,32,46, - 112,121,99,32,102,105,108,101,46,10,10,32,32,32,32,84, - 104,101,32,46,112,121,32,102,105,108,101,32,100,111,101,115, + 112,121,32,102,105,108,101,46,10,10,32,32,32,32,84,104, + 101,32,46,112,121,99,32,102,105,108,101,32,100,111,101,115, 32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105, 115,116,59,32,116,104,105,115,32,115,105,109,112,108,121,32, 114,101,116,117,114,110,115,32,116,104,101,32,112,97,116,104, - 32,116,111,32,116,104,101,10,32,32,32,32,46,112,121,99, - 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, - 32,97,115,32,105,102,32,116,104,101,32,46,112,121,32,102, - 105,108,101,32,119,101,114,101,32,105,109,112,111,114,116,101, - 100,46,10,10,32,32,32,32,84,104,101,32,39,111,112,116, - 105,109,105,122,97,116,105,111,110,39,32,112,97,114,97,109, - 101,116,101,114,32,99,111,110,116,114,111,108,115,32,116,104, - 101,32,112,114,101,115,117,109,101,100,32,111,112,116,105,109, - 105,122,97,116,105,111,110,32,108,101,118,101,108,32,111,102, - 10,32,32,32,32,116,104,101,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,46,32,73,102,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,105,115,32,110,111,116, - 32,78,111,110,101,44,32,116,104,101,32,115,116,114,105,110, - 103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110, - 10,32,32,32,32,111,102,32,116,104,101,32,97,114,103,117, - 109,101,110,116,32,105,115,32,116,97,107,101,110,32,97,110, - 100,32,118,101,114,105,102,105,101,100,32,116,111,32,98,101, - 32,97,108,112,104,97,110,117,109,101,114,105,99,32,40,101, - 108,115,101,32,86,97,108,117,101,69,114,114,111,114,10,32, - 32,32,32,105,115,32,114,97,105,115,101,100,41,46,10,10, - 32,32,32,32,84,104,101,32,100,101,98,117,103,95,111,118, - 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 73,102,32,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,32,105,115,32,110,111,116,32,78,111,110,101,44,10,32, - 32,32,32,97,32,84,114,117,101,32,118,97,108,117,101,32, - 105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,115, - 101,116,116,105,110,103,32,39,111,112,116,105,109,105,122,97, - 116,105,111,110,39,32,116,111,32,116,104,101,32,101,109,112, - 116,121,32,115,116,114,105,110,103,10,32,32,32,32,119,104, - 105,108,101,32,97,32,70,97,108,115,101,32,118,97,108,117, - 101,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32, - 116,111,32,115,101,116,116,105,110,103,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,116,111,32,39,49,39, - 46,10,10,32,32,32,32,73,102,32,115,121,115,46,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, - 104,101,95,116,97,103,32,105,115,32,78,111,110,101,32,116, - 104,101,110,32,78,111,116,73,109,112,108,101,109,101,110,116, - 101,100,69,114,114,111,114,32,105,115,32,114,97,105,115,101, - 100,46,10,10,32,32,32,32,78,122,70,116,104,101,32,100, - 101,98,117,103,95,111,118,101,114,114,105,100,101,32,112,97, - 114,97,109,101,116,101,114,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,59,32,117,115,101,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,105,110,115,116,101,97, - 100,122,50,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,32,111,114,32,111,112,116,105,109,105,122,97,116,105,111, - 110,32,109,117,115,116,32,98,101,32,115,101,116,32,116,111, - 32,78,111,110,101,114,10,0,0,0,114,3,0,0,0,218, - 1,46,250,36,115,121,115,46,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, - 32,105,115,32,78,111,110,101,114,0,0,0,0,122,24,123, - 33,114,125,32,105,115,32,110,111,116,32,97,108,112,104,97, - 110,117,109,101,114,105,99,122,7,123,125,46,123,125,123,125, - 114,11,0,0,0,114,45,0,0,0,41,28,218,9,95,119, - 97,114,110,105,110,103,115,218,4,119,97,114,110,218,18,68, - 101,112,114,101,99,97,116,105,111,110,87,97,114,110,105,110, - 103,218,9,84,121,112,101,69,114,114,111,114,114,19,0,0, - 0,218,6,102,115,112,97,116,104,114,61,0,0,0,114,55, - 0,0,0,114,16,0,0,0,218,14,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,218,9,99,97,99,104,101,95, - 116,97,103,218,19,78,111,116,73,109,112,108,101,109,101,110, - 116,101,100,69,114,114,111,114,114,52,0,0,0,114,17,0, - 0,0,218,8,111,112,116,105,109,105,122,101,218,3,115,116, - 114,218,7,105,115,97,108,110,117,109,218,10,86,97,108,117, - 101,69,114,114,111,114,114,77,0,0,0,218,4,95,79,80, - 84,218,17,66,89,84,69,67,79,68,69,95,83,85,70,70, - 73,88,69,83,218,14,112,121,99,97,99,104,101,95,112,114, - 101,102,105,120,114,74,0,0,0,114,54,0,0,0,114,70, - 0,0,0,114,48,0,0,0,218,6,108,115,116,114,105,112, - 218,8,95,80,89,67,65,67,72,69,41,12,114,58,0,0, - 0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,114,85,0,0,0,218,7,109,101,115,115,97,103,101,218, - 4,104,101,97,100,114,60,0,0,0,90,4,98,97,115,101, - 114,6,0,0,0,218,4,114,101,115,116,90,3,116,97,103, - 90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,109, - 101,218,8,102,105,108,101,110,97,109,101,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,17,99,97,99,104, - 101,95,102,114,111,109,95,115,111,117,114,99,101,86,1,0, - 0,115,74,0,0,0,8,18,6,1,2,1,4,255,8,2, - 4,1,8,1,12,1,10,1,12,1,16,1,8,1,8,1, - 8,1,24,1,8,1,12,1,6,1,8,2,8,1,8,1, - 8,1,14,1,14,1,12,1,12,1,10,9,14,1,28,5, - 12,1,2,4,4,1,8,1,2,1,4,253,12,5,255,128, - 114,109,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,10,0,0,0,5,0,0,0,67,0,0,0,115,44, - 1,0,0,116,0,106,1,106,2,100,1,117,0,114,20,116, - 3,100,2,131,1,130,1,116,4,160,5,124,0,161,1,125, - 0,116,6,124,0,131,1,92,2,125,1,125,2,100,3,125, - 3,116,0,106,7,100,1,117,1,114,102,116,0,106,7,160, - 8,116,9,161,1,125,4,124,1,160,10,124,4,116,11,23, - 0,161,1,114,102,124,1,116,12,124,4,131,1,100,1,133, - 2,25,0,125,1,100,4,125,3,124,3,115,144,116,6,124, - 1,131,1,92,2,125,1,125,5,124,5,116,13,107,3,114, - 144,116,14,116,13,155,0,100,5,124,0,155,2,157,3,131, - 1,130,1,124,2,160,15,100,6,161,1,125,6,124,6,100, - 7,118,1,114,176,116,14,100,8,124,2,155,2,157,2,131, - 1,130,1,124,6,100,9,107,2,144,1,114,12,124,2,160, - 16,100,6,100,10,161,2,100,11,25,0,125,7,124,7,160, - 10,116,17,161,1,115,226,116,14,100,12,116,17,155,2,157, - 2,131,1,130,1,124,7,116,12,116,17,131,1,100,1,133, - 2,25,0,125,8,124,8,160,18,161,0,144,1,115,12,116, - 14,100,13,124,7,155,2,100,14,157,3,131,1,130,1,124, - 2,160,19,100,6,161,1,100,15,25,0,125,9,116,20,124, - 1,124,9,116,21,100,15,25,0,23,0,131,2,83,0,41, - 16,97,110,1,0,0,71,105,118,101,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,32, - 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, - 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, - 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, - 46,112,121,99,32,102,105,108,101,32,100,111,101,115,32,110, - 111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116, - 59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,101, - 116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,116, - 111,10,32,32,32,32,116,104,101,32,46,112,121,32,102,105, - 108,101,32,99,97,108,99,117,108,97,116,101,100,32,116,111, - 32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116, - 104,101,32,46,112,121,99,32,102,105,108,101,46,32,32,73, - 102,32,112,97,116,104,32,100,111,101,115,10,32,32,32,32, - 110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,80, - 69,80,32,51,49,52,55,47,52,56,56,32,102,111,114,109, - 97,116,44,32,86,97,108,117,101,69,114,114,111,114,32,119, - 105,108,108,32,98,101,32,114,97,105,115,101,100,46,32,73, - 102,10,32,32,32,32,115,121,115,46,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, - 97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32, - 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, - 32,32,32,32,78,114,87,0,0,0,70,84,122,31,32,110, - 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, - 100,105,114,101,99,116,111,114,121,32,105,110,32,114,86,0, - 0,0,62,2,0,0,0,114,45,0,0,0,114,72,0,0, - 0,122,29,101,120,112,101,99,116,101,100,32,111,110,108,121, - 32,50,32,111,114,32,51,32,100,111,116,115,32,105,110,32, - 114,72,0,0,0,114,45,0,0,0,233,254,255,255,255,122, - 53,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, - 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, - 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, - 32,119,105,116,104,32,122,19,111,112,116,105,109,105,122,97, - 116,105,111,110,32,108,101,118,101,108,32,122,29,32,105,115, - 32,110,111,116,32,97,110,32,97,108,112,104,97,110,117,109, - 101,114,105,99,32,118,97,108,117,101,114,0,0,0,0,41, - 22,114,16,0,0,0,114,93,0,0,0,114,94,0,0,0, - 114,95,0,0,0,114,19,0,0,0,114,92,0,0,0,114, - 61,0,0,0,114,102,0,0,0,114,47,0,0,0,114,48, - 0,0,0,114,27,0,0,0,114,51,0,0,0,114,4,0, - 0,0,114,104,0,0,0,114,99,0,0,0,218,5,99,111, - 117,110,116,114,57,0,0,0,114,100,0,0,0,114,98,0, - 0,0,218,9,112,97,114,116,105,116,105,111,110,114,54,0, - 0,0,218,15,83,79,85,82,67,69,95,83,85,70,70,73, - 88,69,83,41,10,114,58,0,0,0,114,106,0,0,0,90, - 16,112,121,99,97,99,104,101,95,102,105,108,101,110,97,109, - 101,90,23,102,111,117,110,100,95,105,110,95,112,121,99,97, - 99,104,101,95,112,114,101,102,105,120,90,13,115,116,114,105, - 112,112,101,100,95,112,97,116,104,90,7,112,121,99,97,99, - 104,101,90,9,100,111,116,95,99,111,117,110,116,114,85,0, - 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, - 97,115,101,95,102,105,108,101,110,97,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,17,115,111,117, - 114,99,101,95,102,114,111,109,95,99,97,99,104,101,157,1, - 0,0,115,62,0,0,0,12,9,8,1,10,1,12,1,4, - 1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,8, - 1,8,1,2,1,8,255,10,2,8,1,14,1,10,1,16, - 1,10,1,4,1,2,1,8,255,16,2,10,1,16,1,14, - 2,18,1,255,128,114,114,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,9,0,0,0,67, - 0,0,0,115,122,0,0,0,116,0,124,0,131,1,100,1, - 107,2,114,16,100,2,83,0,124,0,160,1,100,3,161,1, - 92,3,125,1,125,2,125,3,124,1,114,56,124,3,160,2, - 161,0,100,4,100,5,133,2,25,0,100,6,107,3,114,60, - 124,0,83,0,122,12,116,3,124,0,131,1,125,4,87,0, - 110,30,4,0,116,4,116,5,102,2,121,120,1,0,1,0, - 1,0,124,0,100,2,100,5,133,2,25,0,125,4,89,0, - 116,6,124,4,131,1,114,116,124,4,83,0,124,0,83,0, - 119,0,41,7,122,188,67,111,110,118,101,114,116,32,97,32, - 98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,97, - 116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,112, - 97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,101, - 41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, - 99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,114, - 101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,100, - 115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,32, - 102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,116, - 95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,87, - 105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,105, - 110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,32, - 32,32,114,0,0,0,0,78,114,86,0,0,0,233,253,255, - 255,255,233,255,255,255,255,90,2,112,121,41,7,114,4,0, - 0,0,114,55,0,0,0,218,5,108,111,119,101,114,114,114, - 0,0,0,114,95,0,0,0,114,99,0,0,0,114,68,0, - 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, - 97,116,104,114,107,0,0,0,114,59,0,0,0,90,9,101, - 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, - 95,112,97,116,104,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, - 101,102,105,108,101,197,1,0,0,115,24,0,0,0,12,7, - 4,1,16,1,24,1,4,1,2,1,12,1,16,1,14,1, - 16,1,2,254,255,128,114,120,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0, - 67,0,0,0,115,68,0,0,0,124,0,160,0,116,1,116, - 2,131,1,161,1,114,44,122,10,116,3,124,0,131,1,87, - 0,83,0,4,0,116,4,121,66,1,0,1,0,1,0,89, - 0,100,0,83,0,124,0,160,0,116,1,116,5,131,1,161, - 1,114,62,124,0,83,0,100,0,83,0,119,0,169,1,78, - 41,6,218,8,101,110,100,115,119,105,116,104,218,5,116,117, - 112,108,101,114,113,0,0,0,114,109,0,0,0,114,95,0, - 0,0,114,101,0,0,0,41,1,114,108,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, - 103,101,116,95,99,97,99,104,101,100,216,1,0,0,115,20, - 0,0,0,14,1,2,1,10,1,12,1,6,1,14,1,4, - 1,4,2,2,251,255,128,114,124,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,8,0,0, - 0,67,0,0,0,115,48,0,0,0,122,14,116,0,124,0, - 131,1,106,1,125,1,87,0,110,18,4,0,116,2,121,46, - 1,0,1,0,1,0,100,1,125,1,89,0,124,1,100,2, - 79,0,125,1,124,1,83,0,119,0,41,4,122,51,67,97, - 108,99,117,108,97,116,101,32,116,104,101,32,109,111,100,101, - 32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114, - 32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 46,114,75,0,0,0,233,128,0,0,0,78,41,3,114,63, - 0,0,0,114,65,0,0,0,114,64,0,0,0,41,2,114, - 58,0,0,0,114,66,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,10,95,99,97,108,99,95, - 109,111,100,101,228,1,0,0,115,16,0,0,0,2,2,14, - 1,12,1,6,1,8,3,4,1,2,251,255,128,114,126,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,4,0,0,0,3,0,0,0,115,52,0,0,0, - 100,6,135,0,102,1,100,2,100,3,132,9,125,1,116,0, - 100,1,117,1,114,30,116,0,106,1,125,2,110,8,100,4, - 100,5,132,0,125,2,124,2,124,1,136,0,131,2,1,0, - 124,1,83,0,41,7,122,252,68,101,99,111,114,97,116,111, - 114,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116, - 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, - 103,32,114,101,113,117,101,115,116,101,100,32,109,97,116,99, - 104,101,115,32,116,104,101,32,111,110,101,32,116,104,101,10, - 32,32,32,32,108,111,97,100,101,114,32,99,97,110,32,104, - 97,110,100,108,101,46,10,10,32,32,32,32,84,104,101,32, - 102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40, - 115,101,108,102,41,32,109,117,115,116,32,100,101,102,105,110, - 101,32,95,110,97,109,101,32,119,104,105,99,104,32,116,104, - 101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110, - 116,32,105,115,10,32,32,32,32,99,111,109,112,97,114,101, - 100,32,97,103,97,105,110,115,116,46,32,73,102,32,116,104, - 101,32,99,111,109,112,97,114,105,115,111,110,32,102,97,105, - 108,115,32,116,104,101,110,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, - 32,32,32,32,78,99,2,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,31,0,0,0,115,72, - 0,0,0,124,1,100,0,117,0,114,16,124,0,106,0,125, - 1,110,32,124,0,106,0,124,1,107,3,114,48,116,1,100, - 1,124,0,106,0,124,1,102,2,22,0,124,1,100,2,141, - 2,130,1,136,0,124,0,124,1,103,2,124,2,162,1,82, - 0,105,0,124,3,164,1,142,1,83,0,41,3,78,122,30, - 108,111,97,100,101,114,32,102,111,114,32,37,115,32,99,97, - 110,110,111,116,32,104,97,110,100,108,101,32,37,115,169,1, - 218,4,110,97,109,101,41,2,114,128,0,0,0,218,11,73, - 109,112,111,114,116,69,114,114,111,114,41,4,218,4,115,101, - 108,102,114,128,0,0,0,218,4,97,114,103,115,218,6,107, - 119,97,114,103,115,169,1,218,6,109,101,116,104,111,100,114, - 7,0,0,0,114,8,0,0,0,218,19,95,99,104,101,99, - 107,95,110,97,109,101,95,119,114,97,112,112,101,114,248,1, - 0,0,115,20,0,0,0,8,1,8,1,10,1,4,1,8, - 1,2,255,2,1,6,255,24,2,255,128,122,40,95,99,104, - 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, - 62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114, - 97,112,112,101,114,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,7,0,0,0,83,0,0,0,115,56, - 0,0,0,100,1,68,0,93,32,125,2,116,0,124,1,124, - 2,131,2,114,36,116,1,124,0,124,2,116,2,124,1,124, - 2,131,2,131,3,1,0,113,4,124,0,106,3,160,4,124, - 1,106,3,161,1,1,0,100,0,83,0,41,2,78,41,4, - 218,10,95,95,109,111,100,117,108,101,95,95,218,8,95,95, - 110,97,109,101,95,95,218,12,95,95,113,117,97,108,110,97, - 109,101,95,95,218,7,95,95,100,111,99,95,95,41,5,218, - 7,104,97,115,97,116,116,114,218,7,115,101,116,97,116,116, - 114,218,7,103,101,116,97,116,116,114,218,8,95,95,100,105, - 99,116,95,95,218,6,117,112,100,97,116,101,41,3,90,3, - 110,101,119,90,3,111,108,100,114,82,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,5,95,119, - 114,97,112,5,2,0,0,115,12,0,0,0,8,1,10,1, - 18,1,2,128,18,1,255,128,122,26,95,99,104,101,99,107, - 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, - 119,114,97,112,41,1,78,41,2,218,10,95,98,111,111,116, - 115,116,114,97,112,114,145,0,0,0,41,3,114,134,0,0, - 0,114,135,0,0,0,114,145,0,0,0,114,7,0,0,0, - 114,133,0,0,0,114,8,0,0,0,218,11,95,99,104,101, - 99,107,95,110,97,109,101,240,1,0,0,115,14,0,0,0, - 14,8,8,10,8,1,8,2,10,6,4,1,255,128,114,147, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,6,0,0,0,67,0,0,0,115,60,0,0, - 0,124,0,160,0,124,1,161,1,92,2,125,2,125,3,124, - 2,100,1,117,0,114,56,116,1,124,3,131,1,114,56,100, - 2,125,4,116,2,160,3,124,4,160,4,124,3,100,3,25, - 0,161,1,116,5,161,2,1,0,124,2,83,0,41,4,122, - 155,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, - 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,98, - 121,32,100,101,108,101,103,97,116,105,110,103,32,116,111,10, - 32,32,32,32,115,101,108,102,46,102,105,110,100,95,108,111, - 97,100,101,114,40,41,46,10,10,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,32,105,110,32,102,97,118,111,114,32, - 111,102,32,102,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,40,41,46,10,10,32,32,32,32,78,122,44,78, - 111,116,32,105,109,112,111,114,116,105,110,103,32,100,105,114, - 101,99,116,111,114,121,32,123,125,58,32,109,105,115,115,105, - 110,103,32,95,95,105,110,105,116,95,95,114,0,0,0,0, - 41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,114, - 4,0,0,0,114,88,0,0,0,114,89,0,0,0,114,77, - 0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105, - 110,103,41,5,114,130,0,0,0,218,8,102,117,108,108,110, - 97,109,101,218,6,108,111,97,100,101,114,218,8,112,111,114, - 116,105,111,110,115,218,3,109,115,103,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,17,95,102,105,110,100, - 95,109,111,100,117,108,101,95,115,104,105,109,15,2,0,0, - 115,12,0,0,0,14,10,16,1,4,1,22,1,4,1,255, - 128,114,154,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, - 166,0,0,0,124,0,100,1,100,2,133,2,25,0,125,3, - 124,3,116,0,107,3,114,64,100,3,124,1,155,2,100,4, - 124,3,155,2,157,4,125,4,116,1,160,2,100,5,124,4, - 161,2,1,0,116,3,124,4,102,1,105,0,124,2,164,1, - 142,1,130,1,116,4,124,0,131,1,100,6,107,0,114,106, - 100,7,124,1,155,2,157,2,125,4,116,1,160,2,100,5, - 124,4,161,2,1,0,116,5,124,4,131,1,130,1,116,6, - 124,0,100,2,100,8,133,2,25,0,131,1,125,5,124,5, - 100,9,64,0,114,162,100,10,124,5,155,2,100,11,124,1, - 155,2,157,4,125,4,116,3,124,4,102,1,105,0,124,2, - 164,1,142,1,130,1,124,5,83,0,41,12,97,84,2,0, - 0,80,101,114,102,111,114,109,32,98,97,115,105,99,32,118, - 97,108,105,100,105,116,121,32,99,104,101,99,107,105,110,103, - 32,111,102,32,97,32,112,121,99,32,104,101,97,100,101,114, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 102,108,97,103,115,32,102,105,101,108,100,44,10,32,32,32, - 32,119,104,105,99,104,32,100,101,116,101,114,109,105,110,101, - 115,32,104,111,119,32,116,104,101,32,112,121,99,32,115,104, - 111,117,108,100,32,98,101,32,102,117,114,116,104,101,114,32, - 118,97,108,105,100,97,116,101,100,32,97,103,97,105,110,115, - 116,32,116,104,101,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,44,32,116,104,111,117,103,104,46,41,10,10, - 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, - 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, - 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, - 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, - 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, - 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, - 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, - 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, - 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, - 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, - 32,32,32,32,73,109,112,111,114,116,69,114,114,111,114,32, + 32,116,111,10,32,32,32,32,116,104,101,32,46,112,121,32, + 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, + 116,111,32,99,111,114,114,101,115,112,111,110,100,32,116,111, + 32,116,104,101,32,46,112,121,99,32,102,105,108,101,46,32, + 32,73,102,32,112,97,116,104,32,100,111,101,115,10,32,32, + 32,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111, + 32,80,69,80,32,51,49,52,55,47,52,56,56,32,102,111, + 114,109,97,116,44,32,86,97,108,117,101,69,114,114,111,114, + 32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,46, + 32,73,102,10,32,32,32,32,115,121,115,46,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,46,99,97,99,104,101, + 95,116,97,103,32,105,115,32,78,111,110,101,32,116,104,101, + 110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,78,114,87,0,0,0,70,84,122,31, + 32,110,111,116,32,98,111,116,116,111,109,45,108,101,118,101, + 108,32,100,105,114,101,99,116,111,114,121,32,105,110,32,114, + 86,0,0,0,62,2,0,0,0,114,45,0,0,0,114,72, + 0,0,0,122,29,101,120,112,101,99,116,101,100,32,111,110, + 108,121,32,50,32,111,114,32,51,32,100,111,116,115,32,105, + 110,32,114,72,0,0,0,114,45,0,0,0,233,254,255,255, + 255,122,53,111,112,116,105,109,105,122,97,116,105,111,110,32, + 112,111,114,116,105,111,110,32,111,102,32,102,105,108,101,110, + 97,109,101,32,100,111,101,115,32,110,111,116,32,115,116,97, + 114,116,32,119,105,116,104,32,122,19,111,112,116,105,109,105, + 122,97,116,105,111,110,32,108,101,118,101,108,32,122,29,32, + 105,115,32,110,111,116,32,97,110,32,97,108,112,104,97,110, + 117,109,101,114,105,99,32,118,97,108,117,101,114,0,0,0, + 0,41,22,114,16,0,0,0,114,93,0,0,0,114,94,0, + 0,0,114,95,0,0,0,114,19,0,0,0,114,92,0,0, + 0,114,61,0,0,0,114,102,0,0,0,114,47,0,0,0, + 114,48,0,0,0,114,27,0,0,0,114,51,0,0,0,114, + 4,0,0,0,114,104,0,0,0,114,99,0,0,0,218,5, + 99,111,117,110,116,114,57,0,0,0,114,100,0,0,0,114, + 98,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, + 54,0,0,0,218,15,83,79,85,82,67,69,95,83,85,70, + 70,73,88,69,83,41,10,114,58,0,0,0,114,106,0,0, + 0,90,16,112,121,99,97,99,104,101,95,102,105,108,101,110, + 97,109,101,90,23,102,111,117,110,100,95,105,110,95,112,121, + 99,97,99,104,101,95,112,114,101,102,105,120,90,13,115,116, + 114,105,112,112,101,100,95,112,97,116,104,90,7,112,121,99, + 97,99,104,101,90,9,100,111,116,95,99,111,117,110,116,114, + 85,0,0,0,90,9,111,112,116,95,108,101,118,101,108,90, + 13,98,97,115,101,95,102,105,108,101,110,97,109,101,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,17,115, + 111,117,114,99,101,95,102,114,111,109,95,99,97,99,104,101, + 158,1,0,0,115,62,0,0,0,12,9,8,1,10,1,12, + 1,4,1,10,1,12,1,14,1,16,1,4,1,4,1,12, + 1,8,1,8,1,2,1,8,255,10,2,8,1,14,1,8, + 1,16,1,10,1,4,1,2,1,8,255,16,2,8,1,16, + 1,14,2,18,1,255,128,114,114,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,9,0,0, + 0,67,0,0,0,115,122,0,0,0,116,0,124,0,131,1, + 100,1,107,2,114,8,100,2,83,0,124,0,160,1,100,3, + 161,1,92,3,125,1,125,2,125,3,124,1,114,28,124,3, + 160,2,161,0,100,4,100,5,133,2,25,0,100,6,107,3, + 114,30,124,0,83,0,122,6,116,3,124,0,131,1,125,4, + 87,0,110,15,4,0,116,4,116,5,102,2,121,60,1,0, + 1,0,1,0,124,0,100,2,100,5,133,2,25,0,125,4, + 89,0,116,6,124,4,131,1,114,58,124,4,83,0,124,0, + 83,0,119,0,41,7,122,188,67,111,110,118,101,114,116,32, + 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,32, + 112,97,116,104,32,116,111,32,97,32,115,111,117,114,99,101, + 32,112,97,116,104,32,40,105,102,32,112,111,115,115,105,98, + 108,101,41,46,10,10,32,32,32,32,84,104,105,115,32,102, + 117,110,99,116,105,111,110,32,101,120,105,115,116,115,32,112, + 117,114,101,108,121,32,102,111,114,32,98,97,99,107,119,97, + 114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116, + 121,32,102,111,114,10,32,32,32,32,80,121,73,109,112,111, + 114,116,95,69,120,101,99,67,111,100,101,77,111,100,117,108, + 101,87,105,116,104,70,105,108,101,110,97,109,101,115,40,41, + 32,105,110,32,116,104,101,32,67,32,65,80,73,46,10,10, + 32,32,32,32,114,0,0,0,0,78,114,86,0,0,0,233, + 253,255,255,255,233,255,255,255,255,90,2,112,121,41,7,114, + 4,0,0,0,114,55,0,0,0,218,5,108,111,119,101,114, + 114,114,0,0,0,114,95,0,0,0,114,99,0,0,0,114, + 68,0,0,0,41,5,218,13,98,121,116,101,99,111,100,101, + 95,112,97,116,104,114,107,0,0,0,114,59,0,0,0,90, + 9,101,120,116,101,110,115,105,111,110,218,11,115,111,117,114, + 99,101,95,112,97,116,104,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,15,95,103,101,116,95,115,111,117, + 114,99,101,102,105,108,101,198,1,0,0,115,24,0,0,0, + 12,7,4,1,16,1,24,1,4,1,2,1,12,1,16,1, + 14,1,16,1,2,254,255,128,114,120,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0, + 0,0,67,0,0,0,115,68,0,0,0,124,0,160,0,116, + 1,116,2,131,1,161,1,114,22,122,5,116,3,124,0,131, + 1,87,0,83,0,4,0,116,4,121,33,1,0,1,0,1, + 0,89,0,100,0,83,0,124,0,160,0,116,1,116,5,131, + 1,161,1,114,31,124,0,83,0,100,0,83,0,119,0,169, + 1,78,41,6,218,8,101,110,100,115,119,105,116,104,218,5, + 116,117,112,108,101,114,113,0,0,0,114,109,0,0,0,114, + 95,0,0,0,114,101,0,0,0,41,1,114,108,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 11,95,103,101,116,95,99,97,99,104,101,100,217,1,0,0, + 115,20,0,0,0,14,1,2,1,10,1,12,1,6,1,14, + 1,4,1,4,2,2,251,255,128,114,124,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,8, + 0,0,0,67,0,0,0,115,48,0,0,0,122,7,116,0, + 124,0,131,1,106,1,125,1,87,0,110,9,4,0,116,2, + 121,23,1,0,1,0,1,0,100,1,125,1,89,0,124,1, + 100,2,79,0,125,1,124,1,83,0,119,0,41,4,122,51, + 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, + 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, + 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,46,114,75,0,0,0,233,128,0,0,0,78,41,3, + 114,63,0,0,0,114,65,0,0,0,114,64,0,0,0,41, + 2,114,58,0,0,0,114,66,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,10,95,99,97,108, + 99,95,109,111,100,101,229,1,0,0,115,16,0,0,0,2, + 2,14,1,12,1,6,1,8,3,4,1,2,251,255,128,114, + 126,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,3,0,0,0,115,52,0, + 0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1, + 116,0,100,1,117,1,114,15,116,0,106,1,125,2,110,4, + 100,4,100,5,132,0,125,2,124,2,124,1,136,0,131,2, + 1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97, + 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, + 97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101, + 105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97, + 116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104, + 101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110, + 32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104, + 101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116, + 32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102, + 105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32, + 116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109, + 101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97, + 114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32, + 116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102, + 97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,4,0,0,0,31,0,0,0, + 115,72,0,0,0,124,1,100,0,117,0,114,8,124,0,106, + 0,125,1,110,16,124,0,106,0,124,1,107,3,114,24,116, + 1,100,1,124,0,106,0,124,1,102,2,22,0,124,1,100, + 2,141,2,130,1,136,0,124,0,124,1,103,2,124,2,162, + 1,82,0,105,0,124,3,164,1,142,1,83,0,41,3,78, + 122,30,108,111,97,100,101,114,32,102,111,114,32,37,115,32, + 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, + 169,1,218,4,110,97,109,101,41,2,114,128,0,0,0,218, + 11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,4, + 115,101,108,102,114,128,0,0,0,218,4,97,114,103,115,218, + 6,107,119,97,114,103,115,169,1,218,6,109,101,116,104,111, + 100,114,7,0,0,0,114,8,0,0,0,218,19,95,99,104, + 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, + 249,1,0,0,115,20,0,0,0,8,1,8,1,10,1,4, + 1,8,1,2,255,2,1,6,255,24,2,255,128,122,40,95, + 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, + 108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95, + 119,114,97,112,112,101,114,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,7,0,0,0,83,0,0,0, + 115,56,0,0,0,100,1,68,0,93,16,125,2,116,0,124, + 1,124,2,131,2,114,18,116,1,124,0,124,2,116,2,124, + 1,124,2,131,2,131,3,1,0,113,2,124,0,106,3,160, + 4,124,1,106,3,161,1,1,0,100,0,83,0,41,2,78, + 41,4,218,10,95,95,109,111,100,117,108,101,95,95,218,8, + 95,95,110,97,109,101,95,95,218,12,95,95,113,117,97,108, + 110,97,109,101,95,95,218,7,95,95,100,111,99,95,95,41, + 5,218,7,104,97,115,97,116,116,114,218,7,115,101,116,97, + 116,116,114,218,7,103,101,116,97,116,116,114,218,8,95,95, + 100,105,99,116,95,95,218,6,117,112,100,97,116,101,41,3, + 90,3,110,101,119,90,3,111,108,100,114,82,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,5, + 95,119,114,97,112,6,2,0,0,115,12,0,0,0,8,1, + 10,1,18,1,2,128,18,1,255,128,122,26,95,99,104,101, + 99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,62, + 46,95,119,114,97,112,41,1,78,41,2,218,10,95,98,111, + 111,116,115,116,114,97,112,114,145,0,0,0,41,3,114,134, + 0,0,0,114,135,0,0,0,114,145,0,0,0,114,7,0, + 0,0,114,133,0,0,0,114,8,0,0,0,218,11,95,99, + 104,101,99,107,95,110,97,109,101,241,1,0,0,115,14,0, + 0,0,14,8,8,10,8,1,8,2,10,6,4,1,255,128, + 114,147,0,0,0,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,60, + 0,0,0,124,0,160,0,124,1,161,1,92,2,125,2,125, + 3,124,2,100,1,117,0,114,28,116,1,124,3,131,1,114, + 28,100,2,125,4,116,2,160,3,124,4,160,4,124,3,100, + 3,25,0,161,1,116,5,161,2,1,0,124,2,83,0,41, + 4,122,155,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 32,98,121,32,100,101,108,101,103,97,116,105,110,103,32,116, + 111,10,32,32,32,32,115,101,108,102,46,102,105,110,100,95, + 108,111,97,100,101,114,40,41,46,10,10,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,105,110,32,102,97,118,111, + 114,32,111,102,32,102,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,40,41,46,10,10,32,32,32,32,78,122, + 44,78,111,116,32,105,109,112,111,114,116,105,110,103,32,100, + 105,114,101,99,116,111,114,121,32,123,125,58,32,109,105,115, + 115,105,110,103,32,95,95,105,110,105,116,95,95,114,0,0, + 0,0,41,6,218,11,102,105,110,100,95,108,111,97,100,101, + 114,114,4,0,0,0,114,88,0,0,0,114,89,0,0,0, + 114,77,0,0,0,218,13,73,109,112,111,114,116,87,97,114, + 110,105,110,103,41,5,114,130,0,0,0,218,8,102,117,108, + 108,110,97,109,101,218,6,108,111,97,100,101,114,218,8,112, + 111,114,116,105,111,110,115,218,3,109,115,103,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,17,95,102,105, + 110,100,95,109,111,100,117,108,101,95,115,104,105,109,16,2, + 0,0,115,12,0,0,0,14,10,16,1,4,1,22,1,4, + 1,255,128,114,154,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, + 0,115,166,0,0,0,124,0,100,1,100,2,133,2,25,0, + 125,3,124,3,116,0,107,3,114,32,100,3,124,1,155,2, + 100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,5, + 124,4,161,2,1,0,116,3,124,4,102,1,105,0,124,2, + 164,1,142,1,130,1,116,4,124,0,131,1,100,6,107,0, + 114,53,100,7,124,1,155,2,157,2,125,4,116,1,160,2, + 100,5,124,4,161,2,1,0,116,5,124,4,131,1,130,1, + 116,6,124,0,100,2,100,8,133,2,25,0,131,1,125,5, + 124,5,100,9,64,0,114,81,100,10,124,5,155,2,100,11, + 124,1,155,2,157,4,125,4,116,3,124,4,102,1,105,0, + 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84, + 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99, + 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105, + 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100, + 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32, + 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105, + 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32, + 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101, + 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105, + 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41, + 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, + 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, + 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, + 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, + 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, + 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, + 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, + 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, + 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, + 10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111, + 114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110, + 32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101, + 114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111, + 114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115, + 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110, + 118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32, 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, - 104,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32, - 105,115,32,105,110,99,111,114,114,101,99,116,32,111,114,32, - 119,104,101,110,32,116,104,101,32,102,108,97,103,115,10,32, - 32,32,32,102,105,101,108,100,32,105,115,32,105,110,118,97, - 108,105,100,46,32,69,79,70,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, - 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, - 111,32,98,101,32,116,114,117,110,99,97,116,101,100,46,10, - 10,32,32,32,32,78,114,32,0,0,0,122,20,98,97,100, - 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, - 32,122,2,58,32,250,2,123,125,233,16,0,0,0,122,40, - 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, - 101,32,114,101,97,100,105,110,103,32,112,121,99,32,104,101, - 97,100,101,114,32,111,102,32,233,8,0,0,0,233,252,255, - 255,255,122,14,105,110,118,97,108,105,100,32,102,108,97,103, - 115,32,122,4,32,105,110,32,41,7,218,12,77,65,71,73, - 67,95,78,85,77,66,69,82,114,146,0,0,0,218,16,95, - 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,114, - 129,0,0,0,114,4,0,0,0,218,8,69,79,70,69,114, - 114,111,114,114,43,0,0,0,41,6,114,42,0,0,0,114, - 128,0,0,0,218,11,101,120,99,95,100,101,116,97,105,108, - 115,90,5,109,97,103,105,99,114,105,0,0,0,114,17,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,13,95,99,108,97,115,115,105,102,121,95,112,121,99, - 32,2,0,0,115,30,0,0,0,12,16,8,1,16,1,12, - 1,16,1,12,1,10,1,12,1,8,1,16,1,8,2,16, - 1,16,1,4,1,255,128,114,163,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, - 0,67,0,0,0,115,124,0,0,0,116,0,124,0,100,1, - 100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3, - 114,62,100,4,124,3,155,2,157,2,125,5,116,1,160,2, - 100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0, - 124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,120, - 116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2, - 100,3,64,0,107,3,114,116,116,3,100,4,124,3,155,2, - 157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6, - 83,0,100,6,83,0,41,8,97,7,2,0,0,86,97,108, - 105,100,97,116,101,32,97,32,112,121,99,32,97,103,97,105, - 110,115,116,32,116,104,101,32,115,111,117,114,99,101,32,108, - 97,115,116,45,109,111,100,105,102,105,101,100,32,116,105,109, - 101,46,10,10,32,32,32,32,42,100,97,116,97,42,32,105, - 115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111, - 102,32,116,104,101,32,112,121,99,32,102,105,108,101,46,32, - 40,79,110,108,121,32,116,104,101,32,102,105,114,115,116,32, - 49,54,32,98,121,116,101,115,32,97,114,101,10,32,32,32, - 32,114,101,113,117,105,114,101,100,46,41,10,10,32,32,32, - 32,42,115,111,117,114,99,101,95,109,116,105,109,101,42,32, - 105,115,32,116,104,101,32,108,97,115,116,32,109,111,100,105, - 102,105,101,100,32,116,105,109,101,115,116,97,109,112,32,111, - 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, - 101,46,10,10,32,32,32,32,42,115,111,117,114,99,101,95, - 115,105,122,101,42,32,105,115,32,78,111,110,101,32,111,114, - 32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101, - 32,115,111,117,114,99,101,32,102,105,108,101,32,105,110,32, - 98,121,116,101,115,46,10,10,32,32,32,32,42,110,97,109, - 101,42,32,105,115,32,116,104,101,32,110,97,109,101,32,111, - 102,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, - 110,103,32,105,109,112,111,114,116,101,100,46,32,73,116,32, - 105,115,32,117,115,101,100,32,102,111,114,32,108,111,103,103, - 105,110,103,46,10,10,32,32,32,32,42,101,120,99,95,100, - 101,116,97,105,108,115,42,32,105,115,32,97,32,100,105,99, - 116,105,111,110,97,114,121,32,112,97,115,115,101,100,32,116, - 111,32,73,109,112,111,114,116,69,114,114,111,114,32,105,102, - 32,105,116,32,114,97,105,115,101,100,32,102,111,114,10,32, - 32,32,32,105,109,112,114,111,118,101,100,32,100,101,98,117, - 103,103,105,110,103,46,10,10,32,32,32,32,65,110,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, - 105,115,101,100,32,105,102,32,116,104,101,32,98,121,116,101, - 99,111,100,101,32,105,115,32,115,116,97,108,101,46,10,10, - 32,32,32,32,114,157,0,0,0,233,12,0,0,0,114,31, - 0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,115, - 32,115,116,97,108,101,32,102,111,114,32,114,155,0,0,0, - 78,114,156,0,0,0,41,4,114,43,0,0,0,114,146,0, - 0,0,114,160,0,0,0,114,129,0,0,0,41,6,114,42, - 0,0,0,218,12,115,111,117,114,99,101,95,109,116,105,109, - 101,218,11,115,111,117,114,99,101,95,115,105,122,101,114,128, - 0,0,0,114,162,0,0,0,114,105,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,118, - 97,108,105,100,97,116,101,95,116,105,109,101,115,116,97,109, - 112,95,112,121,99,65,2,0,0,115,20,0,0,0,24,19, - 10,1,12,1,16,1,8,1,22,1,2,255,22,2,8,254, - 255,128,114,167,0,0,0,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,42,0,0,0,124,0,100,1,100,2,133,2,25,0,124, - 1,107,3,114,38,116,0,100,3,124,2,155,2,157,2,102, - 1,105,0,124,3,164,1,142,1,130,1,100,4,83,0,41, - 5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,97, - 32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,32, - 98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,32, - 114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,104, - 32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,101, - 32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,32, - 104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,97, - 116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,101, - 110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,102, - 105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,102, - 105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,114, - 101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,41, - 10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,97, - 115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,114, - 116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,101, - 95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, - 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110, - 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, - 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, - 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114, - 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42, - 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32, - 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115, - 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32, - 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100, - 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32, - 32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,101, - 32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97, - 108,101,46,10,10,32,32,32,32,114,157,0,0,0,114,156, - 0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,116, - 101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,97, - 116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,114, - 99,101,32,78,41,1,114,129,0,0,0,41,4,114,42,0, - 0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,114, - 128,0,0,0,114,162,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,18,95,118,97,108,105,100, - 97,116,101,95,104,97,115,104,95,112,121,99,93,2,0,0, - 115,16,0,0,0,16,17,2,1,8,1,4,255,2,2,6, - 254,4,255,255,128,114,169,0,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,76,0,0,0,116,0,160,1,124,0,161,1, - 125,4,116,2,124,4,116,3,131,2,114,56,116,4,160,5, - 100,1,124,2,161,2,1,0,124,3,100,2,117,1,114,52, - 116,6,160,7,124,4,124,3,161,2,1,0,124,4,83,0, - 116,8,100,3,160,9,124,2,161,1,124,1,124,2,100,4, - 141,3,130,1,41,5,122,35,67,111,109,112,105,108,101,32, - 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, - 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, - 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, - 114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,98, - 106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,128, - 0,0,0,114,58,0,0,0,41,10,218,7,109,97,114,115, - 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, - 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, - 112,101,114,146,0,0,0,114,160,0,0,0,218,4,95,105, - 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, - 110,97,109,101,114,129,0,0,0,114,77,0,0,0,41,5, - 114,42,0,0,0,114,128,0,0,0,114,118,0,0,0,114, - 119,0,0,0,218,4,99,111,100,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,17,95,99,111,109,112, - 105,108,101,95,98,121,116,101,99,111,100,101,117,2,0,0, - 115,20,0,0,0,10,2,10,1,12,1,8,1,12,1,4, - 1,10,2,4,1,6,255,255,128,114,176,0,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, - 0,0,0,67,0,0,0,115,70,0,0,0,116,0,116,1, - 131,1,125,3,124,3,160,2,116,3,100,1,131,1,161,1, - 1,0,124,3,160,2,116,3,124,1,131,1,161,1,1,0, - 124,3,160,2,116,3,124,2,131,1,161,1,1,0,124,3, - 160,2,116,4,160,5,124,0,161,1,161,1,1,0,124,3, - 83,0,41,3,122,43,80,114,111,100,117,99,101,32,116,104, - 101,32,100,97,116,97,32,102,111,114,32,97,32,116,105,109, - 101,115,116,97,109,112,45,98,97,115,101,100,32,112,121,99, - 46,114,0,0,0,0,78,41,6,218,9,98,121,116,101,97, - 114,114,97,121,114,159,0,0,0,218,6,101,120,116,101,110, - 100,114,37,0,0,0,114,171,0,0,0,218,5,100,117,109, - 112,115,41,4,114,175,0,0,0,218,5,109,116,105,109,101, - 114,166,0,0,0,114,42,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,22,95,99,111,100,101, - 95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,130,2,0,0,115,14,0,0,0,8,2,14,1,14,1, - 14,1,16,1,4,1,255,128,114,181,0,0,0,84,99,3, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, - 0,0,0,67,0,0,0,115,80,0,0,0,116,0,116,1, - 131,1,125,3,100,1,124,2,100,1,62,0,66,0,125,4, - 124,3,160,2,116,3,124,4,131,1,161,1,1,0,116,4, - 124,1,131,1,100,2,107,2,115,50,74,0,130,1,124,3, - 160,2,124,1,161,1,1,0,124,3,160,2,116,5,160,6, - 124,0,161,1,161,1,1,0,124,3,83,0,41,4,122,38, - 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, - 32,102,111,114,32,97,32,104,97,115,104,45,98,97,115,101, - 100,32,112,121,99,46,114,3,0,0,0,114,157,0,0,0, - 78,41,7,114,177,0,0,0,114,159,0,0,0,114,178,0, - 0,0,114,37,0,0,0,114,4,0,0,0,114,171,0,0, - 0,114,179,0,0,0,41,5,114,175,0,0,0,114,168,0, - 0,0,90,7,99,104,101,99,107,101,100,114,42,0,0,0, - 114,17,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,17,95,99,111,100,101,95,116,111,95,104, - 97,115,104,95,112,121,99,140,2,0,0,115,16,0,0,0, - 8,2,12,1,14,1,16,1,10,1,16,1,4,1,255,128, - 114,182,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62, - 0,0,0,100,1,100,2,108,0,125,1,116,1,160,2,124, - 0,161,1,106,3,125,2,124,1,160,4,124,2,161,1,125, - 3,116,1,160,5,100,2,100,3,161,2,125,4,124,4,160, - 6,124,0,160,6,124,3,100,1,25,0,161,1,161,1,83, - 0,41,4,122,121,68,101,99,111,100,101,32,98,121,116,101, - 115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115, - 111,117,114,99,101,32,99,111,100,101,32,97,110,100,32,114, - 101,116,117,114,110,32,116,104,101,32,115,116,114,105,110,103, - 46,10,10,32,32,32,32,85,110,105,118,101,114,115,97,108, - 32,110,101,119,108,105,110,101,32,115,117,112,112,111,114,116, - 32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32, - 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,0, - 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, - 101,114,79,0,0,0,90,7,66,121,116,101,115,73,79,90, - 8,114,101,97,100,108,105,110,101,90,15,100,101,116,101,99, - 116,95,101,110,99,111,100,105,110,103,90,25,73,110,99,114, - 101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101, - 99,111,100,101,114,218,6,100,101,99,111,100,101,41,5,218, - 12,115,111,117,114,99,101,95,98,121,116,101,115,114,183,0, - 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, - 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, - 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, - 111,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,151,2,0,0,115,12,0,0,0,8,5,12,1,10, - 1,12,1,20,1,255,128,114,187,0,0,0,169,2,114,151, - 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, - 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, - 2,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, - 8,0,0,0,67,0,0,0,115,16,1,0,0,124,1,100, - 1,117,0,114,58,100,2,125,1,116,0,124,2,100,3,131, - 2,114,56,122,14,124,2,160,1,124,0,161,1,125,1,87, - 0,110,30,4,0,116,2,144,1,121,14,1,0,1,0,1, - 0,89,0,110,12,110,10,116,3,160,4,124,1,161,1,125, + 104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100, + 32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100, + 46,10,10,32,32,32,32,78,114,32,0,0,0,122,20,98, + 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32, + 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0, + 122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104, + 105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32, + 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233, + 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108, + 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65, + 71,73,67,95,78,85,77,66,69,82,114,146,0,0,0,218, + 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, + 101,114,129,0,0,0,114,4,0,0,0,218,8,69,79,70, + 69,114,114,111,114,114,43,0,0,0,41,6,114,42,0,0, + 0,114,128,0,0,0,218,11,101,120,99,95,100,101,116,97, + 105,108,115,90,5,109,97,103,105,99,114,105,0,0,0,114, + 17,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,13,95,99,108,97,115,115,105,102,121,95,112, + 121,99,33,2,0,0,115,30,0,0,0,12,16,8,1,16, + 1,12,1,16,1,12,1,10,1,12,1,8,1,16,1,8, + 2,16,1,16,1,4,1,255,128,114,163,0,0,0,99,5, + 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4, + 0,0,0,67,0,0,0,115,124,0,0,0,116,0,124,0, + 100,1,100,2,133,2,25,0,131,1,124,1,100,3,64,0, + 107,3,114,31,100,4,124,3,155,2,157,2,125,5,116,1, + 160,2,100,5,124,5,161,2,1,0,116,3,124,5,102,1, + 105,0,124,4,164,1,142,1,130,1,124,2,100,6,117,1, + 114,60,116,0,124,0,100,2,100,7,133,2,25,0,131,1, + 124,2,100,3,64,0,107,3,114,58,116,3,100,4,124,3, + 155,2,157,2,102,1,105,0,124,4,164,1,142,1,130,1, + 100,6,83,0,100,6,83,0,41,8,97,7,2,0,0,86, + 97,108,105,100,97,116,101,32,97,32,112,121,99,32,97,103, + 97,105,110,115,116,32,116,104,101,32,115,111,117,114,99,101, + 32,108,97,115,116,45,109,111,100,105,102,105,101,100,32,116, + 105,109,101,46,10,10,32,32,32,32,42,100,97,116,97,42, + 32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115, + 32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101, + 46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115, + 116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32, + 32,32,32,114,101,113,117,105,114,101,100,46,41,10,10,32, + 32,32,32,42,115,111,117,114,99,101,95,109,116,105,109,101, + 42,32,105,115,32,116,104,101,32,108,97,115,116,32,109,111, + 100,105,102,105,101,100,32,116,105,109,101,115,116,97,109,112, + 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,102, + 105,108,101,46,10,10,32,32,32,32,42,115,111,117,114,99, + 101,95,115,105,122,101,42,32,105,115,32,78,111,110,101,32, + 111,114,32,116,104,101,32,115,105,122,101,32,111,102,32,116, + 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,105, + 110,32,98,121,116,101,115,46,10,10,32,32,32,32,42,110, + 97,109,101,42,32,105,115,32,116,104,101,32,110,97,109,101, + 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,98, + 101,105,110,103,32,105,109,112,111,114,116,101,100,46,32,73, + 116,32,105,115,32,117,115,101,100,32,102,111,114,32,108,111, + 103,103,105,110,103,46,10,10,32,32,32,32,42,101,120,99, + 95,100,101,116,97,105,108,115,42,32,105,115,32,97,32,100, + 105,99,116,105,111,110,97,114,121,32,112,97,115,115,101,100, + 32,116,111,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,102,32,105,116,32,114,97,105,115,101,100,32,102,111,114, + 10,32,32,32,32,105,109,112,114,111,118,101,100,32,100,101, + 98,117,103,103,105,110,103,46,10,10,32,32,32,32,65,110, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,32,105,102,32,116,104,101,32,98,121, + 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,46, + 10,10,32,32,32,32,114,157,0,0,0,233,12,0,0,0, + 114,31,0,0,0,122,22,98,121,116,101,99,111,100,101,32, + 105,115,32,115,116,97,108,101,32,102,111,114,32,114,155,0, + 0,0,78,114,156,0,0,0,41,4,114,43,0,0,0,114, + 146,0,0,0,114,160,0,0,0,114,129,0,0,0,41,6, + 114,42,0,0,0,218,12,115,111,117,114,99,101,95,109,116, + 105,109,101,218,11,115,111,117,114,99,101,95,115,105,122,101, + 114,128,0,0,0,114,162,0,0,0,114,105,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,23, + 95,118,97,108,105,100,97,116,101,95,116,105,109,101,115,116, + 97,109,112,95,112,121,99,66,2,0,0,115,20,0,0,0, + 24,19,10,1,12,1,16,1,8,1,22,1,2,255,22,2, + 8,254,255,128,114,167,0,0,0,99,4,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,115,42,0,0,0,124,0,100,1,100,2,133,2,25, + 0,124,1,107,3,114,19,116,0,100,3,124,2,155,2,157, + 2,102,1,105,0,124,3,164,1,142,1,130,1,100,4,83, + 0,41,5,97,243,1,0,0,86,97,108,105,100,97,116,101, + 32,97,32,104,97,115,104,45,98,97,115,101,100,32,112,121, + 99,32,98,121,32,99,104,101,99,107,105,110,103,32,116,104, + 101,32,114,101,97,108,32,115,111,117,114,99,101,32,104,97, + 115,104,32,97,103,97,105,110,115,116,32,116,104,101,32,111, + 110,101,32,105,110,10,32,32,32,32,116,104,101,32,112,121, + 99,32,104,101,97,100,101,114,46,10,10,32,32,32,32,42, + 100,97,116,97,42,32,105,115,32,116,104,101,32,99,111,110, + 116,101,110,116,115,32,111,102,32,116,104,101,32,112,121,99, + 32,102,105,108,101,46,32,40,79,110,108,121,32,116,104,101, + 32,102,105,114,115,116,32,49,54,32,98,121,116,101,115,32, + 97,114,101,10,32,32,32,32,114,101,113,117,105,114,101,100, + 46,41,10,10,32,32,32,32,42,115,111,117,114,99,101,95, + 104,97,115,104,42,32,105,115,32,116,104,101,32,105,109,112, + 111,114,116,108,105,98,46,117,116,105,108,46,115,111,117,114, + 99,101,95,104,97,115,104,40,41,32,111,102,32,116,104,101, + 32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,32, + 32,32,32,42,110,97,109,101,42,32,105,115,32,116,104,101, + 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100, + 117,108,101,32,98,101,105,110,103,32,105,109,112,111,114,116, + 101,100,46,32,73,116,32,105,115,32,117,115,101,100,32,102, + 111,114,32,108,111,103,103,105,110,103,46,10,10,32,32,32, + 32,42,101,120,99,95,100,101,116,97,105,108,115,42,32,105, + 115,32,97,32,100,105,99,116,105,111,110,97,114,121,32,112, + 97,115,115,101,100,32,116,111,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,102,32,105,116,32,114,97,105,115,101, + 100,32,102,111,114,10,32,32,32,32,105,109,112,114,111,118, + 101,100,32,100,101,98,117,103,103,105,110,103,46,10,10,32, + 32,32,32,65,110,32,73,109,112,111,114,116,69,114,114,111, + 114,32,105,115,32,114,97,105,115,101,100,32,105,102,32,116, + 104,101,32,98,121,116,101,99,111,100,101,32,105,115,32,115, + 116,97,108,101,46,10,10,32,32,32,32,114,157,0,0,0, + 114,156,0,0,0,122,46,104,97,115,104,32,105,110,32,98, + 121,116,101,99,111,100,101,32,100,111,101,115,110,39,116,32, + 109,97,116,99,104,32,104,97,115,104,32,111,102,32,115,111, + 117,114,99,101,32,78,41,1,114,129,0,0,0,41,4,114, + 42,0,0,0,218,11,115,111,117,114,99,101,95,104,97,115, + 104,114,128,0,0,0,114,162,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,18,95,118,97,108, + 105,100,97,116,101,95,104,97,115,104,95,112,121,99,94,2, + 0,0,115,16,0,0,0,16,17,2,1,8,1,4,255,2, + 2,6,254,4,255,255,128,114,169,0,0,0,99,4,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,76,0,0,0,116,0,160,1,124,0, + 161,1,125,4,116,2,124,4,116,3,131,2,114,28,116,4, + 160,5,100,1,124,2,161,2,1,0,124,3,100,2,117,1, + 114,26,116,6,160,7,124,4,124,3,161,2,1,0,124,4, + 83,0,116,8,100,3,160,9,124,2,161,1,124,1,124,2, + 100,4,141,3,130,1,41,5,122,35,67,111,109,112,105,108, + 101,32,98,121,116,101,99,111,100,101,32,97,115,32,102,111, + 117,110,100,32,105,110,32,97,32,112,121,99,46,122,21,99, + 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, + 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, + 111,98,106,101,99,116,32,105,110,32,123,33,114,125,169,2, + 114,128,0,0,0,114,58,0,0,0,41,10,218,7,109,97, + 114,115,104,97,108,90,5,108,111,97,100,115,218,10,105,115, + 105,110,115,116,97,110,99,101,218,10,95,99,111,100,101,95, + 116,121,112,101,114,146,0,0,0,114,160,0,0,0,218,4, + 95,105,109,112,90,16,95,102,105,120,95,99,111,95,102,105, + 108,101,110,97,109,101,114,129,0,0,0,114,77,0,0,0, + 41,5,114,42,0,0,0,114,128,0,0,0,114,118,0,0, + 0,114,119,0,0,0,218,4,99,111,100,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,17,95,99,111, + 109,112,105,108,101,95,98,121,116,101,99,111,100,101,118,2, + 0,0,115,20,0,0,0,10,2,10,1,12,1,8,1,12, + 1,4,1,10,2,4,1,6,255,255,128,114,176,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,5,0,0,0,67,0,0,0,115,70,0,0,0,116,0, + 116,1,131,1,125,3,124,3,160,2,116,3,100,1,131,1, + 161,1,1,0,124,3,160,2,116,3,124,1,131,1,161,1, + 1,0,124,3,160,2,116,3,124,2,131,1,161,1,1,0, + 124,3,160,2,116,4,160,5,124,0,161,1,161,1,1,0, + 124,3,83,0,41,3,122,43,80,114,111,100,117,99,101,32, + 116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,116, + 105,109,101,115,116,97,109,112,45,98,97,115,101,100,32,112, + 121,99,46,114,0,0,0,0,78,41,6,218,9,98,121,116, + 101,97,114,114,97,121,114,159,0,0,0,218,6,101,120,116, + 101,110,100,114,37,0,0,0,114,171,0,0,0,218,5,100, + 117,109,112,115,41,4,114,175,0,0,0,218,5,109,116,105, + 109,101,114,166,0,0,0,114,42,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,22,95,99,111, + 100,101,95,116,111,95,116,105,109,101,115,116,97,109,112,95, + 112,121,99,131,2,0,0,115,14,0,0,0,8,2,14,1, + 14,1,14,1,16,1,4,1,255,128,114,181,0,0,0,84, + 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,0, + 116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,0, + 125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,0, + 116,4,124,1,131,1,100,2,107,2,115,25,74,0,130,1, + 124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,5, + 160,6,124,0,161,1,161,1,1,0,124,3,83,0,41,4, + 122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,97, + 116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,46,114,3,0,0,0,114,157,0, + 0,0,78,41,7,114,177,0,0,0,114,159,0,0,0,114, + 178,0,0,0,114,37,0,0,0,114,4,0,0,0,114,171, + 0,0,0,114,179,0,0,0,41,5,114,175,0,0,0,114, + 168,0,0,0,90,7,99,104,101,99,107,101,100,114,42,0, + 0,0,114,17,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,17,95,99,111,100,101,95,116,111, + 95,104,97,115,104,95,112,121,99,141,2,0,0,115,16,0, + 0,0,8,2,12,1,14,1,16,1,10,1,16,1,4,1, + 255,128,114,182,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, + 115,62,0,0,0,100,1,100,2,108,0,125,1,116,1,160, + 2,124,0,161,1,106,3,125,2,124,1,160,4,124,2,161, + 1,125,3,116,1,160,5,100,2,100,3,161,2,125,4,124, + 4,160,6,124,0,160,6,124,3,100,1,25,0,161,1,161, + 1,83,0,41,4,122,121,68,101,99,111,100,101,32,98,121, + 116,101,115,32,114,101,112,114,101,115,101,110,116,105,110,103, + 32,115,111,117,114,99,101,32,99,111,100,101,32,97,110,100, + 32,114,101,116,117,114,110,32,116,104,101,32,115,116,114,105, + 110,103,46,10,10,32,32,32,32,85,110,105,118,101,114,115, + 97,108,32,110,101,119,108,105,110,101,32,115,117,112,112,111, + 114,116,32,105,115,32,117,115,101,100,32,105,110,32,116,104, + 101,32,100,101,99,111,100,105,110,103,46,10,32,32,32,32, + 114,0,0,0,0,78,84,41,7,218,8,116,111,107,101,110, + 105,122,101,114,79,0,0,0,90,7,66,121,116,101,115,73, + 79,90,8,114,101,97,100,108,105,110,101,90,15,100,101,116, + 101,99,116,95,101,110,99,111,100,105,110,103,90,25,73,110, + 99,114,101,109,101,110,116,97,108,78,101,119,108,105,110,101, + 68,101,99,111,100,101,114,218,6,100,101,99,111,100,101,41, + 5,218,12,115,111,117,114,99,101,95,98,121,116,101,115,114, + 183,0,0,0,90,21,115,111,117,114,99,101,95,98,121,116, + 101,115,95,114,101,97,100,108,105,110,101,218,8,101,110,99, + 111,100,105,110,103,90,15,110,101,119,108,105,110,101,95,100, + 101,99,111,100,101,114,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,13,100,101,99,111,100,101,95,115,111, + 117,114,99,101,152,2,0,0,115,12,0,0,0,8,5,12, + 1,10,1,12,1,20,1,255,128,114,187,0,0,0,169,2, + 114,151,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, + 115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,0, + 0,0,8,0,0,0,67,0,0,0,115,8,1,0,0,124, + 1,100,1,117,0,114,28,100,2,125,1,116,0,124,2,100, + 3,131,2,114,27,122,7,124,2,160,1,124,0,161,1,125, + 1,87,0,110,14,4,0,116,2,121,131,1,0,1,0,1, + 0,89,0,110,6,110,5,116,3,160,4,124,1,161,1,125, 1,116,5,106,6,124,0,124,2,124,1,100,4,141,3,125, - 4,100,5,124,4,95,7,124,2,100,1,117,0,114,152,116, - 8,131,0,68,0,93,42,92,2,125,5,125,6,124,1,160, - 9,116,10,124,6,131,1,161,1,114,146,124,5,124,0,124, - 1,131,2,125,2,124,2,124,4,95,11,1,0,113,152,113, - 104,100,1,83,0,124,3,116,12,117,0,114,216,116,0,124, - 2,100,6,131,2,114,214,122,14,124,2,160,13,124,0,161, - 1,125,7,87,0,110,18,4,0,116,2,144,1,121,12,1, - 0,1,0,1,0,89,0,110,18,124,7,114,214,103,0,124, - 4,95,14,110,6,124,3,124,4,95,14,124,4,106,14,103, - 0,107,2,144,1,114,8,124,1,144,1,114,8,116,15,124, - 1,131,1,100,7,25,0,125,8,124,4,106,14,160,16,124, - 8,161,1,1,0,124,4,83,0,119,0,119,0,41,8,97, - 61,1,0,0,82,101,116,117,114,110,32,97,32,109,111,100, - 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, - 110,32,97,32,102,105,108,101,32,108,111,99,97,116,105,111, - 110,46,10,10,32,32,32,32,84,111,32,105,110,100,105,99, - 97,116,101,32,116,104,97,116,32,116,104,101,32,109,111,100, - 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, - 44,32,115,101,116,10,32,32,32,32,115,117,98,109,111,100, - 117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,116, - 105,111,110,115,32,116,111,32,97,32,108,105,115,116,32,111, - 102,32,100,105,114,101,99,116,111,114,121,32,112,97,116,104, - 115,46,32,32,65,110,10,32,32,32,32,101,109,112,116,121, - 32,108,105,115,116,32,105,115,32,115,117,102,102,105,99,105, - 101,110,116,44,32,116,104,111,117,103,104,32,105,116,115,32, - 110,111,116,32,111,116,104,101,114,119,105,115,101,32,117,115, - 101,102,117,108,32,116,111,32,116,104,101,10,32,32,32,32, - 105,109,112,111,114,116,32,115,121,115,116,101,109,46,10,10, - 32,32,32,32,84,104,101,32,108,111,97,100,101,114,32,109, - 117,115,116,32,116,97,107,101,32,97,32,115,112,101,99,32, - 97,115,32,105,116,115,32,111,110,108,121,32,95,95,105,110, - 105,116,95,95,40,41,32,97,114,103,46,10,10,32,32,32, - 32,78,122,9,60,117,110,107,110,111,119,110,62,218,12,103, - 101,116,95,102,105,108,101,110,97,109,101,169,1,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,0,0,0,0,41,17,114,140,0,0,0,114,190, - 0,0,0,114,129,0,0,0,114,19,0,0,0,114,92,0, - 0,0,114,146,0,0,0,218,10,77,111,100,117,108,101,83, - 112,101,99,90,13,95,115,101,116,95,102,105,108,101,97,116, - 116,114,218,27,95,103,101,116,95,115,117,112,112,111,114,116, - 101,100,95,102,105,108,101,95,108,111,97,100,101,114,115,114, - 122,0,0,0,114,123,0,0,0,114,151,0,0,0,218,9, - 95,80,79,80,85,76,65,84,69,114,193,0,0,0,114,189, - 0,0,0,114,61,0,0,0,218,6,97,112,112,101,110,100, - 41,9,114,128,0,0,0,90,8,108,111,99,97,116,105,111, - 110,114,151,0,0,0,114,189,0,0,0,218,4,115,112,101, - 99,218,12,108,111,97,100,101,114,95,99,108,97,115,115,218, - 8,115,117,102,102,105,120,101,115,114,193,0,0,0,90,7, - 100,105,114,110,97,109,101,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,23,115,112,101,99,95,102,114,111, - 109,95,102,105,108,101,95,108,111,99,97,116,105,111,110,168, - 2,0,0,115,74,0,0,0,8,12,4,4,10,1,2,2, - 14,1,14,1,4,1,2,251,10,7,16,8,6,1,8,3, - 14,1,14,1,10,1,6,1,4,1,2,253,4,5,8,3, - 10,2,2,1,14,1,14,1,4,1,4,2,6,1,2,128, - 6,2,12,1,6,1,12,1,12,1,4,2,2,244,2,226, - 255,128,114,201,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, - 115,88,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,90,4,100,3,90,5,101,6,111,30,100,4,101, - 7,118,0,90,8,101,9,100,5,100,6,132,0,131,1,90, - 10,101,11,100,7,100,8,132,0,131,1,90,12,101,11,100, - 14,100,10,100,11,132,1,131,1,90,13,101,11,100,15,100, - 12,100,13,132,1,131,1,90,14,100,9,83,0,41,16,218, - 21,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, - 70,105,110,100,101,114,122,62,77,101,116,97,32,112,97,116, - 104,32,102,105,110,100,101,114,32,102,111,114,32,109,111,100, - 117,108,101,115,32,100,101,99,108,97,114,101,100,32,105,110, - 32,116,104,101,32,87,105,110,100,111,119,115,32,114,101,103, - 105,115,116,114,121,46,122,59,83,111,102,116,119,97,114,101, - 92,80,121,116,104,111,110,92,80,121,116,104,111,110,67,111, - 114,101,92,123,115,121,115,95,118,101,114,115,105,111,110,125, - 92,77,111,100,117,108,101,115,92,123,102,117,108,108,110,97, - 109,101,125,122,65,83,111,102,116,119,97,114,101,92,80,121, - 116,104,111,110,92,80,121,116,104,111,110,67,111,114,101,92, - 123,115,121,115,95,118,101,114,115,105,111,110,125,92,77,111, - 100,117,108,101,115,92,123,102,117,108,108,110,97,109,101,125, - 92,68,101,98,117,103,122,6,95,100,46,112,121,100,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8, - 0,0,0,67,0,0,0,115,50,0,0,0,122,16,116,0, - 160,1,116,0,106,2,124,0,161,2,87,0,83,0,4,0, - 116,3,121,48,1,0,1,0,1,0,116,0,160,1,116,0, - 106,4,124,0,161,2,6,0,89,0,83,0,119,0,114,121, - 0,0,0,41,5,218,6,119,105,110,114,101,103,90,7,79, - 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, - 82,69,78,84,95,85,83,69,82,114,64,0,0,0,90,18, - 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, - 78,69,114,20,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,14,95,111,112,101,110,95,114,101, - 103,105,115,116,114,121,248,2,0,0,115,12,0,0,0,2, - 2,16,1,12,1,18,1,2,255,255,128,122,36,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,95,111,112,101,110,95,114,101,103,105,115,116,114, - 121,99,2,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,8,0,0,0,67,0,0,0,115,130,0,0,0,124, - 0,106,0,114,14,124,0,106,1,125,2,110,6,124,0,106, - 2,125,2,124,2,106,3,124,1,100,1,116,4,106,5,100, - 0,100,2,133,2,25,0,22,0,100,3,141,2,125,3,122, - 60,124,0,160,6,124,3,161,1,143,28,125,4,116,7,160, - 8,124,4,100,4,161,2,125,5,87,0,100,0,4,0,4, - 0,131,3,1,0,110,16,49,0,115,94,119,1,1,0,1, - 0,1,0,89,0,1,0,87,0,124,5,83,0,4,0,116, - 9,121,128,1,0,1,0,1,0,89,0,100,0,83,0,119, - 0,41,5,78,122,5,37,100,46,37,100,114,45,0,0,0, - 41,2,114,150,0,0,0,90,11,115,121,115,95,118,101,114, - 115,105,111,110,114,10,0,0,0,41,10,218,11,68,69,66, - 85,71,95,66,85,73,76,68,218,18,82,69,71,73,83,84, - 82,89,95,75,69,89,95,68,69,66,85,71,218,12,82,69, - 71,73,83,84,82,89,95,75,69,89,114,77,0,0,0,114, - 16,0,0,0,218,12,118,101,114,115,105,111,110,95,105,110, - 102,111,114,204,0,0,0,114,203,0,0,0,90,10,81,117, - 101,114,121,86,97,108,117,101,114,64,0,0,0,41,6,218, - 3,99,108,115,114,150,0,0,0,90,12,114,101,103,105,115, - 116,114,121,95,107,101,121,114,21,0,0,0,90,4,104,107, - 101,121,218,8,102,105,108,101,112,97,116,104,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,16,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,255,2,0, - 0,115,30,0,0,0,6,2,8,1,6,2,6,1,16,1, - 6,255,2,2,12,1,26,1,18,128,4,3,12,254,6,1, - 2,255,255,128,122,38,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, - 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, - 0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0, - 0,0,67,0,0,0,115,120,0,0,0,124,0,160,0,124, - 1,161,1,125,4,124,4,100,0,117,0,114,22,100,0,83, - 0,122,12,116,1,124,4,131,1,1,0,87,0,110,18,4, - 0,116,2,121,118,1,0,1,0,1,0,89,0,100,0,83, - 0,116,3,131,0,68,0,93,52,92,2,125,5,125,6,124, - 4,160,4,116,5,124,6,131,1,161,1,114,112,116,6,106, - 7,124,1,124,5,124,1,124,4,131,2,124,4,100,1,141, - 3,125,7,124,7,2,0,1,0,83,0,113,60,100,0,83, - 0,119,0,41,2,78,114,191,0,0,0,41,8,114,211,0, - 0,0,114,63,0,0,0,114,64,0,0,0,114,195,0,0, - 0,114,122,0,0,0,114,123,0,0,0,114,146,0,0,0, - 218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,100, - 101,114,41,8,114,209,0,0,0,114,150,0,0,0,114,58, - 0,0,0,218,6,116,97,114,103,101,116,114,210,0,0,0, - 114,151,0,0,0,114,200,0,0,0,114,198,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,9, - 102,105,110,100,95,115,112,101,99,14,3,0,0,115,36,0, - 0,0,10,2,8,1,4,1,2,1,12,1,12,1,6,1, - 14,1,14,1,6,1,8,1,2,1,6,254,8,3,2,252, - 4,255,2,254,255,128,122,31,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, - 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, - 3,124,3,100,1,117,1,114,26,124,3,106,1,83,0,100, - 1,83,0,41,2,122,108,70,105,110,100,32,109,111,100,117, - 108,101,32,110,97,109,101,100,32,105,110,32,116,104,101,32, - 114,101,103,105,115,116,114,121,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,78,169,2,114,214,0,0,0,114,151,0,0,0, - 169,4,114,209,0,0,0,114,150,0,0,0,114,58,0,0, - 0,114,198,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,11,102,105,110,100,95,109,111,100,117, - 108,101,30,3,0,0,115,10,0,0,0,12,7,8,1,6, - 1,4,2,255,128,122,33,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,41,2,78,78,41,1,78,41, - 15,114,137,0,0,0,114,136,0,0,0,114,138,0,0,0, - 114,139,0,0,0,114,207,0,0,0,114,206,0,0,0,218, - 11,95,77,83,95,87,73,78,68,79,87,83,218,18,69,88, - 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, - 114,205,0,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,204,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,211,0,0,0,114,214,0,0,0,114, - 217,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,202,0,0,0,236,2,0, - 0,115,32,0,0,0,8,0,4,2,2,3,2,255,2,4, - 2,255,12,3,2,2,10,1,2,6,10,1,2,14,12,1, - 2,15,16,1,255,128,114,202,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, - 9,132,0,90,7,100,10,83,0,41,11,218,13,95,76,111, - 97,100,101,114,66,97,115,105,99,115,122,83,66,97,115,101, - 32,99,108,97,115,115,32,111,102,32,99,111,109,109,111,110, - 32,99,111,100,101,32,110,101,101,100,101,100,32,98,121,32, - 98,111,116,104,32,83,111,117,114,99,101,76,111,97,100,101, - 114,32,97,110,100,10,32,32,32,32,83,111,117,114,99,101, - 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,124, - 0,160,1,124,1,161,1,131,1,100,1,25,0,125,2,124, - 2,160,2,100,2,100,1,161,2,100,3,25,0,125,3,124, - 1,160,3,100,2,161,1,100,4,25,0,125,4,124,3,100, - 5,107,2,111,62,124,4,100,5,107,3,83,0,41,7,122, - 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, - 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, - 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, - 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, - 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, - 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, - 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,3, - 0,0,0,114,86,0,0,0,114,0,0,0,0,114,45,0, - 0,0,218,8,95,95,105,110,105,116,95,95,78,41,4,114, - 61,0,0,0,114,190,0,0,0,114,57,0,0,0,114,55, - 0,0,0,41,5,114,130,0,0,0,114,150,0,0,0,114, - 108,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, - 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,193,0, - 0,0,49,3,0,0,115,10,0,0,0,18,3,16,1,14, - 1,16,1,255,128,122,24,95,76,111,97,100,101,114,66,97, - 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,24,0,0,0,169,2,122, - 42,85,115,101,32,100,101,102,97,117,108,116,32,115,101,109, - 97,110,116,105,99,115,32,102,111,114,32,109,111,100,117,108, - 101,32,99,114,101,97,116,105,111,110,46,78,114,7,0,0, - 0,169,2,114,130,0,0,0,114,198,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,13,99,114, - 101,97,116,101,95,109,111,100,117,108,101,57,3,0,0,243, - 4,0,0,0,4,0,255,128,122,27,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,56, - 0,0,0,124,0,160,0,124,1,106,1,161,1,125,2,124, - 2,100,1,117,0,114,36,116,2,100,2,160,3,124,1,106, - 1,161,1,131,1,130,1,116,4,160,5,116,6,124,2,124, - 1,106,7,161,3,1,0,100,1,83,0,41,3,122,19,69, - 120,101,99,117,116,101,32,116,104,101,32,109,111,100,117,108, - 101,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100, - 32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101, - 110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116, - 117,114,110,115,32,78,111,110,101,41,8,218,8,103,101,116, - 95,99,111,100,101,114,137,0,0,0,114,129,0,0,0,114, - 77,0,0,0,114,146,0,0,0,218,25,95,99,97,108,108, - 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, - 111,118,101,100,218,4,101,120,101,99,114,143,0,0,0,41, - 3,114,130,0,0,0,218,6,109,111,100,117,108,101,114,175, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,60, - 3,0,0,115,14,0,0,0,12,2,8,1,4,1,8,1, - 4,255,20,2,255,128,122,25,95,76,111,97,100,101,114,66, - 97,115,105,99,115,46,101,120,101,99,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,12,0,0,0,116, - 0,160,1,124,0,124,1,161,2,83,0,41,2,122,26,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,78,41,2,114,146,0,0, - 0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,95, - 115,104,105,109,169,2,114,130,0,0,0,114,150,0,0,0, + 4,100,5,124,4,95,7,124,2,100,1,117,0,114,75,116, + 8,131,0,68,0,93,21,92,2,125,5,125,6,124,1,160, + 9,116,10,124,6,131,1,161,1,114,72,124,5,124,0,124, + 1,131,2,125,2,124,2,124,4,95,11,1,0,113,75,113, + 51,100,1,83,0,124,3,116,12,117,0,114,106,116,0,124, + 2,100,6,131,2,114,105,122,7,124,2,160,13,124,0,161, + 1,125,7,87,0,110,8,4,0,116,2,121,130,1,0,1, + 0,1,0,89,0,110,9,124,7,114,105,103,0,124,4,95, + 14,110,3,124,3,124,4,95,14,124,4,106,14,103,0,107, + 2,114,128,124,1,114,128,116,15,124,1,131,1,100,7,25, + 0,125,8,124,4,106,14,160,16,124,8,161,1,1,0,124, + 4,83,0,119,0,119,0,41,8,97,61,1,0,0,82,101, + 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, + 101,99,32,98,97,115,101,100,32,111,110,32,97,32,102,105, + 108,101,32,108,111,99,97,116,105,111,110,46,10,10,32,32, + 32,32,84,111,32,105,110,100,105,99,97,116,101,32,116,104, + 97,116,32,116,104,101,32,109,111,100,117,108,101,32,105,115, + 32,97,32,112,97,99,107,97,103,101,44,32,115,101,116,10, + 32,32,32,32,115,117,98,109,111,100,117,108,101,95,115,101, + 97,114,99,104,95,108,111,99,97,116,105,111,110,115,32,116, + 111,32,97,32,108,105,115,116,32,111,102,32,100,105,114,101, + 99,116,111,114,121,32,112,97,116,104,115,46,32,32,65,110, + 10,32,32,32,32,101,109,112,116,121,32,108,105,115,116,32, + 105,115,32,115,117,102,102,105,99,105,101,110,116,44,32,116, + 104,111,117,103,104,32,105,116,115,32,110,111,116,32,111,116, + 104,101,114,119,105,115,101,32,117,115,101,102,117,108,32,116, + 111,32,116,104,101,10,32,32,32,32,105,109,112,111,114,116, + 32,115,121,115,116,101,109,46,10,10,32,32,32,32,84,104, + 101,32,108,111,97,100,101,114,32,109,117,115,116,32,116,97, + 107,101,32,97,32,115,112,101,99,32,97,115,32,105,116,115, + 32,111,110,108,121,32,95,95,105,110,105,116,95,95,40,41, + 32,97,114,103,46,10,10,32,32,32,32,78,122,9,60,117, + 110,107,110,111,119,110,62,218,12,103,101,116,95,102,105,108, + 101,110,97,109,101,169,1,218,6,111,114,105,103,105,110,84, + 218,10,105,115,95,112,97,99,107,97,103,101,114,0,0,0, + 0,41,17,114,140,0,0,0,114,190,0,0,0,114,129,0, + 0,0,114,19,0,0,0,114,92,0,0,0,114,146,0,0, + 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95, + 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, + 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, + 101,95,108,111,97,100,101,114,115,114,122,0,0,0,114,123, + 0,0,0,114,151,0,0,0,218,9,95,80,79,80,85,76, + 65,84,69,114,193,0,0,0,114,189,0,0,0,114,61,0, + 0,0,218,6,97,112,112,101,110,100,41,9,114,128,0,0, + 0,90,8,108,111,99,97,116,105,111,110,114,151,0,0,0, + 114,189,0,0,0,218,4,115,112,101,99,218,12,108,111,97, + 100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105, + 120,101,115,114,193,0,0,0,90,7,100,105,114,110,97,109, + 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101, + 95,108,111,99,97,116,105,111,110,169,2,0,0,115,74,0, + 0,0,8,12,4,4,10,1,2,2,14,1,12,1,4,1, + 2,251,10,7,16,8,6,1,8,3,14,1,14,1,10,1, + 6,1,4,1,2,253,4,5,8,3,10,2,2,1,14,1, + 12,1,4,1,4,2,6,1,2,128,6,2,10,1,4,1, + 12,1,12,1,4,2,2,244,2,226,255,128,114,201,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,64,0,0,0,115,88,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,100, + 3,90,5,101,6,111,15,100,4,101,7,118,0,90,8,101, + 9,100,5,100,6,132,0,131,1,90,10,101,11,100,7,100, + 8,132,0,131,1,90,12,101,11,100,14,100,10,100,11,132, + 1,131,1,90,13,101,11,100,15,100,12,100,13,132,1,131, + 1,90,14,100,9,83,0,41,16,218,21,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, + 101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,100, + 101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,87, + 105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,46, + 122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,111, + 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, + 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, + 101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,83, + 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, + 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, + 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, + 123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,103, + 122,6,95,100,46,112,121,100,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,8,0,0,0,67,0,0, + 0,115,50,0,0,0,122,8,116,0,160,1,116,0,106,2, + 124,0,161,2,87,0,83,0,4,0,116,3,121,24,1,0, + 1,0,1,0,116,0,160,1,116,0,106,4,124,0,161,2, + 6,0,89,0,83,0,119,0,114,121,0,0,0,41,5,218, + 6,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, + 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, + 83,69,82,114,64,0,0,0,90,18,72,75,69,89,95,76, + 79,67,65,76,95,77,65,67,72,73,78,69,114,20,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,121, + 249,2,0,0,115,12,0,0,0,2,2,16,1,12,1,18, + 1,2,255,255,128,122,36,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,95,111,112, + 101,110,95,114,101,103,105,115,116,114,121,99,2,0,0,0, + 0,0,0,0,0,0,0,0,6,0,0,0,8,0,0,0, + 67,0,0,0,115,130,0,0,0,124,0,106,0,114,7,124, + 0,106,1,125,2,110,3,124,0,106,2,125,2,124,2,106, + 3,124,1,100,1,116,4,106,5,100,0,100,2,133,2,25, + 0,22,0,100,3,141,2,125,3,122,30,124,0,160,6,124, + 3,161,1,143,14,125,4,116,7,160,8,124,4,100,4,161, + 2,125,5,87,0,100,0,4,0,4,0,131,3,1,0,110, + 8,49,0,115,47,119,1,1,0,1,0,1,0,89,0,1, + 0,87,0,124,5,83,0,4,0,116,9,121,64,1,0,1, + 0,1,0,89,0,100,0,83,0,119,0,41,5,78,122,5, + 37,100,46,37,100,114,45,0,0,0,41,2,114,150,0,0, + 0,90,11,115,121,115,95,118,101,114,115,105,111,110,114,10, + 0,0,0,41,10,218,11,68,69,66,85,71,95,66,85,73, + 76,68,218,18,82,69,71,73,83,84,82,89,95,75,69,89, + 95,68,69,66,85,71,218,12,82,69,71,73,83,84,82,89, + 95,75,69,89,114,77,0,0,0,114,16,0,0,0,218,12, + 118,101,114,115,105,111,110,95,105,110,102,111,114,204,0,0, + 0,114,203,0,0,0,90,10,81,117,101,114,121,86,97,108, + 117,101,114,64,0,0,0,41,6,218,3,99,108,115,114,150, + 0,0,0,90,12,114,101,103,105,115,116,114,121,95,107,101, + 121,114,21,0,0,0,90,4,104,107,101,121,218,8,102,105, + 108,101,112,97,116,104,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,16,95,115,101,97,114,99,104,95,114, + 101,103,105,115,116,114,121,0,3,0,0,115,30,0,0,0, + 6,2,8,1,6,2,6,1,16,1,6,255,2,2,12,1, + 26,1,18,128,4,3,12,254,6,1,2,255,255,128,122,38, + 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, + 105,110,100,101,114,46,95,115,101,97,114,99,104,95,114,101, + 103,105,115,116,114,121,78,99,4,0,0,0,0,0,0,0, + 0,0,0,0,8,0,0,0,8,0,0,0,67,0,0,0, + 115,120,0,0,0,124,0,160,0,124,1,161,1,125,4,124, + 4,100,0,117,0,114,11,100,0,83,0,122,6,116,1,124, + 4,131,1,1,0,87,0,110,9,4,0,116,2,121,59,1, + 0,1,0,1,0,89,0,100,0,83,0,116,3,131,0,68, + 0,93,26,92,2,125,5,125,6,124,4,160,4,116,5,124, + 6,131,1,161,1,114,56,116,6,106,7,124,1,124,5,124, + 1,124,4,131,2,124,4,100,1,141,3,125,7,124,7,2, + 0,1,0,83,0,113,30,100,0,83,0,119,0,41,2,78, + 114,191,0,0,0,41,8,114,211,0,0,0,114,63,0,0, + 0,114,64,0,0,0,114,195,0,0,0,114,122,0,0,0, + 114,123,0,0,0,114,146,0,0,0,218,16,115,112,101,99, + 95,102,114,111,109,95,108,111,97,100,101,114,41,8,114,209, + 0,0,0,114,150,0,0,0,114,58,0,0,0,218,6,116, + 97,114,103,101,116,114,210,0,0,0,114,151,0,0,0,114, + 200,0,0,0,114,198,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,9,102,105,110,100,95,115, + 112,101,99,15,3,0,0,115,36,0,0,0,10,2,8,1, + 4,1,2,1,12,1,12,1,6,1,14,1,14,1,6,1, + 8,1,2,1,6,254,8,3,2,252,4,255,2,254,255,128, + 122,31,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124, + 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,117, + 1,114,13,124,3,106,1,83,0,100,1,83,0,41,2,122, + 108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,109, + 101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,116, + 114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,169,2, + 114,214,0,0,0,114,151,0,0,0,169,4,114,209,0,0, + 0,114,150,0,0,0,114,58,0,0,0,114,198,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,108,111,97,100,95,109,111,100,117,108,101,68,3,0,0, - 115,4,0,0,0,12,3,255,128,122,25,95,76,111,97,100, - 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, - 100,117,108,101,78,41,8,114,137,0,0,0,114,136,0,0, - 0,114,138,0,0,0,114,139,0,0,0,114,193,0,0,0, - 114,226,0,0,0,114,232,0,0,0,114,235,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,222,0,0,0,44,3,0,0,115,14,0,0, - 0,8,0,4,2,8,3,8,8,8,3,12,8,255,128,114, - 222,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,74,0, - 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0, - 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, - 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, - 90,7,100,11,100,12,156,1,100,13,100,14,132,2,90,8, - 100,15,100,16,132,0,90,9,100,17,83,0,41,18,218,12, - 83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,4,0,0,0,116,0,130,1,41,2, - 122,165,79,112,116,105,111,110,97,108,32,109,101,116,104,111, - 100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,116, - 104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32, - 116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,111, - 114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,112, - 101,99,105,102,105,101,100,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,82, - 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, - 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, - 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,78,41,1,114,64,0,0,0,169, - 2,114,130,0,0,0,114,58,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,10,112,97,116,104, - 95,109,116,105,109,101,76,3,0,0,115,4,0,0,0,4, - 6,255,128,122,23,83,111,117,114,99,101,76,111,97,100,101, - 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0, - 124,1,161,1,105,1,83,0,41,3,97,158,1,0,0,79, - 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114, - 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100, - 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32, - 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46, - 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, - 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, - 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, - 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, - 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, - 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, - 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, - 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, - 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, - 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, - 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, - 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, - 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, - 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, - 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, - 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, - 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, - 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, - 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, - 108,101,100,46,10,32,32,32,32,32,32,32,32,114,180,0, - 0,0,78,41,1,114,238,0,0,0,114,237,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, - 112,97,116,104,95,115,116,97,116,115,84,3,0,0,115,4, - 0,0,0,14,12,255,128,122,23,83,111,117,114,99,101,76, - 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, - 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,4,0,0,0,67,0,0,0,115,12,0,0,0,124,0, - 160,0,124,2,124,3,161,2,83,0,41,2,122,228,79,112, - 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, - 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, - 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, - 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, - 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, - 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, - 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, - 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,32, - 112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,105, - 110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,101, - 99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,101, - 114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,32, - 32,32,78,41,1,218,8,115,101,116,95,100,97,116,97,41, - 4,114,130,0,0,0,114,119,0,0,0,90,10,99,97,99, - 104,101,95,112,97,116,104,114,42,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,15,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,98,3,0,0, - 115,4,0,0,0,12,8,255,128,122,28,83,111,117,114,99, - 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, - 121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0, - 114,24,0,0,0,41,2,122,150,79,112,116,105,111,110,97, - 108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119, - 114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101, - 115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116, + 11,102,105,110,100,95,109,111,100,117,108,101,31,3,0,0, + 115,10,0,0,0,12,7,8,1,6,1,4,2,255,128,122, + 33,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, + 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,41,2,78,78,41,1,78,41,15,114,137,0,0,0, + 114,136,0,0,0,114,138,0,0,0,114,139,0,0,0,114, + 207,0,0,0,114,206,0,0,0,218,11,95,77,83,95,87, + 73,78,68,79,87,83,218,18,69,88,84,69,78,83,73,79, + 78,95,83,85,70,70,73,88,69,83,114,205,0,0,0,218, + 12,115,116,97,116,105,99,109,101,116,104,111,100,114,204,0, + 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, + 211,0,0,0,114,214,0,0,0,114,217,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,202,0,0,0,237,2,0,0,115,32,0,0,0, + 8,0,4,2,2,3,2,255,2,4,2,255,12,3,2,2, + 10,1,2,6,10,1,2,14,12,1,2,15,16,1,255,128, + 114,202,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,48, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,83,0,41,11,218,13,95,76,111,97,100,101,114,66,97, + 115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115, + 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32, + 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83, + 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10, + 32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0, + 0,0,115,64,0,0,0,116,0,124,0,160,1,124,1,161, + 1,131,1,100,1,25,0,125,2,124,2,160,2,100,2,100, + 1,161,2,100,3,25,0,125,3,124,1,160,3,100,2,161, + 1,100,4,25,0,125,4,124,3,100,5,107,2,111,31,124, + 4,100,5,107,3,83,0,41,7,122,141,67,111,110,99,114, + 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, + 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98, + 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32, + 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114, + 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102, + 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105, + 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105, + 116,95,95,46,112,121,39,46,114,3,0,0,0,114,86,0, + 0,0,114,0,0,0,0,114,45,0,0,0,218,8,95,95, + 105,110,105,116,95,95,78,41,4,114,61,0,0,0,114,190, + 0,0,0,114,57,0,0,0,114,55,0,0,0,41,5,114, + 130,0,0,0,114,150,0,0,0,114,108,0,0,0,90,13, + 102,105,108,101,110,97,109,101,95,98,97,115,101,90,9,116, + 97,105,108,95,110,97,109,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,193,0,0,0,50,3,0,0, + 115,10,0,0,0,18,3,16,1,14,1,16,1,255,128,122, + 24,95,76,111,97,100,101,114,66,97,115,105,99,115,46,105, + 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,24,0,0,0,169,2,122,42,85,115,101,32,100, + 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, + 116,105,111,110,46,78,114,7,0,0,0,169,2,114,130,0, + 0,0,114,198,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,13,99,114,101,97,116,101,95,109, + 111,100,117,108,101,58,3,0,0,243,4,0,0,0,4,0, + 255,128,122,27,95,76,111,97,100,101,114,66,97,115,105,99, + 115,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 5,0,0,0,67,0,0,0,115,56,0,0,0,124,0,160, + 0,124,1,106,1,161,1,125,2,124,2,100,1,117,0,114, + 18,116,2,100,2,160,3,124,1,106,1,161,1,131,1,130, + 1,116,4,160,5,116,6,124,2,124,1,106,7,161,3,1, + 0,100,1,83,0,41,3,122,19,69,120,101,99,117,116,101, + 32,116,104,101,32,109,111,100,117,108,101,46,78,122,52,99, + 97,110,110,111,116,32,108,111,97,100,32,109,111,100,117,108, + 101,32,123,33,114,125,32,119,104,101,110,32,103,101,116,95, + 99,111,100,101,40,41,32,114,101,116,117,114,110,115,32,78, + 111,110,101,41,8,218,8,103,101,116,95,99,111,100,101,114, + 137,0,0,0,114,129,0,0,0,114,77,0,0,0,114,146, + 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, + 102,114,97,109,101,115,95,114,101,109,111,118,101,100,218,4, + 101,120,101,99,114,143,0,0,0,41,3,114,130,0,0,0, + 218,6,109,111,100,117,108,101,114,175,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,11,101,120, + 101,99,95,109,111,100,117,108,101,61,3,0,0,115,14,0, + 0,0,12,2,8,1,4,1,8,1,4,255,20,2,255,128, + 122,25,95,76,111,97,100,101,114,66,97,115,105,99,115,46, + 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 67,0,0,0,115,12,0,0,0,116,0,160,1,124,0,124, + 1,161,2,83,0,41,2,122,26,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,78,41,2,114,146,0,0,0,218,17,95,108,111, + 97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2, + 114,130,0,0,0,114,150,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95, + 109,111,100,117,108,101,69,3,0,0,115,4,0,0,0,12, + 3,255,128,122,25,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,108,111,97,100,95,109,111,100,117,108,101,78,41, + 8,114,137,0,0,0,114,136,0,0,0,114,138,0,0,0, + 114,139,0,0,0,114,193,0,0,0,114,226,0,0,0,114, + 232,0,0,0,114,235,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,222,0, + 0,0,45,3,0,0,115,14,0,0,0,8,0,4,2,8, + 3,8,8,8,3,12,8,255,128,114,222,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,74,0,0,0,101,0,90,1, + 100,0,90,2,100,1,100,2,132,0,90,3,100,3,100,4, + 132,0,90,4,100,5,100,6,132,0,90,5,100,7,100,8, + 132,0,90,6,100,9,100,10,132,0,90,7,100,11,100,12, + 156,1,100,13,100,14,132,2,90,8,100,15,100,16,132,0, + 90,9,100,17,83,0,41,18,218,12,83,111,117,114,99,101, + 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, + 4,0,0,0,116,0,130,1,41,2,122,165,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, + 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, + 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, + 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, + 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, + 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, + 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, + 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, + 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, + 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, + 32,78,41,1,114,64,0,0,0,169,2,114,130,0,0,0, + 114,58,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, + 77,3,0,0,115,4,0,0,0,4,6,255,128,122,23,83, + 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, + 95,109,116,105,109,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 14,0,0,0,100,1,124,0,160,0,124,1,161,1,105,1, + 83,0,41,3,97,158,1,0,0,79,112,116,105,111,110,97, + 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, + 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, + 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,10,32,32,32,32,32,32,32,32,112,97,116, 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, + 32,32,32,32,80,111,115,115,105,98,108,101,32,107,101,121, + 115,58,10,32,32,32,32,32,32,32,32,45,32,39,109,116, + 105,109,101,39,32,40,109,97,110,100,97,116,111,114,121,41, + 32,105,115,32,116,104,101,32,110,117,109,101,114,105,99,32, + 116,105,109,101,115,116,97,109,112,32,111,102,32,108,97,115, + 116,32,115,111,117,114,99,101,10,32,32,32,32,32,32,32, + 32,32,32,99,111,100,101,32,109,111,100,105,102,105,99,97, + 116,105,111,110,59,10,32,32,32,32,32,32,32,32,45,32, + 39,115,105,122,101,39,32,40,111,112,116,105,111,110,97,108, + 41,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110, + 32,98,121,116,101,115,32,111,102,32,116,104,101,32,115,111, + 117,114,99,101,32,99,111,100,101,46,10,10,32,32,32,32, 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, - 111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116, - 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, - 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78, - 114,7,0,0,0,41,3,114,130,0,0,0,114,58,0,0, - 0,114,42,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,240,0,0,0,108,3,0,0,114,227, - 0,0,0,122,21,83,111,117,114,99,101,76,111,97,100,101, - 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67, - 0,0,0,115,70,0,0,0,124,0,160,0,124,1,161,1, - 125,2,122,20,124,0,160,1,124,2,161,1,125,3,87,0, - 116,4,124,3,131,1,83,0,4,0,116,2,121,68,1,0, - 125,4,1,0,122,14,116,3,100,1,124,1,100,2,141,2, - 124,4,130,2,100,3,125,4,126,4,119,1,119,0,41,4, - 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, - 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, - 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, - 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, - 127,0,0,0,78,41,5,114,190,0,0,0,218,8,103,101, - 116,95,100,97,116,97,114,64,0,0,0,114,129,0,0,0, - 114,187,0,0,0,41,5,114,130,0,0,0,114,150,0,0, - 0,114,58,0,0,0,114,185,0,0,0,218,3,101,120,99, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 10,103,101,116,95,115,111,117,114,99,101,115,3,0,0,115, - 26,0,0,0,10,2,2,1,12,1,8,4,14,253,4,1, - 2,1,4,255,2,1,2,255,8,128,2,255,255,128,122,23, - 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, - 95,115,111,117,114,99,101,114,116,0,0,0,41,1,218,9, - 95,111,112,116,105,109,105,122,101,99,3,0,0,0,0,0, - 0,0,1,0,0,0,4,0,0,0,8,0,0,0,67,0, - 0,0,115,22,0,0,0,116,0,106,1,116,2,124,1,124, - 2,100,1,100,2,124,3,100,3,141,6,83,0,41,5,122, - 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, - 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, - 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, - 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, - 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, - 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, - 32,32,32,114,230,0,0,0,84,41,2,218,12,100,111,110, - 116,95,105,110,104,101,114,105,116,114,96,0,0,0,78,41, - 3,114,146,0,0,0,114,229,0,0,0,218,7,99,111,109, - 112,105,108,101,41,4,114,130,0,0,0,114,42,0,0,0, - 114,58,0,0,0,114,245,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,14,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,125,3,0,0,115,8,0, - 0,0,12,5,4,1,6,255,255,128,122,27,83,111,117,114, - 99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95, - 116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,15,0,0,0,9,0,0,0,67,0,0,0, - 115,34,2,0,0,124,0,160,0,124,1,161,1,125,2,100, - 1,125,3,100,1,125,4,100,1,125,5,100,2,125,6,100, - 3,125,7,122,12,116,1,124,2,131,1,125,8,87,0,110, - 24,4,0,116,2,144,2,121,32,1,0,1,0,1,0,100, - 1,125,8,89,0,144,1,110,38,122,14,124,0,160,3,124, - 2,161,1,125,9,87,0,110,20,4,0,116,4,144,2,121, - 30,1,0,1,0,1,0,89,0,144,1,110,2,116,5,124, - 9,100,4,25,0,131,1,125,3,122,14,124,0,160,6,124, - 8,161,1,125,10,87,0,110,18,4,0,116,4,144,2,121, - 28,1,0,1,0,1,0,89,0,110,212,124,1,124,8,100, - 5,156,2,125,11,122,148,116,7,124,10,124,1,124,11,131, - 3,125,12,116,8,124,10,131,1,100,6,100,1,133,2,25, - 0,125,13,124,12,100,7,64,0,100,8,107,3,125,6,124, - 6,144,1,114,30,124,12,100,9,64,0,100,8,107,3,125, - 7,116,9,106,10,100,10,107,3,144,1,114,28,124,7,115, - 248,116,9,106,10,100,11,107,2,144,1,114,28,124,0,160, + 111,119,115,32,116,104,101,32,108,111,97,100,101,114,32,116, + 111,32,114,101,97,100,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, + 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, + 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, + 32,32,32,32,32,32,32,114,180,0,0,0,78,41,1,114, + 238,0,0,0,114,237,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,10,112,97,116,104,95,115, + 116,97,116,115,85,3,0,0,115,4,0,0,0,14,12,255, + 128,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, + 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3, + 161,2,83,0,41,2,122,228,79,112,116,105,111,110,97,108, + 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, + 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, + 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, + 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, + 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, + 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, + 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, + 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, + 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, + 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, + 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, + 111,110,115,10,32,32,32,32,32,32,32,32,78,41,1,218, + 8,115,101,116,95,100,97,116,97,41,4,114,130,0,0,0, + 114,119,0,0,0,90,10,99,97,99,104,101,95,112,97,116, + 104,114,42,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,15,95,99,97,99,104,101,95,98,121, + 116,101,99,111,100,101,99,3,0,0,115,4,0,0,0,12, + 8,255,128,122,28,83,111,117,114,99,101,76,111,97,100,101, + 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100, + 101,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,1,0,0,0,67,0,0,0,114,24,0,0,0,41, + 2,122,150,79,112,116,105,111,110,97,108,32,109,101,116,104, + 111,100,32,119,104,105,99,104,32,119,114,105,116,101,115,32, + 100,97,116,97,32,40,98,121,116,101,115,41,32,116,111,32, + 97,32,102,105,108,101,32,112,97,116,104,32,40,97,32,115, + 116,114,41,46,10,10,32,32,32,32,32,32,32,32,73,109, + 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, + 109,101,116,104,111,100,32,97,108,108,111,119,115,32,102,111, + 114,32,116,104,101,32,119,114,105,116,105,110,103,32,111,102, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, + 10,32,32,32,32,32,32,32,32,78,114,7,0,0,0,41, + 3,114,130,0,0,0,114,58,0,0,0,114,42,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 240,0,0,0,109,3,0,0,114,227,0,0,0,122,21,83, + 111,117,114,99,101,76,111,97,100,101,114,46,115,101,116,95, + 100,97,116,97,99,2,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,10,0,0,0,67,0,0,0,115,70,0, + 0,0,124,0,160,0,124,1,161,1,125,2,122,10,124,0, + 160,1,124,2,161,1,125,3,87,0,116,4,124,3,131,1, + 83,0,4,0,116,2,121,34,1,0,125,4,1,0,122,7, + 116,3,100,1,124,1,100,2,141,2,124,4,130,2,100,3, + 125,4,126,4,119,1,119,0,41,4,122,52,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, + 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, + 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, + 101,116,95,100,97,116,97,40,41,114,127,0,0,0,78,41, + 5,114,190,0,0,0,218,8,103,101,116,95,100,97,116,97, + 114,64,0,0,0,114,129,0,0,0,114,187,0,0,0,41, + 5,114,130,0,0,0,114,150,0,0,0,114,58,0,0,0, + 114,185,0,0,0,218,3,101,120,99,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,10,103,101,116,95,115, + 111,117,114,99,101,116,3,0,0,115,26,0,0,0,10,2, + 2,1,12,1,8,4,14,253,4,1,2,1,4,255,2,1, + 2,255,8,128,2,255,255,128,122,23,83,111,117,114,99,101, + 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, + 101,114,116,0,0,0,41,1,218,9,95,111,112,116,105,109, + 105,122,101,99,3,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,8,0,0,0,67,0,0,0,115,22,0,0, + 0,116,0,106,1,116,2,124,1,124,2,100,1,100,2,124, + 3,100,3,141,6,83,0,41,5,122,130,82,101,116,117,114, + 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, + 116,32,99,111,109,112,105,108,101,100,32,102,114,111,109,32, + 115,111,117,114,99,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,101,32,39,100,97,116,97,39,32,97,114,103,117, + 109,101,110,116,32,99,97,110,32,98,101,32,97,110,121,32, + 111,98,106,101,99,116,32,116,121,112,101,32,116,104,97,116, + 32,99,111,109,112,105,108,101,40,41,32,115,117,112,112,111, + 114,116,115,46,10,32,32,32,32,32,32,32,32,114,230,0, + 0,0,84,41,2,218,12,100,111,110,116,95,105,110,104,101, + 114,105,116,114,96,0,0,0,78,41,3,114,146,0,0,0, + 114,229,0,0,0,218,7,99,111,109,112,105,108,101,41,4, + 114,130,0,0,0,114,42,0,0,0,114,58,0,0,0,114, + 245,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,14,115,111,117,114,99,101,95,116,111,95,99, + 111,100,101,126,3,0,0,115,8,0,0,0,12,5,4,1, + 6,255,255,128,122,27,83,111,117,114,99,101,76,111,97,100, + 101,114,46,115,111,117,114,99,101,95,116,111,95,99,111,100, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,15,0, + 0,0,9,0,0,0,67,0,0,0,115,12,2,0,0,124, + 0,160,0,124,1,161,1,125,2,100,1,125,3,100,1,125, + 4,100,1,125,5,100,2,125,6,100,3,125,7,122,6,116, + 1,124,2,131,1,125,8,87,0,110,11,4,0,116,2,144, + 1,121,5,1,0,1,0,1,0,100,1,125,8,89,0,110, + 143,122,7,124,0,160,3,124,2,161,1,125,9,87,0,110, + 9,4,0,116,4,144,1,121,4,1,0,1,0,1,0,89, + 0,110,126,116,5,124,9,100,4,25,0,131,1,125,3,122, + 7,124,0,160,6,124,8,161,1,125,10,87,0,110,9,4, + 0,116,4,144,1,121,3,1,0,1,0,1,0,89,0,110, + 103,124,1,124,8,100,5,156,2,125,11,122,71,116,7,124, + 10,124,1,124,11,131,3,125,12,116,8,124,10,131,1,100, + 6,100,1,133,2,25,0,125,13,124,12,100,7,64,0,100, + 8,107,3,125,6,124,6,114,138,124,12,100,9,64,0,100, + 8,107,3,125,7,116,9,106,10,100,10,107,3,114,137,124, + 7,115,119,116,9,106,10,100,11,107,2,114,137,124,0,160, 6,124,2,161,1,125,4,116,9,160,11,116,12,124,4,161, 2,125,5,116,13,124,10,124,5,124,1,124,11,131,4,1, - 0,110,20,116,14,124,10,124,3,124,9,100,12,25,0,124, - 1,124,11,131,5,1,0,87,0,110,22,4,0,116,15,116, - 16,102,2,144,2,121,26,1,0,1,0,1,0,89,0,110, - 30,116,17,160,18,100,13,124,8,124,2,161,3,1,0,116, + 0,110,10,116,14,124,10,124,3,124,9,100,12,25,0,124, + 1,124,11,131,5,1,0,87,0,110,11,4,0,116,15,116, + 16,102,2,144,1,121,2,1,0,1,0,1,0,89,0,110, + 15,116,17,160,18,100,13,124,8,124,2,161,3,1,0,116, 19,124,13,124,1,124,8,124,2,100,14,141,4,83,0,124, - 4,100,1,117,0,144,1,114,126,124,0,160,6,124,2,161, - 1,125,4,124,0,160,20,124,4,124,2,161,2,125,14,116, - 17,160,18,100,15,124,2,161,2,1,0,116,21,106,22,144, - 2,115,20,124,8,100,1,117,1,144,2,114,20,124,3,100, - 1,117,1,144,2,114,20,124,6,144,1,114,218,124,5,100, - 1,117,0,144,1,114,204,116,9,160,11,124,4,161,1,125, - 5,116,23,124,14,124,5,124,7,131,3,125,10,110,16,116, - 24,124,14,124,3,116,25,124,4,131,1,131,3,125,10,122, - 20,124,0,160,26,124,2,124,8,124,10,161,3,1,0,87, - 0,124,14,83,0,4,0,116,2,144,2,121,24,1,0,1, - 0,1,0,89,0,124,14,83,0,124,14,83,0,119,0,119, - 0,119,0,119,0,119,0,41,16,122,190,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, - 100,101,114,46,103,101,116,95,99,111,100,101,46,10,10,32, - 32,32,32,32,32,32,32,82,101,97,100,105,110,103,32,111, - 102,32,98,121,116,101,99,111,100,101,32,114,101,113,117,105, - 114,101,115,32,112,97,116,104,95,115,116,97,116,115,32,116, - 111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,100, - 46,32,84,111,32,119,114,105,116,101,10,32,32,32,32,32, - 32,32,32,98,121,116,101,99,111,100,101,44,32,115,101,116, - 95,100,97,116,97,32,109,117,115,116,32,97,108,115,111,32, - 98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,10, - 10,32,32,32,32,32,32,32,32,78,70,84,114,180,0,0, - 0,114,170,0,0,0,114,156,0,0,0,114,3,0,0,0, - 114,0,0,0,0,114,45,0,0,0,90,5,110,101,118,101, - 114,90,6,97,108,119,97,121,115,218,4,115,105,122,101,122, - 13,123,125,32,109,97,116,99,104,101,115,32,123,125,41,3, - 114,128,0,0,0,114,118,0,0,0,114,119,0,0,0,122, - 19,99,111,100,101,32,111,98,106,101,99,116,32,102,114,111, - 109,32,123,125,41,27,114,190,0,0,0,114,109,0,0,0, - 114,95,0,0,0,114,239,0,0,0,114,64,0,0,0,114, - 34,0,0,0,114,242,0,0,0,114,163,0,0,0,218,10, - 109,101,109,111,114,121,118,105,101,119,114,174,0,0,0,90, - 21,99,104,101,99,107,95,104,97,115,104,95,98,97,115,101, - 100,95,112,121,99,115,114,168,0,0,0,218,17,95,82,65, - 87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,169, - 0,0,0,114,167,0,0,0,114,129,0,0,0,114,161,0, - 0,0,114,146,0,0,0,114,160,0,0,0,114,176,0,0, - 0,114,248,0,0,0,114,16,0,0,0,218,19,100,111,110, - 116,95,119,114,105,116,101,95,98,121,116,101,99,111,100,101, - 114,182,0,0,0,114,181,0,0,0,114,4,0,0,0,114, - 241,0,0,0,41,15,114,130,0,0,0,114,150,0,0,0, - 114,119,0,0,0,114,165,0,0,0,114,185,0,0,0,114, - 168,0,0,0,90,10,104,97,115,104,95,98,97,115,101,100, - 90,12,99,104,101,99,107,95,115,111,117,114,99,101,114,118, - 0,0,0,218,2,115,116,114,42,0,0,0,114,162,0,0, - 0,114,17,0,0,0,90,10,98,121,116,101,115,95,100,97, - 116,97,90,11,99,111,100,101,95,111,98,106,101,99,116,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,228, - 0,0,0,133,3,0,0,115,170,0,0,0,10,7,4,1, - 4,1,4,1,4,1,4,1,2,1,12,1,14,1,10,1, - 2,2,14,1,14,1,6,1,12,2,2,1,14,1,14,1, - 4,1,2,3,2,1,6,254,2,4,12,1,16,1,12,1, - 6,1,12,1,12,1,2,1,2,255,8,2,4,254,10,3, - 4,1,2,1,2,1,4,254,8,4,2,1,4,255,2,128, - 2,3,2,1,2,1,6,1,2,1,2,1,4,251,4,128, - 18,7,4,1,8,2,2,1,4,255,6,2,2,1,2,1, - 6,254,10,3,10,1,12,1,12,1,18,1,6,1,4,255, - 6,2,10,1,10,1,14,1,6,2,6,1,4,255,2,2, - 16,1,4,3,14,254,2,1,8,1,2,254,2,233,2,225, - 2,250,2,251,255,128,122,21,83,111,117,114,99,101,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,78,41,10, - 114,137,0,0,0,114,136,0,0,0,114,138,0,0,0,114, - 238,0,0,0,114,239,0,0,0,114,241,0,0,0,114,240, - 0,0,0,114,244,0,0,0,114,248,0,0,0,114,228,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,236,0,0,0,74,3,0,0,115, - 18,0,0,0,8,0,8,2,8,8,8,14,8,10,8,7, - 14,10,12,8,255,128,114,236,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 0,0,0,0,115,92,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,101,7,135, - 0,102,1,100,8,100,9,132,8,131,1,90,8,101,7,100, - 10,100,11,132,0,131,1,90,9,100,12,100,13,132,0,90, - 10,101,7,100,14,100,15,132,0,131,1,90,11,135,0,4, - 0,90,12,83,0,41,16,218,10,70,105,108,101,76,111,97, - 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, - 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, - 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, - 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, - 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, - 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, - 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0, - 0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,0, - 124,2,124,0,95,1,100,1,83,0,41,2,122,75,67,97, - 99,104,101,32,116,104,101,32,109,111,100,117,108,101,32,110, - 97,109,101,32,97,110,100,32,116,104,101,32,112,97,116,104, - 32,116,111,32,116,104,101,32,102,105,108,101,32,102,111,117, - 110,100,32,98,121,32,116,104,101,10,32,32,32,32,32,32, - 32,32,102,105,110,100,101,114,46,78,114,170,0,0,0,41, - 3,114,130,0,0,0,114,150,0,0,0,114,58,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 223,0,0,0,223,3,0,0,115,6,0,0,0,6,3,10, - 1,255,128,122,19,70,105,108,101,76,111,97,100,101,114,46, - 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,243,24,0,0,0,124,0,106,0,124,1,106,0,107,2, - 111,22,124,0,106,1,124,1,106,1,107,2,83,0,114,121, - 0,0,0,169,2,218,9,95,95,99,108,97,115,115,95,95, - 114,143,0,0,0,169,2,114,130,0,0,0,90,5,111,116, - 104,101,114,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,6,95,95,101,113,95,95,229,3,0,0,243,8, - 0,0,0,12,1,10,1,2,255,255,128,122,17,70,105,108, - 101,76,111,97,100,101,114,46,95,95,101,113,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,243,20,0,0,0,116,0,124,0, - 106,1,131,1,116,0,124,0,106,2,131,1,65,0,83,0, - 114,121,0,0,0,169,3,218,4,104,97,115,104,114,128,0, - 0,0,114,58,0,0,0,169,1,114,130,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,8,95, - 95,104,97,115,104,95,95,233,3,0,0,243,4,0,0,0, - 20,1,255,128,122,19,70,105,108,101,76,111,97,100,101,114, - 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, - 0,0,115,16,0,0,0,116,0,116,1,124,0,131,2,160, - 2,124,1,161,1,83,0,41,2,122,100,76,111,97,100,32, - 97,32,109,111,100,117,108,101,32,102,114,111,109,32,97,32, - 102,105,108,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, - 41,3,218,5,115,117,112,101,114,114,254,0,0,0,114,235, - 0,0,0,114,234,0,0,0,169,1,114,1,1,0,0,114, - 7,0,0,0,114,8,0,0,0,114,235,0,0,0,236,3, - 0,0,115,4,0,0,0,16,10,255,128,122,22,70,105,108, - 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,243,6,0,0, - 0,124,0,106,0,83,0,169,2,122,58,82,101,116,117,114, - 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, - 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115, - 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105, - 110,100,101,114,46,78,114,62,0,0,0,114,234,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 190,0,0,0,248,3,0,0,243,4,0,0,0,6,3,255, - 128,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, - 0,0,0,115,128,0,0,0,116,0,124,0,116,1,116,2, - 102,2,131,2,114,72,116,3,160,4,116,5,124,1,131,1, - 161,1,143,24,125,2,124,2,160,6,161,0,87,0,2,0, - 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,58, - 119,1,1,0,1,0,1,0,89,0,1,0,100,1,83,0, - 116,3,160,7,124,1,100,2,161,2,143,24,125,2,124,2, - 160,6,161,0,87,0,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,49,0,115,114,119,1,1,0,1,0,1,0, - 89,0,1,0,100,1,83,0,41,3,122,39,82,101,116,117, - 114,110,32,116,104,101,32,100,97,116,97,32,102,114,111,109, - 32,112,97,116,104,32,97,115,32,114,97,119,32,98,121,116, - 101,115,46,78,218,1,114,41,8,114,172,0,0,0,114,236, - 0,0,0,218,19,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,114,79,0,0,0,90,9,111, - 112,101,110,95,99,111,100,101,114,97,0,0,0,90,4,114, - 101,97,100,114,80,0,0,0,41,3,114,130,0,0,0,114, - 58,0,0,0,114,83,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,242,0,0,0,253,3,0, - 0,115,16,0,0,0,14,2,16,1,22,1,20,128,14,2, - 22,1,20,128,255,128,122,19,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,100,97,116,97,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, - 67,0,0,0,115,20,0,0,0,100,1,100,2,108,0,109, - 1,125,2,1,0,124,2,124,0,131,1,83,0,41,3,78, - 114,0,0,0,0,41,1,218,10,70,105,108,101,82,101,97, - 100,101,114,41,2,218,17,105,109,112,111,114,116,108,105,98, - 46,114,101,97,100,101,114,115,114,18,1,0,0,41,3,114, - 130,0,0,0,114,231,0,0,0,114,18,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,19,103, - 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, - 101,114,6,4,0,0,115,6,0,0,0,12,2,8,1,255, - 128,122,30,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, - 114,41,13,114,137,0,0,0,114,136,0,0,0,114,138,0, - 0,0,114,139,0,0,0,114,223,0,0,0,114,3,1,0, - 0,114,9,1,0,0,114,147,0,0,0,114,235,0,0,0, - 114,190,0,0,0,114,242,0,0,0,114,20,1,0,0,90, - 13,95,95,99,108,97,115,115,99,101,108,108,95,95,114,7, - 0,0,0,114,7,0,0,0,114,12,1,0,0,114,8,0, - 0,0,114,254,0,0,0,218,3,0,0,115,26,0,0,0, - 8,0,4,2,8,3,8,6,8,4,2,3,14,1,2,11, - 10,1,8,4,2,9,18,1,255,128,114,254,0,0,0,99, + 4,100,1,117,0,114,185,124,0,160,6,124,2,161,1,125, + 4,124,0,160,20,124,4,124,2,161,2,125,14,116,17,160, + 18,100,15,124,2,161,2,1,0,116,21,106,22,115,255,124, + 8,100,1,117,1,114,255,124,3,100,1,117,1,114,255,124, + 6,114,226,124,5,100,1,117,0,114,219,116,9,160,11,124, + 4,161,1,125,5,116,23,124,14,124,5,124,7,131,3,125, + 10,110,8,116,24,124,14,124,3,116,25,124,4,131,1,131, + 3,125,10,122,10,124,0,160,26,124,2,124,8,124,10,161, + 3,1,0,87,0,124,14,83,0,4,0,116,2,144,1,121, + 1,1,0,1,0,1,0,89,0,124,14,83,0,124,14,83, + 0,119,0,119,0,119,0,119,0,119,0,41,16,122,190,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, + 116,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 46,10,10,32,32,32,32,32,32,32,32,82,101,97,100,105, + 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,114, + 101,113,117,105,114,101,115,32,112,97,116,104,95,115,116,97, + 116,115,32,116,111,32,98,101,32,105,109,112,108,101,109,101, + 110,116,101,100,46,32,84,111,32,119,114,105,116,101,10,32, + 32,32,32,32,32,32,32,98,121,116,101,99,111,100,101,44, + 32,115,101,116,95,100,97,116,97,32,109,117,115,116,32,97, + 108,115,111,32,98,101,32,105,109,112,108,101,109,101,110,116, + 101,100,46,10,10,32,32,32,32,32,32,32,32,78,70,84, + 114,180,0,0,0,114,170,0,0,0,114,156,0,0,0,114, + 3,0,0,0,114,0,0,0,0,114,45,0,0,0,90,5, + 110,101,118,101,114,90,6,97,108,119,97,121,115,218,4,115, + 105,122,101,122,13,123,125,32,109,97,116,99,104,101,115,32, + 123,125,41,3,114,128,0,0,0,114,118,0,0,0,114,119, + 0,0,0,122,19,99,111,100,101,32,111,98,106,101,99,116, + 32,102,114,111,109,32,123,125,41,27,114,190,0,0,0,114, + 109,0,0,0,114,95,0,0,0,114,239,0,0,0,114,64, + 0,0,0,114,34,0,0,0,114,242,0,0,0,114,163,0, + 0,0,218,10,109,101,109,111,114,121,118,105,101,119,114,174, + 0,0,0,90,21,99,104,101,99,107,95,104,97,115,104,95, + 98,97,115,101,100,95,112,121,99,115,114,168,0,0,0,218, + 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, + 69,82,114,169,0,0,0,114,167,0,0,0,114,129,0,0, + 0,114,161,0,0,0,114,146,0,0,0,114,160,0,0,0, + 114,176,0,0,0,114,248,0,0,0,114,16,0,0,0,218, + 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, + 99,111,100,101,114,182,0,0,0,114,181,0,0,0,114,4, + 0,0,0,114,241,0,0,0,41,15,114,130,0,0,0,114, + 150,0,0,0,114,119,0,0,0,114,165,0,0,0,114,185, + 0,0,0,114,168,0,0,0,90,10,104,97,115,104,95,98, + 97,115,101,100,90,12,99,104,101,99,107,95,115,111,117,114, + 99,101,114,118,0,0,0,218,2,115,116,114,42,0,0,0, + 114,162,0,0,0,114,17,0,0,0,90,10,98,121,116,101, + 115,95,100,97,116,97,90,11,99,111,100,101,95,111,98,106, + 101,99,116,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,228,0,0,0,134,3,0,0,115,170,0,0,0, + 10,7,4,1,4,1,4,1,4,1,4,1,2,1,12,1, + 14,1,8,1,2,2,14,1,14,1,4,1,12,2,2,1, + 14,1,14,1,4,1,2,3,2,1,6,254,2,4,12,1, + 16,1,12,1,4,1,12,1,10,1,2,1,2,255,8,2, + 2,254,10,3,4,1,2,1,2,1,4,254,8,4,2,1, + 4,255,2,128,2,3,2,1,2,1,6,1,2,1,2,1, + 4,251,4,128,18,7,4,1,8,2,2,1,4,255,6,2, + 2,1,2,1,6,254,8,3,10,1,12,1,12,1,14,1, + 6,1,2,255,4,2,8,1,10,1,14,1,6,2,6,1, + 4,255,2,2,16,1,4,3,14,254,2,1,8,1,2,254, + 2,233,2,225,2,250,2,251,255,128,122,21,83,111,117,114, + 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, + 101,78,41,10,114,137,0,0,0,114,136,0,0,0,114,138, + 0,0,0,114,238,0,0,0,114,239,0,0,0,114,241,0, + 0,0,114,240,0,0,0,114,244,0,0,0,114,248,0,0, + 0,114,228,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,236,0,0,0,75, + 3,0,0,115,18,0,0,0,8,0,8,2,8,8,8,14, + 8,10,8,7,14,10,12,8,255,128,114,236,0,0,0,99, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,64,0,0,0,115,46,0,0,0,101,0,90, + 4,0,0,0,0,0,0,0,115,92,0,0,0,101,0,90, 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, - 4,100,4,100,5,132,0,90,5,100,6,100,7,156,1,100, - 8,100,9,132,2,90,6,100,10,83,0,41,11,218,16,83, - 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,122, - 62,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,83,111,117,114, - 99,101,76,111,97,100,101,114,32,117,115,105,110,103,32,116, - 104,101,32,102,105,108,101,32,115,121,115,116,101,109,46,99, + 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, + 6,101,7,135,0,102,1,100,8,100,9,132,8,131,1,90, + 8,101,7,100,10,100,11,132,0,131,1,90,9,100,12,100, + 13,132,0,90,10,101,7,100,14,100,15,132,0,131,1,90, + 11,135,0,4,0,90,12,83,0,41,16,218,10,70,105,108, + 101,76,111,97,100,101,114,122,103,66,97,115,101,32,102,105, + 108,101,32,108,111,97,100,101,114,32,99,108,97,115,115,32, + 119,104,105,99,104,32,105,109,112,108,101,109,101,110,116,115, + 32,116,104,101,32,108,111,97,100,101,114,32,112,114,111,116, + 111,99,111,108,32,109,101,116,104,111,100,115,32,116,104,97, + 116,10,32,32,32,32,114,101,113,117,105,114,101,32,102,105, + 108,101,32,115,121,115,116,101,109,32,117,115,97,103,101,46, + 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,100,1,83,0,41,2, + 122,75,67,97,99,104,101,32,116,104,101,32,109,111,100,117, + 108,101,32,110,97,109,101,32,97,110,100,32,116,104,101,32, + 112,97,116,104,32,116,111,32,116,104,101,32,102,105,108,101, + 32,102,111,117,110,100,32,98,121,32,116,104,101,10,32,32, + 32,32,32,32,32,32,102,105,110,100,101,114,46,78,114,170, + 0,0,0,41,3,114,130,0,0,0,114,150,0,0,0,114, + 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,223,0,0,0,224,3,0,0,115,6,0,0, + 0,6,3,10,1,255,128,122,19,70,105,108,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, + 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,2, + 83,0,114,121,0,0,0,169,2,218,9,95,95,99,108,97, + 115,115,95,95,114,143,0,0,0,169,2,114,130,0,0,0, + 90,5,111,116,104,101,114,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,6,95,95,101,113,95,95,230,3, + 0,0,243,8,0,0,0,12,1,10,1,2,255,255,128,122, + 17,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,243,20,0,0,0, + 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, + 65,0,83,0,114,121,0,0,0,169,3,218,4,104,97,115, + 104,114,128,0,0,0,114,58,0,0,0,169,1,114,130,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,8,95,95,104,97,115,104,95,95,234,3,0,0,243, + 4,0,0,0,20,1,255,128,122,19,70,105,108,101,76,111, + 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,3,0,0,0,115,16,0,0,0,116,0,116,1,124, + 0,131,2,160,2,124,1,161,1,83,0,41,2,122,100,76, + 111,97,100,32,97,32,109,111,100,117,108,101,32,102,114,111, + 109,32,97,32,102,105,108,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,78,41,3,218,5,115,117,112,101,114,114,254,0, + 0,0,114,235,0,0,0,114,234,0,0,0,169,1,114,1, + 1,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, + 0,0,237,3,0,0,115,4,0,0,0,16,10,255,128,122, + 22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,100, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 243,6,0,0,0,124,0,106,0,83,0,169,2,122,58,82, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, + 101,32,102,105,110,100,101,114,46,78,114,62,0,0,0,114, + 234,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,190,0,0,0,249,3,0,0,243,4,0,0, + 0,6,3,255,128,122,23,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, + 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, + 116,1,116,2,102,2,131,2,114,36,116,3,160,4,116,5, + 124,1,131,1,161,1,143,12,125,2,124,2,160,6,161,0, + 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, + 49,0,115,29,119,1,1,0,1,0,1,0,89,0,1,0, + 100,1,83,0,116,3,160,7,124,1,100,2,161,2,143,12, + 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, + 4,0,131,3,1,0,83,0,49,0,115,57,119,1,1,0, + 1,0,1,0,89,0,1,0,100,1,83,0,41,3,122,39, + 82,101,116,117,114,110,32,116,104,101,32,100,97,116,97,32, + 102,114,111,109,32,112,97,116,104,32,97,115,32,114,97,119, + 32,98,121,116,101,115,46,78,218,1,114,41,8,114,172,0, + 0,0,114,236,0,0,0,218,19,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,114,79,0,0, + 0,90,9,111,112,101,110,95,99,111,100,101,114,97,0,0, + 0,90,4,114,101,97,100,114,80,0,0,0,41,3,114,130, + 0,0,0,114,58,0,0,0,114,83,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,242,0,0, + 0,254,3,0,0,115,16,0,0,0,14,2,16,1,22,1, + 20,128,14,2,22,1,20,128,255,128,122,19,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,99, 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,22,0,0,0,116,0,124, - 1,131,1,125,2,124,2,106,1,124,2,106,2,100,1,156, - 2,83,0,41,3,122,33,82,101,116,117,114,110,32,116,104, - 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,116, - 104,101,32,112,97,116,104,46,41,2,114,180,0,0,0,114, - 249,0,0,0,78,41,3,114,63,0,0,0,218,8,115,116, - 95,109,116,105,109,101,90,7,115,116,95,115,105,122,101,41, - 3,114,130,0,0,0,114,58,0,0,0,114,253,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 239,0,0,0,16,4,0,0,115,6,0,0,0,8,2,14, - 1,255,128,122,27,83,111,117,114,99,101,70,105,108,101,76, - 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,5,0,0,0,67,0,0,0,115,24,0,0,0,116,0, - 124,1,131,1,125,4,124,0,106,1,124,2,124,3,124,4, - 100,1,141,3,83,0,41,2,78,169,1,218,5,95,109,111, - 100,101,41,2,114,126,0,0,0,114,240,0,0,0,41,5, - 114,130,0,0,0,114,119,0,0,0,114,118,0,0,0,114, - 42,0,0,0,114,66,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,241,0,0,0,21,4,0, - 0,115,6,0,0,0,8,2,16,1,255,128,122,32,83,111, - 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,114,75, - 0,0,0,114,23,1,0,0,99,3,0,0,0,0,0,0, - 0,1,0,0,0,9,0,0,0,11,0,0,0,67,0,0, - 0,115,254,0,0,0,116,0,124,1,131,1,92,2,125,4, - 125,5,103,0,125,6,124,4,114,62,116,1,124,4,131,1, - 115,62,116,0,124,4,131,1,92,2,125,4,125,7,124,6, - 160,2,124,7,161,1,1,0,124,4,114,62,116,1,124,4, - 131,1,114,28,116,3,124,6,131,1,68,0,93,96,125,7, - 116,4,124,4,124,7,131,2,125,4,122,14,116,5,160,6, - 124,4,161,1,1,0,87,0,113,70,4,0,116,7,121,116, - 1,0,1,0,1,0,89,0,113,70,4,0,116,8,121,252, - 1,0,125,8,1,0,122,30,116,9,160,10,100,1,124,4, - 124,8,161,3,1,0,87,0,89,0,100,2,125,8,126,8, - 1,0,100,2,83,0,100,2,125,8,126,8,119,1,122,30, - 116,11,124,1,124,2,124,3,131,3,1,0,116,9,160,10, - 100,3,124,1,161,2,1,0,87,0,100,2,83,0,4,0, - 116,8,121,250,1,0,125,8,1,0,122,28,116,9,160,10, - 100,1,124,1,124,8,161,3,1,0,87,0,89,0,100,2, - 125,8,126,8,100,2,83,0,100,2,125,8,126,8,119,1, - 119,0,119,0,41,4,122,27,87,114,105,116,101,32,98,121, - 116,101,115,32,100,97,116,97,32,116,111,32,97,32,102,105, - 108,101,46,122,27,99,111,117,108,100,32,110,111,116,32,99, - 114,101,97,116,101,32,123,33,114,125,58,32,123,33,114,125, - 78,122,12,99,114,101,97,116,101,100,32,123,33,114,125,41, - 12,114,61,0,0,0,114,71,0,0,0,114,197,0,0,0, - 114,56,0,0,0,114,54,0,0,0,114,19,0,0,0,90, - 5,109,107,100,105,114,218,15,70,105,108,101,69,120,105,115, - 116,115,69,114,114,111,114,114,64,0,0,0,114,146,0,0, - 0,114,160,0,0,0,114,84,0,0,0,41,9,114,130,0, - 0,0,114,58,0,0,0,114,42,0,0,0,114,24,1,0, - 0,218,6,112,97,114,101,110,116,114,108,0,0,0,114,53, - 0,0,0,114,49,0,0,0,114,243,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, - 0,26,4,0,0,115,58,0,0,0,12,2,4,1,12,2, - 12,1,10,1,12,254,12,4,10,1,2,1,14,1,12,1, - 4,2,14,1,6,3,4,1,4,255,16,2,8,128,2,1, - 12,1,18,1,14,1,8,2,2,1,18,255,8,128,2,254, - 2,247,255,128,122,25,83,111,117,114,99,101,70,105,108,101, - 76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,78, - 41,7,114,137,0,0,0,114,136,0,0,0,114,138,0,0, - 0,114,139,0,0,0,114,239,0,0,0,114,241,0,0,0, - 114,240,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,21,1,0,0,12,4, - 0,0,115,12,0,0,0,8,0,4,2,8,2,8,5,18, - 5,255,128,114,21,1,0,0,99,0,0,0,0,0,0,0, + 2,0,0,0,67,0,0,0,115,20,0,0,0,100,1,100, + 2,108,0,109,1,125,2,1,0,124,2,124,0,131,1,83, + 0,41,3,78,114,0,0,0,0,41,1,218,10,70,105,108, + 101,82,101,97,100,101,114,41,2,218,17,105,109,112,111,114, + 116,108,105,98,46,114,101,97,100,101,114,115,114,18,1,0, + 0,41,3,114,130,0,0,0,114,231,0,0,0,114,18,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, + 114,101,97,100,101,114,7,4,0,0,115,6,0,0,0,12, + 2,8,1,255,128,122,30,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114, + 101,97,100,101,114,41,13,114,137,0,0,0,114,136,0,0, + 0,114,138,0,0,0,114,139,0,0,0,114,223,0,0,0, + 114,3,1,0,0,114,9,1,0,0,114,147,0,0,0,114, + 235,0,0,0,114,190,0,0,0,114,242,0,0,0,114,20, + 1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,108, + 95,95,114,7,0,0,0,114,7,0,0,0,114,12,1,0, + 0,114,8,0,0,0,114,254,0,0,0,219,3,0,0,115, + 26,0,0,0,8,0,4,2,8,3,8,6,8,4,2,3, + 14,1,2,11,10,1,8,4,2,9,18,1,255,128,114,254, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,46,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,156,1,100,8,100,9,132,2,90,6,100,10,83,0,41, + 11,218,16,83,111,117,114,99,101,70,105,108,101,76,111,97, + 100,101,114,122,62,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 83,111,117,114,99,101,76,111,97,100,101,114,32,117,115,105, + 110,103,32,116,104,101,32,102,105,108,101,32,115,121,115,116, + 101,109,46,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,67,0,0,0,115,22,0,0, + 0,116,0,124,1,131,1,125,2,124,2,106,1,124,2,106, + 2,100,1,156,2,83,0,41,3,122,33,82,101,116,117,114, + 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, + 111,114,32,116,104,101,32,112,97,116,104,46,41,2,114,180, + 0,0,0,114,249,0,0,0,78,41,3,114,63,0,0,0, + 218,8,115,116,95,109,116,105,109,101,90,7,115,116,95,115, + 105,122,101,41,3,114,130,0,0,0,114,58,0,0,0,114, + 253,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,239,0,0,0,17,4,0,0,115,6,0,0, + 0,8,2,14,1,255,128,122,27,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115, + 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,67,0,0,0,115,24,0, + 0,0,116,0,124,1,131,1,125,4,124,0,106,1,124,2, + 124,3,124,4,100,1,141,3,83,0,41,2,78,169,1,218, + 5,95,109,111,100,101,41,2,114,126,0,0,0,114,240,0, + 0,0,41,5,114,130,0,0,0,114,119,0,0,0,114,118, + 0,0,0,114,42,0,0,0,114,66,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, + 0,22,4,0,0,115,6,0,0,0,8,2,16,1,255,128, + 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,114,75,0,0,0,114,23,1,0,0,99,3,0,0, + 0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,0, + 0,67,0,0,0,115,254,0,0,0,116,0,124,1,131,1, + 92,2,125,4,125,5,103,0,125,6,124,4,114,31,116,1, + 124,4,131,1,115,31,116,0,124,4,131,1,92,2,125,4, + 125,7,124,6,160,2,124,7,161,1,1,0,124,4,114,31, + 116,1,124,4,131,1,114,14,116,3,124,6,131,1,68,0, + 93,48,125,7,116,4,124,4,124,7,131,2,125,4,122,7, + 116,5,160,6,124,4,161,1,1,0,87,0,113,35,4,0, + 116,7,121,58,1,0,1,0,1,0,89,0,113,35,4,0, + 116,8,121,126,1,0,125,8,1,0,122,15,116,9,160,10, + 100,1,124,4,124,8,161,3,1,0,87,0,89,0,100,2, + 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, + 119,1,122,15,116,11,124,1,124,2,124,3,131,3,1,0, + 116,9,160,10,100,3,124,1,161,2,1,0,87,0,100,2, + 83,0,4,0,116,8,121,125,1,0,125,8,1,0,122,14, + 116,9,160,10,100,1,124,1,124,8,161,3,1,0,87,0, + 89,0,100,2,125,8,126,8,100,2,83,0,100,2,125,8, + 126,8,119,1,119,0,119,0,41,4,122,27,87,114,105,116, + 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, + 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, + 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, + 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, + 33,114,125,41,12,114,61,0,0,0,114,71,0,0,0,114, + 197,0,0,0,114,56,0,0,0,114,54,0,0,0,114,19, + 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, + 69,120,105,115,116,115,69,114,114,111,114,114,64,0,0,0, + 114,146,0,0,0,114,160,0,0,0,114,84,0,0,0,41, + 9,114,130,0,0,0,114,58,0,0,0,114,42,0,0,0, + 114,24,1,0,0,218,6,112,97,114,101,110,116,114,108,0, + 0,0,114,53,0,0,0,114,49,0,0,0,114,243,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,240,0,0,0,27,4,0,0,115,58,0,0,0,12,2, + 4,1,12,2,12,1,10,1,12,254,12,4,10,1,2,1, + 14,1,12,1,4,2,14,1,6,3,4,1,4,255,16,2, + 8,128,2,1,12,1,18,1,14,1,8,2,2,1,18,255, + 8,128,2,254,2,247,255,128,122,25,83,111,117,114,99,101, + 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, + 97,116,97,78,41,7,114,137,0,0,0,114,136,0,0,0, + 114,138,0,0,0,114,139,0,0,0,114,239,0,0,0,114, + 241,0,0,0,114,240,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,21,1, + 0,0,13,4,0,0,115,12,0,0,0,8,0,4,2,8, + 2,8,5,18,5,255,128,114,21,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,32,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, + 100,5,132,0,90,5,100,6,83,0,41,7,218,20,83,111, + 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, + 101,114,122,45,76,111,97,100,101,114,32,119,104,105,99,104, + 32,104,97,110,100,108,101,115,32,115,111,117,114,99,101,108, + 101,115,115,32,102,105,108,101,32,105,109,112,111,114,116,115, + 46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,5,0,0,0,67,0,0,0,115,68,0,0,0,124, + 0,160,0,124,1,161,1,125,2,124,0,160,1,124,2,161, + 1,125,3,124,1,124,2,100,1,156,2,125,4,116,2,124, + 3,124,1,124,4,131,3,1,0,116,3,116,4,124,3,131, + 1,100,2,100,0,133,2,25,0,124,1,124,2,100,3,141, + 3,83,0,41,4,78,114,170,0,0,0,114,156,0,0,0, + 41,2,114,128,0,0,0,114,118,0,0,0,41,5,114,190, + 0,0,0,114,242,0,0,0,114,163,0,0,0,114,176,0, + 0,0,114,250,0,0,0,41,5,114,130,0,0,0,114,150, + 0,0,0,114,58,0,0,0,114,42,0,0,0,114,162,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,228,0,0,0,62,4,0,0,115,24,0,0,0,10, + 1,10,1,2,4,2,1,6,254,12,4,2,1,14,1,2, + 1,2,1,6,253,255,128,122,29,83,111,117,114,99,101,108, + 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, + 24,0,0,0,41,2,122,39,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,116,104,101,114,101,32,105,115,32, + 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, + 114,7,0,0,0,114,234,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,244,0,0,0,78,4, + 0,0,114,25,0,0,0,122,31,83,111,117,114,99,101,108, + 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,115,111,117,114,99,101,78,41,6,114,137,0,0,0, + 114,136,0,0,0,114,138,0,0,0,114,139,0,0,0,114, + 228,0,0,0,114,244,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,27,1, + 0,0,58,4,0,0,115,10,0,0,0,8,0,4,2,8, + 2,12,16,255,128,114,27,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, + 0,0,0,115,92,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, + 132,0,90,5,100,6,100,7,132,0,90,6,100,8,100,9, + 132,0,90,7,100,10,100,11,132,0,90,8,100,12,100,13, + 132,0,90,9,100,14,100,15,132,0,90,10,100,16,100,17, + 132,0,90,11,101,12,100,18,100,19,132,0,131,1,90,13, + 100,20,83,0,41,21,114,17,1,0,0,122,93,76,111,97, + 100,101,114,32,102,111,114,32,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, + 84,104,101,32,99,111,110,115,116,114,117,99,116,111,114,32, + 105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,119, + 111,114,107,32,119,105,116,104,32,70,105,108,101,70,105,110, + 100,101,114,46,10,10,32,32,32,32,99,3,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, + 0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,2, + 124,0,95,1,100,0,83,0,114,121,0,0,0,114,170,0, + 0,0,41,3,114,130,0,0,0,114,128,0,0,0,114,58, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,223,0,0,0,91,4,0,0,115,6,0,0,0, + 6,1,10,1,255,128,122,28,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, + 105,116,95,95,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,114,255,0, + 0,0,114,121,0,0,0,114,0,1,0,0,114,2,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,3,1,0,0,95,4,0,0,114,4,1,0,0,122,26, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,114,5,1,0,0,114,121,0,0,0,114,6,1, + 0,0,114,8,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,9,1,0,0,99,4,0,0,114, + 10,1,0,0,122,28,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,95,95,104,97,115,104, + 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,5,0,0,0,67,0,0,0,115,36,0,0,0, + 116,0,160,1,116,2,106,3,124,1,161,2,125,2,116,0, + 160,4,100,1,124,1,106,5,124,0,106,6,161,3,1,0, + 124,2,83,0,41,3,122,38,67,114,101,97,116,101,32,97, + 110,32,117,110,105,116,105,97,108,105,122,101,100,32,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,122,38, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,123,33,114,125,32,108,111,97,100,101,100,32,102,114,111, + 109,32,123,33,114,125,78,41,7,114,146,0,0,0,114,229, + 0,0,0,114,174,0,0,0,90,14,99,114,101,97,116,101, + 95,100,121,110,97,109,105,99,114,160,0,0,0,114,128,0, + 0,0,114,58,0,0,0,41,3,114,130,0,0,0,114,198, + 0,0,0,114,231,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,226,0,0,0,102,4,0,0, + 115,16,0,0,0,4,2,6,1,4,255,6,2,8,1,4, + 255,4,2,255,128,122,33,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,5,0,0,0,67,0,0, + 0,115,36,0,0,0,116,0,160,1,116,2,106,3,124,1, + 161,2,1,0,116,0,160,4,100,1,124,0,106,5,124,0, + 106,6,161,3,1,0,100,2,83,0,41,3,122,30,73,110, + 105,116,105,97,108,105,122,101,32,97,110,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,122,40,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,123, + 33,114,125,32,101,120,101,99,117,116,101,100,32,102,114,111, + 109,32,123,33,114,125,78,41,7,114,146,0,0,0,114,229, + 0,0,0,114,174,0,0,0,90,12,101,120,101,99,95,100, + 121,110,97,109,105,99,114,160,0,0,0,114,128,0,0,0, + 114,58,0,0,0,169,2,114,130,0,0,0,114,231,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,232,0,0,0,110,4,0,0,115,10,0,0,0,14,2, + 6,1,8,1,8,255,255,128,122,31,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120, + 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,0, + 0,0,115,36,0,0,0,116,0,124,0,106,1,131,1,100, + 1,25,0,137,0,116,2,135,0,102,1,100,2,100,3,132, + 8,116,3,68,0,131,1,131,1,83,0,41,5,122,49,82, + 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, + 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, + 114,3,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,26, + 0,0,0,124,0,93,9,125,1,136,0,100,0,124,1,23, + 0,107,2,86,0,1,0,113,1,100,1,83,0,41,2,114, + 223,0,0,0,78,114,7,0,0,0,169,2,114,5,0,0, + 0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,108, + 101,95,110,97,109,101,114,7,0,0,0,114,8,0,0,0, + 114,9,0,0,0,119,4,0,0,115,8,0,0,0,4,0, + 2,1,20,255,255,128,122,49,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, + 60,103,101,110,101,120,112,114,62,78,41,4,114,61,0,0, + 0,114,58,0,0,0,218,3,97,110,121,114,219,0,0,0, + 114,234,0,0,0,114,7,0,0,0,114,31,1,0,0,114, + 8,0,0,0,114,193,0,0,0,116,4,0,0,115,10,0, + 0,0,14,2,12,1,2,1,8,255,255,128,122,30,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,114,24,0,0,0,41,2,122,63,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,97,110,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97, + 32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,7, + 0,0,0,114,234,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,228,0,0,0,122,4,0,0, + 114,25,0,0,0,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,24,0,0, + 0,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, + 117,114,99,101,32,99,111,100,101,46,78,114,7,0,0,0, + 114,234,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,244,0,0,0,126,4,0,0,114,25,0, + 0,0,122,30,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,114,13,1,0,0, + 114,14,1,0,0,114,62,0,0,0,114,234,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,190, + 0,0,0,130,4,0,0,114,15,1,0,0,122,32,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, + 14,114,137,0,0,0,114,136,0,0,0,114,138,0,0,0, + 114,139,0,0,0,114,223,0,0,0,114,3,1,0,0,114, + 9,1,0,0,114,226,0,0,0,114,232,0,0,0,114,193, + 0,0,0,114,228,0,0,0,114,244,0,0,0,114,147,0, + 0,0,114,190,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,17,1,0,0, + 83,4,0,0,115,26,0,0,0,8,0,4,2,8,6,8, + 4,8,4,8,3,8,8,8,6,8,6,8,4,2,4,14, + 1,255,128,114,17,1,0,0,99,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, + 0,115,104,0,0,0,101,0,90,1,100,0,90,2,100,1, 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, - 90,5,100,6,83,0,41,7,218,20,83,111,117,114,99,101, - 108,101,115,115,70,105,108,101,76,111,97,100,101,114,122,45, - 76,111,97,100,101,114,32,119,104,105,99,104,32,104,97,110, - 100,108,101,115,32,115,111,117,114,99,101,108,101,115,115,32, - 102,105,108,101,32,105,109,112,111,114,116,115,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0, - 0,0,67,0,0,0,115,68,0,0,0,124,0,160,0,124, - 1,161,1,125,2,124,0,160,1,124,2,161,1,125,3,124, - 1,124,2,100,1,156,2,125,4,116,2,124,3,124,1,124, - 4,131,3,1,0,116,3,116,4,124,3,131,1,100,2,100, - 0,133,2,25,0,124,1,124,2,100,3,141,3,83,0,41, - 4,78,114,170,0,0,0,114,156,0,0,0,41,2,114,128, - 0,0,0,114,118,0,0,0,41,5,114,190,0,0,0,114, - 242,0,0,0,114,163,0,0,0,114,176,0,0,0,114,250, - 0,0,0,41,5,114,130,0,0,0,114,150,0,0,0,114, - 58,0,0,0,114,42,0,0,0,114,162,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,228,0, - 0,0,61,4,0,0,115,24,0,0,0,10,1,10,1,2, - 4,2,1,6,254,12,4,2,1,14,1,2,1,2,1,6, - 253,255,128,122,29,83,111,117,114,99,101,108,101,115,115,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,114,24,0,0,0, - 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, - 111,117,114,99,101,32,99,111,100,101,46,78,114,7,0,0, - 0,114,234,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,244,0,0,0,77,4,0,0,114,25, - 0,0,0,122,31,83,111,117,114,99,101,108,101,115,115,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, - 117,114,99,101,78,41,6,114,137,0,0,0,114,136,0,0, - 0,114,138,0,0,0,114,139,0,0,0,114,228,0,0,0, - 114,244,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,27,1,0,0,57,4, - 0,0,115,10,0,0,0,8,0,4,2,8,2,12,16,255, - 128,114,27,1,0,0,99,0,0,0,0,0,0,0,0,0, + 90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0, + 90,7,100,10,100,11,132,0,90,8,100,12,100,13,132,0, + 90,9,100,14,100,15,132,0,90,10,100,16,100,17,132,0, + 90,11,100,18,100,19,132,0,90,12,100,20,100,21,132,0, + 90,13,100,22,100,23,132,0,90,14,100,24,83,0,41,25, + 218,14,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 97,38,1,0,0,82,101,112,114,101,115,101,110,116,115,32, + 97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107, + 97,103,101,39,115,32,112,97,116,104,46,32,32,73,116,32, + 117,115,101,115,32,116,104,101,32,109,111,100,117,108,101,32, + 110,97,109,101,10,32,32,32,32,116,111,32,102,105,110,100, + 32,105,116,115,32,112,97,114,101,110,116,32,109,111,100,117, + 108,101,44,32,97,110,100,32,102,114,111,109,32,116,104,101, + 114,101,32,105,116,32,108,111,111,107,115,32,117,112,32,116, + 104,101,32,112,97,114,101,110,116,39,115,10,32,32,32,32, + 95,95,112,97,116,104,95,95,46,32,32,87,104,101,110,32, + 116,104,105,115,32,99,104,97,110,103,101,115,44,32,116,104, + 101,32,109,111,100,117,108,101,39,115,32,111,119,110,32,112, + 97,116,104,32,105,115,32,114,101,99,111,109,112,117,116,101, + 100,44,10,32,32,32,32,117,115,105,110,103,32,112,97,116, + 104,95,102,105,110,100,101,114,46,32,32,70,111,114,32,116, + 111,112,45,108,101,118,101,108,32,109,111,100,117,108,101,115, + 44,32,116,104,101,32,112,97,114,101,110,116,32,109,111,100, + 117,108,101,39,115,32,112,97,116,104,10,32,32,32,32,105, + 115,32,115,121,115,46,112,97,116,104,46,99,4,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 67,0,0,0,115,36,0,0,0,124,1,124,0,95,0,124, + 2,124,0,95,1,116,2,124,0,160,3,161,0,131,1,124, + 0,95,4,124,3,124,0,95,5,100,0,83,0,114,121,0, + 0,0,41,6,218,5,95,110,97,109,101,218,5,95,112,97, + 116,104,114,123,0,0,0,218,16,95,103,101,116,95,112,97, + 114,101,110,116,95,112,97,116,104,218,17,95,108,97,115,116, + 95,112,97,114,101,110,116,95,112,97,116,104,218,12,95,112, + 97,116,104,95,102,105,110,100,101,114,169,4,114,130,0,0, + 0,114,128,0,0,0,114,58,0,0,0,90,11,112,97,116, + 104,95,102,105,110,100,101,114,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,223,0,0,0,143,4,0,0, + 115,10,0,0,0,6,1,6,1,14,1,10,1,255,128,122, + 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,38,0,0,0,124,0,106,0,160,1,100,1,161,1, + 92,3,125,1,125,2,125,3,124,2,100,2,107,2,114,15, + 100,3,83,0,124,1,100,4,102,2,83,0,41,6,122,62, + 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, + 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, + 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, + 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,86, + 0,0,0,114,10,0,0,0,41,2,114,16,0,0,0,114, + 58,0,0,0,90,8,95,95,112,97,116,104,95,95,78,41, + 2,114,34,1,0,0,114,55,0,0,0,41,4,114,130,0, + 0,0,114,26,1,0,0,218,3,100,111,116,90,2,109,101, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 23,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97, + 116,104,95,110,97,109,101,115,149,4,0,0,115,10,0,0, + 0,18,2,8,1,4,2,8,3,255,128,122,38,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,102,105,110, + 100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97, + 109,101,115,99,1,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,67,0,0,0,115,28,0,0, + 0,124,0,160,0,161,0,92,2,125,1,125,2,116,1,116, + 2,106,3,124,1,25,0,124,2,131,2,83,0,114,121,0, + 0,0,41,4,114,41,1,0,0,114,142,0,0,0,114,16, + 0,0,0,218,7,109,111,100,117,108,101,115,41,3,114,130, + 0,0,0,90,18,112,97,114,101,110,116,95,109,111,100,117, + 108,101,95,110,97,109,101,90,14,112,97,116,104,95,97,116, + 116,114,95,110,97,109,101,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,36,1,0,0,159,4,0,0,115, + 6,0,0,0,12,1,16,1,255,128,122,31,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,103,101,116,95, + 112,97,114,101,110,116,95,112,97,116,104,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 67,0,0,0,115,80,0,0,0,116,0,124,0,160,1,161, + 0,131,1,125,1,124,1,124,0,106,2,107,3,114,37,124, + 0,160,3,124,0,106,4,124,1,161,2,125,2,124,2,100, + 0,117,1,114,34,124,2,106,5,100,0,117,0,114,34,124, + 2,106,6,114,34,124,2,106,6,124,0,95,7,124,1,124, + 0,95,2,124,0,106,7,83,0,114,121,0,0,0,41,8, + 114,123,0,0,0,114,36,1,0,0,114,37,1,0,0,114, + 38,1,0,0,114,34,1,0,0,114,151,0,0,0,114,189, + 0,0,0,114,35,1,0,0,41,3,114,130,0,0,0,90, + 11,112,97,114,101,110,116,95,112,97,116,104,114,198,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,12,95,114,101,99,97,108,99,117,108,97,116,101,163,4, + 0,0,115,18,0,0,0,12,2,10,1,14,1,18,3,6, + 1,8,1,6,1,6,1,255,128,122,27,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,114,101,99,97,108, + 99,117,108,97,116,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, + 12,0,0,0,116,0,124,0,160,1,161,0,131,1,83,0, + 114,121,0,0,0,41,2,218,4,105,116,101,114,114,43,1, + 0,0,114,8,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,8,95,95,105,116,101,114,95,95, + 176,4,0,0,243,4,0,0,0,12,1,255,128,122,23,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 105,116,101,114,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, + 12,0,0,0,124,0,160,0,161,0,124,1,25,0,83,0, + 114,121,0,0,0,169,1,114,43,1,0,0,41,2,114,130, + 0,0,0,218,5,105,110,100,101,120,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,95,95,103,101,116, + 105,116,101,109,95,95,179,4,0,0,114,47,1,0,0,122, + 26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,103,101,116,105,116,101,109,95,95,99,3,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, + 1,60,0,100,0,83,0,114,121,0,0,0,41,1,114,35, + 1,0,0,41,3,114,130,0,0,0,114,49,1,0,0,114, + 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,95,95,115,101,116,105,116,101,109,95,95, + 182,4,0,0,115,4,0,0,0,14,1,255,128,122,26,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 115,101,116,105,116,101,109,95,95,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,114,44,1,0,0,114,121,0,0,0,41,2,114,4, + 0,0,0,114,43,1,0,0,114,8,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,7,95,95, + 108,101,110,95,95,185,4,0,0,114,47,1,0,0,122,22, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, + 12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,0, + 41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,40,123,33,114,125,41,41,2,114,77,0,0,0, + 114,35,1,0,0,114,8,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,8,95,95,114,101,112, + 114,95,95,188,4,0,0,114,47,1,0,0,122,23,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, + 101,112,114,95,95,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,12, + 0,0,0,124,1,124,0,160,0,161,0,118,0,83,0,114, + 121,0,0,0,114,48,1,0,0,169,2,114,130,0,0,0, + 218,4,105,116,101,109,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,12,95,95,99,111,110,116,97,105,110, + 115,95,95,191,4,0,0,114,47,1,0,0,122,27,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, + 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,16,0,0,0,124,0,106,0,160,1,124,1,161, + 1,1,0,100,0,83,0,114,121,0,0,0,41,2,114,35, + 1,0,0,114,197,0,0,0,114,55,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,197,0,0, + 0,194,4,0,0,243,4,0,0,0,16,1,255,128,122,21, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,97, + 112,112,101,110,100,78,41,15,114,137,0,0,0,114,136,0, + 0,0,114,138,0,0,0,114,139,0,0,0,114,223,0,0, + 0,114,41,1,0,0,114,36,1,0,0,114,43,1,0,0, + 114,46,1,0,0,114,50,1,0,0,114,51,1,0,0,114, + 52,1,0,0,114,54,1,0,0,114,57,1,0,0,114,197, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,33,1,0,0,136,4,0,0, + 115,28,0,0,0,8,0,4,1,8,6,8,6,8,10,8, + 4,8,13,8,3,8,3,8,3,8,3,8,3,12,3,255, + 128,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 92,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7, - 100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,9, - 100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,11, - 101,12,100,18,100,19,132,0,131,1,90,13,100,20,83,0, - 41,21,114,17,1,0,0,122,93,76,111,97,100,101,114,32, - 102,111,114,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,115,46,10,10,32,32,32,32,84,104,101,32, - 99,111,110,115,116,114,117,99,116,111,114,32,105,115,32,100, - 101,115,105,103,110,101,100,32,116,111,32,119,111,114,107,32, - 119,105,116,104,32,70,105,108,101,70,105,110,100,101,114,46, - 10,10,32,32,32,32,99,3,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, - 100,0,83,0,114,121,0,0,0,114,170,0,0,0,41,3, - 114,130,0,0,0,114,128,0,0,0,114,58,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,223, - 0,0,0,90,4,0,0,115,6,0,0,0,6,1,10,1, - 255,128,122,28,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,114,255,0,0,0,114,121, - 0,0,0,114,0,1,0,0,114,2,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,3,1,0, - 0,94,4,0,0,114,4,1,0,0,122,26,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, - 5,1,0,0,114,121,0,0,0,114,6,1,0,0,114,8, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,9,1,0,0,98,4,0,0,114,10,1,0,0, - 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5, - 0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1, - 116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1, - 124,1,106,5,124,0,106,6,161,3,1,0,124,2,83,0, - 41,3,122,38,67,114,101,97,116,101,32,97,110,32,117,110, - 105,116,105,97,108,105,122,101,100,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,122,38,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,32,123,33,114, - 125,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33, - 114,125,78,41,7,114,146,0,0,0,114,229,0,0,0,114, - 174,0,0,0,90,14,99,114,101,97,116,101,95,100,121,110, - 97,109,105,99,114,160,0,0,0,114,128,0,0,0,114,58, - 0,0,0,41,3,114,130,0,0,0,114,198,0,0,0,114, - 231,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,226,0,0,0,101,4,0,0,115,16,0,0, - 0,4,2,6,1,4,255,6,2,8,1,4,255,4,2,255, - 128,122,33,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,5,0,0,0,67,0,0,0,115,36,0, - 0,0,116,0,160,1,116,2,106,3,124,1,161,2,1,0, - 116,0,160,4,100,1,124,0,106,5,124,0,106,6,161,3, - 1,0,100,2,83,0,41,3,122,30,73,110,105,116,105,97, - 108,105,122,101,32,97,110,32,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,122,40,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, - 101,120,101,99,117,116,101,100,32,102,114,111,109,32,123,33, - 114,125,78,41,7,114,146,0,0,0,114,229,0,0,0,114, - 174,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, - 105,99,114,160,0,0,0,114,128,0,0,0,114,58,0,0, - 0,169,2,114,130,0,0,0,114,231,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,232,0,0, - 0,109,4,0,0,115,10,0,0,0,14,2,6,1,8,1, - 8,255,255,128,122,31,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,36, - 0,0,0,116,0,124,0,106,1,131,1,100,1,25,0,137, - 0,116,2,135,0,102,1,100,2,100,3,132,8,116,3,68, - 0,131,1,131,1,83,0,41,5,122,49,82,101,116,117,114, - 110,32,84,114,117,101,32,105,102,32,116,104,101,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,105, - 115,32,97,32,112,97,99,107,97,103,101,46,114,3,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,51,0,0,0,115,26,0,0,0,124, - 0,93,18,125,1,136,0,100,0,124,1,23,0,107,2,86, - 0,1,0,113,2,100,1,83,0,41,2,114,223,0,0,0, - 78,114,7,0,0,0,169,2,114,5,0,0,0,218,6,115, - 117,102,102,105,120,169,1,90,9,102,105,108,101,95,110,97, - 109,101,114,7,0,0,0,114,8,0,0,0,114,9,0,0, - 0,118,4,0,0,115,8,0,0,0,4,0,2,1,20,255, - 255,128,122,49,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,78,41,4,114,61,0,0,0,114,58,0, - 0,0,218,3,97,110,121,114,219,0,0,0,114,234,0,0, - 0,114,7,0,0,0,114,31,1,0,0,114,8,0,0,0, - 114,193,0,0,0,115,4,0,0,115,10,0,0,0,14,2, - 12,1,2,1,8,255,255,128,122,30,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, + 88,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,101,4,100,3,100,4,132,0,131,1,90,5, + 100,5,100,6,132,0,90,6,100,7,100,8,132,0,90,7, + 100,9,100,10,132,0,90,8,100,11,100,12,132,0,90,9, + 100,13,100,14,132,0,90,10,100,15,100,16,132,0,90,11, + 100,17,100,18,132,0,90,12,100,19,83,0,41,20,218,16, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,67,0,0,0,115,18,0,0,0,116,0, + 124,1,124,2,124,3,131,3,124,0,95,1,100,0,83,0, + 114,121,0,0,0,41,2,114,33,1,0,0,114,35,1,0, + 0,114,39,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,223,0,0,0,200,4,0,0,115,4, + 0,0,0,18,1,255,128,122,25,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,67,0,0,0,115,24,0,0,0, + 116,0,160,1,100,1,116,2,161,2,1,0,100,2,160,3, + 124,0,106,4,161,1,83,0,41,4,122,115,82,101,116,117, + 114,110,32,114,101,112,114,32,102,111,114,32,116,104,101,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,101,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,84,104,101,32, + 105,109,112,111,114,116,32,109,97,99,104,105,110,101,114,121, + 32,100,111,101,115,32,116,104,101,32,106,111,98,32,105,116, + 115,101,108,102,46,10,10,32,32,32,32,32,32,32,32,122, + 82,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,109,111,100,117,108,101,95,114,101,112,114,40,41,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, + 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, + 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, + 46,49,50,122,25,60,109,111,100,117,108,101,32,123,33,114, + 125,32,40,110,97,109,101,115,112,97,99,101,41,62,78,41, + 5,114,88,0,0,0,114,89,0,0,0,114,90,0,0,0, + 114,77,0,0,0,114,137,0,0,0,41,1,114,231,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,11,109,111,100,117,108,101,95,114,101,112,114,203,4,0, + 0,115,10,0,0,0,6,7,2,1,4,255,12,2,255,128, + 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,109,111,100,117,108,101,95,114,101,112,114,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,114,24,0,0,0,41,2,78,84, + 114,7,0,0,0,114,234,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,193,0,0,0,214,4, + 0,0,243,4,0,0,0,4,1,255,128,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115, 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,114,24,0,0,0,41,2,122,63,82,101,116,117,114,110, - 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, - 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, - 101,32,111,98,106,101,99,116,46,78,114,7,0,0,0,114, - 234,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,228,0,0,0,121,4,0,0,114,25,0,0, - 0,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,24,0,0,0,41,2,122, - 53,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 115,32,104,97,118,101,32,110,111,32,115,111,117,114,99,101, - 32,99,111,100,101,46,78,114,7,0,0,0,114,234,0,0, + 0,114,24,0,0,0,41,2,78,114,10,0,0,0,114,7, + 0,0,0,114,234,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,244,0,0,0,217,4,0,0, + 114,61,1,0,0,122,27,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,6,0,0,0,67,0,0,0,115,16,0,0,0, + 116,0,100,1,100,2,100,3,100,4,100,5,141,4,83,0, + 41,6,78,114,10,0,0,0,122,8,60,115,116,114,105,110, + 103,62,114,230,0,0,0,84,41,1,114,246,0,0,0,41, + 1,114,247,0,0,0,114,234,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,228,0,0,0,220, + 4,0,0,114,58,1,0,0,122,25,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,24,0,0, + 0,114,224,0,0,0,114,7,0,0,0,114,225,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 226,0,0,0,223,4,0,0,114,227,0,0,0,122,30,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,0,83,0,114, + 121,0,0,0,114,7,0,0,0,114,28,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,232,0, + 0,0,226,4,0,0,114,61,1,0,0,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,101,120, + 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,26,0,0,0,116,0,160,1,100,1,124,0,106, + 2,161,2,1,0,116,0,160,3,124,0,124,1,161,2,83, + 0,41,3,122,98,76,111,97,100,32,97,32,110,97,109,101, + 115,112,97,99,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,122,38,110,97,109,101,115,112,97, + 99,101,32,109,111,100,117,108,101,32,108,111,97,100,101,100, + 32,119,105,116,104,32,112,97,116,104,32,123,33,114,125,78, + 41,4,114,146,0,0,0,114,160,0,0,0,114,35,1,0, + 0,114,233,0,0,0,114,234,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,235,0,0,0,229, + 4,0,0,115,10,0,0,0,6,7,4,1,4,255,12,3, + 255,128,122,28,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,67,0,0,0,115,22,0,0,0,100,1, + 100,2,108,0,109,1,125,2,1,0,124,2,124,0,106,2, + 131,1,83,0,41,3,78,114,0,0,0,0,41,1,218,15, + 78,97,109,101,115,112,97,99,101,82,101,97,100,101,114,41, + 3,114,19,1,0,0,114,62,1,0,0,114,35,1,0,0, + 41,3,114,130,0,0,0,114,231,0,0,0,114,62,1,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,244,0,0,0,125,4,0,0,114,25,0,0,0,122,30, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,114,13,1,0,0,114,14,1,0, - 0,114,62,0,0,0,114,234,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,190,0,0,0,129, - 4,0,0,114,15,1,0,0,122,32,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,78,41,14,114,137,0, - 0,0,114,136,0,0,0,114,138,0,0,0,114,139,0,0, - 0,114,223,0,0,0,114,3,1,0,0,114,9,1,0,0, - 114,226,0,0,0,114,232,0,0,0,114,193,0,0,0,114, - 228,0,0,0,114,244,0,0,0,114,147,0,0,0,114,190, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,17,1,0,0,82,4,0,0, - 115,26,0,0,0,8,0,4,2,8,6,8,4,8,4,8, - 3,8,8,8,6,8,6,8,4,2,4,14,1,255,128,114, - 17,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,64,0,0,0,115,104,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, - 100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,10, - 100,11,132,0,90,8,100,12,100,13,132,0,90,9,100,14, - 100,15,132,0,90,10,100,16,100,17,132,0,90,11,100,18, - 100,19,132,0,90,12,100,20,100,21,132,0,90,13,100,22, - 100,23,132,0,90,14,100,24,83,0,41,25,218,14,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,97,38,1,0, - 0,82,101,112,114,101,115,101,110,116,115,32,97,32,110,97, - 109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,39, - 115,32,112,97,116,104,46,32,32,73,116,32,117,115,101,115, - 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, - 10,32,32,32,32,116,111,32,102,105,110,100,32,105,116,115, - 32,112,97,114,101,110,116,32,109,111,100,117,108,101,44,32, - 97,110,100,32,102,114,111,109,32,116,104,101,114,101,32,105, - 116,32,108,111,111,107,115,32,117,112,32,116,104,101,32,112, - 97,114,101,110,116,39,115,10,32,32,32,32,95,95,112,97, - 116,104,95,95,46,32,32,87,104,101,110,32,116,104,105,115, - 32,99,104,97,110,103,101,115,44,32,116,104,101,32,109,111, - 100,117,108,101,39,115,32,111,119,110,32,112,97,116,104,32, - 105,115,32,114,101,99,111,109,112,117,116,101,100,44,10,32, - 32,32,32,117,115,105,110,103,32,112,97,116,104,95,102,105, - 110,100,101,114,46,32,32,70,111,114,32,116,111,112,45,108, - 101,118,101,108,32,109,111,100,117,108,101,115,44,32,116,104, - 101,32,112,97,114,101,110,116,32,109,111,100,117,108,101,39, - 115,32,112,97,116,104,10,32,32,32,32,105,115,32,115,121, - 115,46,112,97,116,104,46,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, - 115,36,0,0,0,124,1,124,0,95,0,124,2,124,0,95, - 1,116,2,124,0,160,3,161,0,131,1,124,0,95,4,124, - 3,124,0,95,5,100,0,83,0,114,121,0,0,0,41,6, - 218,5,95,110,97,109,101,218,5,95,112,97,116,104,114,123, - 0,0,0,218,16,95,103,101,116,95,112,97,114,101,110,116, - 95,112,97,116,104,218,17,95,108,97,115,116,95,112,97,114, - 101,110,116,95,112,97,116,104,218,12,95,112,97,116,104,95, - 102,105,110,100,101,114,169,4,114,130,0,0,0,114,128,0, - 0,0,114,58,0,0,0,90,11,112,97,116,104,95,102,105, + 114,20,1,0,0,241,4,0,0,115,6,0,0,0,12,1, + 10,1,255,128,122,36,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,117, + 114,99,101,95,114,101,97,100,101,114,78,41,13,114,137,0, + 0,0,114,136,0,0,0,114,138,0,0,0,114,223,0,0, + 0,114,220,0,0,0,114,60,1,0,0,114,193,0,0,0, + 114,244,0,0,0,114,228,0,0,0,114,226,0,0,0,114, + 232,0,0,0,114,235,0,0,0,114,20,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,59,1,0,0,199,4,0,0,115,24,0,0,0, + 8,0,8,1,2,3,10,1,8,10,8,3,8,3,8,3, + 8,3,8,3,12,12,255,128,114,59,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,64,0,0,0,115,118,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,101,4,100,2,100,3,132,0,131, + 1,90,5,101,4,100,4,100,5,132,0,131,1,90,6,101, + 7,100,6,100,7,132,0,131,1,90,8,101,7,100,8,100, + 9,132,0,131,1,90,9,101,7,100,19,100,11,100,12,132, + 1,131,1,90,10,101,7,100,20,100,13,100,14,132,1,131, + 1,90,11,101,7,100,21,100,15,100,16,132,1,131,1,90, + 12,101,4,100,17,100,18,132,0,131,1,90,13,100,10,83, + 0,41,22,218,10,80,97,116,104,70,105,110,100,101,114,122, + 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, + 114,32,102,111,114,32,115,121,115,46,112,97,116,104,32,97, + 110,100,32,112,97,99,107,97,103,101,32,95,95,112,97,116, + 104,95,95,32,97,116,116,114,105,98,117,116,101,115,46,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,116, + 1,106,2,160,3,161,0,131,1,68,0,93,22,92,2,125, + 0,125,1,124,1,100,1,117,0,114,20,116,1,106,2,124, + 0,61,0,113,7,116,4,124,1,100,2,131,2,114,29,124, + 1,160,5,161,0,1,0,113,7,100,1,83,0,41,3,122, + 125,67,97,108,108,32,116,104,101,32,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,40,41,32,109,101, + 116,104,111,100,32,111,110,32,97,108,108,32,112,97,116,104, + 32,101,110,116,114,121,32,102,105,110,100,101,114,115,10,32, + 32,32,32,32,32,32,32,115,116,111,114,101,100,32,105,110, + 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,115,32,40,119,104,101,114,101, + 32,105,109,112,108,101,109,101,110,116,101,100,41,46,78,218, + 17,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,41,6,218,4,108,105,115,116,114,16,0,0,0,218, + 19,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,218,5,105,116,101,109,115,114,140,0,0,0, + 114,64,1,0,0,41,2,114,128,0,0,0,218,6,102,105, 110,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,223,0,0,0,142,4,0,0,115,10,0,0, - 0,6,1,6,1,14,1,10,1,255,128,122,23,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,38,0, - 0,0,124,0,106,0,160,1,100,1,161,1,92,3,125,1, - 125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,0, - 124,1,100,4,102,2,83,0,41,6,122,62,82,101,116,117, - 114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,40, - 112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,97, - 109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45, - 97,116,116,114,45,110,97,109,101,41,114,86,0,0,0,114, - 10,0,0,0,41,2,114,16,0,0,0,114,58,0,0,0, - 90,8,95,95,112,97,116,104,95,95,78,41,2,114,34,1, - 0,0,114,55,0,0,0,41,4,114,130,0,0,0,114,26, - 1,0,0,218,3,100,111,116,90,2,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,23,95,102,105, - 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, - 97,109,101,115,148,4,0,0,115,10,0,0,0,18,2,8, - 1,4,2,8,3,255,128,122,38,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,102,105,110,100,95,112,97, - 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,99, - 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,28,0,0,0,124,0,160, - 0,161,0,92,2,125,1,125,2,116,1,116,2,106,3,124, - 1,25,0,124,2,131,2,83,0,114,121,0,0,0,41,4, - 114,41,1,0,0,114,142,0,0,0,114,16,0,0,0,218, - 7,109,111,100,117,108,101,115,41,3,114,130,0,0,0,90, - 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, - 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, - 97,109,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,36,1,0,0,158,4,0,0,115,6,0,0,0, - 12,1,16,1,255,128,122,31,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,103,101,116,95,112,97,114,101, - 110,116,95,112,97,116,104,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, - 115,80,0,0,0,116,0,124,0,160,1,161,0,131,1,125, - 1,124,1,124,0,106,2,107,3,114,74,124,0,160,3,124, - 0,106,4,124,1,161,2,125,2,124,2,100,0,117,1,114, - 68,124,2,106,5,100,0,117,0,114,68,124,2,106,6,114, - 68,124,2,106,6,124,0,95,7,124,1,124,0,95,2,124, - 0,106,7,83,0,114,121,0,0,0,41,8,114,123,0,0, - 0,114,36,1,0,0,114,37,1,0,0,114,38,1,0,0, - 114,34,1,0,0,114,151,0,0,0,114,189,0,0,0,114, - 35,1,0,0,41,3,114,130,0,0,0,90,11,112,97,114, - 101,110,116,95,112,97,116,104,114,198,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,12,95,114, - 101,99,97,108,99,117,108,97,116,101,162,4,0,0,115,18, - 0,0,0,12,2,10,1,14,1,18,3,6,1,8,1,6, - 1,6,1,255,128,122,27,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,114,101,99,97,108,99,117,108,97, - 116,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,243,12,0,0,0, - 116,0,124,0,160,1,161,0,131,1,83,0,114,121,0,0, - 0,41,2,218,4,105,116,101,114,114,43,1,0,0,114,8, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,8,95,95,105,116,101,114,95,95,175,4,0,0, - 243,4,0,0,0,12,1,255,128,122,23,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,105,116,101,114, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,12,0,0,0, - 124,0,160,0,161,0,124,1,25,0,83,0,114,121,0,0, - 0,169,1,114,43,1,0,0,41,2,114,130,0,0,0,218, - 5,105,110,100,101,120,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,11,95,95,103,101,116,105,116,101,109, - 95,95,178,4,0,0,114,47,1,0,0,122,26,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,103,101, - 116,105,116,101,109,95,95,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, - 115,14,0,0,0,124,2,124,0,106,0,124,1,60,0,100, - 0,83,0,114,121,0,0,0,41,1,114,35,1,0,0,41, - 3,114,130,0,0,0,114,49,1,0,0,114,58,0,0,0, + 0,0,0,114,64,1,0,0,252,4,0,0,115,16,0,0, + 0,22,4,8,1,10,1,10,1,8,1,2,128,4,252,255, + 128,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, + 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 9,0,0,0,67,0,0,0,115,76,0,0,0,116,0,106, + 1,100,1,117,1,114,14,116,0,106,1,115,14,116,2,160, + 3,100,2,116,4,161,2,1,0,116,0,106,1,68,0,93, + 17,125,1,122,7,124,1,124,0,131,1,87,0,2,0,1, + 0,83,0,4,0,116,5,121,37,1,0,1,0,1,0,89, + 0,113,17,100,1,83,0,119,0,41,3,122,46,83,101,97, + 114,99,104,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,102,111,114,32,97,32,102,105,110,100,101,114,32, + 102,111,114,32,39,112,97,116,104,39,46,78,122,23,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, + 101,109,112,116,121,41,6,114,16,0,0,0,218,10,112,97, + 116,104,95,104,111,111,107,115,114,88,0,0,0,114,89,0, + 0,0,114,149,0,0,0,114,129,0,0,0,41,2,114,58, + 0,0,0,90,4,104,111,111,107,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,11,95,112,97,116,104,95, + 104,111,111,107,115,6,5,0,0,115,20,0,0,0,16,3, + 12,1,10,1,2,1,14,1,12,1,4,1,4,2,2,253, + 255,128,122,22,80,97,116,104,70,105,110,100,101,114,46,95, + 112,97,116,104,95,104,111,111,107,115,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, + 0,0,0,115,100,0,0,0,124,1,100,1,107,2,114,20, + 122,6,116,0,160,1,161,0,125,1,87,0,110,9,4,0, + 116,2,121,49,1,0,1,0,1,0,89,0,100,2,83,0, + 122,8,116,3,106,4,124,1,25,0,125,2,87,0,124,2, + 83,0,4,0,116,5,121,48,1,0,1,0,1,0,124,0, + 160,6,124,1,161,1,125,2,124,2,116,3,106,4,124,1, + 60,0,89,0,124,2,83,0,119,0,119,0,41,3,122,210, + 71,101,116,32,116,104,101,32,102,105,110,100,101,114,32,102, + 111,114,32,116,104,101,32,112,97,116,104,32,101,110,116,114, + 121,32,102,114,111,109,32,115,121,115,46,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,10, + 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, + 112,97,116,104,32,101,110,116,114,121,32,105,115,32,110,111, + 116,32,105,110,32,116,104,101,32,99,97,99,104,101,44,32, + 102,105,110,100,32,116,104,101,32,97,112,112,114,111,112,114, + 105,97,116,101,32,102,105,110,100,101,114,10,32,32,32,32, + 32,32,32,32,97,110,100,32,99,97,99,104,101,32,105,116, + 46,32,73,102,32,110,111,32,102,105,110,100,101,114,32,105, + 115,32,97,118,97,105,108,97,98,108,101,44,32,115,116,111, + 114,101,32,78,111,110,101,46,10,10,32,32,32,32,32,32, + 32,32,114,10,0,0,0,78,41,7,114,19,0,0,0,114, + 70,0,0,0,218,17,70,105,108,101,78,111,116,70,111,117, + 110,100,69,114,114,111,114,114,16,0,0,0,114,66,1,0, + 0,218,8,75,101,121,69,114,114,111,114,114,70,1,0,0, + 41,3,114,209,0,0,0,114,58,0,0,0,114,68,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,20,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,19,5,0,0,115,30,0,0,0,8, + 8,2,1,12,1,12,1,6,3,2,1,12,1,4,4,12, + 253,10,1,12,1,4,1,2,253,2,250,255,128,122,31,80, + 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, + 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4, + 0,0,0,67,0,0,0,115,110,0,0,0,116,0,124,2, + 100,1,131,2,114,13,124,2,160,1,124,1,161,1,92,2, + 125,3,125,4,110,21,116,2,160,3,124,2,161,1,155,0, + 100,2,157,2,125,5,116,4,160,5,124,5,116,6,161,2, + 1,0,124,2,160,7,124,1,161,1,125,3,103,0,125,4, + 124,3,100,0,117,1,114,44,116,2,160,8,124,1,124,3, + 161,2,83,0,116,2,160,9,124,1,100,0,161,2,125,6, + 124,4,124,6,95,10,124,6,83,0,41,3,78,114,148,0, + 0,0,122,53,46,102,105,110,100,95,115,112,101,99,40,41, + 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, + 105,110,103,32,98,97,99,107,32,116,111,32,102,105,110,100, + 95,109,111,100,117,108,101,40,41,41,11,114,140,0,0,0, + 114,148,0,0,0,114,146,0,0,0,90,12,95,111,98,106, + 101,99,116,95,110,97,109,101,114,88,0,0,0,114,89,0, + 0,0,114,149,0,0,0,114,217,0,0,0,114,212,0,0, + 0,114,194,0,0,0,114,189,0,0,0,41,7,114,209,0, + 0,0,114,150,0,0,0,114,68,1,0,0,114,151,0,0, + 0,114,152,0,0,0,114,153,0,0,0,114,198,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,95,95,115,101,116,105,116,101,109,95,95,181,4,0,0, - 115,4,0,0,0,14,1,255,128,122,26,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,115,101,116,105, - 116,101,109,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,44, - 1,0,0,114,121,0,0,0,41,2,114,4,0,0,0,114, - 43,1,0,0,114,8,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,7,95,95,108,101,110,95, - 95,184,4,0,0,114,47,1,0,0,122,22,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,243,12,0,0,0, - 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, - 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, - 123,33,114,125,41,41,2,114,77,0,0,0,114,35,1,0, - 0,114,8,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,8,95,95,114,101,112,114,95,95,187, - 4,0,0,114,47,1,0,0,122,23,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,95,114,101,112,114,95, - 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,124, - 1,124,0,160,0,161,0,118,0,83,0,114,121,0,0,0, - 114,48,1,0,0,169,2,114,130,0,0,0,218,4,105,116, - 101,109,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,12,95,95,99,111,110,116,97,105,110,115,95,95,190, - 4,0,0,114,47,1,0,0,122,27,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,95,99,111,110,116,97, - 105,110,115,95,95,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,16, - 0,0,0,124,0,106,0,160,1,124,1,161,1,1,0,100, - 0,83,0,114,121,0,0,0,41,2,114,35,1,0,0,114, - 197,0,0,0,114,55,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,197,0,0,0,193,4,0, - 0,243,4,0,0,0,16,1,255,128,122,21,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,97,112,112,101,110, - 100,78,41,15,114,137,0,0,0,114,136,0,0,0,114,138, - 0,0,0,114,139,0,0,0,114,223,0,0,0,114,41,1, - 0,0,114,36,1,0,0,114,43,1,0,0,114,46,1,0, - 0,114,50,1,0,0,114,51,1,0,0,114,52,1,0,0, - 114,54,1,0,0,114,57,1,0,0,114,197,0,0,0,114, + 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, + 99,41,5,0,0,115,24,0,0,0,10,4,16,1,16,2, + 12,2,10,1,4,1,8,1,12,1,12,1,6,1,4,1, + 255,128,122,27,80,97,116,104,70,105,110,100,101,114,46,95, + 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,78, + 99,4,0,0,0,0,0,0,0,0,0,0,0,9,0,0, + 0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0, + 125,4,124,2,68,0,93,67,125,5,116,0,124,5,116,1, + 116,2,102,2,131,2,115,14,113,4,124,0,160,3,124,5, + 161,1,125,6,124,6,100,1,117,1,114,71,116,4,124,6, + 100,2,131,2,114,35,124,6,160,5,124,1,124,3,161,2, + 125,7,110,6,124,0,160,6,124,1,124,6,161,2,125,7, + 124,7,100,1,117,0,114,46,113,4,124,7,106,7,100,1, + 117,1,114,55,124,7,2,0,1,0,83,0,124,7,106,8, + 125,8,124,8,100,1,117,0,114,66,116,9,100,3,131,1, + 130,1,124,4,160,10,124,8,161,1,1,0,113,4,116,11, + 160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8, + 124,7,83,0,41,4,122,63,70,105,110,100,32,116,104,101, + 32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115, + 112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104, + 105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103, + 101,32,110,97,109,101,46,78,114,214,0,0,0,122,19,115, + 112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100, + 101,114,41,13,114,172,0,0,0,114,97,0,0,0,218,5, + 98,121,116,101,115,114,73,1,0,0,114,140,0,0,0,114, + 214,0,0,0,114,74,1,0,0,114,151,0,0,0,114,189, + 0,0,0,114,129,0,0,0,114,178,0,0,0,114,146,0, + 0,0,114,194,0,0,0,41,9,114,209,0,0,0,114,150, + 0,0,0,114,58,0,0,0,114,213,0,0,0,218,14,110, + 97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101, + 110,116,114,121,114,68,1,0,0,114,198,0,0,0,114,152, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,9,95,103,101,116,95,115,112,101,99,59,5,0, + 0,115,44,0,0,0,4,5,8,1,14,1,2,1,10,1, + 8,1,10,1,14,1,12,2,8,1,2,1,10,1,8,1, + 6,1,8,1,8,1,10,5,2,128,12,2,6,1,4,1, + 255,128,122,20,80,97,116,104,70,105,110,100,101,114,46,95, + 103,101,116,95,115,112,101,99,99,4,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,5,0,0,0,67,0,0, + 0,115,94,0,0,0,124,2,100,1,117,0,114,7,116,0, + 106,1,125,2,124,0,160,2,124,1,124,2,124,3,161,3, + 125,4,124,4,100,1,117,0,114,20,100,1,83,0,124,4, + 106,3,100,1,117,0,114,45,124,4,106,4,125,5,124,5, + 114,43,100,1,124,4,95,5,116,6,124,1,124,5,124,0, + 106,2,131,3,124,4,95,4,124,4,83,0,100,1,83,0, + 124,4,83,0,41,2,122,141,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,39, + 102,117,108,108,110,97,109,101,39,32,111,110,32,115,121,115, + 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,46, + 10,10,32,32,32,32,32,32,32,32,84,104,101,32,115,101, + 97,114,99,104,32,105,115,32,98,97,115,101,100,32,111,110, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 97,110,100,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,32,32,32, + 32,32,32,32,32,78,41,7,114,16,0,0,0,114,58,0, + 0,0,114,77,1,0,0,114,151,0,0,0,114,189,0,0, + 0,114,192,0,0,0,114,33,1,0,0,41,6,114,209,0, + 0,0,114,150,0,0,0,114,58,0,0,0,114,213,0,0, + 0,114,198,0,0,0,114,76,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,214,0,0,0,91, + 5,0,0,115,28,0,0,0,8,6,6,1,14,1,8,1, + 4,1,10,1,6,1,4,1,6,3,16,1,4,1,4,2, + 4,2,255,128,122,20,80,97,116,104,70,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,30,0,0,0,124,0,160,0,124,1,124,2, + 161,2,125,3,124,3,100,1,117,0,114,12,100,1,83,0, + 124,3,106,1,83,0,41,2,122,170,102,105,110,100,32,116, + 104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115, + 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32, + 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32, + 32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, + 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,78,114,215,0,0,0,114,216,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,217, + 0,0,0,115,5,0,0,115,10,0,0,0,12,8,8,1, + 4,1,6,1,255,128,122,22,80,97,116,104,70,105,110,100, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, + 0,0,0,79,0,0,0,115,28,0,0,0,100,1,100,2, + 108,0,109,1,125,2,1,0,124,2,106,2,124,0,105,0, + 124,1,164,1,142,1,83,0,41,4,97,32,1,0,0,10, + 32,32,32,32,32,32,32,32,70,105,110,100,32,100,105,115, + 116,114,105,98,117,116,105,111,110,115,46,10,10,32,32,32, + 32,32,32,32,32,82,101,116,117,114,110,32,97,110,32,105, + 116,101,114,97,98,108,101,32,111,102,32,97,108,108,32,68, + 105,115,116,114,105,98,117,116,105,111,110,32,105,110,115,116, + 97,110,99,101,115,32,99,97,112,97,98,108,101,32,111,102, + 10,32,32,32,32,32,32,32,32,108,111,97,100,105,110,103, + 32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,111, + 114,32,112,97,99,107,97,103,101,115,32,109,97,116,99,104, + 105,110,103,32,96,96,99,111,110,116,101,120,116,46,110,97, + 109,101,96,96,10,32,32,32,32,32,32,32,32,40,111,114, + 32,97,108,108,32,110,97,109,101,115,32,105,102,32,96,96, + 78,111,110,101,96,96,32,105,110,100,105,99,97,116,101,100, + 41,32,97,108,111,110,103,32,116,104,101,32,112,97,116,104, + 115,32,105,110,32,116,104,101,32,108,105,115,116,10,32,32, + 32,32,32,32,32,32,111,102,32,100,105,114,101,99,116,111, + 114,105,101,115,32,96,96,99,111,110,116,101,120,116,46,112, + 97,116,104,96,96,46,10,32,32,32,32,32,32,32,32,114, + 0,0,0,0,41,1,218,18,77,101,116,97,100,97,116,97, + 80,97,116,104,70,105,110,100,101,114,78,41,3,90,18,105, + 109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116, + 97,114,78,1,0,0,218,18,102,105,110,100,95,100,105,115, + 116,114,105,98,117,116,105,111,110,115,41,3,114,131,0,0, + 0,114,132,0,0,0,114,78,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,79,1,0,0,128, + 5,0,0,115,6,0,0,0,12,10,16,1,255,128,122,29, + 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, + 100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78, + 41,2,78,78,41,1,78,41,14,114,137,0,0,0,114,136, + 0,0,0,114,138,0,0,0,114,139,0,0,0,114,220,0, + 0,0,114,64,1,0,0,114,70,1,0,0,114,221,0,0, + 0,114,73,1,0,0,114,74,1,0,0,114,77,1,0,0, + 114,214,0,0,0,114,217,0,0,0,114,79,1,0,0,114, 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,33,1,0,0,135,4,0,0,115,28,0,0, - 0,8,0,4,1,8,6,8,6,8,10,8,4,8,13,8, - 3,8,3,8,3,8,3,8,3,12,3,255,128,114,33,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,64,0,0,0,115,88,0,0,0, - 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, - 101,4,100,3,100,4,132,0,131,1,90,5,100,5,100,6, - 132,0,90,6,100,7,100,8,132,0,90,7,100,9,100,10, - 132,0,90,8,100,11,100,12,132,0,90,9,100,13,100,14, - 132,0,90,10,100,15,100,16,132,0,90,11,100,17,100,18, - 132,0,90,12,100,19,83,0,41,20,218,16,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,99,4,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,67,0,0,0,115,18,0,0,0,116,0,124,1,124,2, - 124,3,131,3,124,0,95,1,100,0,83,0,114,121,0,0, - 0,41,2,114,33,1,0,0,114,35,1,0,0,114,39,1, + 0,0,0,114,63,1,0,0,248,4,0,0,115,38,0,0, + 0,8,0,4,2,2,2,10,1,2,9,10,1,2,12,10, + 1,2,21,10,1,2,17,12,1,2,31,12,1,2,23,12, + 1,2,12,14,1,255,128,114,63,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,64,0,0,0,115,90,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, + 100,5,132,0,90,5,101,6,90,7,100,6,100,7,132,0, + 90,8,100,8,100,9,132,0,90,9,100,19,100,11,100,12, + 132,1,90,10,100,13,100,14,132,0,90,11,101,12,100,15, + 100,16,132,0,131,1,90,13,100,17,100,18,132,0,90,14, + 100,10,83,0,41,20,218,10,70,105,108,101,70,105,110,100, + 101,114,122,172,70,105,108,101,45,98,97,115,101,100,32,102, + 105,110,100,101,114,46,10,10,32,32,32,32,73,110,116,101, + 114,97,99,116,105,111,110,115,32,119,105,116,104,32,116,104, + 101,32,102,105,108,101,32,115,121,115,116,101,109,32,97,114, + 101,32,99,97,99,104,101,100,32,102,111,114,32,112,101,114, + 102,111,114,109,97,110,99,101,44,32,98,101,105,110,103,10, + 32,32,32,32,114,101,102,114,101,115,104,101,100,32,119,104, + 101,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121, + 32,116,104,101,32,102,105,110,100,101,114,32,105,115,32,104, + 97,110,100,108,105,110,103,32,104,97,115,32,98,101,101,110, + 32,109,111,100,105,102,105,101,100,46,10,10,32,32,32,32, + 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,6,0,0,0,7,0,0,0,115,84,0,0,0,103,0, + 125,3,124,2,68,0,93,16,92,2,137,0,125,4,124,3, + 160,0,135,0,102,1,100,1,100,2,132,8,124,4,68,0, + 131,1,161,1,1,0,113,4,124,3,124,0,95,1,124,1, + 112,27,100,3,124,0,95,2,100,4,124,0,95,3,116,4, + 131,0,124,0,95,5,116,4,131,0,124,0,95,6,100,5, + 83,0,41,6,122,154,73,110,105,116,105,97,108,105,122,101, + 32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116, + 111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32, + 97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101, + 114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116, + 117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103, + 32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32, + 116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101, + 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32, + 32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,51,0,0,0,115,22,0,0,0,124,0, + 93,7,125,1,124,1,136,0,102,2,86,0,1,0,113,1, + 100,0,83,0,114,121,0,0,0,114,7,0,0,0,114,29, + 1,0,0,169,1,114,151,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,9,0,0,0,157,5,0,0,114,14,0, + 0,0,122,38,70,105,108,101,70,105,110,100,101,114,46,95, + 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,114,86,0,0,0,114, + 116,0,0,0,78,41,7,114,178,0,0,0,218,8,95,108, + 111,97,100,101,114,115,114,58,0,0,0,218,11,95,112,97, + 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, + 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, + 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, + 5,114,130,0,0,0,114,58,0,0,0,218,14,108,111,97, + 100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97, + 100,101,114,115,114,200,0,0,0,114,7,0,0,0,114,81, + 1,0,0,114,8,0,0,0,114,223,0,0,0,151,5,0, + 0,115,18,0,0,0,4,4,12,1,26,1,6,1,10,2, + 6,1,8,1,12,1,255,128,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0, + 0,0,67,0,0,0,115,10,0,0,0,100,1,124,0,95, + 0,100,2,83,0,41,3,122,31,73,110,118,97,108,105,100, + 97,116,101,32,116,104,101,32,100,105,114,101,99,116,111,114, + 121,32,109,116,105,109,101,46,114,116,0,0,0,78,41,1, + 114,83,1,0,0,114,8,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,64,1,0,0,165,5, + 0,0,114,69,0,0,0,122,28,70,105,108,101,70,105,110, + 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, + 97,99,104,101,115,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,42, + 0,0,0,124,0,160,0,124,1,161,1,125,2,124,2,100, + 1,117,0,114,13,100,1,103,0,102,2,83,0,124,2,106, + 1,124,2,106,2,112,19,103,0,102,2,83,0,41,2,122, + 197,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, + 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, + 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, + 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, + 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, + 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, + 45,111,102,45,112,111,114,116,105,111,110,115,41,46,10,10, + 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, + 32,32,32,32,32,32,78,41,3,114,214,0,0,0,114,151, + 0,0,0,114,189,0,0,0,41,3,114,130,0,0,0,114, + 150,0,0,0,114,198,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,148,0,0,0,171,5,0, + 0,115,10,0,0,0,10,7,8,1,8,1,16,1,255,128, + 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, + 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, + 0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,0, + 0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,6, + 116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,0, + 41,2,78,114,188,0,0,0,41,1,114,201,0,0,0,41, + 7,114,130,0,0,0,114,199,0,0,0,114,150,0,0,0, + 114,58,0,0,0,90,4,115,109,115,108,114,213,0,0,0, + 114,151,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,77,1,0,0,183,5,0,0,115,10,0, + 0,0,10,1,8,1,2,1,6,255,255,128,122,20,70,105, + 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, + 101,99,78,99,3,0,0,0,0,0,0,0,0,0,0,0, + 14,0,0,0,8,0,0,0,67,0,0,0,115,92,1,0, + 0,100,1,125,3,124,1,160,0,100,2,161,1,100,3,25, + 0,125,4,122,12,116,1,124,0,106,2,112,17,116,3,160, + 4,161,0,131,1,106,5,125,5,87,0,110,9,4,0,116, + 6,121,173,1,0,1,0,1,0,100,4,125,5,89,0,124, + 5,124,0,106,7,107,3,114,43,124,0,160,8,161,0,1, + 0,124,5,124,0,95,7,116,9,131,0,114,54,124,0,106, + 10,125,6,124,4,160,11,161,0,125,7,110,5,124,0,106, + 12,125,6,124,4,125,7,124,7,124,6,118,0,114,106,116, + 13,124,0,106,2,124,4,131,2,125,8,124,0,106,14,68, + 0,93,29,92,2,125,9,125,10,100,5,124,9,23,0,125, + 11,116,13,124,8,124,11,131,2,125,12,116,15,124,12,131, + 1,114,101,124,0,160,16,124,10,124,1,124,12,124,8,103, + 1,124,2,161,5,2,0,1,0,83,0,113,72,116,17,124, + 8,131,1,125,3,124,0,106,14,68,0,93,41,92,2,125, + 9,125,10,116,13,124,0,106,2,124,4,124,9,23,0,131, + 2,125,12,116,18,106,19,100,6,124,12,100,3,100,7,141, + 3,1,0,124,7,124,9,23,0,124,6,118,0,114,150,116, + 15,124,12,131,1,114,150,124,0,160,16,124,10,124,1,124, + 12,100,8,124,2,161,5,2,0,1,0,83,0,113,109,124, + 3,114,171,116,18,160,19,100,9,124,8,161,2,1,0,116, + 18,160,20,124,1,100,8,161,2,125,13,124,8,103,1,124, + 13,95,21,124,13,83,0,100,8,83,0,119,0,41,10,122, + 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, + 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116, + 104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99, + 44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116, + 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, + 70,114,86,0,0,0,114,45,0,0,0,114,116,0,0,0, + 114,223,0,0,0,122,9,116,114,121,105,110,103,32,123,125, + 41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,25, + 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, + 99,101,32,102,111,114,32,123,125,41,22,114,55,0,0,0, + 114,63,0,0,0,114,58,0,0,0,114,19,0,0,0,114, + 70,0,0,0,114,22,1,0,0,114,64,0,0,0,114,83, + 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, + 114,22,0,0,0,114,86,1,0,0,114,117,0,0,0,114, + 85,1,0,0,114,54,0,0,0,114,82,1,0,0,114,68, + 0,0,0,114,77,1,0,0,114,71,0,0,0,114,146,0, + 0,0,114,160,0,0,0,114,194,0,0,0,114,189,0,0, + 0,41,14,114,130,0,0,0,114,150,0,0,0,114,213,0, + 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, + 90,11,116,97,105,108,95,109,111,100,117,108,101,114,180,0, + 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, + 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, + 116,104,114,30,1,0,0,114,199,0,0,0,90,13,105,110, + 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, + 108,95,112,97,116,104,114,198,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,214,0,0,0,188, + 5,0,0,115,80,0,0,0,4,5,14,1,2,1,24,1, + 12,1,6,1,10,1,8,1,6,1,6,2,6,1,10,1, + 6,2,4,1,8,2,12,1,14,1,8,1,10,1,8,1, + 24,1,2,255,8,5,14,2,16,1,16,1,12,1,8,1, + 10,1,4,1,8,255,2,128,4,2,12,1,12,1,8,1, + 4,1,4,1,2,219,255,128,122,20,70,105,108,101,70,105, + 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,1, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,10, + 0,0,0,67,0,0,0,115,190,0,0,0,124,0,106,0, + 125,1,122,11,116,1,160,2,124,1,112,11,116,1,160,3, + 161,0,161,1,125,2,87,0,110,12,4,0,116,4,116,5, + 116,6,102,3,121,94,1,0,1,0,1,0,103,0,125,2, + 89,0,116,7,106,8,160,9,100,1,161,1,115,39,116,10, + 124,2,131,1,124,0,95,11,110,37,116,10,131,0,125,3, + 124,2,68,0,93,28,125,4,124,4,160,12,100,2,161,1, + 92,3,125,5,125,6,125,7,124,6,114,65,100,3,160,13, + 124,5,124,7,160,14,161,0,161,2,125,8,110,2,124,5, + 125,8,124,3,160,15,124,8,161,1,1,0,113,44,124,3, + 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,92, + 100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17, + 100,6,83,0,100,6,83,0,119,0,41,7,122,68,70,105, + 108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32, + 112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101, + 115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102, + 111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114, + 121,46,114,15,0,0,0,114,86,0,0,0,114,76,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,83,0,0,0,115,20,0,0,0,104, + 0,124,0,93,6,125,1,124,1,160,0,161,0,146,2,113, + 2,83,0,114,7,0,0,0,41,1,114,117,0,0,0,41, + 2,114,5,0,0,0,90,2,102,110,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,13,0,0,0,9,6, + 0,0,115,4,0,0,0,20,0,255,128,122,41,70,105,108, + 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, + 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, + 116,99,111,109,112,62,78,41,18,114,58,0,0,0,114,19, + 0,0,0,90,7,108,105,115,116,100,105,114,114,70,0,0, + 0,114,71,1,0,0,218,15,80,101,114,109,105,115,115,105, + 111,110,69,114,114,111,114,218,18,78,111,116,65,68,105,114, + 101,99,116,111,114,121,69,114,114,111,114,114,16,0,0,0, + 114,26,0,0,0,114,27,0,0,0,114,84,1,0,0,114, + 85,1,0,0,114,112,0,0,0,114,77,0,0,0,114,117, + 0,0,0,218,3,97,100,100,114,28,0,0,0,114,86,1, + 0,0,41,9,114,130,0,0,0,114,58,0,0,0,90,8, + 99,111,110,116,101,110,116,115,90,21,108,111,119,101,114,95, + 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,114, + 56,1,0,0,114,128,0,0,0,114,40,1,0,0,114,30, + 1,0,0,90,8,110,101,119,95,110,97,109,101,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,88,1,0, + 0,236,5,0,0,115,40,0,0,0,6,2,2,1,22,1, + 18,1,6,3,12,3,12,1,6,7,8,1,16,1,4,1, + 18,1,4,2,12,1,6,1,12,1,20,1,4,255,2,233, + 255,128,122,22,70,105,108,101,70,105,110,100,101,114,46,95, + 102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,7, + 0,0,0,115,18,0,0,0,135,0,135,1,102,2,100,1, + 100,2,132,8,125,2,124,2,83,0,41,4,97,20,1,0, + 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, + 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, + 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, + 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, + 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, + 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, + 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, + 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, + 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, + 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, + 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, + 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, + 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, + 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, + 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, + 32,32,32,32,32,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,36, + 0,0,0,116,0,124,0,131,1,115,10,116,1,100,1,124, + 0,100,2,141,2,130,1,136,0,124,0,103,1,136,1,162, + 1,82,0,142,0,83,0,41,4,122,45,80,97,116,104,32, + 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, + 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, + 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, + 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, + 117,112,112,111,114,116,101,100,114,62,0,0,0,78,41,2, + 114,71,0,0,0,114,129,0,0,0,114,62,0,0,0,169, + 2,114,209,0,0,0,114,87,1,0,0,114,7,0,0,0, + 114,8,0,0,0,218,24,112,97,116,104,95,104,111,111,107, + 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,21, + 6,0,0,115,8,0,0,0,8,2,12,1,16,1,255,128, + 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, + 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, + 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, + 108,101,70,105,110,100,101,114,78,114,7,0,0,0,41,3, + 114,209,0,0,0,114,87,1,0,0,114,93,1,0,0,114, + 7,0,0,0,114,92,1,0,0,114,8,0,0,0,218,9, + 112,97,116,104,95,104,111,111,107,11,6,0,0,115,6,0, + 0,0,14,10,4,6,255,128,122,20,70,105,108,101,70,105, + 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,114,53,1,0,0,41,2,78,122, + 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, + 41,41,2,114,77,0,0,0,114,58,0,0,0,114,8,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,223,0,0,0,199,4,0,0,115,4,0,0,0,18, - 1,255,128,122,25,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,67,0,0,0,115,24,0,0,0,116,0,160,1, - 100,1,116,2,161,2,1,0,100,2,160,3,124,0,106,4, - 161,1,83,0,41,4,122,115,82,101,116,117,114,110,32,114, - 101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,84,104,101,32,105,109,112,111, - 114,116,32,109,97,99,104,105,110,101,114,121,32,100,111,101, - 115,32,116,104,101,32,106,111,98,32,105,116,115,101,108,102, - 46,10,10,32,32,32,32,32,32,32,32,122,82,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, - 100,117,108,101,95,114,101,112,114,40,41,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, - 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, - 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,122, - 25,60,109,111,100,117,108,101,32,123,33,114,125,32,40,110, - 97,109,101,115,112,97,99,101,41,62,78,41,5,114,88,0, - 0,0,114,89,0,0,0,114,90,0,0,0,114,77,0,0, - 0,114,137,0,0,0,41,1,114,231,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,11,109,111, - 100,117,108,101,95,114,101,112,114,202,4,0,0,115,10,0, - 0,0,6,7,2,1,4,255,12,2,255,128,122,28,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,109, - 111,100,117,108,101,95,114,101,112,114,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,114,24,0,0,0,41,2,78,84,114,7,0,0, - 0,114,234,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,193,0,0,0,213,4,0,0,243,4, - 0,0,0,4,1,255,128,122,27,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,114,24,0, - 0,0,41,2,78,114,10,0,0,0,114,7,0,0,0,114, - 234,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,244,0,0,0,216,4,0,0,114,61,1,0, - 0,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6, - 0,0,0,67,0,0,0,115,16,0,0,0,116,0,100,1, - 100,2,100,3,100,4,100,5,141,4,83,0,41,6,78,114, - 10,0,0,0,122,8,60,115,116,114,105,110,103,62,114,230, - 0,0,0,84,41,1,114,246,0,0,0,41,1,114,247,0, - 0,0,114,234,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,228,0,0,0,219,4,0,0,114, - 58,1,0,0,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,24,0,0,0,114,224,0, - 0,0,114,7,0,0,0,114,225,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,226,0,0,0, - 222,4,0,0,114,227,0,0,0,122,30,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,99,114,101,97, - 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,115,4,0,0,0,100,0,83,0,114,121,0,0,0, - 114,7,0,0,0,114,28,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,232,0,0,0,225,4, - 0,0,114,61,1,0,0,122,28,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,26, - 0,0,0,116,0,160,1,100,1,124,0,106,2,161,2,1, - 0,116,0,160,3,124,0,124,1,161,2,83,0,41,3,122, - 98,76,111,97,100,32,97,32,110,97,109,101,115,112,97,99, - 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,122,38,110,97,109,101,115,112,97,99,101,32,109, - 111,100,117,108,101,32,108,111,97,100,101,100,32,119,105,116, - 104,32,112,97,116,104,32,123,33,114,125,78,41,4,114,146, - 0,0,0,114,160,0,0,0,114,35,1,0,0,114,233,0, - 0,0,114,234,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,235,0,0,0,228,4,0,0,115, - 10,0,0,0,6,7,4,1,4,255,12,3,255,128,122,28, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0, - 0,67,0,0,0,115,22,0,0,0,100,1,100,2,108,0, - 109,1,125,2,1,0,124,2,124,0,106,2,131,1,83,0, - 41,3,78,114,0,0,0,0,41,1,218,15,78,97,109,101, - 115,112,97,99,101,82,101,97,100,101,114,41,3,114,19,1, - 0,0,114,62,1,0,0,114,35,1,0,0,41,3,114,130, - 0,0,0,114,231,0,0,0,114,62,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,20,1,0, - 0,240,4,0,0,115,6,0,0,0,12,1,10,1,255,128, - 122,36,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95, - 114,101,97,100,101,114,78,41,13,114,137,0,0,0,114,136, - 0,0,0,114,138,0,0,0,114,223,0,0,0,114,220,0, - 0,0,114,60,1,0,0,114,193,0,0,0,114,244,0,0, - 0,114,228,0,0,0,114,226,0,0,0,114,232,0,0,0, - 114,235,0,0,0,114,20,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,59, - 1,0,0,198,4,0,0,115,24,0,0,0,8,0,8,1, - 2,3,10,1,8,10,8,3,8,3,8,3,8,3,8,3, - 12,12,255,128,114,59,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0, - 0,0,115,118,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,101,4,100,2,100,3,132,0,131,1,90,5,101, - 4,100,4,100,5,132,0,131,1,90,6,101,7,100,6,100, - 7,132,0,131,1,90,8,101,7,100,8,100,9,132,0,131, - 1,90,9,101,7,100,19,100,11,100,12,132,1,131,1,90, - 10,101,7,100,20,100,13,100,14,132,1,131,1,90,11,101, - 7,100,21,100,15,100,16,132,1,131,1,90,12,101,4,100, - 17,100,18,132,0,131,1,90,13,100,10,83,0,41,22,218, - 10,80,97,116,104,70,105,110,100,101,114,122,62,77,101,116, - 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, - 114,32,115,121,115,46,112,97,116,104,32,97,110,100,32,112, - 97,99,107,97,103,101,32,95,95,112,97,116,104,95,95,32, - 97,116,116,114,105,98,117,116,101,115,46,99,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 67,0,0,0,115,64,0,0,0,116,0,116,1,106,2,160, - 3,161,0,131,1,68,0,93,44,92,2,125,0,125,1,124, - 1,100,1,117,0,114,40,116,1,106,2,124,0,61,0,113, - 14,116,4,124,1,100,2,131,2,114,58,124,1,160,5,161, - 0,1,0,113,14,100,1,83,0,41,3,122,125,67,97,108, - 108,32,116,104,101,32,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,40,41,32,109,101,116,104,111,100, - 32,111,110,32,97,108,108,32,112,97,116,104,32,101,110,116, - 114,121,32,102,105,110,100,101,114,115,10,32,32,32,32,32, - 32,32,32,115,116,111,114,101,100,32,105,110,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,115,32,40,119,104,101,114,101,32,105,109,112, - 108,101,109,101,110,116,101,100,41,46,78,218,17,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,41,6, - 218,4,108,105,115,116,114,16,0,0,0,218,19,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 218,5,105,116,101,109,115,114,140,0,0,0,114,64,1,0, - 0,41,2,114,128,0,0,0,218,6,102,105,110,100,101,114, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 64,1,0,0,251,4,0,0,115,16,0,0,0,22,4,8, - 1,10,1,10,1,8,1,2,128,4,252,255,128,122,28,80, - 97,116,104,70,105,110,100,101,114,46,105,110,118,97,108,105, - 100,97,116,101,95,99,97,99,104,101,115,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, - 67,0,0,0,115,76,0,0,0,116,0,106,1,100,1,117, - 1,114,28,116,0,106,1,115,28,116,2,160,3,100,2,116, - 4,161,2,1,0,116,0,106,1,68,0,93,34,125,1,122, - 14,124,1,124,0,131,1,87,0,2,0,1,0,83,0,4, - 0,116,5,121,74,1,0,1,0,1,0,89,0,113,34,100, - 1,83,0,119,0,41,3,122,46,83,101,97,114,99,104,32, - 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,102, - 111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,32, - 39,112,97,116,104,39,46,78,122,23,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,105,115,32,101,109,112,116, - 121,41,6,114,16,0,0,0,218,10,112,97,116,104,95,104, - 111,111,107,115,114,88,0,0,0,114,89,0,0,0,114,149, - 0,0,0,114,129,0,0,0,41,2,114,58,0,0,0,90, - 4,104,111,111,107,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,11,95,112,97,116,104,95,104,111,111,107, - 115,5,5,0,0,115,20,0,0,0,16,3,12,1,10,1, - 2,1,14,1,12,1,4,1,4,2,2,253,255,128,122,22, - 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, - 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115, - 100,0,0,0,124,1,100,1,107,2,114,40,122,12,116,0, - 160,1,161,0,125,1,87,0,110,18,4,0,116,2,121,98, - 1,0,1,0,1,0,89,0,100,2,83,0,122,16,116,3, - 106,4,124,1,25,0,125,2,87,0,124,2,83,0,4,0, - 116,5,121,96,1,0,1,0,1,0,124,0,160,6,124,1, - 161,1,125,2,124,2,116,3,106,4,124,1,60,0,89,0, - 124,2,83,0,119,0,119,0,41,3,122,210,71,101,116,32, - 116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,116, - 104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,114, - 111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, - 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, - 32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,110, - 32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,100, - 32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101, - 32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,32, - 97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,102, - 32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,118, - 97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,78, - 111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,10, - 0,0,0,78,41,7,114,19,0,0,0,114,70,0,0,0, - 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,114,16,0,0,0,114,66,1,0,0,218,8,75, - 101,121,69,114,114,111,114,114,70,1,0,0,41,3,114,209, - 0,0,0,114,58,0,0,0,114,68,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,20,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,18,5,0,0,115,30,0,0,0,8,8,2,1,12, - 1,12,1,6,3,2,1,12,1,4,4,12,253,10,1,12, - 1,4,1,2,253,2,250,255,128,122,31,80,97,116,104,70, - 105,110,100,101,114,46,95,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,99,3,0,0,0,0, - 0,0,0,0,0,0,0,7,0,0,0,4,0,0,0,67, - 0,0,0,115,110,0,0,0,116,0,124,2,100,1,131,2, - 114,26,124,2,160,1,124,1,161,1,92,2,125,3,125,4, - 110,42,116,2,160,3,124,2,161,1,155,0,100,2,157,2, - 125,5,116,4,160,5,124,5,116,6,161,2,1,0,124,2, - 160,7,124,1,161,1,125,3,103,0,125,4,124,3,100,0, - 117,1,114,88,116,2,160,8,124,1,124,3,161,2,83,0, - 116,2,160,9,124,1,100,0,161,2,125,6,124,4,124,6, - 95,10,124,6,83,0,41,3,78,114,148,0,0,0,122,53, - 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, - 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, - 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, - 117,108,101,40,41,41,11,114,140,0,0,0,114,148,0,0, - 0,114,146,0,0,0,90,12,95,111,98,106,101,99,116,95, - 110,97,109,101,114,88,0,0,0,114,89,0,0,0,114,149, - 0,0,0,114,217,0,0,0,114,212,0,0,0,114,194,0, - 0,0,114,189,0,0,0,41,7,114,209,0,0,0,114,150, - 0,0,0,114,68,1,0,0,114,151,0,0,0,114,152,0, - 0,0,114,153,0,0,0,114,198,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,16,95,108,101, - 103,97,99,121,95,103,101,116,95,115,112,101,99,40,5,0, - 0,115,24,0,0,0,10,4,16,1,16,2,12,2,10,1, - 4,1,8,1,12,1,12,1,6,1,4,1,255,128,122,27, - 80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97, - 99,121,95,103,101,116,95,115,112,101,99,78,99,4,0,0, - 0,0,0,0,0,0,0,0,0,9,0,0,0,5,0,0, - 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2, - 68,0,93,134,125,5,116,0,124,5,116,1,116,2,102,2, - 131,2,115,28,113,8,124,0,160,3,124,5,161,1,125,6, - 124,6,100,1,117,1,114,142,116,4,124,6,100,2,131,2, - 114,70,124,6,160,5,124,1,124,3,161,2,125,7,110,12, - 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1, - 117,0,114,92,113,8,124,7,106,7,100,1,117,1,114,110, - 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8, - 100,1,117,0,114,132,116,9,100,3,131,1,130,1,124,4, - 160,10,124,8,161,1,1,0,113,8,116,11,160,12,124,1, - 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0, - 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, - 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, - 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, - 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, - 109,101,46,78,114,214,0,0,0,122,19,115,112,101,99,32, - 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13, - 114,172,0,0,0,114,97,0,0,0,218,5,98,121,116,101, - 115,114,73,1,0,0,114,140,0,0,0,114,214,0,0,0, - 114,74,1,0,0,114,151,0,0,0,114,189,0,0,0,114, - 129,0,0,0,114,178,0,0,0,114,146,0,0,0,114,194, - 0,0,0,41,9,114,209,0,0,0,114,150,0,0,0,114, - 58,0,0,0,114,213,0,0,0,218,14,110,97,109,101,115, - 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, - 114,68,1,0,0,114,198,0,0,0,114,152,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,9, - 95,103,101,116,95,115,112,101,99,58,5,0,0,115,44,0, - 0,0,4,5,8,1,14,1,2,1,10,1,8,1,10,1, - 14,1,12,2,8,1,2,1,10,1,8,1,6,1,8,1, - 8,1,10,5,2,128,12,2,6,1,4,1,255,128,122,20, - 80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95, - 115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0, - 0,6,0,0,0,5,0,0,0,67,0,0,0,115,94,0, - 0,0,124,2,100,1,117,0,114,14,116,0,106,1,125,2, - 124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4, - 100,1,117,0,114,40,100,1,83,0,124,4,106,3,100,1, - 117,0,114,90,124,4,106,4,125,5,124,5,114,86,100,1, - 124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3, - 124,4,95,4,124,4,83,0,100,1,83,0,124,4,83,0, - 41,2,122,141,84,114,121,32,116,111,32,102,105,110,100,32, - 97,32,115,112,101,99,32,102,111,114,32,39,102,117,108,108, - 110,97,109,101,39,32,111,110,32,115,121,115,46,112,97,116, - 104,32,111,114,32,39,112,97,116,104,39,46,10,10,32,32, - 32,32,32,32,32,32,84,104,101,32,115,101,97,114,99,104, - 32,105,115,32,98,97,115,101,100,32,111,110,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,32, - 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,46,10,32,32,32,32,32,32,32, - 32,78,41,7,114,16,0,0,0,114,58,0,0,0,114,77, - 1,0,0,114,151,0,0,0,114,189,0,0,0,114,192,0, - 0,0,114,33,1,0,0,41,6,114,209,0,0,0,114,150, - 0,0,0,114,58,0,0,0,114,213,0,0,0,114,198,0, - 0,0,114,76,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,214,0,0,0,90,5,0,0,115, - 28,0,0,0,8,6,6,1,14,1,8,1,4,1,10,1, - 6,1,4,1,6,3,16,1,4,1,4,2,4,2,255,128, - 122,20,80,97,116,104,70,105,110,100,101,114,46,102,105,110, - 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 30,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3, - 124,3,100,1,117,0,114,24,100,1,83,0,124,3,106,1, - 83,0,41,2,122,170,102,105,110,100,32,116,104,101,32,109, - 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, - 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, - 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,114,215,0,0,0,114,216,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,217,0,0,0,114, - 5,0,0,115,10,0,0,0,12,8,8,1,4,1,6,1, - 255,128,122,22,80,97,116,104,70,105,110,100,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,99,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,79, - 0,0,0,115,28,0,0,0,100,1,100,2,108,0,109,1, - 125,2,1,0,124,2,106,2,124,0,105,0,124,1,164,1, - 142,1,83,0,41,4,97,32,1,0,0,10,32,32,32,32, - 32,32,32,32,70,105,110,100,32,100,105,115,116,114,105,98, - 117,116,105,111,110,115,46,10,10,32,32,32,32,32,32,32, - 32,82,101,116,117,114,110,32,97,110,32,105,116,101,114,97, - 98,108,101,32,111,102,32,97,108,108,32,68,105,115,116,114, - 105,98,117,116,105,111,110,32,105,110,115,116,97,110,99,101, - 115,32,99,97,112,97,98,108,101,32,111,102,10,32,32,32, - 32,32,32,32,32,108,111,97,100,105,110,103,32,116,104,101, - 32,109,101,116,97,100,97,116,97,32,102,111,114,32,112,97, - 99,107,97,103,101,115,32,109,97,116,99,104,105,110,103,32, - 96,96,99,111,110,116,101,120,116,46,110,97,109,101,96,96, - 10,32,32,32,32,32,32,32,32,40,111,114,32,97,108,108, - 32,110,97,109,101,115,32,105,102,32,96,96,78,111,110,101, - 96,96,32,105,110,100,105,99,97,116,101,100,41,32,97,108, - 111,110,103,32,116,104,101,32,112,97,116,104,115,32,105,110, - 32,116,104,101,32,108,105,115,116,10,32,32,32,32,32,32, - 32,32,111,102,32,100,105,114,101,99,116,111,114,105,101,115, - 32,96,96,99,111,110,116,101,120,116,46,112,97,116,104,96, - 96,46,10,32,32,32,32,32,32,32,32,114,0,0,0,0, - 41,1,218,18,77,101,116,97,100,97,116,97,80,97,116,104, - 70,105,110,100,101,114,78,41,3,90,18,105,109,112,111,114, - 116,108,105,98,46,109,101,116,97,100,97,116,97,114,78,1, - 0,0,218,18,102,105,110,100,95,100,105,115,116,114,105,98, - 117,116,105,111,110,115,41,3,114,131,0,0,0,114,132,0, - 0,0,114,78,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,79,1,0,0,127,5,0,0,115, - 6,0,0,0,12,10,16,1,255,128,122,29,80,97,116,104, - 70,105,110,100,101,114,46,102,105,110,100,95,100,105,115,116, - 114,105,98,117,116,105,111,110,115,41,1,78,41,2,78,78, - 41,1,78,41,14,114,137,0,0,0,114,136,0,0,0,114, - 138,0,0,0,114,139,0,0,0,114,220,0,0,0,114,64, - 1,0,0,114,70,1,0,0,114,221,0,0,0,114,73,1, - 0,0,114,74,1,0,0,114,77,1,0,0,114,214,0,0, - 0,114,217,0,0,0,114,79,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 63,1,0,0,247,4,0,0,115,38,0,0,0,8,0,4, - 2,2,2,10,1,2,9,10,1,2,12,10,1,2,21,10, - 1,2,17,12,1,2,31,12,1,2,23,12,1,2,12,14, - 1,255,128,114,63,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, - 0,115,90,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, - 90,5,101,6,90,7,100,6,100,7,132,0,90,8,100,8, - 100,9,132,0,90,9,100,19,100,11,100,12,132,1,90,10, - 100,13,100,14,132,0,90,11,101,12,100,15,100,16,132,0, - 131,1,90,13,100,17,100,18,132,0,90,14,100,10,83,0, - 41,20,218,10,70,105,108,101,70,105,110,100,101,114,122,172, - 70,105,108,101,45,98,97,115,101,100,32,102,105,110,100,101, - 114,46,10,10,32,32,32,32,73,110,116,101,114,97,99,116, - 105,111,110,115,32,119,105,116,104,32,116,104,101,32,102,105, - 108,101,32,115,121,115,116,101,109,32,97,114,101,32,99,97, - 99,104,101,100,32,102,111,114,32,112,101,114,102,111,114,109, - 97,110,99,101,44,32,98,101,105,110,103,10,32,32,32,32, - 114,101,102,114,101,115,104,101,100,32,119,104,101,110,32,116, - 104,101,32,100,105,114,101,99,116,111,114,121,32,116,104,101, - 32,102,105,110,100,101,114,32,105,115,32,104,97,110,100,108, - 105,110,103,32,104,97,115,32,98,101,101,110,32,109,111,100, - 105,102,105,101,100,46,10,10,32,32,32,32,99,2,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0, - 0,7,0,0,0,115,84,0,0,0,103,0,125,3,124,2, - 68,0,93,32,92,2,137,0,125,4,124,3,160,0,135,0, - 102,1,100,1,100,2,132,8,124,4,68,0,131,1,161,1, - 1,0,113,8,124,3,124,0,95,1,124,1,112,54,100,3, - 124,0,95,2,100,4,124,0,95,3,116,4,131,0,124,0, - 95,5,116,4,131,0,124,0,95,6,100,5,83,0,41,6, - 122,154,73,110,105,116,105,97,108,105,122,101,32,119,105,116, - 104,32,116,104,101,32,112,97,116,104,32,116,111,32,115,101, - 97,114,99,104,32,111,110,32,97,110,100,32,97,32,118,97, - 114,105,97,98,108,101,32,110,117,109,98,101,114,32,111,102, - 10,32,32,32,32,32,32,32,32,50,45,116,117,112,108,101, - 115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101, - 32,108,111,97,100,101,114,32,97,110,100,32,116,104,101,32, - 102,105,108,101,32,115,117,102,102,105,120,101,115,32,116,104, - 101,32,108,111,97,100,101,114,10,32,32,32,32,32,32,32, - 32,114,101,99,111,103,110,105,122,101,115,46,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,51,0,0,0,115,22,0,0,0,124,0,93,14,125,1, - 124,1,136,0,102,2,86,0,1,0,113,2,100,0,83,0, - 114,121,0,0,0,114,7,0,0,0,114,29,1,0,0,169, - 1,114,151,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,9,0,0,0,156,5,0,0,114,14,0,0,0,122,38, - 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, - 116,95,95,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,114,86,0,0,0,114,116,0,0,0, - 78,41,7,114,178,0,0,0,218,8,95,108,111,97,100,101, - 114,115,114,58,0,0,0,218,11,95,112,97,116,104,95,109, - 116,105,109,101,218,3,115,101,116,218,11,95,112,97,116,104, - 95,99,97,99,104,101,218,19,95,114,101,108,97,120,101,100, - 95,112,97,116,104,95,99,97,99,104,101,41,5,114,130,0, - 0,0,114,58,0,0,0,218,14,108,111,97,100,101,114,95, - 100,101,116,97,105,108,115,90,7,108,111,97,100,101,114,115, - 114,200,0,0,0,114,7,0,0,0,114,81,1,0,0,114, - 8,0,0,0,114,223,0,0,0,150,5,0,0,115,18,0, - 0,0,4,4,12,1,26,1,6,1,10,2,6,1,8,1, - 12,1,255,128,122,19,70,105,108,101,70,105,110,100,101,114, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, - 0,0,115,10,0,0,0,100,1,124,0,95,0,100,2,83, - 0,41,3,122,31,73,110,118,97,108,105,100,97,116,101,32, - 116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,116, - 105,109,101,46,114,116,0,0,0,78,41,1,114,83,1,0, - 0,114,8,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,64,1,0,0,164,5,0,0,114,69, - 0,0,0,122,28,70,105,108,101,70,105,110,100,101,114,46, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,67,0,0,0,115,42,0,0,0,124, - 0,160,0,124,1,161,1,125,2,124,2,100,1,117,0,114, - 26,100,1,103,0,102,2,83,0,124,2,106,1,124,2,106, - 2,112,38,103,0,102,2,83,0,41,2,122,197,84,114,121, - 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, - 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, - 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, - 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, - 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, - 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, - 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, - 32,32,78,41,3,114,214,0,0,0,114,151,0,0,0,114, - 189,0,0,0,41,3,114,130,0,0,0,114,150,0,0,0, - 114,198,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,148,0,0,0,170,5,0,0,115,10,0, - 0,0,10,7,8,1,8,1,16,1,255,128,122,22,70,105, - 108,101,70,105,110,100,101,114,46,102,105,110,100,95,108,111, - 97,100,101,114,99,6,0,0,0,0,0,0,0,0,0,0, - 0,7,0,0,0,6,0,0,0,67,0,0,0,115,26,0, - 0,0,124,1,124,2,124,3,131,2,125,6,116,0,124,2, - 124,3,124,6,124,4,100,1,141,4,83,0,41,2,78,114, - 188,0,0,0,41,1,114,201,0,0,0,41,7,114,130,0, - 0,0,114,199,0,0,0,114,150,0,0,0,114,58,0,0, - 0,90,4,115,109,115,108,114,213,0,0,0,114,151,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,77,1,0,0,182,5,0,0,115,10,0,0,0,10,1, - 8,1,2,1,6,255,255,128,122,20,70,105,108,101,70,105, - 110,100,101,114,46,95,103,101,116,95,115,112,101,99,78,99, - 3,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, - 8,0,0,0,67,0,0,0,115,100,1,0,0,100,1,125, - 3,124,1,160,0,100,2,161,1,100,3,25,0,125,4,122, - 24,116,1,124,0,106,2,112,34,116,3,160,4,161,0,131, - 1,106,5,125,5,87,0,110,20,4,0,116,6,144,1,121, - 98,1,0,1,0,1,0,100,4,125,5,89,0,124,5,124, - 0,106,7,107,3,114,88,124,0,160,8,161,0,1,0,124, - 5,124,0,95,7,116,9,131,0,114,110,124,0,106,10,125, - 6,124,4,160,11,161,0,125,7,110,10,124,0,106,12,125, - 6,124,4,125,7,124,7,124,6,118,0,114,214,116,13,124, - 0,106,2,124,4,131,2,125,8,124,0,106,14,68,0,93, - 58,92,2,125,9,125,10,100,5,124,9,23,0,125,11,116, - 13,124,8,124,11,131,2,125,12,116,15,124,12,131,1,114, - 204,124,0,160,16,124,10,124,1,124,12,124,8,103,1,124, - 2,161,5,2,0,1,0,83,0,113,146,116,17,124,8,131, - 1,125,3,124,0,106,14,68,0,93,86,92,2,125,9,125, - 10,116,13,124,0,106,2,124,4,124,9,23,0,131,2,125, - 12,116,18,106,19,100,6,124,12,100,3,100,7,141,3,1, - 0,124,7,124,9,23,0,124,6,118,0,144,1,114,50,116, - 15,124,12,131,1,144,1,114,50,124,0,160,16,124,10,124, - 1,124,12,100,8,124,2,161,5,2,0,1,0,83,0,113, - 220,124,3,144,1,114,94,116,18,160,19,100,9,124,8,161, - 2,1,0,116,18,160,20,124,1,100,8,161,2,125,13,124, - 8,103,1,124,13,95,21,124,13,83,0,100,8,83,0,119, - 0,41,10,122,111,84,114,121,32,116,111,32,102,105,110,100, - 32,97,32,115,112,101,99,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,114, - 110,115,32,116,104,101,32,109,97,116,99,104,105,110,103,32, - 115,112,101,99,44,32,111,114,32,78,111,110,101,32,105,102, - 32,110,111,116,32,102,111,117,110,100,46,10,32,32,32,32, - 32,32,32,32,70,114,86,0,0,0,114,45,0,0,0,114, - 116,0,0,0,114,223,0,0,0,122,9,116,114,121,105,110, - 103,32,123,125,41,1,90,9,118,101,114,98,111,115,105,116, - 121,78,122,25,112,111,115,115,105,98,108,101,32,110,97,109, - 101,115,112,97,99,101,32,102,111,114,32,123,125,41,22,114, - 55,0,0,0,114,63,0,0,0,114,58,0,0,0,114,19, - 0,0,0,114,70,0,0,0,114,22,1,0,0,114,64,0, - 0,0,114,83,1,0,0,218,11,95,102,105,108,108,95,99, - 97,99,104,101,114,22,0,0,0,114,86,1,0,0,114,117, - 0,0,0,114,85,1,0,0,114,54,0,0,0,114,82,1, - 0,0,114,68,0,0,0,114,77,1,0,0,114,71,0,0, - 0,114,146,0,0,0,114,160,0,0,0,114,194,0,0,0, - 114,189,0,0,0,41,14,114,130,0,0,0,114,150,0,0, - 0,114,213,0,0,0,90,12,105,115,95,110,97,109,101,115, - 112,97,99,101,90,11,116,97,105,108,95,109,111,100,117,108, - 101,114,180,0,0,0,90,5,99,97,99,104,101,90,12,99, - 97,99,104,101,95,109,111,100,117,108,101,90,9,98,97,115, - 101,95,112,97,116,104,114,30,1,0,0,114,199,0,0,0, - 90,13,105,110,105,116,95,102,105,108,101,110,97,109,101,90, - 9,102,117,108,108,95,112,97,116,104,114,198,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,214, - 0,0,0,187,5,0,0,115,80,0,0,0,4,5,14,1, - 2,1,24,1,14,1,6,1,10,1,8,1,6,1,6,2, - 6,1,10,1,6,2,4,1,8,2,12,1,14,1,8,1, - 10,1,8,1,24,1,2,255,8,5,14,2,16,1,16,1, - 14,1,10,1,10,1,4,1,8,255,2,128,6,2,12,1, - 12,1,8,1,4,1,4,1,2,219,255,128,122,20,70,105, - 108,101,70,105,110,100,101,114,46,102,105,110,100,95,115,112, - 101,99,99,1,0,0,0,0,0,0,0,0,0,0,0,9, - 0,0,0,10,0,0,0,67,0,0,0,115,190,0,0,0, - 124,0,106,0,125,1,122,22,116,1,160,2,124,1,112,22, - 116,1,160,3,161,0,161,1,125,2,87,0,110,24,4,0, - 116,4,116,5,116,6,102,3,121,188,1,0,1,0,1,0, - 103,0,125,2,89,0,116,7,106,8,160,9,100,1,161,1, - 115,78,116,10,124,2,131,1,124,0,95,11,110,74,116,10, - 131,0,125,3,124,2,68,0,93,56,125,4,124,4,160,12, - 100,2,161,1,92,3,125,5,125,6,125,7,124,6,114,130, - 100,3,160,13,124,5,124,7,160,14,161,0,161,2,125,8, - 110,4,124,5,125,8,124,3,160,15,124,8,161,1,1,0, - 113,88,124,3,124,0,95,11,116,7,106,8,160,9,116,16, - 161,1,114,184,100,4,100,5,132,0,124,2,68,0,131,1, - 124,0,95,17,100,6,83,0,100,6,83,0,119,0,41,7, - 122,68,70,105,108,108,32,116,104,101,32,99,97,99,104,101, - 32,111,102,32,112,111,116,101,110,116,105,97,108,32,109,111, - 100,117,108,101,115,32,97,110,100,32,112,97,99,107,97,103, - 101,115,32,102,111,114,32,116,104,105,115,32,100,105,114,101, - 99,116,111,114,121,46,114,15,0,0,0,114,86,0,0,0, - 114,76,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,83,0,0,0,115,20, - 0,0,0,104,0,124,0,93,12,125,1,124,1,160,0,161, - 0,146,2,113,4,83,0,114,7,0,0,0,41,1,114,117, - 0,0,0,41,2,114,5,0,0,0,90,2,102,110,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,13,0, - 0,0,8,6,0,0,115,4,0,0,0,20,0,255,128,122, - 41,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, - 108,95,99,97,99,104,101,46,60,108,111,99,97,108,115,62, - 46,60,115,101,116,99,111,109,112,62,78,41,18,114,58,0, - 0,0,114,19,0,0,0,90,7,108,105,115,116,100,105,114, - 114,70,0,0,0,114,71,1,0,0,218,15,80,101,114,109, - 105,115,115,105,111,110,69,114,114,111,114,218,18,78,111,116, - 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, - 16,0,0,0,114,26,0,0,0,114,27,0,0,0,114,84, - 1,0,0,114,85,1,0,0,114,112,0,0,0,114,77,0, - 0,0,114,117,0,0,0,218,3,97,100,100,114,28,0,0, - 0,114,86,1,0,0,41,9,114,130,0,0,0,114,58,0, - 0,0,90,8,99,111,110,116,101,110,116,115,90,21,108,111, - 119,101,114,95,115,117,102,102,105,120,95,99,111,110,116,101, - 110,116,115,114,56,1,0,0,114,128,0,0,0,114,40,1, - 0,0,114,30,1,0,0,90,8,110,101,119,95,110,97,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,88,1,0,0,235,5,0,0,115,40,0,0,0,6,2, - 2,1,22,1,18,1,6,3,12,3,12,1,6,7,8,1, - 16,1,4,1,18,1,4,2,12,1,6,1,12,1,20,1, - 4,255,2,233,255,128,122,22,70,105,108,101,70,105,110,100, - 101,114,46,95,102,105,108,108,95,99,97,99,104,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,7,0,0,0,115,18,0,0,0,135,0,135,1, - 102,2,100,1,100,2,132,8,125,2,124,2,83,0,41,4, - 97,20,1,0,0,65,32,99,108,97,115,115,32,109,101,116, - 104,111,100,32,119,104,105,99,104,32,114,101,116,117,114,110, - 115,32,97,32,99,108,111,115,117,114,101,32,116,111,32,117, - 115,101,32,111,110,32,115,121,115,46,112,97,116,104,95,104, - 111,111,107,10,32,32,32,32,32,32,32,32,119,104,105,99, - 104,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110, - 32,105,110,115,116,97,110,99,101,32,117,115,105,110,103,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,108,111, - 97,100,101,114,115,32,97,110,100,32,116,104,101,32,112,97, - 116,104,10,32,32,32,32,32,32,32,32,99,97,108,108,101, - 100,32,111,110,32,116,104,101,32,99,108,111,115,117,114,101, - 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, - 101,32,112,97,116,104,32,99,97,108,108,101,100,32,111,110, - 32,116,104,101,32,99,108,111,115,117,114,101,32,105,115,32, - 110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,44, - 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,10, - 32,32,32,32,32,32,32,32,114,97,105,115,101,100,46,10, - 10,32,32,32,32,32,32,32,32,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,19,0, - 0,0,115,36,0,0,0,116,0,124,0,131,1,115,20,116, - 1,100,1,124,0,100,2,141,2,130,1,136,0,124,0,103, - 1,136,1,162,1,82,0,142,0,83,0,41,4,122,45,80, - 97,116,104,32,104,111,111,107,32,102,111,114,32,105,109,112, - 111,114,116,108,105,98,46,109,97,99,104,105,110,101,114,121, - 46,70,105,108,101,70,105,110,100,101,114,46,122,30,111,110, - 108,121,32,100,105,114,101,99,116,111,114,105,101,115,32,97, - 114,101,32,115,117,112,112,111,114,116,101,100,114,62,0,0, - 0,78,41,2,114,71,0,0,0,114,129,0,0,0,114,62, - 0,0,0,169,2,114,209,0,0,0,114,87,1,0,0,114, - 7,0,0,0,114,8,0,0,0,218,24,112,97,116,104,95, - 104,111,111,107,95,102,111,114,95,70,105,108,101,70,105,110, - 100,101,114,20,6,0,0,115,8,0,0,0,8,2,12,1, - 16,1,255,128,122,54,70,105,108,101,70,105,110,100,101,114, - 46,112,97,116,104,95,104,111,111,107,46,60,108,111,99,97, - 108,115,62,46,112,97,116,104,95,104,111,111,107,95,102,111, - 114,95,70,105,108,101,70,105,110,100,101,114,78,114,7,0, - 0,0,41,3,114,209,0,0,0,114,87,1,0,0,114,93, - 1,0,0,114,7,0,0,0,114,92,1,0,0,114,8,0, - 0,0,218,9,112,97,116,104,95,104,111,111,107,10,6,0, - 0,115,6,0,0,0,14,10,4,6,255,128,122,20,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,114,53,1,0,0, - 41,2,78,122,16,70,105,108,101,70,105,110,100,101,114,40, - 123,33,114,125,41,41,2,114,77,0,0,0,114,58,0,0, - 0,114,8,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,54,1,0,0,28,6,0,0,114,47, - 1,0,0,122,19,70,105,108,101,70,105,110,100,101,114,46, - 95,95,114,101,112,114,95,95,41,1,78,41,15,114,137,0, - 0,0,114,136,0,0,0,114,138,0,0,0,114,139,0,0, - 0,114,223,0,0,0,114,64,1,0,0,114,154,0,0,0, - 114,217,0,0,0,114,148,0,0,0,114,77,1,0,0,114, - 214,0,0,0,114,88,1,0,0,114,221,0,0,0,114,94, - 1,0,0,114,54,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,80,1,0, - 0,141,5,0,0,115,26,0,0,0,8,0,4,2,8,7, - 8,14,4,4,8,2,8,12,10,5,8,48,2,31,10,1, - 12,17,255,128,114,80,1,0,0,99,4,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0, - 0,0,115,144,0,0,0,124,0,160,0,100,1,161,1,125, - 4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124, - 5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107, - 2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116, - 3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124, - 1,124,2,124,4,100,3,141,3,125,5,122,38,124,5,124, - 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, - 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,100, - 0,83,0,4,0,116,5,121,142,1,0,1,0,1,0,89, - 0,100,0,83,0,119,0,41,6,78,218,10,95,95,108,111, - 97,100,101,114,95,95,218,8,95,95,115,112,101,99,95,95, - 114,81,1,0,0,90,8,95,95,102,105,108,101,95,95,90, - 10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,103, - 101,116,114,151,0,0,0,114,27,1,0,0,114,21,1,0, - 0,114,201,0,0,0,218,9,69,120,99,101,112,116,105,111, - 110,41,6,90,2,110,115,114,128,0,0,0,90,8,112,97, - 116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,109, - 101,114,151,0,0,0,114,198,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,14,95,102,105,120, - 95,117,112,95,109,111,100,117,108,101,34,6,0,0,115,38, - 0,0,0,10,2,10,1,4,1,4,1,8,1,8,1,12, - 1,10,2,4,1,14,1,2,1,8,1,8,1,8,1,14, - 1,12,1,6,2,2,254,255,128,114,99,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,116,0,116,1, - 160,2,161,0,102,2,125,0,116,3,116,4,102,2,125,1, - 116,5,116,6,102,2,125,2,124,0,124,1,124,2,103,3, - 83,0,41,2,122,95,82,101,116,117,114,110,115,32,97,32, - 108,105,115,116,32,111,102,32,102,105,108,101,45,98,97,115, - 101,100,32,109,111,100,117,108,101,32,108,111,97,100,101,114, - 115,46,10,10,32,32,32,32,69,97,99,104,32,105,116,101, - 109,32,105,115,32,97,32,116,117,112,108,101,32,40,108,111, - 97,100,101,114,44,32,115,117,102,102,105,120,101,115,41,46, - 10,32,32,32,32,78,41,7,114,17,1,0,0,114,174,0, - 0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,117, - 102,102,105,120,101,115,114,21,1,0,0,114,113,0,0,0, - 114,27,1,0,0,114,101,0,0,0,41,3,90,10,101,120, - 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, - 90,8,98,121,116,101,99,111,100,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,195,0,0,0,57,6, - 0,0,115,10,0,0,0,12,5,8,1,8,1,10,1,255, - 128,114,195,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,115, - 8,0,0,0,124,0,97,0,100,0,83,0,114,121,0,0, - 0,41,1,114,146,0,0,0,41,1,218,17,95,98,111,111, - 116,115,116,114,97,112,95,109,111,100,117,108,101,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,21,95,115, - 101,116,95,98,111,111,116,115,116,114,97,112,95,109,111,100, - 117,108,101,68,6,0,0,115,4,0,0,0,8,2,255,128, - 114,102,1,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,50, - 0,0,0,116,0,124,0,131,1,1,0,116,1,131,0,125, - 1,116,2,106,3,160,4,116,5,106,6,124,1,142,0,103, - 1,161,1,1,0,116,2,106,7,160,8,116,9,161,1,1, - 0,100,1,83,0,41,2,122,41,73,110,115,116,97,108,108, - 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, - 105,109,112,111,114,116,32,99,111,109,112,111,110,101,110,116, - 115,46,78,41,10,114,102,1,0,0,114,195,0,0,0,114, - 16,0,0,0,114,69,1,0,0,114,178,0,0,0,114,80, - 1,0,0,114,94,1,0,0,218,9,109,101,116,97,95,112, - 97,116,104,114,197,0,0,0,114,63,1,0,0,41,2,114, - 101,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, - 108,111,97,100,101,114,115,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,8,95,105,110,115,116,97,108,108, - 73,6,0,0,115,10,0,0,0,8,2,6,1,20,1,16, - 1,255,128,114,104,1,0,0,41,1,114,75,0,0,0,41, - 1,78,41,3,78,78,78,41,2,114,0,0,0,0,114,0, - 0,0,0,41,1,84,41,1,78,41,1,78,41,83,114,139, - 0,0,0,114,146,0,0,0,114,174,0,0,0,114,79,0, - 0,0,114,16,0,0,0,114,88,0,0,0,114,171,0,0, - 0,114,26,0,0,0,114,218,0,0,0,90,2,110,116,114, - 19,0,0,0,114,203,0,0,0,90,5,112,111,115,105,120, - 114,48,0,0,0,218,3,97,108,108,114,51,0,0,0,114, - 52,0,0,0,114,73,0,0,0,114,29,0,0,0,90,37, - 95,67,65,83,69,95,73,78,83,69,78,83,73,84,73,86, - 69,95,80,76,65,84,70,79,82,77,83,95,66,89,84,69, - 83,95,75,69,89,114,28,0,0,0,114,30,0,0,0,114, - 22,0,0,0,114,37,0,0,0,114,43,0,0,0,114,46, - 0,0,0,114,54,0,0,0,114,61,0,0,0,114,63,0, - 0,0,114,67,0,0,0,114,68,0,0,0,114,71,0,0, - 0,114,74,0,0,0,114,84,0,0,0,218,4,116,121,112, - 101,218,8,95,95,99,111,100,101,95,95,114,173,0,0,0, - 114,35,0,0,0,114,159,0,0,0,114,34,0,0,0,114, - 40,0,0,0,114,251,0,0,0,114,104,0,0,0,114,100, - 0,0,0,114,113,0,0,0,114,197,0,0,0,114,100,1, - 0,0,114,219,0,0,0,114,101,0,0,0,90,23,68,69, - 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,90,27,79,80,84,73,77,73,90,69,68, - 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, - 69,83,114,109,0,0,0,114,114,0,0,0,114,120,0,0, - 0,114,124,0,0,0,114,126,0,0,0,114,147,0,0,0, - 114,154,0,0,0,114,163,0,0,0,114,167,0,0,0,114, - 169,0,0,0,114,176,0,0,0,114,181,0,0,0,114,182, - 0,0,0,114,187,0,0,0,218,6,111,98,106,101,99,116, - 114,196,0,0,0,114,201,0,0,0,114,202,0,0,0,114, - 222,0,0,0,114,236,0,0,0,114,254,0,0,0,114,21, - 1,0,0,114,27,1,0,0,114,17,1,0,0,114,33,1, - 0,0,114,59,1,0,0,114,63,1,0,0,114,80,1,0, - 0,114,99,1,0,0,114,195,0,0,0,114,102,1,0,0, - 114,104,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,8,60,109,111,100,117, - 108,101,62,1,0,0,0,115,172,0,0,0,4,0,4,22, - 8,3,8,1,8,1,8,1,8,1,10,3,4,1,8,1, - 10,1,8,2,4,3,10,1,6,2,22,2,8,1,10,1, - 14,1,4,4,4,1,2,1,2,1,4,255,8,4,6,16, - 8,3,8,5,8,5,8,6,8,6,8,12,8,10,8,9, - 8,5,8,7,10,9,10,22,0,127,16,25,12,1,4,2, - 4,1,6,2,6,1,10,1,8,2,6,2,8,2,16,2, - 8,71,8,40,8,19,8,12,8,12,8,31,8,17,8,33, - 8,28,10,24,10,13,10,10,8,11,6,14,4,3,2,1, - 12,255,14,68,14,64,16,30,0,127,14,17,18,50,18,45, - 18,25,14,53,14,63,14,49,0,127,14,23,0,127,10,22, - 8,23,8,11,12,5,255,128, + 0,114,54,1,0,0,29,6,0,0,114,47,1,0,0,122, + 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, + 112,114,95,95,41,1,78,41,15,114,137,0,0,0,114,136, + 0,0,0,114,138,0,0,0,114,139,0,0,0,114,223,0, + 0,0,114,64,1,0,0,114,154,0,0,0,114,217,0,0, + 0,114,148,0,0,0,114,77,1,0,0,114,214,0,0,0, + 114,88,1,0,0,114,221,0,0,0,114,94,1,0,0,114, + 54,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,80,1,0,0,142,5,0, + 0,115,26,0,0,0,8,0,4,2,8,7,8,14,4,4, + 8,2,8,12,10,5,8,48,2,31,10,1,12,17,255,128, + 114,80,1,0,0,99,4,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,144, + 0,0,0,124,0,160,0,100,1,161,1,125,4,124,0,160, + 0,100,2,161,1,125,5,124,4,115,33,124,5,114,18,124, + 5,106,1,125,4,110,15,124,2,124,3,107,2,114,28,116, + 2,124,1,124,2,131,2,125,4,110,5,116,3,124,1,124, + 2,131,2,125,4,124,5,115,42,116,4,124,1,124,2,124, + 4,100,3,141,3,125,5,122,19,124,5,124,0,100,2,60, + 0,124,4,124,0,100,1,60,0,124,2,124,0,100,4,60, + 0,124,3,124,0,100,5,60,0,87,0,100,0,83,0,4, + 0,116,5,121,71,1,0,1,0,1,0,89,0,100,0,83, + 0,119,0,41,6,78,218,10,95,95,108,111,97,100,101,114, + 95,95,218,8,95,95,115,112,101,99,95,95,114,81,1,0, + 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, + 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,151, + 0,0,0,114,27,1,0,0,114,21,1,0,0,114,201,0, + 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, + 2,110,115,114,128,0,0,0,90,8,112,97,116,104,110,97, + 109,101,90,9,99,112,97,116,104,110,97,109,101,114,151,0, + 0,0,114,198,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,14,95,102,105,120,95,117,112,95, + 109,111,100,117,108,101,35,6,0,0,115,38,0,0,0,10, + 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, + 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, + 2,2,254,255,128,114,99,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, + 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, + 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,2, + 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, + 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, + 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, + 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, + 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, + 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, + 32,78,41,7,114,17,1,0,0,114,174,0,0,0,218,18, + 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, + 101,115,114,21,1,0,0,114,113,0,0,0,114,27,1,0, + 0,114,101,0,0,0,41,3,90,10,101,120,116,101,110,115, + 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, + 116,101,99,111,100,101,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,195,0,0,0,58,6,0,0,115,10, + 0,0,0,12,5,8,1,8,1,10,1,255,128,114,195,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, + 124,0,97,0,100,0,83,0,114,121,0,0,0,41,1,114, + 146,0,0,0,41,1,218,17,95,98,111,111,116,115,116,114, + 97,112,95,109,111,100,117,108,101,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,21,95,115,101,116,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,69, + 6,0,0,115,4,0,0,0,8,2,255,128,114,102,1,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, + 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, + 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, + 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, + 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, + 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, + 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, + 10,114,102,1,0,0,114,195,0,0,0,114,16,0,0,0, + 114,69,1,0,0,114,178,0,0,0,114,80,1,0,0,114, + 94,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, + 197,0,0,0,114,63,1,0,0,41,2,114,101,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,8,95,105,110,115,116,97,108,108,74,6,0,0, + 115,10,0,0,0,8,2,6,1,20,1,16,1,255,128,114, + 104,1,0,0,41,1,114,75,0,0,0,41,1,78,41,3, + 78,78,78,41,2,114,0,0,0,0,114,0,0,0,0,41, + 1,84,41,1,78,41,1,78,41,83,114,139,0,0,0,114, + 146,0,0,0,114,174,0,0,0,114,79,0,0,0,114,16, + 0,0,0,114,88,0,0,0,114,171,0,0,0,114,26,0, + 0,0,114,218,0,0,0,90,2,110,116,114,19,0,0,0, + 114,203,0,0,0,90,5,112,111,115,105,120,114,48,0,0, + 0,218,3,97,108,108,114,51,0,0,0,114,52,0,0,0, + 114,73,0,0,0,114,29,0,0,0,90,37,95,67,65,83, + 69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,76, + 65,84,70,79,82,77,83,95,66,89,84,69,83,95,75,69, + 89,114,28,0,0,0,114,30,0,0,0,114,22,0,0,0, + 114,37,0,0,0,114,43,0,0,0,114,46,0,0,0,114, + 54,0,0,0,114,61,0,0,0,114,63,0,0,0,114,67, + 0,0,0,114,68,0,0,0,114,71,0,0,0,114,74,0, + 0,0,114,84,0,0,0,218,4,116,121,112,101,218,8,95, + 95,99,111,100,101,95,95,114,173,0,0,0,114,35,0,0, + 0,114,159,0,0,0,114,34,0,0,0,114,40,0,0,0, + 114,251,0,0,0,114,104,0,0,0,114,100,0,0,0,114, + 113,0,0,0,114,197,0,0,0,114,100,1,0,0,114,219, + 0,0,0,114,101,0,0,0,90,23,68,69,66,85,71,95, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,90,27,79,80,84,73,77,73,90,69,68,95,66,89,84, + 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,109, + 0,0,0,114,114,0,0,0,114,120,0,0,0,114,124,0, + 0,0,114,126,0,0,0,114,147,0,0,0,114,154,0,0, + 0,114,163,0,0,0,114,167,0,0,0,114,169,0,0,0, + 114,176,0,0,0,114,181,0,0,0,114,182,0,0,0,114, + 187,0,0,0,218,6,111,98,106,101,99,116,114,196,0,0, + 0,114,201,0,0,0,114,202,0,0,0,114,222,0,0,0, + 114,236,0,0,0,114,254,0,0,0,114,21,1,0,0,114, + 27,1,0,0,114,17,1,0,0,114,33,1,0,0,114,59, + 1,0,0,114,63,1,0,0,114,80,1,0,0,114,99,1, + 0,0,114,195,0,0,0,114,102,1,0,0,114,104,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,8,60,109,111,100,117,108,101,62,1, + 0,0,0,115,172,0,0,0,4,0,4,22,8,3,8,1, + 8,1,8,1,8,1,10,3,4,1,8,1,10,1,8,2, + 4,3,10,1,6,2,22,2,8,1,10,1,14,1,4,4, + 4,1,2,1,2,1,4,255,8,4,6,16,8,3,8,5, + 8,5,8,6,8,6,8,12,8,10,8,9,8,5,8,7, + 10,9,10,22,0,127,16,26,12,1,4,2,4,1,6,2, + 4,1,10,1,8,2,6,2,8,2,16,2,8,71,8,40, + 8,19,8,12,8,12,8,31,8,17,8,33,8,28,10,24, + 10,13,10,10,8,11,6,14,4,3,2,1,12,255,14,68, + 14,64,16,30,0,127,14,17,18,50,18,45,18,25,14,53, + 14,63,14,49,0,127,14,23,0,127,10,22,8,23,8,11, + 12,5,255,128, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index 9af8d7b10489d..7997df0cc7af5 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -118,116 +118,67 @@ const unsigned char _Py_M__zipimport[] = { 97,109,101,32,111,102,32,116,104,101,10,32,32,32,32,122, 105,112,102,105,108,101,32,116,97,114,103,101,116,101,100,46, 10,32,32,32,32,99,2,0,0,0,0,0,0,0,0,0, - 0,0,8,0,0,0,9,0,0,0,67,0,0,0,115,40, - 1,0,0,116,0,124,1,116,1,131,2,115,28,100,1,100, + 0,0,8,0,0,0,9,0,0,0,67,0,0,0,115,34, + 1,0,0,116,0,124,1,116,1,131,2,115,14,100,1,100, 0,108,2,125,2,124,2,160,3,124,1,161,1,125,1,124, - 1,115,44,116,4,100,2,124,1,100,3,141,2,130,1,116, - 5,114,60,124,1,160,6,116,5,116,7,161,2,125,1,103, - 0,125,3,9,0,122,14,116,8,160,9,124,1,161,1,125, - 4,87,0,110,70,4,0,116,10,116,11,102,2,144,1,121, - 38,1,0,1,0,1,0,116,8,160,12,124,1,161,1,92, - 2,125,5,125,6,124,5,124,1,107,2,114,134,116,4,100, - 5,124,1,100,3,141,2,130,1,124,5,125,1,124,3,160, - 13,124,6,161,1,1,0,89,0,110,28,124,4,106,14,100, - 6,64,0,100,7,107,3,114,178,116,4,100,5,124,1,100, - 3,141,2,130,1,113,182,113,66,122,12,116,15,124,1,25, - 0,125,7,87,0,110,32,4,0,116,16,144,1,121,36,1, - 0,1,0,1,0,116,17,124,1,131,1,125,7,124,7,116, - 15,124,1,60,0,89,0,124,7,124,0,95,18,124,1,124, - 0,95,19,116,8,106,20,124,3,100,0,100,0,100,8,133, - 3,25,0,142,0,124,0,95,21,124,0,106,21,144,1,114, - 32,124,0,4,0,106,21,116,7,55,0,2,0,95,21,100, - 0,83,0,100,0,83,0,119,0,119,0,41,9,78,114,0, - 0,0,0,122,21,97,114,99,104,105,118,101,32,112,97,116, - 104,32,105,115,32,101,109,112,116,121,169,1,218,4,112,97, - 116,104,84,122,14,110,111,116,32,97,32,90,105,112,32,102, - 105,108,101,105,0,240,0,0,105,0,128,0,0,233,255,255, - 255,255,41,22,218,10,105,115,105,110,115,116,97,110,99,101, - 218,3,115,116,114,218,2,111,115,90,8,102,115,100,101,99, - 111,100,101,114,3,0,0,0,218,12,97,108,116,95,112,97, - 116,104,95,115,101,112,218,7,114,101,112,108,97,99,101,218, - 8,112,97,116,104,95,115,101,112,218,19,95,98,111,111,116, - 115,116,114,97,112,95,101,120,116,101,114,110,97,108,90,10, - 95,112,97,116,104,95,115,116,97,116,218,7,79,83,69,114, - 114,111,114,218,10,86,97,108,117,101,69,114,114,111,114,90, - 11,95,112,97,116,104,95,115,112,108,105,116,218,6,97,112, - 112,101,110,100,90,7,115,116,95,109,111,100,101,218,20,95, - 122,105,112,95,100,105,114,101,99,116,111,114,121,95,99,97, - 99,104,101,218,8,75,101,121,69,114,114,111,114,218,15,95, - 114,101,97,100,95,100,105,114,101,99,116,111,114,121,218,6, - 95,102,105,108,101,115,218,7,97,114,99,104,105,118,101,218, - 10,95,112,97,116,104,95,106,111,105,110,218,6,112,114,101, - 102,105,120,41,8,218,4,115,101,108,102,114,13,0,0,0, - 114,17,0,0,0,114,31,0,0,0,90,2,115,116,90,7, - 100,105,114,110,97,109,101,90,8,98,97,115,101,110,97,109, - 101,218,5,102,105,108,101,115,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,8,95,95,105,110,105,116,95, - 95,64,0,0,0,115,70,0,0,0,10,1,8,1,10,1, - 4,1,12,1,4,1,12,1,4,2,2,1,2,1,14,1, - 18,1,14,3,8,1,12,1,4,1,14,1,14,3,12,2, - 2,1,2,240,2,18,12,1,14,1,8,1,10,1,6,1, - 6,1,22,2,8,1,18,1,4,255,2,249,2,239,255,128, - 122,20,122,105,112,105,109,112,111,114,116,101,114,46,95,95, - 105,110,105,116,95,95,78,99,3,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,78,0,0,0,116,0,124,0,124,1,131,2,125,3,124, - 3,100,1,117,1,114,26,124,0,103,0,102,2,83,0,116, - 1,124,0,124,1,131,2,125,4,116,2,124,0,124,4,131, - 2,114,70,100,1,124,0,106,3,155,0,116,4,155,0,124, - 4,155,0,157,3,103,1,102,2,83,0,100,1,103,0,102, - 2,83,0,41,2,97,47,2,0,0,102,105,110,100,95,108, - 111,97,100,101,114,40,102,117,108,108,110,97,109,101,44,32, - 112,97,116,104,61,78,111,110,101,41,32,45,62,32,115,101, - 108,102,44,32,115,116,114,32,111,114,32,78,111,110,101,46, - 10,10,32,32,32,32,32,32,32,32,83,101,97,114,99,104, - 32,102,111,114,32,97,32,109,111,100,117,108,101,32,115,112, - 101,99,105,102,105,101,100,32,98,121,32,39,102,117,108,108, - 110,97,109,101,39,46,32,39,102,117,108,108,110,97,109,101, - 39,32,109,117,115,116,32,98,101,32,116,104,101,10,32,32, - 32,32,32,32,32,32,102,117,108,108,121,32,113,117,97,108, - 105,102,105,101,100,32,40,100,111,116,116,101,100,41,32,109, - 111,100,117,108,101,32,110,97,109,101,46,32,73,116,32,114, - 101,116,117,114,110,115,32,116,104,101,32,122,105,112,105,109, - 112,111,114,116,101,114,10,32,32,32,32,32,32,32,32,105, - 110,115,116,97,110,99,101,32,105,116,115,101,108,102,32,105, - 102,32,116,104,101,32,109,111,100,117,108,101,32,119,97,115, - 32,102,111,117,110,100,44,32,97,32,115,116,114,105,110,103, - 32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,10, - 32,32,32,32,32,32,32,32,102,117,108,108,32,112,97,116, - 104,32,110,97,109,101,32,105,102,32,105,116,39,115,32,112, - 111,115,115,105,98,108,121,32,97,32,112,111,114,116,105,111, - 110,32,111,102,32,97,32,110,97,109,101,115,112,97,99,101, - 32,112,97,99,107,97,103,101,44,10,32,32,32,32,32,32, - 32,32,111,114,32,78,111,110,101,32,111,116,104,101,114,119, - 105,115,101,46,32,84,104,101,32,111,112,116,105,111,110,97, - 108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32, - 105,116,39,115,10,32,32,32,32,32,32,32,32,116,104,101, - 114,101,32,102,111,114,32,99,111,109,112,97,116,105,98,105, - 108,105,116,121,32,119,105,116,104,32,116,104,101,32,105,109, - 112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46, - 10,10,32,32,32,32,32,32,32,32,68,101,112,114,101,99, - 97,116,101,100,32,115,105,110,99,101,32,80,121,116,104,111, - 110,32,51,46,49,48,46,32,85,115,101,32,102,105,110,100, - 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, - 10,32,32,32,32,32,32,32,32,78,41,5,218,16,95,103, - 101,116,95,109,111,100,117,108,101,95,105,110,102,111,218,16, - 95,103,101,116,95,109,111,100,117,108,101,95,112,97,116,104, - 218,7,95,105,115,95,100,105,114,114,29,0,0,0,114,20, - 0,0,0,41,5,114,32,0,0,0,218,8,102,117,108,108, - 110,97,109,101,114,13,0,0,0,218,2,109,105,218,7,109, - 111,100,112,97,116,104,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,11,102,105,110,100,95,108,111,97,100, - 101,114,110,0,0,0,115,16,0,0,0,10,12,8,1,8, - 2,10,7,10,1,24,4,8,2,255,128,122,23,122,105,112, - 105,109,112,111,114,116,101,114,46,102,105,110,100,95,108,111, - 97,100,101,114,99,3,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,67,0,0,0,115,16,0, - 0,0,124,0,160,0,124,1,124,2,161,2,100,1,25,0, - 83,0,41,3,97,203,1,0,0,102,105,110,100,95,109,111, - 100,117,108,101,40,102,117,108,108,110,97,109,101,44,32,112, - 97,116,104,61,78,111,110,101,41,32,45,62,32,115,101,108, - 102,32,111,114,32,78,111,110,101,46,10,10,32,32,32,32, + 1,115,22,116,4,100,2,124,1,100,3,141,2,130,1,116, + 5,114,30,124,1,160,6,116,5,116,7,161,2,125,1,103, + 0,125,3,9,0,122,7,116,8,160,9,124,1,161,1,125, + 4,87,0,110,34,4,0,116,10,116,11,102,2,121,144,1, + 0,1,0,1,0,116,8,160,12,124,1,161,1,92,2,125, + 5,125,6,124,5,124,1,107,2,114,66,116,4,100,5,124, + 1,100,3,141,2,130,1,124,5,125,1,124,3,160,13,124, + 6,161,1,1,0,89,0,110,14,124,4,106,14,100,6,64, + 0,100,7,107,3,114,88,116,4,100,5,124,1,100,3,141, + 2,130,1,113,90,113,33,122,6,116,15,124,1,25,0,125, + 7,87,0,110,15,4,0,116,16,121,143,1,0,1,0,1, + 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60, + 0,89,0,124,7,124,0,95,18,124,1,124,0,95,19,116, + 8,106,20,124,3,100,0,100,0,100,8,133,3,25,0,142, + 0,124,0,95,21,124,0,106,21,114,141,124,0,4,0,106, + 21,116,7,55,0,2,0,95,21,100,0,83,0,100,0,83, + 0,119,0,119,0,41,9,78,114,0,0,0,0,122,21,97, + 114,99,104,105,118,101,32,112,97,116,104,32,105,115,32,101, + 109,112,116,121,169,1,218,4,112,97,116,104,84,122,14,110, + 111,116,32,97,32,90,105,112,32,102,105,108,101,105,0,240, + 0,0,105,0,128,0,0,233,255,255,255,255,41,22,218,10, + 105,115,105,110,115,116,97,110,99,101,218,3,115,116,114,218, + 2,111,115,90,8,102,115,100,101,99,111,100,101,114,3,0, + 0,0,218,12,97,108,116,95,112,97,116,104,95,115,101,112, + 218,7,114,101,112,108,97,99,101,218,8,112,97,116,104,95, + 115,101,112,218,19,95,98,111,111,116,115,116,114,97,112,95, + 101,120,116,101,114,110,97,108,90,10,95,112,97,116,104,95, + 115,116,97,116,218,7,79,83,69,114,114,111,114,218,10,86, + 97,108,117,101,69,114,114,111,114,90,11,95,112,97,116,104, + 95,115,112,108,105,116,218,6,97,112,112,101,110,100,90,7, + 115,116,95,109,111,100,101,218,20,95,122,105,112,95,100,105, + 114,101,99,116,111,114,121,95,99,97,99,104,101,218,8,75, + 101,121,69,114,114,111,114,218,15,95,114,101,97,100,95,100, + 105,114,101,99,116,111,114,121,218,6,95,102,105,108,101,115, + 218,7,97,114,99,104,105,118,101,218,10,95,112,97,116,104, + 95,106,111,105,110,218,6,112,114,101,102,105,120,41,8,218, + 4,115,101,108,102,114,13,0,0,0,114,17,0,0,0,114, + 31,0,0,0,90,2,115,116,90,7,100,105,114,110,97,109, + 101,90,8,98,97,115,101,110,97,109,101,218,5,102,105,108, + 101,115,114,9,0,0,0,114,9,0,0,0,114,10,0,0, + 0,218,8,95,95,105,110,105,116,95,95,64,0,0,0,115, + 70,0,0,0,10,1,8,1,10,1,4,1,12,1,4,1, + 12,1,4,2,2,1,2,1,14,1,16,1,14,3,8,1, + 12,1,4,1,14,1,14,3,12,2,2,1,2,240,2,18, + 12,1,12,1,8,1,10,1,6,1,6,1,22,2,6,1, + 18,1,4,255,2,249,2,239,255,128,122,20,122,105,112,105, + 109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,95, + 78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,4,0,0,0,67,0,0,0,115,78,0,0,0,116, + 0,124,0,124,1,131,2,125,3,124,3,100,1,117,1,114, + 13,124,0,103,0,102,2,83,0,116,1,124,0,124,1,131, + 2,125,4,116,2,124,0,124,4,131,2,114,35,100,1,124, + 0,106,3,155,0,116,4,155,0,124,4,155,0,157,3,103, + 1,102,2,83,0,100,1,103,0,102,2,83,0,41,2,97, + 47,2,0,0,102,105,110,100,95,108,111,97,100,101,114,40, + 102,117,108,108,110,97,109,101,44,32,112,97,116,104,61,78, + 111,110,101,41,32,45,62,32,115,101,108,102,44,32,115,116, + 114,32,111,114,32,78,111,110,101,46,10,10,32,32,32,32, 32,32,32,32,83,101,97,114,99,104,32,102,111,114,32,97, 32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,101, 100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,46, @@ -240,408 +191,456 @@ const unsigned char _Py_M__zipimport[] = { 10,32,32,32,32,32,32,32,32,105,110,115,116,97,110,99, 101,32,105,116,115,101,108,102,32,105,102,32,116,104,101,32, 109,111,100,117,108,101,32,119,97,115,32,102,111,117,110,100, - 44,32,111,114,32,78,111,110,101,32,105,102,32,105,116,32, - 119,97,115,110,39,116,46,10,32,32,32,32,32,32,32,32, - 84,104,101,32,111,112,116,105,111,110,97,108,32,39,112,97, - 116,104,39,32,97,114,103,117,109,101,110,116,32,105,115,32, - 105,103,110,111,114,101,100,32,45,45,32,105,116,39,115,32, - 116,104,101,114,101,32,102,111,114,32,99,111,109,112,97,116, - 105,98,105,108,105,116,121,10,32,32,32,32,32,32,32,32, - 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,101, - 114,32,112,114,111,116,111,99,111,108,46,10,10,32,32,32, + 44,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97, + 105,110,105,110,103,32,116,104,101,10,32,32,32,32,32,32, + 32,32,102,117,108,108,32,112,97,116,104,32,110,97,109,101, + 32,105,102,32,105,116,39,115,32,112,111,115,115,105,98,108, + 121,32,97,32,112,111,114,116,105,111,110,32,111,102,32,97, + 32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,97, + 103,101,44,10,32,32,32,32,32,32,32,32,111,114,32,78, + 111,110,101,32,111,116,104,101,114,119,105,115,101,46,32,84, + 104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,116, + 104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,105, + 103,110,111,114,101,100,32,45,45,32,105,116,39,115,10,32, + 32,32,32,32,32,32,32,116,104,101,114,101,32,102,111,114, + 32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119, + 105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,114, + 32,112,114,111,116,111,99,111,108,46,10,10,32,32,32,32, + 32,32,32,32,68,101,112,114,101,99,97,116,101,100,32,115, + 105,110,99,101,32,80,121,116,104,111,110,32,51,46,49,48, + 46,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,32,32,32,32,32, + 32,32,32,78,41,5,218,16,95,103,101,116,95,109,111,100, + 117,108,101,95,105,110,102,111,218,16,95,103,101,116,95,109, + 111,100,117,108,101,95,112,97,116,104,218,7,95,105,115,95, + 100,105,114,114,29,0,0,0,114,20,0,0,0,41,5,114, + 32,0,0,0,218,8,102,117,108,108,110,97,109,101,114,13, + 0,0,0,218,2,109,105,218,7,109,111,100,112,97,116,104, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, + 11,102,105,110,100,95,108,111,97,100,101,114,110,0,0,0, + 115,16,0,0,0,10,12,8,1,8,2,10,7,10,1,24, + 4,8,2,255,128,122,23,122,105,112,105,109,112,111,114,116, + 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,3, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, + 0,0,0,67,0,0,0,115,16,0,0,0,124,0,160,0, + 124,1,124,2,161,2,100,1,25,0,83,0,41,3,97,203, + 1,0,0,102,105,110,100,95,109,111,100,117,108,101,40,102, + 117,108,108,110,97,109,101,44,32,112,97,116,104,61,78,111, + 110,101,41,32,45,62,32,115,101,108,102,32,111,114,32,78, + 111,110,101,46,10,10,32,32,32,32,32,32,32,32,83,101, + 97,114,99,104,32,102,111,114,32,97,32,109,111,100,117,108, + 101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,39, + 102,117,108,108,110,97,109,101,39,46,32,39,102,117,108,108, + 110,97,109,101,39,32,109,117,115,116,32,98,101,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,117,108,108,121,32, + 113,117,97,108,105,102,105,101,100,32,40,100,111,116,116,101, + 100,41,32,109,111,100,117,108,101,32,110,97,109,101,46,32, + 73,116,32,114,101,116,117,114,110,115,32,116,104,101,32,122, + 105,112,105,109,112,111,114,116,101,114,10,32,32,32,32,32, + 32,32,32,105,110,115,116,97,110,99,101,32,105,116,115,101, + 108,102,32,105,102,32,116,104,101,32,109,111,100,117,108,101, + 32,119,97,115,32,102,111,117,110,100,44,32,111,114,32,78, + 111,110,101,32,105,102,32,105,116,32,119,97,115,110,39,116, + 46,10,32,32,32,32,32,32,32,32,84,104,101,32,111,112, + 116,105,111,110,97,108,32,39,112,97,116,104,39,32,97,114, + 103,117,109,101,110,116,32,105,115,32,105,103,110,111,114,101, + 100,32,45,45,32,105,116,39,115,32,116,104,101,114,101,32, + 102,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116, + 121,10,32,32,32,32,32,32,32,32,119,105,116,104,32,116, + 104,101,32,105,109,112,111,114,116,101,114,32,112,114,111,116, + 111,99,111,108,46,10,10,32,32,32,32,32,32,32,32,68, + 101,112,114,101,99,97,116,101,100,32,115,105,110,99,101,32, + 80,121,116,104,111,110,32,51,46,49,48,46,32,85,115,101, + 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, + 116,101,97,100,46,10,32,32,32,32,32,32,32,32,114,0, + 0,0,0,78,41,1,114,41,0,0,0,41,3,114,32,0, + 0,0,114,38,0,0,0,114,13,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,11,102,105,110, + 100,95,109,111,100,117,108,101,144,0,0,0,115,4,0,0, + 0,16,11,255,128,122,23,122,105,112,105,109,112,111,114,116, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,3, + 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5, + 0,0,0,67,0,0,0,115,108,0,0,0,116,0,124,0, + 124,1,131,2,125,3,124,3,100,1,117,1,114,17,116,1, + 106,2,124,1,124,0,124,3,100,2,141,3,83,0,116,3, + 124,0,124,1,131,2,125,4,116,4,124,0,124,4,131,2, + 114,52,124,0,106,5,155,0,116,6,155,0,124,4,155,0, + 157,3,125,5,116,1,106,7,124,1,100,1,100,3,100,4, + 141,3,125,6,124,6,106,8,160,9,124,5,161,1,1,0, + 124,6,83,0,100,1,83,0,41,5,122,107,67,114,101,97, + 116,101,32,97,32,77,111,100,117,108,101,83,112,101,99,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,116,117,114,110,115,32,78,111,110,101,32, + 105,102,32,116,104,101,32,109,111,100,117,108,101,32,99,97, + 110,110,111,116,32,98,101,32,102,111,117,110,100,46,10,32, + 32,32,32,32,32,32,32,78,41,1,218,10,105,115,95,112, + 97,99,107,97,103,101,84,41,3,218,4,110,97,109,101,90, + 6,108,111,97,100,101,114,114,43,0,0,0,41,10,114,35, + 0,0,0,218,10,95,98,111,111,116,115,116,114,97,112,90, + 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, + 114,114,36,0,0,0,114,37,0,0,0,114,29,0,0,0, + 114,20,0,0,0,90,10,77,111,100,117,108,101,83,112,101, + 99,90,26,115,117,98,109,111,100,117,108,101,95,115,101,97, + 114,99,104,95,108,111,99,97,116,105,111,110,115,114,24,0, + 0,0,41,7,114,32,0,0,0,114,38,0,0,0,90,6, + 116,97,114,103,101,116,90,11,109,111,100,117,108,101,95,105, + 110,102,111,114,40,0,0,0,114,13,0,0,0,90,4,115, + 112,101,99,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,157,0,0, + 0,115,26,0,0,0,10,5,8,1,16,1,10,7,10,1, + 18,4,8,1,2,1,6,255,12,2,4,1,4,2,255,128, + 122,21,122,105,112,105,109,112,111,114,116,101,114,46,102,105, + 110,100,95,115,112,101,99,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,0, + 115,20,0,0,0,116,0,124,0,124,1,131,2,92,3,125, + 2,125,3,125,4,124,2,83,0,41,2,122,166,103,101,116, + 95,99,111,100,101,40,102,117,108,108,110,97,109,101,41,32, + 45,62,32,99,111,100,101,32,111,98,106,101,99,116,46,10, + 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,32, + 116,104,101,32,99,111,100,101,32,111,98,106,101,99,116,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,46,32,82,97,105,115,101,32, + 90,105,112,73,109,112,111,114,116,69,114,114,111,114,10,32, + 32,32,32,32,32,32,32,105,102,32,116,104,101,32,109,111, + 100,117,108,101,32,99,111,117,108,100,110,39,116,32,98,101, + 32,105,109,112,111,114,116,101,100,46,10,32,32,32,32,32, + 32,32,32,78,169,1,218,16,95,103,101,116,95,109,111,100, + 117,108,101,95,99,111,100,101,169,5,114,32,0,0,0,114, + 38,0,0,0,218,4,99,111,100,101,218,9,105,115,112,97, + 99,107,97,103,101,114,40,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,99, + 111,100,101,184,0,0,0,115,6,0,0,0,16,6,4,1, + 255,128,122,20,122,105,112,105,109,112,111,114,116,101,114,46, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,8,0,0,0,67,0,0, + 0,115,112,0,0,0,116,0,114,8,124,1,160,1,116,0, + 116,2,161,2,125,1,124,1,125,2,124,1,160,3,124,0, + 106,4,116,2,23,0,161,1,114,29,124,1,116,5,124,0, + 106,4,116,2,23,0,131,1,100,1,133,2,25,0,125,2, + 122,7,124,0,106,6,124,2,25,0,125,3,87,0,110,12, + 4,0,116,7,121,55,1,0,1,0,1,0,116,8,100,2, + 100,3,124,2,131,3,130,1,116,9,124,0,106,4,124,3, + 131,2,83,0,119,0,41,4,122,154,103,101,116,95,100,97, + 116,97,40,112,97,116,104,110,97,109,101,41,32,45,62,32, + 115,116,114,105,110,103,32,119,105,116,104,32,102,105,108,101, + 32,100,97,116,97,46,10,10,32,32,32,32,32,32,32,32, + 82,101,116,117,114,110,32,116,104,101,32,100,97,116,97,32, + 97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32, + 39,112,97,116,104,110,97,109,101,39,46,32,82,97,105,115, + 101,32,79,83,69,114,114,111,114,32,105,102,10,32,32,32, + 32,32,32,32,32,116,104,101,32,102,105,108,101,32,119,97, + 115,110,39,116,32,102,111,117,110,100,46,10,32,32,32,32, + 32,32,32,32,78,114,0,0,0,0,218,0,41,10,114,18, + 0,0,0,114,19,0,0,0,114,20,0,0,0,218,10,115, + 116,97,114,116,115,119,105,116,104,114,29,0,0,0,218,3, + 108,101,110,114,28,0,0,0,114,26,0,0,0,114,22,0, + 0,0,218,9,95,103,101,116,95,100,97,116,97,41,4,114, + 32,0,0,0,218,8,112,97,116,104,110,97,109,101,90,3, + 107,101,121,218,9,116,111,99,95,101,110,116,114,121,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,103, + 101,116,95,100,97,116,97,194,0,0,0,115,24,0,0,0, + 4,6,12,1,4,2,16,1,22,1,2,2,14,1,12,1, + 12,1,12,1,2,254,255,128,122,20,122,105,112,105,109,112, + 111,114,116,101,114,46,103,101,116,95,100,97,116,97,99,2, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, + 0,0,0,67,0,0,0,115,20,0,0,0,116,0,124,0, + 124,1,131,2,92,3,125,2,125,3,125,4,124,4,83,0, + 41,2,122,165,103,101,116,95,102,105,108,101,110,97,109,101, + 40,102,117,108,108,110,97,109,101,41,32,45,62,32,102,105, + 108,101,110,97,109,101,32,115,116,114,105,110,103,46,10,10, + 32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116, + 104,101,32,102,105,108,101,110,97,109,101,32,102,111,114,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,117,108,101,32,111,114,32,114,97,105,115,101,32,90,105, + 112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,32, + 32,32,32,32,32,105,102,32,105,116,32,99,111,117,108,100, + 110,39,116,32,98,101,32,105,109,112,111,114,116,101,100,46, + 10,32,32,32,32,32,32,32,32,78,114,47,0,0,0,114, + 49,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,218,12,103,101,116,95,102,105,108,101,110,97,109, + 101,215,0,0,0,115,6,0,0,0,16,8,4,1,255,128, + 122,24,122,105,112,105,109,112,111,114,116,101,114,46,103,101, + 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, + 0,0,0,115,126,0,0,0,116,0,124,0,124,1,131,2, + 125,2,124,2,100,1,117,0,114,18,116,1,100,2,124,1, + 155,2,157,2,124,1,100,3,141,2,130,1,116,2,124,0, + 124,1,131,2,125,3,124,2,114,32,116,3,160,4,124,3, + 100,4,161,2,125,4,110,5,124,3,155,0,100,5,157,2, + 125,4,122,7,124,0,106,5,124,4,25,0,125,5,87,0, + 110,9,4,0,116,6,121,62,1,0,1,0,1,0,89,0, + 100,1,83,0,116,7,124,0,106,8,124,5,131,2,160,9, + 161,0,83,0,119,0,41,6,122,253,103,101,116,95,115,111, + 117,114,99,101,40,102,117,108,108,110,97,109,101,41,32,45, + 62,32,115,111,117,114,99,101,32,115,116,114,105,110,103,46, + 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, + 32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,46,32,82,97,105,115,101, + 32,90,105,112,73,109,112,111,114,116,69,114,114,111,114,10, + 32,32,32,32,32,32,32,32,105,102,32,116,104,101,32,109, + 111,100,117,108,101,32,99,111,117,108,100,110,39,116,32,98, + 101,32,102,111,117,110,100,44,32,114,101,116,117,114,110,32, + 78,111,110,101,32,105,102,32,116,104,101,32,97,114,99,104, + 105,118,101,32,100,111,101,115,10,32,32,32,32,32,32,32, + 32,99,111,110,116,97,105,110,32,116,104,101,32,109,111,100, + 117,108,101,44,32,98,117,116,32,104,97,115,32,110,111,32, + 115,111,117,114,99,101,32,102,111,114,32,105,116,46,10,32, + 32,32,32,32,32,32,32,78,250,18,99,97,110,39,116,32, + 102,105,110,100,32,109,111,100,117,108,101,32,169,1,114,44, + 0,0,0,250,11,95,95,105,110,105,116,95,95,46,112,121, + 250,3,46,112,121,41,10,114,35,0,0,0,114,3,0,0, + 0,114,36,0,0,0,114,21,0,0,0,114,30,0,0,0, + 114,28,0,0,0,114,26,0,0,0,114,56,0,0,0,114, + 29,0,0,0,218,6,100,101,99,111,100,101,41,6,114,32, + 0,0,0,114,38,0,0,0,114,39,0,0,0,114,13,0, + 0,0,218,8,102,117,108,108,112,97,116,104,114,58,0,0, + 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 218,10,103,101,116,95,115,111,117,114,99,101,227,0,0,0, + 115,28,0,0,0,10,7,8,1,18,1,10,2,4,1,14, + 1,10,2,2,2,14,1,12,1,6,2,16,1,2,253,255, + 128,122,22,122,105,112,105,109,112,111,114,116,101,114,46,103, + 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, + 0,0,115,40,0,0,0,116,0,124,0,124,1,131,2,125, + 2,124,2,100,1,117,0,114,18,116,1,100,2,124,1,155, + 2,157,2,124,1,100,3,141,2,130,1,124,2,83,0,41, + 4,122,171,105,115,95,112,97,99,107,97,103,101,40,102,117, + 108,108,110,97,109,101,41,32,45,62,32,98,111,111,108,46, + 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, + 32,84,114,117,101,32,105,102,32,116,104,101,32,109,111,100, + 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121, + 32,102,117,108,108,110,97,109,101,32,105,115,32,97,32,112, + 97,99,107,97,103,101,46,10,32,32,32,32,32,32,32,32, + 82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69, + 114,114,111,114,32,105,102,32,116,104,101,32,109,111,100,117, + 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102, + 111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,114, + 61,0,0,0,114,62,0,0,0,41,2,114,35,0,0,0, + 114,3,0,0,0,41,3,114,32,0,0,0,114,38,0,0, + 0,114,39,0,0,0,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,114,43,0,0,0,253,0,0,0,115,10, + 0,0,0,10,6,8,1,18,1,4,1,255,128,122,22,122, + 105,112,105,109,112,111,114,116,101,114,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,252, + 0,0,0,100,1,125,2,116,0,160,1,124,2,116,2,161, + 2,1,0,116,3,124,0,124,1,131,2,92,3,125,3,125, + 4,125,5,116,4,106,5,160,6,124,1,161,1,125,6,124, + 6,100,2,117,0,115,31,116,7,124,6,116,8,131,2,115, + 40,116,8,124,1,131,1,125,6,124,6,116,4,106,5,124, + 1,60,0,124,0,124,6,95,9,122,42,124,4,114,62,116, + 10,124,0,124,1,131,2,125,7,116,11,160,12,124,0,106, + 13,124,7,161,2,125,8,124,8,103,1,124,6,95,14,116, + 15,124,6,100,3,131,2,115,70,116,16,124,6,95,16,116, + 11,160,17,124,6,106,18,124,1,124,5,161,3,1,0,116, + 19,124,3,124,6,106,18,131,2,1,0,87,0,110,8,1, + 0,1,0,1,0,116,4,106,5,124,1,61,0,130,0,122, + 7,116,4,106,5,124,1,25,0,125,6,87,0,110,14,4, + 0,116,20,121,125,1,0,1,0,1,0,116,21,100,4,124, + 1,155,2,100,5,157,3,131,1,130,1,116,22,160,23,100, + 6,124,1,124,5,161,3,1,0,124,6,83,0,119,0,41, + 7,97,64,1,0,0,108,111,97,100,95,109,111,100,117,108, + 101,40,102,117,108,108,110,97,109,101,41,32,45,62,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 76,111,97,100,32,116,104,101,32,109,111,100,117,108,101,32, + 115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,117, + 108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,97, + 109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,10, + 32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,117, + 97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,41, + 32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,116, + 32,114,101,116,117,114,110,115,32,116,104,101,32,105,109,112, + 111,114,116,101,100,10,32,32,32,32,32,32,32,32,109,111, + 100,117,108,101,44,32,111,114,32,114,97,105,115,101,115,32, + 90,105,112,73,109,112,111,114,116,69,114,114,111,114,32,105, + 102,32,105,116,32,99,111,117,108,100,32,110,111,116,32,98, + 101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,32, 32,32,32,32,32,68,101,112,114,101,99,97,116,101,100,32, 115,105,110,99,101,32,80,121,116,104,111,110,32,51,46,49, - 48,46,32,85,115,101,32,102,105,110,100,95,115,112,101,99, - 40,41,32,105,110,115,116,101,97,100,46,10,32,32,32,32, - 32,32,32,32,114,0,0,0,0,78,41,1,114,41,0,0, - 0,41,3,114,32,0,0,0,114,38,0,0,0,114,13,0, - 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,11,102,105,110,100,95,109,111,100,117,108,101,144,0, - 0,0,115,4,0,0,0,16,11,255,128,122,23,122,105,112, - 105,109,112,111,114,116,101,114,46,102,105,110,100,95,109,111, - 100,117,108,101,99,3,0,0,0,0,0,0,0,0,0,0, - 0,7,0,0,0,5,0,0,0,67,0,0,0,115,108,0, - 0,0,116,0,124,0,124,1,131,2,125,3,124,3,100,1, - 117,1,114,34,116,1,106,2,124,1,124,0,124,3,100,2, - 141,3,83,0,116,3,124,0,124,1,131,2,125,4,116,4, - 124,0,124,4,131,2,114,104,124,0,106,5,155,0,116,6, - 155,0,124,4,155,0,157,3,125,5,116,1,106,7,124,1, - 100,1,100,3,100,4,141,3,125,6,124,6,106,8,160,9, - 124,5,161,1,1,0,124,6,83,0,100,1,83,0,41,5, - 122,107,67,114,101,97,116,101,32,97,32,77,111,100,117,108, - 101,83,112,101,99,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,115, - 32,78,111,110,101,32,105,102,32,116,104,101,32,109,111,100, - 117,108,101,32,99,97,110,110,111,116,32,98,101,32,102,111, - 117,110,100,46,10,32,32,32,32,32,32,32,32,78,41,1, - 218,10,105,115,95,112,97,99,107,97,103,101,84,41,3,218, - 4,110,97,109,101,90,6,108,111,97,100,101,114,114,43,0, - 0,0,41,10,114,35,0,0,0,218,10,95,98,111,111,116, - 115,116,114,97,112,90,16,115,112,101,99,95,102,114,111,109, - 95,108,111,97,100,101,114,114,36,0,0,0,114,37,0,0, - 0,114,29,0,0,0,114,20,0,0,0,90,10,77,111,100, - 117,108,101,83,112,101,99,90,26,115,117,98,109,111,100,117, - 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, - 111,110,115,114,24,0,0,0,41,7,114,32,0,0,0,114, - 38,0,0,0,90,6,116,97,114,103,101,116,90,11,109,111, - 100,117,108,101,95,105,110,102,111,114,40,0,0,0,114,13, - 0,0,0,90,4,115,112,101,99,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,218,9,102,105,110,100,95,115, - 112,101,99,157,0,0,0,115,26,0,0,0,10,5,8,1, - 16,1,10,7,10,1,18,4,8,1,2,1,6,255,12,2, - 4,1,4,2,255,128,122,21,122,105,112,105,109,112,111,114, - 116,101,114,46,102,105,110,100,95,115,112,101,99,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, - 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,124, - 1,131,2,92,3,125,2,125,3,125,4,124,2,83,0,41, - 2,122,166,103,101,116,95,99,111,100,101,40,102,117,108,108, - 110,97,109,101,41,32,45,62,32,99,111,100,101,32,111,98, - 106,101,99,116,46,10,10,32,32,32,32,32,32,32,32,82, - 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, - 98,106,101,99,116,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,46,32, - 82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69, - 114,114,111,114,10,32,32,32,32,32,32,32,32,105,102,32, - 116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100, - 110,39,116,32,98,101,32,105,109,112,111,114,116,101,100,46, - 10,32,32,32,32,32,32,32,32,78,169,1,218,16,95,103, - 101,116,95,109,111,100,117,108,101,95,99,111,100,101,169,5, - 114,32,0,0,0,114,38,0,0,0,218,4,99,111,100,101, - 218,9,105,115,112,97,99,107,97,103,101,114,40,0,0,0, - 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, - 8,103,101,116,95,99,111,100,101,184,0,0,0,115,6,0, - 0,0,16,6,4,1,255,128,122,20,122,105,112,105,109,112, - 111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8, - 0,0,0,67,0,0,0,115,112,0,0,0,116,0,114,16, - 124,1,160,1,116,0,116,2,161,2,125,1,124,1,125,2, - 124,1,160,3,124,0,106,4,116,2,23,0,161,1,114,58, - 124,1,116,5,124,0,106,4,116,2,23,0,131,1,100,1, - 133,2,25,0,125,2,122,14,124,0,106,6,124,2,25,0, - 125,3,87,0,110,24,4,0,116,7,121,110,1,0,1,0, - 1,0,116,8,100,2,100,3,124,2,131,3,130,1,116,9, - 124,0,106,4,124,3,131,2,83,0,119,0,41,4,122,154, - 103,101,116,95,100,97,116,97,40,112,97,116,104,110,97,109, - 101,41,32,45,62,32,115,116,114,105,110,103,32,119,105,116, - 104,32,102,105,108,101,32,100,97,116,97,46,10,10,32,32, - 32,32,32,32,32,32,82,101,116,117,114,110,32,116,104,101, - 32,100,97,116,97,32,97,115,115,111,99,105,97,116,101,100, - 32,119,105,116,104,32,39,112,97,116,104,110,97,109,101,39, - 46,32,82,97,105,115,101,32,79,83,69,114,114,111,114,32, - 105,102,10,32,32,32,32,32,32,32,32,116,104,101,32,102, - 105,108,101,32,119,97,115,110,39,116,32,102,111,117,110,100, + 48,46,32,85,115,101,32,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,105,110,115,116,101,97,100,46,10,32,32, + 32,32,32,32,32,32,122,114,122,105,112,105,109,112,111,114, + 116,46,122,105,112,105,109,112,111,114,116,101,114,46,108,111, + 97,100,95,109,111,100,117,108,101,40,41,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, + 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, + 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,59, + 32,117,115,101,32,101,120,101,99,95,109,111,100,117,108,101, + 40,41,32,105,110,115,116,101,97,100,78,218,12,95,95,98, + 117,105,108,116,105,110,115,95,95,122,14,76,111,97,100,101, + 100,32,109,111,100,117,108,101,32,122,25,32,110,111,116,32, + 102,111,117,110,100,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,122,30,105,109,112,111,114,116,32,123,125,32, + 35,32,108,111,97,100,101,100,32,102,114,111,109,32,90,105, + 112,32,123,125,41,24,218,9,95,119,97,114,110,105,110,103, + 115,90,4,119,97,114,110,218,18,68,101,112,114,101,99,97, + 116,105,111,110,87,97,114,110,105,110,103,114,48,0,0,0, + 218,3,115,121,115,218,7,109,111,100,117,108,101,115,218,3, + 103,101,116,114,15,0,0,0,218,12,95,109,111,100,117,108, + 101,95,116,121,112,101,218,10,95,95,108,111,97,100,101,114, + 95,95,114,36,0,0,0,114,21,0,0,0,114,30,0,0, + 0,114,29,0,0,0,90,8,95,95,112,97,116,104,95,95, + 218,7,104,97,115,97,116,116,114,114,68,0,0,0,90,14, + 95,102,105,120,95,117,112,95,109,111,100,117,108,101,218,8, + 95,95,100,105,99,116,95,95,218,4,101,120,101,99,114,26, + 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, + 114,45,0,0,0,218,16,95,118,101,114,98,111,115,101,95, + 109,101,115,115,97,103,101,41,9,114,32,0,0,0,114,38, + 0,0,0,218,3,109,115,103,114,50,0,0,0,114,51,0, + 0,0,114,40,0,0,0,90,3,109,111,100,114,13,0,0, + 0,114,66,0,0,0,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,11,108,111,97,100,95,109,111,100,117, + 108,101,10,1,0,0,115,56,0,0,0,4,9,12,2,16, + 1,12,1,18,1,8,1,10,1,6,1,2,2,4,1,10, + 3,14,1,8,1,10,2,6,1,16,1,16,1,6,1,8, + 1,2,1,2,2,14,1,12,1,16,1,14,1,4,1,2, + 253,255,128,122,23,122,105,112,105,109,112,111,114,116,101,114, + 46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, + 0,67,0,0,0,115,64,0,0,0,122,10,124,0,160,0, + 124,1,161,1,115,9,87,0,100,1,83,0,87,0,110,9, + 4,0,116,1,121,31,1,0,1,0,1,0,89,0,100,1, + 83,0,100,2,100,3,108,2,109,3,125,2,1,0,124,2, + 124,0,124,1,131,2,83,0,119,0,41,4,122,204,82,101, + 116,117,114,110,32,116,104,101,32,82,101,115,111,117,114,99, + 101,82,101,97,100,101,114,32,102,111,114,32,97,32,112,97, + 99,107,97,103,101,32,105,110,32,97,32,122,105,112,32,102, + 105,108,101,46,10,10,32,32,32,32,32,32,32,32,73,102, + 32,39,102,117,108,108,110,97,109,101,39,32,105,115,32,97, + 32,112,97,99,107,97,103,101,32,119,105,116,104,105,110,32, + 116,104,101,32,122,105,112,32,102,105,108,101,44,32,114,101, + 116,117,114,110,32,116,104,101,10,32,32,32,32,32,32,32, + 32,39,82,101,115,111,117,114,99,101,82,101,97,100,101,114, + 39,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101, + 32,112,97,99,107,97,103,101,46,32,32,79,116,104,101,114, + 119,105,115,101,32,114,101,116,117,114,110,32,78,111,110,101, 46,10,32,32,32,32,32,32,32,32,78,114,0,0,0,0, - 218,0,41,10,114,18,0,0,0,114,19,0,0,0,114,20, - 0,0,0,218,10,115,116,97,114,116,115,119,105,116,104,114, - 29,0,0,0,218,3,108,101,110,114,28,0,0,0,114,26, - 0,0,0,114,22,0,0,0,218,9,95,103,101,116,95,100, - 97,116,97,41,4,114,32,0,0,0,218,8,112,97,116,104, - 110,97,109,101,90,3,107,101,121,218,9,116,111,99,95,101, - 110,116,114,121,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,8,103,101,116,95,100,97,116,97,194,0,0, - 0,115,24,0,0,0,4,6,12,1,4,2,16,1,22,1, - 2,2,14,1,12,1,12,1,12,1,2,254,255,128,122,20, - 122,105,112,105,109,112,111,114,116,101,114,46,103,101,116,95, - 100,97,116,97,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,67,0,0,0,115,20,0, - 0,0,116,0,124,0,124,1,131,2,92,3,125,2,125,3, - 125,4,124,4,83,0,41,2,122,165,103,101,116,95,102,105, - 108,101,110,97,109,101,40,102,117,108,108,110,97,109,101,41, - 32,45,62,32,102,105,108,101,110,97,109,101,32,115,116,114, - 105,110,103,46,10,10,32,32,32,32,32,32,32,32,82,101, - 116,117,114,110,32,116,104,101,32,102,105,108,101,110,97,109, - 101,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,117,108,101,32,111,114,32,114,97, - 105,115,101,32,90,105,112,73,109,112,111,114,116,69,114,114, - 111,114,10,32,32,32,32,32,32,32,32,105,102,32,105,116, - 32,99,111,117,108,100,110,39,116,32,98,101,32,105,109,112, - 111,114,116,101,100,46,10,32,32,32,32,32,32,32,32,78, - 114,47,0,0,0,114,49,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,12,103,101,116,95,102, - 105,108,101,110,97,109,101,215,0,0,0,115,6,0,0,0, - 16,8,4,1,255,128,122,24,122,105,112,105,109,112,111,114, - 116,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,8,0,0,0,67,0,0,0,115,126,0,0,0,116,0, - 124,0,124,1,131,2,125,2,124,2,100,1,117,0,114,36, - 116,1,100,2,124,1,155,2,157,2,124,1,100,3,141,2, - 130,1,116,2,124,0,124,1,131,2,125,3,124,2,114,64, - 116,3,160,4,124,3,100,4,161,2,125,4,110,10,124,3, - 155,0,100,5,157,2,125,4,122,14,124,0,106,5,124,4, - 25,0,125,5,87,0,110,18,4,0,116,6,121,124,1,0, - 1,0,1,0,89,0,100,1,83,0,116,7,124,0,106,8, - 124,5,131,2,160,9,161,0,83,0,119,0,41,6,122,253, - 103,101,116,95,115,111,117,114,99,101,40,102,117,108,108,110, - 97,109,101,41,32,45,62,32,115,111,117,114,99,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,32, - 82,101,116,117,114,110,32,116,104,101,32,115,111,117,114,99, - 101,32,99,111,100,101,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,46, - 32,82,97,105,115,101,32,90,105,112,73,109,112,111,114,116, - 69,114,114,111,114,10,32,32,32,32,32,32,32,32,105,102, - 32,116,104,101,32,109,111,100,117,108,101,32,99,111,117,108, - 100,110,39,116,32,98,101,32,102,111,117,110,100,44,32,114, - 101,116,117,114,110,32,78,111,110,101,32,105,102,32,116,104, - 101,32,97,114,99,104,105,118,101,32,100,111,101,115,10,32, - 32,32,32,32,32,32,32,99,111,110,116,97,105,110,32,116, - 104,101,32,109,111,100,117,108,101,44,32,98,117,116,32,104, - 97,115,32,110,111,32,115,111,117,114,99,101,32,102,111,114, - 32,105,116,46,10,32,32,32,32,32,32,32,32,78,250,18, - 99,97,110,39,116,32,102,105,110,100,32,109,111,100,117,108, - 101,32,169,1,114,44,0,0,0,250,11,95,95,105,110,105, - 116,95,95,46,112,121,250,3,46,112,121,41,10,114,35,0, - 0,0,114,3,0,0,0,114,36,0,0,0,114,21,0,0, - 0,114,30,0,0,0,114,28,0,0,0,114,26,0,0,0, - 114,56,0,0,0,114,29,0,0,0,218,6,100,101,99,111, - 100,101,41,6,114,32,0,0,0,114,38,0,0,0,114,39, - 0,0,0,114,13,0,0,0,218,8,102,117,108,108,112,97, - 116,104,114,58,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,10,0,0,0,218,10,103,101,116,95,115,111,117,114, - 99,101,227,0,0,0,115,28,0,0,0,10,7,8,1,18, - 1,10,2,4,1,14,1,10,2,2,2,14,1,12,1,6, - 2,16,1,2,253,255,128,122,22,122,105,112,105,109,112,111, - 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 41,1,218,9,90,105,112,82,101,97,100,101,114,41,4,114, + 43,0,0,0,114,3,0,0,0,90,17,105,109,112,111,114, + 116,108,105,98,46,114,101,97,100,101,114,115,114,83,0,0, + 0,41,3,114,32,0,0,0,114,38,0,0,0,114,83,0, + 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, + 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, + 114,101,97,100,101,114,53,1,0,0,115,20,0,0,0,2, + 6,10,1,6,1,4,255,12,2,6,1,12,1,10,1,2, + 253,255,128,122,31,122,105,112,105,109,112,111,114,116,101,114, + 46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, + 97,100,101,114,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,8,0,0,0,67,0,0,0,115,72,0, + 0,0,122,15,116,0,124,0,106,1,131,1,124,0,95,2, + 124,0,106,2,116,3,124,0,106,1,60,0,87,0,100,1, + 83,0,4,0,116,4,121,35,1,0,1,0,1,0,116,3, + 160,5,124,0,106,1,100,1,161,2,1,0,100,1,124,0, + 95,2,89,0,100,1,83,0,119,0,41,2,122,41,82,101, + 108,111,97,100,32,116,104,101,32,102,105,108,101,32,100,97, + 116,97,32,111,102,32,116,104,101,32,97,114,99,104,105,118, + 101,32,112,97,116,104,46,78,41,6,114,27,0,0,0,114, + 29,0,0,0,114,28,0,0,0,114,25,0,0,0,114,3, + 0,0,0,218,3,112,111,112,169,1,114,32,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,17, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,68,1,0,0,115,16,0,0,0,2,2,12,1,18,1, + 12,1,14,1,12,1,2,254,255,128,122,29,122,105,112,105, + 109,112,111,114,116,101,114,46,105,110,118,97,108,105,100,97, + 116,101,95,99,97,99,104,101,115,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0, + 0,0,115,24,0,0,0,100,1,124,0,106,0,155,0,116, + 1,155,0,124,0,106,2,155,0,100,2,157,5,83,0,41, + 3,78,122,21,60,122,105,112,105,109,112,111,114,116,101,114, + 32,111,98,106,101,99,116,32,34,122,2,34,62,41,3,114, + 29,0,0,0,114,20,0,0,0,114,31,0,0,0,114,86, + 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,218,8,95,95,114,101,112,114,95,95,78,1,0,0, + 115,4,0,0,0,24,1,255,128,122,20,122,105,112,105,109, + 112,111,114,116,101,114,46,95,95,114,101,112,114,95,95,41, + 1,78,41,1,78,41,1,78,41,17,114,6,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,7,95,95,100,111,99, + 95,95,114,34,0,0,0,114,41,0,0,0,114,42,0,0, + 0,114,46,0,0,0,114,52,0,0,0,114,59,0,0,0, + 114,60,0,0,0,114,67,0,0,0,114,43,0,0,0,114, + 82,0,0,0,114,84,0,0,0,114,87,0,0,0,114,88, + 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,4,0,0,0,46,0,0,0, + 115,32,0,0,0,8,0,4,1,8,17,10,46,10,34,10, + 13,8,27,8,10,8,21,8,12,8,26,8,13,8,43,8, + 15,12,10,255,128,122,12,95,95,105,110,105,116,95,95,46, + 112,121,99,84,114,63,0,0,0,70,41,3,122,4,46,112, + 121,99,84,70,41,3,114,64,0,0,0,70,70,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,67,0,0,0,115,20,0,0,0,124,0,106,0,124, + 1,160,1,100,1,161,1,100,2,25,0,23,0,83,0,41, + 3,78,218,1,46,233,2,0,0,0,41,2,114,31,0,0, + 0,218,10,114,112,97,114,116,105,116,105,111,110,41,2,114, + 32,0,0,0,114,38,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,114,36,0,0,0,96,1,0, + 0,115,4,0,0,0,20,1,255,128,114,36,0,0,0,99, 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 4,0,0,0,67,0,0,0,115,40,0,0,0,116,0,124, - 0,124,1,131,2,125,2,124,2,100,1,117,0,114,36,116, - 1,100,2,124,1,155,2,157,2,124,1,100,3,141,2,130, - 1,124,2,83,0,41,4,122,171,105,115,95,112,97,99,107, - 97,103,101,40,102,117,108,108,110,97,109,101,41,32,45,62, - 32,98,111,111,108,46,10,10,32,32,32,32,32,32,32,32, - 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116, - 104,101,32,109,111,100,117,108,101,32,115,112,101,99,105,102, - 105,101,100,32,98,121,32,102,117,108,108,110,97,109,101,32, - 105,115,32,97,32,112,97,99,107,97,103,101,46,10,32,32, - 32,32,32,32,32,32,82,97,105,115,101,32,90,105,112,73, - 109,112,111,114,116,69,114,114,111,114,32,105,102,32,116,104, - 101,32,109,111,100,117,108,101,32,99,111,117,108,100,110,39, - 116,32,98,101,32,102,111,117,110,100,46,10,32,32,32,32, - 32,32,32,32,78,114,61,0,0,0,114,62,0,0,0,41, - 2,114,35,0,0,0,114,3,0,0,0,41,3,114,32,0, - 0,0,114,38,0,0,0,114,39,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,114,43,0,0,0, - 253,0,0,0,115,10,0,0,0,10,6,8,1,18,1,4, - 1,255,128,122,22,122,105,112,105,109,112,111,114,116,101,114, - 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0, - 67,0,0,0,115,252,0,0,0,100,1,125,2,116,0,160, - 1,124,2,116,2,161,2,1,0,116,3,124,0,124,1,131, - 2,92,3,125,3,125,4,125,5,116,4,106,5,160,6,124, - 1,161,1,125,6,124,6,100,2,117,0,115,62,116,7,124, - 6,116,8,131,2,115,80,116,8,124,1,131,1,125,6,124, - 6,116,4,106,5,124,1,60,0,124,0,124,6,95,9,122, - 84,124,4,114,124,116,10,124,0,124,1,131,2,125,7,116, - 11,160,12,124,0,106,13,124,7,161,2,125,8,124,8,103, - 1,124,6,95,14,116,15,124,6,100,3,131,2,115,140,116, - 16,124,6,95,16,116,11,160,17,124,6,106,18,124,1,124, - 5,161,3,1,0,116,19,124,3,124,6,106,18,131,2,1, - 0,87,0,110,16,1,0,1,0,1,0,116,4,106,5,124, - 1,61,0,130,0,122,14,116,4,106,5,124,1,25,0,125, - 6,87,0,110,28,4,0,116,20,121,250,1,0,1,0,1, - 0,116,21,100,4,124,1,155,2,100,5,157,3,131,1,130, - 1,116,22,160,23,100,6,124,1,124,5,161,3,1,0,124, - 6,83,0,119,0,41,7,97,64,1,0,0,108,111,97,100, - 95,109,111,100,117,108,101,40,102,117,108,108,110,97,109,101, - 41,32,45,62,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,76,111,97,100,32,116,104,101,32,109, - 111,100,117,108,101,32,115,112,101,99,105,102,105,101,100,32, - 98,121,32,39,102,117,108,108,110,97,109,101,39,46,32,39, - 102,117,108,108,110,97,109,101,39,32,109,117,115,116,32,98, - 101,32,116,104,101,10,32,32,32,32,32,32,32,32,102,117, - 108,108,121,32,113,117,97,108,105,102,105,101,100,32,40,100, - 111,116,116,101,100,41,32,109,111,100,117,108,101,32,110,97, - 109,101,46,32,73,116,32,114,101,116,117,114,110,115,32,116, - 104,101,32,105,109,112,111,114,116,101,100,10,32,32,32,32, - 32,32,32,32,109,111,100,117,108,101,44,32,111,114,32,114, - 97,105,115,101,115,32,90,105,112,73,109,112,111,114,116,69, - 114,114,111,114,32,105,102,32,105,116,32,99,111,117,108,100, - 32,110,111,116,32,98,101,32,105,109,112,111,114,116,101,100, - 46,10,10,32,32,32,32,32,32,32,32,68,101,112,114,101, - 99,97,116,101,100,32,115,105,110,99,101,32,80,121,116,104, - 111,110,32,51,46,49,48,46,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,46,10,32,32,32,32,32,32,32,32,122,114,122,105, - 112,105,109,112,111,114,116,46,122,105,112,105,109,112,111,114, - 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,40, - 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, - 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, - 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, - 32,51,46,49,50,59,32,117,115,101,32,101,120,101,99,95, - 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, - 78,218,12,95,95,98,117,105,108,116,105,110,115,95,95,122, - 14,76,111,97,100,101,100,32,109,111,100,117,108,101,32,122, - 25,32,110,111,116,32,102,111,117,110,100,32,105,110,32,115, - 121,115,46,109,111,100,117,108,101,115,122,30,105,109,112,111, - 114,116,32,123,125,32,35,32,108,111,97,100,101,100,32,102, - 114,111,109,32,90,105,112,32,123,125,41,24,218,9,95,119, - 97,114,110,105,110,103,115,90,4,119,97,114,110,218,18,68, - 101,112,114,101,99,97,116,105,111,110,87,97,114,110,105,110, - 103,114,48,0,0,0,218,3,115,121,115,218,7,109,111,100, - 117,108,101,115,218,3,103,101,116,114,15,0,0,0,218,12, - 95,109,111,100,117,108,101,95,116,121,112,101,218,10,95,95, - 108,111,97,100,101,114,95,95,114,36,0,0,0,114,21,0, - 0,0,114,30,0,0,0,114,29,0,0,0,90,8,95,95, - 112,97,116,104,95,95,218,7,104,97,115,97,116,116,114,114, - 68,0,0,0,90,14,95,102,105,120,95,117,112,95,109,111, - 100,117,108,101,218,8,95,95,100,105,99,116,95,95,218,4, - 101,120,101,99,114,26,0,0,0,218,11,73,109,112,111,114, - 116,69,114,114,111,114,114,45,0,0,0,218,16,95,118,101, - 114,98,111,115,101,95,109,101,115,115,97,103,101,41,9,114, - 32,0,0,0,114,38,0,0,0,218,3,109,115,103,114,50, - 0,0,0,114,51,0,0,0,114,40,0,0,0,90,3,109, - 111,100,114,13,0,0,0,114,66,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,11,108,111,97, - 100,95,109,111,100,117,108,101,10,1,0,0,115,56,0,0, - 0,4,9,12,2,16,1,12,1,18,1,8,1,10,1,6, - 1,2,2,4,1,10,3,14,1,8,1,10,2,6,1,16, - 1,16,1,6,1,8,1,2,1,2,2,14,1,12,1,16, - 1,14,1,4,1,2,253,255,128,122,23,122,105,112,105,109, - 112,111,114,116,101,114,46,108,111,97,100,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,8,0,0,0,67,0,0,0,115,64,0,0,0, - 122,20,124,0,160,0,124,1,161,1,115,18,87,0,100,1, - 83,0,87,0,110,18,4,0,116,1,121,62,1,0,1,0, - 1,0,89,0,100,1,83,0,100,2,100,3,108,2,109,3, - 125,2,1,0,124,2,124,0,124,1,131,2,83,0,119,0, - 41,4,122,204,82,101,116,117,114,110,32,116,104,101,32,82, - 101,115,111,117,114,99,101,82,101,97,100,101,114,32,102,111, - 114,32,97,32,112,97,99,107,97,103,101,32,105,110,32,97, - 32,122,105,112,32,102,105,108,101,46,10,10,32,32,32,32, - 32,32,32,32,73,102,32,39,102,117,108,108,110,97,109,101, - 39,32,105,115,32,97,32,112,97,99,107,97,103,101,32,119, - 105,116,104,105,110,32,116,104,101,32,122,105,112,32,102,105, - 108,101,44,32,114,101,116,117,114,110,32,116,104,101,10,32, - 32,32,32,32,32,32,32,39,82,101,115,111,117,114,99,101, - 82,101,97,100,101,114,39,32,111,98,106,101,99,116,32,102, - 111,114,32,116,104,101,32,112,97,99,107,97,103,101,46,32, - 32,79,116,104,101,114,119,105,115,101,32,114,101,116,117,114, - 110,32,78,111,110,101,46,10,32,32,32,32,32,32,32,32, - 78,114,0,0,0,0,41,1,218,9,90,105,112,82,101,97, - 100,101,114,41,4,114,43,0,0,0,114,3,0,0,0,90, - 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, - 114,115,114,83,0,0,0,41,3,114,32,0,0,0,114,38, - 0,0,0,114,83,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,19,103,101,116,95,114,101,115, - 111,117,114,99,101,95,114,101,97,100,101,114,53,1,0,0, - 115,20,0,0,0,2,6,10,1,6,1,4,255,12,2,6, - 1,12,1,10,1,2,253,255,128,122,31,122,105,112,105,109, - 112,111,114,116,101,114,46,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,67, - 0,0,0,115,72,0,0,0,122,30,116,0,124,0,106,1, - 131,1,124,0,95,2,124,0,106,2,116,3,124,0,106,1, - 60,0,87,0,100,1,83,0,4,0,116,4,121,70,1,0, - 1,0,1,0,116,3,160,5,124,0,106,1,100,1,161,2, - 1,0,100,1,124,0,95,2,89,0,100,1,83,0,119,0, - 41,2,122,41,82,101,108,111,97,100,32,116,104,101,32,102, - 105,108,101,32,100,97,116,97,32,111,102,32,116,104,101,32, - 97,114,99,104,105,118,101,32,112,97,116,104,46,78,41,6, - 114,27,0,0,0,114,29,0,0,0,114,28,0,0,0,114, - 25,0,0,0,114,3,0,0,0,218,3,112,111,112,169,1, - 114,32,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,218,17,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,68,1,0,0,115,16,0,0,0, - 2,2,12,1,18,1,12,1,14,1,12,1,2,254,255,128, - 122,29,122,105,112,105,109,112,111,114,116,101,114,46,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 5,0,0,0,67,0,0,0,115,24,0,0,0,100,1,124, - 0,106,0,155,0,116,1,155,0,124,0,106,2,155,0,100, - 2,157,5,83,0,41,3,78,122,21,60,122,105,112,105,109, - 112,111,114,116,101,114,32,111,98,106,101,99,116,32,34,122, - 2,34,62,41,3,114,29,0,0,0,114,20,0,0,0,114, - 31,0,0,0,114,86,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,218,8,95,95,114,101,112,114, - 95,95,78,1,0,0,115,4,0,0,0,24,1,255,128,122, - 20,122,105,112,105,109,112,111,114,116,101,114,46,95,95,114, - 101,112,114,95,95,41,1,78,41,1,78,41,1,78,41,17, - 114,6,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 7,95,95,100,111,99,95,95,114,34,0,0,0,114,41,0, - 0,0,114,42,0,0,0,114,46,0,0,0,114,52,0,0, - 0,114,59,0,0,0,114,60,0,0,0,114,67,0,0,0, - 114,43,0,0,0,114,82,0,0,0,114,84,0,0,0,114, - 87,0,0,0,114,88,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,9,0,0,0,114,10,0,0,0,114,4,0, - 0,0,46,0,0,0,115,32,0,0,0,8,0,4,1,8, - 17,10,46,10,34,10,13,8,27,8,10,8,21,8,12,8, - 26,8,13,8,43,8,15,12,10,255,128,122,12,95,95,105, - 110,105,116,95,95,46,112,121,99,84,114,63,0,0,0,70, - 41,3,122,4,46,112,121,99,84,70,41,3,114,64,0,0, - 0,70,70,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,20,0,0, - 0,124,0,106,0,124,1,160,1,100,1,161,1,100,2,25, - 0,23,0,83,0,41,3,78,218,1,46,233,2,0,0,0, - 41,2,114,31,0,0,0,218,10,114,112,97,114,116,105,116, - 105,111,110,41,2,114,32,0,0,0,114,38,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,36, - 0,0,0,96,1,0,0,115,4,0,0,0,20,1,255,128, - 114,36,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,18, - 0,0,0,124,1,116,0,23,0,125,2,124,2,124,0,106, - 1,118,0,83,0,169,1,78,41,2,114,20,0,0,0,114, - 28,0,0,0,41,3,114,32,0,0,0,114,13,0,0,0, - 90,7,100,105,114,112,97,116,104,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,114,37,0,0,0,100,1,0, - 0,115,6,0,0,0,8,4,10,2,255,128,114,37,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,7,0, - 0,0,4,0,0,0,67,0,0,0,115,56,0,0,0,116, - 0,124,0,124,1,131,2,125,2,116,1,68,0,93,36,92, - 3,125,3,125,4,125,5,124,2,124,3,23,0,125,6,124, - 6,124,0,106,2,118,0,114,50,124,5,2,0,1,0,83, - 0,113,14,100,0,83,0,114,93,0,0,0,41,3,114,36, - 0,0,0,218,16,95,122,105,112,95,115,101,97,114,99,104, - 111,114,100,101,114,114,28,0,0,0,41,7,114,32,0,0, - 0,114,38,0,0,0,114,13,0,0,0,218,6,115,117,102, - 102,105,120,218,10,105,115,98,121,116,101,99,111,100,101,114, - 51,0,0,0,114,66,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,114,35,0,0,0,109,1,0, - 0,115,16,0,0,0,10,1,14,1,8,1,10,1,8,1, - 2,255,4,2,255,128,114,35,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,26,0,0,0,9,0,0,0, - 67,0,0,0,115,236,4,0,0,122,14,116,0,160,1,124, - 0,161,1,125,1,87,0,110,32,4,0,116,2,144,4,121, - 234,1,0,1,0,1,0,116,3,100,1,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,124,1,144,4,143,130,1, - 0,122,36,124,1,160,4,116,5,11,0,100,3,161,2,1, - 0,124,1,160,6,161,0,125,2,124,1,160,7,116,5,161, - 1,125,3,87,0,110,32,4,0,116,2,144,4,121,232,1, - 0,1,0,1,0,116,3,100,4,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,116,8,124,3,131,1,116,5,107, - 3,114,156,116,3,100,4,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,3,100,0,100,5,133,2,25,0,116, - 9,107,3,144,1,114,152,122,24,124,1,160,4,100,6,100, - 3,161,2,1,0,124,1,160,6,161,0,125,4,87,0,110, - 32,4,0,116,2,144,4,121,230,1,0,1,0,1,0,116, + 2,0,0,0,67,0,0,0,115,18,0,0,0,124,1,116, + 0,23,0,125,2,124,2,124,0,106,1,118,0,83,0,169, + 1,78,41,2,114,20,0,0,0,114,28,0,0,0,41,3, + 114,32,0,0,0,114,13,0,0,0,90,7,100,105,114,112, + 97,116,104,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,37,0,0,0,100,1,0,0,115,6,0,0,0, + 8,4,10,2,255,128,114,37,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0, + 67,0,0,0,115,56,0,0,0,116,0,124,0,124,1,131, + 2,125,2,116,1,68,0,93,18,92,3,125,3,125,4,125, + 5,124,2,124,3,23,0,125,6,124,6,124,0,106,2,118, + 0,114,25,124,5,2,0,1,0,83,0,113,7,100,0,83, + 0,114,93,0,0,0,41,3,114,36,0,0,0,218,16,95, + 122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,114, + 28,0,0,0,41,7,114,32,0,0,0,114,38,0,0,0, + 114,13,0,0,0,218,6,115,117,102,102,105,120,218,10,105, + 115,98,121,116,101,99,111,100,101,114,51,0,0,0,114,66, + 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,35,0,0,0,109,1,0,0,115,16,0,0,0, + 10,1,14,1,8,1,10,1,8,1,2,255,4,2,255,128, + 114,35,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,26,0,0,0,9,0,0,0,67,0,0,0,115,226, + 4,0,0,122,7,116,0,160,1,124,0,161,1,125,1,87, + 0,110,16,4,0,116,2,144,2,121,112,1,0,1,0,1, + 0,116,3,100,1,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,124,1,144,2,143,60,1,0,122,18,124,1,160, + 4,116,5,11,0,100,3,161,2,1,0,124,1,160,6,161, + 0,125,2,124,1,160,7,116,5,161,1,125,3,87,0,110, + 16,4,0,116,2,144,2,121,111,1,0,1,0,1,0,116, 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,116,10,124,4,116,11,24,0,116,5,24,0,100,6,131, - 2,125,5,122,22,124,1,160,4,124,5,161,1,1,0,124, - 1,160,7,161,0,125,6,87,0,110,32,4,0,116,2,144, - 4,121,228,1,0,1,0,1,0,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,124,6,160,12,116, - 9,161,1,125,7,124,7,100,6,107,0,144,1,114,88,116, - 3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,125, - 3,116,8,124,3,131,1,116,5,107,3,144,1,114,136,116, - 3,100,8,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,4,116,8,124,6,131,1,24,0,124,7,23,0,125, - 2,116,13,124,3,100,9,100,10,133,2,25,0,131,1,125, - 8,116,13,124,3,100,10,100,11,133,2,25,0,131,1,125, - 9,124,2,124,8,107,0,144,1,114,212,116,3,100,12,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,124, - 9,107,0,144,1,114,240,116,3,100,13,124,0,155,2,157, + 1,116,8,124,3,131,1,116,5,107,3,114,78,116,3,100, + 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, + 3,100,0,100,5,133,2,25,0,116,9,107,3,114,201,122, + 12,124,1,160,4,100,6,100,3,161,2,1,0,124,1,160, + 6,161,0,125,4,87,0,110,16,4,0,116,2,144,2,121, + 110,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,116,10,124,4,116,11,24, + 0,116,5,24,0,100,6,131,2,125,5,122,11,124,1,160, + 4,124,5,161,1,1,0,124,1,160,7,161,0,125,6,87, + 0,110,16,4,0,116,2,144,2,121,109,1,0,1,0,1, + 0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,124,6,160,12,116,9,161,1,125,7,124,7,100, + 6,107,0,114,170,116,3,100,7,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,124,6,124,7,124,7,116,5,23, + 0,133,2,25,0,125,3,116,8,124,3,131,1,116,5,107, + 3,114,193,116,3,100,8,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,124,4,116,8,124,6,131,1,24,0,124, + 7,23,0,125,2,116,13,124,3,100,9,100,10,133,2,25, + 0,131,1,125,8,116,13,124,3,100,10,100,11,133,2,25, + 0,131,1,125,9,124,2,124,8,107,0,114,230,116,3,100, + 12,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, + 2,124,9,107,0,114,243,116,3,100,13,124,0,155,2,157, 2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,125, 2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,144, - 2,114,28,116,3,100,14,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,105,0,125,11,100,6,125,12,122,14,124, - 1,160,4,124,2,161,1,1,0,87,0,110,32,4,0,116, - 2,144,4,121,226,1,0,1,0,1,0,116,3,100,4,124, + 1,114,9,116,3,100,14,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,105,0,125,11,100,6,125,12,122,7,124, + 1,160,4,124,2,161,1,1,0,87,0,110,16,4,0,116, + 2,144,2,121,108,1,0,1,0,1,0,116,3,100,4,124, 0,155,2,157,2,124,0,100,2,141,2,130,1,9,0,124, 1,160,7,100,16,161,1,125,3,116,8,124,3,131,1,100, - 5,107,0,144,2,114,118,116,14,100,17,131,1,130,1,124, - 3,100,0,100,5,133,2,25,0,100,18,107,3,144,2,114, - 140,144,4,113,170,116,8,124,3,131,1,100,16,107,3,144, - 2,114,162,116,14,100,17,131,1,130,1,116,15,124,3,100, + 5,107,0,144,1,114,54,116,14,100,17,131,1,130,1,124, + 3,100,0,100,5,133,2,25,0,100,18,107,3,144,1,114, + 65,144,2,113,80,116,8,124,3,131,1,100,16,107,3,144, + 1,114,76,116,14,100,17,131,1,130,1,116,15,124,3,100, 19,100,20,133,2,25,0,131,1,125,13,116,15,124,3,100, 20,100,9,133,2,25,0,131,1,125,14,116,15,124,3,100, 9,100,21,133,2,25,0,131,1,125,15,116,15,124,3,100, @@ -653,29 +652,29 @@ const unsigned char _Py_M__zipimport[] = { 24,100,25,133,2,25,0,131,1,125,20,116,15,124,3,100, 25,100,26,133,2,25,0,131,1,125,21,116,13,124,3,100, 27,100,16,133,2,25,0,131,1,125,22,124,19,124,20,23, - 0,124,21,23,0,125,8,124,22,124,9,107,4,144,3,114, - 122,116,3,100,28,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,124,22,124,10,55,0,125,22,122,14,124,1,160, - 7,124,19,161,1,125,23,87,0,110,32,4,0,116,2,144, - 4,121,224,1,0,1,0,1,0,116,3,100,4,124,0,155, + 0,124,21,23,0,125,8,124,22,124,9,107,4,144,1,114, + 184,116,3,100,28,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,124,22,124,10,55,0,125,22,122,7,124,1,160, + 7,124,19,161,1,125,23,87,0,110,16,4,0,116,2,144, + 2,121,107,1,0,1,0,1,0,116,3,100,4,124,0,155, 2,157,2,124,0,100,2,141,2,130,1,116,8,124,23,131, - 1,124,19,107,3,144,3,114,210,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,122,50,116,8,124, + 1,124,19,107,3,144,1,114,228,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,122,25,116,8,124, 1,160,7,124,8,124,19,24,0,161,1,131,1,124,8,124, - 19,24,0,107,3,144,4,114,2,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,87,0,110,32,4, - 0,116,2,144,4,121,222,1,0,1,0,1,0,116,3,100, + 19,24,0,107,3,144,1,114,252,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,87,0,110,16,4, + 0,116,2,144,2,121,106,1,0,1,0,1,0,116,3,100, 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, - 13,100,29,64,0,144,4,114,58,124,23,160,16,161,0,125, - 23,110,48,122,14,124,23,160,16,100,30,161,1,125,23,87, - 0,110,32,4,0,116,17,144,4,121,220,1,0,1,0,1, + 13,100,29,64,0,144,2,114,24,124,23,160,16,161,0,125, + 23,110,24,122,7,124,23,160,16,100,30,161,1,125,23,87, + 0,110,16,4,0,116,17,144,2,121,105,1,0,1,0,1, 0,124,23,160,16,100,31,161,1,160,18,116,19,161,1,125, 23,89,0,124,23,160,20,100,32,116,21,161,2,125,23,116, 22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,124, 18,124,4,124,22,124,15,124,16,124,17,102,8,125,25,124, 25,124,11,124,23,60,0,124,12,100,33,55,0,125,12,144, - 2,113,86,87,0,100,0,4,0,4,0,131,3,1,0,110, - 18,49,0,144,4,115,192,119,1,1,0,1,0,1,0,89, + 1,113,38,87,0,100,0,4,0,4,0,131,3,1,0,110, + 9,49,0,144,2,115,91,119,1,1,0,1,0,1,0,89, 0,1,0,116,24,160,25,100,34,124,12,124,0,161,3,1, 0,124,11,83,0,119,0,119,0,119,0,119,0,119,0,119, 0,119,0,119,0,41,35,78,122,21,99,97,110,39,116,32, @@ -735,11 +734,11 @@ const unsigned char _Py_M__zipimport[] = { 1,116,114,9,0,0,0,114,9,0,0,0,114,10,0,0, 0,114,27,0,0,0,140,1,0,0,115,240,0,0,0,2, 1,14,1,14,1,18,1,8,2,2,1,14,1,8,1,14, - 1,14,1,18,1,12,1,18,1,18,1,2,3,12,1,12, + 1,14,1,18,1,12,1,18,1,16,1,2,3,12,1,12, 1,14,1,10,1,2,1,6,255,8,2,2,1,2,255,2, 1,4,255,2,2,10,1,12,1,14,1,10,1,2,1,6, - 255,10,2,10,1,10,1,2,1,6,255,16,2,14,1,10, - 1,2,1,6,255,16,2,16,2,16,1,10,1,18,1,10, + 255,10,2,8,1,10,1,2,1,6,255,16,2,12,1,10, + 1,2,1,6,255,16,2,16,2,16,1,8,1,18,1,8, 1,18,1,8,1,8,1,10,1,18,1,4,2,4,2,2, 1,14,1,14,1,18,1,2,1,10,1,14,1,8,1,18, 2,4,1,14,1,8,1,16,1,16,1,16,1,16,1,16, @@ -779,12 +778,12 @@ const unsigned char _Py_M__zipimport[] = { 226,137,136,194,176,226,136,153,194,183,226,136,154,226,129,191, 194,178,226,150,160,194,160,99,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0, - 115,106,0,0,0,116,0,114,22,116,1,160,2,100,1,161, + 115,106,0,0,0,116,0,114,11,116,1,160,2,100,1,161, 1,1,0,116,3,100,2,131,1,130,1,100,3,97,0,122, - 56,122,16,100,4,100,5,108,4,109,5,125,0,1,0,87, - 0,110,30,4,0,116,6,121,104,1,0,1,0,1,0,116, + 28,122,8,100,4,100,5,108,4,109,5,125,0,1,0,87, + 0,110,15,4,0,116,6,121,52,1,0,1,0,1,0,116, 1,160,2,100,1,161,1,1,0,116,3,100,2,131,1,130, - 1,87,0,100,6,97,0,110,6,100,6,97,0,119,0,116, + 1,87,0,100,6,97,0,110,3,100,6,97,0,119,0,116, 1,160,2,100,7,161,1,1,0,124,0,83,0,119,0,41, 8,78,122,27,122,105,112,105,109,112,111,114,116,58,32,122, 108,105,98,32,85,78,65,86,65,73,76,65,66,76,69,250, @@ -804,249 +803,248 @@ const unsigned char _Py_M__zipimport[] = { 1,12,1,10,1,8,1,2,253,12,5,10,2,4,1,2, 249,255,128,114,149,0,0,0,99,2,0,0,0,0,0,0, 0,0,0,0,0,17,0,0,0,9,0,0,0,67,0,0, - 0,115,134,1,0,0,124,1,92,8,125,2,125,3,125,4, + 0,115,120,1,0,0,124,1,92,8,125,2,125,3,125,4, 125,5,125,6,125,7,125,8,125,9,124,4,100,1,107,0, - 114,36,116,0,100,2,131,1,130,1,116,1,160,2,124,0, - 161,1,144,1,143,4,125,10,122,14,124,10,160,3,124,6, - 161,1,1,0,87,0,110,32,4,0,116,4,144,1,121,132, - 1,0,1,0,1,0,116,0,100,3,124,0,155,2,157,2, - 124,0,100,4,141,2,130,1,124,10,160,5,100,5,161,1, - 125,11,116,6,124,11,131,1,100,5,107,3,114,128,116,7, - 100,6,131,1,130,1,124,11,100,0,100,7,133,2,25,0, - 100,8,107,3,114,162,116,0,100,9,124,0,155,2,157,2, - 124,0,100,4,141,2,130,1,116,8,124,11,100,10,100,11, - 133,2,25,0,131,1,125,12,116,8,124,11,100,11,100,5, - 133,2,25,0,131,1,125,13,100,5,124,12,23,0,124,13, - 23,0,125,14,124,6,124,14,55,0,125,6,122,14,124,10, - 160,3,124,6,161,1,1,0,87,0,110,32,4,0,116,4, - 144,1,121,130,1,0,1,0,1,0,116,0,100,3,124,0, - 155,2,157,2,124,0,100,4,141,2,130,1,124,10,160,5, - 124,4,161,1,125,15,116,6,124,15,131,1,124,4,107,3, - 144,1,114,38,116,4,100,12,131,1,130,1,87,0,100,0, - 4,0,4,0,131,3,1,0,110,18,49,0,144,1,115,60, - 119,1,1,0,1,0,1,0,89,0,1,0,124,3,100,1, - 107,2,144,1,114,84,124,15,83,0,122,10,116,9,131,0, - 125,16,87,0,110,22,4,0,116,10,144,1,121,128,1,0, - 1,0,1,0,116,0,100,13,131,1,130,1,124,16,124,15, - 100,14,131,2,83,0,119,0,119,0,119,0,41,15,78,114, - 0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100, - 97,116,97,32,115,105,122,101,114,97,0,0,0,114,12,0, - 0,0,114,109,0,0,0,114,103,0,0,0,114,98,0,0, - 0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32, - 108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101, - 114,58,32,233,26,0,0,0,114,108,0,0,0,122,26,122, - 105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32, - 114,101,97,100,32,100,97,116,97,114,144,0,0,0,105,241, - 255,255,255,41,11,114,3,0,0,0,114,115,0,0,0,114, - 116,0,0,0,114,117,0,0,0,114,22,0,0,0,114,119, - 0,0,0,114,55,0,0,0,114,124,0,0,0,114,1,0, - 0,0,114,149,0,0,0,114,148,0,0,0,41,17,114,29, - 0,0,0,114,58,0,0,0,90,8,100,97,116,97,112,97, - 116,104,114,135,0,0,0,114,139,0,0,0,114,130,0,0, - 0,114,142,0,0,0,114,136,0,0,0,114,137,0,0,0, - 114,138,0,0,0,114,128,0,0,0,114,129,0,0,0,114, - 140,0,0,0,114,141,0,0,0,114,132,0,0,0,90,8, - 114,97,119,95,100,97,116,97,114,146,0,0,0,114,9,0, - 0,0,114,9,0,0,0,114,10,0,0,0,114,56,0,0, - 0,63,2,0,0,115,74,0,0,0,20,1,8,1,8,1, - 14,2,2,2,14,1,14,1,18,1,10,1,12,1,8,1, - 16,2,18,2,16,2,16,1,12,1,8,1,2,1,14,1, - 14,1,18,1,10,1,14,1,8,1,14,255,18,128,10,3, - 4,2,2,3,10,1,14,1,8,1,10,1,2,254,2,243, - 2,240,255,128,114,56,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,16,0,0,0,116,0,124,0,124,1,24,0,131, - 1,100,1,107,1,83,0,41,2,78,114,5,0,0,0,41, - 1,218,3,97,98,115,41,2,90,2,116,49,90,2,116,50, - 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, - 9,95,101,113,95,109,116,105,109,101,109,2,0,0,115,4, - 0,0,0,16,2,255,128,114,152,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,14,0,0,0,6,0,0, - 0,67,0,0,0,115,254,0,0,0,124,3,124,2,100,1, - 156,2,125,5,116,0,160,1,124,4,124,3,124,5,161,3, - 125,6,124,6,100,2,64,0,100,3,107,3,125,7,124,7, - 114,126,124,6,100,4,64,0,100,3,107,3,125,8,116,2, - 106,3,100,5,107,3,114,124,124,8,115,76,116,2,106,3, - 100,6,107,2,114,124,116,4,124,0,124,2,131,2,125,9, - 124,9,100,0,117,1,114,124,116,2,160,5,116,0,106,6, - 124,9,161,2,125,10,116,0,160,7,124,4,124,10,124,3, - 124,5,161,4,1,0,110,80,116,8,124,0,124,2,131,2, - 92,2,125,11,125,12,124,11,114,206,116,9,116,10,124,4, - 100,7,100,8,133,2,25,0,131,1,124,11,131,2,114,186, - 116,10,124,4,100,8,100,9,133,2,25,0,131,1,124,12, - 107,3,114,206,116,11,160,12,100,10,124,3,155,2,157,2, - 161,1,1,0,100,0,83,0,116,13,160,14,124,4,100,9, - 100,0,133,2,25,0,161,1,125,13,116,15,124,13,116,16, - 131,2,115,250,116,17,100,11,124,1,155,2,100,12,157,3, - 131,1,130,1,124,13,83,0,41,13,78,41,2,114,44,0, - 0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0, - 0,114,91,0,0,0,90,5,110,101,118,101,114,90,6,97, - 108,119,97,121,115,114,104,0,0,0,114,99,0,0,0,114, - 100,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111, - 109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21, - 32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111, - 98,106,101,99,116,41,18,114,21,0,0,0,90,13,95,99, - 108,97,115,115,105,102,121,95,112,121,99,218,4,95,105,109, - 112,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97, - 115,101,100,95,112,121,99,115,218,15,95,103,101,116,95,112, - 121,99,95,115,111,117,114,99,101,218,11,115,111,117,114,99, - 101,95,104,97,115,104,90,17,95,82,65,87,95,77,65,71, - 73,67,95,78,85,77,66,69,82,90,18,95,118,97,108,105, - 100,97,116,101,95,104,97,115,104,95,112,121,99,218,29,95, - 103,101,116,95,109,116,105,109,101,95,97,110,100,95,115,105, - 122,101,95,111,102,95,115,111,117,114,99,101,114,152,0,0, - 0,114,2,0,0,0,114,45,0,0,0,114,80,0,0,0, - 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, - 114,15,0,0,0,218,10,95,99,111,100,101,95,116,121,112, - 101,218,9,84,121,112,101,69,114,114,111,114,41,14,114,32, - 0,0,0,114,57,0,0,0,114,66,0,0,0,114,38,0, - 0,0,114,131,0,0,0,90,11,101,120,99,95,100,101,116, - 97,105,108,115,114,134,0,0,0,90,10,104,97,115,104,95, - 98,97,115,101,100,90,12,99,104,101,99,107,95,115,111,117, - 114,99,101,90,12,115,111,117,114,99,101,95,98,121,116,101, - 115,114,155,0,0,0,90,12,115,111,117,114,99,101,95,109, - 116,105,109,101,90,11,115,111,117,114,99,101,95,115,105,122, - 101,114,50,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,15,95,117,110,109,97,114,115,104,97, - 108,95,99,111,100,101,117,2,0,0,115,74,0,0,0,2, - 2,2,1,6,254,14,5,12,2,4,1,12,1,10,1,2, - 1,2,255,8,1,2,255,10,2,8,1,4,1,4,1,2, - 1,4,254,4,5,8,1,4,255,2,128,8,4,6,255,4, - 3,22,3,18,1,2,255,4,2,8,1,4,255,4,2,18, - 2,10,1,16,1,4,1,255,128,114,160,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,67,0,0,0,115,28,0,0,0,124,0,160,0, - 100,1,100,2,161,2,125,0,124,0,160,0,100,3,100,2, - 161,2,125,0,124,0,83,0,41,4,78,115,2,0,0,0, - 13,10,243,1,0,0,0,10,243,1,0,0,0,13,41,1, - 114,19,0,0,0,41,1,218,6,115,111,117,114,99,101,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,23, - 95,110,111,114,109,97,108,105,122,101,95,108,105,110,101,95, - 101,110,100,105,110,103,115,162,2,0,0,115,8,0,0,0, - 12,1,12,1,4,1,255,128,114,164,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, - 0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,131, - 1,125,1,116,1,124,1,124,0,100,1,100,2,100,3,141, - 4,83,0,41,4,78,114,78,0,0,0,84,41,1,90,12, - 100,111,110,116,95,105,110,104,101,114,105,116,41,2,114,164, - 0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,57, - 0,0,0,114,163,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,15,95,99,111,109,112,105,108, - 101,95,115,111,117,114,99,101,169,2,0,0,115,6,0,0, - 0,8,1,16,1,255,128,114,166,0,0,0,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,0, - 0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,0, - 100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,4, - 64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,1, - 100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,8, - 20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,10, - 78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,0, - 233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,233, - 63,0,0,0,114,91,0,0,0,114,14,0,0,0,41,2, - 114,136,0,0,0,90,6,109,107,116,105,109,101,41,2,218, - 1,100,114,143,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,100, - 111,115,116,105,109,101,175,2,0,0,115,20,0,0,0,4, - 1,10,1,10,1,6,1,6,1,10,1,10,1,6,1,6, - 249,255,128,114,174,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,10,0,0,0,67,0,0, - 0,115,110,0,0,0,122,82,124,1,100,1,100,0,133,2, - 25,0,100,2,118,0,115,22,74,0,130,1,124,1,100,0, - 100,1,133,2,25,0,125,1,124,0,106,0,124,1,25,0, - 125,2,124,2,100,3,25,0,125,3,124,2,100,4,25,0, - 125,4,124,2,100,5,25,0,125,5,116,1,124,4,124,3, - 131,2,124,5,102,2,87,0,83,0,4,0,116,2,116,3, - 116,4,102,3,121,108,1,0,1,0,1,0,89,0,100,6, - 83,0,119,0,41,7,78,114,14,0,0,0,169,2,218,1, - 99,218,1,111,114,168,0,0,0,233,6,0,0,0,233,3, - 0,0,0,41,2,114,0,0,0,0,114,0,0,0,0,41, - 5,114,28,0,0,0,114,174,0,0,0,114,26,0,0,0, - 218,10,73,110,100,101,120,69,114,114,111,114,114,159,0,0, - 0,41,6,114,32,0,0,0,114,13,0,0,0,114,58,0, - 0,0,114,136,0,0,0,114,137,0,0,0,90,17,117,110, - 99,111,109,112,114,101,115,115,101,100,95,115,105,122,101,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,156, - 0,0,0,188,2,0,0,115,24,0,0,0,2,1,20,2, - 12,1,10,1,8,3,8,1,8,1,16,1,18,1,6,1, - 2,255,255,128,114,156,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, - 0,0,115,80,0,0,0,124,1,100,1,100,0,133,2,25, - 0,100,2,118,0,115,20,74,0,130,1,124,1,100,0,100, - 1,133,2,25,0,125,1,122,14,124,0,106,0,124,1,25, - 0,125,2,87,0,110,18,4,0,116,1,121,78,1,0,1, - 0,1,0,89,0,100,0,83,0,116,2,124,0,106,3,124, - 2,131,2,83,0,119,0,41,3,78,114,14,0,0,0,114, - 175,0,0,0,41,4,114,28,0,0,0,114,26,0,0,0, - 114,56,0,0,0,114,29,0,0,0,41,3,114,32,0,0, - 0,114,13,0,0,0,114,58,0,0,0,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,114,154,0,0,0,207, - 2,0,0,115,18,0,0,0,20,2,12,1,2,2,14,1, - 12,1,6,1,12,2,2,253,255,128,114,154,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, - 11,0,0,0,67,0,0,0,115,18,1,0,0,116,0,124, - 0,124,1,131,2,125,2,100,0,125,3,116,1,68,0,93, - 204,92,3,125,4,125,5,125,6,124,2,124,4,23,0,125, - 7,116,2,106,3,100,1,124,0,106,4,116,5,124,7,100, - 2,100,3,141,5,1,0,122,14,124,0,106,6,124,7,25, - 0,125,8,87,0,110,18,4,0,116,7,144,1,121,16,1, - 0,1,0,1,0,89,0,113,18,124,8,100,4,25,0,125, + 114,18,116,0,100,2,131,1,130,1,116,1,160,2,124,0, + 161,1,143,127,125,10,122,7,124,10,160,3,124,6,161,1, + 1,0,87,0,110,15,4,0,116,4,121,187,1,0,1,0, + 1,0,116,0,100,3,124,0,155,2,157,2,124,0,100,4, + 141,2,130,1,124,10,160,5,100,5,161,1,125,11,116,6, + 124,11,131,1,100,5,107,3,114,62,116,7,100,6,131,1, + 130,1,124,11,100,0,100,7,133,2,25,0,100,8,107,3, + 114,79,116,0,100,9,124,0,155,2,157,2,124,0,100,4, + 141,2,130,1,116,8,124,11,100,10,100,11,133,2,25,0, + 131,1,125,12,116,8,124,11,100,11,100,5,133,2,25,0, + 131,1,125,13,100,5,124,12,23,0,124,13,23,0,125,14, + 124,6,124,14,55,0,125,6,122,7,124,10,160,3,124,6, + 161,1,1,0,87,0,110,15,4,0,116,4,121,186,1,0, + 1,0,1,0,116,0,100,3,124,0,155,2,157,2,124,0, + 100,4,141,2,130,1,124,10,160,5,124,4,161,1,125,15, + 116,6,124,15,131,1,124,4,107,3,114,143,116,4,100,12, + 131,1,130,1,87,0,100,0,4,0,4,0,131,3,1,0, + 110,8,49,0,115,153,119,1,1,0,1,0,1,0,89,0, + 1,0,124,3,100,1,107,2,114,164,124,15,83,0,122,5, + 116,9,131,0,125,16,87,0,110,10,4,0,116,10,121,185, + 1,0,1,0,1,0,116,0,100,13,131,1,130,1,124,16, + 124,15,100,14,131,2,83,0,119,0,119,0,119,0,41,15, + 78,114,0,0,0,0,122,18,110,101,103,97,116,105,118,101, + 32,100,97,116,97,32,115,105,122,101,114,97,0,0,0,114, + 12,0,0,0,114,109,0,0,0,114,103,0,0,0,114,98, + 0,0,0,115,4,0,0,0,80,75,3,4,122,23,98,97, + 100,32,108,111,99,97,108,32,102,105,108,101,32,104,101,97, + 100,101,114,58,32,233,26,0,0,0,114,108,0,0,0,122, + 26,122,105,112,105,109,112,111,114,116,58,32,99,97,110,39, + 116,32,114,101,97,100,32,100,97,116,97,114,144,0,0,0, + 105,241,255,255,255,41,11,114,3,0,0,0,114,115,0,0, + 0,114,116,0,0,0,114,117,0,0,0,114,22,0,0,0, + 114,119,0,0,0,114,55,0,0,0,114,124,0,0,0,114, + 1,0,0,0,114,149,0,0,0,114,148,0,0,0,41,17, + 114,29,0,0,0,114,58,0,0,0,90,8,100,97,116,97, + 112,97,116,104,114,135,0,0,0,114,139,0,0,0,114,130, + 0,0,0,114,142,0,0,0,114,136,0,0,0,114,137,0, + 0,0,114,138,0,0,0,114,128,0,0,0,114,129,0,0, + 0,114,140,0,0,0,114,141,0,0,0,114,132,0,0,0, + 90,8,114,97,119,95,100,97,116,97,114,146,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,56, + 0,0,0,63,2,0,0,115,74,0,0,0,20,1,8,1, + 8,1,12,2,2,2,14,1,12,1,18,1,10,1,12,1, + 8,1,16,2,18,2,16,2,16,1,12,1,8,1,2,1, + 14,1,12,1,18,1,10,1,12,1,8,1,14,255,16,128, + 8,3,4,2,2,3,10,1,12,1,8,1,10,1,2,254, + 2,243,2,240,255,128,114,56,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 67,0,0,0,115,16,0,0,0,116,0,124,0,124,1,24, + 0,131,1,100,1,107,1,83,0,41,2,78,114,5,0,0, + 0,41,1,218,3,97,98,115,41,2,90,2,116,49,90,2, + 116,50,114,9,0,0,0,114,9,0,0,0,114,10,0,0, + 0,218,9,95,101,113,95,109,116,105,109,101,109,2,0,0, + 115,4,0,0,0,16,2,255,128,114,152,0,0,0,99,5, + 0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,6, + 0,0,0,67,0,0,0,115,254,0,0,0,124,3,124,2, + 100,1,156,2,125,5,116,0,160,1,124,4,124,3,124,5, + 161,3,125,6,124,6,100,2,64,0,100,3,107,3,125,7, + 124,7,114,63,124,6,100,4,64,0,100,3,107,3,125,8, + 116,2,106,3,100,5,107,3,114,62,124,8,115,38,116,2, + 106,3,100,6,107,2,114,62,116,4,124,0,124,2,131,2, + 125,9,124,9,100,0,117,1,114,62,116,2,160,5,116,0, + 106,6,124,9,161,2,125,10,116,0,160,7,124,4,124,10, + 124,3,124,5,161,4,1,0,110,40,116,8,124,0,124,2, + 131,2,92,2,125,11,125,12,124,11,114,103,116,9,116,10, + 124,4,100,7,100,8,133,2,25,0,131,1,124,11,131,2, + 114,93,116,10,124,4,100,8,100,9,133,2,25,0,131,1, + 124,12,107,3,114,103,116,11,160,12,100,10,124,3,155,2, + 157,2,161,1,1,0,100,0,83,0,116,13,160,14,124,4, + 100,9,100,0,133,2,25,0,161,1,125,13,116,15,124,13, + 116,16,131,2,115,125,116,17,100,11,124,1,155,2,100,12, + 157,3,131,1,130,1,124,13,83,0,41,13,78,41,2,114, + 44,0,0,0,114,13,0,0,0,114,5,0,0,0,114,0, + 0,0,0,114,91,0,0,0,90,5,110,101,118,101,114,90, + 6,97,108,119,97,121,115,114,104,0,0,0,114,99,0,0, + 0,114,100,0,0,0,122,22,98,121,116,101,99,111,100,101, + 32,105,115,32,115,116,97,108,101,32,102,111,114,32,122,16, + 99,111,109,112,105,108,101,100,32,109,111,100,117,108,101,32, + 122,21,32,105,115,32,110,111,116,32,97,32,99,111,100,101, + 32,111,98,106,101,99,116,41,18,114,21,0,0,0,90,13, + 95,99,108,97,115,115,105,102,121,95,112,121,99,218,4,95, + 105,109,112,90,21,99,104,101,99,107,95,104,97,115,104,95, + 98,97,115,101,100,95,112,121,99,115,218,15,95,103,101,116, + 95,112,121,99,95,115,111,117,114,99,101,218,11,115,111,117, + 114,99,101,95,104,97,115,104,90,17,95,82,65,87,95,77, + 65,71,73,67,95,78,85,77,66,69,82,90,18,95,118,97, + 108,105,100,97,116,101,95,104,97,115,104,95,112,121,99,218, + 29,95,103,101,116,95,109,116,105,109,101,95,97,110,100,95, + 115,105,122,101,95,111,102,95,115,111,117,114,99,101,114,152, + 0,0,0,114,2,0,0,0,114,45,0,0,0,114,80,0, + 0,0,218,7,109,97,114,115,104,97,108,90,5,108,111,97, + 100,115,114,15,0,0,0,218,10,95,99,111,100,101,95,116, + 121,112,101,218,9,84,121,112,101,69,114,114,111,114,41,14, + 114,32,0,0,0,114,57,0,0,0,114,66,0,0,0,114, + 38,0,0,0,114,131,0,0,0,90,11,101,120,99,95,100, + 101,116,97,105,108,115,114,134,0,0,0,90,10,104,97,115, + 104,95,98,97,115,101,100,90,12,99,104,101,99,107,95,115, + 111,117,114,99,101,90,12,115,111,117,114,99,101,95,98,121, + 116,101,115,114,155,0,0,0,90,12,115,111,117,114,99,101, + 95,109,116,105,109,101,90,11,115,111,117,114,99,101,95,115, + 105,122,101,114,50,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,15,95,117,110,109,97,114,115, + 104,97,108,95,99,111,100,101,117,2,0,0,115,74,0,0, + 0,2,2,2,1,6,254,14,5,12,2,4,1,12,1,10, + 1,2,1,2,255,8,1,2,255,10,2,8,1,4,1,4, + 1,2,1,4,254,4,5,8,1,4,255,2,128,8,4,6, + 255,4,3,22,3,18,1,2,255,4,2,8,1,4,255,4, + 2,18,2,10,1,16,1,4,1,255,128,114,160,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,115,28,0,0,0,124,0, + 160,0,100,1,100,2,161,2,125,0,124,0,160,0,100,3, + 100,2,161,2,125,0,124,0,83,0,41,4,78,115,2,0, + 0,0,13,10,243,1,0,0,0,10,243,1,0,0,0,13, + 41,1,114,19,0,0,0,41,1,218,6,115,111,117,114,99, + 101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 218,23,95,110,111,114,109,97,108,105,122,101,95,108,105,110, + 101,95,101,110,100,105,110,103,115,162,2,0,0,115,8,0, + 0,0,12,1,12,1,4,1,255,128,114,164,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 6,0,0,0,67,0,0,0,115,24,0,0,0,116,0,124, + 1,131,1,125,1,116,1,124,1,124,0,100,1,100,2,100, + 3,141,4,83,0,41,4,78,114,78,0,0,0,84,41,1, + 90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,2, + 114,164,0,0,0,218,7,99,111,109,112,105,108,101,41,2, + 114,57,0,0,0,114,163,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,15,95,99,111,109,112, + 105,108,101,95,115,111,117,114,99,101,169,2,0,0,115,6, + 0,0,0,8,1,16,1,255,128,114,166,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,11, + 0,0,0,67,0,0,0,115,68,0,0,0,116,0,160,1, + 124,0,100,1,63,0,100,2,23,0,124,0,100,3,63,0, + 100,4,64,0,124,0,100,5,64,0,124,1,100,6,63,0, + 124,1,100,3,63,0,100,7,64,0,124,1,100,5,64,0, + 100,8,20,0,100,9,100,9,100,9,102,9,161,1,83,0, + 41,10,78,233,9,0,0,0,105,188,7,0,0,233,5,0, + 0,0,233,15,0,0,0,233,31,0,0,0,233,11,0,0, + 0,233,63,0,0,0,114,91,0,0,0,114,14,0,0,0, + 41,2,114,136,0,0,0,90,6,109,107,116,105,109,101,41, + 2,218,1,100,114,143,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,218,14,95,112,97,114,115,101, + 95,100,111,115,116,105,109,101,175,2,0,0,115,20,0,0, + 0,4,1,10,1,10,1,6,1,6,1,10,1,10,1,6, + 1,6,249,255,128,114,174,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,10,0,0,0,67, + 0,0,0,115,110,0,0,0,122,41,124,1,100,1,100,0, + 133,2,25,0,100,2,118,0,115,11,74,0,130,1,124,1, + 100,0,100,1,133,2,25,0,125,1,124,0,106,0,124,1, + 25,0,125,2,124,2,100,3,25,0,125,3,124,2,100,4, + 25,0,125,4,124,2,100,5,25,0,125,5,116,1,124,4, + 124,3,131,2,124,5,102,2,87,0,83,0,4,0,116,2, + 116,3,116,4,102,3,121,54,1,0,1,0,1,0,89,0, + 100,6,83,0,119,0,41,7,78,114,14,0,0,0,169,2, + 218,1,99,218,1,111,114,168,0,0,0,233,6,0,0,0, + 233,3,0,0,0,41,2,114,0,0,0,0,114,0,0,0, + 0,41,5,114,28,0,0,0,114,174,0,0,0,114,26,0, + 0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,159, + 0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,114, + 58,0,0,0,114,136,0,0,0,114,137,0,0,0,90,17, + 117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,122, + 101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 114,156,0,0,0,188,2,0,0,115,24,0,0,0,2,1, + 20,2,12,1,10,1,8,3,8,1,8,1,16,1,18,1, + 6,1,2,255,255,128,114,156,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, + 67,0,0,0,115,80,0,0,0,124,1,100,1,100,0,133, + 2,25,0,100,2,118,0,115,10,74,0,130,1,124,1,100, + 0,100,1,133,2,25,0,125,1,122,7,124,0,106,0,124, + 1,25,0,125,2,87,0,110,9,4,0,116,1,121,39,1, + 0,1,0,1,0,89,0,100,0,83,0,116,2,124,0,106, + 3,124,2,131,2,83,0,119,0,41,3,78,114,14,0,0, + 0,114,175,0,0,0,41,4,114,28,0,0,0,114,26,0, + 0,0,114,56,0,0,0,114,29,0,0,0,41,3,114,32, + 0,0,0,114,13,0,0,0,114,58,0,0,0,114,9,0, + 0,0,114,9,0,0,0,114,10,0,0,0,114,154,0,0, + 0,207,2,0,0,115,18,0,0,0,20,2,12,1,2,2, + 14,1,12,1,6,1,12,2,2,253,255,128,114,154,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,14,0, + 0,0,11,0,0,0,67,0,0,0,115,14,1,0,0,116, + 0,124,0,124,1,131,2,125,2,100,0,125,3,116,1,68, + 0,93,100,92,3,125,4,125,5,125,6,124,2,124,4,23, + 0,125,7,116,2,106,3,100,1,124,0,106,4,116,5,124, + 7,100,2,100,3,141,5,1,0,122,7,124,0,106,6,124, + 7,25,0,125,8,87,0,110,8,4,0,116,7,121,134,1, + 0,1,0,1,0,89,0,113,9,124,8,100,4,25,0,125, 9,116,8,124,0,106,4,124,8,131,2,125,10,100,0,125, - 11,124,5,114,182,122,20,116,9,124,0,124,9,124,7,124, - 1,124,10,131,5,125,11,87,0,110,50,4,0,116,10,144, - 1,121,14,1,0,125,12,1,0,122,16,124,12,125,3,87, - 0,89,0,100,0,125,12,126,12,110,18,100,0,125,12,126, - 12,119,1,116,11,124,9,124,10,131,2,125,11,124,11,100, - 0,117,0,114,202,113,18,124,8,100,4,25,0,125,9,124, - 11,124,6,124,9,102,3,2,0,1,0,83,0,124,3,114, - 252,100,5,124,3,155,0,157,2,125,13,116,12,124,13,124, - 1,100,6,141,2,124,3,130,2,116,12,100,7,124,1,155, - 2,157,2,124,1,100,6,141,2,130,1,119,0,119,0,41, - 8,78,122,13,116,114,121,105,110,103,32,123,125,123,125,123, - 125,114,91,0,0,0,41,1,90,9,118,101,114,98,111,115, - 105,116,121,114,0,0,0,0,122,20,109,111,100,117,108,101, - 32,108,111,97,100,32,102,97,105,108,101,100,58,32,114,62, - 0,0,0,114,61,0,0,0,41,13,114,36,0,0,0,114, - 94,0,0,0,114,45,0,0,0,114,80,0,0,0,114,29, - 0,0,0,114,20,0,0,0,114,28,0,0,0,114,26,0, - 0,0,114,56,0,0,0,114,160,0,0,0,114,79,0,0, - 0,114,166,0,0,0,114,3,0,0,0,41,14,114,32,0, - 0,0,114,38,0,0,0,114,13,0,0,0,90,12,105,109, - 112,111,114,116,95,101,114,114,111,114,114,95,0,0,0,114, - 96,0,0,0,114,51,0,0,0,114,66,0,0,0,114,58, - 0,0,0,114,40,0,0,0,114,131,0,0,0,114,50,0, - 0,0,90,3,101,120,99,114,81,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,114,48,0,0,0, - 222,2,0,0,115,60,0,0,0,10,1,4,1,14,1,8, - 1,22,1,2,1,14,1,14,1,4,1,8,2,12,1,4, - 1,4,1,2,1,20,1,16,1,16,1,8,128,10,2,8, - 1,2,3,8,1,14,1,4,2,10,1,14,1,18,2,2, - 241,2,247,255,128,114,48,0,0,0,41,46,114,89,0,0, - 0,90,26,95,102,114,111,122,101,110,95,105,109,112,111,114, - 116,108,105,98,95,101,120,116,101,114,110,97,108,114,21,0, - 0,0,114,1,0,0,0,114,2,0,0,0,90,17,95,102, - 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,114, - 45,0,0,0,114,153,0,0,0,114,115,0,0,0,114,157, - 0,0,0,114,71,0,0,0,114,136,0,0,0,114,69,0, - 0,0,90,7,95,95,97,108,108,95,95,114,20,0,0,0, - 90,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, - 115,114,18,0,0,0,114,79,0,0,0,114,3,0,0,0, - 114,25,0,0,0,218,4,116,121,112,101,114,74,0,0,0, - 114,118,0,0,0,114,120,0,0,0,114,122,0,0,0,90, - 13,95,76,111,97,100,101,114,66,97,115,105,99,115,114,4, - 0,0,0,114,94,0,0,0,114,36,0,0,0,114,37,0, - 0,0,114,35,0,0,0,114,27,0,0,0,114,127,0,0, - 0,114,147,0,0,0,114,149,0,0,0,114,56,0,0,0, - 114,152,0,0,0,114,160,0,0,0,218,8,95,95,99,111, - 100,101,95,95,114,158,0,0,0,114,164,0,0,0,114,166, - 0,0,0,114,174,0,0,0,114,156,0,0,0,114,154,0, - 0,0,114,48,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111, - 100,117,108,101,62,1,0,0,0,115,92,0,0,0,4,0, - 8,16,16,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,1,8,2,6,3,14,1,16,3,4,4,8,2,4,2, - 4,1,4,1,18,2,0,127,0,127,12,44,12,1,2,1, - 2,1,4,252,8,9,8,4,8,9,8,31,2,126,2,254, - 4,29,8,5,8,21,8,46,8,8,10,40,8,5,8,7, - 8,6,8,13,8,19,12,15,255,128, + 11,124,5,114,89,122,10,116,9,124,0,124,9,124,7,124, + 1,124,10,131,5,125,11,87,0,110,24,4,0,116,10,121, + 133,1,0,125,12,1,0,122,8,124,12,125,3,87,0,89, + 0,100,0,125,12,126,12,110,9,100,0,125,12,126,12,119, + 1,116,11,124,9,124,10,131,2,125,11,124,11,100,0,117, + 0,114,99,113,9,124,8,100,4,25,0,125,9,124,11,124, + 6,124,9,102,3,2,0,1,0,83,0,124,3,114,124,100, + 5,124,3,155,0,157,2,125,13,116,12,124,13,124,1,100, + 6,141,2,124,3,130,2,116,12,100,7,124,1,155,2,157, + 2,124,1,100,6,141,2,130,1,119,0,119,0,41,8,78, + 122,13,116,114,121,105,110,103,32,123,125,123,125,123,125,114, + 91,0,0,0,41,1,90,9,118,101,114,98,111,115,105,116, + 121,114,0,0,0,0,122,20,109,111,100,117,108,101,32,108, + 111,97,100,32,102,97,105,108,101,100,58,32,114,62,0,0, + 0,114,61,0,0,0,41,13,114,36,0,0,0,114,94,0, + 0,0,114,45,0,0,0,114,80,0,0,0,114,29,0,0, + 0,114,20,0,0,0,114,28,0,0,0,114,26,0,0,0, + 114,56,0,0,0,114,160,0,0,0,114,79,0,0,0,114, + 166,0,0,0,114,3,0,0,0,41,14,114,32,0,0,0, + 114,38,0,0,0,114,13,0,0,0,90,12,105,109,112,111, + 114,116,95,101,114,114,111,114,114,95,0,0,0,114,96,0, + 0,0,114,51,0,0,0,114,66,0,0,0,114,58,0,0, + 0,114,40,0,0,0,114,131,0,0,0,114,50,0,0,0, + 90,3,101,120,99,114,81,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,114,48,0,0,0,222,2, + 0,0,115,60,0,0,0,10,1,4,1,14,1,8,1,22, + 1,2,1,14,1,12,1,4,1,8,2,12,1,4,1,4, + 1,2,1,20,1,14,1,16,1,8,128,10,2,8,1,2, + 3,8,1,14,1,4,2,10,1,14,1,18,2,2,241,2, + 247,255,128,114,48,0,0,0,41,46,114,89,0,0,0,90, + 26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,108, + 105,98,95,101,120,116,101,114,110,97,108,114,21,0,0,0, + 114,1,0,0,0,114,2,0,0,0,90,17,95,102,114,111, + 122,101,110,95,105,109,112,111,114,116,108,105,98,114,45,0, + 0,0,114,153,0,0,0,114,115,0,0,0,114,157,0,0, + 0,114,71,0,0,0,114,136,0,0,0,114,69,0,0,0, + 90,7,95,95,97,108,108,95,95,114,20,0,0,0,90,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114, + 18,0,0,0,114,79,0,0,0,114,3,0,0,0,114,25, + 0,0,0,218,4,116,121,112,101,114,74,0,0,0,114,118, + 0,0,0,114,120,0,0,0,114,122,0,0,0,90,13,95, + 76,111,97,100,101,114,66,97,115,105,99,115,114,4,0,0, + 0,114,94,0,0,0,114,36,0,0,0,114,37,0,0,0, + 114,35,0,0,0,114,27,0,0,0,114,127,0,0,0,114, + 147,0,0,0,114,149,0,0,0,114,56,0,0,0,114,152, + 0,0,0,114,160,0,0,0,218,8,95,95,99,111,100,101, + 95,95,114,158,0,0,0,114,164,0,0,0,114,166,0,0, + 0,114,174,0,0,0,114,156,0,0,0,114,154,0,0,0, + 114,48,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,8,60,109,111,100,117, + 108,101,62,1,0,0,0,115,92,0,0,0,4,0,8,16, + 16,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, + 8,2,6,3,14,1,16,3,4,4,8,2,4,2,4,1, + 4,1,18,2,0,127,0,127,12,44,12,1,2,1,2,1, + 4,252,8,9,8,4,8,9,8,31,2,126,2,254,4,29, + 8,5,8,21,8,46,8,8,10,40,8,5,8,7,8,6, + 8,13,8,19,12,15,255,128, }; diff --git a/Python/traceback.c b/Python/traceback.c index 9363d4eb1b5b7..6c0cdfa7e7a2c 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -233,7 +233,7 @@ _PyTraceBack_FromFrame(PyObject *tb_next, PyFrameObject *frame) assert(tb_next == NULL || PyTraceBack_Check(tb_next)); assert(frame != NULL); - return tb_create_raw((PyTracebackObject *)tb_next, frame, frame->f_lasti, + return tb_create_raw((PyTracebackObject *)tb_next, frame, frame->f_lasti*2, PyFrame_GetLineNumber(frame)); } @@ -763,8 +763,7 @@ dump_frame(int fd, PyFrameObject *frame) PUTS(fd, "???"); } - /* PyFrame_GetLineNumber() was introduced in Python 2.7.0 and 3.2.0 */ - int lineno = PyCode_Addr2Line(code, frame->f_lasti); + int lineno = PyFrame_GetLineNumber(frame); PUTS(fd, ", line "); if (lineno >= 0) { _Py_DumpDecimal(fd, (size_t)lineno); diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index e18ab0d873cce..270aeb426eb5b 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -947,7 +947,7 @@ def current_line_num(self): return self.f_lineno try: - return self.co.addr2line(self.f_lasti) + return self.co.addr2line(self.f_lasti*2) except Exception: # bpo-34989: addr2line() is a complex function, it can fail in many # ways. For example, it fails with a TypeError on "FakeRepr" if From webhook-mailer at python.org Thu Apr 1 11:26:12 2021 From: webhook-mailer at python.org (gvanrossum) Date: Thu, 01 Apr 2021 15:26:12 -0000 Subject: [Python-checkins] bpo-26053: Fix args echoed by pdb run command (#22033) Message-ID: https://github.com/python/cpython/commit/652bfdee9495dca241d48278742fe035b7a82bdb commit: 652bfdee9495dca241d48278742fe035b7a82bdb branch: master author: Irit Katriel committer: gvanrossum date: 2021-04-01T08:25:59-07:00 summary: bpo-26053: Fix args echoed by pdb run command (#22033) files: A Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 7a5192cbadc3a..98dc975eafafd 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1708,7 +1708,7 @@ def main(): print("The program finished and will be restarted") except Restart: print("Restarting", mainpyfile, "with arguments:") - print("\t" + " ".join(args)) + print("\t" + " ".join(sys.argv[1:])) except SystemExit: # In most cases SystemExit does not warrant a post-mortem session. print("The program exited via sys.exit(). Exit status:", end=' ') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 51cd378648378..9f0db02996f5b 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1443,6 +1443,19 @@ def test_issue16180(self): 'Fail to handle a syntax error in the debuggee.' .format(expected, stdout)) + def test_issue26053(self): + # run command of pdb prompt echoes the correct args + script = "print('hello')" + commands = """ + continue + run a b c + run d e f + quit + """ + stdout, stderr = self.run_pdb_script(script, commands) + output = '\n'.join([x.strip() for x in stdout.splitlines()]) + self.assertIn("Restarting main.py with arguments:\na b c", output) + self.assertIn("Restarting main.py with arguments:\nd e f", output) def test_readrc_kwarg(self): script = textwrap.dedent(""" diff --git a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst new file mode 100644 index 0000000000000..e8720ac82ffb1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst @@ -0,0 +1 @@ +Fixed bug where the :mod:`pdb` interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. From webhook-mailer at python.org Thu Apr 1 13:03:44 2021 From: webhook-mailer at python.org (rhettinger) Date: Thu, 01 Apr 2021 17:03:44 -0000 Subject: [Python-checkins] bpo-43677: Fix a minor error in Doc/howto/descriptor.rst (#25123) Message-ID: https://github.com/python/cpython/commit/e689cdca3c14aab8d2d454b79ddd661b238fd301 commit: e689cdca3c14aab8d2d454b79ddd661b238fd301 branch: master author: Zackery Spytz committer: rhettinger date: 2021-04-01T10:03:33-07:00 summary: bpo-43677: Fix a minor error in Doc/howto/descriptor.rst (#25123) It should be PyMethod_Type, not Py_MethodType. files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 94aadd6f73a83..420d9b94306ea 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -1064,7 +1064,7 @@ roughly equivalent to: .. testcode:: class MethodType: - "Emulate Py_MethodType in Objects/classobject.c" + "Emulate PyMethod_Type in Objects/classobject.c" def __init__(self, func, obj): self.__func__ = func From webhook-mailer at python.org Thu Apr 1 15:06:11 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 01 Apr 2021 19:06:11 -0000 Subject: [Python-checkins] bpo-26053: Fix test_pdb.test_issue26053() (GH-25139) Message-ID: https://github.com/python/cpython/commit/bd4ab8e73906a4f12d5353f567228b7c7497baf7 commit: bd4ab8e73906a4f12d5353f567228b7c7497baf7 branch: master author: Irit Katriel committer: vstinner date: 2021-04-01T21:05:51+02:00 summary: bpo-26053: Fix test_pdb.test_issue26053() (GH-25139) files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 9f0db02996f5b..d5abc3f95daca 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1453,9 +1453,9 @@ def test_issue26053(self): quit """ stdout, stderr = self.run_pdb_script(script, commands) - output = '\n'.join([x.strip() for x in stdout.splitlines()]) - self.assertIn("Restarting main.py with arguments:\na b c", output) - self.assertIn("Restarting main.py with arguments:\nd e f", output) + res = '\n'.join([x.strip() for x in stdout.splitlines()]) + self.assertRegex(res, "Restarting .* with arguments:\na b c") + self.assertRegex(res, "Restarting .* with arguments:\nd e f") def test_readrc_kwarg(self): script = textwrap.dedent(""" From webhook-mailer at python.org Thu Apr 1 19:57:13 2021 From: webhook-mailer at python.org (methane) Date: Thu, 01 Apr 2021 23:57:13 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in test_warnings (GH-25126) Message-ID: https://github.com/python/cpython/commit/036fc7de24cc961d65b60fba266104009feb2797 commit: 036fc7de24cc961d65b60fba266104009feb2797 branch: master author: Inada Naoki committer: methane date: 2021-04-02T08:57:05+09:00 summary: bpo-43651: Fix EncodingWarning in test_warnings (GH-25126) files: M Lib/test/test_warnings/__init__.py diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index 04f7560ecc09c..4b1b4e193cb16 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -935,10 +935,10 @@ class PyWarningsDisplayTests(WarningsDisplayTests, unittest.TestCase): def test_tracemalloc(self): self.addCleanup(os_helper.unlink, os_helper.TESTFN) - with open(os_helper.TESTFN, 'w') as fp: + with open(os_helper.TESTFN, 'w', encoding="utf-8") as fp: fp.write(textwrap.dedent(""" def func(): - f = open(__file__) + f = open(__file__, "rb") # Emit ResourceWarning f = None @@ -973,7 +973,7 @@ def run(*args): File "{filename}", lineno 7 func() File "{filename}", lineno 3 - f = open(__file__) + f = open(__file__, "rb") ''').strip() self.assertEqual(stderr, expected) From webhook-mailer at python.org Thu Apr 1 19:59:22 2021 From: webhook-mailer at python.org (methane) Date: Thu, 01 Apr 2021 23:59:22 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in lib2to3/pgen2/pgen.py (GH-25127) Message-ID: https://github.com/python/cpython/commit/c0ec4486dc7dd70fea39d1473ac9a9ac568378fe commit: c0ec4486dc7dd70fea39d1473ac9a9ac568378fe branch: master author: Inada Naoki committer: methane date: 2021-04-02T08:59:15+09:00 summary: bpo-43651: Fix EncodingWarning in lib2to3/pgen2/pgen.py (GH-25127) files: M Lib/lib2to3/pgen2/pgen.py diff --git a/Lib/lib2to3/pgen2/pgen.py b/Lib/lib2to3/pgen2/pgen.py index b0cbd16c4dad4..7abd5cef1c36b 100644 --- a/Lib/lib2to3/pgen2/pgen.py +++ b/Lib/lib2to3/pgen2/pgen.py @@ -12,7 +12,7 @@ class ParserGenerator(object): def __init__(self, filename, stream=None): close_stream = None if stream is None: - stream = open(filename) + stream = open(filename, encoding="utf-8") close_stream = stream.close self.filename = filename self.stream = stream From webhook-mailer at python.org Thu Apr 1 20:02:05 2021 From: webhook-mailer at python.org (methane) Date: Fri, 02 Apr 2021 00:02:05 -0000 Subject: [Python-checkins] bpo-43651: Fix test_compileall with PEP 597 (GH-25128) Message-ID: https://github.com/python/cpython/commit/80017752ba938852d53f9d83a404b4ecd9ff2baa commit: 80017752ba938852d53f9d83a404b4ecd9ff2baa branch: master author: Inada Naoki committer: methane date: 2021-04-02T09:01:57+09:00 summary: bpo-43651: Fix test_compileall with PEP 597 (GH-25128) files: M Lib/compileall.py M Lib/multiprocessing/util.py M Lib/test/test_compileall.py diff --git a/Lib/compileall.py b/Lib/compileall.py index 672cb43971869..61b4c5c0af1ad 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -407,7 +407,8 @@ def main(): # if flist is provided then load it if args.flist: try: - with (sys.stdin if args.flist=='-' else open(args.flist)) as f: + with (sys.stdin if args.flist=='-' else + open(args.flist, encoding="utf-8")) as f: for line in f: compile_dests.append(line.strip()) except OSError: diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py index 21f2a7ebe2500..a4683339820f5 100644 --- a/Lib/multiprocessing/util.py +++ b/Lib/multiprocessing/util.py @@ -419,7 +419,7 @@ def _close_stdin(): try: fd = os.open(os.devnull, os.O_RDONLY) try: - sys.stdin = open(fd, closefd=False) + sys.stdin = open(fd, encoding="utf-8", closefd=False) except: os.close(fd) raise diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py index fa24b3c5a11dd..96a0f8f729aa4 100644 --- a/Lib/test/test_compileall.py +++ b/Lib/test/test_compileall.py @@ -58,7 +58,7 @@ def setUp(self): self.directory = tempfile.mkdtemp() self.source_path = os.path.join(self.directory, '_test.py') self.bc_path = importlib.util.cache_from_source(self.source_path) - with open(self.source_path, 'w') as file: + with open(self.source_path, 'w', encoding="utf-8") as file: file.write('x = 123\n') self.source_path2 = os.path.join(self.directory, '_test2.py') self.bc_path2 = importlib.util.cache_from_source(self.source_path2) @@ -73,7 +73,7 @@ def tearDown(self): def add_bad_source_file(self): self.bad_source_path = os.path.join(self.directory, '_test_bad.py') - with open(self.bad_source_path, 'w') as file: + with open(self.bad_source_path, 'w', encoding="utf-8") as file: file.write('x (\n') def timestamp_metadata(self): @@ -164,7 +164,7 @@ def test_no_pycache_in_non_package(self): data_file = os.path.join(data_dir, 'file') os.mkdir(data_dir) # touch data/file - with open(data_file, 'w'): + with open(data_file, 'wb'): pass compileall.compile_file(data_file) self.assertFalse(os.path.exists(os.path.join(data_dir, '__pycache__'))) @@ -440,8 +440,7 @@ def setUpClass(cls): if not directory.is_dir(): directory.mkdir() directory_created = True - with path.open('w') as file: - file.write('# for test_compileall') + path.write_text('# for test_compileall', encoding="utf-8") except OSError: sys_path_writable = False break @@ -704,7 +703,7 @@ def test_include_file_with_arg(self): f2 = script_helper.make_script(self.pkgdir, 'f2', '') f3 = script_helper.make_script(self.pkgdir, 'f3', '') f4 = script_helper.make_script(self.pkgdir, 'f4', '') - with open(os.path.join(self.directory, 'l1'), 'w') as l1: + with open(os.path.join(self.directory, 'l1'), 'w', encoding="utf-8") as l1: l1.write(os.path.join(self.pkgdir, 'f1.py')+os.linesep) l1.write(os.path.join(self.pkgdir, 'f2.py')+os.linesep) self.assertRunOK('-i', os.path.join(self.directory, 'l1'), f4) @@ -718,7 +717,7 @@ def test_include_file_no_arg(self): f2 = script_helper.make_script(self.pkgdir, 'f2', '') f3 = script_helper.make_script(self.pkgdir, 'f3', '') f4 = script_helper.make_script(self.pkgdir, 'f4', '') - with open(os.path.join(self.directory, 'l1'), 'w') as l1: + with open(os.path.join(self.directory, 'l1'), 'w', encoding="utf-8") as l1: l1.write(os.path.join(self.pkgdir, 'f2.py')+os.linesep) self.assertRunOK('-i', os.path.join(self.directory, 'l1')) self.assertNotCompiled(f1) From webhook-mailer at python.org Thu Apr 1 20:06:37 2021 From: webhook-mailer at python.org (rhettinger) Date: Fri, 02 Apr 2021 00:06:37 -0000 Subject: [Python-checkins] bpo-43677: Fix a minor error in Doc/howto/descriptor.rst (GH-25123) (#25140) Message-ID: https://github.com/python/cpython/commit/d104a786fff5980360056d908a2d952b42306171 commit: d104a786fff5980360056d908a2d952b42306171 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-01T17:06:30-07:00 summary: bpo-43677: Fix a minor error in Doc/howto/descriptor.rst (GH-25123) (#25140) files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 032d08009f442..c7035bad4b6fa 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -1054,7 +1054,7 @@ roughly equivalent to: .. testcode:: class MethodType: - "Emulate Py_MethodType in Objects/classobject.c" + "Emulate PyMethod_Type in Objects/classobject.c" def __init__(self, func, obj): self.__func__ = func From webhook-mailer at python.org Thu Apr 1 23:30:53 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 03:30:53 -0000 Subject: [Python-checkins] bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Message-ID: https://github.com/python/cpython/commit/bef7b26f7229f8b7cde843118a7bc7e2b00f0372 commit: bef7b26f7229f8b7cde843118a7bc7e2b00f0372 branch: master author: Erlend Egeberg Aasland committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-01T20:30:40-07:00 summary: bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Automerge-Triggered-By: GH:zware files: M README.rst diff --git a/README.rst b/README.rst index 9c32e4eafeff2..42b42df7e50f8 100644 --- a/README.rst +++ b/README.rst @@ -17,9 +17,9 @@ This is Python version 3.10.0 alpha 6 :alt: CPython code coverage on Codecov :target: https://codecov.io/gh/python/cpython -.. image:: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg - :alt: Python Zulip chat - :target: https://python.zulipchat.com +.. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg + :alt: Python Discourse chat + :target: https://discuss.python.org/ Copyright (c) 2001-2021 Python Software Foundation. All rights reserved. From webhook-mailer at python.org Thu Apr 1 23:54:06 2021 From: webhook-mailer at python.org (methane) Date: Fri, 02 Apr 2021 03:54:06 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25142) Message-ID: https://github.com/python/cpython/commit/8bbfeb3330c10d52274bb85fce59ae614f0500bf commit: 8bbfeb3330c10d52274bb85fce59ae614f0500bf branch: master author: Inada Naoki committer: methane date: 2021-04-02T12:53:46+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25142) * test__xxsubinterpreters * test_builtin * test_doctest * test_exceptions * test_opcodes * test_support * test_argparse * test_baseexception * test_bdb * test_bool * test_asdl_parser files: M Lib/test/test__xxsubinterpreters.py M Lib/test/test_argparse.py M Lib/test/test_baseexception.py M Lib/test/test_bdb.py M Lib/test/test_bool.py M Lib/test/test_builtin.py M Lib/test/test_doctest.py M Lib/test/test_exceptions.py M Lib/test/test_opcodes.py M Lib/test/test_support.py M Parser/asdl.py diff --git a/Lib/test/test__xxsubinterpreters.py b/Lib/test/test__xxsubinterpreters.py index cf34fc3d0e7af..7baea69a4e5fa 100644 --- a/Lib/test/test__xxsubinterpreters.py +++ b/Lib/test/test__xxsubinterpreters.py @@ -25,11 +25,11 @@ def _captured_script(script): indented = script.replace('\n', '\n ') wrapped = dedent(f""" import contextlib - with open({w}, 'w') as spipe: + with open({w}, 'w', encoding="utf-8") as spipe: with contextlib.redirect_stdout(spipe): {indented} """) - return wrapped, open(r) + return wrapped, open(r, encoding="utf-8") def _run_output(interp, request, shared=None): @@ -45,7 +45,7 @@ def _running(interp): def run(): interpreters.run_string(interp, dedent(f""" # wait for "signal" - with open({r}) as rpipe: + with open({r}, encoding="utf-8") as rpipe: rpipe.read() """)) @@ -54,7 +54,7 @@ def run(): yield - with open(w, 'w') as spipe: + with open(w, 'w', encoding="utf-8") as spipe: spipe.write('done') t.join() @@ -806,7 +806,7 @@ def f(): @unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()") def test_fork(self): import tempfile - with tempfile.NamedTemporaryFile('w+') as file: + with tempfile.NamedTemporaryFile('w+', encoding="utf-8") as file: file.write('') file.flush() @@ -816,7 +816,7 @@ def test_fork(self): try: os.fork() except RuntimeError: - with open('{file.name}', 'w') as out: + with open('{file.name}', 'w', encoding='utf-8') as out: out.write('{expected}') """) interpreters.run_string(self.id, script) diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index ec9711e4f6a47..4d0316f73edcd 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -45,7 +45,7 @@ def tearDown(self): def create_readonly_file(self, filename): file_path = os.path.join(self.temp_dir, filename) - with open(file_path, 'w') as file: + with open(file_path, 'w', encoding="utf-8") as file: file.write(filename) os.chmod(file_path, stat.S_IREAD) @@ -1468,7 +1468,7 @@ def setUp(self): ('invalid', '@no-such-path\n'), ] for path, text in file_texts: - with open(path, 'w') as file: + with open(path, 'w', encoding="utf-8") as file: file.write(text) parser_signature = Sig(fromfile_prefix_chars='@') @@ -1498,7 +1498,7 @@ def setUp(self): ('hello', 'hello world!\n'), ] for path, text in file_texts: - with open(path, 'w') as file: + with open(path, 'w', encoding="utf-8") as file: file.write(text) class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): @@ -1580,7 +1580,8 @@ class TestFileTypeR(TempDirMixin, ParserTestCase): def setUp(self): super(TestFileTypeR, self).setUp() for file_name in ['foo', 'bar']: - with open(os.path.join(self.temp_dir, file_name), 'w') as file: + with open(os.path.join(self.temp_dir, file_name), + 'w', encoding="utf-8") as file: file.write(file_name) self.create_readonly_file('readonly') @@ -1601,7 +1602,7 @@ class TestFileTypeDefaults(TempDirMixin, ParserTestCase): """Test that a file is not created unless the default is needed""" def setUp(self): super(TestFileTypeDefaults, self).setUp() - file = open(os.path.join(self.temp_dir, 'good'), 'w') + file = open(os.path.join(self.temp_dir, 'good'), 'w', encoding="utf-8") file.write('good') file.close() @@ -1620,7 +1621,8 @@ class TestFileTypeRB(TempDirMixin, ParserTestCase): def setUp(self): super(TestFileTypeRB, self).setUp() for file_name in ['foo', 'bar']: - with open(os.path.join(self.temp_dir, file_name), 'w') as file: + with open(os.path.join(self.temp_dir, file_name), + 'w', encoding="utf-8") as file: file.write(file_name) argument_signatures = [ diff --git a/Lib/test/test_baseexception.py b/Lib/test/test_baseexception.py index c32468269a731..8db497a172850 100644 --- a/Lib/test/test_baseexception.py +++ b/Lib/test/test_baseexception.py @@ -28,8 +28,9 @@ def test_inheritance(self): except TypeError: pass - inheritance_tree = open(os.path.join(os.path.split(__file__)[0], - 'exception_hierarchy.txt')) + inheritance_tree = open( + os.path.join(os.path.split(__file__)[0], 'exception_hierarchy.txt'), + encoding="utf-8") try: superclass_name = inheritance_tree.readline().rstrip() try: diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py index 9bce780e0d041..71be069d2412c 100644 --- a/Lib/test/test_bdb.py +++ b/Lib/test/test_bdb.py @@ -539,7 +539,7 @@ def create_modules(modules): try: for m in modules: fname = m + '.py' - with open(fname, 'w') as f: + with open(fname, 'w', encoding="utf-8") as f: f.write(textwrap.dedent(modules[m])) linecache.checkcache(fname) importlib.invalidate_caches() diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py index bec44d0b9c591..a3214c90ed61e 100644 --- a/Lib/test/test_bool.py +++ b/Lib/test/test_bool.py @@ -235,7 +235,7 @@ def test_boolean(self): def test_fileclosed(self): try: - with open(os_helper.TESTFN, "w") as f: + with open(os_helper.TESTFN, "w", encoding="utf-8") as f: self.assertIs(f.closed, False) self.assertIs(f.closed, True) finally: diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 295f0713bfd59..bd8353d038b6f 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1159,7 +1159,7 @@ def test_oct(self): def write_testfile(self): # NB the first 4 lines are also used to test input, below - fp = open(TESTFN, 'w') + fp = open(TESTFN, 'w', encoding="utf-8") self.addCleanup(unlink, TESTFN) with fp: fp.write('1+1\n') @@ -1171,7 +1171,7 @@ def write_testfile(self): def test_open(self): self.write_testfile() - fp = open(TESTFN, 'r') + fp = open(TESTFN, encoding="utf-8") with fp: self.assertEqual(fp.readline(4), '1+1\n') self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n') @@ -1197,7 +1197,9 @@ def test_open_default_encoding(self): self.write_testfile() current_locale_encoding = locale.getpreferredencoding(False) - fp = open(TESTFN, 'w') + with warnings.catch_warnings(): + warnings.simplefilter("ignore", EncodingWarning) + fp = open(TESTFN, 'w') with fp: self.assertEqual(fp.encoding, current_locale_encoding) finally: @@ -1205,7 +1207,7 @@ def test_open_default_encoding(self): os.environ.update(old_environ) def test_open_non_inheritable(self): - fileobj = open(__file__) + fileobj = open(__file__, encoding="utf-8") with fileobj: self.assertFalse(os.get_inheritable(fileobj.fileno())) @@ -1300,7 +1302,7 @@ def test_pow(self): def test_input(self): self.write_testfile() - fp = open(TESTFN, 'r') + fp = open(TESTFN, encoding="utf-8") savestdin = sys.stdin savestdout = sys.stdout # Eats the echo try: @@ -2022,7 +2024,7 @@ def _run_child(self, child, terminal_input): os.write(fd, terminal_input) # Get results from the pipe - with open(r, "r") as rpipe: + with open(r, encoding="utf-8") as rpipe: lines = [] while True: line = rpipe.readline().strip() diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 6a5013f5b8afc..6f51b1bc4f0d1 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -2846,7 +2846,7 @@ def test_CLI(): r""" >>> from test.support.os_helper import temp_dir >>> with temp_dir() as tmpdir: ... fn = os.path.join(tmpdir, 'myfile.doc') - ... with open(fn, 'w') as f: + ... with open(fn, 'w', encoding='utf-8') as f: ... _ = f.write('This is a very simple test file.\n') ... _ = f.write(' >>> 1 + 1\n') ... _ = f.write(' 2\n') @@ -2898,7 +2898,7 @@ def test_CLI(): r""" >>> from test.support.os_helper import temp_dir >>> with temp_dir() as tmpdir: ... fn = os.path.join(tmpdir, 'myfile.doc') - ... with open(fn, 'w') as f: + ... with open(fn, 'w', encoding="utf-8") as f: ... _ = f.write('This is another simple test file.\n') ... _ = f.write(' >>> 1 + 1\n') ... _ = f.write(' 2\n') @@ -2909,7 +2909,7 @@ def test_CLI(): r""" ... _ = f.write('\n') ... _ = f.write('And that is it.\n') ... fn2 = os.path.join(tmpdir, 'myfile2.py') - ... with open(fn2, 'w') as f: + ... with open(fn2, 'w', encoding='utf-8') as f: ... _ = f.write('def test_func():\n') ... _ = f.write(' \"\"\"\n') ... _ = f.write(' This is simple python test function.\n') diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 21878c39f4fec..1e6f525cbb509 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -54,9 +54,9 @@ def testRaising(self): self.assertRaises(AttributeError, getattr, sys, "undefined_attribute") self.raise_catch(EOFError, "EOFError") - fp = open(TESTFN, 'w') + fp = open(TESTFN, 'w', encoding="utf-8") fp.close() - fp = open(TESTFN, 'r') + fp = open(TESTFN, 'r', encoding="utf-8") savestdin = sys.stdin try: try: diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py index e5103647219f7..4be78a4e62b6d 100644 --- a/Lib/test/test_opcodes.py +++ b/Lib/test/test_opcodes.py @@ -24,7 +24,7 @@ def test_try_inside_for_loop(self): def test_setup_annotations_line(self): # check that SETUP_ANNOTATIONS does not create spurious line numbers try: - with open(ann_module.__file__) as f: + with open(ann_module.__file__, encoding="utf-8") as f: txt = f.read() co = compile(txt, ann_module.__file__, 'exec') self.assertEqual(co.co_firstlineno, 1) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 71a66c27aa21d..55d78b733353d 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -47,7 +47,7 @@ def test_unload(self): self.assertNotIn("sched", sys.modules) def test_unlink(self): - with open(TESTFN, "w") as f: + with open(TESTFN, "w", encoding="utf-8") as f: pass os_helper.unlink(TESTFN) self.assertFalse(os.path.exists(TESTFN)) @@ -79,7 +79,7 @@ def test_rmtree(self): def test_forget(self): mod_filename = TESTFN + '.py' - with open(mod_filename, 'w') as f: + with open(mod_filename, 'w', encoding="utf-8") as f: print('foo = 1', file=f) sys.path.insert(0, os.curdir) importlib.invalidate_caches() diff --git a/Parser/asdl.py b/Parser/asdl.py index 7f509488b96ed..e3e6c34d2a98e 100644 --- a/Parser/asdl.py +++ b/Parser/asdl.py @@ -204,7 +204,7 @@ def check(mod): def parse(filename): """Parse ASDL from the given file and return a Module node describing it.""" - with open(filename) as f: + with open(filename, encoding="utf-8") as f: parser = ASDLParser() return parser.parse(f.read()) From webhook-mailer at python.org Thu Apr 1 23:58:15 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 03:58:15 -0000 Subject: [Python-checkins] bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Message-ID: https://github.com/python/cpython/commit/a217e0ab98e883a550da001e95cb3452c1a6b9da commit: a217e0ab98e883a550da001e95cb3452c1a6b9da branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-01T20:58:07-07:00 summary: bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Automerge-Triggered-By: GH:zware (cherry picked from commit bef7b26f7229f8b7cde843118a7bc7e2b00f0372) Co-authored-by: Erlend Egeberg Aasland files: M README.rst diff --git a/README.rst b/README.rst index 0a36bc16a958b..cf73e70038c4f 100644 --- a/README.rst +++ b/README.rst @@ -17,9 +17,9 @@ This is Python version 3.9.2 :alt: CPython code coverage on Codecov :target: https://codecov.io/gh/python/cpython -.. image:: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg - :alt: Python Zulip chat - :target: https://python.zulipchat.com +.. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg + :alt: Python Discourse chat + :target: https://discuss.python.org/ Copyright (c) 2001-2021 Python Software Foundation. All rights reserved. From webhook-mailer at python.org Thu Apr 1 23:58:32 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 03:58:32 -0000 Subject: [Python-checkins] bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Message-ID: https://github.com/python/cpython/commit/154f86f056c0f68cadd310e68fd2855f9fc9a5a8 commit: 154f86f056c0f68cadd310e68fd2855f9fc9a5a8 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-01T20:58:28-07:00 summary: bpo-43700: Replace Zulip badge with Discourse badge (GH-25141) Automerge-Triggered-By: GH:zware (cherry picked from commit bef7b26f7229f8b7cde843118a7bc7e2b00f0372) Co-authored-by: Erlend Egeberg Aasland files: M README.rst diff --git a/README.rst b/README.rst index 18223f9f4e972..229b4cf58e9e2 100644 --- a/README.rst +++ b/README.rst @@ -13,9 +13,9 @@ This is Python version 3.8.8 :alt: CPython code coverage on Codecov :target: https://codecov.io/gh/python/cpython/branch/3.8 -.. image:: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg - :alt: Python Zulip chat - :target: https://python.zulipchat.com +.. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg + :alt: Python Discourse chat + :target: https://discuss.python.org/ Copyright (c) 2001-2021 Python Software Foundation. All rights reserved. From webhook-mailer at python.org Fri Apr 2 04:39:19 2021 From: webhook-mailer at python.org (methane) Date: Fri, 02 Apr 2021 08:39:19 -0000 Subject: [Python-checkins] bpo-43510: Fix emitting EncodingWarning from _io module. (GH-25146) Message-ID: https://github.com/python/cpython/commit/bec8c787ec72d73b39011bde3f3a93e9bb1174b7 commit: bec8c787ec72d73b39011bde3f3a93e9bb1174b7 branch: master author: Inada Naoki committer: methane date: 2021-04-02T17:38:59+09:00 summary: bpo-43510: Fix emitting EncodingWarning from _io module. (GH-25146) I forget to check PyErr_WarnEx() return value. But it will fail when -Werror is used. files: M Modules/_io/_iomodule.c M Modules/_io/textio.c diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 652c2ce5b0d61..170dea41e8abd 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -532,8 +532,10 @@ _io_text_encoding_impl(PyObject *module, PyObject *encoding, int stacklevel) if (encoding == NULL || encoding == Py_None) { PyInterpreterState *interp = _PyInterpreterState_GET(); if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) { - PyErr_WarnEx(PyExc_EncodingWarning, - "'encoding' argument not specified", stacklevel); + if (PyErr_WarnEx(PyExc_EncodingWarning, + "'encoding' argument not specified", stacklevel)) { + return NULL; + } } Py_INCREF(_PyIO_str_locale); return _PyIO_str_locale; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 6f89a879c9c2b..eb05ae1a16eb0 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1085,6 +1085,19 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, self->ok = 0; self->detached = 0; + if (encoding == NULL) { + PyInterpreterState *interp = _PyInterpreterState_GET(); + if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) { + if (PyErr_WarnEx(PyExc_EncodingWarning, + "'encoding' argument not specified", 1)) { + return -1; + } + } + } + else if (strcmp(encoding, "locale") == 0) { + encoding = NULL; + } + if (errors == Py_None) { errors = _PyUnicode_FromId(&PyId_strict); /* borrowed */ if (errors == NULL) { @@ -1123,17 +1136,6 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, self->encodefunc = NULL; self->b2cratio = 0.0; - if (encoding == NULL) { - PyInterpreterState *interp = _PyInterpreterState_GET(); - if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) { - PyErr_WarnEx(PyExc_EncodingWarning, - "'encoding' argument not specified", 1); - } - } - else if (strcmp(encoding, "locale") == 0) { - encoding = NULL; - } - if (encoding == NULL) { /* Try os.device_encoding(fileno) */ PyObject *fileno; From webhook-mailer at python.org Fri Apr 2 07:17:00 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 02 Apr 2021 11:17:00 -0000 Subject: [Python-checkins] [3.9] bpo-26053: Fix args echoed by pdb run command (GH-25149) Message-ID: https://github.com/python/cpython/commit/7ad56e254519047aeb9c669b9ea2f2bf0acfd401 commit: 7ad56e254519047aeb9c669b9ea2f2bf0acfd401 branch: 3.9 author: Irit Katriel committer: vstinner date: 2021-04-02T13:16:55+02:00 summary: [3.9] bpo-26053: Fix args echoed by pdb run command (GH-25149) * bpo-26053: Fix args echoed by pdb run command (GH-22033) (cherry picked from commit 652bfdee9495dca241d48278742fe035b7a82bdb) * bpo-26053: Fix test_pdb.test_issue26053() (GH-25139) (cherry picked from commit bd4ab8e73906a4f12d5353f567228b7c7497baf7) files: A Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 7a5192cbadc3a..98dc975eafafd 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1708,7 +1708,7 @@ def main(): print("The program finished and will be restarted") except Restart: print("Restarting", mainpyfile, "with arguments:") - print("\t" + " ".join(args)) + print("\t" + " ".join(sys.argv[1:])) except SystemExit: # In most cases SystemExit does not warrant a post-mortem session. print("The program exited via sys.exit(). Exit status:", end=' ') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 6c4eaf318e448..0da449e33e98b 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1443,6 +1443,19 @@ def test_issue16180(self): 'Fail to handle a syntax error in the debuggee.' .format(expected, stdout)) + def test_issue26053(self): + # run command of pdb prompt echoes the correct args + script = "print('hello')" + commands = """ + continue + run a b c + run d e f + quit + """ + stdout, stderr = self.run_pdb_script(script, commands) + res = '\n'.join([x.strip() for x in stdout.splitlines()]) + self.assertRegex(res, "Restarting .* with arguments:\na b c") + self.assertRegex(res, "Restarting .* with arguments:\nd e f") def test_readrc_kwarg(self): script = textwrap.dedent(""" diff --git a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst new file mode 100644 index 0000000000000..e8720ac82ffb1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst @@ -0,0 +1 @@ +Fixed bug where the :mod:`pdb` interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. From webhook-mailer at python.org Fri Apr 2 07:33:38 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 11:33:38 -0000 Subject: [Python-checkins] [3.9] bpo-26053: Fix args echoed by pdb run command (GH-25149) Message-ID: https://github.com/python/cpython/commit/2049bb2517c08b0d9eaaa4dd624afa5d60e8b5a8 commit: 2049bb2517c08b0d9eaaa4dd624afa5d60e8b5a8 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-02T04:33:31-07:00 summary: [3.9] bpo-26053: Fix args echoed by pdb run command (GH-25149) * bpo-26053: Fix args echoed by pdb run command (GH-22033) (cherry picked from commit 652bfdee9495dca241d48278742fe035b7a82bdb) * bpo-26053: Fix test_pdb.test_issue26053() (GH-25139) (cherry picked from commit bd4ab8e73906a4f12d5353f567228b7c7497baf7) (cherry picked from commit 7ad56e254519047aeb9c669b9ea2f2bf0acfd401) Co-authored-by: Irit Katriel files: A Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 7a5192cbadc3a..98dc975eafafd 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1708,7 +1708,7 @@ def main(): print("The program finished and will be restarted") except Restart: print("Restarting", mainpyfile, "with arguments:") - print("\t" + " ".join(args)) + print("\t" + " ".join(sys.argv[1:])) except SystemExit: # In most cases SystemExit does not warrant a post-mortem session. print("The program exited via sys.exit(). Exit status:", end=' ') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index f77c355077411..ac731fefdd24b 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1440,6 +1440,19 @@ def test_issue16180(self): 'Fail to handle a syntax error in the debuggee.' .format(expected, stdout)) + def test_issue26053(self): + # run command of pdb prompt echoes the correct args + script = "print('hello')" + commands = """ + continue + run a b c + run d e f + quit + """ + stdout, stderr = self.run_pdb_script(script, commands) + res = '\n'.join([x.strip() for x in stdout.splitlines()]) + self.assertRegex(res, "Restarting .* with arguments:\na b c") + self.assertRegex(res, "Restarting .* with arguments:\nd e f") def test_readrc_kwarg(self): script = textwrap.dedent(""" diff --git a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst new file mode 100644 index 0000000000000..e8720ac82ffb1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst @@ -0,0 +1 @@ +Fixed bug where the :mod:`pdb` interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. From webhook-mailer at python.org Fri Apr 2 08:25:05 2021 From: webhook-mailer at python.org (markshannon) Date: Fri, 02 Apr 2021 12:25:05 -0000 Subject: [Python-checkins] Document PyCode_Addr2Line function. (GH-25111) Message-ID: https://github.com/python/cpython/commit/58384c6ab01bbc35cc14cdeb716f6c45a3df426b commit: 58384c6ab01bbc35cc14cdeb716f6c45a3df426b branch: master author: Mark Shannon committer: markshannon date: 2021-04-02T13:24:57+01:00 summary: Document PyCode_Addr2Line function. (GH-25111) * Document PyCode_Addr2Line function. * Clarify when to use PEP 626 line iterators. files: M Doc/c-api/code.rst diff --git a/Doc/c-api/code.rst b/Doc/c-api/code.rst index b3a17f1898e8e..6e18a4225e8f4 100644 --- a/Doc/c-api/code.rst +++ b/Doc/c-api/code.rst @@ -51,3 +51,11 @@ bound into a function. Return a new empty code object with the specified filename, function name, and first line number. It is illegal to :func:`exec` or :func:`eval` the resulting code object. + +.. c:function:: int PyCode_Addr2Line(PyCodeObject *co, int byte_offset) + + Return the line number of the instruction that occurs on or before ``byte_offset`` and ends after it. + If you just need the line number of a frame, use :c:func:`PyFrame_GetLineNumber` instead. + + For efficiently iterating over the line numbers in a code object, use `the API described in PEP 626 + `_. From webhook-mailer at python.org Fri Apr 2 09:28:20 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 02 Apr 2021 13:28:20 -0000 Subject: [Python-checkins] bpo-43687: Py_Initialize() creates singletons earlier (GH-25147) Message-ID: https://github.com/python/cpython/commit/442ad74fc2928b095760eb89aba93c28eab17f9b commit: 442ad74fc2928b095760eb89aba93c28eab17f9b branch: master author: Victor Stinner committer: vstinner date: 2021-04-02T15:28:13+02:00 summary: bpo-43687: Py_Initialize() creates singletons earlier (GH-25147) Reorganize pycore_interp_init() to initialize singletons before the the first PyType_Ready() call. Fix an issue when Python is configured using --without-doc-strings. files: M Include/internal/pycore_long.h M Include/internal/pycore_pylifecycle.h M Objects/floatobject.c M Objects/longobject.c M Objects/structseq.c M Objects/unicodeobject.c M Python/errors.c M Python/pylifecycle.c diff --git a/Include/internal/pycore_long.h b/Include/internal/pycore_long.h index a785b23a92b8c..2bea3a55ec873 100644 --- a/Include/internal/pycore_long.h +++ b/Include/internal/pycore_long.h @@ -18,8 +18,8 @@ static inline PyObject* __PyLong_GetSmallInt_internal(int value) assert(-_PY_NSMALLNEGINTS <= value && value < _PY_NSMALLPOSINTS); size_t index = _PY_NSMALLNEGINTS + value; PyObject *obj = (PyObject*)interp->small_ints[index]; - // _PyLong_GetZero() and _PyLong_GetOne() must not be called - // before _PyLong_Init() nor after _PyLong_Fini() + // _PyLong_GetZero(), _PyLong_GetOne() and get_small_int() must not be + // called before _PyLong_Init() nor after _PyLong_Fini(). assert(obj != NULL); return obj; } diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h index 7ae107d73dae3..524be9d4cbb94 100644 --- a/Include/internal/pycore_pylifecycle.h +++ b/Include/internal/pycore_pylifecycle.h @@ -50,9 +50,11 @@ PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc); /* Various one-time initializers */ extern PyStatus _PyUnicode_Init(PyInterpreterState *interp); +extern PyStatus _PyUnicode_InitTypes(void); extern PyStatus _PyBytes_Init(PyInterpreterState *interp); extern int _PyStructSequence_Init(void); extern int _PyLong_Init(PyInterpreterState *interp); +extern int _PyLong_InitTypes(void); extern PyStatus _PyTuple_Init(PyInterpreterState *interp); extern PyStatus _PyFaulthandler_Init(int enable); extern int _PyTraceMalloc_Init(int enable); @@ -64,9 +66,10 @@ extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options); extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config); extern int _PySys_UpdateConfig(PyThreadState *tstate); extern PyStatus _PyExc_Init(PyInterpreterState *interp); -extern PyStatus _PyErr_Init(void); +extern PyStatus _PyErr_InitTypes(void); extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod); -extern int _PyFloat_Init(void); +extern void _PyFloat_Init(void); +extern int _PyFloat_InitTypes(void); extern PyStatus _Py_HashRandomization_Init(const PyConfig *); extern PyStatus _PyTypes_Init(void); diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 178f7b2f8d2fa..b3c41b1ca051d 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -1968,7 +1968,7 @@ PyTypeObject PyFloat_Type = { .tp_vectorcall = (vectorcallfunc)float_vectorcall, }; -int +void _PyFloat_Init(void) { /* We attempt to determine if this machine is using IEEE @@ -2016,14 +2016,18 @@ _PyFloat_Init(void) double_format = detected_double_format; float_format = detected_float_format; +} +int +_PyFloat_InitTypes(void) +{ /* Init float info */ if (FloatInfoType.tp_name == NULL) { if (PyStructSequence_InitType2(&FloatInfoType, &floatinfo_desc) < 0) { - return 0; + return -1; } } - return 1; + return 0; } void diff --git a/Objects/longobject.c b/Objects/longobject.c index d5037a79b9d52..e1c1191e648da 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -5719,17 +5719,20 @@ _PyLong_Init(PyInterpreterState *interp) interp->small_ints[i] = v; } + return 0; +} - if (_Py_IsMainInterpreter(interp)) { - /* initialize int_info */ - if (Int_InfoType.tp_name == NULL) { - if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0) { - return 0; - } + +int +_PyLong_InitTypes(void) +{ + /* initialize int_info */ + if (Int_InfoType.tp_name == NULL) { + if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0) { + return -1; } } - - return 1; + return 0; } void diff --git a/Objects/structseq.c b/Objects/structseq.c index 8a92bdbec08d1..88e63b658a420 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -579,7 +579,8 @@ int _PyStructSequence_Init(void) if (_PyUnicode_FromId(&PyId_n_sequence_fields) == NULL || _PyUnicode_FromId(&PyId_n_fields) == NULL || _PyUnicode_FromId(&PyId_n_unnamed_fields) == NULL) + { return -1; - + } return 0; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index f6bf505b7fc74..74c5888d13b22 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15676,18 +15676,6 @@ PyTypeObject PyUnicode_Type = { PyStatus _PyUnicode_Init(PyInterpreterState *interp) { - /* XXX - move this array to unicodectype.c ? */ - const Py_UCS2 linebreak[] = { - 0x000A, /* LINE FEED */ - 0x000D, /* CARRIAGE RETURN */ - 0x001C, /* FILE SEPARATOR */ - 0x001D, /* GROUP SEPARATOR */ - 0x001E, /* RECORD SEPARATOR */ - 0x0085, /* NEXT LINE */ - 0x2028, /* LINE SEPARATOR */ - 0x2029, /* PARAGRAPH SEPARATOR */ - }; - struct _Py_unicode_state *state = &interp->unicode; if (unicode_create_empty_string_singleton(state) < 0) { return _PyStatus_NO_MEMORY(); @@ -15695,23 +15683,39 @@ _PyUnicode_Init(PyInterpreterState *interp) if (_Py_IsMainInterpreter(interp)) { /* initialize the linebreak bloom filter */ + const Py_UCS2 linebreak[] = { + 0x000A, /* LINE FEED */ + 0x000D, /* CARRIAGE RETURN */ + 0x001C, /* FILE SEPARATOR */ + 0x001D, /* GROUP SEPARATOR */ + 0x001E, /* RECORD SEPARATOR */ + 0x0085, /* NEXT LINE */ + 0x2028, /* LINE SEPARATOR */ + 0x2029, /* PARAGRAPH SEPARATOR */ + }; bloom_linebreak = make_bloom_mask( PyUnicode_2BYTE_KIND, linebreak, Py_ARRAY_LENGTH(linebreak)); + } - if (PyType_Ready(&PyUnicode_Type) < 0) { - return _PyStatus_ERR("Can't initialize unicode type"); - } + return _PyStatus_OK(); +} - if (PyType_Ready(&EncodingMapType) < 0) { - return _PyStatus_ERR("Can't initialize encoding map type"); - } - if (PyType_Ready(&PyFieldNameIter_Type) < 0) { - return _PyStatus_ERR("Can't initialize field name iterator type"); - } - if (PyType_Ready(&PyFormatterIter_Type) < 0) { - return _PyStatus_ERR("Can't initialize formatter iter type"); - } + +PyStatus +_PyUnicode_InitTypes(void) +{ + if (PyType_Ready(&PyUnicode_Type) < 0) { + return _PyStatus_ERR("Can't initialize unicode type"); + } + if (PyType_Ready(&EncodingMapType) < 0) { + return _PyStatus_ERR("Can't initialize encoding map type"); + } + if (PyType_Ready(&PyFieldNameIter_Type) < 0) { + return _PyStatus_ERR("Can't initialize field name iterator type"); + } + if (PyType_Ready(&PyFormatterIter_Type) < 0) { + return _PyStatus_ERR("Can't initialize formatter iter type"); } return _PyStatus_OK(); } diff --git a/Python/errors.c b/Python/errors.c index 9bac7ba70f5d5..d73ba93b02ece 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1192,7 +1192,7 @@ static PyStructSequence_Desc UnraisableHookArgs_desc = { PyStatus -_PyErr_Init(void) +_PyErr_InitTypes(void) { if (UnraisableHookArgsType.tp_name == NULL) { if (PyStructSequence_InitType2(&UnraisableHookArgsType, diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 8309477806f7a..64723ce82d76c 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -628,43 +628,67 @@ pycore_create_interpreter(_PyRuntimeState *runtime, static PyStatus -pycore_init_types(PyInterpreterState *interp) +pycore_init_singletons(PyInterpreterState *interp) { PyStatus status; - int is_main_interp = _Py_IsMainInterpreter(interp); - status = _PyGC_Init(interp); + if (_PyLong_Init(interp) < 0) { + return _PyStatus_ERR("can't init longs"); + } + + if (_Py_IsMainInterpreter(interp)) { + _PyFloat_Init(); + } + + status = _PyBytes_Init(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + status = _PyUnicode_Init(interp); if (_PyStatus_EXCEPTION(status)) { return status; } - // Create the empty tuple singleton. It must be created before the first - // PyType_Ready() call since PyType_Ready() creates tuples, for tp_bases - // for example. status = _PyTuple_Init(interp); if (_PyStatus_EXCEPTION(status)) { return status; } + return _PyStatus_OK(); +} + + +static PyStatus +pycore_init_types(PyInterpreterState *interp) +{ + PyStatus status; + int is_main_interp = _Py_IsMainInterpreter(interp); + if (is_main_interp) { + if (_PyStructSequence_Init() < 0) { + return _PyStatus_ERR("can't initialize structseq"); + } + status = _PyTypes_Init(); if (_PyStatus_EXCEPTION(status)) { return status; } - } - if (!_PyLong_Init(interp)) { - return _PyStatus_ERR("can't init longs"); - } + if (_PyLong_InitTypes() < 0) { + return _PyStatus_ERR("can't init int type"); + } - status = _PyUnicode_Init(interp); - if (_PyStatus_EXCEPTION(status)) { - return status; + status = _PyUnicode_InitTypes(); + if (_PyStatus_EXCEPTION(status)) { + return status; + } } - status = _PyBytes_Init(interp); - if (_PyStatus_EXCEPTION(status)) { - return status; + if (is_main_interp) { + if (_PyFloat_InitTypes() < 0) { + return _PyStatus_ERR("can't init float"); + } } status = _PyExc_Init(interp); @@ -672,17 +696,7 @@ pycore_init_types(PyInterpreterState *interp) return status; } - if (is_main_interp) { - if (!_PyFloat_Init()) { - return _PyStatus_ERR("can't init float"); - } - - if (_PyStructSequence_Init() < 0) { - return _PyStatus_ERR("can't initialize structseq"); - } - } - - status = _PyErr_Init(); + status = _PyErr_InitTypes(); if (_PyStatus_EXCEPTION(status)) { return status; } @@ -693,22 +707,15 @@ pycore_init_types(PyInterpreterState *interp) } } - if (_PyWarnings_InitState(interp) < 0) { - return _PyStatus_ERR("can't initialize warnings"); - } - - status = _PyAtExit_Init(interp); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - return _PyStatus_OK(); } static PyStatus -pycore_init_builtins(PyInterpreterState *interp) +pycore_init_builtins(PyThreadState *tstate) { + PyInterpreterState *interp = tstate->interp; + PyObject *bimod = _PyBuiltin_Init(interp); if (bimod == NULL) { goto error; @@ -744,6 +751,7 @@ pycore_init_builtins(PyInterpreterState *interp) } interp->import_func = Py_NewRef(import_func); + assert(!_PyErr_Occurred(tstate)); return _PyStatus_OK(); error: @@ -755,29 +763,49 @@ pycore_init_builtins(PyInterpreterState *interp) static PyStatus pycore_interp_init(PyThreadState *tstate) { + PyInterpreterState *interp = tstate->interp; PyStatus status; PyObject *sysmod = NULL; - status = pycore_init_types(tstate->interp); + // Create singletons before the first PyType_Ready() call, since + // PyType_Ready() uses singletons like the Unicode empty string (tp_doc) + // and the empty tuple singletons (tp_bases). + status = pycore_init_singletons(interp); if (_PyStatus_EXCEPTION(status)) { - goto done; + return status; } - status = _PySys_Create(tstate, &sysmod); + // The GC must be initialized before the first GC collection. + status = _PyGC_Init(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + status = pycore_init_types(interp); if (_PyStatus_EXCEPTION(status)) { goto done; } - assert(!_PyErr_Occurred(tstate)); + if (_PyWarnings_InitState(interp) < 0) { + return _PyStatus_ERR("can't initialize warnings"); + } + + status = _PyAtExit_Init(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } - status = pycore_init_builtins(tstate->interp); + status = _PySys_Create(tstate, &sysmod); if (_PyStatus_EXCEPTION(status)) { goto done; } - assert(!_PyErr_Occurred(tstate)); + status = pycore_init_builtins(tstate); + if (_PyStatus_EXCEPTION(status)) { + goto done; + } - const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp); + const PyConfig *config = _PyInterpreterState_GetConfig(interp); if (config->_install_importlib) { /* This call sets up builtin and frozen import support */ if (init_importlib(tstate, sysmod) < 0) { From webhook-mailer at python.org Fri Apr 2 09:45:45 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 02 Apr 2021 13:45:45 -0000 Subject: [Python-checkins] bpo-43688: Support the limited C API in debug mode (GH-25131) Message-ID: https://github.com/python/cpython/commit/3359cab038968935b40344fad7c30d211f9692e4 commit: 3359cab038968935b40344fad7c30d211f9692e4 branch: master author: Victor Stinner committer: vstinner date: 2021-04-02T15:45:37+02:00 summary: bpo-43688: Support the limited C API in debug mode (GH-25131) The limited C API is now supported if Python is built in debug mode (if the Py_DEBUG macro is defined). In the limited C API, the Py_INCREF() and Py_DECREF() functions are now implemented as opaque function calls, rather than accessing directly the PyObject.ob_refcnt member, if Python is built in debug mode and the Py_LIMITED_API macro targets Python 3.10 or newer. It became possible to support the limited C API in debug mode because the PyObject structure is the same in release and debug mode since Python 3.8 (see bpo-36465). The limited C API is still not supported in the --with-trace-refs special build (Py_TRACE_REFS macro). files: A Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst M Doc/whatsnew/3.10.rst M Include/object.h M Objects/object.c M PC/python3dll.c M setup.py diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index a8ff56745c758..b84bcf93edb1e 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1315,6 +1315,18 @@ New Features to simulate. (Contributed by Antoine Pitrou in :issue:`43356`.) +* The limited C API is now supported if Python is built in debug mode (if the + ``Py_DEBUG`` macro is defined). In the limited C API, the :c:func:`Py_INCREF` + and :c:func:`Py_DECREF` functions are now implemented as opaque function + calls, rather than accessing directly the :c:member:`PyObject.ob_refcnt` + member, if Python is built in debug mode and the ``Py_LIMITED_API`` macro + targets Python 3.10 or newer. It became possible to support the limited C API + in debug mode because the :c:type:`PyObject` structure is the same in release + and debug mode since Python 3.8 (see :issue:`36465`). + + The limited C API is still not supported in the ``--with-trace-refs`` special + build (``Py_TRACE_REFS`` macro). + (Contributed by Victor Stinner in :issue:`43688`.) Porting to Python 3.10 ---------------------- diff --git a/Include/object.h b/Include/object.h index 14545839341f4..3138db0a0a3e4 100644 --- a/Include/object.h +++ b/Include/object.h @@ -54,11 +54,11 @@ whose size is determined when the object is allocated. /* Py_DEBUG implies Py_REF_DEBUG. */ #if defined(Py_DEBUG) && !defined(Py_REF_DEBUG) -#define Py_REF_DEBUG +# define Py_REF_DEBUG #endif -#if defined(Py_LIMITED_API) && defined(Py_REF_DEBUG) -#error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG +#if defined(Py_LIMITED_API) && defined(Py_TRACE_REFS) +# error Py_LIMITED_API is incompatible with Py_TRACE_REFS #endif /* PyTypeObject structure is defined in cpython/object.h. @@ -74,8 +74,8 @@ typedef struct _typeobject PyTypeObject; #define _PyObject_EXTRA_INIT 0, 0, #else -#define _PyObject_HEAD_EXTRA -#define _PyObject_EXTRA_INIT +# define _PyObject_HEAD_EXTRA +# define _PyObject_EXTRA_INIT #endif /* PyObject_HEAD defines the initial segment of every PyObject. */ @@ -427,21 +427,46 @@ PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno, PyAPI_FUNC(void) _Py_Dealloc(PyObject *); +/* +These are provided as conveniences to Python runtime embedders, so that +they can have object code that is not dependent on Python compilation flags. +*/ +PyAPI_FUNC(void) Py_IncRef(PyObject *); +PyAPI_FUNC(void) Py_DecRef(PyObject *); + +// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL. +// Private functions used by Py_INCREF() and Py_DECREF(). +PyAPI_FUNC(void) _Py_IncRef(PyObject *); +PyAPI_FUNC(void) _Py_DecRef(PyObject *); + static inline void _Py_INCREF(PyObject *op) { +#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000 + // Stable ABI for Python 3.10 built in debug mode. + _Py_IncRef(op); +#else + // Non-limited C API and limited C API for Python 3.9 and older access + // directly PyObject.ob_refcnt. #ifdef Py_REF_DEBUG _Py_RefTotal++; #endif op->ob_refcnt++; +#endif } #define Py_INCREF(op) _Py_INCREF(_PyObject_CAST(op)) static inline void _Py_DECREF( -#ifdef Py_REF_DEBUG +#if defined(Py_REF_DEBUG) && !(defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000) const char *filename, int lineno, #endif PyObject *op) { +#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000 + // Stable ABI for Python 3.10 built in debug mode. + _Py_DecRef(op); +#else + // Non-limited C API and limited C API for Python 3.9 and older access + // directly PyObject.ob_refcnt. #ifdef Py_REF_DEBUG _Py_RefTotal--; #endif @@ -455,8 +480,9 @@ static inline void _Py_DECREF( else { _Py_Dealloc(op); } +#endif } -#ifdef Py_REF_DEBUG +#if defined(Py_REF_DEBUG) && !(defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000) # define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) #else # define Py_DECREF(op) _Py_DECREF(_PyObject_CAST(op)) @@ -525,13 +551,6 @@ static inline void _Py_XDECREF(PyObject *op) #define Py_XDECREF(op) _Py_XDECREF(_PyObject_CAST(op)) -/* -These are provided as conveniences to Python runtime embedders, so that -they can have object code that is not dependent on Python compilation flags. -*/ -PyAPI_FUNC(void) Py_IncRef(PyObject *); -PyAPI_FUNC(void) Py_DecRef(PyObject *); - // Create a new strong reference to an object: // increment the reference count of the object and return the object. PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj); diff --git a/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst b/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst new file mode 100644 index 0000000000000..6b1d44ee17686 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst @@ -0,0 +1,13 @@ +The limited C API is now supported if Python is built in debug mode (if the +``Py_DEBUG`` macro is defined). In the limited C API, the :c:func:`Py_INCREF` +and :c:func:`Py_DECREF` functions are now implemented as opaque function calls, +rather than accessing directly the :c:member:`PyObject.ob_refcnt` member, if +Python is built in debug mode and the ``Py_LIMITED_API`` macro targets Python +3.10 or newer. It became possible to support the limited C API in debug mode +because the :c:type:`PyObject` structure is the same in release and debug mode +since Python 3.8 (see :issue:`36465`). + +The limited C API is still not supported in the ``--with-trace-refs`` special +build (``Py_TRACE_REFS`` macro). + +Patch by Victor Stinner. diff --git a/Objects/object.c b/Objects/object.c index 0a8621b3503b3..0845966c5fe9d 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -13,6 +13,11 @@ #include "frameobject.h" #include "interpreteridobject.h" +#ifdef Py_LIMITED_API + // Prevent recursive call _Py_IncRef() <=> Py_INCREF() +# error "Py_LIMITED_API macro must not be defined" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -136,6 +141,18 @@ Py_DecRef(PyObject *o) Py_XDECREF(o); } +void +_Py_IncRef(PyObject *o) +{ + Py_INCREF(o); +} + +void +_Py_DecRef(PyObject *o) +{ + Py_DECREF(o); +} + PyObject * PyObject_Init(PyObject *op, PyTypeObject *tp) { diff --git a/PC/python3dll.c b/PC/python3dll.c index 1567ac159168a..b5735e81e81ae 100644 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -36,6 +36,8 @@ EXPORT_FUNC(_PyTrash_deposit_object) EXPORT_FUNC(_PyTrash_destroy_chain) EXPORT_FUNC(_PyTrash_thread_deposit_object) EXPORT_FUNC(_PyTrash_thread_destroy_chain) +EXPORT_FUNC(_Py_IncRef) +EXPORT_FUNC(_Py_DecRef) EXPORT_FUNC(Py_AddPendingCall) EXPORT_FUNC(Py_AtExit) EXPORT_FUNC(Py_BuildValue) diff --git a/setup.py b/setup.py index 75bd16375063a..3b4e7ae70a4ec 100644 --- a/setup.py +++ b/setup.py @@ -1864,17 +1864,11 @@ def detect_modules(self): ## # Uncomment these lines if you want to play with xxmodule.c ## self.add(Extension('xx', ['xxmodule.c'])) - if 'd' not in sysconfig.get_config_var('ABIFLAGS'): - # Non-debug mode: Build xxlimited with limited API - self.add(Extension('xxlimited', ['xxlimited.c'], - define_macros=[('Py_LIMITED_API', '0x030a0000')])) - self.add(Extension('xxlimited_35', ['xxlimited_35.c'], - define_macros=[('Py_LIMITED_API', '0x03050000')])) - else: - # Debug mode: Build xxlimited with the full API - # (which is compatible with the limited one) - self.add(Extension('xxlimited', ['xxlimited.c'])) - self.add(Extension('xxlimited_35', ['xxlimited_35.c'])) + # Limited C API + self.add(Extension('xxlimited', ['xxlimited.c'], + define_macros=[('Py_LIMITED_API', '0x030a0000')])) + self.add(Extension('xxlimited_35', ['xxlimited_35.c'], + define_macros=[('Py_LIMITED_API', '0x03050000')])) def detect_tkinter_fromenv(self): # Build _tkinter using the Tcl/Tk locations specified by From webhook-mailer at python.org Fri Apr 2 10:46:17 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 02 Apr 2021 14:46:17 -0000 Subject: [Python-checkins] bpo-43688: Support "make regen-limited-abi" in debug mode (GH-25133) Message-ID: https://github.com/python/cpython/commit/9bb5658bd122d40fff9f34a912be3297b303d18b commit: 9bb5658bd122d40fff9f34a912be3297b303d18b branch: master author: Victor Stinner committer: vstinner date: 2021-04-02T16:46:08+02:00 summary: bpo-43688: Support "make regen-limited-abi" in debug mode (GH-25133) files: M Tools/scripts/stable_abi.py diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 14fcf2f56a207..1690cfce1727d 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -91,11 +91,6 @@ def check_library(stable_abi_file, library, abi_funcs, dynamic=False): def generate_limited_api_symbols(args): - if hasattr(sys, "gettotalrefcount"): - print( - "Stable ABI symbols cannot be generated from a debug build", file=sys.stderr - ) - sys.exit(1) library = sysconfig.get_config_var("LIBRARY") ldlibrary = sysconfig.get_config_var("LDLIBRARY") if ldlibrary != library: From webhook-mailer at python.org Fri Apr 2 10:48:20 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 02 Apr 2021 14:48:20 -0000 Subject: [Python-checkins] bpo-41111: xxlimited.c defines Py_LIMITED_API (GH-25151) Message-ID: https://github.com/python/cpython/commit/240bcf82a11fe7433a61da70605e924c53b88096 commit: 240bcf82a11fe7433a61da70605e924c53b88096 branch: master author: Victor Stinner committer: vstinner date: 2021-04-02T16:48:11+02:00 summary: bpo-41111: xxlimited.c defines Py_LIMITED_API (GH-25151) xxlimited.c and xxlimited_35.c now define the Py_LIMITED_API macro, rather than having to do it in the build recipe. Co-authored-by: Hai Shi files: M Modules/xxlimited.c M Modules/xxlimited_35.c M PCbuild/xxlimited.vcxproj M PCbuild/xxlimited_35.vcxproj M setup.py diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 883c8a9b5e183..c3d98d34eb591 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -55,6 +55,8 @@ pass */ +#define Py_LIMITED_API 0x030a0000 + #include "Python.h" // Module state diff --git a/Modules/xxlimited_35.c b/Modules/xxlimited_35.c index ce96e8c90efd4..5e93854f68571 100644 --- a/Modules/xxlimited_35.c +++ b/Modules/xxlimited_35.c @@ -5,10 +5,12 @@ * See the xxlimited module for an extension module template. */ -/* Xxo objects */ +#define Py_LIMITED_API 0x03050000 #include "Python.h" +/* Xxo objects */ + static PyObject *ErrorObject; typedef struct { diff --git a/PCbuild/xxlimited.vcxproj b/PCbuild/xxlimited.vcxproj index 61e4e5784e7ab..1c776fb0da3e7 100644 --- a/PCbuild/xxlimited.vcxproj +++ b/PCbuild/xxlimited.vcxproj @@ -93,9 +93,6 @@ <_ProjectFileVersion>10.0.30319.1 - - %(PreprocessorDefinitions);Py_LIMITED_API=0x030A0000 - wsock32.lib;%(AdditionalDependencies) diff --git a/PCbuild/xxlimited_35.vcxproj b/PCbuild/xxlimited_35.vcxproj index 7e49eadf9037d..dd830b3b6aaa9 100644 --- a/PCbuild/xxlimited_35.vcxproj +++ b/PCbuild/xxlimited_35.vcxproj @@ -93,9 +93,6 @@ <_ProjectFileVersion>10.0.30319.1 - - %(PreprocessorDefinitions);Py_LIMITED_API=0x03060000 - wsock32.lib;%(AdditionalDependencies) diff --git a/setup.py b/setup.py index 3b4e7ae70a4ec..edf3cb4f230b5 100644 --- a/setup.py +++ b/setup.py @@ -1865,10 +1865,8 @@ def detect_modules(self): ## self.add(Extension('xx', ['xxmodule.c'])) # Limited C API - self.add(Extension('xxlimited', ['xxlimited.c'], - define_macros=[('Py_LIMITED_API', '0x030a0000')])) - self.add(Extension('xxlimited_35', ['xxlimited_35.c'], - define_macros=[('Py_LIMITED_API', '0x03050000')])) + self.add(Extension('xxlimited', ['xxlimited.c'])) + self.add(Extension('xxlimited_35', ['xxlimited_35.c'])) def detect_tkinter_fromenv(self): # Build _tkinter using the Tcl/Tk locations specified by From webhook-mailer at python.org Fri Apr 2 11:28:50 2021 From: webhook-mailer at python.org (corona10) Date: Fri, 02 Apr 2021 15:28:50 -0000 Subject: [Python-checkins] bpo-31956: Add start and stop parameters to array.index() (GH-25059) Message-ID: https://github.com/python/cpython/commit/afd12650580725ac598b2845384771c14c4f952e commit: afd12650580725ac598b2845384771c14c4f952e branch: master author: Zackery Spytz committer: corona10 date: 2021-04-03T00:28:35+09:00 summary: bpo-31956: Add start and stop parameters to array.index() (GH-25059) Co-Authored-By: Anders Lorentsen files: A Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst M Doc/library/array.rst M Doc/whatsnew/3.10.rst M Lib/test/test_array.py M Modules/arraymodule.c M Modules/clinic/arraymodule.c.h diff --git a/Doc/library/array.rst b/Doc/library/array.rst index ff3ec6b1fd723..18a768d7de26c 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -178,11 +178,15 @@ The following data items and methods are also supported: array of some other type. -.. method:: array.index(x) +.. method:: array.index(x[, start[, stop]]) Return the smallest *i* such that *i* is the index of the first occurrence of - *x* in the array. + *x* in the array. The optional arguments *start* and *stop* can be + specified to search for *x* within a subsection of the array. Raise + :exc:`ValueError` if *x* is not found. + .. versionchanged:: 3.10 + Added optional *start* and *stop* parameters. .. method:: array.insert(i, x) diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b84bcf93edb1e..eb42480756241 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -633,6 +633,13 @@ argparse Misleading phrase "optional arguments" was replaced with "options" in argparse help. Some tests might require adaptation if they rely on exact output match. (Contributed by Raymond Hettinger in :issue:`9694`.) +array +----- + +The :meth:`~array.array.index` method of :class:`array.array` now has +optional *start* and *stop* parameters. +(Contributed by Anders Lorentsen and Zackery Spytz in :issue:`31956`.) + base64 ------ diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 77a0c64a88e6c..bdcd1254b304f 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -918,6 +918,17 @@ def test_index(self): self.assertRaises(ValueError, a.index, None) self.assertRaises(ValueError, a.index, self.outside) + a = array.array('i', [-2, -1, 0, 0, 1, 2]) + self.assertEqual(a.index(0), 2) + self.assertEqual(a.index(0, 2), 2) + self.assertEqual(a.index(0, -4), 2) + self.assertEqual(a.index(-2, -10), 0) + self.assertEqual(a.index(0, 3), 3) + self.assertEqual(a.index(0, -3), 3) + self.assertEqual(a.index(0, 3, 4), 3) + self.assertEqual(a.index(0, -3, -2), 3) + self.assertRaises(ValueError, a.index, 2, 0, -10) + def test_count(self): example = 2*self.example a = array.array(self.typecode, example) diff --git a/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst b/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst new file mode 100644 index 0000000000000..5285fd38ebb8a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst @@ -0,0 +1,2 @@ +The :meth:`~array.array.index` method of :class:`array.array` now has +optional *start* and *stop* parameters. diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index e7d5ab77a6d5c..fb9ebbe9f4870 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1136,18 +1136,32 @@ array_array_count(arrayobject *self, PyObject *v) array.array.index v: object + start: slice_index(accept={int}) = 0 + stop: slice_index(accept={int}, c_default="PY_SSIZE_T_MAX") = sys.maxsize / Return index of first occurrence of v in the array. + +Raise ValueError if the value is not present. [clinic start generated code]*/ static PyObject * -array_array_index(arrayobject *self, PyObject *v) -/*[clinic end generated code: output=d48498d325602167 input=cf619898c6649d08]*/ -{ - Py_ssize_t i; - - for (i = 0; i < Py_SIZE(self); i++) { +array_array_index_impl(arrayobject *self, PyObject *v, Py_ssize_t start, + Py_ssize_t stop) +/*[clinic end generated code: output=c45e777880c99f52 input=089dff7baa7e5a7e]*/ +{ + if (start < 0) { + start += Py_SIZE(self); + if (start < 0) { + start = 0; + } + } + if (stop < 0) { + stop += Py_SIZE(self); + } + // Use Py_SIZE() for every iteration in case the array is mutated + // during PyObject_RichCompareBool() + for (Py_ssize_t i = start; i < stop && i < Py_SIZE(self); i++) { PyObject *selfi; int cmp; diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index d0b70c46ff570..d2513eb4f48cf 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -39,13 +39,50 @@ PyDoc_STRVAR(array_array_count__doc__, {"count", (PyCFunction)array_array_count, METH_O, array_array_count__doc__}, PyDoc_STRVAR(array_array_index__doc__, -"index($self, v, /)\n" +"index($self, v, start=0, stop=sys.maxsize, /)\n" "--\n" "\n" -"Return index of first occurrence of v in the array."); +"Return index of first occurrence of v in the array.\n" +"\n" +"Raise ValueError if the value is not present."); #define ARRAY_ARRAY_INDEX_METHODDEF \ - {"index", (PyCFunction)array_array_index, METH_O, array_array_index__doc__}, + {"index", (PyCFunction)(void(*)(void))array_array_index, METH_FASTCALL, array_array_index__doc__}, + +static PyObject * +array_array_index_impl(arrayobject *self, PyObject *v, Py_ssize_t start, + Py_ssize_t stop); + +static PyObject * +array_array_index(arrayobject *self, PyObject *const *args, Py_ssize_t nargs) +{ + PyObject *return_value = NULL; + PyObject *v; + Py_ssize_t start = 0; + Py_ssize_t stop = PY_SSIZE_T_MAX; + + if (!_PyArg_CheckPositional("index", nargs, 1, 3)) { + goto exit; + } + v = args[0]; + if (nargs < 2) { + goto skip_optional; + } + if (!_PyEval_SliceIndexNotNone(args[1], &start)) { + goto exit; + } + if (nargs < 3) { + goto skip_optional; + } + if (!_PyEval_SliceIndexNotNone(args[2], &stop)) { + goto exit; + } +skip_optional: + return_value = array_array_index_impl(self, v, start, stop); + +exit: + return return_value; +} PyDoc_STRVAR(array_array_remove__doc__, "remove($self, v, /)\n" @@ -535,4 +572,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=a7f71a18b994c88f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=376001addedc67ee input=a9049054013a1b77]*/ From webhook-mailer at python.org Fri Apr 2 12:15:37 2021 From: webhook-mailer at python.org (gvanrossum) Date: Fri, 02 Apr 2021 16:15:37 -0000 Subject: [Python-checkins] bpo-24160: Fix breakpoints persistence across multiple pdb sessions (GH-21989) Message-ID: https://github.com/python/cpython/commit/ad442a674ca443feec43a88a2d3671784712e550 commit: ad442a674ca443feec43a88a2d3671784712e550 branch: master author: Irit Katriel committer: gvanrossum date: 2021-04-02T09:15:21-07:00 summary: bpo-24160: Fix breakpoints persistence across multiple pdb sessions (GH-21989) files: A Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst M Lib/bdb.py M Lib/test/test_bdb.py M Lib/test/test_pdb.py diff --git a/Lib/bdb.py b/Lib/bdb.py index b18a0612d8c78..abb50c092e69b 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -34,6 +34,8 @@ def __init__(self, skip=None): self.fncache = {} self.frame_returning = None + self._load_breaks() + def canonic(self, filename): """Return canonical form of filename. @@ -365,6 +367,12 @@ def set_quit(self): # Call self.get_*break*() to see the breakpoints or better # for bp in Breakpoint.bpbynumber: if bp: bp.bpprint(). + def _add_to_breaks(self, filename, lineno): + """Add breakpoint to breaks, if not already there.""" + bp_linenos = self.breaks.setdefault(filename, []) + if lineno not in bp_linenos: + bp_linenos.append(lineno) + def set_break(self, filename, lineno, temporary=False, cond=None, funcname=None): """Set a new breakpoint for filename:lineno. @@ -377,12 +385,21 @@ def set_break(self, filename, lineno, temporary=False, cond=None, line = linecache.getline(filename, lineno) if not line: return 'Line %s:%d does not exist' % (filename, lineno) - list = self.breaks.setdefault(filename, []) - if lineno not in list: - list.append(lineno) + self._add_to_breaks(filename, lineno) bp = Breakpoint(filename, lineno, temporary, cond, funcname) return None + def _load_breaks(self): + """Apply all breakpoints (set in other instances) to this one. + + Populates this instance's breaks list from the Breakpoint class's + list, which can have breakpoints set by another Bdb instance. This + is necessary for interactive sessions to keep the breakpoints + active across multiple calls to run(). + """ + for (filename, lineno) in Breakpoint.bplist.keys(): + self._add_to_breaks(filename, lineno) + def _prune_breaks(self, filename, lineno): """Prune breakpoints for filename:lineno. @@ -681,6 +698,12 @@ def __init__(self, file, line, temporary=False, cond=None, funcname=None): else: self.bplist[file, line] = [self] + @staticmethod + def clearBreakpoints(): + Breakpoint.next = 1 + Breakpoint.bplist = {} + Breakpoint.bpbynumber = [None] + def deleteMe(self): """Delete the breakpoint from the list associated to a file:line. diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py index 71be069d2412c..398698c79c16d 100644 --- a/Lib/test/test_bdb.py +++ b/Lib/test/test_bdb.py @@ -74,9 +74,7 @@ class BdbNotExpectedError(BdbException): """Unexpected result.""" dry_run = 0 def reset_Breakpoint(): - _bdb.Breakpoint.next = 1 - _bdb.Breakpoint.bplist = {} - _bdb.Breakpoint.bpbynumber = [None] + _bdb.Breakpoint.clearBreakpoints() def info_breakpoints(): bp_list = [bp for bp in _bdb.Breakpoint.bpbynumber if bp] @@ -951,6 +949,49 @@ def test_clear_at_no_bp(self): with TracerRun(self) as tracer: self.assertRaises(BdbError, tracer.runcall, tfunc_import) + def test_load_bps_from_previous_Bdb_instance(self): + reset_Breakpoint() + db1 = Bdb() + fname = db1.canonic(__file__) + db1.set_break(__file__, 1) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + + db2 = Bdb() + db2.set_break(__file__, 2) + db2.set_break(__file__, 3) + db2.set_break(__file__, 4) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [1, 2, 3, 4]}) + db2.clear_break(__file__, 1) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [2, 3, 4]}) + + db3 = Bdb() + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [2, 3, 4]}) + self.assertEqual(db3.get_all_breaks(), {fname: [2, 3, 4]}) + db2.clear_break(__file__, 2) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [3, 4]}) + self.assertEqual(db3.get_all_breaks(), {fname: [2, 3, 4]}) + + db4 = Bdb() + db4.set_break(__file__, 5) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [3, 4]}) + self.assertEqual(db3.get_all_breaks(), {fname: [2, 3, 4]}) + self.assertEqual(db4.get_all_breaks(), {fname: [3, 4, 5]}) + reset_Breakpoint() + + db5 = Bdb() + db5.set_break(__file__, 6) + self.assertEqual(db1.get_all_breaks(), {fname: [1]}) + self.assertEqual(db2.get_all_breaks(), {fname: [3, 4]}) + self.assertEqual(db3.get_all_breaks(), {fname: [2, 3, 4]}) + self.assertEqual(db4.get_all_breaks(), {fname: [3, 4, 5]}) + self.assertEqual(db5.get_all_breaks(), {fname: [6]}) + + class RunTestCase(BaseTestCase): """Test run, runeval and set_trace.""" diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index d5abc3f95daca..98e2b937d1339 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -213,6 +213,9 @@ def test_pdb_basic_commands(): BAZ """ +def reset_Breakpoint(): + import bdb + bdb.Breakpoint.clearBreakpoints() def test_pdb_breakpoint_commands(): """Test basic commands related to breakpoints. @@ -227,10 +230,7 @@ def test_pdb_breakpoint_commands(): First, need to clear bdb state that might be left over from previous tests. Otherwise, the new breakpoints might get assigned different numbers. - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 - >>> Breakpoint.bplist = {} - >>> Breakpoint.bpbynumber = [None] + >>> reset_Breakpoint() Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because the breakpoint list outputs a tab for the "stop only" and "ignore next" @@ -323,6 +323,72 @@ def test_pdb_breakpoint_commands(): 4 """ +def test_pdb_breakpoints_preserved_across_interactive_sessions(): + """Breakpoints are remembered between interactive sessions + + >>> reset_Breakpoint() + >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... 'import test.test_pdb', + ... 'break test.test_pdb.do_something', + ... 'break test.test_pdb.do_nothing', + ... 'break', + ... 'continue', + ... ]): + ... pdb.run('print()') + > (1)() + (Pdb) import test.test_pdb + (Pdb) break test.test_pdb.do_something + Breakpoint 1 at ...test_pdb.py:... + (Pdb) break test.test_pdb.do_nothing + Breakpoint 2 at ...test_pdb.py:... + (Pdb) break + Num Type Disp Enb Where + 1 breakpoint keep yes at ...test_pdb.py:... + 2 breakpoint keep yes at ...test_pdb.py:... + (Pdb) continue + + >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... 'break', + ... 'break pdb.find_function', + ... 'break', + ... 'clear 1', + ... 'continue', + ... ]): + ... pdb.run('print()') + > (1)() + (Pdb) break + Num Type Disp Enb Where + 1 breakpoint keep yes at ...test_pdb.py:... + 2 breakpoint keep yes at ...test_pdb.py:... + (Pdb) break pdb.find_function + Breakpoint 3 at ...pdb.py:94 + (Pdb) break + Num Type Disp Enb Where + 1 breakpoint keep yes at ...test_pdb.py:... + 2 breakpoint keep yes at ...test_pdb.py:... + 3 breakpoint keep yes at ...pdb.py:... + (Pdb) clear 1 + Deleted breakpoint 1 at ...test_pdb.py:... + (Pdb) continue + + >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... 'break', + ... 'clear 2', + ... 'clear 3', + ... 'continue', + ... ]): + ... pdb.run('print()') + > (1)() + (Pdb) break + Num Type Disp Enb Where + 2 breakpoint keep yes at ...test_pdb.py:... + 3 breakpoint keep yes at ...pdb.py:... + (Pdb) clear 2 + Deleted breakpoint 2 at ...test_pdb.py:... + (Pdb) clear 3 + Deleted breakpoint 3 at ...pdb.py:... + (Pdb) continue + """ def do_nothing(): pass @@ -699,8 +765,7 @@ def test_next_until_return_at_return_event(): ... test_function_2() ... end = 1 - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_function_2', ... 'continue', ... 'return', @@ -1137,7 +1202,7 @@ def test_pdb_next_command_in_generator_for_loop(): > (3)test_function() -> for i in test_gen(): (Pdb) break test_gen - Breakpoint 6 at :1 + Breakpoint 1 at :1 (Pdb) continue > (2)test_gen() -> yield 0 @@ -1213,6 +1278,7 @@ def test_pdb_issue_20766(): ... print('pdb %d: %s' % (i, sess._previous_sigint_handler)) ... i += 1 + >>> reset_Breakpoint() >>> with PdbTestInput(['continue', ... 'continue']): ... test_function() diff --git a/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst b/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst new file mode 100644 index 0000000000000..c0cfd87b878af --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst @@ -0,0 +1 @@ +Fixed bug where breakpoints did not persist across multiple debugger sessions in :mod:`pdb`'s interactive mode. From webhook-mailer at python.org Fri Apr 2 13:37:25 2021 From: webhook-mailer at python.org (ambv) Date: Fri, 02 Apr 2021 17:37:25 -0000 Subject: [Python-checkins] Python 3.8.9 Message-ID: https://github.com/python/cpython/commit/a743f8192b3b322b2c23b13926f1c7f288cb2206 commit: a743f8192b3b322b2c23b13926f1c7f288cb2206 branch: 3.8 author: ?ukasz Langa committer: ambv date: 2021-04-02T12:32:10+02:00 summary: Python 3.8.9 files: A Misc/NEWS.d/3.8.9.rst D Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst D Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst D Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst D Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst D Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst D Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst D Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst D Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst D Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst D Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst D Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst D Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst D Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst D Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst D Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst D Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst D Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst D Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst D Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst D Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst D Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst D Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst D Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst M Include/patchlevel.h M Lib/pydoc_data/topics.py M README.rst diff --git a/Include/patchlevel.h b/Include/patchlevel.h index e96ee8266fbce..38ffec2854ac4 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 8 -#define PY_MICRO_VERSION 8 +#define PY_MICRO_VERSION 9 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.8.8+" +#define PY_VERSION "3.8.9" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index 475c256be57a2..2a16970b87129 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Fri Feb 19 11:26:48 2021 +# Autogenerated by Sphinx on Fri Apr 2 12:30:35 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -5003,9 +5003,11 @@ '"Formatter",\n' 'subclasses can define their own format string syntax). The ' 'syntax is\n' - 'related to that of formatted string literals, but there ' - 'are\n' - 'differences.\n' + 'related to that of formatted string literals, but it is ' + 'less\n' + 'sophisticated and, in particular, does not support ' + 'arbitrary\n' + 'expressions.\n' '\n' 'Format strings contain ?replacement fields? surrounded by ' 'curly braces\n' diff --git a/Misc/NEWS.d/3.8.9.rst b/Misc/NEWS.d/3.8.9.rst new file mode 100644 index 0000000000000..10d498cb41d4b --- /dev/null +++ b/Misc/NEWS.d/3.8.9.rst @@ -0,0 +1,276 @@ +.. bpo: 42988 +.. date: 2021-03-24-14-16-56 +.. nonce: P2aNco +.. release date: 2021-04-02 +.. section: Security + +CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module +which could be abused to read arbitrary files on the disk (directory +traversal vulnerability). Moreover, even source code of Python modules can +contain sensitive data like passwords. Vulnerability reported by David +Schw?rer. + +.. + +.. bpo: 43285 +.. date: 2021-03-13-03-48-14 +.. nonce: g-Hah3 +.. section: Security + +:mod:`ftplib` no longer trusts the IP address value returned from the server +in response to the PASV command by default. This prevents a malicious FTP +server from using the response to probe IPv4 address and port combinations +on the client network. + +Code that requires the former vulnerable behavior may set a +``trust_server_pasv_ipv4_address`` attribute on their :class:`ftplib.FTP` +instances to ``True`` to re-enable it. + +.. + +.. bpo: 43439 +.. date: 2021-03-08-23-06-07 +.. nonce: 5U3lXm +.. section: Security + +Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and +:func:`gc.get_referents`. Patch by Pablo Galindo. + +.. + +.. bpo: 43660 +.. date: 2021-03-29-19-50-34 +.. nonce: scTgag +.. section: Core and Builtins + +Fix crash that happens when replacing ``sys.stderr`` with a callable that +can remove the object while an exception is being printed. Patch by Pablo +Galindo. + +.. + +.. bpo: 35883 +.. date: 2021-03-13-13-57-21 +.. nonce: UyGpdG +.. section: Core and Builtins + +Python no longer fails at startup with a fatal error if a command line +argument contains an invalid Unicode character. The +:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be +decoded as Unicode characters outside the [U+0000; U+10ffff] range. + +.. + +.. bpo: 43406 +.. date: 2021-03-04-22-53-10 +.. nonce: Na_VpA +.. section: Core and Builtins + +Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute +a non-Python signal handler. + +.. + +.. bpo: 35930 +.. date: 2021-03-23-17-18-56 +.. nonce: RZ51pM +.. section: Library + +Raising an exception raised in a "future" instance will create reference +cycles. + +.. + +.. bpo: 43577 +.. date: 2021-03-21-10-13-17 +.. nonce: m7JnAV +.. section: Library + +Fix deadlock when using :class:`ssl.SSLContext` debug callback with +:meth:`ssl.SSLContext.sni_callback`. + +.. + +.. bpo: 43423 +.. date: 2021-03-11-15-44-18 +.. nonce: rRomRD +.. section: Library + +:func:`subprocess.communicate` no longer raises an IndexError when there is +an empty stdout or stderr IO buffer during a timeout on Windows. + +.. + +.. bpo: 27820 +.. date: 2021-03-10-14-07-44 +.. nonce: Wwdy-r +.. section: Library + +Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with +initial_response_ok=False will fail. + +The cause is that SMTP.auth_login _always_ returns a password if provided +with a challenge string, thus non-compliant with the standard for AUTH +LOGIN. + +Also fixes bug with the test for smtpd. + +.. + +.. bpo: 43399 +.. date: 2021-03-04-17-53-46 +.. nonce: Wn95u- +.. section: Library + +Fix ``ElementTree.extend`` not working on iterators when using the Python +implementation + +.. + +.. bpo: 43316 +.. date: 2021-02-25-09-44-36 +.. nonce: k9Gyqn +.. section: Library + +The ``python -m gzip`` command line application now properly fails when +detecting an unsupported extension. It exits with a non-zero exit code and +prints an error message to stderr. + +.. + +.. bpo: 43260 +.. date: 2021-02-20-12-15-29 +.. nonce: 6znAas +.. section: Library + +Fix TextIOWrapper can not flush internal buffer forever after very large +text is written. + +.. + +.. bpo: 42782 +.. date: 2020-12-29-13-46-57 +.. nonce: 3r0HFY +.. section: Library + +Fail fast in :func:`shutil.move()` to avoid creating destination directories +on failure. + +.. + +.. bpo: 37193 +.. date: 2020-06-12-21-23-20 +.. nonce: wJximU +.. section: Library + +Fixed memory leak in ``socketserver.ThreadingMixIn`` introduced in Python +3.7. + +.. + +.. bpo: 43199 +.. date: 2021-03-13-18-43-54 +.. nonce: ZWA6KX +.. section: Documentation + +Answer "Why is there no goto?" in the Design and History FAQ. + +.. + +.. bpo: 43407 +.. date: 2021-03-04-22-53-03 +.. nonce: x570l5 +.. section: Documentation + +Clarified that a result from :func:`time.monotonic`, +:func:`time.perf_counter`, :func:`time.process_time`, or +:func:`time.thread_time` can be compared with the result from any following +call to the same function - not just the next immediate call. + +.. + +.. bpo: 27646 +.. date: 2021-02-20-00-09-13 +.. nonce: HRsmo- +.. section: Documentation + +Clarify that 'yield from ' works with any iterable, not just +iterators. + +.. + +.. bpo: 36346 +.. date: 2020-06-15-10-45-45 +.. nonce: H0sS_i +.. section: Documentation + +Update some deprecated unicode APIs which are documented as "will be removed +in 4.0" to "3.12". See :pep:`623` for detail. + +.. + +.. bpo: 37945 +.. date: 2021-03-31-11-38-42 +.. nonce: HTUYhv +.. section: Tests + +Fix test_getsetlocale_issue1813() of test_locale: skip the test if +``setlocale()`` fails. Patch by Victor Stinner. + +.. + +.. bpo: 41561 +.. date: 2021-03-18-10-34-42 +.. nonce: pDg4w- +.. section: Tests + +Add workaround for Ubuntu's custom OpenSSL security level policy. + +.. + +.. bpo: 43631 +.. date: 2021-03-26-09-16-34 +.. nonce: msJyPi +.. section: Build + +Update macOS, Windows, and CI to OpenSSL 1.1.1k. + +.. + +.. bpo: 43617 +.. date: 2021-03-24-16-55-55 +.. nonce: d69KAv +.. section: Build + +Improve configure.ac: Check for presence of autoconf-archive package and +remove our copies of M4 macros. + +.. + +.. bpo: 41837 +.. date: 2021-02-28-22-49-46 +.. nonce: 9fqyXC +.. section: macOS + +Update macOS installer build to use OpenSSL 1.1.1j. + +.. + +.. bpo: 42225 +.. date: 2021-03-29-16-22-27 +.. nonce: iIeiLg +.. section: IDLE + +Document that IDLE can fail on Unix either from misconfigured IP masquerage +rules or failure displaying complex colored (non-ascii) characters. + +.. + +.. bpo: 43283 +.. date: 2021-02-21-16-30-10 +.. nonce: DLBwYn +.. section: IDLE + +Document why printing to IDLE's Shell is often slower than printing to a +system terminal and that it can be made faster by pre-formatting a single +string before printing. diff --git a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst b/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst deleted file mode 100644 index 26783963c8679..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve configure.ac: Check for presence of autoconf-archive package and -remove our copies of M4 macros. diff --git a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst b/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst deleted file mode 100644 index 4de4905a6bb08..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS, Windows, and CI to OpenSSL 1.1.1k. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst deleted file mode 100644 index c18a55ef32306..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute a -non-Python signal handler. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst deleted file mode 100644 index 46742429db64b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst +++ /dev/null @@ -1,4 +0,0 @@ -Python no longer fails at startup with a fatal error if a command line -argument contains an invalid Unicode character. The -:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be -decoded as Unicode characters outside the [U+0000; U+10ffff] range. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst deleted file mode 100644 index 98419501d9e7b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix crash that happens when replacing ``sys.stderr`` with a callable that -can remove the object while an exception is being printed. Patch by Pablo -Galindo. diff --git a/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst b/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst deleted file mode 100644 index b737e125f8371..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update some deprecated unicode APIs which are documented as "will be removed -in 4.0" to "3.12". See :pep:`623` for detail. diff --git a/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst b/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst deleted file mode 100644 index 8ba398adf6182..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Clarify that 'yield from ' works with any iterable, not just -iterators. diff --git a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst b/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst deleted file mode 100644 index 615e3d016307c..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst +++ /dev/null @@ -1,4 +0,0 @@ -Clarified that a result from :func:`time.monotonic`, -:func:`time.perf_counter`, :func:`time.process_time`, or -:func:`time.thread_time` can be compared with the result from any following -call to the same function - not just the next immediate call. diff --git a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst b/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst deleted file mode 100644 index d1b454fabd7f8..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst +++ /dev/null @@ -1 +0,0 @@ -Answer "Why is there no goto?" in the Design and History FAQ. diff --git a/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst b/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst deleted file mode 100644 index 7a627af412a8e..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst +++ /dev/null @@ -1,3 +0,0 @@ -Document why printing to IDLE's Shell is often slower than printing to a -system terminal and that it can be made faster by pre-formatting a single -string before printing. diff --git a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst b/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst deleted file mode 100644 index 59fb08bdf9ebe..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document that IDLE can fail on Unix either from misconfigured IP masquerage -rules or failure displaying complex colored (non-ascii) characters. diff --git a/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst b/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst deleted file mode 100644 index fbf56d3194cd2..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed memory leak in ``socketserver.ThreadingMixIn`` introduced in Python -3.7. diff --git a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst b/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst deleted file mode 100644 index 065df9bf0cf42..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fail fast in :func:`shutil.move()` to avoid creating destination directories on -failure. diff --git a/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst b/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst deleted file mode 100644 index f3c21d1c63f72..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix TextIOWrapper can not flush internal buffer forever after very large -text is written. diff --git a/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst b/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst deleted file mode 100644 index 1f0d3c499c16f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst +++ /dev/null @@ -1,3 +0,0 @@ -The ``python -m gzip`` command line application now properly fails when -detecting an unsupported extension. It exits with a non-zero exit code and -prints an error message to stderr. diff --git a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst b/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst deleted file mode 100644 index 0b8dffb2312e4..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``ElementTree.extend`` not working on iterators when using the -Python implementation diff --git a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst b/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst deleted file mode 100644 index 7f1014d723b6a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst +++ /dev/null @@ -1,8 +0,0 @@ -Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with -initial_response_ok=False will fail. - -The cause is that SMTP.auth_login _always_ returns a password if provided -with a challenge string, thus non-compliant with the standard for AUTH -LOGIN. - -Also fixes bug with the test for smtpd. diff --git a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst b/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst deleted file mode 100644 index 290d7fbd91800..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`subprocess.communicate` no longer raises an IndexError when there is an -empty stdout or stderr IO buffer during a timeout on Windows. diff --git a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst b/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst deleted file mode 100644 index a7db48bc626fc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst +++ /dev/null @@ -1 +0,0 @@ -Fix deadlock when using :class:`ssl.SSLContext` debug callback with :meth:`ssl.SSLContext.sni_callback`. diff --git a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst b/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst deleted file mode 100644 index 71c6012f52b8f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst +++ /dev/null @@ -1,2 +0,0 @@ -Raising an exception raised in a "future" instance will create reference -cycles. diff --git a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst b/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst deleted file mode 100644 index 518650303683d..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and -:func:`gc.get_referents`. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst b/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst deleted file mode 100644 index 8312b7e885441..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst +++ /dev/null @@ -1,8 +0,0 @@ -:mod:`ftplib` no longer trusts the IP address value returned from the server -in response to the PASV command by default. This prevents a malicious FTP -server from using the response to probe IPv4 address and port combinations -on the client network. - -Code that requires the former vulnerable behavior may set a -``trust_server_pasv_ipv4_address`` attribute on their -:class:`ftplib.FTP` instances to ``True`` to re-enable it. diff --git a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst b/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst deleted file mode 100644 index 4b42dd05305a8..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst +++ /dev/null @@ -1,4 +0,0 @@ -CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module which -could be abused to read arbitrary files on the disk (directory traversal -vulnerability). Moreover, even source code of Python modules can contain -sensitive data like passwords. Vulnerability reported by David Schw?rer. diff --git a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst b/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst deleted file mode 100644 index 214350729bff6..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst +++ /dev/null @@ -1 +0,0 @@ -Add workaround for Ubuntu's custom OpenSSL security level policy. diff --git a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst b/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst deleted file mode 100644 index e1c95f63bf7c7..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_getsetlocale_issue1813() of test_locale: skip the test if -``setlocale()`` fails. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst b/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst deleted file mode 100644 index 5d32d87a5a97d..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer build to use OpenSSL 1.1.1j. diff --git a/README.rst b/README.rst index 229b4cf58e9e2..f836af12f2cf6 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.8.8 +This is Python version 3.8.9 ============================ .. image:: https://travis-ci.org/python/cpython.svg?branch=3.8 From webhook-mailer at python.org Fri Apr 2 13:37:58 2021 From: webhook-mailer at python.org (ambv) Date: Fri, 02 Apr 2021 17:37:58 -0000 Subject: [Python-checkins] Post 3.8.9 Message-ID: https://github.com/python/cpython/commit/a44771f9212381b90c539882448258c4300b2fe5 commit: a44771f9212381b90c539882448258c4300b2fe5 branch: 3.8 author: ?ukasz Langa committer: ambv date: 2021-04-02T19:37:42+02:00 summary: Post 3.8.9 files: M Include/patchlevel.h diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 38ffec2854ac4..e074b01dca771 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -23,7 +23,7 @@ #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.8.9" +#define PY_VERSION "3.8.9+" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. From webhook-mailer at python.org Fri Apr 2 13:40:01 2021 From: webhook-mailer at python.org (ambv) Date: Fri, 02 Apr 2021 17:40:01 -0000 Subject: [Python-checkins] Python 3.9.3 Message-ID: https://github.com/python/cpython/commit/e723086bc33c19c6c52046d515eb3c2aab1b8f97 commit: e723086bc33c19c6c52046d515eb3c2aab1b8f97 branch: 3.9 author: ?ukasz Langa committer: ambv date: 2021-04-02T11:51:53+02:00 summary: Python 3.9.3 files: A Misc/NEWS.d/3.9.3.rst D Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst D Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst D Misc/NEWS.d/next/Core and Builtins/2020-11-30-14-27-29.bpo-42500.excVKU.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst D Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst D Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst D Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst D Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst D Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst D Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst D Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst D Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst D Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst D Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst D Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst D Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst D Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst D Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst D Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst D Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst D Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst D Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst D Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst D Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst D Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst D Misc/NEWS.d/next/Tests/2021-02-21-11-11-53.bpo-43288.LfTvL-.rst D Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst D Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst D Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst M Include/patchlevel.h M Lib/pydoc_data/topics.py M README.rst diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 92d004e3858ef..093ea5daa8802 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 9 -#define PY_MICRO_VERSION 2 +#define PY_MICRO_VERSION 3 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.9.2+" +#define PY_VERSION "3.9.3" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index ae896c2e5afd6..eb5b8936c06ad 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Fri Feb 19 13:29:38 2021 +# Autogenerated by Sphinx on Fri Apr 2 11:48:03 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -5019,9 +5019,11 @@ '"Formatter",\n' 'subclasses can define their own format string syntax). The ' 'syntax is\n' - 'related to that of formatted string literals, but there ' - 'are\n' - 'differences.\n' + 'related to that of formatted string literals, but it is ' + 'less\n' + 'sophisticated and, in particular, does not support ' + 'arbitrary\n' + 'expressions.\n' '\n' 'Format strings contain ?replacement fields? surrounded by ' 'curly braces\n' diff --git a/Misc/NEWS.d/3.9.3.rst b/Misc/NEWS.d/3.9.3.rst new file mode 100644 index 0000000000000..f76685c8202d9 --- /dev/null +++ b/Misc/NEWS.d/3.9.3.rst @@ -0,0 +1,346 @@ +.. bpo: 42988 +.. date: 2021-03-24-14-16-56 +.. nonce: P2aNco +.. release date: 2021-04-02 +.. section: Security + +CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module +which could be abused to read arbitrary files on the disk (directory +traversal vulnerability). Moreover, even source code of Python modules can +contain sensitive data like passwords. Vulnerability reported by David +Schw?rer. + +.. + +.. bpo: 43285 +.. date: 2021-03-13-03-48-14 +.. nonce: g-Hah3 +.. section: Security + +:mod:`ftplib` no longer trusts the IP address value returned from the server +in response to the PASV command by default. This prevents a malicious FTP +server from using the response to probe IPv4 address and port combinations +on the client network. + +Code that requires the former vulnerable behavior may set a +``trust_server_pasv_ipv4_address`` attribute on their :class:`ftplib.FTP` +instances to ``True`` to re-enable it. + +.. + +.. bpo: 43439 +.. date: 2021-03-08-23-06-07 +.. nonce: 5U3lXm +.. section: Security + +Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and +:func:`gc.get_referents`. Patch by Pablo Galindo. + +.. + +.. bpo: 43660 +.. date: 2021-03-29-19-50-34 +.. nonce: scTgag +.. section: Core and Builtins + +Fix crash that happens when replacing ``sys.stderr`` with a callable that +can remove the object while an exception is being printed. Patch by Pablo +Galindo. + +.. + +.. bpo: 43555 +.. date: 2021-03-19-22-49-40 +.. nonce: ZmhYSA +.. section: Core and Builtins + +Report the column offset for :exc:`SyntaxError` for invalid line +continuation characters. Patch by Pablo Galindo. + +.. + +.. bpo: 43517 +.. date: 2021-03-16-17-12-54 +.. nonce: zAo6Ws +.. section: Core and Builtins + +Fix misdetection of circular imports when using ``from pkg.mod import +attr``, which caused false positives in non-trivial multi-threaded code. + +.. + +.. bpo: 35883 +.. date: 2021-03-13-13-57-21 +.. nonce: UyGpdG +.. section: Core and Builtins + +Python no longer fails at startup with a fatal error if a command line +argument contains an invalid Unicode character. The +:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be +decoded as Unicode characters outside the [U+0000; U+10ffff] range. + +.. + +.. bpo: 43406 +.. date: 2021-03-04-22-53-10 +.. nonce: Na_VpA +.. section: Core and Builtins + +Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute +a non-Python signal handler. + +.. + +.. bpo: 42500 +.. date: 2020-11-30-14-27-29 +.. nonce: excVKU +.. section: Core and Builtins + +Improve handling of exceptions near recursion limit. Converts a number of +Fatal Errors in RecursionErrors. + +.. + +.. bpo: 43433 +.. date: 2021-03-28-23-50-20 +.. nonce: so9j5G +.. section: Library + +:class:`xmlrpc.client.ServerProxy` no longer ignores query and fragment in +the URL of the server. + +.. + +.. bpo: 35930 +.. date: 2021-03-23-17-18-56 +.. nonce: RZ51pM +.. section: Library + +Raising an exception raised in a "future" instance will create reference +cycles. + +.. + +.. bpo: 43577 +.. date: 2021-03-21-10-13-17 +.. nonce: m7JnAV +.. section: Library + +Fix deadlock when using :class:`ssl.SSLContext` debug callback with +:meth:`ssl.SSLContext.sni_callback`. + +.. + +.. bpo: 43521 +.. date: 2021-03-16-16-05-02 +.. nonce: mRT6fh +.. section: Library + +``ast.unparse`` can now render NaNs and empty sets. + +.. + +.. bpo: 43423 +.. date: 2021-03-11-15-44-18 +.. nonce: rRomRD +.. section: Library + +:func:`subprocess.communicate` no longer raises an IndexError when there is +an empty stdout or stderr IO buffer during a timeout on Windows. + +.. + +.. bpo: 27820 +.. date: 2021-03-10-14-07-44 +.. nonce: Wwdy-r +.. section: Library + +Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with +initial_response_ok=False will fail. + +The cause is that SMTP.auth_login _always_ returns a password if provided +with a challenge string, thus non-compliant with the standard for AUTH +LOGIN. + +Also fixes bug with the test for smtpd. + +.. + +.. bpo: 43332 +.. date: 2021-03-07-11-23-20 +.. nonce: weatsh +.. section: Library + +Improves the networking efficiency of :mod:`http.client` when using a proxy +via :meth:`~HTTPConnection.set_tunnel`. Fewer small send calls are made +during connection setup. + +.. + +.. bpo: 43399 +.. date: 2021-03-04-17-53-46 +.. nonce: Wn95u- +.. section: Library + +Fix ``ElementTree.extend`` not working on iterators when using the Python +implementation + +.. + +.. bpo: 43316 +.. date: 2021-02-25-09-44-36 +.. nonce: k9Gyqn +.. section: Library + +The ``python -m gzip`` command line application now properly fails when +detecting an unsupported extension. It exits with a non-zero exit code and +prints an error message to stderr. + +.. + +.. bpo: 43260 +.. date: 2021-02-20-12-15-29 +.. nonce: 6znAas +.. section: Library + +Fix TextIOWrapper can not flush internal buffer forever after very large +text is written. + +.. + +.. bpo: 42782 +.. date: 2020-12-29-13-46-57 +.. nonce: 3r0HFY +.. section: Library + +Fail fast in :func:`shutil.move()` to avoid creating destination directories +on failure. + +.. + +.. bpo: 37193 +.. date: 2020-06-12-21-23-20 +.. nonce: wJximU +.. section: Library + +Fixed memory leak in ``socketserver.ThreadingMixIn`` introduced in Python +3.7. + +.. + +.. bpo: 43199 +.. date: 2021-03-13-18-43-54 +.. nonce: ZWA6KX +.. section: Documentation + +Answer "Why is there no goto?" in the Design and History FAQ. + +.. + +.. bpo: 43407 +.. date: 2021-03-04-22-53-03 +.. nonce: x570l5 +.. section: Documentation + +Clarified that a result from :func:`time.monotonic`, +:func:`time.perf_counter`, :func:`time.process_time`, or +:func:`time.thread_time` can be compared with the result from any following +call to the same function - not just the next immediate call. + +.. + +.. bpo: 27646 +.. date: 2021-02-20-00-09-13 +.. nonce: HRsmo- +.. section: Documentation + +Clarify that 'yield from ' works with any iterable, not just +iterators. + +.. + +.. bpo: 36346 +.. date: 2020-06-15-10-45-45 +.. nonce: H0sS_i +.. section: Documentation + +Update some deprecated unicode APIs which are documented as "will be removed +in 4.0" to "3.12". See :pep:`623` for detail. + +.. + +.. bpo: 37945 +.. date: 2021-03-31-11-38-42 +.. nonce: HTUYhv +.. section: Tests + +Fix test_getsetlocale_issue1813() of test_locale: skip the test if +``setlocale()`` fails. Patch by Victor Stinner. + +.. + +.. bpo: 41561 +.. date: 2021-03-18-10-34-42 +.. nonce: pDg4w- +.. section: Tests + +Add workaround for Ubuntu's custom OpenSSL security level policy. + +.. + +.. bpo: 43288 +.. date: 2021-02-21-11-11-53 +.. nonce: LfTvL- +.. section: Tests + +Fix test_importlib to correctly skip Unicode file tests if the fileystem +does not support them. + +.. + +.. bpo: 43631 +.. date: 2021-03-26-09-16-34 +.. nonce: msJyPi +.. section: Build + +Update macOS, Windows, and CI to OpenSSL 1.1.1k. + +.. + +.. bpo: 43617 +.. date: 2021-03-24-16-55-55 +.. nonce: d69KAv +.. section: Build + +Improve configure.ac: Check for presence of autoconf-archive package and +remove our copies of M4 macros. + +.. + +.. bpo: 41837 +.. date: 2021-02-28-22-49-46 +.. nonce: 9fqyXC +.. section: macOS + +Update macOS installer build to use OpenSSL 1.1.1j. + +.. + +.. bpo: 42225 +.. date: 2021-03-29-16-22-27 +.. nonce: iIeiLg +.. section: IDLE + +Document that IDLE can fail on Unix either from misconfigured IP masquerage +rules or failure displaying complex colored (non-ascii) characters. + +.. + +.. bpo: 43283 +.. date: 2021-02-21-16-30-10 +.. nonce: DLBwYn +.. section: IDLE + +Document why printing to IDLE's Shell is often slower than printing to a +system terminal and that it can be made faster by pre-formatting a single +string before printing. diff --git a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst b/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst deleted file mode 100644 index 26783963c8679..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve configure.ac: Check for presence of autoconf-archive package and -remove our copies of M4 macros. diff --git a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst b/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst deleted file mode 100644 index 4de4905a6bb08..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS, Windows, and CI to OpenSSL 1.1.1k. diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-11-30-14-27-29.bpo-42500.excVKU.rst b/Misc/NEWS.d/next/Core and Builtins/2020-11-30-14-27-29.bpo-42500.excVKU.rst deleted file mode 100644 index 2462a8e1fabef..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2020-11-30-14-27-29.bpo-42500.excVKU.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve handling of exceptions near recursion limit. Converts a number of -Fatal Errors in RecursionErrors. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst deleted file mode 100644 index c18a55ef32306..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute a -non-Python signal handler. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst deleted file mode 100644 index 46742429db64b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst +++ /dev/null @@ -1,4 +0,0 @@ -Python no longer fails at startup with a fatal error if a command line -argument contains an invalid Unicode character. The -:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be -decoded as Unicode characters outside the [U+0000; U+10ffff] range. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst deleted file mode 100644 index 0f9926b93f654..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix misdetection of circular imports when using ``from pkg.mod import -attr``, which caused false positives in non-trivial multi-threaded code. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst deleted file mode 100644 index 55a2fe22aa8ab..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Report the column offset for :exc:`SyntaxError` for invalid line -continuation characters. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst deleted file mode 100644 index 98419501d9e7b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix crash that happens when replacing ``sys.stderr`` with a callable that -can remove the object while an exception is being printed. Patch by Pablo -Galindo. diff --git a/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst b/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst deleted file mode 100644 index b737e125f8371..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2020-06-15-10-45-45.bpo-36346.H0sS_i.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update some deprecated unicode APIs which are documented as "will be removed -in 4.0" to "3.12". See :pep:`623` for detail. diff --git a/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst b/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst deleted file mode 100644 index 8ba398adf6182..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-02-20-00-09-13.bpo-27646.HRsmo-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Clarify that 'yield from ' works with any iterable, not just -iterators. diff --git a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst b/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst deleted file mode 100644 index 615e3d016307c..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst +++ /dev/null @@ -1,4 +0,0 @@ -Clarified that a result from :func:`time.monotonic`, -:func:`time.perf_counter`, :func:`time.process_time`, or -:func:`time.thread_time` can be compared with the result from any following -call to the same function - not just the next immediate call. diff --git a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst b/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst deleted file mode 100644 index d1b454fabd7f8..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst +++ /dev/null @@ -1 +0,0 @@ -Answer "Why is there no goto?" in the Design and History FAQ. diff --git a/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst b/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst deleted file mode 100644 index 7a627af412a8e..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-02-21-16-30-10.bpo-43283.DLBwYn.rst +++ /dev/null @@ -1,3 +0,0 @@ -Document why printing to IDLE's Shell is often slower than printing to a -system terminal and that it can be made faster by pre-formatting a single -string before printing. diff --git a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst b/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst deleted file mode 100644 index 59fb08bdf9ebe..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document that IDLE can fail on Unix either from misconfigured IP masquerage -rules or failure displaying complex colored (non-ascii) characters. diff --git a/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst b/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst deleted file mode 100644 index fbf56d3194cd2..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-12-21-23-20.bpo-37193.wJximU.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed memory leak in ``socketserver.ThreadingMixIn`` introduced in Python -3.7. diff --git a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst b/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst deleted file mode 100644 index 065df9bf0cf42..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fail fast in :func:`shutil.move()` to avoid creating destination directories on -failure. diff --git a/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst b/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst deleted file mode 100644 index f3c21d1c63f72..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-20-12-15-29.bpo-43260.6znAas.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix TextIOWrapper can not flush internal buffer forever after very large -text is written. diff --git a/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst b/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst deleted file mode 100644 index 1f0d3c499c16f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-25-09-44-36.bpo-43316.k9Gyqn.rst +++ /dev/null @@ -1,3 +0,0 @@ -The ``python -m gzip`` command line application now properly fails when -detecting an unsupported extension. It exits with a non-zero exit code and -prints an error message to stderr. diff --git a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst b/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst deleted file mode 100644 index 0b8dffb2312e4..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``ElementTree.extend`` not working on iterators when using the -Python implementation diff --git a/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst b/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst deleted file mode 100644 index c40be95c194db..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst +++ /dev/null @@ -1,3 +0,0 @@ -Improves the networking efficiency of :mod:`http.client` when using a proxy -via :meth:`~HTTPConnection.set_tunnel`. Fewer small send calls are made -during connection setup. diff --git a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst b/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst deleted file mode 100644 index 7f1014d723b6a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst +++ /dev/null @@ -1,8 +0,0 @@ -Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with -initial_response_ok=False will fail. - -The cause is that SMTP.auth_login _always_ returns a password if provided -with a challenge string, thus non-compliant with the standard for AUTH -LOGIN. - -Also fixes bug with the test for smtpd. diff --git a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst b/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst deleted file mode 100644 index 290d7fbd91800..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`subprocess.communicate` no longer raises an IndexError when there is an -empty stdout or stderr IO buffer during a timeout on Windows. diff --git a/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst b/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst deleted file mode 100644 index e6895674437a5..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst +++ /dev/null @@ -1 +0,0 @@ -``ast.unparse`` can now render NaNs and empty sets. diff --git a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst b/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst deleted file mode 100644 index a7db48bc626fc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst +++ /dev/null @@ -1 +0,0 @@ -Fix deadlock when using :class:`ssl.SSLContext` debug callback with :meth:`ssl.SSLContext.sni_callback`. diff --git a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst b/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst deleted file mode 100644 index 71c6012f52b8f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst +++ /dev/null @@ -1,2 +0,0 @@ -Raising an exception raised in a "future" instance will create reference -cycles. diff --git a/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst b/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst deleted file mode 100644 index 2f67e316a5efc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst +++ /dev/null @@ -1,2 +0,0 @@ -:class:`xmlrpc.client.ServerProxy` no longer ignores query and fragment in -the URL of the server. diff --git a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst b/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst deleted file mode 100644 index 518650303683d..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and -:func:`gc.get_referents`. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst b/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst deleted file mode 100644 index 8312b7e885441..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst +++ /dev/null @@ -1,8 +0,0 @@ -:mod:`ftplib` no longer trusts the IP address value returned from the server -in response to the PASV command by default. This prevents a malicious FTP -server from using the response to probe IPv4 address and port combinations -on the client network. - -Code that requires the former vulnerable behavior may set a -``trust_server_pasv_ipv4_address`` attribute on their -:class:`ftplib.FTP` instances to ``True`` to re-enable it. diff --git a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst b/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst deleted file mode 100644 index 4b42dd05305a8..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst +++ /dev/null @@ -1,4 +0,0 @@ -CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module which -could be abused to read arbitrary files on the disk (directory traversal -vulnerability). Moreover, even source code of Python modules can contain -sensitive data like passwords. Vulnerability reported by David Schw?rer. diff --git a/Misc/NEWS.d/next/Tests/2021-02-21-11-11-53.bpo-43288.LfTvL-.rst b/Misc/NEWS.d/next/Tests/2021-02-21-11-11-53.bpo-43288.LfTvL-.rst deleted file mode 100644 index 8463540ae8a14..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-02-21-11-11-53.bpo-43288.LfTvL-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_importlib to correctly skip Unicode file tests if the fileystem -does not support them. diff --git a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst b/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst deleted file mode 100644 index 214350729bff6..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst +++ /dev/null @@ -1 +0,0 @@ -Add workaround for Ubuntu's custom OpenSSL security level policy. diff --git a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst b/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst deleted file mode 100644 index e1c95f63bf7c7..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_getsetlocale_issue1813() of test_locale: skip the test if -``setlocale()`` fails. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst b/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst deleted file mode 100644 index 5d32d87a5a97d..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-02-28-22-49-46.bpo-41837.9fqyXC.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer build to use OpenSSL 1.1.1j. diff --git a/README.rst b/README.rst index cf73e70038c4f..ae7f264ef4f5f 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.9.2 +This is Python version 3.9.3 ============================ .. image:: https://travis-ci.org/python/cpython.svg?branch=3.9 From webhook-mailer at python.org Fri Apr 2 15:35:43 2021 From: webhook-mailer at python.org (brettcannon) Date: Fri, 02 Apr 2021 19:35:43 -0000 Subject: [Python-checkins] bpo-43672: raise ImportWarning when calling find_loader() (GH-25119) Message-ID: https://github.com/python/cpython/commit/f97dc800689ba98783dac8dc51f87f7c6f413ac6 commit: f97dc800689ba98783dac8dc51f87f7c6f413ac6 branch: master author: Brett Cannon committer: brettcannon date: 2021-04-02T12:35:32-07:00 summary: bpo-43672: raise ImportWarning when calling find_loader() (GH-25119) files: A Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst M Doc/reference/import.rst M Doc/whatsnew/3.10.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_importlib/extension/test_loader.py M Lib/test/test_importlib/import_/test_path.py M Lib/test/test_importlib/test_abc.py M Lib/test/test_importlib/test_main.py M Lib/test/test_importlib/test_metadata_api.py M Lib/test/test_importlib/test_path.py M Lib/test/test_importlib/test_reader.py M Lib/test/test_importlib/test_util.py M Python/importlib_external.h diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst index 5d2169b4cba60..2ef5b901b930b 100644 --- a/Doc/reference/import.rst +++ b/Doc/reference/import.rst @@ -904,7 +904,8 @@ a list containing the portion. ``find_loader()`` in preference to ``find_module()``. .. versionchanged:: 3.10 - Calls to :meth:`~importlib.abc.PathEntryFinder.find_module` by the import + Calls to :meth:`~importlib.abc.PathEntryFinder.find_module` and + :meth:`~importlib.abc.PathEntryFinder.find_loader` by the import system will raise :exc:`ImportWarning`. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index eb42480756241..d20fdac71b302 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1050,7 +1050,13 @@ Deprecated :meth:`importlib.abc.PathEntryFinder.find_spec` are preferred, respectively. You can use :func:`importlib.util.spec_from_loader` to help in porting. - (Contributed by Brett Cannon in :issue:`42134`.) + (Contributed by Brett Cannon in :issue:`42134`.) + +* The use of :meth:`importlib.abc.PathEntryFinder.find_loader` by the import + system now triggers an :exc:`ImportWarning` as + :meth:`importlib.abc.PathEntryFinder.find_spec` is preferred. You can use + :func:`importlib.util.spec_from_loader` to help in porting. + (Contributed by Brett Cannon in :issue:`43672`.) * The import system now uses the ``__spec__`` attribute on modules before falling back on :meth:`~importlib.abc.Loader.module_repr` for a module's diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 6c3e0317b7d9f..358c650916b0b 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1323,10 +1323,13 @@ def _legacy_get_spec(cls, fullname, finder): # This would be a good place for a DeprecationWarning if # we ended up going that route. if hasattr(finder, 'find_loader'): + msg = (f"{_bootstrap._object_name(finder)}.find_spec() not found; " + "falling back to find_loader()") + _warnings.warn(msg, ImportWarning) loader, portions = finder.find_loader(fullname) else: msg = (f"{_bootstrap._object_name(finder)}.find_spec() not found; " - "falling back to find_module()") + "falling back to find_module()") _warnings.warn(msg, ImportWarning) loader = finder.find_module(fullname) portions = [] diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py index 22cf2dac5f868..8fd556dbed57a 100644 --- a/Lib/test/test_importlib/extension/test_loader.py +++ b/Lib/test/test_importlib/extension/test_loader.py @@ -89,8 +89,7 @@ def test_is_package(self): ) = util.test_both(LoaderTests, machinery=machinery) class MultiPhaseExtensionModuleTests(abc.LoaderTests): - """Test loading extension modules with multi-phase initialization (PEP 489) - """ + # Test loading extension modules with multi-phase initialization (PEP 489). def setUp(self): self.name = '_testmultiphase' @@ -101,13 +100,13 @@ def setUp(self): self.name, self.spec.origin) def load_module(self): - '''Load the module from the test extension''' + # Load the module from the test extension. with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) return self.loader.load_module(self.name) def load_module_by_name(self, fullname): - '''Load a module from the test extension by name''' + # Load a module from the test extension by name. origin = self.spec.origin loader = self.machinery.ExtensionFileLoader(fullname, origin) spec = importlib.util.spec_from_loader(fullname, loader) @@ -125,7 +124,7 @@ def load_module_by_name(self, fullname): test_state_after_failure = None def test_module(self): - '''Test loading an extension module''' + # Test loading an extension module. with util.uncache(self.name): module = self.load_module() for attr, value in [('__name__', self.name), @@ -139,7 +138,7 @@ def test_module(self): self.machinery.ExtensionFileLoader) def test_functionality(self): - '''Test basic functionality of stuff defined in an extension module''' + # Test basic functionality of stuff defined in an extension module. with util.uncache(self.name): module = self.load_module() self.assertIsInstance(module, types.ModuleType) @@ -159,7 +158,7 @@ def test_functionality(self): self.assertEqual(module.str_const, 'something different') def test_reload(self): - '''Test that reload didn't re-set the module's attributes''' + # Test that reload didn't re-set the module's attributes. with util.uncache(self.name): module = self.load_module() ex_class = module.Example @@ -167,7 +166,7 @@ def test_reload(self): self.assertIs(ex_class, module.Example) def test_try_registration(self): - '''Assert that the PyState_{Find,Add,Remove}Module C API doesn't work''' + # Assert that the PyState_{Find,Add,Remove}Module C API doesn't work. module = self.load_module() with self.subTest('PyState_FindModule'): self.assertEqual(module.call_state_registration_func(0), None) @@ -179,14 +178,14 @@ def test_try_registration(self): module.call_state_registration_func(2) def test_load_submodule(self): - '''Test loading a simulated submodule''' + # Test loading a simulated submodule. module = self.load_module_by_name('pkg.' + self.name) self.assertIsInstance(module, types.ModuleType) self.assertEqual(module.__name__, 'pkg.' + self.name) self.assertEqual(module.str_const, 'something different') def test_load_short_name(self): - '''Test loading module with a one-character name''' + # Test loading module with a one-character name. module = self.load_module_by_name('x') self.assertIsInstance(module, types.ModuleType) self.assertEqual(module.__name__, 'x') @@ -194,27 +193,27 @@ def test_load_short_name(self): self.assertNotIn('x', sys.modules) def test_load_twice(self): - '''Test that 2 loads result in 2 module objects''' + # Test that 2 loads result in 2 module objects. module1 = self.load_module_by_name(self.name) module2 = self.load_module_by_name(self.name) self.assertIsNot(module1, module2) def test_unloadable(self): - '''Test nonexistent module''' + # Test nonexistent module. name = 'asdfjkl;' with self.assertRaises(ImportError) as cm: self.load_module_by_name(name) self.assertEqual(cm.exception.name, name) def test_unloadable_nonascii(self): - '''Test behavior with nonexistent module with non-ASCII name''' + # Test behavior with nonexistent module with non-ASCII name. name = 'fo\xf3' with self.assertRaises(ImportError) as cm: self.load_module_by_name(name) self.assertEqual(cm.exception.name, name) def test_nonmodule(self): - '''Test returning a non-module object from create works''' + # Test returning a non-module object from create works. name = self.name + '_nonmodule' mod = self.load_module_by_name(name) self.assertNotEqual(type(mod), type(unittest)) @@ -222,7 +221,7 @@ def test_nonmodule(self): # issue 27782 def test_nonmodule_with_methods(self): - '''Test creating a non-module object with methods defined''' + # Test creating a non-module object with methods defined. name = self.name + '_nonmodule_with_methods' mod = self.load_module_by_name(name) self.assertNotEqual(type(mod), type(unittest)) @@ -230,14 +229,14 @@ def test_nonmodule_with_methods(self): self.assertEqual(mod.bar(10, 1), 9) def test_null_slots(self): - '''Test that NULL slots aren't a problem''' + # Test that NULL slots aren't a problem. name = self.name + '_null_slots' module = self.load_module_by_name(name) self.assertIsInstance(module, types.ModuleType) self.assertEqual(module.__name__, name) def test_bad_modules(self): - '''Test SystemError is raised for misbehaving extensions''' + # Test SystemError is raised for misbehaving extensions. for name_base in [ 'bad_slot_large', 'bad_slot_negative', @@ -261,9 +260,9 @@ def test_bad_modules(self): self.load_module_by_name(name) def test_nonascii(self): - '''Test that modules with non-ASCII names can be loaded''' + # Test that modules with non-ASCII names can be loaded. # punycode behaves slightly differently in some-ASCII and no-ASCII - # cases, so test both + # cases, so test both. cases = [ (self.name + '_zkou\u0161ka_na\u010dten\xed', 'Czech'), ('\uff3f\u30a4\u30f3\u30dd\u30fc\u30c8\u30c6\u30b9\u30c8', diff --git a/Lib/test/test_importlib/import_/test_path.py b/Lib/test/test_importlib/import_/test_path.py index c51aee22bb8dc..2ba7030d14d8c 100644 --- a/Lib/test/test_importlib/import_/test_path.py +++ b/Lib/test/test_importlib/import_/test_path.py @@ -143,12 +143,16 @@ def find_loader(self, fullname): return self.loader, self.portions path = 'testing path' with util.import_state(path_importer_cache={path: TestFinder()}): - self.assertIsNone( + with warnings.catch_warnings(): + warnings.simplefilter("ignore", ImportWarning) + self.assertIsNone( self.machinery.PathFinder.find_spec('whatever', [path])) success_finder = TestFinder() success_finder.loader = __loader__ with util.import_state(path_importer_cache={path: success_finder}): - spec = self.machinery.PathFinder.find_spec('whatever', [path]) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", ImportWarning) + spec = self.machinery.PathFinder.find_spec('whatever', [path]) self.assertEqual(spec.loader, __loader__) def test_finder_with_find_spec(self): diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py index 6333ce8c48b0b..98f5835eafca5 100644 --- a/Lib/test/test_importlib/test_abc.py +++ b/Lib/test/test_importlib/test_abc.py @@ -221,13 +221,13 @@ def test_load_module(self): def test_module_repr(self): mod = types.ModuleType('blah') with warnings.catch_warnings(): - warnings.simplefilter("ignore") + warnings.simplefilter("ignore", DeprecationWarning) with self.assertRaises(NotImplementedError): self.ins.module_repr(mod) - original_repr = repr(mod) - mod.__loader__ = self.ins - # Should still return a proper repr. - self.assertTrue(repr(mod)) + original_repr = repr(mod) + mod.__loader__ = self.ins + # Should still return a proper repr. + self.assertTrue(repr(mod)) (Frozen_LDefaultTests, diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 02e8a573437a5..db97e53922cf8 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -36,12 +36,10 @@ def test_for_name_does_not_exist(self): Distribution.from_name('does-not-exist') def test_package_not_found_mentions_metadata(self): - """ - When a package is not found, that could indicate that the - packgae is not installed or that it is installed without - metadata. Ensure the exception mentions metadata to help - guide users toward the cause. See #124. - """ + # When a package is not found, that could indicate that the + # packgae is not installed or that it is installed without + # metadata. Ensure the exception mentions metadata to help + # guide users toward the cause. See #124. with self.assertRaises(PackageNotFoundError) as ctx: Distribution.from_name('does-not-exist') @@ -90,10 +88,8 @@ def pkg_with_dashes(site_dir): return 'my-pkg' def test_dashes_in_dist_name_found_as_underscores(self): - """ - For a package with a dash in the name, the dist-info metadata - uses underscores in the name. Ensure the metadata loads. - """ + # For a package with a dash in the name, the dist-info metadata + # uses underscores in the name. Ensure the metadata loads. pkg_name = self.pkg_with_dashes(self.site_dir) assert version(pkg_name) == '1.0' @@ -111,9 +107,7 @@ def pkg_with_mixed_case(site_dir): return 'CherryPy' def test_dist_name_found_as_any_case(self): - """ - Ensure the metadata loads when queried with any case. - """ + # Ensure the metadata loads when queried with any case. pkg_name = self.pkg_with_mixed_case(self.site_dir) assert version(pkg_name) == '1.0' assert version(pkg_name.lower()) == '1.0' @@ -241,13 +235,11 @@ def test_repr(self): assert "'name'" in repr(self.ep) def test_hashable(self): - """EntryPoints should be hashable""" + # EntryPoints should be hashable. hash(self.ep) def test_json_dump(self): - """ - json should not expect to be able to dump an EntryPoint - """ + # json should not expect to be able to dump an EntryPoint. with self.assertRaises(Exception): with warnings.catch_warnings(record=True): json.dumps(self.ep) @@ -259,9 +251,7 @@ def test_attr(self): assert self.ep.attr is None def test_sortable(self): - """ - EntryPoint objects are sortable, but result is undefined. - """ + # EntryPoint objects are sortable, but result is undefined. sorted( [ EntryPoint('b', 'val', 'group'), @@ -274,10 +264,8 @@ class FileSystem( fixtures.OnSysPath, fixtures.SiteDir, fixtures.FileBuilder, unittest.TestCase ): def test_unicode_dir_on_sys_path(self): - """ - Ensure a Unicode subdirectory of a directory on sys.path - does not crash. - """ + # Ensure a Unicode subdirectory of a directory on sys.path + # does not crash. fixtures.build_files( {self.unicode_filename(): {}}, prefix=self.site_dir, diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index a0f9d511f8433..b54c3bd098d43 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -81,10 +81,8 @@ def test_entry_points_distribution(self): self.assertEqual(ep.dist.version, "1.0.0") def test_entry_points_unique_packages(self): - """ - Entry points should only be exposed for the first package - on sys.path with a given name. - """ + # Entry points should only be exposed for the first package + # on sys.path with a given name. alt_site_dir = self.fixtures.enter_context(fixtures.tempdir()) self.fixtures.enter_context(self.add_sys_path(alt_site_dir)) alt_pkg = { @@ -116,11 +114,9 @@ def test_entry_points_missing_group(self): assert entry_points(group='missing') == () def test_entry_points_dict_construction(self): - """ - Prior versions of entry_points() returned simple lists and - allowed casting those lists into maps by name using ``dict()``. - Capture this now deprecated use-case. - """ + # Prior versions of entry_points() returned simple lists and + # allowed casting those lists into maps by name using ``dict()``. + # Capture this now deprecated use-case. with warnings.catch_warnings(record=True) as caught: warnings.filterwarnings("default", category=DeprecationWarning) eps = dict(entry_points(group='entries')) @@ -134,11 +130,9 @@ def test_entry_points_dict_construction(self): assert "Construction of dict of EntryPoints is deprecated" in str(expected) def test_entry_points_groups_getitem(self): - """ - Prior versions of entry_points() returned a dict. Ensure - that callers using '.__getitem__()' are supported but warned to - migrate. - """ + # Prior versions of entry_points() returned a dict. Ensure + # that callers using '.__getitem__()' are supported but warned to + # migrate. with warnings.catch_warnings(record=True): entry_points()['entries'] == entry_points(group='entries') @@ -146,11 +140,9 @@ def test_entry_points_groups_getitem(self): entry_points()['missing'] def test_entry_points_groups_get(self): - """ - Prior versions of entry_points() returned a dict. Ensure - that callers using '.get()' are supported but warned to - migrate. - """ + # Prior versions of entry_points() returned a dict. Ensure + # that callers using '.get()' are supported but warned to + # migrate. with warnings.catch_warnings(record=True): entry_points().get('missing', 'default') == 'default' entry_points().get('entries', 'default') == entry_points()['entries'] @@ -259,7 +251,7 @@ def test_find_distributions_specified_path(self): assert any(dist.metadata['Name'] == 'distinfo-pkg' for dist in dists) def test_distribution_at_pathlib(self): - """Demonstrate how to load metadata direct from a directory.""" + # Demonstrate how to load metadata direct from a directory. dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' dist = Distribution.at(dist_info_path) assert dist.version == '1.0.0' diff --git a/Lib/test/test_importlib/test_path.py b/Lib/test/test_importlib/test_path.py index 2110770e2ac09..d6ed09a9e0d0f 100644 --- a/Lib/test/test_importlib/test_path.py +++ b/Lib/test/test_importlib/test_path.py @@ -29,11 +29,9 @@ class PathDiskTests(PathTests, unittest.TestCase): data = data01 def test_natural_path(self): - """ - Guarantee the internal implementation detail that - file-system-backed resources do not get the tempdir - treatment. - """ + # Guarantee the internal implementation detail that + # file-system-backed resources do not get the tempdir + # treatment. with resources.path(self.data, 'utf-8.file') as path: assert 'data' in str(path) diff --git a/Lib/test/test_importlib/test_reader.py b/Lib/test/test_importlib/test_reader.py index 905d4fcdece74..b0bf49b8ba7f2 100644 --- a/Lib/test/test_importlib/test_reader.py +++ b/Lib/test/test_importlib/test_reader.py @@ -60,7 +60,6 @@ def test_open_file(self): path.open() def test_join_path(self): - print('test_join_path') prefix = os.path.abspath(os.path.join(__file__, '..')) data01 = os.path.join(prefix, 'data01') path = MultiplexedPath(self.folder, data01) diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py index 17de46666acba..104452267c067 100644 --- a/Lib/test/test_importlib/test_util.py +++ b/Lib/test/test_importlib/test_util.py @@ -845,22 +845,20 @@ class MagicNumberTests(unittest.TestCase): 'only applies to candidate or final python release levels' ) def test_magic_number(self): - """ - Each python minor release should generally have a MAGIC_NUMBER - that does not change once the release reaches candidate status. - - Once a release reaches candidate status, the value of the constant - EXPECTED_MAGIC_NUMBER in this test should be changed. - This test will then check that the actual MAGIC_NUMBER matches - the expected value for the release. - - In exceptional cases, it may be required to change the MAGIC_NUMBER - for a maintenance release. In this case the change should be - discussed in python-dev. If a change is required, community - stakeholders such as OS package maintainers must be notified - in advance. Such exceptional releases will then require an - adjustment to this test case. - """ + # Each python minor release should generally have a MAGIC_NUMBER + # that does not change once the release reaches candidate status. + + # Once a release reaches candidate status, the value of the constant + # EXPECTED_MAGIC_NUMBER in this test should be changed. + # This test will then check that the actual MAGIC_NUMBER matches + # the expected value for the release. + + # In exceptional cases, it may be required to change the MAGIC_NUMBER + # for a maintenance release. In this case the change should be + # discussed in python-dev. If a change is required, community + # stakeholders such as OS package maintainers must be notified + # in advance. Such exceptional releases will then require an + # adjustment to this test case. EXPECTED_MAGIC_NUMBER = 3413 actual = int.from_bytes(importlib.util.MAGIC_NUMBER[:2], 'little') diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst new file mode 100644 index 0000000000000..3bb1a66d0f7fd --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst @@ -0,0 +1 @@ +Raise ImportWarning when calling find_loader(). diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 0fac913f4cfea..465ec0cd6dd0e 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2156,529 +2156,534 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4, - 0,0,0,67,0,0,0,115,110,0,0,0,116,0,124,2, - 100,1,131,2,114,13,124,2,160,1,124,1,161,1,92,2, - 125,3,125,4,110,21,116,2,160,3,124,2,161,1,155,0, - 100,2,157,2,125,5,116,4,160,5,124,5,116,6,161,2, - 1,0,124,2,160,7,124,1,161,1,125,3,103,0,125,4, - 124,3,100,0,117,1,114,44,116,2,160,8,124,1,124,3, - 161,2,83,0,116,2,160,9,124,1,100,0,161,2,125,6, - 124,4,124,6,95,10,124,6,83,0,41,3,78,114,148,0, - 0,0,122,53,46,102,105,110,100,95,115,112,101,99,40,41, - 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, - 105,110,103,32,98,97,99,107,32,116,111,32,102,105,110,100, - 95,109,111,100,117,108,101,40,41,41,11,114,140,0,0,0, - 114,148,0,0,0,114,146,0,0,0,90,12,95,111,98,106, - 101,99,116,95,110,97,109,101,114,88,0,0,0,114,89,0, - 0,0,114,149,0,0,0,114,217,0,0,0,114,212,0,0, - 0,114,194,0,0,0,114,189,0,0,0,41,7,114,209,0, - 0,0,114,150,0,0,0,114,68,1,0,0,114,151,0,0, - 0,114,152,0,0,0,114,153,0,0,0,114,198,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, - 99,41,5,0,0,115,24,0,0,0,10,4,16,1,16,2, - 12,2,10,1,4,1,8,1,12,1,12,1,6,1,4,1, - 255,128,122,27,80,97,116,104,70,105,110,100,101,114,46,95, - 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,78, - 99,4,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0, - 125,4,124,2,68,0,93,67,125,5,116,0,124,5,116,1, - 116,2,102,2,131,2,115,14,113,4,124,0,160,3,124,5, - 161,1,125,6,124,6,100,1,117,1,114,71,116,4,124,6, - 100,2,131,2,114,35,124,6,160,5,124,1,124,3,161,2, - 125,7,110,6,124,0,160,6,124,1,124,6,161,2,125,7, - 124,7,100,1,117,0,114,46,113,4,124,7,106,7,100,1, - 117,1,114,55,124,7,2,0,1,0,83,0,124,7,106,8, - 125,8,124,8,100,1,117,0,114,66,116,9,100,3,131,1, - 130,1,124,4,160,10,124,8,161,1,1,0,113,4,116,11, - 160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8, - 124,7,83,0,41,4,122,63,70,105,110,100,32,116,104,101, - 32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115, - 112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104, - 105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103, - 101,32,110,97,109,101,46,78,114,214,0,0,0,122,19,115, - 112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100, - 101,114,41,13,114,172,0,0,0,114,97,0,0,0,218,5, - 98,121,116,101,115,114,73,1,0,0,114,140,0,0,0,114, - 214,0,0,0,114,74,1,0,0,114,151,0,0,0,114,189, - 0,0,0,114,129,0,0,0,114,178,0,0,0,114,146,0, - 0,0,114,194,0,0,0,41,9,114,209,0,0,0,114,150, - 0,0,0,114,58,0,0,0,114,213,0,0,0,218,14,110, - 97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101, - 110,116,114,121,114,68,1,0,0,114,198,0,0,0,114,152, + 0,0,0,67,0,0,0,115,138,0,0,0,116,0,124,2, + 100,1,131,2,114,27,116,1,160,2,124,2,161,1,155,0, + 100,2,157,2,125,3,116,3,160,4,124,3,116,5,161,2, + 1,0,124,2,160,6,124,1,161,1,92,2,125,4,125,5, + 110,21,116,1,160,2,124,2,161,1,155,0,100,3,157,2, + 125,3,116,3,160,4,124,3,116,5,161,2,1,0,124,2, + 160,7,124,1,161,1,125,4,103,0,125,5,124,4,100,0, + 117,1,114,58,116,1,160,8,124,1,124,4,161,2,83,0, + 116,1,160,9,124,1,100,0,161,2,125,6,124,5,124,6, + 95,10,124,6,83,0,41,4,78,114,148,0,0,0,122,53, + 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, + 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, + 98,97,99,107,32,116,111,32,102,105,110,100,95,108,111,97, + 100,101,114,40,41,122,53,46,102,105,110,100,95,115,112,101, + 99,40,41,32,110,111,116,32,102,111,117,110,100,59,32,102, + 97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,102, + 105,110,100,95,109,111,100,117,108,101,40,41,41,11,114,140, + 0,0,0,114,146,0,0,0,90,12,95,111,98,106,101,99, + 116,95,110,97,109,101,114,88,0,0,0,114,89,0,0,0, + 114,149,0,0,0,114,148,0,0,0,114,217,0,0,0,114, + 212,0,0,0,114,194,0,0,0,114,189,0,0,0,41,7, + 114,209,0,0,0,114,150,0,0,0,114,68,1,0,0,114, + 153,0,0,0,114,151,0,0,0,114,152,0,0,0,114,198, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,9,95,103,101,116,95,115,112,101,99,59,5,0, - 0,115,44,0,0,0,4,5,8,1,14,1,2,1,10,1, - 8,1,10,1,14,1,12,2,8,1,2,1,10,1,8,1, - 6,1,8,1,8,1,10,5,2,128,12,2,6,1,4,1, - 255,128,122,20,80,97,116,104,70,105,110,100,101,114,46,95, - 103,101,116,95,115,112,101,99,99,4,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,5,0,0,0,67,0,0, - 0,115,94,0,0,0,124,2,100,1,117,0,114,7,116,0, - 106,1,125,2,124,0,160,2,124,1,124,2,124,3,161,3, - 125,4,124,4,100,1,117,0,114,20,100,1,83,0,124,4, - 106,3,100,1,117,0,114,45,124,4,106,4,125,5,124,5, - 114,43,100,1,124,4,95,5,116,6,124,1,124,5,124,0, - 106,2,131,3,124,4,95,4,124,4,83,0,100,1,83,0, - 124,4,83,0,41,2,122,141,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,39, - 102,117,108,108,110,97,109,101,39,32,111,110,32,115,121,115, - 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,46, - 10,10,32,32,32,32,32,32,32,32,84,104,101,32,115,101, - 97,114,99,104,32,105,115,32,98,97,115,101,100,32,111,110, - 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 97,110,100,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,32,32,32, - 32,32,32,32,32,78,41,7,114,16,0,0,0,114,58,0, - 0,0,114,77,1,0,0,114,151,0,0,0,114,189,0,0, - 0,114,192,0,0,0,114,33,1,0,0,41,6,114,209,0, - 0,0,114,150,0,0,0,114,58,0,0,0,114,213,0,0, - 0,114,198,0,0,0,114,76,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,214,0,0,0,91, - 5,0,0,115,28,0,0,0,8,6,6,1,14,1,8,1, - 4,1,10,1,6,1,4,1,6,3,16,1,4,1,4,2, - 4,2,255,128,122,20,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,30,0,0,0,124,0,160,0,124,1,124,2, - 161,2,125,3,124,3,100,1,117,0,114,12,100,1,83,0, - 124,3,106,1,83,0,41,2,122,170,102,105,110,100,32,116, - 104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115, - 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32, - 32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,78,114,215,0,0,0,114,216,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,217, - 0,0,0,115,5,0,0,115,10,0,0,0,12,8,8,1, - 4,1,6,1,255,128,122,22,80,97,116,104,70,105,110,100, - 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, - 0,0,0,79,0,0,0,115,28,0,0,0,100,1,100,2, - 108,0,109,1,125,2,1,0,124,2,106,2,124,0,105,0, - 124,1,164,1,142,1,83,0,41,4,97,32,1,0,0,10, - 32,32,32,32,32,32,32,32,70,105,110,100,32,100,105,115, - 116,114,105,98,117,116,105,111,110,115,46,10,10,32,32,32, - 32,32,32,32,32,82,101,116,117,114,110,32,97,110,32,105, - 116,101,114,97,98,108,101,32,111,102,32,97,108,108,32,68, - 105,115,116,114,105,98,117,116,105,111,110,32,105,110,115,116, - 97,110,99,101,115,32,99,97,112,97,98,108,101,32,111,102, - 10,32,32,32,32,32,32,32,32,108,111,97,100,105,110,103, - 32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,111, - 114,32,112,97,99,107,97,103,101,115,32,109,97,116,99,104, - 105,110,103,32,96,96,99,111,110,116,101,120,116,46,110,97, - 109,101,96,96,10,32,32,32,32,32,32,32,32,40,111,114, - 32,97,108,108,32,110,97,109,101,115,32,105,102,32,96,96, - 78,111,110,101,96,96,32,105,110,100,105,99,97,116,101,100, - 41,32,97,108,111,110,103,32,116,104,101,32,112,97,116,104, - 115,32,105,110,32,116,104,101,32,108,105,115,116,10,32,32, - 32,32,32,32,32,32,111,102,32,100,105,114,101,99,116,111, - 114,105,101,115,32,96,96,99,111,110,116,101,120,116,46,112, - 97,116,104,96,96,46,10,32,32,32,32,32,32,32,32,114, - 0,0,0,0,41,1,218,18,77,101,116,97,100,97,116,97, - 80,97,116,104,70,105,110,100,101,114,78,41,3,90,18,105, - 109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116, - 97,114,78,1,0,0,218,18,102,105,110,100,95,100,105,115, - 116,114,105,98,117,116,105,111,110,115,41,3,114,131,0,0, - 0,114,132,0,0,0,114,78,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,79,1,0,0,128, - 5,0,0,115,6,0,0,0,12,10,16,1,255,128,122,29, - 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, - 100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78, - 41,2,78,78,41,1,78,41,14,114,137,0,0,0,114,136, - 0,0,0,114,138,0,0,0,114,139,0,0,0,114,220,0, - 0,0,114,64,1,0,0,114,70,1,0,0,114,221,0,0, - 0,114,73,1,0,0,114,74,1,0,0,114,77,1,0,0, - 114,214,0,0,0,114,217,0,0,0,114,79,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,63,1,0,0,248,4,0,0,115,38,0,0, - 0,8,0,4,2,2,2,10,1,2,9,10,1,2,12,10, - 1,2,21,10,1,2,17,12,1,2,31,12,1,2,23,12, - 1,2,12,14,1,255,128,114,63,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,64,0,0,0,115,90,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, - 100,5,132,0,90,5,101,6,90,7,100,6,100,7,132,0, - 90,8,100,8,100,9,132,0,90,9,100,19,100,11,100,12, - 132,1,90,10,100,13,100,14,132,0,90,11,101,12,100,15, - 100,16,132,0,131,1,90,13,100,17,100,18,132,0,90,14, - 100,10,83,0,41,20,218,10,70,105,108,101,70,105,110,100, - 101,114,122,172,70,105,108,101,45,98,97,115,101,100,32,102, - 105,110,100,101,114,46,10,10,32,32,32,32,73,110,116,101, - 114,97,99,116,105,111,110,115,32,119,105,116,104,32,116,104, - 101,32,102,105,108,101,32,115,121,115,116,101,109,32,97,114, - 101,32,99,97,99,104,101,100,32,102,111,114,32,112,101,114, - 102,111,114,109,97,110,99,101,44,32,98,101,105,110,103,10, - 32,32,32,32,114,101,102,114,101,115,104,101,100,32,119,104, - 101,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121, - 32,116,104,101,32,102,105,110,100,101,114,32,105,115,32,104, - 97,110,100,108,105,110,103,32,104,97,115,32,98,101,101,110, - 32,109,111,100,105,102,105,101,100,46,10,10,32,32,32,32, - 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,6,0,0,0,7,0,0,0,115,84,0,0,0,103,0, - 125,3,124,2,68,0,93,16,92,2,137,0,125,4,124,3, - 160,0,135,0,102,1,100,1,100,2,132,8,124,4,68,0, - 131,1,161,1,1,0,113,4,124,3,124,0,95,1,124,1, - 112,27,100,3,124,0,95,2,100,4,124,0,95,3,116,4, - 131,0,124,0,95,5,116,4,131,0,124,0,95,6,100,5, - 83,0,41,6,122,154,73,110,105,116,105,97,108,105,122,101, - 32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116, - 111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32, - 97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101, - 114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116, - 117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103, - 32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32, - 116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101, - 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32, - 32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,3,0,0,0,51,0,0,0,115,22,0,0,0,124,0, - 93,7,125,1,124,1,136,0,102,2,86,0,1,0,113,1, - 100,0,83,0,114,121,0,0,0,114,7,0,0,0,114,29, - 1,0,0,169,1,114,151,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,9,0,0,0,157,5,0,0,114,14,0, - 0,0,122,38,70,105,108,101,70,105,110,100,101,114,46,95, - 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, - 46,60,103,101,110,101,120,112,114,62,114,86,0,0,0,114, - 116,0,0,0,78,41,7,114,178,0,0,0,218,8,95,108, - 111,97,100,101,114,115,114,58,0,0,0,218,11,95,112,97, - 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, - 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, - 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, - 5,114,130,0,0,0,114,58,0,0,0,218,14,108,111,97, - 100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97, - 100,101,114,115,114,200,0,0,0,114,7,0,0,0,114,81, - 1,0,0,114,8,0,0,0,114,223,0,0,0,151,5,0, - 0,115,18,0,0,0,4,4,12,1,26,1,6,1,10,2, - 6,1,8,1,12,1,255,128,122,19,70,105,108,101,70,105, - 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,10,0,0,0,100,1,124,0,95, - 0,100,2,83,0,41,3,122,31,73,110,118,97,108,105,100, - 97,116,101,32,116,104,101,32,100,105,114,101,99,116,111,114, - 121,32,109,116,105,109,101,46,114,116,0,0,0,78,41,1, - 114,83,1,0,0,114,8,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,64,1,0,0,165,5, - 0,0,114,69,0,0,0,122,28,70,105,108,101,70,105,110, - 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,42, - 0,0,0,124,0,160,0,124,1,161,1,125,2,124,2,100, - 1,117,0,114,13,100,1,103,0,102,2,83,0,124,2,106, - 1,124,2,106,2,112,19,103,0,102,2,83,0,41,2,122, - 197,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, - 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, - 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, - 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, - 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, - 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, - 45,111,102,45,112,111,114,116,105,111,110,115,41,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,3,114,214,0,0,0,114,151, - 0,0,0,114,189,0,0,0,41,3,114,130,0,0,0,114, - 150,0,0,0,114,198,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,148,0,0,0,171,5,0, - 0,115,10,0,0,0,10,7,8,1,8,1,16,1,255,128, - 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, - 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,0, - 0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,6, - 116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,0, - 41,2,78,114,188,0,0,0,41,1,114,201,0,0,0,41, - 7,114,130,0,0,0,114,199,0,0,0,114,150,0,0,0, - 114,58,0,0,0,90,4,115,109,115,108,114,213,0,0,0, - 114,151,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,77,1,0,0,183,5,0,0,115,10,0, - 0,0,10,1,8,1,2,1,6,255,255,128,122,20,70,105, - 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, - 101,99,78,99,3,0,0,0,0,0,0,0,0,0,0,0, - 14,0,0,0,8,0,0,0,67,0,0,0,115,92,1,0, - 0,100,1,125,3,124,1,160,0,100,2,161,1,100,3,25, - 0,125,4,122,12,116,1,124,0,106,2,112,17,116,3,160, - 4,161,0,131,1,106,5,125,5,87,0,110,9,4,0,116, - 6,121,173,1,0,1,0,1,0,100,4,125,5,89,0,124, - 5,124,0,106,7,107,3,114,43,124,0,160,8,161,0,1, - 0,124,5,124,0,95,7,116,9,131,0,114,54,124,0,106, - 10,125,6,124,4,160,11,161,0,125,7,110,5,124,0,106, - 12,125,6,124,4,125,7,124,7,124,6,118,0,114,106,116, - 13,124,0,106,2,124,4,131,2,125,8,124,0,106,14,68, - 0,93,29,92,2,125,9,125,10,100,5,124,9,23,0,125, - 11,116,13,124,8,124,11,131,2,125,12,116,15,124,12,131, - 1,114,101,124,0,160,16,124,10,124,1,124,12,124,8,103, - 1,124,2,161,5,2,0,1,0,83,0,113,72,116,17,124, - 8,131,1,125,3,124,0,106,14,68,0,93,41,92,2,125, - 9,125,10,116,13,124,0,106,2,124,4,124,9,23,0,131, - 2,125,12,116,18,106,19,100,6,124,12,100,3,100,7,141, - 3,1,0,124,7,124,9,23,0,124,6,118,0,114,150,116, - 15,124,12,131,1,114,150,124,0,160,16,124,10,124,1,124, - 12,100,8,124,2,161,5,2,0,1,0,83,0,113,109,124, - 3,114,171,116,18,160,19,100,9,124,8,161,2,1,0,116, - 18,160,20,124,1,100,8,161,2,125,13,124,8,103,1,124, - 13,95,21,124,13,83,0,100,8,83,0,119,0,41,10,122, - 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, - 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116, - 104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99, - 44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116, - 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, - 70,114,86,0,0,0,114,45,0,0,0,114,116,0,0,0, - 114,223,0,0,0,122,9,116,114,121,105,110,103,32,123,125, - 41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,25, - 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, - 99,101,32,102,111,114,32,123,125,41,22,114,55,0,0,0, - 114,63,0,0,0,114,58,0,0,0,114,19,0,0,0,114, - 70,0,0,0,114,22,1,0,0,114,64,0,0,0,114,83, - 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, - 114,22,0,0,0,114,86,1,0,0,114,117,0,0,0,114, - 85,1,0,0,114,54,0,0,0,114,82,1,0,0,114,68, - 0,0,0,114,77,1,0,0,114,71,0,0,0,114,146,0, - 0,0,114,160,0,0,0,114,194,0,0,0,114,189,0,0, - 0,41,14,114,130,0,0,0,114,150,0,0,0,114,213,0, - 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, - 90,11,116,97,105,108,95,109,111,100,117,108,101,114,180,0, - 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, - 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, - 116,104,114,30,1,0,0,114,199,0,0,0,90,13,105,110, - 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, - 108,95,112,97,116,104,114,198,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,214,0,0,0,188, - 5,0,0,115,80,0,0,0,4,5,14,1,2,1,24,1, - 12,1,6,1,10,1,8,1,6,1,6,2,6,1,10,1, - 6,2,4,1,8,2,12,1,14,1,8,1,10,1,8,1, - 24,1,2,255,8,5,14,2,16,1,16,1,12,1,8,1, - 10,1,4,1,8,255,2,128,4,2,12,1,12,1,8,1, - 4,1,4,1,2,219,255,128,122,20,70,105,108,101,70,105, - 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,1, - 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,10, - 0,0,0,67,0,0,0,115,190,0,0,0,124,0,106,0, - 125,1,122,11,116,1,160,2,124,1,112,11,116,1,160,3, - 161,0,161,1,125,2,87,0,110,12,4,0,116,4,116,5, - 116,6,102,3,121,94,1,0,1,0,1,0,103,0,125,2, - 89,0,116,7,106,8,160,9,100,1,161,1,115,39,116,10, - 124,2,131,1,124,0,95,11,110,37,116,10,131,0,125,3, - 124,2,68,0,93,28,125,4,124,4,160,12,100,2,161,1, - 92,3,125,5,125,6,125,7,124,6,114,65,100,3,160,13, - 124,5,124,7,160,14,161,0,161,2,125,8,110,2,124,5, - 125,8,124,3,160,15,124,8,161,1,1,0,113,44,124,3, - 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,92, - 100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17, - 100,6,83,0,100,6,83,0,119,0,41,7,122,68,70,105, - 108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32, - 112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101, - 115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102, - 111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114, - 121,46,114,15,0,0,0,114,86,0,0,0,114,76,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,83,0,0,0,115,20,0,0,0,104, - 0,124,0,93,6,125,1,124,1,160,0,161,0,146,2,113, - 2,83,0,114,7,0,0,0,41,1,114,117,0,0,0,41, - 2,114,5,0,0,0,90,2,102,110,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,13,0,0,0,9,6, - 0,0,115,4,0,0,0,20,0,255,128,122,41,70,105,108, - 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, - 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, - 116,99,111,109,112,62,78,41,18,114,58,0,0,0,114,19, - 0,0,0,90,7,108,105,115,116,100,105,114,114,70,0,0, - 0,114,71,1,0,0,218,15,80,101,114,109,105,115,115,105, - 111,110,69,114,114,111,114,218,18,78,111,116,65,68,105,114, - 101,99,116,111,114,121,69,114,114,111,114,114,16,0,0,0, - 114,26,0,0,0,114,27,0,0,0,114,84,1,0,0,114, - 85,1,0,0,114,112,0,0,0,114,77,0,0,0,114,117, - 0,0,0,218,3,97,100,100,114,28,0,0,0,114,86,1, - 0,0,41,9,114,130,0,0,0,114,58,0,0,0,90,8, - 99,111,110,116,101,110,116,115,90,21,108,111,119,101,114,95, - 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,114, - 56,1,0,0,114,128,0,0,0,114,40,1,0,0,114,30, - 1,0,0,90,8,110,101,119,95,110,97,109,101,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,88,1,0, - 0,236,5,0,0,115,40,0,0,0,6,2,2,1,22,1, - 18,1,6,3,12,3,12,1,6,7,8,1,16,1,4,1, - 18,1,4,2,12,1,6,1,12,1,20,1,4,255,2,233, - 255,128,122,22,70,105,108,101,70,105,110,100,101,114,46,95, - 102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,7, - 0,0,0,115,18,0,0,0,135,0,135,1,102,2,100,1, - 100,2,132,8,125,2,124,2,83,0,41,4,97,20,1,0, - 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, - 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, - 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, - 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, - 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, - 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, - 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, - 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, - 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, - 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, - 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, - 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, - 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,32,32,32,32,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,36, - 0,0,0,116,0,124,0,131,1,115,10,116,1,100,1,124, - 0,100,2,141,2,130,1,136,0,124,0,103,1,136,1,162, - 1,82,0,142,0,83,0,41,4,122,45,80,97,116,104,32, - 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, - 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, - 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, - 117,112,112,111,114,116,101,100,114,62,0,0,0,78,41,2, - 114,71,0,0,0,114,129,0,0,0,114,62,0,0,0,169, - 2,114,209,0,0,0,114,87,1,0,0,114,7,0,0,0, - 114,8,0,0,0,218,24,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,21, - 6,0,0,115,8,0,0,0,8,2,12,1,16,1,255,128, - 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, - 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,78,114,7,0,0,0,41,3, - 114,209,0,0,0,114,87,1,0,0,114,93,1,0,0,114, - 7,0,0,0,114,92,1,0,0,114,8,0,0,0,218,9, - 112,97,116,104,95,104,111,111,107,11,6,0,0,115,6,0, - 0,0,14,10,4,6,255,128,122,20,70,105,108,101,70,105, - 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,114,53,1,0,0,41,2,78,122, - 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, - 41,41,2,114,77,0,0,0,114,58,0,0,0,114,8,1, + 0,0,218,16,95,108,101,103,97,99,121,95,103,101,116,95, + 115,112,101,99,41,5,0,0,115,28,0,0,0,10,4,16, + 1,12,2,16,1,16,2,12,2,10,1,4,1,8,1,12, + 1,12,1,6,1,4,1,255,128,122,27,80,97,116,104,70, + 105,110,100,101,114,46,95,108,101,103,97,99,121,95,103,101, + 116,95,115,112,101,99,78,99,4,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,0, + 115,166,0,0,0,103,0,125,4,124,2,68,0,93,67,125, + 5,116,0,124,5,116,1,116,2,102,2,131,2,115,14,113, + 4,124,0,160,3,124,5,161,1,125,6,124,6,100,1,117, + 1,114,71,116,4,124,6,100,2,131,2,114,35,124,6,160, + 5,124,1,124,3,161,2,125,7,110,6,124,0,160,6,124, + 1,124,6,161,2,125,7,124,7,100,1,117,0,114,46,113, + 4,124,7,106,7,100,1,117,1,114,55,124,7,2,0,1, + 0,83,0,124,7,106,8,125,8,124,8,100,1,117,0,114, + 66,116,9,100,3,131,1,130,1,124,4,160,10,124,8,161, + 1,1,0,113,4,116,11,160,12,124,1,100,1,161,2,125, + 7,124,4,124,7,95,8,124,7,83,0,41,4,122,63,70, + 105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111, + 114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104, + 32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101, + 47,112,97,99,107,97,103,101,32,110,97,109,101,46,78,114, + 214,0,0,0,122,19,115,112,101,99,32,109,105,115,115,105, + 110,103,32,108,111,97,100,101,114,41,13,114,172,0,0,0, + 114,97,0,0,0,218,5,98,121,116,101,115,114,73,1,0, + 0,114,140,0,0,0,114,214,0,0,0,114,74,1,0,0, + 114,151,0,0,0,114,189,0,0,0,114,129,0,0,0,114, + 178,0,0,0,114,146,0,0,0,114,194,0,0,0,41,9, + 114,209,0,0,0,114,150,0,0,0,114,58,0,0,0,114, + 213,0,0,0,218,14,110,97,109,101,115,112,97,99,101,95, + 112,97,116,104,90,5,101,110,116,114,121,114,68,1,0,0, + 114,198,0,0,0,114,152,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,9,95,103,101,116,95, + 115,112,101,99,62,5,0,0,115,44,0,0,0,4,5,8, + 1,14,1,2,1,10,1,8,1,10,1,14,1,12,2,8, + 1,2,1,10,1,8,1,6,1,8,1,8,1,10,5,2, + 128,12,2,6,1,4,1,255,128,122,20,80,97,116,104,70, + 105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 5,0,0,0,67,0,0,0,115,94,0,0,0,124,2,100, + 1,117,0,114,7,116,0,106,1,125,2,124,0,160,2,124, + 1,124,2,124,3,161,3,125,4,124,4,100,1,117,0,114, + 20,100,1,83,0,124,4,106,3,100,1,117,0,114,45,124, + 4,106,4,125,5,124,5,114,43,100,1,124,4,95,5,116, + 6,124,1,124,5,124,0,106,2,131,3,124,4,95,4,124, + 4,83,0,100,1,83,0,124,4,83,0,41,2,122,141,84, + 114,121,32,116,111,32,102,105,110,100,32,97,32,115,112,101, + 99,32,102,111,114,32,39,102,117,108,108,110,97,109,101,39, + 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, + 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, + 32,84,104,101,32,115,101,97,114,99,104,32,105,115,32,98, + 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,97,110,100,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,10,32,32,32,32,32,32,32,32,78,41,7,114, + 16,0,0,0,114,58,0,0,0,114,77,1,0,0,114,151, + 0,0,0,114,189,0,0,0,114,192,0,0,0,114,33,1, + 0,0,41,6,114,209,0,0,0,114,150,0,0,0,114,58, + 0,0,0,114,213,0,0,0,114,198,0,0,0,114,76,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,54,1,0,0,29,6,0,0,114,47,1,0,0,122, - 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, - 112,114,95,95,41,1,78,41,15,114,137,0,0,0,114,136, - 0,0,0,114,138,0,0,0,114,139,0,0,0,114,223,0, - 0,0,114,64,1,0,0,114,154,0,0,0,114,217,0,0, - 0,114,148,0,0,0,114,77,1,0,0,114,214,0,0,0, - 114,88,1,0,0,114,221,0,0,0,114,94,1,0,0,114, - 54,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,80,1,0,0,142,5,0, - 0,115,26,0,0,0,8,0,4,2,8,7,8,14,4,4, - 8,2,8,12,10,5,8,48,2,31,10,1,12,17,255,128, - 114,80,1,0,0,99,4,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,144, - 0,0,0,124,0,160,0,100,1,161,1,125,4,124,0,160, - 0,100,2,161,1,125,5,124,4,115,33,124,5,114,18,124, - 5,106,1,125,4,110,15,124,2,124,3,107,2,114,28,116, - 2,124,1,124,2,131,2,125,4,110,5,116,3,124,1,124, - 2,131,2,125,4,124,5,115,42,116,4,124,1,124,2,124, - 4,100,3,141,3,125,5,122,19,124,5,124,0,100,2,60, - 0,124,4,124,0,100,1,60,0,124,2,124,0,100,4,60, - 0,124,3,124,0,100,5,60,0,87,0,100,0,83,0,4, - 0,116,5,121,71,1,0,1,0,1,0,89,0,100,0,83, - 0,119,0,41,6,78,218,10,95,95,108,111,97,100,101,114, - 95,95,218,8,95,95,115,112,101,99,95,95,114,81,1,0, - 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, - 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,151, - 0,0,0,114,27,1,0,0,114,21,1,0,0,114,201,0, - 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, - 2,110,115,114,128,0,0,0,90,8,112,97,116,104,110,97, - 109,101,90,9,99,112,97,116,104,110,97,109,101,114,151,0, - 0,0,114,198,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,14,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,35,6,0,0,115,38,0,0,0,10, - 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, - 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, - 2,2,254,255,128,114,99,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, - 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, - 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,2, - 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, - 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, - 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, - 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, - 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, - 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, - 32,78,41,7,114,17,1,0,0,114,174,0,0,0,218,18, - 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, - 101,115,114,21,1,0,0,114,113,0,0,0,114,27,1,0, - 0,114,101,0,0,0,41,3,90,10,101,120,116,101,110,115, - 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, - 116,101,99,111,100,101,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,195,0,0,0,58,6,0,0,115,10, - 0,0,0,12,5,8,1,8,1,10,1,255,128,114,195,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, - 124,0,97,0,100,0,83,0,114,121,0,0,0,41,1,114, - 146,0,0,0,41,1,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,21,95,115,101,116,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,69, - 6,0,0,115,4,0,0,0,8,2,255,128,114,102,1,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, - 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, - 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, - 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, - 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, - 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, - 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, - 10,114,102,1,0,0,114,195,0,0,0,114,16,0,0,0, - 114,69,1,0,0,114,178,0,0,0,114,80,1,0,0,114, - 94,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, - 197,0,0,0,114,63,1,0,0,41,2,114,101,1,0,0, - 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, - 101,114,115,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,8,95,105,110,115,116,97,108,108,74,6,0,0, - 115,10,0,0,0,8,2,6,1,20,1,16,1,255,128,114, - 104,1,0,0,41,1,114,75,0,0,0,41,1,78,41,3, - 78,78,78,41,2,114,0,0,0,0,114,0,0,0,0,41, - 1,84,41,1,78,41,1,78,41,83,114,139,0,0,0,114, - 146,0,0,0,114,174,0,0,0,114,79,0,0,0,114,16, - 0,0,0,114,88,0,0,0,114,171,0,0,0,114,26,0, - 0,0,114,218,0,0,0,90,2,110,116,114,19,0,0,0, - 114,203,0,0,0,90,5,112,111,115,105,120,114,48,0,0, - 0,218,3,97,108,108,114,51,0,0,0,114,52,0,0,0, - 114,73,0,0,0,114,29,0,0,0,90,37,95,67,65,83, - 69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,76, - 65,84,70,79,82,77,83,95,66,89,84,69,83,95,75,69, - 89,114,28,0,0,0,114,30,0,0,0,114,22,0,0,0, - 114,37,0,0,0,114,43,0,0,0,114,46,0,0,0,114, - 54,0,0,0,114,61,0,0,0,114,63,0,0,0,114,67, - 0,0,0,114,68,0,0,0,114,71,0,0,0,114,74,0, - 0,0,114,84,0,0,0,218,4,116,121,112,101,218,8,95, - 95,99,111,100,101,95,95,114,173,0,0,0,114,35,0,0, - 0,114,159,0,0,0,114,34,0,0,0,114,40,0,0,0, - 114,251,0,0,0,114,104,0,0,0,114,100,0,0,0,114, - 113,0,0,0,114,197,0,0,0,114,100,1,0,0,114,219, - 0,0,0,114,101,0,0,0,90,23,68,69,66,85,71,95, - 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, - 83,90,27,79,80,84,73,77,73,90,69,68,95,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,109, - 0,0,0,114,114,0,0,0,114,120,0,0,0,114,124,0, - 0,0,114,126,0,0,0,114,147,0,0,0,114,154,0,0, - 0,114,163,0,0,0,114,167,0,0,0,114,169,0,0,0, - 114,176,0,0,0,114,181,0,0,0,114,182,0,0,0,114, - 187,0,0,0,218,6,111,98,106,101,99,116,114,196,0,0, - 0,114,201,0,0,0,114,202,0,0,0,114,222,0,0,0, - 114,236,0,0,0,114,254,0,0,0,114,21,1,0,0,114, - 27,1,0,0,114,17,1,0,0,114,33,1,0,0,114,59, - 1,0,0,114,63,1,0,0,114,80,1,0,0,114,99,1, - 0,0,114,195,0,0,0,114,102,1,0,0,114,104,1,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,8,60,109,111,100,117,108,101,62,1, - 0,0,0,115,172,0,0,0,4,0,4,22,8,3,8,1, - 8,1,8,1,8,1,10,3,4,1,8,1,10,1,8,2, - 4,3,10,1,6,2,22,2,8,1,10,1,14,1,4,4, - 4,1,2,1,2,1,4,255,8,4,6,16,8,3,8,5, - 8,5,8,6,8,6,8,12,8,10,8,9,8,5,8,7, - 10,9,10,22,0,127,16,26,12,1,4,2,4,1,6,2, - 4,1,10,1,8,2,6,2,8,2,16,2,8,71,8,40, - 8,19,8,12,8,12,8,31,8,17,8,33,8,28,10,24, - 10,13,10,10,8,11,6,14,4,3,2,1,12,255,14,68, - 14,64,16,30,0,127,14,17,18,50,18,45,18,25,14,53, - 14,63,14,49,0,127,14,23,0,127,10,22,8,23,8,11, - 12,5,255,128, + 0,114,214,0,0,0,94,5,0,0,115,28,0,0,0,8, + 6,6,1,14,1,8,1,4,1,10,1,6,1,4,1,6, + 3,16,1,4,1,4,2,4,2,255,128,122,20,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124, + 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,117, + 0,114,12,100,1,83,0,124,3,106,1,83,0,41,2,122, + 170,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, + 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, + 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, + 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, + 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, + 46,10,10,32,32,32,32,32,32,32,32,78,114,215,0,0, + 0,114,216,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,217,0,0,0,118,5,0,0,115,10, + 0,0,0,12,8,8,1,4,1,6,1,255,128,122,22,80, + 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,4,0,0,0,79,0,0,0,115,28, + 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, + 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, + 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, + 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, + 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, + 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, + 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, + 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, + 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, + 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, + 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, + 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, + 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, + 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, + 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, + 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, + 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, + 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, + 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, + 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, + 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, + 109,101,116,97,100,97,116,97,114,78,1,0,0,218,18,102, + 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110, + 115,41,3,114,131,0,0,0,114,132,0,0,0,114,78,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,79,1,0,0,131,5,0,0,115,6,0,0,0,12, + 10,16,1,255,128,122,29,80,97,116,104,70,105,110,100,101, + 114,46,102,105,110,100,95,100,105,115,116,114,105,98,117,116, + 105,111,110,115,41,1,78,41,2,78,78,41,1,78,41,14, + 114,137,0,0,0,114,136,0,0,0,114,138,0,0,0,114, + 139,0,0,0,114,220,0,0,0,114,64,1,0,0,114,70, + 1,0,0,114,221,0,0,0,114,73,1,0,0,114,74,1, + 0,0,114,77,1,0,0,114,214,0,0,0,114,217,0,0, + 0,114,79,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,63,1,0,0,248, + 4,0,0,115,38,0,0,0,8,0,4,2,2,2,10,1, + 2,9,10,1,2,12,10,1,2,21,10,1,2,20,12,1, + 2,31,12,1,2,23,12,1,2,12,14,1,255,128,114,63, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90, + 7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90, + 9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132, + 0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100, + 17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70, + 105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45, + 98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32, + 32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32, + 119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121, + 115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32, + 102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44, + 32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101, + 115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100, + 101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104, + 97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100, + 46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0, + 115,84,0,0,0,103,0,125,3,124,2,68,0,93,16,92, + 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100, + 2,132,8,124,4,68,0,131,1,161,1,1,0,113,4,124, + 3,124,0,95,1,124,1,112,27,100,3,124,0,95,2,100, + 4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131, + 0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105, + 116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101, + 32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32, + 111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108, + 101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32, + 32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110, + 116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100, + 101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32, + 115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97, + 100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111, + 103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, + 115,22,0,0,0,124,0,93,7,125,1,124,1,136,0,102, + 2,86,0,1,0,113,1,100,0,83,0,114,121,0,0,0, + 114,7,0,0,0,114,29,1,0,0,169,1,114,151,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,9,0,0,0, + 160,5,0,0,114,14,0,0,0,122,38,70,105,108,101,70, + 105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60, + 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, + 62,114,86,0,0,0,114,116,0,0,0,78,41,7,114,178, + 0,0,0,218,8,95,108,111,97,100,101,114,115,114,58,0, + 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, + 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, + 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, + 95,99,97,99,104,101,41,5,114,130,0,0,0,114,58,0, + 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, + 108,115,90,7,108,111,97,100,101,114,115,114,200,0,0,0, + 114,7,0,0,0,114,81,1,0,0,114,8,0,0,0,114, + 223,0,0,0,154,5,0,0,115,18,0,0,0,4,4,12, + 1,26,1,6,1,10,2,6,1,8,1,12,1,255,128,122, + 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,10,0, + 0,0,100,1,124,0,95,0,100,2,83,0,41,3,122,31, + 73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,114, + 116,0,0,0,78,41,1,114,83,1,0,0,114,8,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,64,1,0,0,168,5,0,0,114,69,0,0,0,122,28, + 70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,42,0,0,0,124,0,160,0,124,1, + 161,1,125,2,124,2,100,1,117,0,114,13,100,1,103,0, + 102,2,83,0,124,2,106,1,124,2,106,2,112,19,103,0, + 102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, + 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, + 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, + 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, + 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, + 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, + 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, + 114,214,0,0,0,114,151,0,0,0,114,189,0,0,0,41, + 3,114,130,0,0,0,114,150,0,0,0,114,198,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 148,0,0,0,174,5,0,0,115,10,0,0,0,10,7,8, + 1,8,1,16,1,255,128,122,22,70,105,108,101,70,105,110, + 100,101,114,46,102,105,110,100,95,108,111,97,100,101,114,99, + 6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 6,0,0,0,67,0,0,0,115,26,0,0,0,124,1,124, + 2,124,3,131,2,125,6,116,0,124,2,124,3,124,6,124, + 4,100,1,141,4,83,0,41,2,78,114,188,0,0,0,41, + 1,114,201,0,0,0,41,7,114,130,0,0,0,114,199,0, + 0,0,114,150,0,0,0,114,58,0,0,0,90,4,115,109, + 115,108,114,213,0,0,0,114,151,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,77,1,0,0, + 186,5,0,0,115,10,0,0,0,10,1,8,1,2,1,6, + 255,255,128,122,20,70,105,108,101,70,105,110,100,101,114,46, + 95,103,101,116,95,115,112,101,99,78,99,3,0,0,0,0, + 0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67, + 0,0,0,115,92,1,0,0,100,1,125,3,124,1,160,0, + 100,2,161,1,100,3,25,0,125,4,122,12,116,1,124,0, + 106,2,112,17,116,3,160,4,161,0,131,1,106,5,125,5, + 87,0,110,9,4,0,116,6,121,173,1,0,1,0,1,0, + 100,4,125,5,89,0,124,5,124,0,106,7,107,3,114,43, + 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, + 131,0,114,54,124,0,106,10,125,6,124,4,160,11,161,0, + 125,7,110,5,124,0,106,12,125,6,124,4,125,7,124,7, + 124,6,118,0,114,106,116,13,124,0,106,2,124,4,131,2, + 125,8,124,0,106,14,68,0,93,29,92,2,125,9,125,10, + 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, + 125,12,116,15,124,12,131,1,114,101,124,0,160,16,124,10, + 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, + 83,0,113,72,116,17,124,8,131,1,125,3,124,0,106,14, + 68,0,93,41,92,2,125,9,125,10,116,13,124,0,106,2, + 124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6, + 124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0, + 124,6,118,0,114,150,116,15,124,12,131,1,114,150,124,0, + 160,16,124,10,124,1,124,12,100,8,124,2,161,5,2,0, + 1,0,83,0,113,109,124,3,114,171,116,18,160,19,100,9, + 124,8,161,2,1,0,116,18,160,20,124,1,100,8,161,2, + 125,13,124,8,103,1,124,13,95,21,124,13,83,0,100,8, + 83,0,119,0,41,10,122,111,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101, + 116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105, + 110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101, + 32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32, + 32,32,32,32,32,32,32,70,114,86,0,0,0,114,45,0, + 0,0,114,116,0,0,0,114,223,0,0,0,122,9,116,114, + 121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111, + 115,105,116,121,78,122,25,112,111,115,115,105,98,108,101,32, + 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, + 41,22,114,55,0,0,0,114,63,0,0,0,114,58,0,0, + 0,114,19,0,0,0,114,70,0,0,0,114,22,1,0,0, + 114,64,0,0,0,114,83,1,0,0,218,11,95,102,105,108, + 108,95,99,97,99,104,101,114,22,0,0,0,114,86,1,0, + 0,114,117,0,0,0,114,85,1,0,0,114,54,0,0,0, + 114,82,1,0,0,114,68,0,0,0,114,77,1,0,0,114, + 71,0,0,0,114,146,0,0,0,114,160,0,0,0,114,194, + 0,0,0,114,189,0,0,0,41,14,114,130,0,0,0,114, + 150,0,0,0,114,213,0,0,0,90,12,105,115,95,110,97, + 109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,111, + 100,117,108,101,114,180,0,0,0,90,5,99,97,99,104,101, + 90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,9, + 98,97,115,101,95,112,97,116,104,114,30,1,0,0,114,199, + 0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97, + 109,101,90,9,102,117,108,108,95,112,97,116,104,114,198,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,214,0,0,0,191,5,0,0,115,80,0,0,0,4, + 5,14,1,2,1,24,1,12,1,6,1,10,1,8,1,6, + 1,6,2,6,1,10,1,6,2,4,1,8,2,12,1,14, + 1,8,1,10,1,8,1,24,1,2,255,8,5,14,2,16, + 1,16,1,12,1,8,1,10,1,4,1,8,255,2,128,4, + 2,12,1,12,1,8,1,4,1,4,1,2,219,255,128,122, + 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,99,1,0,0,0,0,0,0,0,0,0, + 0,0,9,0,0,0,10,0,0,0,67,0,0,0,115,190, + 0,0,0,124,0,106,0,125,1,122,11,116,1,160,2,124, + 1,112,11,116,1,160,3,161,0,161,1,125,2,87,0,110, + 12,4,0,116,4,116,5,116,6,102,3,121,94,1,0,1, + 0,1,0,103,0,125,2,89,0,116,7,106,8,160,9,100, + 1,161,1,115,39,116,10,124,2,131,1,124,0,95,11,110, + 37,116,10,131,0,125,3,124,2,68,0,93,28,125,4,124, + 4,160,12,100,2,161,1,92,3,125,5,125,6,125,7,124, + 6,114,65,100,3,160,13,124,5,124,7,160,14,161,0,161, + 2,125,8,110,2,124,5,125,8,124,3,160,15,124,8,161, + 1,1,0,113,44,124,3,124,0,95,11,116,7,106,8,160, + 9,116,16,161,1,114,92,100,4,100,5,132,0,124,2,68, + 0,131,1,124,0,95,17,100,6,83,0,100,6,83,0,119, + 0,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, + 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, + 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, + 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, + 105,114,101,99,116,111,114,121,46,114,15,0,0,0,114,86, + 0,0,0,114,76,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, + 0,115,20,0,0,0,104,0,124,0,93,6,125,1,124,1, + 160,0,161,0,146,2,113,2,83,0,114,7,0,0,0,41, + 1,114,117,0,0,0,41,2,114,5,0,0,0,90,2,102, + 110,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,13,0,0,0,12,6,0,0,115,4,0,0,0,20,0, + 255,128,122,41,70,105,108,101,70,105,110,100,101,114,46,95, + 102,105,108,108,95,99,97,99,104,101,46,60,108,111,99,97, + 108,115,62,46,60,115,101,116,99,111,109,112,62,78,41,18, + 114,58,0,0,0,114,19,0,0,0,90,7,108,105,115,116, + 100,105,114,114,70,0,0,0,114,71,1,0,0,218,15,80, + 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, + 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, + 111,114,114,16,0,0,0,114,26,0,0,0,114,27,0,0, + 0,114,84,1,0,0,114,85,1,0,0,114,112,0,0,0, + 114,77,0,0,0,114,117,0,0,0,218,3,97,100,100,114, + 28,0,0,0,114,86,1,0,0,41,9,114,130,0,0,0, + 114,58,0,0,0,90,8,99,111,110,116,101,110,116,115,90, + 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, + 110,116,101,110,116,115,114,56,1,0,0,114,128,0,0,0, + 114,40,1,0,0,114,30,1,0,0,90,8,110,101,119,95, + 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,88,1,0,0,239,5,0,0,115,40,0,0, + 0,6,2,2,1,22,1,18,1,6,3,12,3,12,1,6, + 7,8,1,16,1,4,1,18,1,4,2,12,1,6,1,12, + 1,20,1,4,255,2,233,255,128,122,22,70,105,108,101,70, + 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,7,0,0,0,115,18,0,0,0,135, + 0,135,1,102,2,100,1,100,2,132,8,125,2,124,2,83, + 0,41,4,97,20,1,0,0,65,32,99,108,97,115,115,32, + 109,101,116,104,111,100,32,119,104,105,99,104,32,114,101,116, + 117,114,110,115,32,97,32,99,108,111,115,117,114,101,32,116, + 111,32,117,115,101,32,111,110,32,115,121,115,46,112,97,116, + 104,95,104,111,111,107,10,32,32,32,32,32,32,32,32,119, + 104,105,99,104,32,119,105,108,108,32,114,101,116,117,114,110, + 32,97,110,32,105,110,115,116,97,110,99,101,32,117,115,105, + 110,103,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,108,111,97,100,101,114,115,32,97,110,100,32,116,104,101, + 32,112,97,116,104,10,32,32,32,32,32,32,32,32,99,97, + 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, + 117,114,101,46,10,10,32,32,32,32,32,32,32,32,73,102, + 32,116,104,101,32,112,97,116,104,32,99,97,108,108,101,100, + 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,32, + 105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111, + 114,121,44,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,115,10,32,32,32,32,32,32,32,32,114,97,105,115,101, + 100,46,10,10,32,32,32,32,32,32,32,32,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,19,0,0,0,115,36,0,0,0,116,0,124,0,131,1, + 115,10,116,1,100,1,124,0,100,2,141,2,130,1,136,0, + 124,0,103,1,136,1,162,1,82,0,142,0,83,0,41,4, + 122,45,80,97,116,104,32,104,111,111,107,32,102,111,114,32, + 105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110, + 101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,122, + 30,111,110,108,121,32,100,105,114,101,99,116,111,114,105,101, + 115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,114, + 62,0,0,0,78,41,2,114,71,0,0,0,114,129,0,0, + 0,114,62,0,0,0,169,2,114,209,0,0,0,114,87,1, + 0,0,114,7,0,0,0,114,8,0,0,0,218,24,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,24,6,0,0,115,8,0,0,0,8, + 2,12,1,16,1,255,128,122,54,70,105,108,101,70,105,110, + 100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,108, + 111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,107, + 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,78, + 114,7,0,0,0,41,3,114,209,0,0,0,114,87,1,0, + 0,114,93,1,0,0,114,7,0,0,0,114,92,1,0,0, + 114,8,0,0,0,218,9,112,97,116,104,95,104,111,111,107, + 14,6,0,0,115,6,0,0,0,14,10,4,6,255,128,122, + 20,70,105,108,101,70,105,110,100,101,114,46,112,97,116,104, + 95,104,111,111,107,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,53, + 1,0,0,41,2,78,122,16,70,105,108,101,70,105,110,100, + 101,114,40,123,33,114,125,41,41,2,114,77,0,0,0,114, + 58,0,0,0,114,8,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,54,1,0,0,32,6,0, + 0,114,47,1,0,0,122,19,70,105,108,101,70,105,110,100, + 101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,15, + 114,137,0,0,0,114,136,0,0,0,114,138,0,0,0,114, + 139,0,0,0,114,223,0,0,0,114,64,1,0,0,114,154, + 0,0,0,114,217,0,0,0,114,148,0,0,0,114,77,1, + 0,0,114,214,0,0,0,114,88,1,0,0,114,221,0,0, + 0,114,94,1,0,0,114,54,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 80,1,0,0,145,5,0,0,115,26,0,0,0,8,0,4, + 2,8,7,8,14,4,4,8,2,8,12,10,5,8,48,2, + 31,10,1,12,17,255,128,114,80,1,0,0,99,4,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,8,0,0, + 0,67,0,0,0,115,144,0,0,0,124,0,160,0,100,1, + 161,1,125,4,124,0,160,0,100,2,161,1,125,5,124,4, + 115,33,124,5,114,18,124,5,106,1,125,4,110,15,124,2, + 124,3,107,2,114,28,116,2,124,1,124,2,131,2,125,4, + 110,5,116,3,124,1,124,2,131,2,125,4,124,5,115,42, + 116,4,124,1,124,2,124,4,100,3,141,3,125,5,122,19, + 124,5,124,0,100,2,60,0,124,4,124,0,100,1,60,0, + 124,2,124,0,100,4,60,0,124,3,124,0,100,5,60,0, + 87,0,100,0,83,0,4,0,116,5,121,71,1,0,1,0, + 1,0,89,0,100,0,83,0,119,0,41,6,78,218,10,95, + 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, + 99,95,95,114,81,1,0,0,90,8,95,95,102,105,108,101, + 95,95,90,10,95,95,99,97,99,104,101,100,95,95,41,6, + 218,3,103,101,116,114,151,0,0,0,114,27,1,0,0,114, + 21,1,0,0,114,201,0,0,0,218,9,69,120,99,101,112, + 116,105,111,110,41,6,90,2,110,115,114,128,0,0,0,90, + 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, + 110,97,109,101,114,151,0,0,0,114,198,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,95, + 102,105,120,95,117,112,95,109,111,100,117,108,101,38,6,0, + 0,115,38,0,0,0,10,2,10,1,4,1,4,1,8,1, + 8,1,12,1,10,2,4,1,14,1,2,1,8,1,8,1, + 8,1,14,1,12,1,6,2,2,254,255,128,114,99,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,116, + 0,116,1,160,2,161,0,102,2,125,0,116,3,116,4,102, + 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, + 2,103,3,83,0,41,2,122,95,82,101,116,117,114,110,115, + 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, + 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, + 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, + 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, + 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, + 115,41,46,10,32,32,32,32,78,41,7,114,17,1,0,0, + 114,174,0,0,0,218,18,101,120,116,101,110,115,105,111,110, + 95,115,117,102,102,105,120,101,115,114,21,1,0,0,114,113, + 0,0,0,114,27,1,0,0,114,101,0,0,0,41,3,90, + 10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,117, + 114,99,101,90,8,98,121,116,101,99,111,100,101,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,195,0,0, + 0,61,6,0,0,115,10,0,0,0,12,5,8,1,8,1, + 10,1,255,128,114,195,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, + 0,0,115,8,0,0,0,124,0,97,0,100,0,83,0,114, + 121,0,0,0,41,1,114,146,0,0,0,41,1,218,17,95, + 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 21,95,115,101,116,95,98,111,111,116,115,116,114,97,112,95, + 109,111,100,117,108,101,72,6,0,0,115,4,0,0,0,8, + 2,255,128,114,102,1,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, + 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, + 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, + 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, + 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, + 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, + 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, + 101,110,116,115,46,78,41,10,114,102,1,0,0,114,195,0, + 0,0,114,16,0,0,0,114,69,1,0,0,114,178,0,0, + 0,114,80,1,0,0,114,94,1,0,0,218,9,109,101,116, + 97,95,112,97,116,104,114,197,0,0,0,114,63,1,0,0, + 41,2,114,101,1,0,0,90,17,115,117,112,112,111,114,116, + 101,100,95,108,111,97,100,101,114,115,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,8,95,105,110,115,116, + 97,108,108,77,6,0,0,115,10,0,0,0,8,2,6,1, + 20,1,16,1,255,128,114,104,1,0,0,41,1,114,75,0, + 0,0,41,1,78,41,3,78,78,78,41,2,114,0,0,0, + 0,114,0,0,0,0,41,1,84,41,1,78,41,1,78,41, + 83,114,139,0,0,0,114,146,0,0,0,114,174,0,0,0, + 114,79,0,0,0,114,16,0,0,0,114,88,0,0,0,114, + 171,0,0,0,114,26,0,0,0,114,218,0,0,0,90,2, + 110,116,114,19,0,0,0,114,203,0,0,0,90,5,112,111, + 115,105,120,114,48,0,0,0,218,3,97,108,108,114,51,0, + 0,0,114,52,0,0,0,114,73,0,0,0,114,29,0,0, + 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, + 89,84,69,83,95,75,69,89,114,28,0,0,0,114,30,0, + 0,0,114,22,0,0,0,114,37,0,0,0,114,43,0,0, + 0,114,46,0,0,0,114,54,0,0,0,114,61,0,0,0, + 114,63,0,0,0,114,67,0,0,0,114,68,0,0,0,114, + 71,0,0,0,114,74,0,0,0,114,84,0,0,0,218,4, + 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,173, + 0,0,0,114,35,0,0,0,114,159,0,0,0,114,34,0, + 0,0,114,40,0,0,0,114,251,0,0,0,114,104,0,0, + 0,114,100,0,0,0,114,113,0,0,0,114,197,0,0,0, + 114,100,1,0,0,114,219,0,0,0,114,101,0,0,0,90, + 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, + 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,114,109,0,0,0,114,114,0,0,0,114, + 120,0,0,0,114,124,0,0,0,114,126,0,0,0,114,147, + 0,0,0,114,154,0,0,0,114,163,0,0,0,114,167,0, + 0,0,114,169,0,0,0,114,176,0,0,0,114,181,0,0, + 0,114,182,0,0,0,114,187,0,0,0,218,6,111,98,106, + 101,99,116,114,196,0,0,0,114,201,0,0,0,114,202,0, + 0,0,114,222,0,0,0,114,236,0,0,0,114,254,0,0, + 0,114,21,1,0,0,114,27,1,0,0,114,17,1,0,0, + 114,33,1,0,0,114,59,1,0,0,114,63,1,0,0,114, + 80,1,0,0,114,99,1,0,0,114,195,0,0,0,114,102, + 1,0,0,114,104,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, + 111,100,117,108,101,62,1,0,0,0,115,172,0,0,0,4, + 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, + 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, + 1,10,1,14,1,4,4,4,1,2,1,2,1,4,255,8, + 4,6,16,8,3,8,5,8,5,8,6,8,6,8,12,8, + 10,8,9,8,5,8,7,10,9,10,22,0,127,16,26,12, + 1,4,2,4,1,6,2,4,1,10,1,8,2,6,2,8, + 2,16,2,8,71,8,40,8,19,8,12,8,12,8,31,8, + 17,8,33,8,28,10,24,10,13,10,10,8,11,6,14,4, + 3,2,1,12,255,14,68,14,64,16,30,0,127,14,17,18, + 50,18,45,18,25,14,53,14,63,14,49,0,127,14,26,0, + 127,10,22,8,23,8,11,12,5,255,128, }; From webhook-mailer at python.org Fri Apr 2 17:25:39 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 21:25:39 -0000 Subject: [Python-checkins] bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Message-ID: https://github.com/python/cpython/commit/b2a91e0c9ee18b50cc86b21211c2258520a9f5d0 commit: b2a91e0c9ee18b50cc86b21211c2258520a9f5d0 branch: master author: Ammar Askar committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-02T14:25:31-07:00 summary: bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Changed the inline mentions of the attributes into a proper attribute list like `SystemExit` has. Automerge-Triggered-By: GH:gvanrossum files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 40ccde72d07cc..4dea6701a6bfd 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -402,9 +402,25 @@ The following exceptions are the exceptions that are usually raised. or :func:`eval`, or when reading the initial script or standard input (also interactively). - Instances of this class have attributes :attr:`filename`, :attr:`lineno`, - :attr:`offset` and :attr:`text` for easier access to the details. :func:`str` - of the exception instance returns only the message. + The :func:`str` of the exception instance returns only the error message. + + .. attribute:: filename + + The name of the file the syntax error occurred in. + + .. attribute:: lineno + + Which line number in the file the error occurred in. This is + 1-indexed: the first line in the file has a ``lineno`` of 1. + + .. attribute:: offset + + The column in the line where the error occurred. This is + 1-indexed: the first character in the line has an ``offset`` of 1. + + .. attribute:: text + + The source code text involved in the error. .. exception:: IndentationError From webhook-mailer at python.org Fri Apr 2 18:26:26 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 22:26:26 -0000 Subject: [Python-checkins] bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Message-ID: https://github.com/python/cpython/commit/06653f8d15a8a84ee0f43f739704a9a63c27de54 commit: 06653f8d15a8a84ee0f43f739704a9a63c27de54 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-02T15:26:17-07:00 summary: bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Changed the inline mentions of the attributes into a proper attribute list like `SystemExit` has. Automerge-Triggered-By: GH:gvanrossum (cherry picked from commit b2a91e0c9ee18b50cc86b21211c2258520a9f5d0) Co-authored-by: Ammar Askar files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 52a505e0a0ff8..519862cc09d70 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -397,9 +397,25 @@ The following exceptions are the exceptions that are usually raised. or :func:`eval`, or when reading the initial script or standard input (also interactively). - Instances of this class have attributes :attr:`filename`, :attr:`lineno`, - :attr:`offset` and :attr:`text` for easier access to the details. :func:`str` - of the exception instance returns only the message. + The :func:`str` of the exception instance returns only the error message. + + .. attribute:: filename + + The name of the file the syntax error occurred in. + + .. attribute:: lineno + + Which line number in the file the error occurred in. This is + 1-indexed: the first line in the file has a ``lineno`` of 1. + + .. attribute:: offset + + The column in the line where the error occurred. This is + 1-indexed: the first character in the line has an ``offset`` of 1. + + .. attribute:: text + + The source code text involved in the error. .. exception:: IndentationError From webhook-mailer at python.org Fri Apr 2 18:26:38 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 02 Apr 2021 22:26:38 -0000 Subject: [Python-checkins] bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Message-ID: https://github.com/python/cpython/commit/63c69440c7adb0de1d191a8d3d100b335d5c2f81 commit: 63c69440c7adb0de1d191a8d3d100b335d5c2f81 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-02T15:26:32-07:00 summary: bpo-43705: Document that SyntaxError's offsets are 1-indexed (GH-25153) Changed the inline mentions of the attributes into a proper attribute list like `SystemExit` has. Automerge-Triggered-By: GH:gvanrossum (cherry picked from commit b2a91e0c9ee18b50cc86b21211c2258520a9f5d0) Co-authored-by: Ammar Askar files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index df2cda9d67ad1..28d1ab150c870 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -397,9 +397,25 @@ The following exceptions are the exceptions that are usually raised. or :func:`eval`, or when reading the initial script or standard input (also interactively). - Instances of this class have attributes :attr:`filename`, :attr:`lineno`, - :attr:`offset` and :attr:`text` for easier access to the details. :func:`str` - of the exception instance returns only the message. + The :func:`str` of the exception instance returns only the error message. + + .. attribute:: filename + + The name of the file the syntax error occurred in. + + .. attribute:: lineno + + Which line number in the file the error occurred in. This is + 1-indexed: the first line in the file has a ``lineno`` of 1. + + .. attribute:: offset + + The column in the line where the error occurred. This is + 1-indexed: the first character in the line has an ``offset`` of 1. + + .. attribute:: text + + The source code text involved in the error. .. exception:: IndentationError From webhook-mailer at python.org Sat Apr 3 16:08:16 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 03 Apr 2021 20:08:16 -0000 Subject: [Python-checkins] Add more tests for the descriptor tutorial (GH-25164) Message-ID: https://github.com/python/cpython/commit/e4c8895ee5457b11f52841b79b51f3c3d6373fef commit: e4c8895ee5457b11f52841b79b51f3c3d6373fef branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-03T13:07:52-07:00 summary: Add more tests for the descriptor tutorial (GH-25164) files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 420d9b94306ea..819401ea1385c 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -281,7 +281,9 @@ The new class now logs access to both *name* and *age*: INFO:root:Updating 'name' to 'Catherine C' INFO:root:Updating 'age' to 20 -The two *Person* instances contain only the private names:: +The two *Person* instances contain only the private names: + +.. doctest:: >>> vars(pete) {'_name': 'Peter P', '_age': 10} @@ -710,6 +712,38 @@ perform attribute lookup by way of a helper function: raise return type(obj).__getattr__(obj, name) # __getattr__ +.. doctest:: + :hide: + + + >>> class ClassWithGetAttr: + ... x = 123 + ... def __getattr__(self, attr): + ... return attr.upper() + ... + >>> cw = ClassWithGetAttr() + >>> cw.y = 456 + >>> getattr_hook(cw, 'x') + 123 + >>> getattr_hook(cw, 'y') + 456 + >>> getattr_hook(cw, 'z') + 'Z' + + >>> class ClassWithoutGetAttr: + ... x = 123 + ... + >>> cwo = ClassWithoutGetAttr() + >>> cwo.y = 456 + >>> getattr_hook(cwo, 'x') + 123 + >>> getattr_hook(cwo, 'y') + 456 + >>> getattr_hook(cwo, 'z') + Traceback (most recent call last): + ... + AttributeError: 'ClassWithoutGetAttr' object has no attribute 'z' + So if :meth:`__getattr__` exists, it is called whenever :meth:`__getattribute__` raises :exc:`AttributeError` (either directly or in one of the descriptor calls). @@ -1139,8 +1173,8 @@ If you have ever wondered where *self* comes from in regular methods or where *cls* comes from in class methods, this is it! -Other kinds of methods ----------------------- +Kinds of methods +---------------- Non-data descriptors provide a simple mechanism for variations on the usual patterns of binding functions into methods. @@ -1193,19 +1227,19 @@ example calls are unexciting: class E: @staticmethod def f(x): - print(x) + return x * 10 .. doctest:: >>> E.f(3) - 3 + 30 >>> E().f(3) - 3 + 30 Using the non-data descriptor protocol, a pure Python version of :func:`staticmethod` would look like this: -.. doctest:: +.. testcode:: class StaticMethod: "Emulate PyStaticMethod_Type() in Objects/funcobject.c" @@ -1216,6 +1250,22 @@ Using the non-data descriptor protocol, a pure Python version of def __get__(self, obj, objtype=None): return self.f +.. testcode:: + :hide: + + class E_sim: + @StaticMethod + def f(x): + return x * 10 + +.. doctest:: + :hide: + + >>> E_sim.f(3) + 30 + >>> E_sim().f(3) + 30 + Class methods ------------- From webhook-mailer at python.org Sat Apr 3 16:09:09 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 03 Apr 2021 20:09:09 -0000 Subject: [Python-checkins] Replace broken example code with correct simpler code. (GH-25162) Message-ID: https://github.com/python/cpython/commit/c5354c045c1067549554c35485a12afdcf88a202 commit: c5354c045c1067549554c35485a12afdcf88a202 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-03T13:09:01-07:00 summary: Replace broken example code with correct simpler code. (GH-25162) The open() was missing 'w' to indicate it was in a write-mode. Even then, the open().close() operation was distracting because it is an unusual way to "touch" as file. Using os.remove() instead is simpler and less distracting. files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 819401ea1385c..bf026f4b7e61b 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -115,9 +115,9 @@ different, updated answers each time:: 20 >>> g.size # The games directory has three files 3 - >>> open('games/newfile').close() # Add a fourth file to the directory + >>> os.remove('games/chess') # Delete a game >>> g.size # File count is automatically updated - 4 + 2 Besides showing how descriptors can run computations, this example also reveals the purpose of the parameters to :meth:`__get__`. The *self* From webhook-mailer at python.org Sat Apr 3 16:42:31 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 03 Apr 2021 20:42:31 -0000 Subject: [Python-checkins] Add more tests for the descriptor tutorial (GH-25164) (#25165) Message-ID: https://github.com/python/cpython/commit/f12ae0b31a776c8906c428940f0c1bba48a75a45 commit: f12ae0b31a776c8906c428940f0c1bba48a75a45 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-03T13:42:28-07:00 summary: Add more tests for the descriptor tutorial (GH-25164) (#25165) (cherry picked from commit e4c8895ee5457b11f52841b79b51f3c3d6373fef) Co-authored-by: Raymond Hettinger Co-authored-by: Raymond Hettinger files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index c7035bad4b6fa..0ddf1239ed298 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -281,7 +281,9 @@ The new class now logs access to both *name* and *age*: INFO:root:Updating 'name' to 'Catherine C' INFO:root:Updating 'age' to 20 -The two *Person* instances contain only the private names:: +The two *Person* instances contain only the private names: + +.. doctest:: >>> vars(pete) {'_name': 'Peter P', '_age': 10} @@ -710,6 +712,38 @@ perform attribute lookup by way of a helper function: raise return type(obj).__getattr__(obj, name) # __getattr__ +.. doctest:: + :hide: + + + >>> class ClassWithGetAttr: + ... x = 123 + ... def __getattr__(self, attr): + ... return attr.upper() + ... + >>> cw = ClassWithGetAttr() + >>> cw.y = 456 + >>> getattr_hook(cw, 'x') + 123 + >>> getattr_hook(cw, 'y') + 456 + >>> getattr_hook(cw, 'z') + 'Z' + + >>> class ClassWithoutGetAttr: + ... x = 123 + ... + >>> cwo = ClassWithoutGetAttr() + >>> cwo.y = 456 + >>> getattr_hook(cwo, 'x') + 123 + >>> getattr_hook(cwo, 'y') + 456 + >>> getattr_hook(cwo, 'z') + Traceback (most recent call last): + ... + AttributeError: 'ClassWithoutGetAttr' object has no attribute 'z' + So if :meth:`__getattr__` exists, it is called whenever :meth:`__getattribute__` raises :exc:`AttributeError` (either directly or in one of the descriptor calls). @@ -1129,8 +1163,8 @@ If you have ever wondered where *self* comes from in regular methods or where *cls* comes from in class methods, this is it! -Other kinds of methods ----------------------- +Kinds of methods +---------------- Non-data descriptors provide a simple mechanism for variations on the usual patterns of binding functions into methods. @@ -1183,19 +1217,19 @@ example calls are unexciting: class E: @staticmethod def f(x): - print(x) + return x * 10 .. doctest:: >>> E.f(3) - 3 + 30 >>> E().f(3) - 3 + 30 Using the non-data descriptor protocol, a pure Python version of :func:`staticmethod` would look like this: -.. doctest:: +.. testcode:: class StaticMethod: "Emulate PyStaticMethod_Type() in Objects/funcobject.c" @@ -1206,6 +1240,22 @@ Using the non-data descriptor protocol, a pure Python version of def __get__(self, obj, objtype=None): return self.f +.. testcode:: + :hide: + + class E_sim: + @StaticMethod + def f(x): + return x * 10 + +.. doctest:: + :hide: + + >>> E_sim.f(3) + 30 + >>> E_sim().f(3) + 30 + Class methods ------------- From webhook-mailer at python.org Sat Apr 3 16:42:47 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 03 Apr 2021 20:42:47 -0000 Subject: [Python-checkins] Replace broken example code with correct simpler code. (GH-25162) (GH-25166) Message-ID: https://github.com/python/cpython/commit/cbfa09b70b745c9d7393c03955600f6d1cf019e3 commit: cbfa09b70b745c9d7393c03955600f6d1cf019e3 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-03T13:42:43-07:00 summary: Replace broken example code with correct simpler code. (GH-25162) (GH-25166) files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 0ddf1239ed298..93dd35441f41c 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -115,9 +115,9 @@ different, updated answers each time:: 20 >>> g.size # The games directory has three files 3 - >>> open('games/newfile').close() # Add a fourth file to the directory + >>> os.remove('games/chess') # Delete a game >>> g.size # File count is automatically updated - 4 + 2 Besides showing how descriptors can run computations, this example also reveals the purpose of the parameters to :meth:`__get__`. The *self* From webhook-mailer at python.org Sat Apr 3 18:31:22 2021 From: webhook-mailer at python.org (brettcannon) Date: Sat, 03 Apr 2021 22:31:22 -0000 Subject: [Python-checkins] bpo-43720: Update import-related stdlib deprecation messages to say they will be removed in Python 3.12 (GH-25167) Message-ID: https://github.com/python/cpython/commit/dc6d3e1e4c0c1e4b2210edab8fb4762569dc2936 commit: dc6d3e1e4c0c1e4b2210edab8fb4762569dc2936 branch: master author: Brett Cannon committer: brettcannon date: 2021-04-03T15:31:15-07:00 summary: bpo-43720: Update import-related stdlib deprecation messages to say they will be removed in Python 3.12 (GH-25167) files: A Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst M Lib/imp.py M Lib/importlib/util.py M Lib/pkgutil.py M Lib/test/test_pkgutil.py diff --git a/Lib/imp.py b/Lib/imp.py index 31f8c766381ad..e02aaef344c61 100644 --- a/Lib/imp.py +++ b/Lib/imp.py @@ -28,7 +28,8 @@ import types import warnings -warnings.warn("the imp module is deprecated in favour of importlib; " +warnings.warn("the imp module is deprecated in favour of importlib and slated " + "for removal in Python 3.12; " "see the module's documentation for alternative uses", DeprecationWarning, stacklevel=2) diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py index 98a0fa54dfd87..8623c89840c6a 100644 --- a/Lib/importlib/util.py +++ b/Lib/importlib/util.py @@ -149,7 +149,8 @@ def set_package(fxn): """ @functools.wraps(fxn) def set_package_wrapper(*args, **kwargs): - warnings.warn('The import system now takes care of this automatically.', + warnings.warn('The import system now takes care of this automatically; ' + 'this decorator is slated for removal in Python 3.12', DeprecationWarning, stacklevel=2) module = fxn(*args, **kwargs) if getattr(module, '__package__', None) is None: @@ -168,7 +169,8 @@ def set_loader(fxn): """ @functools.wraps(fxn) def set_loader_wrapper(self, *args, **kwargs): - warnings.warn('The import system now takes care of this automatically.', + warnings.warn('The import system now takes care of this automatically; ' + 'this decorator is slated for removal in Python 3.12', DeprecationWarning, stacklevel=2) module = fxn(self, *args, **kwargs) if getattr(module, '__loader__', None) is None: @@ -195,7 +197,8 @@ def module_for_loader(fxn): the second argument. """ - warnings.warn('The import system now takes care of this automatically.', + warnings.warn('The import system now takes care of this automatically; ' + 'this decorator is slated for removal in Python 3.12', DeprecationWarning, stacklevel=2) @functools.wraps(fxn) def module_for_loader_wrapper(self, fullname, *args, **kwargs): diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 3d7f19f39981d..2c3429856be46 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -204,7 +204,8 @@ class ImpImporter: def __init__(self, path=None): global imp - warnings.warn("This emulation is deprecated, use 'importlib' instead", + warnings.warn("This emulation is deprecated and slated for removal " + "in Python 3.12; use 'importlib' instead", DeprecationWarning) _import_imp() self.path = path @@ -271,7 +272,8 @@ class ImpLoader: code = source = None def __init__(self, fullname, file, filename, etc): - warnings.warn("This emulation is deprecated, use 'importlib' instead", + warnings.warn("This emulation is deprecated and slated for removal in " + "Python 3.12; use 'importlib' instead", DeprecationWarning) _import_imp() self.file = file diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index bf9722a229611..6e3618f6b0f98 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -498,7 +498,8 @@ class ImportlibMigrationTests(unittest.TestCase): def check_deprecated(self): return check_warnings( - ("This emulation is deprecated, use 'importlib' instead", + ("This emulation is deprecated and slated for removal in " + "Python 3.12; use 'importlib' instead", DeprecationWarning)) def test_importer_deprecated(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst b/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst new file mode 100644 index 0000000000000..d71460f010dcc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst @@ -0,0 +1,2 @@ +Document various stdlib deprecations in imp, pkgutil, and importlib.util for removal in Python +3.12. From webhook-mailer at python.org Sat Apr 3 20:01:34 2021 From: webhook-mailer at python.org (methane) Date: Sun, 04 Apr 2021 00:01:34 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25145) Message-ID: https://github.com/python/cpython/commit/35715d1e72b7e15e337087863c75af447199e0fb commit: 35715d1e72b7e15e337087863c75af447199e0fb branch: master author: Inada Naoki committer: methane date: 2021-04-04T09:01:23+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25145) * test_asyncio * test_bz2 * test_math * test_cmath * test_cmd_line * test_cmd_line_script * test_compile * test_contextlib * test_profile * ctypes/test/test_find * test_multiprocessing * test_configparser * test_csv * test_dbm_dumb * test_decimal * test_difflib * os.fdopen() calls io.text_encoding() to emit EncodingWarning for right place. files: M Lib/ctypes/test/test_find.py M Lib/os.py M Lib/test/_test_multiprocessing.py M Lib/test/multibytecodec_support.py M Lib/test/test_asyncio/test_base_events.py M Lib/test/test_asyncio/test_events.py M Lib/test/test_bz2.py M Lib/test/test_cmath.py M Lib/test/test_cmd_line.py M Lib/test/test_cmd_line_script.py M Lib/test/test_compile.py M Lib/test/test_configparser.py M Lib/test/test_contextlib.py M Lib/test/test_csv.py M Lib/test/test_dbm_dumb.py M Lib/test/test_decimal.py M Lib/test/test_difflib.py M Lib/test/test_math.py M Lib/test/test_profile.py diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py index 4a8a3820f3fe1..1ff9d019b138a 100644 --- a/Lib/ctypes/test/test_find.py +++ b/Lib/ctypes/test/test_find.py @@ -90,7 +90,7 @@ def test_find_on_libpath(self): srcname = os.path.join(d, 'dummy.c') libname = 'py_ctypes_test_dummy' dstname = os.path.join(d, 'lib%s.so' % libname) - with open(srcname, 'w') as f: + with open(srcname, 'wb') as f: pass self.assertTrue(os.path.exists(srcname)) # compile the file to a shared library diff --git a/Lib/os.py b/Lib/os.py index 05e9c32c5a711..ea09e8c7e1048 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -1020,11 +1020,13 @@ def __iter__(self): __all__.append("popen") # Supply os.fdopen() -def fdopen(fd, *args, **kwargs): +def fdopen(fd, mode="r", buffering=-1, encoding=None, *args, **kwargs): if not isinstance(fd, int): raise TypeError("invalid fd type (%s, expected integer)" % type(fd)) import io - return io.open(fd, *args, **kwargs) + if "b" not in mode: + encoding = io.text_encoding(encoding) + return io.open(fd, mode, buffering, encoding, *args, **kwargs) # For testing purposes, make sure the function is available when the C diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index fd3b4303f034c..ead92cfa2abfe 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -826,7 +826,7 @@ def test_stderr_flush(self): proc = self.Process(target=self._test_stderr_flush, args=(testfn,)) proc.start() proc.join() - with open(testfn, 'r') as f: + with open(testfn, encoding="utf-8") as f: err = f.read() # The whole traceback was printed self.assertIn("ZeroDivisionError", err) @@ -836,14 +836,14 @@ def test_stderr_flush(self): @classmethod def _test_stderr_flush(cls, testfn): fd = os.open(testfn, os.O_WRONLY | os.O_CREAT | os.O_EXCL) - sys.stderr = open(fd, 'w', closefd=False) + sys.stderr = open(fd, 'w', encoding="utf-8", closefd=False) 1/0 # MARKER @classmethod def _test_sys_exit(cls, reason, testfn): fd = os.open(testfn, os.O_WRONLY | os.O_CREAT | os.O_EXCL) - sys.stderr = open(fd, 'w', closefd=False) + sys.stderr = open(fd, 'w', encoding="utf-8", closefd=False) sys.exit(reason) def test_sys_exit(self): @@ -864,7 +864,7 @@ def test_sys_exit(self): join_process(p) self.assertEqual(p.exitcode, 1) - with open(testfn, 'r') as f: + with open(testfn, encoding="utf-8") as f: content = f.read() self.assertEqual(content.rstrip(), str(reason)) @@ -1118,7 +1118,7 @@ def test_task_done(self): def test_no_import_lock_contention(self): with os_helper.temp_cwd(): module_name = 'imported_by_an_imported_module' - with open(module_name + '.py', 'w') as f: + with open(module_name + '.py', 'w', encoding="utf-8") as f: f.write("""if 1: import multiprocessing diff --git a/Lib/test/multibytecodec_support.py b/Lib/test/multibytecodec_support.py index f76c0153f5ecf..dbf0cc428e3ff 100644 --- a/Lib/test/multibytecodec_support.py +++ b/Lib/test/multibytecodec_support.py @@ -296,7 +296,7 @@ def setUp(self): self.skipTest("Could not retrieve "+self.mapfileurl) def open_mapping_file(self): - return support.open_urlresource(self.mapfileurl) + return support.open_urlresource(self.mapfileurl, encoding="utf-8") def test_mapping_file(self): if self.mapfileurl.endswith('.xml'): diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index e40e7999b64d1..5691d4250aca9 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -2096,7 +2096,7 @@ def test_blocking_socket(self): def test_nonbinary_file(self): sock = self.make_socket() - with open(os_helper.TESTFN, 'r') as f: + with open(os_helper.TESTFN, encoding="utf-8") as f: with self.assertRaisesRegex(ValueError, "binary mode"): self.run_loop(self.loop.sock_sendfile(sock, f)) diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 6523a79b4a634..5511407ba5395 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -1349,7 +1349,7 @@ def test_unclosed_pipe_transport(self): rpipe, wpipe = os.pipe() rpipeobj = io.open(rpipe, 'rb', 1024) - wpipeobj = io.open(wpipe, 'w', 1024) + wpipeobj = io.open(wpipe, 'w', 1024, encoding="utf-8") async def connect(): read_transport, _ = await loop.connect_read_pipe( diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index ccc5e4df83a7a..efed3a859ba21 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -922,14 +922,14 @@ def test_text_modes(self): for mode in ("wt", "xt"): if mode == "xt": unlink(self.filename) - with self.open(self.filename, mode) as f: + with self.open(self.filename, mode, encoding="ascii") as f: f.write(text) with open(self.filename, "rb") as f: file_data = ext_decompress(f.read()).decode("ascii") self.assertEqual(file_data, text_native_eol) - with self.open(self.filename, "rt") as f: + with self.open(self.filename, "rt", encoding="ascii") as f: self.assertEqual(f.read(), text) - with self.open(self.filename, "at") as f: + with self.open(self.filename, "at", encoding="ascii") as f: f.write(text) with open(self.filename, "rb") as f: file_data = ext_decompress(f.read()).decode("ascii") @@ -938,7 +938,8 @@ def test_text_modes(self): def test_x_mode(self): for mode in ("x", "xb", "xt"): unlink(self.filename) - with self.open(self.filename, mode) as f: + encoding = "utf-8" if "t" in mode else None + with self.open(self.filename, mode, encoding=encoding) as f: pass with self.assertRaises(FileExistsError): with self.open(self.filename, mode) as f: @@ -950,7 +951,7 @@ def test_fileobj(self): with self.open(BytesIO(self.DATA), "rb") as f: self.assertEqual(f.read(), self.TEXT) text = self.TEXT.decode("ascii") - with self.open(BytesIO(self.DATA), "rt") as f: + with self.open(BytesIO(self.DATA), "rt", encoding="utf-8") as f: self.assertEqual(f.read(), text) def test_bad_params(self): @@ -989,9 +990,9 @@ def test_encoding_error_handler(self): def test_newline(self): # Test with explicit newline (universal newline mode disabled). text = self.TEXT.decode("ascii") - with self.open(self.filename, "wt", newline="\n") as f: + with self.open(self.filename, "wt", encoding="utf-8", newline="\n") as f: f.write(text) - with self.open(self.filename, "rt", newline="\r") as f: + with self.open(self.filename, "rt", encoding="utf-8", newline="\r") as f: self.assertEqual(f.readlines(), [text]) diff --git a/Lib/test/test_cmath.py b/Lib/test/test_cmath.py index 668f27c8a0827..9bb939356144e 100644 --- a/Lib/test/test_cmath.py +++ b/Lib/test/test_cmath.py @@ -60,7 +60,7 @@ class CMathTests(unittest.TestCase): test_functions.append(lambda x : cmath.log(14.-27j, x)) def setUp(self): - self.test_values = open(test_file) + self.test_values = open(test_file, encoding="utf-8") def tearDown(self): self.test_values.close() diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 25d3eec40c13d..375876768b29f 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -512,7 +512,7 @@ def test_del___main__(self): # the dict whereas the module was destroyed filename = os_helper.TESTFN self.addCleanup(os_helper.unlink, filename) - with open(filename, "w") as script: + with open(filename, "w", encoding="utf-8") as script: print("import sys", file=script) print("del sys.modules['__main__']", file=script) assert_python_ok(filename) @@ -549,9 +549,9 @@ def test_isolatedmode(self): with os_helper.temp_cwd() as tmpdir: fake = os.path.join(tmpdir, "uuid.py") main = os.path.join(tmpdir, "main.py") - with open(fake, "w") as f: + with open(fake, "w", encoding="utf-8") as f: f.write("raise RuntimeError('isolated mode test')\n") - with open(main, "w") as f: + with open(main, "w", encoding="utf-8") as f: f.write("import uuid\n") f.write("print('ok')\n") self.assertRaises(subprocess.CalledProcessError, diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index f10ab40017a33..8f12b1e19bcfc 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -400,7 +400,7 @@ def test_issue8202_dash_c_file_ignored(self): # does not alter the value of sys.path[0] with os_helper.temp_dir() as script_dir: with os_helper.change_cwd(path=script_dir): - with open("-c", "w") as f: + with open("-c", "w", encoding="utf-8") as f: f.write("data") rc, out, err = assert_python_ok('-c', 'import sys; print("sys.path[0]==%r" % sys.path[0])', @@ -416,7 +416,7 @@ def test_issue8202_dash_m_file_ignored(self): with os_helper.temp_dir() as script_dir: script_name = _make_test_script(script_dir, 'other') with os_helper.change_cwd(path=script_dir): - with open("-m", "w") as f: + with open("-m", "w", encoding="utf-8") as f: f.write("data") rc, out, err = assert_python_ok('-m', 'other', *example_args, __isolated=False) @@ -429,7 +429,7 @@ def test_issue20884(self): # will be failed. with os_helper.temp_dir() as script_dir: script_name = os.path.join(script_dir, "issue20884.py") - with open(script_name, "w", newline='\n') as f: + with open(script_name, "w", encoding="latin1", newline='\n') as f: f.write("#coding: iso-8859-1\n") f.write('"""\n') for _ in range(30): diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 591d5bb00b264..c0de3bef5b6c9 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -427,7 +427,7 @@ def test_compile_ast(self): fname = __file__ if fname.lower().endswith('pyc'): fname = fname[:-1] - with open(fname, 'r') as f: + with open(fname, encoding='utf-8') as f: fcontents = f.read() sample_code = [ ['', 'x = 5'], diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index 80a9f179ee2bb..9373a62072ef4 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -714,31 +714,31 @@ def test_read_returns_file_list(self): file1 = support.findfile("cfgparser.1") # check when we pass a mix of readable and non-readable files: cf = self.newconfig() - parsed_files = cf.read([file1, "nonexistent-file"]) + parsed_files = cf.read([file1, "nonexistent-file"], encoding="utf-8") self.assertEqual(parsed_files, [file1]) self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") # check when we pass only a filename: cf = self.newconfig() - parsed_files = cf.read(file1) + parsed_files = cf.read(file1, encoding="utf-8") self.assertEqual(parsed_files, [file1]) self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") # check when we pass only a Path object: cf = self.newconfig() - parsed_files = cf.read(pathlib.Path(file1)) + parsed_files = cf.read(pathlib.Path(file1), encoding="utf-8") self.assertEqual(parsed_files, [file1]) self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") # check when we passed both a filename and a Path object: cf = self.newconfig() - parsed_files = cf.read([pathlib.Path(file1), file1]) + parsed_files = cf.read([pathlib.Path(file1), file1], encoding="utf-8") self.assertEqual(parsed_files, [file1, file1]) self.assertEqual(cf.get("Foo Bar", "foo"), "newbar") # check when we pass only missing files: cf = self.newconfig() - parsed_files = cf.read(["nonexistent-file"]) + parsed_files = cf.read(["nonexistent-file"], encoding="utf-8") self.assertEqual(parsed_files, []) # check when we pass no files: cf = self.newconfig() - parsed_files = cf.read([]) + parsed_files = cf.read([], encoding="utf-8") self.assertEqual(parsed_files, []) def test_read_returns_file_list_with_bytestring_path(self): @@ -747,15 +747,15 @@ def test_read_returns_file_list_with_bytestring_path(self): file1_bytestring = support.findfile("cfgparser.1").encode() # check when passing an existing bytestring path cf = self.newconfig() - parsed_files = cf.read(file1_bytestring) + parsed_files = cf.read(file1_bytestring, encoding="utf-8") self.assertEqual(parsed_files, [file1_bytestring]) # check when passing an non-existing bytestring path cf = self.newconfig() - parsed_files = cf.read(b'nonexistent-file') + parsed_files = cf.read(b'nonexistent-file', encoding="utf-8") self.assertEqual(parsed_files, []) # check when passing both an existing and non-existing bytestring path cf = self.newconfig() - parsed_files = cf.read([file1_bytestring, b'nonexistent-file']) + parsed_files = cf.read([file1_bytestring, b'nonexistent-file'], encoding="utf-8") self.assertEqual(parsed_files, [file1_bytestring]) # shared by subclasses @@ -1064,7 +1064,7 @@ def setUp(self): cf.add_section(s) for j in range(10): cf.set(s, 'lovely_spam{}'.format(j), self.wonderful_spam) - with open(os_helper.TESTFN, 'w') as f: + with open(os_helper.TESTFN, 'w', encoding="utf-8") as f: cf.write(f) def tearDown(self): @@ -1074,7 +1074,7 @@ def test_dominating_multiline_values(self): # We're reading from file because this is where the code changed # during performance updates in Python 3.2 cf_from_file = self.newconfig() - with open(os_helper.TESTFN) as f: + with open(os_helper.TESTFN, encoding="utf-8") as f: cf_from_file.read_file(f) self.assertEqual(cf_from_file.get('section8', 'lovely_spam4'), self.wonderful_spam.replace('\t\n', '\n')) @@ -1473,7 +1473,7 @@ def fromstring(self, string, defaults=None): class FakeFile: def __init__(self): file_path = support.findfile("cfgparser.1") - with open(file_path) as f: + with open(file_path, encoding="utf-8") as f: self.lines = f.readlines() self.lines.reverse() @@ -1500,7 +1500,7 @@ def test_file(self): pass # unfortunately we can't test bytes on this path for file_path in file_paths: parser = configparser.ConfigParser() - with open(file_path) as f: + with open(file_path, encoding="utf-8") as f: parser.read_file(f) self.assertIn("Foo Bar", parser) self.assertIn("foo", parser["Foo Bar"]) diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index 50943c1a17e9c..453ef6c9f0832 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -316,13 +316,13 @@ def testWithOpen(self): tfn = tempfile.mktemp() try: f = None - with open(tfn, "w") as f: + with open(tfn, "w", encoding="utf-8") as f: self.assertFalse(f.closed) f.write("Booh\n") self.assertTrue(f.closed) f = None with self.assertRaises(ZeroDivisionError): - with open(tfn, "r") as f: + with open(tfn, "r", encoding="utf-8") as f: self.assertFalse(f.closed) self.assertEqual(f.read(), "Booh\n") 1 / 0 diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index a98707ce3caed..2411a91110dd4 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -133,7 +133,7 @@ def test_writer_dialect_attrs(self): def _write_test(self, fields, expect, **kwargs): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, **kwargs) writer.writerow(fields) fileobj.seek(0) @@ -141,7 +141,7 @@ def _write_test(self, fields, expect, **kwargs): expect + writer.dialect.lineterminator) def _write_error_test(self, exc, fields, **kwargs): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, **kwargs) with self.assertRaises(exc): writer.writerow(fields) @@ -232,7 +232,7 @@ def write(self, buf): writer = csv.writer(BrokenFile()) self.assertRaises(OSError, writer.writerows, [['a']]) - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) self.assertRaises(TypeError, writer.writerows, None) writer.writerows([['a', 'b'], ['c', 'd']]) @@ -240,26 +240,26 @@ def write(self, buf): self.assertEqual(fileobj.read(), "a,b\r\nc,d\r\n") def test_writerows_with_none(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) writer.writerows([['a', None], [None, 'd']]) fileobj.seek(0) self.assertEqual(fileobj.read(), "a,\r\n,d\r\n") - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) writer.writerows([[None], ['a']]) fileobj.seek(0) self.assertEqual(fileobj.read(), '""\r\na\r\n') - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) writer.writerows([['a'], [None]]) fileobj.seek(0) self.assertEqual(fileobj.read(), 'a\r\n""\r\n') def test_writerows_errors(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) self.assertRaises(TypeError, writer.writerows, None) self.assertRaises(OSError, writer.writerows, BadIterable()) @@ -270,7 +270,7 @@ def test_writerows_errors(self): def test_writerows_legacy_strings(self): import _testcapi c = _testcapi.unicode_legacy_string('a') - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) writer.writerows([[c]]) fileobj.seek(0) @@ -367,7 +367,7 @@ def test_read_linenum(self): self.assertEqual(r.line_num, 3) def test_roundtrip_quoteed_newlines(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj) rows = [['a\nb','b'],['c','x\r\nd']] writer.writerows(rows) @@ -376,7 +376,7 @@ def test_roundtrip_quoteed_newlines(self): self.assertEqual(row, rows[i]) def test_roundtrip_escaped_unquoted_newlines(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj,quoting=csv.QUOTE_NONE,escapechar="\\") rows = [['a\nb','b'],['c','x\r\nd']] writer.writerows(rows) @@ -432,7 +432,7 @@ class space(csv.excel): quoting = csv.QUOTE_NONE escapechar = "\\" - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("abc def\nc1ccccc1 benzene\n") fileobj.seek(0) reader = csv.reader(fileobj, dialect=space()) @@ -493,7 +493,7 @@ def test_pickle(self): class TestCsvBase(unittest.TestCase): def readerAssertEqual(self, input, expected_result): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: fileobj.write(input) fileobj.seek(0) reader = csv.reader(fileobj, dialect = self.dialect) @@ -501,7 +501,7 @@ def readerAssertEqual(self, input, expected_result): self.assertEqual(fields, expected_result) def writerAssertEqual(self, input, expected_result): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, dialect = self.dialect) writer.writerows(input) fileobj.seek(0) @@ -643,13 +643,13 @@ class TestDictFields(unittest.TestCase): ### "long" means the row is longer than the number of fieldnames ### "short" means there are fewer elements in the row than fieldnames def test_writeheader_return_value(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"]) writeheader_return_value = writer.writeheader() self.assertEqual(writeheader_return_value, 10) def test_write_simple_dict(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"]) writer.writeheader() fileobj.seek(0) @@ -674,7 +674,7 @@ def test_write_no_fields(self): self.assertRaises(TypeError, csv.DictWriter, fileobj) def test_write_fields_not_in_fieldnames(self): - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"]) # Of special note is the non-string key (issue 19449) with self.assertRaises(ValueError) as cx: @@ -704,7 +704,7 @@ def test_write_field_not_in_field_names_ignore(self): self.assertEqual(fileobj.getvalue(), "1,2\r\n") def test_read_dict_fields(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, @@ -712,7 +712,7 @@ def test_read_dict_fields(self): self.assertEqual(next(reader), {"f1": '1', "f2": '2', "f3": 'abc'}) def test_read_dict_no_fieldnames(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("f1,f2,f3\r\n1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj) @@ -722,7 +722,7 @@ def test_read_dict_no_fieldnames(self): # Two test cases to make sure existing ways of implicitly setting # fieldnames continue to work. Both arise from discussion in issue3436. def test_read_dict_fieldnames_from_file(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("f1,f2,f3\r\n1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, @@ -732,7 +732,7 @@ def test_read_dict_fieldnames_from_file(self): def test_read_dict_fieldnames_chain(self): import itertools - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("f1,f2,f3\r\n1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj) @@ -742,7 +742,7 @@ def test_read_dict_fieldnames_chain(self): self.assertEqual(row, {"f1": '1', "f2": '2', "f3": 'abc'}) def test_read_long(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("1,2,abc,4,5,6\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, @@ -751,7 +751,7 @@ def test_read_long(self): None: ["abc", "4", "5", "6"]}) def test_read_long_with_rest(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("1,2,abc,4,5,6\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, @@ -760,7 +760,7 @@ def test_read_long_with_rest(self): "_rest": ["abc", "4", "5", "6"]}) def test_read_long_with_rest_no_fieldnames(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("f1,f2\r\n1,2,abc,4,5,6\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, restkey="_rest") @@ -769,7 +769,7 @@ def test_read_long_with_rest_no_fieldnames(self): "_rest": ["abc", "4", "5", "6"]}) def test_read_short(self): - with TemporaryFile("w+") as fileobj: + with TemporaryFile("w+", encoding="utf-8") as fileobj: fileobj.write("1,2,abc,4,5,6\r\n1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj, @@ -818,7 +818,7 @@ def test_int_write(self): contents = [(20-i) for i in range(20)] a = array.array('i', contents) - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, dialect="excel") writer.writerow(a) expected = ",".join([str(i) for i in a])+"\r\n" @@ -829,7 +829,7 @@ def test_double_write(self): import array contents = [(20-i)*0.1 for i in range(20)] a = array.array('d', contents) - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, dialect="excel") writer.writerow(a) expected = ",".join([str(i) for i in a])+"\r\n" @@ -840,7 +840,7 @@ def test_float_write(self): import array contents = [(20-i)*0.1 for i in range(20)] a = array.array('f', contents) - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, dialect="excel") writer.writerow(a) expected = ",".join([str(i) for i in a])+"\r\n" @@ -851,7 +851,7 @@ def test_char_write(self): import array, string a = array.array('u', string.ascii_letters) - with TemporaryFile("w+", newline='') as fileobj: + with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: writer = csv.writer(fileobj, dialect="excel") writer.writerow(a) expected = ",".join(a)+"\r\n" diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py index 071cb845013b5..ddaffb4757bc4 100644 --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -232,7 +232,7 @@ def test_create_new(self): self.assertEqual(f.keys(), []) def test_eval(self): - with open(_fname + '.dir', 'w') as stream: + with open(_fname + '.dir', 'w', encoding="utf-8") as stream: stream.write("str(print('Hacked!')), 0\n") with support.captured_stdout() as stdout: with self.assertRaises(ValueError): diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 6aa4a9b31a5f2..179a9ea7042fb 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -289,7 +289,7 @@ def eval_file(self, file): global skip_expected if skip_expected: raise unittest.SkipTest - with open(file) as f: + with open(file, encoding="utf-8") as f: for line in f: line = line.replace('\r\n', '').replace('\n', '') #print line diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py index 42ac1fdcd81cd..9a24e00f64b4a 100644 --- a/Lib/test/test_difflib.py +++ b/Lib/test/test_difflib.py @@ -241,7 +241,7 @@ def test_html_diff(self): #with open('test_difflib_expect.html','w') as fp: # fp.write(actual) - with open(findfile('test_difflib_expect.html')) as fp: + with open(findfile('test_difflib_expect.html'), encoding="utf-8") as fp: self.assertEqual(actual, fp.read()) def test_recursion_limit(self): diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index a6f6483f55d89..3d128749bec40 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -130,7 +130,7 @@ def parse_mtestfile(fname): id fn arg -> expected [flag]* """ - with open(fname) as fp: + with open(fname, encoding="utf-8") as fp: for line in fp: # strip comments, and skip blank lines if '--' in line: @@ -153,7 +153,7 @@ def parse_testfile(fname): Empty lines or lines starting with -- are ignored yields id, fn, arg_real, arg_imag, exp_real, exp_imag """ - with open(fname) as fp: + with open(fname, encoding="utf-8") as fp: for line in fp: # skip comment lines and blank lines if line.startswith('--') or not line.strip(): diff --git a/Lib/test/test_profile.py b/Lib/test/test_profile.py index 1bdf30acbb54b..7de7d52ff8365 100644 --- a/Lib/test/test_profile.py +++ b/Lib/test/test_profile.py @@ -115,7 +115,7 @@ def test_run_profile_as_module(self): def test_output_file_when_changing_directory(self): with temp_dir() as tmpdir, change_cwd(tmpdir): os.mkdir('dest') - with open('demo.py', 'w') as f: + with open('demo.py', 'w', encoding="utf-8") as f: f.write('import os; os.chdir("dest")') assert_python_ok( From webhook-mailer at python.org Sat Apr 3 22:54:55 2021 From: webhook-mailer at python.org (rhettinger) Date: Sun, 04 Apr 2021 02:54:55 -0000 Subject: [Python-checkins] bpo-43325: Add FAQ entry for identity tests (GH-25168) Message-ID: https://github.com/python/cpython/commit/f8775e4f72240faba3947eea8efdd83ee56ae1fd commit: f8775e4f72240faba3947eea8efdd83ee56ae1fd branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-03T19:54:49-07:00 summary: bpo-43325: Add FAQ entry for identity tests (GH-25168) files: M Doc/faq/programming.rst M Doc/tutorial/datastructures.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index b75c60a17a269..93ffd36d0e1b4 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1701,6 +1701,93 @@ to the object: 13891296 +When can I rely on identity tests with the *is* operator? +--------------------------------------------------------- + +The ``is`` operator tests for object identity. The test ``a is b`` is +equivalent to ``id(a) == id(b)``. + +The most important property of an identity test is that an object is always +identical to itself, ``a is a`` always returns ``True``. Identity tests are +usually faster than equality tests. And unlike equality tests, identity tests +are guaranteed to return a boolean ``True`` or ``False``. + +However, identity tests can *only* be substituted for equality tests when +object identity is assured. Generally, there are three circumstances where +identity is guaranteed: + +1) Assignments create new names but do not change object identity. After the +assignment ``new = old``, it is guaranteed that ``new is old``. + +2) Putting an object in a container that stores object references does not +change object identity. After the list assignment ``s[0] = x``, it is +guaranteed that ``s[0] is x``. + +3) If an object is a singleton, it means that only one instance of that object +can exist. After the assignments ``a = None`` and ``b = None``, it is +guaranteed that ``a is b`` because ``None`` is a singleton. + +In most other circumstances, identity tests are inadvisable and equality tests +are preferred. In particular, identity tests should not be used to check +constants such as :class:`int` and :class:`str` which aren't guaranteed to be +singletons:: + + >>> a = 1000 + >>> b = 500 + >>> c = b + 500 + >>> a is c + False + + >>> a = 'Python' + >>> b = 'Py' + >>> c = b + 'thon' + >>> a is c + False + +Likewise, new instances of mutable containers are never identical:: + + >>> a = [] + >>> b = [] + >>> a is b + False + +In the standard library code, you will see several common patterns for +correctly using identity tests: + +1) As recommended by :pep:`8`, an identity test is the preferred way to check +for ``None``. This reads like plain English in code and avoids confusion with +other objects that may have boolean values that evaluate to false. + +2) Detecting optional arguments can be tricky when ``None`` is a valid input +value. In those situations, you can create an singleton sentinel object +guaranteed to be distinct from other objects. For example, here is how +to implement a method that behaves like :meth:`dict.pop`:: + + _sentinel = object() + + def pop(self, key, default=_sentinel): + if key in self: + value = self[key] + del self[key] + return value + if default is _sentinel: + raise KeyError(key) + return default + +3) Container implementations sometimes need to augment equality tests with +identity tests. This prevents the code from being confused by objects such as +``float('NaN')`` that are not equal to themselves. + +For example, here is the implementation of +:meth:`collections.abc.Sequence.__contains__`:: + + def __contains__(self, value): + for v in self: + if v is value or v == value: + return True + return False + + Modules ======= diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst index 5c6b65f05e1e5..e42b380db3d23 100644 --- a/Doc/tutorial/datastructures.rst +++ b/Doc/tutorial/datastructures.rst @@ -661,9 +661,8 @@ operators, not just comparisons. The comparison operators ``in`` and ``not in`` check whether a value occurs (does not occur) in a sequence. The operators ``is`` and ``is not`` compare -whether two objects are really the same object; this only matters for mutable -objects like lists. All comparison operators have the same priority, which is -lower than that of all numerical operators. +whether two objects are really the same object. All comparison operators have +the same priority, which is lower than that of all numerical operators. Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is less than ``b`` and moreover ``b`` equals ``c``. From webhook-mailer at python.org Sat Apr 3 23:06:00 2021 From: webhook-mailer at python.org (rhettinger) Date: Sun, 04 Apr 2021 03:06:00 -0000 Subject: [Python-checkins] bpo-43325: Add FAQ entry for identity tests (GH-25168) (GH-25178) Message-ID: https://github.com/python/cpython/commit/de0b2b133011953b02536cc78f2499d5d55224f8 commit: de0b2b133011953b02536cc78f2499d5d55224f8 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-03T20:05:50-07:00 summary: bpo-43325: Add FAQ entry for identity tests (GH-25168) (GH-25178) files: M Doc/faq/programming.rst M Doc/tutorial/datastructures.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 8df62c5604597..fd59f68034776 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1702,6 +1702,93 @@ to the object: 13891296 +When can I rely on identity tests with the *is* operator? +--------------------------------------------------------- + +The ``is`` operator tests for object identity. The test ``a is b`` is +equivalent to ``id(a) == id(b)``. + +The most important property of an identity test is that an object is always +identical to itself, ``a is a`` always returns ``True``. Identity tests are +usually faster than equality tests. And unlike equality tests, identity tests +are guaranteed to return a boolean ``True`` or ``False``. + +However, identity tests can *only* be substituted for equality tests when +object identity is assured. Generally, there are three circumstances where +identity is guaranteed: + +1) Assignments create new names but do not change object identity. After the +assignment ``new = old``, it is guaranteed that ``new is old``. + +2) Putting an object in a container that stores object references does not +change object identity. After the list assignment ``s[0] = x``, it is +guaranteed that ``s[0] is x``. + +3) If an object is a singleton, it means that only one instance of that object +can exist. After the assignments ``a = None`` and ``b = None``, it is +guaranteed that ``a is b`` because ``None`` is a singleton. + +In most other circumstances, identity tests are inadvisable and equality tests +are preferred. In particular, identity tests should not be used to check +constants such as :class:`int` and :class:`str` which aren't guaranteed to be +singletons:: + + >>> a = 1000 + >>> b = 500 + >>> c = b + 500 + >>> a is c + False + + >>> a = 'Python' + >>> b = 'Py' + >>> c = b + 'thon' + >>> a is c + False + +Likewise, new instances of mutable containers are never identical:: + + >>> a = [] + >>> b = [] + >>> a is b + False + +In the standard library code, you will see several common patterns for +correctly using identity tests: + +1) As recommended by :pep:`8`, an identity test is the preferred way to check +for ``None``. This reads like plain English in code and avoids confusion with +other objects that may have boolean values that evaluate to false. + +2) Detecting optional arguments can be tricky when ``None`` is a valid input +value. In those situations, you can create an singleton sentinel object +guaranteed to be distinct from other objects. For example, here is how +to implement a method that behaves like :meth:`dict.pop`:: + + _sentinel = object() + + def pop(self, key, default=_sentinel): + if key in self: + value = self[key] + del self[key] + return value + if default is _sentinel: + raise KeyError(key) + return default + +3) Container implementations sometimes need to augment equality tests with +identity tests. This prevents the code from being confused by objects such as +``float('NaN')`` that are not equal to themselves. + +For example, here is the implementation of +:meth:`collections.abc.Sequence.__contains__`:: + + def __contains__(self, value): + for v in self: + if v is value or v == value: + return True + return False + + Modules ======= diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst index 5c6b65f05e1e5..e42b380db3d23 100644 --- a/Doc/tutorial/datastructures.rst +++ b/Doc/tutorial/datastructures.rst @@ -661,9 +661,8 @@ operators, not just comparisons. The comparison operators ``in`` and ``not in`` check whether a value occurs (does not occur) in a sequence. The operators ``is`` and ``is not`` compare -whether two objects are really the same object; this only matters for mutable -objects like lists. All comparison operators have the same priority, which is -lower than that of all numerical operators. +whether two objects are really the same object. All comparison operators have +the same priority, which is lower than that of all numerical operators. Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is less than ``b`` and moreover ``b`` equals ``c``. From webhook-mailer at python.org Sun Apr 4 04:01:35 2021 From: webhook-mailer at python.org (methane) Date: Sun, 04 Apr 2021 08:01:35 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25171) Message-ID: https://github.com/python/cpython/commit/3caea9adda7f79ab5d4c5a1905ca62b44e0b3b7b commit: 3caea9adda7f79ab5d4c5a1905ca62b44e0b3b7b branch: master author: Inada Naoki committer: methane date: 2021-04-04T17:01:10+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25171) * Fix test_float * Fix _osx_support * Fix test_fstring * Fix test_gc * Fix test_gzip * Fix test_hashlib * Fix unrelated whitespace issue Co-authored-by: Ned Deily files: M Lib/_osx_support.py M Lib/test/test_float.py M Lib/test/test_fstring.py M Lib/test/test_gc.py M Lib/test/test_gzip.py M Lib/test/test_hashlib.py diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index 37975fe8a3eef..72f4819c29092 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -96,7 +96,7 @@ def _get_system_version(): if _SYSTEM_VERSION is None: _SYSTEM_VERSION = '' try: - f = open('/System/Library/CoreServices/SystemVersion.plist') + f = open('/System/Library/CoreServices/SystemVersion.plist', encoding="utf-8") except OSError: # We're on a plain darwin box, fall back to the default # behaviour. @@ -156,9 +156,9 @@ def _default_sysroot(cc): if _cache_default_sysroot is not None: return _cache_default_sysroot - + contents = _read_output('%s -c -E -v - "): in_incdirs = True diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index 99c81f0b72a5a..ff4f3876be5cd 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -729,7 +729,7 @@ def test_format(self): @support.requires_IEEE_754 def test_format_testfile(self): - with open(format_testfile) as testfile: + with open(format_testfile, encoding="utf-8") as testfile: for line in testfile: if line.startswith('--'): continue @@ -769,7 +769,7 @@ def test_issue35560(self): class ReprTestCase(unittest.TestCase): def test_repr(self): with open(os.path.join(os.path.split(__file__)[0], - 'floating_points.txt')) as floats_file: + 'floating_points.txt'), encoding="utf-8") as floats_file: for line in floats_file: line = line.strip() if not line or line.startswith('#'): diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 79e123f4b8cec..296cb05285c48 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -1110,7 +1110,7 @@ def test_filename_in_syntaxerror(self): # see issue 38964 with temp_cwd() as cwd: file_path = os.path.join(cwd, 't.py') - with open(file_path, 'w') as f: + with open(file_path, 'w', encoding="utf-8") as f: f.write('f"{a b}"') # This generates a SyntaxError _, _, stderr = assert_python_failure(file_path, PYTHONIOENCODING='ascii') diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index ba66737015906..ee4fe49a57f2a 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -750,7 +750,7 @@ def __del__(self): a.link = a raise SystemExit(0)""" self.addCleanup(unlink, TESTFN) - with open(TESTFN, 'w') as script: + with open(TESTFN, 'w', encoding="utf-8") as script: script.write(code) rc, out, err = assert_python_ok(TESTFN) self.assertEqual(out.strip(), b'__del__ called') diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index 1dcfa2b628a1c..446b61ab439ff 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -660,14 +660,14 @@ def test_implicit_binary_modes(self): def test_text_modes(self): uncompressed = data1.decode("ascii") * 50 uncompressed_raw = uncompressed.replace("\n", os.linesep) - with gzip.open(self.filename, "wt") as f: + with gzip.open(self.filename, "wt", encoding="ascii") as f: f.write(uncompressed) with open(self.filename, "rb") as f: file_data = gzip.decompress(f.read()).decode("ascii") self.assertEqual(file_data, uncompressed_raw) - with gzip.open(self.filename, "rt") as f: + with gzip.open(self.filename, "rt", encoding="ascii") as f: self.assertEqual(f.read(), uncompressed) - with gzip.open(self.filename, "at") as f: + with gzip.open(self.filename, "at", encoding="ascii") as f: f.write(uncompressed) with open(self.filename, "rb") as f: file_data = gzip.decompress(f.read()).decode("ascii") @@ -681,7 +681,7 @@ def test_fileobj(self): self.assertEqual(f.read(), uncompressed_bytes) with gzip.open(io.BytesIO(compressed), "rb") as f: self.assertEqual(f.read(), uncompressed_bytes) - with gzip.open(io.BytesIO(compressed), "rt") as f: + with gzip.open(io.BytesIO(compressed), "rt", encoding="ascii") as f: self.assertEqual(f.read(), uncompressed_str) def test_bad_params(self): @@ -722,9 +722,9 @@ def test_encoding_error_handler(self): def test_newline(self): # Test with explicit newline (universal newline mode disabled). uncompressed = data1.decode("ascii") * 50 - with gzip.open(self.filename, "wt", newline="\n") as f: + with gzip.open(self.filename, "wt", encoding="ascii", newline="\n") as f: f.write(uncompressed) - with gzip.open(self.filename, "rt", newline="\r") as f: + with gzip.open(self.filename, "rt", encoding="ascii", newline="\r") as f: self.assertEqual(f.readlines(), [uncompressed]) diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index f50a4559269d7..0e06fdc9885dc 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -82,7 +82,7 @@ def hexstr(s): def read_vectors(hash_name): url = URL.format(hash_name) try: - testdata = support.open_urlresource(url) + testdata = support.open_urlresource(url, encoding="utf-8") except (OSError, HTTPException): raise unittest.SkipTest("Could not retrieve {}".format(url)) with testdata: From webhook-mailer at python.org Sun Apr 4 04:33:32 2021 From: webhook-mailer at python.org (markshannon) Date: Sun, 04 Apr 2021 08:33:32 -0000 Subject: [Python-checkins] bpo-27129: Update magic numbers and bootstrapping for GH-25069 (GH-25172) Message-ID: https://github.com/python/cpython/commit/c368ce74d2c9bcbf1ec320466819c2d4768252f7 commit: c368ce74d2c9bcbf1ec320466819c2d4768252f7 branch: master author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: markshannon date: 2021-04-04T09:33:22+01:00 summary: bpo-27129: Update magic numbers and bootstrapping for GH-25069 (GH-25172) * Update magic numbers and bootstrapping for GH-25069 * add blurb Co-authored-by: Terry Jan Reedy files: A Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst M Lib/importlib/_bootstrap_external.py M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 358c650916b0b..77bd0e092bd2a 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -324,7 +324,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3434).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3435).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst new file mode 100644 index 0000000000000..dc47bd08039cf --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst @@ -0,0 +1 @@ +Update CPython bytecode magic number. diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 465ec0cd6dd0e..89f4d6fc254a6 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -315,7 +315,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,115,38,0,0,0,16,5,6,1,22,1,4,255,2,2, 14,3,24,1,16,128,18,1,12,1,2,1,12,1,2,3, 12,254,2,1,2,1,2,254,2,253,255,128,114,84,0,0, - 0,105,106,13,0,0,114,45,0,0,0,114,33,0,0,0, + 0,105,107,13,0,0,114,45,0,0,0,114,33,0,0,0, 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122, 4,46,112,121,119,122,4,46,112,121,99,41,1,218,12,111, From webhook-mailer at python.org Sun Apr 4 07:02:51 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 04 Apr 2021 11:02:51 -0000 Subject: [Python-checkins] [3.9] bpo-43710: Rollback the 3.9 bpo-42500 fix, it broke the ABI in 3.9.3 (#25179) Message-ID: https://github.com/python/cpython/commit/c7b0feca25fc68ec3e0884b82e5f45a4da011e8e commit: c7b0feca25fc68ec3e0884b82e5f45a4da011e8e branch: 3.9 author: Gregory P. Smith committer: ambv date: 2021-04-04T13:02:29+02:00 summary: [3.9] bpo-43710: Rollback the 3.9 bpo-42500 fix, it broke the ABI in 3.9.3 (#25179) This reverts commit 8b795ab5541d8a4e69be4137dfdc207714270b77. It changed the PyThreadState structure size, breaking the ABI in 3.9.3. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst M Include/cpython/pystate.h M Include/internal/pycore_ceval.h M Lib/test/test_exceptions.py M Lib/test/test_sys.py M Python/ceval.c M Python/errors.c M Python/pystate.c M Python/sysmodule.c diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index 29f6bf5a662dc..f292da1d3c6c5 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -58,7 +58,8 @@ struct _ts { /* Borrowed reference to the current frame (it can be NULL) */ PyFrameObject *frame; int recursion_depth; - int recursion_headroom; /* Allow 50 more calls to handle any errors. */ + char overflowed; /* The stack has overflowed. Allow 50 more calls + to handle the runtime error. */ char recursion_critical; /* The current calls must not cause a stack overflow. */ int stackcheck_counter; diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index e7ace9bd01c2a..18c8f027af16e 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -90,8 +90,24 @@ static inline int _Py_EnterRecursiveCall_inline(const char *where) { #define Py_EnterRecursiveCall(where) _Py_EnterRecursiveCall_inline(where) +/* Compute the "lower-water mark" for a recursion limit. When + * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, + * the overflowed flag is reset to 0. */ +static inline int _Py_RecursionLimitLowerWaterMark(int limit) { + if (limit > 200) { + return (limit - 50); + } + else { + return (3 * (limit >> 2)); + } +} + static inline void _Py_LeaveRecursiveCall(PyThreadState *tstate) { tstate->recursion_depth--; + int limit = tstate->interp->ceval.recursion_limit; + if (tstate->recursion_depth < _Py_RecursionLimitLowerWaterMark(limit)) { + tstate->overflowed = 0; + } } static inline void _Py_LeaveRecursiveCall_inline(void) { diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 9c09bdc317dac..8d125b57ad6d5 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1043,7 +1043,7 @@ def gen(): # tstate->recursion_depth is equal to (recursion_limit - 1) # and is equal to recursion_limit when _gen_throw() calls # PyErr_NormalizeException(). - recurse(setrecursionlimit(depth + 2) - depth) + recurse(setrecursionlimit(depth + 2) - depth - 1) finally: sys.setrecursionlimit(recursionlimit) print('Done.') @@ -1073,54 +1073,6 @@ def test_recursion_normalizing_infinite_exception(self): b'while normalizing an exception', err) self.assertIn(b'Done.', out) - - def test_recursion_in_except_handler(self): - - def set_relative_recursion_limit(n): - depth = 1 - while True: - try: - sys.setrecursionlimit(depth) - except RecursionError: - depth += 1 - else: - break - sys.setrecursionlimit(depth+n) - - def recurse_in_except(): - try: - 1/0 - except: - recurse_in_except() - - def recurse_after_except(): - try: - 1/0 - except: - pass - recurse_after_except() - - def recurse_in_body_and_except(): - try: - recurse_in_body_and_except() - except: - recurse_in_body_and_except() - - recursionlimit = sys.getrecursionlimit() - try: - set_relative_recursion_limit(10) - for func in (recurse_in_except, recurse_after_except, recurse_in_body_and_except): - with self.subTest(func=func): - try: - func() - except RecursionError: - pass - else: - self.fail("Should have raised a RecursionError") - finally: - sys.setrecursionlimit(recursionlimit) - - @cpython_only def test_recursion_normalizing_with_no_memory(self): # Issue #30697. Test that in the abort that occurs when there is no @@ -1157,7 +1109,7 @@ def raiseMemError(): except MemoryError as e: tb = e.__traceback__ else: - self.fail("Should have raised a MemoryError") + self.fail("Should have raises a MemoryError") return traceback.format_tb(tb) tb1 = raiseMemError() diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index fce6b98299f78..ed9b1770ab55f 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -219,7 +219,7 @@ def test_recursionlimit_recovery(self): def f(): f() try: - for depth in (50, 75, 100, 250, 1000): + for depth in (10, 25, 50, 75, 100, 250, 1000): try: sys.setrecursionlimit(depth) except RecursionError: @@ -229,17 +229,17 @@ def f(): # Issue #5392: test stack overflow after hitting recursion # limit twice - with self.assertRaises(RecursionError): - f() - with self.assertRaises(RecursionError): - f() + self.assertRaises(RecursionError, f) + self.assertRaises(RecursionError, f) finally: sys.setrecursionlimit(oldlimit) @test.support.cpython_only def test_setrecursionlimit_recursion_depth(self): # Issue #25274: Setting a low recursion limit must be blocked if the - # current recursion depth is already higher than limit. + # current recursion depth is already higher than the "lower-water + # mark". Otherwise, it may not be possible anymore to + # reset the overflowed flag to 0. from _testinternalcapi import get_recursion_depth @@ -260,10 +260,42 @@ def set_recursion_limit_at_depth(depth, limit): sys.setrecursionlimit(1000) for limit in (10, 25, 50, 75, 100, 150, 200): - set_recursion_limit_at_depth(limit, limit) + # formula extracted from _Py_RecursionLimitLowerWaterMark() + if limit > 200: + depth = limit - 50 + else: + depth = limit * 3 // 4 + set_recursion_limit_at_depth(depth, limit) finally: sys.setrecursionlimit(oldlimit) + # The error message is specific to CPython + @test.support.cpython_only + def test_recursionlimit_fatalerror(self): + # A fatal error occurs if a second recursion limit is hit when recovering + # from a first one. + code = textwrap.dedent(""" + import sys + + def f(): + try: + f() + except RecursionError: + f() + + sys.setrecursionlimit(%d) + f()""") + with test.support.SuppressCrashReport(): + for i in (50, 1000): + sub = subprocess.Popen([sys.executable, '-c', code % i], + stderr=subprocess.PIPE) + err = sub.communicate()[1] + self.assertTrue(sub.returncode, sub.returncode) + self.assertIn( + b"Fatal Python error: _Py_CheckRecursiveCall: " + b"Cannot recover from stack overflow", + err) + def test_getwindowsversion(self): # Raise SkipTest if sys doesn't have getwindowsversion attribute test.support.get_attribute(sys, "getwindowsversion") diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst new file mode 100644 index 0000000000000..cc32efc543924 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst @@ -0,0 +1,4 @@ +Reverted the fix for https://bugs.python.org/issue42500 as it changed the +PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release +(visible on 32-bit platforms using binaries compiled using an earlier +version of Python 3.9.x headers). diff --git a/Python/ceval.c b/Python/ceval.c index b7176dc0f6b8a..91e879e804204 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -793,22 +793,23 @@ _Py_CheckRecursiveCall(PyThreadState *tstate, const char *where) _Py_CheckRecursionLimit = recursion_limit; } #endif - if (tstate->recursion_headroom) { + if (tstate->recursion_critical) + /* Somebody asked that we don't check for recursion. */ + return 0; + if (tstate->overflowed) { if (tstate->recursion_depth > recursion_limit + 50) { /* Overflowing while handling an overflow. Give up. */ Py_FatalError("Cannot recover from stack overflow."); } + return 0; } - else { - if (tstate->recursion_depth > recursion_limit) { - tstate->recursion_headroom++; - _PyErr_Format(tstate, PyExc_RecursionError, - "maximum recursion depth exceeded%s", - where); - tstate->recursion_headroom--; - --tstate->recursion_depth; - return -1; - } + if (tstate->recursion_depth > recursion_limit) { + --tstate->recursion_depth; + tstate->overflowed = 1; + _PyErr_Format(tstate, PyExc_RecursionError, + "maximum recursion depth exceeded%s", + where); + return -1; } return 0; } diff --git a/Python/errors.c b/Python/errors.c index d8c2d8b9236ed..87af39d527a51 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -290,14 +290,12 @@ _PyErr_NormalizeException(PyThreadState *tstate, PyObject **exc, PyObject **val, PyObject **tb) { int recursion_depth = 0; - tstate->recursion_headroom++; PyObject *type, *value, *initial_tb; restart: type = *exc; if (type == NULL) { /* There was no exception, so nothing to do. */ - tstate->recursion_headroom--; return; } @@ -349,7 +347,6 @@ _PyErr_NormalizeException(PyThreadState *tstate, PyObject **exc, } *exc = type; *val = value; - tstate->recursion_headroom--; return; error: diff --git a/Python/pystate.c b/Python/pystate.c index 71aac6f695d6e..9beefa8e20c44 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -576,7 +576,7 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->frame = NULL; tstate->recursion_depth = 0; - tstate->recursion_headroom = 0; + tstate->overflowed = 0; tstate->recursion_critical = 0; tstate->stackcheck_counter = 0; tstate->tracing = 0; diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 4c7f7b67fa837..3e4115fe8e1f9 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1160,6 +1160,7 @@ static PyObject * sys_setrecursionlimit_impl(PyObject *module, int new_limit) /*[clinic end generated code: output=35e1c64754800ace input=b0f7a23393924af3]*/ { + int mark; PyThreadState *tstate = _PyThreadState_GET(); if (new_limit < 1) { @@ -1177,7 +1178,8 @@ sys_setrecursionlimit_impl(PyObject *module, int new_limit) Reject too low new limit if the current recursion depth is higher than the new low-water mark. Otherwise it may not be possible anymore to reset the overflowed flag to 0. */ - if (tstate->recursion_depth >= new_limit) { + mark = _Py_RecursionLimitLowerWaterMark(new_limit); + if (tstate->recursion_depth >= mark) { _PyErr_Format(tstate, PyExc_RecursionError, "cannot set the recursion limit to %i at " "the recursion depth %i: the limit is too low", From webhook-mailer at python.org Sun Apr 4 11:05:00 2021 From: webhook-mailer at python.org (pablogsal) Date: Sun, 04 Apr 2021 15:05:00 -0000 Subject: [Python-checkins] bpo-24160: Fix test_pdb refleaks failure (GH-25182) Message-ID: https://github.com/python/cpython/commit/aadd4e10fda87b64ea527667238503da326a06e7 commit: aadd4e10fda87b64ea527667238503da326a06e7 branch: master author: Irit Katriel committer: pablogsal date: 2021-04-04T16:04:53+01:00 summary: bpo-24160: Fix test_pdb refleaks failure (GH-25182) files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 98e2b937d1339..fb3941780b721 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -335,7 +335,7 @@ def test_pdb_breakpoints_preserved_across_interactive_sessions(): ... 'continue', ... ]): ... pdb.run('print()') - > (1)() + > (1)()... (Pdb) import test.test_pdb (Pdb) break test.test_pdb.do_something Breakpoint 1 at ...test_pdb.py:... @@ -355,7 +355,7 @@ def test_pdb_breakpoints_preserved_across_interactive_sessions(): ... 'continue', ... ]): ... pdb.run('print()') - > (1)() + > (1)()... (Pdb) break Num Type Disp Enb Where 1 breakpoint keep yes at ...test_pdb.py:... @@ -378,7 +378,7 @@ def test_pdb_breakpoints_preserved_across_interactive_sessions(): ... 'continue', ... ]): ... pdb.run('print()') - > (1)() + > (1)()... (Pdb) break Num Type Disp Enb Where 2 breakpoint keep yes at ...test_pdb.py:... From webhook-mailer at python.org Sun Apr 4 11:14:56 2021 From: webhook-mailer at python.org (gvanrossum) Date: Sun, 04 Apr 2021 15:14:56 -0000 Subject: [Python-checkins] bpo-41370: Add note about ForwardRefs and PEP585 generic types in docs (#25183) Message-ID: https://github.com/python/cpython/commit/2b5913b4ee5852a28ca1509478f5582beb3aff7b commit: 2b5913b4ee5852a28ca1509478f5582beb3aff7b branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-04T08:14:44-07:00 summary: bpo-41370: Add note about ForwardRefs and PEP585 generic types in docs (#25183) files: M Doc/library/typing.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 9696fd4ef99e6..f6d1ccb1c5b3d 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1948,10 +1948,15 @@ Introspection helpers .. class:: ForwardRef A class used for internal typing representation of string forward references. - For example, ``list["SomeClass"]`` is implicitly transformed into - ``list[ForwardRef("SomeClass")]``. This class should not be instantiated by + For example, ``List["SomeClass"]`` is implicitly transformed into + ``List[ForwardRef("SomeClass")]``. This class should not be instantiated by a user, but may be used by introspection tools. + .. note:: + :pep:`585` generic types such as ``list["SomeClass"]`` will not be + implicitly transformed into ``list[ForwardRef("SomeClass")]`` and thus + will not automatically resolve to ``list[SomeClass]``. + .. versionadded:: 3.7.4 Constant From webhook-mailer at python.org Sun Apr 4 11:36:33 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 04 Apr 2021 15:36:33 -0000 Subject: [Python-checkins] [3.9] bpo-41370: Add note about ForwardRefs and PEP585 generic types in docs (GH-25183) (GH-25184) Message-ID: https://github.com/python/cpython/commit/d56bcf915b8d5a6afe4555cb6813c8210824e751 commit: d56bcf915b8d5a6afe4555cb6813c8210824e751 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-04T08:36:21-07:00 summary: [3.9] bpo-41370: Add note about ForwardRefs and PEP585 generic types in docs (GH-25183) (GH-25184) (cherry picked from commit 2b5913b4ee5852a28ca1509478f5582beb3aff7b) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> Automerge-Triggered-By: GH:gvanrossum files: M Doc/library/typing.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 688564f1d24f5..b136da00a070a 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1710,10 +1710,15 @@ Introspection helpers .. class:: ForwardRef A class used for internal typing representation of string forward references. - For example, ``list["SomeClass"]`` is implicitly transformed into - ``list[ForwardRef("SomeClass")]``. This class should not be instantiated by + For example, ``List["SomeClass"]`` is implicitly transformed into + ``List[ForwardRef("SomeClass")]``. This class should not be instantiated by a user, but may be used by introspection tools. + .. note:: + :pep:`585` generic types such as ``list["SomeClass"]`` will not be + implicitly transformed into ``list[ForwardRef("SomeClass")]`` and thus + will not automatically resolve to ``list[SomeClass]``. + .. versionadded:: 3.7.4 Constant From webhook-mailer at python.org Sun Apr 4 14:39:57 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 04 Apr 2021 18:39:57 -0000 Subject: [Python-checkins] Python 3.9.4 Message-ID: https://github.com/python/cpython/commit/1f2e3088f3c097b5bde69bbd63dfcd0852d31984 commit: 1f2e3088f3c097b5bde69bbd63dfcd0852d31984 branch: 3.9 author: ?ukasz Langa committer: ambv date: 2021-04-04T14:56:53+02:00 summary: Python 3.9.4 files: A Misc/NEWS.d/3.9.4.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst D Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst M Include/patchlevel.h M Lib/pydoc_data/topics.py M README.rst diff --git a/Include/patchlevel.h b/Include/patchlevel.h index e4dc226cbcd79..cf76d87430765 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 9 -#define PY_MICRO_VERSION 3 +#define PY_MICRO_VERSION 4 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.9.3+" +#define PY_VERSION "3.9.4" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index eb5b8936c06ad..e3b6f14e4f2af 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Fri Apr 2 11:48:03 2021 +# Autogenerated by Sphinx on Sun Apr 4 14:53:49 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' diff --git a/Misc/NEWS.d/3.9.4.rst b/Misc/NEWS.d/3.9.4.rst new file mode 100644 index 0000000000000..15c2829187543 --- /dev/null +++ b/Misc/NEWS.d/3.9.4.rst @@ -0,0 +1,21 @@ +.. bpo: 43710 +.. date: 2021-04-03-21-12-15 +.. nonce: _Mj01v +.. release date: 2021-04-04 +.. section: Core and Builtins + +Reverted the fix for https://bugs.python.org/issue42500 as it changed the +PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release +(visible on 32-bit platforms using binaries compiled using an earlier +version of Python 3.9.x headers). + +.. + +.. bpo: 26053 +.. date: 2020-09-01-10-12-13 +.. nonce: hXikw_ +.. section: Library + +Fixed bug where the :mod:`pdb` interactive run command echoed the args from +the shell command line, even if those have been overridden at the pdb +prompt. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst deleted file mode 100644 index cc32efc543924..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-21-12-15.bpo-43710._Mj01v.rst +++ /dev/null @@ -1,4 +0,0 @@ -Reverted the fix for https://bugs.python.org/issue42500 as it changed the -PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release -(visible on 32-bit platforms using binaries compiled using an earlier -version of Python 3.9.x headers). diff --git a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst deleted file mode 100644 index e8720ac82ffb1..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed bug where the :mod:`pdb` interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. diff --git a/README.rst b/README.rst index ae7f264ef4f5f..f62e3b3664fad 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.9.3 +This is Python version 3.9.4 ============================ .. image:: https://travis-ci.org/python/cpython.svg?branch=3.9 From webhook-mailer at python.org Sun Apr 4 23:30:21 2021 From: webhook-mailer at python.org (methane) Date: Mon, 05 Apr 2021 03:30:21 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix test_email (GH-25158) Message-ID: https://github.com/python/cpython/commit/de522a89e42a35da9275169b113460c3581e32d7 commit: de522a89e42a35da9275169b113460c3581e32d7 branch: master author: Inada Naoki committer: methane date: 2021-04-05T12:30:12+09:00 summary: bpo-43651: PEP 597: Fix test_email (GH-25158) files: M Lib/test/test_email/__init__.py M Lib/test/test_email/test_email.py diff --git a/Lib/test/test_email/__init__.py b/Lib/test/test_email/__init__.py index 888751e9e617f..5d708e6e97efe 100644 --- a/Lib/test/test_email/__init__.py +++ b/Lib/test/test_email/__init__.py @@ -38,7 +38,7 @@ def __init__(self, *args, **kw): ndiffAssertEqual = unittest.TestCase.assertEqual def _msgobj(self, filename): - with openfile(filename) as fp: + with openfile(filename, encoding="utf-8") as fp: return email.message_from_file(fp, policy=self.policy) def _str_msg(self, string, message=None, policy=None): diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 720a63b4e48ff..eed60142b19e3 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -214,7 +214,7 @@ def test_make_boundary(self): def test_message_rfc822_only(self): # Issue 7970: message/rfc822 not in multipart parsed by # HeaderParser caused an exception when flattened. - with openfile('msg_46.txt') as fp: + with openfile('msg_46.txt', encoding="utf-8") as fp: msgdata = fp.read() parser = HeaderParser() msg = parser.parsestr(msgdata) @@ -225,7 +225,7 @@ def test_message_rfc822_only(self): def test_byte_message_rfc822_only(self): # Make sure new bytes header parser also passes this. - with openfile('msg_46.txt') as fp: + with openfile('msg_46.txt', encoding="utf-8") as fp: msgdata = fp.read().encode('ascii') parser = email.parser.BytesHeaderParser() msg = parser.parsebytes(msgdata) @@ -274,7 +274,7 @@ def test_get_payload_n_raises_on_non_multipart(self): def test_decoded_generator(self): eq = self.assertEqual msg = self._msgobj('msg_07.txt') - with openfile('msg_17.txt') as fp: + with openfile('msg_17.txt', encoding="utf-8") as fp: text = fp.read() s = StringIO() g = DecodedGenerator(s) @@ -295,7 +295,7 @@ def test__contains__(self): def test_as_string(self): msg = self._msgobj('msg_01.txt') - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: text = fp.read() self.assertEqual(text, str(msg)) fullrepr = msg.as_string(unixfrom=True) @@ -349,7 +349,7 @@ def test_nonascii_as_string_without_content_type_and_cte(self): def test_as_bytes(self): msg = self._msgobj('msg_01.txt') - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: data = fp.read().encode('ascii') self.assertEqual(data, bytes(msg)) fullrepr = msg.as_bytes(unixfrom=True) @@ -2436,7 +2436,7 @@ def test_multiline_header(self): # Test the MIMEMessage class class TestMIMEMessage(TestEmailBase): def setUp(self): - with openfile('msg_11.txt') as fp: + with openfile('msg_11.txt', encoding="utf-8") as fp: self._text = fp.read() def test_type_error(self): @@ -2555,7 +2555,7 @@ def test_dsn(self): def test_epilogue(self): eq = self.ndiffAssertEqual - with openfile('msg_21.txt') as fp: + with openfile('msg_21.txt', encoding="utf-8") as fp: text = fp.read() msg = Message() msg['From'] = 'aperson at dom.ain' @@ -2610,7 +2610,7 @@ def test_no_nl_preamble(self): def test_default_type(self): eq = self.assertEqual - with openfile('msg_30.txt') as fp: + with openfile('msg_30.txt', encoding="utf-8") as fp: msg = email.message_from_file(fp) container1 = msg.get_payload(0) eq(container1.get_default_type(), 'message/rfc822') @@ -2627,7 +2627,7 @@ def test_default_type(self): def test_default_type_with_explicit_container_type(self): eq = self.assertEqual - with openfile('msg_28.txt') as fp: + with openfile('msg_28.txt', encoding="utf-8") as fp: msg = email.message_from_file(fp) container1 = msg.get_payload(0) eq(container1.get_default_type(), 'message/rfc822') @@ -2753,7 +2753,7 @@ class TestIdempotent(TestEmailBase): linesep = '\n' def _msgobj(self, filename): - with openfile(filename) as fp: + with openfile(filename, encoding="utf-8") as fp: data = fp.read() msg = email.message_from_string(data) return msg, data @@ -2909,7 +2909,7 @@ def test_parser(self): # Test various other bits of the package's functionality class TestMiscellaneous(TestEmailBase): def test_message_from_string(self): - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: text = fp.read() msg = email.message_from_string(text) s = StringIO() @@ -2920,7 +2920,7 @@ def test_message_from_string(self): self.assertEqual(text, s.getvalue()) def test_message_from_file(self): - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: text = fp.read() fp.seek(0) msg = email.message_from_file(fp) @@ -2932,7 +2932,7 @@ def test_message_from_file(self): self.assertEqual(text, s.getvalue()) def test_message_from_string_with_class(self): - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: text = fp.read() # Create a subclass @@ -2942,7 +2942,7 @@ class MyMessage(Message): msg = email.message_from_string(text, MyMessage) self.assertIsInstance(msg, MyMessage) # Try something more complicated - with openfile('msg_02.txt') as fp: + with openfile('msg_02.txt', encoding="utf-8") as fp: text = fp.read() msg = email.message_from_string(text, MyMessage) for subpart in msg.walk(): @@ -2953,11 +2953,11 @@ def test_message_from_file_with_class(self): class MyMessage(Message): pass - with openfile('msg_01.txt') as fp: + with openfile('msg_01.txt', encoding="utf-8") as fp: msg = email.message_from_file(fp, MyMessage) self.assertIsInstance(msg, MyMessage) # Try something more complicated - with openfile('msg_02.txt') as fp: + with openfile('msg_02.txt', encoding="utf-8") as fp: msg = email.message_from_file(fp, MyMessage) for subpart in msg.walk(): self.assertIsInstance(subpart, MyMessage) @@ -3386,7 +3386,7 @@ def test_make_msgid_default_domain(self): def test_Generator_linend(self): # Issue 14645. - with openfile('msg_26.txt', newline='\n') as f: + with openfile('msg_26.txt', encoding="utf-8", newline='\n') as f: msgtxt = f.read() msgtxt_nl = msgtxt.replace('\r\n', '\n') msg = email.message_from_string(msgtxt) @@ -3397,7 +3397,7 @@ def test_Generator_linend(self): def test_BytesGenerator_linend(self): # Issue 14645. - with openfile('msg_26.txt', newline='\n') as f: + with openfile('msg_26.txt', encoding="utf-8", newline='\n') as f: msgtxt = f.read() msgtxt_nl = msgtxt.replace('\r\n', '\n') msg = email.message_from_string(msgtxt_nl) @@ -3456,7 +3456,7 @@ def test_body_line_iterator(self): it = iterators.body_line_iterator(msg) lines = list(it) eq(len(lines), 43) - with openfile('msg_19.txt') as fp: + with openfile('msg_19.txt', encoding="utf-8") as fp: neq(EMPTYSTRING.join(lines), fp.read()) def test_typed_subpart_iterator(self): @@ -3597,7 +3597,7 @@ class TestParsers(TestEmailBase): def test_header_parser(self): eq = self.assertEqual # Parse only the headers of a complex multipart MIME document - with openfile('msg_02.txt') as fp: + with openfile('msg_02.txt', encoding="utf-8") as fp: msg = HeaderParser().parse(fp) eq(msg['from'], 'ppp-request at zzz.org') eq(msg['to'], 'ppp at zzz.org') @@ -3631,12 +3631,12 @@ def test_bytes_parser_on_exception_does_not_close_file(self): self.assertFalse(fp.closed) def test_parser_does_not_close_file(self): - with openfile('msg_02.txt', 'r') as fp: + with openfile('msg_02.txt', encoding="utf-8") as fp: email.parser.Parser().parse(fp) self.assertFalse(fp.closed) def test_parser_on_exception_does_not_close_file(self): - with openfile('msg_15.txt', 'r') as fp: + with openfile('msg_15.txt', encoding="utf-8") as fp: parser = email.parser.Parser self.assertRaises(email.errors.StartBoundaryNotFoundDefect, parser(policy=email.policy.strict).parse, fp) @@ -3680,7 +3680,7 @@ def test_whitespace_continuation_last_header(self): def test_crlf_separation(self): eq = self.assertEqual - with openfile('msg_26.txt', newline='\n') as fp: + with openfile('msg_26.txt', encoding="utf-8", newline='\n') as fp: msg = Parser().parse(fp) eq(len(msg.get_payload()), 2) part1 = msg.get_payload(0) @@ -3691,7 +3691,7 @@ def test_crlf_separation(self): def test_crlf_flatten(self): # Using newline='\n' preserves the crlfs in this input file. - with openfile('msg_26.txt', newline='\n') as fp: + with openfile('msg_26.txt', encoding="utf-8", newline='\n') as fp: text = fp.read() msg = email.message_from_string(text) s = StringIO() @@ -3704,7 +3704,7 @@ def test_crlf_flatten(self): def test_multipart_digest_with_extra_mime_headers(self): eq = self.assertEqual neq = self.ndiffAssertEqual - with openfile('msg_28.txt') as fp: + with openfile('msg_28.txt', encoding="utf-8") as fp: msg = email.message_from_file(fp) # Structure is: # multipart/digest @@ -5447,7 +5447,7 @@ def test_should_not_hang_on_invalid_ew_messages(self): class TestSigned(TestEmailBase): def _msg_and_obj(self, filename): - with openfile(filename) as fp: + with openfile(filename, encoding="utf-8") as fp: original = fp.read() msg = email.message_from_string(original) return original, msg From webhook-mailer at python.org Sun Apr 4 23:32:42 2021 From: webhook-mailer at python.org (methane) Date: Mon, 05 Apr 2021 03:32:42 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in test_filecmp (GH-25159) Message-ID: https://github.com/python/cpython/commit/ee952b5c7355cb64179ca9bb77b13e7738132d3d commit: ee952b5c7355cb64179ca9bb77b13e7738132d3d branch: master author: Inada Naoki committer: methane date: 2021-04-05T12:32:35+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in test_filecmp (GH-25159) files: M Lib/test/test_filecmp.py diff --git a/Lib/test/test_filecmp.py b/Lib/test/test_filecmp.py index fa4f67b6eb5f9..64ba5a0e18169 100644 --- a/Lib/test/test_filecmp.py +++ b/Lib/test/test_filecmp.py @@ -15,10 +15,10 @@ def setUp(self): self.name_diff = os_helper.TESTFN + '-diff' data = 'Contents of file go here.\n' for name in [self.name, self.name_same, self.name_diff]: - with open(name, 'w') as output: + with open(name, 'w', encoding="utf-8") as output: output.write(data) - with open(self.name_diff, 'a+') as output: + with open(self.name_diff, 'a+', encoding="utf-8") as output: output.write('An extra line.\n') self.dir = tempfile.gettempdir() @@ -72,10 +72,10 @@ def setUp(self): fn = 'FiLe' # Verify case-insensitive comparison else: fn = 'file' - with open(os.path.join(dir, fn), 'w') as output: + with open(os.path.join(dir, fn), 'w', encoding="utf-8") as output: output.write(data) - with open(os.path.join(self.dir_diff, 'file2'), 'w') as output: + with open(os.path.join(self.dir_diff, 'file2'), 'w', encoding="utf-8") as output: output.write('An extra file.\n') def tearDown(self): @@ -103,7 +103,7 @@ def test_cmpfiles(self): "Comparing directory to same fails") # Add different file2 - with open(os.path.join(self.dir, 'file2'), 'w') as output: + with open(os.path.join(self.dir, 'file2'), 'w', encoding="utf-8") as output: output.write('Different contents.\n') self.assertFalse(filecmp.cmpfiles(self.dir, self.dir_same, @@ -188,7 +188,7 @@ def test_dircmp(self): self._assert_report(d.report, expected_report) # Add different file2 - with open(os.path.join(self.dir_diff, 'file2'), 'w') as output: + with open(os.path.join(self.dir_diff, 'file2'), 'w', encoding="utf-8") as output: output.write('Different contents.\n') d = filecmp.dircmp(self.dir, self.dir_diff) self.assertEqual(d.same_files, ['file']) From webhook-mailer at python.org Mon Apr 5 00:11:38 2021 From: webhook-mailer at python.org (methane) Date: Mon, 05 Apr 2021 04:11:38 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25181) Message-ID: https://github.com/python/cpython/commit/c8e5eb904e12010d2302364e1037c24a30f5e241 commit: c8e5eb904e12010d2302364e1037c24a30f5e241 branch: master author: Inada Naoki committer: methane date: 2021-04-05T13:11:23+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25181) * Fix test_shutil * Fix test_imp * Fix test_import * Fix test_importlib files: M Lib/test/test_imp.py M Lib/test/test_import/__init__.py M Lib/test/test_importlib/fixtures.py M Lib/test/test_importlib/source/test_file_loader.py M Lib/test/test_importlib/source/test_finder.py M Lib/test/test_importlib/test_api.py M Lib/test/test_importlib/test_files.py M Lib/test/test_importlib/test_main.py M Lib/test/test_importlib/test_pkg_import.py M Lib/test/test_importlib/util.py M Lib/test/test_shutil.py diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index 4781d89a29574..5abe28ef62c84 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -102,7 +102,7 @@ def test_issue3594(self): temp_mod_name = 'test_imp_helper' sys.path.insert(0, '.') try: - with open(temp_mod_name + '.py', 'w') as file: + with open(temp_mod_name + '.py', 'w', encoding="latin-1") as file: file.write("# coding: cp1252\nu = 'test.test_imp'\n") file, filename, info = imp.find_module(temp_mod_name) file.close() @@ -157,7 +157,7 @@ def test_issue5604(self): # if the curdir is not in sys.path the test fails when run with # ./python ./Lib/test/regrtest.py test_imp sys.path.insert(0, os.curdir) - with open(temp_mod_name + '.py', 'w') as file: + with open(temp_mod_name + '.py', 'w', encoding="utf-8") as file: file.write('a = 1\n') file, filename, info = imp.find_module(temp_mod_name) with file: @@ -185,7 +185,7 @@ def test_issue5604(self): if not os.path.exists(test_package_name): os.mkdir(test_package_name) - with open(init_file_name, 'w') as file: + with open(init_file_name, 'w', encoding="utf-8") as file: file.write('b = 2\n') with warnings.catch_warnings(): warnings.simplefilter('ignore') @@ -310,7 +310,7 @@ def test_bug7732(self): def test_multiple_calls_to_get_data(self): # Issue #18755: make sure multiple calls to get_data() can succeed. loader = imp._LoadSourceCompatibility('imp', imp.__file__, - open(imp.__file__)) + open(imp.__file__, encoding="utf-8")) loader.get_data(imp.__file__) # File should be closed loader.get_data(imp.__file__) # Will need to create a newly opened file diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 6fd3983a20f68..dd832a1f6a763 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -117,7 +117,7 @@ def test_from_import_missing_attr_path_is_canonical(self): def test_from_import_star_invalid_type(self): import re with _ready_to_import() as (name, path): - with open(path, 'w') as f: + with open(path, 'w', encoding='utf-8') as f: f.write("__all__ = [b'invalid_type']") globals = {} with self.assertRaisesRegex( @@ -126,7 +126,7 @@ def test_from_import_star_invalid_type(self): exec(f"from {name} import *", globals) self.assertNotIn(b"invalid_type", globals) with _ready_to_import() as (name, path): - with open(path, 'w') as f: + with open(path, 'w', encoding='utf-8') as f: f.write("globals()[b'invalid_type'] = object()") globals = {} with self.assertRaisesRegex( @@ -155,7 +155,7 @@ def test_with_extension(ext): else: pyc = TESTFN + ".pyc" - with open(source, "w") as f: + with open(source, "w", encoding='utf-8') as f: print("# This tests Python's ability to import a", ext, "file.", file=f) a = random.randrange(1000) @@ -195,7 +195,7 @@ def test_module_with_large_stack(self, module='longlist'): filename = module + '.py' # Create a file with a list of 65000 elements. - with open(filename, 'w') as f: + with open(filename, 'w', encoding='utf-8') as f: f.write('d = [\n') for i in range(65000): f.write('"",\n') @@ -232,7 +232,7 @@ def test_module_with_large_stack(self, module='longlist'): def test_failing_import_sticks(self): source = TESTFN + ".py" - with open(source, "w") as f: + with open(source, "w", encoding='utf-8') as f: print("a = 1/0", file=f) # New in 2.4, we shouldn't be able to import that no matter how often @@ -281,7 +281,7 @@ def test_issue31286(self): def test_failing_reload(self): # A failing reload should leave the module object in sys.modules. source = TESTFN + os.extsep + "py" - with open(source, "w") as f: + with open(source, "w", encoding='utf-8') as f: f.write("a = 1\nb=2\n") sys.path.insert(0, os.curdir) @@ -298,7 +298,7 @@ def test_failing_reload(self): remove_files(TESTFN) # Now damage the module. - with open(source, "w") as f: + with open(source, "w", encoding='utf-8') as f: f.write("a = 10\nb=20//0\n") self.assertRaises(ZeroDivisionError, importlib.reload, mod) @@ -320,7 +320,7 @@ def test_failing_reload(self): def test_file_to_source(self): # check if __file__ points to the source file where available source = TESTFN + ".py" - with open(source, "w") as f: + with open(source, "w", encoding='utf-8') as f: f.write("test = None\n") sys.path.insert(0, os.curdir) @@ -369,7 +369,7 @@ def test_timestamp_overflow(self): try: source = TESTFN + ".py" compiled = importlib.util.cache_from_source(source) - with open(source, 'w') as f: + with open(source, 'w', encoding='utf-8') as f: pass try: os.utime(source, (2 ** 33 - 5, 2 ** 33 - 5)) @@ -574,7 +574,7 @@ def test_pyc_always_writable(self): # with later updates, see issue #6074 for details with _ready_to_import() as (name, path): # Write a Python file, make it read-only and import it - with open(path, 'w') as f: + with open(path, 'w', encoding='utf-8') as f: f.write("x = 'original'\n") # Tweak the mtime of the source to ensure pyc gets updated later s = os.stat(path) @@ -584,7 +584,7 @@ def test_pyc_always_writable(self): self.assertEqual(m.x, 'original') # Change the file and then reimport it os.chmod(path, 0o600) - with open(path, 'w') as f: + with open(path, 'w', encoding='utf-8') as f: f.write("x = 'rewritten'\n") unload(name) importlib.invalidate_caches() @@ -623,7 +623,7 @@ def setUp(self): self.sys_path = sys.path[:] self.orig_module = sys.modules.pop(self.module_name, None) os.mkdir(self.dir_name) - with open(self.file_name, "w") as f: + with open(self.file_name, "w", encoding='utf-8') as f: f.write(self.module_source) sys.path.insert(0, self.dir_name) importlib.invalidate_caches() @@ -704,7 +704,8 @@ def tearDown(self): # Regression test for http://bugs.python.org/issue1293. def test_trailing_slash(self): - with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + with open(os.path.join(self.path, 'test_trailing_slash.py'), + 'w', encoding='utf-8') as f: f.write("testdata = 'test_trailing_slash'") sys.path.append(self.path+'/') mod = __import__("test_trailing_slash") @@ -842,7 +843,7 @@ def _clean(self): def setUp(self): self.source = TESTFN + '.py' self._clean() - with open(self.source, 'w') as fp: + with open(self.source, 'w', encoding='utf-8') as fp: print('# This is a test file written by test_import.py', file=fp) sys.path.insert(0, os.curdir) importlib.invalidate_caches() @@ -941,9 +942,9 @@ def cleanup(): os.mkdir('pep3147') self.addCleanup(cleanup) # Touch the __init__.py - with open(os.path.join('pep3147', '__init__.py'), 'w'): + with open(os.path.join('pep3147', '__init__.py'), 'wb'): pass - with open(os.path.join('pep3147', 'foo.py'), 'w'): + with open(os.path.join('pep3147', 'foo.py'), 'wb'): pass importlib.invalidate_caches() m = __import__('pep3147.foo') @@ -964,9 +965,9 @@ def cleanup(): os.mkdir('pep3147') self.addCleanup(cleanup) # Touch the __init__.py - with open(os.path.join('pep3147', '__init__.py'), 'w'): + with open(os.path.join('pep3147', '__init__.py'), 'wb'): pass - with open(os.path.join('pep3147', 'foo.py'), 'w'): + with open(os.path.join('pep3147', 'foo.py'), 'wb'): pass importlib.invalidate_caches() m = __import__('pep3147.foo') @@ -986,7 +987,7 @@ def test_recompute_pyc_same_second(self): # source size is enough to trigger recomputation of the pyc file. __import__(TESTFN) unload(TESTFN) - with open(self.source, 'a') as fp: + with open(self.source, 'a', encoding='utf-8') as fp: print("x = 5", file=fp) m = __import__(TESTFN) self.assertEqual(m.x, 5) @@ -1118,7 +1119,7 @@ def tearDown(self): def create_module(self, mod, contents, ext=".py"): fname = os.path.join(TESTFN, mod + ext) - with open(fname, "w") as f: + with open(fname, "w", encoding='utf-8') as f: f.write(contents) self.addCleanup(unload, mod) importlib.invalidate_caches() @@ -1195,10 +1196,10 @@ def _setup_broken_package(self, parent, child): os.mkdir(pkg_path) # Touch the __init__.py init_path = os.path.join(pkg_path, '__init__.py') - with open(init_path, 'w') as f: + with open(init_path, 'w', encoding='utf-8') as f: f.write(parent) bar_path = os.path.join(pkg_path, 'bar.py') - with open(bar_path, 'w') as f: + with open(bar_path, 'w', encoding='utf-8') as f: f.write(child) importlib.invalidate_caches() return init_path, bar_path diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 429313e9efb98..b50afda0f8f8f 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -250,7 +250,7 @@ def build_files(file_defs, prefix=pathlib.Path()): with full_name.open('wb') as f: f.write(contents) else: - with full_name.open('w') as f: + with full_name.open('w', encoding='utf-8') as f: f.write(DALS(contents)) diff --git a/Lib/test/test_importlib/source/test_file_loader.py b/Lib/test/test_importlib/source/test_file_loader.py index cbd1533b67664..1065ac55fce3f 100644 --- a/Lib/test/test_importlib/source/test_file_loader.py +++ b/Lib/test/test_importlib/source/test_file_loader.py @@ -124,7 +124,7 @@ def test_module_reuse(self): module = loader.load_module('_temp') module_id = id(module) module_dict_id = id(module.__dict__) - with open(mapping['_temp'], 'w') as file: + with open(mapping['_temp'], 'w', encoding='utf-8') as file: file.write("testing_var = 42\n") with warnings.catch_warnings(): warnings.simplefilter('ignore', DeprecationWarning) @@ -145,7 +145,7 @@ def test_state_after_failure(self): orig_module = types.ModuleType(name) for attr in attributes: setattr(orig_module, attr, value) - with open(mapping[name], 'w') as file: + with open(mapping[name], 'w', encoding='utf-8') as file: file.write('+++ bad syntax +++') loader = self.machinery.SourceFileLoader('_temp', mapping['_temp']) with self.assertRaises(SyntaxError): @@ -162,7 +162,7 @@ def test_state_after_failure(self): # [syntax error] def test_bad_syntax(self): with util.create_modules('_temp') as mapping: - with open(mapping['_temp'], 'w') as file: + with open(mapping['_temp'], 'w', encoding='utf-8') as file: file.write('=') loader = self.machinery.SourceFileLoader('_temp', mapping['_temp']) with self.assertRaises(SyntaxError): @@ -175,7 +175,7 @@ def test_file_from_empty_string_dir(self): # Loading a module found from an empty string entry on sys.path should # not only work, but keep all attributes relative. file_path = '_temp.py' - with open(file_path, 'w') as file: + with open(file_path, 'w', encoding='utf-8') as file: file.write("# test file for importlib") try: with util.uncache('_temp'): @@ -199,7 +199,7 @@ def test_timestamp_overflow(self): with util.create_modules('_temp') as mapping: source = mapping['_temp'] compiled = self.util.cache_from_source(source) - with open(source, 'w') as f: + with open(source, 'w', encoding='utf-8') as f: f.write("x = 5") try: os.utime(source, (2 ** 33 - 5, 2 ** 33 - 5)) diff --git a/Lib/test/test_importlib/source/test_finder.py b/Lib/test/test_importlib/source/test_finder.py index e9207deedc75c..80e930cc6a1f2 100644 --- a/Lib/test/test_importlib/source/test_finder.py +++ b/Lib/test/test_importlib/source/test_finder.py @@ -127,7 +127,7 @@ def test_empty_string_for_dir(self): # The empty string from sys.path means to search in the cwd. finder = self.machinery.FileFinder('', (self.machinery.SourceFileLoader, self.machinery.SOURCE_SUFFIXES)) - with open('mod.py', 'w') as file: + with open('mod.py', 'w', encoding='utf-8') as file: file.write("# test file for importlib") try: loader = self._find(finder, 'mod', loader_only=True) diff --git a/Lib/test/test_importlib/test_api.py b/Lib/test/test_importlib/test_api.py index 384ae9ca7a57a..8344fb0e66065 100644 --- a/Lib/test/test_importlib/test_api.py +++ b/Lib/test/test_importlib/test_api.py @@ -312,7 +312,7 @@ def test_reload_namespace_changed(self): '__file__': None, } os.mkdir(name) - with open(bad_path, 'w') as init_file: + with open(bad_path, 'w', encoding='utf-8') as init_file: init_file.write('eggs = None') module = self.init.import_module(name) ns = vars(module).copy() diff --git a/Lib/test/test_importlib/test_files.py b/Lib/test/test_importlib/test_files.py index 1e7a1f3cbcc54..481829b742285 100644 --- a/Lib/test/test_importlib/test_files.py +++ b/Lib/test/test_importlib/test_files.py @@ -15,7 +15,7 @@ def test_read_bytes(self): def test_read_text(self): files = resources.files(self.data) - actual = files.joinpath('utf-8.file').read_text() + actual = files.joinpath('utf-8.file').read_text(encoding='utf-8') assert actual == 'Hello, UTF-8 world!\n' @unittest.skipUnless( diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index db97e53922cf8..08069c9a5de77 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -83,7 +83,7 @@ def pkg_with_dashes(site_dir): metadata_dir = site_dir / 'my_pkg.dist-info' metadata_dir.mkdir() metadata = metadata_dir / 'METADATA' - with metadata.open('w') as strm: + with metadata.open('w', encoding='utf-8') as strm: strm.write('Version: 1.0\n') return 'my-pkg' @@ -102,7 +102,7 @@ def pkg_with_mixed_case(site_dir): metadata_dir = site_dir / 'CherryPy.dist-info' metadata_dir.mkdir() metadata = metadata_dir / 'METADATA' - with metadata.open('w') as strm: + with metadata.open('w', encoding='utf-8') as strm: strm.write('Version: 1.0\n') return 'CherryPy' diff --git a/Lib/test/test_importlib/test_pkg_import.py b/Lib/test/test_importlib/test_pkg_import.py index 36e78afa10bfc..66f5f8bc253a8 100644 --- a/Lib/test/test_importlib/test_pkg_import.py +++ b/Lib/test/test_importlib/test_pkg_import.py @@ -42,7 +42,7 @@ def rewrite_file(self, contents): compiled_path = cache_from_source(self.module_path) if os.path.exists(compiled_path): os.remove(compiled_path) - with open(self.module_path, 'w') as f: + with open(self.module_path, 'w', encoding='utf-8') as f: f.write(contents) def test_package_import__semantics(self): diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py index 5c0375e04a6ff..ca0d8c9b6eb35 100644 --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -116,7 +116,7 @@ def case_insensitive_tests(test): def submodule(parent, name, pkg_dir, content=''): path = os.path.join(pkg_dir, name + '.py') - with open(path, 'w') as subfile: + with open(path, 'w', encoding='utf-8') as subfile: subfile.write(content) return '{}.{}'.format(parent, name), path @@ -176,7 +176,7 @@ def temp_module(name, content='', *, pkg=False): content = '' if content is not None: # not a namespace package - with open(modpath, 'w') as modfile: + with open(modpath, 'w', encoding='utf-8') as modfile: modfile.write(content) yield location @@ -384,7 +384,7 @@ def create_modules(*names): os.mkdir(file_path) created_paths.append(file_path) file_path = os.path.join(file_path, name_parts[-1] + '.py') - with open(file_path, 'w') as file: + with open(file_path, 'w', encoding='utf-8') as file: file.write(source.format(name)) created_paths.append(file_path) mapping[name] = file_path diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 4bcad51509d9c..493c7e5f9f137 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -74,7 +74,9 @@ def write_file(path, content, binary=False): """ if isinstance(path, tuple): path = os.path.join(*path) - with open(path, 'wb' if binary else 'w') as fp: + mode = 'wb' if binary else 'w' + encoding = None if binary else "utf-8" + with open(path, mode, encoding=encoding) as fp: fp.write(content) def write_test_file(path, size): @@ -104,7 +106,9 @@ def read_file(path, binary=False): """ if isinstance(path, tuple): path = os.path.join(*path) - with open(path, 'rb' if binary else 'r') as fp: + mode = 'rb' if binary else 'r' + encoding = None if binary else "utf-8" + with open(path, mode, encoding=encoding) as fp: return fp.read() def rlistdir(path): @@ -674,7 +678,7 @@ def custom_cpfun(a, b): flag = [] src = self.mkdtemp() dst = tempfile.mktemp(dir=self.mkdtemp()) - with open(os.path.join(src, 'foo'), 'w') as f: + with open(os.path.join(src, 'foo'), 'w', encoding='utf-8') as f: f.close() shutil.copytree(src, dst, copy_function=custom_cpfun) self.assertEqual(len(flag), 1) @@ -746,7 +750,7 @@ def test_copytree_symlink_dir(self): src_dir = self.mkdtemp() dst_dir = os.path.join(self.mkdtemp(), 'destination') os.mkdir(os.path.join(src_dir, 'real_dir')) - with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'): + with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'wb'): pass os.symlink(os.path.join(src_dir, 'real_dir'), os.path.join(src_dir, 'link_to_dir'), @@ -1172,14 +1176,14 @@ def test_dont_copy_file_onto_link_to_itself(self): src = os.path.join(TESTFN, 'cheese') dst = os.path.join(TESTFN, 'shop') try: - with open(src, 'w') as f: + with open(src, 'w', encoding='utf-8') as f: f.write('cheddar') try: os.link(src, dst) except PermissionError as e: self.skipTest('os.link(): %s' % e) self.assertRaises(shutil.SameFileError, shutil.copyfile, src, dst) - with open(src, 'r') as f: + with open(src, 'r', encoding='utf-8') as f: self.assertEqual(f.read(), 'cheddar') os.remove(dst) finally: @@ -1192,14 +1196,14 @@ def test_dont_copy_file_onto_symlink_to_itself(self): src = os.path.join(TESTFN, 'cheese') dst = os.path.join(TESTFN, 'shop') try: - with open(src, 'w') as f: + with open(src, 'w', encoding='utf-8') as f: f.write('cheddar') # Using `src` here would mean we end up with a symlink pointing # to TESTFN/TESTFN/cheese, while it should point at # TESTFN/cheese. os.symlink('cheese', dst) self.assertRaises(shutil.SameFileError, shutil.copyfile, src, dst) - with open(src, 'r') as f: + with open(src, 'r', encoding='utf-8') as f: self.assertEqual(f.read(), 'cheddar') os.remove(dst) finally: @@ -2586,7 +2590,7 @@ def test_fallback(self): # sys.__stdout__ is not a terminal on Unix # or fileno() not in (0, 1, 2) on Windows - with open(os.devnull, 'w') as f, \ + with open(os.devnull, 'w', encoding='utf-8') as f, \ support.swap_attr(sys, '__stdout__', f): size = shutil.get_terminal_size(fallback=(30, 40)) self.assertEqual(size.columns, 30) From webhook-mailer at python.org Mon Apr 5 09:50:32 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Mon, 05 Apr 2021 13:50:32 -0000 Subject: [Python-checkins] bpo-43084: Return bool instead of int from curses.window.enclose() (GH-24398) Message-ID: https://github.com/python/cpython/commit/b1dc1aacf8b0f319024a1a3ce91d395956537c11 commit: b1dc1aacf8b0f319024a1a3ce91d395956537c11 branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-05T16:50:24+03:00 summary: bpo-43084: Return bool instead of int from curses.window.enclose() (GH-24398) files: A Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst M Doc/library/curses.rst M Lib/test/test_curses.py M Modules/_cursesmodule.c M Modules/clinic/_cursesmodule.c.h diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index f55bb034b559b..efbece437af2d 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -915,6 +915,9 @@ the following methods and attributes: determining what subset of the screen windows enclose the location of a mouse event. + .. versionchanged:: 3.10 + Previously it returned ``1`` or ``0`` instead of ``True`` or ``False``. + .. attribute:: window.encoding diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 7ce0461ab54f2..280a9dc0eedfc 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -566,13 +566,12 @@ def test_resize(self): @requires_curses_window_meth('enclose') def test_enclose(self): win = curses.newwin(5, 15, 2, 5) - # TODO: Return bool instead of 1/0 - self.assertTrue(win.enclose(2, 5)) - self.assertFalse(win.enclose(1, 5)) - self.assertFalse(win.enclose(2, 4)) - self.assertTrue(win.enclose(6, 19)) - self.assertFalse(win.enclose(7, 19)) - self.assertFalse(win.enclose(6, 20)) + self.assertIs(win.enclose(2, 5), True) + self.assertIs(win.enclose(1, 5), False) + self.assertIs(win.enclose(2, 4), False) + self.assertIs(win.enclose(6, 19), True) + self.assertIs(win.enclose(7, 19), False) + self.assertIs(win.enclose(6, 20), False) def test_putwin(self): win = curses.newwin(5, 12, 1, 2) diff --git a/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst b/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst new file mode 100644 index 0000000000000..bdab5d9c34b24 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst @@ -0,0 +1,2 @@ +:func:`curses.window.enclose` returns now ``True`` or ``False`` (as was +documented) instead of ``1`` or ``0``. diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 3df9f506052d3..d221cf1a92520 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -1343,7 +1343,7 @@ _curses_window_echochar_impl(PyCursesWindowObject *self, PyObject *ch, #ifdef NCURSES_MOUSE_VERSION /*[clinic input] -_curses.window.enclose -> long +_curses.window.enclose y: int Y-coordinate. @@ -1354,11 +1354,11 @@ _curses.window.enclose -> long Return True if the screen-relative coordinates are enclosed by the window. [clinic start generated code]*/ -static long +static PyObject * _curses_window_enclose_impl(PyCursesWindowObject *self, int y, int x) -/*[clinic end generated code: output=5251c961cbe3df63 input=dfe1d9d4d05d8642]*/ +/*[clinic end generated code: output=8679beef50502648 input=4fd3355d723f7bc9]*/ { - return wenclose(self->win, y, x); + return PyBool_FromLong(wenclose(self->win, y, x)); } #endif diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h index e46a8e3d0b23e..9c9611685b78e 100644 --- a/Modules/clinic/_cursesmodule.c.h +++ b/Modules/clinic/_cursesmodule.c.h @@ -689,7 +689,7 @@ PyDoc_STRVAR(_curses_window_enclose__doc__, #define _CURSES_WINDOW_ENCLOSE_METHODDEF \ {"enclose", (PyCFunction)(void(*)(void))_curses_window_enclose, METH_FASTCALL, _curses_window_enclose__doc__}, -static long +static PyObject * _curses_window_enclose_impl(PyCursesWindowObject *self, int y, int x); static PyObject * @@ -698,7 +698,6 @@ _curses_window_enclose(PyCursesWindowObject *self, PyObject *const *args, Py_ssi PyObject *return_value = NULL; int y; int x; - long _return_value; if (!_PyArg_CheckPositional("enclose", nargs, 2, 2)) { goto exit; @@ -711,11 +710,7 @@ _curses_window_enclose(PyCursesWindowObject *self, PyObject *const *args, Py_ssi if (x == -1 && PyErr_Occurred()) { goto exit; } - _return_value = _curses_window_enclose_impl(self, y, x); - if ((_return_value == -1) && PyErr_Occurred()) { - goto exit; - } - return_value = PyLong_FromLong(_return_value); + return_value = _curses_window_enclose_impl(self, y, x); exit: return return_value; @@ -4289,4 +4284,4 @@ _curses_has_extended_color_support(PyObject *module, PyObject *Py_UNUSED(ignored #ifndef _CURSES_USE_DEFAULT_COLORS_METHODDEF #define _CURSES_USE_DEFAULT_COLORS_METHODDEF #endif /* !defined(_CURSES_USE_DEFAULT_COLORS_METHODDEF) */ -/*[clinic end generated code: output=ae6559aa61200289 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9efc9943a3ac3741 input=a9049054013a1b77]*/ From webhook-mailer at python.org Mon Apr 5 12:38:19 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 05 Apr 2021 16:38:19 -0000 Subject: [Python-checkins] Fix the "make suspicious" check on the pprint docs (GH-25193) Message-ID: https://github.com/python/cpython/commit/57f21db3f629649dbd7c4531078b6a2104896411 commit: 57f21db3f629649dbd7c4531078b6a2104896411 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-05T17:38:10+01:00 summary: Fix the "make suspicious" check on the pprint docs (GH-25193) files: M Doc/library/pprint.rst diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst index b3b6ed56a5e17..756c33a7a8668 100644 --- a/Doc/library/pprint.rst +++ b/Doc/library/pprint.rst @@ -56,8 +56,8 @@ The :mod:`pprint` module defines one class: as will fit within the *width* will be formatted on each output line. If *sort_dicts* is true (the default), dictionaries will be formatted with their keys sorted, otherwise they will display in insertion order. If - *underscore_numbers* is true, integers will be formatted with - ```_``` character for a thousands separator, otherwise underscores are not + *underscore_numbers* is true, integers will be formatted with the + ``_`` character for a thousands separator, otherwise underscores are not displayed (the default). .. versionchanged:: 3.4 From webhook-mailer at python.org Mon Apr 5 13:06:13 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 05 Apr 2021 17:06:13 -0000 Subject: [Python-checkins] Python 3.10.0a7 Message-ID: https://github.com/python/cpython/commit/53e55290cf1972919ce2e83982346ff562ca31e3 commit: 53e55290cf1972919ce2e83982346ff562ca31e3 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-05T17:39:49+01:00 summary: Python 3.10.0a7 files: A Misc/NEWS.d/3.10.0a7.rst D Misc/NEWS.d/next/Build/2021-03-04-17-13-57.bpo-43372.FfqDVL.rst D Misc/NEWS.d/next/Build/2021-03-11-00-14-47.bpo-43466.N861Z5.rst D Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst D Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst D Misc/NEWS.d/next/Build/2021-03-31-12-20-23.bpo-43179.Qbe1OD.rst D Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst D Misc/NEWS.d/next/C API/2021-03-17-23-53-14.bpo-43244.kfPqA_.rst D Misc/NEWS.d/next/C API/2021-03-18-12-44-33.bpo-43541.ICigzd.rst D Misc/NEWS.d/next/C API/2021-03-19-12-56-11.bpo-43244.VuIyOD.rst D Misc/NEWS.d/next/C API/2021-03-23-20-53-41.bpo-43244.VK3sLH.rst D Misc/NEWS.d/next/C API/2021-03-24-01-22-14.bpo-43244.31-97x.rst D Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst D Misc/NEWS.d/next/Core and Builtins/2020-02-03-13-23-10.bpo-29988.8_UB5w.rst D Misc/NEWS.d/next/Core and Builtins/2021-02-21-14-19-35.bpo-37448.btl7vO.rst D Misc/NEWS.d/next/Core and Builtins/2021-02-22-03-01-02.bpo-43287.aTs6fO.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-03-17-58-49.bpo-43390.epPpwV.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-03-19-04-23.bpo-42128.VouZjn.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-05-17-23-36.bpo-43410.lCzIg0.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-14-16-44-50.bpo-39316.Ns3a_F.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-15-07-50-30.bpo-43497.Uc5ZCJ.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-20-01-21-37.bpo-43452.tDVJkc.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-20-19-54-47.bpo-42137.A8aQvj.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-21-12-26-32.bpo-43575.pl-nSg.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-24-00-32-20.bpo-41064._H0K_g.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-26-17-30-19.bpo-42134.G4Sjxg.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-29-11-55-06.bpo-40645.PhaT-B.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst D Misc/NEWS.d/next/Documentation/2020-10-05-20-04-43.bpo-41933.Pff94-.rst D Misc/NEWS.d/next/Documentation/2021-03-02-12-55-34.bpo-43354.ezZYkx.rst D Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst D Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst D Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst D Misc/NEWS.d/next/Library/2018-08-24-01-08-09.bpo-31861.-q9RKJ.rst D Misc/NEWS.d/next/Library/2020-01-15-11-15-35.bpo-39342.S8PuJO.rst D Misc/NEWS.d/next/Library/2020-05-27-05-42-39.bpo-40701.PBIgW1.rst D Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst D Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst D Misc/NEWS.d/next/Library/2020-09-23-21-58-34.bpo-40066.f1dr_5.rst D Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst D Misc/NEWS.d/next/Library/2021-01-07-21-25-49.bpo-14678.1zniCH.rst D Misc/NEWS.d/next/Library/2021-01-21-16-58-34.bpo-42994.El0Ksp.rst D Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst D Misc/NEWS.d/next/Library/2021-02-07-19-13-30.bpo-43125.AqNoMa.rst D Misc/NEWS.d/next/Library/2021-02-22-22-54-40.bpo-43295.h_ffu7.rst D Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst D Misc/NEWS.d/next/Library/2021-03-02-09-54-22.bpo-41282.xL4h94.rst D Misc/NEWS.d/next/Library/2021-03-02-13-45-05.bpo-43368.t9XEkQ.rst D Misc/NEWS.d/next/Library/2021-03-02-15-25-28.bpo-43369.F4knlQ.rst D Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst D Misc/NEWS.d/next/Library/2021-03-04-21-51-20.bpo-43356.X7IGBM.rst D Misc/NEWS.d/next/Library/2021-03-07-08-03-31.bpo-43420.cee_X5.rst D Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst D Misc/NEWS.d/next/Library/2021-03-07-18-54-39.bpo-43428.br0XmX.rst D Misc/NEWS.d/next/Library/2021-03-07-23-23-03.bpo-29982.Q9iszT.rst D Misc/NEWS.d/next/Library/2021-03-08-22-14-37.bpo-43245.nXL-MC.rst D Misc/NEWS.d/next/Library/2021-03-09-11-36-19.bpo-43445.jnj-UB.rst D Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst D Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst D Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst D Misc/NEWS.d/next/Library/2021-03-14-21-47-28.bpo-42914.9U1o33.rst D Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst D Misc/NEWS.d/next/Library/2021-03-16-17-20-33.bpo-43510.-BeQH_.rst D Misc/NEWS.d/next/Library/2021-03-19-10-22-17.bpo-40645.5pXhb-.rst D Misc/NEWS.d/next/Library/2021-03-20-15-43-25.bpo-43542.6bt2F6.rst D Misc/NEWS.d/next/Library/2021-03-20-17-40-35.bpo-43571.acAL0W.rst D Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst D Misc/NEWS.d/next/Library/2021-03-21-17-02-52.bpo-43422.POk6cU.rst D Misc/NEWS.d/next/Library/2021-03-21-17-50-42.bpo-41369.-fpmYZ.rst D Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst D Misc/NEWS.d/next/Library/2021-03-25-08-44-26.bpo-42136.rRY9e1.rst D Misc/NEWS.d/next/Library/2021-03-25-21-26-30.bpo-40066.7EBQ3_.rst D Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst D Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst D Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst D Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst D Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst D Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst D Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst D Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst D Misc/NEWS.d/next/Windows/2021-03-09-11-15-41.bpo-43440.igy2Mn.rst M Include/patchlevel.h M Lib/pydoc_data/topics.py M README.rst M configure diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 31da16a7be587..dc61d98c57ff0 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -20,10 +20,10 @@ #define PY_MINOR_VERSION 10 #define PY_MICRO_VERSION 0 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 6 +#define PY_RELEASE_SERIAL 7 /* Version as a string */ -#define PY_VERSION "3.10.0a6+" +#define PY_VERSION "3.10.0a7" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index a86d42247c3d0..83e1a975ec78b 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Mon Mar 1 16:48:51 2021 +# Autogenerated by Sphinx on Mon Apr 5 17:39:41 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -5782,9 +5782,11 @@ '"Formatter",\n' 'subclasses can define their own format string syntax). The ' 'syntax is\n' - 'related to that of formatted string literals, but there ' - 'are\n' - 'differences.\n' + 'related to that of formatted string literals, but it is ' + 'less\n' + 'sophisticated and, in particular, does not support ' + 'arbitrary\n' + 'expressions.\n' '\n' 'Format strings contain ?replacement fields? surrounded by ' 'curly braces\n' @@ -5978,7 +5980,7 @@ 'character that can be any character and defaults to a space ' 'if\n' 'omitted. It is not possible to use a literal curly brace ' - '(?"{"? or\n' + '(?"{"? or\n' '?"}"?) as the *fill* character in a formatted string ' 'literal or when\n' 'using the "str.format()" method. However, it is possible ' @@ -7676,7 +7678,7 @@ '\n' 'Note that numeric literals do not include a sign; a phrase like ' '"-1"\n' - 'is actually an expression composed of the unary operator ?"-"? ' + 'is actually an expression composed of the unary operator ?"-"? ' 'and the\n' 'literal "1".\n', 'numeric-types': 'Emulating numeric types\n' @@ -13956,9 +13958,9 @@ '| "s + t" | the concatenation of *s* and *t* ' '| (6)(7) |\n' '+----------------------------+----------------------------------+------------+\n' - '| "s * n" or "n * s" | equivalent to *n* copies of the ' + '| "s * n" or "n * s" | equivalent to adding *s* to ' '| (2)(7) |\n' - '| | *s* sequence ' + '| | itself *n* times ' '| |\n' '+----------------------------+----------------------------------+------------+\n' '| "s[i]" | *i*th item of *s*, origin 0 ' diff --git a/Misc/NEWS.d/3.10.0a7.rst b/Misc/NEWS.d/3.10.0a7.rst new file mode 100644 index 0000000000000..e53f6ba84e43d --- /dev/null +++ b/Misc/NEWS.d/3.10.0a7.rst @@ -0,0 +1,983 @@ +.. bpo: 42988 +.. date: 2021-03-24-14-16-56 +.. nonce: P2aNco +.. release date: 2021-04-05 +.. section: Security + +CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module +which could be abused to read arbitrary files on the disk (directory +traversal vulnerability). Moreover, even source code of Python modules can +contain sensitive data like passwords. Vulnerability reported by David +Schw?rer. + +.. + +.. bpo: 43285 +.. date: 2021-03-13-03-48-14 +.. nonce: g-Hah3 +.. section: Security + +:mod:`ftplib` no longer trusts the IP address value returned from the server +in response to the PASV command by default. This prevents a malicious FTP +server from using the response to probe IPv4 address and port combinations +on the client network. + +Code that requires the former vulnerable behavior may set a +``trust_server_pasv_ipv4_address`` attribute on their :class:`ftplib.FTP` +instances to ``True`` to re-enable it. + +.. + +.. bpo: 43439 +.. date: 2021-03-08-23-06-07 +.. nonce: 5U3lXm +.. section: Security + +Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and +:func:`gc.get_referents`. Patch by Pablo Galindo. + +.. + +.. bpo: 27129 +.. date: 2021-04-03-22-04-46 +.. nonce: u_ehHb +.. section: Core and Builtins + +Update CPython bytecode magic number. + +.. + +.. bpo: 43672 +.. date: 2021-03-31-09-12-54 +.. nonce: jTT5uG +.. section: Core and Builtins + +Raise ImportWarning when calling find_loader(). + +.. + +.. bpo: 43660 +.. date: 2021-03-29-19-50-34 +.. nonce: scTgag +.. section: Core and Builtins + +Fix crash that happens when replacing ``sys.stderr`` with a callable that +can remove the object while an exception is being printed. Patch by Pablo +Galindo. + +.. + +.. bpo: 27129 +.. date: 2021-03-29-16-20-29 +.. nonce: BF03A5 +.. section: Core and Builtins + +The bytecode interpreter uses instruction, rather byte, offsets internally. +This reduces the number of EXTENDED_ARG instructions needed and streamlines +instruction dispatch a bit. + +.. + +.. bpo: 40645 +.. date: 2021-03-29-11-55-06 +.. nonce: PhaT-B +.. section: Core and Builtins + +Fix reference leak in the :mod:`_hashopenssl` extension. Patch by Pablo +Galindo. + +.. + +.. bpo: 42134 +.. date: 2021-03-26-17-30-19 +.. nonce: G4Sjxg +.. section: Core and Builtins + +Calls to find_module() by the import system now raise ImportWarning. + +.. + +.. bpo: 41064 +.. date: 2021-03-24-00-32-20 +.. nonce: _H0K_g +.. section: Core and Builtins + +Improve the syntax error for invalid usage of double starred elements ('**') +in f-strings. Patch by Pablo Galindo. + +.. + +.. bpo: 43575 +.. date: 2021-03-21-12-26-32 +.. nonce: pl-nSg +.. section: Core and Builtins + +Speed up calls to ``map()`` by using the :pep:`590` ``vectorcall`` calling +convention. Patch by Dong-hee Na. + +.. + +.. bpo: 42137 +.. date: 2021-03-20-19-54-47 +.. nonce: A8aQvj +.. section: Core and Builtins + +The import system now prefers using ``__spec__`` for ``ModuleType.__repr__`` +over ``module_repr()``. + +.. + +.. bpo: 43452 +.. date: 2021-03-20-01-21-37 +.. nonce: tDVJkc +.. section: Core and Builtins + +Added micro-optimizations to ``_PyType_Lookup()`` to improve cache lookup +performance in the common case of cache hits. + +.. + +.. bpo: 43555 +.. date: 2021-03-19-22-49-40 +.. nonce: ZmhYSA +.. section: Core and Builtins + +Report the column offset for :exc:`SyntaxError` for invalid line +continuation characters. Patch by Pablo Galindo. + +.. + +.. bpo: 43517 +.. date: 2021-03-16-17-12-54 +.. nonce: zAo6Ws +.. section: Core and Builtins + +Fix misdetection of circular imports when using ``from pkg.mod import +attr``, which caused false positives in non-trivial multi-threaded code. + +.. + +.. bpo: 43497 +.. date: 2021-03-15-07-50-30 +.. nonce: Uc5ZCJ +.. section: Core and Builtins + +Emit SyntaxWarnings for assertions with tuple constants, this is a +regression introduced in python3.7 + +.. + +.. bpo: 39316 +.. date: 2021-03-14-16-44-50 +.. nonce: Ns3a_F +.. section: Core and Builtins + +Tracing now has correct line numbers for attribute accesses when the the +attribute is on a different line from the object. Improves debugging and +profiling for multi-line method chains. + +.. + +.. bpo: 35883 +.. date: 2021-03-13-13-57-21 +.. nonce: UyGpdG +.. section: Core and Builtins + +Python no longer fails at startup with a fatal error if a command line +argument contains an invalid Unicode character. The +:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be +decoded as Unicode characters outside the [U+0000; U+10ffff] range. + +.. + +.. bpo: 43410 +.. date: 2021-03-05-17-23-36 +.. nonce: lCzIg0 +.. section: Core and Builtins + +Fix a bug that was causing the parser to crash when emiting syntax errors +when reading input from stdin. Patch by Pablo Galindo + +.. + +.. bpo: 43406 +.. date: 2021-03-04-22-53-10 +.. nonce: Na_VpA +.. section: Core and Builtins + +Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute +a non-Python signal handler. + +.. + +.. bpo: 42128 +.. date: 2021-03-03-19-04-23 +.. nonce: VouZjn +.. section: Core and Builtins + +Add ``__match_args__`` to :c:type:`structsequence` based classes. Patch by +Pablo Galindo. + +.. + +.. bpo: 43390 +.. date: 2021-03-03-17-58-49 +.. nonce: epPpwV +.. section: Core and Builtins + +CPython now sets the ``SA_ONSTACK`` flag in ``PyOS_setsig`` for the VM's +default signal handlers. This is friendlier to other in-process code that +an extension module or embedding use could pull in (such as Golang's cgo) +where tiny thread stacks are the norm and ``sigaltstack()`` has been used to +provide for signal handlers. This is a no-op change for the vast majority +of processes that don't use sigaltstack. + +.. + +.. bpo: 43287 +.. date: 2021-02-22-03-01-02 +.. nonce: aTs6fO +.. section: Core and Builtins + +Speed up calls to ``filter()`` by using the :pep:`590` ``vectorcall`` +calling convention. Patch by Dong-hee Na. + +.. + +.. bpo: 37448 +.. date: 2021-02-21-14-19-35 +.. nonce: btl7vO +.. section: Core and Builtins + +Add a radix tree based memory map to track in-use obmalloc arenas. Use to +replace the old implementation of address_in_range(). The radix tree +approach makes it easy to increase pool sizes beyond the OS page size. +Boosting the pool and arena size allows obmalloc to handle a significantly +higher percentage of requests from its ultra-fast paths. + +It also has the advantage of eliminating the memory unsanitary behavior of +the previous address_in_range(). The old address_in_range() was marked with +the annotations _Py_NO_SANITIZE_ADDRESS, _Py_NO_SANITIZE_THREAD, and +_Py_NO_SANITIZE_MEMORY. Those annotations are no longer needed. + +To disable the radix tree map, set a preprocessor flag as follows: +`-DWITH_PYMALLOC_RADIX_TREE=0`. + +Co-authored-by: Tim Peters + +.. + +.. bpo: 29988 +.. date: 2020-02-03-13-23-10 +.. nonce: 8_UB5w +.. section: Core and Builtins + +Only handle asynchronous exceptions and requests to drop the GIL when +returning from a call or on the back edges of loops. Makes sure that +:meth:`__exit__` is always called in with statements, even for interrupts. + +.. + +.. bpo: 43720 +.. date: 2021-04-03-13-45-51 +.. nonce: FDZ5cZ +.. section: Library + +Document various stdlib deprecations in imp, pkgutil, and importlib.util for +removal in Python 3.12. + +.. + +.. bpo: 43433 +.. date: 2021-03-28-23-50-20 +.. nonce: so9j5G +.. section: Library + +:class:`xmlrpc.client.ServerProxy` no longer ignores query and fragment in +the URL of the server. + +.. + +.. bpo: 31956 +.. date: 2021-03-28-16-53-25 +.. nonce: Lt_67U +.. section: Library + +The :meth:`~array.array.index` method of :class:`array.array` now has +optional *start* and *stop* parameters. + +.. + +.. bpo: 40066 +.. date: 2021-03-25-21-26-30 +.. nonce: 7EBQ3_ +.. section: Library + +Enum: adjust ``repr()`` to show only enum and member name (not value, nor +angle brackets) and ``str()`` to show only member name. Update and improve +documentation to match. + +.. + +.. bpo: 42136 +.. date: 2021-03-25-08-44-26 +.. nonce: rRY9e1 +.. section: Library + +Deprecate all module_repr() methods found in importlib as their use is being +phased out by Python 3.12. + +.. + +.. bpo: 35930 +.. date: 2021-03-23-17-18-56 +.. nonce: RZ51pM +.. section: Library + +Raising an exception raised in a "future" instance will create reference +cycles. + +.. + +.. bpo: 41369 +.. date: 2021-03-21-17-50-42 +.. nonce: -fpmYZ +.. section: Library + +Finish updating the vendored libmpdec to version 2.5.1. Patch by Stefan +Krah. + +.. + +.. bpo: 43422 +.. date: 2021-03-21-17-02-52 +.. nonce: POk6cU +.. section: Library + +Revert the _decimal C API which was added in bpo-41324. + +.. + +.. bpo: 43577 +.. date: 2021-03-21-10-13-17 +.. nonce: m7JnAV +.. section: Library + +Fix deadlock when using :class:`ssl.SSLContext` debug callback with +:meth:`ssl.SSLContext.sni_callback`. + +.. + +.. bpo: 43571 +.. date: 2021-03-20-17-40-35 +.. nonce: acAL0W +.. section: Library + +It's now possible to create MPTCP sockets with IPPROTO_MPTCP + +.. + +.. bpo: 43542 +.. date: 2021-03-20-15-43-25 +.. nonce: 6bt2F6 +.. section: Library + +``image/heic`` and ``image/heif`` were added to :mod:`mimetypes`. + +.. + +.. bpo: 40645 +.. date: 2021-03-19-10-22-17 +.. nonce: 5pXhb- +.. section: Library + +The :mod:`hmac` module now uses OpenSSL's HMAC implementation when digestmod +argument is a hash name or builtin hash function. + +.. + +.. bpo: 43510 +.. date: 2021-03-16-17-20-33 +.. nonce: -BeQH_ +.. section: Library + +Implement :pep:`597`: Add ``EncodingWarning`` warning, ``-X +warn_default_encoding`` option, :envvar:`PYTHONWARNDEFAULTENCODING` +environment variable and ``encoding="locale"`` argument value. + +.. + +.. bpo: 43521 +.. date: 2021-03-16-16-05-02 +.. nonce: mRT6fh +.. section: Library + +``ast.unparse`` can now render NaNs and empty sets. + +.. + +.. bpo: 42914 +.. date: 2021-03-14-21-47-28 +.. nonce: 9U1o33 +.. section: Library + +:func:`pprint.pprint` gains a new boolean ``underscore_numbers`` optional +argument to emit integers with thousands separated by an underscore +character for improved readability (for example ``1_000_000`` instead of +``1000000``). + +.. + +.. bpo: 41361 +.. date: 2021-03-13-08-18-01 +.. nonce: lXDIlr +.. section: Library + +:meth:`~collections.deque.rotate` calls are now slightly faster due to +faster argument parsing. + +.. + +.. bpo: 43423 +.. date: 2021-03-11-15-44-18 +.. nonce: rRomRD +.. section: Library + +:func:`subprocess.communicate` no longer raises an IndexError when there is +an empty stdout or stderr IO buffer during a timeout on Windows. + +.. + +.. bpo: 27820 +.. date: 2021-03-10-14-07-44 +.. nonce: Wwdy-r +.. section: Library + +Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with +initial_response_ok=False will fail. + +The cause is that SMTP.auth_login _always_ returns a password if provided +with a challenge string, thus non-compliant with the standard for AUTH +LOGIN. + +Also fixes bug with the test for smtpd. + +.. + +.. bpo: 43445 +.. date: 2021-03-09-11-36-19 +.. nonce: jnj-UB +.. section: Library + +Add frozen modules to :data:`sys.stdlib_module_names`. For example, add +``"_frozen_importlib"`` and ``"_frozen_importlib_external"`` names. + +.. + +.. bpo: 43245 +.. date: 2021-03-08-22-14-37 +.. nonce: nXL-MC +.. section: Library + +Add keyword arguments support to ``ChainMap.new_child()``. + +.. + +.. bpo: 29982 +.. date: 2021-03-07-23-23-03 +.. nonce: Q9iszT +.. section: Library + +Add optional parameter *ignore_cleanup_errors* to +:func:`tempfile.TemporaryDirectory` and allow multiple :func:`cleanup` +attempts. Contributed by C.A.M. Gerlach. + +.. + +.. bpo: 43428 +.. date: 2021-03-07-18-54-39 +.. nonce: br0XmX +.. section: Library + +Include changes from `importlib_metadata 3.7 +`_: + +Performance enhancements to distribution discovery. + +``entry_points`` only returns unique distributions. + +Introduces new ``EntryPoints`` object for containing a set of entry points +with convenience methods for selecting entry points by group or name. +``entry_points`` now returns this object if selection parameters are +supplied but continues to return a dict object for compatibility. Users are +encouraged to rely on the selection interface. The dict object result is +likely to be deprecated in the future. + +Added packages_distributions function to return a mapping of packages to the +distributions that provide them. + +.. + +.. bpo: 43332 +.. date: 2021-03-07-11-23-20 +.. nonce: weatsh +.. section: Library + +Improves the networking efficiency of :mod:`http.client` when using a proxy +via :meth:`~HTTPConnection.set_tunnel`. Fewer small send calls are made +during connection setup. + +.. + +.. bpo: 43420 +.. date: 2021-03-07-08-03-31 +.. nonce: cee_X5 +.. section: Library + +Improve performance of class:`fractions.Fraction` arithmetics for large +components. Contributed by Sergey B. Kirpichev. + +.. + +.. bpo: 43356 +.. date: 2021-03-04-21-51-20 +.. nonce: X7IGBM +.. section: Library + +Allow passing a signal number to ``_thread.interrupt_main()``. + +.. + +.. bpo: 43399 +.. date: 2021-03-04-17-53-46 +.. nonce: Wn95u- +.. section: Library + +Fix ``ElementTree.extend`` not working on iterators when using the Python +implementation + +.. + +.. bpo: 43369 +.. date: 2021-03-02-15-25-28 +.. nonce: F4knlQ +.. section: Library + +Improve :mod:`sqlite3` error handling: If ``sqlite3_column_text()`` and +``sqlite3_column_blob()`` set ``SQLITE_NOMEM``, :exc:`MemoryError` is now +raised. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43368 +.. date: 2021-03-02-13-45-05 +.. nonce: t9XEkQ +.. section: Library + +Fix a regression introduced in GH-24562, where an empty bytestring was +fetched as ``None`` instead of ``b''`` in :mod:`sqlite3`. Patch by Mariusz +Felisiak. + +.. + +.. bpo: 41282 +.. date: 2021-03-02-09-54-22 +.. nonce: xL4h94 +.. section: Library + +Fixed stacklevel of ``DeprecationWarning`` emitted from ``import +distutils``. + +.. + +.. bpo: 42129 +.. date: 2021-02-28-04-21-35 +.. nonce: V0KifQ +.. section: Library + +``importlib.resources`` now honors namespace packages, merging resources +from each location in the namespace as introduced in ``importlib_resources`` +3.2 and including incidental changes through 5.0.3. + +.. + +.. bpo: 43295 +.. date: 2021-02-22-22-54-40 +.. nonce: h_ffu7 +.. section: Library + +:meth:`datetime.datetime.strptime` now raises ``ValueError`` instead of +``IndexError`` when matching ``'z'`` with the ``%z`` format specifier. + +.. + +.. bpo: 43125 +.. date: 2021-02-07-19-13-30 +.. nonce: AqNoMa +.. section: Library + +Return empty string if base64mime.body_encode receive empty bytes + +.. + +.. bpo: 43084 +.. date: 2021-01-31-17-31-13 +.. nonce: i8nLpK +.. section: Library + +:func:`curses.window.enclose` returns now ``True`` or ``False`` (as was +documented) instead of ``1`` or ``0``. + +.. + +.. bpo: 42994 +.. date: 2021-01-21-16-58-34 +.. nonce: El0Ksp +.. section: Library + +Add MIME types for opus, AAC, 3gpp and 3gpp2 + +.. + +.. bpo: 14678 +.. date: 2021-01-07-21-25-49 +.. nonce: 1zniCH +.. section: Library + +Add an invalidate_caches() method to the zipimport.zipimporter class to +support importlib.invalidate_caches(). Patch by Desmond Cheong. + +.. + +.. bpo: 42782 +.. date: 2020-12-29-13-46-57 +.. nonce: 3r0HFY +.. section: Library + +Fail fast in :func:`shutil.move()` to avoid creating destination directories +on failure. + +.. + +.. bpo: 40066 +.. date: 2020-09-23-21-58-34 +.. nonce: f1dr_5 +.. section: Library + +Enum's `repr()` and `str()` have changed: `repr()` is now +*EnumClass.MemberName* and `str()` is *MemberName*. Additionally, stdlib +Enum's whose contents are available as module attributes, such as +`RegexFlag.IGNORECASE`, have their `repr()` as *module.name*, e.g. +`re.IGNORECASE`. + +.. + +.. bpo: 26053 +.. date: 2020-09-01-10-12-13 +.. nonce: hXikw_ +.. section: Library + +Fixed bug where the :mod:`pdb` interactive run command echoed the args from +the shell command line, even if those have been overridden at the pdb +prompt. + +.. + +.. bpo: 24160 +.. date: 2020-08-28-23-07-53 +.. nonce: MSGnKr +.. section: Library + +Fixed bug where breakpoints did not persist across multiple debugger +sessions in :mod:`pdb`'s interactive mode. + +.. + +.. bpo: 40701 +.. date: 2020-05-27-05-42-39 +.. nonce: PBIgW1 +.. section: Library + +When the :data:`tempfile.tempdir` global variable is set to a value of type +bytes, it is now handled consistently. Previously exceptions could be +raised from some tempfile APIs when the directory did not already exist in +this situation. Also ensures that the :func:`tempfile.gettempdir()` and +:func:`tempfile.gettempdirb()` functions *always* return ``str`` and +``bytes`` respectively. + +.. + +.. bpo: 39342 +.. date: 2020-01-15-11-15-35 +.. nonce: S8PuJO +.. section: Library + +Expose ``X509_V_FLAG_ALLOW_PROXY_CERTS`` as +:data:`~ssl.VERIFY_ALLOW_PROXY_CERTS` to allow proxy certificate validation +as explained in +https://www.openssl.org/docs/man1.1.1/man7/proxy-certificates.html. + +.. + +.. bpo: 31861 +.. date: 2018-08-24-01-08-09 +.. nonce: -q9RKJ +.. section: Library + +Add builtins.aiter and builtins.anext. Patch by Joshua Bronson (@jab), +Daniel Pope (@lordmauve), and Justin Wang (@justin39). + +.. + +.. bpo: 43199 +.. date: 2021-03-13-18-43-54 +.. nonce: ZWA6KX +.. section: Documentation + +Answer "Why is there no goto?" in the Design and History FAQ. + +.. + +.. bpo: 43407 +.. date: 2021-03-04-22-53-03 +.. nonce: x570l5 +.. section: Documentation + +Clarified that a result from :func:`time.monotonic`, +:func:`time.perf_counter`, :func:`time.process_time`, or +:func:`time.thread_time` can be compared with the result from any following +call to the same function - not just the next immediate call. + +.. + +.. bpo: 43354 +.. date: 2021-03-02-12-55-34 +.. nonce: ezZYkx +.. section: Documentation + +Fix type documentation for ``Fault.faultCode``; the type has to be ``int`` +instead of ``str``. + +.. + +.. bpo: 41933 +.. date: 2020-10-05-20-04-43 +.. nonce: Pff94- +.. section: Documentation + +Clarified wording of s * n in the Common Sequence Operations + +.. + +.. bpo: 37945 +.. date: 2021-03-31-11-38-42 +.. nonce: HTUYhv +.. section: Tests + +Fix test_getsetlocale_issue1813() of test_locale: skip the test if +``setlocale()`` fails. Patch by Victor Stinner. + +.. + +.. bpo: 41561 +.. date: 2021-03-18-10-34-42 +.. nonce: pDg4w- +.. section: Tests + +Add workaround for Ubuntu's custom OpenSSL security level policy. + +.. + +.. bpo: 43179 +.. date: 2021-03-31-12-20-23 +.. nonce: Qbe1OD +.. section: Build + +Introduce and correctly use ALIGNOF_X in place of SIZEOF_X for +alignment-related code in optimized string routines. Patch by Jessica +Clarke. + +.. + +.. bpo: 43631 +.. date: 2021-03-26-09-16-34 +.. nonce: msJyPi +.. section: Build + +Update macOS, Windows, and CI to OpenSSL 1.1.1k. + +.. + +.. bpo: 43617 +.. date: 2021-03-24-16-55-55 +.. nonce: d69KAv +.. section: Build + +Improve configure.ac: Check for presence of autoconf-archive package and +remove our copies of M4 macros. + +.. + +.. bpo: 43466 +.. date: 2021-03-11-00-14-47 +.. nonce: N861Z5 +.. section: Build + +The ``configure`` script now supports ``--with-openssl-rpath`` option. + +.. + +.. bpo: 43372 +.. date: 2021-03-04-17-13-57 +.. nonce: FfqDVL +.. section: Build + +Use ``_freeze_importlib`` to generate code for the ``__hello__`` module. +This approach ensures the code matches the interpreter version. Previously, +PYTHON_FOR_REGEN was used to generate the code, which might be wrong. The +marshal format for code objects has changed with bpo-42246, commit 877df851. +Update the code and the expected code sizes in ctypes test_frozentable. + +.. + +.. bpo: 43440 +.. date: 2021-03-09-11-15-41 +.. nonce: igy2Mn +.. section: Windows + +Build :mod:`sqlite3` with the ``R*Tree`` module enabled. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 42225 +.. date: 2021-03-29-16-22-27 +.. nonce: iIeiLg +.. section: IDLE + +Document that IDLE can fail on Unix either from misconfigured IP masquerage +rules or failure displaying complex colored (non-ascii) characters. + +.. + +.. bpo: 43688 +.. date: 2021-04-01-09-10-42 +.. nonce: G4gs6k +.. section: C API + +The limited C API is now supported if Python is built in debug mode (if the +``Py_DEBUG`` macro is defined). In the limited C API, the +:c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented as +opaque function calls, rather than accessing directly the +:c:member:`PyObject.ob_refcnt` member, if Python is built in debug mode and +the ``Py_LIMITED_API`` macro targets Python 3.10 or newer. It became +possible to support the limited C API in debug mode because the +:c:type:`PyObject` structure is the same in release and debug mode since +Python 3.8 (see :issue:`36465`). + +The limited C API is still not supported in the ``--with-trace-refs`` +special build (``Py_TRACE_REFS`` macro). + +Patch by Victor Stinner. + +.. + +.. bpo: 43244 +.. date: 2021-03-24-01-22-14 +.. nonce: 31-97x +.. section: C API + +Remove the ``pyarena.h`` header file with functions: + +* ``PyArena_New()`` +* ``PyArena_Free()`` +* ``PyArena_Malloc()`` +* ``PyArena_AddPyObject()`` + +These functions were undocumented, excluded from the limited C API, and were +only used internally by the compiler. Patch by Victor Stinner. + +.. + +.. bpo: 43244 +.. date: 2021-03-23-20-53-41 +.. nonce: VK3sLH +.. section: C API + +Remove the compiler and parser functions using ``struct _mod`` type, because +the public AST C API was removed: + +* ``PyAST_Compile()`` +* ``PyAST_CompileEx()`` +* ``PyAST_CompileObject()`` +* ``PyFuture_FromAST()`` +* ``PyFuture_FromASTObject()`` +* ``PyParser_ASTFromFile()`` +* ``PyParser_ASTFromFileObject()`` +* ``PyParser_ASTFromFilename()`` +* ``PyParser_ASTFromString()`` +* ``PyParser_ASTFromStringObject()`` + +These functions were undocumented and excluded from the limited C API. Patch +by Victor Stinner. + +.. + +.. bpo: 43244 +.. date: 2021-03-19-12-56-11 +.. nonce: VuIyOD +.. section: C API + +Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. These +functions were undocumented and excluded from the limited C API. Most names +defined by these header files were not prefixed by ``Py`` and so could +create names conflicts. For example, ``Python-ast.h`` defined a ``Yield`` +macro which was conflict with the ``Yield`` name used by the Windows +```` header. Use the Python :mod:`ast` module instead. Patch by +Victor Stinner. + +.. + +.. bpo: 43541 +.. date: 2021-03-18-12-44-33 +.. nonce: ICigzd +.. section: C API + +Fix a ``PyEval_EvalCodeEx()`` regression: fix reference counting on +builtins. Patch by Victor Stinner. + +.. + +.. bpo: 43244 +.. date: 2021-03-17-23-53-14 +.. nonce: kfPqA_ +.. section: C API + +Remove the ``symtable.h`` header file and the undocumented functions: + +* ``PyST_GetScope()`` +* ``PySymtable_Build()`` +* ``PySymtable_BuildObject()`` +* ``PySymtable_Free()`` +* ``Py_SymtableString()`` +* ``Py_SymtableStringObject()`` + +The ``Py_SymtableString()`` function was part the stable ABI by mistake but +it could not be used, because the ``symtable.h`` header file was excluded +from the limited C API. + +The Python :mod:`symtable` module remains available and is unchanged. + +Patch by Victor Stinner. + +.. + +.. bpo: 43244 +.. date: 2021-03-17-23-20-07 +.. nonce: diyn2C +.. section: C API + +Remove the ``PyAST_Validate()`` function. It is no longer possible to build +a AST object (``mod_ty`` type) with the public C API. The function was +already excluded from the limited C API (:pep:`384`). Patch by Victor +Stinner. diff --git a/Misc/NEWS.d/next/Build/2021-03-04-17-13-57.bpo-43372.FfqDVL.rst b/Misc/NEWS.d/next/Build/2021-03-04-17-13-57.bpo-43372.FfqDVL.rst deleted file mode 100644 index e9c6f2a916492..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-04-17-13-57.bpo-43372.FfqDVL.rst +++ /dev/null @@ -1,5 +0,0 @@ -Use ``_freeze_importlib`` to generate code for the ``__hello__`` module. -This approach ensures the code matches the interpreter version. Previously, -PYTHON_FOR_REGEN was used to generate the code, which might be wrong. The -marshal format for code objects has changed with bpo-42246, commit 877df851. -Update the code and the expected code sizes in ctypes test_frozentable. diff --git a/Misc/NEWS.d/next/Build/2021-03-11-00-14-47.bpo-43466.N861Z5.rst b/Misc/NEWS.d/next/Build/2021-03-11-00-14-47.bpo-43466.N861Z5.rst deleted file mode 100644 index 801404b1c80a7..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-11-00-14-47.bpo-43466.N861Z5.rst +++ /dev/null @@ -1 +0,0 @@ -The ``configure`` script now supports ``--with-openssl-rpath`` option. diff --git a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst b/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst deleted file mode 100644 index 26783963c8679..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-24-16-55-55.bpo-43617.d69KAv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve configure.ac: Check for presence of autoconf-archive package and -remove our copies of M4 macros. diff --git a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst b/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst deleted file mode 100644 index 4de4905a6bb08..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-26-09-16-34.bpo-43631.msJyPi.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS, Windows, and CI to OpenSSL 1.1.1k. diff --git a/Misc/NEWS.d/next/Build/2021-03-31-12-20-23.bpo-43179.Qbe1OD.rst b/Misc/NEWS.d/next/Build/2021-03-31-12-20-23.bpo-43179.Qbe1OD.rst deleted file mode 100644 index 2d22d47208215..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-31-12-20-23.bpo-43179.Qbe1OD.rst +++ /dev/null @@ -1,3 +0,0 @@ -Introduce and correctly use ALIGNOF_X in place of SIZEOF_X for -alignment-related code in optimized string routines. Patch by Jessica -Clarke. \ No newline at end of file diff --git a/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst b/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst deleted file mode 100644 index 6632ace472289..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst +++ /dev/null @@ -1,3 +0,0 @@ -Remove the ``PyAST_Validate()`` function. It is no longer possible to build a -AST object (``mod_ty`` type) with the public C API. The function was already -excluded from the limited C API (:pep:`384`). Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-03-17-23-53-14.bpo-43244.kfPqA_.rst b/Misc/NEWS.d/next/C API/2021-03-17-23-53-14.bpo-43244.kfPqA_.rst deleted file mode 100644 index a05fdf9e1ae94..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-17-23-53-14.bpo-43244.kfPqA_.rst +++ /dev/null @@ -1,16 +0,0 @@ -Remove the ``symtable.h`` header file and the undocumented functions: - -* ``PyST_GetScope()`` -* ``PySymtable_Build()`` -* ``PySymtable_BuildObject()`` -* ``PySymtable_Free()`` -* ``Py_SymtableString()`` -* ``Py_SymtableStringObject()`` - -The ``Py_SymtableString()`` function was part the stable ABI by mistake but it -could not be used, because the ``symtable.h`` header file was excluded from the -limited C API. - -The Python :mod:`symtable` module remains available and is unchanged. - -Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-03-18-12-44-33.bpo-43541.ICigzd.rst b/Misc/NEWS.d/next/C API/2021-03-18-12-44-33.bpo-43541.ICigzd.rst deleted file mode 100644 index 0f5d9384942be..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-18-12-44-33.bpo-43541.ICigzd.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a ``PyEval_EvalCodeEx()`` regression: fix reference counting on -builtins. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-03-19-12-56-11.bpo-43244.VuIyOD.rst b/Misc/NEWS.d/next/C API/2021-03-19-12-56-11.bpo-43244.VuIyOD.rst deleted file mode 100644 index 1afe11e192161..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-19-12-56-11.bpo-43244.VuIyOD.rst +++ /dev/null @@ -1,8 +0,0 @@ -Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. -These functions were undocumented and excluded from the limited C API. -Most names defined by these header files were not prefixed by ``Py`` and so -could create names conflicts. For example, ``Python-ast.h`` defined a ``Yield`` -macro which was conflict with the ``Yield`` name used by the Windows -```` header. -Use the Python :mod:`ast` module instead. -Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-03-23-20-53-41.bpo-43244.VK3sLH.rst b/Misc/NEWS.d/next/C API/2021-03-23-20-53-41.bpo-43244.VK3sLH.rst deleted file mode 100644 index fcc8076dea63e..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-23-20-53-41.bpo-43244.VK3sLH.rst +++ /dev/null @@ -1,16 +0,0 @@ -Remove the compiler and parser functions using ``struct _mod`` type, because -the public AST C API was removed: - -* ``PyAST_Compile()`` -* ``PyAST_CompileEx()`` -* ``PyAST_CompileObject()`` -* ``PyFuture_FromAST()`` -* ``PyFuture_FromASTObject()`` -* ``PyParser_ASTFromFile()`` -* ``PyParser_ASTFromFileObject()`` -* ``PyParser_ASTFromFilename()`` -* ``PyParser_ASTFromString()`` -* ``PyParser_ASTFromStringObject()`` - -These functions were undocumented and excluded from the limited C API. -Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-03-24-01-22-14.bpo-43244.31-97x.rst b/Misc/NEWS.d/next/C API/2021-03-24-01-22-14.bpo-43244.31-97x.rst deleted file mode 100644 index 389ee3e133948..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-03-24-01-22-14.bpo-43244.31-97x.rst +++ /dev/null @@ -1,10 +0,0 @@ -Remove the ``pyarena.h`` header file with functions: - -* ``PyArena_New()`` -* ``PyArena_Free()`` -* ``PyArena_Malloc()`` -* ``PyArena_AddPyObject()`` - -These functions were undocumented, excluded from the limited C API, and were -only used internally by the compiler. -Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst b/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst deleted file mode 100644 index 6b1d44ee17686..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-01-09-10-42.bpo-43688.G4gs6k.rst +++ /dev/null @@ -1,13 +0,0 @@ -The limited C API is now supported if Python is built in debug mode (if the -``Py_DEBUG`` macro is defined). In the limited C API, the :c:func:`Py_INCREF` -and :c:func:`Py_DECREF` functions are now implemented as opaque function calls, -rather than accessing directly the :c:member:`PyObject.ob_refcnt` member, if -Python is built in debug mode and the ``Py_LIMITED_API`` macro targets Python -3.10 or newer. It became possible to support the limited C API in debug mode -because the :c:type:`PyObject` structure is the same in release and debug mode -since Python 3.8 (see :issue:`36465`). - -The limited C API is still not supported in the ``--with-trace-refs`` special -build (``Py_TRACE_REFS`` macro). - -Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-03-13-23-10.bpo-29988.8_UB5w.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-03-13-23-10.bpo-29988.8_UB5w.rst deleted file mode 100644 index 9a19c615a88f6..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2020-02-03-13-23-10.bpo-29988.8_UB5w.rst +++ /dev/null @@ -1,3 +0,0 @@ -Only handle asynchronous exceptions and requests to drop the GIL when -returning from a call or on the back edges of loops. Makes sure that -:meth:`__exit__` is always called in with statements, even for interrupts. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-02-21-14-19-35.bpo-37448.btl7vO.rst b/Misc/NEWS.d/next/Core and Builtins/2021-02-21-14-19-35.bpo-37448.btl7vO.rst deleted file mode 100644 index fe771a50122f6..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-02-21-14-19-35.bpo-37448.btl7vO.rst +++ /dev/null @@ -1,15 +0,0 @@ -Add a radix tree based memory map to track in-use obmalloc arenas. Use to -replace the old implementation of address_in_range(). The radix tree -approach makes it easy to increase pool sizes beyond the OS page size. -Boosting the pool and arena size allows obmalloc to handle a significantly -higher percentage of requests from its ultra-fast paths. - -It also has the advantage of eliminating the memory unsanitary behavior of -the previous address_in_range(). The old address_in_range() was marked with -the annotations _Py_NO_SANITIZE_ADDRESS, _Py_NO_SANITIZE_THREAD, and -_Py_NO_SANITIZE_MEMORY. Those annotations are no longer needed. - -To disable the radix tree map, set a preprocessor flag as follows: -`-DWITH_PYMALLOC_RADIX_TREE=0`. - -Co-authored-by: Tim Peters diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-02-22-03-01-02.bpo-43287.aTs6fO.rst b/Misc/NEWS.d/next/Core and Builtins/2021-02-22-03-01-02.bpo-43287.aTs6fO.rst deleted file mode 100644 index d8d5b2f2a9ceb..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-02-22-03-01-02.bpo-43287.aTs6fO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Speed up calls to ``filter()`` by using the :pep:`590` ``vectorcall`` -calling convention. Patch by Dong-hee Na. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-03-17-58-49.bpo-43390.epPpwV.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-03-17-58-49.bpo-43390.epPpwV.rst deleted file mode 100644 index ae115db84ece7..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-03-17-58-49.bpo-43390.epPpwV.rst +++ /dev/null @@ -1,6 +0,0 @@ -CPython now sets the ``SA_ONSTACK`` flag in ``PyOS_setsig`` for the VM's -default signal handlers. This is friendlier to other in-process code that -an extension module or embedding use could pull in (such as Golang's cgo) -where tiny thread stacks are the norm and ``sigaltstack()`` has been used to -provide for signal handlers. This is a no-op change for the vast majority -of processes that don't use sigaltstack. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-03-19-04-23.bpo-42128.VouZjn.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-03-19-04-23.bpo-42128.VouZjn.rst deleted file mode 100644 index 7c4733a9b0d70..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-03-19-04-23.bpo-42128.VouZjn.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add ``__match_args__`` to :c:type:`structsequence` based classes. Patch by -Pablo Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst deleted file mode 100644 index c18a55ef32306..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-04-22-53-10.bpo-43406.Na_VpA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a possible race condition where ``PyErr_CheckSignals`` tries to execute a -non-Python signal handler. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-05-17-23-36.bpo-43410.lCzIg0.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-05-17-23-36.bpo-43410.lCzIg0.rst deleted file mode 100644 index 245bda5ff72dd..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-05-17-23-36.bpo-43410.lCzIg0.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a bug that was causing the parser to crash when emiting syntax errors -when reading input from stdin. Patch by Pablo Galindo diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst deleted file mode 100644 index 46742429db64b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-13-13-57-21.bpo-35883.UyGpdG.rst +++ /dev/null @@ -1,4 +0,0 @@ -Python no longer fails at startup with a fatal error if a command line -argument contains an invalid Unicode character. The -:c:func:`Py_DecodeLocale` function now escapes byte sequences which would be -decoded as Unicode characters outside the [U+0000; U+10ffff] range. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-14-16-44-50.bpo-39316.Ns3a_F.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-14-16-44-50.bpo-39316.Ns3a_F.rst deleted file mode 100644 index bebd9e83db435..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-14-16-44-50.bpo-39316.Ns3a_F.rst +++ /dev/null @@ -1,3 +0,0 @@ -Tracing now has correct line numbers for attribute accesses when the -the attribute is on a different line from the object. -Improves debugging and profiling for multi-line method chains. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-15-07-50-30.bpo-43497.Uc5ZCJ.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-15-07-50-30.bpo-43497.Uc5ZCJ.rst deleted file mode 100644 index d30677fc5bc15..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-15-07-50-30.bpo-43497.Uc5ZCJ.rst +++ /dev/null @@ -1 +0,0 @@ -Emit SyntaxWarnings for assertions with tuple constants, this is a regression introduced in python3.7 \ No newline at end of file diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst deleted file mode 100644 index 0f9926b93f654..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-16-17-12-54.bpo-43517.zAo6Ws.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix misdetection of circular imports when using ``from pkg.mod import -attr``, which caused false positives in non-trivial multi-threaded code. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst deleted file mode 100644 index 55a2fe22aa8ab..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-19-22-49-40.bpo-43555.ZmhYSA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Report the column offset for :exc:`SyntaxError` for invalid line -continuation characters. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-20-01-21-37.bpo-43452.tDVJkc.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-20-01-21-37.bpo-43452.tDVJkc.rst deleted file mode 100644 index c2fe10afdee8c..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-20-01-21-37.bpo-43452.tDVJkc.rst +++ /dev/null @@ -1 +0,0 @@ -Added micro-optimizations to ``_PyType_Lookup()`` to improve cache lookup performance in the common case of cache hits. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-20-19-54-47.bpo-42137.A8aQvj.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-20-19-54-47.bpo-42137.A8aQvj.rst deleted file mode 100644 index e13ce49b954b1..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-20-19-54-47.bpo-42137.A8aQvj.rst +++ /dev/null @@ -1,2 +0,0 @@ -The import system now prefers using ``__spec__`` for ``ModuleType.__repr__`` -over ``module_repr()``. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-21-12-26-32.bpo-43575.pl-nSg.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-21-12-26-32.bpo-43575.pl-nSg.rst deleted file mode 100644 index 102325830347a..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-21-12-26-32.bpo-43575.pl-nSg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Speed up calls to ``map()`` by using the :pep:`590` ``vectorcall`` calling -convention. Patch by Dong-hee Na. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-24-00-32-20.bpo-41064._H0K_g.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-24-00-32-20.bpo-41064._H0K_g.rst deleted file mode 100644 index f6ea4d0bda6a0..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-24-00-32-20.bpo-41064._H0K_g.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve the syntax error for invalid usage of double starred elements ('**') -in f-strings. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-26-17-30-19.bpo-42134.G4Sjxg.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-26-17-30-19.bpo-42134.G4Sjxg.rst deleted file mode 100644 index 72d13e37c937b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-26-17-30-19.bpo-42134.G4Sjxg.rst +++ /dev/null @@ -1 +0,0 @@ -Calls to find_module() by the import system now raise ImportWarning. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-11-55-06.bpo-40645.PhaT-B.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-11-55-06.bpo-40645.PhaT-B.rst deleted file mode 100644 index 9ca9843947547..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-11-55-06.bpo-40645.PhaT-B.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix reference leak in the :mod:`_hashopenssl` extension. Patch by Pablo -Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst deleted file mode 100644 index b1d6c822ce32c..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-16-20-29.bpo-27129.BF03A5.rst +++ /dev/null @@ -1,3 +0,0 @@ -The bytecode interpreter uses instruction, rather byte, offsets internally. -This reduces the number of EXTENDED_ARG instructions needed and streamlines -instruction dispatch a bit. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst deleted file mode 100644 index 98419501d9e7b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-29-19-50-34.bpo-43660.scTgag.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix crash that happens when replacing ``sys.stderr`` with a callable that -can remove the object while an exception is being printed. Patch by Pablo -Galindo. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst deleted file mode 100644 index 3bb1a66d0f7fd..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-09-12-54.bpo-43672.jTT5uG.rst +++ /dev/null @@ -1 +0,0 @@ -Raise ImportWarning when calling find_loader(). diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst deleted file mode 100644 index dc47bd08039cf..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-03-22-04-46.bpo-27129.u_ehHb.rst +++ /dev/null @@ -1 +0,0 @@ -Update CPython bytecode magic number. diff --git a/Misc/NEWS.d/next/Documentation/2020-10-05-20-04-43.bpo-41933.Pff94-.rst b/Misc/NEWS.d/next/Documentation/2020-10-05-20-04-43.bpo-41933.Pff94-.rst deleted file mode 100644 index f6316df5d8b15..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2020-10-05-20-04-43.bpo-41933.Pff94-.rst +++ /dev/null @@ -1 +0,0 @@ -Clarified wording of s * n in the Common Sequence Operations \ No newline at end of file diff --git a/Misc/NEWS.d/next/Documentation/2021-03-02-12-55-34.bpo-43354.ezZYkx.rst b/Misc/NEWS.d/next/Documentation/2021-03-02-12-55-34.bpo-43354.ezZYkx.rst deleted file mode 100644 index 1a8743cbde615..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-02-12-55-34.bpo-43354.ezZYkx.rst +++ /dev/null @@ -1 +0,0 @@ -Fix type documentation for ``Fault.faultCode``; the type has to be ``int`` instead of ``str``. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst b/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst deleted file mode 100644 index 615e3d016307c..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-04-22-53-03.bpo-43407.x570l5.rst +++ /dev/null @@ -1,4 +0,0 @@ -Clarified that a result from :func:`time.monotonic`, -:func:`time.perf_counter`, :func:`time.process_time`, or -:func:`time.thread_time` can be compared with the result from any following -call to the same function - not just the next immediate call. diff --git a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst b/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst deleted file mode 100644 index d1b454fabd7f8..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-03-13-18-43-54.bpo-43199.ZWA6KX.rst +++ /dev/null @@ -1 +0,0 @@ -Answer "Why is there no goto?" in the Design and History FAQ. diff --git a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst b/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst deleted file mode 100644 index 59fb08bdf9ebe..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-03-29-16-22-27.bpo-42225.iIeiLg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document that IDLE can fail on Unix either from misconfigured IP masquerage -rules or failure displaying complex colored (non-ascii) characters. diff --git a/Misc/NEWS.d/next/Library/2018-08-24-01-08-09.bpo-31861.-q9RKJ.rst b/Misc/NEWS.d/next/Library/2018-08-24-01-08-09.bpo-31861.-q9RKJ.rst deleted file mode 100644 index 1526deb995c3d..0000000000000 --- a/Misc/NEWS.d/next/Library/2018-08-24-01-08-09.bpo-31861.-q9RKJ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add builtins.aiter and builtins.anext. -Patch by Joshua Bronson (@jab), Daniel Pope (@lordmauve), and Justin Wang (@justin39). diff --git a/Misc/NEWS.d/next/Library/2020-01-15-11-15-35.bpo-39342.S8PuJO.rst b/Misc/NEWS.d/next/Library/2020-01-15-11-15-35.bpo-39342.S8PuJO.rst deleted file mode 100644 index 6eb83a95b5e2c..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-01-15-11-15-35.bpo-39342.S8PuJO.rst +++ /dev/null @@ -1,4 +0,0 @@ -Expose ``X509_V_FLAG_ALLOW_PROXY_CERTS`` as -:data:`~ssl.VERIFY_ALLOW_PROXY_CERTS` to allow proxy certificate validation -as explained in -https://www.openssl.org/docs/man1.1.1/man7/proxy-certificates.html. diff --git a/Misc/NEWS.d/next/Library/2020-05-27-05-42-39.bpo-40701.PBIgW1.rst b/Misc/NEWS.d/next/Library/2020-05-27-05-42-39.bpo-40701.PBIgW1.rst deleted file mode 100644 index a7a4a1ce999af..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-05-27-05-42-39.bpo-40701.PBIgW1.rst +++ /dev/null @@ -1,6 +0,0 @@ -When the :data:`tempfile.tempdir` global variable is set to a value of -type bytes, it is now handled consistently. Previously exceptions -could be raised from some tempfile APIs when the directory did not -already exist in this situation. Also ensures that the -:func:`tempfile.gettempdir()` and :func:`tempfile.gettempdirb()` -functions *always* return ``str`` and ``bytes`` respectively. diff --git a/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst b/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst deleted file mode 100644 index c0cfd87b878af..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-08-28-23-07-53.bpo-24160.MSGnKr.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed bug where breakpoints did not persist across multiple debugger sessions in :mod:`pdb`'s interactive mode. diff --git a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst b/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst deleted file mode 100644 index e8720ac82ffb1..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-01-10-12-13.bpo-26053.hXikw_.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed bug where the :mod:`pdb` interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. diff --git a/Misc/NEWS.d/next/Library/2020-09-23-21-58-34.bpo-40066.f1dr_5.rst b/Misc/NEWS.d/next/Library/2020-09-23-21-58-34.bpo-40066.f1dr_5.rst deleted file mode 100644 index 6d2c68e2353dd..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-23-21-58-34.bpo-40066.f1dr_5.rst +++ /dev/null @@ -1,4 +0,0 @@ -Enum's `repr()` and `str()` have changed: `repr()` is now *EnumClass.MemberName* -and `str()` is *MemberName*. Additionally, stdlib Enum's whose contents are -available as module attributes, such as `RegexFlag.IGNORECASE`, have their -`repr()` as *module.name*, e.g. `re.IGNORECASE`. diff --git a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst b/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst deleted file mode 100644 index 065df9bf0cf42..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-29-13-46-57.bpo-42782.3r0HFY.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fail fast in :func:`shutil.move()` to avoid creating destination directories on -failure. diff --git a/Misc/NEWS.d/next/Library/2021-01-07-21-25-49.bpo-14678.1zniCH.rst b/Misc/NEWS.d/next/Library/2021-01-07-21-25-49.bpo-14678.1zniCH.rst deleted file mode 100644 index 127650c4f8063..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-07-21-25-49.bpo-14678.1zniCH.rst +++ /dev/null @@ -1,3 +0,0 @@ -Add an invalidate_caches() method to the zipimport.zipimporter class to -support importlib.invalidate_caches(). -Patch by Desmond Cheong. diff --git a/Misc/NEWS.d/next/Library/2021-01-21-16-58-34.bpo-42994.El0Ksp.rst b/Misc/NEWS.d/next/Library/2021-01-21-16-58-34.bpo-42994.El0Ksp.rst deleted file mode 100644 index 40f854794215f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-21-16-58-34.bpo-42994.El0Ksp.rst +++ /dev/null @@ -1 +0,0 @@ -Add MIME types for opus, AAC, 3gpp and 3gpp2 diff --git a/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst b/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst deleted file mode 100644 index bdab5d9c34b24..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-31-17-31-13.bpo-43084.i8nLpK.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`curses.window.enclose` returns now ``True`` or ``False`` (as was -documented) instead of ``1`` or ``0``. diff --git a/Misc/NEWS.d/next/Library/2021-02-07-19-13-30.bpo-43125.AqNoMa.rst b/Misc/NEWS.d/next/Library/2021-02-07-19-13-30.bpo-43125.AqNoMa.rst deleted file mode 100644 index 4c4a5836d2595..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-07-19-13-30.bpo-43125.AqNoMa.rst +++ /dev/null @@ -1 +0,0 @@ -Return empty string if base64mime.body_encode receive empty bytes diff --git a/Misc/NEWS.d/next/Library/2021-02-22-22-54-40.bpo-43295.h_ffu7.rst b/Misc/NEWS.d/next/Library/2021-02-22-22-54-40.bpo-43295.h_ffu7.rst deleted file mode 100644 index ac9a5c96c9ced..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-22-22-54-40.bpo-43295.h_ffu7.rst +++ /dev/null @@ -1,2 +0,0 @@ -:meth:`datetime.datetime.strptime` now raises ``ValueError`` instead of -``IndexError`` when matching ``'z'`` with the ``%z`` format specifier. diff --git a/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst b/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst deleted file mode 100644 index 4b8f5029fefec..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst +++ /dev/null @@ -1,3 +0,0 @@ -``importlib.resources`` now honors namespace packages, merging resources -from each location in the namespace as introduced in -``importlib_resources`` 3.2 and including incidental changes through 5.0.3. diff --git a/Misc/NEWS.d/next/Library/2021-03-02-09-54-22.bpo-41282.xL4h94.rst b/Misc/NEWS.d/next/Library/2021-03-02-09-54-22.bpo-41282.xL4h94.rst deleted file mode 100644 index 6655ac69c44af..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-02-09-54-22.bpo-41282.xL4h94.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed stacklevel of ``DeprecationWarning`` emitted from ``import -distutils``. diff --git a/Misc/NEWS.d/next/Library/2021-03-02-13-45-05.bpo-43368.t9XEkQ.rst b/Misc/NEWS.d/next/Library/2021-03-02-13-45-05.bpo-43368.t9XEkQ.rst deleted file mode 100644 index f9a4aa2935e3f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-02-13-45-05.bpo-43368.t9XEkQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix a regression introduced in GH-24562, where an empty bytestring was fetched -as ``None`` instead of ``b''`` in :mod:`sqlite3`. Patch by Mariusz Felisiak. diff --git a/Misc/NEWS.d/next/Library/2021-03-02-15-25-28.bpo-43369.F4knlQ.rst b/Misc/NEWS.d/next/Library/2021-03-02-15-25-28.bpo-43369.F4knlQ.rst deleted file mode 100644 index f88a7070dbcee..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-02-15-25-28.bpo-43369.F4knlQ.rst +++ /dev/null @@ -1,3 +0,0 @@ -Improve :mod:`sqlite3` error handling: If ``sqlite3_column_text()`` and -``sqlite3_column_blob()`` set ``SQLITE_NOMEM``, :exc:`MemoryError` is now -raised. Patch by Erlend E. Aasland. diff --git a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst b/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst deleted file mode 100644 index 0b8dffb2312e4..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-04-17-53-46.bpo-43399.Wn95u-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``ElementTree.extend`` not working on iterators when using the -Python implementation diff --git a/Misc/NEWS.d/next/Library/2021-03-04-21-51-20.bpo-43356.X7IGBM.rst b/Misc/NEWS.d/next/Library/2021-03-04-21-51-20.bpo-43356.X7IGBM.rst deleted file mode 100644 index 8b106f830f59b..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-04-21-51-20.bpo-43356.X7IGBM.rst +++ /dev/null @@ -1 +0,0 @@ -Allow passing a signal number to ``_thread.interrupt_main()``. diff --git a/Misc/NEWS.d/next/Library/2021-03-07-08-03-31.bpo-43420.cee_X5.rst b/Misc/NEWS.d/next/Library/2021-03-07-08-03-31.bpo-43420.cee_X5.rst deleted file mode 100644 index f9b3228772c12..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-07-08-03-31.bpo-43420.cee_X5.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve performance of class:`fractions.Fraction` arithmetics for large -components. Contributed by Sergey B. Kirpichev. diff --git a/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst b/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst deleted file mode 100644 index c40be95c194db..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-07-11-23-20.bpo-43332.weatsh.rst +++ /dev/null @@ -1,3 +0,0 @@ -Improves the networking efficiency of :mod:`http.client` when using a proxy -via :meth:`~HTTPConnection.set_tunnel`. Fewer small send calls are made -during connection setup. diff --git a/Misc/NEWS.d/next/Library/2021-03-07-18-54-39.bpo-43428.br0XmX.rst b/Misc/NEWS.d/next/Library/2021-03-07-18-54-39.bpo-43428.br0XmX.rst deleted file mode 100644 index 38361070b39f7..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-07-18-54-39.bpo-43428.br0XmX.rst +++ /dev/null @@ -1,17 +0,0 @@ -Include changes from `importlib_metadata 3.7 -`_: - -Performance enhancements to distribution discovery. - -``entry_points`` only returns unique distributions. - -Introduces new ``EntryPoints`` object -for containing a set of entry points with convenience methods for selecting -entry points by group or name. ``entry_points`` now returns this object if -selection parameters are supplied but continues to return a dict object for -compatibility. Users are encouraged to rely on the selection interface. The -dict object result is likely to be deprecated in the future. - -Added -packages_distributions function to return a mapping of packages to the -distributions that provide them. diff --git a/Misc/NEWS.d/next/Library/2021-03-07-23-23-03.bpo-29982.Q9iszT.rst b/Misc/NEWS.d/next/Library/2021-03-07-23-23-03.bpo-29982.Q9iszT.rst deleted file mode 100644 index fd71bc6e4e0df..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-07-23-23-03.bpo-29982.Q9iszT.rst +++ /dev/null @@ -1,3 +0,0 @@ -Add optional parameter *ignore_cleanup_errors* to -:func:`tempfile.TemporaryDirectory` and allow multiple :func:`cleanup` attempts. -Contributed by C.A.M. Gerlach. diff --git a/Misc/NEWS.d/next/Library/2021-03-08-22-14-37.bpo-43245.nXL-MC.rst b/Misc/NEWS.d/next/Library/2021-03-08-22-14-37.bpo-43245.nXL-MC.rst deleted file mode 100644 index 394318fb1e867..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-08-22-14-37.bpo-43245.nXL-MC.rst +++ /dev/null @@ -1 +0,0 @@ -Add keyword arguments support to ``ChainMap.new_child()``. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Library/2021-03-09-11-36-19.bpo-43445.jnj-UB.rst b/Misc/NEWS.d/next/Library/2021-03-09-11-36-19.bpo-43445.jnj-UB.rst deleted file mode 100644 index 703cd027f0b76..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-09-11-36-19.bpo-43445.jnj-UB.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add frozen modules to :data:`sys.stdlib_module_names`. For example, add -``"_frozen_importlib"`` and ``"_frozen_importlib_external"`` names. diff --git a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst b/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst deleted file mode 100644 index 7f1014d723b6a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-10-14-07-44.bpo-27820.Wwdy-r.rst +++ /dev/null @@ -1,8 +0,0 @@ -Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with -initial_response_ok=False will fail. - -The cause is that SMTP.auth_login _always_ returns a password if provided -with a challenge string, thus non-compliant with the standard for AUTH -LOGIN. - -Also fixes bug with the test for smtpd. diff --git a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst b/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst deleted file mode 100644 index 290d7fbd91800..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`subprocess.communicate` no longer raises an IndexError when there is an -empty stdout or stderr IO buffer during a timeout on Windows. diff --git a/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst b/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst deleted file mode 100644 index 19e08f810bb7c..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-13-08-18-01.bpo-41361.lXDIlr.rst +++ /dev/null @@ -1 +0,0 @@ -:meth:`~collections.deque.rotate` calls are now slightly faster due to faster argument parsing. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Library/2021-03-14-21-47-28.bpo-42914.9U1o33.rst b/Misc/NEWS.d/next/Library/2021-03-14-21-47-28.bpo-42914.9U1o33.rst deleted file mode 100644 index ae6ef2f0bfa42..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-14-21-47-28.bpo-42914.9U1o33.rst +++ /dev/null @@ -1,3 +0,0 @@ -:func:`pprint.pprint` gains a new boolean ``underscore_numbers`` optional -argument to emit integers with thousands separated by an underscore character -for improved readability (for example ``1_000_000`` instead of ``1000000``). diff --git a/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst b/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst deleted file mode 100644 index e6895674437a5..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-16-05-02.bpo-43521.mRT6fh.rst +++ /dev/null @@ -1 +0,0 @@ -``ast.unparse`` can now render NaNs and empty sets. diff --git a/Misc/NEWS.d/next/Library/2021-03-16-17-20-33.bpo-43510.-BeQH_.rst b/Misc/NEWS.d/next/Library/2021-03-16-17-20-33.bpo-43510.-BeQH_.rst deleted file mode 100644 index b79a49c881bcc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-17-20-33.bpo-43510.-BeQH_.rst +++ /dev/null @@ -1,3 +0,0 @@ -Implement :pep:`597`: Add ``EncodingWarning`` warning, ``-X -warn_default_encoding`` option, :envvar:`PYTHONWARNDEFAULTENCODING` -environment variable and ``encoding="locale"`` argument value. diff --git a/Misc/NEWS.d/next/Library/2021-03-19-10-22-17.bpo-40645.5pXhb-.rst b/Misc/NEWS.d/next/Library/2021-03-19-10-22-17.bpo-40645.5pXhb-.rst deleted file mode 100644 index a9ab1c09150bb..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-19-10-22-17.bpo-40645.5pXhb-.rst +++ /dev/null @@ -1,2 +0,0 @@ -The :mod:`hmac` module now uses OpenSSL's HMAC implementation when digestmod -argument is a hash name or builtin hash function. diff --git a/Misc/NEWS.d/next/Library/2021-03-20-15-43-25.bpo-43542.6bt2F6.rst b/Misc/NEWS.d/next/Library/2021-03-20-15-43-25.bpo-43542.6bt2F6.rst deleted file mode 100644 index 370e520ca3e06..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-20-15-43-25.bpo-43542.6bt2F6.rst +++ /dev/null @@ -1 +0,0 @@ -``image/heic`` and ``image/heif`` were added to :mod:`mimetypes`. diff --git a/Misc/NEWS.d/next/Library/2021-03-20-17-40-35.bpo-43571.acAL0W.rst b/Misc/NEWS.d/next/Library/2021-03-20-17-40-35.bpo-43571.acAL0W.rst deleted file mode 100644 index 56714dc86bd56..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-20-17-40-35.bpo-43571.acAL0W.rst +++ /dev/null @@ -1 +0,0 @@ -It's now possible to create MPTCP sockets with IPPROTO_MPTCP \ No newline at end of file diff --git a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst b/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst deleted file mode 100644 index a7db48bc626fc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-21-10-13-17.bpo-43577.m7JnAV.rst +++ /dev/null @@ -1 +0,0 @@ -Fix deadlock when using :class:`ssl.SSLContext` debug callback with :meth:`ssl.SSLContext.sni_callback`. diff --git a/Misc/NEWS.d/next/Library/2021-03-21-17-02-52.bpo-43422.POk6cU.rst b/Misc/NEWS.d/next/Library/2021-03-21-17-02-52.bpo-43422.POk6cU.rst deleted file mode 100644 index 4de3060d26e8f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-21-17-02-52.bpo-43422.POk6cU.rst +++ /dev/null @@ -1 +0,0 @@ -Revert the _decimal C API which was added in bpo-41324. diff --git a/Misc/NEWS.d/next/Library/2021-03-21-17-50-42.bpo-41369.-fpmYZ.rst b/Misc/NEWS.d/next/Library/2021-03-21-17-50-42.bpo-41369.-fpmYZ.rst deleted file mode 100644 index 6a85e8259cef4..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-21-17-50-42.bpo-41369.-fpmYZ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Finish updating the vendored libmpdec to version 2.5.1. Patch by Stefan -Krah. diff --git a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst b/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst deleted file mode 100644 index 71c6012f52b8f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-23-17-18-56.bpo-35930.RZ51pM.rst +++ /dev/null @@ -1,2 +0,0 @@ -Raising an exception raised in a "future" instance will create reference -cycles. diff --git a/Misc/NEWS.d/next/Library/2021-03-25-08-44-26.bpo-42136.rRY9e1.rst b/Misc/NEWS.d/next/Library/2021-03-25-08-44-26.bpo-42136.rRY9e1.rst deleted file mode 100644 index f66e34b18e27a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-25-08-44-26.bpo-42136.rRY9e1.rst +++ /dev/null @@ -1,2 +0,0 @@ -Deprecate all module_repr() methods found in importlib as their use is being -phased out by Python 3.12. diff --git a/Misc/NEWS.d/next/Library/2021-03-25-21-26-30.bpo-40066.7EBQ3_.rst b/Misc/NEWS.d/next/Library/2021-03-25-21-26-30.bpo-40066.7EBQ3_.rst deleted file mode 100644 index 11903f8b9e93d..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-25-21-26-30.bpo-40066.7EBQ3_.rst +++ /dev/null @@ -1,3 +0,0 @@ -Enum: adjust ``repr()`` to show only enum and member name (not value, nor -angle brackets) and ``str()`` to show only member name. Update and improve -documentation to match. diff --git a/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst b/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst deleted file mode 100644 index 5285fd38ebb8a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-28-16-53-25.bpo-31956.Lt_67U.rst +++ /dev/null @@ -1,2 +0,0 @@ -The :meth:`~array.array.index` method of :class:`array.array` now has -optional *start* and *stop* parameters. diff --git a/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst b/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst deleted file mode 100644 index 2f67e316a5efc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-28-23-50-20.bpo-43433.so9j5G.rst +++ /dev/null @@ -1,2 +0,0 @@ -:class:`xmlrpc.client.ServerProxy` no longer ignores query and fragment in -the URL of the server. diff --git a/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst b/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst deleted file mode 100644 index d71460f010dcc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-03-13-45-51.bpo-43720.FDZ5cZ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document various stdlib deprecations in imp, pkgutil, and importlib.util for removal in Python -3.12. diff --git a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst b/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst deleted file mode 100644 index 518650303683d..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-08-23-06-07.bpo-43439.5U3lXm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and -:func:`gc.get_referents`. Patch by Pablo Galindo. diff --git a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst b/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst deleted file mode 100644 index 8312b7e885441..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst +++ /dev/null @@ -1,8 +0,0 @@ -:mod:`ftplib` no longer trusts the IP address value returned from the server -in response to the PASV command by default. This prevents a malicious FTP -server from using the response to probe IPv4 address and port combinations -on the client network. - -Code that requires the former vulnerable behavior may set a -``trust_server_pasv_ipv4_address`` attribute on their -:class:`ftplib.FTP` instances to ``True`` to re-enable it. diff --git a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst b/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst deleted file mode 100644 index 4b42dd05305a8..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-24-14-16-56.bpo-42988.P2aNco.rst +++ /dev/null @@ -1,4 +0,0 @@ -CVE-2021-3426: Remove the ``getfile`` feature of the :mod:`pydoc` module which -could be abused to read arbitrary files on the disk (directory traversal -vulnerability). Moreover, even source code of Python modules can contain -sensitive data like passwords. Vulnerability reported by David Schw?rer. diff --git a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst b/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst deleted file mode 100644 index 214350729bff6..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst +++ /dev/null @@ -1 +0,0 @@ -Add workaround for Ubuntu's custom OpenSSL security level policy. diff --git a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst b/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst deleted file mode 100644 index e1c95f63bf7c7..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-03-31-11-38-42.bpo-37945.HTUYhv.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_getsetlocale_issue1813() of test_locale: skip the test if -``setlocale()`` fails. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Windows/2021-03-09-11-15-41.bpo-43440.igy2Mn.rst b/Misc/NEWS.d/next/Windows/2021-03-09-11-15-41.bpo-43440.igy2Mn.rst deleted file mode 100644 index 2116ef3a8718a..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-03-09-11-15-41.bpo-43440.igy2Mn.rst +++ /dev/null @@ -1,2 +0,0 @@ -Build :mod:`sqlite3` with the ``R*Tree`` module enabled. Patch by Erlend E. -Aasland. diff --git a/README.rst b/README.rst index 42b42df7e50f8..02a34d28aa489 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.10.0 alpha 6 +This is Python version 3.10.0 alpha 7 ===================================== .. image:: https://travis-ci.com/python/cpython.svg?branch=master diff --git a/configure b/configure index 34a19a11a89c6..e03b9ac5b3ddb 100755 --- a/configure +++ b/configure @@ -1,11 +1,12 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for python 3.10. +# Generated by GNU Autoconf 2.71 for python 3.10. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -16,14 +17,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -33,46 +36,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -81,13 +84,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -96,8 +92,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -109,30 +109,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -154,20 +134,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -187,42 +169,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -230,14 +223,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -255,18 +255,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf at gnu.org and + printf "%s\n" "$0: Please tell bug-autoconf at gnu.org and $0: https://bugs.python.org/ about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script @@ -294,6 +295,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -311,6 +313,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -325,7 +335,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -334,7 +344,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -373,12 +383,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -390,18 +401,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -413,9 +433,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -442,7 +462,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -486,7 +506,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -500,6 +520,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -513,6 +537,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -588,40 +619,36 @@ PACKAGE_URL='' ac_unique_file="Include/object.h" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS TEST_MODULES LIBRARY_DEPS @@ -675,6 +702,7 @@ LDSHARED SHLIB_SUFFIX LIBTOOL_CRUFT OTHER_LIBTOOL_OPT +EGREP UNIVERSAL_ARCH_FLAGS LDFLAGS_NODIST CFLAGS_NODIST @@ -718,7 +746,6 @@ DLLLIBRARY LDLIBRARY LIBRARY BUILDEXEEXT -EGREP NO_AS_NEEDED MULTIARCH_CPPFLAGS PLATFORM_TRIPLET @@ -792,6 +819,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -915,6 +943,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -944,8 +973,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -986,9 +1013,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1012,9 +1039,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1167,6 +1194,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1216,9 +1252,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1232,9 +1268,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1278,9 +1314,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1296,7 +1332,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1304,7 +1340,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1360,7 +1396,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1457,6 +1493,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1653,9 +1690,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1683,7 +1720,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1691,7 +1729,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1701,9 +1739,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF python configure 3.10 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1720,14 +1758,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1735,14 +1773,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1764,7 +1803,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1772,14 +1811,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1795,14 +1835,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1810,17 +1850,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1835,101 +1876,43 @@ fi } # ac_fn_c_try_link -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_c_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## --------------------------------------- ## -## Report this to https://bugs.python.org/ ## -## --------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -1939,25 +1922,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -1968,37 +1952,6 @@ fi } # ac_fn_c_try_run -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2006,17 +1959,18 @@ $as_echo "$ac_res" >&6; } ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2024,12 +1978,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2037,18 +1992,19 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2067,7 +2023,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2077,14 +2033,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2094,9 +2051,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2104,14 +2062,14 @@ else fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2121,14 +2079,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2138,9 +2097,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2148,14 +2108,14 @@ else fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2163,7 +2123,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2173,12 +2133,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2188,12 +2149,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include #include int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -2221,9 +2182,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2254,16 +2217,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2281,47 +2237,51 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2335,19 +2295,22 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- @@ -2356,16 +2319,17 @@ $as_echo "$ac_res" >&6; } ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +printf %s "checking for $2.$3... " >&6; } +if eval test \${$4+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (ac_aggr.$3) @@ -2374,14 +2338,15 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2390,29 +2355,50 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by python $as_me 3.10, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2445,8 +2431,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2481,7 +2471,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2516,11 +2506,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2531,8 +2523,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2556,7 +2548,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2564,14 +2556,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2579,15 +2571,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2595,8 +2587,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2610,63 +2602,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2676,93 +2653,512 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif -if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then - # If we're building out-of-tree, we need to make sure the following +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" +as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" +as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + +if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then + # If we're building out-of-tree, we need to make sure the following # resources get picked up before their $srcdir counterparts. # Objects/ -> typeslots.inc # Include/ -> Python.h @@ -2784,11 +3180,12 @@ if test -e $srcdir/.git then # Extract the first word of "git", so it can be a program name with args. set dummy git; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_HAS_GIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_HAS_GIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$HAS_GIT"; then ac_cv_prog_HAS_GIT="$HAS_GIT" # Let the user override the test. else @@ -2796,11 +3193,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_HAS_GIT="found" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2812,11 +3213,11 @@ fi fi HAS_GIT=$ac_cv_prog_HAS_GIT if test -n "$HAS_GIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_GIT" >&5 -$as_echo "$HAS_GIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAS_GIT" >&5 +printf "%s\n" "$HAS_GIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2838,55 +3239,30 @@ fi ac_config_headers="$ac_config_headers pyconfig.h" -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 - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -2905,21 +3281,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -2948,11 +3325,12 @@ for ac_prog in python$PACKAGE_VERSION python3 python do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON_FOR_REGEN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PYTHON_FOR_REGEN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$PYTHON_FOR_REGEN"; then ac_cv_prog_PYTHON_FOR_REGEN="$PYTHON_FOR_REGEN" # Let the user override the test. else @@ -2960,11 +3338,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PYTHON_FOR_REGEN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2975,11 +3357,11 @@ fi fi PYTHON_FOR_REGEN=$ac_cv_prog_PYTHON_FOR_REGEN if test -n "$PYTHON_FOR_REGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_REGEN" >&5 -$as_echo "$PYTHON_FOR_REGEN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_REGEN" >&5 +printf "%s\n" "$PYTHON_FOR_REGEN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2990,8 +3372,8 @@ test -n "$PYTHON_FOR_REGEN" || PYTHON_FOR_REGEN="python3" if test "$cross_compiling" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 -$as_echo_n "checking for python interpreter for cross build... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 +printf %s "checking for python interpreter for cross build... " >&6; } if test -z "$PYTHON_FOR_BUILD"; then for interp in python$PACKAGE_VERSION python3 python; do which $interp >/dev/null 2>&1 || continue @@ -3003,8 +3385,8 @@ $as_echo_n "checking for python interpreter for cross build... " >&6; } if test x$interp = x; then as_fn_error $? "python$PACKAGE_VERSION interpreter not found" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 -$as_echo "$interp" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 +printf "%s\n" "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp fi elif test "$cross_compiling" = maybe; then @@ -3038,28 +3420,28 @@ SOVERSION=1.0 # The later defininition of _XOPEN_SOURCE disables certain features # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone). -$as_echo "#define _GNU_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # them. -$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable # them. -$as_echo "#define __BSD_VISIBLE 1" >>confdefs.h +printf "%s\n" "#define __BSD_VISIBLE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable # them. -$as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h @@ -3069,10 +3451,11 @@ define_xopen_source=yes CONFIG_ARGS="$ac_configure_args" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-universalsdk" >&5 -$as_echo_n "checking for --enable-universalsdk... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-universalsdk" >&5 +printf %s "checking for --enable-universalsdk... " >&6; } # Check whether --enable-universalsdk was given. -if test "${enable_universalsdk+set}" = set; then : +if test ${enable_universalsdk+y} +then : enableval=$enable_universalsdk; case $enableval in yes) @@ -3104,7 +3487,7 @@ if test "${enable_universalsdk+set}" = set; then : esac -else +else $as_nop UNIVERSALSDK= enable_universalsdk= @@ -3113,11 +3496,11 @@ fi if test -n "${UNIVERSALSDK}" then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSALSDK}" >&5 -$as_echo "${UNIVERSALSDK}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSALSDK}" >&5 +printf "%s\n" "${UNIVERSALSDK}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3139,11 +3522,12 @@ then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 -$as_echo_n "checking for --with-universal-archs... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 +printf %s "checking for --with-universal-archs... " >&6; } # Check whether --with-universal-archs was given. -if test "${with_universal_archs+set}" = set; then : +if test ${with_universal_archs+y} +then : withval=$with_universal_archs; UNIVERSAL_ARCHS="$withval" @@ -3151,22 +3535,23 @@ fi if test -n "${UNIVERSALSDK}" then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5 -$as_echo "${UNIVERSAL_ARCHS}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5 +printf "%s\n" "${UNIVERSAL_ARCHS}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Check whether --with-framework-name was given. -if test "${with_framework_name+set}" = set; then : +if test ${with_framework_name+y} +then : withval=$with_framework_name; PYTHONFRAMEWORK=${withval} PYTHONFRAMEWORKDIR=${withval}.framework PYTHONFRAMEWORKIDENTIFIER=org.python.`echo $withval | tr 'A-Z' 'a-z'` -else +else $as_nop PYTHONFRAMEWORK=Python PYTHONFRAMEWORKDIR=Python.framework @@ -3175,7 +3560,8 @@ else fi # Check whether --enable-framework was given. -if test "${enable_framework+set}" = set; then : +if test ${enable_framework+y} +then : enableval=$enable_framework; case $enableval in yes) @@ -3264,7 +3650,7 @@ if test "${enable_framework+set}" = set; then : esac -else +else $as_nop PYTHONFRAMEWORK= PYTHONFRAMEWORKDIR=no-framework @@ -3299,9 +3685,7 @@ fi -cat >>confdefs.h <<_ACEOF -#define _PYTHONFRAMEWORK "${PYTHONFRAMEWORK}" -_ACEOF +printf "%s\n" "#define _PYTHONFRAMEWORK \"${PYTHONFRAMEWORK}\"" >>confdefs.h ##AC_ARG_WITH(dyld, @@ -3310,8 +3694,8 @@ _ACEOF ## # Set name for machine-dependent library files -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MACHDEP" >&5 -$as_echo_n "checking MACHDEP... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking MACHDEP" >&5 +printf %s "checking MACHDEP... " >&6; } if test -z "$MACHDEP" then # avoid using uname for cross builds @@ -3361,8 +3745,8 @@ then '') MACHDEP="unknown";; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$MACHDEP\"" >&5 -$as_echo "\"$MACHDEP\"" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$MACHDEP\"" >&5 +printf "%s\n" "\"$MACHDEP\"" >&6; } if test "$cross_compiling" = yes; then @@ -3411,7 +3795,7 @@ case $ac_sys_system/$ac_sys_release in # also defined. This can be overridden by defining _BSD_SOURCE # As this has a different meaning on Linux, only define it on OpenBSD -$as_echo "#define _BSD_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h ;; OpenBSD/*) @@ -3419,7 +3803,7 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h # also defined. This can be overridden by defining _BSD_SOURCE # As this has a different meaning on Linux, only define it on OpenBSD -$as_echo "#define _BSD_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h ;; # Defining _XOPEN_SOURCE on NetBSD version prior to the introduction of @@ -3477,7 +3861,7 @@ if test $define_xopen_source = yes then # X/Open 7, incorporating POSIX.1-2008 -$as_echo "#define _XOPEN_SOURCE 700" >>confdefs.h +printf "%s\n" "#define _XOPEN_SOURCE 700" >>confdefs.h # On Tru64 Unix 4.0F, defining _XOPEN_SOURCE also requires @@ -3485,11 +3869,11 @@ $as_echo "#define _XOPEN_SOURCE 700" >>confdefs.h # several APIs are not declared. Since this is also needed in some # cases for HP-UX, we define it globally. -$as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h +printf "%s\n" "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h -$as_echo "#define _POSIX_C_SOURCE 200809L" >>confdefs.h +printf "%s\n" "#define _POSIX_C_SOURCE 200809L" >>confdefs.h fi @@ -3504,7 +3888,7 @@ esac if test $define_stdc_a1 = yes then -$as_echo "#define _INCLUDE__STDC_A1_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _INCLUDE__STDC_A1_SOURCE 1" >>confdefs.h fi @@ -3568,8 +3952,8 @@ then then if test -n "`"$found_gcc" --version | grep llvm-gcc`" then - { $as_echo "$as_me:${as_lineno-$LINENO}: Detected llvm-gcc, falling back to clang" >&5 -$as_echo "$as_me: Detected llvm-gcc, falling back to clang" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Detected llvm-gcc, falling back to clang" >&5 +printf "%s\n" "$as_me: Detected llvm-gcc, falling back to clang" >&6;} CC="$found_clang" CXX="$found_clang++" fi @@ -3577,8 +3961,8 @@ $as_echo "$as_me: Detected llvm-gcc, falling back to clang" >&6;} elif test -z "$found_gcc" -a -n "$found_clang" then - { $as_echo "$as_me:${as_lineno-$LINENO}: No GCC found, use CLANG" >&5 -$as_echo "$as_me: No GCC found, use CLANG" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No GCC found, use CLANG" >&5 +printf "%s\n" "$as_me: No GCC found, use CLANG" >&6;} CC="$found_clang" CXX="$found_clang++" @@ -3587,8 +3971,8 @@ $as_echo "$as_me: No GCC found, use CLANG" >&6;} found_clang=`/usr/bin/xcrun -find clang 2>/dev/null` if test -n "${found_clang}" then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using clang from Xcode.app" >&5 -$as_echo "$as_me: Using clang from Xcode.app" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using clang from Xcode.app" >&5 +printf "%s\n" "$as_me: Using clang from Xcode.app" >&6;} CC="${found_clang}" CXX="`/usr/bin/xcrun -find clang++`" @@ -3597,6 +3981,15 @@ $as_echo "$as_me: Using clang from Xcode.app" >&6;} fi fi fi + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3605,11 +3998,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3617,11 +4011,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3632,11 +4030,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3645,11 +4043,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3657,11 +4056,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3672,11 +4075,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3684,8 +4087,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3698,11 +4101,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3710,11 +4114,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3725,11 +4133,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3738,11 +4146,12 @@ 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3751,15 +4160,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3775,18 +4188,18 @@ if test $ac_prog_rejected = yes; then # 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 - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3797,11 +4210,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3809,11 +4223,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3824,11 +4242,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3841,11 +4259,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3853,11 +4272,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3868,11 +4291,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3884,34 +4307,138 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3921,7 +4448,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3929,7 +4456,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3941,9 +4468,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3964,11 +4491,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3985,7 +4513,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -4001,44 +4529,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -4052,15 +4582,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -4069,7 +4599,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -4081,8 +4611,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -4090,10 +4620,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -4101,39 +4631,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -4147,11 +4678,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -4160,31 +4692,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -4194,29 +4727,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -4225,57 +4762,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -4290,94 +4830,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -4391,40 +4981,36 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -4436,10 +5022,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -4449,7 +5036,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -4461,29 +5049,24 @@ fi else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -4495,10 +5078,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -4508,11 +5092,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -4523,11 +5108,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -4535,10 +5121,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -4547,13 +5138,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4581,16 +5172,17 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -4604,10 +5196,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -4616,13 +5213,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4650,19 +5247,20 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-cxx-main=" >&5 -$as_echo_n "checking for --with-cxx-main=... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-cxx-main=" >&5 +printf %s "checking for --with-cxx-main=... " >&6; } # Check whether --with-cxx_main was given. -if test "${with_cxx_main+set}" = set; then : +if test ${with_cxx_main+y} +then : withval=$with_cxx_main; case $withval in @@ -4677,15 +5275,15 @@ if test "${with_cxx_main+set}" = set; then : CXX=$withval fi;; esac -else +else $as_nop with_cxx_main=no MAINCC='$(CC)' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_cxx_main" >&5 -$as_echo "$with_cxx_main" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_cxx_main" >&5 +printf "%s\n" "$with_cxx_main" >&6; } preset_cxx="$CXX" if test -z "$CXX" @@ -4694,11 +5292,12 @@ then gcc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}g++", so it can be a program name with args. set dummy ${ac_tool_prefix}g++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -4708,11 +5307,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4724,11 +5327,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4737,11 +5340,12 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "g++", so it can be a program name with args. set dummy g++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -4751,11 +5355,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4767,11 +5375,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -$as_echo "$ac_pt_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +printf "%s\n" "$ac_pt_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -4779,8 +5387,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -4792,11 +5400,12 @@ fi cc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}c++", so it can be a program name with args. set dummy ${ac_tool_prefix}c++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -4806,11 +5415,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4822,11 +5435,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4835,11 +5448,12 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "c++", so it can be a program name with args. set dummy c++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -4849,11 +5463,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4865,11 +5483,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -$as_echo "$ac_pt_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +printf "%s\n" "$ac_pt_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -4877,8 +5495,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -4890,11 +5508,12 @@ fi clang|*/clang) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang++", so it can be a program name with args. set dummy ${ac_tool_prefix}clang++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -4904,11 +5523,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4920,11 +5543,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4933,11 +5556,12 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "clang++", so it can be a program name with args. set dummy clang++; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -4947,11 +5571,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4963,11 +5591,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -$as_echo "$ac_pt_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +printf "%s\n" "$ac_pt_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -4975,8 +5603,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -4988,11 +5616,12 @@ fi icc|*/icc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}icpc", so it can be a program name with args. set dummy ${ac_tool_prefix}icpc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -5002,11 +5631,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5018,11 +5651,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5031,11 +5664,12 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "icpc", so it can be a program name with args. set dummy icpc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -5045,11 +5679,15 @@ else for as_dir in notfound do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5061,11 +5699,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -$as_echo "$ac_pt_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +printf "%s\n" "$ac_pt_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -5073,8 +5711,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -5096,11 +5734,12 @@ then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5108,11 +5747,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5123,11 +5766,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5140,11 +5783,12 @@ if test -z "$CXX"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -5152,11 +5796,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5167,11 +5815,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5183,8 +5831,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -5198,12 +5846,12 @@ fi fi if test "$preset_cxx" != "$CXX" then - { $as_echo "$as_me:${as_lineno-$LINENO}: + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: By default, distutils will build C++ extension modules with \"$CXX\". If this is not intended, then set CXX on the configure command line. " >&5 -$as_echo "$as_me: +printf "%s\n" "$as_me: By default, distutils will build C++ extension modules with \"$CXX\". If this is not intended, then set CXX on the configure command line. @@ -5214,8 +5862,8 @@ fi MULTIARCH=$($CC --print-multiarch 2>/dev/null) -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 -$as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 +printf %s "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 -$as_echo "$PLATFORM_TRIPLET" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 +printf "%s\n" "$PLATFORM_TRIPLET" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi rm -f conftest.c conftest.out @@ -5385,8 +6033,8 @@ if test x$MULTIARCH != x; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5 -$as_echo_n "checking for -Wl,--no-as-needed... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5 +printf %s "checking for -Wl,--no-as-needed... " >&6; } save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--no-as-needed" @@ -5394,290 +6042,203 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : NO_AS_NEEDED="-Wl,--no-as-needed" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop NO_AS_NEEDED="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" # checks for UNIX variants that set C preprocessor variables - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +ac_header= ac_cache= +for ac_item in $ac_header_c_list do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item fi -else - ac_cv_path_EGREP=$EGREP -fi +done + + + + + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test ${ac_cv_safe_to_define___extensions__+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#include +# define __EXTENSIONS__ 1 + $ac_includes_default int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_safe_to_define___extensions__=yes +else $as_nop + ac_cv_safe_to_define___extensions__=no fi -rm -f conftest* - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if test ${ac_cv_should_define__xopen_source+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_should_define__xopen_source=no + if test $ac_cv_header_wchar_h = yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* + #include + mbstate_t x; +int +main (void) +{ -fi + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : -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 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) + #define _XOPEN_SOURCE 500 + #include + mbstate_t x; int -main () +main (void) { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; + + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_should_define__xopen_source=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } -fi + printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h -fi + printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h -done + printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h + printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h + printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= -fi + printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h - if test "$MINIX" = yes; then + printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h -$as_echo "#define _MINIX 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h - fi + printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h + if test $ac_cv_header_minix_config_h = yes +then : + MINIX=yes + printf "%s\n" "#define _MINIX 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ + printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no +else $as_nop + MINIX= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_safe_to_define___extensions__ = yes +then : + printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + if test $ac_cv_should_define__xopen_source = yes +then : + printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h +fi - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android API level" >&5 -$as_echo_n "checking for the Android API level... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Android API level" >&5 +printf %s "checking for the Android API level... " >&6; } cat >> conftest.c <conftest.out 2>/dev/null; then ANDROID_API_LEVEL=`sed -n -e '/__ANDROID_API__/d' -e 's/^android_api = //p' conftest.out` _arm_arch=`sed -n -e '/__ARM_ARCH/d' -e 's/^arm_arch = //p' conftest.out` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5 -$as_echo "$ANDROID_API_LEVEL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5 +printf "%s\n" "$ANDROID_API_LEVEL" >&6; } if test -z "$ANDROID_API_LEVEL"; then echo 'Fatal: you must define __ANDROID_API__' exit 1 fi -cat >>confdefs.h <<_ACEOF -#define ANDROID_API_LEVEL $ANDROID_API_LEVEL -_ACEOF +printf "%s\n" "#define ANDROID_API_LEVEL $ANDROID_API_LEVEL" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5 -$as_echo_n "checking for the Android arm ABI... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5 -$as_echo "$_arm_arch" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5 +printf %s "checking for the Android arm ABI... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5 +printf "%s\n" "$_arm_arch" >&6; } if test "$_arm_arch" = 7; then BASECFLAGS="${BASECFLAGS} -mfloat-abi=softfp -mfpu=vfpv3-d16" LDFLAGS="${LDFLAGS} -march=armv7-a -Wl,--fix-cortex-a8" fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not Android" >&5 -$as_echo "not Android" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not Android" >&5 +printf "%s\n" "not Android" >&6; } fi rm -f conftest.c conftest.out @@ -5725,11 +6284,12 @@ atheos*|Linux*/1*) esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-suffix" >&5 -$as_echo_n "checking for --with-suffix... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-suffix" >&5 +printf %s "checking for --with-suffix... " >&6; } # Check whether --with-suffix was given. -if test "${with_suffix+set}" = set; then : +if test ${with_suffix+y} +then : withval=$with_suffix; case $withval in no) EXEEXT=;; @@ -5738,26 +6298,26 @@ if test "${with_suffix+set}" = set; then : esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXEEXT" >&5 -$as_echo "$EXEEXT" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EXEEXT" >&5 +printf "%s\n" "$EXEEXT" >&6; } # Test whether we're running on a non-case-sensitive system, in which # case we give a warning if no ext is given -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for case-insensitive build directory" >&5 -$as_echo_n "checking for case-insensitive build directory... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for case-insensitive build directory" >&5 +printf %s "checking for case-insensitive build directory... " >&6; } if test ! -d CaseSensitiveTestDir; then mkdir CaseSensitiveTestDir fi if test -d casesensitivetestdir then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } BUILDEXEEXT=.exe else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } BUILDEXEEXT=$EXEEXT fi rmdir CaseSensitiveTestDir @@ -5770,14 +6330,14 @@ hp*|HP*) esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBRARY" >&5 -$as_echo_n "checking LIBRARY... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LIBRARY" >&5 +printf %s "checking LIBRARY... " >&6; } if test -z "$LIBRARY" then LIBRARY='libpython$(VERSION)$(ABIFLAGS).a' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBRARY" >&5 -$as_echo "$LIBRARY" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBRARY" >&5 +printf "%s\n" "$LIBRARY" >&6; } # LDLIBRARY is the name of the library to link against (as opposed to the # name of the library into which to insert object files). BLDLIBRARY is also @@ -5816,8 +6376,8 @@ LDVERSION="$VERSION" # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable: # python might then depend on the C++ runtime -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5 -$as_echo_n "checking LINKCC... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5 +printf %s "checking LINKCC... " >&6; } if test -z "$LINKCC" then LINKCC='$(PURIFY) $(MAINCC)' @@ -5828,8 +6388,8 @@ then LINKCC=qcc;; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5 -$as_echo "$LINKCC" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5 +printf "%s\n" "$LINKCC" >&6; } # EXPORTSYMS holds the list of exported symbols for AIX. # EXPORTSFROM holds the module name exporting symbols on AIX. @@ -5837,16 +6397,16 @@ EXPORTSYMS= EXPORTSFROM= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5 -$as_echo_n "checking EXPORTSYMS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5 +printf %s "checking EXPORTSYMS... " >&6; } case $ac_sys_system in AIX*) EXPORTSYMS="Modules/python.exp" EXPORTSFROM=. # the main executable ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5 -$as_echo "$EXPORTSYMS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5 +printf "%s\n" "$EXPORTSYMS" >&6; } # GNULD is set to "yes" if the GNU linker is used. If this goes wrong # make sure we default having it set to "no": this is used by @@ -5854,8 +6414,8 @@ $as_echo "$EXPORTSYMS" >&6; } # to linker command lines, and failing to detect GNU ld simply results # in the same bahaviour as before. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } ac_prog=ld if test "$GCC" = yes; then ac_prog=`$CC -print-prog-name=ld` @@ -5866,13 +6426,14 @@ case `"$ac_prog" -V 2>&1 < /dev/null` in *) GNULD=no;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNULD" >&5 -$as_echo "$GNULD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GNULD" >&5 +printf "%s\n" "$GNULD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-shared" >&5 -$as_echo_n "checking for --enable-shared... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-shared" >&5 +printf %s "checking for --enable-shared... " >&6; } # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; fi @@ -5886,13 +6447,14 @@ then enable_shared="no";; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-profiling" >&5 -$as_echo_n "checking for --enable-profiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-profiling" >&5 +printf %s "checking for --enable-profiling... " >&6; } # Check whether --enable-profiling was given. -if test "${enable_profiling+set}" = set; then : +if test ${enable_profiling+y} +then : enableval=$enable_profiling; fi @@ -5903,27 +6465,28 @@ if test "x$enable_profiling" = xyes; then /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -else +else $as_nop enable_profiling=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CC="$ac_save_cc" else enable_profiling=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_profiling" >&5 -$as_echo "$enable_profiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_profiling" >&5 +printf "%s\n" "$enable_profiling" >&6; } if test "x$enable_profiling" = xyes; then BASECFLAGS="-pg $BASECFLAGS" LDFLAGS="-pg $LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDLIBRARY" >&5 -$as_echo_n "checking LDLIBRARY... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDLIBRARY" >&5 +printf %s "checking LDLIBRARY... " >&6; } # MacOSX framework builds need more magic. LDLIBRARY is the dynamic # library that we build, but we do not want to link against it (we @@ -5944,7 +6507,7 @@ fi if test $enable_shared = "yes"; then PY_ENABLE_SHARED=1 -$as_echo "#define Py_ENABLE_SHARED 1" >>confdefs.h +printf "%s\n" "#define Py_ENABLE_SHARED 1" >>confdefs.h case $ac_sys_system in CYGWIN*) @@ -6008,8 +6571,8 @@ if test "$cross_compiling" = yes; then RUNSHARED= fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 -$as_echo "$LDLIBRARY" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 +printf "%s\n" "$LDLIBRARY" >&6; } if test -n "$ac_tool_prefix"; then @@ -6017,11 +6580,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6029,11 +6593,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6044,11 +6612,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6061,11 +6629,12 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6073,11 +6642,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6088,11 +6661,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6104,8 +6677,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6125,11 +6698,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_READELF+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_READELF+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$READELF"; then ac_cv_prog_READELF="$READELF" # Let the user override the test. else @@ -6137,11 +6711,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_READELF="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6152,11 +6730,11 @@ fi fi READELF=$ac_cv_prog_READELF if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +printf "%s\n" "$READELF" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6169,11 +6747,12 @@ if test -z "$READELF"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_READELF+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_READELF+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_READELF"; then ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test. else @@ -6181,11 +6760,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_READELF="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6196,11 +6779,11 @@ fi fi ac_ct_READELF=$ac_cv_prog_ac_ct_READELF if test -n "$ac_ct_READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 -$as_echo "$ac_ct_READELF" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 +printf "%s\n" "$ac_ct_READELF" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6212,8 +6795,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac READELF=$ac_ct_READELF @@ -6238,7 +6821,8 @@ hp*|HP*) INSTALL="${srcdir}/install-sh -c" fi esac -# Find a good install program. We prefer a C program (faster), + + # 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 @@ -6252,20 +6836,25 @@ esac # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -6275,13 +6864,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -6289,12 +6878,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -6310,7 +6899,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -6320,8 +6909,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -6331,25 +6920,31 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done @@ -6360,7 +6955,7 @@ IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then + if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a @@ -6370,8 +6965,8 @@ fi MKDIR_P="$ac_install_sh -d" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } # Not every filesystem supports hard links @@ -6388,60 +6983,63 @@ fi ABIFLAGS="" # Check for --with-pydebug -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pydebug" >&5 -$as_echo_n "checking for --with-pydebug... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-pydebug" >&5 +printf %s "checking for --with-pydebug... " >&6; } # Check whether --with-pydebug was given. -if test "${with_pydebug+set}" = set; then : +if test ${with_pydebug+y} +then : withval=$with_pydebug; if test "$withval" != no then -$as_echo "#define Py_DEBUG 1" >>confdefs.h +printf "%s\n" "#define Py_DEBUG 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; }; Py_DEBUG='true' ABIFLAGS="${ABIFLAGS}d" -else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; Py_DEBUG='false' +else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; }; Py_DEBUG='false' fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Check for --with-trace-refs # --with-trace-refs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-trace-refs" >&5 -$as_echo_n "checking for --with-trace-refs... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-trace-refs" >&5 +printf %s "checking for --with-trace-refs... " >&6; } # Check whether --with-trace-refs was given. -if test "${with_trace_refs+set}" = set; then : +if test ${with_trace_refs+y} +then : withval=$with_trace_refs; -else +else $as_nop with_trace_refs=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_trace_refs" >&5 -$as_echo "$with_trace_refs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_trace_refs" >&5 +printf "%s\n" "$with_trace_refs" >&6; } if test "$with_trace_refs" = "yes" then -$as_echo "#define Py_TRACE_REFS 1" >>confdefs.h +printf "%s\n" "#define Py_TRACE_REFS 1" >>confdefs.h fi # Check for --with-assertions. # This allows enabling assertions without Py_DEBUG. assertions='false' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-assertions" >&5 -$as_echo_n "checking for --with-assertions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-assertions" >&5 +printf %s "checking for --with-assertions... " >&6; } # Check whether --with-assertions was given. -if test "${with_assertions+set}" = set; then : +if test ${with_assertions+y} +then : withval=$with_assertions; if test "$withval" != no then @@ -6450,39 +7048,40 @@ fi fi if test "$assertions" = 'true'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } elif test "$Py_DEBUG" = 'true'; then assertions='true' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: implied by --with-pydebug" >&5 -$as_echo "implied by --with-pydebug" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: implied by --with-pydebug" >&5 +printf "%s\n" "implied by --with-pydebug" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Enable optimization flags Py_OPT='false' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-optimizations" >&5 -$as_echo_n "checking for --enable-optimizations... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-optimizations" >&5 +printf %s "checking for --enable-optimizations... " >&6; } # Check whether --enable-optimizations was given. -if test "${enable_optimizations+set}" = set; then : +if test ${enable_optimizations+y} +then : enableval=$enable_optimizations; if test "$enableval" != no then Py_OPT='true' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; }; else Py_OPT='false' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; }; fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "$Py_OPT" = 'true' ; then @@ -6495,11 +7094,12 @@ if test "$Py_OPT" = 'true' ; then DEF_MAKE_RULE="build_all" case $CC in *gcc*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-semantic-interposition" >&5 -$as_echo_n "checking whether C compiler accepts -fno-semantic-interposition... " >&6; } -if ${ax_cv_check_cflags___fno_semantic_interposition+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-semantic-interposition" >&5 +printf %s "checking whether C compiler accepts -fno-semantic-interposition... " >&6; } +if test ${ax_cv_check_cflags___fno_semantic_interposition+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS -fno-semantic-interposition" @@ -6507,29 +7107,31 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ax_cv_check_cflags___fno_semantic_interposition=yes -else +else $as_nop ax_cv_check_cflags___fno_semantic_interposition=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_semantic_interposition" >&5 -$as_echo "$ax_cv_check_cflags___fno_semantic_interposition" >&6; } -if test "x$ax_cv_check_cflags___fno_semantic_interposition" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_semantic_interposition" >&5 +printf "%s\n" "$ax_cv_check_cflags___fno_semantic_interposition" >&6; } +if test "x$ax_cv_check_cflags___fno_semantic_interposition" = xyes +then : CFLAGS_NODIST="$CFLAGS_NODIST -fno-semantic-interposition" LDFLAGS_NODIST="$LDFLAGS_NODIST -fno-semantic-interposition" -else +else $as_nop : fi @@ -6544,14 +7146,14 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking PROFILE_TASK" >&5 -$as_echo_n "checking PROFILE_TASK... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking PROFILE_TASK" >&5 +printf %s "checking PROFILE_TASK... " >&6; } if test -z "$PROFILE_TASK" then PROFILE_TASK='-m test --pgo --timeout=$(TESTTIMEOUT)' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROFILE_TASK" >&5 -$as_echo "$PROFILE_TASK" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PROFILE_TASK" >&5 +printf "%s\n" "$PROFILE_TASK" >&6; } # Make llvm-relatec checks work on systems where llvm tools are not installed with their # normal names in the default $PATH (ie: Ubuntu). They exist under the @@ -6574,25 +7176,26 @@ then fi # Enable LTO flags -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5 -$as_echo_n "checking for --with-lto... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5 +printf %s "checking for --with-lto... " >&6; } # Check whether --with-lto was given. -if test "${with_lto+set}" = set; then : +if test ${with_lto+y} +then : withval=$with_lto; if test "$withval" != no then Py_LTO='true' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; }; else Py_LTO='false' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; }; fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "$Py_LTO" = 'true' ; then @@ -6602,11 +7205,12 @@ if test "$Py_LTO" = 'true' ; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}llvm-ar", so it can be a program name with args. set dummy ${ac_tool_prefix}llvm-ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_LLVM_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_LLVM_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $LLVM_AR in [\\/]* | ?:[\\/]*) ac_cv_path_LLVM_AR="$LLVM_AR" # Let the user override the test with a path. @@ -6616,11 +7220,15 @@ else for as_dir in ${llvm_path} do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LLVM_AR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_LLVM_AR="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6632,11 +7240,11 @@ esac fi LLVM_AR=$ac_cv_path_LLVM_AR if test -n "$LLVM_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_AR" >&5 -$as_echo "$LLVM_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LLVM_AR" >&5 +printf "%s\n" "$LLVM_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6645,11 +7253,12 @@ if test -z "$ac_cv_path_LLVM_AR"; then ac_pt_LLVM_AR=$LLVM_AR # Extract the first word of "llvm-ar", so it can be a program name with args. set dummy llvm-ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_LLVM_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_LLVM_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_LLVM_AR in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LLVM_AR="$ac_pt_LLVM_AR" # Let the user override the test with a path. @@ -6659,11 +7268,15 @@ else for as_dir in ${llvm_path} do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_LLVM_AR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_LLVM_AR="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6675,11 +7288,11 @@ esac fi ac_pt_LLVM_AR=$ac_cv_path_ac_pt_LLVM_AR if test -n "$ac_pt_LLVM_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_AR" >&5 -$as_echo "$ac_pt_LLVM_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_AR" >&5 +printf "%s\n" "$ac_pt_LLVM_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_LLVM_AR" = x; then @@ -6687,8 +7300,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LLVM_AR=$ac_pt_LLVM_AR @@ -6711,8 +7324,8 @@ fi then LLVM_AR='/usr/bin/xcrun llvm-ar' LLVM_AR_FOUND=found - { $as_echo "$as_me:${as_lineno-$LINENO}: llvm-ar found via xcrun: ${LLVM_AR}" >&5 -$as_echo "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: llvm-ar found via xcrun: ${LLVM_AR}" >&5 +printf "%s\n" "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;} fi fi if test $LLVM_AR_FOUND = not-found @@ -6766,11 +7379,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}llvm-profdata", so it can be a program name with args. set dummy ${ac_tool_prefix}llvm-profdata; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_LLVM_PROFDATA+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_LLVM_PROFDATA+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $LLVM_PROFDATA in [\\/]* | ?:[\\/]*) ac_cv_path_LLVM_PROFDATA="$LLVM_PROFDATA" # Let the user override the test with a path. @@ -6780,11 +7394,15 @@ else for as_dir in ${llvm_path} do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_LLVM_PROFDATA="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6796,11 +7414,11 @@ esac fi LLVM_PROFDATA=$ac_cv_path_LLVM_PROFDATA if test -n "$LLVM_PROFDATA"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5 -$as_echo "$LLVM_PROFDATA" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5 +printf "%s\n" "$LLVM_PROFDATA" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6809,11 +7427,12 @@ if test -z "$ac_cv_path_LLVM_PROFDATA"; then ac_pt_LLVM_PROFDATA=$LLVM_PROFDATA # Extract the first word of "llvm-profdata", so it can be a program name with args. set dummy llvm-profdata; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_LLVM_PROFDATA+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_LLVM_PROFDATA+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_LLVM_PROFDATA in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LLVM_PROFDATA="$ac_pt_LLVM_PROFDATA" # Let the user override the test with a path. @@ -6823,11 +7442,15 @@ else for as_dir in ${llvm_path} do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_LLVM_PROFDATA="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6839,11 +7462,11 @@ esac fi ac_pt_LLVM_PROFDATA=$ac_cv_path_ac_pt_LLVM_PROFDATA if test -n "$ac_pt_LLVM_PROFDATA"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_PROFDATA" >&5 -$as_echo "$ac_pt_LLVM_PROFDATA" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_PROFDATA" >&5 +printf "%s\n" "$ac_pt_LLVM_PROFDATA" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_LLVM_PROFDATA" = x; then @@ -6851,8 +7474,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LLVM_PROFDATA=$ac_pt_LLVM_PROFDATA @@ -6877,8 +7500,8 @@ then # https://apple.stackexchange.com/questions/197053/ LLVM_PROFDATA='/usr/bin/xcrun llvm-profdata' LLVM_PROF_FOUND=found - { $as_echo "$as_me:${as_lineno-$LINENO}: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&5 -$as_echo "$as_me: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&5 +printf "%s\n" "$as_me: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&6;} fi fi LLVM_PROF_ERR=no @@ -7022,19 +7645,20 @@ case $GCC in yes) CFLAGS_NODIST="$CFLAGS_NODIST -std=c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wextra" >&5 -$as_echo_n "checking for -Wextra... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wextra" >&5 +printf %s "checking for -Wextra... " >&6; } ac_save_cc="$CC" CC="$CC -Wextra -Werror" - if ${ac_cv_extra_warnings+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_extra_warnings+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7042,21 +7666,22 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_extra_warnings=yes -else +else $as_nop ac_cv_extra_warnings=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_extra_warnings" >&5 -$as_echo "$ac_cv_extra_warnings" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_extra_warnings" >&5 +printf "%s\n" "$ac_cv_extra_warnings" >&6; } if test $ac_cv_extra_warnings = yes then @@ -7067,20 +7692,21 @@ $as_echo "$ac_cv_extra_warnings" >&6; } # GCC produce warnings for legal Python code. Enable # -fno-strict-aliasing on versions of GCC that support but produce # warnings. See Issue3326 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts and needs -fno-strict-aliasing" >&5 -$as_echo_n "checking whether $CC accepts and needs -fno-strict-aliasing... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts and needs -fno-strict-aliasing" >&5 +printf %s "checking whether $CC accepts and needs -fno-strict-aliasing... " >&6; } ac_save_cc="$CC" CC="$CC -fno-strict-aliasing" save_CFLAGS="$CFLAGS" - if ${ac_cv_no_strict_aliasing+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_no_strict_aliasing+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7088,7 +7714,8 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : CC="$ac_save_cc -fstrict-aliasing" CFLAGS="$CFLAGS -Werror -Wstrict-aliasing" @@ -7097,7 +7724,7 @@ if ac_fn_c_try_compile "$LINENO"; then : void f(int **x) {} int -main () +main (void) { double *x; f((int **) &x); ; @@ -7105,29 +7732,30 @@ double *x; f((int **) &x); } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_no_strict_aliasing=no -else +else $as_nop ac_cv_no_strict_aliasing=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else +else $as_nop ac_cv_no_strict_aliasing=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_no_strict_aliasing" >&5 -$as_echo "$ac_cv_no_strict_aliasing" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_no_strict_aliasing" >&5 +printf "%s\n" "$ac_cv_no_strict_aliasing" >&6; } if test $ac_cv_no_strict_aliasing = yes then BASECFLAGS="$BASECFLAGS -fno-strict-aliasing" @@ -7140,20 +7768,21 @@ $as_echo "$ac_cv_no_strict_aliasing" >&6; } ac_cv_disable_unused_result_warning=no ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused result warning" >&5 -$as_echo_n "checking if we can turn off $CC unused result warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused result warning" >&5 +printf %s "checking if we can turn off $CC unused result warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunused-result -Werror" save_CFLAGS="$CFLAGS" - if ${ac_cv_disable_unused_result_warning+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_disable_unused_result_warning+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7161,22 +7790,23 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_disable_unused_result_warning=yes -else +else $as_nop ac_cv_disable_unused_result_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_result_warning" >&5 -$as_echo "$ac_cv_disable_unused_result_warning" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_result_warning" >&5 +printf "%s\n" "$ac_cv_disable_unused_result_warning" >&6; } ;; esac @@ -7186,19 +7816,20 @@ $as_echo "$ac_cv_disable_unused_result_warning" >&6; } CFLAGS_NODIST="$CFLAGS_NODIST -Wno-unused-result" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused parameter warning" >&5 -$as_echo_n "checking if we can turn off $CC unused parameter warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused parameter warning" >&5 +printf %s "checking if we can turn off $CC unused parameter warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunused-parameter -Werror" - if ${ac_cv_disable_unused_parameter_warning+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_disable_unused_parameter_warning+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7206,40 +7837,42 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_disable_unused_parameter_warning=yes -else +else $as_nop ac_cv_disable_unused_parameter_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_parameter_warning" >&5 -$as_echo "$ac_cv_disable_unused_parameter_warning" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_parameter_warning" >&5 +printf "%s\n" "$ac_cv_disable_unused_parameter_warning" >&6; } if test $ac_cv_disable_unused_parameter_warning = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wno-unused-parameter" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC missing field initializers warning" >&5 -$as_echo_n "checking if we can turn off $CC missing field initializers warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC missing field initializers warning" >&5 +printf %s "checking if we can turn off $CC missing field initializers warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wmissing-field-initializers -Werror" - if ${ac_cv_disable_missing_field_initializers+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_disable_missing_field_initializers+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7247,41 +7880,43 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_disable_missing_field_initializers=yes -else +else $as_nop ac_cv_disable_missing_field_initializers=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_missing_field_initializers" >&5 -$as_echo "$ac_cv_disable_missing_field_initializers" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_missing_field_initializers" >&5 +printf "%s\n" "$ac_cv_disable_missing_field_initializers" >&6; } if test $ac_cv_disable_missing_field_initializers = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wno-missing-field-initializers" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC mixed sign comparison warning" >&5 -$as_echo_n "checking if we can turn on $CC mixed sign comparison warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC mixed sign comparison warning" >&5 +printf %s "checking if we can turn on $CC mixed sign comparison warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wsign-compare" save_CFLAGS="$CFLAGS" - if ${ac_cv_enable_sign_compare_warning+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_enable_sign_compare_warning+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7289,42 +7924,44 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_enable_sign_compare_warning=yes -else +else $as_nop ac_cv_enable_sign_compare_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_sign_compare_warning" >&5 -$as_echo "$ac_cv_enable_sign_compare_warning" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_sign_compare_warning" >&5 +printf "%s\n" "$ac_cv_enable_sign_compare_warning" >&6; } if test $ac_cv_enable_sign_compare_warning = yes then BASECFLAGS="$BASECFLAGS -Wsign-compare" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC unreachable code warning" >&5 -$as_echo_n "checking if we can turn on $CC unreachable code warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC unreachable code warning" >&5 +printf %s "checking if we can turn on $CC unreachable code warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunreachable-code" save_CFLAGS="$CFLAGS" - if ${ac_cv_enable_unreachable_code_warning+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_enable_unreachable_code_warning+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7332,16 +7969,17 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_enable_unreachable_code_warning=yes -else +else $as_nop ac_cv_enable_unreachable_code_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$save_CFLAGS" @@ -7362,22 +8000,23 @@ fi else ac_cv_enable_unreachable_code_warning=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_unreachable_code_warning" >&5 -$as_echo "$ac_cv_enable_unreachable_code_warning" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_unreachable_code_warning" >&5 +printf "%s\n" "$ac_cv_enable_unreachable_code_warning" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC strict-prototypes warning" >&5 -$as_echo_n "checking if we can turn on $CC strict-prototypes warning... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC strict-prototypes warning" >&5 +printf %s "checking if we can turn on $CC strict-prototypes warning... " >&6; } ac_save_cc="$CC" CC="$CC -Werror -Wstrict-prototypes" - if ${ac_cv_enable_enable_strict_prototypes_warning+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_enable_enable_strict_prototypes_warning+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7385,40 +8024,42 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_enable_strict_prototypes_warning=yes -else +else $as_nop ac_cv_enable_strict_prototypes_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_strict_prototypes_warning" >&5 -$as_echo "$ac_cv_enable_strict_prototypes_warning" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_strict_prototypes_warning" >&5 +printf "%s\n" "$ac_cv_enable_strict_prototypes_warning" >&6; } if test $ac_cv_enable_strict_prototypes_warning = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wstrict-prototypes" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can make implicit function declaration an error in $CC" >&5 -$as_echo_n "checking if we can make implicit function declaration an error in $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can make implicit function declaration an error in $CC" >&5 +printf %s "checking if we can make implicit function declaration an error in $CC... " >&6; } ac_save_cc="$CC" CC="$CC -Werror=implicit-function-declaration" - if ${ac_cv_enable_implicit_function_declaration_error+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_enable_implicit_function_declaration_error+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7426,40 +8067,42 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_enable_implicit_function_declaration_error=yes -else +else $as_nop ac_cv_enable_implicit_function_declaration_error=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_implicit_function_declaration_error" >&5 -$as_echo "$ac_cv_enable_implicit_function_declaration_error" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_implicit_function_declaration_error" >&5 +printf "%s\n" "$ac_cv_enable_implicit_function_declaration_error" >&6; } if test $ac_cv_enable_implicit_function_declaration_error = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can use visibility in $CC" >&5 -$as_echo_n "checking if we can use visibility in $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can use visibility in $CC" >&5 +printf %s "checking if we can use visibility in $CC... " >&6; } ac_save_cc="$CC" CC="$CC -fvisibility=hidden" - if ${ac_cv_enable_visibility+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_enable_visibility+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -7467,21 +8110,22 @@ main () } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_enable_visibility=yes -else +else $as_nop ac_cv_enable_visibility=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi CC="$ac_save_cc" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_visibility" >&5 -$as_echo "$ac_cv_enable_visibility" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_visibility" >&5 +printf "%s\n" "$ac_cv_enable_visibility" >&6; } if test $ac_cv_enable_visibility = yes then @@ -7507,8 +8151,8 @@ $as_echo "$ac_cv_enable_visibility" >&6; } # used to be here, but non-Apple gcc doesn't accept them. if test "${CC}" = gcc then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 -$as_echo_n "checking which compiler should be used... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +printf %s "checking which compiler should be used... " >&6; } case "${UNIVERSALSDK}" in */MacOSX10.4u.sdk) # Build using 10.4 SDK, force usage of gcc when the @@ -7518,8 +8162,8 @@ $as_echo_n "checking which compiler should be used... " >&6; } CPP=cpp-4.0 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } fi if test "${enable_universalsdk}" @@ -7594,8 +8238,8 @@ $as_echo "$CC" >&6; } # below to pick either 10.3, 10.4, or 10.5 as the target. # 4. If we are running on OS X 10.2 or earlier, good luck! - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5 -$as_echo_n "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5 +printf %s "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } cur_target_major=`sw_vers -productVersion | \ sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` cur_target_minor=`sw_vers -productVersion | \ @@ -7632,32 +8276,33 @@ $as_echo_n "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" export MACOSX_DEPLOYMENT_TARGET EXPORT_MACOSX_DEPLOYMENT_TARGET='' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5 -$as_echo "$MACOSX_DEPLOYMENT_TARGET" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5 +printf "%s\n" "$MACOSX_DEPLOYMENT_TARGET" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if specified universal architectures work" >&5 -$as_echo_n "checking if specified universal architectures work... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if specified universal architectures work" >&5 +printf %s "checking if specified universal architectures work... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { printf("%d", 42); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "check config.log and use the '--with-universal-archs' option" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext # end of Darwin* tests @@ -7703,14 +8348,16 @@ fi # complain if unaccepted options are passed (e.g. gcc on Mac OS X). # So we have to see first whether pthreads are available without # options before we can check whether -Kpthread improves anything. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads are available without options" >&5 -$as_echo_n "checking whether pthreads are available without options... " >&6; } -if ${ac_cv_pthread_is_default+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads are available without options" >&5 +printf %s "checking whether pthreads are available without options... " >&6; } +if test ${ac_cv_pthread_is_default+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_pthread_is_default=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7728,13 +8375,14 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_pthread_is_default=yes ac_cv_kthread=no ac_cv_pthread=no -else +else $as_nop ac_cv_pthread_is_default=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7744,8 +8392,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_is_default" >&5 -$as_echo "$ac_cv_pthread_is_default" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_is_default" >&5 +printf "%s\n" "$ac_cv_pthread_is_default" >&6; } if test $ac_cv_pthread_is_default = yes @@ -7757,16 +8405,18 @@ else # Some compilers won't report that they do not support -Kpthread, # so we need to run a program to see whether it really made the # function available. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kpthread" >&5 -$as_echo_n "checking whether $CC accepts -Kpthread... " >&6; } -if ${ac_cv_kpthread+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kpthread" >&5 +printf %s "checking whether $CC accepts -Kpthread... " >&6; } +if test ${ac_cv_kpthread+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cc="$CC" CC="$CC -Kpthread" -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : ac_cv_kpthread=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7784,9 +8434,10 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_kpthread=yes -else +else $as_nop ac_cv_kpthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7796,8 +8447,8 @@ fi CC="$ac_save_cc" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kpthread" >&5 -$as_echo "$ac_cv_kpthread" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kpthread" >&5 +printf "%s\n" "$ac_cv_kpthread" >&6; } fi if test $ac_cv_kpthread = no -a $ac_cv_pthread_is_default = no @@ -7807,16 +8458,18 @@ then # Some compilers won't report that they do not support -Kthread, # so we need to run a program to see whether it really made the # function available. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kthread" >&5 -$as_echo_n "checking whether $CC accepts -Kthread... " >&6; } -if ${ac_cv_kthread+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kthread" >&5 +printf %s "checking whether $CC accepts -Kthread... " >&6; } +if test ${ac_cv_kthread+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cc="$CC" CC="$CC -Kthread" -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : ac_cv_kthread=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7834,9 +8487,10 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_kthread=yes -else +else $as_nop ac_cv_kthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7846,8 +8500,8 @@ fi CC="$ac_save_cc" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kthread" >&5 -$as_echo "$ac_cv_kthread" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kthread" >&5 +printf "%s\n" "$ac_cv_kthread" >&6; } fi if test $ac_cv_kthread = no -a $ac_cv_pthread_is_default = no @@ -7857,16 +8511,18 @@ then # Some compilers won't report that they do not support -pthread, # so we need to run a program to see whether it really made the # function available. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -pthread" >&5 -$as_echo_n "checking whether $CC accepts -pthread... " >&6; } -if ${ac_cv_pthread+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -pthread" >&5 +printf %s "checking whether $CC accepts -pthread... " >&6; } +if test ${ac_cv_pthread+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cc="$CC" CC="$CC -pthread" -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : ac_cv_pthread=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7884,9 +8540,10 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_pthread=yes -else +else $as_nop ac_cv_pthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7896,8 +8553,8 @@ fi CC="$ac_save_cc" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread" >&5 -$as_echo "$ac_cv_pthread" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread" >&5 +printf "%s\n" "$ac_cv_pthread" >&6; } fi # If we have set a CC compiler flag for thread support then @@ -7905,8 +8562,8 @@ fi ac_cv_cxx_thread=no if test ! -z "$CXX" then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX also accepts flags for thread support" >&5 -$as_echo_n "checking whether $CXX also accepts flags for thread support... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX also accepts flags for thread support" >&5 +printf %s "checking whether $CXX also accepts flags for thread support... " >&6; } ac_save_cxx="$CXX" if test "$ac_cv_kpthread" = "yes" @@ -7936,358 +8593,702 @@ then fi rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_thread" >&5 -$as_echo "$ac_cv_cxx_thread" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_thread" >&5 +printf "%s\n" "$ac_cv_cxx_thread" >&6; } fi CXX="$ac_save_cxx" # checks for header files -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 +# Autoupdate added the next two lines to ensure that your configure +# script's behavior did not change. They are probably safe to remove. + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include + ac_cv_path_EGREP=$EGREP +fi -int -main () -{ + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +ac_fn_c_check_header_compile "$LINENO" "asm/types.h" "ac_cv_header_asm_types_h" "$ac_includes_default" +if test "x$ac_cv_header_asm_types_h" = xyes +then : + printf "%s\n" "#define HAVE_ASM_TYPES_H 1" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_fn_c_check_header_compile "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default" +if test "x$ac_cv_header_crypt_h" = xyes +then : + printf "%s\n" "#define HAVE_CRYPT_H 1" >>confdefs.h -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include +fi +ac_fn_c_check_header_compile "$LINENO" "conio.h" "ac_cv_header_conio_h" "$ac_includes_default" +if test "x$ac_cv_header_conio_h" = xyes +then : + printf "%s\n" "#define HAVE_CONIO_H 1" >>confdefs.h -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : +fi +ac_fn_c_check_header_compile "$LINENO" "direct.h" "ac_cv_header_direct_h" "$ac_includes_default" +if test "x$ac_cv_header_direct_h" = xyes +then : + printf "%s\n" "#define HAVE_DIRECT_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f conftest* +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_errno_h" = xyes +then : + printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include +fi +ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" +if test "x$ac_cv_header_fcntl_h" = xyes +then : + printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : +fi +ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" +if test "x$ac_cv_header_grp_h" = xyes +then : + printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f conftest* +ac_fn_c_check_header_compile "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" +if test "x$ac_cv_header_ieeefp_h" = xyes +then : + printf "%s\n" "#define HAVE_IEEEFP_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "io.h" "ac_cv_header_io_h" "$ac_includes_default" +if test "x$ac_cv_header_io_h" = xyes +then : + printf "%s\n" "#define HAVE_IO_H 1" >>confdefs.h -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 confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif +fi +ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" +if test "x$ac_cv_header_langinfo_h" = xyes +then : + printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h -#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)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : +fi +ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" +if test "x$ac_cv_header_libintl_h" = xyes +then : + printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_fn_c_check_header_compile "$LINENO" "process.h" "ac_cv_header_process_h" "$ac_includes_default" +if test "x$ac_cv_header_process_h" = xyes +then : + printf "%s\n" "#define HAVE_PROCESS_H 1" >>confdefs.h + fi +ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default" +if test "x$ac_cv_header_sched_h" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then +ac_fn_c_check_header_compile "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" +if test "x$ac_cv_header_shadow_h" = xyes +then : + printf "%s\n" "#define HAVE_SHADOW_H 1" >>confdefs.h -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" +if test "x$ac_cv_header_signal_h" = xyes +then : + printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" +if test "x$ac_cv_header_stropts_h" = xyes +then : + printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h -for ac_header in asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \ -fcntl.h grp.h \ -ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \ -sched.h shadow.h signal.h stropts.h termios.h \ -utime.h \ -poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ -sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ -sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \ -sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ -sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \ -sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \ -libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ -linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \ -sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h \ -sys/mman.h sys/eventfd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" +if test "x$ac_cv_header_termios_h" = xyes +then : + printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" +if test "x$ac_cv_header_utime_h" = xyes +then : + printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h -done +fi +ac_fn_c_check_header_compile "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_poll_h" = xyes +then : + printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if eval \${$as_ac_Header+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> +fi +ac_fn_c_check_header_compile "$LINENO" "sys/devpoll.h" "ac_cv_header_sys_devpoll_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_devpoll_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_DEVPOLL_H 1" >>confdefs.h -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_fn_c_check_header_compile "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_epoll_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h + fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_poll_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_POLL_H 1" >>confdefs.h -ac_header_dirent=$ac_hdr; break fi +ac_fn_c_check_header_compile "$LINENO" "sys/audioio.h" "ac_cv_header_sys_audioio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_audioio_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_AUDIOIO_H 1" >>confdefs.h -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +fi +ac_fn_c_check_header_compile "$LINENO" "sys/xattr.h" "ac_cv_header_sys_xattr_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_xattr_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_XATTR_H 1" >>confdefs.h -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : - break +ac_fn_c_check_header_compile "$LINENO" "sys/bsdtty.h" "ac_cv_header_sys_bsdtty_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_bsdtty_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_BSDTTY_H 1" >>confdefs.h + fi -done -if ${ac_cv_search_opendir+:} false; then : +ac_fn_c_check_header_compile "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_event_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_EVENT_H 1" >>confdefs.h -else - ac_cv_search_opendir=no fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +ac_fn_c_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" +ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/kern_control.h" "ac_cv_header_sys_kern_control_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_kern_control_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_KERN_CONTROL_H 1" >>confdefs.h -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +fi +ac_fn_c_check_header_compile "$LINENO" "sys/loadavg.h" "ac_cv_header_sys_loadavg_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_loadavg_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_LOADAVG_H 1" >>confdefs.h -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); +fi +ac_fn_c_check_header_compile "$LINENO" "sys/lock.h" "ac_cv_header_sys_lock_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_lock_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_LOCK_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MKDEV_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/modem.h" "ac_cv_header_sys_modem_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_modem_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MODEM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_random_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_select_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sendfile.h" "ac_cv_header_sys_sendfile_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sendfile_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SENDFILE_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_statvfs_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_STATVFS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_stat_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/syscall.h" "ac_cv_header_sys_syscall_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_syscall_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SYSCALL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sys_domain.h" "ac_cv_header_sys_sys_domain_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sys_domain_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SYS_DOMAIN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/termio.h" "ac_cv_header_sys_termio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_termio_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TERMIO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_times_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_uio_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/un.h" "ac_cv_header_sys_un_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_un_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_UN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_utsname_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_UTSNAME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_wait_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default" +if test "x$ac_cv_header_pty_h" = xyes +then : + printf "%s\n" "#define HAVE_PTY_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "libutil.h" "ac_cv_header_libutil_h" "$ac_includes_default" +if test "x$ac_cv_header_libutil_h" = xyes +then : + printf "%s\n" "#define HAVE_LIBUTIL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_resource_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netpacket/packet.h" "ac_cv_header_netpacket_packet_h" "$ac_includes_default" +if test "x$ac_cv_header_netpacket_packet_h" = xyes +then : + printf "%s\n" "#define HAVE_NETPACKET_PACKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sysexits.h" "ac_cv_header_sysexits_h" "$ac_includes_default" +if test "x$ac_cv_header_sysexits_h" = xyes +then : + printf "%s\n" "#define HAVE_SYSEXITS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "bluetooth.h" "ac_cv_header_bluetooth_h" "$ac_includes_default" +if test "x$ac_cv_header_bluetooth_h" = xyes +then : + printf "%s\n" "#define HAVE_BLUETOOTH_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/tipc.h" "ac_cv_header_linux_tipc_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_tipc_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_TIPC_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/random.h" "ac_cv_header_linux_random_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_random_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_RANDOM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" +if test "x$ac_cv_header_spawn_h" = xyes +then : + printf "%s\n" "#define HAVE_SPAWN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default" +if test "x$ac_cv_header_util_h" = xyes +then : + printf "%s\n" "#define HAVE_UTIL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" +if test "x$ac_cv_header_alloca_h" = xyes +then : + printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "endian.h" "ac_cv_header_endian_h" "$ac_includes_default" +if test "x$ac_cv_header_endian_h" = xyes +then : + printf "%s\n" "#define HAVE_ENDIAN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/endian.h" "ac_cv_header_sys_endian_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_endian_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_ENDIAN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/memfd.h" "ac_cv_header_linux_memfd_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_memfd_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_MEMFD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/wait.h" "ac_cv_header_linux_wait_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_wait_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_WAIT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/memfd.h" "ac_cv_header_sys_memfd_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_memfd_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MEMFD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/eventfd.h" "ac_cv_header_sys_eventfd_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_eventfd_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_EVENTFD_H 1" >>confdefs.h + +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +printf %s "checking for $ac_hdr that defines DIR... " >&6; } +if eval test \${$as_ac_Header+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> + +int +main (void) +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$as_ac_Header=yes" +else $as_nop + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +printf %s "checking for library containing opendir... " >&6; } +if test ${ac_cv_search_opendir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char opendir (); int -main () +main (void) { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' x; do +for ac_lib in '' dir +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : + if test ${ac_cv_search_opendir+y} +then : break fi done -if ${ac_cv_search_opendir+:} false; then : +if test ${ac_cv_search_opendir+y} +then : -else +else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 -$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } -if ${ac_cv_header_sys_types_h_makedev+:} false; then : - $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +printf %s "checking for library containing opendir... " >&6; } +if test ${ac_cv_search_opendir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char opendir (); int -main () +main (void) { -return makedev(0, 0); +return opendir (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_header_sys_types_h_makedev=yes -else - ac_cv_header_sys_types_h_makedev=no +for ac_lib in '' x +do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext + if test ${ac_cv_search_opendir+y} +then : + break fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 -$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } - -if test $ac_cv_header_sys_types_h_makedev = no; then -ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : +done +if test ${ac_cv_search_opendir+y} +then : -$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h +else $as_nop + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +printf "%s\n" "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no +then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi +fi - if test $ac_cv_header_sys_mkdev_h = no; then - ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes +then : -$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h +printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi +if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes +then : + +printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + +fi - fi fi @@ -8295,24 +9296,17 @@ fi # http://permalink.gmane.org/gmane.linux.bluez.kernel/22294 SAVE_CFLAGS=$CFLAGS CFLAGS="-std=c99 $CFLAGS" -for ac_header in bluetooth/bluetooth.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default" -if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_BLUETOOTH_BLUETOOTH_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default" +if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes +then : + printf "%s\n" "#define HAVE_BLUETOOTH_BLUETOOTH_H 1" >>confdefs.h fi -done - CFLAGS=$SAVE_CFLAGS # On Darwin (OS X) net/if.h requires sys/socket.h to be imported first. -for ac_header in net/if.h -do : - ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include +ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include #ifdef STDC_HEADERS # include # include @@ -8326,20 +9320,15 @@ do : #endif " -if test "x$ac_cv_header_net_if_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NET_IF_H 1 -_ACEOF +if test "x$ac_cv_header_net_if_h" = xyes +then : + printf "%s\n" "#define HAVE_NET_IF_H 1" >>confdefs.h fi -done - # On Linux, netlink.h requires asm/types.h -for ac_header in linux/netlink.h -do : - ac_fn_c_check_header_compile "$LINENO" "linux/netlink.h" "ac_cv_header_linux_netlink_h" " +ac_fn_c_check_header_compile "$LINENO" "linux/netlink.h" "ac_cv_header_linux_netlink_h" " #ifdef HAVE_ASM_TYPES_H #include #endif @@ -8348,20 +9337,15 @@ do : #endif " -if test "x$ac_cv_header_linux_netlink_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LINUX_NETLINK_H 1 -_ACEOF +if test "x$ac_cv_header_linux_netlink_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_NETLINK_H 1" >>confdefs.h fi -done - # On Linux, qrtr.h requires asm/types.h -for ac_header in linux/qrtr.h -do : - ac_fn_c_check_header_compile "$LINENO" "linux/qrtr.h" "ac_cv_header_linux_qrtr_h" " +ac_fn_c_check_header_compile "$LINENO" "linux/qrtr.h" "ac_cv_header_linux_qrtr_h" " #ifdef HAVE_ASM_TYPES_H #include #endif @@ -8370,80 +9354,101 @@ do : #endif " -if test "x$ac_cv_header_linux_qrtr_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LINUX_QRTR_H 1 -_ACEOF +if test "x$ac_cv_header_linux_qrtr_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_QRTR_H 1" >>confdefs.h fi -done - -for ac_header in linux/vm_sockets.h -do : - ac_fn_c_check_header_compile "$LINENO" "linux/vm_sockets.h" "ac_cv_header_linux_vm_sockets_h" " +ac_fn_c_check_header_compile "$LINENO" "linux/vm_sockets.h" "ac_cv_header_linux_vm_sockets_h" " #ifdef HAVE_SYS_SOCKET_H #include #endif " -if test "x$ac_cv_header_linux_vm_sockets_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LINUX_VM_SOCKETS_H 1 -_ACEOF +if test "x$ac_cv_header_linux_vm_sockets_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_VM_SOCKETS_H 1" >>confdefs.h fi -done - # On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h -for ac_header in linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " +ac_fn_c_check_header_compile "$LINENO" "linux/can.h" "ac_cv_header_linux_can_h" " #ifdef HAVE_SYS_SOCKET_H #include #endif " -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +if test "x$ac_cv_header_linux_can_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_CAN_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "linux/can/bcm.h" "ac_cv_header_linux_can_bcm_h" " +#ifdef HAVE_SYS_SOCKET_H +#include +#endif -done +" +if test "x$ac_cv_header_linux_can_bcm_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_CAN_BCM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/can/j1939.h" "ac_cv_header_linux_can_j1939_h" " +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +" +if test "x$ac_cv_header_linux_can_j1939_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_CAN_J1939_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "linux/can/raw.h" "ac_cv_header_linux_can_raw_h" " +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +" +if test "x$ac_cv_header_linux_can_raw_h" = xyes +then : + printf "%s\n" "#define HAVE_LINUX_CAN_RAW_H 1" >>confdefs.h + +fi # checks for typedefs was_it_defined=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_t in time.h" >&5 -$as_echo_n "checking for clock_t in time.h... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_t in time.h" >&5 +printf %s "checking for clock_t in time.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "clock_t" >/dev/null 2>&1; then : + $EGREP "clock_t" >/dev/null 2>&1 +then : was_it_defined=yes -else +else $as_nop -$as_echo "#define clock_t long" >>confdefs.h +printf "%s\n" "#define clock_t long" >>confdefs.h fi -rm -f conftest* +rm -rf conftest* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 -$as_echo "$was_it_defined" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 +printf "%s\n" "$was_it_defined" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for makedev" >&5 -$as_echo_n "checking for makedev... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for makedev" >&5 +printf %s "checking for makedev... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8456,7 +9461,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { makedev(0, 0) @@ -8465,24 +9470,25 @@ main () } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_has_makedev=yes -else +else $as_nop ac_cv_has_makedev=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_makedev" >&5 -$as_echo "$ac_cv_has_makedev" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_makedev" >&5 +printf "%s\n" "$ac_cv_has_makedev" >&6; } if test "$ac_cv_has_makedev" = "yes"; then -$as_echo "#define HAVE_MAKEDEV 1" >>confdefs.h +printf "%s\n" "#define HAVE_MAKEDEV 1" >>confdefs.h fi # byte swapping -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for le64toh" >&5 -$as_echo_n "checking for le64toh... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for le64toh" >&5 +printf %s "checking for le64toh... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8493,7 +9499,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { le64toh(1) @@ -8502,18 +9508,19 @@ main () } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_has_le64toh=yes -else +else $as_nop ac_cv_has_le64toh=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_le64toh" >&5 -$as_echo "$ac_cv_has_le64toh" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_le64toh" >&5 +printf "%s\n" "$ac_cv_has_le64toh" >&6; } if test "$ac_cv_has_le64toh" = "yes"; then -$as_echo "#define HAVE_HTOLE64 1" >>confdefs.h +printf "%s\n" "#define HAVE_HTOLE64 1" >>confdefs.h fi @@ -8529,15 +9536,15 @@ if test "$use_lfs" = "yes"; then case $ac_sys_system/$ac_sys_release in AIX*) -$as_echo "#define _LARGE_FILES 1" >>confdefs.h +printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; esac -$as_echo "#define _LARGEFILE_SOURCE 1" >>confdefs.h +printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h -$as_echo "#define _FILE_OFFSET_BITS 64" >>confdefs.h +printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h fi @@ -8550,96 +9557,121 @@ EOF # Type availability checks ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" -if test "x$ac_cv_type_mode_t" = xyes; then : +if test "x$ac_cv_type_mode_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define mode_t int -_ACEOF +printf "%s\n" "#define mode_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = xyes; then : +if test "x$ac_cv_type_off_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define off_t long int -_ACEOF +printf "%s\n" "#define off_t long int" >>confdefs.h fi -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE void -_ACEOF + +printf "%s\n" "#define RETSIGTYPE void" >>confdefs.h ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -$as_echo_n "checking for uid_t in sys/types.h... " >&6; } -if ${ac_cv_type_uid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +printf %s "checking for uid_t in sys/types.h... " >&6; } +if test ${ac_cv_type_uid_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1; then : + $EGREP "uid_t" >/dev/null 2>&1 +then : ac_cv_type_uid_t=yes -else +else $as_nop ac_cv_type_uid_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -$as_echo "$ac_cv_type_uid_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +printf "%s\n" "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then -$as_echo "#define uid_t int" >>confdefs.h +printf "%s\n" "#define uid_t int" >>confdefs.h -$as_echo "#define gid_t int" >>confdefs.h +printf "%s\n" "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -$as_echo "#define HAVE_SSIZE_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_SSIZE_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "__uint128_t" "ac_cv_type___uint128_t" "$ac_includes_default" -if test "x$ac_cv_type___uint128_t" = xyes; then : +if test "x$ac_cv_type___uint128_t" = xyes +then : -$as_echo "#define HAVE_GCC_UINT128_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_GCC_UINT128_T 1" >>confdefs.h fi @@ -8650,17 +9682,19 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if ${ac_cv_sizeof_int+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +printf %s "checking size of int... " >&6; } +if test ${ac_cv_sizeof_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else @@ -8669,31 +9703,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +printf "%s\n" "$ac_cv_sizeof_int" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF +printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if ${ac_cv_sizeof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +printf %s "checking size of long... " >&6; } +if test ${ac_cv_sizeof_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else @@ -8702,33 +9736,30 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 -$as_echo_n "checking alignment of long... " >&6; } -if ${ac_cv_alignof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 +printf %s "checking alignment of long... " >&6; } +if test ${ac_cv_alignof_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; long y; } ac__type_alignof_;"; then : +typedef struct { char x; long y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of long See \`config.log' for more details" "$LINENO" 5; } else @@ -8737,31 +9768,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 -$as_echo "$ac_cv_alignof_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 +printf "%s\n" "$ac_cv_alignof_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_LONG $ac_cv_alignof_long -_ACEOF +printf "%s\n" "#define ALIGNOF_LONG $ac_cv_alignof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +printf %s "checking size of long long... " >&6; } +if test ${ac_cv_sizeof_long_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else @@ -8770,31 +9801,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 -$as_echo_n "checking size of void *... " >&6; } -if ${ac_cv_sizeof_void_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +printf %s "checking size of void *... " >&6; } +if test ${ac_cv_sizeof_void_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_void_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else @@ -8803,31 +9834,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 -$as_echo "$ac_cv_sizeof_void_p" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +printf "%s\n" "$ac_cv_sizeof_void_p" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOID_P $ac_cv_sizeof_void_p -_ACEOF +printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if ${ac_cv_sizeof_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +printf %s "checking size of short... " >&6; } +if test ${ac_cv_sizeof_short+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else @@ -8836,31 +9867,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +printf "%s\n" "$ac_cv_sizeof_short" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF +printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 -$as_echo_n "checking size of float... " >&6; } -if ${ac_cv_sizeof_float+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 +printf %s "checking size of float... " >&6; } +if test ${ac_cv_sizeof_float+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_float" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else @@ -8869,31 +9900,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 -$as_echo "$ac_cv_sizeof_float" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 +printf "%s\n" "$ac_cv_sizeof_float" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_FLOAT $ac_cv_sizeof_float -_ACEOF +printf "%s\n" "#define SIZEOF_FLOAT $ac_cv_sizeof_float" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 -$as_echo_n "checking size of double... " >&6; } -if ${ac_cv_sizeof_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +printf %s "checking size of double... " >&6; } +if test ${ac_cv_sizeof_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else @@ -8902,31 +9933,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 -$as_echo "$ac_cv_sizeof_double" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +printf "%s\n" "$ac_cv_sizeof_double" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double -_ACEOF +printf "%s\n" "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of fpos_t" >&5 -$as_echo_n "checking size of fpos_t... " >&6; } -if ${ac_cv_sizeof_fpos_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (fpos_t))" "ac_cv_sizeof_fpos_t" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of fpos_t" >&5 +printf %s "checking size of fpos_t... " >&6; } +if test ${ac_cv_sizeof_fpos_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (fpos_t))" "ac_cv_sizeof_fpos_t" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_fpos_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (fpos_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -8935,31 +9966,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_fpos_t" >&5 -$as_echo "$ac_cv_sizeof_fpos_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_fpos_t" >&5 +printf "%s\n" "$ac_cv_sizeof_fpos_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_FPOS_T $ac_cv_sizeof_fpos_t -_ACEOF +printf "%s\n" "#define SIZEOF_FPOS_T $ac_cv_sizeof_fpos_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -$as_echo_n "checking size of size_t... " >&6; } -if ${ac_cv_sizeof_size_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +printf %s "checking size of size_t... " >&6; } +if test ${ac_cv_sizeof_size_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_size_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -8968,33 +9999,30 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -$as_echo "$ac_cv_sizeof_size_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t -_ACEOF +printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of size_t" >&5 -$as_echo_n "checking alignment of size_t... " >&6; } -if ${ac_cv_alignof_size_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of size_t" >&5 +printf %s "checking alignment of size_t... " >&6; } +if test ${ac_cv_alignof_size_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_size_t" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; size_t y; } ac__type_alignof_;"; then : +typedef struct { char x; size_t y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_size_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of size_t See \`config.log' for more details" "$LINENO" 5; } else @@ -9003,31 +10031,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_size_t" >&5 -$as_echo "$ac_cv_alignof_size_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_size_t" >&5 +printf "%s\n" "$ac_cv_alignof_size_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_SIZE_T $ac_cv_alignof_size_t -_ACEOF +printf "%s\n" "#define ALIGNOF_SIZE_T $ac_cv_alignof_size_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pid_t" >&5 -$as_echo_n "checking size of pid_t... " >&6; } -if ${ac_cv_sizeof_pid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pid_t))" "ac_cv_sizeof_pid_t" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pid_t" >&5 +printf %s "checking size of pid_t... " >&6; } +if test ${ac_cv_sizeof_pid_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pid_t))" "ac_cv_sizeof_pid_t" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_pid_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pid_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9036,31 +10064,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pid_t" >&5 -$as_echo "$ac_cv_sizeof_pid_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pid_t" >&5 +printf "%s\n" "$ac_cv_sizeof_pid_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_PID_T $ac_cv_sizeof_pid_t -_ACEOF +printf "%s\n" "#define SIZEOF_PID_T $ac_cv_sizeof_pid_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uintptr_t" >&5 -$as_echo_n "checking size of uintptr_t... " >&6; } -if ${ac_cv_sizeof_uintptr_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintptr_t))" "ac_cv_sizeof_uintptr_t" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of uintptr_t" >&5 +printf %s "checking size of uintptr_t... " >&6; } +if test ${ac_cv_sizeof_uintptr_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintptr_t))" "ac_cv_sizeof_uintptr_t" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_uintptr_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (uintptr_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9069,23 +10097,22 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintptr_t" >&5 -$as_echo "$ac_cv_sizeof_uintptr_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintptr_t" >&5 +printf "%s\n" "$ac_cv_sizeof_uintptr_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t -_ACEOF +printf "%s\n" "#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 -$as_echo_n "checking for long double... " >&6; } -if ${ac_cv_type_long_double+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 +printf %s "checking for long double... " >&6; } +if test ${ac_cv_type_long_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "$GCC" = yes; then ac_cv_type_long_double=yes else @@ -9095,7 +10122,7 @@ else not support it. */ long double foo = 0.0L; int -main () +main (void) { static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ sizeof (double) <= sizeof (long double))]; @@ -9106,19 +10133,20 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_type_long_double=yes -else +else $as_nop ac_cv_type_long_double=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 -$as_echo "$ac_cv_type_long_double" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 +printf "%s\n" "$ac_cv_type_long_double" >&6; } if test $ac_cv_type_long_double = yes; then -$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h +printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi @@ -9126,17 +10154,19 @@ $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 -$as_echo_n "checking size of long double... " >&6; } -if ${ac_cv_sizeof_long_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 +printf %s "checking size of long double... " >&6; } +if test ${ac_cv_sizeof_long_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else @@ -9145,14 +10175,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 -$as_echo "$ac_cv_sizeof_long_double" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 +printf "%s\n" "$ac_cv_sizeof_long_double" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double -_ACEOF +printf "%s\n" "#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double" >>confdefs.h @@ -9160,17 +10188,19 @@ _ACEOF # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5 -$as_echo_n "checking size of _Bool... " >&6; } -if ${ac_cv_sizeof__Bool+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5 +printf %s "checking size of _Bool... " >&6; } +if test ${ac_cv_sizeof__Bool+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type__Bool" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (_Bool) See \`config.log' for more details" "$LINENO" 5; } else @@ -9179,14 +10209,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5 -$as_echo "$ac_cv_sizeof__Bool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5 +printf "%s\n" "$ac_cv_sizeof__Bool" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF__BOOL $ac_cv_sizeof__Bool -_ACEOF +printf "%s\n" "#define SIZEOF__BOOL $ac_cv_sizeof__Bool" >>confdefs.h @@ -9194,22 +10222,24 @@ _ACEOF # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 -$as_echo_n "checking size of off_t... " >&6; } -if ${ac_cv_sizeof_off_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +printf %s "checking size of off_t... " >&6; } +if test ${ac_cv_sizeof_off_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" " #ifdef HAVE_SYS_TYPES_H #include #endif -"; then : +" +then : -else +else $as_nop if test "$ac_cv_type_off_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (off_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9218,40 +10248,39 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 -$as_echo "$ac_cv_sizeof_off_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +printf "%s\n" "$ac_cv_sizeof_off_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_OFF_T $ac_cv_sizeof_off_t -_ACEOF +printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable large file support" >&5 -$as_echo_n "checking whether to enable large file support... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable large file support" >&5 +printf %s "checking whether to enable large file support... " >&6; } if test "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \ "$ac_cv_sizeof_long_long" -ge "$ac_cv_sizeof_off_t"; then -$as_echo "#define HAVE_LARGEFILE_SUPPORT 1" >>confdefs.h +printf "%s\n" "#define HAVE_LARGEFILE_SUPPORT 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 -$as_echo_n "checking size of time_t... " >&6; } -if ${ac_cv_sizeof_time_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +printf %s "checking size of time_t... " >&6; } +if test ${ac_cv_sizeof_time_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " #ifdef HAVE_SYS_TYPES_H #include @@ -9260,12 +10289,13 @@ else #include #endif -"; then : +" +then : -else +else $as_nop if test "$ac_cv_type_time_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9274,14 +10304,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 -$as_echo "$ac_cv_sizeof_time_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +printf "%s\n" "$ac_cv_sizeof_time_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_TIME_T $ac_cv_sizeof_time_t -_ACEOF +printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h @@ -9295,15 +10323,15 @@ elif test "$ac_cv_pthread" = "yes" then CC="$CC -pthread" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_t" >&5 -$as_echo_n "checking for pthread_t... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_t" >&5 +printf %s "checking for pthread_t... " >&6; } have_pthread_t=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { pthread_t x; x = *(pthread_t*)0; ; @@ -9311,33 +10339,36 @@ pthread_t x; x = *(pthread_t*)0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : have_pthread_t=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pthread_t" >&5 -$as_echo "$have_pthread_t" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_pthread_t" >&5 +printf "%s\n" "$have_pthread_t" >&6; } if test "$have_pthread_t" = yes ; then # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 -$as_echo_n "checking size of pthread_t... " >&6; } -if ${ac_cv_sizeof_pthread_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 +printf %s "checking size of pthread_t... " >&6; } +if test ${ac_cv_sizeof_pthread_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" " #ifdef HAVE_PTHREAD_H #include #endif -"; then : +" +then : -else +else $as_nop if test "$ac_cv_type_pthread_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pthread_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9346,14 +10377,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 -$as_echo "$ac_cv_sizeof_pthread_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 +printf "%s\n" "$ac_cv_sizeof_pthread_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t -_ACEOF +printf "%s\n" "#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t" >>confdefs.h fi @@ -9364,18 +10393,20 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_key_t" >&5 -$as_echo_n "checking size of pthread_key_t... " >&6; } -if ${ac_cv_sizeof_pthread_key_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_key_t" >&5 +printf %s "checking size of pthread_key_t... " >&6; } +if test ${ac_cv_sizeof_pthread_key_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_key_t))" "ac_cv_sizeof_pthread_key_t" "#include -"; then : +" +then : -else +else $as_nop if test "$ac_cv_type_pthread_key_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pthread_key_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9384,47 +10415,46 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_key_t" >&5 -$as_echo "$ac_cv_sizeof_pthread_key_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_key_t" >&5 +printf "%s\n" "$ac_cv_sizeof_pthread_key_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_PTHREAD_KEY_T $ac_cv_sizeof_pthread_key_t -_ACEOF +printf "%s\n" "#define SIZEOF_PTHREAD_KEY_T $ac_cv_sizeof_pthread_key_t" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_key_t is compatible with int" >&5 -$as_echo_n "checking whether pthread_key_t is compatible with int... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_key_t is compatible with int" >&5 +printf %s "checking whether pthread_key_t is compatible with int... " >&6; } if test "$ac_cv_sizeof_pthread_key_t" -eq "$ac_cv_sizeof_int" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { pthread_key_t k; k * 1; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_pthread_key_t_is_arithmetic_type=yes -else +else $as_nop ac_pthread_key_t_is_arithmetic_type=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pthread_key_t_is_arithmetic_type" >&5 -$as_echo "$ac_pthread_key_t_is_arithmetic_type" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pthread_key_t_is_arithmetic_type" >&5 +printf "%s\n" "$ac_pthread_key_t_is_arithmetic_type" >&6; } if test "$ac_pthread_key_t_is_arithmetic_type" = yes ; then -$as_echo "#define PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT 1" >>confdefs.h +printf "%s\n" "#define PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT 1" >>confdefs.h fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi CC="$ac_save_cc" @@ -9458,9 +10488,10 @@ case $ac_sys_system/$ac_sys_release in else LIBTOOL_CRUFT="" fi - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : ac_osx_32bit=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9475,9 +10506,10 @@ else } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_osx_32bit=yes -else +else $as_nop ac_osx_32bit=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -9519,40 +10551,40 @@ fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5 -$as_echo_n "checking for --enable-framework... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5 +printf %s "checking for --enable-framework... " >&6; } if test "$enable_framework" then BASECFLAGS="$BASECFLAGS -fno-common -dynamic" # -F. is needed to allow linking to the framework while # in the build location. -$as_echo "#define WITH_NEXT_FRAMEWORK 1" >>confdefs.h +printf "%s\n" "#define WITH_NEXT_FRAMEWORK 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test $enable_shared = "yes" then as_fn_error $? "Specifying both --enable-shared and --enable-framework is not supported, use only --enable-framework instead" "$LINENO" 5 fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dyld" >&5 -$as_echo_n "checking for dyld... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dyld" >&5 +printf %s "checking for dyld... " >&6; } case $ac_sys_system/$ac_sys_release in Darwin/*) -$as_echo "#define WITH_DYLD 1" >>confdefs.h +printf "%s\n" "#define WITH_DYLD 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: always on for Darwin" >&5 -$as_echo "always on for Darwin" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: always on for Darwin" >&5 +printf "%s\n" "always on for Darwin" >&6; } ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac @@ -9566,8 +10598,8 @@ esac # SHLIB_SUFFIX is the extension of shared libraries `(including the dot!) # -- usually .so, .sl on HP-UX, .dll on Cygwin -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the extension of shared libraries" >&5 -$as_echo_n "checking the extension of shared libraries... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the extension of shared libraries" >&5 +printf %s "checking the extension of shared libraries... " >&6; } if test -z "$SHLIB_SUFFIX"; then case $ac_sys_system in hp*|HP*) @@ -9580,15 +10612,15 @@ if test -z "$SHLIB_SUFFIX"; then *) SHLIB_SUFFIX=.so;; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIB_SUFFIX" >&5 -$as_echo "$SHLIB_SUFFIX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHLIB_SUFFIX" >&5 +printf "%s\n" "$SHLIB_SUFFIX" >&6; } # LDSHARED is the ld *command* used to create shared library # -- "cc -G" on SunOS 5.x. # (Shared libraries in this instance are shared modules to be loaded into # Python, as opposed to building Python itself as a shared library.) -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDSHARED" >&5 -$as_echo_n "checking LDSHARED... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDSHARED" >&5 +printf %s "checking LDSHARED... " >&6; } if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in @@ -9718,14 +10750,14 @@ then *) LDSHARED="ld";; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDSHARED" >&5 -$as_echo "$LDSHARED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDSHARED" >&5 +printf "%s\n" "$LDSHARED" >&6; } LDCXXSHARED=${LDCXXSHARED-$LDSHARED} BLDSHARED=${BLDSHARED-$LDSHARED} # CCSHARED are the C *flags* used to create objects to go into a shared # library (module) -- this is only needed for a few systems -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CCSHARED" >&5 -$as_echo_n "checking CCSHARED... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking CCSHARED" >&5 +printf %s "checking CCSHARED... " >&6; } if test -z "$CCSHARED" then case $ac_sys_system/$ac_sys_release in @@ -9756,12 +10788,12 @@ then CCSHARED="-fpic -D__SO_PICABILINUX__ -ftls-model=global-dynamic" esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCSHARED" >&5 -$as_echo "$CCSHARED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CCSHARED" >&5 +printf "%s\n" "$CCSHARED" >&6; } # LINKFORSHARED are the flags passed to the $(CC) command that links # the python executable -- this is only needed for a few systems -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKFORSHARED" >&5 -$as_echo_n "checking LINKFORSHARED... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LINKFORSHARED" >&5 +printf %s "checking LINKFORSHARED... " >&6; } if test -z "$LINKFORSHARED" then case $ac_sys_system/$ac_sys_release in @@ -9818,13 +10850,13 @@ then LINKFORSHARED='-Wl,-export-dynamic';; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKFORSHARED" >&5 -$as_echo "$LINKFORSHARED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LINKFORSHARED" >&5 +printf "%s\n" "$LINKFORSHARED" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGSFORSHARED" >&5 -$as_echo_n "checking CFLAGSFORSHARED... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking CFLAGSFORSHARED" >&5 +printf %s "checking CFLAGSFORSHARED... " >&6; } if test ! "$LIBRARY" = "$LDLIBRARY" then case $ac_sys_system in @@ -9836,8 +10868,8 @@ then CFLAGSFORSHARED='$(CCSHARED)' esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CFLAGSFORSHARED" >&5 -$as_echo "$CFLAGSFORSHARED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CFLAGSFORSHARED" >&5 +printf "%s\n" "$CFLAGSFORSHARED" >&6; } # SHLIBS are libraries (except -lc and -lm) to link to the python shared # library (with --enable-shared). @@ -9848,22 +10880,23 @@ $as_echo "$CFLAGSFORSHARED" >&6; } # don't need to link LIBS explicitly. The default should be only changed # on systems where this approach causes problems. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SHLIBS" >&5 -$as_echo_n "checking SHLIBS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SHLIBS" >&5 +printf %s "checking SHLIBS... " >&6; } case "$ac_sys_system" in *) SHLIBS='$(LIBS)';; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIBS" >&5 -$as_echo "$SHLIBS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHLIBS" >&5 +printf "%s\n" "$SHLIBS" >&6; } # checks for libraries -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sendfile in -lsendfile" >&5 -$as_echo_n "checking for sendfile in -lsendfile... " >&6; } -if ${ac_cv_lib_sendfile_sendfile+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sendfile in -lsendfile" >&5 +printf %s "checking for sendfile in -lsendfile... " >&6; } +if test ${ac_cv_lib_sendfile_sendfile+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsendfile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9872,43 +10905,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char sendfile (); int -main () +main (void) { return sendfile (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_sendfile_sendfile=yes -else +else $as_nop ac_cv_lib_sendfile_sendfile=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sendfile_sendfile" >&5 -$as_echo "$ac_cv_lib_sendfile_sendfile" >&6; } -if test "x$ac_cv_lib_sendfile_sendfile" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSENDFILE 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sendfile_sendfile" >&5 +printf "%s\n" "$ac_cv_lib_sendfile_sendfile" >&6; } +if test "x$ac_cv_lib_sendfile_sendfile" = xyes +then : + printf "%s\n" "#define HAVE_LIBSENDFILE 1" >>confdefs.h LIBS="-lsendfile $LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9917,43 +10948,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + printf "%s\n" "#define HAVE_LIBDL 1" >>confdefs.h LIBS="-ldl $LIBS" fi # Dynamic linking for SunOS/Solaris and SYSV -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9962,33 +10991,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDLD 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : + printf "%s\n" "#define HAVE_LIBDLD 1" >>confdefs.h LIBS="-ldld $LIBS" @@ -9996,27 +11022,27 @@ fi # Dynamic linking for HP-UX # checks for uuid.h location -for ac_header in uuid/uuid.h uuid.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = xyes +then : + printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_h" = xyes +then : + printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h -done +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time_safe" >&5 -$as_echo_n "checking for uuid_generate_time_safe... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time_safe" >&5 +printf %s "checking for uuid_generate_time_safe... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef uuid_generate_time_safe @@ -10027,28 +11053,29 @@ void *x = uuid_generate_time_safe return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h +printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 (anno 2007) # FreeBSD and OpenBSD provides support as well -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_create" >&5 -$as_echo_n "checking for uuid_create... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_create" >&5 +printf %s "checking for uuid_create... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef uuid_create @@ -10059,28 +11086,29 @@ void *x = uuid_create return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_UUID_CREATE 1" >>confdefs.h +printf "%s\n" "#define HAVE_UUID_CREATE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet # stream in big-endian byte-order -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_enc_be" >&5 -$as_echo_n "checking for uuid_enc_be... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_enc_be" >&5 +printf %s "checking for uuid_enc_be... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef uuid_enc_be @@ -10091,27 +11119,29 @@ void *x = uuid_enc_be return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_UUID_ENC_BE 1" >>confdefs.h +printf "%s\n" "#define HAVE_UUID_ENC_BE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # 'Real Time' functions on Solaris # posix4 on Solaris 2.6 # pthread (first!) on Linux -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_init" >&5 -$as_echo_n "checking for library containing sem_init... " >&6; } -if ${ac_cv_search_sem_init+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sem_init" >&5 +printf %s "checking for library containing sem_init... " >&6; } +if test ${ac_cv_search_sem_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10119,57 +11149,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char sem_init (); int -main () +main (void) { return sem_init (); ; return 0; } _ACEOF -for ac_lib in '' pthread rt posix4; do +for ac_lib in '' pthread rt posix4 +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_sem_init=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_sem_init+:} false; then : + if test ${ac_cv_search_sem_init+y} +then : break fi done -if ${ac_cv_search_sem_init+:} false; then : +if test ${ac_cv_search_sem_init+y} +then : -else +else $as_nop ac_cv_search_sem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_init" >&5 -$as_echo "$ac_cv_search_sem_init" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_init" >&5 +printf "%s\n" "$ac_cv_search_sem_init" >&6; } ac_res=$ac_cv_search_sem_init -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # check if we need libintl for locale functions -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for textdomain in -lintl" >&5 -$as_echo_n "checking for textdomain in -lintl... " >&6; } -if ${ac_cv_lib_intl_textdomain+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for textdomain in -lintl" >&5 +printf %s "checking for textdomain in -lintl... " >&6; } +if test ${ac_cv_lib_intl_textdomain+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10178,32 +11211,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char textdomain (); int -main () +main (void) { return textdomain (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_intl_textdomain=yes -else +else $as_nop ac_cv_lib_intl_textdomain=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_textdomain" >&5 -$as_echo "$ac_cv_lib_intl_textdomain" >&6; } -if test "x$ac_cv_lib_intl_textdomain" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_textdomain" >&5 +printf "%s\n" "$ac_cv_lib_intl_textdomain" >&6; } +if test "x$ac_cv_lib_intl_textdomain" = xyes +then : -$as_echo "#define WITH_LIBINTL 1" >>confdefs.h +printf "%s\n" "#define WITH_LIBINTL 1" >>confdefs.h LIBS="-lintl $LIBS" fi @@ -10211,14 +11243,14 @@ fi # checks for system dependent C++ extensions support case "$ac_sys_system" in - AIX*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for genuine AIX C++ extensions support" >&5 -$as_echo_n "checking for genuine AIX C++ extensions support... " >&6; } + AIX*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for genuine AIX C++ extensions support" >&5 +printf %s "checking for genuine AIX C++ extensions support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { loadAndInit("", 0, "") ; @@ -10226,48 +11258,49 @@ loadAndInit("", 0, "") } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define AIX_GENUINE_CPLUSPLUS 1" >>confdefs.h +printf "%s\n" "#define AIX_GENUINE_CPLUSPLUS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext # BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the platform_tag # of the AIX system used to build/package Python executable. This tag serves # as a baseline for bdist module packages - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the system builddate" >&5 -$as_echo_n "checking for the system builddate... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the system builddate" >&5 +printf %s "checking for the system builddate... " >&6; } AIX_BUILDDATE=$(lslpp -Lcq bos.mp64 | awk -F: '{ print $NF }') -cat >>confdefs.h <<_ACEOF -#define AIX_BUILDDATE $AIX_BUILDDATE -_ACEOF +printf "%s\n" "#define AIX_BUILDDATE $AIX_BUILDDATE" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AIX_BUILDDATE" >&5 -$as_echo "$AIX_BUILDDATE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AIX_BUILDDATE" >&5 +printf "%s\n" "$AIX_BUILDDATE" >&6; } ;; *) ;; esac # check for systems that require aligned memory access -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking aligned memory access is required" >&5 -$as_echo_n "checking aligned memory access is required... " >&6; } -if ${ac_cv_aligned_required+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking aligned memory access is required" >&5 +printf %s "checking aligned memory access is required... " >&6; } +if test ${ac_cv_aligned_required+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_aligned_required=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10284,9 +11317,10 @@ int main() return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_aligned_required=no -else +else $as_nop ac_cv_aligned_required=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -10296,32 +11330,33 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_aligned_required" >&5 -$as_echo "$ac_cv_aligned_required" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_aligned_required" >&5 +printf "%s\n" "$ac_cv_aligned_required" >&6; } if test "$ac_cv_aligned_required" = yes ; then -$as_echo "#define HAVE_ALIGNED_REQUIRED 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALIGNED_REQUIRED 1" >>confdefs.h fi # str, bytes and memoryview hash algorithm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-hash-algorithm" >&5 -$as_echo_n "checking for --with-hash-algorithm... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-hash-algorithm" >&5 +printf %s "checking for --with-hash-algorithm... " >&6; } # Check whether --with-hash_algorithm was given. -if test "${with_hash_algorithm+set}" = set; then : +if test ${with_hash_algorithm+y} +then : withval=$with_hash_algorithm; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } case "$withval" in siphash24) - $as_echo "#define Py_HASH_ALGORITHM 1" >>confdefs.h + printf "%s\n" "#define Py_HASH_ALGORITHM 1" >>confdefs.h ;; fnv) - $as_echo "#define Py_HASH_ALGORITHM 2" >>confdefs.h + printf "%s\n" "#define Py_HASH_ALGORITHM 2" >>confdefs.h ;; *) @@ -10329,9 +11364,9 @@ case "$withval" in ;; esac -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: default" >&5 -$as_echo "default" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default" >&5 +printf "%s\n" "default" >&6; } fi @@ -10350,11 +11385,12 @@ validate_tzpath() { } TZPATH="/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tzpath" >&5 -$as_echo_n "checking for --with-tzpath... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tzpath" >&5 +printf %s "checking for --with-tzpath... " >&6; } # Check whether --with-tzpath was given. -if test "${with_tzpath+set}" = set; then : +if test ${with_tzpath+y} +then : withval=$with_tzpath; case "$withval" in yes) @@ -10363,80 +11399,84 @@ case "$withval" in *) validate_tzpath "$withval" TZPATH="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$withval\"" >&5 -$as_echo "\"$withval\"" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$withval\"" >&5 +printf "%s\n" "\"$withval\"" >&6; } ;; esac -else +else $as_nop validate_tzpath "$TZPATH" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$TZPATH\"" >&5 -$as_echo "\"$TZPATH\"" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$TZPATH\"" >&5 +printf "%s\n" "\"$TZPATH\"" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-address-sanitizer" >&5 -$as_echo_n "checking for --with-address-sanitizer... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-address-sanitizer" >&5 +printf %s "checking for --with-address-sanitizer... " >&6; } # Check whether --with-address_sanitizer was given. -if test "${with_address_sanitizer+set}" = set; then : +if test ${with_address_sanitizer+y} +then : withval=$with_address_sanitizer; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } BASECFLAGS="-fsanitize=address -fno-omit-frame-pointer $BASECFLAGS" LDFLAGS="-fsanitize=address $LDFLAGS" # ASan works by controlling memory allocation, our own malloc interferes. with_pymalloc="no" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-memory-sanitizer" >&5 -$as_echo_n "checking for --with-memory-sanitizer... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-memory-sanitizer" >&5 +printf %s "checking for --with-memory-sanitizer... " >&6; } # Check whether --with-memory_sanitizer was given. -if test "${with_memory_sanitizer+set}" = set; then : +if test ${with_memory_sanitizer+y} +then : withval=$with_memory_sanitizer; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } BASECFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer $BASECFLAGS" LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 $LDFLAGS" # MSan works by controlling memory allocation, our own malloc interferes. with_pymalloc="no" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-undefined-behavior-sanitizer" >&5 -$as_echo_n "checking for --with-undefined-behavior-sanitizer... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-undefined-behavior-sanitizer" >&5 +printf %s "checking for --with-undefined-behavior-sanitizer... " >&6; } # Check whether --with-undefined_behavior_sanitizer was given. -if test "${with_undefined_behavior_sanitizer+set}" = set; then : +if test ${with_undefined_behavior_sanitizer+y} +then : withval=$with_undefined_behavior_sanitizer; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } BASECFLAGS="-fsanitize=undefined $BASECFLAGS" LDFLAGS="-fsanitize=undefined $LDFLAGS" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Most SVR4 platforms (e.g. Solaris) need -lsocket and -lnsl. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 -$as_echo_n "checking for t_open in -lnsl... " >&6; } -if ${ac_cv_lib_nsl_t_open+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 +printf %s "checking for t_open in -lnsl... " >&6; } +if test ${ac_cv_lib_nsl_t_open+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10445,38 +11485,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char t_open (); int -main () +main (void) { return t_open (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_nsl_t_open=yes -else +else $as_nop ac_cv_lib_nsl_t_open=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 -$as_echo "$ac_cv_lib_nsl_t_open" >&6; } -if test "x$ac_cv_lib_nsl_t_open" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 +printf "%s\n" "$ac_cv_lib_nsl_t_open" >&6; } +if test "x$ac_cv_lib_nsl_t_open" = xyes +then : LIBS="-lnsl $LIBS" fi # SVR4 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -$as_echo_n "checking for socket in -lsocket... " >&6; } -if ${ac_cv_lib_socket_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 +printf %s "checking for socket in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10485,47 +11525,47 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_socket_socket=yes -else +else $as_nop ac_cv_lib_socket_socket=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -$as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 +printf "%s\n" "$ac_cv_lib_socket_socket" >&6; } +if test "x$ac_cv_lib_socket_socket" = xyes +then : LIBS="-lsocket $LIBS" fi # SVR4 sockets -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libs" >&5 -$as_echo_n "checking for --with-libs... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libs" >&5 +printf %s "checking for --with-libs... " >&6; } # Check whether --with-libs was given. -if test "${with_libs+set}" = set; then : +if test ${with_libs+y} +then : withval=$with_libs; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } LIBS="$withval $LIBS" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10540,11 +11580,12 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. @@ -10554,11 +11595,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10570,11 +11615,11 @@ esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +printf "%s\n" "$PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10583,11 +11628,12 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. @@ -10597,11 +11643,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10613,11 +11663,11 @@ esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then @@ -10625,8 +11675,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG @@ -10638,39 +11688,41 @@ fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi # Check for use of the system expat library -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 -$as_echo_n "checking for --with-system-expat... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 +printf %s "checking for --with-system-expat... " >&6; } # Check whether --with-system_expat was given. -if test "${with_system_expat+set}" = set; then : +if test ${with_system_expat+y} +then : withval=$with_system_expat; -else +else $as_nop with_system_expat="no" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_expat" >&5 -$as_echo "$with_system_expat" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_expat" >&5 +printf "%s\n" "$with_system_expat" >&6; } # Check for use of the system libffi library -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-ffi" >&5 -$as_echo_n "checking for --with-system-ffi... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-ffi" >&5 +printf %s "checking for --with-system-ffi... " >&6; } # Check whether --with-system_ffi was given. -if test "${with_system_ffi+set}" = set; then : +if test ${with_system_ffi+y} +then : withval=$with_system_ffi; fi @@ -10687,15 +11739,15 @@ then as_fn_error $? "--with-system-ffi accepts no arguments" "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_ffi" >&5 -$as_echo "$with_system_ffi" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_ffi" >&5 +printf "%s\n" "$with_system_ffi" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "$with_system_ffi" != "" then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with(out)-system-ffi is ignored on this platform" >&5 -$as_echo "$as_me: WARNING: --with(out)-system-ffi is ignored on this platform" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --with(out)-system-ffi is ignored on this platform" >&5 +printf "%s\n" "$as_me: WARNING: --with(out)-system-ffi is ignored on this platform" >&2;} fi with_system_ffi="yes" fi @@ -10708,28 +11760,30 @@ fi # Check for use of the system libmpdec library -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5 -$as_echo_n "checking for --with-system-libmpdec... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5 +printf %s "checking for --with-system-libmpdec... " >&6; } # Check whether --with-system_libmpdec was given. -if test "${with_system_libmpdec+set}" = set; then : +if test ${with_system_libmpdec+y} +then : withval=$with_system_libmpdec; -else +else $as_nop with_system_libmpdec="no" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_libmpdec" >&5 -$as_echo "$with_system_libmpdec" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_libmpdec" >&5 +printf "%s\n" "$with_system_libmpdec" >&6; } # Check whether _decimal should use a coroutine-local or thread-local context -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5 -$as_echo_n "checking for --with-decimal-contextvar... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5 +printf %s "checking for --with-decimal-contextvar... " >&6; } # Check whether --with-decimal_contextvar was given. -if test "${with_decimal_contextvar+set}" = set; then : +if test ${with_decimal_contextvar+y} +then : withval=$with_decimal_contextvar; -else +else $as_nop with_decimal_contextvar="yes" fi @@ -10737,54 +11791,57 @@ fi if test "$with_decimal_contextvar" != "no" then -$as_echo "#define WITH_DECIMAL_CONTEXTVAR 1" >>confdefs.h +printf "%s\n" "#define WITH_DECIMAL_CONTEXTVAR 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5 -$as_echo "$with_decimal_contextvar" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5 +printf "%s\n" "$with_decimal_contextvar" >&6; } # Check for support for loadable sqlite extensions -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 -$as_echo_n "checking for --enable-loadable-sqlite-extensions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 +printf %s "checking for --enable-loadable-sqlite-extensions... " >&6; } # Check whether --enable-loadable-sqlite-extensions was given. -if test "${enable_loadable_sqlite_extensions+set}" = set; then : +if test ${enable_loadable_sqlite_extensions+y} +then : enableval=$enable_loadable_sqlite_extensions; -else +else $as_nop enable_loadable_sqlite_extensions="no" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_loadable_sqlite_extensions" >&5 -$as_echo "$enable_loadable_sqlite_extensions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_loadable_sqlite_extensions" >&5 +printf "%s\n" "$enable_loadable_sqlite_extensions" >&6; } # Check for --with-tcltk-includes=path and --with-tcltk-libs=path -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-includes" >&5 -$as_echo_n "checking for --with-tcltk-includes... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-includes" >&5 +printf %s "checking for --with-tcltk-includes... " >&6; } # Check whether --with-tcltk-includes was given. -if test "${with_tcltk_includes+set}" = set; then : +if test ${with_tcltk_includes+y} +then : withval=$with_tcltk_includes; -else +else $as_nop with_tcltk_includes="default" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_includes" >&5 -$as_echo "$with_tcltk_includes" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-libs" >&5 -$as_echo_n "checking for --with-tcltk-libs... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_includes" >&5 +printf "%s\n" "$with_tcltk_includes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-libs" >&5 +printf %s "checking for --with-tcltk-libs... " >&6; } # Check whether --with-tcltk-libs was given. -if test "${with_tcltk_libs+set}" = set; then : +if test ${with_tcltk_libs+y} +then : withval=$with_tcltk_libs; -else +else $as_nop with_tcltk_libs="default" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_libs" >&5 -$as_echo "$with_tcltk_libs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_libs" >&5 +printf "%s\n" "$with_tcltk_libs" >&6; } if test "x$with_tcltk_includes" = xdefault || test "x$with_tcltk_libs" = xdefault then if test "x$with_tcltk_includes" != "x$with_tcltk_libs" @@ -10804,11 +11861,12 @@ else fi # Check for --with-dbmliborder -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-dbmliborder" >&5 -$as_echo_n "checking for --with-dbmliborder... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-dbmliborder" >&5 +printf %s "checking for --with-dbmliborder... " >&6; } # Check whether --with-dbmliborder was given. -if test "${with_dbmliborder+set}" = set; then : +if test ${with_dbmliborder+y} +then : withval=$with_dbmliborder; if test x$with_dbmliborder = xyes then @@ -10823,8 +11881,8 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5 -$as_echo "$with_dbmliborder" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5 +printf "%s\n" "$with_dbmliborder" >&6; } # Templates for things AC_DEFINEd more than once. # For a single AC_DEFINE, no template is needed. @@ -10833,7 +11891,7 @@ $as_echo "$with_dbmliborder" >&6; } if test "$ac_cv_pthread_is_default" = yes then # Defining _REENTRANT on system with POSIX threads should not hurt. - $as_echo "#define _REENTRANT 1" >>confdefs.h + printf "%s\n" "#define _REENTRANT 1" >>confdefs.h posix_threads=yes if test "$ac_sys_system" = "SunOS"; then @@ -10868,8 +11926,8 @@ else # According to the POSIX spec, a pthreads implementation must # define _POSIX_THREADS in unistd.h. Some apparently don't # (e.g. gnu pth with pthread emulation) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _POSIX_THREADS in unistd.h" >&5 -$as_echo_n "checking for _POSIX_THREADS in unistd.h... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _POSIX_THREADS in unistd.h" >&5 +printf %s "checking for _POSIX_THREADS in unistd.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10880,25 +11938,26 @@ yes _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : unistd_defines_pthreads=yes -else +else $as_nop unistd_defines_pthreads=no fi -rm -f conftest* +rm -rf conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $unistd_defines_pthreads" >&5 -$as_echo "$unistd_defines_pthreads" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $unistd_defines_pthreads" >&5 +printf "%s\n" "$unistd_defines_pthreads" >&6; } - $as_echo "#define _REENTRANT 1" >>confdefs.h + printf "%s\n" "#define _REENTRANT 1" >>confdefs.h # Just looking for pthread_create in libpthread is not enough: # on HP/UX, pthread.h renames pthread_create to a different symbol name. # So we really have to include pthread.h, and then link. _libs=$LIBS LIBS="$LIBS -lpthread" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 -$as_echo_n "checking for pthread_create in -lpthread... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +printf %s "checking for pthread_create in -lpthread... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10907,7 +11966,7 @@ $as_echo_n "checking for pthread_create in -lpthread... " >&6; } void * start_routine (void *arg) { exit (0); } int -main () +main (void) { pthread_create (NULL, NULL, start_routine, NULL) @@ -10915,27 +11974,30 @@ pthread_create (NULL, NULL, start_routine, NULL) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } posix_threads=yes -else +else $as_nop LIBS=$_libs ac_fn_c_check_func "$LINENO" "pthread_detach" "ac_cv_func_pthread_detach" -if test "x$ac_cv_func_pthread_detach" = xyes; then : +if test "x$ac_cv_func_pthread_detach" = xyes +then : posix_threads=yes -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreads" >&5 -$as_echo_n "checking for pthread_create in -lpthreads... " >&6; } -if ${ac_cv_lib_pthreads_pthread_create+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreads" >&5 +printf %s "checking for pthread_create in -lpthreads... " >&6; } +if test ${ac_cv_lib_pthreads_pthread_create+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10944,41 +12006,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_create (); int -main () +main (void) { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_pthreads_pthread_create=yes -else +else $as_nop ac_cv_lib_pthreads_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_create" >&5 -$as_echo "$ac_cv_lib_pthreads_pthread_create" >&6; } -if test "x$ac_cv_lib_pthreads_pthread_create" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_create" >&5 +printf "%s\n" "$ac_cv_lib_pthreads_pthread_create" >&6; } +if test "x$ac_cv_lib_pthreads_pthread_create" = xyes +then : posix_threads=yes LIBS="$LIBS -lpthreads" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 -$as_echo_n "checking for pthread_create in -lc_r... " >&6; } -if ${ac_cv_lib_c_r_pthread_create+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 +printf %s "checking for pthread_create in -lc_r... " >&6; } +if test ${ac_cv_lib_c_r_pthread_create+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10987,41 +12049,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_create (); int -main () +main (void) { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_c_r_pthread_create=yes -else +else $as_nop ac_cv_lib_c_r_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 -$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; } -if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 +printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; } +if test "x$ac_cv_lib_c_r_pthread_create" = xyes +then : posix_threads=yes LIBS="$LIBS -lc_r" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5 -$as_echo_n "checking for __pthread_create_system in -lpthread... " >&6; } -if ${ac_cv_lib_pthread___pthread_create_system+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5 +printf %s "checking for __pthread_create_system in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread___pthread_create_system+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11030,41 +12092,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char __pthread_create_system (); int -main () +main (void) { return __pthread_create_system (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_pthread___pthread_create_system=yes -else +else $as_nop ac_cv_lib_pthread___pthread_create_system=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5 -$as_echo "$ac_cv_lib_pthread___pthread_create_system" >&6; } -if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5 +printf "%s\n" "$ac_cv_lib_pthread___pthread_create_system" >&6; } +if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes +then : posix_threads=yes LIBS="$LIBS -lpthread" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lcma" >&5 -$as_echo_n "checking for pthread_create in -lcma... " >&6; } -if ${ac_cv_lib_cma_pthread_create+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lcma" >&5 +printf %s "checking for pthread_create in -lcma... " >&6; } +if test ${ac_cv_lib_cma_pthread_create+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11073,35 +12135,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_create (); int -main () +main (void) { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_cma_pthread_create=yes -else +else $as_nop ac_cv_lib_cma_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cma_pthread_create" >&5 -$as_echo "$ac_cv_lib_cma_pthread_create" >&6; } -if test "x$ac_cv_lib_cma_pthread_create" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cma_pthread_create" >&5 +printf "%s\n" "$ac_cv_lib_cma_pthread_create" >&6; } +if test "x$ac_cv_lib_cma_pthread_create" = xyes +then : posix_threads=yes LIBS="$LIBS -lcma" -else +else $as_nop as_fn_error $? "could not find pthreads on your system" "$LINENO" 5 @@ -11117,14 +12178,15 @@ fi fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usconfig in -lmpc" >&5 -$as_echo_n "checking for usconfig in -lmpc... " >&6; } -if ${ac_cv_lib_mpc_usconfig+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usconfig in -lmpc" >&5 +printf %s "checking for usconfig in -lmpc... " >&6; } +if test ${ac_cv_lib_mpc_usconfig+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lmpc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11133,30 +12195,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char usconfig (); int -main () +main (void) { return usconfig (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_mpc_usconfig=yes -else +else $as_nop ac_cv_lib_mpc_usconfig=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpc_usconfig" >&5 -$as_echo "$ac_cv_lib_mpc_usconfig" >&6; } -if test "x$ac_cv_lib_mpc_usconfig" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpc_usconfig" >&5 +printf "%s\n" "$ac_cv_lib_mpc_usconfig" >&6; } +if test "x$ac_cv_lib_mpc_usconfig" = xyes +then : LIBS="$LIBS -lmpc" @@ -11168,34 +12229,36 @@ fi if test "$posix_threads" = "yes"; then if test "$unistd_defines_pthreads" = "no"; then -$as_echo "#define _POSIX_THREADS 1" >>confdefs.h +printf "%s\n" "#define _POSIX_THREADS 1" >>confdefs.h fi # Bug 662787: Using semaphores causes unexplicable hangs on Solaris 8. case $ac_sys_system/$ac_sys_release in SunOS/5.6) -$as_echo "#define HAVE_PTHREAD_DESTRUCTOR 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_DESTRUCTOR 1" >>confdefs.h ;; SunOS/5.8) -$as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h ;; AIX/*) -$as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if PTHREAD_SCOPE_SYSTEM is supported" >&5 -$as_echo_n "checking if PTHREAD_SCOPE_SYSTEM is supported... " >&6; } - if ${ac_cv_pthread_system_supported+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PTHREAD_SCOPE_SYSTEM is supported" >&5 +printf %s "checking if PTHREAD_SCOPE_SYSTEM is supported... " >&6; } + if test ${ac_cv_pthread_system_supported+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_pthread_system_supported=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11213,9 +12276,10 @@ else return (0); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_pthread_system_supported=yes -else +else $as_nop ac_cv_pthread_system_supported=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -11225,64 +12289,61 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_system_supported" >&5 -$as_echo "$ac_cv_pthread_system_supported" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_system_supported" >&5 +printf "%s\n" "$ac_cv_pthread_system_supported" >&6; } if test "$ac_cv_pthread_system_supported" = "yes"; then -$as_echo "#define PTHREAD_SYSTEM_SCHED_SUPPORTED 1" >>confdefs.h +printf "%s\n" "#define PTHREAD_SYSTEM_SCHED_SUPPORTED 1" >>confdefs.h fi - for ac_func in pthread_sigmask + + for ac_func in pthread_sigmask do : ac_fn_c_check_func "$LINENO" "pthread_sigmask" "ac_cv_func_pthread_sigmask" -if test "x$ac_cv_func_pthread_sigmask" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PTHREAD_SIGMASK 1 -_ACEOF +if test "x$ac_cv_func_pthread_sigmask" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_SIGMASK 1" >>confdefs.h case $ac_sys_system in CYGWIN*) -$as_echo "#define HAVE_BROKEN_PTHREAD_SIGMASK 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_PTHREAD_SIGMASK 1" >>confdefs.h ;; esac fi -done - for ac_func in pthread_getcpuclockid -do : - ac_fn_c_check_func "$LINENO" "pthread_getcpuclockid" "ac_cv_func_pthread_getcpuclockid" -if test "x$ac_cv_func_pthread_getcpuclockid" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PTHREAD_GETCPUCLOCKID 1 -_ACEOF +done + ac_fn_c_check_func "$LINENO" "pthread_getcpuclockid" "ac_cv_func_pthread_getcpuclockid" +if test "x$ac_cv_func_pthread_getcpuclockid" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_GETCPUCLOCKID 1" >>confdefs.h fi -done fi # Check for enable-ipv6 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if --enable-ipv6 is specified" >&5 -$as_echo_n "checking if --enable-ipv6 is specified... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if --enable-ipv6 is specified" >&5 +printf %s "checking if --enable-ipv6 is specified... " >&6; } # Check whether --enable-ipv6 was given. -if test "${enable_ipv6+set}" = set; then : +if test ${enable_ipv6+y} +then : enableval=$enable_ipv6; case "$enableval" in no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ipv6=no ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define ENABLE_IPV6 1" >>confdefs.h + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + printf "%s\n" "#define ENABLE_IPV6 1" >>confdefs.h ipv6=yes ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11290,38 +12351,39 @@ else #include #include int -main () +main (void) { int domain = AF_INET6; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ipv6=yes -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ipv6=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$ipv6" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if RFC2553 API is available" >&5 -$as_echo_n "checking if RFC2553 API is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if RFC2553 API is available" >&5 +printf %s "checking if RFC2553 API is available... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct sockaddr_in6 x; x.sin6_scope_id; @@ -11330,24 +12392,25 @@ struct sockaddr_in6 x; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ipv6=yes -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ipv6=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$ipv6" = "yes"; then - $as_echo "#define ENABLE_IPV6 1" >>confdefs.h + printf "%s\n" "#define ENABLE_IPV6 1" >>confdefs.h fi @@ -11359,8 +12422,8 @@ ipv6lib=none ipv6trylibc=no if test "$ipv6" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 -$as_echo_n "checking ipv6 stack type... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 +printf %s "checking ipv6 stack type... " >&6; } for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta; do case $i in @@ -11374,10 +12437,11 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i fi -rm -f conftest* +rm -rf conftest* ;; kame) @@ -11390,13 +12454,14 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6 ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f conftest* +rm -rf conftest* ;; linux-glibc) @@ -11409,11 +12474,12 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6trylibc=yes fi -rm -f conftest* +rm -rf conftest* ;; linux-inet6) @@ -11442,12 +12508,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -rf conftest* ;; v6d) @@ -11460,13 +12527,14 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=v6; ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f conftest* +rm -rf conftest* ;; zeta) @@ -11479,12 +12547,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -rf conftest* ;; esac @@ -11492,8 +12561,8 @@ rm -f conftest* break fi done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 -$as_echo "$ipv6type" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 +printf "%s\n" "$ipv6type" >&6; } fi if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then @@ -11512,72 +12581,75 @@ if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_FD_FRAMES" >&5 -$as_echo_n "checking for CAN_RAW_FD_FRAMES... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_FD_FRAMES" >&5 +printf %s "checking for CAN_RAW_FD_FRAMES... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* CAN_RAW_FD_FRAMES available check */ #include int -main () +main (void) { int can_raw_fd_frames = CAN_RAW_FD_FRAMES; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_LINUX_CAN_RAW_FD_FRAMES 1" >>confdefs.h +printf "%s\n" "#define HAVE_LINUX_CAN_RAW_FD_FRAMES 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_JOIN_FILTERS" >&5 -$as_echo_n "checking for CAN_RAW_JOIN_FILTERS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_JOIN_FILTERS" >&5 +printf %s "checking for CAN_RAW_JOIN_FILTERS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int can_raw_join_filters = CAN_RAW_JOIN_FILTERS; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1" >>confdefs.h +printf "%s\n" "#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Check for --with-doc-strings -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-doc-strings" >&5 -$as_echo_n "checking for --with-doc-strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-doc-strings" >&5 +printf %s "checking for --with-doc-strings... " >&6; } # Check whether --with-doc-strings was given. -if test "${with_doc_strings+set}" = set; then : +if test ${with_doc_strings+y} +then : withval=$with_doc_strings; fi @@ -11588,18 +12660,19 @@ fi if test "$with_doc_strings" != "no" then -$as_echo "#define WITH_DOC_STRINGS 1" >>confdefs.h +printf "%s\n" "#define WITH_DOC_STRINGS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_doc_strings" >&5 -$as_echo "$with_doc_strings" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_doc_strings" >&5 +printf "%s\n" "$with_doc_strings" >&6; } # Check for Python-specific malloc support -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pymalloc" >&5 -$as_echo_n "checking for --with-pymalloc... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-pymalloc" >&5 +printf %s "checking for --with-pymalloc... " >&6; } # Check whether --with-pymalloc was given. -if test "${with_pymalloc+set}" = set; then : +if test ${with_pymalloc+y} +then : withval=$with_pymalloc; fi @@ -11611,18 +12684,19 @@ fi if test "$with_pymalloc" != "no" then -$as_echo "#define WITH_PYMALLOC 1" >>confdefs.h +printf "%s\n" "#define WITH_PYMALLOC 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_pymalloc" >&5 -$as_echo "$with_pymalloc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_pymalloc" >&5 +printf "%s\n" "$with_pymalloc" >&6; } # Check for --with-c-locale-coercion -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-c-locale-coercion" >&5 -$as_echo_n "checking for --with-c-locale-coercion... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-c-locale-coercion" >&5 +printf %s "checking for --with-c-locale-coercion... " >&6; } # Check whether --with-c-locale-coercion was given. -if test "${with_c_locale_coercion+set}" = set; then : +if test ${with_c_locale_coercion+y} +then : withval=$with_c_locale_coercion; fi @@ -11634,53 +12708,55 @@ fi if test "$with_c_locale_coercion" != "no" then -$as_echo "#define PY_COERCE_C_LOCALE 1" >>confdefs.h +printf "%s\n" "#define PY_COERCE_C_LOCALE 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_coercion" >&5 -$as_echo "$with_c_locale_coercion" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_coercion" >&5 +printf "%s\n" "$with_c_locale_coercion" >&6; } # Check for Valgrind support -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-valgrind" >&5 -$as_echo_n "checking for --with-valgrind... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-valgrind" >&5 +printf %s "checking for --with-valgrind... " >&6; } # Check whether --with-valgrind was given. -if test "${with_valgrind+set}" = set; then : +if test ${with_valgrind+y} +then : withval=$with_valgrind; -else +else $as_nop with_valgrind=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_valgrind" >&5 -$as_echo "$with_valgrind" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_valgrind" >&5 +printf "%s\n" "$with_valgrind" >&6; } if test "$with_valgrind" != no; then - ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default" -if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default" +if test "x$ac_cv_header_valgrind_valgrind_h" = xyes +then : -$as_echo "#define WITH_VALGRIND 1" >>confdefs.h +printf "%s\n" "#define WITH_VALGRIND 1" >>confdefs.h -else +else $as_nop as_fn_error $? "Valgrind support requested but headers not available" "$LINENO" 5 fi - OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT" fi # Check for DTrace support -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-dtrace" >&5 -$as_echo_n "checking for --with-dtrace... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-dtrace" >&5 +printf %s "checking for --with-dtrace... " >&6; } # Check whether --with-dtrace was given. -if test "${with_dtrace+set}" = set; then : +if test ${with_dtrace+y} +then : withval=$with_dtrace; -else +else $as_nop with_dtrace=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dtrace" >&5 -$as_echo "$with_dtrace" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_dtrace" >&5 +printf "%s\n" "$with_dtrace" >&6; } @@ -11694,11 +12770,12 @@ if test "$with_dtrace" = "yes" then # Extract the first word of "dtrace", so it can be a program name with args. set dummy dtrace; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_DTRACE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_DTRACE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $DTRACE in [\\/]* | ?:[\\/]*) ac_cv_path_DTRACE="$DTRACE" # Let the user override the test with a path. @@ -11708,11 +12785,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_DTRACE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_DTRACE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11725,11 +12806,11 @@ esac fi DTRACE=$ac_cv_path_DTRACE if test -n "$DTRACE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5 -$as_echo "$DTRACE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5 +printf "%s\n" "$DTRACE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11737,7 +12818,7 @@ fi as_fn_error $? "dtrace command not found on \$PATH" "$LINENO" 5 fi -$as_echo "#define WITH_DTRACE 1" >>confdefs.h +printf "%s\n" "#define WITH_DTRACE 1" >>confdefs.h DTRACE_HEADERS="Include/pydtrace_probes.h" @@ -11745,19 +12826,20 @@ $as_echo "#define WITH_DTRACE 1" >>confdefs.h # linked into the binary. Correspondingly, dtrace(1) is missing the ELF # generation flag '-G'. We check for presence of this flag, rather than # hardcoding support by OS, in the interest of robustness. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether DTrace probes require linking" >&5 -$as_echo_n "checking whether DTrace probes require linking... " >&6; } -if ${ac_cv_dtrace_link+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether DTrace probes require linking" >&5 +printf %s "checking whether DTrace probes require linking... " >&6; } +if test ${ac_cv_dtrace_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_dtrace_link=no echo 'BEGIN{}' > conftest.d "$DTRACE" $DFLAGS -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \ ac_cv_dtrace_link=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dtrace_link" >&5 -$as_echo "$ac_cv_dtrace_link" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dtrace_link" >&5 +printf "%s\n" "$ac_cv_dtrace_link" >&6; } if test "$ac_cv_dtrace_link" = "yes"; then DTRACE_OBJS="Python/pydtrace.o" fi @@ -11769,23 +12851,19 @@ DLINCLDIR=. # the dlopen() function means we might want to use dynload_shlib.o. some # platforms have dlopen(), but don't want to use it. -for ac_func in dlopen -do : - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLOPEN 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : + printf "%s\n" "#define HAVE_DLOPEN 1" >>confdefs.h fi -done # DYNLOADFILE specifies which dynload_*.o file we will use for dynamic # loading of modules. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking DYNLOADFILE" >&5 -$as_echo_n "checking DYNLOADFILE... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking DYNLOADFILE" >&5 +printf %s "checking DYNLOADFILE... " >&6; } if test -z "$DYNLOADFILE" then case $ac_sys_system/$ac_sys_release in @@ -11800,20 +12878,20 @@ then ;; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DYNLOADFILE" >&5 -$as_echo "$DYNLOADFILE" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DYNLOADFILE" >&5 +printf "%s\n" "$DYNLOADFILE" >&6; } if test "$DYNLOADFILE" != "dynload_stub.o" then -$as_echo "#define HAVE_DYNAMIC_LOADING 1" >>confdefs.h +printf "%s\n" "#define HAVE_DYNAMIC_LOADING 1" >>confdefs.h fi # MACHDEP_OBJS can be set to platform-specific object files needed by Python -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MACHDEP_OBJS" >&5 -$as_echo_n "checking MACHDEP_OBJS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking MACHDEP_OBJS" >&5 +printf %s "checking MACHDEP_OBJS... " >&6; } if test -z "$MACHDEP_OBJS" then MACHDEP_OBJS=$extra_machdep_objs @@ -11821,282 +12899,1315 @@ else MACHDEP_OBJS="$MACHDEP_OBJS $extra_machdep_objs" fi if test -z "$MACHDEP_OBJS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACHDEP_OBJS" >&5 -$as_echo "$MACHDEP_OBJS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MACHDEP_OBJS" >&5 +printf "%s\n" "$MACHDEP_OBJS" >&6; } fi # checks for library functions -for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ - clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \ - explicit_memset faccessat fchmod fchmodat fchown fchownat \ - fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \ - futimens futimes gai_strerror getentropy \ - getgrgid_r getgrnam_r \ - getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \ - getpriority getresuid getresgid getpwent getpwnam_r getpwuid_r getspnam getspent getsid getwd \ - if_nameindex \ - initgroups kill killpg lchown lockf linkat lstat lutimes mmap \ - memrchr mbrtowc mkdirat mkfifo \ - madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \ - posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \ - pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \ - readlink readlinkat readv realpath renameat \ - sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \ - setgid sethostname \ - setlocale setregid setreuid setresuid setresgid setsid setpgid setpgrp setpriority setuid setvbuf \ - sched_get_priority_max sched_setaffinity sched_setscheduler sched_setparam \ - sched_rr_get_interval \ - sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \ - sigtimedwait sigwait sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \ - sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ - truncate uname unlinkat utimensat utimes vfork waitid waitpid wait3 wait4 \ - wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "alarm" "ac_cv_func_alarm" +if test "x$ac_cv_func_alarm" = xyes +then : + printf "%s\n" "#define HAVE_ALARM 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "accept4" "ac_cv_func_accept4" +if test "x$ac_cv_func_accept4" = xyes +then : + printf "%s\n" "#define HAVE_ACCEPT4 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer" +if test "x$ac_cv_func_setitimer" = xyes +then : + printf "%s\n" "#define HAVE_SETITIMER 1" >>confdefs.h -# Force lchmod off for Linux. Linux disallows changing the mode of symbolic -# links. Some libc implementations have a stub lchmod implementation that always -# returns an error. -if test "$MACHDEP" != linux; then - for ac_func in lchmod -do : - ac_fn_c_check_func "$LINENO" "lchmod" "ac_cv_func_lchmod" -if test "x$ac_cv_func_lchmod" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LCHMOD 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "getitimer" "ac_cv_func_getitimer" +if test "x$ac_cv_func_getitimer" = xyes +then : + printf "%s\n" "#define HAVE_GETITIMER 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" +if test "x$ac_cv_func_bind_textdomain_codeset" = xyes +then : + printf "%s\n" "#define HAVE_BIND_TEXTDOMAIN_CODESET 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "chown" "ac_cv_func_chown" +if test "x$ac_cv_func_chown" = xyes +then : + printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h -ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include - #include -" -if test "x$ac_cv_have_decl_dirfd" = xyes; then : +fi +ac_fn_c_check_func "$LINENO" "clock" "ac_cv_func_clock" +if test "x$ac_cv_func_clock" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK 1" >>confdefs.h -$as_echo "#define HAVE_DIRFD 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr" +if test "x$ac_cv_func_confstr" = xyes +then : + printf "%s\n" "#define HAVE_CONFSTR 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "close_range" "ac_cv_func_close_range" +if test "x$ac_cv_func_close_range" = xyes +then : + printf "%s\n" "#define HAVE_CLOSE_RANGE 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "copy_file_range" "ac_cv_func_copy_file_range" +if test "x$ac_cv_func_copy_file_range" = xyes +then : + printf "%s\n" "#define HAVE_COPY_FILE_RANGE 1" >>confdefs.h -# For some functions, having a definition is not sufficient, since -# we want to take their address. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chroot" >&5 -$as_echo_n "checking for chroot... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -void *x=chroot - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +fi +ac_fn_c_check_func "$LINENO" "ctermid" "ac_cv_func_ctermid" +if test "x$ac_cv_func_ctermid" = xyes +then : + printf "%s\n" "#define HAVE_CTERMID 1" >>confdefs.h -$as_echo "#define HAVE_CHROOT 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +if test "x$ac_cv_func_dup3" = xyes +then : + printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +fi +ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +if test "x$ac_cv_func_execv" = xyes +then : + printf "%s\n" "#define HAVE_EXECV 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for link" >&5 -$as_echo_n "checking for link... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -void *x=link - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" +if test "x$ac_cv_func_explicit_bzero" = xyes +then : + printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h -$as_echo "#define HAVE_LINK 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "explicit_memset" "ac_cv_func_explicit_memset" +if test "x$ac_cv_func_explicit_memset" = xyes +then : + printf "%s\n" "#define HAVE_EXPLICIT_MEMSET 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +fi +ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" +if test "x$ac_cv_func_faccessat" = xyes +then : + printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for symlink" >&5 -$as_echo_n "checking for symlink... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -void *x=symlink - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" +if test "x$ac_cv_func_fchmod" = xyes +then : + printf "%s\n" "#define HAVE_FCHMOD 1" >>confdefs.h -$as_echo "#define HAVE_SYMLINK 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "fchmodat" "ac_cv_func_fchmodat" +if test "x$ac_cv_func_fchmodat" = xyes +then : + printf "%s\n" "#define HAVE_FCHMODAT 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +fi +ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" +if test "x$ac_cv_func_fchown" = xyes +then : + printf "%s\n" "#define HAVE_FCHOWN 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fchdir" >&5 -$as_echo_n "checking for fchdir... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +ac_fn_c_check_func "$LINENO" "fchownat" "ac_cv_func_fchownat" +if test "x$ac_cv_func_fchownat" = xyes +then : + printf "%s\n" "#define HAVE_FCHOWNAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fdwalk" "ac_cv_func_fdwalk" +if test "x$ac_cv_func_fdwalk" = xyes +then : + printf "%s\n" "#define HAVE_FDWALK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fexecve" "ac_cv_func_fexecve" +if test "x$ac_cv_func_fexecve" = xyes +then : + printf "%s\n" "#define HAVE_FEXECVE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fdopendir" "ac_cv_func_fdopendir" +if test "x$ac_cv_func_fdopendir" = xyes +then : + printf "%s\n" "#define HAVE_FDOPENDIR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" +if test "x$ac_cv_func_fork" = xyes +then : + printf "%s\n" "#define HAVE_FORK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fpathconf" "ac_cv_func_fpathconf" +if test "x$ac_cv_func_fpathconf" = xyes +then : + printf "%s\n" "#define HAVE_FPATHCONF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fstatat" "ac_cv_func_fstatat" +if test "x$ac_cv_func_fstatat" = xyes +then : + printf "%s\n" "#define HAVE_FSTATAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ftime" "ac_cv_func_ftime" +if test "x$ac_cv_func_ftime" = xyes +then : + printf "%s\n" "#define HAVE_FTIME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" +if test "x$ac_cv_func_ftruncate" = xyes +then : + printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "futimesat" "ac_cv_func_futimesat" +if test "x$ac_cv_func_futimesat" = xyes +then : + printf "%s\n" "#define HAVE_FUTIMESAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "futimens" "ac_cv_func_futimens" +if test "x$ac_cv_func_futimens" = xyes +then : + printf "%s\n" "#define HAVE_FUTIMENS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "futimes" "ac_cv_func_futimes" +if test "x$ac_cv_func_futimes" = xyes +then : + printf "%s\n" "#define HAVE_FUTIMES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "gai_strerror" "ac_cv_func_gai_strerror" +if test "x$ac_cv_func_gai_strerror" = xyes +then : + printf "%s\n" "#define HAVE_GAI_STRERROR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" +if test "x$ac_cv_func_getentropy" = xyes +then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r" +if test "x$ac_cv_func_getgrgid_r" = xyes +then : + printf "%s\n" "#define HAVE_GETGRGID_R 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgrnam_r" "ac_cv_func_getgrnam_r" +if test "x$ac_cv_func_getgrnam_r" = xyes +then : + printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" +if test "x$ac_cv_func_getgrouplist" = xyes +then : + printf "%s\n" "#define HAVE_GETGROUPLIST 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" +if test "x$ac_cv_func_getgroups" = xyes +then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getlogin" "ac_cv_func_getlogin" +if test "x$ac_cv_func_getlogin" = xyes +then : + printf "%s\n" "#define HAVE_GETLOGIN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getloadavg" "ac_cv_func_getloadavg" +if test "x$ac_cv_func_getloadavg" = xyes +then : + printf "%s\n" "#define HAVE_GETLOADAVG 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpeername" "ac_cv_func_getpeername" +if test "x$ac_cv_func_getpeername" = xyes +then : + printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpgid" "ac_cv_func_getpgid" +if test "x$ac_cv_func_getpgid" = xyes +then : + printf "%s\n" "#define HAVE_GETPGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid" +if test "x$ac_cv_func_getpid" = xyes +then : + printf "%s\n" "#define HAVE_GETPID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpriority" "ac_cv_func_getpriority" +if test "x$ac_cv_func_getpriority" = xyes +then : + printf "%s\n" "#define HAVE_GETPRIORITY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getresuid" "ac_cv_func_getresuid" +if test "x$ac_cv_func_getresuid" = xyes +then : + printf "%s\n" "#define HAVE_GETRESUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getresgid" "ac_cv_func_getresgid" +if test "x$ac_cv_func_getresgid" = xyes +then : + printf "%s\n" "#define HAVE_GETRESGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpwent" "ac_cv_func_getpwent" +if test "x$ac_cv_func_getpwent" = xyes +then : + printf "%s\n" "#define HAVE_GETPWENT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r" +if test "x$ac_cv_func_getpwnam_r" = xyes +then : + printf "%s\n" "#define HAVE_GETPWNAM_R 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r" +if test "x$ac_cv_func_getpwuid_r" = xyes +then : + printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getspnam" "ac_cv_func_getspnam" +if test "x$ac_cv_func_getspnam" = xyes +then : + printf "%s\n" "#define HAVE_GETSPNAM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getspent" "ac_cv_func_getspent" +if test "x$ac_cv_func_getspent" = xyes +then : + printf "%s\n" "#define HAVE_GETSPENT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getsid" "ac_cv_func_getsid" +if test "x$ac_cv_func_getsid" = xyes +then : + printf "%s\n" "#define HAVE_GETSID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getwd" "ac_cv_func_getwd" +if test "x$ac_cv_func_getwd" = xyes +then : + printf "%s\n" "#define HAVE_GETWD 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "if_nameindex" "ac_cv_func_if_nameindex" +if test "x$ac_cv_func_if_nameindex" = xyes +then : + printf "%s\n" "#define HAVE_IF_NAMEINDEX 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups" +if test "x$ac_cv_func_initgroups" = xyes +then : + printf "%s\n" "#define HAVE_INITGROUPS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "kill" "ac_cv_func_kill" +if test "x$ac_cv_func_kill" = xyes +then : + printf "%s\n" "#define HAVE_KILL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg" +if test "x$ac_cv_func_killpg" = xyes +then : + printf "%s\n" "#define HAVE_KILLPG 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lchown" "ac_cv_func_lchown" +if test "x$ac_cv_func_lchown" = xyes +then : + printf "%s\n" "#define HAVE_LCHOWN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lockf" "ac_cv_func_lockf" +if test "x$ac_cv_func_lockf" = xyes +then : + printf "%s\n" "#define HAVE_LOCKF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "linkat" "ac_cv_func_linkat" +if test "x$ac_cv_func_linkat" = xyes +then : + printf "%s\n" "#define HAVE_LINKAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" +if test "x$ac_cv_func_lstat" = xyes +then : + printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lutimes" "ac_cv_func_lutimes" +if test "x$ac_cv_func_lutimes" = xyes +then : + printf "%s\n" "#define HAVE_LUTIMES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = xyes +then : + printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr" +if test "x$ac_cv_func_memrchr" = xyes +then : + printf "%s\n" "#define HAVE_MEMRCHR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc" +if test "x$ac_cv_func_mbrtowc" = xyes +then : + printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mkdirat" "ac_cv_func_mkdirat" +if test "x$ac_cv_func_mkdirat" = xyes +then : + printf "%s\n" "#define HAVE_MKDIRAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo" +if test "x$ac_cv_func_mkfifo" = xyes +then : + printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "madvise" "ac_cv_func_madvise" +if test "x$ac_cv_func_madvise" = xyes +then : + printf "%s\n" "#define HAVE_MADVISE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mkfifoat" "ac_cv_func_mkfifoat" +if test "x$ac_cv_func_mkfifoat" = xyes +then : + printf "%s\n" "#define HAVE_MKFIFOAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mknod" "ac_cv_func_mknod" +if test "x$ac_cv_func_mknod" = xyes +then : + printf "%s\n" "#define HAVE_MKNOD 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mknodat" "ac_cv_func_mknodat" +if test "x$ac_cv_func_mknodat" = xyes +then : + printf "%s\n" "#define HAVE_MKNODAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" +if test "x$ac_cv_func_mktime" = xyes +then : + printf "%s\n" "#define HAVE_MKTIME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mremap" "ac_cv_func_mremap" +if test "x$ac_cv_func_mremap" = xyes +then : + printf "%s\n" "#define HAVE_MREMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "nice" "ac_cv_func_nice" +if test "x$ac_cv_func_nice" = xyes +then : + printf "%s\n" "#define HAVE_NICE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat" +if test "x$ac_cv_func_openat" = xyes +then : + printf "%s\n" "#define HAVE_OPENAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pathconf" "ac_cv_func_pathconf" +if test "x$ac_cv_func_pathconf" = xyes +then : + printf "%s\n" "#define HAVE_PATHCONF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pause" "ac_cv_func_pause" +if test "x$ac_cv_func_pause" = xyes +then : + printf "%s\n" "#define HAVE_PAUSE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +if test "x$ac_cv_func_pipe2" = xyes +then : + printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" +if test "x$ac_cv_func_plock" = xyes +then : + printf "%s\n" "#define HAVE_PLOCK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" +if test "x$ac_cv_func_poll" = xyes +then : + printf "%s\n" "#define HAVE_POLL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "posix_fallocate" "ac_cv_func_posix_fallocate" +if test "x$ac_cv_func_posix_fallocate" = xyes +then : + printf "%s\n" "#define HAVE_POSIX_FALLOCATE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise" +if test "x$ac_cv_func_posix_fadvise" = xyes +then : + printf "%s\n" "#define HAVE_POSIX_FADVISE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" +if test "x$ac_cv_func_posix_spawn" = xyes +then : + printf "%s\n" "#define HAVE_POSIX_SPAWN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" +if test "x$ac_cv_func_posix_spawnp" = xyes +then : + printf "%s\n" "#define HAVE_POSIX_SPAWNP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" +if test "x$ac_cv_func_pread" = xyes +then : + printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "preadv" "ac_cv_func_preadv" +if test "x$ac_cv_func_preadv" = xyes +then : + printf "%s\n" "#define HAVE_PREADV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "preadv2" "ac_cv_func_preadv2" +if test "x$ac_cv_func_preadv2" = xyes +then : + printf "%s\n" "#define HAVE_PREADV2 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pthread_condattr_setclock" "ac_cv_func_pthread_condattr_setclock" +if test "x$ac_cv_func_pthread_condattr_setclock" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pthread_init" "ac_cv_func_pthread_init" +if test "x$ac_cv_func_pthread_init" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_INIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" +if test "x$ac_cv_func_pthread_kill" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_KILL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" +if test "x$ac_cv_func_pwrite" = xyes +then : + printf "%s\n" "#define HAVE_PWRITE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pwritev" "ac_cv_func_pwritev" +if test "x$ac_cv_func_pwritev" = xyes +then : + printf "%s\n" "#define HAVE_PWRITEV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pwritev2" "ac_cv_func_pwritev2" +if test "x$ac_cv_func_pwritev2" = xyes +then : + printf "%s\n" "#define HAVE_PWRITEV2 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" +if test "x$ac_cv_func_readlink" = xyes +then : + printf "%s\n" "#define HAVE_READLINK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "readlinkat" "ac_cv_func_readlinkat" +if test "x$ac_cv_func_readlinkat" = xyes +then : + printf "%s\n" "#define HAVE_READLINKAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "readv" "ac_cv_func_readv" +if test "x$ac_cv_func_readv" = xyes +then : + printf "%s\n" "#define HAVE_READV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" +if test "x$ac_cv_func_realpath" = xyes +then : + printf "%s\n" "#define HAVE_REALPATH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "renameat" "ac_cv_func_renameat" +if test "x$ac_cv_func_renameat" = xyes +then : + printf "%s\n" "#define HAVE_RENAMEAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sem_open" "ac_cv_func_sem_open" +if test "x$ac_cv_func_sem_open" = xyes +then : + printf "%s\n" "#define HAVE_SEM_OPEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sem_timedwait" "ac_cv_func_sem_timedwait" +if test "x$ac_cv_func_sem_timedwait" = xyes +then : + printf "%s\n" "#define HAVE_SEM_TIMEDWAIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sem_getvalue" "ac_cv_func_sem_getvalue" +if test "x$ac_cv_func_sem_getvalue" = xyes +then : + printf "%s\n" "#define HAVE_SEM_GETVALUE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sem_unlink" "ac_cv_func_sem_unlink" +if test "x$ac_cv_func_sem_unlink" = xyes +then : + printf "%s\n" "#define HAVE_SEM_UNLINK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sendfile" "ac_cv_func_sendfile" +if test "x$ac_cv_func_sendfile" = xyes +then : + printf "%s\n" "#define HAVE_SENDFILE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setegid" "ac_cv_func_setegid" +if test "x$ac_cv_func_setegid" = xyes +then : + printf "%s\n" "#define HAVE_SETEGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "seteuid" "ac_cv_func_seteuid" +if test "x$ac_cv_func_seteuid" = xyes +then : + printf "%s\n" "#define HAVE_SETEUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setgid" "ac_cv_func_setgid" +if test "x$ac_cv_func_setgid" = xyes +then : + printf "%s\n" "#define HAVE_SETGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sethostname" "ac_cv_func_sethostname" +if test "x$ac_cv_func_sethostname" = xyes +then : + printf "%s\n" "#define HAVE_SETHOSTNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" +if test "x$ac_cv_func_setlocale" = xyes +then : + printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid" +if test "x$ac_cv_func_setregid" = xyes +then : + printf "%s\n" "#define HAVE_SETREGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid" +if test "x$ac_cv_func_setreuid" = xyes +then : + printf "%s\n" "#define HAVE_SETREUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid" +if test "x$ac_cv_func_setresuid" = xyes +then : + printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setresgid" "ac_cv_func_setresgid" +if test "x$ac_cv_func_setresgid" = xyes +then : + printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" +if test "x$ac_cv_func_setsid" = xyes +then : + printf "%s\n" "#define HAVE_SETSID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setpgid" "ac_cv_func_setpgid" +if test "x$ac_cv_func_setpgid" = xyes +then : + printf "%s\n" "#define HAVE_SETPGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setpgrp" "ac_cv_func_setpgrp" +if test "x$ac_cv_func_setpgrp" = xyes +then : + printf "%s\n" "#define HAVE_SETPGRP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setpriority" "ac_cv_func_setpriority" +if test "x$ac_cv_func_setpriority" = xyes +then : + printf "%s\n" "#define HAVE_SETPRIORITY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setuid" "ac_cv_func_setuid" +if test "x$ac_cv_func_setuid" = xyes +then : + printf "%s\n" "#define HAVE_SETUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setvbuf" "ac_cv_func_setvbuf" +if test "x$ac_cv_func_setvbuf" = xyes +then : + printf "%s\n" "#define HAVE_SETVBUF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sched_get_priority_max" "ac_cv_func_sched_get_priority_max" +if test "x$ac_cv_func_sched_get_priority_max" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_GET_PRIORITY_MAX 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sched_setaffinity" "ac_cv_func_sched_setaffinity" +if test "x$ac_cv_func_sched_setaffinity" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_SETAFFINITY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sched_setscheduler" "ac_cv_func_sched_setscheduler" +if test "x$ac_cv_func_sched_setscheduler" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_SETSCHEDULER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sched_setparam" "ac_cv_func_sched_setparam" +if test "x$ac_cv_func_sched_setparam" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_SETPARAM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sched_rr_get_interval" "ac_cv_func_sched_rr_get_interval" +if test "x$ac_cv_func_sched_rr_get_interval" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_RR_GET_INTERVAL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" +if test "x$ac_cv_func_sigaction" = xyes +then : + printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigaltstack" "ac_cv_func_sigaltstack" +if test "x$ac_cv_func_sigaltstack" = xyes +then : + printf "%s\n" "#define HAVE_SIGALTSTACK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigfillset" "ac_cv_func_sigfillset" +if test "x$ac_cv_func_sigfillset" = xyes +then : + printf "%s\n" "#define HAVE_SIGFILLSET 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "siginterrupt" "ac_cv_func_siginterrupt" +if test "x$ac_cv_func_siginterrupt" = xyes +then : + printf "%s\n" "#define HAVE_SIGINTERRUPT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigpending" "ac_cv_func_sigpending" +if test "x$ac_cv_func_sigpending" = xyes +then : + printf "%s\n" "#define HAVE_SIGPENDING 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigrelse" "ac_cv_func_sigrelse" +if test "x$ac_cv_func_sigrelse" = xyes +then : + printf "%s\n" "#define HAVE_SIGRELSE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigtimedwait" "ac_cv_func_sigtimedwait" +if test "x$ac_cv_func_sigtimedwait" = xyes +then : + printf "%s\n" "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigwait" "ac_cv_func_sigwait" +if test "x$ac_cv_func_sigwait" = xyes +then : + printf "%s\n" "#define HAVE_SIGWAIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sigwaitinfo" "ac_cv_func_sigwaitinfo" +if test "x$ac_cv_func_sigwaitinfo" = xyes +then : + printf "%s\n" "#define HAVE_SIGWAITINFO 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" +if test "x$ac_cv_func_snprintf" = xyes +then : + printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "splice" "ac_cv_func_splice" +if test "x$ac_cv_func_splice" = xyes +then : + printf "%s\n" "#define HAVE_SPLICE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" +if test "x$ac_cv_func_strftime" = xyes +then : + printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" +if test "x$ac_cv_func_strlcpy" = xyes +then : + printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" +if test "x$ac_cv_func_strsignal" = xyes +then : + printf "%s\n" "#define HAVE_STRSIGNAL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "symlinkat" "ac_cv_func_symlinkat" +if test "x$ac_cv_func_symlinkat" = xyes +then : + printf "%s\n" "#define HAVE_SYMLINKAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sync" "ac_cv_func_sync" +if test "x$ac_cv_func_sync" = xyes +then : + printf "%s\n" "#define HAVE_SYNC 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" +if test "x$ac_cv_func_sysconf" = xyes +then : + printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tcgetpgrp" "ac_cv_func_tcgetpgrp" +if test "x$ac_cv_func_tcgetpgrp" = xyes +then : + printf "%s\n" "#define HAVE_TCGETPGRP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tcsetpgrp" "ac_cv_func_tcsetpgrp" +if test "x$ac_cv_func_tcsetpgrp" = xyes +then : + printf "%s\n" "#define HAVE_TCSETPGRP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tempnam" "ac_cv_func_tempnam" +if test "x$ac_cv_func_tempnam" = xyes +then : + printf "%s\n" "#define HAVE_TEMPNAM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" +if test "x$ac_cv_func_timegm" = xyes +then : + printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" +if test "x$ac_cv_func_times" = xyes +then : + printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tmpfile" "ac_cv_func_tmpfile" +if test "x$ac_cv_func_tmpfile" = xyes +then : + printf "%s\n" "#define HAVE_TMPFILE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tmpnam" "ac_cv_func_tmpnam" +if test "x$ac_cv_func_tmpnam" = xyes +then : + printf "%s\n" "#define HAVE_TMPNAM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tmpnam_r" "ac_cv_func_tmpnam_r" +if test "x$ac_cv_func_tmpnam_r" = xyes +then : + printf "%s\n" "#define HAVE_TMPNAM_R 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "truncate" "ac_cv_func_truncate" +if test "x$ac_cv_func_truncate" = xyes +then : + printf "%s\n" "#define HAVE_TRUNCATE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" +if test "x$ac_cv_func_uname" = xyes +then : + printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "unlinkat" "ac_cv_func_unlinkat" +if test "x$ac_cv_func_unlinkat" = xyes +then : + printf "%s\n" "#define HAVE_UNLINKAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "utimensat" "ac_cv_func_utimensat" +if test "x$ac_cv_func_utimensat" = xyes +then : + printf "%s\n" "#define HAVE_UTIMENSAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" +if test "x$ac_cv_func_utimes" = xyes +then : + printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "vfork" "ac_cv_func_vfork" +if test "x$ac_cv_func_vfork" = xyes +then : + printf "%s\n" "#define HAVE_VFORK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid" +if test "x$ac_cv_func_waitid" = xyes +then : + printf "%s\n" "#define HAVE_WAITID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" +if test "x$ac_cv_func_waitpid" = xyes +then : + printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3" +if test "x$ac_cv_func_wait3" = xyes +then : + printf "%s\n" "#define HAVE_WAIT3 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wait4" "ac_cv_func_wait4" +if test "x$ac_cv_func_wait4" = xyes +then : + printf "%s\n" "#define HAVE_WAIT4 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" +if test "x$ac_cv_func_wcscoll" = xyes +then : + printf "%s\n" "#define HAVE_WCSCOLL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcsftime" "ac_cv_func_wcsftime" +if test "x$ac_cv_func_wcsftime" = xyes +then : + printf "%s\n" "#define HAVE_WCSFTIME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcsxfrm" "ac_cv_func_wcsxfrm" +if test "x$ac_cv_func_wcsxfrm" = xyes +then : + printf "%s\n" "#define HAVE_WCSXFRM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wmemcmp" "ac_cv_func_wmemcmp" +if test "x$ac_cv_func_wmemcmp" = xyes +then : + printf "%s\n" "#define HAVE_WMEMCMP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "writev" "ac_cv_func_writev" +if test "x$ac_cv_func_writev" = xyes +then : + printf "%s\n" "#define HAVE_WRITEV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "_getpty" "ac_cv_func__getpty" +if test "x$ac_cv_func__getpty" = xyes +then : + printf "%s\n" "#define HAVE__GETPTY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "rtpSpawn" "ac_cv_func_rtpSpawn" +if test "x$ac_cv_func_rtpSpawn" = xyes +then : + printf "%s\n" "#define HAVE_RTPSPAWN 1" >>confdefs.h + +fi + + +# Force lchmod off for Linux. Linux disallows changing the mode of symbolic +# links. Some libc implementations have a stub lchmod implementation that always +# returns an error. +if test "$MACHDEP" != linux; then + ac_fn_c_check_func "$LINENO" "lchmod" "ac_cv_func_lchmod" +if test "x$ac_cv_func_lchmod" = xyes +then : + printf "%s\n" "#define HAVE_LCHMOD 1" >>confdefs.h + +fi + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + +ac_fn_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include + #include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_dirfd" = xyes +then : + +printf "%s\n" "#define HAVE_DIRFD 1" >>confdefs.h + +fi + +# For some functions, having a definition is not sufficient, since +# we want to take their address. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chroot" >&5 +printf %s "checking for chroot... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ #include int -main () +main (void) +{ +void *x=chroot + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +printf "%s\n" "#define HAVE_CHROOT 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for link" >&5 +printf %s "checking for link... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +void *x=link + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +printf "%s\n" "#define HAVE_LINK 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for symlink" >&5 +printf %s "checking for symlink... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +void *x=symlink + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +printf "%s\n" "#define HAVE_SYMLINK 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fchdir" >&5 +printf %s "checking for fchdir... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) { void *x=fchdir ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_FCHDIR 1" >>confdefs.h +printf "%s\n" "#define HAVE_FCHDIR 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fsync" >&5 -$as_echo_n "checking for fsync... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fsync" >&5 +printf %s "checking for fsync... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=fsync ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_FSYNC 1" >>confdefs.h +printf "%s\n" "#define HAVE_FSYNC 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fdatasync" >&5 -$as_echo_n "checking for fdatasync... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fdatasync" >&5 +printf %s "checking for fdatasync... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=fdatasync ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_FDATASYNC 1" >>confdefs.h +printf "%s\n" "#define HAVE_FDATASYNC 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epoll" >&5 -$as_echo_n "checking for epoll... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoll" >&5 +printf %s "checking for epoll... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=epoll_create ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_EPOLL 1" >>confdefs.h +printf "%s\n" "#define HAVE_EPOLL 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epoll_create1" >&5 -$as_echo_n "checking for epoll_create1... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoll_create1" >&5 +printf %s "checking for epoll_create1... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=epoll_create1 ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_EPOLL_CREATE1 1" >>confdefs.h +printf "%s\n" "#define HAVE_EPOLL_CREATE1 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kqueue" >&5 -$as_echo_n "checking for kqueue... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kqueue" >&5 +printf %s "checking for kqueue... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12104,27 +14215,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { int x=kqueue() ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_KQUEUE 1" >>confdefs.h +printf "%s\n" "#define HAVE_KQUEUE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prlimit" >&5 -$as_echo_n "checking for prlimit... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for prlimit" >&5 +printf %s "checking for prlimit... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12132,53 +14244,55 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { void *x=prlimit ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_PRLIMIT 1" >>confdefs.h +printf "%s\n" "#define HAVE_PRLIMIT 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5 -$as_echo_n "checking for _dyld_shared_cache_contains_path... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5 +printf %s "checking for _dyld_shared_cache_contains_path... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=_dyld_shared_cache_contains_path ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h +printf "%s\n" "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5 -$as_echo_n "checking for memfd_create... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5 +printf %s "checking for memfd_create... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12190,28 +14304,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { void *x=memfd_create ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_MEMFD_CREATE 1" >>confdefs.h +printf "%s\n" "#define HAVE_MEMFD_CREATE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for eventfd" >&5 -$as_echo_n "checking for eventfd... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for eventfd" >&5 +printf %s "checking for eventfd... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12220,25 +14335,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { int x = eventfd(0, EFD_CLOEXEC) ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_EVENTFD 1" >>confdefs.h +printf "%s\n" "#define HAVE_EVENTFD 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # On some systems (eg. FreeBSD 5), we would find a definition of the # functions ctermid_r, setgroups in the library, but no prototype @@ -12246,44 +14362,46 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # address to avoid compiler warnings and potential miscompilations # because of the missing prototypes. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ctermid_r" >&5 -$as_echo_n "checking for ctermid_r... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ctermid_r" >&5 +printf %s "checking for ctermid_r... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void* p = ctermid_r ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CTERMID_R 1" >>confdefs.h +printf "%s\n" "#define HAVE_CTERMID_R 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flock declaration" >&5 -$as_echo_n "checking for flock declaration... " >&6; } -if ${ac_cv_flock_decl+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flock declaration" >&5 +printf %s "checking for flock declaration... " >&6; } +if test ${ac_cv_flock_decl+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void* p = flock @@ -12291,32 +14409,34 @@ void* p = flock return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_flock_decl=yes -else +else $as_nop ac_cv_flock_decl=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_flock_decl" >&5 -$as_echo "$ac_cv_flock_decl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_flock_decl" >&5 +printf "%s\n" "$ac_cv_flock_decl" >&6; } if test "x${ac_cv_flock_decl}" = xyes; then - for ac_func in flock -do : - ac_fn_c_check_func "$LINENO" "flock" "ac_cv_func_flock" -if test "x$ac_cv_func_flock" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FLOCK 1 -_ACEOF -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flock in -lbsd" >&5 -$as_echo_n "checking for flock in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_flock+:} false; then : - $as_echo_n "(cached) " >&6 -else + for ac_func in flock +do : + ac_fn_c_check_func "$LINENO" "flock" "ac_cv_func_flock" +if test "x$ac_cv_func_flock" = xyes +then : + printf "%s\n" "#define HAVE_FLOCK 1" >>confdefs.h + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flock in -lbsd" >&5 +printf %s "checking for flock in -lbsd... " >&6; } +if test ${ac_cv_lib_bsd_flock+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12325,109 +14445,111 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char flock (); int -main () +main (void) { return flock (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_bsd_flock=yes -else +else $as_nop ac_cv_lib_bsd_flock=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_flock" >&5 -$as_echo "$ac_cv_lib_bsd_flock" >&6; } -if test "x$ac_cv_lib_bsd_flock" = xyes; then : - $as_echo "#define HAVE_FLOCK 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_flock" >&5 +printf "%s\n" "$ac_cv_lib_bsd_flock" >&6; } +if test "x$ac_cv_lib_bsd_flock" = xyes +then : + printf "%s\n" "#define HAVE_FLOCK 1" >>confdefs.h -$as_echo "#define FLOCK_NEEDS_LIBBSD 1" >>confdefs.h +printf "%s\n" "#define FLOCK_NEEDS_LIBBSD 1" >>confdefs.h fi fi -done +done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 -$as_echo_n "checking for getpagesize... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 +printf %s "checking for getpagesize... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void* p = getpagesize ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_GETPAGESIZE 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken unsetenv" >&5 -$as_echo_n "checking for broken unsetenv... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken unsetenv" >&5 +printf %s "checking for broken unsetenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int res = unsetenv("DUMMY") ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -else +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +else $as_nop -$as_echo "#define HAVE_BROKEN_UNSETENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_UNSETENV 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext for ac_prog in true do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_TRUE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_TRUE+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$TRUE"; then ac_cv_prog_TRUE="$TRUE" # Let the user override the test. else @@ -12435,11 +14557,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_TRUE="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -12450,11 +14576,11 @@ fi fi TRUE=$ac_cv_prog_TRUE if test -n "$TRUE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TRUE" >&5 -$as_echo "$TRUE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TRUE" >&5 +printf "%s\n" "$TRUE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -12463,11 +14589,12 @@ done test -n "$TRUE" || TRUE="/bin/true" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lc" >&5 -$as_echo_n "checking for inet_aton in -lc... " >&6; } -if ${ac_cv_lib_c_inet_aton+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lc" >&5 +printf %s "checking for inet_aton in -lc... " >&6; } +if test ${ac_cv_lib_c_inet_aton+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12476,37 +14603,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char inet_aton (); int -main () +main (void) { return inet_aton (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_c_inet_aton=yes -else +else $as_nop ac_cv_lib_c_inet_aton=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_inet_aton" >&5 -$as_echo "$ac_cv_lib_c_inet_aton" >&6; } -if test "x$ac_cv_lib_c_inet_aton" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_inet_aton" >&5 +printf "%s\n" "$ac_cv_lib_c_inet_aton" >&6; } +if test "x$ac_cv_lib_c_inet_aton" = xyes +then : $ac_cv_prog_TRUE -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lresolv" >&5 -$as_echo_n "checking for inet_aton in -lresolv... " >&6; } -if ${ac_cv_lib_resolv_inet_aton+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lresolv" >&5 +printf %s "checking for inet_aton in -lresolv... " >&6; } +if test ${ac_cv_lib_resolv_inet_aton+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12515,33 +14642,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char inet_aton (); int -main () +main (void) { return inet_aton (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_resolv_inet_aton=yes -else +else $as_nop ac_cv_lib_resolv_inet_aton=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_inet_aton" >&5 -$as_echo "$ac_cv_lib_resolv_inet_aton" >&6; } -if test "x$ac_cv_lib_resolv_inet_aton" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBRESOLV 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_inet_aton" >&5 +printf "%s\n" "$ac_cv_lib_resolv_inet_aton" >&6; } +if test "x$ac_cv_lib_resolv_inet_aton" = xyes +then : + printf "%s\n" "#define HAVE_LIBRESOLV 1" >>confdefs.h LIBS="-lresolv $LIBS" @@ -12553,14 +14677,16 @@ fi # On Tru64, chflags seems to be present, but calling it will # exit Python -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chflags" >&5 -$as_echo_n "checking for chflags... " >&6; } -if ${ac_cv_have_chflags+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chflags" >&5 +printf %s "checking for chflags... " >&6; } +if test ${ac_cv_have_chflags+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_have_chflags=cross -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12574,9 +14700,10 @@ int main(int argc, char*argv[]) } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_have_chflags=yes -else +else $as_nop ac_cv_have_chflags=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -12585,31 +14712,34 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_chflags" >&5 -$as_echo "$ac_cv_have_chflags" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_chflags" >&5 +printf "%s\n" "$ac_cv_have_chflags" >&6; } if test "$ac_cv_have_chflags" = cross ; then ac_fn_c_check_func "$LINENO" "chflags" "ac_cv_func_chflags" -if test "x$ac_cv_func_chflags" = xyes; then : +if test "x$ac_cv_func_chflags" = xyes +then : ac_cv_have_chflags="yes" -else +else $as_nop ac_cv_have_chflags="no" fi fi if test "$ac_cv_have_chflags" = yes ; then -$as_echo "#define HAVE_CHFLAGS 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHFLAGS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lchflags" >&5 -$as_echo_n "checking for lchflags... " >&6; } -if ${ac_cv_have_lchflags+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lchflags" >&5 +printf %s "checking for lchflags... " >&6; } +if test ${ac_cv_have_lchflags+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_have_lchflags=cross -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12623,9 +14753,10 @@ int main(int argc, char*argv[]) } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_have_lchflags=yes -else +else $as_nop ac_cv_have_lchflags=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -12634,20 +14765,21 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lchflags" >&5 -$as_echo "$ac_cv_have_lchflags" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lchflags" >&5 +printf "%s\n" "$ac_cv_have_lchflags" >&6; } if test "$ac_cv_have_lchflags" = cross ; then ac_fn_c_check_func "$LINENO" "lchflags" "ac_cv_func_lchflags" -if test "x$ac_cv_func_lchflags" = xyes; then : +if test "x$ac_cv_func_lchflags" = xyes +then : ac_cv_have_lchflags="yes" -else +else $as_nop ac_cv_have_lchflags="no" fi fi if test "$ac_cv_have_lchflags" = yes ; then -$as_echo "#define HAVE_LCHFLAGS 1" >>confdefs.h +printf "%s\n" "#define HAVE_LCHFLAGS 1" >>confdefs.h fi @@ -12660,11 +14792,12 @@ Darwin/*) ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 -$as_echo_n "checking for inflateCopy in -lz... " >&6; } -if ${ac_cv_lib_z_inflateCopy+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 +printf %s "checking for inflateCopy in -lz... " >&6; } +if test ${ac_cv_lib_z_inflateCopy+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12673,32 +14806,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char inflateCopy (); int -main () +main (void) { return inflateCopy (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_z_inflateCopy=yes -else +else $as_nop ac_cv_lib_z_inflateCopy=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 -$as_echo "$ac_cv_lib_z_inflateCopy" >&6; } -if test "x$ac_cv_lib_z_inflateCopy" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 +printf "%s\n" "$ac_cv_lib_z_inflateCopy" >&6; } +if test "x$ac_cv_lib_z_inflateCopy" = xyes +then : -$as_echo "#define HAVE_ZLIB_COPY 1" >>confdefs.h +printf "%s\n" "#define HAVE_ZLIB_COPY 1" >>confdefs.h fi @@ -12710,37 +14842,38 @@ Darwin/*) ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hstrerror" >&5 -$as_echo_n "checking for hstrerror... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hstrerror" >&5 +printf %s "checking for hstrerror... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void* p = hstrerror; hstrerror(0) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_HSTRERROR 1" >>confdefs.h +printf "%s\n" "#define HAVE_HSTRERROR 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 -$as_echo_n "checking for inet_aton... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 +printf %s "checking for inet_aton... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12750,29 +14883,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { void* p = inet_aton;inet_aton(0,0) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_INET_ATON 1" >>confdefs.h +printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5 -$as_echo_n "checking for inet_pton... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5 +printf %s "checking for inet_pton... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12782,29 +14916,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { void* p = inet_pton ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_INET_PTON 1" >>confdefs.h +printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # On some systems, setgroups is in unistd.h, on others, in grp.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for setgroups" >&5 -$as_echo_n "checking for setgroups... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setgroups" >&5 +printf %s "checking for setgroups... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12814,42 +14949,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { void* p = setgroups ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_SETGROUPS 1" >>confdefs.h +printf "%s\n" "#define HAVE_SETGROUPS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # check for openpty and forkpty -for ac_func in openpty + + for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" -if test "x$ac_cv_func_openpty" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENPTY 1 -_ACEOF - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 -$as_echo_n "checking for openpty in -lutil... " >&6; } -if ${ac_cv_lib_util_openpty+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func_openpty" = xyes +then : + printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 +printf %s "checking for openpty in -lutil... " >&6; } +if test ${ac_cv_lib_util_openpty+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12858,38 +14995,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char openpty (); int -main () +main (void) { return openpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_util_openpty=yes -else +else $as_nop ac_cv_lib_util_openpty=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 -$as_echo "$ac_cv_lib_util_openpty" >&6; } -if test "x$ac_cv_lib_util_openpty" = xyes; then : - $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 +printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } +if test "x$ac_cv_lib_util_openpty" = xyes +then : + printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lbsd" >&5 -$as_echo_n "checking for openpty in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_openpty+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lbsd" >&5 +printf %s "checking for openpty in -lbsd... " >&6; } +if test ${ac_cv_lib_bsd_openpty+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12898,31 +15035,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char openpty (); int -main () +main (void) { return openpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_bsd_openpty=yes -else +else $as_nop ac_cv_lib_bsd_openpty=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_openpty" >&5 -$as_echo "$ac_cv_lib_bsd_openpty" >&6; } -if test "x$ac_cv_lib_bsd_openpty" = xyes; then : - $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_openpty" >&5 +printf "%s\n" "$ac_cv_lib_bsd_openpty" >&6; } +if test "x$ac_cv_lib_bsd_openpty" = xyes +then : + printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lbsd" fi @@ -12931,22 +15067,23 @@ fi fi + done -for ac_func in forkpty + for ac_func in forkpty do : ac_fn_c_check_func "$LINENO" "forkpty" "ac_cv_func_forkpty" -if test "x$ac_cv_func_forkpty" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FORKPTY 1 -_ACEOF - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 -$as_echo_n "checking for forkpty in -lutil... " >&6; } -if ${ac_cv_lib_util_forkpty+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func_forkpty" = xyes +then : + printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 +printf %s "checking for forkpty in -lutil... " >&6; } +if test ${ac_cv_lib_util_forkpty+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12955,38 +15092,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char forkpty (); int -main () +main (void) { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_util_forkpty=yes -else +else $as_nop ac_cv_lib_util_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 -$as_echo "$ac_cv_lib_util_forkpty" >&6; } -if test "x$ac_cv_lib_util_forkpty" = xyes; then : - $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 +printf "%s\n" "$ac_cv_lib_util_forkpty" >&6; } +if test "x$ac_cv_lib_util_forkpty" = xyes +then : + printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h LIBS="$LIBS -lutil" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lbsd" >&5 -$as_echo_n "checking for forkpty in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_forkpty+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lbsd" >&5 +printf %s "checking for forkpty in -lbsd... " >&6; } +if test ${ac_cv_lib_bsd_forkpty+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12995,31 +15132,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char forkpty (); int -main () +main (void) { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_bsd_forkpty=yes -else +else $as_nop ac_cv_lib_bsd_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_forkpty" >&5 -$as_echo "$ac_cv_lib_bsd_forkpty" >&6; } -if test "x$ac_cv_lib_bsd_forkpty" = xyes; then : - $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_forkpty" >&5 +printf "%s\n" "$ac_cv_lib_bsd_forkpty" >&6; } +if test "x$ac_cv_lib_bsd_forkpty" = xyes +then : + printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h LIBS="$LIBS -lbsd" fi @@ -13028,28 +15164,54 @@ fi fi -done +done # check for long file support functions -for ac_func in fseek64 fseeko fstatvfs ftell64 ftello statvfs -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "fseek64" "ac_cv_func_fseek64" +if test "x$ac_cv_func_fseek64" = xyes +then : + printf "%s\n" "#define HAVE_FSEEK64 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko" +if test "x$ac_cv_func_fseeko" = xyes +then : + printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fstatvfs" "ac_cv_func_fstatvfs" +if test "x$ac_cv_func_fstatvfs" = xyes +then : + printf "%s\n" "#define HAVE_FSTATVFS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ftell64" "ac_cv_func_ftell64" +if test "x$ac_cv_func_ftell64" = xyes +then : + printf "%s\n" "#define HAVE_FTELL64 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ftello" "ac_cv_func_ftello" +if test "x$ac_cv_func_ftello" = xyes +then : + printf "%s\n" "#define HAVE_FTELLO 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "statvfs" "ac_cv_func_statvfs" +if test "x$ac_cv_func_statvfs" = xyes +then : + printf "%s\n" "#define HAVE_STATVFS 1" >>confdefs.h fi -done ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2" -if test "x$ac_cv_func_dup2" = xyes; then : - $as_echo "#define HAVE_DUP2 1" >>confdefs.h +if test "x$ac_cv_func_dup2" = xyes +then : + printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" dup2.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dup2.$ac_objext" @@ -13059,70 +15221,72 @@ esac fi -for ac_func in getpgrp + for ac_func in getpgrp do : ac_fn_c_check_func "$LINENO" "getpgrp" "ac_cv_func_getpgrp" -if test "x$ac_cv_func_getpgrp" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETPGRP 1 -_ACEOF +if test "x$ac_cv_func_getpgrp" = xyes +then : + printf "%s\n" "#define HAVE_GETPGRP 1" >>confdefs.h cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { getpgrp(0); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define GETPGRP_HAVE_ARG 1" >>confdefs.h +printf "%s\n" "#define GETPGRP_HAVE_ARG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi + done -for ac_func in setpgrp + for ac_func in setpgrp do : ac_fn_c_check_func "$LINENO" "setpgrp" "ac_cv_func_setpgrp" -if test "x$ac_cv_func_setpgrp" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SETPGRP 1 -_ACEOF +if test "x$ac_cv_func_setpgrp" = xyes +then : + printf "%s\n" "#define HAVE_SETPGRP 1" >>confdefs.h cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { setpgrp(0,0); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define SETPGRP_HAVE_ARG 1" >>confdefs.h +printf "%s\n" "#define SETPGRP_HAVE_ARG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -done +done # We search for both crypt and crypt_r as one or the other may be defined # This gets us our -lcrypt in LIBS when required on the target platform. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 -$as_echo_n "checking for library containing crypt... " >&6; } -if ${ac_cv_search_crypt+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 +printf %s "checking for library containing crypt... " >&6; } +if test ${ac_cv_search_crypt+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13130,55 +15294,58 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char crypt (); int -main () +main (void) { return crypt (); ; return 0; } _ACEOF -for ac_lib in '' crypt; do +for ac_lib in '' crypt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_crypt=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_crypt+:} false; then : + if test ${ac_cv_search_crypt+y} +then : break fi done -if ${ac_cv_search_crypt+:} false; then : +if test ${ac_cv_search_crypt+y} +then : -else +else $as_nop ac_cv_search_crypt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 -$as_echo "$ac_cv_search_crypt" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 +printf "%s\n" "$ac_cv_search_crypt" >&6; } ac_res=$ac_cv_search_crypt -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5 -$as_echo_n "checking for library containing crypt_r... " >&6; } -if ${ac_cv_search_crypt_r+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5 +printf %s "checking for library containing crypt_r... " >&6; } +if test ${ac_cv_search_crypt_r+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13186,53 +15353,56 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char crypt_r (); int -main () +main (void) { return crypt_r (); ; return 0; } _ACEOF -for ac_lib in '' crypt; do +for ac_lib in '' crypt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_crypt_r=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_crypt_r+:} false; then : + if test ${ac_cv_search_crypt_r+y} +then : break fi done -if ${ac_cv_search_crypt_r+:} false; then : +if test ${ac_cv_search_crypt_r+y} +then : -else +else $as_nop ac_cv_search_crypt_r=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5 -$as_echo "$ac_cv_search_crypt_r" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5 +printf "%s\n" "$ac_cv_search_crypt_r" >&6; } ac_res=$ac_cv_search_crypt_r -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "crypt_r" "ac_cv_func_crypt_r" -if test "x$ac_cv_func_crypt_r" = xyes; then : +if test "x$ac_cv_func_crypt_r" = xyes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13240,7 +15410,7 @@ if test "x$ac_cv_func_crypt_r" = xyes; then : #include int -main () +main (void) { struct crypt_data d; @@ -13250,31 +15420,33 @@ char *r = crypt_r("", "", &d); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CRYPT_R 1" >>confdefs.h +printf "%s\n" "#define HAVE_CRYPT_R 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -for ac_func in clock_gettime + + for ac_func in clock_gettime do : ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" -if test "x$ac_cv_func_clock_gettime" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CLOCK_GETTIME 1 -_ACEOF - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 -$as_echo_n "checking for clock_gettime in -lrt... " >&6; } -if ${ac_cv_lib_rt_clock_gettime+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func_clock_gettime" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +printf %s "checking for clock_gettime in -lrt... " >&6; } +if test ${ac_cv_lib_rt_clock_gettime+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13283,60 +15455,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char clock_gettime (); int -main () +main (void) { return clock_gettime (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_rt_clock_gettime=yes -else +else $as_nop ac_cv_lib_rt_clock_gettime=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 -$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } -if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes +then : LIBS="$LIBS -lrt" - $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h + printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h -$as_echo "#define TIMEMODULE_LIB rt" >>confdefs.h +printf "%s\n" "#define TIMEMODULE_LIB rt" >>confdefs.h fi fi + done -for ac_func in clock_getres + for ac_func in clock_getres do : ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres" -if test "x$ac_cv_func_clock_getres" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CLOCK_GETRES 1 -_ACEOF - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_getres in -lrt" >&5 -$as_echo_n "checking for clock_getres in -lrt... " >&6; } -if ${ac_cv_lib_rt_clock_getres+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func_clock_getres" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_getres in -lrt" >&5 +printf %s "checking for clock_getres in -lrt... " >&6; } +if test ${ac_cv_lib_rt_clock_getres+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13345,56 +15517,56 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char clock_getres (); int -main () +main (void) { return clock_getres (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_rt_clock_getres=yes -else +else $as_nop ac_cv_lib_rt_clock_getres=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_getres" >&5 -$as_echo "$ac_cv_lib_rt_clock_getres" >&6; } -if test "x$ac_cv_lib_rt_clock_getres" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_getres" >&5 +printf "%s\n" "$ac_cv_lib_rt_clock_getres" >&6; } +if test "x$ac_cv_lib_rt_clock_getres" = xyes +then : - $as_echo "#define HAVE_CLOCK_GETRES 1" >>confdefs.h + printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h fi fi + done -for ac_func in clock_settime + for ac_func in clock_settime do : ac_fn_c_check_func "$LINENO" "clock_settime" "ac_cv_func_clock_settime" -if test "x$ac_cv_func_clock_settime" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CLOCK_SETTIME 1 -_ACEOF - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_settime in -lrt" >&5 -$as_echo_n "checking for clock_settime in -lrt... " >&6; } -if ${ac_cv_lib_rt_clock_settime+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func_clock_settime" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_settime in -lrt" >&5 +printf %s "checking for clock_settime in -lrt... " >&6; } +if test ${ac_cv_lib_rt_clock_settime+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13403,43 +15575,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char clock_settime (); int -main () +main (void) { return clock_settime (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_rt_clock_settime=yes -else +else $as_nop ac_cv_lib_rt_clock_settime=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_settime" >&5 -$as_echo "$ac_cv_lib_rt_clock_settime" >&6; } -if test "x$ac_cv_lib_rt_clock_settime" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_settime" >&5 +printf "%s\n" "$ac_cv_lib_rt_clock_settime" >&6; } +if test "x$ac_cv_lib_rt_clock_settime" = xyes +then : - $as_echo "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h + printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h fi fi -done +done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for major" >&5 -$as_echo_n "checking for major... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for major" >&5 +printf %s "checking for major... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13452,7 +15623,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { makedev(major(0),minor(0)); @@ -13461,27 +15632,28 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_DEVICE_MACROS 1" >>confdefs.h +printf "%s\n" "#define HAVE_DEVICE_MACROS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext # On OSF/1 V5.1, getaddrinfo is available, but a define # for [no]getaddrinfo in netdb.h. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5 -$as_echo_n "checking for getaddrinfo... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5 +printf %s "checking for getaddrinfo... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13491,37 +15663,40 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { getaddrinfo(NULL, NULL, NULL, NULL); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_getaddrinfo=yes -else +else $as_nop have_getaddrinfo=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5 -$as_echo "$have_getaddrinfo" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5 +printf "%s\n" "$have_getaddrinfo" >&6; } if test $have_getaddrinfo = yes then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking getaddrinfo bug" >&5 -$as_echo_n "checking getaddrinfo bug... " >&6; } - if ${ac_cv_buggy_getaddrinfo+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getaddrinfo bug" >&5 +printf %s "checking getaddrinfo bug... " >&6; } + if test ${ac_cv_buggy_getaddrinfo+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : if test "${enable_ipv6+set}" = set; then ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6" else ac_cv_buggy_getaddrinfo=yes fi -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13615,9 +15790,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_buggy_getaddrinfo=no -else +else $as_nop ac_cv_buggy_getaddrinfo=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13628,8 +15804,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_getaddrinfo" >&5 -$as_echo "$ac_cv_buggy_getaddrinfo" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_getaddrinfo" >&5 +printf "%s\n" "$ac_cv_buggy_getaddrinfo" >&6; } if test $have_getaddrinfo = no || test "$ac_cv_buggy_getaddrinfo" = yes then @@ -13641,70 +15817,42 @@ then fi else -$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h fi -for ac_func in getnameinfo -do : - ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" -if test "x$ac_cv_func_getnameinfo" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETNAMEINFO 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" +if test "x$ac_cv_func_getnameinfo" = xyes +then : + printf "%s\n" "#define HAVE_GETNAMEINFO 1" >>confdefs.h fi -done # checks for structures -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if ${ac_cv_header_time+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then -$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h +# Obsolete code to be removed. +if test $ac_cv_header_sys_time_h = yes; then + +printf "%s\n" "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi +# End of obsolete code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test ${ac_cv_struct_tm+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct tm tm; int *p = &tm.tm_sec; @@ -13713,18 +15861,19 @@ struct tm tm; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_tm=time.h -else +else $as_nop ac_cv_struct_tm=sys/time.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h +printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi @@ -13732,37 +15881,35 @@ ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_ #include <$ac_cv_struct_tm> " -if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TM_TM_ZONE 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then -$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h +printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else - ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include -" -if test "x$ac_cv_have_decl_tzname" = xyes; then : + ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_tzname" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_TZNAME $ac_have_decl -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 -$as_echo_n "checking for tzname... " >&6; } -if ${ac_cv_var_tzname+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 +printf %s "checking for tzname... " >&6; } +if test ${ac_cv_var_tzname+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -13771,86 +15918,81 @@ extern char *tzname[]; #endif int -main () +main (void) { return tzname[0][0]; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_var_tzname=yes -else +else $as_nop ac_cv_var_tzname=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 -$as_echo "$ac_cv_var_tzname" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 +printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then -$as_echo "#define HAVE_TZNAME 1" >>confdefs.h +printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_rdev" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_RDEV 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLKSIZE 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_flags" "ac_cv_member_struct_stat_st_flags" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_flags" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_flags" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_FLAGS 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_FLAGS 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_gen" "ac_cv_member_struct_stat_st_gen" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_gen" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_gen" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_GEN 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_GEN 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtime" "ac_cv_member_struct_stat_st_birthtime" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h fi @@ -13860,11 +16002,10 @@ ac_fn_c_check_member "$LINENO" "struct passwd" "pw_gecos" "ac_cv_member_struct_p #include " -if test "x$ac_cv_member_struct_passwd_pw_gecos" = xyes; then : +if test "x$ac_cv_member_struct_passwd_pw_gecos" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PASSWD_PW_GECOS 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_PASSWD_PW_GECOS 1" >>confdefs.h fi @@ -13873,11 +16014,10 @@ ac_fn_c_check_member "$LINENO" "struct passwd" "pw_passwd" "ac_cv_member_struct_ #include " -if test "x$ac_cv_member_struct_passwd_pw_passwd" = xyes; then : +if test "x$ac_cv_member_struct_passwd_pw_passwd" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PASSWD_PW_PASSWD 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_PASSWD_PW_PASSWD 1" >>confdefs.h fi @@ -13885,53 +16025,54 @@ fi # Issue #21085: In Cygwin, siginfo_t does not have si_band field. ac_fn_c_check_member "$LINENO" "siginfo_t" "si_band" "ac_cv_member_siginfo_t_si_band" "#include " -if test "x$ac_cv_member_siginfo_t_si_band" = xyes; then : +if test "x$ac_cv_member_siginfo_t_si_band" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_SIGINFO_T_SI_BAND 1 -_ACEOF +printf "%s\n" "#define HAVE_SIGINFO_T_SI_BAND 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for time.h that defines altzone" >&5 -$as_echo_n "checking for time.h that defines altzone... " >&6; } -if ${ac_cv_header_time_altzone+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for time.h that defines altzone" >&5 +printf %s "checking for time.h that defines altzone... " >&6; } +if test ${ac_cv_header_time_altzone+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { return altzone; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_header_time_altzone=yes -else +else $as_nop ac_cv_header_time_altzone=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time_altzone" >&5 -$as_echo "$ac_cv_header_time_altzone" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time_altzone" >&5 +printf "%s\n" "$ac_cv_header_time_altzone" >&6; } if test $ac_cv_header_time_altzone = yes; then -$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALTZONE 1" >>confdefs.h fi was_it_defined=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/select.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether sys/select.h and sys/time.h may both be included... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sys/select.h and sys/time.h may both be included" >&5 +printf %s "checking whether sys/select.h and sys/time.h may both be included... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13940,96 +16081,102 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { ; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define SYS_SELECT_WITH_SYS_TIME 1" >>confdefs.h +printf "%s\n" "#define SYS_SELECT_WITH_SYS_TIME 1" >>confdefs.h was_it_defined=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 -$as_echo "$was_it_defined" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 +printf "%s\n" "$was_it_defined" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for addrinfo" >&5 -$as_echo_n "checking for addrinfo... " >&6; } -if ${ac_cv_struct_addrinfo+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for addrinfo" >&5 +printf %s "checking for addrinfo... " >&6; } +if test ${ac_cv_struct_addrinfo+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { struct addrinfo a ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_addrinfo=yes -else +else $as_nop ac_cv_struct_addrinfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_addrinfo" >&5 -$as_echo "$ac_cv_struct_addrinfo" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_addrinfo" >&5 +printf "%s\n" "$ac_cv_struct_addrinfo" >&6; } if test $ac_cv_struct_addrinfo = yes; then -$as_echo "#define HAVE_ADDRINFO 1" >>confdefs.h +printf "%s\n" "#define HAVE_ADDRINFO 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockaddr_storage" >&5 -$as_echo_n "checking for sockaddr_storage... " >&6; } -if ${ac_cv_struct_sockaddr_storage+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sockaddr_storage" >&5 +printf %s "checking for sockaddr_storage... " >&6; } +if test ${ac_cv_struct_sockaddr_storage+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include # include int -main () +main (void) { struct sockaddr_storage s ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_sockaddr_storage=yes -else +else $as_nop ac_cv_struct_sockaddr_storage=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_storage" >&5 -$as_echo "$ac_cv_struct_sockaddr_storage" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_storage" >&5 +printf "%s\n" "$ac_cv_struct_sockaddr_storage" >&6; } if test $ac_cv_struct_sockaddr_storage = yes; then -$as_echo "#define HAVE_SOCKADDR_STORAGE 1" >>confdefs.h +printf "%s\n" "#define HAVE_SOCKADDR_STORAGE 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockaddr_alg" >&5 -$as_echo_n "checking for sockaddr_alg... " >&6; } -if ${ac_cv_struct_sockaddr_alg+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sockaddr_alg" >&5 +printf %s "checking for sockaddr_alg... " >&6; } +if test ${ac_cv_struct_sockaddr_alg+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14037,41 +16184,43 @@ else # include # include int -main () +main (void) { struct sockaddr_alg s ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_sockaddr_alg=yes -else +else $as_nop ac_cv_struct_sockaddr_alg=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_alg" >&5 -$as_echo "$ac_cv_struct_sockaddr_alg" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_alg" >&5 +printf "%s\n" "$ac_cv_struct_sockaddr_alg" >&6; } if test $ac_cv_struct_sockaddr_alg = yes; then -$as_echo "#define HAVE_SOCKADDR_ALG 1" >>confdefs.h +printf "%s\n" "#define HAVE_SOCKADDR_ALG 1" >>confdefs.h fi # checks for compiler characteristics -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 -$as_echo_n "checking whether char is unsigned... " >&6; } -if ${ac_cv_c_char_unsigned+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 +printf %s "checking whether char is unsigned... " >&6; } +if test ${ac_cv_c_char_unsigned+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; @@ -14081,30 +16230,32 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_char_unsigned=no -else +else $as_nop ac_cv_c_char_unsigned=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 -$as_echo "$ac_cv_c_char_unsigned" >&6; } -if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then - $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 +printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } +if test $ac_cv_c_char_unsigned = yes; then + printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +printf %s "checking for an ANSI C-conforming const... " >&6; } +if test ${ac_cv_c_const+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __cplusplus @@ -14117,7 +16268,7 @@ main () /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. + /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ @@ -14145,7 +16296,7 @@ main () iptr p = 0; ++p; } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; @@ -14161,75 +16312,78 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_const=yes -else +else $as_nop ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -$as_echo "#define const /**/" >>confdefs.h +printf "%s\n" "#define const /**/" >>confdefs.h fi works=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working signed char" >&5 -$as_echo_n "checking for working signed char... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working signed char" >&5 +printf %s "checking for working signed char... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { signed char c; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : works=yes -else +else $as_nop -$as_echo "#define signed /**/" >>confdefs.h +printf "%s\n" "#define signed /**/" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $works" >&5 -$as_echo "$works" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $works" >&5 +printf "%s\n" "$works" >&6; } have_prototypes=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prototypes" >&5 -$as_echo_n "checking for prototypes... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for prototypes" >&5 +printf %s "checking for prototypes... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(int x) { return 0; } int -main () +main (void) { return foo(10); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_PROTOTYPES 1" >>confdefs.h +printf "%s\n" "#define HAVE_PROTOTYPES 1" >>confdefs.h have_prototypes=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_prototypes" >&5 -$as_echo "$have_prototypes" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_prototypes" >&5 +printf "%s\n" "$have_prototypes" >&6; } works=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable length prototypes and stdarg.h" >&5 -$as_echo_n "checking for variable length prototypes and stdarg.h... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable length prototypes and stdarg.h" >&5 +printf %s "checking for variable length prototypes and stdarg.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14244,28 +16398,29 @@ int foo(int x, ...) { } int -main () +main (void) { return foo(10, "", 3.14); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_STDARG_PROTOTYPES 1" >>confdefs.h +printf "%s\n" "#define HAVE_STDARG_PROTOTYPES 1" >>confdefs.h works=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $works" >&5 -$as_echo "$works" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $works" >&5 +printf "%s\n" "$works" >&6; } # check for socketpair -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socketpair" >&5 -$as_echo_n "checking for socketpair... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socketpair" >&5 +printf %s "checking for socketpair... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14273,35 +16428,36 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { void *x=socketpair ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_SOCKETPAIR 1" >>confdefs.h +printf "%s\n" "#define HAVE_SOCKETPAIR 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # check if sockaddr has sa_len member -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sockaddr has sa_len member" >&5 -$as_echo_n "checking if sockaddr has sa_len member... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sockaddr has sa_len member" >&5 +printf %s "checking if sockaddr has sa_len member... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct sockaddr x; x.sa_len = 0; @@ -14309,29 +16465,31 @@ x.sa_len = 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_SOCKADDR_SA_LEN 1" >>confdefs.h +printf "%s\n" "#define HAVE_SOCKADDR_SA_LEN 1" >>confdefs.h -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # sigh -- gethostbyname_r is a mess; it can have 3, 5 or 6 arguments :-( ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r" -if test "x$ac_cv_func_gethostbyname_r" = xyes; then : +if test "x$ac_cv_func_gethostbyname_r" = xyes +then : - $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 6 args" >&5 -$as_echo_n "checking gethostbyname_r with 6 args... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 6 args" >&5 +printf %s "checking gethostbyname_r with 6 args... " >&6; } OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14340,7 +16498,7 @@ $as_echo_n "checking gethostbyname_r with 6 args... " >&6; } # include int -main () +main (void) { char *name; @@ -14355,29 +16513,30 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -$as_echo "#define HAVE_GETHOSTBYNAME_R_6_ARG 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_6_ARG 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 5 args" >&5 -$as_echo_n "checking gethostbyname_r with 5 args... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 5 args" >&5 +printf %s "checking gethostbyname_r with 5 args... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include int -main () +main (void) { char *name; @@ -14392,29 +16551,30 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -$as_echo "#define HAVE_GETHOSTBYNAME_R_5_ARG 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_5_ARG 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 3 args" >&5 -$as_echo_n "checking gethostbyname_r with 3 args... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 3 args" >&5 +printf %s "checking gethostbyname_r with 3 args... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include int -main () +main (void) { char *name; @@ -14427,43 +16587,40 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -$as_echo "#define HAVE_GETHOSTBYNAME_R_3_ARG 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_3_ARG 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$OLD_CFLAGS -else +else $as_nop - for ac_func in gethostbyname -do : ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETHOSTBYNAME 1 -_ACEOF +if test "x$ac_cv_func_gethostbyname" = xyes +then : + printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h fi -done fi @@ -14479,14 +16636,16 @@ fi # Linux requires this for correct f.p. operations ac_fn_c_check_func "$LINENO" "__fpu_control" "ac_cv_func___fpu_control" -if test "x$ac_cv_func___fpu_control" = xyes; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpu_control in -lieee" >&5 -$as_echo_n "checking for __fpu_control in -lieee... " >&6; } -if ${ac_cv_lib_ieee___fpu_control+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_func___fpu_control" = xyes +then : + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __fpu_control in -lieee" >&5 +printf %s "checking for __fpu_control in -lieee... " >&6; } +if test ${ac_cv_lib_ieee___fpu_control+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14495,33 +16654,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char __fpu_control (); int -main () +main (void) { return __fpu_control (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_ieee___fpu_control=yes -else +else $as_nop ac_cv_lib_ieee___fpu_control=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee___fpu_control" >&5 -$as_echo "$ac_cv_lib_ieee___fpu_control" >&6; } -if test "x$ac_cv_lib_ieee___fpu_control" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBIEEE 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee___fpu_control" >&5 +printf "%s\n" "$ac_cv_lib_ieee___fpu_control" >&6; } +if test "x$ac_cv_lib_ieee___fpu_control" = xyes +then : + printf "%s\n" "#define HAVE_LIBIEEE 1" >>confdefs.h LIBS="-lieee $LIBS" @@ -14537,49 +16693,51 @@ case $ac_sys_system in Darwin) ;; *) LIBM=-lm esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libm=STRING" >&5 -$as_echo_n "checking for --with-libm=STRING... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libm=STRING" >&5 +printf %s "checking for --with-libm=STRING... " >&6; } # Check whether --with-libm was given. -if test "${with_libm+set}" = set; then : +if test ${with_libm+y} +then : withval=$with_libm; if test "$withval" = no then LIBM= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: force LIBM empty" >&5 -$as_echo "force LIBM empty" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: force LIBM empty" >&5 +printf "%s\n" "force LIBM empty" >&6; } elif test "$withval" != yes then LIBM=$withval - { $as_echo "$as_me:${as_lineno-$LINENO}: result: set LIBM=\"$withval\"" >&5 -$as_echo "set LIBM=\"$withval\"" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: set LIBM=\"$withval\"" >&5 +printf "%s\n" "set LIBM=\"$withval\"" >&6; } else as_fn_error $? "proper usage is --with-libm=STRING" "$LINENO" 5 fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: default LIBM=\"$LIBM\"" >&5 -$as_echo "default LIBM=\"$LIBM\"" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default LIBM=\"$LIBM\"" >&5 +printf "%s\n" "default LIBM=\"$LIBM\"" >&6; } fi # check for --with-libc=... -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libc=STRING" >&5 -$as_echo_n "checking for --with-libc=STRING... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libc=STRING" >&5 +printf %s "checking for --with-libc=STRING... " >&6; } # Check whether --with-libc was given. -if test "${with_libc+set}" = set; then : +if test ${with_libc+y} +then : withval=$with_libc; if test "$withval" = no then LIBC= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: force LIBC empty" >&5 -$as_echo "force LIBC empty" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: force LIBC empty" >&5 +printf "%s\n" "force LIBC empty" >&6; } elif test "$withval" != yes then LIBC=$withval - { $as_echo "$as_me:${as_lineno-$LINENO}: result: set LIBC=\"$withval\"" >&5 -$as_echo "set LIBC=\"$withval\"" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: set LIBC=\"$withval\"" >&5 +printf "%s\n" "set LIBC=\"$withval\"" >&6; } else as_fn_error $? "proper usage is --with-libc=STRING" "$LINENO" 5 fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: default LIBC=\"$LIBC\"" >&5 -$as_echo "default LIBC=\"$LIBC\"" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default LIBC=\"$LIBC\"" >&5 +printf "%s\n" "default LIBC=\"$LIBC\"" >&6; } fi @@ -14587,13 +16745,13 @@ fi # * Check for gcc x64 inline assembler * # ************************************** -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x64 gcc inline assembler" >&5 -$as_echo_n "checking for x64 gcc inline assembler... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x64 gcc inline assembler" >&5 +printf %s "checking for x64 gcc inline assembler... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { __asm__ __volatile__ ("movq %rcx, %rax"); @@ -14602,19 +16760,20 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_gcc_asm_for_x64=yes -else +else $as_nop have_gcc_asm_for_x64=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x64" >&5 -$as_echo "$have_gcc_asm_for_x64" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x64" >&5 +printf "%s\n" "$have_gcc_asm_for_x64" >&6; } if test "$have_gcc_asm_for_x64" = yes then -$as_echo "#define HAVE_GCC_ASM_FOR_X64 1" >>confdefs.h +printf "%s\n" "#define HAVE_GCC_ASM_FOR_X64 1" >>confdefs.h fi @@ -14622,11 +16781,12 @@ fi # * Check for various properties of floating point * # ************************************************** -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether float word ordering is bigendian" >&5 -$as_echo_n "checking whether float word ordering is bigendian... " >&6; } -if ${ax_cv_c_float_words_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether float word ordering is bigendian" >&5 +printf %s "checking whether float word ordering is bigendian... " >&6; } +if test ${ax_cv_c_float_words_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_c_float_words_bigendian=unknown @@ -14638,7 +16798,8 @@ double d = 909042349670368103374704789055050114762116927356156320147971208440534 _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : if grep noonsees conftest.$ac_objext >/dev/null ; then @@ -14654,15 +16815,15 @@ fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_float_words_bigendian" >&5 -$as_echo "$ax_cv_c_float_words_bigendian" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_float_words_bigendian" >&5 +printf "%s\n" "$ax_cv_c_float_words_bigendian" >&6; } case $ax_cv_c_float_words_bigendian in yes) -$as_echo "#define FLOAT_WORDS_BIGENDIAN 1" >>confdefs.h +printf "%s\n" "#define FLOAT_WORDS_BIGENDIAN 1" >>confdefs.h ;; no) ;; @@ -14679,12 +16840,12 @@ esac if test "$ax_cv_c_float_words_bigendian" = "yes" then -$as_echo "#define DOUBLE_IS_BIG_ENDIAN_IEEE754 1" >>confdefs.h +printf "%s\n" "#define DOUBLE_IS_BIG_ENDIAN_IEEE754 1" >>confdefs.h elif test "$ax_cv_c_float_words_bigendian" = "no" then -$as_echo "#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1" >>confdefs.h +printf "%s\n" "#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1" >>confdefs.h else # Some ARM platforms use a mixed-endian representation for doubles. @@ -14694,7 +16855,7 @@ else # FLOAT_WORDS_BIGENDIAN doesnt actually detect this case, but if it's not big # or little, then it must be this? -$as_echo "#define DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 1" >>confdefs.h +printf "%s\n" "#define DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 1" >>confdefs.h fi @@ -14708,13 +16869,13 @@ fi # This inline assembler syntax may also work for suncc and icc, # so we try it on all platforms. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 -$as_echo_n "checking whether we can use gcc inline assembler to get and set x87 control word... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 +printf %s "checking whether we can use gcc inline assembler to get and set x87 control word... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { unsigned short cw; @@ -14725,29 +16886,30 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_gcc_asm_for_x87=yes -else +else $as_nop have_gcc_asm_for_x87=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x87" >&5 -$as_echo "$have_gcc_asm_for_x87" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x87" >&5 +printf "%s\n" "$have_gcc_asm_for_x87" >&6; } if test "$have_gcc_asm_for_x87" = yes then -$as_echo "#define HAVE_GCC_ASM_FOR_X87 1" >>confdefs.h +printf "%s\n" "#define HAVE_GCC_ASM_FOR_X87 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set mc68881 fpcr" >&5 -$as_echo_n "checking whether we can use gcc inline assembler to get and set mc68881 fpcr... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set mc68881 fpcr" >&5 +printf %s "checking whether we can use gcc inline assembler to get and set mc68881 fpcr... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { unsigned int fpcr; @@ -14758,19 +16920,20 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_gcc_asm_for_mc68881=yes -else +else $as_nop have_gcc_asm_for_mc68881=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_mc68881" >&5 -$as_echo "$have_gcc_asm_for_mc68881" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_mc68881" >&5 +printf "%s\n" "$have_gcc_asm_for_mc68881" >&6; } if test "$have_gcc_asm_for_mc68881" = yes then -$as_echo "#define HAVE_GCC_ASM_FOR_MC68881 1" >>confdefs.h +printf "%s\n" "#define HAVE_GCC_ASM_FOR_MC68881 1" >>confdefs.h fi @@ -14779,14 +16942,15 @@ fi # IEEE 754 platforms. On IEEE 754, test should return 1 if rounding # mode is round-to-nearest and double rounding issues are present, and # 0 otherwise. See http://bugs.python.org/issue2937 for more info. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x87-style double rounding" >&5 -$as_echo_n "checking for x87-style double rounding... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x87-style double rounding" >&5 +printf %s "checking for x87-style double rounding... " >&6; } # $BASECFLAGS may affect the result ac_save_cc="$CC" CC="$CC $BASECFLAGS" -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : ac_cv_x87_double_rounding=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14810,9 +16974,10 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_x87_double_rounding=no -else +else $as_nop ac_cv_x87_double_rounding=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14820,12 +16985,12 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CC="$ac_save_cc" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x87_double_rounding" >&5 -$as_echo "$ac_cv_x87_double_rounding" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x87_double_rounding" >&5 +printf "%s\n" "$ac_cv_x87_double_rounding" >&6; } if test "$ac_cv_x87_double_rounding" = yes then -$as_echo "#define X87_DOUBLE_ROUNDING 1" >>confdefs.h +printf "%s\n" "#define X87_DOUBLE_ROUNDING 1" >>confdefs.h fi @@ -14836,63 +17001,125 @@ fi LIBS_SAVE=$LIBS LIBS="$LIBS $LIBM" -for ac_func in acosh asinh atanh copysign erf erfc expm1 finite gamma -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "acosh" "ac_cv_func_acosh" +if test "x$ac_cv_func_acosh" = xyes +then : + printf "%s\n" "#define HAVE_ACOSH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "asinh" "ac_cv_func_asinh" +if test "x$ac_cv_func_asinh" = xyes +then : + printf "%s\n" "#define HAVE_ASINH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "atanh" "ac_cv_func_atanh" +if test "x$ac_cv_func_atanh" = xyes +then : + printf "%s\n" "#define HAVE_ATANH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "copysign" "ac_cv_func_copysign" +if test "x$ac_cv_func_copysign" = xyes +then : + printf "%s\n" "#define HAVE_COPYSIGN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "erf" "ac_cv_func_erf" +if test "x$ac_cv_func_erf" = xyes +then : + printf "%s\n" "#define HAVE_ERF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "erfc" "ac_cv_func_erfc" +if test "x$ac_cv_func_erfc" = xyes +then : + printf "%s\n" "#define HAVE_ERFC 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "expm1" "ac_cv_func_expm1" +if test "x$ac_cv_func_expm1" = xyes +then : + printf "%s\n" "#define HAVE_EXPM1 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "finite" "ac_cv_func_finite" +if test "x$ac_cv_func_finite" = xyes +then : + printf "%s\n" "#define HAVE_FINITE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "gamma" "ac_cv_func_gamma" +if test "x$ac_cv_func_gamma" = xyes +then : + printf "%s\n" "#define HAVE_GAMMA 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "hypot" "ac_cv_func_hypot" +if test "x$ac_cv_func_hypot" = xyes +then : + printf "%s\n" "#define HAVE_HYPOT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lgamma" "ac_cv_func_lgamma" +if test "x$ac_cv_func_lgamma" = xyes +then : + printf "%s\n" "#define HAVE_LGAMMA 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "log1p" "ac_cv_func_log1p" +if test "x$ac_cv_func_log1p" = xyes +then : + printf "%s\n" "#define HAVE_LOG1P 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "log2" "ac_cv_func_log2" +if test "x$ac_cv_func_log2" = xyes +then : + printf "%s\n" "#define HAVE_LOG2 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "round" "ac_cv_func_round" +if test "x$ac_cv_func_round" = xyes +then : + printf "%s\n" "#define HAVE_ROUND 1" >>confdefs.h -for ac_func in hypot lgamma log1p log2 round tgamma -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "tgamma" "ac_cv_func_tgamma" +if test "x$ac_cv_func_tgamma" = xyes +then : + printf "%s\n" "#define HAVE_TGAMMA 1" >>confdefs.h fi -done -ac_fn_c_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include -" -if test "x$ac_cv_have_decl_isinf" = xyes; then : +ac_fn_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_isinf" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ISINF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "isnan" "ac_cv_have_decl_isnan" "#include -" -if test "x$ac_cv_have_decl_isnan" = xyes; then : +printf "%s\n" "#define HAVE_DECL_ISINF $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "isnan" "ac_cv_have_decl_isnan" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_isnan" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ISNAN $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "isfinite" "ac_cv_have_decl_isfinite" "#include -" -if test "x$ac_cv_have_decl_isfinite" = xyes; then : +printf "%s\n" "#define HAVE_DECL_ISNAN $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "isfinite" "ac_cv_have_decl_isfinite" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_isfinite" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ISFINITE $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_ISFINITE $ac_have_decl" >>confdefs.h # For multiprocessing module, check that sem_open @@ -14900,14 +17127,16 @@ _ACEOF # the kernel module that provides POSIX semaphores # isn't loaded by default, so an attempt to call # sem_open results in a 'Signal 12' error. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX semaphores are enabled" >&5 -$as_echo_n "checking whether POSIX semaphores are enabled... " >&6; } -if ${ac_cv_posix_semaphores_enabled+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX semaphores are enabled" >&5 +printf %s "checking whether POSIX semaphores are enabled... " >&6; } +if test ${ac_cv_posix_semaphores_enabled+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_posix_semaphores_enabled=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14929,9 +17158,10 @@ int main(void) { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_posix_semaphores_enabled=yes -else +else $as_nop ac_cv_posix_semaphores_enabled=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14941,24 +17171,26 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_posix_semaphores_enabled" >&5 -$as_echo "$ac_cv_posix_semaphores_enabled" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_posix_semaphores_enabled" >&5 +printf "%s\n" "$ac_cv_posix_semaphores_enabled" >&6; } if test $ac_cv_posix_semaphores_enabled = no then -$as_echo "#define POSIX_SEMAPHORES_NOT_ENABLED 1" >>confdefs.h +printf "%s\n" "#define POSIX_SEMAPHORES_NOT_ENABLED 1" >>confdefs.h fi # Multiprocessing check for broken sem_getvalue -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken sem_getvalue" >&5 -$as_echo_n "checking for broken sem_getvalue... " >&6; } -if ${ac_cv_broken_sem_getvalue+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken sem_getvalue" >&5 +printf %s "checking for broken sem_getvalue... " >&6; } +if test ${ac_cv_broken_sem_getvalue+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_broken_sem_getvalue=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14984,9 +17216,10 @@ int main(void){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_broken_sem_getvalue=no -else +else $as_nop ac_cv_broken_sem_getvalue=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14996,110 +17229,95 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_sem_getvalue" >&5 -$as_echo "$ac_cv_broken_sem_getvalue" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_sem_getvalue" >&5 +printf "%s\n" "$ac_cv_broken_sem_getvalue" >&6; } if test $ac_cv_broken_sem_getvalue = yes then -$as_echo "#define HAVE_BROKEN_SEM_GETVALUE 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_SEM_GETVALUE 1" >>confdefs.h fi -ac_fn_c_check_decl "$LINENO" "RTLD_LAZY" "ac_cv_have_decl_RTLD_LAZY" "#include -" -if test "x$ac_cv_have_decl_RTLD_LAZY" = xyes; then : +ac_fn_check_decl "$LINENO" "RTLD_LAZY" "ac_cv_have_decl_RTLD_LAZY" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_LAZY" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_LAZY $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include -" -if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_LAZY $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_NOW" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_NOW $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include -" -if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_NOW $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_LOCAL" "ac_cv_have_decl_RTLD_LOCAL" "#include -" -if test "x$ac_cv_have_decl_RTLD_LOCAL" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_LOCAL" "ac_cv_have_decl_RTLD_LOCAL" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_LOCAL" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_LOCAL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_NODELETE" "ac_cv_have_decl_RTLD_NODELETE" "#include -" -if test "x$ac_cv_have_decl_RTLD_NODELETE" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_LOCAL $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_NODELETE" "ac_cv_have_decl_RTLD_NODELETE" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_NODELETE" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_NODELETE $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_NOLOAD" "ac_cv_have_decl_RTLD_NOLOAD" "#include -" -if test "x$ac_cv_have_decl_RTLD_NOLOAD" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_NODELETE $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_NOLOAD" "ac_cv_have_decl_RTLD_NOLOAD" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_NOLOAD" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_NOLOAD $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_DEEPBIND" "ac_cv_have_decl_RTLD_DEEPBIND" "#include -" -if test "x$ac_cv_have_decl_RTLD_DEEPBIND" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_NOLOAD $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_DEEPBIND" "ac_cv_have_decl_RTLD_DEEPBIND" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_DEEPBIND" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_DEEPBIND $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "RTLD_MEMBER" "ac_cv_have_decl_RTLD_MEMBER" "#include -" -if test "x$ac_cv_have_decl_RTLD_MEMBER" = xyes; then : +printf "%s\n" "#define HAVE_DECL_RTLD_DEEPBIND $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "RTLD_MEMBER" "ac_cv_have_decl_RTLD_MEMBER" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_RTLD_MEMBER" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_RTLD_MEMBER $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_RTLD_MEMBER $ac_have_decl" >>confdefs.h # determine what size digit to use for Python's longs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking digit size for Python's longs" >&5 -$as_echo_n "checking digit size for Python's longs... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking digit size for Python's longs" >&5 +printf %s "checking digit size for Python's longs... " >&6; } # Check whether --enable-big-digits was given. -if test "${enable_big_digits+set}" = set; then : +if test ${enable_big_digits+y} +then : enableval=$enable_big_digits; case $enable_big_digits in yes) enable_big_digits=30 ;; @@ -15110,36 +17328,34 @@ no) *) as_fn_error $? "bad value $enable_big_digits for --enable-big-digits; value should be 15 or 30" "$LINENO" 5 ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_big_digits" >&5 -$as_echo "$enable_big_digits" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_big_digits" >&5 +printf "%s\n" "$enable_big_digits" >&6; } -cat >>confdefs.h <<_ACEOF -#define PYLONG_BITS_IN_DIGIT $enable_big_digits -_ACEOF +printf "%s\n" "#define PYLONG_BITS_IN_DIGIT $enable_big_digits" >>confdefs.h -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 -$as_echo "no value specified" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 +printf "%s\n" "no value specified" >&6; } fi # check for wchar.h -ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" -if test "x$ac_cv_header_wchar_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" +if test "x$ac_cv_header_wchar_h" = xyes +then : -$as_echo "#define HAVE_WCHAR_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h wchar_h="yes" -else +else $as_nop wchar_h="no" fi - # determine wchar_t size if test "$wchar_h" = yes then @@ -15147,18 +17363,20 @@ then # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 -$as_echo_n "checking size of wchar_t... " >&6; } -if ${ac_cv_sizeof_wchar_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 +printf %s "checking size of wchar_t... " >&6; } +if test ${ac_cv_sizeof_wchar_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "#include -"; then : +" +then : -else +else $as_nop if test "$ac_cv_type_wchar_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (wchar_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -15167,20 +17385,18 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 -$as_echo "$ac_cv_sizeof_wchar_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 +printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t -_ACEOF +printf "%s\n" "#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UCS-4 tcl" >&5 -$as_echo_n "checking for UCS-4 tcl... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for UCS-4 tcl" >&5 +printf %s "checking for UCS-4 tcl... " >&6; } have_ucs4_tcl=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15190,38 +17406,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext # error "NOT UCS4_TCL" #endif int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_UCS4_TCL 1" >>confdefs.h +printf "%s\n" "#define HAVE_UCS4_TCL 1" >>confdefs.h have_ucs4_tcl=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ucs4_tcl" >&5 -$as_echo "$have_ucs4_tcl" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_ucs4_tcl" >&5 +printf "%s\n" "$have_ucs4_tcl" >&6; } # check whether wchar_t is signed or not if test "$wchar_h" = yes then # check whether wchar_t is signed or not - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is signed" >&5 -$as_echo_n "checking whether wchar_t is signed... " >&6; } - if ${ac_cv_wchar_t_signed+:} false; then : - $as_echo_n "(cached) " >&6 -else - - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is signed" >&5 +printf %s "checking whether wchar_t is signed... " >&6; } + if test ${ac_cv_wchar_t_signed+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + if test "$cross_compiling" = yes +then : ac_cv_wchar_t_signed=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15233,9 +17452,10 @@ else } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_wchar_t_signed=yes -else +else $as_nop ac_cv_wchar_t_signed=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15244,32 +17464,33 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_wchar_t_signed" >&5 -$as_echo "$ac_cv_wchar_t_signed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_wchar_t_signed" >&5 +printf "%s\n" "$ac_cv_wchar_t_signed" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is usable" >&5 -$as_echo_n "checking whether wchar_t is usable... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is usable" >&5 +printf %s "checking whether wchar_t is usable... " >&6; } # wchar_t is only usable if it maps to an unsigned type if test "$ac_cv_sizeof_wchar_t" -ge 2 \ -a "$ac_cv_wchar_t_signed" = "no" then -$as_echo "#define HAVE_USABLE_WCHAR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_USABLE_WCHAR_T 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # check for endianness - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +printf %s "checking whether byte ordering is bigendian... " >&6; } +if test ${ac_cv_c_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15280,7 +17501,8 @@ else typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -15304,7 +17526,7 @@ if ac_fn_c_try_compile "$LINENO"; then : fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15313,7 +17535,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -15325,7 +17547,8 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15333,7 +17556,7 @@ if ac_fn_c_try_compile "$LINENO"; then : #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -15343,14 +17566,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -15359,7 +17583,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -15369,14 +17593,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef _BIG_ENDIAN not big endian @@ -15386,31 +17611,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = +unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = + unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - short int ebcdic_ii[] = + unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = + unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -15418,14 +17645,15 @@ short int ascii_mm[] = extern int foo; int -main () +main (void) { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -15438,13 +17666,13 @@ if ac_fn_c_try_compile "$LINENO"; then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { /* Are we little or big endian? From Harbison&Steele. */ @@ -15460,9 +17688,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_bigendian=no -else +else $as_nop ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15471,17 +17700,17 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h + printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h +printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) @@ -15506,15 +17735,15 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h # In Python 3.2 and older, --with-wide-unicode added a 'u' flag. # In Python 3.7 and older, --with-pymalloc added a 'm' flag. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ABIFLAGS" >&5 -$as_echo_n "checking ABIFLAGS... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ABIFLAGS" >&5 -$as_echo "$ABIFLAGS" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SOABI" >&5 -$as_echo_n "checking SOABI... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ABIFLAGS" >&5 +printf %s "checking ABIFLAGS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ABIFLAGS" >&5 +printf "%s\n" "$ABIFLAGS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SOABI" >&5 +printf %s "checking SOABI... " >&6; } SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET} -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5 -$as_echo "$SOABI" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5 +printf "%s\n" "$SOABI" >&6; } # Release and debug (Py_DEBUG) ABI are compatible, but not Py_TRACE_REFS ABI if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then @@ -15522,20 +17751,18 @@ if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then ALT_SOABI='cpython-'`echo $VERSION | tr -d .``echo $ABIFLAGS | tr -d d`${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET} -cat >>confdefs.h <<_ACEOF -#define ALT_SOABI "${ALT_SOABI}" -_ACEOF +printf "%s\n" "#define ALT_SOABI \"${ALT_SOABI}\"" >>confdefs.h fi EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDVERSION" >&5 -$as_echo_n "checking LDVERSION... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDVERSION" >&5 +printf %s "checking LDVERSION... " >&6; } LDVERSION='$(VERSION)$(ABIFLAGS)' -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDVERSION" >&5 -$as_echo "$LDVERSION" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDVERSION" >&5 +printf "%s\n" "$LDVERSION" >&6; } # On Android and Cygwin the shared libraries must be linked with libpython. @@ -15554,11 +17781,12 @@ BINLIBDEST='$(LIBDIR)/python$(VERSION)' # /usr/$LIDIRNAME/python$VERSION PLATLIBDIR="lib" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-platlibdir" >&5 -$as_echo_n "checking for --with-platlibdir... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-platlibdir" >&5 +printf %s "checking for --with-platlibdir... " >&6; } # Check whether --with-platlibdir was given. -if test "${with_platlibdir+set}" = set; then : +if test ${with_platlibdir+y} +then : withval=$with_platlibdir; # ignore 3 options: # --with-platlibdir @@ -15566,17 +17794,17 @@ if test "${with_platlibdir+set}" = set; then : # --without-platlibdir if test -n "$withval" -a "$withval" != yes -a "$withval" != no then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } PLATLIBDIR="$withval" BINLIBDEST='${exec_prefix}/${PLATLIBDIR}/python$(VERSION)' else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -15592,37 +17820,40 @@ fi # Check for --with-wheel-pkg-dir=PATH WHEEL_PKG_DIR="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-wheel-pkg-dir" >&5 -$as_echo_n "checking for --with-wheel-pkg-dir... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-wheel-pkg-dir" >&5 +printf %s "checking for --with-wheel-pkg-dir... " >&6; } # Check whether --with-wheel-pkg-dir was given. -if test "${with_wheel_pkg_dir+set}" = set; then : +if test ${with_wheel_pkg_dir+y} +then : withval=$with_wheel_pkg_dir; if test -n "$withval"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } WHEEL_PKG_DIR="$withval" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Check whether right shifting a negative integer extends the sign bit # or fills with zeros (like the Cray J90, according to Tim Peters). -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether right shift extends the sign bit" >&5 -$as_echo_n "checking whether right shift extends the sign bit... " >&6; } -if ${ac_cv_rshift_extends_sign+:} false; then : - $as_echo_n "(cached) " >&6 -else - -if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether right shift extends the sign bit" >&5 +printf %s "checking whether right shift extends the sign bit... " >&6; } +if test ${ac_cv_rshift_extends_sign+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +if test "$cross_compiling" = yes +then : ac_cv_rshift_extends_sign=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15632,9 +17863,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_rshift_extends_sign=yes -else +else $as_nop ac_cv_rshift_extends_sign=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15643,27 +17875,28 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rshift_extends_sign" >&5 -$as_echo "$ac_cv_rshift_extends_sign" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rshift_extends_sign" >&5 +printf "%s\n" "$ac_cv_rshift_extends_sign" >&6; } if test "$ac_cv_rshift_extends_sign" = no then -$as_echo "#define SIGNED_RIGHT_SHIFT_ZERO_FILLS 1" >>confdefs.h +printf "%s\n" "#define SIGNED_RIGHT_SHIFT_ZERO_FILLS 1" >>confdefs.h fi # check for getc_unlocked and related locking functions -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getc_unlocked() and friends" >&5 -$as_echo_n "checking for getc_unlocked() and friends... " >&6; } -if ${ac_cv_have_getc_unlocked+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getc_unlocked() and friends" >&5 +printf %s "checking for getc_unlocked() and friends... " >&6; } +if test ${ac_cv_have_getc_unlocked+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen("/dev/null", "r"); @@ -15675,29 +17908,31 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_have_getc_unlocked=yes -else +else $as_nop ac_cv_have_getc_unlocked=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getc_unlocked" >&5 -$as_echo "$ac_cv_have_getc_unlocked" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getc_unlocked" >&5 +printf "%s\n" "$ac_cv_have_getc_unlocked" >&6; } if test "$ac_cv_have_getc_unlocked" = yes then -$as_echo "#define HAVE_GETC_UNLOCKED 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETC_UNLOCKED 1" >>confdefs.h fi # Check whether --with-readline was given. -if test "${with_readline+set}" = set; then : +if test ${with_readline+y} +then : withval=$with_readline; -else +else $as_nop with_readline=yes fi @@ -15712,7 +17947,7 @@ if test "$with_readline" != no; then editline|edit) LIBREADLINE=edit -$as_echo "#define WITH_EDITLINE 1" >>confdefs.h +printf "%s\n" "#define WITH_EDITLINE 1" >>confdefs.h ;; yes|readline) @@ -15726,8 +17961,8 @@ $as_echo "#define WITH_EDITLINE 1" >>confdefs.h # On some systems we need to link readline to a termcap compatible # library. NOTE: Keep the precedence of listed libraries synchronised # with setup.py. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 -$as_echo_n "checking how to link readline libs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 +printf %s "checking how to link readline libs... " >&6; } for py_libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$py_libtermcap"; then READLINE_LIBS="-l$LIBREADLINE" @@ -15741,22 +17976,20 @@ $as_echo_n "checking how to link readline libs... " >&6; } /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char readline (); int -main () +main (void) { return readline (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : py_cv_lib_readline=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $py_cv_lib_readline = yes; then break @@ -15766,20 +17999,20 @@ rm -f core conftest.err conftest.$ac_objext \ # Uncomment this line if you want to use READLINE_LIBS in Makefile or scripts #AC_SUBST([READLINE_LIBS]) if test $py_cv_lib_readline = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 -$as_echo "$READLINE_LIBS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 +printf "%s\n" "$READLINE_LIBS" >&6; } -$as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h +printf "%s\n" "#define HAVE_LIBREADLINE 1" >>confdefs.h fi fi if test "$py_cv_lib_readline" = yes; then # check for readline 2.2 - ac_fn_c_check_decl "$LINENO" "rl_completion_append_character" "ac_cv_have_decl_rl_completion_append_character" " + ac_fn_check_decl "$LINENO" "rl_completion_append_character" "ac_cv_have_decl_rl_completion_append_character" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -15787,14 +18020,14 @@ if test "$py_cv_lib_readline" = yes; then # include #endif -" -if test "x$ac_cv_have_decl_rl_completion_append_character" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_rl_completion_append_character" = xyes +then : -$as_echo "#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1" >>confdefs.h fi - - ac_fn_c_check_decl "$LINENO" "rl_completion_suppress_append" "ac_cv_have_decl_rl_completion_suppress_append" " + ac_fn_check_decl "$LINENO" "rl_completion_suppress_append" "ac_cv_have_decl_rl_completion_suppress_append" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -15802,21 +18035,22 @@ fi # include #endif -" -if test "x$ac_cv_have_decl_rl_completion_suppress_append" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_rl_completion_suppress_append" = xyes +then : -$as_echo "#define HAVE_RL_COMPLETION_SUPPRESS_APPEND 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_COMPLETION_SUPPRESS_APPEND 1" >>confdefs.h fi - # check for readline 4.0 - as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_pre_input_hook" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -l$LIBREADLINE" >&5 -$as_echo_n "checking for rl_pre_input_hook in -l$LIBREADLINE... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_pre_input_hook" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -l$LIBREADLINE" >&5 +printf %s "checking for rl_pre_input_hook in -l$LIBREADLINE... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15825,44 +18059,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char rl_pre_input_hook (); int -main () +main (void) { return rl_pre_input_hook (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else +else $as_nop eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : -$as_echo "#define HAVE_RL_PRE_INPUT_HOOK 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_PRE_INPUT_HOOK 1" >>confdefs.h fi # also in 4.0 - as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_completion_display_matches_hook" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -l$LIBREADLINE" >&5 -$as_echo_n "checking for rl_completion_display_matches_hook in -l$LIBREADLINE... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_completion_display_matches_hook" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -l$LIBREADLINE" >&5 +printf %s "checking for rl_completion_display_matches_hook in -l$LIBREADLINE... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15871,44 +18105,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char rl_completion_display_matches_hook (); int -main () +main (void) { return rl_completion_display_matches_hook (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else +else $as_nop eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : -$as_echo "#define HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK 1" >>confdefs.h fi # also in 4.0, but not in editline - as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_resize_terminal" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_resize_terminal in -l$LIBREADLINE" >&5 -$as_echo_n "checking for rl_resize_terminal in -l$LIBREADLINE... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_resize_terminal" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_resize_terminal in -l$LIBREADLINE" >&5 +printf %s "checking for rl_resize_terminal in -l$LIBREADLINE... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15917,44 +18151,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char rl_resize_terminal (); int -main () +main (void) { return rl_resize_terminal (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else +else $as_nop eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : -$as_echo "#define HAVE_RL_RESIZE_TERMINAL 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_RESIZE_TERMINAL 1" >>confdefs.h fi # check for readline 4.2 - as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_completion_matches" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -l$LIBREADLINE" >&5 -$as_echo_n "checking for rl_completion_matches in -l$LIBREADLINE... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_completion_matches" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -l$LIBREADLINE" >&5 +printf %s "checking for rl_completion_matches in -l$LIBREADLINE... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15963,39 +18197,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char rl_completion_matches (); int -main () +main (void) { return rl_completion_matches (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else +else $as_nop eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : -$as_echo "#define HAVE_RL_COMPLETION_MATCHES 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_COMPLETION_MATCHES 1" >>confdefs.h fi # also in readline 4.2 - ac_fn_c_check_decl "$LINENO" "rl_catch_signals" "ac_cv_have_decl_rl_catch_signals" " + ac_fn_check_decl "$LINENO" "rl_catch_signals" "ac_cv_have_decl_rl_catch_signals" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -16003,20 +18236,21 @@ fi # include #endif -" -if test "x$ac_cv_have_decl_rl_catch_signals" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_rl_catch_signals" = xyes +then : -$as_echo "#define HAVE_RL_CATCH_SIGNAL 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_CATCH_SIGNAL 1" >>confdefs.h fi - - as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_append_history" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for append_history in -l$LIBREADLINE" >&5 -$as_echo_n "checking for append_history in -l$LIBREADLINE... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_append_history" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for append_history in -l$LIBREADLINE" >&5 +printf %s "checking for append_history in -l$LIBREADLINE... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16025,33 +18259,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char append_history (); int -main () +main (void) { return append_history (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else +else $as_nop eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : -$as_echo "#define HAVE_RL_APPEND_HISTORY 1" >>confdefs.h +printf "%s\n" "#define HAVE_RL_APPEND_HISTORY 1" >>confdefs.h fi @@ -16060,15 +18293,17 @@ fi # End of readline checks: restore LIBS LIBS=$LIBS_no_readline -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken nice()" >&5 -$as_echo_n "checking for broken nice()... " >&6; } -if ${ac_cv_broken_nice+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken nice()" >&5 +printf %s "checking for broken nice()... " >&6; } +if test ${ac_cv_broken_nice+y} +then : + printf %s "(cached) " >&6 +else $as_nop -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : ac_cv_broken_nice=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16083,9 +18318,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_broken_nice=yes -else +else $as_nop ac_cv_broken_nice=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16094,23 +18330,25 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_nice" >&5 -$as_echo "$ac_cv_broken_nice" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_nice" >&5 +printf "%s\n" "$ac_cv_broken_nice" >&6; } if test "$ac_cv_broken_nice" = yes then -$as_echo "#define HAVE_BROKEN_NICE 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_NICE 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken poll()" >&5 -$as_echo_n "checking for broken poll()... " >&6; } -if ${ac_cv_broken_poll+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken poll()" >&5 +printf %s "checking for broken poll()... " >&6; } +if test ${ac_cv_broken_poll+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_broken_poll=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16134,9 +18372,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_broken_poll=yes -else +else $as_nop ac_cv_broken_poll=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16145,25 +18384,27 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_poll" >&5 -$as_echo "$ac_cv_broken_poll" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_poll" >&5 +printf "%s\n" "$ac_cv_broken_poll" >&6; } if test "$ac_cv_broken_poll" = yes then -$as_echo "#define HAVE_BROKEN_POLL 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_POLL 1" >>confdefs.h fi # check tzset(3) exists and works like we expect it to -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working tzset()" >&5 -$as_echo_n "checking for working tzset()... " >&6; } -if ${ac_cv_working_tzset+:} false; then : - $as_echo_n "(cached) " >&6 -else - -if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working tzset()" >&5 +printf %s "checking for working tzset()... " >&6; } +if test ${ac_cv_working_tzset+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +if test "$cross_compiling" = yes +then : ac_cv_working_tzset=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16231,9 +18472,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_working_tzset=yes -else +else $as_nop ac_cv_working_tzset=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16242,26 +18484,27 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_tzset" >&5 -$as_echo "$ac_cv_working_tzset" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_tzset" >&5 +printf "%s\n" "$ac_cv_working_tzset" >&6; } if test "$ac_cv_working_tzset" = yes then -$as_echo "#define HAVE_WORKING_TZSET 1" >>confdefs.h +printf "%s\n" "#define HAVE_WORKING_TZSET 1" >>confdefs.h fi # Look for subsecond timestamps in struct stat -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tv_nsec in struct stat" >&5 -$as_echo_n "checking for tv_nsec in struct stat... " >&6; } -if ${ac_cv_stat_tv_nsec+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tv_nsec in struct stat" >&5 +printf %s "checking for tv_nsec in struct stat... " >&6; } +if test ${ac_cv_stat_tv_nsec+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { struct stat st; @@ -16271,34 +18514,36 @@ st.st_mtim.tv_nsec = 1; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_stat_tv_nsec=yes -else +else $as_nop ac_cv_stat_tv_nsec=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec" >&5 -$as_echo "$ac_cv_stat_tv_nsec" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec" >&5 +printf "%s\n" "$ac_cv_stat_tv_nsec" >&6; } if test "$ac_cv_stat_tv_nsec" = yes then -$as_echo "#define HAVE_STAT_TV_NSEC 1" >>confdefs.h +printf "%s\n" "#define HAVE_STAT_TV_NSEC 1" >>confdefs.h fi # Look for BSD style subsecond timestamps in struct stat -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tv_nsec2 in struct stat" >&5 -$as_echo_n "checking for tv_nsec2 in struct stat... " >&6; } -if ${ac_cv_stat_tv_nsec2+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tv_nsec2 in struct stat" >&5 +printf %s "checking for tv_nsec2 in struct stat... " >&6; } +if test ${ac_cv_stat_tv_nsec2+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { struct stat st; @@ -16308,20 +18553,21 @@ st.st_mtimespec.tv_nsec = 1; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_stat_tv_nsec2=yes -else +else $as_nop ac_cv_stat_tv_nsec2=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec2" >&5 -$as_echo "$ac_cv_stat_tv_nsec2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec2" >&5 +printf "%s\n" "$ac_cv_stat_tv_nsec2" >&6; } if test "$ac_cv_stat_tv_nsec2" = yes then -$as_echo "#define HAVE_STAT_TV_NSEC2 1" >>confdefs.h +printf "%s\n" "#define HAVE_STAT_TV_NSEC2 1" >>confdefs.h fi @@ -16331,50 +18577,46 @@ if test "$cross_compiling" = no; then CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw" fi -for ac_header in curses.h ncurses.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "curses.h" "ac_cv_header_curses_h" "$ac_includes_default" +if test "x$ac_cv_header_curses_h" = xyes +then : + printf "%s\n" "#define HAVE_CURSES_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" +if test "x$ac_cv_header_ncurses_h" = xyes +then : + printf "%s\n" "#define HAVE_NCURSES_H 1" >>confdefs.h -done +fi # On Solaris, term.h requires curses.h -for ac_header in term.h -do : - ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" " +ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" " #ifdef HAVE_CURSES_H #include #endif " -if test "x$ac_cv_header_term_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TERM_H 1 -_ACEOF +if test "x$ac_cv_header_term_h" = xyes +then : + printf "%s\n" "#define HAVE_TERM_H 1" >>confdefs.h fi -done - # On HP/UX 11.0, mvwdelch is a block with a return statement -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mvwdelch is an expression" >&5 -$as_echo_n "checking whether mvwdelch is an expression... " >&6; } -if ${ac_cv_mvwdelch_is_expression+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mvwdelch is an expression" >&5 +printf %s "checking whether mvwdelch is an expression... " >&6; } +if test ${ac_cv_mvwdelch_is_expression+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int rtn; @@ -16384,21 +18626,22 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_mvwdelch_is_expression=yes -else +else $as_nop ac_cv_mvwdelch_is_expression=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mvwdelch_is_expression" >&5 -$as_echo "$ac_cv_mvwdelch_is_expression" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mvwdelch_is_expression" >&5 +printf "%s\n" "$ac_cv_mvwdelch_is_expression" >&6; } if test "$ac_cv_mvwdelch_is_expression" = yes then -$as_echo "#define MVWDELCH_IS_EXPRESSION 1" >>confdefs.h +printf "%s\n" "#define MVWDELCH_IS_EXPRESSION 1" >>confdefs.h fi @@ -16406,11 +18649,12 @@ fi # structs since version 5.7. If the macro is defined as zero before including # [n]curses.h, ncurses will expose fields of the structs regardless of the # configuration. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether WINDOW has _flags" >&5 -$as_echo_n "checking whether WINDOW has _flags... " >&6; } -if ${ac_cv_window_has_flags+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether WINDOW has _flags" >&5 +printf %s "checking whether WINDOW has _flags... " >&6; } +if test ${ac_cv_window_has_flags+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16418,7 +18662,7 @@ else #include int -main () +main (void) { WINDOW *w; @@ -16428,32 +18672,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_window_has_flags=yes -else +else $as_nop ac_cv_window_has_flags=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_window_has_flags" >&5 -$as_echo "$ac_cv_window_has_flags" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_window_has_flags" >&5 +printf "%s\n" "$ac_cv_window_has_flags" >&6; } if test "$ac_cv_window_has_flags" = yes then -$as_echo "#define WINDOW_HAS_FLAGS 1" >>confdefs.h +printf "%s\n" "#define WINDOW_HAS_FLAGS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_pad" >&5 -$as_echo_n "checking for is_pad... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_pad" >&5 +printf %s "checking for is_pad... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef is_pad @@ -16464,104 +18709,108 @@ void *x=is_pad return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_IS_PAD 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_IS_PAD 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_term_resized" >&5 -$as_echo_n "checking for is_term_resized... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_term_resized" >&5 +printf %s "checking for is_term_resized... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=is_term_resized ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_IS_TERM_RESIZED 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_IS_TERM_RESIZED 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for resize_term" >&5 -$as_echo_n "checking for resize_term... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for resize_term" >&5 +printf %s "checking for resize_term... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=resize_term ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_RESIZE_TERM 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_RESIZE_TERM 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for resizeterm" >&5 -$as_echo_n "checking for resizeterm... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for resizeterm" >&5 +printf %s "checking for resizeterm... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x=resizeterm ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_RESIZETERM 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_RESIZETERM 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for immedok" >&5 -$as_echo_n "checking for immedok... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for immedok" >&5 +printf %s "checking for immedok... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef immedok @@ -16572,26 +18821,27 @@ void *x=immedok return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_IMMEDOK 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_IMMEDOK 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for syncok" >&5 -$as_echo_n "checking for syncok... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for syncok" >&5 +printf %s "checking for syncok... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef syncok @@ -16602,26 +18852,27 @@ void *x=syncok return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_SYNCOK 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_SYNCOK 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5 -$as_echo_n "checking for wchgat... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5 +printf %s "checking for wchgat... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef wchgat @@ -16632,26 +18883,27 @@ void *x=wchgat return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for filter" >&5 -$as_echo_n "checking for filter... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for filter" >&5 +printf %s "checking for filter... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef filter @@ -16662,26 +18914,27 @@ void *x=filter return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_FILTER 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_FILTER 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for has_key" >&5 -$as_echo_n "checking for has_key... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for has_key" >&5 +printf %s "checking for has_key... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef has_key @@ -16692,26 +18945,27 @@ void *x=has_key return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_HAS_KEY 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_HAS_KEY 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for typeahead" >&5 -$as_echo_n "checking for typeahead... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for typeahead" >&5 +printf %s "checking for typeahead... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef typeahead @@ -16722,26 +18976,27 @@ void *x=typeahead return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_TYPEAHEAD 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_TYPEAHEAD 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for use_env" >&5 -$as_echo_n "checking for use_env... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for use_env" >&5 +printf %s "checking for use_env... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef use_env @@ -16752,46 +19007,48 @@ void *x=use_env return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_CURSES_USE_ENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURSES_USE_ENV 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # last curses configure check CPPFLAGS=$ac_save_cppflags -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for device files" >&5 -$as_echo "$as_me: checking for device files" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for device files" >&5 +printf "%s\n" "$as_me: checking for device files" >&6;} if test "x$cross_compiling" = xyes; then if test "${ac_cv_file__dev_ptmx+set}" != set; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 -$as_echo_n "checking for /dev/ptmx... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not set" >&5 -$as_echo "not set" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 +printf %s "checking for /dev/ptmx... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not set" >&5 +printf "%s\n" "not set" >&6; } as_fn_error $? "set ac_cv_file__dev_ptmx to yes/no in your CONFIG_SITE file when cross compiling" "$LINENO" 5 fi if test "${ac_cv_file__dev_ptc+set}" != set; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 -$as_echo_n "checking for /dev/ptc... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not set" >&5 -$as_echo "not set" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 +printf %s "checking for /dev/ptc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not set" >&5 +printf "%s\n" "not set" >&6; } as_fn_error $? "set ac_cv_file__dev_ptc to yes/no in your CONFIG_SITE file when cross compiling" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 -$as_echo_n "checking for /dev/ptmx... " >&6; } -if ${ac_cv_file__dev_ptmx+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 +printf %s "checking for /dev/ptmx... " >&6; } +if test ${ac_cv_file__dev_ptmx+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/ptmx"; then @@ -16800,22 +19057,24 @@ else ac_cv_file__dev_ptmx=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptmx" >&5 -$as_echo "$ac_cv_file__dev_ptmx" >&6; } -if test "x$ac_cv_file__dev_ptmx" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptmx" >&5 +printf "%s\n" "$ac_cv_file__dev_ptmx" >&6; } +if test "x$ac_cv_file__dev_ptmx" = xyes +then : fi if test "x$ac_cv_file__dev_ptmx" = xyes; then -$as_echo "#define HAVE_DEV_PTMX 1" >>confdefs.h +printf "%s\n" "#define HAVE_DEV_PTMX 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 -$as_echo_n "checking for /dev/ptc... " >&6; } -if ${ac_cv_file__dev_ptc+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 +printf %s "checking for /dev/ptc... " >&6; } +if test ${ac_cv_file__dev_ptc+y} +then : + printf %s "(cached) " >&6 +else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/ptc"; then @@ -16824,15 +19083,16 @@ else ac_cv_file__dev_ptc=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptc" >&5 -$as_echo "$ac_cv_file__dev_ptc" >&6; } -if test "x$ac_cv_file__dev_ptc" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptc" >&5 +printf "%s\n" "$ac_cv_file__dev_ptc" >&6; } +if test "x$ac_cv_file__dev_ptc" = xyes +then : fi if test "x$ac_cv_file__dev_ptc" = xyes; then -$as_echo "#define HAVE_DEV_PTC 1" >>confdefs.h +printf "%s\n" "#define HAVE_DEV_PTC 1" >>confdefs.h fi @@ -16841,15 +19101,17 @@ then LIBS="$LIBS -framework CoreFoundation" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for %zd printf() format support" >&5 -$as_echo_n "checking for %zd printf() format support... " >&6; } -if ${ac_cv_have_size_t_format+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for %zd printf() format support" >&5 +printf %s "checking for %zd printf() format support... " >&6; } +if test ${ac_cv_have_size_t_format+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_have_size_t_format="cross -- assuming yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16889,9 +19151,10 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_have_size_t_format=yes -else +else $as_nop ac_cv_have_size_t_format=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16899,11 +19162,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_size_t_format" >&5 -$as_echo "$ac_cv_have_size_t_format" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_size_t_format" >&5 +printf "%s\n" "$ac_cv_have_size_t_format" >&6; } if test "$ac_cv_have_size_t_format" != no ; then -$as_echo "#define PY_FORMAT_SIZE_T \"z\"" >>confdefs.h +printf "%s\n" "#define PY_FORMAT_SIZE_T \"z\"" >>confdefs.h fi @@ -16916,23 +19179,26 @@ ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " #endif " -if test "x$ac_cv_type_socklen_t" = xyes; then : +if test "x$ac_cv_type_socklen_t" = xyes +then : -else +else $as_nop -$as_echo "#define socklen_t int" >>confdefs.h +printf "%s\n" "#define socklen_t int" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken mbstowcs" >&5 -$as_echo_n "checking for broken mbstowcs... " >&6; } -if ${ac_cv_broken_mbstowcs+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken mbstowcs" >&5 +printf %s "checking for broken mbstowcs... " >&6; } +if test ${ac_cv_broken_mbstowcs+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_broken_mbstowcs=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16946,9 +19212,10 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_broken_mbstowcs=no -else +else $as_nop ac_cv_broken_mbstowcs=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16957,57 +19224,60 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_mbstowcs" >&5 -$as_echo "$ac_cv_broken_mbstowcs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_mbstowcs" >&5 +printf "%s\n" "$ac_cv_broken_mbstowcs" >&6; } if test "$ac_cv_broken_mbstowcs" = yes then -$as_echo "#define HAVE_BROKEN_MBSTOWCS 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_MBSTOWCS 1" >>confdefs.h fi # Check for --with-computed-gotos -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-computed-gotos" >&5 -$as_echo_n "checking for --with-computed-gotos... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-computed-gotos" >&5 +printf %s "checking for --with-computed-gotos... " >&6; } # Check whether --with-computed-gotos was given. -if test "${with_computed_gotos+set}" = set; then : +if test ${with_computed_gotos+y} +then : withval=$with_computed_gotos; if test "$withval" = yes then -$as_echo "#define USE_COMPUTED_GOTOS 1" >>confdefs.h +printf "%s\n" "#define USE_COMPUTED_GOTOS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi if test "$withval" = no then -$as_echo "#define USE_COMPUTED_GOTOS 0" >>confdefs.h +printf "%s\n" "#define USE_COMPUTED_GOTOS 0" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 -$as_echo "no value specified" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 +printf "%s\n" "no value specified" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports computed gotos" >&5 -$as_echo_n "checking whether $CC supports computed gotos... " >&6; } -if ${ac_cv_computed_gotos+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports computed gotos" >&5 +printf %s "checking whether $CC supports computed gotos... " >&6; } +if test ${ac_cv_computed_gotos+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : if test "${with_computed_gotos+set}" = set; then ac_cv_computed_gotos="$with_computed_gotos -- configured --with(out)-computed-gotos" else ac_cv_computed_gotos=no fi -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17023,9 +19293,10 @@ LABEL2: } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_computed_gotos=yes -else +else $as_nop ac_cv_computed_gotos=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17034,18 +19305,18 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_computed_gotos" >&5 -$as_echo "$ac_cv_computed_gotos" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_computed_gotos" >&5 +printf "%s\n" "$ac_cv_computed_gotos" >&6; } case "$ac_cv_computed_gotos" in yes*) -$as_echo "#define HAVE_COMPUTED_GOTOS 1" >>confdefs.h +printf "%s\n" "#define HAVE_COMPUTED_GOTOS 1" >>confdefs.h esac case $ac_sys_system in AIX*) -$as_echo "#define HAVE_BROKEN_PIPE_BUF 1" >>confdefs.h +printf "%s\n" "#define HAVE_BROKEN_PIPE_BUF 1" >>confdefs.h ;; esac @@ -17059,26 +19330,26 @@ done SRCDIRS="Parser Objects Python Modules Modules/_io Programs" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5 -$as_echo_n "checking for build directories... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5 +printf %s "checking for build directories... " >&6; } for dir in $SRCDIRS; do if test ! -d $dir; then mkdir $dir fi done -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 +printf "%s\n" "done" >&6; } # Availability of -O2: -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -O2" >&5 -$as_echo_n "checking for -O2... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -O2" >&5 +printf %s "checking for -O2... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { @@ -17086,28 +19357,30 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : have_O2=yes -else +else $as_nop have_O2=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_O2" >&5 -$as_echo "$have_O2" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_O2" >&5 +printf "%s\n" "$have_O2" >&6; } CFLAGS="$saved_cflags" # _FORTIFY_SOURCE wrappers for memmove and bcopy are incorrect: # http://sourceware.org/ml/libc-alpha/2010-12/msg00009.html -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glibc _FORTIFY_SOURCE/memmove bug" >&5 -$as_echo_n "checking for glibc _FORTIFY_SOURCE/memmove bug... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glibc _FORTIFY_SOURCE/memmove bug" >&5 +printf %s "checking for glibc _FORTIFY_SOURCE/memmove bug... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2 -D_FORTIFY_SOURCE=2" if test "$have_O2" = no; then CFLAGS="" fi -if test "$cross_compiling" = yes; then : +if test "$cross_compiling" = yes +then : have_glibc_memmove_bug=undefined -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17127,9 +19400,10 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : have_glibc_memmove_bug=no -else +else $as_nop have_glibc_memmove_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17137,11 +19411,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CFLAGS="$saved_cflags" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_glibc_memmove_bug" >&5 -$as_echo "$have_glibc_memmove_bug" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_glibc_memmove_bug" >&5 +printf "%s\n" "$have_glibc_memmove_bug" >&6; } if test "$have_glibc_memmove_bug" = yes; then -$as_echo "#define HAVE_GLIBC_MEMMOVE_BUG 1" >>confdefs.h +printf "%s\n" "#define HAVE_GLIBC_MEMMOVE_BUG 1" >>confdefs.h fi @@ -17151,13 +19425,14 @@ if test "$have_gcc_asm_for_x87" = yes; then # http://gcc.gnu.org/ml/gcc/2010-11/msg00366.html case $CC in *gcc*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc ipa-pure-const bug" >&5 -$as_echo_n "checking for gcc ipa-pure-const bug... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc ipa-pure-const bug" >&5 +printf %s "checking for gcc ipa-pure-const bug... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2" - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : have_ipa_pure_const_bug=undefined -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17178,9 +19453,10 @@ else } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : have_ipa_pure_const_bug=no -else +else $as_nop have_ipa_pure_const_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17188,11 +19464,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CFLAGS="$saved_cflags" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ipa_pure_const_bug" >&5 -$as_echo "$have_ipa_pure_const_bug" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_ipa_pure_const_bug" >&5 +printf "%s\n" "$have_ipa_pure_const_bug" >&6; } if test "$have_ipa_pure_const_bug" = yes; then -$as_echo "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h +printf "%s\n" "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h fi ;; @@ -17200,8 +19476,8 @@ $as_echo "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h fi # Check for stdatomic.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdatomic.h" >&5 -$as_echo_n "checking for stdatomic.h... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdatomic.h" >&5 +printf %s "checking for stdatomic.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17218,26 +19494,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_stdatomic_h=yes -else +else $as_nop have_stdatomic_h=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_stdatomic_h" >&5 -$as_echo "$have_stdatomic_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_stdatomic_h" >&5 +printf "%s\n" "$have_stdatomic_h" >&6; } if test "$have_stdatomic_h" = yes; then -$as_echo "#define HAVE_STD_ATOMIC 1" >>confdefs.h +printf "%s\n" "#define HAVE_STD_ATOMIC 1" >>confdefs.h fi # Check for GCC >= 4.7 and clang __atomic builtin functions -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic_load_n and __atomic_store_n functions" >&5 -$as_echo_n "checking for builtin __atomic_load_n and __atomic_store_n functions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic_load_n and __atomic_store_n functions" >&5 +printf %s "checking for builtin __atomic_load_n and __atomic_store_n functions... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17251,31 +19528,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_builtin_atomic=yes -else +else $as_nop have_builtin_atomic=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_builtin_atomic" >&5 -$as_echo "$have_builtin_atomic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_builtin_atomic" >&5 +printf "%s\n" "$have_builtin_atomic" >&6; } if test "$have_builtin_atomic" = yes; then -$as_echo "#define HAVE_BUILTIN_ATOMIC 1" >>confdefs.h +printf "%s\n" "#define HAVE_BUILTIN_ATOMIC 1" >>confdefs.h fi # ensurepip option -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ensurepip" >&5 -$as_echo_n "checking for ensurepip... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ensurepip" >&5 +printf %s "checking for ensurepip... " >&6; } # Check whether --with-ensurepip was given. -if test "${with_ensurepip+set}" = set; then : +if test ${with_ensurepip+y} +then : withval=$with_ensurepip; -else +else $as_nop with_ensurepip=upgrade fi @@ -17289,13 +19568,13 @@ case $with_ensurepip in #( *) : as_fn_error $? "--with-ensurepip=upgrade|install|no" "$LINENO" 5 ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENSUREPIP" >&5 -$as_echo "$ENSUREPIP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ENSUREPIP" >&5 +printf "%s\n" "$ENSUREPIP" >&6; } # check if the dirent structure of a d_type field and DT_UNKNOWN is defined -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the dirent structure of a d_type field" >&5 -$as_echo_n "checking if the dirent structure of a d_type field... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the dirent structure of a d_type field" >&5 +printf %s "checking if the dirent structure of a d_type field... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17309,25 +19588,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_dirent_d_type=yes -else +else $as_nop have_dirent_d_type=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_dirent_d_type" >&5 -$as_echo "$have_dirent_d_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_dirent_d_type" >&5 +printf "%s\n" "$have_dirent_d_type" >&6; } if test "$have_dirent_d_type" = yes; then -$as_echo "#define HAVE_DIRENT_D_TYPE 1" >>confdefs.h +printf "%s\n" "#define HAVE_DIRENT_D_TYPE 1" >>confdefs.h fi # check if the Linux getrandom() syscall is available -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Linux getrandom() syscall" >&5 -$as_echo_n "checking for the Linux getrandom() syscall... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Linux getrandom() syscall" >&5 +printf %s "checking for the Linux getrandom() syscall... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17347,26 +19627,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_getrandom_syscall=yes -else +else $as_nop have_getrandom_syscall=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getrandom_syscall" >&5 -$as_echo "$have_getrandom_syscall" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getrandom_syscall" >&5 +printf "%s\n" "$have_getrandom_syscall" >&6; } if test "$have_getrandom_syscall" = yes; then -$as_echo "#define HAVE_GETRANDOM_SYSCALL 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETRANDOM_SYSCALL 1" >>confdefs.h fi # check if the getrandom() function is available # the test was written for the Solaris function of -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the getrandom() function" >&5 -$as_echo_n "checking for the getrandom() function... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the getrandom() function" >&5 +printf %s "checking for the getrandom() function... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17384,19 +19665,20 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : have_getrandom=yes -else +else $as_nop have_getrandom=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getrandom" >&5 -$as_echo "$have_getrandom" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getrandom" >&5 +printf "%s\n" "$have_getrandom" >&6; } if test "$have_getrandom" = yes; then -$as_echo "#define HAVE_GETRANDOM 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h fi @@ -17404,11 +19686,12 @@ fi # shm_* may only be available if linking against librt save_LIBS="$LIBS" save_includes_default="$ac_includes_default" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5 -$as_echo_n "checking for library containing shm_open... " >&6; } -if ${ac_cv_search_shm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5 +printf %s "checking for library containing shm_open... " >&6; } +if test ${ac_cv_search_shm_open+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17416,67 +19699,64 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shm_open (); int -main () +main (void) { return shm_open (); ; return 0; } _ACEOF -for ac_lib in '' rt; do +for ac_lib in '' rt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_shm_open=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_shm_open+:} false; then : + if test ${ac_cv_search_shm_open+y} +then : break fi done -if ${ac_cv_search_shm_open+:} false; then : +if test ${ac_cv_search_shm_open+y} +then : -else +else $as_nop ac_cv_search_shm_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5 -$as_echo "$ac_cv_search_shm_open" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5 +printf "%s\n" "$ac_cv_search_shm_open" >&6; } ac_res=$ac_cv_search_shm_open -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$ac_cv_search_shm_open" = "-lrt"; then -$as_echo "#define SHM_NEEDS_LIBRT 1" >>confdefs.h +printf "%s\n" "#define SHM_NEEDS_LIBRT 1" >>confdefs.h fi -for ac_header in sys/mman.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MMAN_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h fi -done - # temporarily override ac_includes_default for AC_CHECK_FUNCS below ac_includes_default="\ ${ac_includes_default} @@ -17486,17 +19766,18 @@ ${ac_includes_default} # endif #endif " -for ac_func in shm_open shm_unlink -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "shm_open" "ac_cv_func_shm_open" +if test "x$ac_cv_func_shm_open" = xyes +then : + printf "%s\n" "#define HAVE_SHM_OPEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "shm_unlink" "ac_cv_func_shm_unlink" +if test "x$ac_cv_func_shm_unlink" = xyes +then : + printf "%s\n" "#define HAVE_SHM_UNLINK 1" >>confdefs.h fi -done # we don't want to link with librt always, restore LIBS LIBS="$save_LIBS" @@ -17507,7 +19788,8 @@ ac_includes_default="$save_includes_default" found=false # Check whether --with-openssl was given. -if test "${with_openssl+set}" = set; then : +if test ${with_openssl+y} +then : withval=$with_openssl; case "$withval" in "" | y | ye | yes | n | no) @@ -17517,18 +19799,19 @@ if test "${with_openssl+set}" = set; then : ;; esac -else +else $as_nop # if pkg-config is installed and openssl has installed a .pc file, # then use that information and don't search ssldirs if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else @@ -17536,11 +19819,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17551,11 +19838,11 @@ fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +printf "%s\n" "$PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -17564,11 +19851,12 @@ if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else @@ -17576,11 +19864,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17591,11 +19883,11 @@ fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 -$as_echo "$ac_ct_PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 +printf "%s\n" "$ac_ct_PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_PKG_CONFIG" = x; then @@ -17603,8 +19895,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_ct_PKG_CONFIG @@ -17638,19 +19930,19 @@ fi if ! $found; then OPENSSL_INCLUDES= for ssldir in $ssldirs; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl/ssl.h in $ssldir" >&5 -$as_echo_n "checking for openssl/ssl.h in $ssldir... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl/ssl.h in $ssldir" >&5 +printf %s "checking for openssl/ssl.h in $ssldir... " >&6; } if test -f "$ssldir/include/openssl/ssl.h"; then OPENSSL_INCLUDES="-I$ssldir/include" OPENSSL_LDFLAGS="-L$ssldir/lib" OPENSSL_LIBS="-lssl -lcrypto" found=true - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } break else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi done @@ -17661,8 +19953,8 @@ $as_echo "no" >&6; } # try the preprocessor and linker with our new flags, # being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiling and linking against OpenSSL works" >&5 -$as_echo_n "checking whether compiling and linking against OpenSSL works... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiling and linking against OpenSSL works" >&5 +printf %s "checking whether compiling and linking against OpenSSL works... " >&6; } echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \ "OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&5 @@ -17676,27 +19968,28 @@ $as_echo_n "checking whether compiling and linking against OpenSSL works... " >& /* end confdefs.h. */ #include int -main () +main (void) { SSL_new(NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_openssl=yes -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } have_openssl=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" @@ -17708,8 +20001,8 @@ rm -f core conftest.err conftest.$ac_objext \ if test "$have_openssl" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_VERIFY_PARAM_set1_host in libssl" >&5 -$as_echo_n "checking for X509_VERIFY_PARAM_set1_host in libssl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X509_VERIFY_PARAM_set1_host in libssl" >&5 +printf %s "checking for X509_VERIFY_PARAM_set1_host in libssl... " >&6; } save_LIBS="$LIBS" save_LDFLAGS="$LDFLAGS" @@ -17724,7 +20017,7 @@ $as_echo_n "checking for X509_VERIFY_PARAM_set1_host in libssl... " >&6; } #include int -main () +main (void) { X509_VERIFY_PARAM *p = X509_VERIFY_PARAM_new(); @@ -17737,22 +20030,23 @@ main () } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_has_x509_verify_param_set1_host=yes -else +else $as_nop ac_cv_has_x509_verify_param_set1_host=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_x509_verify_param_set1_host" >&5 -$as_echo "$ac_cv_has_x509_verify_param_set1_host" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_x509_verify_param_set1_host" >&5 +printf "%s\n" "$ac_cv_has_x509_verify_param_set1_host" >&6; } if test "$ac_cv_has_x509_verify_param_set1_host" = "yes"; then -$as_echo "#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1" >>confdefs.h +printf "%s\n" "#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1" >>confdefs.h fi @@ -17762,13 +20056,14 @@ $as_echo "#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1" >>confdefs.h fi # rpath to libssl and libcrypto -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openssl-rpath" >&5 -$as_echo_n "checking for --with-openssl-rpath... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-openssl-rpath" >&5 +printf %s "checking for --with-openssl-rpath... " >&6; } # Check whether --with-openssl-rpath was given. -if test "${with_openssl_rpath+set}" = set; then : +if test ${with_openssl_rpath+y} +then : withval=$with_openssl_rpath; -else +else $as_nop with_openssl_rpath=no fi @@ -17779,54 +20074,54 @@ case $with_openssl_rpath in #( no) : OPENSSL_RPATH= ;; #( *) : - if test -d "$with_openssl_rpath"; then : + if test -d "$with_openssl_rpath" +then : OPENSSL_RPATH="$with_openssl_rpath" -else +else $as_nop as_fn_error $? "--with-openssl-rpath \"$with_openssl_rpath\" is not a directory" "$LINENO" 5 fi ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENSSL_RPATH" >&5 -$as_echo "$OPENSSL_RPATH" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OPENSSL_RPATH" >&5 +printf "%s\n" "$OPENSSL_RPATH" >&6; } # ssl module default cipher suite string -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ssl-default-suites" >&5 -$as_echo_n "checking for --with-ssl-default-suites... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-ssl-default-suites" >&5 +printf %s "checking for --with-ssl-default-suites... " >&6; } # Check whether --with-ssl-default-suites was given. -if test "${with_ssl_default_suites+set}" = set; then : +if test ${with_ssl_default_suites+y} +then : withval=$with_ssl_default_suites; -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } case "$withval" in python) - $as_echo "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h + printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h ;; openssl) - $as_echo "#define PY_SSL_DEFAULT_CIPHERS 2" >>confdefs.h + printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 2" >>confdefs.h ;; *) - $as_echo "#define PY_SSL_DEFAULT_CIPHERS 0" >>confdefs.h + printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 0" >>confdefs.h - cat >>confdefs.h <<_ACEOF -#define PY_SSL_DEFAULT_CIPHER_STRING "$withval" -_ACEOF + printf "%s\n" "#define PY_SSL_DEFAULT_CIPHER_STRING \"$withval\"" >>confdefs.h ;; esac -else +else $as_nop -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: python" >&5 -$as_echo "python" >&6; } -$as_echo "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: python" >&5 +printf "%s\n" "python" >&6; } +printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h fi @@ -17835,13 +20130,14 @@ fi # builtin hash modules default_hashlib_hashes="md5,sha1,sha256,sha512,sha3,blake2" -$as_echo "#define PY_BUILTIN_HASHLIB_HASHES /**/" >>confdefs.h +printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES /**/" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-builtin-hashlib-hashes" >&5 -$as_echo_n "checking for --with-builtin-hashlib-hashes... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-builtin-hashlib-hashes" >&5 +printf %s "checking for --with-builtin-hashlib-hashes... " >&6; } # Check whether --with-builtin-hashlib-hashes was given. -if test "${with_builtin_hashlib_hashes+set}" = set; then : +if test ${with_builtin_hashlib_hashes+y} +then : withval=$with_builtin_hashlib_hashes; case "$withval" in yes) @@ -17851,20 +20147,16 @@ case "$withval" in withval="" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } -cat >>confdefs.h <<_ACEOF -#define PY_BUILTIN_HASHLIB_HASHES "$withval" -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; } +printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES \"$withval\"" >>confdefs.h -else +else $as_nop -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $default_hashlib_hashes" >&5 -$as_echo "$default_hashlib_hashes" >&6; }; -cat >>confdefs.h <<_ACEOF -#define PY_BUILTIN_HASHLIB_HASHES "$default_hashlib_hashes" -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $default_hashlib_hashes" >&5 +printf "%s\n" "$default_hashlib_hashes" >&6; }; +printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES \"$default_hashlib_hashes\"" >>confdefs.h fi @@ -17872,48 +20164,50 @@ fi # --with-experimental-isolated-subinterpreters -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-experimental-isolated-subinterpreters" >&5 -$as_echo_n "checking for --with-experimental-isolated-subinterpreters... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-experimental-isolated-subinterpreters" >&5 +printf %s "checking for --with-experimental-isolated-subinterpreters... " >&6; } # Check whether --with-experimental-isolated-subinterpreters was given. -if test "${with_experimental_isolated_subinterpreters+set}" = set; then : +if test ${with_experimental_isolated_subinterpreters+y} +then : withval=$with_experimental_isolated_subinterpreters; if test "$withval" != no then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; - $as_echo "#define EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; }; + printf "%s\n" "#define EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; }; fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # --with-static-libpython STATIC_LIBPYTHON=1 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-static-libpython" >&5 -$as_echo_n "checking for --with-static-libpython... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-static-libpython" >&5 +printf %s "checking for --with-static-libpython... " >&6; } # Check whether --with-static-libpython was given. -if test "${with_static_libpython+set}" = set; then : +if test ${with_static_libpython+y} +then : withval=$with_static_libpython; if test "$withval" = no then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; }; STATIC_LIBPYTHON=0 else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; }; fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)' @@ -17930,21 +20224,22 @@ fi # Check whether to disable test modules. Once set, setup.py will not build # test extension modules and "make install" will not install test suites. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --disable-test-modules" >&5 -$as_echo_n "checking for --disable-test-modules... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --disable-test-modules" >&5 +printf %s "checking for --disable-test-modules... " >&6; } # Check whether --enable-test-modules was given. -if test "${enable_test_modules+set}" = set; then : +if test ${enable_test_modules+y} +then : enableval=$enable_test_modules; fi if test "$enable_test_modules" = no; then TEST_MODULES=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else TEST_MODULES=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -17981,8 +20276,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -18012,15 +20307,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -18034,8 +20329,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -18052,7 +20347,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -18069,8 +20364,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -18093,14 +20388,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -18110,46 +20407,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -18158,13 +20455,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -18173,8 +20463,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -18186,30 +20480,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -18222,13 +20496,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -18255,18 +20530,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -18278,12 +20555,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -18314,7 +20592,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -18336,6 +20614,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -18349,6 +20631,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -18390,7 +20678,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -18399,7 +20687,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -18462,7 +20750,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by python $as_me 3.10, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -18520,14 +20808,16 @@ $config_headers Report bugs to ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ python config.status 3.10 -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -18566,15 +20856,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -18582,7 +20872,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -18591,7 +20881,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -18619,7 +20909,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -18633,7 +20923,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -18667,8 +20957,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree @@ -19004,7 +21294,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -19012,17 +21302,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -19039,7 +21329,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -19063,9 +21353,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -19127,8 +21417,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -19172,9 +21462,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -19190,20 +21480,20 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi @@ -19249,8 +21539,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -19274,3 +21564,4 @@ if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then echo "" >&6 echo "" >&6 fi + From webhook-mailer at python.org Mon Apr 5 13:19:21 2021 From: webhook-mailer at python.org (terryjreedy) Date: Mon, 05 Apr 2021 17:19:21 -0000 Subject: [Python-checkins] Fix typo in turtledemo.two_canvases. (GH-25194) Message-ID: https://github.com/python/cpython/commit/4e2ef7084185d2220003b4b5538e3d8190b2dcd6 commit: 4e2ef7084185d2220003b4b5538e3d8190b2dcd6 branch: master author: Terry Jan Reedy committer: terryjreedy date: 2021-04-05T13:19:13-04:00 summary: Fix typo in turtledemo.two_canvases. (GH-25194) files: M Lib/turtledemo/two_canvases.py diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py index d579876616ff9..f3602585ab059 100644 --- a/Lib/turtledemo/two_canvases.py +++ b/Lib/turtledemo/two_canvases.py @@ -1,7 +1,7 @@ """turtledemo.two_canvases Use TurtleScreen and RawTurtle to draw on two -distinct canvases in a separate windows. The +distinct canvases in a separate window. The new window must be separately closed in addition to pressing the STOP button. """ From webhook-mailer at python.org Mon Apr 5 13:37:32 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 05 Apr 2021 17:37:32 -0000 Subject: [Python-checkins] Fix typo in turtledemo.two_canvases. (GH-25194) Message-ID: https://github.com/python/cpython/commit/0f7c77e8dd0d58e9d8d254da5f06813551e96f70 commit: 0f7c77e8dd0d58e9d8d254da5f06813551e96f70 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-05T10:37:24-07:00 summary: Fix typo in turtledemo.two_canvases. (GH-25194) (cherry picked from commit 4e2ef7084185d2220003b4b5538e3d8190b2dcd6) Co-authored-by: Terry Jan Reedy files: M Lib/turtledemo/two_canvases.py diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py index d579876616ff9..f3602585ab059 100755 --- a/Lib/turtledemo/two_canvases.py +++ b/Lib/turtledemo/two_canvases.py @@ -1,7 +1,7 @@ """turtledemo.two_canvases Use TurtleScreen and RawTurtle to draw on two -distinct canvases in a separate windows. The +distinct canvases in a separate window. The new window must be separately closed in addition to pressing the STOP button. """ From webhook-mailer at python.org Mon Apr 5 13:43:23 2021 From: webhook-mailer at python.org (terryjreedy) Date: Mon, 05 Apr 2021 17:43:23 -0000 Subject: [Python-checkins] [3.9] Fix typo in turtledemo.two_canvases. (GH-25194) Message-ID: https://github.com/python/cpython/commit/82cd24a03c09b93ed0bce0ad7a670d2e97c282c6 commit: 82cd24a03c09b93ed0bce0ad7a670d2e97c282c6 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-05T13:43:15-04:00 summary: [3.9] Fix typo in turtledemo.two_canvases. (GH-25194) (cherry picked from commit 4e2ef7084185d2220003b4b5538e3d8190b2dcd6) Co-authored-by: Terry Jan Reedy files: M Lib/turtledemo/two_canvases.py diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py index d579876616ff9..f3602585ab059 100644 --- a/Lib/turtledemo/two_canvases.py +++ b/Lib/turtledemo/two_canvases.py @@ -1,7 +1,7 @@ """turtledemo.two_canvases Use TurtleScreen and RawTurtle to draw on two -distinct canvases in a separate windows. The +distinct canvases in a separate window. The new window must be separately closed in addition to pressing the STOP button. """ From webhook-mailer at python.org Mon Apr 5 15:21:14 2021 From: webhook-mailer at python.org (terryjreedy) Date: Mon, 05 Apr 2021 19:21:14 -0000 Subject: [Python-checkins] bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) Message-ID: https://github.com/python/cpython/commit/14829b09eb652f457cf837836909169746a810f0 commit: 14829b09eb652f457cf837836909169746a810f0 branch: master author: Zackery Spytz committer: terryjreedy date: 2021-04-05T15:21:00-04:00 summary: bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) The previous "Fundamental data types" section says a c_char_p must be bytes (or None). files: M Doc/library/ctypes.rst diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 7313148721dac..fd6422cc8c06c 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -919,9 +919,9 @@ Let's try it. We create two instances of ``cell``, and let them point to each other, and finally follow the pointer chain a few times:: >>> c1 = cell() - >>> c1.name = "foo" + >>> c1.name = b"foo" >>> c2 = cell() - >>> c2.name = "bar" + >>> c2.name = b"bar" >>> c1.next = pointer(c2) >>> c2.next = pointer(c1) >>> p = c1 From webhook-mailer at python.org Mon Apr 5 15:41:10 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 05 Apr 2021 19:41:10 -0000 Subject: [Python-checkins] bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) Message-ID: https://github.com/python/cpython/commit/75220674c07abfc90c2cd7862d04cfa2e2354450 commit: 75220674c07abfc90c2cd7862d04cfa2e2354450 branch: master author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-05T12:41:01-07:00 summary: bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) Co-Authored-By: Claudiu Popa Automerge-Triggered-By: GH:ericvsmith files: A Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 422a95cebe853..3de2ec04ad370 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1300,7 +1300,7 @@ class C: continue if f.name not in changes: - if f._field_type is _FIELD_INITVAR: + if f._field_type is _FIELD_INITVAR and f.default is MISSING: raise ValueError(f"InitVar {f.name!r} " 'must be specified with replace()') changes[f.name] = getattr(obj, f.name) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 0bfed41b369d1..4f5c3c8aab167 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3251,6 +3251,24 @@ def __post_init__(self, y): c = replace(c, x=3, y=5) self.assertEqual(c.x, 15) + def test_initvar_with_default_value(self): + @dataclass + class C: + x: int + y: InitVar[int] = None + z: InitVar[int] = 42 + + def __post_init__(self, y, z): + if y is not None: + self.x += y + if z is not None: + self.x += z + + c = C(x=1, y=10, z=1) + self.assertEqual(replace(c), C(x=12)) + self.assertEqual(replace(c, y=4), C(x=12, y=4, z=42)) + self.assertEqual(replace(c, y=4, z=1), C(x=12, y=4, z=1)) + def test_recursive_repr(self): @dataclass class C: diff --git a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst new file mode 100644 index 0000000000000..9b6ab994f3b6a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst @@ -0,0 +1,2 @@ +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. From webhook-mailer at python.org Mon Apr 5 15:48:33 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 05 Apr 2021 19:48:33 -0000 Subject: [Python-checkins] bpo-20503: Show how isinstance() works with ABC registered classes. (GH-25175) Message-ID: https://github.com/python/cpython/commit/7bc25ec7276db2a81e7823671a74eeb8aa6b4542 commit: 7bc25ec7276db2a81e7823671a74eeb8aa6b4542 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-05T12:48:24-07:00 summary: bpo-20503: Show how isinstance() works with ABC registered classes. (GH-25175) files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 93ffd36d0e1b4..514ca04ab3c52 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1420,6 +1420,41 @@ single class, e.g. ``isinstance(obj, (class1, class2, ...))``, and can also check whether an object is one of Python's built-in types, e.g. ``isinstance(obj, str)`` or ``isinstance(obj, (int, float, complex))``. +Note that :func:`isinstance` also checks for virtual inheritance from an +:term:`abstract base class`. So, the test will return ``True`` for a +registered class even if hasn't directly or indirectly inherited from it. To +test for "true inheritance", scan the :term:`MRO` of the class: + +.. testcode:: + + from collections.abc import Mapping + + class P: + pass + + class C(P): + pass + + Mapping.register(P) + +.. doctest:: + + >>> c = C() + >>> isinstance(c, C) # direct + True + >>> isinstance(c, P) # indirect + True + >>> isinstance(c, Mapping) # virtual + True + + # Actual inheritance chain + >>> type(c).__mro__ + (, , ) + + # Test for "true inheritance" + >>> Mapping in type(c).__mro__ + False + Note that most programs do not use :func:`isinstance` on user-defined classes very often. If you are developing the classes yourself, a more proper object-oriented style is to define methods on the classes that encapsulate a From webhook-mailer at python.org Mon Apr 5 16:07:40 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 05 Apr 2021 20:07:40 -0000 Subject: [Python-checkins] bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) (GH-25201) Message-ID: https://github.com/python/cpython/commit/bdee2a389e4b10e1c0ab65bbd4fd03defe7b2837 commit: bdee2a389e4b10e1c0ab65bbd4fd03defe7b2837 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-05T16:07:29-04:00 summary: bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) (GH-25201) Co-Authored-By: Claudiu Popa Automerge-Triggered-By: GH:ericvsmith (cherry picked from commit 75220674c07abfc90c2cd7862d04cfa2e2354450) Co-authored-by: Zackery Spytz Co-authored-by: Zackery Spytz files: A Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 10bb33e3746a8..c38e16a2d94c7 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1280,7 +1280,7 @@ class C: continue if f.name not in changes: - if f._field_type is _FIELD_INITVAR: + if f._field_type is _FIELD_INITVAR and f.default is MISSING: raise ValueError(f"InitVar {f.name!r} " 'must be specified with replace()') changes[f.name] = getattr(obj, f.name) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 21a7d7ec3fe39..bbcf30c983d3a 100755 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3252,6 +3252,24 @@ def __post_init__(self, y): c = replace(c, x=3, y=5) self.assertEqual(c.x, 15) + def test_initvar_with_default_value(self): + @dataclass + class C: + x: int + y: InitVar[int] = None + z: InitVar[int] = 42 + + def __post_init__(self, y, z): + if y is not None: + self.x += y + if z is not None: + self.x += z + + c = C(x=1, y=10, z=1) + self.assertEqual(replace(c), C(x=12)) + self.assertEqual(replace(c, y=4), C(x=12, y=4, z=42)) + self.assertEqual(replace(c, y=4, z=1), C(x=12, y=4, z=1)) + def test_recursive_repr(self): @dataclass class C: diff --git a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst new file mode 100644 index 0000000000000..9b6ab994f3b6a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst @@ -0,0 +1,2 @@ +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. From webhook-mailer at python.org Mon Apr 5 16:07:43 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 05 Apr 2021 20:07:43 -0000 Subject: [Python-checkins] bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) (GH-25200) Message-ID: https://github.com/python/cpython/commit/013c30e5fcee449cee63354d34585d6111782c82 commit: 013c30e5fcee449cee63354d34585d6111782c82 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-05T16:07:38-04:00 summary: bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867) (GH-25200) Co-Authored-By: Claudiu Popa Automerge-Triggered-By: GH:ericvsmith (cherry picked from commit 75220674c07abfc90c2cd7862d04cfa2e2354450) Co-authored-by: Zackery Spytz Co-authored-by: Zackery Spytz files: A Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 530d3e99574e8..21c7e0c9e2871 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1271,7 +1271,7 @@ class C: continue if f.name not in changes: - if f._field_type is _FIELD_INITVAR: + if f._field_type is _FIELD_INITVAR and f.default is MISSING: raise ValueError(f"InitVar {f.name!r} " 'must be specified with replace()') changes[f.name] = getattr(obj, f.name) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index b20103bdce51c..31caae9d2f393 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3245,6 +3245,24 @@ def __post_init__(self, y): c = replace(c, x=3, y=5) self.assertEqual(c.x, 15) + def test_initvar_with_default_value(self): + @dataclass + class C: + x: int + y: InitVar[int] = None + z: InitVar[int] = 42 + + def __post_init__(self, y, z): + if y is not None: + self.x += y + if z is not None: + self.x += z + + c = C(x=1, y=10, z=1) + self.assertEqual(replace(c), C(x=12)) + self.assertEqual(replace(c, y=4), C(x=12, y=4, z=42)) + self.assertEqual(replace(c, y=4, z=1), C(x=12, y=4, z=1)) + def test_recursive_repr(self): @dataclass class C: diff --git a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst new file mode 100644 index 0000000000000..9b6ab994f3b6a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst @@ -0,0 +1,2 @@ +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. From webhook-mailer at python.org Mon Apr 5 16:11:58 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 05 Apr 2021 20:11:58 -0000 Subject: [Python-checkins] bpo-20503: Show how isinstance() works with ABC registered classes. (GH-25175) (GH-25202) Message-ID: https://github.com/python/cpython/commit/028d5286d4255195ba6715e1aeb4bffed6b0279e commit: 028d5286d4255195ba6715e1aeb4bffed6b0279e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-05T13:11:50-07:00 summary: bpo-20503: Show how isinstance() works with ABC registered classes. (GH-25175) (GH-25202) files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index fd59f68034776..3c8aa14fad10a 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1420,6 +1420,41 @@ single class, e.g. ``isinstance(obj, (class1, class2, ...))``, and can also check whether an object is one of Python's built-in types, e.g. ``isinstance(obj, str)`` or ``isinstance(obj, (int, float, complex))``. +Note that :func:`isinstance` also checks for virtual inheritance from an +:term:`abstract base class`. So, the test will return ``True`` for a +registered class even if hasn't directly or indirectly inherited from it. To +test for "true inheritance", scan the :term:`MRO` of the class: + +.. testcode:: + + from collections.abc import Mapping + + class P: + pass + + class C(P): + pass + + Mapping.register(P) + +.. doctest:: + + >>> c = C() + >>> isinstance(c, C) # direct + True + >>> isinstance(c, P) # indirect + True + >>> isinstance(c, Mapping) # virtual + True + + # Actual inheritance chain + >>> type(c).__mro__ + (, , ) + + # Test for "true inheritance" + >>> Mapping in type(c).__mro__ + False + Note that most programs do not use :func:`isinstance` on user-defined classes very often. If you are developing the classes yourself, a more proper object-oriented style is to define methods on the classes that encapsulate a From webhook-mailer at python.org Mon Apr 5 21:01:24 2021 From: webhook-mailer at python.org (methane) Date: Tue, 06 Apr 2021 01:01:24 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in sysconfig (GH-25192) Message-ID: https://github.com/python/cpython/commit/3d4af4a876e679431c6a3751667ded63cc6f66c1 commit: 3d4af4a876e679431c6a3751667ded63cc6f66c1 branch: master author: Inada Naoki committer: methane date: 2021-04-06T10:01:11+09:00 summary: bpo-43651: Fix EncodingWarning in sysconfig (GH-25192) files: M Lib/sysconfig.py diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 507c51f764237..b8b1aca17e24d 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -240,7 +240,8 @@ def _parse_makefile(filename, vars=None): done = {} notdone = {} - with open(filename, errors="surrogateescape") as f: + with open(filename, encoding=sys.getfilesystemencoding(), + errors="surrogateescape") as f: lines = f.readlines() for line in lines: @@ -388,7 +389,7 @@ def _generate_posix_vars(): # load the installed pyconfig.h: config_h = get_config_h_filename() try: - with open(config_h) as f: + with open(config_h, encoding="utf-8") as f: parse_config_h(f, vars) except OSError as e: msg = "invalid Python installation: unable to open %s" % config_h From webhook-mailer at python.org Mon Apr 5 22:17:15 2021 From: webhook-mailer at python.org (brandtbucher) Date: Tue, 06 Apr 2021 02:17:15 -0000 Subject: [Python-checkins] bpo-42128: __match_args__ can't be a list anymore (GH-25203) Message-ID: https://github.com/python/cpython/commit/f84d5a113680c5a6aaaf9130aed7a34d611748ff commit: f84d5a113680c5a6aaaf9130aed7a34d611748ff branch: master author: Brandt Bucher committer: brandtbucher date: 2021-04-05T19:17:08-07:00 summary: bpo-42128: __match_args__ can't be a list anymore (GH-25203) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst M Lib/test/test_dataclasses.py M Lib/test/test_patma.py M Python/ceval.c diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 4f5c3c8aab167..5515ca49409b3 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3401,7 +3401,7 @@ class C: self.assertEqual(C(42).__match_args__, ('a',)) def test_explicit_match_args(self): - ma = [] + ma = () @dataclass class C: a: int diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index 286b190adcf3d..40580be86b084 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -17,7 +17,7 @@ def no_perf(f): class MyClass: x: int y: str - __match_args__ = ["x", "y"] + __match_args__ = ("x", "y") @dataclasses.dataclass @@ -2018,7 +2018,7 @@ def f(color): def test_patma_200(self): class Class: - __match_args__ = ["a", "b"] + __match_args__ = ("a", "b") c = Class() c.a = 0 c.b = 1 @@ -2046,7 +2046,7 @@ def test_patma_202(self): class Parent: __match_args__ = "a", "b" class Child(Parent): - __match_args__ = ["c", "d"] + __match_args__ = ("c", "d") c = Child() c.a = 0 c.b = 1 @@ -2500,7 +2500,7 @@ class Class: @no_perf def test_patma_248(self): class Class: - __match_args__ = [None] + __match_args__ = (None,) x = Class() y = z = None with self.assertRaises(TypeError): @@ -2513,7 +2513,7 @@ class Class: @no_perf def test_patma_249(self): class Class: - __match_args__ = [] + __match_args__ = () x = Class() y = z = None with self.assertRaises(TypeError): @@ -2560,7 +2560,7 @@ class Keys: @no_perf def test_patma_253(self): class Class: - __match_args__ = ["a", "a"] + __match_args__ = ("a", "a") a = None x = Class() w = y = z = None @@ -2575,7 +2575,7 @@ class Class: @no_perf def test_patma_254(self): class Class: - __match_args__ = ["a"] + __match_args__ = ("a",) a = None x = Class() w = y = z = None @@ -2841,6 +2841,22 @@ def test_patma_281(self): self.assertEqual(x, range(10)) self.assertIs(y, None) + @no_perf + def test_patma_282(self): + class Class: + __match_args__ = ["spam", "eggs"] + spam = 0 + eggs = 1 + x = Class() + w = y = z = None + with self.assertRaises(TypeError): + match x: + case Class(y, z): + w = 0 + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) + class PerfPatma(TestPatma): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst new file mode 100644 index 0000000000000..b87c97cc08d25 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst @@ -0,0 +1 @@ +:data:`~object.__match_args__` is no longer allowed to be a list. diff --git a/Python/ceval.c b/Python/ceval.c index b9d784a629840..d9a754fb9107b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1029,15 +1029,8 @@ match_class(PyThreadState *tstate, PyObject *subject, PyObject *type, int match_self = 0; match_args = PyObject_GetAttrString(type, "__match_args__"); if (match_args) { - if (PyList_CheckExact(match_args)) { - Py_SETREF(match_args, PyList_AsTuple(match_args)); - } - if (match_args == NULL) { - goto fail; - } if (!PyTuple_CheckExact(match_args)) { - const char *e = "%s.__match_args__ must be a list or tuple " - "(got %s)"; + const char *e = "%s.__match_args__ must be a tuple (got %s)"; _PyErr_Format(tstate, PyExc_TypeError, e, ((PyTypeObject *)type)->tp_name, Py_TYPE(match_args)->tp_name); From webhook-mailer at python.org Mon Apr 5 22:18:50 2021 From: webhook-mailer at python.org (methane) Date: Tue, 06 Apr 2021 02:18:50 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25189) Message-ID: https://github.com/python/cpython/commit/fb78692f2ad5ee4747f13a73943fbf134b637669 commit: fb78692f2ad5ee4747f13a73943fbf134b637669 branch: master author: Inada Naoki committer: methane date: 2021-04-06T11:18:41+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25189) * Fix _sitebuiltins * Fix test_inspect * Fix test_interpreters * Fix test_io * Fix test_iter * Fix test_json * Fix test_linecache * Fix test_lltrace * Fix test_logging * Fix logging files: M Lib/_sitebuiltins.py M Lib/logging/__init__.py M Lib/logging/handlers.py M Lib/test/test_inspect.py M Lib/test/test_interpreters.py M Lib/test/test_io.py M Lib/test/test_iter.py M Lib/test/test_json/test_tool.py M Lib/test/test_linecache.py M Lib/test/test_lltrace.py M Lib/test/test_logging.py diff --git a/Lib/_sitebuiltins.py b/Lib/_sitebuiltins.py index c29cf4bf8fe48..c66269a571967 100644 --- a/Lib/_sitebuiltins.py +++ b/Lib/_sitebuiltins.py @@ -47,7 +47,7 @@ def __setup(self): data = None for filename in self.__filenames: try: - with open(filename, "r") as fp: + with open(filename, encoding='utf-8') as fp: data = fp.read() break except OSError: diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 411aa53a0b620..555f598de7a92 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1150,6 +1150,8 @@ def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None): self.baseFilename = os.path.abspath(filename) self.mode = mode self.encoding = encoding + if "b" not in mode: + self.encoding = io.text_encoding(encoding) self.errors = errors self.delay = delay # bpo-26789: FileHandler keeps a reference to the builtin open() @@ -2022,8 +2024,10 @@ def basicConfig(**kwargs): filename = kwargs.pop("filename", None) mode = kwargs.pop("filemode", 'a') if filename: - if 'b'in mode: + if 'b' in mode: errors = None + else: + encoding = io.text_encoding(encoding) h = FileHandler(filename, mode, encoding=encoding, errors=errors) else: diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 867ef4ebc7600..b0d5885989ea4 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -23,7 +23,7 @@ To use, simply 'import logging.handlers' and log away! """ -import logging, socket, os, pickle, struct, time, re +import io, logging, socket, os, pickle, struct, time, re from stat import ST_DEV, ST_INO, ST_MTIME import queue import threading @@ -150,6 +150,8 @@ def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, # on each run. if maxBytes > 0: mode = 'a' + if "b" not in mode: + encoding = io.text_encoding(encoding) BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding, delay=delay, errors=errors) self.maxBytes = maxBytes @@ -205,6 +207,7 @@ class TimedRotatingFileHandler(BaseRotatingHandler): def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None, errors=None): + encoding = io.text_encoding(encoding) BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding, delay=delay, errors=errors) self.when = when.upper() @@ -442,6 +445,8 @@ class WatchedFileHandler(logging.FileHandler): """ def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None): + if "b" not in mode: + encoding = io.text_encoding(encoding) logging.FileHandler.__init__(self, filename, mode=mode, encoding=encoding, delay=delay, errors=errors) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 72feaedbe7513..35ad0b93e7dc2 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -363,7 +363,7 @@ class GetSourceBase(unittest.TestCase): fodderModule = None def setUp(self): - with open(inspect.getsourcefile(self.fodderModule)) as fp: + with open(inspect.getsourcefile(self.fodderModule), encoding="utf-8") as fp: self.source = fp.read() def sourcerange(self, top, bottom): @@ -773,8 +773,8 @@ class TestNoEOL(GetSourceBase): def setUp(self): self.tempdir = TESTFN + '_dir' os.mkdir(self.tempdir) - with open(os.path.join(self.tempdir, - 'inspect_fodder3%spy' % os.extsep), 'w') as f: + with open(os.path.join(self.tempdir, 'inspect_fodder3%spy' % os.extsep), + 'w', encoding='utf-8') as f: f.write("class X:\n pass # No EOL") with DirsOnSysPath(self.tempdir): import inspect_fodder3 as mod3 @@ -1805,7 +1805,7 @@ def test_no_dict_no_slots(self): def test_no_dict_no_slots_instance_member(self): # returns descriptor - with open(__file__) as handle: + with open(__file__, encoding='utf-8') as handle: self.assertEqual(inspect.getattr_static(handle, 'name'), type(handle).name) def test_inherited_slots(self): @@ -4045,7 +4045,7 @@ def foo(): def assertInspectEqual(self, path, source): inspected_src = inspect.getsource(source) - with open(path) as src: + with open(path, encoding='utf-8') as src: self.assertEqual( src.read().splitlines(True), inspected_src.splitlines(True) @@ -4056,7 +4056,7 @@ def test_getsource_reload(self): with _ready_to_import('reload_bug', self.src_before) as (name, path): module = importlib.import_module(name) self.assertInspectEqual(path, module) - with open(path, 'w') as src: + with open(path, 'w', encoding='utf-8') as src: src.write(self.src_after) self.assertInspectEqual(path, module) diff --git a/Lib/test/test_interpreters.py b/Lib/test/test_interpreters.py index 8d44d497bd250..6266aa7c33b32 100644 --- a/Lib/test/test_interpreters.py +++ b/Lib/test/test_interpreters.py @@ -14,11 +14,11 @@ def _captured_script(script): indented = script.replace('\n', '\n ') wrapped = dedent(f""" import contextlib - with open({w}, 'w') as spipe: + with open({w}, 'w', encoding='utf-8') as spipe: with contextlib.redirect_stdout(spipe): {indented} """) - return wrapped, open(r) + return wrapped, open(r, encoding='utf-8') def clean_up_interpreters(): @@ -411,7 +411,7 @@ def f(): def test_fork(self): interp = interpreters.create() import tempfile - with tempfile.NamedTemporaryFile('w+') as file: + with tempfile.NamedTemporaryFile('w+', encoding='utf-8') as file: file.write('') file.flush() @@ -421,7 +421,7 @@ def test_fork(self): try: os.fork() except RuntimeError: - with open('{file.name}', 'w') as out: + with open('{file.name}', 'w', encoding='utf-8') as out: out.write('{expected}') """) interp.run(script) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index d493b19525af3..48a3cca3fbde4 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -2601,8 +2601,8 @@ def test_constructor(self): self.assertEqual(t.encoding, "utf-8") self.assertEqual(t.line_buffering, True) self.assertEqual("\xe9\n", t.readline()) - self.assertRaises(TypeError, t.__init__, b, newline=42) - self.assertRaises(ValueError, t.__init__, b, newline='xyzzy') + self.assertRaises(TypeError, t.__init__, b, encoding="utf-8", newline=42) + self.assertRaises(ValueError, t.__init__, b, encoding="utf-8", newline='xyzzy') def test_uninitialized(self): t = self.TextIOWrapper.__new__(self.TextIOWrapper) @@ -3732,7 +3732,7 @@ def test_initialization(self): r = self.BytesIO(b"\xc3\xa9\n\n") b = self.BufferedReader(r, 1000) t = self.TextIOWrapper(b, encoding="utf-8") - self.assertRaises(ValueError, t.__init__, b, newline='xyzzy') + self.assertRaises(ValueError, t.__init__, b, encoding="utf-8", newline='xyzzy') self.assertRaises(ValueError, t.read) t = self.TextIOWrapper.__new__(self.TextIOWrapper) diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py index a7658b5f47694..20cb9c0680914 100644 --- a/Lib/test/test_iter.py +++ b/Lib/test/test_iter.py @@ -337,13 +337,13 @@ def test_iter_dict(self): # Test a file def test_iter_file(self): - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: for i in range(5): f.write("%d\n" % i) finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.check_for_loop(f, ["0\n", "1\n", "2\n", "3\n", "4\n"], pickle=False) self.check_for_loop(f, [], pickle=False) @@ -366,13 +366,13 @@ def test_builtin_list(self): self.assertRaises(TypeError, list, list) self.assertRaises(TypeError, list, 42) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: for i in range(5): f.write("%d\n" % i) finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.assertEqual(list(f), ["0\n", "1\n", "2\n", "3\n", "4\n"]) f.seek(0, 0) @@ -399,13 +399,13 @@ def test_builtin_tuple(self): self.assertRaises(TypeError, tuple, list) self.assertRaises(TypeError, tuple, 42) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: for i in range(5): f.write("%d\n" % i) finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.assertEqual(tuple(f), ("0\n", "1\n", "2\n", "3\n", "4\n")) f.seek(0, 0) @@ -476,14 +476,14 @@ def test_builtin_max_min(self): self.assertEqual(max(d.values()), 3) self.assertEqual(min(iter(d.values())), 1) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("medium line\n") f.write("xtra large line\n") f.write("itty-bitty line\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.assertEqual(min(f), "itty-bitty line\n") f.seek(0, 0) @@ -509,13 +509,13 @@ def test_builtin_map(self): i < len(d) and dkeys[i] or None) for i in range(3)] - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: for i in range(10): f.write("xy" * i + "\n") # line i has len 2*i+1 finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.assertEqual(list(map(len, f)), list(range(1, 21, 2))) finally: @@ -556,12 +556,12 @@ def __next__(self): self.i = i+1 return i - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("a\n" "bbb\n" "cc\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: self.assertEqual(list(zip(IntsFrom(0), f, IntsFrom(-100))), [(0, "a\n", -100), @@ -624,13 +624,13 @@ def __next__(self): return "fooled you!" return next(self.it) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("a\n" + "b\n" + "c\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") # Nasty: string.join(s) can't know whether unicode.join() is needed # until it's seen all of s's elements. But in this case, f's # iterator cannot be restarted. So what we're testing here is @@ -676,12 +676,12 @@ def test_in_and_not_in(self): self.assertIn((k, v), d.items()) self.assertNotIn((v, k), d.items()) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("a\n" "b\n" "c\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: for chunk in "abc": f.seek(0, 0) @@ -713,12 +713,12 @@ def test_countOf(self): self.assertEqual(countOf(d.values(), 2j), 1) self.assertEqual(countOf(d.values(), 1j), 0) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("a\n" "b\n" "c\n" "b\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: for letter, count in ("a", 1), ("b", 2), ("c", 1), ("d", 0): f.seek(0, 0) @@ -748,12 +748,12 @@ def test_indexOf(self): self.assertRaises(TypeError, indexOf, indexOf, indexOf) self.assertRaises(ZeroDivisionError, indexOf, BadIterableClass(), 1) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: f.write("a\n" "b\n" "c\n" "d\n" "e\n") finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: fiter = iter(f) self.assertEqual(indexOf(fiter, "b\n"), 1) @@ -774,7 +774,7 @@ def test_indexOf(self): # Test iterators with file.writelines(). def test_writelines(self): - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") try: self.assertRaises(TypeError, f.writelines, None) @@ -813,7 +813,7 @@ def __iter__(self): f.writelines(Whatever(6, 6+2000)) f.close() - f = open(TESTFN) + f = open(TESTFN, encoding="utf-8") expected = [str(i) + "\n" for i in range(1, 2006)] self.assertEqual(list(f), expected) @@ -857,14 +857,14 @@ def test_unpack_iter(self): a, b, c = {1: 42, 2: 42, 3: 42}.values() self.assertEqual((a, b, c), (42, 42, 42)) - f = open(TESTFN, "w") + f = open(TESTFN, "w", encoding="utf-8") lines = ("a\n", "bb\n", "ccc\n") try: for line in lines: f.write(line) finally: f.close() - f = open(TESTFN, "r") + f = open(TESTFN, "r", encoding="utf-8") try: a, b, c = f self.assertEqual((a, b, c), lines) diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py index 5411188acb6a2..0386690cad95b 100644 --- a/Lib/test/test_json/test_tool.py +++ b/Lib/test/test_json/test_tool.py @@ -125,7 +125,7 @@ def test_infile_outfile(self): outfile = os_helper.TESTFN + '.out' rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile) self.addCleanup(os.remove, outfile) - with open(outfile, "r") as fp: + with open(outfile, "r", encoding="utf-8") as fp: self.assertEqual(fp.read(), self.expect) self.assertEqual(rc, 0) self.assertEqual(out, b'') diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index cfc6ba89e774c..59e00da242ad6 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -116,7 +116,7 @@ def test_getline(self): # Check module loading for entry in MODULES: filename = os.path.join(MODULE_PATH, entry) + '.py' - with open(filename) as file: + with open(filename, encoding='utf-8') as file: for index, line in enumerate(file): self.assertEqual(line, getline(filename, index + 1)) @@ -126,7 +126,7 @@ def test_getline(self): def test_no_ending_newline(self): self.addCleanup(os_helper.unlink, os_helper.TESTFN) - with open(os_helper.TESTFN, "w") as fp: + with open(os_helper.TESTFN, "w", encoding='utf-8') as fp: fp.write(SOURCE_3) lines = linecache.getlines(os_helper.TESTFN) self.assertEqual(lines, ["\n", "def f():\n", " return 3\n"]) @@ -153,18 +153,18 @@ def test_checkcache(self): # Create a source file and cache its contents source_name = os_helper.TESTFN + '.py' self.addCleanup(os_helper.unlink, source_name) - with open(source_name, 'w') as source: + with open(source_name, 'w', encoding='utf-8') as source: source.write(SOURCE_1) getline(source_name, 1) # Keep a copy of the old contents source_list = [] - with open(source_name) as source: + with open(source_name, encoding='utf-8') as source: for index, line in enumerate(source): self.assertEqual(line, getline(source_name, index + 1)) source_list.append(line) - with open(source_name, 'w') as source: + with open(source_name, 'w', encoding='utf-8') as source: source.write(SOURCE_2) # Try to update a bogus cache entry @@ -176,7 +176,7 @@ def test_checkcache(self): # Update the cache and check whether it matches the new source file linecache.checkcache(source_name) - with open(source_name) as source: + with open(source_name, encoding='utf-8') as source: for index, line in enumerate(source): self.assertEqual(line, getline(source_name, index + 1)) source_list.append(line) diff --git a/Lib/test/test_lltrace.py b/Lib/test/test_lltrace.py index 5f7d56474f0d8..8f1a92e5c725c 100644 --- a/Lib/test/test_lltrace.py +++ b/Lib/test/test_lltrace.py @@ -13,7 +13,7 @@ def test_lltrace_does_not_crash_on_subscript_operator(self): # bpo-34113. The crash happened at the command line console of # debug Python builds with __ltrace__ enabled (only possible in console), # when the interal Python stack was negatively adjusted - with open(os_helper.TESTFN, 'w') as fd: + with open(os_helper.TESTFN, 'w', encoding='utf-8') as fd: self.addCleanup(os_helper.unlink, os_helper.TESTFN) fd.write(textwrap.dedent("""\ import code diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 859baa4738ba7..452ba78523443 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -553,7 +553,7 @@ def test_builtin_handlers(self): os.close(fd) if not existing: os.unlink(fn) - h = logging.handlers.WatchedFileHandler(fn, delay=True) + h = logging.handlers.WatchedFileHandler(fn, encoding='utf-8', delay=True) if existing: dev, ino = h.dev, h.ino self.assertEqual(dev, -1) @@ -616,7 +616,7 @@ def test_path_objects(self): if sys.platform in ('linux', 'darwin'): cases += ((logging.handlers.WatchedFileHandler, (pfn, 'w')),) for cls, args in cases: - h = cls(*args) + h = cls(*args, encoding="utf-8") self.assertTrue(os.path.exists(fn)) h.close() os.unlink(fn) @@ -645,7 +645,7 @@ def remove_loop(fname, tries): remover = threading.Thread(target=remove_loop, args=(fn, del_count)) remover.daemon = True remover.start() - h = logging.handlers.WatchedFileHandler(fn, delay=delay) + h = logging.handlers.WatchedFileHandler(fn, encoding='utf-8', delay=delay) f = logging.Formatter('%(asctime)s: %(levelname)s: %(message)s') h.setFormatter(f) try: @@ -677,7 +677,7 @@ class _OurHandler(logging.Handler): def __init__(self): super().__init__() self.sub_handler = logging.StreamHandler( - stream=open('/dev/null', 'wt')) + stream=open('/dev/null', 'wt', encoding='utf-8')) def emit(self, record): self.sub_handler.acquire() @@ -4355,7 +4355,7 @@ def __del__(self): # basicConfig() opens the file, but logging.shutdown() closes # it at Python exit. When A.__del__() is called, # FileHandler._open() must be called again to re-open the file. - logging.basicConfig(filename={filename!r}) + logging.basicConfig(filename={filename!r}, encoding="utf-8") a = A() @@ -4365,7 +4365,7 @@ def __del__(self): """) assert_python_ok("-c", code) - with open(filename) as fp: + with open(filename, encoding="utf-8") as fp: self.assertEqual(fp.read().rstrip(), "ERROR:root:log in __del__") def test_recursion_error(self): @@ -4557,13 +4557,13 @@ def cleanup(h1, h2, fn): h2.close() os.remove(fn) - logging.basicConfig(filename='test.log') + logging.basicConfig(filename='test.log', encoding='utf-8') self.assertEqual(len(logging.root.handlers), 1) handler = logging.root.handlers[0] self.assertIsInstance(handler, logging.FileHandler) - expected = logging.FileHandler('test.log', 'a') + expected = logging.FileHandler('test.log', 'a', encoding='utf-8') self.assertEqual(handler.stream.mode, expected.stream.mode) self.assertEqual(handler.stream.name, expected.stream.name) self.addCleanup(cleanup, handler, expected, 'test.log') @@ -5161,7 +5161,7 @@ def assertLogFile(self, filename): class FileHandlerTest(BaseFileTest): def test_delay(self): os.unlink(self.fn) - fh = logging.FileHandler(self.fn, delay=True) + fh = logging.FileHandler(self.fn, encoding='utf-8', delay=True) self.assertIsNone(fh.stream) self.assertFalse(os.path.exists(self.fn)) fh.handle(logging.makeLogRecord({})) @@ -5176,19 +5176,20 @@ def next_rec(self): def test_should_not_rollover(self): # If maxbytes is zero rollover never occurs - rh = logging.handlers.RotatingFileHandler(self.fn, maxBytes=0) + rh = logging.handlers.RotatingFileHandler( + self.fn, encoding="utf-8", maxBytes=0) self.assertFalse(rh.shouldRollover(None)) rh.close() def test_should_rollover(self): - rh = logging.handlers.RotatingFileHandler(self.fn, maxBytes=1) + rh = logging.handlers.RotatingFileHandler(self.fn, encoding="utf-8", maxBytes=1) self.assertTrue(rh.shouldRollover(self.next_rec())) rh.close() def test_file_created(self): # checks that the file is created and assumes it was created # by us - rh = logging.handlers.RotatingFileHandler(self.fn) + rh = logging.handlers.RotatingFileHandler(self.fn, encoding="utf-8") rh.emit(self.next_rec()) self.assertLogFile(self.fn) rh.close() @@ -5197,7 +5198,7 @@ def test_rollover_filenames(self): def namer(name): return name + ".test" rh = logging.handlers.RotatingFileHandler( - self.fn, backupCount=2, maxBytes=1) + self.fn, encoding="utf-8", backupCount=2, maxBytes=1) rh.namer = namer rh.emit(self.next_rec()) self.assertLogFile(self.fn) @@ -5218,7 +5219,7 @@ def rotator(self, source, dest): os.rename(source, dest + ".rotated") rh = HandlerWithNamerAndRotator( - self.fn, backupCount=2, maxBytes=1) + self.fn, encoding="utf-8", backupCount=2, maxBytes=1) self.assertEqual(rh.namer(self.fn), self.fn + ".test") rh.emit(self.next_rec()) self.assertLogFile(self.fn) @@ -5241,7 +5242,7 @@ def rotator(source, dest): os.remove(source) rh = logging.handlers.RotatingFileHandler( - self.fn, backupCount=2, maxBytes=1) + self.fn, encoding="utf-8", backupCount=2, maxBytes=1) rh.rotator = rotator rh.namer = namer m1 = self.next_rec() From webhook-mailer at python.org Tue Apr 6 00:02:34 2021 From: webhook-mailer at python.org (methane) Date: Tue, 06 Apr 2021 04:02:34 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25190) Message-ID: https://github.com/python/cpython/commit/4663e5f39e9f872dcd69545f293e832d5855d084 commit: 4663e5f39e9f872dcd69545f293e832d5855d084 branch: master author: Inada Naoki committer: methane date: 2021-04-06T13:02:22+09:00 summary: bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25190) * Fix test_lzma * Fix test_mailbox * Fix test_mimetypes * Fix test_posix files: M Lib/test/test_lzma.py M Lib/test/test_mailbox.py M Lib/test/test_mimetypes.py M Lib/test/test_posix.py diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py index c2427f8cd228f..db20300056e48 100644 --- a/Lib/test/test_lzma.py +++ b/Lib/test/test_lzma.py @@ -1250,14 +1250,14 @@ def test_binary_modes(self): def test_text_modes(self): uncompressed = INPUT.decode("ascii") uncompressed_raw = uncompressed.replace("\n", os.linesep) - with lzma.open(BytesIO(COMPRESSED_XZ), "rt") as f: + with lzma.open(BytesIO(COMPRESSED_XZ), "rt", encoding="ascii") as f: self.assertEqual(f.read(), uncompressed) with BytesIO() as bio: - with lzma.open(bio, "wt") as f: + with lzma.open(bio, "wt", encoding="ascii") as f: f.write(uncompressed) file_data = lzma.decompress(bio.getvalue()).decode("ascii") self.assertEqual(file_data, uncompressed_raw) - with lzma.open(bio, "at") as f: + with lzma.open(bio, "at", encoding="ascii") as f: f.write(uncompressed) file_data = lzma.decompress(bio.getvalue()).decode("ascii") self.assertEqual(file_data, uncompressed_raw * 2) @@ -1334,17 +1334,18 @@ def test_newline(self): # Test with explicit newline (universal newline mode disabled). text = INPUT.decode("ascii") with BytesIO() as bio: - with lzma.open(bio, "wt", newline="\n") as f: + with lzma.open(bio, "wt", encoding="ascii", newline="\n") as f: f.write(text) bio.seek(0) - with lzma.open(bio, "rt", newline="\r") as f: + with lzma.open(bio, "rt", encoding="ascii", newline="\r") as f: self.assertEqual(f.readlines(), [text]) def test_x_mode(self): self.addCleanup(unlink, TESTFN) for mode in ("x", "xb", "xt"): unlink(TESTFN) - with lzma.open(TESTFN, mode): + encoding = "ascii" if "t" in mode else None + with lzma.open(TESTFN, mode, encoding=encoding): pass with self.assertRaises(FileExistsError): with lzma.open(TESTFN, mode): diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py index 5924f244f39f8..8a5d69246228e 100644 --- a/Lib/test/test_mailbox.py +++ b/Lib/test/test_mailbox.py @@ -77,7 +77,7 @@ def test_add(self): self.assertEqual(len(self._box), 6) with self.assertWarns(DeprecationWarning): keys.append(self._box.add( - io.TextIOWrapper(io.BytesIO(_bytes_sample_message)))) + io.TextIOWrapper(io.BytesIO(_bytes_sample_message), encoding="utf-8"))) self.assertEqual(len(self._box), 7) self.assertEqual(self._box.get_string(keys[0]), self._template % 0) for i in (1, 2, 3, 4, 5, 6): @@ -160,7 +160,7 @@ def test_add_binary_nonascii_file(self): self._non_latin_bin_msg.split(b'\n')) def test_add_text_file_warns(self): - with tempfile.TemporaryFile('w+') as f: + with tempfile.TemporaryFile('w+', encoding='utf-8') as f: f.write(_sample_message) f.seek(0) with self.assertWarns(DeprecationWarning): @@ -724,9 +724,9 @@ def test_clean(self): # Remove old files from 'tmp' foo_path = os.path.join(self._path, 'tmp', 'foo') bar_path = os.path.join(self._path, 'tmp', 'bar') - with open(foo_path, 'w') as f: + with open(foo_path, 'w', encoding='utf-8') as f: f.write("@") - with open(bar_path, 'w') as f: + with open(bar_path, 'w', encoding='utf-8') as f: f.write("@") self._box.clean() self.assertTrue(os.path.exists(foo_path)) @@ -984,7 +984,7 @@ def tearDown(self): os_helper.unlink(lock_remnant) def assertMailboxEmpty(self): - with open(self._path) as f: + with open(self._path, 'rb') as f: self.assertEqual(f.readlines(), []) def test_get_bytes_from(self): @@ -1150,12 +1150,12 @@ def test_terminating_newline(self): def test_message_separator(self): # Check there's always a single blank line after each message self._box.add('From: foo\n\n0') # No newline at the end - with open(self._path) as f: + with open(self._path, encoding='utf-8') as f: data = f.read() self.assertEqual(data[-3:], '0\n\n') self._box.add('From: foo\n\n0\n') # Newline at the end - with open(self._path) as f: + with open(self._path, encoding='utf-8') as f: data = f.read() self.assertEqual(data[-3:], '0\n\n') @@ -1305,7 +1305,7 @@ class TestBabyl(_TestSingleFile, unittest.TestCase): _factory = lambda self, path, factory=None: mailbox.Babyl(path, factory) def assertMailboxEmpty(self): - with open(self._path) as f: + with open(self._path, 'rb') as f: self.assertEqual(f.readlines(), []) def tearDown(self): @@ -1390,7 +1390,7 @@ def test_initialize_with_string(self): def test_initialize_with_file(self): # Initialize based on contents of file - with open(self._path, 'w+') as f: + with open(self._path, 'w+', encoding='utf-8') as f: f.write(_sample_message) f.seek(0) msg = self._factory(f) @@ -2158,7 +2158,7 @@ def createMessage(self, dir, mbox=False): filename = ".".join((str(t), str(pid), "myhostname", "mydomain")) tmpname = os.path.join(self._dir, "tmp", filename) newname = os.path.join(self._dir, dir, filename) - with open(tmpname, "w") as fp: + with open(tmpname, "w", encoding="utf-8") as fp: self._msgfiles.append(tmpname) if mbox: fp.write(FROM_) diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py index d63f6b66e10c9..f5c040a97addf 100644 --- a/Lib/test/test_mimetypes.py +++ b/Lib/test/test_mimetypes.py @@ -64,7 +64,7 @@ def test_read_mime_types(self): with os_helper.temp_dir() as directory: data = "x-application/x-unittest pyunit\n" file = pathlib.Path(directory, "sample.mimetype") - file.write_text(data) + file.write_text(data, encoding="utf-8") mime_dict = mimetypes.read_mime_types(file) eq(mime_dict[".pyunit"], "x-application/x-unittest") diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 53a4c5f84d7be..93611f04515ae 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -45,8 +45,8 @@ class PosixTester(unittest.TestCase): def setUp(self): # create empty file - fp = open(os_helper.TESTFN, 'w+') - fp.close() + with open(os_helper.TESTFN, "wb"): + pass self.teardown_files = [ os_helper.TESTFN ] self._warnings_manager = warnings_helper.check_warnings() self._warnings_manager.__enter__() @@ -1579,7 +1579,7 @@ def test_returns_pid(self): args = self.python_args('-c', script) pid = self.spawn_func(args[0], args, os.environ) support.wait_process(pid, exitcode=0) - with open(pidfile) as f: + with open(pidfile, encoding="utf-8") as f: self.assertEqual(f.read(), str(pid)) def test_no_such_executable(self): @@ -1602,14 +1602,14 @@ def test_specify_environment(self): self.addCleanup(os_helper.unlink, envfile) script = f"""if 1: import os - with open({envfile!r}, "w") as envfile: + with open({envfile!r}, "w", encoding="utf-8") as envfile: envfile.write(os.environ['foo']) """ args = self.python_args('-c', script) pid = self.spawn_func(args[0], args, {**os.environ, 'foo': 'bar'}) support.wait_process(pid, exitcode=0) - with open(envfile) as f: + with open(envfile, encoding="utf-8") as f: self.assertEqual(f.read(), 'bar') def test_none_file_actions(self): @@ -1861,7 +1861,7 @@ def test_open_file(self): file_actions=file_actions) support.wait_process(pid, exitcode=0) - with open(outfile) as f: + with open(outfile, encoding="utf-8") as f: self.assertEqual(f.read(), 'hello') def test_close_file(self): @@ -1872,7 +1872,7 @@ def test_close_file(self): try: os.fstat(0) except OSError as e: - with open({closefile!r}, 'w') as closefile: + with open({closefile!r}, 'w', encoding='utf-8') as closefile: closefile.write('is closed %d' % e.errno) """ args = self.python_args('-c', script) @@ -1880,7 +1880,7 @@ def test_close_file(self): file_actions=[(os.POSIX_SPAWN_CLOSE, 0)]) support.wait_process(pid, exitcode=0) - with open(closefile) as f: + with open(closefile, encoding="utf-8") as f: self.assertEqual(f.read(), 'is closed %d' % errno.EBADF) def test_dup2(self): @@ -1898,7 +1898,7 @@ def test_dup2(self): pid = self.spawn_func(args[0], args, os.environ, file_actions=file_actions) support.wait_process(pid, exitcode=0) - with open(dupfile) as f: + with open(dupfile, encoding="utf-8") as f: self.assertEqual(f.read(), 'hello') From webhook-mailer at python.org Tue Apr 6 01:14:08 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 05:14:08 -0000 Subject: [Python-checkins] bpo-43176: Fix processing of empty dataclasses (GH-24484) Message-ID: https://github.com/python/cpython/commit/376ffc6ac491da74920aed1b8e35bc371cb766ac commit: 376ffc6ac491da74920aed1b8e35bc371cb766ac branch: master author: Iurii Kemaev <6885137+hbq1 at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-05T22:14:01-07:00 summary: bpo-43176: Fix processing of empty dataclasses (GH-24484) When a dataclass inherits from an empty base, all immutability checks are omitted. This PR fixes this and adds tests for it. Automerge-Triggered-By: GH:ericvsmith files: A Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 3de2ec04ad370..afc4b8282abe3 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -860,7 +860,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # Only process classes that have been processed by our # decorator. That is, they have a _FIELDS attribute. base_fields = getattr(b, _FIELDS, None) - if base_fields: + if base_fields is not None: has_dataclass_bases = True for f in base_fields.values(): fields[f.name] = f diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 5515ca49409b3..12c1918602d6a 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2594,6 +2594,30 @@ class D(C): self.assertEqual(d.i, 0) self.assertEqual(d.j, 10) + def test_inherit_nonfrozen_from_empty_frozen(self): + @dataclass(frozen=True) + class C: + pass + + with self.assertRaisesRegex(TypeError, + 'cannot inherit non-frozen dataclass from a frozen one'): + @dataclass + class D(C): + j: int + + def test_inherit_nonfrozen_from_empty(self): + @dataclass + class C: + pass + + @dataclass + class D(C): + j: int + + d = D(3) + self.assertEqual(d.j, 3) + self.assertIsInstance(d, C) + # Test both ways: with an intermediate normal (non-dataclass) # class and without an intermediate class. def test_inherit_nonfrozen_from_frozen(self): diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst new file mode 100644 index 0000000000000..66a175d21255c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -0,0 +1 @@ +Fixed processing of empty dataclasses. \ No newline at end of file From webhook-mailer at python.org Tue Apr 6 01:32:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 05:32:03 -0000 Subject: [Python-checkins] bpo-43176: Fix processing of empty dataclasses (GH-24484) Message-ID: https://github.com/python/cpython/commit/b132be8b43afa739b7eda271b82711d64a83da4f commit: b132be8b43afa739b7eda271b82711d64a83da4f branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-05T22:31:54-07:00 summary: bpo-43176: Fix processing of empty dataclasses (GH-24484) When a dataclass inherits from an empty base, all immutability checks are omitted. This PR fixes this and adds tests for it. Automerge-Triggered-By: GH:ericvsmith (cherry picked from commit 376ffc6ac491da74920aed1b8e35bc371cb766ac) Co-authored-by: Iurii Kemaev <6885137+hbq1 at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index c38e16a2d94c7..5825e8e523053 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -834,7 +834,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # Only process classes that have been processed by our # decorator. That is, they have a _FIELDS attribute. base_fields = getattr(b, _FIELDS, None) - if base_fields: + if base_fields is not None: has_dataclass_bases = True for f in base_fields.values(): fields[f.name] = f diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index bbcf30c983d3a..548f10b7cafb9 100755 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2568,6 +2568,30 @@ class D(C): self.assertEqual(d.i, 0) self.assertEqual(d.j, 10) + def test_inherit_nonfrozen_from_empty_frozen(self): + @dataclass(frozen=True) + class C: + pass + + with self.assertRaisesRegex(TypeError, + 'cannot inherit non-frozen dataclass from a frozen one'): + @dataclass + class D(C): + j: int + + def test_inherit_nonfrozen_from_empty(self): + @dataclass + class C: + pass + + @dataclass + class D(C): + j: int + + d = D(3) + self.assertEqual(d.j, 3) + self.assertIsInstance(d, C) + # Test both ways: with an intermediate normal (non-dataclass) # class and without an intermediate class. def test_inherit_nonfrozen_from_frozen(self): diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst new file mode 100644 index 0000000000000..66a175d21255c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -0,0 +1 @@ +Fixed processing of empty dataclasses. \ No newline at end of file From webhook-mailer at python.org Tue Apr 6 03:56:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 07:56:11 -0000 Subject: [Python-checkins] bpo-17305: Link to the third-party idna package. (GH-25208) Message-ID: https://github.com/python/cpython/commit/1d023e374cf96d143b065242131ddc9b889f9a1e commit: 1d023e374cf96d143b065242131ddc9b889f9a1e branch: master author: Gregory P. Smith committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-06T00:55:45-07:00 summary: bpo-17305: Link to the third-party idna package. (GH-25208) So long as we don't have idna2008 in the standard library, we should at least point people to the third-party solution. files: M Doc/library/codecs.rst diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 3169ae517b750..b15d293e38f63 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -1417,6 +1417,9 @@ Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)). It builds upon the ``punycode`` encoding and :mod:`stringprep`. +If you need the IDNA 2008 standard from :rfc:`5891` and :rfc:`5895`, use the +third-party `idna module _`. + These RFCs together define a protocol to support non-ASCII characters in domain names. A domain name containing non-ASCII characters (such as ``www.Alliancefran?aise.nu``) is converted into an ASCII-compatible encoding From webhook-mailer at python.org Tue Apr 6 04:03:03 2021 From: webhook-mailer at python.org (methane) Date: Tue, 06 Apr 2021 08:03:03 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix pdeps used locale encoding (GH-25204) Message-ID: https://github.com/python/cpython/commit/489c36920e94bfb4988b6f965bd0aafdfaff0d4f commit: 489c36920e94bfb4988b6f965bd0aafdfaff0d4f branch: master author: Inada Naoki committer: methane date: 2021-04-06T17:02:54+09:00 summary: bpo-43651: PEP 597: Fix pdeps used locale encoding (GH-25204) files: M Tools/scripts/pdeps.py diff --git a/Tools/scripts/pdeps.py b/Tools/scripts/pdeps.py index 4e8e930948f1f..ab0040f48e2e7 100755 --- a/Tools/scripts/pdeps.py +++ b/Tools/scripts/pdeps.py @@ -64,7 +64,7 @@ def main(): # Collect data from one file # def process(filename, table): - with open(filename) as fp: + with open(filename, encoding='utf-8') as fp: mod = os.path.basename(filename) if mod[-3:] == '.py': mod = mod[:-3] From webhook-mailer at python.org Tue Apr 6 04:19:26 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 08:19:26 -0000 Subject: [Python-checkins] bpo-17305: Link to the third-party idna package. (GH-25208) Message-ID: https://github.com/python/cpython/commit/c7ccb0ff61e443633d0c54cb18b5633a8e95b30c commit: c7ccb0ff61e443633d0c54cb18b5633a8e95b30c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-06T01:19:15-07:00 summary: bpo-17305: Link to the third-party idna package. (GH-25208) So long as we don't have idna2008 in the standard library, we should at least point people to the third-party solution. (cherry picked from commit 1d023e374cf96d143b065242131ddc9b889f9a1e) Co-authored-by: Gregory P. Smith files: M Doc/library/codecs.rst diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 6eb907afce3c6..32fbc831ca2c8 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -1414,6 +1414,9 @@ Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)). It builds upon the ``punycode`` encoding and :mod:`stringprep`. +If you need the IDNA 2008 standard from :rfc:`5891` and :rfc:`5895`, use the +third-party `idna module _`. + These RFCs together define a protocol to support non-ASCII characters in domain names. A domain name containing non-ASCII characters (such as ``www.Alliancefran?aise.nu``) is converted into an ASCII-compatible encoding From webhook-mailer at python.org Tue Apr 6 06:49:04 2021 From: webhook-mailer at python.org (markshannon) Date: Tue, 06 Apr 2021 10:49:04 -0000 Subject: [Python-checkins] bpo-43683: Handle generator entry in bytecode (GH-25138) Message-ID: https://github.com/python/cpython/commit/b37181e69209746adc2119c471599a1ea5faa6c8 commit: b37181e69209746adc2119c471599a1ea5faa6c8 branch: master author: Mark Shannon committer: markshannon date: 2021-04-06T11:48:59+01:00 summary: bpo-43683: Handle generator entry in bytecode (GH-25138) * Handle check for sending None to starting generator and coroutine into bytecode. * Document new bytecode and make it fail gracefully if mis-compiled. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst M Doc/library/dis.rst M Include/opcode.h M Lib/importlib/_bootstrap_external.py M Lib/opcode.py M Objects/genobject.c M Python/ceval.c M Python/compile.c M Python/importlib_external.h M Python/opcode_targets.h diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index c21a667ba1711..875ab8b61117e 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -1247,6 +1247,14 @@ All of the following opcodes use their arguments. .. versionadded:: 3.10 +.. opcode:: GEN_START (kind) + + Pops TOS. If TOS was not ``None``, raises an exception. The ``kind`` + operand corresponds to the type of generator or coroutine and determines + the error message. The legal kinds are 0 for generator, 1 for coroutine, + and 2 for async generator. + + .. versionadded:: 3.10 .. opcode:: HAVE_ARGUMENT diff --git a/Include/opcode.h b/Include/opcode.h index ea484c5a68fc9..4f52c5f23e271 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -106,6 +106,7 @@ extern "C" { #define LOAD_FAST 124 #define STORE_FAST 125 #define DELETE_FAST 126 +#define GEN_START 129 #define RAISE_VARARGS 130 #define CALL_FUNCTION 131 #define MAKE_FUNCTION 132 diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 77bd0e092bd2a..d351ee05ed490 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -315,6 +315,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10a2 3433 (RERAISE restores f_lasti if oparg != 0) # Python 3.10a6 3434 (PEP 634: Structural Pattern Matching) # Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). +# Python 3.10a7 3436 (Add GEN_START bytecode #43683) # # MAGIC must change whenever the bytecode emitted by the compiler may no diff --git a/Lib/opcode.py b/Lib/opcode.py index b1197129571cd..196e6f8a27eed 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -173,6 +173,7 @@ def jabs_op(name, op): def_op('DELETE_FAST', 126) # Local variable number haslocal.append(126) +def_op('GEN_START', 129) # Kind of generator/coroutine def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) def_op('CALL_FUNCTION', 131) # #args def_op('MAKE_FUNCTION', 132) # Flags diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst new file mode 100644 index 0000000000000..6e29998a49912 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst @@ -0,0 +1,2 @@ +Add GEN_START opcode. Marks start of generator, including async, or coroutine and handles +sending values to a newly created generator or coroutine. diff --git a/Objects/genobject.c b/Objects/genobject.c index 69989678efec1..b02a5581a4042 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -176,27 +176,12 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult, } assert(_PyFrame_IsRunnable(f)); - if (f->f_lasti == -1) { - if (arg && arg != Py_None) { - const char *msg = "can't send non-None value to a " - "just-started generator"; - if (PyCoro_CheckExact(gen)) { - msg = NON_INIT_CORO_MSG; - } - else if (PyAsyncGen_CheckExact(gen)) { - msg = "can't send non-None value to a " - "just-started async generator"; - } - PyErr_SetString(PyExc_TypeError, msg); - return PYGEN_ERROR; - } - } else { - /* Push arg onto the frame's value stack */ - result = arg ? arg : Py_None; - Py_INCREF(result); - gen->gi_frame->f_valuestack[gen->gi_frame->f_stackdepth] = result; - gen->gi_frame->f_stackdepth++; - } + assert(f->f_lasti >= 0 || ((unsigned char *)PyBytes_AS_STRING(f->f_code->co_code))[0] == GEN_START); + /* Push arg onto the frame's value stack */ + result = arg ? arg : Py_None; + Py_INCREF(result); + gen->gi_frame->f_valuestack[gen->gi_frame->f_stackdepth] = result; + gen->gi_frame->f_stackdepth++; /* Generators always return to their most recent caller, not * necessarily their creator. */ diff --git a/Python/ceval.c b/Python/ceval.c index d9a754fb9107b..eda993927093c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2639,6 +2639,30 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) goto exiting; } + case TARGET(GEN_START): { + PyObject *none = POP(); + Py_DECREF(none); + if (none != Py_None) { + if (oparg > 2) { + _PyErr_SetString(tstate, PyExc_SystemError, + "Illegal kind for GEN_START"); + } + else { + static const char *gen_kind[3] = { + "generator", + "coroutine", + "async generator" + }; + _PyErr_Format(tstate, PyExc_TypeError, + "can't send non-None value to a " + "just-started %s", + gen_kind[oparg]); + } + goto error; + } + DISPATCH(); + } + case TARGET(POP_EXCEPT): { PyObject *type, *value, *traceback; _PyErr_StackItem *exc_info; diff --git a/Python/compile.c b/Python/compile.c index 308d6866c7dc4..c2fa1c0282191 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1140,6 +1140,8 @@ stack_effect(int opcode, int oparg, int jump) return 1; case LIST_TO_TUPLE: return 0; + case GEN_START: + return -1; case LIST_EXTEND: case SET_UPDATE: case DICT_MERGE: @@ -6169,7 +6171,11 @@ stackdepth(struct compiler *c) } sp = stack; - stackdepth_push(&sp, entryblock, 0); + if (c->u->u_ste->ste_generator || c->u->u_ste->ste_coroutine) { + stackdepth_push(&sp, entryblock, 1); + } else { + stackdepth_push(&sp, entryblock, 0); + } while (sp != stack) { b = *--sp; int depth = b->b_startdepth; @@ -6648,6 +6654,41 @@ optimize_cfg(struct assembler *a, PyObject *consts); static int ensure_exits_have_lineno(struct compiler *c); +static int +insert_generator_prefix(struct compiler *c, basicblock *entryblock) { + + int flags = compute_code_flags(c); + if (flags < 0) { + return -1; + } + int kind; + if (flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) { + if (flags & CO_COROUTINE) { + kind = 1; + } + else if (flags & CO_ASYNC_GENERATOR) { + kind = 2; + } + else { + kind = 0; + } + } + else { + return 0; + } + if (compiler_next_instr(entryblock) < 0) { + return -1; + } + for (int i = entryblock->b_iused-1; i > 0; i--) { + entryblock->b_instr[i] = entryblock->b_instr[i-1]; + } + entryblock->b_instr[0].i_opcode = GEN_START; + entryblock->b_instr[0].i_oparg = kind; + entryblock->b_instr[0].i_lineno = -1; + entryblock->b_instr[0].i_target = NULL; + return 0; +} + static PyCodeObject * assemble(struct compiler *c, int addNone) { @@ -6685,6 +6726,10 @@ assemble(struct compiler *c, int addNone) entryblock = b; } + if (insert_generator_prefix(c, entryblock)) { + goto error; + } + /* Set firstlineno if it wasn't explicitly set. */ if (!c->u->u_firstlineno) { if (entryblock && entryblock->b_instr && entryblock->b_instr->i_lineno) diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 89f4d6fc254a6..5eadfd06e52d0 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -72,2618 +72,2619 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 109,111,100,117,108,101,46,10,10,78,233,0,0,0,0,90, 5,119,105,110,51,50,250,1,92,250,1,47,99,1,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,99,0,0,0,115,26,0,0,0,124,0,93,9,125,1, - 116,0,124,1,131,1,100,0,107,2,86,0,1,0,113,1, - 100,1,83,0,41,2,233,1,0,0,0,78,41,1,218,3, - 108,101,110,41,2,218,2,46,48,218,3,115,101,112,169,0, - 114,7,0,0,0,250,38,60,102,114,111,122,101,110,32,105, - 109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116, - 114,97,112,95,101,120,116,101,114,110,97,108,62,218,9,60, - 103,101,110,101,120,112,114,62,46,0,0,0,115,4,0,0, - 0,26,0,255,128,114,9,0,0,0,218,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,22,0,0,0,104,0,124,0,93,7, - 125,1,100,0,124,1,155,0,157,2,146,2,113,2,83,0, - 41,1,250,1,58,114,7,0,0,0,41,2,114,5,0,0, - 0,218,1,115,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,9,60,115,101,116,99,111,109,112,62,49,0, - 0,0,243,4,0,0,0,22,0,255,128,114,13,0,0,0, - 41,1,218,3,119,105,110,41,2,90,6,99,121,103,119,105, - 110,90,6,100,97,114,119,105,110,99,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,3,0, - 0,0,115,62,0,0,0,116,0,106,1,160,2,116,3,161, - 1,114,25,116,0,106,1,160,2,116,4,161,1,114,15,100, - 1,137,0,110,2,100,2,137,0,135,0,102,1,100,3,100, - 4,132,8,125,0,124,0,83,0,100,5,100,4,132,0,125, - 0,124,0,83,0,41,6,78,90,12,80,89,84,72,79,78, - 67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,79, - 78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,0, - 115,20,0,0,0,116,0,106,1,106,2,12,0,111,9,136, - 0,116,3,106,4,118,0,83,0,41,2,122,94,84,114,117, + 0,99,0,0,0,115,28,0,0,0,129,0,124,0,93,9, + 125,1,116,0,124,1,131,1,100,0,107,2,86,0,1,0, + 113,2,100,1,83,0,41,2,233,1,0,0,0,78,41,1, + 218,3,108,101,110,41,2,218,2,46,48,218,3,115,101,112, + 169,0,114,7,0,0,0,250,38,60,102,114,111,122,101,110, + 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, + 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218, + 9,60,103,101,110,101,120,112,114,62,46,0,0,0,115,6, + 0,0,0,6,128,22,0,255,128,114,9,0,0,0,218,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,22,0,0,0,104,0, + 124,0,93,7,125,1,100,0,124,1,155,0,157,2,146,2, + 113,2,83,0,41,1,250,1,58,114,7,0,0,0,41,2, + 114,5,0,0,0,218,1,115,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,9,60,115,101,116,99,111,109, + 112,62,49,0,0,0,115,4,0,0,0,22,0,255,128,114, + 13,0,0,0,41,1,218,3,119,105,110,41,2,90,6,99, + 121,103,119,105,110,90,6,100,97,114,119,105,110,99,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,3,0,0,0,115,62,0,0,0,116,0,106,1,160, + 2,116,3,161,1,114,25,116,0,106,1,160,2,116,4,161, + 1,114,15,100,1,137,0,110,2,100,2,137,0,135,0,102, + 1,100,3,100,4,132,8,125,0,124,0,83,0,100,5,100, + 4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,89, + 84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,80, + 89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 19,0,0,0,115,20,0,0,0,116,0,106,1,106,2,12, + 0,111,9,136,0,116,3,106,4,118,0,83,0,41,2,122, + 94,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, + 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, + 105,118,101,108,121,32,97,110,100,32,105,103,110,111,114,101, + 32,101,110,118,105,114,111,110,109,101,110,116,32,102,108,97, + 103,115,32,97,114,101,32,110,111,116,32,115,101,116,46,78, + 41,5,218,3,115,121,115,218,5,102,108,97,103,115,218,18, + 105,103,110,111,114,101,95,101,110,118,105,114,111,110,109,101, + 110,116,218,3,95,111,115,90,7,101,110,118,105,114,111,110, + 114,7,0,0,0,169,1,218,3,107,101,121,114,7,0,0, + 0,114,8,0,0,0,218,11,95,114,101,108,97,120,95,99, + 97,115,101,66,0,0,0,243,4,0,0,0,20,2,255,128, + 122,37,95,109,97,107,101,95,114,101,108,97,120,95,99,97, + 115,101,46,60,108,111,99,97,108,115,62,46,95,114,101,108, + 97,120,95,99,97,115,101,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, + 243,4,0,0,0,100,1,83,0,41,3,122,53,84,114,117, 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, - 121,32,97,110,100,32,105,103,110,111,114,101,32,101,110,118, - 105,114,111,110,109,101,110,116,32,102,108,97,103,115,32,97, - 114,101,32,110,111,116,32,115,101,116,46,78,41,5,218,3, - 115,121,115,218,5,102,108,97,103,115,218,18,105,103,110,111, - 114,101,95,101,110,118,105,114,111,110,109,101,110,116,218,3, - 95,111,115,90,7,101,110,118,105,114,111,110,114,7,0,0, - 0,169,1,218,3,107,101,121,114,7,0,0,0,114,8,0, - 0,0,218,11,95,114,101,108,97,120,95,99,97,115,101,66, - 0,0,0,243,4,0,0,0,20,2,255,128,122,37,95,109, - 97,107,101,95,114,101,108,97,120,95,99,97,115,101,46,60, - 108,111,99,97,108,115,62,46,95,114,101,108,97,120,95,99, - 97,115,101,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,83,0,0,0,243,4,0,0, - 0,100,1,83,0,41,3,122,53,84,114,117,101,32,105,102, - 32,102,105,108,101,110,97,109,101,115,32,109,117,115,116,32, - 98,101,32,99,104,101,99,107,101,100,32,99,97,115,101,45, - 105,110,115,101,110,115,105,116,105,118,101,108,121,46,70,78, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,22,0,0,0,70,0, - 0,0,243,4,0,0,0,4,2,255,128,41,5,114,16,0, - 0,0,218,8,112,108,97,116,102,111,114,109,218,10,115,116, - 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, - 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, - 70,79,82,77,83,218,35,95,67,65,83,69,95,73,78,83, - 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, - 77,83,95,83,84,82,95,75,69,89,41,1,114,22,0,0, - 0,114,7,0,0,0,114,20,0,0,0,114,8,0,0,0, - 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, - 115,101,59,0,0,0,115,18,0,0,0,12,1,12,1,6, - 1,4,2,12,2,4,7,8,253,4,3,255,128,114,30,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,4,0,0,0,67,0,0,0,115,20,0,0,0, - 116,0,124,0,131,1,100,1,64,0,160,1,100,2,100,3, - 161,2,83,0,41,5,122,42,67,111,110,118,101,114,116,32, - 97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114, - 32,116,111,32,108,105,116,116,108,101,45,101,110,100,105,97, - 110,46,236,3,0,0,0,255,127,255,127,3,0,233,4,0, - 0,0,218,6,108,105,116,116,108,101,78,41,2,218,3,105, - 110,116,218,8,116,111,95,98,121,116,101,115,41,1,218,1, - 120,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,12,95,112,97,99,107,95,117,105,110,116,51,50,78,0, - 0,0,114,23,0,0,0,114,37,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,67,0,0,0,243,28,0,0,0,116,0,124,0,131,1, - 100,1,107,2,115,8,74,0,130,1,116,1,160,2,124,0, - 100,2,161,2,83,0,41,4,122,47,67,111,110,118,101,114, - 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, - 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, - 32,105,110,116,101,103,101,114,46,114,32,0,0,0,114,33, - 0,0,0,78,169,3,114,4,0,0,0,114,34,0,0,0, - 218,10,102,114,111,109,95,98,121,116,101,115,169,1,218,4, - 100,97,116,97,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,14,95,117,110,112,97,99,107,95,117,105,110, - 116,51,50,83,0,0,0,243,6,0,0,0,16,2,12,1, - 255,128,114,43,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, - 114,38,0,0,0,41,4,122,47,67,111,110,118,101,114,116, - 32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,116, - 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, - 105,110,116,101,103,101,114,46,233,2,0,0,0,114,33,0, - 0,0,78,114,39,0,0,0,114,41,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,14,95,117, - 110,112,97,99,107,95,117,105,110,116,49,54,88,0,0,0, - 114,44,0,0,0,114,46,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,71, - 0,0,0,115,20,0,0,0,116,0,160,1,100,1,100,2, - 132,0,124,0,68,0,131,1,161,1,83,0,41,4,122,31, - 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, - 111,115,46,112,97,116,104,46,106,111,105,110,40,41,46,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 5,0,0,0,83,0,0,0,115,26,0,0,0,103,0,124, - 0,93,9,125,1,124,1,114,2,124,1,160,0,116,1,161, - 1,145,2,113,2,83,0,114,7,0,0,0,41,2,218,6, - 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, - 97,114,97,116,111,114,115,41,2,114,5,0,0,0,218,4, - 112,97,114,116,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,60,108,105,115,116,99,111,109,112,62,96, - 0,0,0,115,8,0,0,0,6,0,6,1,14,255,255,128, - 122,30,95,112,97,116,104,95,106,111,105,110,46,60,108,111, - 99,97,108,115,62,46,60,108,105,115,116,99,111,109,112,62, - 78,41,2,218,8,112,97,116,104,95,115,101,112,218,4,106, - 111,105,110,41,1,218,10,112,97,116,104,95,112,97,114,116, - 115,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,10,95,112,97,116,104,95,106,111,105,110,94,0,0,0, - 115,8,0,0,0,10,2,2,1,8,255,255,128,114,54,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,67,0,0,0,115,96,0,0,0, - 116,0,116,1,131,1,100,1,107,2,114,18,124,0,160,2, - 116,3,161,1,92,3,125,1,125,2,125,3,124,1,124,3, - 102,2,83,0,116,4,124,0,131,1,68,0,93,21,125,4, - 124,4,116,1,118,0,114,43,124,0,106,5,124,4,100,1, - 100,2,141,2,92,2,125,1,125,3,124,1,124,3,102,2, - 2,0,1,0,83,0,113,22,100,3,124,0,102,2,83,0, - 41,5,122,32,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,115,112,108,105, - 116,40,41,46,114,3,0,0,0,41,1,90,8,109,97,120, - 115,112,108,105,116,114,10,0,0,0,78,41,6,114,4,0, - 0,0,114,48,0,0,0,218,10,114,112,97,114,116,105,116, - 105,111,110,114,51,0,0,0,218,8,114,101,118,101,114,115, - 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, - 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, - 105,108,114,36,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,11,95,112,97,116,104,95,115,112, - 108,105,116,100,0,0,0,115,20,0,0,0,12,2,16,1, - 8,1,12,1,8,1,18,1,12,1,2,254,8,3,255,128, - 114,61,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,10, - 0,0,0,116,0,160,1,124,0,161,1,83,0,41,2,122, - 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, - 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, - 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, - 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, - 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, - 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, - 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, - 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,78, - 41,2,114,19,0,0,0,90,4,115,116,97,116,169,1,114, - 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,112, - 0,0,0,115,4,0,0,0,10,7,255,128,114,63,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,8,0,0,0,67,0,0,0,115,48,0,0,0,122, - 6,116,0,124,0,131,1,125,2,87,0,110,9,4,0,116, - 1,121,23,1,0,1,0,1,0,89,0,100,1,83,0,124, - 2,106,2,100,2,64,0,124,1,107,2,83,0,119,0,41, - 4,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32, - 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116, - 121,112,101,46,70,105,0,240,0,0,78,41,3,114,63,0, - 0,0,218,7,79,83,69,114,114,111,114,218,7,115,116,95, - 109,111,100,101,41,3,114,58,0,0,0,218,4,109,111,100, - 101,90,9,115,116,97,116,95,105,110,102,111,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,18,95,112,97, - 116,104,95,105,115,95,109,111,100,101,95,116,121,112,101,122, - 0,0,0,115,14,0,0,0,2,2,12,1,12,1,6,1, - 14,1,2,254,255,128,114,67,0,0,0,99,1,0,0,0, + 121,46,70,78,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,21,0, + 0,0,70,0,0,0,243,4,0,0,0,4,2,255,128,41, + 5,114,15,0,0,0,218,8,112,108,97,116,102,111,114,109, + 218,10,115,116,97,114,116,115,119,105,116,104,218,27,95,67, + 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, + 80,76,65,84,70,79,82,77,83,218,35,95,67,65,83,69, + 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, + 84,70,79,82,77,83,95,83,84,82,95,75,69,89,41,1, + 114,21,0,0,0,114,7,0,0,0,114,19,0,0,0,114, + 8,0,0,0,218,16,95,109,97,107,101,95,114,101,108,97, + 120,95,99,97,115,101,59,0,0,0,115,18,0,0,0,12, + 1,12,1,6,1,4,2,12,2,4,7,8,253,4,3,255, + 128,114,29,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, + 20,0,0,0,116,0,124,0,131,1,100,1,64,0,160,1, + 100,2,100,3,161,2,83,0,41,5,122,42,67,111,110,118, + 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, + 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, + 110,100,105,97,110,46,236,3,0,0,0,255,127,255,127,3, + 0,233,4,0,0,0,218,6,108,105,116,116,108,101,78,41, + 2,218,3,105,110,116,218,8,116,111,95,98,121,116,101,115, + 41,1,218,1,120,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,12,95,112,97,99,107,95,117,105,110,116, + 51,50,78,0,0,0,114,22,0,0,0,114,36,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,243,28,0,0,0,116,0, + 124,0,131,1,100,1,107,2,115,8,74,0,130,1,116,1, + 160,2,124,0,100,2,161,2,83,0,41,4,122,47,67,111, + 110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,110, + 32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,116, + 111,32,97,110,32,105,110,116,101,103,101,114,46,114,31,0, + 0,0,114,32,0,0,0,78,169,3,114,4,0,0,0,114, + 33,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, + 169,1,218,4,100,97,116,97,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,14,95,117,110,112,97,99,107, + 95,117,105,110,116,51,50,83,0,0,0,243,6,0,0,0, + 16,2,12,1,255,128,114,42,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,114,37,0,0,0,41,4,122,47,67,111,110, + 118,101,114,116,32,50,32,98,121,116,101,115,32,105,110,32, + 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, + 32,97,110,32,105,110,116,101,103,101,114,46,233,2,0,0, + 0,114,32,0,0,0,78,114,38,0,0,0,114,40,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,14,95,117,110,112,97,99,107,95,117,105,110,116,49,54, + 88,0,0,0,114,43,0,0,0,114,45,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,71,0,0,0,115,20,0,0,0,116,0,160,1, + 100,1,100,2,132,0,124,0,68,0,131,1,161,1,83,0, + 41,4,122,31,82,101,112,108,97,99,101,109,101,110,116,32, + 102,111,114,32,111,115,46,112,97,116,104,46,106,111,105,110, + 40,41,46,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,5,0,0,0,83,0,0,0,115,26,0,0, + 0,103,0,124,0,93,9,125,1,124,1,114,2,124,1,160, + 0,116,1,161,1,145,2,113,2,83,0,114,7,0,0,0, + 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, + 95,115,101,112,97,114,97,116,111,114,115,41,2,114,5,0, + 0,0,218,4,112,97,114,116,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,10,60,108,105,115,116,99,111, + 109,112,62,96,0,0,0,115,8,0,0,0,6,0,6,1, + 14,255,255,128,122,30,95,112,97,116,104,95,106,111,105,110, + 46,60,108,111,99,97,108,115,62,46,60,108,105,115,116,99, + 111,109,112,62,78,41,2,218,8,112,97,116,104,95,115,101, + 112,218,4,106,111,105,110,41,1,218,10,112,97,116,104,95, + 112,97,114,116,115,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,10,95,112,97,116,104,95,106,111,105,110, + 94,0,0,0,115,8,0,0,0,10,2,2,1,8,255,255, + 128,114,53,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, + 96,0,0,0,116,0,116,1,131,1,100,1,107,2,114,18, + 124,0,160,2,116,3,161,1,92,3,125,1,125,2,125,3, + 124,1,124,3,102,2,83,0,116,4,124,0,131,1,68,0, + 93,21,125,4,124,4,116,1,118,0,114,43,124,0,106,5, + 124,4,100,1,100,2,141,2,92,2,125,1,125,3,124,1, + 124,3,102,2,2,0,1,0,83,0,113,22,100,3,124,0, + 102,2,83,0,41,5,122,32,82,101,112,108,97,99,101,109, + 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, + 115,112,108,105,116,40,41,46,114,3,0,0,0,41,1,90, + 8,109,97,120,115,112,108,105,116,114,10,0,0,0,78,41, + 6,114,4,0,0,0,114,47,0,0,0,218,10,114,112,97, + 114,116,105,116,105,111,110,114,50,0,0,0,218,8,114,101, + 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, + 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, + 218,4,116,97,105,108,114,35,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,11,95,112,97,116, + 104,95,115,112,108,105,116,100,0,0,0,115,20,0,0,0, + 12,2,16,1,8,1,12,1,8,1,18,1,12,1,2,254, + 8,3,255,128,114,60,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,115,10,0,0,0,116,0,160,1,124,0,161,1,83, + 0,41,2,122,126,83,116,97,116,32,116,104,101,32,112,97, + 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, + 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, + 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, + 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, + 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, + 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, + 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, + 32,32,32,78,41,2,114,18,0,0,0,90,4,115,116,97, + 116,169,1,114,57,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,10,95,112,97,116,104,95,115, + 116,97,116,112,0,0,0,115,4,0,0,0,10,7,255,128, + 114,62,0,0,0,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,48, + 0,0,0,122,6,116,0,124,0,131,1,125,2,87,0,110, + 9,4,0,116,1,121,23,1,0,1,0,1,0,89,0,100, + 1,83,0,124,2,106,2,100,2,64,0,124,1,107,2,83, + 0,119,0,41,4,122,49,84,101,115,116,32,119,104,101,116, + 104,101,114,32,116,104,101,32,112,97,116,104,32,105,115,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,101,32,116,121,112,101,46,70,105,0,240,0,0,78,41, + 3,114,62,0,0,0,218,7,79,83,69,114,114,111,114,218, + 7,115,116,95,109,111,100,101,41,3,114,57,0,0,0,218, + 4,109,111,100,101,90,9,115,116,97,116,95,105,110,102,111, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 18,95,112,97,116,104,95,105,115,95,109,111,100,101,95,116, + 121,112,101,122,0,0,0,115,14,0,0,0,2,2,12,1, + 12,1,6,1,14,1,2,254,255,128,114,66,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,124, + 0,100,1,131,2,83,0,41,3,122,31,82,101,112,108,97, + 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97, + 116,104,46,105,115,102,105,108,101,46,105,0,128,0,0,78, + 41,1,114,66,0,0,0,114,61,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,12,95,112,97, + 116,104,95,105,115,102,105,108,101,131,0,0,0,243,4,0, + 0,0,10,2,255,128,114,67,0,0,0,99,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,10,0,0,0,116,0,124,0,100,1,131, - 2,83,0,41,3,122,31,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,102,105,108,101,46,105,0,128,0,0,78,41,1,114,67, - 0,0,0,114,62,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,12,95,112,97,116,104,95,105, - 115,102,105,108,101,131,0,0,0,243,4,0,0,0,10,2, - 255,128,114,68,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,22,0,0,0,124,0,115,6,116,0,160,1,161,0,125, - 0,116,2,124,0,100,1,131,2,83,0,41,3,122,30,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, - 0,0,78,41,3,114,19,0,0,0,218,6,103,101,116,99, - 119,100,114,67,0,0,0,114,62,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,11,95,112,97, - 116,104,95,105,115,100,105,114,136,0,0,0,115,8,0,0, - 0,4,2,8,1,10,1,255,128,114,71,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,26,0,0,0,124,0,160,0, - 116,1,161,1,112,12,124,0,100,1,100,2,133,2,25,0, - 116,2,118,0,83,0,41,4,122,142,82,101,112,108,97,99, - 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, - 104,46,105,115,97,98,115,46,10,10,32,32,32,32,67,111, - 110,115,105,100,101,114,115,32,97,32,87,105,110,100,111,119, - 115,32,100,114,105,118,101,45,114,101,108,97,116,105,118,101, - 32,112,97,116,104,32,40,110,111,32,100,114,105,118,101,44, - 32,98,117,116,32,115,116,97,114,116,115,32,119,105,116,104, - 32,115,108,97,115,104,41,32,116,111,10,32,32,32,32,115, - 116,105,108,108,32,98,101,32,34,97,98,115,111,108,117,116, - 101,34,46,10,32,32,32,32,114,3,0,0,0,233,3,0, - 0,0,78,41,3,114,27,0,0,0,114,48,0,0,0,218, - 20,95,112,97,116,104,115,101,112,115,95,119,105,116,104,95, - 99,111,108,111,110,114,62,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,95,112,97,116,104, - 95,105,115,97,98,115,143,0,0,0,115,4,0,0,0,26, - 6,255,128,114,74,0,0,0,233,182,1,0,0,99,3,0, - 0,0,0,0,0,0,0,0,0,0,6,0,0,0,11,0, - 0,0,67,0,0,0,115,170,0,0,0,100,1,160,0,124, - 0,116,1,124,0,131,1,161,2,125,3,116,2,160,3,124, - 3,116,2,106,4,116,2,106,5,66,0,116,2,106,6,66, - 0,124,2,100,2,64,0,161,3,125,4,122,36,116,7,160, - 8,124,4,100,3,161,2,143,13,125,5,124,5,160,9,124, - 1,161,1,1,0,87,0,100,4,4,0,4,0,131,3,1, - 0,110,8,49,0,115,47,119,1,1,0,1,0,1,0,89, - 0,1,0,116,2,160,10,124,3,124,0,161,2,1,0,87, - 0,100,4,83,0,4,0,116,11,121,84,1,0,1,0,1, - 0,122,7,116,2,160,12,124,3,161,1,1,0,87,0,130, - 0,4,0,116,11,121,83,1,0,1,0,1,0,89,0,130, - 0,119,0,119,0,41,5,122,162,66,101,115,116,45,101,102, - 102,111,114,116,32,102,117,110,99,116,105,111,110,32,116,111, - 32,119,114,105,116,101,32,100,97,116,97,32,116,111,32,97, - 32,112,97,116,104,32,97,116,111,109,105,99,97,108,108,121, - 46,10,32,32,32,32,66,101,32,112,114,101,112,97,114,101, - 100,32,116,111,32,104,97,110,100,108,101,32,97,32,70,105, - 108,101,69,120,105,115,116,115,69,114,114,111,114,32,105,102, - 32,99,111,110,99,117,114,114,101,110,116,32,119,114,105,116, - 105,110,103,32,111,102,32,116,104,101,10,32,32,32,32,116, - 101,109,112,111,114,97,114,121,32,102,105,108,101,32,105,115, - 32,97,116,116,101,109,112,116,101,100,46,250,5,123,125,46, - 123,125,114,75,0,0,0,90,2,119,98,78,41,13,218,6, - 102,111,114,109,97,116,218,2,105,100,114,19,0,0,0,90, - 4,111,112,101,110,90,6,79,95,69,88,67,76,90,7,79, - 95,67,82,69,65,84,90,8,79,95,87,82,79,78,76,89, - 218,3,95,105,111,218,6,70,105,108,101,73,79,218,5,119, - 114,105,116,101,218,7,114,101,112,108,97,99,101,114,64,0, - 0,0,90,6,117,110,108,105,110,107,41,6,114,58,0,0, - 0,114,42,0,0,0,114,66,0,0,0,90,8,112,97,116, - 104,95,116,109,112,90,2,102,100,218,4,102,105,108,101,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, - 95,119,114,105,116,101,95,97,116,111,109,105,99,152,0,0, - 0,115,38,0,0,0,16,5,6,1,22,1,4,255,2,2, - 14,3,24,1,16,128,18,1,12,1,2,1,12,1,2,3, - 12,254,2,1,2,1,2,254,2,253,255,128,114,84,0,0, - 0,105,107,13,0,0,114,45,0,0,0,114,33,0,0,0, - 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, - 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122, - 4,46,112,121,119,122,4,46,112,121,99,41,1,218,12,111, - 112,116,105,109,105,122,97,116,105,111,110,99,2,0,0,0, - 0,0,0,0,1,0,0,0,12,0,0,0,5,0,0,0, - 67,0,0,0,115,80,1,0,0,124,1,100,1,117,1,114, - 26,116,0,160,1,100,2,116,2,161,2,1,0,124,2,100, - 1,117,1,114,20,100,3,125,3,116,3,124,3,131,1,130, - 1,124,1,114,24,100,4,110,1,100,5,125,2,116,4,160, - 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, - 4,125,5,124,5,160,7,100,6,161,1,92,3,125,6,125, - 7,125,8,116,8,106,9,106,10,125,9,124,9,100,1,117, - 0,114,57,116,11,100,7,131,1,130,1,100,4,160,12,124, - 6,114,63,124,6,110,1,124,8,124,7,124,9,103,3,161, - 1,125,10,124,2,100,1,117,0,114,86,116,8,106,13,106, - 14,100,8,107,2,114,82,100,4,125,2,110,4,116,8,106, - 13,106,14,125,2,116,15,124,2,131,1,125,2,124,2,100, - 4,107,3,114,112,124,2,160,16,161,0,115,105,116,17,100, - 9,160,18,124,2,161,1,131,1,130,1,100,10,160,18,124, - 10,116,19,124,2,161,3,125,10,124,10,116,20,100,8,25, - 0,23,0,125,11,116,8,106,21,100,1,117,1,114,162,116, - 22,124,4,131,1,115,134,116,23,116,4,160,24,161,0,124, - 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,114, - 152,124,4,100,8,25,0,116,25,118,1,114,152,124,4,100, - 12,100,1,133,2,25,0,125,4,116,23,116,8,106,21,124, - 4,160,26,116,25,161,1,124,11,131,3,83,0,116,23,124, - 4,116,27,124,11,131,3,83,0,41,13,97,254,2,0,0, - 71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,116, - 111,32,97,32,46,112,121,32,102,105,108,101,44,32,114,101, - 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, - 32,105,116,115,32,46,112,121,99,32,102,105,108,101,46,10, - 10,32,32,32,32,84,104,101,32,46,112,121,32,102,105,108, - 101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32, - 116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115, - 105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104, - 101,32,112,97,116,104,32,116,111,32,116,104,101,10,32,32, - 32,32,46,112,121,99,32,102,105,108,101,32,99,97,108,99, - 117,108,97,116,101,100,32,97,115,32,105,102,32,116,104,101, - 32,46,112,121,32,102,105,108,101,32,119,101,114,101,32,105, - 109,112,111,114,116,101,100,46,10,10,32,32,32,32,84,104, - 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, - 32,112,97,114,97,109,101,116,101,114,32,99,111,110,116,114, - 111,108,115,32,116,104,101,32,112,114,101,115,117,109,101,100, - 32,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, - 118,101,108,32,111,102,10,32,32,32,32,116,104,101,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,46,32,73,102, - 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, - 105,115,32,110,111,116,32,78,111,110,101,44,32,116,104,101, - 32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110, - 116,97,116,105,111,110,10,32,32,32,32,111,102,32,116,104, - 101,32,97,114,103,117,109,101,110,116,32,105,115,32,116,97, - 107,101,110,32,97,110,100,32,118,101,114,105,102,105,101,100, - 32,116,111,32,98,101,32,97,108,112,104,97,110,117,109,101, - 114,105,99,32,40,101,108,115,101,32,86,97,108,117,101,69, - 114,114,111,114,10,32,32,32,32,105,115,32,114,97,105,115, - 101,100,41,46,10,10,32,32,32,32,84,104,101,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,46,32,73,102,32,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,32,105,115,32,110,111,116,32,78, - 111,110,101,44,10,32,32,32,32,97,32,84,114,117,101,32, - 118,97,108,117,101,32,105,115,32,116,104,101,32,115,97,109, - 101,32,97,115,32,115,101,116,116,105,110,103,32,39,111,112, - 116,105,109,105,122,97,116,105,111,110,39,32,116,111,32,116, - 104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,10, - 32,32,32,32,119,104,105,108,101,32,97,32,70,97,108,115, - 101,32,118,97,108,117,101,32,105,115,32,101,113,117,105,118, - 97,108,101,110,116,32,116,111,32,115,101,116,116,105,110,103, - 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, - 116,111,32,39,49,39,46,10,10,32,32,32,32,73,102,32, - 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, - 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, - 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, - 70,116,104,101,32,100,101,98,117,103,95,111,118,101,114,114, - 105,100,101,32,112,97,114,97,109,101,116,101,114,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,59,32,117,115,101, - 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, - 105,110,115,116,101,97,100,122,50,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,32,111,114,32,111,112,116,105,109, - 105,122,97,116,105,111,110,32,109,117,115,116,32,98,101,32, - 115,101,116,32,116,111,32,78,111,110,101,114,10,0,0,0, - 114,3,0,0,0,218,1,46,250,36,115,121,115,46,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, - 104,101,95,116,97,103,32,105,115,32,78,111,110,101,114,0, - 0,0,0,122,24,123,33,114,125,32,105,115,32,110,111,116, - 32,97,108,112,104,97,110,117,109,101,114,105,99,122,7,123, - 125,46,123,125,123,125,114,11,0,0,0,114,45,0,0,0, - 41,28,218,9,95,119,97,114,110,105,110,103,115,218,4,119, - 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, - 87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,114, - 111,114,114,19,0,0,0,218,6,102,115,112,97,116,104,114, - 61,0,0,0,114,55,0,0,0,114,16,0,0,0,218,14, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, - 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,52, - 0,0,0,114,17,0,0,0,218,8,111,112,116,105,109,105, - 122,101,218,3,115,116,114,218,7,105,115,97,108,110,117,109, - 218,10,86,97,108,117,101,69,114,114,111,114,114,77,0,0, - 0,218,4,95,79,80,84,218,17,66,89,84,69,67,79,68, - 69,95,83,85,70,70,73,88,69,83,218,14,112,121,99,97, - 99,104,101,95,112,114,101,102,105,120,114,74,0,0,0,114, - 54,0,0,0,114,70,0,0,0,114,48,0,0,0,218,6, - 108,115,116,114,105,112,218,8,95,80,89,67,65,67,72,69, - 41,12,114,58,0,0,0,90,14,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,114,85,0,0,0,218,7,109,101, - 115,115,97,103,101,218,4,104,101,97,100,114,60,0,0,0, - 90,4,98,97,115,101,114,6,0,0,0,218,4,114,101,115, - 116,90,3,116,97,103,90,15,97,108,109,111,115,116,95,102, - 105,108,101,110,97,109,101,218,8,102,105,108,101,110,97,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,117, - 114,99,101,87,1,0,0,115,74,0,0,0,8,18,6,1, - 2,1,4,255,8,2,4,1,8,1,12,1,10,1,12,1, - 16,1,8,1,8,1,8,1,24,1,8,1,12,1,6,1, - 8,2,8,1,8,1,8,1,14,1,14,1,12,1,10,1, - 8,9,14,1,24,5,12,1,2,4,4,1,8,1,2,1, - 4,253,12,5,255,128,114,109,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,0, - 67,0,0,0,115,40,1,0,0,116,0,106,1,106,2,100, - 1,117,0,114,10,116,3,100,2,131,1,130,1,116,4,160, - 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, - 1,125,2,100,3,125,3,116,0,106,7,100,1,117,1,114, - 51,116,0,106,7,160,8,116,9,161,1,125,4,124,1,160, - 10,124,4,116,11,23,0,161,1,114,51,124,1,116,12,124, - 4,131,1,100,1,133,2,25,0,125,1,100,4,125,3,124, - 3,115,72,116,6,124,1,131,1,92,2,125,1,125,5,124, - 5,116,13,107,3,114,72,116,14,116,13,155,0,100,5,124, - 0,155,2,157,3,131,1,130,1,124,2,160,15,100,6,161, - 1,125,6,124,6,100,7,118,1,114,88,116,14,100,8,124, - 2,155,2,157,2,131,1,130,1,124,6,100,9,107,2,114, - 132,124,2,160,16,100,6,100,10,161,2,100,11,25,0,125, - 7,124,7,160,10,116,17,161,1,115,112,116,14,100,12,116, - 17,155,2,157,2,131,1,130,1,124,7,116,12,116,17,131, - 1,100,1,133,2,25,0,125,8,124,8,160,18,161,0,115, - 132,116,14,100,13,124,7,155,2,100,14,157,3,131,1,130, - 1,124,2,160,19,100,6,161,1,100,15,25,0,125,9,116, - 20,124,1,124,9,116,21,100,15,25,0,23,0,131,2,83, - 0,41,16,97,110,1,0,0,71,105,118,101,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,99, - 46,32,102,105,108,101,44,32,114,101,116,117,114,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,105,116,115,32,46, - 112,121,32,102,105,108,101,46,10,10,32,32,32,32,84,104, - 101,32,46,112,121,99,32,102,105,108,101,32,100,111,101,115, - 32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105, - 115,116,59,32,116,104,105,115,32,115,105,109,112,108,121,32, - 114,101,116,117,114,110,115,32,116,104,101,32,112,97,116,104, - 32,116,111,10,32,32,32,32,116,104,101,32,46,112,121,32, - 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, - 116,111,32,99,111,114,114,101,115,112,111,110,100,32,116,111, - 32,116,104,101,32,46,112,121,99,32,102,105,108,101,46,32, - 32,73,102,32,112,97,116,104,32,100,111,101,115,10,32,32, - 32,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111, - 32,80,69,80,32,51,49,52,55,47,52,56,56,32,102,111, - 114,109,97,116,44,32,86,97,108,117,101,69,114,114,111,114, - 32,119,105,108,108,32,98,101,32,114,97,105,115,101,100,46, - 32,73,102,10,32,32,32,32,115,121,115,46,105,109,112,108, - 101,109,101,110,116,97,116,105,111,110,46,99,97,99,104,101, - 95,116,97,103,32,105,115,32,78,111,110,101,32,116,104,101, - 110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,100, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,78,114,87,0,0,0,70,84,122,31, - 32,110,111,116,32,98,111,116,116,111,109,45,108,101,118,101, - 108,32,100,105,114,101,99,116,111,114,121,32,105,110,32,114, - 86,0,0,0,62,2,0,0,0,114,45,0,0,0,114,72, - 0,0,0,122,29,101,120,112,101,99,116,101,100,32,111,110, - 108,121,32,50,32,111,114,32,51,32,100,111,116,115,32,105, - 110,32,114,72,0,0,0,114,45,0,0,0,233,254,255,255, - 255,122,53,111,112,116,105,109,105,122,97,116,105,111,110,32, - 112,111,114,116,105,111,110,32,111,102,32,102,105,108,101,110, - 97,109,101,32,100,111,101,115,32,110,111,116,32,115,116,97, - 114,116,32,119,105,116,104,32,122,19,111,112,116,105,109,105, - 122,97,116,105,111,110,32,108,101,118,101,108,32,122,29,32, - 105,115,32,110,111,116,32,97,110,32,97,108,112,104,97,110, - 117,109,101,114,105,99,32,118,97,108,117,101,114,0,0,0, - 0,41,22,114,16,0,0,0,114,93,0,0,0,114,94,0, - 0,0,114,95,0,0,0,114,19,0,0,0,114,92,0,0, - 0,114,61,0,0,0,114,102,0,0,0,114,47,0,0,0, - 114,48,0,0,0,114,27,0,0,0,114,51,0,0,0,114, - 4,0,0,0,114,104,0,0,0,114,99,0,0,0,218,5, - 99,111,117,110,116,114,57,0,0,0,114,100,0,0,0,114, - 98,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, - 54,0,0,0,218,15,83,79,85,82,67,69,95,83,85,70, - 70,73,88,69,83,41,10,114,58,0,0,0,114,106,0,0, - 0,90,16,112,121,99,97,99,104,101,95,102,105,108,101,110, - 97,109,101,90,23,102,111,117,110,100,95,105,110,95,112,121, - 99,97,99,104,101,95,112,114,101,102,105,120,90,13,115,116, - 114,105,112,112,101,100,95,112,97,116,104,90,7,112,121,99, - 97,99,104,101,90,9,100,111,116,95,99,111,117,110,116,114, - 85,0,0,0,90,9,111,112,116,95,108,101,118,101,108,90, - 13,98,97,115,101,95,102,105,108,101,110,97,109,101,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,17,115, - 111,117,114,99,101,95,102,114,111,109,95,99,97,99,104,101, - 158,1,0,0,115,62,0,0,0,12,9,8,1,10,1,12, - 1,4,1,10,1,12,1,14,1,16,1,4,1,4,1,12, - 1,8,1,8,1,2,1,8,255,10,2,8,1,14,1,8, - 1,16,1,10,1,4,1,2,1,8,255,16,2,8,1,16, - 1,14,2,18,1,255,128,114,114,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,9,0,0, - 0,67,0,0,0,115,122,0,0,0,116,0,124,0,131,1, - 100,1,107,2,114,8,100,2,83,0,124,0,160,1,100,3, - 161,1,92,3,125,1,125,2,125,3,124,1,114,28,124,3, - 160,2,161,0,100,4,100,5,133,2,25,0,100,6,107,3, - 114,30,124,0,83,0,122,6,116,3,124,0,131,1,125,4, - 87,0,110,15,4,0,116,4,116,5,102,2,121,60,1,0, - 1,0,1,0,124,0,100,2,100,5,133,2,25,0,125,4, - 89,0,116,6,124,4,131,1,114,58,124,4,83,0,124,0, - 83,0,119,0,41,7,122,188,67,111,110,118,101,114,116,32, - 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,32, - 112,97,116,104,32,116,111,32,97,32,115,111,117,114,99,101, - 32,112,97,116,104,32,40,105,102,32,112,111,115,115,105,98, - 108,101,41,46,10,10,32,32,32,32,84,104,105,115,32,102, - 117,110,99,116,105,111,110,32,101,120,105,115,116,115,32,112, - 117,114,101,108,121,32,102,111,114,32,98,97,99,107,119,97, - 114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116, - 121,32,102,111,114,10,32,32,32,32,80,121,73,109,112,111, - 114,116,95,69,120,101,99,67,111,100,101,77,111,100,117,108, - 101,87,105,116,104,70,105,108,101,110,97,109,101,115,40,41, - 32,105,110,32,116,104,101,32,67,32,65,80,73,46,10,10, - 32,32,32,32,114,0,0,0,0,78,114,86,0,0,0,233, - 253,255,255,255,233,255,255,255,255,90,2,112,121,41,7,114, - 4,0,0,0,114,55,0,0,0,218,5,108,111,119,101,114, - 114,114,0,0,0,114,95,0,0,0,114,99,0,0,0,114, - 68,0,0,0,41,5,218,13,98,121,116,101,99,111,100,101, - 95,112,97,116,104,114,107,0,0,0,114,59,0,0,0,90, - 9,101,120,116,101,110,115,105,111,110,218,11,115,111,117,114, - 99,101,95,112,97,116,104,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,15,95,103,101,116,95,115,111,117, - 114,99,101,102,105,108,101,198,1,0,0,115,24,0,0,0, - 12,7,4,1,16,1,24,1,4,1,2,1,12,1,16,1, - 14,1,16,1,2,254,255,128,114,120,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0, - 0,0,67,0,0,0,115,68,0,0,0,124,0,160,0,116, - 1,116,2,131,1,161,1,114,22,122,5,116,3,124,0,131, - 1,87,0,83,0,4,0,116,4,121,33,1,0,1,0,1, - 0,89,0,100,0,83,0,124,0,160,0,116,1,116,5,131, - 1,161,1,114,31,124,0,83,0,100,0,83,0,119,0,169, - 1,78,41,6,218,8,101,110,100,115,119,105,116,104,218,5, - 116,117,112,108,101,114,113,0,0,0,114,109,0,0,0,114, - 95,0,0,0,114,101,0,0,0,41,1,114,108,0,0,0, + 67,0,0,0,115,22,0,0,0,124,0,115,6,116,0,160, + 1,161,0,125,0,116,2,124,0,100,1,131,2,83,0,41, + 3,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, + 46,105,0,64,0,0,78,41,3,114,18,0,0,0,218,6, + 103,101,116,99,119,100,114,66,0,0,0,114,61,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,95,103,101,116,95,99,97,99,104,101,100,217,1,0,0, - 115,20,0,0,0,14,1,2,1,10,1,12,1,6,1,14, - 1,4,1,4,2,2,251,255,128,114,124,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,8, - 0,0,0,67,0,0,0,115,48,0,0,0,122,7,116,0, - 124,0,131,1,106,1,125,1,87,0,110,9,4,0,116,2, - 121,23,1,0,1,0,1,0,100,1,125,1,89,0,124,1, - 100,2,79,0,125,1,124,1,83,0,119,0,41,4,122,51, - 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, - 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, - 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,46,114,75,0,0,0,233,128,0,0,0,78,41,3, - 114,63,0,0,0,114,65,0,0,0,114,64,0,0,0,41, - 2,114,58,0,0,0,114,66,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,10,95,99,97,108, - 99,95,109,111,100,101,229,1,0,0,115,16,0,0,0,2, - 2,14,1,12,1,6,1,8,3,4,1,2,251,255,128,114, - 126,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,3,0,0,0,115,52,0, - 0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1, - 116,0,100,1,117,1,114,15,116,0,106,1,125,2,110,4, - 100,4,100,5,132,0,125,2,124,2,124,1,136,0,131,2, - 1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97, - 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, - 97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101, - 105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97, - 116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104, - 101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110, - 32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104, - 101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116, - 32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102, - 105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32, - 116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109, - 101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97, - 114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32, - 116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102, - 97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,31,0,0,0, - 115,72,0,0,0,124,1,100,0,117,0,114,8,124,0,106, - 0,125,1,110,16,124,0,106,0,124,1,107,3,114,24,116, - 1,100,1,124,0,106,0,124,1,102,2,22,0,124,1,100, - 2,141,2,130,1,136,0,124,0,124,1,103,2,124,2,162, - 1,82,0,105,0,124,3,164,1,142,1,83,0,41,3,78, - 122,30,108,111,97,100,101,114,32,102,111,114,32,37,115,32, - 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, - 169,1,218,4,110,97,109,101,41,2,114,128,0,0,0,218, - 11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,4, - 115,101,108,102,114,128,0,0,0,218,4,97,114,103,115,218, - 6,107,119,97,114,103,115,169,1,218,6,109,101,116,104,111, - 100,114,7,0,0,0,114,8,0,0,0,218,19,95,99,104, - 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, - 249,1,0,0,115,20,0,0,0,8,1,8,1,10,1,4, - 1,8,1,2,255,2,1,6,255,24,2,255,128,122,40,95, - 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, - 108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95, - 119,114,97,112,112,101,114,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,7,0,0,0,83,0,0,0, - 115,56,0,0,0,100,1,68,0,93,16,125,2,116,0,124, - 1,124,2,131,2,114,18,116,1,124,0,124,2,116,2,124, - 1,124,2,131,2,131,3,1,0,113,2,124,0,106,3,160, - 4,124,1,106,3,161,1,1,0,100,0,83,0,41,2,78, - 41,4,218,10,95,95,109,111,100,117,108,101,95,95,218,8, - 95,95,110,97,109,101,95,95,218,12,95,95,113,117,97,108, - 110,97,109,101,95,95,218,7,95,95,100,111,99,95,95,41, - 5,218,7,104,97,115,97,116,116,114,218,7,115,101,116,97, - 116,116,114,218,7,103,101,116,97,116,116,114,218,8,95,95, - 100,105,99,116,95,95,218,6,117,112,100,97,116,101,41,3, - 90,3,110,101,119,90,3,111,108,100,114,82,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,5, - 95,119,114,97,112,6,2,0,0,115,12,0,0,0,8,1, - 10,1,18,1,2,128,18,1,255,128,122,26,95,99,104,101, - 99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,62, - 46,95,119,114,97,112,41,1,78,41,2,218,10,95,98,111, - 111,116,115,116,114,97,112,114,145,0,0,0,41,3,114,134, - 0,0,0,114,135,0,0,0,114,145,0,0,0,114,7,0, - 0,0,114,133,0,0,0,114,8,0,0,0,218,11,95,99, - 104,101,99,107,95,110,97,109,101,241,1,0,0,115,14,0, - 0,0,14,8,8,10,8,1,8,2,10,6,4,1,255,128, - 114,147,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,60, - 0,0,0,124,0,160,0,124,1,161,1,92,2,125,2,125, - 3,124,2,100,1,117,0,114,28,116,1,124,3,131,1,114, - 28,100,2,125,4,116,2,160,3,124,4,160,4,124,3,100, - 3,25,0,161,1,116,5,161,2,1,0,124,2,83,0,41, - 4,122,155,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 32,98,121,32,100,101,108,101,103,97,116,105,110,103,32,116, - 111,10,32,32,32,32,115,101,108,102,46,102,105,110,100,95, - 108,111,97,100,101,114,40,41,46,10,10,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,105,110,32,102,97,118,111, - 114,32,111,102,32,102,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,40,41,46,10,10,32,32,32,32,78,122, - 44,78,111,116,32,105,109,112,111,114,116,105,110,103,32,100, - 105,114,101,99,116,111,114,121,32,123,125,58,32,109,105,115, - 115,105,110,103,32,95,95,105,110,105,116,95,95,114,0,0, - 0,0,41,6,218,11,102,105,110,100,95,108,111,97,100,101, - 114,114,4,0,0,0,114,88,0,0,0,114,89,0,0,0, - 114,77,0,0,0,218,13,73,109,112,111,114,116,87,97,114, - 110,105,110,103,41,5,114,130,0,0,0,218,8,102,117,108, - 108,110,97,109,101,218,6,108,111,97,100,101,114,218,8,112, - 111,114,116,105,111,110,115,218,3,109,115,103,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,17,95,102,105, - 110,100,95,109,111,100,117,108,101,95,115,104,105,109,16,2, - 0,0,115,12,0,0,0,14,10,16,1,4,1,22,1,4, - 1,255,128,114,154,0,0,0,99,3,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, - 0,115,166,0,0,0,124,0,100,1,100,2,133,2,25,0, - 125,3,124,3,116,0,107,3,114,32,100,3,124,1,155,2, - 100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,5, - 124,4,161,2,1,0,116,3,124,4,102,1,105,0,124,2, - 164,1,142,1,130,1,116,4,124,0,131,1,100,6,107,0, - 114,53,100,7,124,1,155,2,157,2,125,4,116,1,160,2, - 100,5,124,4,161,2,1,0,116,5,124,4,131,1,130,1, - 116,6,124,0,100,2,100,8,133,2,25,0,131,1,125,5, - 124,5,100,9,64,0,114,81,100,10,124,5,155,2,100,11, - 124,1,155,2,157,4,125,4,116,3,124,4,102,1,105,0, - 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84, - 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99, - 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105, - 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100, - 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104, - 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32, - 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105, - 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32, - 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101, - 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105, - 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10, - 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, - 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, - 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, - 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, - 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, - 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41, - 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, - 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, - 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, - 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, - 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, - 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, - 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, - 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, - 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, - 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, - 10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110, - 32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101, - 114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111, - 114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115, - 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110, - 118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32, - 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, - 104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100, - 32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100, - 46,10,10,32,32,32,32,78,114,32,0,0,0,122,20,98, - 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32, - 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0, - 122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104, - 105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32, - 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233, - 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108, - 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65, - 71,73,67,95,78,85,77,66,69,82,114,146,0,0,0,218, - 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, - 101,114,129,0,0,0,114,4,0,0,0,218,8,69,79,70, - 69,114,114,111,114,114,43,0,0,0,41,6,114,42,0,0, - 0,114,128,0,0,0,218,11,101,120,99,95,100,101,116,97, - 105,108,115,90,5,109,97,103,105,99,114,105,0,0,0,114, - 17,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,13,95,99,108,97,115,115,105,102,121,95,112, - 121,99,33,2,0,0,115,30,0,0,0,12,16,8,1,16, - 1,12,1,16,1,12,1,10,1,12,1,8,1,16,1,8, - 2,16,1,16,1,4,1,255,128,114,163,0,0,0,99,5, - 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4, - 0,0,0,67,0,0,0,115,124,0,0,0,116,0,124,0, - 100,1,100,2,133,2,25,0,131,1,124,1,100,3,64,0, - 107,3,114,31,100,4,124,3,155,2,157,2,125,5,116,1, - 160,2,100,5,124,5,161,2,1,0,116,3,124,5,102,1, - 105,0,124,4,164,1,142,1,130,1,124,2,100,6,117,1, - 114,60,116,0,124,0,100,2,100,7,133,2,25,0,131,1, - 124,2,100,3,64,0,107,3,114,58,116,3,100,4,124,3, - 155,2,157,2,102,1,105,0,124,4,164,1,142,1,130,1, - 100,6,83,0,100,6,83,0,41,8,97,7,2,0,0,86, - 97,108,105,100,97,116,101,32,97,32,112,121,99,32,97,103, - 97,105,110,115,116,32,116,104,101,32,115,111,117,114,99,101, - 32,108,97,115,116,45,109,111,100,105,102,105,101,100,32,116, - 105,109,101,46,10,10,32,32,32,32,42,100,97,116,97,42, - 32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115, - 32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101, - 46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115, - 116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32, - 32,32,32,114,101,113,117,105,114,101,100,46,41,10,10,32, - 32,32,32,42,115,111,117,114,99,101,95,109,116,105,109,101, - 42,32,105,115,32,116,104,101,32,108,97,115,116,32,109,111, - 100,105,102,105,101,100,32,116,105,109,101,115,116,97,109,112, - 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,102, - 105,108,101,46,10,10,32,32,32,32,42,115,111,117,114,99, - 101,95,115,105,122,101,42,32,105,115,32,78,111,110,101,32, - 111,114,32,116,104,101,32,115,105,122,101,32,111,102,32,116, - 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,105, - 110,32,98,121,116,101,115,46,10,10,32,32,32,32,42,110, - 97,109,101,42,32,105,115,32,116,104,101,32,110,97,109,101, - 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,98, - 101,105,110,103,32,105,109,112,111,114,116,101,100,46,32,73, - 116,32,105,115,32,117,115,101,100,32,102,111,114,32,108,111, - 103,103,105,110,103,46,10,10,32,32,32,32,42,101,120,99, - 95,100,101,116,97,105,108,115,42,32,105,115,32,97,32,100, - 105,99,116,105,111,110,97,114,121,32,112,97,115,115,101,100, - 32,116,111,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,102,32,105,116,32,114,97,105,115,101,100,32,102,111,114, - 10,32,32,32,32,105,109,112,114,111,118,101,100,32,100,101, - 98,117,103,103,105,110,103,46,10,10,32,32,32,32,65,110, - 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, - 114,97,105,115,101,100,32,105,102,32,116,104,101,32,98,121, - 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,46, - 10,10,32,32,32,32,114,157,0,0,0,233,12,0,0,0, - 114,31,0,0,0,122,22,98,121,116,101,99,111,100,101,32, - 105,115,32,115,116,97,108,101,32,102,111,114,32,114,155,0, - 0,0,78,114,156,0,0,0,41,4,114,43,0,0,0,114, - 146,0,0,0,114,160,0,0,0,114,129,0,0,0,41,6, - 114,42,0,0,0,218,12,115,111,117,114,99,101,95,109,116, - 105,109,101,218,11,115,111,117,114,99,101,95,115,105,122,101, - 114,128,0,0,0,114,162,0,0,0,114,105,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,23, - 95,118,97,108,105,100,97,116,101,95,116,105,109,101,115,116, - 97,109,112,95,112,121,99,66,2,0,0,115,20,0,0,0, - 24,19,10,1,12,1,16,1,8,1,22,1,2,255,22,2, - 8,254,255,128,114,167,0,0,0,99,4,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, - 0,0,115,42,0,0,0,124,0,100,1,100,2,133,2,25, - 0,124,1,107,3,114,19,116,0,100,3,124,2,155,2,157, - 2,102,1,105,0,124,3,164,1,142,1,130,1,100,4,83, - 0,41,5,97,243,1,0,0,86,97,108,105,100,97,116,101, - 32,97,32,104,97,115,104,45,98,97,115,101,100,32,112,121, - 99,32,98,121,32,99,104,101,99,107,105,110,103,32,116,104, - 101,32,114,101,97,108,32,115,111,117,114,99,101,32,104,97, - 115,104,32,97,103,97,105,110,115,116,32,116,104,101,32,111, - 110,101,32,105,110,10,32,32,32,32,116,104,101,32,112,121, - 99,32,104,101,97,100,101,114,46,10,10,32,32,32,32,42, - 100,97,116,97,42,32,105,115,32,116,104,101,32,99,111,110, - 116,101,110,116,115,32,111,102,32,116,104,101,32,112,121,99, - 32,102,105,108,101,46,32,40,79,110,108,121,32,116,104,101, - 32,102,105,114,115,116,32,49,54,32,98,121,116,101,115,32, - 97,114,101,10,32,32,32,32,114,101,113,117,105,114,101,100, - 46,41,10,10,32,32,32,32,42,115,111,117,114,99,101,95, - 104,97,115,104,42,32,105,115,32,116,104,101,32,105,109,112, - 111,114,116,108,105,98,46,117,116,105,108,46,115,111,117,114, - 99,101,95,104,97,115,104,40,41,32,111,102,32,116,104,101, - 32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,32, - 32,32,32,42,110,97,109,101,42,32,105,115,32,116,104,101, - 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100, - 117,108,101,32,98,101,105,110,103,32,105,109,112,111,114,116, - 101,100,46,32,73,116,32,105,115,32,117,115,101,100,32,102, - 111,114,32,108,111,103,103,105,110,103,46,10,10,32,32,32, - 32,42,101,120,99,95,100,101,116,97,105,108,115,42,32,105, - 115,32,97,32,100,105,99,116,105,111,110,97,114,121,32,112, - 97,115,115,101,100,32,116,111,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,102,32,105,116,32,114,97,105,115,101, - 100,32,102,111,114,10,32,32,32,32,105,109,112,114,111,118, - 101,100,32,100,101,98,117,103,103,105,110,103,46,10,10,32, - 32,32,32,65,110,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,32,105,102,32,116, - 104,101,32,98,121,116,101,99,111,100,101,32,105,115,32,115, - 116,97,108,101,46,10,10,32,32,32,32,114,157,0,0,0, - 114,156,0,0,0,122,46,104,97,115,104,32,105,110,32,98, - 121,116,101,99,111,100,101,32,100,111,101,115,110,39,116,32, - 109,97,116,99,104,32,104,97,115,104,32,111,102,32,115,111, - 117,114,99,101,32,78,41,1,114,129,0,0,0,41,4,114, - 42,0,0,0,218,11,115,111,117,114,99,101,95,104,97,115, - 104,114,128,0,0,0,114,162,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,18,95,118,97,108, - 105,100,97,116,101,95,104,97,115,104,95,112,121,99,94,2, - 0,0,115,16,0,0,0,16,17,2,1,8,1,4,255,2, - 2,6,254,4,255,255,128,114,169,0,0,0,99,4,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,67,0,0,0,115,76,0,0,0,116,0,160,1,124,0, - 161,1,125,4,116,2,124,4,116,3,131,2,114,28,116,4, - 160,5,100,1,124,2,161,2,1,0,124,3,100,2,117,1, - 114,26,116,6,160,7,124,4,124,3,161,2,1,0,124,4, - 83,0,116,8,100,3,160,9,124,2,161,1,124,1,124,2, - 100,4,141,3,130,1,41,5,122,35,67,111,109,112,105,108, - 101,32,98,121,116,101,99,111,100,101,32,97,115,32,102,111, - 117,110,100,32,105,110,32,97,32,112,121,99,46,122,21,99, - 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, - 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, - 111,98,106,101,99,116,32,105,110,32,123,33,114,125,169,2, - 114,128,0,0,0,114,58,0,0,0,41,10,218,7,109,97, - 114,115,104,97,108,90,5,108,111,97,100,115,218,10,105,115, - 105,110,115,116,97,110,99,101,218,10,95,99,111,100,101,95, - 116,121,112,101,114,146,0,0,0,114,160,0,0,0,218,4, - 95,105,109,112,90,16,95,102,105,120,95,99,111,95,102,105, - 108,101,110,97,109,101,114,129,0,0,0,114,77,0,0,0, - 41,5,114,42,0,0,0,114,128,0,0,0,114,118,0,0, - 0,114,119,0,0,0,218,4,99,111,100,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,17,95,99,111, - 109,112,105,108,101,95,98,121,116,101,99,111,100,101,118,2, - 0,0,115,20,0,0,0,10,2,10,1,12,1,8,1,12, - 1,4,1,10,2,4,1,6,255,255,128,114,176,0,0,0, - 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,5,0,0,0,67,0,0,0,115,70,0,0,0,116,0, - 116,1,131,1,125,3,124,3,160,2,116,3,100,1,131,1, - 161,1,1,0,124,3,160,2,116,3,124,1,131,1,161,1, - 1,0,124,3,160,2,116,3,124,2,131,1,161,1,1,0, - 124,3,160,2,116,4,160,5,124,0,161,1,161,1,1,0, - 124,3,83,0,41,3,122,43,80,114,111,100,117,99,101,32, - 116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,116, - 105,109,101,115,116,97,109,112,45,98,97,115,101,100,32,112, - 121,99,46,114,0,0,0,0,78,41,6,218,9,98,121,116, - 101,97,114,114,97,121,114,159,0,0,0,218,6,101,120,116, - 101,110,100,114,37,0,0,0,114,171,0,0,0,218,5,100, - 117,109,112,115,41,4,114,175,0,0,0,218,5,109,116,105, - 109,101,114,166,0,0,0,114,42,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,22,95,99,111, - 100,101,95,116,111,95,116,105,109,101,115,116,97,109,112,95, - 112,121,99,131,2,0,0,115,14,0,0,0,8,2,14,1, - 14,1,14,1,16,1,4,1,255,128,114,181,0,0,0,84, - 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,0, - 116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,0, - 125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,0, - 116,4,124,1,131,1,100,2,107,2,115,25,74,0,130,1, - 124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,5, - 160,6,124,0,161,1,161,1,1,0,124,3,83,0,41,4, - 122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,97, - 116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,97, - 115,101,100,32,112,121,99,46,114,3,0,0,0,114,157,0, - 0,0,78,41,7,114,177,0,0,0,114,159,0,0,0,114, - 178,0,0,0,114,37,0,0,0,114,4,0,0,0,114,171, - 0,0,0,114,179,0,0,0,41,5,114,175,0,0,0,114, - 168,0,0,0,90,7,99,104,101,99,107,101,100,114,42,0, - 0,0,114,17,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,17,95,99,111,100,101,95,116,111, - 95,104,97,115,104,95,112,121,99,141,2,0,0,115,16,0, - 0,0,8,2,12,1,14,1,16,1,10,1,16,1,4,1, - 255,128,114,182,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, - 115,62,0,0,0,100,1,100,2,108,0,125,1,116,1,160, - 2,124,0,161,1,106,3,125,2,124,1,160,4,124,2,161, - 1,125,3,116,1,160,5,100,2,100,3,161,2,125,4,124, - 4,160,6,124,0,160,6,124,3,100,1,25,0,161,1,161, - 1,83,0,41,4,122,121,68,101,99,111,100,101,32,98,121, - 116,101,115,32,114,101,112,114,101,115,101,110,116,105,110,103, - 32,115,111,117,114,99,101,32,99,111,100,101,32,97,110,100, - 32,114,101,116,117,114,110,32,116,104,101,32,115,116,114,105, - 110,103,46,10,10,32,32,32,32,85,110,105,118,101,114,115, - 97,108,32,110,101,119,108,105,110,101,32,115,117,112,112,111, - 114,116,32,105,115,32,117,115,101,100,32,105,110,32,116,104, - 101,32,100,101,99,111,100,105,110,103,46,10,32,32,32,32, - 114,0,0,0,0,78,84,41,7,218,8,116,111,107,101,110, - 105,122,101,114,79,0,0,0,90,7,66,121,116,101,115,73, - 79,90,8,114,101,97,100,108,105,110,101,90,15,100,101,116, - 101,99,116,95,101,110,99,111,100,105,110,103,90,25,73,110, - 99,114,101,109,101,110,116,97,108,78,101,119,108,105,110,101, - 68,101,99,111,100,101,114,218,6,100,101,99,111,100,101,41, - 5,218,12,115,111,117,114,99,101,95,98,121,116,101,115,114, - 183,0,0,0,90,21,115,111,117,114,99,101,95,98,121,116, - 101,115,95,114,101,97,100,108,105,110,101,218,8,101,110,99, - 111,100,105,110,103,90,15,110,101,119,108,105,110,101,95,100, - 101,99,111,100,101,114,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,13,100,101,99,111,100,101,95,115,111, - 117,114,99,101,152,2,0,0,115,12,0,0,0,8,5,12, - 1,10,1,12,1,20,1,255,128,114,187,0,0,0,169,2, - 114,151,0,0,0,218,26,115,117,98,109,111,100,117,108,101, - 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, - 115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,0, - 0,0,8,0,0,0,67,0,0,0,115,8,1,0,0,124, - 1,100,1,117,0,114,28,100,2,125,1,116,0,124,2,100, - 3,131,2,114,27,122,7,124,2,160,1,124,0,161,1,125, - 1,87,0,110,14,4,0,116,2,121,131,1,0,1,0,1, - 0,89,0,110,6,110,5,116,3,160,4,124,1,161,1,125, - 1,116,5,106,6,124,0,124,2,124,1,100,4,141,3,125, - 4,100,5,124,4,95,7,124,2,100,1,117,0,114,75,116, - 8,131,0,68,0,93,21,92,2,125,5,125,6,124,1,160, - 9,116,10,124,6,131,1,161,1,114,72,124,5,124,0,124, - 1,131,2,125,2,124,2,124,4,95,11,1,0,113,75,113, - 51,100,1,83,0,124,3,116,12,117,0,114,106,116,0,124, - 2,100,6,131,2,114,105,122,7,124,2,160,13,124,0,161, - 1,125,7,87,0,110,8,4,0,116,2,121,130,1,0,1, - 0,1,0,89,0,110,9,124,7,114,105,103,0,124,4,95, - 14,110,3,124,3,124,4,95,14,124,4,106,14,103,0,107, - 2,114,128,124,1,114,128,116,15,124,1,131,1,100,7,25, - 0,125,8,124,4,106,14,160,16,124,8,161,1,1,0,124, - 4,83,0,119,0,119,0,41,8,97,61,1,0,0,82,101, - 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, - 101,99,32,98,97,115,101,100,32,111,110,32,97,32,102,105, - 108,101,32,108,111,99,97,116,105,111,110,46,10,10,32,32, - 32,32,84,111,32,105,110,100,105,99,97,116,101,32,116,104, - 97,116,32,116,104,101,32,109,111,100,117,108,101,32,105,115, - 32,97,32,112,97,99,107,97,103,101,44,32,115,101,116,10, - 32,32,32,32,115,117,98,109,111,100,117,108,101,95,115,101, - 97,114,99,104,95,108,111,99,97,116,105,111,110,115,32,116, - 111,32,97,32,108,105,115,116,32,111,102,32,100,105,114,101, - 99,116,111,114,121,32,112,97,116,104,115,46,32,32,65,110, - 10,32,32,32,32,101,109,112,116,121,32,108,105,115,116,32, - 105,115,32,115,117,102,102,105,99,105,101,110,116,44,32,116, - 104,111,117,103,104,32,105,116,115,32,110,111,116,32,111,116, - 104,101,114,119,105,115,101,32,117,115,101,102,117,108,32,116, - 111,32,116,104,101,10,32,32,32,32,105,109,112,111,114,116, - 32,115,121,115,116,101,109,46,10,10,32,32,32,32,84,104, - 101,32,108,111,97,100,101,114,32,109,117,115,116,32,116,97, - 107,101,32,97,32,115,112,101,99,32,97,115,32,105,116,115, - 32,111,110,108,121,32,95,95,105,110,105,116,95,95,40,41, - 32,97,114,103,46,10,10,32,32,32,32,78,122,9,60,117, - 110,107,110,111,119,110,62,218,12,103,101,116,95,102,105,108, - 101,110,97,109,101,169,1,218,6,111,114,105,103,105,110,84, - 218,10,105,115,95,112,97,99,107,97,103,101,114,0,0,0, - 0,41,17,114,140,0,0,0,114,190,0,0,0,114,129,0, - 0,0,114,19,0,0,0,114,92,0,0,0,114,146,0,0, - 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95, - 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, - 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, - 101,95,108,111,97,100,101,114,115,114,122,0,0,0,114,123, - 0,0,0,114,151,0,0,0,218,9,95,80,79,80,85,76, - 65,84,69,114,193,0,0,0,114,189,0,0,0,114,61,0, - 0,0,218,6,97,112,112,101,110,100,41,9,114,128,0,0, - 0,90,8,108,111,99,97,116,105,111,110,114,151,0,0,0, - 114,189,0,0,0,218,4,115,112,101,99,218,12,108,111,97, - 100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105, - 120,101,115,114,193,0,0,0,90,7,100,105,114,110,97,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101, - 95,108,111,99,97,116,105,111,110,169,2,0,0,115,74,0, - 0,0,8,12,4,4,10,1,2,2,14,1,12,1,4,1, - 2,251,10,7,16,8,6,1,8,3,14,1,14,1,10,1, - 6,1,4,1,2,253,4,5,8,3,10,2,2,1,14,1, - 12,1,4,1,4,2,6,1,2,128,6,2,10,1,4,1, - 12,1,12,1,4,2,2,244,2,226,255,128,114,201,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,64,0,0,0,115,88,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,100, - 3,90,5,101,6,111,15,100,4,101,7,118,0,90,8,101, - 9,100,5,100,6,132,0,131,1,90,10,101,11,100,7,100, - 8,132,0,131,1,90,12,101,11,100,14,100,10,100,11,132, - 1,131,1,90,13,101,11,100,15,100,12,100,13,132,1,131, - 1,90,14,100,9,83,0,41,16,218,21,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, - 101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,100, - 101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,87, - 105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,46, - 122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,111, - 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, - 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, - 101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,83, - 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, - 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, - 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, - 123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,103, - 122,6,95,100,46,112,121,100,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,8,0,0,0,67,0,0, - 0,115,50,0,0,0,122,8,116,0,160,1,116,0,106,2, - 124,0,161,2,87,0,83,0,4,0,116,3,121,24,1,0, - 1,0,1,0,116,0,160,1,116,0,106,4,124,0,161,2, - 6,0,89,0,83,0,119,0,114,121,0,0,0,41,5,218, - 6,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, - 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,64,0,0,0,90,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,114,20,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,121, - 249,2,0,0,115,12,0,0,0,2,2,16,1,12,1,18, - 1,2,255,255,128,122,36,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,95,111,112, - 101,110,95,114,101,103,105,115,116,114,121,99,2,0,0,0, - 0,0,0,0,0,0,0,0,6,0,0,0,8,0,0,0, - 67,0,0,0,115,130,0,0,0,124,0,106,0,114,7,124, - 0,106,1,125,2,110,3,124,0,106,2,125,2,124,2,106, - 3,124,1,100,1,116,4,106,5,100,0,100,2,133,2,25, - 0,22,0,100,3,141,2,125,3,122,30,124,0,160,6,124, - 3,161,1,143,14,125,4,116,7,160,8,124,4,100,4,161, - 2,125,5,87,0,100,0,4,0,4,0,131,3,1,0,110, - 8,49,0,115,47,119,1,1,0,1,0,1,0,89,0,1, - 0,87,0,124,5,83,0,4,0,116,9,121,64,1,0,1, - 0,1,0,89,0,100,0,83,0,119,0,41,5,78,122,5, - 37,100,46,37,100,114,45,0,0,0,41,2,114,150,0,0, - 0,90,11,115,121,115,95,118,101,114,115,105,111,110,114,10, - 0,0,0,41,10,218,11,68,69,66,85,71,95,66,85,73, - 76,68,218,18,82,69,71,73,83,84,82,89,95,75,69,89, - 95,68,69,66,85,71,218,12,82,69,71,73,83,84,82,89, - 95,75,69,89,114,77,0,0,0,114,16,0,0,0,218,12, - 118,101,114,115,105,111,110,95,105,110,102,111,114,204,0,0, - 0,114,203,0,0,0,90,10,81,117,101,114,121,86,97,108, - 117,101,114,64,0,0,0,41,6,218,3,99,108,115,114,150, - 0,0,0,90,12,114,101,103,105,115,116,114,121,95,107,101, - 121,114,21,0,0,0,90,4,104,107,101,121,218,8,102,105, - 108,101,112,97,116,104,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,16,95,115,101,97,114,99,104,95,114, - 101,103,105,115,116,114,121,0,3,0,0,115,30,0,0,0, - 6,2,8,1,6,2,6,1,16,1,6,255,2,2,12,1, - 26,1,18,128,4,3,12,254,6,1,2,255,255,128,122,38, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,46,95,115,101,97,114,99,104,95,114,101, - 103,105,115,116,114,121,78,99,4,0,0,0,0,0,0,0, - 0,0,0,0,8,0,0,0,8,0,0,0,67,0,0,0, - 115,120,0,0,0,124,0,160,0,124,1,161,1,125,4,124, - 4,100,0,117,0,114,11,100,0,83,0,122,6,116,1,124, - 4,131,1,1,0,87,0,110,9,4,0,116,2,121,59,1, - 0,1,0,1,0,89,0,100,0,83,0,116,3,131,0,68, - 0,93,26,92,2,125,5,125,6,124,4,160,4,116,5,124, - 6,131,1,161,1,114,56,116,6,106,7,124,1,124,5,124, - 1,124,4,131,2,124,4,100,1,141,3,125,7,124,7,2, - 0,1,0,83,0,113,30,100,0,83,0,119,0,41,2,78, - 114,191,0,0,0,41,8,114,211,0,0,0,114,63,0,0, - 0,114,64,0,0,0,114,195,0,0,0,114,122,0,0,0, - 114,123,0,0,0,114,146,0,0,0,218,16,115,112,101,99, - 95,102,114,111,109,95,108,111,97,100,101,114,41,8,114,209, - 0,0,0,114,150,0,0,0,114,58,0,0,0,218,6,116, - 97,114,103,101,116,114,210,0,0,0,114,151,0,0,0,114, - 200,0,0,0,114,198,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,9,102,105,110,100,95,115, - 112,101,99,15,3,0,0,115,36,0,0,0,10,2,8,1, - 4,1,2,1,12,1,12,1,6,1,14,1,14,1,6,1, - 8,1,2,1,6,254,8,3,2,252,4,255,2,254,255,128, - 122,31,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, - 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124, - 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,117, - 1,114,13,124,3,106,1,83,0,100,1,83,0,41,2,122, - 108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,109, - 101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,116, - 114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,169,2, - 114,214,0,0,0,114,151,0,0,0,169,4,114,209,0,0, - 0,114,150,0,0,0,114,58,0,0,0,114,198,0,0,0, + 11,95,112,97,116,104,95,105,115,100,105,114,136,0,0,0, + 115,8,0,0,0,4,2,8,1,10,1,255,128,114,70,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,26,0,0,0, + 124,0,160,0,116,1,161,1,112,12,124,0,100,1,100,2, + 133,2,25,0,116,2,118,0,83,0,41,4,122,142,82,101, + 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, + 46,112,97,116,104,46,105,115,97,98,115,46,10,10,32,32, + 32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,105, + 110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,97, + 116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,114, + 105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,32, + 119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,32, + 32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,115, + 111,108,117,116,101,34,46,10,32,32,32,32,114,3,0,0, + 0,233,3,0,0,0,78,41,3,114,26,0,0,0,114,47, + 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119, + 105,116,104,95,99,111,108,111,110,114,61,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, + 112,97,116,104,95,105,115,97,98,115,143,0,0,0,115,4, + 0,0,0,26,6,255,128,114,73,0,0,0,233,182,1,0, + 0,99,3,0,0,0,0,0,0,0,0,0,0,0,6,0, + 0,0,11,0,0,0,67,0,0,0,115,170,0,0,0,100, + 1,160,0,124,0,116,1,124,0,131,1,161,2,125,3,116, + 2,160,3,124,3,116,2,106,4,116,2,106,5,66,0,116, + 2,106,6,66,0,124,2,100,2,64,0,161,3,125,4,122, + 36,116,7,160,8,124,4,100,3,161,2,143,13,125,5,124, + 5,160,9,124,1,161,1,1,0,87,0,100,4,4,0,4, + 0,131,3,1,0,110,8,49,0,115,47,119,1,1,0,1, + 0,1,0,89,0,1,0,116,2,160,10,124,3,124,0,161, + 2,1,0,87,0,100,4,83,0,4,0,116,11,121,84,1, + 0,1,0,1,0,122,7,116,2,160,12,124,3,161,1,1, + 0,87,0,130,0,4,0,116,11,121,83,1,0,1,0,1, + 0,89,0,130,0,119,0,119,0,41,5,122,162,66,101,115, + 116,45,101,102,102,111,114,116,32,102,117,110,99,116,105,111, + 110,32,116,111,32,119,114,105,116,101,32,100,97,116,97,32, + 116,111,32,97,32,112,97,116,104,32,97,116,111,109,105,99, + 97,108,108,121,46,10,32,32,32,32,66,101,32,112,114,101, + 112,97,114,101,100,32,116,111,32,104,97,110,100,108,101,32, + 97,32,70,105,108,101,69,120,105,115,116,115,69,114,114,111, + 114,32,105,102,32,99,111,110,99,117,114,114,101,110,116,32, + 119,114,105,116,105,110,103,32,111,102,32,116,104,101,10,32, + 32,32,32,116,101,109,112,111,114,97,114,121,32,102,105,108, + 101,32,105,115,32,97,116,116,101,109,112,116,101,100,46,250, + 5,123,125,46,123,125,114,74,0,0,0,90,2,119,98,78, + 41,13,218,6,102,111,114,109,97,116,218,2,105,100,114,18, + 0,0,0,90,4,111,112,101,110,90,6,79,95,69,88,67, + 76,90,7,79,95,67,82,69,65,84,90,8,79,95,87,82, + 79,78,76,89,218,3,95,105,111,218,6,70,105,108,101,73, + 79,218,5,119,114,105,116,101,218,7,114,101,112,108,97,99, + 101,114,63,0,0,0,90,6,117,110,108,105,110,107,41,6, + 114,57,0,0,0,114,41,0,0,0,114,65,0,0,0,90, + 8,112,97,116,104,95,116,109,112,90,2,102,100,218,4,102, + 105,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,13,95,119,114,105,116,101,95,97,116,111,109,105, + 99,152,0,0,0,115,38,0,0,0,16,5,6,1,22,1, + 4,255,2,2,14,3,24,1,16,128,18,1,12,1,2,1, + 12,1,2,3,12,254,2,1,2,1,2,254,2,253,255,128, + 114,83,0,0,0,105,107,13,0,0,114,44,0,0,0,114, + 32,0,0,0,115,2,0,0,0,13,10,90,11,95,95,112, + 121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,3, + 46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,41, + 1,218,12,111,112,116,105,109,105,122,97,116,105,111,110,99, + 2,0,0,0,0,0,0,0,1,0,0,0,12,0,0,0, + 5,0,0,0,67,0,0,0,115,80,1,0,0,124,1,100, + 1,117,1,114,26,116,0,160,1,100,2,116,2,161,2,1, + 0,124,2,100,1,117,1,114,20,100,3,125,3,116,3,124, + 3,131,1,130,1,124,1,114,24,100,4,110,1,100,5,125, + 2,116,4,160,5,124,0,161,1,125,0,116,6,124,0,131, + 1,92,2,125,4,125,5,124,5,160,7,100,6,161,1,92, + 3,125,6,125,7,125,8,116,8,106,9,106,10,125,9,124, + 9,100,1,117,0,114,57,116,11,100,7,131,1,130,1,100, + 4,160,12,124,6,114,63,124,6,110,1,124,8,124,7,124, + 9,103,3,161,1,125,10,124,2,100,1,117,0,114,86,116, + 8,106,13,106,14,100,8,107,2,114,82,100,4,125,2,110, + 4,116,8,106,13,106,14,125,2,116,15,124,2,131,1,125, + 2,124,2,100,4,107,3,114,112,124,2,160,16,161,0,115, + 105,116,17,100,9,160,18,124,2,161,1,131,1,130,1,100, + 10,160,18,124,10,116,19,124,2,161,3,125,10,124,10,116, + 20,100,8,25,0,23,0,125,11,116,8,106,21,100,1,117, + 1,114,162,116,22,124,4,131,1,115,134,116,23,116,4,160, + 24,161,0,124,4,131,2,125,4,124,4,100,5,25,0,100, + 11,107,2,114,152,124,4,100,8,25,0,116,25,118,1,114, + 152,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116, + 8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83, + 0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,97, + 254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,101, + 44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,105, + 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, + 32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,110, + 101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,104, + 105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,110, + 115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,32, + 99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,102, + 32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,101, + 114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,32, + 32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,116, + 105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,99, + 111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,115, + 117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,111, + 110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,116, + 104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,44, + 32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,114, + 101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,111, + 102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105, + 115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,105, + 102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,97, + 110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,97, + 108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,32, + 114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,104, + 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110, + 111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,84, + 114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,101, + 32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,103, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,114, + 105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,32, + 70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,101, + 113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116, + 116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,32, + 32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, + 32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111, + 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, + 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, + 32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101, + 114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59, + 32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,111, + 112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,116, + 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,114, + 10,0,0,0,114,3,0,0,0,218,1,46,250,36,115,121, + 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, + 110,101,114,0,0,0,0,122,24,123,33,114,125,32,105,115, + 32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,105, + 99,122,7,123,125,46,123,125,123,125,114,11,0,0,0,114, + 44,0,0,0,41,28,218,9,95,119,97,114,110,105,110,103, + 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, + 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, + 101,69,114,114,111,114,114,18,0,0,0,218,6,102,115,112, + 97,116,104,114,60,0,0,0,114,54,0,0,0,114,15,0, + 0,0,218,14,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,218,9,99,97,99,104,101,95,116,97,103,218,19,78, + 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, + 111,114,114,51,0,0,0,114,16,0,0,0,218,8,111,112, + 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, + 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, + 114,76,0,0,0,218,4,95,79,80,84,218,17,66,89,84, + 69,67,79,68,69,95,83,85,70,70,73,88,69,83,218,14, + 112,121,99,97,99,104,101,95,112,114,101,102,105,120,114,73, + 0,0,0,114,53,0,0,0,114,69,0,0,0,114,47,0, + 0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,67, + 65,67,72,69,41,12,114,57,0,0,0,90,14,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,114,84,0,0,0, + 218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,114, + 59,0,0,0,90,4,98,97,115,101,114,6,0,0,0,218, + 4,114,101,115,116,90,3,116,97,103,90,15,97,108,109,111, + 115,116,95,102,105,108,101,110,97,109,101,218,8,102,105,108, + 101,110,97,109,101,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,17,99,97,99,104,101,95,102,114,111,109, + 95,115,111,117,114,99,101,88,1,0,0,115,74,0,0,0, + 8,18,6,1,2,1,4,255,8,2,4,1,8,1,12,1, + 10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,1, + 12,1,6,1,8,2,8,1,8,1,8,1,14,1,14,1, + 12,1,10,1,8,9,14,1,24,5,12,1,2,4,4,1, + 8,1,2,1,4,253,12,5,255,128,114,108,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, + 5,0,0,0,67,0,0,0,115,40,1,0,0,116,0,106, + 1,106,2,100,1,117,0,114,10,116,3,100,2,131,1,130, + 1,116,4,160,5,124,0,161,1,125,0,116,6,124,0,131, + 1,92,2,125,1,125,2,100,3,125,3,116,0,106,7,100, + 1,117,1,114,51,116,0,106,7,160,8,116,9,161,1,125, + 4,124,1,160,10,124,4,116,11,23,0,161,1,114,51,124, + 1,116,12,124,4,131,1,100,1,133,2,25,0,125,1,100, + 4,125,3,124,3,115,72,116,6,124,1,131,1,92,2,125, + 1,125,5,124,5,116,13,107,3,114,72,116,14,116,13,155, + 0,100,5,124,0,155,2,157,3,131,1,130,1,124,2,160, + 15,100,6,161,1,125,6,124,6,100,7,118,1,114,88,116, + 14,100,8,124,2,155,2,157,2,131,1,130,1,124,6,100, + 9,107,2,114,132,124,2,160,16,100,6,100,10,161,2,100, + 11,25,0,125,7,124,7,160,10,116,17,161,1,115,112,116, + 14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,116, + 12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,160, + 18,161,0,115,132,116,14,100,13,124,7,155,2,100,14,157, + 3,131,1,130,1,124,2,160,19,100,6,161,1,100,15,25, + 0,125,9,116,20,124,1,124,9,116,21,100,15,25,0,23, + 0,131,2,83,0,41,16,97,110,1,0,0,71,105,118,101, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,97,32, + 46,112,121,99,46,32,102,105,108,101,44,32,114,101,116,117, + 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105, + 116,115,32,46,112,121,32,102,105,108,101,46,10,10,32,32, + 32,32,84,104,101,32,46,112,121,99,32,102,105,108,101,32, + 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, + 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, + 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, + 112,97,116,104,32,116,111,10,32,32,32,32,116,104,101,32, + 46,112,121,32,102,105,108,101,32,99,97,108,99,117,108,97, + 116,101,100,32,116,111,32,99,111,114,114,101,115,112,111,110, + 100,32,116,111,32,116,104,101,32,46,112,121,99,32,102,105, + 108,101,46,32,32,73,102,32,112,97,116,104,32,100,111,101, + 115,10,32,32,32,32,110,111,116,32,99,111,110,102,111,114, + 109,32,116,111,32,80,69,80,32,51,49,52,55,47,52,56, + 56,32,102,111,114,109,97,116,44,32,86,97,108,117,101,69, + 114,114,111,114,32,119,105,108,108,32,98,101,32,114,97,105, + 115,101,100,46,32,73,102,10,32,32,32,32,115,121,115,46, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,99, + 97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,101, + 32,116,104,101,110,32,78,111,116,73,109,112,108,101,109,101, + 110,116,101,100,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,46,10,10,32,32,32,32,78,114,86,0,0,0, + 70,84,122,31,32,110,111,116,32,98,111,116,116,111,109,45, + 108,101,118,101,108,32,100,105,114,101,99,116,111,114,121,32, + 105,110,32,114,85,0,0,0,62,2,0,0,0,114,44,0, + 0,0,114,71,0,0,0,122,29,101,120,112,101,99,116,101, + 100,32,111,110,108,121,32,50,32,111,114,32,51,32,100,111, + 116,115,32,105,110,32,114,71,0,0,0,114,44,0,0,0, + 233,254,255,255,255,122,53,111,112,116,105,109,105,122,97,116, + 105,111,110,32,112,111,114,116,105,111,110,32,111,102,32,102, + 105,108,101,110,97,109,101,32,100,111,101,115,32,110,111,116, + 32,115,116,97,114,116,32,119,105,116,104,32,122,19,111,112, + 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, + 32,122,29,32,105,115,32,110,111,116,32,97,110,32,97,108, + 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, + 114,0,0,0,0,41,22,114,15,0,0,0,114,92,0,0, + 0,114,93,0,0,0,114,94,0,0,0,114,18,0,0,0, + 114,91,0,0,0,114,60,0,0,0,114,101,0,0,0,114, + 46,0,0,0,114,47,0,0,0,114,26,0,0,0,114,50, + 0,0,0,114,4,0,0,0,114,103,0,0,0,114,98,0, + 0,0,218,5,99,111,117,110,116,114,56,0,0,0,114,99, + 0,0,0,114,97,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,53,0,0,0,218,15,83,79,85,82,67,69, + 95,83,85,70,70,73,88,69,83,41,10,114,57,0,0,0, + 114,105,0,0,0,90,16,112,121,99,97,99,104,101,95,102, + 105,108,101,110,97,109,101,90,23,102,111,117,110,100,95,105, + 110,95,112,121,99,97,99,104,101,95,112,114,101,102,105,120, + 90,13,115,116,114,105,112,112,101,100,95,112,97,116,104,90, + 7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,111, + 117,110,116,114,84,0,0,0,90,9,111,112,116,95,108,101, + 118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,97, + 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,99, + 97,99,104,101,159,1,0,0,115,62,0,0,0,12,9,8, + 1,10,1,12,1,4,1,10,1,12,1,14,1,16,1,4, + 1,4,1,12,1,8,1,8,1,2,1,8,255,10,2,8, + 1,14,1,8,1,16,1,10,1,4,1,2,1,8,255,16, + 2,8,1,16,1,14,2,18,1,255,128,114,113,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,9,0,0,0,67,0,0,0,115,122,0,0,0,116,0, + 124,0,131,1,100,1,107,2,114,8,100,2,83,0,124,0, + 160,1,100,3,161,1,92,3,125,1,125,2,125,3,124,1, + 114,28,124,3,160,2,161,0,100,4,100,5,133,2,25,0, + 100,6,107,3,114,30,124,0,83,0,122,6,116,3,124,0, + 131,1,125,4,87,0,110,15,4,0,116,4,116,5,102,2, + 121,60,1,0,1,0,1,0,124,0,100,2,100,5,133,2, + 25,0,125,4,89,0,116,6,124,4,131,1,114,58,124,4, + 83,0,124,0,83,0,119,0,41,7,122,188,67,111,110,118, + 101,114,116,32,97,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,32,112,97,116,104,32,116,111,32,97,32,115,111, + 117,114,99,101,32,112,97,116,104,32,40,105,102,32,112,111, + 115,115,105,98,108,101,41,46,10,10,32,32,32,32,84,104, + 105,115,32,102,117,110,99,116,105,111,110,32,101,120,105,115, + 116,115,32,112,117,114,101,108,121,32,102,111,114,32,98,97, + 99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,98, + 105,108,105,116,121,32,102,111,114,10,32,32,32,32,80,121, + 73,109,112,111,114,116,95,69,120,101,99,67,111,100,101,77, + 111,100,117,108,101,87,105,116,104,70,105,108,101,110,97,109, + 101,115,40,41,32,105,110,32,116,104,101,32,67,32,65,80, + 73,46,10,10,32,32,32,32,114,0,0,0,0,78,114,85, + 0,0,0,233,253,255,255,255,233,255,255,255,255,90,2,112, + 121,41,7,114,4,0,0,0,114,54,0,0,0,218,5,108, + 111,119,101,114,114,113,0,0,0,114,94,0,0,0,114,98, + 0,0,0,114,67,0,0,0,41,5,218,13,98,121,116,101, + 99,111,100,101,95,112,97,116,104,114,106,0,0,0,114,58, + 0,0,0,90,9,101,120,116,101,110,115,105,111,110,218,11, + 115,111,117,114,99,101,95,112,97,116,104,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,15,95,103,101,116, + 95,115,111,117,114,99,101,102,105,108,101,199,1,0,0,115, + 24,0,0,0,12,7,4,1,16,1,24,1,4,1,2,1, + 12,1,16,1,14,1,16,1,2,254,255,128,114,119,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,8,0,0,0,67,0,0,0,115,68,0,0,0,124, + 0,160,0,116,1,116,2,131,1,161,1,114,22,122,5,116, + 3,124,0,131,1,87,0,83,0,4,0,116,4,121,33,1, + 0,1,0,1,0,89,0,100,0,83,0,124,0,160,0,116, + 1,116,5,131,1,161,1,114,31,124,0,83,0,100,0,83, + 0,119,0,169,1,78,41,6,218,8,101,110,100,115,119,105, + 116,104,218,5,116,117,112,108,101,114,112,0,0,0,114,108, + 0,0,0,114,94,0,0,0,114,100,0,0,0,41,1,114, + 107,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, + 218,1,0,0,115,20,0,0,0,14,1,2,1,10,1,12, + 1,6,1,14,1,4,1,4,2,2,251,255,128,114,123,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,8,0,0,0,67,0,0,0,115,48,0,0,0, + 122,7,116,0,124,0,131,1,106,1,125,1,87,0,110,9, + 4,0,116,2,121,23,1,0,1,0,1,0,100,1,125,1, + 89,0,124,1,100,2,79,0,125,1,124,1,83,0,119,0, + 41,4,122,51,67,97,108,99,117,108,97,116,101,32,116,104, + 101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,111, + 110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,46,114,74,0,0,0,233,128,0,0, + 0,78,41,3,114,62,0,0,0,114,64,0,0,0,114,63, + 0,0,0,41,2,114,57,0,0,0,114,65,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, + 95,99,97,108,99,95,109,111,100,101,230,1,0,0,115,16, + 0,0,0,2,2,14,1,12,1,6,1,8,3,4,1,2, + 251,255,128,114,125,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,3,0,0, + 0,115,52,0,0,0,100,6,135,0,102,1,100,2,100,3, + 132,9,125,1,116,0,100,1,117,1,114,15,116,0,106,1, + 125,2,110,4,100,4,100,5,132,0,125,2,124,2,124,1, + 136,0,131,2,1,0,124,1,83,0,41,7,122,252,68,101, + 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102, + 121,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, + 101,32,98,101,105,110,103,32,114,101,113,117,101,115,116,101, + 100,32,109,97,116,99,104,101,115,32,116,104,101,32,111,110, + 101,32,116,104,101,10,32,32,32,32,108,111,97,100,101,114, + 32,99,97,110,32,104,97,110,100,108,101,46,10,10,32,32, + 32,32,84,104,101,32,102,105,114,115,116,32,97,114,103,117, + 109,101,110,116,32,40,115,101,108,102,41,32,109,117,115,116, + 32,100,101,102,105,110,101,32,95,110,97,109,101,32,119,104, + 105,99,104,32,116,104,101,32,115,101,99,111,110,100,32,97, + 114,103,117,109,101,110,116,32,105,115,10,32,32,32,32,99, + 111,109,112,97,114,101,100,32,97,103,97,105,110,115,116,46, + 32,73,102,32,116,104,101,32,99,111,109,112,97,114,105,115, + 111,110,32,102,97,105,108,115,32,116,104,101,110,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,46,10,10,32,32,32,32,78,99,2,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 31,0,0,0,115,72,0,0,0,124,1,100,0,117,0,114, + 8,124,0,106,0,125,1,110,16,124,0,106,0,124,1,107, + 3,114,24,116,1,100,1,124,0,106,0,124,1,102,2,22, + 0,124,1,100,2,141,2,130,1,136,0,124,0,124,1,103, + 2,124,2,162,1,82,0,105,0,124,3,164,1,142,1,83, + 0,41,3,78,122,30,108,111,97,100,101,114,32,102,111,114, + 32,37,115,32,99,97,110,110,111,116,32,104,97,110,100,108, + 101,32,37,115,169,1,218,4,110,97,109,101,41,2,114,127, + 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, + 41,4,218,4,115,101,108,102,114,127,0,0,0,218,4,97, + 114,103,115,218,6,107,119,97,114,103,115,169,1,218,6,109, + 101,116,104,111,100,114,7,0,0,0,114,8,0,0,0,218, + 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, + 112,112,101,114,250,1,0,0,115,20,0,0,0,8,1,8, + 1,10,1,4,1,8,1,2,255,2,1,6,255,24,2,255, + 128,122,40,95,99,104,101,99,107,95,110,97,109,101,46,60, + 108,111,99,97,108,115,62,46,95,99,104,101,99,107,95,110, + 97,109,101,95,119,114,97,112,112,101,114,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, + 83,0,0,0,115,56,0,0,0,100,1,68,0,93,16,125, + 2,116,0,124,1,124,2,131,2,114,18,116,1,124,0,124, + 2,116,2,124,1,124,2,131,2,131,3,1,0,113,2,124, + 0,106,3,160,4,124,1,106,3,161,1,1,0,100,0,83, + 0,41,2,78,41,4,218,10,95,95,109,111,100,117,108,101, + 95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,95, + 113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,111, + 99,95,95,41,5,218,7,104,97,115,97,116,116,114,218,7, + 115,101,116,97,116,116,114,218,7,103,101,116,97,116,116,114, + 218,8,95,95,100,105,99,116,95,95,218,6,117,112,100,97, + 116,101,41,3,90,3,110,101,119,90,3,111,108,100,114,81, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,5,95,119,114,97,112,7,2,0,0,115,12,0, + 0,0,8,1,10,1,18,1,2,128,18,1,255,128,122,26, + 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, + 97,108,115,62,46,95,119,114,97,112,41,1,78,41,2,218, + 10,95,98,111,111,116,115,116,114,97,112,114,144,0,0,0, + 41,3,114,133,0,0,0,114,134,0,0,0,114,144,0,0, + 0,114,7,0,0,0,114,132,0,0,0,114,8,0,0,0, + 218,11,95,99,104,101,99,107,95,110,97,109,101,242,1,0, + 0,115,14,0,0,0,14,8,8,10,8,1,8,2,10,6, + 4,1,255,128,114,146,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, + 0,0,115,60,0,0,0,124,0,160,0,124,1,161,1,92, + 2,125,2,125,3,124,2,100,1,117,0,114,28,116,1,124, + 3,131,1,114,28,100,2,125,4,116,2,160,3,124,4,160, + 4,124,3,100,3,25,0,161,1,116,5,161,2,1,0,124, + 2,83,0,41,4,122,155,84,114,121,32,116,111,32,102,105, + 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,117,108,101,32,98,121,32,100,101,108,101,103,97,116,105, + 110,103,32,116,111,10,32,32,32,32,115,101,108,102,46,102, + 105,110,100,95,108,111,97,100,101,114,40,41,46,10,10,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,105,110,32, + 102,97,118,111,114,32,111,102,32,102,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,40,41,46,10,10,32,32, + 32,32,78,122,44,78,111,116,32,105,109,112,111,114,116,105, + 110,103,32,100,105,114,101,99,116,111,114,121,32,123,125,58, + 32,109,105,115,115,105,110,103,32,95,95,105,110,105,116,95, + 95,114,0,0,0,0,41,6,218,11,102,105,110,100,95,108, + 111,97,100,101,114,114,4,0,0,0,114,87,0,0,0,114, + 88,0,0,0,114,76,0,0,0,218,13,73,109,112,111,114, + 116,87,97,114,110,105,110,103,41,5,114,129,0,0,0,218, + 8,102,117,108,108,110,97,109,101,218,6,108,111,97,100,101, + 114,218,8,112,111,114,116,105,111,110,115,218,3,109,115,103, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,31,3,0,0, - 115,10,0,0,0,12,7,8,1,6,1,4,2,255,128,122, - 33,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, - 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, - 108,101,41,2,78,78,41,1,78,41,15,114,137,0,0,0, - 114,136,0,0,0,114,138,0,0,0,114,139,0,0,0,114, - 207,0,0,0,114,206,0,0,0,218,11,95,77,83,95,87, - 73,78,68,79,87,83,218,18,69,88,84,69,78,83,73,79, - 78,95,83,85,70,70,73,88,69,83,114,205,0,0,0,218, - 12,115,116,97,116,105,99,109,101,116,104,111,100,114,204,0, - 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, - 211,0,0,0,114,214,0,0,0,114,217,0,0,0,114,7, + 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, + 105,109,17,2,0,0,115,12,0,0,0,14,10,16,1,4, + 1,22,1,4,1,255,128,114,153,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, + 0,67,0,0,0,115,166,0,0,0,124,0,100,1,100,2, + 133,2,25,0,125,3,124,3,116,0,107,3,114,32,100,3, + 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,1, + 160,2,100,5,124,4,161,2,1,0,116,3,124,4,102,1, + 105,0,124,2,164,1,142,1,130,1,116,4,124,0,131,1, + 100,6,107,0,114,53,100,7,124,1,155,2,157,2,125,4, + 116,1,160,2,100,5,124,4,161,2,1,0,116,5,124,4, + 131,1,130,1,116,6,124,0,100,2,100,8,133,2,25,0, + 131,1,125,5,124,5,100,9,64,0,114,81,100,10,124,5, + 155,2,100,11,124,1,155,2,157,4,125,4,116,3,124,4, + 102,1,105,0,124,2,164,1,142,1,130,1,124,5,83,0, + 41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,98, + 97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,104, + 101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,32, + 104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,114, + 110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,108, + 100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,116, + 101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32, + 112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,117, + 114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,32, + 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, + 99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,32, + 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, + 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, + 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, + 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, + 32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,117, + 103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,42, + 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, + 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, + 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, + 32,117,115,101,100,32,102,111,114,32,108,111,103,103,105,110, + 103,46,10,10,32,32,32,32,42,101,120,99,95,100,101,116, + 97,105,108,115,42,32,105,115,32,97,32,100,105,99,116,105, + 111,110,97,114,121,32,112,97,115,115,101,100,32,116,111,32, + 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,105, + 116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,32, + 32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,103, + 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, + 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, + 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, + 99,116,32,111,114,32,119,104,101,110,32,116,104,101,32,102, + 108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,105, + 115,32,105,110,118,97,108,105,100,46,32,69,79,70,69,114, + 114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,104, + 101,110,32,116,104,101,32,100,97,116,97,32,105,115,32,102, + 111,117,110,100,32,116,111,32,98,101,32,116,114,117,110,99, + 97,116,101,100,46,10,10,32,32,32,32,78,114,31,0,0, + 0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,109, + 98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,233, + 16,0,0,0,122,40,114,101,97,99,104,101,100,32,69,79, + 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, + 112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,8, + 0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,105, + 100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,7, + 218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,145, + 0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,101, + 115,115,97,103,101,114,128,0,0,0,114,4,0,0,0,218, + 8,69,79,70,69,114,114,111,114,114,42,0,0,0,41,6, + 114,41,0,0,0,114,127,0,0,0,218,11,101,120,99,95, + 100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,104, + 0,0,0,114,16,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,13,95,99,108,97,115,115,105, + 102,121,95,112,121,99,34,2,0,0,115,30,0,0,0,12, + 16,8,1,16,1,12,1,16,1,12,1,10,1,12,1,8, + 1,16,1,8,2,16,1,16,1,4,1,255,128,114,162,0, + 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,4,0,0,0,67,0,0,0,115,124,0,0,0, + 116,0,124,0,100,1,100,2,133,2,25,0,131,1,124,1, + 100,3,64,0,107,3,114,31,100,4,124,3,155,2,157,2, + 125,5,116,1,160,2,100,5,124,5,161,2,1,0,116,3, + 124,5,102,1,105,0,124,4,164,1,142,1,130,1,124,2, + 100,6,117,1,114,60,116,0,124,0,100,2,100,7,133,2, + 25,0,131,1,124,2,100,3,64,0,107,3,114,58,116,3, + 100,4,124,3,155,2,157,2,102,1,105,0,124,4,164,1, + 142,1,130,1,100,6,83,0,100,6,83,0,41,8,97,7, + 2,0,0,86,97,108,105,100,97,116,101,32,97,32,112,121, + 99,32,97,103,97,105,110,115,116,32,116,104,101,32,115,111, + 117,114,99,101,32,108,97,115,116,45,109,111,100,105,102,105, + 101,100,32,116,105,109,101,46,10,10,32,32,32,32,42,100, + 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116, + 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32, + 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32, + 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97, + 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46, + 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,109, + 116,105,109,101,42,32,105,115,32,116,104,101,32,108,97,115, + 116,32,109,111,100,105,102,105,101,100,32,116,105,109,101,115, + 116,97,109,112,32,111,102,32,116,104,101,32,115,111,117,114, + 99,101,32,102,105,108,101,46,10,10,32,32,32,32,42,115, + 111,117,114,99,101,95,115,105,122,101,42,32,105,115,32,78, + 111,110,101,32,111,114,32,116,104,101,32,115,105,122,101,32, + 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, + 108,101,32,105,110,32,98,121,116,101,115,46,10,10,32,32, + 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, + 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, + 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, + 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, + 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, + 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, + 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, + 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, + 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, + 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, + 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104, + 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116, + 97,108,101,46,10,10,32,32,32,32,114,156,0,0,0,233, + 12,0,0,0,114,30,0,0,0,122,22,98,121,116,101,99, + 111,100,101,32,105,115,32,115,116,97,108,101,32,102,111,114, + 32,114,154,0,0,0,78,114,155,0,0,0,41,4,114,42, + 0,0,0,114,145,0,0,0,114,159,0,0,0,114,128,0, + 0,0,41,6,114,41,0,0,0,218,12,115,111,117,114,99, + 101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95, + 115,105,122,101,114,127,0,0,0,114,161,0,0,0,114,104, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,202,0,0,0,237,2,0,0,115,32,0,0,0, - 8,0,4,2,2,3,2,255,2,4,2,255,12,3,2,2, - 10,1,2,6,10,1,2,14,12,1,2,15,16,1,255,128, - 114,202,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,48, + 0,0,218,23,95,118,97,108,105,100,97,116,101,95,116,105, + 109,101,115,116,97,109,112,95,112,121,99,67,2,0,0,115, + 20,0,0,0,24,19,10,1,12,1,16,1,8,1,22,1, + 2,255,22,2,8,254,255,128,114,166,0,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,42,0,0,0,124,0,100,1,100, + 2,133,2,25,0,124,1,107,3,114,19,116,0,100,3,124, + 2,155,2,157,2,102,1,105,0,124,3,164,1,142,1,130, + 1,100,4,83,0,41,5,97,243,1,0,0,86,97,108,105, + 100,97,116,101,32,97,32,104,97,115,104,45,98,97,115,101, + 100,32,112,121,99,32,98,121,32,99,104,101,99,107,105,110, + 103,32,116,104,101,32,114,101,97,108,32,115,111,117,114,99, + 101,32,104,97,115,104,32,97,103,97,105,110,115,116,32,116, + 104,101,32,111,110,101,32,105,110,10,32,32,32,32,116,104, + 101,32,112,121,99,32,104,101,97,100,101,114,46,10,10,32, + 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, + 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, + 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, + 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, + 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, + 105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,117, + 114,99,101,95,104,97,115,104,42,32,105,115,32,116,104,101, + 32,105,109,112,111,114,116,108,105,98,46,117,116,105,108,46, + 115,111,117,114,99,101,95,104,97,115,104,40,41,32,111,102, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, + 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, + 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, + 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, + 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, + 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, + 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, + 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, + 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, + 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, + 46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, + 105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,32, + 105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,114, + 156,0,0,0,114,155,0,0,0,122,46,104,97,115,104,32, + 105,110,32,98,121,116,101,99,111,100,101,32,100,111,101,115, + 110,39,116,32,109,97,116,99,104,32,104,97,115,104,32,111, + 102,32,115,111,117,114,99,101,32,78,41,1,114,128,0,0, + 0,41,4,114,41,0,0,0,218,11,115,111,117,114,99,101, + 95,104,97,115,104,114,127,0,0,0,114,161,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,18, + 95,118,97,108,105,100,97,116,101,95,104,97,115,104,95,112, + 121,99,95,2,0,0,115,16,0,0,0,16,17,2,1,8, + 1,4,255,2,2,6,254,4,255,255,128,114,168,0,0,0, + 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,76,0,0,0,116,0, + 160,1,124,0,161,1,125,4,116,2,124,4,116,3,131,2, + 114,28,116,4,160,5,100,1,124,2,161,2,1,0,124,3, + 100,2,117,1,114,26,116,6,160,7,124,4,124,3,161,2, + 1,0,124,4,83,0,116,8,100,3,160,9,124,2,161,1, + 124,1,124,2,100,4,141,3,130,1,41,5,122,35,67,111, + 109,112,105,108,101,32,98,121,116,101,99,111,100,101,32,97, + 115,32,102,111,117,110,100,32,105,110,32,97,32,112,121,99, + 46,122,21,99,111,100,101,32,111,98,106,101,99,116,32,102, + 114,111,109,32,123,33,114,125,78,122,23,78,111,110,45,99, + 111,100,101,32,111,98,106,101,99,116,32,105,110,32,123,33, + 114,125,169,2,114,127,0,0,0,114,57,0,0,0,41,10, + 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, + 218,10,105,115,105,110,115,116,97,110,99,101,218,10,95,99, + 111,100,101,95,116,121,112,101,114,145,0,0,0,114,159,0, + 0,0,218,4,95,105,109,112,90,16,95,102,105,120,95,99, + 111,95,102,105,108,101,110,97,109,101,114,128,0,0,0,114, + 76,0,0,0,41,5,114,41,0,0,0,114,127,0,0,0, + 114,117,0,0,0,114,118,0,0,0,218,4,99,111,100,101, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, + 100,101,119,2,0,0,115,20,0,0,0,10,2,10,1,12, + 1,8,1,12,1,4,1,10,2,4,1,6,255,255,128,114, + 175,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0, + 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, + 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, + 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, + 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, + 161,1,1,0,124,3,83,0,41,3,122,43,80,114,111,100, + 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114, + 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115, + 101,100,32,112,121,99,46,114,0,0,0,0,78,41,6,218, + 9,98,121,116,101,97,114,114,97,121,114,158,0,0,0,218, + 6,101,120,116,101,110,100,114,36,0,0,0,114,170,0,0, + 0,218,5,100,117,109,112,115,41,4,114,174,0,0,0,218, + 5,109,116,105,109,101,114,165,0,0,0,114,41,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 22,95,99,111,100,101,95,116,111,95,116,105,109,101,115,116, + 97,109,112,95,112,121,99,132,2,0,0,115,14,0,0,0, + 8,2,14,1,14,1,14,1,16,1,4,1,255,128,114,180, + 0,0,0,84,99,3,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,67,0,0,0,115,80,0, + 0,0,116,0,116,1,131,1,125,3,100,1,124,2,100,1, + 62,0,66,0,125,4,124,3,160,2,116,3,124,4,131,1, + 161,1,1,0,116,4,124,1,131,1,100,2,107,2,115,25, + 74,0,130,1,124,3,160,2,124,1,161,1,1,0,124,3, + 160,2,116,5,160,6,124,0,161,1,161,1,1,0,124,3, + 83,0,41,4,122,38,80,114,111,100,117,99,101,32,116,104, + 101,32,100,97,116,97,32,102,111,114,32,97,32,104,97,115, + 104,45,98,97,115,101,100,32,112,121,99,46,114,3,0,0, + 0,114,156,0,0,0,78,41,7,114,176,0,0,0,114,158, + 0,0,0,114,177,0,0,0,114,36,0,0,0,114,4,0, + 0,0,114,170,0,0,0,114,178,0,0,0,41,5,114,174, + 0,0,0,114,167,0,0,0,90,7,99,104,101,99,107,101, + 100,114,41,0,0,0,114,16,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,17,95,99,111,100, + 101,95,116,111,95,104,97,115,104,95,112,121,99,142,2,0, + 0,115,16,0,0,0,8,2,12,1,14,1,16,1,10,1, + 16,1,4,1,255,128,114,181,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0, + 67,0,0,0,115,62,0,0,0,100,1,100,2,108,0,125, + 1,116,1,160,2,124,0,161,1,106,3,125,2,124,1,160, + 4,124,2,161,1,125,3,116,1,160,5,100,2,100,3,161, + 2,125,4,124,4,160,6,124,0,160,6,124,3,100,1,25, + 0,161,1,161,1,83,0,41,4,122,121,68,101,99,111,100, + 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, + 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, + 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, + 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, + 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, + 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, + 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, + 32,32,32,32,114,0,0,0,0,78,84,41,7,218,8,116, + 111,107,101,110,105,122,101,114,78,0,0,0,90,7,66,121, + 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, + 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, + 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, + 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, + 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, + 116,101,115,114,182,0,0,0,90,21,115,111,117,114,99,101, + 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, + 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, + 110,101,95,100,101,99,111,100,101,114,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,13,100,101,99,111,100, + 101,95,115,111,117,114,99,101,153,2,0,0,115,12,0,0, + 0,8,5,12,1,10,1,12,1,20,1,255,128,114,186,0, + 0,0,169,2,114,150,0,0,0,218,26,115,117,98,109,111, + 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, + 116,105,111,110,115,99,2,0,0,0,0,0,0,0,2,0, + 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,8, + 1,0,0,124,1,100,1,117,0,114,28,100,2,125,1,116, + 0,124,2,100,3,131,2,114,27,122,7,124,2,160,1,124, + 0,161,1,125,1,87,0,110,14,4,0,116,2,121,131,1, + 0,1,0,1,0,89,0,110,6,110,5,116,3,160,4,124, + 1,161,1,125,1,116,5,106,6,124,0,124,2,124,1,100, + 4,141,3,125,4,100,5,124,4,95,7,124,2,100,1,117, + 0,114,75,116,8,131,0,68,0,93,21,92,2,125,5,125, + 6,124,1,160,9,116,10,124,6,131,1,161,1,114,72,124, + 5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,1, + 0,113,75,113,51,100,1,83,0,124,3,116,12,117,0,114, + 106,116,0,124,2,100,6,131,2,114,105,122,7,124,2,160, + 13,124,0,161,1,125,7,87,0,110,8,4,0,116,2,121, + 130,1,0,1,0,1,0,89,0,110,9,124,7,114,105,103, + 0,124,4,95,14,110,3,124,3,124,4,95,14,124,4,106, + 14,103,0,107,2,114,128,124,1,114,128,116,15,124,1,131, + 1,100,7,25,0,125,8,124,4,106,14,160,16,124,8,161, + 1,1,0,124,4,83,0,119,0,119,0,41,8,97,61,1, + 0,0,82,101,116,117,114,110,32,97,32,109,111,100,117,108, + 101,32,115,112,101,99,32,98,97,115,101,100,32,111,110,32, + 97,32,102,105,108,101,32,108,111,99,97,116,105,111,110,46, + 10,10,32,32,32,32,84,111,32,105,110,100,105,99,97,116, + 101,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,44,32, + 115,101,116,10,32,32,32,32,115,117,98,109,111,100,117,108, + 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, + 110,115,32,116,111,32,97,32,108,105,115,116,32,111,102,32, + 100,105,114,101,99,116,111,114,121,32,112,97,116,104,115,46, + 32,32,65,110,10,32,32,32,32,101,109,112,116,121,32,108, + 105,115,116,32,105,115,32,115,117,102,102,105,99,105,101,110, + 116,44,32,116,104,111,117,103,104,32,105,116,115,32,110,111, + 116,32,111,116,104,101,114,119,105,115,101,32,117,115,101,102, + 117,108,32,116,111,32,116,104,101,10,32,32,32,32,105,109, + 112,111,114,116,32,115,121,115,116,101,109,46,10,10,32,32, + 32,32,84,104,101,32,108,111,97,100,101,114,32,109,117,115, + 116,32,116,97,107,101,32,97,32,115,112,101,99,32,97,115, + 32,105,116,115,32,111,110,108,121,32,95,95,105,110,105,116, + 95,95,40,41,32,97,114,103,46,10,10,32,32,32,32,78, + 122,9,60,117,110,107,110,111,119,110,62,218,12,103,101,116, + 95,102,105,108,101,110,97,109,101,169,1,218,6,111,114,105, + 103,105,110,84,218,10,105,115,95,112,97,99,107,97,103,101, + 114,0,0,0,0,41,17,114,139,0,0,0,114,189,0,0, + 0,114,128,0,0,0,114,18,0,0,0,114,91,0,0,0, + 114,145,0,0,0,218,10,77,111,100,117,108,101,83,112,101, + 99,90,13,95,115,101,116,95,102,105,108,101,97,116,116,114, + 218,27,95,103,101,116,95,115,117,112,112,111,114,116,101,100, + 95,102,105,108,101,95,108,111,97,100,101,114,115,114,121,0, + 0,0,114,122,0,0,0,114,150,0,0,0,218,9,95,80, + 79,80,85,76,65,84,69,114,192,0,0,0,114,188,0,0, + 0,114,60,0,0,0,218,6,97,112,112,101,110,100,41,9, + 114,127,0,0,0,90,8,108,111,99,97,116,105,111,110,114, + 150,0,0,0,114,188,0,0,0,218,4,115,112,101,99,218, + 12,108,111,97,100,101,114,95,99,108,97,115,115,218,8,115, + 117,102,102,105,120,101,115,114,192,0,0,0,90,7,100,105, + 114,110,97,109,101,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,23,115,112,101,99,95,102,114,111,109,95, + 102,105,108,101,95,108,111,99,97,116,105,111,110,170,2,0, + 0,115,74,0,0,0,8,12,4,4,10,1,2,2,14,1, + 12,1,4,1,2,251,10,7,16,8,6,1,8,3,14,1, + 14,1,10,1,6,1,4,1,2,253,4,5,8,3,10,2, + 2,1,14,1,12,1,4,1,4,2,6,1,2,128,6,2, + 10,1,4,1,12,1,12,1,4,2,2,244,2,226,255,128, + 114,200,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,88, 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, - 10,83,0,41,11,218,13,95,76,111,97,100,101,114,66,97, - 115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115, - 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32, - 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83, - 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10, - 32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0, - 0,0,115,64,0,0,0,116,0,124,0,160,1,124,1,161, - 1,131,1,100,1,25,0,125,2,124,2,160,2,100,2,100, - 1,161,2,100,3,25,0,125,3,124,1,160,3,100,2,161, - 1,100,4,25,0,125,4,124,3,100,5,107,2,111,31,124, - 4,100,5,107,3,83,0,41,7,122,141,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, - 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98, - 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32, - 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114, - 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102, - 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105, - 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105, - 116,95,95,46,112,121,39,46,114,3,0,0,0,114,86,0, - 0,0,114,0,0,0,0,114,45,0,0,0,218,8,95,95, - 105,110,105,116,95,95,78,41,4,114,61,0,0,0,114,190, - 0,0,0,114,57,0,0,0,114,55,0,0,0,41,5,114, - 130,0,0,0,114,150,0,0,0,114,108,0,0,0,90,13, - 102,105,108,101,110,97,109,101,95,98,97,115,101,90,9,116, - 97,105,108,95,110,97,109,101,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,193,0,0,0,50,3,0,0, - 115,10,0,0,0,18,3,16,1,14,1,16,1,255,128,122, - 24,95,76,111,97,100,101,114,66,97,115,105,99,115,46,105, - 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,114,24,0,0,0,169,2,122,42,85,115,101,32,100, - 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, - 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, - 116,105,111,110,46,78,114,7,0,0,0,169,2,114,130,0, - 0,0,114,198,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,13,99,114,101,97,116,101,95,109, - 111,100,117,108,101,58,3,0,0,243,4,0,0,0,4,0, - 255,128,122,27,95,76,111,97,100,101,114,66,97,115,105,99, - 115,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 5,0,0,0,67,0,0,0,115,56,0,0,0,124,0,160, - 0,124,1,106,1,161,1,125,2,124,2,100,1,117,0,114, - 18,116,2,100,2,160,3,124,1,106,1,161,1,131,1,130, - 1,116,4,160,5,116,6,124,2,124,1,106,7,161,3,1, - 0,100,1,83,0,41,3,122,19,69,120,101,99,117,116,101, - 32,116,104,101,32,109,111,100,117,108,101,46,78,122,52,99, - 97,110,110,111,116,32,108,111,97,100,32,109,111,100,117,108, - 101,32,123,33,114,125,32,119,104,101,110,32,103,101,116,95, - 99,111,100,101,40,41,32,114,101,116,117,114,110,115,32,78, - 111,110,101,41,8,218,8,103,101,116,95,99,111,100,101,114, - 137,0,0,0,114,129,0,0,0,114,77,0,0,0,114,146, - 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, - 102,114,97,109,101,115,95,114,101,109,111,118,101,100,218,4, - 101,120,101,99,114,143,0,0,0,41,3,114,130,0,0,0, - 218,6,109,111,100,117,108,101,114,175,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,11,101,120, - 101,99,95,109,111,100,117,108,101,61,3,0,0,115,14,0, - 0,0,12,2,8,1,4,1,8,1,4,255,20,2,255,128, - 122,25,95,76,111,97,100,101,114,66,97,115,105,99,115,46, - 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 67,0,0,0,115,12,0,0,0,116,0,160,1,124,0,124, - 1,161,2,83,0,41,2,122,26,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,78,41,2,114,146,0,0,0,218,17,95,108,111, - 97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2, - 114,130,0,0,0,114,150,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95, - 109,111,100,117,108,101,69,3,0,0,115,4,0,0,0,12, - 3,255,128,122,25,95,76,111,97,100,101,114,66,97,115,105, - 99,115,46,108,111,97,100,95,109,111,100,117,108,101,78,41, - 8,114,137,0,0,0,114,136,0,0,0,114,138,0,0,0, - 114,139,0,0,0,114,193,0,0,0,114,226,0,0,0,114, - 232,0,0,0,114,235,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,222,0, - 0,0,45,3,0,0,115,14,0,0,0,8,0,4,2,8, - 3,8,8,8,3,12,8,255,128,114,222,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,64,0,0,0,115,74,0,0,0,101,0,90,1, - 100,0,90,2,100,1,100,2,132,0,90,3,100,3,100,4, - 132,0,90,4,100,5,100,6,132,0,90,5,100,7,100,8, - 132,0,90,6,100,9,100,10,132,0,90,7,100,11,100,12, - 156,1,100,13,100,14,132,2,90,8,100,15,100,16,132,0, - 90,9,100,17,83,0,41,18,218,12,83,111,117,114,99,101, - 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 4,0,0,0,116,0,130,1,41,2,122,165,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, - 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, - 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, - 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, - 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, - 32,78,41,1,114,64,0,0,0,169,2,114,130,0,0,0, - 114,58,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, - 77,3,0,0,115,4,0,0,0,4,6,255,128,122,23,83, - 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, - 95,109,116,105,109,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, - 14,0,0,0,100,1,124,0,160,0,124,1,161,1,105,1, - 83,0,41,3,97,158,1,0,0,79,112,116,105,111,110,97, - 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, - 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, - 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, - 102,105,101,100,10,32,32,32,32,32,32,32,32,112,97,116, - 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, - 32,32,32,32,80,111,115,115,105,98,108,101,32,107,101,121, - 115,58,10,32,32,32,32,32,32,32,32,45,32,39,109,116, - 105,109,101,39,32,40,109,97,110,100,97,116,111,114,121,41, - 32,105,115,32,116,104,101,32,110,117,109,101,114,105,99,32, - 116,105,109,101,115,116,97,109,112,32,111,102,32,108,97,115, - 116,32,115,111,117,114,99,101,10,32,32,32,32,32,32,32, - 32,32,32,99,111,100,101,32,109,111,100,105,102,105,99,97, - 116,105,111,110,59,10,32,32,32,32,32,32,32,32,45,32, - 39,115,105,122,101,39,32,40,111,112,116,105,111,110,97,108, - 41,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110, - 32,98,121,116,101,115,32,111,102,32,116,104,101,32,115,111, - 117,114,99,101,32,99,111,100,101,46,10,10,32,32,32,32, - 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, - 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, - 111,119,115,32,116,104,101,32,108,111,97,100,101,114,32,116, - 111,32,114,101,97,100,32,98,121,116,101,99,111,100,101,32, - 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,82, - 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, - 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, - 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,114,180,0,0,0,78,41,1,114, - 238,0,0,0,114,237,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,10,112,97,116,104,95,115, - 116,97,116,115,85,3,0,0,115,4,0,0,0,14,12,255, - 128,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, - 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3, - 161,2,83,0,41,2,122,228,79,112,116,105,111,110,97,108, - 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, - 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, - 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, - 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, - 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, - 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, - 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, - 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, - 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, - 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, - 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, - 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, - 111,110,115,10,32,32,32,32,32,32,32,32,78,41,1,218, - 8,115,101,116,95,100,97,116,97,41,4,114,130,0,0,0, - 114,119,0,0,0,90,10,99,97,99,104,101,95,112,97,116, - 104,114,42,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,15,95,99,97,99,104,101,95,98,121, - 116,101,99,111,100,101,99,3,0,0,115,4,0,0,0,12, - 8,255,128,122,28,83,111,117,114,99,101,76,111,97,100,101, - 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100, - 101,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,1,0,0,0,67,0,0,0,114,24,0,0,0,41, - 2,122,150,79,112,116,105,111,110,97,108,32,109,101,116,104, - 111,100,32,119,104,105,99,104,32,119,114,105,116,101,115,32, - 100,97,116,97,32,40,98,121,116,101,115,41,32,116,111,32, - 97,32,102,105,108,101,32,112,97,116,104,32,40,97,32,115, - 116,114,41,46,10,10,32,32,32,32,32,32,32,32,73,109, - 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, - 109,101,116,104,111,100,32,97,108,108,111,119,115,32,102,111, - 114,32,116,104,101,32,119,114,105,116,105,110,103,32,111,102, - 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, - 10,32,32,32,32,32,32,32,32,78,114,7,0,0,0,41, - 3,114,130,0,0,0,114,58,0,0,0,114,42,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 240,0,0,0,109,3,0,0,114,227,0,0,0,122,21,83, - 111,117,114,99,101,76,111,97,100,101,114,46,115,101,116,95, - 100,97,116,97,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,10,0,0,0,67,0,0,0,115,70,0, - 0,0,124,0,160,0,124,1,161,1,125,2,122,10,124,0, - 160,1,124,2,161,1,125,3,87,0,116,4,124,3,131,1, - 83,0,4,0,116,2,121,34,1,0,125,4,1,0,122,7, - 116,3,100,1,124,1,100,2,141,2,124,4,130,2,100,3, - 125,4,126,4,119,1,119,0,41,4,122,52,67,111,110,99, - 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, - 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, - 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, - 101,116,95,100,97,116,97,40,41,114,127,0,0,0,78,41, - 5,114,190,0,0,0,218,8,103,101,116,95,100,97,116,97, - 114,64,0,0,0,114,129,0,0,0,114,187,0,0,0,41, - 5,114,130,0,0,0,114,150,0,0,0,114,58,0,0,0, - 114,185,0,0,0,218,3,101,120,99,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,10,103,101,116,95,115, - 111,117,114,99,101,116,3,0,0,115,26,0,0,0,10,2, - 2,1,12,1,8,4,14,253,4,1,2,1,4,255,2,1, - 2,255,8,128,2,255,255,128,122,23,83,111,117,114,99,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,114,116,0,0,0,41,1,218,9,95,111,112,116,105,109, - 105,122,101,99,3,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,8,0,0,0,67,0,0,0,115,22,0,0, - 0,116,0,106,1,116,2,124,1,124,2,100,1,100,2,124, - 3,100,3,141,6,83,0,41,5,122,130,82,101,116,117,114, - 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, - 116,32,99,111,109,112,105,108,101,100,32,102,114,111,109,32, - 115,111,117,114,99,101,46,10,10,32,32,32,32,32,32,32, - 32,84,104,101,32,39,100,97,116,97,39,32,97,114,103,117, - 109,101,110,116,32,99,97,110,32,98,101,32,97,110,121,32, - 111,98,106,101,99,116,32,116,121,112,101,32,116,104,97,116, - 32,99,111,109,112,105,108,101,40,41,32,115,117,112,112,111, - 114,116,115,46,10,32,32,32,32,32,32,32,32,114,230,0, - 0,0,84,41,2,218,12,100,111,110,116,95,105,110,104,101, - 114,105,116,114,96,0,0,0,78,41,3,114,146,0,0,0, - 114,229,0,0,0,218,7,99,111,109,112,105,108,101,41,4, - 114,130,0,0,0,114,42,0,0,0,114,58,0,0,0,114, - 245,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,14,115,111,117,114,99,101,95,116,111,95,99, - 111,100,101,126,3,0,0,115,8,0,0,0,12,5,4,1, - 6,255,255,128,122,27,83,111,117,114,99,101,76,111,97,100, - 101,114,46,115,111,117,114,99,101,95,116,111,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,15,0, - 0,0,9,0,0,0,67,0,0,0,115,12,2,0,0,124, - 0,160,0,124,1,161,1,125,2,100,1,125,3,100,1,125, - 4,100,1,125,5,100,2,125,6,100,3,125,7,122,6,116, - 1,124,2,131,1,125,8,87,0,110,11,4,0,116,2,144, - 1,121,5,1,0,1,0,1,0,100,1,125,8,89,0,110, - 143,122,7,124,0,160,3,124,2,161,1,125,9,87,0,110, - 9,4,0,116,4,144,1,121,4,1,0,1,0,1,0,89, - 0,110,126,116,5,124,9,100,4,25,0,131,1,125,3,122, - 7,124,0,160,6,124,8,161,1,125,10,87,0,110,9,4, - 0,116,4,144,1,121,3,1,0,1,0,1,0,89,0,110, - 103,124,1,124,8,100,5,156,2,125,11,122,71,116,7,124, - 10,124,1,124,11,131,3,125,12,116,8,124,10,131,1,100, - 6,100,1,133,2,25,0,125,13,124,12,100,7,64,0,100, - 8,107,3,125,6,124,6,114,138,124,12,100,9,64,0,100, - 8,107,3,125,7,116,9,106,10,100,10,107,3,114,137,124, - 7,115,119,116,9,106,10,100,11,107,2,114,137,124,0,160, - 6,124,2,161,1,125,4,116,9,160,11,116,12,124,4,161, - 2,125,5,116,13,124,10,124,5,124,1,124,11,131,4,1, - 0,110,10,116,14,124,10,124,3,124,9,100,12,25,0,124, - 1,124,11,131,5,1,0,87,0,110,11,4,0,116,15,116, - 16,102,2,144,1,121,2,1,0,1,0,1,0,89,0,110, - 15,116,17,160,18,100,13,124,8,124,2,161,3,1,0,116, - 19,124,13,124,1,124,8,124,2,100,14,141,4,83,0,124, - 4,100,1,117,0,114,185,124,0,160,6,124,2,161,1,125, - 4,124,0,160,20,124,4,124,2,161,2,125,14,116,17,160, - 18,100,15,124,2,161,2,1,0,116,21,106,22,115,255,124, - 8,100,1,117,1,114,255,124,3,100,1,117,1,114,255,124, - 6,114,226,124,5,100,1,117,0,114,219,116,9,160,11,124, - 4,161,1,125,5,116,23,124,14,124,5,124,7,131,3,125, - 10,110,8,116,24,124,14,124,3,116,25,124,4,131,1,131, - 3,125,10,122,10,124,0,160,26,124,2,124,8,124,10,161, - 3,1,0,87,0,124,14,83,0,4,0,116,2,144,1,121, - 1,1,0,1,0,1,0,89,0,124,14,83,0,124,14,83, - 0,119,0,119,0,119,0,119,0,119,0,41,16,122,190,67, + 2,90,4,100,3,90,5,101,6,111,15,100,4,101,7,118, + 0,90,8,101,9,100,5,100,6,132,0,131,1,90,10,101, + 11,100,7,100,8,132,0,131,1,90,12,101,11,100,14,100, + 10,100,11,132,1,131,1,90,13,101,11,100,15,100,12,100, + 13,132,1,131,1,90,14,100,9,83,0,41,16,218,21,87, + 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, + 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, + 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108, + 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116, + 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115, + 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80, + 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, + 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, + 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, + 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104, + 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, + 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, + 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68, + 101,98,117,103,122,6,95,100,46,112,121,100,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0, + 0,67,0,0,0,115,50,0,0,0,122,8,116,0,160,1, + 116,0,106,2,124,0,161,2,87,0,83,0,4,0,116,3, + 121,24,1,0,1,0,1,0,116,0,160,1,116,0,106,4, + 124,0,161,2,6,0,89,0,83,0,119,0,114,120,0,0, + 0,41,5,218,6,119,105,110,114,101,103,90,7,79,112,101, + 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, + 78,84,95,85,83,69,82,114,63,0,0,0,90,18,72,75, + 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, + 114,19,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,14,95,111,112,101,110,95,114,101,103,105, + 115,116,114,121,250,2,0,0,115,12,0,0,0,2,2,16, + 1,12,1,18,1,2,255,255,128,122,36,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, + 2,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 8,0,0,0,67,0,0,0,115,130,0,0,0,124,0,106, + 0,114,7,124,0,106,1,125,2,110,3,124,0,106,2,125, + 2,124,2,106,3,124,1,100,1,116,4,106,5,100,0,100, + 2,133,2,25,0,22,0,100,3,141,2,125,3,122,30,124, + 0,160,6,124,3,161,1,143,14,125,4,116,7,160,8,124, + 4,100,4,161,2,125,5,87,0,100,0,4,0,4,0,131, + 3,1,0,110,8,49,0,115,47,119,1,1,0,1,0,1, + 0,89,0,1,0,87,0,124,5,83,0,4,0,116,9,121, + 64,1,0,1,0,1,0,89,0,100,0,83,0,119,0,41, + 5,78,122,5,37,100,46,37,100,114,44,0,0,0,41,2, + 114,149,0,0,0,90,11,115,121,115,95,118,101,114,115,105, + 111,110,114,10,0,0,0,41,10,218,11,68,69,66,85,71, + 95,66,85,73,76,68,218,18,82,69,71,73,83,84,82,89, + 95,75,69,89,95,68,69,66,85,71,218,12,82,69,71,73, + 83,84,82,89,95,75,69,89,114,76,0,0,0,114,15,0, + 0,0,218,12,118,101,114,115,105,111,110,95,105,110,102,111, + 114,203,0,0,0,114,202,0,0,0,90,10,81,117,101,114, + 121,86,97,108,117,101,114,63,0,0,0,41,6,218,3,99, + 108,115,114,149,0,0,0,90,12,114,101,103,105,115,116,114, + 121,95,107,101,121,114,20,0,0,0,90,4,104,107,101,121, + 218,8,102,105,108,101,112,97,116,104,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,16,95,115,101,97,114, + 99,104,95,114,101,103,105,115,116,114,121,1,3,0,0,115, + 30,0,0,0,6,2,8,1,6,2,6,1,16,1,6,255, + 2,2,12,1,26,1,18,128,4,3,12,254,6,1,2,255, + 255,128,122,38,87,105,110,100,111,119,115,82,101,103,105,115, + 116,114,121,70,105,110,100,101,114,46,95,115,101,97,114,99, + 104,95,114,101,103,105,115,116,114,121,78,99,4,0,0,0, + 0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0, + 67,0,0,0,115,120,0,0,0,124,0,160,0,124,1,161, + 1,125,4,124,4,100,0,117,0,114,11,100,0,83,0,122, + 6,116,1,124,4,131,1,1,0,87,0,110,9,4,0,116, + 2,121,59,1,0,1,0,1,0,89,0,100,0,83,0,116, + 3,131,0,68,0,93,26,92,2,125,5,125,6,124,4,160, + 4,116,5,124,6,131,1,161,1,114,56,116,6,106,7,124, + 1,124,5,124,1,124,4,131,2,124,4,100,1,141,3,125, + 7,124,7,2,0,1,0,83,0,113,30,100,0,83,0,119, + 0,41,2,78,114,190,0,0,0,41,8,114,210,0,0,0, + 114,62,0,0,0,114,63,0,0,0,114,194,0,0,0,114, + 121,0,0,0,114,122,0,0,0,114,145,0,0,0,218,16, + 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114, + 41,8,114,208,0,0,0,114,149,0,0,0,114,57,0,0, + 0,218,6,116,97,114,103,101,116,114,209,0,0,0,114,150, + 0,0,0,114,199,0,0,0,114,197,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,9,102,105, + 110,100,95,115,112,101,99,16,3,0,0,115,36,0,0,0, + 10,2,8,1,4,1,2,1,12,1,12,1,6,1,14,1, + 14,1,6,1,8,1,2,1,6,254,8,3,2,252,4,255, + 2,254,255,128,122,31,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,30, + 0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,124, + 3,100,1,117,1,114,13,124,3,106,1,83,0,100,1,83, + 0,41,2,122,108,70,105,110,100,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,105,110,32,116,104,101,32,114,101, + 103,105,115,116,114,121,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,169,2,114,213,0,0,0,114,150,0,0,0,169,4, + 114,208,0,0,0,114,149,0,0,0,114,57,0,0,0,114, + 197,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, + 32,3,0,0,115,10,0,0,0,12,7,8,1,6,1,4, + 2,255,128,122,33,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, + 109,111,100,117,108,101,41,2,78,78,41,1,78,41,15,114, + 136,0,0,0,114,135,0,0,0,114,137,0,0,0,114,138, + 0,0,0,114,206,0,0,0,114,205,0,0,0,218,11,95, + 77,83,95,87,73,78,68,79,87,83,218,18,69,88,84,69, + 78,83,73,79,78,95,83,85,70,70,73,88,69,83,114,204, + 0,0,0,218,12,115,116,97,116,105,99,109,101,116,104,111, + 100,114,203,0,0,0,218,11,99,108,97,115,115,109,101,116, + 104,111,100,114,210,0,0,0,114,213,0,0,0,114,216,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,201,0,0,0,238,2,0,0,115, + 32,0,0,0,8,0,4,2,2,3,2,255,2,4,2,255, + 12,3,2,2,10,1,2,6,10,1,2,14,12,1,2,15, + 16,1,255,128,114,201,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,48,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, + 0,90,7,100,10,83,0,41,11,218,13,95,76,111,97,100, + 101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99, + 108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99, + 111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111, + 116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32, + 97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, + 0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,160, + 1,124,1,161,1,131,1,100,1,25,0,125,2,124,2,160, + 2,100,2,100,1,161,2,100,3,25,0,125,3,124,1,160, + 3,100,2,161,1,100,4,25,0,125,4,124,3,100,5,107, + 2,111,31,124,4,100,5,107,3,83,0,41,7,122,141,67, 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, - 116,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, - 46,10,10,32,32,32,32,32,32,32,32,82,101,97,100,105, - 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,114, - 101,113,117,105,114,101,115,32,112,97,116,104,95,115,116,97, - 116,115,32,116,111,32,98,101,32,105,109,112,108,101,109,101, - 110,116,101,100,46,32,84,111,32,119,114,105,116,101,10,32, - 32,32,32,32,32,32,32,98,121,116,101,99,111,100,101,44, - 32,115,101,116,95,100,97,116,97,32,109,117,115,116,32,97, - 108,115,111,32,98,101,32,105,109,112,108,101,109,101,110,116, - 101,100,46,10,10,32,32,32,32,32,32,32,32,78,70,84, - 114,180,0,0,0,114,170,0,0,0,114,156,0,0,0,114, - 3,0,0,0,114,0,0,0,0,114,45,0,0,0,90,5, - 110,101,118,101,114,90,6,97,108,119,97,121,115,218,4,115, - 105,122,101,122,13,123,125,32,109,97,116,99,104,101,115,32, - 123,125,41,3,114,128,0,0,0,114,118,0,0,0,114,119, - 0,0,0,122,19,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,125,41,27,114,190,0,0,0,114, - 109,0,0,0,114,95,0,0,0,114,239,0,0,0,114,64, - 0,0,0,114,34,0,0,0,114,242,0,0,0,114,163,0, - 0,0,218,10,109,101,109,111,114,121,118,105,101,119,114,174, - 0,0,0,90,21,99,104,101,99,107,95,104,97,115,104,95, - 98,97,115,101,100,95,112,121,99,115,114,168,0,0,0,218, - 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, - 69,82,114,169,0,0,0,114,167,0,0,0,114,129,0,0, - 0,114,161,0,0,0,114,146,0,0,0,114,160,0,0,0, - 114,176,0,0,0,114,248,0,0,0,114,16,0,0,0,218, - 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, - 99,111,100,101,114,182,0,0,0,114,181,0,0,0,114,4, - 0,0,0,114,241,0,0,0,41,15,114,130,0,0,0,114, - 150,0,0,0,114,119,0,0,0,114,165,0,0,0,114,185, - 0,0,0,114,168,0,0,0,90,10,104,97,115,104,95,98, - 97,115,101,100,90,12,99,104,101,99,107,95,115,111,117,114, - 99,101,114,118,0,0,0,218,2,115,116,114,42,0,0,0, - 114,162,0,0,0,114,17,0,0,0,90,10,98,121,116,101, - 115,95,100,97,116,97,90,11,99,111,100,101,95,111,98,106, - 101,99,116,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,228,0,0,0,134,3,0,0,115,170,0,0,0, - 10,7,4,1,4,1,4,1,4,1,4,1,2,1,12,1, - 14,1,8,1,2,2,14,1,14,1,4,1,12,2,2,1, - 14,1,14,1,4,1,2,3,2,1,6,254,2,4,12,1, - 16,1,12,1,4,1,12,1,10,1,2,1,2,255,8,2, - 2,254,10,3,4,1,2,1,2,1,4,254,8,4,2,1, - 4,255,2,128,2,3,2,1,2,1,6,1,2,1,2,1, - 4,251,4,128,18,7,4,1,8,2,2,1,4,255,6,2, - 2,1,2,1,6,254,8,3,10,1,12,1,12,1,14,1, - 6,1,2,255,4,2,8,1,10,1,14,1,6,2,6,1, - 4,255,2,2,16,1,4,3,14,254,2,1,8,1,2,254, - 2,233,2,225,2,250,2,251,255,128,122,21,83,111,117,114, - 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,78,41,10,114,137,0,0,0,114,136,0,0,0,114,138, - 0,0,0,114,238,0,0,0,114,239,0,0,0,114,241,0, - 0,0,114,240,0,0,0,114,244,0,0,0,114,248,0,0, - 0,114,228,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,236,0,0,0,75, - 3,0,0,115,18,0,0,0,8,0,8,2,8,8,8,14, - 8,10,8,7,14,10,12,8,255,128,114,236,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,0,0,0,0,115,92,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, - 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, - 6,101,7,135,0,102,1,100,8,100,9,132,8,131,1,90, - 8,101,7,100,10,100,11,132,0,131,1,90,9,100,12,100, - 13,132,0,90,10,101,7,100,14,100,15,132,0,131,1,90, - 11,135,0,4,0,90,12,83,0,41,16,218,10,70,105,108, - 101,76,111,97,100,101,114,122,103,66,97,115,101,32,102,105, - 108,101,32,108,111,97,100,101,114,32,99,108,97,115,115,32, - 119,104,105,99,104,32,105,109,112,108,101,109,101,110,116,115, - 32,116,104,101,32,108,111,97,100,101,114,32,112,114,111,116, - 111,99,111,108,32,109,101,116,104,111,100,115,32,116,104,97, - 116,10,32,32,32,32,114,101,113,117,105,114,101,32,102,105, - 108,101,32,115,121,115,116,101,109,32,117,115,97,103,101,46, - 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, - 124,0,95,0,124,2,124,0,95,1,100,1,83,0,41,2, - 122,75,67,97,99,104,101,32,116,104,101,32,109,111,100,117, - 108,101,32,110,97,109,101,32,97,110,100,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,102,105,108,101, - 32,102,111,117,110,100,32,98,121,32,116,104,101,10,32,32, - 32,32,32,32,32,32,102,105,110,100,101,114,46,78,114,170, - 0,0,0,41,3,114,130,0,0,0,114,150,0,0,0,114, - 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,223,0,0,0,224,3,0,0,115,6,0,0, - 0,6,3,10,1,255,128,122,19,70,105,108,101,76,111,97, - 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, - 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,2, - 83,0,114,121,0,0,0,169,2,218,9,95,95,99,108,97, - 115,115,95,95,114,143,0,0,0,169,2,114,130,0,0,0, - 90,5,111,116,104,101,114,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,6,95,95,101,113,95,95,230,3, - 0,0,243,8,0,0,0,12,1,10,1,2,255,255,128,122, - 17,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,243,20,0,0,0, - 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, - 65,0,83,0,114,121,0,0,0,169,3,218,4,104,97,115, - 104,114,128,0,0,0,114,58,0,0,0,169,1,114,130,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,8,95,95,104,97,115,104,95,95,234,3,0,0,243, - 4,0,0,0,20,1,255,128,122,19,70,105,108,101,76,111, - 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,3,0,0,0,115,16,0,0,0,116,0,116,1,124, - 0,131,2,160,2,124,1,161,1,83,0,41,2,122,100,76, - 111,97,100,32,97,32,109,111,100,117,108,101,32,102,114,111, - 109,32,97,32,102,105,108,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,78,41,3,218,5,115,117,112,101,114,114,254,0, - 0,0,114,235,0,0,0,114,234,0,0,0,169,1,114,1, - 1,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, - 0,0,237,3,0,0,115,4,0,0,0,16,10,255,128,122, - 22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 243,6,0,0,0,124,0,106,0,83,0,169,2,122,58,82, - 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, - 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, - 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, - 101,32,102,105,110,100,101,114,46,78,114,62,0,0,0,114, - 234,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,190,0,0,0,249,3,0,0,243,4,0,0, - 0,6,3,255,128,122,23,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, - 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, - 116,1,116,2,102,2,131,2,114,36,116,3,160,4,116,5, - 124,1,131,1,161,1,143,12,125,2,124,2,160,6,161,0, - 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, - 49,0,115,29,119,1,1,0,1,0,1,0,89,0,1,0, - 100,1,83,0,116,3,160,7,124,1,100,2,161,2,143,12, - 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, - 4,0,131,3,1,0,83,0,49,0,115,57,119,1,1,0, - 1,0,1,0,89,0,1,0,100,1,83,0,41,3,122,39, - 82,101,116,117,114,110,32,116,104,101,32,100,97,116,97,32, - 102,114,111,109,32,112,97,116,104,32,97,115,32,114,97,119, - 32,98,121,116,101,115,46,78,218,1,114,41,8,114,172,0, - 0,0,114,236,0,0,0,218,19,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,114,79,0,0, - 0,90,9,111,112,101,110,95,99,111,100,101,114,97,0,0, - 0,90,4,114,101,97,100,114,80,0,0,0,41,3,114,130, - 0,0,0,114,58,0,0,0,114,83,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,242,0,0, - 0,254,3,0,0,115,16,0,0,0,14,2,16,1,22,1, - 20,128,14,2,22,1,20,128,255,128,122,19,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 2,0,0,0,67,0,0,0,115,20,0,0,0,100,1,100, - 2,108,0,109,1,125,2,1,0,124,2,124,0,131,1,83, - 0,41,3,78,114,0,0,0,0,41,1,218,10,70,105,108, - 101,82,101,97,100,101,114,41,2,218,17,105,109,112,111,114, - 116,108,105,98,46,114,101,97,100,101,114,115,114,18,1,0, - 0,41,3,114,130,0,0,0,114,231,0,0,0,114,18,1, + 116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, + 103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105, + 102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97, + 116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103, + 101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32, + 97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95, + 95,105,110,105,116,95,95,46,112,121,39,46,114,3,0,0, + 0,114,85,0,0,0,114,0,0,0,0,114,44,0,0,0, + 218,8,95,95,105,110,105,116,95,95,78,41,4,114,60,0, + 0,0,114,189,0,0,0,114,56,0,0,0,114,54,0,0, + 0,41,5,114,129,0,0,0,114,149,0,0,0,114,107,0, + 0,0,90,13,102,105,108,101,110,97,109,101,95,98,97,115, + 101,90,9,116,97,105,108,95,110,97,109,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,192,0,0,0, + 51,3,0,0,115,10,0,0,0,18,3,16,1,14,1,16, + 1,255,128,122,24,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,169,2,122,42,85, + 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, + 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, + 99,114,101,97,116,105,111,110,46,78,114,7,0,0,0,169, + 2,114,129,0,0,0,114,197,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,13,99,114,101,97, + 116,101,95,109,111,100,117,108,101,59,3,0,0,243,4,0, + 0,0,4,0,255,128,122,27,95,76,111,97,100,101,114,66, + 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,5,0,0,0,67,0,0,0,115,56,0,0, + 0,124,0,160,0,124,1,106,1,161,1,125,2,124,2,100, + 1,117,0,114,18,116,2,100,2,160,3,124,1,106,1,161, + 1,131,1,130,1,116,4,160,5,116,6,124,2,124,1,106, + 7,161,3,1,0,100,1,83,0,41,3,122,19,69,120,101, + 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, + 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, + 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, + 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, + 110,115,32,78,111,110,101,41,8,218,8,103,101,116,95,99, + 111,100,101,114,136,0,0,0,114,128,0,0,0,114,76,0, + 0,0,114,145,0,0,0,218,25,95,99,97,108,108,95,119, + 105,116,104,95,102,114,97,109,101,115,95,114,101,109,111,118, + 101,100,218,4,101,120,101,99,114,142,0,0,0,41,3,114, + 129,0,0,0,218,6,109,111,100,117,108,101,114,174,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,11,101,120,101,99,95,109,111,100,117,108,101,62,3,0, + 0,115,14,0,0,0,12,2,8,1,4,1,8,1,4,255, + 20,2,255,128,122,25,95,76,111,97,100,101,114,66,97,115, + 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, + 1,124,0,124,1,161,2,83,0,41,2,122,26,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,78,41,2,114,145,0,0,0,218, + 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, + 105,109,169,2,114,129,0,0,0,114,149,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,108, + 111,97,100,95,109,111,100,117,108,101,70,3,0,0,115,4, + 0,0,0,12,3,255,128,122,25,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,117, + 108,101,78,41,8,114,136,0,0,0,114,135,0,0,0,114, + 137,0,0,0,114,138,0,0,0,114,192,0,0,0,114,225, + 0,0,0,114,231,0,0,0,114,234,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, - 114,101,97,100,101,114,7,4,0,0,115,6,0,0,0,12, - 2,8,1,255,128,122,30,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114, - 101,97,100,101,114,41,13,114,137,0,0,0,114,136,0,0, - 0,114,138,0,0,0,114,139,0,0,0,114,223,0,0,0, - 114,3,1,0,0,114,9,1,0,0,114,147,0,0,0,114, - 235,0,0,0,114,190,0,0,0,114,242,0,0,0,114,20, - 1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,108, - 95,95,114,7,0,0,0,114,7,0,0,0,114,12,1,0, - 0,114,8,0,0,0,114,254,0,0,0,219,3,0,0,115, - 26,0,0,0,8,0,4,2,8,3,8,6,8,4,2,3, - 14,1,2,11,10,1,8,4,2,9,18,1,255,128,114,254, + 0,114,221,0,0,0,46,3,0,0,115,14,0,0,0,8, + 0,4,2,8,3,8,8,8,3,12,8,255,128,114,221,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0, + 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, + 100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,5, + 100,7,100,8,132,0,90,6,100,9,100,10,132,0,90,7, + 100,11,100,12,156,1,100,13,100,14,132,2,90,8,100,15, + 100,16,132,0,90,9,100,17,83,0,41,18,218,12,83,111, + 117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,115,4,0,0,0,116,0,130,1,41,2,122,165, + 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, + 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, + 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, + 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, + 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, + 105,102,105,101,100,32,112,97,116,104,32,40,97,32,115,116, + 114,41,46,10,10,32,32,32,32,32,32,32,32,82,97,105, + 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, + 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, + 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, + 32,32,32,32,32,78,41,1,114,63,0,0,0,169,2,114, + 129,0,0,0,114,57,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,10,112,97,116,104,95,109, + 116,105,109,101,78,3,0,0,115,4,0,0,0,4,6,255, + 128,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, + 112,97,116,104,95,109,116,105,109,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,14,0,0,0,100,1,124,0,160,0,124,1, + 161,1,105,1,83,0,41,3,97,158,1,0,0,79,112,116, + 105,111,110,97,108,32,109,101,116,104,111,100,32,114,101,116, + 117,114,110,105,110,103,32,97,32,109,101,116,97,100,97,116, + 97,32,100,105,99,116,32,102,111,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,10,32,32,32,32,32,32,32, + 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, + 32,32,32,32,32,32,32,32,80,111,115,115,105,98,108,101, + 32,107,101,121,115,58,10,32,32,32,32,32,32,32,32,45, + 32,39,109,116,105,109,101,39,32,40,109,97,110,100,97,116, + 111,114,121,41,32,105,115,32,116,104,101,32,110,117,109,101, + 114,105,99,32,116,105,109,101,115,116,97,109,112,32,111,102, + 32,108,97,115,116,32,115,111,117,114,99,101,10,32,32,32, + 32,32,32,32,32,32,32,99,111,100,101,32,109,111,100,105, + 102,105,99,97,116,105,111,110,59,10,32,32,32,32,32,32, + 32,32,45,32,39,115,105,122,101,39,32,40,111,112,116,105, + 111,110,97,108,41,32,105,115,32,116,104,101,32,115,105,122, + 101,32,105,110,32,98,121,116,101,115,32,111,102,32,116,104, + 101,32,115,111,117,114,99,101,32,99,111,100,101,46,10,10, + 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, + 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, + 32,97,108,108,111,119,115,32,116,104,101,32,108,111,97,100, + 101,114,32,116,111,32,114,101,97,100,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, + 32,32,32,82,97,105,115,101,115,32,79,83,69,114,114,111, + 114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32, + 99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101, + 100,46,10,32,32,32,32,32,32,32,32,114,179,0,0,0, + 78,41,1,114,237,0,0,0,114,236,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,10,112,97, + 116,104,95,115,116,97,116,115,86,3,0,0,115,4,0,0, + 0,14,12,255,128,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, + 0,0,0,67,0,0,0,115,12,0,0,0,124,0,160,0, + 124,2,124,3,161,2,83,0,41,2,122,228,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, + 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, + 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, + 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, + 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, + 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, + 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, + 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, + 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, + 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, + 78,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, + 129,0,0,0,114,118,0,0,0,90,10,99,97,99,104,101, + 95,112,97,116,104,114,41,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,15,95,99,97,99,104, + 101,95,98,121,116,101,99,111,100,101,100,3,0,0,115,4, + 0,0,0,12,8,255,128,122,28,83,111,117,114,99,101,76, + 111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116, + 101,99,111,100,101,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,1,0,0,0,67,0,0,0,114,23, + 0,0,0,41,2,122,150,79,112,116,105,111,110,97,108,32, + 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, + 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, + 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, + 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, + 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, + 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, + 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, + 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,7, + 0,0,0,41,3,114,129,0,0,0,114,57,0,0,0,114, + 41,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,239,0,0,0,110,3,0,0,114,226,0,0, + 0,122,21,83,111,117,114,99,101,76,111,97,100,101,114,46, + 115,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,10,0,0,0,67,0,0, + 0,115,70,0,0,0,124,0,160,0,124,1,161,1,125,2, + 122,10,124,0,160,1,124,2,161,1,125,3,87,0,116,4, + 124,3,131,1,83,0,4,0,116,2,121,34,1,0,125,4, + 1,0,122,7,116,3,100,1,124,1,100,2,141,2,124,4, + 130,2,100,3,125,4,126,4,119,1,119,0,41,4,122,52, + 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, + 99,116,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,46,122,39,115,111,117,114,99,101,32,110,111,116, + 32,97,118,97,105,108,97,98,108,101,32,116,104,114,111,117, + 103,104,32,103,101,116,95,100,97,116,97,40,41,114,126,0, + 0,0,78,41,5,114,189,0,0,0,218,8,103,101,116,95, + 100,97,116,97,114,63,0,0,0,114,128,0,0,0,114,186, + 0,0,0,41,5,114,129,0,0,0,114,149,0,0,0,114, + 57,0,0,0,114,184,0,0,0,218,3,101,120,99,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,10,103, + 101,116,95,115,111,117,114,99,101,117,3,0,0,115,26,0, + 0,0,10,2,2,1,12,1,8,4,14,253,4,1,2,1, + 4,255,2,1,2,255,8,128,2,255,255,128,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,114,115,0,0,0,41,1,218,9,95,111, + 112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,8,0,0,0,67,0,0,0, + 115,22,0,0,0,116,0,106,1,116,2,124,1,124,2,100, + 1,100,2,124,3,100,3,141,6,83,0,41,5,122,130,82, + 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, + 98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102, + 114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32, + 97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32, + 97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32, + 116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115, + 117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32, + 32,114,229,0,0,0,84,41,2,218,12,100,111,110,116,95, + 105,110,104,101,114,105,116,114,95,0,0,0,78,41,3,114, + 145,0,0,0,114,228,0,0,0,218,7,99,111,109,112,105, + 108,101,41,4,114,129,0,0,0,114,41,0,0,0,114,57, + 0,0,0,114,244,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,14,115,111,117,114,99,101,95, + 116,111,95,99,111,100,101,127,3,0,0,115,8,0,0,0, + 12,5,4,1,6,255,255,128,122,27,83,111,117,114,99,101, + 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,15,0,0,0,9,0,0,0,67,0,0,0,115,12, + 2,0,0,124,0,160,0,124,1,161,1,125,2,100,1,125, + 3,100,1,125,4,100,1,125,5,100,2,125,6,100,3,125, + 7,122,6,116,1,124,2,131,1,125,8,87,0,110,11,4, + 0,116,2,144,1,121,5,1,0,1,0,1,0,100,1,125, + 8,89,0,110,143,122,7,124,0,160,3,124,2,161,1,125, + 9,87,0,110,9,4,0,116,4,144,1,121,4,1,0,1, + 0,1,0,89,0,110,126,116,5,124,9,100,4,25,0,131, + 1,125,3,122,7,124,0,160,6,124,8,161,1,125,10,87, + 0,110,9,4,0,116,4,144,1,121,3,1,0,1,0,1, + 0,89,0,110,103,124,1,124,8,100,5,156,2,125,11,122, + 71,116,7,124,10,124,1,124,11,131,3,125,12,116,8,124, + 10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,100, + 7,64,0,100,8,107,3,125,6,124,6,114,138,124,12,100, + 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107, + 3,114,137,124,7,115,119,116,9,106,10,100,11,107,2,114, + 137,124,0,160,6,124,2,161,1,125,4,116,9,160,11,116, + 12,124,4,161,2,125,5,116,13,124,10,124,5,124,1,124, + 11,131,4,1,0,110,10,116,14,124,10,124,3,124,9,100, + 12,25,0,124,1,124,11,131,5,1,0,87,0,110,11,4, + 0,116,15,116,16,102,2,144,1,121,2,1,0,1,0,1, + 0,89,0,110,15,116,17,160,18,100,13,124,8,124,2,161, + 3,1,0,116,19,124,13,124,1,124,8,124,2,100,14,141, + 4,83,0,124,4,100,1,117,0,114,185,124,0,160,6,124, + 2,161,1,125,4,124,0,160,20,124,4,124,2,161,2,125, + 14,116,17,160,18,100,15,124,2,161,2,1,0,116,21,106, + 22,115,255,124,8,100,1,117,1,114,255,124,3,100,1,117, + 1,114,255,124,6,114,226,124,5,100,1,117,0,114,219,116, + 9,160,11,124,4,161,1,125,5,116,23,124,14,124,5,124, + 7,131,3,125,10,110,8,116,24,124,14,124,3,116,25,124, + 4,131,1,131,3,125,10,122,10,124,0,160,26,124,2,124, + 8,124,10,161,3,1,0,87,0,124,14,83,0,4,0,116, + 2,144,1,121,1,1,0,1,0,1,0,89,0,124,14,83, + 0,124,14,83,0,119,0,119,0,119,0,119,0,119,0,41, + 16,122,190,67,111,110,99,114,101,116,101,32,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, + 115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,82, + 101,97,100,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,114,101,113,117,105,114,101,115,32,112,97,116,104, + 95,115,116,97,116,115,32,116,111,32,98,101,32,105,109,112, + 108,101,109,101,110,116,101,100,46,32,84,111,32,119,114,105, + 116,101,10,32,32,32,32,32,32,32,32,98,121,116,101,99, + 111,100,101,44,32,115,101,116,95,100,97,116,97,32,109,117, + 115,116,32,97,108,115,111,32,98,101,32,105,109,112,108,101, + 109,101,110,116,101,100,46,10,10,32,32,32,32,32,32,32, + 32,78,70,84,114,179,0,0,0,114,169,0,0,0,114,155, + 0,0,0,114,3,0,0,0,114,0,0,0,0,114,44,0, + 0,0,90,5,110,101,118,101,114,90,6,97,108,119,97,121, + 115,218,4,115,105,122,101,122,13,123,125,32,109,97,116,99, + 104,101,115,32,123,125,41,3,114,127,0,0,0,114,117,0, + 0,0,114,118,0,0,0,122,19,99,111,100,101,32,111,98, + 106,101,99,116,32,102,114,111,109,32,123,125,41,27,114,189, + 0,0,0,114,108,0,0,0,114,94,0,0,0,114,238,0, + 0,0,114,63,0,0,0,114,33,0,0,0,114,241,0,0, + 0,114,162,0,0,0,218,10,109,101,109,111,114,121,118,105, + 101,119,114,173,0,0,0,90,21,99,104,101,99,107,95,104, + 97,115,104,95,98,97,115,101,100,95,112,121,99,115,114,167, + 0,0,0,218,17,95,82,65,87,95,77,65,71,73,67,95, + 78,85,77,66,69,82,114,168,0,0,0,114,166,0,0,0, + 114,128,0,0,0,114,160,0,0,0,114,145,0,0,0,114, + 159,0,0,0,114,175,0,0,0,114,247,0,0,0,114,15, + 0,0,0,218,19,100,111,110,116,95,119,114,105,116,101,95, + 98,121,116,101,99,111,100,101,114,181,0,0,0,114,180,0, + 0,0,114,4,0,0,0,114,240,0,0,0,41,15,114,129, + 0,0,0,114,149,0,0,0,114,118,0,0,0,114,164,0, + 0,0,114,184,0,0,0,114,167,0,0,0,90,10,104,97, + 115,104,95,98,97,115,101,100,90,12,99,104,101,99,107,95, + 115,111,117,114,99,101,114,117,0,0,0,218,2,115,116,114, + 41,0,0,0,114,161,0,0,0,114,16,0,0,0,90,10, + 98,121,116,101,115,95,100,97,116,97,90,11,99,111,100,101, + 95,111,98,106,101,99,116,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,227,0,0,0,135,3,0,0,115, + 170,0,0,0,10,7,4,1,4,1,4,1,4,1,4,1, + 2,1,12,1,14,1,8,1,2,2,14,1,14,1,4,1, + 12,2,2,1,14,1,14,1,4,1,2,3,2,1,6,254, + 2,4,12,1,16,1,12,1,4,1,12,1,10,1,2,1, + 2,255,8,2,2,254,10,3,4,1,2,1,2,1,4,254, + 8,4,2,1,4,255,2,128,2,3,2,1,2,1,6,1, + 2,1,2,1,4,251,4,128,18,7,4,1,8,2,2,1, + 4,255,6,2,2,1,2,1,6,254,8,3,10,1,12,1, + 12,1,14,1,6,1,2,255,4,2,8,1,10,1,14,1, + 6,2,6,1,4,255,2,2,16,1,4,3,14,254,2,1, + 8,1,2,254,2,233,2,225,2,250,2,251,255,128,122,21, + 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,78,41,10,114,136,0,0,0,114,135,0, + 0,0,114,137,0,0,0,114,237,0,0,0,114,238,0,0, + 0,114,240,0,0,0,114,239,0,0,0,114,243,0,0,0, + 114,247,0,0,0,114,227,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,235, + 0,0,0,76,3,0,0,115,18,0,0,0,8,0,8,2, + 8,8,8,14,8,10,8,7,14,10,12,8,255,128,114,235, 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,64,0,0,0,115,46,0,0, + 0,0,0,0,4,0,0,0,0,0,0,0,115,92,0,0, 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, - 7,156,1,100,8,100,9,132,2,90,6,100,10,83,0,41, - 11,218,16,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,122,62,67,111,110,99,114,101,116,101,32,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, - 83,111,117,114,99,101,76,111,97,100,101,114,32,117,115,105, - 110,103,32,116,104,101,32,102,105,108,101,32,115,121,115,116, - 101,109,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,67,0,0,0,115,22,0,0, - 0,116,0,124,1,131,1,125,2,124,2,106,1,124,2,106, - 2,100,1,156,2,83,0,41,3,122,33,82,101,116,117,114, - 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, - 111,114,32,116,104,101,32,112,97,116,104,46,41,2,114,180, - 0,0,0,114,249,0,0,0,78,41,3,114,63,0,0,0, - 218,8,115,116,95,109,116,105,109,101,90,7,115,116,95,115, - 105,122,101,41,3,114,130,0,0,0,114,58,0,0,0,114, - 253,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,239,0,0,0,17,4,0,0,115,6,0,0, - 0,8,2,14,1,255,128,122,27,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115, - 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,24,0, - 0,0,116,0,124,1,131,1,125,4,124,0,106,1,124,2, - 124,3,124,4,100,1,141,3,83,0,41,2,78,169,1,218, - 5,95,109,111,100,101,41,2,114,126,0,0,0,114,240,0, - 0,0,41,5,114,130,0,0,0,114,119,0,0,0,114,118, - 0,0,0,114,42,0,0,0,114,66,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, - 0,22,4,0,0,115,6,0,0,0,8,2,16,1,255,128, - 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100, - 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, - 100,101,114,75,0,0,0,114,23,1,0,0,99,3,0,0, - 0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,0, - 0,67,0,0,0,115,254,0,0,0,116,0,124,1,131,1, - 92,2,125,4,125,5,103,0,125,6,124,4,114,31,116,1, - 124,4,131,1,115,31,116,0,124,4,131,1,92,2,125,4, - 125,7,124,6,160,2,124,7,161,1,1,0,124,4,114,31, - 116,1,124,4,131,1,114,14,116,3,124,6,131,1,68,0, - 93,48,125,7,116,4,124,4,124,7,131,2,125,4,122,7, - 116,5,160,6,124,4,161,1,1,0,87,0,113,35,4,0, - 116,7,121,58,1,0,1,0,1,0,89,0,113,35,4,0, - 116,8,121,126,1,0,125,8,1,0,122,15,116,9,160,10, - 100,1,124,4,124,8,161,3,1,0,87,0,89,0,100,2, - 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, - 119,1,122,15,116,11,124,1,124,2,124,3,131,3,1,0, - 116,9,160,10,100,3,124,1,161,2,1,0,87,0,100,2, - 83,0,4,0,116,8,121,125,1,0,125,8,1,0,122,14, - 116,9,160,10,100,1,124,1,124,8,161,3,1,0,87,0, - 89,0,100,2,125,8,126,8,100,2,83,0,100,2,125,8, - 126,8,119,1,119,0,119,0,41,4,122,27,87,114,105,116, - 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, - 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, - 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, - 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, - 33,114,125,41,12,114,61,0,0,0,114,71,0,0,0,114, - 197,0,0,0,114,56,0,0,0,114,54,0,0,0,114,19, - 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, - 69,120,105,115,116,115,69,114,114,111,114,114,64,0,0,0, - 114,146,0,0,0,114,160,0,0,0,114,84,0,0,0,41, - 9,114,130,0,0,0,114,58,0,0,0,114,42,0,0,0, - 114,24,1,0,0,218,6,112,97,114,101,110,116,114,108,0, - 0,0,114,53,0,0,0,114,49,0,0,0,114,243,0,0, + 7,132,0,90,6,101,7,135,0,102,1,100,8,100,9,132, + 8,131,1,90,8,101,7,100,10,100,11,132,0,131,1,90, + 9,100,12,100,13,132,0,90,10,101,7,100,14,100,15,132, + 0,131,1,90,11,135,0,4,0,90,12,83,0,41,16,218, + 10,70,105,108,101,76,111,97,100,101,114,122,103,66,97,115, + 101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,108, + 97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,109, + 101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,32, + 112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,115, + 32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,114, + 101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,115, + 97,103,101,46,99,3,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,1, + 83,0,41,2,122,75,67,97,99,104,101,32,116,104,101,32, + 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, + 46,78,114,169,0,0,0,41,3,114,129,0,0,0,114,149, + 0,0,0,114,57,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,222,0,0,0,225,3,0,0, + 115,6,0,0,0,6,3,10,1,255,128,122,19,70,105,108, + 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,243,24,0,0,0,124,0, + 106,0,124,1,106,0,107,2,111,11,124,0,106,1,124,1, + 106,1,107,2,83,0,114,120,0,0,0,169,2,218,9,95, + 95,99,108,97,115,115,95,95,114,142,0,0,0,169,2,114, + 129,0,0,0,90,5,111,116,104,101,114,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,6,95,95,101,113, + 95,95,231,3,0,0,243,8,0,0,0,12,1,10,1,2, + 255,255,128,122,17,70,105,108,101,76,111,97,100,101,114,46, + 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, + 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, + 106,2,131,1,65,0,83,0,114,120,0,0,0,169,3,218, + 4,104,97,115,104,114,127,0,0,0,114,57,0,0,0,169, + 1,114,129,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,8,95,95,104,97,115,104,95,95,235, + 3,0,0,243,4,0,0,0,20,1,255,128,122,19,70,105, + 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, + 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,3,0,0,0,115,16,0,0,0,116, + 0,116,1,124,0,131,2,160,2,124,1,161,1,83,0,41, + 2,122,100,76,111,97,100,32,97,32,109,111,100,117,108,101, + 32,102,114,111,109,32,97,32,102,105,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,78,41,3,218,5,115,117,112,101, + 114,114,253,0,0,0,114,234,0,0,0,114,233,0,0,0, + 169,1,114,0,1,0,0,114,7,0,0,0,114,8,0,0, + 0,114,234,0,0,0,238,3,0,0,115,4,0,0,0,16, + 10,255,128,122,22,70,105,108,101,76,111,97,100,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,243,6,0,0,0,124,0,106,0,83,0,169, + 2,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, + 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, + 121,32,116,104,101,32,102,105,110,100,101,114,46,78,114,61, + 0,0,0,114,233,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,189,0,0,0,250,3,0,0, + 243,4,0,0,0,6,3,255,128,122,23,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, + 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,8,0,0,0,67,0,0,0,115,128,0,0,0, + 116,0,124,0,116,1,116,2,102,2,131,2,114,36,116,3, + 160,4,116,5,124,1,131,1,161,1,143,12,125,2,124,2, + 160,6,161,0,87,0,2,0,100,1,4,0,4,0,131,3, + 1,0,83,0,49,0,115,29,119,1,1,0,1,0,1,0, + 89,0,1,0,100,1,83,0,116,3,160,7,124,1,100,2, + 161,2,143,12,125,2,124,2,160,6,161,0,87,0,2,0, + 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,57, + 119,1,1,0,1,0,1,0,89,0,1,0,100,1,83,0, + 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, + 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, + 32,114,97,119,32,98,121,116,101,115,46,78,218,1,114,41, + 8,114,171,0,0,0,114,235,0,0,0,218,19,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 114,78,0,0,0,90,9,111,112,101,110,95,99,111,100,101, + 114,96,0,0,0,90,4,114,101,97,100,114,79,0,0,0, + 41,3,114,129,0,0,0,114,57,0,0,0,114,82,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,240,0,0,0,27,4,0,0,115,58,0,0,0,12,2, - 4,1,12,2,12,1,10,1,12,254,12,4,10,1,2,1, - 14,1,12,1,4,2,14,1,6,3,4,1,4,255,16,2, - 8,128,2,1,12,1,18,1,14,1,8,2,2,1,18,255, - 8,128,2,254,2,247,255,128,122,25,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, - 97,116,97,78,41,7,114,137,0,0,0,114,136,0,0,0, - 114,138,0,0,0,114,139,0,0,0,114,239,0,0,0,114, - 241,0,0,0,114,240,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,21,1, - 0,0,13,4,0,0,115,12,0,0,0,8,0,4,2,8, - 2,8,5,18,5,255,128,114,21,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,32,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, - 100,5,132,0,90,5,100,6,83,0,41,7,218,20,83,111, - 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,122,45,76,111,97,100,101,114,32,119,104,105,99,104, - 32,104,97,110,100,108,101,115,32,115,111,117,114,99,101,108, - 101,115,115,32,102,105,108,101,32,105,109,112,111,114,116,115, - 46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,5,0,0,0,67,0,0,0,115,68,0,0,0,124, - 0,160,0,124,1,161,1,125,2,124,0,160,1,124,2,161, - 1,125,3,124,1,124,2,100,1,156,2,125,4,116,2,124, - 3,124,1,124,4,131,3,1,0,116,3,116,4,124,3,131, - 1,100,2,100,0,133,2,25,0,124,1,124,2,100,3,141, - 3,83,0,41,4,78,114,170,0,0,0,114,156,0,0,0, - 41,2,114,128,0,0,0,114,118,0,0,0,41,5,114,190, - 0,0,0,114,242,0,0,0,114,163,0,0,0,114,176,0, - 0,0,114,250,0,0,0,41,5,114,130,0,0,0,114,150, - 0,0,0,114,58,0,0,0,114,42,0,0,0,114,162,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,228,0,0,0,62,4,0,0,115,24,0,0,0,10, - 1,10,1,2,4,2,1,6,254,12,4,2,1,14,1,2, - 1,2,1,6,253,255,128,122,29,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, - 24,0,0,0,41,2,122,39,82,101,116,117,114,110,32,78, - 111,110,101,32,97,115,32,116,104,101,114,101,32,105,115,32, - 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, - 114,7,0,0,0,114,234,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,244,0,0,0,78,4, - 0,0,114,25,0,0,0,122,31,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,115,111,117,114,99,101,78,41,6,114,137,0,0,0, - 114,136,0,0,0,114,138,0,0,0,114,139,0,0,0,114, - 228,0,0,0,114,244,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,27,1, - 0,0,58,4,0,0,115,10,0,0,0,8,0,4,2,8, - 2,12,16,255,128,114,27,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, - 0,0,0,115,92,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, - 132,0,90,5,100,6,100,7,132,0,90,6,100,8,100,9, - 132,0,90,7,100,10,100,11,132,0,90,8,100,12,100,13, - 132,0,90,9,100,14,100,15,132,0,90,10,100,16,100,17, - 132,0,90,11,101,12,100,18,100,19,132,0,131,1,90,13, - 100,20,83,0,41,21,114,17,1,0,0,122,93,76,111,97, - 100,101,114,32,102,111,114,32,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, - 84,104,101,32,99,111,110,115,116,114,117,99,116,111,114,32, - 105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,119, - 111,114,107,32,119,105,116,104,32,70,105,108,101,70,105,110, - 100,101,114,46,10,10,32,32,32,32,99,3,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, - 0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,2, - 124,0,95,1,100,0,83,0,114,121,0,0,0,114,170,0, - 0,0,41,3,114,130,0,0,0,114,128,0,0,0,114,58, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,223,0,0,0,91,4,0,0,115,6,0,0,0, - 6,1,10,1,255,128,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, - 105,116,95,95,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,114,255,0, - 0,0,114,121,0,0,0,114,0,1,0,0,114,2,1,0, + 114,241,0,0,0,255,3,0,0,115,16,0,0,0,14,2, + 16,1,22,1,20,128,14,2,22,1,20,128,255,128,122,19, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, + 97,116,97,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,2,0,0,0,67,0,0,0,115,20,0,0, + 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,124, + 0,131,1,83,0,41,3,78,114,0,0,0,0,41,1,218, + 10,70,105,108,101,82,101,97,100,101,114,41,2,218,17,105, + 109,112,111,114,116,108,105,98,46,114,101,97,100,101,114,115, + 114,17,1,0,0,41,3,114,129,0,0,0,114,230,0,0, + 0,114,17,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,19,103,101,116,95,114,101,115,111,117, + 114,99,101,95,114,101,97,100,101,114,8,4,0,0,115,6, + 0,0,0,12,2,8,1,255,128,122,30,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,114,101,115,111,117,114, + 99,101,95,114,101,97,100,101,114,41,13,114,136,0,0,0, + 114,135,0,0,0,114,137,0,0,0,114,138,0,0,0,114, + 222,0,0,0,114,2,1,0,0,114,8,1,0,0,114,146, + 0,0,0,114,234,0,0,0,114,189,0,0,0,114,241,0, + 0,0,114,19,1,0,0,90,13,95,95,99,108,97,115,115, + 99,101,108,108,95,95,114,7,0,0,0,114,7,0,0,0, + 114,11,1,0,0,114,8,0,0,0,114,253,0,0,0,220, + 3,0,0,115,26,0,0,0,8,0,4,2,8,3,8,6, + 8,4,2,3,14,1,2,11,10,1,8,4,2,9,18,1, + 255,128,114,253,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, + 115,46,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, + 5,100,6,100,7,156,1,100,8,100,9,132,2,90,6,100, + 10,83,0,41,11,218,16,83,111,117,114,99,101,70,105,108, + 101,76,111,97,100,101,114,122,62,67,111,110,99,114,101,116, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,83,111,117,114,99,101,76,111,97,100,101,114, + 32,117,115,105,110,103,32,116,104,101,32,102,105,108,101,32, + 115,121,115,116,101,109,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,22,0,0,0,116,0,124,1,131,1,125,2,124,2,106, + 1,124,2,106,2,100,1,156,2,83,0,41,3,122,33,82, + 101,116,117,114,110,32,116,104,101,32,109,101,116,97,100,97, + 116,97,32,102,111,114,32,116,104,101,32,112,97,116,104,46, + 41,2,114,179,0,0,0,114,248,0,0,0,78,41,3,114, + 62,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7, + 115,116,95,115,105,122,101,41,3,114,129,0,0,0,114,57, + 0,0,0,114,252,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,238,0,0,0,18,4,0,0, + 115,6,0,0,0,8,2,14,1,255,128,122,27,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, + 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, + 0,115,24,0,0,0,116,0,124,1,131,1,125,4,124,0, + 106,1,124,2,124,3,124,4,100,1,141,3,83,0,41,2, + 78,169,1,218,5,95,109,111,100,101,41,2,114,125,0,0, + 0,114,239,0,0,0,41,5,114,129,0,0,0,114,118,0, + 0,0,114,117,0,0,0,114,41,0,0,0,114,65,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,3,1,0,0,95,4,0,0,114,4,1,0,0,122,26, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, - 0,0,0,114,5,1,0,0,114,121,0,0,0,114,6,1, - 0,0,114,8,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,9,1,0,0,99,4,0,0,114, - 10,1,0,0,122,28,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,95,95,104,97,115,104, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,5,0,0,0,67,0,0,0,115,36,0,0,0, - 116,0,160,1,116,2,106,3,124,1,161,2,125,2,116,0, - 160,4,100,1,124,1,106,5,124,0,106,6,161,3,1,0, - 124,2,83,0,41,3,122,38,67,114,101,97,116,101,32,97, - 110,32,117,110,105,116,105,97,108,105,122,101,100,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,122,38, + 114,240,0,0,0,23,4,0,0,115,6,0,0,0,8,2, + 16,1,255,128,122,32,83,111,117,114,99,101,70,105,108,101, + 76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,121, + 116,101,99,111,100,101,114,74,0,0,0,114,22,1,0,0, + 99,3,0,0,0,0,0,0,0,1,0,0,0,9,0,0, + 0,11,0,0,0,67,0,0,0,115,254,0,0,0,116,0, + 124,1,131,1,92,2,125,4,125,5,103,0,125,6,124,4, + 114,31,116,1,124,4,131,1,115,31,116,0,124,4,131,1, + 92,2,125,4,125,7,124,6,160,2,124,7,161,1,1,0, + 124,4,114,31,116,1,124,4,131,1,114,14,116,3,124,6, + 131,1,68,0,93,48,125,7,116,4,124,4,124,7,131,2, + 125,4,122,7,116,5,160,6,124,4,161,1,1,0,87,0, + 113,35,4,0,116,7,121,58,1,0,1,0,1,0,89,0, + 113,35,4,0,116,8,121,126,1,0,125,8,1,0,122,15, + 116,9,160,10,100,1,124,4,124,8,161,3,1,0,87,0, + 89,0,100,2,125,8,126,8,1,0,100,2,83,0,100,2, + 125,8,126,8,119,1,122,15,116,11,124,1,124,2,124,3, + 131,3,1,0,116,9,160,10,100,3,124,1,161,2,1,0, + 87,0,100,2,83,0,4,0,116,8,121,125,1,0,125,8, + 1,0,122,14,116,9,160,10,100,1,124,1,124,8,161,3, + 1,0,87,0,89,0,100,2,125,8,126,8,100,2,83,0, + 100,2,125,8,126,8,119,1,119,0,119,0,41,4,122,27, + 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, + 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, + 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, + 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, + 101,100,32,123,33,114,125,41,12,114,60,0,0,0,114,70, + 0,0,0,114,196,0,0,0,114,55,0,0,0,114,53,0, + 0,0,114,18,0,0,0,90,5,109,107,100,105,114,218,15, + 70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,114, + 63,0,0,0,114,145,0,0,0,114,159,0,0,0,114,83, + 0,0,0,41,9,114,129,0,0,0,114,57,0,0,0,114, + 41,0,0,0,114,23,1,0,0,218,6,112,97,114,101,110, + 116,114,107,0,0,0,114,52,0,0,0,114,48,0,0,0, + 114,242,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,239,0,0,0,28,4,0,0,115,58,0, + 0,0,12,2,4,1,12,2,12,1,10,1,12,254,12,4, + 10,1,2,1,14,1,12,1,4,2,14,1,6,3,4,1, + 4,255,16,2,8,128,2,1,12,1,18,1,14,1,8,2, + 2,1,18,255,8,128,2,254,2,247,255,128,122,25,83,111, + 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, + 101,116,95,100,97,116,97,78,41,7,114,136,0,0,0,114, + 135,0,0,0,114,137,0,0,0,114,138,0,0,0,114,238, + 0,0,0,114,240,0,0,0,114,239,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,20,1,0,0,14,4,0,0,115,12,0,0,0,8, + 0,4,2,8,2,8,5,18,5,255,128,114,20,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,64,0,0,0,115,32,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,100,6,83,0,41,7, + 218,20,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,122,45,76,111,97,100,101,114,32,119, + 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, + 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, + 111,114,116,115,46,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,68, + 0,0,0,124,0,160,0,124,1,161,1,125,2,124,0,160, + 1,124,2,161,1,125,3,124,1,124,2,100,1,156,2,125, + 4,116,2,124,3,124,1,124,4,131,3,1,0,116,3,116, + 4,124,3,131,1,100,2,100,0,133,2,25,0,124,1,124, + 2,100,3,141,3,83,0,41,4,78,114,169,0,0,0,114, + 155,0,0,0,41,2,114,127,0,0,0,114,117,0,0,0, + 41,5,114,189,0,0,0,114,241,0,0,0,114,162,0,0, + 0,114,175,0,0,0,114,249,0,0,0,41,5,114,129,0, + 0,0,114,149,0,0,0,114,57,0,0,0,114,41,0,0, + 0,114,161,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,227,0,0,0,63,4,0,0,115,24, + 0,0,0,10,1,10,1,2,4,2,1,6,254,12,4,2, + 1,14,1,2,1,2,1,6,253,255,128,122,29,83,111,117, + 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,114,23,0,0,0,41,2,122,39,82,101,116,117, + 114,110,32,78,111,110,101,32,97,115,32,116,104,101,114,101, + 32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,7,0,0,0,114,233,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,243,0, + 0,0,79,4,0,0,114,24,0,0,0,122,31,83,111,117, + 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,115,111,117,114,99,101,78,41,6,114, + 136,0,0,0,114,135,0,0,0,114,137,0,0,0,114,138, + 0,0,0,114,227,0,0,0,114,243,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,26,1,0,0,59,4,0,0,115,10,0,0,0,8, + 0,4,2,8,2,12,16,255,128,114,26,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,92,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, + 100,8,100,9,132,0,90,7,100,10,100,11,132,0,90,8, + 100,12,100,13,132,0,90,9,100,14,100,15,132,0,90,10, + 100,16,100,17,132,0,90,11,101,12,100,18,100,19,132,0, + 131,1,90,13,100,20,83,0,41,21,114,16,1,0,0,122, + 93,76,111,97,100,101,114,32,102,111,114,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,84,104,101,32,99,111,110,115,116,114,117,99, + 116,111,114,32,105,115,32,100,101,115,105,103,110,101,100,32, + 116,111,32,119,111,114,107,32,119,105,116,104,32,70,105,108, + 101,70,105,110,100,101,114,46,10,10,32,32,32,32,99,3, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2, + 0,0,0,67,0,0,0,115,16,0,0,0,124,1,124,0, + 95,0,124,2,124,0,95,1,100,0,83,0,114,120,0,0, + 0,114,169,0,0,0,41,3,114,129,0,0,0,114,127,0, + 0,0,114,57,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,222,0,0,0,92,4,0,0,115, + 6,0,0,0,6,1,10,1,255,128,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, + 0,114,254,0,0,0,114,120,0,0,0,114,255,0,0,0, + 114,1,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,2,1,0,0,96,4,0,0,114,3,1, + 0,0,122,26,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,95,95,101,113,95,95,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,114,4,1,0,0,114,120,0,0, + 0,114,5,1,0,0,114,7,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,8,1,0,0,100, + 4,0,0,114,9,1,0,0,122,28,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,95, + 104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,5,0,0,0,67,0,0,0,115, + 36,0,0,0,116,0,160,1,116,2,106,3,124,1,161,2, + 125,2,116,0,160,4,100,1,124,1,106,5,124,0,106,6, + 161,3,1,0,124,2,83,0,41,3,122,38,67,114,101,97, + 116,101,32,97,110,32,117,110,105,116,105,97,108,105,122,101, + 100,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,122,38,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,32,123,33,114,125,32,108,111,97,100,101,100, + 32,102,114,111,109,32,123,33,114,125,78,41,7,114,145,0, + 0,0,114,228,0,0,0,114,173,0,0,0,90,14,99,114, + 101,97,116,101,95,100,121,110,97,109,105,99,114,159,0,0, + 0,114,127,0,0,0,114,57,0,0,0,41,3,114,129,0, + 0,0,114,197,0,0,0,114,230,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,225,0,0,0, + 103,4,0,0,115,16,0,0,0,4,2,6,1,4,255,6, + 2,8,1,4,255,4,2,255,128,122,33,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,99, + 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,5,0,0, + 0,67,0,0,0,115,36,0,0,0,116,0,160,1,116,2, + 106,3,124,1,161,2,1,0,116,0,160,4,100,1,124,0, + 106,5,124,0,106,6,161,3,1,0,100,2,83,0,41,3, + 122,30,73,110,105,116,105,97,108,105,122,101,32,97,110,32, 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 32,123,33,114,125,32,108,111,97,100,101,100,32,102,114,111, - 109,32,123,33,114,125,78,41,7,114,146,0,0,0,114,229, - 0,0,0,114,174,0,0,0,90,14,99,114,101,97,116,101, - 95,100,121,110,97,109,105,99,114,160,0,0,0,114,128,0, - 0,0,114,58,0,0,0,41,3,114,130,0,0,0,114,198, - 0,0,0,114,231,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,226,0,0,0,102,4,0,0, - 115,16,0,0,0,4,2,6,1,4,255,6,2,8,1,4, - 255,4,2,255,128,122,33,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,99,114,101,97,116, - 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,5,0,0,0,67,0,0, - 0,115,36,0,0,0,116,0,160,1,116,2,106,3,124,1, - 161,2,1,0,116,0,160,4,100,1,124,0,106,5,124,0, - 106,6,161,3,1,0,100,2,83,0,41,3,122,30,73,110, - 105,116,105,97,108,105,122,101,32,97,110,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,122,40,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,123, - 33,114,125,32,101,120,101,99,117,116,101,100,32,102,114,111, - 109,32,123,33,114,125,78,41,7,114,146,0,0,0,114,229, - 0,0,0,114,174,0,0,0,90,12,101,120,101,99,95,100, - 121,110,97,109,105,99,114,160,0,0,0,114,128,0,0,0, - 114,58,0,0,0,169,2,114,130,0,0,0,114,231,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,232,0,0,0,110,4,0,0,115,10,0,0,0,14,2, - 6,1,8,1,8,255,255,128,122,31,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,0, - 0,0,115,36,0,0,0,116,0,124,0,106,1,131,1,100, - 1,25,0,137,0,116,2,135,0,102,1,100,2,100,3,132, - 8,116,3,68,0,131,1,131,1,83,0,41,5,122,49,82, - 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, - 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, - 114,3,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,26, - 0,0,0,124,0,93,9,125,1,136,0,100,0,124,1,23, - 0,107,2,86,0,1,0,113,1,100,1,83,0,41,2,114, - 223,0,0,0,78,114,7,0,0,0,169,2,114,5,0,0, - 0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,108, - 101,95,110,97,109,101,114,7,0,0,0,114,8,0,0,0, - 114,9,0,0,0,119,4,0,0,115,8,0,0,0,4,0, - 2,1,20,255,255,128,122,49,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, - 60,103,101,110,101,120,112,114,62,78,41,4,114,61,0,0, - 0,114,58,0,0,0,218,3,97,110,121,114,219,0,0,0, - 114,234,0,0,0,114,7,0,0,0,114,31,1,0,0,114, - 8,0,0,0,114,193,0,0,0,116,4,0,0,115,10,0, - 0,0,14,2,12,1,2,1,8,255,255,128,122,30,69,120, + 122,40,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,32,123,33,114,125,32,101,120,101,99,117,116,101,100, + 32,102,114,111,109,32,123,33,114,125,78,41,7,114,145,0, + 0,0,114,228,0,0,0,114,173,0,0,0,90,12,101,120, + 101,99,95,100,121,110,97,109,105,99,114,159,0,0,0,114, + 127,0,0,0,114,57,0,0,0,169,2,114,129,0,0,0, + 114,230,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,231,0,0,0,111,4,0,0,115,10,0, + 0,0,14,2,6,1,8,1,8,255,255,128,122,31,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,114,24,0,0,0,41,2,122,63,82,101, - 116,117,114,110,32,78,111,110,101,32,97,115,32,97,110,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97, - 32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,7, - 0,0,0,114,234,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,228,0,0,0,122,4,0,0, - 114,25,0,0,0,122,28,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,24,0,0, - 0,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,7,0,0,0, - 114,234,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,244,0,0,0,126,4,0,0,114,25,0, - 0,0,122,30,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, - 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,114,13,1,0,0, - 114,14,1,0,0,114,62,0,0,0,114,234,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,190, - 0,0,0,130,4,0,0,114,15,1,0,0,122,32,69,120, + 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,3,0,0,0,115,36,0,0,0,116,0,124,0,106, + 1,131,1,100,1,25,0,137,0,116,2,135,0,102,1,100, + 2,100,3,132,8,116,3,68,0,131,1,131,1,83,0,41, + 5,122,49,82,101,116,117,114,110,32,84,114,117,101,32,105, + 102,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107, + 97,103,101,46,114,3,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, + 0,0,115,28,0,0,0,129,0,124,0,93,9,125,1,136, + 0,100,0,124,1,23,0,107,2,86,0,1,0,113,2,100, + 1,83,0,41,2,114,222,0,0,0,78,114,7,0,0,0, + 169,2,114,5,0,0,0,218,6,115,117,102,102,105,120,169, + 1,90,9,102,105,108,101,95,110,97,109,101,114,7,0,0, + 0,114,8,0,0,0,114,9,0,0,0,120,4,0,0,115, + 8,0,0,0,6,128,2,1,20,255,255,128,122,49,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, - 14,114,137,0,0,0,114,136,0,0,0,114,138,0,0,0, - 114,139,0,0,0,114,223,0,0,0,114,3,1,0,0,114, - 9,1,0,0,114,226,0,0,0,114,232,0,0,0,114,193, - 0,0,0,114,228,0,0,0,114,244,0,0,0,114,147,0, - 0,0,114,190,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,17,1,0,0, - 83,4,0,0,115,26,0,0,0,8,0,4,2,8,6,8, - 4,8,4,8,3,8,8,8,6,8,6,8,4,2,4,14, - 1,255,128,114,17,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,104,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, - 90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0, - 90,7,100,10,100,11,132,0,90,8,100,12,100,13,132,0, - 90,9,100,14,100,15,132,0,90,10,100,16,100,17,132,0, - 90,11,100,18,100,19,132,0,90,12,100,20,100,21,132,0, - 90,13,100,22,100,23,132,0,90,14,100,24,83,0,41,25, - 218,14,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 97,38,1,0,0,82,101,112,114,101,115,101,110,116,115,32, - 97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107, - 97,103,101,39,115,32,112,97,116,104,46,32,32,73,116,32, - 117,115,101,115,32,116,104,101,32,109,111,100,117,108,101,32, - 110,97,109,101,10,32,32,32,32,116,111,32,102,105,110,100, - 32,105,116,115,32,112,97,114,101,110,116,32,109,111,100,117, - 108,101,44,32,97,110,100,32,102,114,111,109,32,116,104,101, - 114,101,32,105,116,32,108,111,111,107,115,32,117,112,32,116, - 104,101,32,112,97,114,101,110,116,39,115,10,32,32,32,32, - 95,95,112,97,116,104,95,95,46,32,32,87,104,101,110,32, - 116,104,105,115,32,99,104,97,110,103,101,115,44,32,116,104, - 101,32,109,111,100,117,108,101,39,115,32,111,119,110,32,112, - 97,116,104,32,105,115,32,114,101,99,111,109,112,117,116,101, - 100,44,10,32,32,32,32,117,115,105,110,103,32,112,97,116, - 104,95,102,105,110,100,101,114,46,32,32,70,111,114,32,116, - 111,112,45,108,101,118,101,108,32,109,111,100,117,108,101,115, - 44,32,116,104,101,32,112,97,114,101,110,116,32,109,111,100, - 117,108,101,39,115,32,112,97,116,104,10,32,32,32,32,105, - 115,32,115,121,115,46,112,97,116,104,46,99,4,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,36,0,0,0,124,1,124,0,95,0,124, - 2,124,0,95,1,116,2,124,0,160,3,161,0,131,1,124, - 0,95,4,124,3,124,0,95,5,100,0,83,0,114,121,0, - 0,0,41,6,218,5,95,110,97,109,101,218,5,95,112,97, - 116,104,114,123,0,0,0,218,16,95,103,101,116,95,112,97, - 114,101,110,116,95,112,97,116,104,218,17,95,108,97,115,116, - 95,112,97,114,101,110,116,95,112,97,116,104,218,12,95,112, - 97,116,104,95,102,105,110,100,101,114,169,4,114,130,0,0, - 0,114,128,0,0,0,114,58,0,0,0,90,11,112,97,116, - 104,95,102,105,110,100,101,114,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,223,0,0,0,143,4,0,0, - 115,10,0,0,0,6,1,6,1,14,1,10,1,255,128,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, - 0,115,38,0,0,0,124,0,106,0,160,1,100,1,161,1, - 92,3,125,1,125,2,125,3,124,2,100,2,107,2,114,15, - 100,3,83,0,124,1,100,4,102,2,83,0,41,6,122,62, - 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, - 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, - 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, - 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,86, - 0,0,0,114,10,0,0,0,41,2,114,16,0,0,0,114, - 58,0,0,0,90,8,95,95,112,97,116,104,95,95,78,41, - 2,114,34,1,0,0,114,55,0,0,0,41,4,114,130,0, - 0,0,114,26,1,0,0,218,3,100,111,116,90,2,109,101, + 114,46,105,115,95,112,97,99,107,97,103,101,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,78, + 41,4,114,60,0,0,0,114,57,0,0,0,218,3,97,110, + 121,114,218,0,0,0,114,233,0,0,0,114,7,0,0,0, + 114,30,1,0,0,114,8,0,0,0,114,192,0,0,0,117, + 4,0,0,115,10,0,0,0,14,2,12,1,2,1,8,255, + 255,128,122,30,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, + 103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,114,23,0,0,0, + 41,2,122,63,82,101,116,117,114,110,32,78,111,110,101,32, + 97,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,99,97,110,110,111,116,32,99,114, + 101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101, + 99,116,46,78,114,7,0,0,0,114,233,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,227,0, + 0,0,123,4,0,0,114,24,0,0,0,122,28,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,23,0,0,0,41,2,122,53,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, + 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, + 78,114,7,0,0,0,114,233,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,243,0,0,0,127, + 4,0,0,114,24,0,0,0,122,30,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,114,12,1,0,0,114,13,1,0,0,114,61,0,0,0, + 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,189,0,0,0,131,4,0,0,114,14,1, + 0,0,122,32,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,78,41,14,114,136,0,0,0,114,135,0,0, + 0,114,137,0,0,0,114,138,0,0,0,114,222,0,0,0, + 114,2,1,0,0,114,8,1,0,0,114,225,0,0,0,114, + 231,0,0,0,114,192,0,0,0,114,227,0,0,0,114,243, + 0,0,0,114,146,0,0,0,114,189,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,16,1,0,0,84,4,0,0,115,26,0,0,0,8, + 0,4,2,8,6,8,4,8,4,8,3,8,8,8,6,8, + 6,8,4,2,4,14,1,255,128,114,16,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,64,0,0,0,115,104,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, + 100,8,100,9,132,0,90,7,100,10,100,11,132,0,90,8, + 100,12,100,13,132,0,90,9,100,14,100,15,132,0,90,10, + 100,16,100,17,132,0,90,11,100,18,100,19,132,0,90,12, + 100,20,100,21,132,0,90,13,100,22,100,23,132,0,90,14, + 100,24,83,0,41,25,218,14,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,97,38,1,0,0,82,101,112,114,101, + 115,101,110,116,115,32,97,32,110,97,109,101,115,112,97,99, + 101,32,112,97,99,107,97,103,101,39,115,32,112,97,116,104, + 46,32,32,73,116,32,117,115,101,115,32,116,104,101,32,109, + 111,100,117,108,101,32,110,97,109,101,10,32,32,32,32,116, + 111,32,102,105,110,100,32,105,116,115,32,112,97,114,101,110, + 116,32,109,111,100,117,108,101,44,32,97,110,100,32,102,114, + 111,109,32,116,104,101,114,101,32,105,116,32,108,111,111,107, + 115,32,117,112,32,116,104,101,32,112,97,114,101,110,116,39, + 115,10,32,32,32,32,95,95,112,97,116,104,95,95,46,32, + 32,87,104,101,110,32,116,104,105,115,32,99,104,97,110,103, + 101,115,44,32,116,104,101,32,109,111,100,117,108,101,39,115, + 32,111,119,110,32,112,97,116,104,32,105,115,32,114,101,99, + 111,109,112,117,116,101,100,44,10,32,32,32,32,117,115,105, + 110,103,32,112,97,116,104,95,102,105,110,100,101,114,46,32, + 32,70,111,114,32,116,111,112,45,108,101,118,101,108,32,109, + 111,100,117,108,101,115,44,32,116,104,101,32,112,97,114,101, + 110,116,32,109,111,100,117,108,101,39,115,32,112,97,116,104, + 10,32,32,32,32,105,115,32,115,121,115,46,112,97,116,104, + 46,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,124, + 1,124,0,95,0,124,2,124,0,95,1,116,2,124,0,160, + 3,161,0,131,1,124,0,95,4,124,3,124,0,95,5,100, + 0,83,0,114,120,0,0,0,41,6,218,5,95,110,97,109, + 101,218,5,95,112,97,116,104,114,122,0,0,0,218,16,95, + 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218, + 17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97, + 116,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114, + 169,4,114,129,0,0,0,114,127,0,0,0,114,57,0,0, + 0,90,11,112,97,116,104,95,102,105,110,100,101,114,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,222,0, + 0,0,144,4,0,0,115,10,0,0,0,6,1,6,1,14, + 1,10,1,255,128,122,23,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,105,110,105,116,95,95,99,1, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,67,0,0,0,115,38,0,0,0,124,0,106,0, + 160,1,100,1,161,1,92,3,125,1,125,2,125,3,124,2, + 100,2,107,2,114,15,100,3,83,0,124,1,100,4,102,2, + 83,0,41,6,122,62,82,101,116,117,114,110,115,32,97,32, + 116,117,112,108,101,32,111,102,32,40,112,97,114,101,110,116, + 45,109,111,100,117,108,101,45,110,97,109,101,44,32,112,97, + 114,101,110,116,45,112,97,116,104,45,97,116,116,114,45,110, + 97,109,101,41,114,85,0,0,0,114,10,0,0,0,41,2, + 114,15,0,0,0,114,57,0,0,0,90,8,95,95,112,97, + 116,104,95,95,78,41,2,114,33,1,0,0,114,54,0,0, + 0,41,4,114,129,0,0,0,114,25,1,0,0,218,3,100, + 111,116,90,2,109,101,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,23,95,102,105,110,100,95,112,97,114, + 101,110,116,95,112,97,116,104,95,110,97,109,101,115,150,4, + 0,0,115,10,0,0,0,18,2,8,1,4,2,8,3,255, + 128,122,38,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,112, + 97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,28,0,0,0,124,0,160,0,161,0,92,2,125, + 1,125,2,116,1,116,2,106,3,124,1,25,0,124,2,131, + 2,83,0,114,120,0,0,0,41,4,114,40,1,0,0,114, + 141,0,0,0,114,15,0,0,0,218,7,109,111,100,117,108, + 101,115,41,3,114,129,0,0,0,90,18,112,97,114,101,110, + 116,95,109,111,100,117,108,101,95,110,97,109,101,90,14,112, + 97,116,104,95,97,116,116,114,95,110,97,109,101,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,35,1,0, + 0,160,4,0,0,115,6,0,0,0,12,1,16,1,255,128, + 122,31,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,103,101,116,95,112,97,114,101,110,116,95,112,97,116, + 104,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,116, + 0,124,0,160,1,161,0,131,1,125,1,124,1,124,0,106, + 2,107,3,114,37,124,0,160,3,124,0,106,4,124,1,161, + 2,125,2,124,2,100,0,117,1,114,34,124,2,106,5,100, + 0,117,0,114,34,124,2,106,6,114,34,124,2,106,6,124, + 0,95,7,124,1,124,0,95,2,124,0,106,7,83,0,114, + 120,0,0,0,41,8,114,122,0,0,0,114,35,1,0,0, + 114,36,1,0,0,114,37,1,0,0,114,33,1,0,0,114, + 150,0,0,0,114,188,0,0,0,114,34,1,0,0,41,3, + 114,129,0,0,0,90,11,112,97,114,101,110,116,95,112,97, + 116,104,114,197,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,12,95,114,101,99,97,108,99,117, + 108,97,116,101,164,4,0,0,115,18,0,0,0,12,2,10, + 1,14,1,18,3,6,1,8,1,6,1,6,1,255,128,122, + 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,243,12,0,0,0,116,0,124,0,160,1, + 161,0,131,1,83,0,114,120,0,0,0,41,2,218,4,105, + 116,101,114,114,42,1,0,0,114,7,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,95, + 105,116,101,114,95,95,177,4,0,0,243,4,0,0,0,12, + 1,255,128,122,23,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,105,116,101,114,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,12,0,0,0,124,0,160,0,161,0, + 124,1,25,0,83,0,114,120,0,0,0,169,1,114,42,1, + 0,0,41,2,114,129,0,0,0,218,5,105,110,100,101,120, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 23,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97, - 116,104,95,110,97,109,101,115,149,4,0,0,115,10,0,0, - 0,18,2,8,1,4,2,8,3,255,128,122,38,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,102,105,110, - 100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97, - 109,101,115,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,67,0,0,0,115,28,0,0, - 0,124,0,160,0,161,0,92,2,125,1,125,2,116,1,116, - 2,106,3,124,1,25,0,124,2,131,2,83,0,114,121,0, - 0,0,41,4,114,41,1,0,0,114,142,0,0,0,114,16, - 0,0,0,218,7,109,111,100,117,108,101,115,41,3,114,130, - 0,0,0,90,18,112,97,114,101,110,116,95,109,111,100,117, - 108,101,95,110,97,109,101,90,14,112,97,116,104,95,97,116, - 116,114,95,110,97,109,101,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,36,1,0,0,159,4,0,0,115, - 6,0,0,0,12,1,16,1,255,128,122,31,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,103,101,116,95, - 112,97,114,101,110,116,95,112,97,116,104,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 67,0,0,0,115,80,0,0,0,116,0,124,0,160,1,161, - 0,131,1,125,1,124,1,124,0,106,2,107,3,114,37,124, - 0,160,3,124,0,106,4,124,1,161,2,125,2,124,2,100, - 0,117,1,114,34,124,2,106,5,100,0,117,0,114,34,124, - 2,106,6,114,34,124,2,106,6,124,0,95,7,124,1,124, - 0,95,2,124,0,106,7,83,0,114,121,0,0,0,41,8, - 114,123,0,0,0,114,36,1,0,0,114,37,1,0,0,114, - 38,1,0,0,114,34,1,0,0,114,151,0,0,0,114,189, - 0,0,0,114,35,1,0,0,41,3,114,130,0,0,0,90, - 11,112,97,114,101,110,116,95,112,97,116,104,114,198,0,0, + 11,95,95,103,101,116,105,116,101,109,95,95,180,4,0,0, + 114,46,1,0,0,122,26,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,103,101,116,105,116,101,109,95, + 95,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,14,0,0,0,124, + 2,124,0,106,0,124,1,60,0,100,0,83,0,114,120,0, + 0,0,41,1,114,34,1,0,0,41,3,114,129,0,0,0, + 114,48,1,0,0,114,57,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,95,95,115,101,116, + 105,116,101,109,95,95,183,4,0,0,115,4,0,0,0,14, + 1,255,128,122,26,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,115,101,116,105,116,101,109,95,95,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,114,43,1,0,0,114,120,0, + 0,0,41,2,114,4,0,0,0,114,42,1,0,0,114,7, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,7,95,95,108,101,110,95,95,186,4,0,0,114, + 46,1,0,0,122,22,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,108,101,110,95,95,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,243,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,20,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,41, + 2,114,76,0,0,0,114,34,1,0,0,114,7,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 8,95,95,114,101,112,114,95,95,189,4,0,0,114,46,1, + 0,0,122,23,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 67,0,0,0,115,12,0,0,0,124,1,124,0,160,0,161, + 0,118,0,83,0,114,120,0,0,0,114,47,1,0,0,169, + 2,114,129,0,0,0,218,4,105,116,101,109,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,12,95,95,99, + 111,110,116,97,105,110,115,95,95,192,4,0,0,114,46,1, + 0,0,122,27,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,99,111,110,116,97,105,110,115,95,95,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,16,0,0,0,124,0,106, + 0,160,1,124,1,161,1,1,0,100,0,83,0,114,120,0, + 0,0,41,2,114,34,1,0,0,114,196,0,0,0,114,54, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,196,0,0,0,195,4,0,0,243,4,0,0,0, + 16,1,255,128,122,21,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,97,112,112,101,110,100,78,41,15,114,136, + 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, + 0,0,114,222,0,0,0,114,40,1,0,0,114,35,1,0, + 0,114,42,1,0,0,114,45,1,0,0,114,49,1,0,0, + 114,50,1,0,0,114,51,1,0,0,114,53,1,0,0,114, + 56,1,0,0,114,196,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,32,1, + 0,0,137,4,0,0,115,28,0,0,0,8,0,4,1,8, + 6,8,6,8,10,8,4,8,13,8,3,8,3,8,3,8, + 3,8,3,12,3,255,128,114,32,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,64,0,0,0,115,88,0,0,0,101,0,90,1,100,0, + 90,2,100,1,100,2,132,0,90,3,101,4,100,3,100,4, + 132,0,131,1,90,5,100,5,100,6,132,0,90,6,100,7, + 100,8,132,0,90,7,100,9,100,10,132,0,90,8,100,11, + 100,12,132,0,90,9,100,13,100,14,132,0,90,10,100,15, + 100,16,132,0,90,11,100,17,100,18,132,0,90,12,100,19, + 83,0,41,20,218,16,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 18,0,0,0,116,0,124,1,124,2,124,3,131,3,124,0, + 95,1,100,0,83,0,114,120,0,0,0,41,2,114,32,1, + 0,0,114,34,1,0,0,114,38,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,222,0,0,0, + 201,4,0,0,115,4,0,0,0,18,1,255,128,122,25,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, + 0,115,24,0,0,0,116,0,160,1,100,1,116,2,161,2, + 1,0,100,2,160,3,124,0,106,4,161,1,83,0,41,4, + 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, + 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, + 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, + 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, + 32,32,32,32,32,122,82,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114, + 101,112,114,40,41,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, + 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, + 116,104,111,110,32,51,46,49,50,122,25,60,109,111,100,117, + 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, + 99,101,41,62,78,41,5,114,87,0,0,0,114,88,0,0, + 0,114,89,0,0,0,114,76,0,0,0,114,136,0,0,0, + 41,1,114,230,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,11,109,111,100,117,108,101,95,114, + 101,112,114,204,4,0,0,115,10,0,0,0,6,7,2,1, + 4,255,12,2,255,128,122,28,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,109,111,100,117,108,101,95, + 114,101,112,114,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, + 0,0,41,2,78,84,114,7,0,0,0,114,233,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 192,0,0,0,215,4,0,0,243,4,0,0,0,4,1,255, + 128,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,114,23,0,0,0,41,2,78,114, + 10,0,0,0,114,7,0,0,0,114,233,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,243,0, + 0,0,218,4,0,0,114,60,1,0,0,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, + 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,6,0,0,0,67,0,0, + 0,115,16,0,0,0,116,0,100,1,100,2,100,3,100,4, + 100,5,141,4,83,0,41,6,78,114,10,0,0,0,122,8, + 60,115,116,114,105,110,103,62,114,229,0,0,0,84,41,1, + 114,245,0,0,0,41,1,114,246,0,0,0,114,233,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,12,95,114,101,99,97,108,99,117,108,97,116,101,163,4, - 0,0,115,18,0,0,0,12,2,10,1,14,1,18,3,6, - 1,8,1,6,1,6,1,255,128,122,27,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,114,101,99,97,108, - 99,117,108,97,116,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, - 12,0,0,0,116,0,124,0,160,1,161,0,131,1,83,0, - 114,121,0,0,0,41,2,218,4,105,116,101,114,114,43,1, - 0,0,114,8,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,8,95,95,105,116,101,114,95,95, - 176,4,0,0,243,4,0,0,0,12,1,255,128,122,23,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, - 105,116,101,114,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 12,0,0,0,124,0,160,0,161,0,124,1,25,0,83,0, - 114,121,0,0,0,169,1,114,43,1,0,0,41,2,114,130, - 0,0,0,218,5,105,110,100,101,120,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,95,95,103,101,116, - 105,116,101,109,95,95,179,4,0,0,114,47,1,0,0,122, - 26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,103,101,116,105,116,101,109,95,95,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, - 1,60,0,100,0,83,0,114,121,0,0,0,41,1,114,35, - 1,0,0,41,3,114,130,0,0,0,114,49,1,0,0,114, - 58,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,95,95,115,101,116,105,116,101,109,95,95, - 182,4,0,0,115,4,0,0,0,14,1,255,128,122,26,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, - 115,101,116,105,116,101,109,95,95,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,114,44,1,0,0,114,121,0,0,0,41,2,114,4, - 0,0,0,114,43,1,0,0,114,8,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,7,95,95, - 108,101,110,95,95,185,4,0,0,114,47,1,0,0,122,22, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, - 12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,0, - 41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,40,123,33,114,125,41,41,2,114,77,0,0,0, - 114,35,1,0,0,114,8,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,8,95,95,114,101,112, - 114,95,95,188,4,0,0,114,47,1,0,0,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, - 101,112,114,95,95,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,12, - 0,0,0,124,1,124,0,160,0,161,0,118,0,83,0,114, - 121,0,0,0,114,48,1,0,0,169,2,114,130,0,0,0, - 218,4,105,116,101,109,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,12,95,95,99,111,110,116,97,105,110, - 115,95,95,191,4,0,0,114,47,1,0,0,122,27,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, - 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,16,0,0,0,124,0,106,0,160,1,124,1,161, - 1,1,0,100,0,83,0,114,121,0,0,0,41,2,114,35, - 1,0,0,114,197,0,0,0,114,55,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,197,0,0, - 0,194,4,0,0,243,4,0,0,0,16,1,255,128,122,21, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,97, - 112,112,101,110,100,78,41,15,114,137,0,0,0,114,136,0, - 0,0,114,138,0,0,0,114,139,0,0,0,114,223,0,0, - 0,114,41,1,0,0,114,36,1,0,0,114,43,1,0,0, - 114,46,1,0,0,114,50,1,0,0,114,51,1,0,0,114, - 52,1,0,0,114,54,1,0,0,114,57,1,0,0,114,197, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,33,1,0,0,136,4,0,0, - 115,28,0,0,0,8,0,4,1,8,6,8,6,8,10,8, - 4,8,13,8,3,8,3,8,3,8,3,8,3,12,3,255, - 128,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 88,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, - 132,0,90,3,101,4,100,3,100,4,132,0,131,1,90,5, - 100,5,100,6,132,0,90,6,100,7,100,8,132,0,90,7, - 100,9,100,10,132,0,90,8,100,11,100,12,132,0,90,9, - 100,13,100,14,132,0,90,10,100,15,100,16,132,0,90,11, - 100,17,100,18,132,0,90,12,100,19,83,0,41,20,218,16, + 114,227,0,0,0,221,4,0,0,114,57,1,0,0,122,25, 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,4,0,0,0,67,0,0,0,115,18,0,0,0,116,0, - 124,1,124,2,124,3,131,3,124,0,95,1,100,0,83,0, - 114,121,0,0,0,41,2,114,33,1,0,0,114,35,1,0, - 0,114,39,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,223,0,0,0,200,4,0,0,115,4, - 0,0,0,18,1,255,128,122,25,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,4,0,0,0,67,0,0,0,115,24,0,0,0, - 116,0,160,1,100,1,116,2,161,2,1,0,100,2,160,3, - 124,0,106,4,161,1,83,0,41,4,122,115,82,101,116,117, - 114,110,32,114,101,112,114,32,102,111,114,32,116,104,101,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,84,104,101,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,84,104,101,32, - 105,109,112,111,114,116,32,109,97,99,104,105,110,101,114,121, - 32,100,111,101,115,32,116,104,101,32,106,111,98,32,105,116, - 115,101,108,102,46,10,10,32,32,32,32,32,32,32,32,122, - 82,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,109,111,100,117,108,101,95,114,101,112,114,40,41,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, - 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, - 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, - 46,49,50,122,25,60,109,111,100,117,108,101,32,123,33,114, - 125,32,40,110,97,109,101,115,112,97,99,101,41,62,78,41, - 5,114,88,0,0,0,114,89,0,0,0,114,90,0,0,0, - 114,77,0,0,0,114,137,0,0,0,41,1,114,231,0,0, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,23,0,0,0,114,223,0,0,0,114,7,0,0, + 0,114,224,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,225,0,0,0,224,4,0,0,114,226, + 0,0,0,122,30,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, + 0,100,0,83,0,114,120,0,0,0,114,7,0,0,0,114, + 27,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,231,0,0,0,227,4,0,0,114,60,1,0, + 0,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,26,0,0,0,116,0,160, + 1,100,1,124,0,106,2,161,2,1,0,116,0,160,3,124, + 0,124,1,161,2,83,0,41,3,122,98,76,111,97,100,32, + 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, + 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, + 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, + 32,123,33,114,125,78,41,4,114,145,0,0,0,114,159,0, + 0,0,114,34,1,0,0,114,232,0,0,0,114,233,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,11,109,111,100,117,108,101,95,114,101,112,114,203,4,0, - 0,115,10,0,0,0,6,7,2,1,4,255,12,2,255,128, - 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,109,111,100,117,108,101,95,114,101,112,114,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,114,24,0,0,0,41,2,78,84, - 114,7,0,0,0,114,234,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,193,0,0,0,214,4, - 0,0,243,4,0,0,0,4,1,255,128,122,27,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115, - 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,114,24,0,0,0,41,2,78,114,10,0,0,0,114,7, - 0,0,0,114,234,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,244,0,0,0,217,4,0,0, - 114,61,1,0,0,122,27,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, - 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,6,0,0,0,67,0,0,0,115,16,0,0,0, - 116,0,100,1,100,2,100,3,100,4,100,5,141,4,83,0, - 41,6,78,114,10,0,0,0,122,8,60,115,116,114,105,110, - 103,62,114,230,0,0,0,84,41,1,114,246,0,0,0,41, - 1,114,247,0,0,0,114,234,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,228,0,0,0,220, - 4,0,0,114,58,1,0,0,122,25,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,24,0,0, - 0,114,224,0,0,0,114,7,0,0,0,114,225,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 226,0,0,0,223,4,0,0,114,227,0,0,0,122,30,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,0,83,0,114, - 121,0,0,0,114,7,0,0,0,114,28,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,232,0, - 0,0,226,4,0,0,114,61,1,0,0,122,28,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,26,0,0,0,116,0,160,1,100,1,124,0,106, - 2,161,2,1,0,116,0,160,3,124,0,124,1,161,2,83, - 0,41,3,122,98,76,111,97,100,32,97,32,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, - 32,32,32,32,32,32,32,122,38,110,97,109,101,115,112,97, - 99,101,32,109,111,100,117,108,101,32,108,111,97,100,101,100, - 32,119,105,116,104,32,112,97,116,104,32,123,33,114,125,78, - 41,4,114,146,0,0,0,114,160,0,0,0,114,35,1,0, - 0,114,233,0,0,0,114,234,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,235,0,0,0,229, - 4,0,0,115,10,0,0,0,6,7,4,1,4,255,12,3, - 255,128,122,28,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, + 114,234,0,0,0,230,4,0,0,115,10,0,0,0,6,7, + 4,1,4,255,12,3,255,128,122,28,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,108,111,97,100,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, + 22,0,0,0,100,1,100,2,108,0,109,1,125,2,1,0, + 124,2,124,0,106,2,131,1,83,0,41,3,78,114,0,0, + 0,0,41,1,218,15,78,97,109,101,115,112,97,99,101,82, + 101,97,100,101,114,41,3,114,18,1,0,0,114,61,1,0, + 0,114,34,1,0,0,41,3,114,129,0,0,0,114,230,0, + 0,0,114,61,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,19,1,0,0,242,4,0,0,115, + 6,0,0,0,12,1,10,1,255,128,122,36,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, + 78,41,13,114,136,0,0,0,114,135,0,0,0,114,137,0, + 0,0,114,222,0,0,0,114,219,0,0,0,114,59,1,0, + 0,114,192,0,0,0,114,243,0,0,0,114,227,0,0,0, + 114,225,0,0,0,114,231,0,0,0,114,234,0,0,0,114, + 19,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,58,1,0,0,200,4,0, + 0,115,24,0,0,0,8,0,8,1,2,3,10,1,8,10, + 8,3,8,3,8,3,8,3,8,3,12,12,255,128,114,58, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,64,0,0,0,115,118,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,101,4,100, + 2,100,3,132,0,131,1,90,5,101,4,100,4,100,5,132, + 0,131,1,90,6,101,7,100,6,100,7,132,0,131,1,90, + 8,101,7,100,8,100,9,132,0,131,1,90,9,101,7,100, + 19,100,11,100,12,132,1,131,1,90,10,101,7,100,20,100, + 13,100,14,132,1,131,1,90,11,101,7,100,21,100,15,100, + 16,132,1,131,1,90,12,101,4,100,17,100,18,132,0,131, + 1,90,13,100,10,83,0,41,22,218,10,80,97,116,104,70, + 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, + 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, + 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, + 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, + 117,116,101,115,46,99,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,64, + 0,0,0,116,0,116,1,106,2,160,3,161,0,131,1,68, + 0,93,22,92,2,125,0,125,1,124,1,100,1,117,0,114, + 20,116,1,106,2,124,0,61,0,113,7,116,4,124,1,100, + 2,131,2,114,29,124,1,160,5,161,0,1,0,113,7,100, + 1,83,0,41,3,122,125,67,97,108,108,32,116,104,101,32, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,40,41,32,109,101,116,104,111,100,32,111,110,32,97,108, + 108,32,112,97,116,104,32,101,110,116,114,121,32,102,105,110, + 100,101,114,115,10,32,32,32,32,32,32,32,32,115,116,111, + 114,101,100,32,105,110,32,115,121,115,46,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,115,32, + 40,119,104,101,114,101,32,105,109,112,108,101,109,101,110,116, + 101,100,41,46,78,218,17,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,41,6,218,4,108,105,115,116, + 114,15,0,0,0,218,19,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,218,5,105,116,101,109, + 115,114,139,0,0,0,114,63,1,0,0,41,2,114,127,0, + 0,0,218,6,102,105,110,100,101,114,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,63,1,0,0,253,4, + 0,0,115,16,0,0,0,22,4,8,1,10,1,10,1,8, + 1,2,128,4,252,255,128,122,28,80,97,116,104,70,105,110, + 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, + 97,99,104,101,115,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,9,0,0,0,67,0,0,0,115,76, + 0,0,0,116,0,106,1,100,1,117,1,114,14,116,0,106, + 1,115,14,116,2,160,3,100,2,116,4,161,2,1,0,116, + 0,106,1,68,0,93,17,125,1,122,7,124,1,124,0,131, + 1,87,0,2,0,1,0,83,0,4,0,116,5,121,37,1, + 0,1,0,1,0,89,0,113,17,100,1,83,0,119,0,41, + 3,122,46,83,101,97,114,99,104,32,115,121,115,46,112,97, + 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102, + 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, + 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,105,115,32,101,109,112,116,121,41,6,114,15,0, + 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,87, + 0,0,0,114,88,0,0,0,114,148,0,0,0,114,128,0, + 0,0,41,2,114,57,0,0,0,90,4,104,111,111,107,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,11, + 95,112,97,116,104,95,104,111,111,107,115,7,5,0,0,115, + 20,0,0,0,16,3,12,1,10,1,2,1,14,1,12,1, + 4,1,4,2,2,253,255,128,122,22,80,97,116,104,70,105, + 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,2,0,0,0,67,0,0,0,115,22,0,0,0,100,1, - 100,2,108,0,109,1,125,2,1,0,124,2,124,0,106,2, - 131,1,83,0,41,3,78,114,0,0,0,0,41,1,218,15, - 78,97,109,101,115,112,97,99,101,82,101,97,100,101,114,41, - 3,114,19,1,0,0,114,62,1,0,0,114,35,1,0,0, - 41,3,114,130,0,0,0,114,231,0,0,0,114,62,1,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,20,1,0,0,241,4,0,0,115,6,0,0,0,12,1, - 10,1,255,128,122,36,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,78,41,13,114,137,0, - 0,0,114,136,0,0,0,114,138,0,0,0,114,223,0,0, - 0,114,220,0,0,0,114,60,1,0,0,114,193,0,0,0, - 114,244,0,0,0,114,228,0,0,0,114,226,0,0,0,114, - 232,0,0,0,114,235,0,0,0,114,20,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,59,1,0,0,199,4,0,0,115,24,0,0,0, - 8,0,8,1,2,3,10,1,8,10,8,3,8,3,8,3, - 8,3,8,3,12,12,255,128,114,59,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,64,0,0,0,115,118,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,101,4,100,2,100,3,132,0,131, - 1,90,5,101,4,100,4,100,5,132,0,131,1,90,6,101, - 7,100,6,100,7,132,0,131,1,90,8,101,7,100,8,100, - 9,132,0,131,1,90,9,101,7,100,19,100,11,100,12,132, - 1,131,1,90,10,101,7,100,20,100,13,100,14,132,1,131, - 1,90,11,101,7,100,21,100,15,100,16,132,1,131,1,90, - 12,101,4,100,17,100,18,132,0,131,1,90,13,100,10,83, - 0,41,22,218,10,80,97,116,104,70,105,110,100,101,114,122, - 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, - 114,32,102,111,114,32,115,121,115,46,112,97,116,104,32,97, - 110,100,32,112,97,99,107,97,103,101,32,95,95,112,97,116, - 104,95,95,32,97,116,116,114,105,98,117,116,101,115,46,99, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,116, - 1,106,2,160,3,161,0,131,1,68,0,93,22,92,2,125, - 0,125,1,124,1,100,1,117,0,114,20,116,1,106,2,124, - 0,61,0,113,7,116,4,124,1,100,2,131,2,114,29,124, - 1,160,5,161,0,1,0,113,7,100,1,83,0,41,3,122, - 125,67,97,108,108,32,116,104,101,32,105,110,118,97,108,105, - 100,97,116,101,95,99,97,99,104,101,115,40,41,32,109,101, - 116,104,111,100,32,111,110,32,97,108,108,32,112,97,116,104, - 32,101,110,116,114,121,32,102,105,110,100,101,114,115,10,32, - 32,32,32,32,32,32,32,115,116,111,114,101,100,32,105,110, + 0,8,0,0,0,67,0,0,0,115,100,0,0,0,124,1, + 100,1,107,2,114,20,122,6,116,0,160,1,161,0,125,1, + 87,0,110,9,4,0,116,2,121,49,1,0,1,0,1,0, + 89,0,100,2,83,0,122,8,116,3,106,4,124,1,25,0, + 125,2,87,0,124,2,83,0,4,0,116,5,121,48,1,0, + 1,0,1,0,124,0,160,6,124,1,161,1,125,2,124,2, + 116,3,106,4,124,1,60,0,89,0,124,2,83,0,119,0, + 119,0,41,3,122,210,71,101,116,32,116,104,101,32,102,105, + 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, + 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, + 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, + 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, + 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, + 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, + 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, + 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, + 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, + 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, + 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, + 32,32,32,32,32,32,32,32,114,10,0,0,0,78,41,7, + 114,18,0,0,0,114,69,0,0,0,218,17,70,105,108,101, + 78,111,116,70,111,117,110,100,69,114,114,111,114,114,15,0, + 0,0,114,65,1,0,0,218,8,75,101,121,69,114,114,111, + 114,114,69,1,0,0,41,3,114,208,0,0,0,114,57,0, + 0,0,114,67,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,20,95,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,20,5,0,0, + 115,30,0,0,0,8,8,2,1,12,1,12,1,6,3,2, + 1,12,1,4,4,12,253,10,1,12,1,4,1,2,253,2, + 250,255,128,122,31,80,97,116,104,70,105,110,100,101,114,46, + 95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,99,3,0,0,0,0,0,0,0,0,0,0, + 0,7,0,0,0,4,0,0,0,67,0,0,0,115,138,0, + 0,0,116,0,124,2,100,1,131,2,114,27,116,1,160,2, + 124,2,161,1,155,0,100,2,157,2,125,3,116,3,160,4, + 124,3,116,5,161,2,1,0,124,2,160,6,124,1,161,1, + 92,2,125,4,125,5,110,21,116,1,160,2,124,2,161,1, + 155,0,100,3,157,2,125,3,116,3,160,4,124,3,116,5, + 161,2,1,0,124,2,160,7,124,1,161,1,125,4,103,0, + 125,5,124,4,100,0,117,1,114,58,116,1,160,8,124,1, + 124,4,161,2,83,0,116,1,160,9,124,1,100,0,161,2, + 125,6,124,5,124,6,95,10,124,6,83,0,41,4,78,114, + 147,0,0,0,122,53,46,102,105,110,100,95,115,112,101,99, + 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, + 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, + 110,100,95,108,111,97,100,101,114,40,41,122,53,46,102,105, + 110,100,95,115,112,101,99,40,41,32,110,111,116,32,102,111, + 117,110,100,59,32,102,97,108,108,105,110,103,32,98,97,99, + 107,32,116,111,32,102,105,110,100,95,109,111,100,117,108,101, + 40,41,41,11,114,139,0,0,0,114,145,0,0,0,90,12, + 95,111,98,106,101,99,116,95,110,97,109,101,114,87,0,0, + 0,114,88,0,0,0,114,148,0,0,0,114,147,0,0,0, + 114,216,0,0,0,114,211,0,0,0,114,193,0,0,0,114, + 188,0,0,0,41,7,114,208,0,0,0,114,149,0,0,0, + 114,67,1,0,0,114,152,0,0,0,114,150,0,0,0,114, + 151,0,0,0,114,197,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,16,95,108,101,103,97,99, + 121,95,103,101,116,95,115,112,101,99,42,5,0,0,115,28, + 0,0,0,10,4,16,1,12,2,16,1,16,2,12,2,10, + 1,4,1,8,1,12,1,12,1,6,1,4,1,255,128,122, + 27,80,97,116,104,70,105,110,100,101,114,46,95,108,101,103, + 97,99,121,95,103,101,116,95,115,112,101,99,78,99,4,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,5,0, + 0,0,67,0,0,0,115,166,0,0,0,103,0,125,4,124, + 2,68,0,93,67,125,5,116,0,124,5,116,1,116,2,102, + 2,131,2,115,14,113,4,124,0,160,3,124,5,161,1,125, + 6,124,6,100,1,117,1,114,71,116,4,124,6,100,2,131, + 2,114,35,124,6,160,5,124,1,124,3,161,2,125,7,110, + 6,124,0,160,6,124,1,124,6,161,2,125,7,124,7,100, + 1,117,0,114,46,113,4,124,7,106,7,100,1,117,1,114, + 55,124,7,2,0,1,0,83,0,124,7,106,8,125,8,124, + 8,100,1,117,0,114,66,116,9,100,3,131,1,130,1,124, + 4,160,10,124,8,161,1,1,0,113,4,116,11,160,12,124, + 1,100,1,161,2,125,7,124,4,124,7,95,8,124,7,83, + 0,41,4,122,63,70,105,110,100,32,116,104,101,32,108,111, + 97,100,101,114,32,111,114,32,110,97,109,101,115,112,97,99, + 101,95,112,97,116,104,32,102,111,114,32,116,104,105,115,32, + 109,111,100,117,108,101,47,112,97,99,107,97,103,101,32,110, + 97,109,101,46,78,114,213,0,0,0,122,19,115,112,101,99, + 32,109,105,115,115,105,110,103,32,108,111,97,100,101,114,41, + 13,114,171,0,0,0,114,96,0,0,0,218,5,98,121,116, + 101,115,114,72,1,0,0,114,139,0,0,0,114,213,0,0, + 0,114,73,1,0,0,114,150,0,0,0,114,188,0,0,0, + 114,128,0,0,0,114,177,0,0,0,114,145,0,0,0,114, + 193,0,0,0,41,9,114,208,0,0,0,114,149,0,0,0, + 114,57,0,0,0,114,212,0,0,0,218,14,110,97,109,101, + 115,112,97,99,101,95,112,97,116,104,90,5,101,110,116,114, + 121,114,67,1,0,0,114,197,0,0,0,114,151,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 9,95,103,101,116,95,115,112,101,99,63,5,0,0,115,44, + 0,0,0,4,5,8,1,14,1,2,1,10,1,8,1,10, + 1,14,1,12,2,8,1,2,1,10,1,8,1,6,1,8, + 1,8,1,10,5,2,128,12,2,6,1,4,1,255,128,122, + 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, + 95,115,112,101,99,99,4,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,5,0,0,0,67,0,0,0,115,94, + 0,0,0,124,2,100,1,117,0,114,7,116,0,106,1,125, + 2,124,0,160,2,124,1,124,2,124,3,161,3,125,4,124, + 4,100,1,117,0,114,20,100,1,83,0,124,4,106,3,100, + 1,117,0,114,45,124,4,106,4,125,5,124,5,114,43,100, + 1,124,4,95,5,116,6,124,1,124,5,124,0,106,2,131, + 3,124,4,95,4,124,4,83,0,100,1,83,0,124,4,83, + 0,41,2,122,141,84,114,121,32,116,111,32,102,105,110,100, + 32,97,32,115,112,101,99,32,102,111,114,32,39,102,117,108, + 108,110,97,109,101,39,32,111,110,32,115,121,115,46,112,97, + 116,104,32,111,114,32,39,112,97,116,104,39,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,115,101,97,114,99, + 104,32,105,115,32,98,97,115,101,100,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,115,32,40,119,104,101,114,101, - 32,105,109,112,108,101,109,101,110,116,101,100,41,46,78,218, - 17,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, - 101,115,41,6,218,4,108,105,115,116,114,16,0,0,0,218, - 19,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,218,5,105,116,101,109,115,114,140,0,0,0, - 114,64,1,0,0,41,2,114,128,0,0,0,218,6,102,105, - 110,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,64,1,0,0,252,4,0,0,115,16,0,0, - 0,22,4,8,1,10,1,10,1,8,1,2,128,4,252,255, - 128,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 9,0,0,0,67,0,0,0,115,76,0,0,0,116,0,106, - 1,100,1,117,1,114,14,116,0,106,1,115,14,116,2,160, - 3,100,2,116,4,161,2,1,0,116,0,106,1,68,0,93, - 17,125,1,122,7,124,1,124,0,131,1,87,0,2,0,1, - 0,83,0,4,0,116,5,121,37,1,0,1,0,1,0,89, - 0,113,17,100,1,83,0,119,0,41,3,122,46,83,101,97, - 114,99,104,32,115,121,115,46,112,97,116,104,95,104,111,111, - 107,115,32,102,111,114,32,97,32,102,105,110,100,101,114,32, - 102,111,114,32,39,112,97,116,104,39,46,78,122,23,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, - 101,109,112,116,121,41,6,114,16,0,0,0,218,10,112,97, - 116,104,95,104,111,111,107,115,114,88,0,0,0,114,89,0, - 0,0,114,149,0,0,0,114,129,0,0,0,41,2,114,58, - 0,0,0,90,4,104,111,111,107,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,11,95,112,97,116,104,95, - 104,111,111,107,115,6,5,0,0,115,20,0,0,0,16,3, - 12,1,10,1,2,1,14,1,12,1,4,1,4,2,2,253, - 255,128,122,22,80,97,116,104,70,105,110,100,101,114,46,95, - 112,97,116,104,95,104,111,111,107,115,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, - 0,0,0,115,100,0,0,0,124,1,100,1,107,2,114,20, - 122,6,116,0,160,1,161,0,125,1,87,0,110,9,4,0, - 116,2,121,49,1,0,1,0,1,0,89,0,100,2,83,0, - 122,8,116,3,106,4,124,1,25,0,125,2,87,0,124,2, - 83,0,4,0,116,5,121,48,1,0,1,0,1,0,124,0, - 160,6,124,1,161,1,125,2,124,2,116,3,106,4,124,1, - 60,0,89,0,124,2,83,0,119,0,119,0,41,3,122,210, - 71,101,116,32,116,104,101,32,102,105,110,100,101,114,32,102, - 111,114,32,116,104,101,32,112,97,116,104,32,101,110,116,114, - 121,32,102,114,111,109,32,115,121,115,46,112,97,116,104,95, - 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,10, - 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, - 112,97,116,104,32,101,110,116,114,121,32,105,115,32,110,111, - 116,32,105,110,32,116,104,101,32,99,97,99,104,101,44,32, - 102,105,110,100,32,116,104,101,32,97,112,112,114,111,112,114, - 105,97,116,101,32,102,105,110,100,101,114,10,32,32,32,32, - 32,32,32,32,97,110,100,32,99,97,99,104,101,32,105,116, - 46,32,73,102,32,110,111,32,102,105,110,100,101,114,32,105, - 115,32,97,118,97,105,108,97,98,108,101,44,32,115,116,111, - 114,101,32,78,111,110,101,46,10,10,32,32,32,32,32,32, - 32,32,114,10,0,0,0,78,41,7,114,19,0,0,0,114, - 70,0,0,0,218,17,70,105,108,101,78,111,116,70,111,117, - 110,100,69,114,114,111,114,114,16,0,0,0,114,66,1,0, - 0,218,8,75,101,121,69,114,114,111,114,114,70,1,0,0, - 41,3,114,209,0,0,0,114,58,0,0,0,114,68,1,0, + 101,114,95,99,97,99,104,101,46,10,32,32,32,32,32,32, + 32,32,78,41,7,114,15,0,0,0,114,57,0,0,0,114, + 76,1,0,0,114,150,0,0,0,114,188,0,0,0,114,191, + 0,0,0,114,32,1,0,0,41,6,114,208,0,0,0,114, + 149,0,0,0,114,57,0,0,0,114,212,0,0,0,114,197, + 0,0,0,114,75,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,213,0,0,0,95,5,0,0, + 115,28,0,0,0,8,6,6,1,14,1,8,1,4,1,10, + 1,6,1,4,1,6,3,16,1,4,1,4,2,4,2,255, + 128,122,20,80,97,116,104,70,105,110,100,101,114,46,102,105, + 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, + 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, + 3,124,3,100,1,117,0,114,12,100,1,83,0,124,3,106, + 1,83,0,41,2,122,170,102,105,110,100,32,116,104,101,32, + 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, + 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, + 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, + 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,114,214,0,0,0,114,215,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,216,0,0,0, + 119,5,0,0,115,10,0,0,0,12,8,8,1,4,1,6, + 1,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, + 102,105,110,100,95,109,111,100,117,108,101,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,109, + 1,125,2,1,0,124,2,106,2,124,0,105,0,124,1,164, + 1,142,1,83,0,41,4,97,32,1,0,0,10,32,32,32, + 32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,105, + 98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,114, + 97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,116, + 114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,99, + 101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,32, + 32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,104, + 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,112, + 97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,103, + 32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,96, + 96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,108, + 108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,110, + 101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,97, + 108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,105, + 110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,32, + 32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,101, + 115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,104, + 96,96,46,10,32,32,32,32,32,32,32,32,114,0,0,0, + 0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,116, + 104,70,105,110,100,101,114,78,41,3,90,18,105,109,112,111, + 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,77, + 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, + 98,117,116,105,111,110,115,41,3,114,130,0,0,0,114,131, + 0,0,0,114,77,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,78,1,0,0,132,5,0,0, + 115,6,0,0,0,12,10,16,1,255,128,122,29,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, + 116,114,105,98,117,116,105,111,110,115,41,1,78,41,2,78, + 78,41,1,78,41,14,114,136,0,0,0,114,135,0,0,0, + 114,137,0,0,0,114,138,0,0,0,114,219,0,0,0,114, + 63,1,0,0,114,69,1,0,0,114,220,0,0,0,114,72, + 1,0,0,114,73,1,0,0,114,76,1,0,0,114,213,0, + 0,0,114,216,0,0,0,114,78,1,0,0,114,7,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,20,95,112,97,116,104,95,105,109,112,111,114,116,101,114, - 95,99,97,99,104,101,19,5,0,0,115,30,0,0,0,8, - 8,2,1,12,1,12,1,6,3,2,1,12,1,4,4,12, - 253,10,1,12,1,4,1,2,253,2,250,255,128,122,31,80, - 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, - 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, - 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4, - 0,0,0,67,0,0,0,115,138,0,0,0,116,0,124,2, - 100,1,131,2,114,27,116,1,160,2,124,2,161,1,155,0, - 100,2,157,2,125,3,116,3,160,4,124,3,116,5,161,2, - 1,0,124,2,160,6,124,1,161,1,92,2,125,4,125,5, - 110,21,116,1,160,2,124,2,161,1,155,0,100,3,157,2, - 125,3,116,3,160,4,124,3,116,5,161,2,1,0,124,2, - 160,7,124,1,161,1,125,4,103,0,125,5,124,4,100,0, - 117,1,114,58,116,1,160,8,124,1,124,4,161,2,83,0, - 116,1,160,9,124,1,100,0,161,2,125,6,124,5,124,6, - 95,10,124,6,83,0,41,4,78,114,148,0,0,0,122,53, - 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, - 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, - 98,97,99,107,32,116,111,32,102,105,110,100,95,108,111,97, - 100,101,114,40,41,122,53,46,102,105,110,100,95,115,112,101, - 99,40,41,32,110,111,116,32,102,111,117,110,100,59,32,102, - 97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,102, - 105,110,100,95,109,111,100,117,108,101,40,41,41,11,114,140, - 0,0,0,114,146,0,0,0,90,12,95,111,98,106,101,99, - 116,95,110,97,109,101,114,88,0,0,0,114,89,0,0,0, - 114,149,0,0,0,114,148,0,0,0,114,217,0,0,0,114, - 212,0,0,0,114,194,0,0,0,114,189,0,0,0,41,7, - 114,209,0,0,0,114,150,0,0,0,114,68,1,0,0,114, - 153,0,0,0,114,151,0,0,0,114,152,0,0,0,114,198, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,16,95,108,101,103,97,99,121,95,103,101,116,95, - 115,112,101,99,41,5,0,0,115,28,0,0,0,10,4,16, - 1,12,2,16,1,16,2,12,2,10,1,4,1,8,1,12, - 1,12,1,6,1,4,1,255,128,122,27,80,97,116,104,70, - 105,110,100,101,114,46,95,108,101,103,97,99,121,95,103,101, - 116,95,115,112,101,99,78,99,4,0,0,0,0,0,0,0, - 0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,0, - 115,166,0,0,0,103,0,125,4,124,2,68,0,93,67,125, - 5,116,0,124,5,116,1,116,2,102,2,131,2,115,14,113, - 4,124,0,160,3,124,5,161,1,125,6,124,6,100,1,117, - 1,114,71,116,4,124,6,100,2,131,2,114,35,124,6,160, - 5,124,1,124,3,161,2,125,7,110,6,124,0,160,6,124, - 1,124,6,161,2,125,7,124,7,100,1,117,0,114,46,113, - 4,124,7,106,7,100,1,117,1,114,55,124,7,2,0,1, - 0,83,0,124,7,106,8,125,8,124,8,100,1,117,0,114, - 66,116,9,100,3,131,1,130,1,124,4,160,10,124,8,161, - 1,1,0,113,4,116,11,160,12,124,1,100,1,161,2,125, - 7,124,4,124,7,95,8,124,7,83,0,41,4,122,63,70, - 105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111, - 114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104, - 32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101, - 47,112,97,99,107,97,103,101,32,110,97,109,101,46,78,114, - 214,0,0,0,122,19,115,112,101,99,32,109,105,115,115,105, - 110,103,32,108,111,97,100,101,114,41,13,114,172,0,0,0, - 114,97,0,0,0,218,5,98,121,116,101,115,114,73,1,0, - 0,114,140,0,0,0,114,214,0,0,0,114,74,1,0,0, - 114,151,0,0,0,114,189,0,0,0,114,129,0,0,0,114, - 178,0,0,0,114,146,0,0,0,114,194,0,0,0,41,9, - 114,209,0,0,0,114,150,0,0,0,114,58,0,0,0,114, - 213,0,0,0,218,14,110,97,109,101,115,112,97,99,101,95, - 112,97,116,104,90,5,101,110,116,114,121,114,68,1,0,0, - 114,198,0,0,0,114,152,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,9,95,103,101,116,95, - 115,112,101,99,62,5,0,0,115,44,0,0,0,4,5,8, - 1,14,1,2,1,10,1,8,1,10,1,14,1,12,2,8, - 1,2,1,10,1,8,1,6,1,8,1,8,1,10,5,2, - 128,12,2,6,1,4,1,255,128,122,20,80,97,116,104,70, - 105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,99, - 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 5,0,0,0,67,0,0,0,115,94,0,0,0,124,2,100, - 1,117,0,114,7,116,0,106,1,125,2,124,0,160,2,124, - 1,124,2,124,3,161,3,125,4,124,4,100,1,117,0,114, - 20,100,1,83,0,124,4,106,3,100,1,117,0,114,45,124, - 4,106,4,125,5,124,5,114,43,100,1,124,4,95,5,116, - 6,124,1,124,5,124,0,106,2,131,3,124,4,95,4,124, - 4,83,0,100,1,83,0,124,4,83,0,41,2,122,141,84, - 114,121,32,116,111,32,102,105,110,100,32,97,32,115,112,101, - 99,32,102,111,114,32,39,102,117,108,108,110,97,109,101,39, - 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, - 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, - 32,84,104,101,32,115,101,97,114,99,104,32,105,115,32,98, - 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,97,110,100,32,115,121,115,46,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,46,10,32,32,32,32,32,32,32,32,78,41,7,114, - 16,0,0,0,114,58,0,0,0,114,77,1,0,0,114,151, - 0,0,0,114,189,0,0,0,114,192,0,0,0,114,33,1, - 0,0,41,6,114,209,0,0,0,114,150,0,0,0,114,58, - 0,0,0,114,213,0,0,0,114,198,0,0,0,114,76,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,214,0,0,0,94,5,0,0,115,28,0,0,0,8, - 6,6,1,14,1,8,1,4,1,10,1,6,1,4,1,6, - 3,16,1,4,1,4,2,4,2,255,128,122,20,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, - 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124, - 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,117, - 0,114,12,100,1,83,0,124,3,106,1,83,0,41,2,122, - 170,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, - 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, - 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, - 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, - 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 114,62,1,0,0,249,4,0,0,115,38,0,0,0,8,0, + 4,2,2,2,10,1,2,9,10,1,2,12,10,1,2,21, + 10,1,2,20,12,1,2,31,12,1,2,23,12,1,2,12, + 14,1,255,128,114,62,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, + 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, + 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, + 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, + 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, + 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, + 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, + 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, + 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, + 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, + 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, + 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, + 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, + 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, + 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, + 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, + 0,0,7,0,0,0,115,84,0,0,0,103,0,125,3,124, + 2,68,0,93,16,92,2,137,0,125,4,124,3,160,0,135, + 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, + 1,1,0,113,4,124,3,124,0,95,1,124,1,112,27,100, + 3,124,0,95,2,100,4,124,0,95,3,116,4,131,0,124, + 0,95,5,116,4,131,0,124,0,95,6,100,5,83,0,41, + 6,122,154,73,110,105,116,105,97,108,105,122,101,32,119,105, + 116,104,32,116,104,101,32,112,97,116,104,32,116,111,32,115, + 101,97,114,99,104,32,111,110,32,97,110,100,32,97,32,118, + 97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,111, + 102,10,32,32,32,32,32,32,32,32,50,45,116,117,112,108, + 101,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104, + 101,32,108,111,97,100,101,114,32,97,110,100,32,116,104,101, + 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,116, + 104,101,32,108,111,97,100,101,114,10,32,32,32,32,32,32, + 32,32,114,101,99,111,103,110,105,122,101,115,46,99,1,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,51,0,0,0,115,24,0,0,0,129,0,124,0,93, + 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, + 0,83,0,114,120,0,0,0,114,7,0,0,0,114,28,1, + 0,0,169,1,114,150,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,9,0,0,0,161,5,0,0,115,6,0,0, + 0,6,128,18,0,255,128,122,38,70,105,108,101,70,105,110, + 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, + 85,0,0,0,114,115,0,0,0,78,41,7,114,177,0,0, + 0,218,8,95,108,111,97,100,101,114,115,114,57,0,0,0, + 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, + 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, + 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, + 97,99,104,101,41,5,114,129,0,0,0,114,57,0,0,0, + 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, + 90,7,108,111,97,100,101,114,115,114,199,0,0,0,114,7, + 0,0,0,114,80,1,0,0,114,8,0,0,0,114,222,0, + 0,0,155,5,0,0,115,18,0,0,0,4,4,12,1,26, + 1,6,1,10,2,6,1,8,1,12,1,255,128,122,19,70, + 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, + 100,1,124,0,95,0,100,2,83,0,41,3,122,31,73,110, + 118,97,108,105,100,97,116,101,32,116,104,101,32,100,105,114, + 101,99,116,111,114,121,32,109,116,105,109,101,46,114,115,0, + 0,0,78,41,1,114,82,1,0,0,114,7,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,63, + 1,0,0,169,5,0,0,114,68,0,0,0,122,28,70,105, + 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,42,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,2,100,1,117,0,114,13,100,1,103,0,102,2, + 83,0,124,2,106,1,124,2,106,2,112,19,103,0,102,2, + 83,0,41,2,122,197,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, + 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, + 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, + 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, + 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, + 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,114,215,0,0, - 0,114,216,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,217,0,0,0,118,5,0,0,115,10, - 0,0,0,12,8,8,1,4,1,6,1,255,128,122,22,80, - 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, - 111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,4,0,0,0,79,0,0,0,115,28, - 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, - 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, - 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, - 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, - 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, - 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, - 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, - 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, - 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, - 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, - 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, - 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, - 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, - 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, - 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, - 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, - 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, - 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, - 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, - 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, - 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, - 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, - 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, - 109,101,116,97,100,97,116,97,114,78,1,0,0,218,18,102, - 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110, - 115,41,3,114,131,0,0,0,114,132,0,0,0,114,78,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,79,1,0,0,131,5,0,0,115,6,0,0,0,12, - 10,16,1,255,128,122,29,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,100,105,115,116,114,105,98,117,116, - 105,111,110,115,41,1,78,41,2,78,78,41,1,78,41,14, - 114,137,0,0,0,114,136,0,0,0,114,138,0,0,0,114, - 139,0,0,0,114,220,0,0,0,114,64,1,0,0,114,70, - 1,0,0,114,221,0,0,0,114,73,1,0,0,114,74,1, - 0,0,114,77,1,0,0,114,214,0,0,0,114,217,0,0, - 0,114,79,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,63,1,0,0,248, - 4,0,0,115,38,0,0,0,8,0,4,2,2,2,10,1, - 2,9,10,1,2,12,10,1,2,21,10,1,2,20,12,1, - 2,31,12,1,2,23,12,1,2,12,14,1,255,128,114,63, - 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0, - 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, - 3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90, - 7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90, - 9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132, - 0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100, - 17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70, - 105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45, - 98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32, - 32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32, - 119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121, - 115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32, - 102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44, - 32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101, - 115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105, - 114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100, - 101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104, - 97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100, - 46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0, - 115,84,0,0,0,103,0,125,3,124,2,68,0,93,16,92, - 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100, - 2,132,8,124,4,68,0,131,1,161,1,1,0,113,4,124, - 3,124,0,95,1,124,1,112,27,100,3,124,0,95,2,100, - 4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131, - 0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105, - 116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101, - 32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32, - 111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108, - 101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32, - 32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110, - 116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100, - 101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32, - 115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97, - 100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111, - 103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, - 115,22,0,0,0,124,0,93,7,125,1,124,1,136,0,102, - 2,86,0,1,0,113,1,100,0,83,0,114,121,0,0,0, - 114,7,0,0,0,114,29,1,0,0,169,1,114,151,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,9,0,0,0, - 160,5,0,0,114,14,0,0,0,122,38,70,105,108,101,70, - 105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60, - 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, - 62,114,86,0,0,0,114,116,0,0,0,78,41,7,114,178, - 0,0,0,218,8,95,108,111,97,100,101,114,115,114,58,0, - 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, - 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, - 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, - 95,99,97,99,104,101,41,5,114,130,0,0,0,114,58,0, - 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, - 108,115,90,7,108,111,97,100,101,114,115,114,200,0,0,0, - 114,7,0,0,0,114,81,1,0,0,114,8,0,0,0,114, - 223,0,0,0,154,5,0,0,115,18,0,0,0,4,4,12, - 1,26,1,6,1,10,2,6,1,8,1,12,1,255,128,122, - 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,10,0, - 0,0,100,1,124,0,95,0,100,2,83,0,41,3,122,31, - 73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,100, - 105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,114, - 116,0,0,0,78,41,1,114,83,1,0,0,114,8,1,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,64,1,0,0,168,5,0,0,114,69,0,0,0,122,28, - 70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,42,0,0,0,124,0,160,0,124,1, - 161,1,125,2,124,2,100,1,117,0,114,13,100,1,103,0, - 102,2,83,0,124,2,106,1,124,2,106,2,112,19,103,0, - 102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 114,214,0,0,0,114,151,0,0,0,114,189,0,0,0,41, - 3,114,130,0,0,0,114,150,0,0,0,114,198,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 148,0,0,0,174,5,0,0,115,10,0,0,0,10,7,8, - 1,8,1,16,1,255,128,122,22,70,105,108,101,70,105,110, - 100,101,114,46,102,105,110,100,95,108,111,97,100,101,114,99, - 6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 6,0,0,0,67,0,0,0,115,26,0,0,0,124,1,124, - 2,124,3,131,2,125,6,116,0,124,2,124,3,124,6,124, - 4,100,1,141,4,83,0,41,2,78,114,188,0,0,0,41, - 1,114,201,0,0,0,41,7,114,130,0,0,0,114,199,0, - 0,0,114,150,0,0,0,114,58,0,0,0,90,4,115,109, - 115,108,114,213,0,0,0,114,151,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,77,1,0,0, - 186,5,0,0,115,10,0,0,0,10,1,8,1,2,1,6, - 255,255,128,122,20,70,105,108,101,70,105,110,100,101,114,46, - 95,103,101,116,95,115,112,101,99,78,99,3,0,0,0,0, - 0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67, - 0,0,0,115,92,1,0,0,100,1,125,3,124,1,160,0, - 100,2,161,1,100,3,25,0,125,4,122,12,116,1,124,0, - 106,2,112,17,116,3,160,4,161,0,131,1,106,5,125,5, - 87,0,110,9,4,0,116,6,121,173,1,0,1,0,1,0, - 100,4,125,5,89,0,124,5,124,0,106,7,107,3,114,43, - 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, - 131,0,114,54,124,0,106,10,125,6,124,4,160,11,161,0, - 125,7,110,5,124,0,106,12,125,6,124,4,125,7,124,7, - 124,6,118,0,114,106,116,13,124,0,106,2,124,4,131,2, - 125,8,124,0,106,14,68,0,93,29,92,2,125,9,125,10, - 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, - 125,12,116,15,124,12,131,1,114,101,124,0,160,16,124,10, - 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, - 83,0,113,72,116,17,124,8,131,1,125,3,124,0,106,14, - 68,0,93,41,92,2,125,9,125,10,116,13,124,0,106,2, - 124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6, - 124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0, - 124,6,118,0,114,150,116,15,124,12,131,1,114,150,124,0, - 160,16,124,10,124,1,124,12,100,8,124,2,161,5,2,0, - 1,0,83,0,113,109,124,3,114,171,116,18,160,19,100,9, - 124,8,161,2,1,0,116,18,160,20,124,1,100,8,161,2, - 125,13,124,8,103,1,124,13,95,21,124,13,83,0,100,8, - 83,0,119,0,41,10,122,111,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101, - 116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105, - 110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101, - 32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32, - 32,32,32,32,32,32,32,70,114,86,0,0,0,114,45,0, - 0,0,114,116,0,0,0,114,223,0,0,0,122,9,116,114, - 121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111, - 115,105,116,121,78,122,25,112,111,115,115,105,98,108,101,32, - 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, - 41,22,114,55,0,0,0,114,63,0,0,0,114,58,0,0, - 0,114,19,0,0,0,114,70,0,0,0,114,22,1,0,0, - 114,64,0,0,0,114,83,1,0,0,218,11,95,102,105,108, - 108,95,99,97,99,104,101,114,22,0,0,0,114,86,1,0, - 0,114,117,0,0,0,114,85,1,0,0,114,54,0,0,0, - 114,82,1,0,0,114,68,0,0,0,114,77,1,0,0,114, - 71,0,0,0,114,146,0,0,0,114,160,0,0,0,114,194, - 0,0,0,114,189,0,0,0,41,14,114,130,0,0,0,114, - 150,0,0,0,114,213,0,0,0,90,12,105,115,95,110,97, - 109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,111, - 100,117,108,101,114,180,0,0,0,90,5,99,97,99,104,101, - 90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,9, - 98,97,115,101,95,112,97,116,104,114,30,1,0,0,114,199, - 0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97, - 109,101,90,9,102,117,108,108,95,112,97,116,104,114,198,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,214,0,0,0,191,5,0,0,115,80,0,0,0,4, - 5,14,1,2,1,24,1,12,1,6,1,10,1,8,1,6, - 1,6,2,6,1,10,1,6,2,4,1,8,2,12,1,14, - 1,8,1,10,1,8,1,24,1,2,255,8,5,14,2,16, - 1,16,1,12,1,8,1,10,1,4,1,8,255,2,128,4, - 2,12,1,12,1,8,1,4,1,4,1,2,219,255,128,122, - 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,99,1,0,0,0,0,0,0,0,0,0, - 0,0,9,0,0,0,10,0,0,0,67,0,0,0,115,190, - 0,0,0,124,0,106,0,125,1,122,11,116,1,160,2,124, - 1,112,11,116,1,160,3,161,0,161,1,125,2,87,0,110, - 12,4,0,116,4,116,5,116,6,102,3,121,94,1,0,1, - 0,1,0,103,0,125,2,89,0,116,7,106,8,160,9,100, - 1,161,1,115,39,116,10,124,2,131,1,124,0,95,11,110, - 37,116,10,131,0,125,3,124,2,68,0,93,28,125,4,124, - 4,160,12,100,2,161,1,92,3,125,5,125,6,125,7,124, - 6,114,65,100,3,160,13,124,5,124,7,160,14,161,0,161, - 2,125,8,110,2,124,5,125,8,124,3,160,15,124,8,161, - 1,1,0,113,44,124,3,124,0,95,11,116,7,106,8,160, - 9,116,16,161,1,114,92,100,4,100,5,132,0,124,2,68, - 0,131,1,124,0,95,17,100,6,83,0,100,6,83,0,119, - 0,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, - 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, - 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, - 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, - 105,114,101,99,116,111,114,121,46,114,15,0,0,0,114,86, - 0,0,0,114,76,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, - 0,115,20,0,0,0,104,0,124,0,93,6,125,1,124,1, - 160,0,161,0,146,2,113,2,83,0,114,7,0,0,0,41, - 1,114,117,0,0,0,41,2,114,5,0,0,0,90,2,102, - 110,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,13,0,0,0,12,6,0,0,115,4,0,0,0,20,0, - 255,128,122,41,70,105,108,101,70,105,110,100,101,114,46,95, - 102,105,108,108,95,99,97,99,104,101,46,60,108,111,99,97, - 108,115,62,46,60,115,101,116,99,111,109,112,62,78,41,18, - 114,58,0,0,0,114,19,0,0,0,90,7,108,105,115,116, - 100,105,114,114,70,0,0,0,114,71,1,0,0,218,15,80, - 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, - 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, - 111,114,114,16,0,0,0,114,26,0,0,0,114,27,0,0, - 0,114,84,1,0,0,114,85,1,0,0,114,112,0,0,0, - 114,77,0,0,0,114,117,0,0,0,218,3,97,100,100,114, - 28,0,0,0,114,86,1,0,0,41,9,114,130,0,0,0, - 114,58,0,0,0,90,8,99,111,110,116,101,110,116,115,90, - 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, - 110,116,101,110,116,115,114,56,1,0,0,114,128,0,0,0, - 114,40,1,0,0,114,30,1,0,0,90,8,110,101,119,95, - 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,88,1,0,0,239,5,0,0,115,40,0,0, - 0,6,2,2,1,22,1,18,1,6,3,12,3,12,1,6, - 7,8,1,16,1,4,1,18,1,4,2,12,1,6,1,12, - 1,20,1,4,255,2,233,255,128,122,22,70,105,108,101,70, - 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, - 101,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,7,0,0,0,115,18,0,0,0,135, - 0,135,1,102,2,100,1,100,2,132,8,125,2,124,2,83, - 0,41,4,97,20,1,0,0,65,32,99,108,97,115,115,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,114,101,116, - 117,114,110,115,32,97,32,99,108,111,115,117,114,101,32,116, - 111,32,117,115,101,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,10,32,32,32,32,32,32,32,32,119, - 104,105,99,104,32,119,105,108,108,32,114,101,116,117,114,110, - 32,97,110,32,105,110,115,116,97,110,99,101,32,117,115,105, - 110,103,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,108,111,97,100,101,114,115,32,97,110,100,32,116,104,101, - 32,112,97,116,104,10,32,32,32,32,32,32,32,32,99,97, - 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, - 117,114,101,46,10,10,32,32,32,32,32,32,32,32,73,102, - 32,116,104,101,32,112,97,116,104,32,99,97,108,108,101,100, - 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,32, - 105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111, - 114,121,44,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,10,32,32,32,32,32,32,32,32,114,97,105,115,101, - 100,46,10,10,32,32,32,32,32,32,32,32,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,19,0,0,0,115,36,0,0,0,116,0,124,0,131,1, - 115,10,116,1,100,1,124,0,100,2,141,2,130,1,136,0, - 124,0,103,1,136,1,162,1,82,0,142,0,83,0,41,4, - 122,45,80,97,116,104,32,104,111,111,107,32,102,111,114,32, - 105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110, - 101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,122, - 30,111,110,108,121,32,100,105,114,101,99,116,111,114,105,101, - 115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,114, - 62,0,0,0,78,41,2,114,71,0,0,0,114,129,0,0, - 0,114,62,0,0,0,169,2,114,209,0,0,0,114,87,1, - 0,0,114,7,0,0,0,114,8,0,0,0,218,24,112,97, - 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,24,6,0,0,115,8,0,0,0,8, - 2,12,1,16,1,255,128,122,54,70,105,108,101,70,105,110, - 100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,108, - 111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,78, - 114,7,0,0,0,41,3,114,209,0,0,0,114,87,1,0, - 0,114,93,1,0,0,114,7,0,0,0,114,92,1,0,0, - 114,8,0,0,0,218,9,112,97,116,104,95,104,111,111,107, - 14,6,0,0,115,6,0,0,0,14,10,4,6,255,128,122, - 20,70,105,108,101,70,105,110,100,101,114,46,112,97,116,104, - 95,104,111,111,107,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,53, - 1,0,0,41,2,78,122,16,70,105,108,101,70,105,110,100, - 101,114,40,123,33,114,125,41,41,2,114,77,0,0,0,114, - 58,0,0,0,114,8,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,54,1,0,0,32,6,0, - 0,114,47,1,0,0,122,19,70,105,108,101,70,105,110,100, - 101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,15, - 114,137,0,0,0,114,136,0,0,0,114,138,0,0,0,114, - 139,0,0,0,114,223,0,0,0,114,64,1,0,0,114,154, - 0,0,0,114,217,0,0,0,114,148,0,0,0,114,77,1, - 0,0,114,214,0,0,0,114,88,1,0,0,114,221,0,0, - 0,114,94,1,0,0,114,54,1,0,0,114,7,0,0,0, + 46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,213, + 0,0,0,114,150,0,0,0,114,188,0,0,0,41,3,114, + 129,0,0,0,114,149,0,0,0,114,197,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,147,0, + 0,0,175,5,0,0,115,10,0,0,0,10,7,8,1,8, + 1,16,1,255,128,122,22,70,105,108,101,70,105,110,100,101, + 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, + 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, + 0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124, + 3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100, + 1,141,4,83,0,41,2,78,114,187,0,0,0,41,1,114, + 200,0,0,0,41,7,114,129,0,0,0,114,198,0,0,0, + 114,149,0,0,0,114,57,0,0,0,90,4,115,109,115,108, + 114,212,0,0,0,114,150,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,76,1,0,0,187,5, + 0,0,115,10,0,0,0,10,1,8,1,2,1,6,255,255, + 128,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, + 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, + 0,0,0,0,0,14,0,0,0,8,0,0,0,67,0,0, + 0,115,92,1,0,0,100,1,125,3,124,1,160,0,100,2, + 161,1,100,3,25,0,125,4,122,12,116,1,124,0,106,2, + 112,17,116,3,160,4,161,0,131,1,106,5,125,5,87,0, + 110,9,4,0,116,6,121,173,1,0,1,0,1,0,100,4, + 125,5,89,0,124,5,124,0,106,7,107,3,114,43,124,0, + 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, + 114,54,124,0,106,10,125,6,124,4,160,11,161,0,125,7, + 110,5,124,0,106,12,125,6,124,4,125,7,124,7,124,6, + 118,0,114,106,116,13,124,0,106,2,124,4,131,2,125,8, + 124,0,106,14,68,0,93,29,92,2,125,9,125,10,100,5, + 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12, + 116,15,124,12,131,1,114,101,124,0,160,16,124,10,124,1, + 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0, + 113,72,116,17,124,8,131,1,125,3,124,0,106,14,68,0, + 93,41,92,2,125,9,125,10,116,13,124,0,106,2,124,4, + 124,9,23,0,131,2,125,12,116,18,106,19,100,6,124,12, + 100,3,100,7,141,3,1,0,124,7,124,9,23,0,124,6, + 118,0,114,150,116,15,124,12,131,1,114,150,124,0,160,16, + 124,10,124,1,124,12,100,8,124,2,161,5,2,0,1,0, + 83,0,113,109,124,3,114,171,116,18,160,19,100,9,124,8, + 161,2,1,0,116,18,160,20,124,1,100,8,161,2,125,13, + 124,8,103,1,124,13,95,21,124,13,83,0,100,8,83,0, + 119,0,41,10,122,111,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103, + 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105, + 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32, + 32,32,32,32,32,70,114,85,0,0,0,114,44,0,0,0, + 114,115,0,0,0,114,222,0,0,0,122,9,116,114,121,105, + 110,103,32,123,125,41,1,90,9,118,101,114,98,111,115,105, + 116,121,78,122,25,112,111,115,115,105,98,108,101,32,110,97, + 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,22, + 114,54,0,0,0,114,62,0,0,0,114,57,0,0,0,114, + 18,0,0,0,114,69,0,0,0,114,21,1,0,0,114,63, + 0,0,0,114,82,1,0,0,218,11,95,102,105,108,108,95, + 99,97,99,104,101,114,21,0,0,0,114,85,1,0,0,114, + 116,0,0,0,114,84,1,0,0,114,53,0,0,0,114,81, + 1,0,0,114,67,0,0,0,114,76,1,0,0,114,70,0, + 0,0,114,145,0,0,0,114,159,0,0,0,114,193,0,0, + 0,114,188,0,0,0,41,14,114,129,0,0,0,114,149,0, + 0,0,114,212,0,0,0,90,12,105,115,95,110,97,109,101, + 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117, + 108,101,114,179,0,0,0,90,5,99,97,99,104,101,90,12, + 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97, + 115,101,95,112,97,116,104,114,29,1,0,0,114,198,0,0, + 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, + 90,9,102,117,108,108,95,112,97,116,104,114,197,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 80,1,0,0,145,5,0,0,115,26,0,0,0,8,0,4, - 2,8,7,8,14,4,4,8,2,8,12,10,5,8,48,2, - 31,10,1,12,17,255,128,114,80,1,0,0,99,4,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,8,0,0, - 0,67,0,0,0,115,144,0,0,0,124,0,160,0,100,1, - 161,1,125,4,124,0,160,0,100,2,161,1,125,5,124,4, - 115,33,124,5,114,18,124,5,106,1,125,4,110,15,124,2, - 124,3,107,2,114,28,116,2,124,1,124,2,131,2,125,4, - 110,5,116,3,124,1,124,2,131,2,125,4,124,5,115,42, - 116,4,124,1,124,2,124,4,100,3,141,3,125,5,122,19, - 124,5,124,0,100,2,60,0,124,4,124,0,100,1,60,0, - 124,2,124,0,100,4,60,0,124,3,124,0,100,5,60,0, - 87,0,100,0,83,0,4,0,116,5,121,71,1,0,1,0, - 1,0,89,0,100,0,83,0,119,0,41,6,78,218,10,95, - 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, - 99,95,95,114,81,1,0,0,90,8,95,95,102,105,108,101, - 95,95,90,10,95,95,99,97,99,104,101,100,95,95,41,6, - 218,3,103,101,116,114,151,0,0,0,114,27,1,0,0,114, - 21,1,0,0,114,201,0,0,0,218,9,69,120,99,101,112, - 116,105,111,110,41,6,90,2,110,115,114,128,0,0,0,90, - 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, - 110,97,109,101,114,151,0,0,0,114,198,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,95, - 102,105,120,95,117,112,95,109,111,100,117,108,101,38,6,0, - 0,115,38,0,0,0,10,2,10,1,4,1,4,1,8,1, - 8,1,12,1,10,2,4,1,14,1,2,1,8,1,8,1, - 8,1,14,1,12,1,6,2,2,254,255,128,114,99,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,116, - 0,116,1,160,2,161,0,102,2,125,0,116,3,116,4,102, - 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, - 2,103,3,83,0,41,2,122,95,82,101,116,117,114,110,115, - 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, - 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, - 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, - 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, - 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, - 115,41,46,10,32,32,32,32,78,41,7,114,17,1,0,0, - 114,174,0,0,0,218,18,101,120,116,101,110,115,105,111,110, - 95,115,117,102,102,105,120,101,115,114,21,1,0,0,114,113, - 0,0,0,114,27,1,0,0,114,101,0,0,0,41,3,90, - 10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,117, - 114,99,101,90,8,98,121,116,101,99,111,100,101,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,195,0,0, - 0,61,6,0,0,115,10,0,0,0,12,5,8,1,8,1, - 10,1,255,128,114,195,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, - 0,0,115,8,0,0,0,124,0,97,0,100,0,83,0,114, - 121,0,0,0,41,1,114,146,0,0,0,41,1,218,17,95, - 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 21,95,115,101,116,95,98,111,111,116,115,116,114,97,112,95, - 109,111,100,117,108,101,72,6,0,0,115,4,0,0,0,8, - 2,255,128,114,102,1,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, - 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, - 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, - 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, - 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, - 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, - 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, - 101,110,116,115,46,78,41,10,114,102,1,0,0,114,195,0, - 0,0,114,16,0,0,0,114,69,1,0,0,114,178,0,0, - 0,114,80,1,0,0,114,94,1,0,0,218,9,109,101,116, - 97,95,112,97,116,104,114,197,0,0,0,114,63,1,0,0, - 41,2,114,101,1,0,0,90,17,115,117,112,112,111,114,116, - 101,100,95,108,111,97,100,101,114,115,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,8,95,105,110,115,116, - 97,108,108,77,6,0,0,115,10,0,0,0,8,2,6,1, - 20,1,16,1,255,128,114,104,1,0,0,41,1,114,75,0, - 0,0,41,1,78,41,3,78,78,78,41,2,114,0,0,0, - 0,114,0,0,0,0,41,1,84,41,1,78,41,1,78,41, - 83,114,139,0,0,0,114,146,0,0,0,114,174,0,0,0, - 114,79,0,0,0,114,16,0,0,0,114,88,0,0,0,114, - 171,0,0,0,114,26,0,0,0,114,218,0,0,0,90,2, - 110,116,114,19,0,0,0,114,203,0,0,0,90,5,112,111, - 115,105,120,114,48,0,0,0,218,3,97,108,108,114,51,0, - 0,0,114,52,0,0,0,114,73,0,0,0,114,29,0,0, - 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, - 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, - 89,84,69,83,95,75,69,89,114,28,0,0,0,114,30,0, - 0,0,114,22,0,0,0,114,37,0,0,0,114,43,0,0, - 0,114,46,0,0,0,114,54,0,0,0,114,61,0,0,0, - 114,63,0,0,0,114,67,0,0,0,114,68,0,0,0,114, - 71,0,0,0,114,74,0,0,0,114,84,0,0,0,218,4, - 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,173, - 0,0,0,114,35,0,0,0,114,159,0,0,0,114,34,0, - 0,0,114,40,0,0,0,114,251,0,0,0,114,104,0,0, - 0,114,100,0,0,0,114,113,0,0,0,114,197,0,0,0, - 114,100,1,0,0,114,219,0,0,0,114,101,0,0,0,90, - 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, - 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,114,109,0,0,0,114,114,0,0,0,114, - 120,0,0,0,114,124,0,0,0,114,126,0,0,0,114,147, - 0,0,0,114,154,0,0,0,114,163,0,0,0,114,167,0, - 0,0,114,169,0,0,0,114,176,0,0,0,114,181,0,0, - 0,114,182,0,0,0,114,187,0,0,0,218,6,111,98,106, - 101,99,116,114,196,0,0,0,114,201,0,0,0,114,202,0, - 0,0,114,222,0,0,0,114,236,0,0,0,114,254,0,0, - 0,114,21,1,0,0,114,27,1,0,0,114,17,1,0,0, - 114,33,1,0,0,114,59,1,0,0,114,63,1,0,0,114, - 80,1,0,0,114,99,1,0,0,114,195,0,0,0,114,102, - 1,0,0,114,104,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, - 111,100,117,108,101,62,1,0,0,0,115,172,0,0,0,4, - 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, - 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, - 1,10,1,14,1,4,4,4,1,2,1,2,1,4,255,8, - 4,6,16,8,3,8,5,8,5,8,6,8,6,8,12,8, - 10,8,9,8,5,8,7,10,9,10,22,0,127,16,26,12, - 1,4,2,4,1,6,2,4,1,10,1,8,2,6,2,8, - 2,16,2,8,71,8,40,8,19,8,12,8,12,8,31,8, - 17,8,33,8,28,10,24,10,13,10,10,8,11,6,14,4, - 3,2,1,12,255,14,68,14,64,16,30,0,127,14,17,18, - 50,18,45,18,25,14,53,14,63,14,49,0,127,14,26,0, - 127,10,22,8,23,8,11,12,5,255,128, + 213,0,0,0,192,5,0,0,115,80,0,0,0,4,5,14, + 1,2,1,24,1,12,1,6,1,10,1,8,1,6,1,6, + 2,6,1,10,1,6,2,4,1,8,2,12,1,14,1,8, + 1,10,1,8,1,24,1,2,255,8,5,14,2,16,1,16, + 1,12,1,8,1,10,1,4,1,8,255,2,128,4,2,12, + 1,12,1,8,1,4,1,4,1,2,219,255,128,122,20,70, + 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, + 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, + 9,0,0,0,10,0,0,0,67,0,0,0,115,190,0,0, + 0,124,0,106,0,125,1,122,11,116,1,160,2,124,1,112, + 11,116,1,160,3,161,0,161,1,125,2,87,0,110,12,4, + 0,116,4,116,5,116,6,102,3,121,94,1,0,1,0,1, + 0,103,0,125,2,89,0,116,7,106,8,160,9,100,1,161, + 1,115,39,116,10,124,2,131,1,124,0,95,11,110,37,116, + 10,131,0,125,3,124,2,68,0,93,28,125,4,124,4,160, + 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114, + 65,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125, + 8,110,2,124,5,125,8,124,3,160,15,124,8,161,1,1, + 0,113,44,124,3,124,0,95,11,116,7,106,8,160,9,116, + 16,161,1,114,92,100,4,100,5,132,0,124,2,68,0,131, + 1,124,0,95,17,100,6,83,0,100,6,83,0,119,0,41, + 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, + 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, + 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, + 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, + 101,99,116,111,114,121,46,114,14,0,0,0,114,85,0,0, + 0,114,75,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, + 20,0,0,0,104,0,124,0,93,6,125,1,124,1,160,0, + 161,0,146,2,113,2,83,0,114,7,0,0,0,41,1,114, + 116,0,0,0,41,2,114,5,0,0,0,90,2,102,110,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,13, + 0,0,0,13,6,0,0,115,4,0,0,0,20,0,255,128, + 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, + 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, + 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,57, + 0,0,0,114,18,0,0,0,90,7,108,105,115,116,100,105, + 114,114,69,0,0,0,114,70,1,0,0,218,15,80,101,114, + 109,105,115,115,105,111,110,69,114,114,111,114,218,18,78,111, + 116,65,68,105,114,101,99,116,111,114,121,69,114,114,111,114, + 114,15,0,0,0,114,25,0,0,0,114,26,0,0,0,114, + 83,1,0,0,114,84,1,0,0,114,111,0,0,0,114,76, + 0,0,0,114,116,0,0,0,218,3,97,100,100,114,27,0, + 0,0,114,85,1,0,0,41,9,114,129,0,0,0,114,57, + 0,0,0,90,8,99,111,110,116,101,110,116,115,90,21,108, + 111,119,101,114,95,115,117,102,102,105,120,95,99,111,110,116, + 101,110,116,115,114,55,1,0,0,114,127,0,0,0,114,39, + 1,0,0,114,29,1,0,0,90,8,110,101,119,95,110,97, + 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,87,1,0,0,240,5,0,0,115,40,0,0,0,6, + 2,2,1,22,1,18,1,6,3,12,3,12,1,6,7,8, + 1,16,1,4,1,18,1,4,2,12,1,6,1,12,1,20, + 1,4,255,2,233,255,128,122,22,70,105,108,101,70,105,110, + 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135, + 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, + 4,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, + 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, + 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, + 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, + 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, + 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, + 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, + 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, + 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, + 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, + 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, + 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, + 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, + 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,19, + 0,0,0,115,36,0,0,0,116,0,124,0,131,1,115,10, + 116,1,100,1,124,0,100,2,141,2,130,1,136,0,124,0, + 103,1,136,1,162,1,82,0,142,0,83,0,41,4,122,45, + 80,97,116,104,32,104,111,111,107,32,102,111,114,32,105,109, + 112,111,114,116,108,105,98,46,109,97,99,104,105,110,101,114, + 121,46,70,105,108,101,70,105,110,100,101,114,46,122,30,111, + 110,108,121,32,100,105,114,101,99,116,111,114,105,101,115,32, + 97,114,101,32,115,117,112,112,111,114,116,101,100,114,61,0, + 0,0,78,41,2,114,70,0,0,0,114,128,0,0,0,114, + 61,0,0,0,169,2,114,208,0,0,0,114,86,1,0,0, + 114,7,0,0,0,114,8,0,0,0,218,24,112,97,116,104, + 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, + 110,100,101,114,25,6,0,0,115,8,0,0,0,8,2,12, + 1,16,1,255,128,122,54,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, + 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,78,114,7, + 0,0,0,41,3,114,208,0,0,0,114,86,1,0,0,114, + 92,1,0,0,114,7,0,0,0,114,91,1,0,0,114,8, + 0,0,0,218,9,112,97,116,104,95,104,111,111,107,15,6, + 0,0,115,6,0,0,0,14,10,4,6,255,128,122,20,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,114,52,1,0, + 0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, + 40,123,33,114,125,41,41,2,114,76,0,0,0,114,57,0, + 0,0,114,7,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,53,1,0,0,33,6,0,0,114, + 46,1,0,0,122,19,70,105,108,101,70,105,110,100,101,114, + 46,95,95,114,101,112,114,95,95,41,1,78,41,15,114,136, + 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, + 0,0,114,222,0,0,0,114,63,1,0,0,114,153,0,0, + 0,114,216,0,0,0,114,147,0,0,0,114,76,1,0,0, + 114,213,0,0,0,114,87,1,0,0,114,220,0,0,0,114, + 93,1,0,0,114,53,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,79,1, + 0,0,146,5,0,0,115,26,0,0,0,8,0,4,2,8, + 7,8,14,4,4,8,2,8,12,10,5,8,48,2,31,10, + 1,12,17,255,128,114,79,1,0,0,99,4,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, + 0,0,0,115,144,0,0,0,124,0,160,0,100,1,161,1, + 125,4,124,0,160,0,100,2,161,1,125,5,124,4,115,33, + 124,5,114,18,124,5,106,1,125,4,110,15,124,2,124,3, + 107,2,114,28,116,2,124,1,124,2,131,2,125,4,110,5, + 116,3,124,1,124,2,131,2,125,4,124,5,115,42,116,4, + 124,1,124,2,124,4,100,3,141,3,125,5,122,19,124,5, + 124,0,100,2,60,0,124,4,124,0,100,1,60,0,124,2, + 124,0,100,4,60,0,124,3,124,0,100,5,60,0,87,0, + 100,0,83,0,4,0,116,5,121,71,1,0,1,0,1,0, + 89,0,100,0,83,0,119,0,41,6,78,218,10,95,95,108, + 111,97,100,101,114,95,95,218,8,95,95,115,112,101,99,95, + 95,114,80,1,0,0,90,8,95,95,102,105,108,101,95,95, + 90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3, + 103,101,116,114,150,0,0,0,114,26,1,0,0,114,20,1, + 0,0,114,200,0,0,0,218,9,69,120,99,101,112,116,105, + 111,110,41,6,90,2,110,115,114,127,0,0,0,90,8,112, + 97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97, + 109,101,114,150,0,0,0,114,197,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,14,95,102,105, + 120,95,117,112,95,109,111,100,117,108,101,39,6,0,0,115, + 38,0,0,0,10,2,10,1,4,1,4,1,8,1,8,1, + 12,1,10,2,4,1,14,1,2,1,8,1,8,1,8,1, + 14,1,12,1,6,2,2,254,255,128,114,98,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,116, + 1,160,2,161,0,102,2,125,0,116,3,116,4,102,2,125, + 1,116,5,116,6,102,2,125,2,124,0,124,1,124,2,103, + 3,83,0,41,2,122,95,82,101,116,117,114,110,115,32,97, + 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, + 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, + 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, + 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, + 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, + 46,10,32,32,32,32,78,41,7,114,16,1,0,0,114,173, + 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, + 117,102,102,105,120,101,115,114,20,1,0,0,114,112,0,0, + 0,114,26,1,0,0,114,100,0,0,0,41,3,90,10,101, + 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99, + 101,90,8,98,121,116,101,99,111,100,101,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,194,0,0,0,62, + 6,0,0,115,10,0,0,0,12,5,8,1,8,1,10,1, + 255,128,114,194,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,67,0,0,0, + 115,8,0,0,0,124,0,97,0,100,0,83,0,114,120,0, + 0,0,41,1,114,145,0,0,0,41,1,218,17,95,98,111, + 111,116,115,116,114,97,112,95,109,111,100,117,108,101,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,21,95, + 115,101,116,95,98,111,111,116,115,116,114,97,112,95,109,111, + 100,117,108,101,73,6,0,0,115,4,0,0,0,8,2,255, + 128,114,101,1,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 50,0,0,0,116,0,124,0,131,1,1,0,116,1,131,0, + 125,1,116,2,106,3,160,4,116,5,106,6,124,1,142,0, + 103,1,161,1,1,0,116,2,106,7,160,8,116,9,161,1, + 1,0,100,1,83,0,41,2,122,41,73,110,115,116,97,108, + 108,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, + 32,105,109,112,111,114,116,32,99,111,109,112,111,110,101,110, + 116,115,46,78,41,10,114,101,1,0,0,114,194,0,0,0, + 114,15,0,0,0,114,68,1,0,0,114,177,0,0,0,114, + 79,1,0,0,114,93,1,0,0,218,9,109,101,116,97,95, + 112,97,116,104,114,196,0,0,0,114,62,1,0,0,41,2, + 114,100,1,0,0,90,17,115,117,112,112,111,114,116,101,100, + 95,108,111,97,100,101,114,115,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,8,95,105,110,115,116,97,108, + 108,78,6,0,0,115,10,0,0,0,8,2,6,1,20,1, + 16,1,255,128,114,103,1,0,0,41,1,114,74,0,0,0, + 41,1,78,41,3,78,78,78,41,2,114,0,0,0,0,114, + 0,0,0,0,41,1,84,41,1,78,41,1,78,41,83,114, + 138,0,0,0,114,145,0,0,0,114,173,0,0,0,114,78, + 0,0,0,114,15,0,0,0,114,87,0,0,0,114,170,0, + 0,0,114,25,0,0,0,114,217,0,0,0,90,2,110,116, + 114,18,0,0,0,114,202,0,0,0,90,5,112,111,115,105, + 120,114,47,0,0,0,218,3,97,108,108,114,50,0,0,0, + 114,51,0,0,0,114,72,0,0,0,114,28,0,0,0,90, + 37,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,95,66,89,84, + 69,83,95,75,69,89,114,27,0,0,0,114,29,0,0,0, + 114,21,0,0,0,114,36,0,0,0,114,42,0,0,0,114, + 45,0,0,0,114,53,0,0,0,114,60,0,0,0,114,62, + 0,0,0,114,66,0,0,0,114,67,0,0,0,114,70,0, + 0,0,114,73,0,0,0,114,83,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,172,0,0, + 0,114,34,0,0,0,114,158,0,0,0,114,33,0,0,0, + 114,39,0,0,0,114,250,0,0,0,114,103,0,0,0,114, + 99,0,0,0,114,112,0,0,0,114,196,0,0,0,114,99, + 1,0,0,114,218,0,0,0,114,100,0,0,0,90,23,68, + 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, + 70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,69, + 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, + 88,69,83,114,108,0,0,0,114,113,0,0,0,114,119,0, + 0,0,114,123,0,0,0,114,125,0,0,0,114,146,0,0, + 0,114,153,0,0,0,114,162,0,0,0,114,166,0,0,0, + 114,168,0,0,0,114,175,0,0,0,114,180,0,0,0,114, + 181,0,0,0,114,186,0,0,0,218,6,111,98,106,101,99, + 116,114,195,0,0,0,114,200,0,0,0,114,201,0,0,0, + 114,221,0,0,0,114,235,0,0,0,114,253,0,0,0,114, + 20,1,0,0,114,26,1,0,0,114,16,1,0,0,114,32, + 1,0,0,114,58,1,0,0,114,62,1,0,0,114,79,1, + 0,0,114,98,1,0,0,114,194,0,0,0,114,101,1,0, + 0,114,103,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,8,60,109,111,100, + 117,108,101,62,1,0,0,0,115,172,0,0,0,4,0,4, + 22,8,3,8,1,8,1,8,1,8,1,10,3,4,1,8, + 1,10,1,8,2,4,3,10,1,6,2,22,2,8,1,10, + 1,14,1,4,4,4,1,2,1,2,1,4,255,8,4,6, + 16,8,3,8,5,8,5,8,6,8,6,8,12,8,10,8, + 9,8,5,8,7,10,9,10,22,0,127,16,27,12,1,4, + 2,4,1,6,2,4,1,10,1,8,2,6,2,8,2,16, + 2,8,71,8,40,8,19,8,12,8,12,8,31,8,17,8, + 33,8,28,10,24,10,13,10,10,8,11,6,14,4,3,2, + 1,12,255,14,68,14,64,16,30,0,127,14,17,18,50,18, + 45,18,25,14,53,14,63,14,49,0,127,14,26,0,127,10, + 22,8,23,8,11,12,5,255,128, }; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 692442ac8c1b8..e20a89862ef30 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -128,7 +128,7 @@ static void *opcode_targets[256] = { &&TARGET_DELETE_FAST, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_GEN_START, &&TARGET_RAISE_VARARGS, &&TARGET_CALL_FUNCTION, &&TARGET_MAKE_FUNCTION, From webhook-mailer at python.org Tue Apr 6 08:08:39 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 06 Apr 2021 12:08:39 -0000 Subject: [Python-checkins] bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Message-ID: https://github.com/python/cpython/commit/354b015c176b10ee7e2218ba4f3bbc9455cb893f commit: 354b015c176b10ee7e2218ba4f3bbc9455cb893f branch: master author: Steve Dower committer: zooba date: 2021-04-06T13:08:30+01:00 summary: bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Earlier releases were mislabelled and included 1.1.1i again. The tag/directory name is updated to ensure that builds get the fresh bits. However, the openssl-bin-1.1.1k tag in the repository has been forcibly updated, so fresh builds will be fine even without this change. files: A Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst M PCbuild/get_externals.bat M PCbuild/python.props diff --git a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst new file mode 100644 index 0000000000000..8ec498d11ea93 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst @@ -0,0 +1,2 @@ +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 42afe2c841f9c..a8bb06f819987 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -77,7 +77,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi -if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k +if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k-1 if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.10.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 diff --git a/PCbuild/python.props b/PCbuild/python.props index 5822ba13950f4..e056482c13f28 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -63,7 +63,7 @@ $(ExternalsDir)libffi\$(ArchName)\ $(libffiOutDir)include $(ExternalsDir)openssl-1.1.1k\ - $(ExternalsDir)openssl-bin-1.1.1k\$(ArchName)\ + $(ExternalsDir)openssl-bin-1.1.1k-1\$(ArchName)\ $(opensslOutDir)include $(ExternalsDir)\nasm-2.11.06\ $(ExternalsDir)\zlib-1.2.11\ From webhook-mailer at python.org Tue Apr 6 08:55:32 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 06 Apr 2021 12:55:32 -0000 Subject: [Python-checkins] bpo-41111: Don't build xxlimited with Py_TRACE_REFS macro (GH-25180) Message-ID: https://github.com/python/cpython/commit/5787ba4a45492e232f5470c7d2e93763198e4b22 commit: 5787ba4a45492e232f5470c7d2e93763198e4b22 branch: master author: Hai Shi committer: vstinner date: 2021-04-06T14:55:13+02:00 summary: bpo-41111: Don't build xxlimited with Py_TRACE_REFS macro (GH-25180) files: M setup.py diff --git a/setup.py b/setup.py index edf3cb4f230b5..d011936279490 100644 --- a/setup.py +++ b/setup.py @@ -1864,9 +1864,10 @@ def detect_modules(self): ## # Uncomment these lines if you want to play with xxmodule.c ## self.add(Extension('xx', ['xxmodule.c'])) - # Limited C API - self.add(Extension('xxlimited', ['xxlimited.c'])) - self.add(Extension('xxlimited_35', ['xxlimited_35.c'])) + # The limited C API is not compatible with the Py_TRACE_REFS macro. + if not sysconfig.get_config_var('Py_TRACE_REFS'): + self.add(Extension('xxlimited', ['xxlimited.c'])) + self.add(Extension('xxlimited_35', ['xxlimited_35.c'])) def detect_tkinter_fromenv(self): # Build _tkinter using the Tcl/Tk locations specified by From webhook-mailer at python.org Tue Apr 6 09:46:38 2021 From: webhook-mailer at python.org (ericvsmith) Date: Tue, 06 Apr 2021 13:46:38 -0000 Subject: [Python-checkins] bpo-43176: Fix processing of empty dataclasses (GH-24484) (GH-25205) Message-ID: https://github.com/python/cpython/commit/8a34a0793bcb830350dac675524310bb285e5e4f commit: 8a34a0793bcb830350dac675524310bb285e5e4f branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-06T09:46:30-04:00 summary: bpo-43176: Fix processing of empty dataclasses (GH-24484) (GH-25205) When a dataclass inherits from an empty base, all immutability checks are omitted. This PR fixes this and adds tests for it. Automerge-Triggered-By: GH:ericvsmith (cherry picked from commit 376ffc6ac491da74920aed1b8e35bc371cb766ac) Co-authored-by: Iurii Kemaev <6885137+hbq1 at users.noreply.github.com> Co-authored-by: Iurii Kemaev <6885137+hbq1 at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 21c7e0c9e2871..e015254df78b4 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -836,7 +836,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # Only process classes that have been processed by our # decorator. That is, they have a _FIELDS attribute. base_fields = getattr(b, _FIELDS, None) - if base_fields: + if base_fields is not None: has_dataclass_bases = True for f in base_fields.values(): fields[f.name] = f diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 31caae9d2f393..e65db176d9d34 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2568,6 +2568,30 @@ class D(C): self.assertEqual(d.i, 0) self.assertEqual(d.j, 10) + def test_inherit_nonfrozen_from_empty_frozen(self): + @dataclass(frozen=True) + class C: + pass + + with self.assertRaisesRegex(TypeError, + 'cannot inherit non-frozen dataclass from a frozen one'): + @dataclass + class D(C): + j: int + + def test_inherit_nonfrozen_from_empty(self): + @dataclass + class C: + pass + + @dataclass + class D(C): + j: int + + d = D(3) + self.assertEqual(d.j, 3) + self.assertIsInstance(d, C) + # Test both ways: with an intermediate normal (non-dataclass) # class and without an intermediate class. def test_inherit_nonfrozen_from_frozen(self): diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst new file mode 100644 index 0000000000000..66a175d21255c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -0,0 +1 @@ +Fixed processing of empty dataclasses. \ No newline at end of file From webhook-mailer at python.org Tue Apr 6 10:08:48 2021 From: webhook-mailer at python.org (ericvsmith) Date: Tue, 06 Apr 2021 14:08:48 -0000 Subject: [Python-checkins] Fix blurb for bpo-43176. (GH-25215) Message-ID: https://github.com/python/cpython/commit/1744c96ebc98b240f2564f75191097704b37244f commit: 1744c96ebc98b240f2564f75191097704b37244f branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-06T10:08:18-04:00 summary: Fix blurb for bpo-43176. (GH-25215) files: M Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst index 66a175d21255c..016514d9c3346 100644 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -1 +1 @@ -Fixed processing of empty dataclasses. \ No newline at end of file +Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. From webhook-mailer at python.org Tue Apr 6 10:19:06 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 14:19:06 -0000 Subject: [Python-checkins] [3.8] Fix blurb for bpo-43176. (GH-25215) (GH-25218) Message-ID: https://github.com/python/cpython/commit/76c4a9fb8ae370901b387a4edb609295bcc159e7 commit: 76c4a9fb8ae370901b387a4edb609295bcc159e7 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-06T07:18:57-07:00 summary: [3.8] Fix blurb for bpo-43176. (GH-25215) (GH-25218) (cherry picked from commit 1744c96ebc98b240f2564f75191097704b37244f) Co-authored-by: Eric V. Smith Automerge-Triggered-By: GH:ericvsmith files: M Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst index 66a175d21255c..016514d9c3346 100644 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -1 +1 @@ -Fixed processing of empty dataclasses. \ No newline at end of file +Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. From webhook-mailer at python.org Tue Apr 6 11:04:00 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 06 Apr 2021 15:04:00 -0000 Subject: [Python-checkins] bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Message-ID: https://github.com/python/cpython/commit/611aa39142f156508945ac312724474c493a6691 commit: 611aa39142f156508945ac312724474c493a6691 branch: 3.9 author: Steve Dower committer: zooba date: 2021-04-06T16:03:52+01:00 summary: bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Earlier releases were mislabelled and included 1.1.1i again. The tag/directory name is updated to ensure that builds get the fresh bits. However, the openssl-bin-1.1.1k tag in the repository has been forcibly updated, so fresh builds will be fine even without this change. files: A Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst M PCbuild/get_externals.bat M PCbuild/python.props diff --git a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst new file mode 100644 index 0000000000000..8ec498d11ea93 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst @@ -0,0 +1,2 @@ +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 203290fbadbe7..bf3208d63bb92 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -77,7 +77,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi -if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k +if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k-1 if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.9.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 diff --git a/PCbuild/python.props b/PCbuild/python.props index 5822ba13950f4..e056482c13f28 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -63,7 +63,7 @@ $(ExternalsDir)libffi\$(ArchName)\ $(libffiOutDir)include $(ExternalsDir)openssl-1.1.1k\ - $(ExternalsDir)openssl-bin-1.1.1k\$(ArchName)\ + $(ExternalsDir)openssl-bin-1.1.1k-1\$(ArchName)\ $(opensslOutDir)include $(ExternalsDir)\nasm-2.11.06\ $(ExternalsDir)\zlib-1.2.11\ From webhook-mailer at python.org Tue Apr 6 11:07:15 2021 From: webhook-mailer at python.org (ericvsmith) Date: Tue, 06 Apr 2021 15:07:15 -0000 Subject: [Python-checkins] Fix blurb for bpo-43176. (GH-25215) (GH-25217) Message-ID: https://github.com/python/cpython/commit/2df971afd5f29574be3bb44f2d8569cc240b800d commit: 2df971afd5f29574be3bb44f2d8569cc240b800d branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-06T11:07:07-04:00 summary: Fix blurb for bpo-43176. (GH-25215) (GH-25217) (cherry picked from commit 1744c96ebc98b240f2564f75191097704b37244f) Co-authored-by: Eric V. Smith Co-authored-by: Eric V. Smith files: M Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst index 66a175d21255c..016514d9c3346 100644 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -1 +1 @@ -Fixed processing of empty dataclasses. \ No newline at end of file +Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. From webhook-mailer at python.org Tue Apr 6 11:22:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 06 Apr 2021 15:22:58 -0000 Subject: [Python-checkins] bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Message-ID: https://github.com/python/cpython/commit/9a988b8cd8344808a03c9a2ba0c9ba2188240eae commit: 9a988b8cd8344808a03c9a2ba0c9ba2188240eae branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-06T08:22:39-07:00 summary: bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. (GH-25213) Earlier releases were mislabelled and included 1.1.1i again. The tag/directory name is updated to ensure that builds get the fresh bits. However, the openssl-bin-1.1.1k tag in the repository has been forcibly updated, so fresh builds will be fine even without this change. (cherry picked from commit 611aa39142f156508945ac312724474c493a6691) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst M PCbuild/get_externals.bat M PCbuild/python.props diff --git a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst new file mode 100644 index 0000000000000..8ec498d11ea93 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst @@ -0,0 +1,2 @@ +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 9f27319918559..abeed8324837a 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -77,7 +77,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi -if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k +if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k-1 if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.9.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 diff --git a/PCbuild/python.props b/PCbuild/python.props index 5822ba13950f4..e056482c13f28 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -63,7 +63,7 @@ $(ExternalsDir)libffi\$(ArchName)\ $(libffiOutDir)include $(ExternalsDir)openssl-1.1.1k\ - $(ExternalsDir)openssl-bin-1.1.1k\$(ArchName)\ + $(ExternalsDir)openssl-bin-1.1.1k-1\$(ArchName)\ $(opensslOutDir)include $(ExternalsDir)\nasm-2.11.06\ $(ExternalsDir)\zlib-1.2.11\ From webhook-mailer at python.org Tue Apr 6 11:44:07 2021 From: webhook-mailer at python.org (corona10) Date: Tue, 06 Apr 2021 15:44:07 -0000 Subject: [Python-checkins] bpo-41870: Update What's News 3.10 about vectorcall (#25219) Message-ID: https://github.com/python/cpython/commit/efccff9ac84009ef48e8cb22548ce80940f76533 commit: efccff9ac84009ef48e8cb22548ce80940f76533 branch: master author: Dong-hee Na committer: corona10 date: 2021-04-07T00:43:59+09:00 summary: bpo-41870: Update What's News 3.10 about vectorcall (#25219) * bpo-41870: Update What's News 3.10 about vectorcall * update * Update Doc/whatsnew/3.10.rst Co-authored-by: Victor Stinner Co-authored-by: Victor Stinner files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index d20fdac71b302..72950157b4e1f 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1000,6 +1000,10 @@ Optimizations performance in the common case of cache hits. This makes the interpreter 1.04 times faster in average (Contributed by Dino Viehland in :issue:`43452`) +* Following built-in functions now support the faster :pep:`590` vectorcall calling convention: + :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`. + (Contributed by Dong-hee Na and Jeroen Demeyerin in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`) + Deprecated ========== From webhook-mailer at python.org Tue Apr 6 11:57:06 2021 From: webhook-mailer at python.org (brettcannon) Date: Tue, 06 Apr 2021 15:57:06 -0000 Subject: [Python-checkins] bpo-42135: Deprecate implementations of find_module() and find_loader() (GH-25169) Message-ID: https://github.com/python/cpython/commit/57c6cb5100d19a0e0218c77d887c3c239c9ce435 commit: 57c6cb5100d19a0e0218c77d887c3c239c9ce435 branch: master author: Brett Cannon committer: brettcannon date: 2021-04-06T08:56:57-07:00 summary: bpo-42135: Deprecate implementations of find_module() and find_loader() (GH-25169) files: A Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst M Doc/library/importlib.rst M Doc/whatsnew/3.10.rst M Lib/importlib/__init__.py M Lib/importlib/_bootstrap.py M Lib/importlib/_bootstrap_external.py M Lib/importlib/abc.py M Lib/test/test_importlib/builtin/test_finder.py M Lib/test/test_importlib/extension/test_case_sensitivity.py M Lib/test/test_importlib/extension/test_finder.py M Lib/test/test_importlib/frozen/test_finder.py M Lib/test/test_importlib/frozen/test_loader.py M Lib/test/test_importlib/import_/test_path.py M Lib/test/test_importlib/source/test_case_sensitivity.py M Lib/test/test_importlib/test_abc.py M Lib/test/test_importlib/test_api.py M Lib/zipimport.py M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 6515cdbc8d329..50297e0d73e7c 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -257,6 +257,10 @@ ABC hierarchy:: Returns ``None`` when called instead of raising :exc:`NotImplementedError`. + .. deprecated:: 3.10 + Implement :meth:`MetaPathFinder.find_spec` or + :meth:`PathEntryFinder.find_spec` instead. + .. class:: MetaPathFinder @@ -265,6 +269,9 @@ ABC hierarchy:: .. versionadded:: 3.3 + .. versionchanged:: 3.10 + No longer a subclass of :class:`Finder`. + .. method:: find_spec(fullname, path, target=None) An abstract method for finding a :term:`spec ` for @@ -313,11 +320,13 @@ ABC hierarchy:: An abstract base class representing a :term:`path entry finder`. Though it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder`` is meant for use only within the path-based import subsystem provided - by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for - compatibility reasons only. + by :class:`importlib.machinery.PathFinder`. .. versionadded:: 3.3 + .. versionchanged:: 3.10 + No longer a subclass of :class:`Finder`. + .. method:: find_spec(fullname, target=None) An abstract method for finding a :term:`spec ` for @@ -363,7 +372,8 @@ ABC hierarchy:: .. method:: invalidate_caches() An optional method which, when called, should invalidate any internal - cache used by the finder. Used by :meth:`PathFinder.invalidate_caches` + cache used by the finder. Used by + :meth:`importlib.machinery.PathFinder.invalidate_caches` when invalidating the caches of all cached finders. @@ -1193,6 +1203,9 @@ find and load modules. Attempt to find the loader to handle *fullname* within :attr:`path`. + .. deprecated:: 3.10 + Use :meth:`find_spec` instead. + .. method:: invalidate_caches() Clear out the internal cache. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 72950157b4e1f..453a1b42adfa9 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1062,6 +1062,39 @@ Deprecated :func:`importlib.util.spec_from_loader` to help in porting. (Contributed by Brett Cannon in :issue:`43672`.) +* The various implementations of + :meth:`importlib.abc.MetaPathFinder.find_module` ( + :meth:`importlib.machinery.BuiltinImporter.find_module`, + :meth:`importlib.machinery.FrozenImporter.find_module`, + :meth:`importlib.machinery.WindowsRegistryFinder.find_module`, + :meth:`importlib.machinery.PathFinder.find_module`, + :meth:`importlib.abc.MetaPathFinder.find_module`), + :meth:`importlib.abc.PathEntryFinder.find_module` ( + :meth:`importlib.machinery.FileFinder.find_module`, + ), and + :meth:`importlib.abc.PathEntryFinder.find_loader` ( + :meth:`importlib.machinery.FileFinder.find_loader` + ) now raise :exc:`DeprecationWarning` and are slated for removal in + Python 3.12 (previously they were documented as deprecated in Python 3.4). + (Contributed by Brett Cannon in :issue:`42135`.) + +* :class:`importlib.abc.Finder` is deprecated (including its sole method, + :meth:`~importlib.abc.Finder.find_module`). Both + :class:`importlib.abc.MetaPathFinder` and :class:`importlib.abc.PathEntryFinder` + no longer inherit from the class. Users should inherit from one of these two + classes as appropriate instead. + (Contributed by Brett Cannon in :issue:`42135`.) + +* The deprecations of :mod:`imp`, :func:`importlib.find_loader`, + :func:`importlib.util.set_package_wrapper`, + :func:`importlib.util.set_loader_wrapper`, + :func:`importlib.util.module_for_loader`, + :class:`pkgutil.ImpImporter`, and + :class:`pkgutil.ImpLoader` have all been updated to list Python 3.12 as the + slated version of removal (they began raising :exc:`DeprecationWarning` in + previous versions of Python). + (Contributed by Brett Cannon in :issue:`43720`.) + * The import system now uses the ``__spec__`` attribute on modules before falling back on :meth:`~importlib.abc.Loader.module_repr` for a module's ``__repr__()`` method. Removal of the use of ``module_repr()`` is scheduled diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py index 03ff71489abbd..a510f08db48a8 100644 --- a/Lib/importlib/__init__.py +++ b/Lib/importlib/__init__.py @@ -78,8 +78,8 @@ def find_loader(name, path=None): This function is deprecated in favor of importlib.util.find_spec(). """ - warnings.warn('Deprecated since Python 3.4. ' - 'Use importlib.util.find_spec() instead.', + warnings.warn('Deprecated since Python 3.4 and slated for removal in ' + 'Python 3.10; use importlib.util.find_spec() instead', DeprecationWarning, stacklevel=2) try: loader = sys.modules[name].__loader__ diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index ab52e778fda87..527bc9c63c916 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -761,6 +761,9 @@ def find_module(cls, fullname, path=None): This method is deprecated. Use find_spec() instead. """ + _warnings.warn("BuiltinImporter.find_module() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) spec = cls.find_spec(fullname, path) return spec.loader if spec is not None else None @@ -834,6 +837,9 @@ def find_module(cls, fullname, path=None): This method is deprecated. Use find_spec() instead. """ + _warnings.warn("FrozenImporter.find_module() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) return cls if _imp.is_frozen(fullname) else None @staticmethod diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index d351ee05ed490..34f554a53f262 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -533,6 +533,9 @@ def _find_module_shim(self, fullname): This method is deprecated in favor of finder.find_spec(). """ + _warnings.warn("find_module() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) # Call find_loader(). If it returns a string (indicating this # is a namespace package portion), generate a warning and # return None. @@ -801,9 +804,12 @@ def find_spec(cls, fullname, path=None, target=None): def find_module(cls, fullname, path=None): """Find module named in the registry. - This method is deprecated. Use exec_module() instead. + This method is deprecated. Use find_spec() instead. """ + _warnings.warn("WindowsRegistryFinder.find_module() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) spec = cls.find_spec(fullname, path) if spec is not None: return spec.loader @@ -1404,6 +1410,9 @@ def find_module(cls, fullname, path=None): This method is deprecated. Use find_spec() instead. """ + _warnings.warn("PathFinder.find_module() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) spec = cls.find_spec(fullname, path) if spec is None: return None @@ -1459,6 +1468,9 @@ def find_loader(self, fullname): This method is deprecated. Use find_spec() instead. """ + _warnings.warn("FileFinder.find_loader() is deprecated and " + "slated for removal in Python 3.12; use find_spec() instead", + DeprecationWarning) spec = self.find_spec(fullname) if spec is None: return None, [] diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py index 4be51e2346282..0b4a3f8071750 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -41,15 +41,27 @@ class Finder(metaclass=abc.ABCMeta): Deprecated since Python 3.3 """ + def __init__(self): + warnings.warn("the Finder ABC is deprecated and " + "slated for removal in Python 3.12; use MetaPathFinder " + "or PathEntryFinder instead", + DeprecationWarning) + @abc.abstractmethod def find_module(self, fullname, path=None): """An abstract method that should find a module. The fullname is a str and the optional path is a str or None. Returns a Loader object or None. """ + warnings.warn("importlib.abc.Finder along with its find_module() " + "method are deprecated and " + "slated for removal in Python 3.12; use " + "MetaPathFinder.find_spec() or " + "PathEntryFinder.find_spec() instead", + DeprecationWarning) -class MetaPathFinder(Finder): +class MetaPathFinder(metaclass=abc.ABCMeta): """Abstract base class for import finders on sys.meta_path.""" @@ -68,8 +80,8 @@ def find_module(self, fullname, path): """ warnings.warn("MetaPathFinder.find_module() is deprecated since Python " - "3.4 in favor of MetaPathFinder.find_spec() " - "(available since 3.4)", + "3.4 in favor of MetaPathFinder.find_spec() and is " + "slated for removal in Python 3.12", DeprecationWarning, stacklevel=2) if not hasattr(self, 'find_spec'): @@ -86,7 +98,7 @@ def invalidate_caches(self): machinery.PathFinder, machinery.WindowsRegistryFinder) -class PathEntryFinder(Finder): +class PathEntryFinder(metaclass=abc.ABCMeta): """Abstract base class for path entry finders used by PathFinder.""" diff --git a/Lib/test/test_importlib/builtin/test_finder.py b/Lib/test/test_importlib/builtin/test_finder.py index 084f3de6b6508..6f51abab9bcd1 100644 --- a/Lib/test/test_importlib/builtin/test_finder.py +++ b/Lib/test/test_importlib/builtin/test_finder.py @@ -5,6 +5,7 @@ import sys import unittest +import warnings @unittest.skipIf(util.BUILTINS.good_name is None, 'no reasonable builtin module') @@ -58,7 +59,9 @@ class FinderTests(abc.FinderTests): def test_module(self): # Common case. with util.uncache(util.BUILTINS.good_name): - found = self.machinery.BuiltinImporter.find_module(util.BUILTINS.good_name) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + found = self.machinery.BuiltinImporter.find_module(util.BUILTINS.good_name) self.assertTrue(found) self.assertTrue(hasattr(found, 'load_module')) @@ -70,14 +73,19 @@ def test_module(self): def test_failure(self): assert 'importlib' not in sys.builtin_module_names - loader = self.machinery.BuiltinImporter.find_module('importlib') + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + loader = self.machinery.BuiltinImporter.find_module('importlib') self.assertIsNone(loader) def test_ignore_path(self): # The value for 'path' should always trigger a failed import. with util.uncache(util.BUILTINS.good_name): - loader = self.machinery.BuiltinImporter.find_module(util.BUILTINS.good_name, - ['pkg']) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + loader = self.machinery.BuiltinImporter.find_module( + util.BUILTINS.good_name, + ['pkg']) self.assertIsNone(loader) diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py index 4d76fa014cd73..20bf035cb5f66 100644 --- a/Lib/test/test_importlib/extension/test_case_sensitivity.py +++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py @@ -12,30 +12,30 @@ @util.case_insensitive_tests class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase): - def find_module(self): + def find_spec(self): good_name = util.EXTENSIONS.name bad_name = good_name.upper() assert good_name != bad_name finder = self.machinery.FileFinder(util.EXTENSIONS.path, (self.machinery.ExtensionFileLoader, self.machinery.EXTENSION_SUFFIXES)) - return finder.find_module(bad_name) + return finder.find_spec(bad_name) @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set') def test_case_sensitive(self): with os_helper.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') self.caseok_env_changed(should_exist=False) - loader = self.find_module() - self.assertIsNone(loader) + spec = self.find_spec() + self.assertIsNone(spec) @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set') def test_case_insensitivity(self): with os_helper.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') self.caseok_env_changed(should_exist=True) - loader = self.find_module() - self.assertTrue(hasattr(loader, 'load_module')) + spec = self.find_spec() + self.assertTrue(spec) (Frozen_ExtensionCaseSensitivity, diff --git a/Lib/test/test_importlib/extension/test_finder.py b/Lib/test/test_importlib/extension/test_finder.py index c9b4a3772cc3c..e8065d7dadecf 100644 --- a/Lib/test/test_importlib/extension/test_finder.py +++ b/Lib/test/test_importlib/extension/test_finder.py @@ -11,16 +11,15 @@ class FinderTests(abc.FinderTests): """Test the finder for extension modules.""" - def find_module(self, fullname): + def find_spec(self, fullname): importer = self.machinery.FileFinder(util.EXTENSIONS.path, (self.machinery.ExtensionFileLoader, self.machinery.EXTENSION_SUFFIXES)) - with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - return importer.find_module(fullname) + + return importer.find_spec(fullname) def test_module(self): - self.assertTrue(self.find_module(util.EXTENSIONS.name)) + self.assertTrue(self.find_spec(util.EXTENSIONS.name)) # No extension module as an __init__ available for testing. test_package = test_package_in_package = None @@ -32,7 +31,7 @@ def test_module(self): test_package_over_module = None def test_failure(self): - self.assertIsNone(self.find_module('asdfjkl;')) + self.assertIsNone(self.find_spec('asdfjkl;')) (Frozen_FinderTests, diff --git a/Lib/test/test_importlib/frozen/test_finder.py b/Lib/test/test_importlib/frozen/test_finder.py index 519aa027d610d..eb7a4d275cfd2 100644 --- a/Lib/test/test_importlib/frozen/test_finder.py +++ b/Lib/test/test_importlib/frozen/test_finder.py @@ -4,6 +4,7 @@ machinery = util.import_importlib('importlib.machinery') import unittest +import warnings class FindSpecTests(abc.FinderTests): @@ -49,7 +50,9 @@ class FinderTests(abc.FinderTests): def find(self, name, path=None): finder = self.machinery.FrozenImporter - return finder.find_module(name, path) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + return finder.find_module(name, path) def test_module(self): name = '__hello__' diff --git a/Lib/test/test_importlib/frozen/test_loader.py b/Lib/test/test_importlib/frozen/test_loader.py index 632246ade0826..f0cf17990b372 100644 --- a/Lib/test/test_importlib/frozen/test_loader.py +++ b/Lib/test/test_importlib/frozen/test_loader.py @@ -78,7 +78,7 @@ def test_module_repr_indirect(self): test_state_after_failure = None def test_unloadable(self): - assert self.machinery.FrozenImporter.find_module('_not_real') is None + assert self.machinery.FrozenImporter.find_spec('_not_real') is None with self.assertRaises(ImportError) as cm: self.exec_module('_not_real') self.assertEqual(cm.exception.name, '_not_real') diff --git a/Lib/test/test_importlib/import_/test_path.py b/Lib/test/test_importlib/import_/test_path.py index 2ba7030d14d8c..57a25228fc043 100644 --- a/Lib/test/test_importlib/import_/test_path.py +++ b/Lib/test/test_importlib/import_/test_path.py @@ -75,7 +75,8 @@ def test_empty_path_hooks(self): with util.import_state(path_importer_cache={}, path_hooks=[], path=[path_entry]): with warnings.catch_warnings(record=True) as w: - warnings.simplefilter('always') + warnings.simplefilter('always', ImportWarning) + warnings.simplefilter('ignore', DeprecationWarning) self.assertIsNone(self.find('os')) self.assertIsNone(sys.path_importer_cache[path_entry]) self.assertEqual(len(w), 1) @@ -216,7 +217,9 @@ def test_invalidate_caches_clear_out_None(self): class FindModuleTests(FinderTests): def find(self, *args, **kwargs): - return self.machinery.PathFinder.find_module(*args, **kwargs) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + return self.machinery.PathFinder.find_module(*args, **kwargs) def check_found(self, found, importer): self.assertIs(found, importer) @@ -278,6 +281,7 @@ def find_module(fullname): path_hooks=[Finder]): with warnings.catch_warnings(): warnings.simplefilter("ignore", ImportWarning) + warnings.simplefilter("ignore", DeprecationWarning) self.machinery.PathFinder.find_module('importlib') diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py index 77c06a75fc77b..19543f4a6653a 100644 --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -9,6 +9,7 @@ import os from test.support import os_helper import unittest +import warnings @util.case_insensitive_tests @@ -64,7 +65,9 @@ def test_insensitive(self): class CaseSensitivityTestPEP302(CaseSensitivityTest): def find(self, finder): - return finder.find_module(self.name) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + return finder.find_module(self.name) (Frozen_CaseSensitivityTestPEP302, diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py index 98f5835eafca5..45cbf90791708 100644 --- a/Lib/test/test_importlib/test_abc.py +++ b/Lib/test/test_importlib/test_abc.py @@ -55,7 +55,7 @@ def test_superclasses(self): class MetaPathFinder(InheritanceTests): - superclass_names = ['Finder'] + superclass_names = [] subclass_names = ['BuiltinImporter', 'FrozenImporter', 'PathFinder', 'WindowsRegistryFinder'] @@ -66,7 +66,7 @@ class MetaPathFinder(InheritanceTests): class PathEntryFinder(InheritanceTests): - superclass_names = ['Finder'] + superclass_names = [] subclass_names = ['FileFinder'] diff --git a/Lib/test/test_importlib/test_api.py b/Lib/test/test_importlib/test_api.py index 8344fb0e66065..763b2add07307 100644 --- a/Lib/test/test_importlib/test_api.py +++ b/Lib/test/test_importlib/test_api.py @@ -440,9 +440,9 @@ def test_everyone_has___loader__(self): with self.subTest(name=name): self.assertTrue(hasattr(module, '__loader__'), '{!r} lacks a __loader__ attribute'.format(name)) - if self.machinery.BuiltinImporter.find_module(name): + if self.machinery.BuiltinImporter.find_spec(name): self.assertIsNot(module.__loader__, None) - elif self.machinery.FrozenImporter.find_module(name): + elif self.machinery.FrozenImporter.find_spec(name): self.assertIsNot(module.__loader__, None) def test_everyone_has___spec__(self): @@ -450,9 +450,9 @@ def test_everyone_has___spec__(self): if isinstance(module, types.ModuleType): with self.subTest(name=name): self.assertTrue(hasattr(module, '__spec__')) - if self.machinery.BuiltinImporter.find_module(name): + if self.machinery.BuiltinImporter.find_spec(name): self.assertIsNot(module.__spec__, None) - elif self.machinery.FrozenImporter.find_module(name): + elif self.machinery.FrozenImporter.find_spec(name): self.assertIsNot(module.__spec__, None) diff --git a/Lib/zipimport.py b/Lib/zipimport.py index e88d7a2c5a724..c55fec6aa1c47 100644 --- a/Lib/zipimport.py +++ b/Lib/zipimport.py @@ -119,6 +119,9 @@ def find_loader(self, fullname, path=None): Deprecated since Python 3.10. Use find_spec() instead. """ + _warnings.warn("zipimporter.find_loader() is deprecated and slated for " + "removal in Python 3.12; use find_spec() instead", + DeprecationWarning) mi = _get_module_info(self, fullname) if mi is not None: # This is a module or package. @@ -152,6 +155,9 @@ def find_module(self, fullname, path=None): Deprecated since Python 3.10. Use find_spec() instead. """ + _warnings.warn("zipimporter.find_module() is deprecated and slated for " + "removal in Python 3.12; use find_spec() instead", + DeprecationWarning) return self.find_loader(fullname, path)[0] def find_spec(self, fullname, target=None): diff --git a/Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst b/Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst new file mode 100644 index 0000000000000..33e5cf4d208b9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst @@ -0,0 +1,2 @@ +Deprecate find_module() and find_loader() implementations in importlib and +zipimport. diff --git a/Python/importlib.h b/Python/importlib.h index f360407136768..b561038673b68 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1127,743 +1127,761 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105, 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, - 3,124,3,100,1,117,1,114,13,124,3,106,1,83,0,100, - 1,83,0,41,2,122,175,70,105,110,100,32,116,104,101,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,73,102,32,39,112,97, - 116,104,39,32,105,115,32,101,118,101,114,32,115,112,101,99, - 105,102,105,101,100,32,116,104,101,110,32,116,104,101,32,115, - 101,97,114,99,104,32,105,115,32,99,111,110,115,105,100,101, - 114,101,100,32,97,32,102,97,105,108,117,114,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,2,114,183,0,0,0,114,122, - 0,0,0,41,4,114,180,0,0,0,114,89,0,0,0,114, - 181,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,11,102,105,110,100,95,109, - 111,100,117,108,101,243,2,0,0,115,6,0,0,0,12,9, - 18,1,255,128,122,27,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,108, - 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,67,0,0,0,115,46,0,0,0,124, - 0,106,0,116,1,106,2,118,1,114,17,116,3,100,1,160, - 4,124,0,106,0,161,1,124,0,106,0,100,2,141,2,130, - 1,116,5,116,6,106,7,124,0,131,2,83,0,41,4,122, - 24,67,114,101,97,116,101,32,97,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,114,85,0,0,0,114,19, - 0,0,0,78,41,8,114,20,0,0,0,114,18,0,0,0, - 114,86,0,0,0,114,87,0,0,0,114,50,0,0,0,114, - 74,0,0,0,114,64,0,0,0,90,14,99,114,101,97,116, - 101,95,98,117,105,108,116,105,110,114,174,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,162,0, - 0,0,255,2,0,0,115,12,0,0,0,12,3,12,1,4, - 1,6,255,12,2,255,128,122,29,66,117,105,108,116,105,110, - 73,109,112,111,114,116,101,114,46,99,114,101,97,116,101,95, - 109,111,100,117,108,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 16,0,0,0,116,0,116,1,106,2,124,0,131,2,1,0, - 100,1,83,0,41,2,122,22,69,120,101,99,32,97,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,78,41, - 3,114,74,0,0,0,114,64,0,0,0,90,12,101,120,101, - 99,95,98,117,105,108,116,105,110,114,177,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,163,0, - 0,0,7,3,0,0,115,4,0,0,0,16,3,255,128,122, - 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, - 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,243,4,0,0,0,100,1,83,0,41,2, - 122,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111, - 100,101,32,111,98,106,101,99,116,115,46,78,114,5,0,0, - 0,169,2,114,180,0,0,0,114,89,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,8,103,101, - 116,95,99,111,100,101,12,3,0,0,243,4,0,0,0,4, - 4,255,128,122,24,66,117,105,108,116,105,110,73,109,112,111, - 114,116,101,114,46,103,101,116,95,99,111,100,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,114,185,0,0,0,41,2,122,56,82, + 115,42,0,0,0,116,0,160,1,100,1,116,2,161,2,1, + 0,124,0,160,3,124,1,124,2,161,2,125,3,124,3,100, + 2,117,1,114,19,124,3,106,4,83,0,100,2,83,0,41, + 3,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, + 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, + 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, + 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, + 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,106,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,40, + 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, + 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, + 32,51,46,49,50,59,32,117,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,78,41, + 5,114,101,0,0,0,114,102,0,0,0,114,103,0,0,0, + 114,183,0,0,0,114,122,0,0,0,41,4,114,180,0,0, + 0,114,89,0,0,0,114,181,0,0,0,114,109,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 11,102,105,110,100,95,109,111,100,117,108,101,243,2,0,0, + 115,12,0,0,0,6,9,2,2,4,254,12,3,18,1,255, + 128,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,67,0,0,0,115,46,0,0,0,124,0,106,0, + 116,1,106,2,118,1,114,17,116,3,100,1,160,4,124,0, + 106,0,161,1,124,0,106,0,100,2,141,2,130,1,116,5, + 116,6,106,7,124,0,131,2,83,0,41,4,122,24,67,114, + 101,97,116,101,32,97,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,114,85,0,0,0,114,19,0,0,0, + 78,41,8,114,20,0,0,0,114,18,0,0,0,114,86,0, + 0,0,114,87,0,0,0,114,50,0,0,0,114,74,0,0, + 0,114,64,0,0,0,90,14,99,114,101,97,116,101,95,98, + 117,105,108,116,105,110,114,174,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,162,0,0,0,2, + 3,0,0,115,12,0,0,0,12,3,12,1,4,1,6,255, + 12,2,255,128,122,29,66,117,105,108,116,105,110,73,109,112, + 111,114,116,101,114,46,99,114,101,97,116,101,95,109,111,100, + 117,108,101,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, + 0,116,0,116,1,106,2,124,0,131,2,1,0,100,1,83, + 0,41,2,122,22,69,120,101,99,32,97,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,78,41,3,114,74, + 0,0,0,114,64,0,0,0,90,12,101,120,101,99,95,98, + 117,105,108,116,105,110,114,177,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,163,0,0,0,10, + 3,0,0,115,4,0,0,0,16,3,255,128,122,27,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,101,120, + 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,243,4,0,0,0,100,1,83,0,41,2,122,57,82, 101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117, 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100, - 111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,114,5,0,0,0,114,186,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,10,103,101,116,95,115,111,117,114,99,101,18,3,0, - 0,114,188,0,0,0,122,26,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114, - 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,114,185,0,0,0, - 41,3,122,52,82,101,116,117,114,110,32,70,97,108,115,101, - 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,97,114,101,32,110,101,118,101,114,32,112, - 97,99,107,97,103,101,115,46,70,78,114,5,0,0,0,114, - 186,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,128,0,0,0,24,3,0,0,114,188,0,0, - 0,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,105,115,95,112,97,99,107,97,103,101,41,2,78, - 78,41,1,78,41,18,114,9,0,0,0,114,8,0,0,0, - 114,1,0,0,0,114,10,0,0,0,114,151,0,0,0,218, - 12,115,116,97,116,105,99,109,101,116,104,111,100,114,114,0, - 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, - 183,0,0,0,114,184,0,0,0,114,162,0,0,0,114,163, - 0,0,0,114,95,0,0,0,114,187,0,0,0,114,189,0, - 0,0,114,128,0,0,0,114,111,0,0,0,114,170,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,175,0,0,0,212,2,0,0,115,48, - 0,0,0,8,0,4,2,4,7,2,2,10,1,2,10,12, - 1,2,8,12,1,2,11,10,1,2,7,10,1,2,4,2, - 1,12,1,2,4,2,1,12,1,2,4,2,1,12,1,12, - 4,255,128,114,175,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, - 0,115,144,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,90,4,101,5,100,3,100,4,132,0,131,1, - 90,6,101,7,100,22,100,6,100,7,132,1,131,1,90,8, - 101,7,100,23,100,8,100,9,132,1,131,1,90,9,101,5, - 100,10,100,11,132,0,131,1,90,10,101,5,100,12,100,13, - 132,0,131,1,90,11,101,7,100,14,100,15,132,0,131,1, - 90,12,101,7,101,13,100,16,100,17,132,0,131,1,131,1, - 90,14,101,7,101,13,100,18,100,19,132,0,131,1,131,1, - 90,15,101,7,101,13,100,20,100,21,132,0,131,1,131,1, - 90,16,100,5,83,0,41,24,218,14,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,122,142,77,101,116,97,32,112, - 97,116,104,32,105,109,112,111,114,116,32,102,111,114,32,102, - 114,111,122,101,110,32,109,111,100,117,108,101,115,46,10,10, - 32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,32, - 97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,115, - 32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,111, - 100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,32, - 110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,116, - 97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,115, - 115,46,10,10,32,32,32,32,90,6,102,114,111,122,101,110, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,67,0,0,0,115,28,0,0,0,116,0, - 160,1,100,1,116,2,161,2,1,0,100,2,160,3,124,0, - 106,4,116,5,106,6,161,2,83,0,41,4,114,176,0,0, - 0,122,80,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,109,111,100,117,108,101,95,114,101,112,114,40,41,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, - 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, - 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, - 46,49,50,114,166,0,0,0,78,41,7,114,101,0,0,0, - 114,102,0,0,0,114,103,0,0,0,114,50,0,0,0,114, - 9,0,0,0,114,192,0,0,0,114,151,0,0,0,41,1, - 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,114,0,0,0,44,3,0,0,115,10,0,0,0, - 6,7,2,1,4,255,16,2,255,128,122,26,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,46,109,111,100,117,108, - 101,95,114,101,112,114,78,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,0, - 115,30,0,0,0,116,0,160,1,124,1,161,1,114,13,116, - 2,124,1,124,0,124,0,106,3,100,1,141,3,83,0,100, - 0,83,0,114,178,0,0,0,41,4,114,64,0,0,0,114, - 98,0,0,0,114,104,0,0,0,114,151,0,0,0,114,179, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,183,0,0,0,55,3,0,0,115,8,0,0,0, - 10,2,16,1,4,2,255,128,122,24,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, - 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0, - 116,0,160,1,124,1,161,1,114,7,124,0,83,0,100,1, - 83,0,41,2,122,93,70,105,110,100,32,97,32,102,114,111, - 122,101,110,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,78,41,2,114,64,0,0,0,114,98,0,0,0, - 41,3,114,180,0,0,0,114,89,0,0,0,114,181,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,184,0,0,0,62,3,0,0,115,4,0,0,0,18,7, - 255,128,122,26,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1, - 0,0,0,67,0,0,0,114,185,0,0,0,41,2,122,42, - 85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97, - 110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101, - 32,99,114,101,97,116,105,111,110,46,78,114,5,0,0,0, - 114,174,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,162,0,0,0,71,3,0,0,115,4,0, - 0,0,4,0,255,128,122,28,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,111, - 100,117,108,101,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,67,0,0,0,115,64,0, - 0,0,124,0,106,0,106,1,125,1,116,2,160,3,124,1, - 161,1,115,18,116,4,100,1,160,5,124,1,161,1,124,1, - 100,2,141,2,130,1,116,6,116,2,106,7,124,1,131,2, - 125,2,116,8,124,2,124,0,106,9,131,2,1,0,100,0, - 83,0,114,97,0,0,0,41,10,114,113,0,0,0,114,20, - 0,0,0,114,64,0,0,0,114,98,0,0,0,114,87,0, - 0,0,114,50,0,0,0,114,74,0,0,0,218,17,103,101, - 116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,218, - 4,101,120,101,99,114,14,0,0,0,41,3,114,110,0,0, - 0,114,20,0,0,0,218,4,99,111,100,101,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,114,163,0,0,0, - 75,3,0,0,115,16,0,0,0,8,2,10,1,10,1,2, - 1,6,255,12,2,16,1,255,128,122,26,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,10, - 0,0,0,116,0,124,0,124,1,131,2,83,0,41,2,122, - 95,76,111,97,100,32,97,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,41,1,114,111,0,0,0,114,186,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,170,0,0, - 0,84,3,0,0,115,4,0,0,0,10,8,255,128,122,26, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,243,10,0,0,0,116,0,160,1,124,1,161,1, - 83,0,41,2,122,45,82,101,116,117,114,110,32,116,104,101, - 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, - 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, - 108,101,46,78,41,2,114,64,0,0,0,114,194,0,0,0, - 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,187,0,0,0,94,3,0,0,243,4,0, - 0,0,10,4,255,128,122,23,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, + 111,32,110,111,116,32,104,97,118,101,32,99,111,100,101,32, + 111,98,106,101,99,116,115,46,78,114,5,0,0,0,169,2, + 114,180,0,0,0,114,89,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,8,103,101,116,95,99, + 111,100,101,15,3,0,0,243,4,0,0,0,4,4,255,128, + 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, + 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,114,185,0,0,0,41,2,122,56,82,101,116,117, + 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, + 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,114,5,0,0,0,114,186,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, + 103,101,116,95,115,111,117,114,99,101,21,3,0,0,114,188, + 0,0,0,122,26,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,185,0,0,0,41,2,122, - 54,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,115,32,100, - 111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,114,5,0,0,0,114,186,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,189,0,0,0,100,3,0,0,114,188,0,0,0,122, - 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,114,197,0,0,0,41,2,122,46,82,101,116,117, - 114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,102, - 114,111,122,101,110,32,109,111,100,117,108,101,32,105,115,32, - 97,32,112,97,99,107,97,103,101,46,78,41,2,114,64,0, - 0,0,90,17,105,115,95,102,114,111,122,101,110,95,112,97, - 99,107,97,103,101,114,186,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,114,128,0,0,0,106,3, - 0,0,114,198,0,0,0,122,25,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,97, - 103,101,41,2,78,78,41,1,78,41,17,114,9,0,0,0, - 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, - 151,0,0,0,114,190,0,0,0,114,114,0,0,0,114,191, - 0,0,0,114,183,0,0,0,114,184,0,0,0,114,162,0, - 0,0,114,163,0,0,0,114,170,0,0,0,114,100,0,0, - 0,114,187,0,0,0,114,189,0,0,0,114,128,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,192,0,0,0,33,3,0,0,115,50,0, - 0,0,8,0,4,2,4,7,2,2,10,1,2,10,12,1, - 2,6,12,1,2,8,10,1,2,3,10,1,2,8,10,1, - 2,9,2,1,12,1,2,4,2,1,12,1,2,4,2,1, - 16,1,255,128,114,192,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,32,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,83,0,41,7,218,18,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,122,36,67, - 111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,102, - 111,114,32,116,104,101,32,105,109,112,111,114,116,32,108,111, - 99,107,46,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,243,12,0,0, - 0,116,0,160,1,161,0,1,0,100,1,83,0,41,2,122, - 24,65,99,113,117,105,114,101,32,116,104,101,32,105,109,112, - 111,114,116,32,108,111,99,107,46,78,41,2,114,64,0,0, - 0,114,65,0,0,0,114,52,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,61,0,0,0,119, - 3,0,0,243,4,0,0,0,12,2,255,128,122,28,95,73, - 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, - 46,95,95,101,110,116,101,114,95,95,99,4,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,2,0,0,0,67, - 0,0,0,114,200,0,0,0,41,2,122,60,82,101,108,101, - 97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108, - 111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,111, - 102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,99, - 101,112,116,105,111,110,115,46,78,41,2,114,64,0,0,0, - 114,67,0,0,0,41,4,114,33,0,0,0,218,8,101,120, - 99,95,116,121,112,101,218,9,101,120,99,95,118,97,108,117, - 101,218,13,101,120,99,95,116,114,97,99,101,98,97,99,107, + 1,0,0,0,67,0,0,0,114,185,0,0,0,41,3,122, + 52,82,101,116,117,114,110,32,70,97,108,115,101,32,97,115, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 115,32,97,114,101,32,110,101,118,101,114,32,112,97,99,107, + 97,103,101,115,46,70,78,114,5,0,0,0,114,186,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,128,0,0,0,27,3,0,0,114,188,0,0,0,122,26, + 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, + 105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,1, + 78,41,18,114,9,0,0,0,114,8,0,0,0,114,1,0, + 0,0,114,10,0,0,0,114,151,0,0,0,218,12,115,116, + 97,116,105,99,109,101,116,104,111,100,114,114,0,0,0,218, + 11,99,108,97,115,115,109,101,116,104,111,100,114,183,0,0, + 0,114,184,0,0,0,114,162,0,0,0,114,163,0,0,0, + 114,95,0,0,0,114,187,0,0,0,114,189,0,0,0,114, + 128,0,0,0,114,111,0,0,0,114,170,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,175,0,0,0,212,2,0,0,115,48,0,0,0, + 8,0,4,2,4,7,2,2,10,1,2,10,12,1,2,8, + 12,1,2,14,10,1,2,7,10,1,2,4,2,1,12,1, + 2,4,2,1,12,1,2,4,2,1,12,1,12,4,255,128, + 114,175,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,144, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,90,4,101,5,100,3,100,4,132,0,131,1,90,6,101, + 7,100,22,100,6,100,7,132,1,131,1,90,8,101,7,100, + 23,100,8,100,9,132,1,131,1,90,9,101,5,100,10,100, + 11,132,0,131,1,90,10,101,5,100,12,100,13,132,0,131, + 1,90,11,101,7,100,14,100,15,132,0,131,1,90,12,101, + 7,101,13,100,16,100,17,132,0,131,1,131,1,90,14,101, + 7,101,13,100,18,100,19,132,0,131,1,131,1,90,15,101, + 7,101,13,100,20,100,21,132,0,131,1,131,1,90,16,100, + 5,83,0,41,24,218,14,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,122,142,77,101,116,97,32,112,97,116,104, + 32,105,109,112,111,114,116,32,102,111,114,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, + 32,65,108,108,32,109,101,116,104,111,100,115,32,97,114,101, + 32,101,105,116,104,101,114,32,99,108,97,115,115,32,111,114, + 32,115,116,97,116,105,99,32,109,101,116,104,111,100,115,32, + 116,111,32,97,118,111,105,100,32,116,104,101,32,110,101,101, + 100,32,116,111,10,32,32,32,32,105,110,115,116,97,110,116, + 105,97,116,101,32,116,104,101,32,99,108,97,115,115,46,10, + 10,32,32,32,32,90,6,102,114,111,122,101,110,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0, + 0,0,67,0,0,0,115,28,0,0,0,116,0,160,1,100, + 1,116,2,161,2,1,0,100,2,160,3,124,0,106,4,116, + 5,106,6,161,2,83,0,41,4,114,176,0,0,0,122,80, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,109, + 111,100,117,108,101,95,114,101,112,114,40,41,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, + 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, + 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, + 114,166,0,0,0,78,41,7,114,101,0,0,0,114,102,0, + 0,0,114,103,0,0,0,114,50,0,0,0,114,9,0,0, + 0,114,192,0,0,0,114,151,0,0,0,41,1,218,1,109, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 63,0,0,0,123,3,0,0,114,201,0,0,0,122,27,95, - 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, - 116,46,95,95,101,120,105,116,95,95,78,41,6,114,9,0, - 0,0,114,8,0,0,0,114,1,0,0,0,114,10,0,0, - 0,114,61,0,0,0,114,63,0,0,0,114,5,0,0,0, + 114,0,0,0,47,3,0,0,115,10,0,0,0,6,7,2, + 1,4,255,16,2,255,128,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,114, + 101,112,114,78,99,4,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,5,0,0,0,67,0,0,0,115,30,0, + 0,0,116,0,160,1,124,1,161,1,114,13,116,2,124,1, + 124,0,124,0,106,3,100,1,141,3,83,0,100,0,83,0, + 114,178,0,0,0,41,4,114,64,0,0,0,114,98,0,0, + 0,114,104,0,0,0,114,151,0,0,0,114,179,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 199,0,0,0,115,3,0,0,115,10,0,0,0,8,0,4, - 2,8,2,12,4,255,128,114,199,0,0,0,99,3,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,67,0,0,0,115,64,0,0,0,124,1,160,0,100,1, - 124,2,100,2,24,0,161,2,125,3,116,1,124,3,131,1, - 124,2,107,0,114,18,116,2,100,3,131,1,130,1,124,3, - 100,4,25,0,125,4,124,0,114,30,100,5,160,3,124,4, - 124,0,161,2,83,0,124,4,83,0,41,7,122,50,82,101, - 115,111,108,118,101,32,97,32,114,101,108,97,116,105,118,101, - 32,109,111,100,117,108,101,32,110,97,109,101,32,116,111,32, - 97,110,32,97,98,115,111,108,117,116,101,32,111,110,101,46, - 114,141,0,0,0,114,42,0,0,0,122,50,97,116,116,101, - 109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105, - 109,112,111,114,116,32,98,101,121,111,110,100,32,116,111,112, - 45,108,101,118,101,108,32,112,97,99,107,97,103,101,114,25, - 0,0,0,250,5,123,125,46,123,125,78,41,4,218,6,114, - 115,112,108,105,116,218,3,108,101,110,114,87,0,0,0,114, - 50,0,0,0,41,5,114,20,0,0,0,218,7,112,97,99, - 107,97,103,101,218,5,108,101,118,101,108,90,4,98,105,116, - 115,90,4,98,97,115,101,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,218,13,95,114,101,115,111,108,118,101, - 95,110,97,109,101,128,3,0,0,115,12,0,0,0,16,2, - 12,1,8,1,8,1,20,1,255,128,114,210,0,0,0,99, - 3,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,60,0,0,0,116,0,124, - 0,131,1,155,0,100,1,157,2,125,3,116,1,160,2,124, - 3,116,3,161,2,1,0,124,0,160,4,124,1,124,2,161, - 2,125,4,124,4,100,0,117,0,114,25,100,0,83,0,116, - 5,124,1,124,4,131,2,83,0,41,2,78,122,53,46,102, - 105,110,100,95,115,112,101,99,40,41,32,110,111,116,32,102, - 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,116,111,32,102,105,110,100,95,109,111,100,117,108, - 101,40,41,41,6,114,7,0,0,0,114,101,0,0,0,114, - 102,0,0,0,114,169,0,0,0,114,184,0,0,0,114,104, - 0,0,0,41,5,218,6,102,105,110,100,101,114,114,20,0, - 0,0,114,181,0,0,0,114,108,0,0,0,114,122,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,17,95,102,105,110,100,95,115,112,101,99,95,108,101,103, - 97,99,121,137,3,0,0,115,14,0,0,0,14,1,12,2, - 12,1,8,1,4,1,10,1,255,128,114,212,0,0,0,99, - 3,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, - 10,0,0,0,67,0,0,0,115,24,1,0,0,116,0,106, - 1,125,3,124,3,100,1,117,0,114,11,116,2,100,2,131, - 1,130,1,124,3,115,19,116,3,160,4,100,3,116,5,161, - 2,1,0,124,0,116,0,106,6,118,0,125,4,124,3,68, - 0,93,109,125,5,116,7,131,0,143,46,1,0,122,5,124, - 5,106,8,125,6,87,0,110,26,4,0,116,9,121,139,1, - 0,1,0,1,0,116,10,124,5,124,0,124,1,131,3,125, - 7,124,7,100,1,117,0,114,62,89,0,87,0,100,1,4, - 0,4,0,131,3,1,0,113,26,89,0,110,6,124,6,124, - 0,124,1,124,2,131,3,125,7,87,0,100,1,4,0,4, - 0,131,3,1,0,110,8,49,0,115,80,119,1,1,0,1, - 0,1,0,89,0,1,0,124,7,100,1,117,1,114,135,124, - 4,115,131,124,0,116,0,106,6,118,0,114,131,116,0,106, - 6,124,0,25,0,125,8,122,5,124,8,106,11,125,9,87, - 0,110,12,4,0,116,9,121,138,1,0,1,0,1,0,124, - 7,6,0,89,0,2,0,1,0,83,0,124,9,100,1,117, - 0,114,127,124,7,2,0,1,0,83,0,124,9,2,0,1, - 0,83,0,124,7,2,0,1,0,83,0,113,26,100,1,83, - 0,119,0,119,0,41,4,122,21,70,105,110,100,32,97,32, - 109,111,100,117,108,101,39,115,32,115,112,101,99,46,78,122, - 53,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, - 115,32,78,111,110,101,44,32,80,121,116,104,111,110,32,105, - 115,32,108,105,107,101,108,121,32,115,104,117,116,116,105,110, - 103,32,100,111,119,110,122,22,115,121,115,46,109,101,116,97, - 95,112,97,116,104,32,105,115,32,101,109,112,116,121,41,12, - 114,18,0,0,0,218,9,109,101,116,97,95,112,97,116,104, - 114,87,0,0,0,114,101,0,0,0,114,102,0,0,0,114, - 169,0,0,0,114,105,0,0,0,114,199,0,0,0,114,183, - 0,0,0,114,2,0,0,0,114,212,0,0,0,114,113,0, - 0,0,41,10,114,20,0,0,0,114,181,0,0,0,114,182, - 0,0,0,114,213,0,0,0,90,9,105,115,95,114,101,108, - 111,97,100,114,211,0,0,0,114,183,0,0,0,114,109,0, - 0,0,114,110,0,0,0,114,113,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,10,95,102,105, - 110,100,95,115,112,101,99,147,3,0,0,115,66,0,0,0, - 6,2,8,1,8,2,4,3,12,1,10,5,8,1,8,1, - 2,1,10,1,12,1,12,1,8,1,16,1,4,255,12,3, - 30,128,8,1,14,2,10,1,2,1,10,1,12,1,12,4, - 8,2,8,1,8,2,8,2,2,239,4,19,2,243,2,244, - 255,128,114,214,0,0,0,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, - 115,110,0,0,0,116,0,124,0,116,1,131,2,115,14,116, - 2,100,1,160,3,116,4,124,0,131,1,161,1,131,1,130, - 1,124,2,100,2,107,0,114,22,116,5,100,3,131,1,130, - 1,124,2,100,2,107,4,114,41,116,0,124,1,116,1,131, - 2,115,35,116,2,100,4,131,1,130,1,124,1,115,41,116, - 6,100,5,131,1,130,1,124,0,115,53,124,2,100,2,107, - 2,114,51,116,5,100,6,131,1,130,1,100,7,83,0,100, - 7,83,0,41,8,122,28,86,101,114,105,102,121,32,97,114, - 103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,110, - 101,34,46,122,31,109,111,100,117,108,101,32,110,97,109,101, - 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111, - 116,32,123,125,114,25,0,0,0,122,18,108,101,118,101,108, - 32,109,117,115,116,32,98,101,32,62,61,32,48,122,31,95, - 95,112,97,99,107,97,103,101,95,95,32,110,111,116,32,115, - 101,116,32,116,111,32,97,32,115,116,114,105,110,103,122,54, - 97,116,116,101,109,112,116,101,100,32,114,101,108,97,116,105, - 118,101,32,105,109,112,111,114,116,32,119,105,116,104,32,110, - 111,32,107,110,111,119,110,32,112,97,114,101,110,116,32,112, - 97,99,107,97,103,101,122,17,69,109,112,116,121,32,109,111, - 100,117,108,101,32,110,97,109,101,78,41,7,218,10,105,115, - 105,110,115,116,97,110,99,101,218,3,115,116,114,218,9,84, - 121,112,101,69,114,114,111,114,114,50,0,0,0,114,3,0, - 0,0,218,10,86,97,108,117,101,69,114,114,111,114,114,87, - 0,0,0,169,3,114,20,0,0,0,114,208,0,0,0,114, - 209,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,218,13,95,115,97,110,105,116,121,95,99,104,101, - 99,107,194,3,0,0,115,26,0,0,0,10,2,18,1,8, - 1,8,1,8,1,10,1,8,1,4,1,8,1,12,2,8, - 1,8,255,255,128,114,220,0,0,0,122,16,78,111,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,122,4,123,33, - 114,125,99,2,0,0,0,0,0,0,0,0,0,0,0,9, - 0,0,0,8,0,0,0,67,0,0,0,115,16,1,0,0, - 100,0,125,2,124,0,160,0,100,1,161,1,100,2,25,0, - 125,3,124,3,114,63,124,3,116,1,106,2,118,1,114,21, - 116,3,124,1,124,3,131,2,1,0,124,0,116,1,106,2, - 118,0,114,31,116,1,106,2,124,0,25,0,83,0,116,1, - 106,2,124,3,25,0,125,4,122,5,124,4,106,4,125,2, - 87,0,110,21,4,0,116,5,121,135,1,0,1,0,1,0, - 116,6,100,3,23,0,160,7,124,0,124,3,161,2,125,5, - 116,8,124,5,124,0,100,4,141,2,100,0,130,2,116,9, - 124,0,124,2,131,2,125,6,124,6,100,0,117,0,114,81, - 116,8,116,6,160,7,124,0,161,1,124,0,100,4,141,2, - 130,1,116,10,124,6,131,1,125,7,124,3,114,132,116,1, - 106,2,124,3,25,0,125,4,124,0,160,0,100,1,161,1, - 100,5,25,0,125,8,122,9,116,11,124,4,124,8,124,7, - 131,3,1,0,87,0,124,7,83,0,4,0,116,5,121,134, - 1,0,1,0,1,0,100,6,124,3,155,2,100,7,124,8, - 155,2,157,4,125,5,116,12,160,13,124,5,116,14,161,2, - 1,0,89,0,124,7,83,0,124,7,83,0,119,0,119,0, - 41,8,78,114,141,0,0,0,114,25,0,0,0,122,23,59, - 32,123,33,114,125,32,105,115,32,110,111,116,32,97,32,112, - 97,99,107,97,103,101,114,19,0,0,0,233,2,0,0,0, - 122,27,67,97,110,110,111,116,32,115,101,116,32,97,110,32, - 97,116,116,114,105,98,117,116,101,32,111,110,32,122,18,32, - 102,111,114,32,99,104,105,108,100,32,109,111,100,117,108,101, - 32,41,15,114,142,0,0,0,114,18,0,0,0,114,105,0, - 0,0,114,74,0,0,0,114,154,0,0,0,114,2,0,0, - 0,218,8,95,69,82,82,95,77,83,71,114,50,0,0,0, - 218,19,77,111,100,117,108,101,78,111,116,70,111,117,110,100, - 69,114,114,111,114,114,214,0,0,0,114,173,0,0,0,114, - 12,0,0,0,114,101,0,0,0,114,102,0,0,0,114,169, - 0,0,0,41,9,114,20,0,0,0,218,7,105,109,112,111, - 114,116,95,114,181,0,0,0,114,143,0,0,0,90,13,112, - 97,114,101,110,116,95,109,111,100,117,108,101,114,108,0,0, - 0,114,109,0,0,0,114,110,0,0,0,90,5,99,104,105, - 108,100,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,23,95,102,105,110,100,95,97,110,100,95,108,111,97, - 100,95,117,110,108,111,99,107,101,100,213,3,0,0,115,60, - 0,0,0,4,1,14,1,4,1,10,1,10,1,10,2,10, - 1,10,1,2,1,10,1,12,1,16,1,14,1,10,1,8, - 1,18,1,8,2,4,1,10,2,14,1,2,1,14,1,4, - 4,12,253,16,1,14,1,8,1,2,253,2,242,255,128,114, - 225,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,8,0,0,0,67,0,0,0,115,128,0, - 0,0,116,0,124,0,131,1,143,31,1,0,116,1,106,2, - 160,3,124,0,116,4,161,2,125,2,124,2,116,4,117,0, - 114,28,116,5,124,0,124,1,131,2,87,0,2,0,100,1, - 4,0,4,0,131,3,1,0,83,0,87,0,100,1,4,0, - 4,0,131,3,1,0,110,8,49,0,115,38,119,1,1,0, - 1,0,1,0,89,0,1,0,124,2,100,1,117,0,114,58, - 100,2,160,6,124,0,161,1,125,3,116,7,124,3,124,0, - 100,3,141,2,130,1,116,8,124,0,131,1,1,0,124,2, - 83,0,41,4,122,25,70,105,110,100,32,97,110,100,32,108, - 111,97,100,32,116,104,101,32,109,111,100,117,108,101,46,78, - 122,40,105,109,112,111,114,116,32,111,102,32,123,125,32,104, - 97,108,116,101,100,59,32,78,111,110,101,32,105,110,32,115, - 121,115,46,109,111,100,117,108,101,115,114,19,0,0,0,41, - 9,114,57,0,0,0,114,18,0,0,0,114,105,0,0,0, - 114,38,0,0,0,218,14,95,78,69,69,68,83,95,76,79, - 65,68,73,78,71,114,225,0,0,0,114,50,0,0,0,114, - 223,0,0,0,114,72,0,0,0,41,4,114,20,0,0,0, - 114,224,0,0,0,114,110,0,0,0,114,82,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,14, - 95,102,105,110,100,95,97,110,100,95,108,111,97,100,248,3, - 0,0,115,28,0,0,0,10,2,14,1,8,1,24,1,14, - 255,16,128,8,3,2,1,6,1,2,255,12,2,8,2,4, - 1,255,128,114,227,0,0,0,114,25,0,0,0,99,3,0, + 183,0,0,0,58,3,0,0,115,8,0,0,0,10,2,16, + 1,4,2,255,128,122,24,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,99, + 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,30,0,0,0,116,0,160, + 1,100,1,116,2,161,2,1,0,116,3,160,4,124,1,161, + 1,114,13,124,0,83,0,100,2,83,0,41,3,122,93,70, + 105,110,100,32,97,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,122,105,70,114, + 111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,40,41,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, + 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, + 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, + 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,78,41,5,114,101,0,0,0,114, + 102,0,0,0,114,103,0,0,0,114,64,0,0,0,114,98, + 0,0,0,41,3,114,180,0,0,0,114,89,0,0,0,114, + 181,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,184,0,0,0,65,3,0,0,115,10,0,0, + 0,6,7,2,2,4,254,18,3,255,128,122,26,70,114,111, + 122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100, + 95,109,111,100,117,108,101,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,67,0,0,0, + 114,185,0,0,0,41,2,122,42,85,115,101,32,100,101,102, + 97,117,108,116,32,115,101,109,97,110,116,105,99,115,32,102, + 111,114,32,109,111,100,117,108,101,32,99,114,101,97,116,105, + 111,110,46,78,114,5,0,0,0,114,174,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,162,0, + 0,0,77,3,0,0,115,4,0,0,0,4,0,255,128,122, + 28,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,42,0,0,0,116,0,124,0,124, - 1,124,2,131,3,1,0,124,2,100,1,107,4,114,16,116, - 1,124,0,124,1,124,2,131,3,125,0,116,2,124,0,116, - 3,131,2,83,0,41,3,97,50,1,0,0,73,109,112,111, - 114,116,32,97,110,100,32,114,101,116,117,114,110,32,116,104, - 101,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, - 110,32,105,116,115,32,110,97,109,101,44,32,116,104,101,32, - 112,97,99,107,97,103,101,32,116,104,101,32,99,97,108,108, - 32,105,115,10,32,32,32,32,98,101,105,110,103,32,109,97, - 100,101,32,102,114,111,109,44,32,97,110,100,32,116,104,101, - 32,108,101,118,101,108,32,97,100,106,117,115,116,109,101,110, - 116,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, - 99,116,105,111,110,32,114,101,112,114,101,115,101,110,116,115, - 32,116,104,101,32,103,114,101,97,116,101,115,116,32,99,111, - 109,109,111,110,32,100,101,110,111,109,105,110,97,116,111,114, - 32,111,102,32,102,117,110,99,116,105,111,110,97,108,105,116, - 121,10,32,32,32,32,98,101,116,119,101,101,110,32,105,109, - 112,111,114,116,95,109,111,100,117,108,101,32,97,110,100,32, - 95,95,105,109,112,111,114,116,95,95,46,32,84,104,105,115, - 32,105,110,99,108,117,100,101,115,32,115,101,116,116,105,110, - 103,32,95,95,112,97,99,107,97,103,101,95,95,32,105,102, - 10,32,32,32,32,116,104,101,32,108,111,97,100,101,114,32, - 100,105,100,32,110,111,116,46,10,10,32,32,32,32,114,25, - 0,0,0,78,41,4,114,220,0,0,0,114,210,0,0,0, - 114,227,0,0,0,218,11,95,103,99,100,95,105,109,112,111, - 114,116,114,219,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,228,0,0,0,8,4,0,0,115, - 10,0,0,0,12,9,8,1,12,1,10,1,255,128,114,228, - 0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,101, - 99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,0, - 0,11,0,0,0,67,0,0,0,115,218,0,0,0,124,1, - 68,0,93,103,125,4,116,0,124,4,116,1,131,2,115,32, - 124,3,114,17,124,0,106,2,100,1,23,0,125,5,110,2, - 100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,4, - 124,4,131,1,106,2,155,0,157,4,131,1,130,1,124,4, - 100,5,107,2,114,53,124,3,115,52,116,5,124,0,100,6, - 131,2,114,52,116,6,124,0,124,0,106,7,124,2,100,7, - 100,8,141,4,1,0,113,2,116,5,124,0,124,4,131,2, - 115,105,100,9,160,8,124,0,106,2,124,4,161,2,125,6, - 122,7,116,9,124,2,124,6,131,2,1,0,87,0,113,2, - 4,0,116,10,121,108,1,0,125,7,1,0,122,21,124,7, - 106,11,124,6,107,2,114,100,116,12,106,13,160,14,124,6, - 116,15,161,2,100,10,117,1,114,100,87,0,89,0,100,10, - 125,7,126,7,113,2,130,0,100,10,125,7,126,7,119,1, - 113,2,124,0,83,0,119,0,41,11,122,238,70,105,103,117, - 114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,109, - 112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,101, - 116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,105, - 109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,114, - 32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,119, - 104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,110, - 97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,111, - 10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,32, - 105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,100, - 101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,99, - 116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,105, - 110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,32, - 32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,105, - 114,101,100,46,10,10,32,32,32,32,122,8,46,95,95,97, - 108,108,95,95,122,13,96,96,102,114,111,109,32,108,105,115, - 116,39,39,122,8,73,116,101,109,32,105,110,32,122,18,32, - 109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,116, - 32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,229, - 0,0,0,114,205,0,0,0,78,41,16,114,215,0,0,0, - 114,216,0,0,0,114,9,0,0,0,114,217,0,0,0,114, - 3,0,0,0,114,11,0,0,0,218,16,95,104,97,110,100, - 108,101,95,102,114,111,109,108,105,115,116,114,232,0,0,0, - 114,50,0,0,0,114,74,0,0,0,114,223,0,0,0,114, - 20,0,0,0,114,18,0,0,0,114,105,0,0,0,114,38, - 0,0,0,114,226,0,0,0,41,8,114,110,0,0,0,218, - 8,102,114,111,109,108,105,115,116,114,224,0,0,0,114,230, - 0,0,0,218,1,120,90,5,119,104,101,114,101,90,9,102, - 114,111,109,95,110,97,109,101,90,3,101,120,99,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,233,0,0, - 0,23,4,0,0,115,58,0,0,0,8,10,10,1,4,1, - 12,1,4,2,10,1,8,1,8,255,8,2,14,1,10,1, - 2,1,6,255,2,128,10,2,14,1,2,1,14,1,14,1, - 10,4,16,1,2,255,12,2,2,1,8,128,2,245,4,12, - 2,248,255,128,114,233,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,6,0,0,0,67,0, - 0,0,115,146,0,0,0,124,0,160,0,100,1,161,1,125, - 1,124,0,160,0,100,2,161,1,125,2,124,1,100,3,117, - 1,114,41,124,2,100,3,117,1,114,39,124,1,124,2,106, - 1,107,3,114,39,116,2,106,3,100,4,124,1,155,2,100, - 5,124,2,106,1,155,2,100,6,157,5,116,4,100,7,100, - 8,141,3,1,0,124,1,83,0,124,2,100,3,117,1,114, - 48,124,2,106,1,83,0,116,2,106,3,100,9,116,4,100, - 7,100,8,141,3,1,0,124,0,100,10,25,0,125,1,100, - 11,124,0,118,1,114,71,124,1,160,5,100,12,161,1,100, - 13,25,0,125,1,124,1,83,0,41,14,122,167,67,97,108, - 99,117,108,97,116,101,32,119,104,97,116,32,95,95,112,97, - 99,107,97,103,101,95,95,32,115,104,111,117,108,100,32,98, - 101,46,10,10,32,32,32,32,95,95,112,97,99,107,97,103, - 101,95,95,32,105,115,32,110,111,116,32,103,117,97,114,97, - 110,116,101,101,100,32,116,111,32,98,101,32,100,101,102,105, - 110,101,100,32,111,114,32,99,111,117,108,100,32,98,101,32, - 115,101,116,32,116,111,32,78,111,110,101,10,32,32,32,32, - 116,111,32,114,101,112,114,101,115,101,110,116,32,116,104,97, - 116,32,105,116,115,32,112,114,111,112,101,114,32,118,97,108, - 117,101,32,105,115,32,117,110,107,110,111,119,110,46,10,10, - 32,32,32,32,114,158,0,0,0,114,113,0,0,0,78,122, - 32,95,95,112,97,99,107,97,103,101,95,95,32,33,61,32, - 95,95,115,112,101,99,95,95,46,112,97,114,101,110,116,32, - 40,122,4,32,33,61,32,250,1,41,233,3,0,0,0,41, - 1,90,10,115,116,97,99,107,108,101,118,101,108,122,89,99, - 97,110,39,116,32,114,101,115,111,108,118,101,32,112,97,99, - 107,97,103,101,32,102,114,111,109,32,95,95,115,112,101,99, - 95,95,32,111,114,32,95,95,112,97,99,107,97,103,101,95, - 95,44,32,102,97,108,108,105,110,103,32,98,97,99,107,32, - 111,110,32,95,95,110,97,109,101,95,95,32,97,110,100,32, - 95,95,112,97,116,104,95,95,114,9,0,0,0,114,154,0, - 0,0,114,141,0,0,0,114,25,0,0,0,41,6,114,38, - 0,0,0,114,143,0,0,0,114,101,0,0,0,114,102,0, - 0,0,114,169,0,0,0,114,142,0,0,0,41,3,218,7, - 103,108,111,98,97,108,115,114,208,0,0,0,114,109,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, - 101,95,95,60,4,0,0,115,44,0,0,0,10,7,10,1, - 8,1,18,1,6,1,2,1,4,255,4,1,6,255,4,2, - 6,254,4,3,8,1,6,1,6,2,4,2,6,254,8,3, - 8,1,14,1,4,1,255,128,114,239,0,0,0,114,5,0, - 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,9, - 0,0,0,5,0,0,0,67,0,0,0,115,174,0,0,0, - 124,4,100,1,107,2,114,9,116,0,124,0,131,1,125,5, - 110,18,124,1,100,2,117,1,114,15,124,1,110,1,105,0, - 125,6,116,1,124,6,131,1,125,7,116,0,124,0,124,7, - 124,4,131,3,125,5,124,3,115,74,124,4,100,1,107,2, - 114,42,116,0,124,0,160,2,100,3,161,1,100,1,25,0, - 131,1,83,0,124,0,115,46,124,5,83,0,116,3,124,0, - 131,1,116,3,124,0,160,2,100,3,161,1,100,1,25,0, - 131,1,24,0,125,8,116,4,106,5,124,5,106,6,100,2, - 116,3,124,5,106,6,131,1,124,8,24,0,133,2,25,0, - 25,0,83,0,116,7,124,5,100,4,131,2,114,85,116,8, - 124,5,124,3,116,0,131,3,83,0,124,5,83,0,41,5, - 97,215,1,0,0,73,109,112,111,114,116,32,97,32,109,111, - 100,117,108,101,46,10,10,32,32,32,32,84,104,101,32,39, - 103,108,111,98,97,108,115,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,117,115,101,100,32,116,111,32,105,110,102, - 101,114,32,119,104,101,114,101,32,116,104,101,32,105,109,112, - 111,114,116,32,105,115,32,111,99,99,117,114,114,105,110,103, - 32,102,114,111,109,10,32,32,32,32,116,111,32,104,97,110, - 100,108,101,32,114,101,108,97,116,105,118,101,32,105,109,112, - 111,114,116,115,46,32,84,104,101,32,39,108,111,99,97,108, - 115,39,32,97,114,103,117,109,101,110,116,32,105,115,32,105, - 103,110,111,114,101,100,46,32,84,104,101,10,32,32,32,32, - 39,102,114,111,109,108,105,115,116,39,32,97,114,103,117,109, - 101,110,116,32,115,112,101,99,105,102,105,101,115,32,119,104, - 97,116,32,115,104,111,117,108,100,32,101,120,105,115,116,32, - 97,115,32,97,116,116,114,105,98,117,116,101,115,32,111,110, - 32,116,104,101,32,109,111,100,117,108,101,10,32,32,32,32, - 98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,40, - 101,46,103,46,32,96,96,102,114,111,109,32,109,111,100,117, - 108,101,32,105,109,112,111,114,116,32,60,102,114,111,109,108, - 105,115,116,62,96,96,41,46,32,32,84,104,101,32,39,108, - 101,118,101,108,39,10,32,32,32,32,97,114,103,117,109,101, - 110,116,32,114,101,112,114,101,115,101,110,116,115,32,116,104, - 101,32,112,97,99,107,97,103,101,32,108,111,99,97,116,105, - 111,110,32,116,111,32,105,109,112,111,114,116,32,102,114,111, - 109,32,105,110,32,97,32,114,101,108,97,116,105,118,101,10, - 32,32,32,32,105,109,112,111,114,116,32,40,101,46,103,46, - 32,96,96,102,114,111,109,32,46,46,112,107,103,32,105,109, - 112,111,114,116,32,109,111,100,96,96,32,119,111,117,108,100, - 32,104,97,118,101,32,97,32,39,108,101,118,101,108,39,32, - 111,102,32,50,41,46,10,10,32,32,32,32,114,25,0,0, - 0,78,114,141,0,0,0,114,154,0,0,0,41,9,114,228, - 0,0,0,114,239,0,0,0,218,9,112,97,114,116,105,116, - 105,111,110,114,207,0,0,0,114,18,0,0,0,114,105,0, - 0,0,114,9,0,0,0,114,11,0,0,0,114,233,0,0, - 0,41,9,114,20,0,0,0,114,238,0,0,0,218,6,108, - 111,99,97,108,115,114,234,0,0,0,114,209,0,0,0,114, - 110,0,0,0,90,8,103,108,111,98,97,108,115,95,114,208, - 0,0,0,90,7,99,117,116,95,111,102,102,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,10,95,95,105, - 109,112,111,114,116,95,95,87,4,0,0,115,32,0,0,0, - 8,11,10,1,16,2,8,1,12,1,4,1,8,3,18,1, - 4,1,4,1,26,4,30,3,10,1,12,1,4,2,255,128, - 114,242,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,38, - 0,0,0,116,0,160,1,124,0,161,1,125,1,124,1,100, - 0,117,0,114,15,116,2,100,1,124,0,23,0,131,1,130, - 1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,111, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 32,110,97,109,101,100,32,41,4,114,175,0,0,0,114,183, - 0,0,0,114,87,0,0,0,114,173,0,0,0,41,2,114, - 20,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, - 105,110,95,102,114,111,109,95,110,97,109,101,124,4,0,0, - 115,10,0,0,0,10,1,8,1,12,1,8,1,255,128,114, - 243,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,10,0,0,0,5,0,0,0,67,0,0,0,115,166,0, - 0,0,124,1,97,0,124,0,97,1,116,2,116,1,131,1, - 125,2,116,1,106,3,160,4,161,0,68,0,93,36,92,2, - 125,3,125,4,116,5,124,4,124,2,131,2,114,49,124,3, - 116,1,106,6,118,0,114,30,116,7,125,5,110,9,116,0, - 160,8,124,3,161,1,114,38,116,9,125,5,110,1,113,13, - 116,10,124,4,124,5,131,2,125,6,116,11,124,6,124,4, - 131,2,1,0,113,13,116,1,106,3,116,12,25,0,125,7, - 100,1,68,0,93,23,125,8,124,8,116,1,106,3,118,1, - 114,69,116,13,124,8,131,1,125,9,110,5,116,1,106,3, - 124,8,25,0,125,9,116,14,124,7,124,8,124,9,131,3, - 1,0,113,57,100,2,83,0,41,3,122,250,83,101,116,117, - 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, - 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, - 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105, - 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115, - 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32, - 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100, - 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116, - 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44, - 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108, - 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105, - 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46, - 10,10,32,32,32,32,41,3,114,26,0,0,0,114,101,0, - 0,0,114,71,0,0,0,78,41,15,114,64,0,0,0,114, - 18,0,0,0,114,3,0,0,0,114,105,0,0,0,218,5, - 105,116,101,109,115,114,215,0,0,0,114,86,0,0,0,114, - 175,0,0,0,114,98,0,0,0,114,192,0,0,0,114,155, - 0,0,0,114,161,0,0,0,114,9,0,0,0,114,243,0, - 0,0,114,12,0,0,0,41,10,218,10,115,121,115,95,109, - 111,100,117,108,101,218,11,95,105,109,112,95,109,111,100,117, - 108,101,90,11,109,111,100,117,108,101,95,116,121,112,101,114, - 20,0,0,0,114,110,0,0,0,114,122,0,0,0,114,109, - 0,0,0,90,11,115,101,108,102,95,109,111,100,117,108,101, - 90,12,98,117,105,108,116,105,110,95,110,97,109,101,90,14, - 98,117,105,108,116,105,110,95,109,111,100,117,108,101,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,6,95, - 115,101,116,117,112,131,4,0,0,115,42,0,0,0,4,9, - 4,1,8,3,18,1,10,1,10,1,6,1,10,1,6,1, - 2,2,10,1,10,1,2,128,10,3,8,1,10,1,10,1, - 10,2,14,1,4,251,255,128,114,247,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,38,0,0,0,116,0,124,0,124, - 1,131,2,1,0,116,1,106,2,160,3,116,4,161,1,1, - 0,116,1,106,2,160,3,116,5,161,1,1,0,100,1,83, - 0,41,2,122,48,73,110,115,116,97,108,108,32,105,109,112, - 111,114,116,101,114,115,32,102,111,114,32,98,117,105,108,116, - 105,110,32,97,110,100,32,102,114,111,122,101,110,32,109,111, - 100,117,108,101,115,78,41,6,114,247,0,0,0,114,18,0, - 0,0,114,213,0,0,0,114,132,0,0,0,114,175,0,0, - 0,114,192,0,0,0,41,2,114,245,0,0,0,114,246,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,8,95,105,110,115,116,97,108,108,166,4,0,0,115, - 8,0,0,0,10,2,12,2,16,1,255,128,114,248,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,67,0,0,0,115,32,0,0,0,100, - 1,100,2,108,0,125,0,124,0,97,1,124,0,160,2,116, - 3,106,4,116,5,25,0,161,1,1,0,100,2,83,0,41, - 3,122,57,73,110,115,116,97,108,108,32,105,109,112,111,114, - 116,101,114,115,32,116,104,97,116,32,114,101,113,117,105,114, - 101,32,101,120,116,101,114,110,97,108,32,102,105,108,101,115, - 121,115,116,101,109,32,97,99,99,101,115,115,114,25,0,0, - 0,78,41,6,218,26,95,102,114,111,122,101,110,95,105,109, - 112,111,114,116,108,105,98,95,101,120,116,101,114,110,97,108, - 114,139,0,0,0,114,248,0,0,0,114,18,0,0,0,114, - 105,0,0,0,114,9,0,0,0,41,1,114,249,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 27,95,105,110,115,116,97,108,108,95,101,120,116,101,114,110, - 97,108,95,105,109,112,111,114,116,101,114,115,174,4,0,0, - 115,8,0,0,0,8,3,4,1,20,1,255,128,114,250,0, - 0,0,41,2,78,78,41,1,78,41,2,78,114,25,0,0, - 0,41,4,78,78,114,5,0,0,0,114,25,0,0,0,41, - 54,114,10,0,0,0,114,7,0,0,0,114,26,0,0,0, - 114,101,0,0,0,114,71,0,0,0,114,139,0,0,0,114, - 17,0,0,0,114,21,0,0,0,114,66,0,0,0,114,37, - 0,0,0,114,47,0,0,0,114,22,0,0,0,114,23,0, - 0,0,114,55,0,0,0,114,57,0,0,0,114,60,0,0, - 0,114,72,0,0,0,114,74,0,0,0,114,83,0,0,0, - 114,95,0,0,0,114,100,0,0,0,114,111,0,0,0,114, - 124,0,0,0,114,125,0,0,0,114,104,0,0,0,114,155, - 0,0,0,114,161,0,0,0,114,165,0,0,0,114,119,0, - 0,0,114,106,0,0,0,114,172,0,0,0,114,173,0,0, - 0,114,107,0,0,0,114,175,0,0,0,114,192,0,0,0, - 114,199,0,0,0,114,210,0,0,0,114,212,0,0,0,114, - 214,0,0,0,114,220,0,0,0,90,15,95,69,82,82,95, - 77,83,71,95,80,82,69,70,73,88,114,222,0,0,0,114, - 225,0,0,0,218,6,111,98,106,101,99,116,114,226,0,0, - 0,114,227,0,0,0,114,228,0,0,0,114,233,0,0,0, - 114,239,0,0,0,114,242,0,0,0,114,243,0,0,0,114, - 247,0,0,0,114,248,0,0,0,114,250,0,0,0,114,5, + 0,0,67,0,0,0,115,64,0,0,0,124,0,106,0,106, + 1,125,1,116,2,160,3,124,1,161,1,115,18,116,4,100, + 1,160,5,124,1,161,1,124,1,100,2,141,2,130,1,116, + 6,116,2,106,7,124,1,131,2,125,2,116,8,124,2,124, + 0,106,9,131,2,1,0,100,0,83,0,114,97,0,0,0, + 41,10,114,113,0,0,0,114,20,0,0,0,114,64,0,0, + 0,114,98,0,0,0,114,87,0,0,0,114,50,0,0,0, + 114,74,0,0,0,218,17,103,101,116,95,102,114,111,122,101, + 110,95,111,98,106,101,99,116,218,4,101,120,101,99,114,14, + 0,0,0,41,3,114,110,0,0,0,114,20,0,0,0,218, + 4,99,111,100,101,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,163,0,0,0,81,3,0,0,115,16,0, + 0,0,8,2,10,1,10,1,2,1,6,255,12,2,16,1, + 255,128,122,26,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,0, + 124,1,131,2,83,0,41,2,122,95,76,111,97,100,32,97, + 32,102,114,111,122,101,110,32,109,111,100,117,108,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, + 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,1,114,111,0,0, + 0,114,186,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,170,0,0,0,90,3,0,0,115,4, + 0,0,0,10,8,255,128,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,243,10,0,0, + 0,116,0,160,1,124,1,161,1,83,0,41,2,122,45,82, + 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, + 98,106,101,99,116,32,102,111,114,32,116,104,101,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,46,78,41,2,114, + 64,0,0,0,114,194,0,0,0,114,186,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,187,0, + 0,0,100,3,0,0,243,4,0,0,0,10,4,255,128,122, + 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,114,185,0,0,0,41,2,122,54,82,101,116,117,114,110, + 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, + 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, + 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 78,114,5,0,0,0,114,186,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,189,0,0,0,106, + 3,0,0,114,188,0,0,0,122,25,70,114,111,122,101,110, + 73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,117, + 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,114,197,0,0, + 0,41,2,122,46,82,101,116,117,114,110,32,84,114,117,101, + 32,105,102,32,116,104,101,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,46,78,41,2,114,64,0,0,0,90,17,105,115,95, + 102,114,111,122,101,110,95,112,97,99,107,97,103,101,114,186, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, - 115,106,0,0,0,4,0,8,22,4,9,4,1,4,1,4, - 3,8,3,8,8,4,8,4,2,16,3,14,4,14,77,14, - 21,8,16,8,37,8,17,14,11,8,8,8,11,8,12,8, - 19,14,26,16,101,10,26,14,45,8,72,8,17,8,17,8, - 30,8,36,8,45,14,15,14,77,14,82,8,13,8,9,10, - 10,8,47,4,16,8,1,8,2,6,32,8,3,10,16,14, - 15,8,37,10,27,8,37,8,7,8,35,12,8,255,128, + 0,0,114,128,0,0,0,112,3,0,0,114,198,0,0,0, + 122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,105,115,95,112,97,99,107,97,103,101,41,2,78,78,41, + 1,78,41,17,114,9,0,0,0,114,8,0,0,0,114,1, + 0,0,0,114,10,0,0,0,114,151,0,0,0,114,190,0, + 0,0,114,114,0,0,0,114,191,0,0,0,114,183,0,0, + 0,114,184,0,0,0,114,162,0,0,0,114,163,0,0,0, + 114,170,0,0,0,114,100,0,0,0,114,187,0,0,0,114, + 189,0,0,0,114,128,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,192,0, + 0,0,36,3,0,0,115,50,0,0,0,8,0,4,2,4, + 7,2,2,10,1,2,10,12,1,2,6,12,1,2,11,10, + 1,2,3,10,1,2,8,10,1,2,9,2,1,12,1,2, + 4,2,1,12,1,2,4,2,1,16,1,255,128,114,192,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,64,0,0,0,115,32,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,83,0, + 41,7,218,18,95,73,109,112,111,114,116,76,111,99,107,67, + 111,110,116,101,120,116,122,36,67,111,110,116,101,120,116,32, + 109,97,110,97,103,101,114,32,102,111,114,32,116,104,101,32, + 105,109,112,111,114,116,32,108,111,99,107,46,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,243,12,0,0,0,116,0,160,1,161,0, + 1,0,100,1,83,0,41,2,122,24,65,99,113,117,105,114, + 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, + 107,46,78,41,2,114,64,0,0,0,114,65,0,0,0,114, + 52,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,61,0,0,0,125,3,0,0,243,4,0,0, + 0,12,2,255,128,122,28,95,73,109,112,111,114,116,76,111, + 99,107,67,111,110,116,101,120,116,46,95,95,101,110,116,101, + 114,95,95,99,4,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,2,0,0,0,67,0,0,0,114,200,0,0, + 0,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, + 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, + 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, + 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, + 46,78,41,2,114,64,0,0,0,114,67,0,0,0,41,4, + 114,33,0,0,0,218,8,101,120,99,95,116,121,112,101,218, + 9,101,120,99,95,118,97,108,117,101,218,13,101,120,99,95, + 116,114,97,99,101,98,97,99,107,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,63,0,0,0,129,3,0, + 0,114,201,0,0,0,122,27,95,73,109,112,111,114,116,76, + 111,99,107,67,111,110,116,101,120,116,46,95,95,101,120,105, + 116,95,95,78,41,6,114,9,0,0,0,114,8,0,0,0, + 114,1,0,0,0,114,10,0,0,0,114,61,0,0,0,114, + 63,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,199,0,0,0,121,3,0, + 0,115,10,0,0,0,8,0,4,2,8,2,12,4,255,128, + 114,199,0,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,64, + 0,0,0,124,1,160,0,100,1,124,2,100,2,24,0,161, + 2,125,3,116,1,124,3,131,1,124,2,107,0,114,18,116, + 2,100,3,131,1,130,1,124,3,100,4,25,0,125,4,124, + 0,114,30,100,5,160,3,124,4,124,0,161,2,83,0,124, + 4,83,0,41,7,122,50,82,101,115,111,108,118,101,32,97, + 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, + 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, + 108,117,116,101,32,111,110,101,46,114,141,0,0,0,114,42, + 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98, + 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32, + 112,97,99,107,97,103,101,114,25,0,0,0,250,5,123,125, + 46,123,125,78,41,4,218,6,114,115,112,108,105,116,218,3, + 108,101,110,114,87,0,0,0,114,50,0,0,0,41,5,114, + 20,0,0,0,218,7,112,97,99,107,97,103,101,218,5,108, + 101,118,101,108,90,4,98,105,116,115,90,4,98,97,115,101, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 13,95,114,101,115,111,108,118,101,95,110,97,109,101,134,3, + 0,0,115,12,0,0,0,16,2,12,1,8,1,8,1,20, + 1,255,128,114,210,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,60,0,0,0,116,0,124,0,131,1,155,0,100,1, + 157,2,125,3,116,1,160,2,124,3,116,3,161,2,1,0, + 124,0,160,4,124,1,124,2,161,2,125,4,124,4,100,0, + 117,0,114,25,100,0,83,0,116,5,124,1,124,4,131,2, + 83,0,41,2,78,122,53,46,102,105,110,100,95,115,112,101, + 99,40,41,32,110,111,116,32,102,111,117,110,100,59,32,102, + 97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,102, + 105,110,100,95,109,111,100,117,108,101,40,41,41,6,114,7, + 0,0,0,114,101,0,0,0,114,102,0,0,0,114,169,0, + 0,0,114,184,0,0,0,114,104,0,0,0,41,5,218,6, + 102,105,110,100,101,114,114,20,0,0,0,114,181,0,0,0, + 114,108,0,0,0,114,122,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, + 95,115,112,101,99,95,108,101,103,97,99,121,143,3,0,0, + 115,14,0,0,0,14,1,12,2,12,1,8,1,4,1,10, + 1,255,128,114,212,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,10,0,0,0,10,0,0,0,67,0,0, + 0,115,24,1,0,0,116,0,106,1,125,3,124,3,100,1, + 117,0,114,11,116,2,100,2,131,1,130,1,124,3,115,19, + 116,3,160,4,100,3,116,5,161,2,1,0,124,0,116,0, + 106,6,118,0,125,4,124,3,68,0,93,109,125,5,116,7, + 131,0,143,46,1,0,122,5,124,5,106,8,125,6,87,0, + 110,26,4,0,116,9,121,139,1,0,1,0,1,0,116,10, + 124,5,124,0,124,1,131,3,125,7,124,7,100,1,117,0, + 114,62,89,0,87,0,100,1,4,0,4,0,131,3,1,0, + 113,26,89,0,110,6,124,6,124,0,124,1,124,2,131,3, + 125,7,87,0,100,1,4,0,4,0,131,3,1,0,110,8, + 49,0,115,80,119,1,1,0,1,0,1,0,89,0,1,0, + 124,7,100,1,117,1,114,135,124,4,115,131,124,0,116,0, + 106,6,118,0,114,131,116,0,106,6,124,0,25,0,125,8, + 122,5,124,8,106,11,125,9,87,0,110,12,4,0,116,9, + 121,138,1,0,1,0,1,0,124,7,6,0,89,0,2,0, + 1,0,83,0,124,9,100,1,117,0,114,127,124,7,2,0, + 1,0,83,0,124,9,2,0,1,0,83,0,124,7,2,0, + 1,0,83,0,113,26,100,1,83,0,119,0,119,0,41,4, + 122,21,70,105,110,100,32,97,32,109,111,100,117,108,101,39, + 115,32,115,112,101,99,46,78,122,53,115,121,115,46,109,101, + 116,97,95,112,97,116,104,32,105,115,32,78,111,110,101,44, + 32,80,121,116,104,111,110,32,105,115,32,108,105,107,101,108, + 121,32,115,104,117,116,116,105,110,103,32,100,111,119,110,122, + 22,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, + 115,32,101,109,112,116,121,41,12,114,18,0,0,0,218,9, + 109,101,116,97,95,112,97,116,104,114,87,0,0,0,114,101, + 0,0,0,114,102,0,0,0,114,169,0,0,0,114,105,0, + 0,0,114,199,0,0,0,114,183,0,0,0,114,2,0,0, + 0,114,212,0,0,0,114,113,0,0,0,41,10,114,20,0, + 0,0,114,181,0,0,0,114,182,0,0,0,114,213,0,0, + 0,90,9,105,115,95,114,101,108,111,97,100,114,211,0,0, + 0,114,183,0,0,0,114,109,0,0,0,114,110,0,0,0, + 114,113,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,10,95,102,105,110,100,95,115,112,101,99, + 153,3,0,0,115,66,0,0,0,6,2,8,1,8,2,4, + 3,12,1,10,5,8,1,8,1,2,1,10,1,12,1,12, + 1,8,1,16,1,4,255,12,3,30,128,8,1,14,2,10, + 1,2,1,10,1,12,1,12,4,8,2,8,1,8,2,8, + 2,2,239,4,19,2,243,2,244,255,128,114,214,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,5,0,0,0,67,0,0,0,115,110,0,0,0,116,0, + 124,0,116,1,131,2,115,14,116,2,100,1,160,3,116,4, + 124,0,131,1,161,1,131,1,130,1,124,2,100,2,107,0, + 114,22,116,5,100,3,131,1,130,1,124,2,100,2,107,4, + 114,41,116,0,124,1,116,1,131,2,115,35,116,2,100,4, + 131,1,130,1,124,1,115,41,116,6,100,5,131,1,130,1, + 124,0,115,53,124,2,100,2,107,2,114,51,116,5,100,6, + 131,1,130,1,100,7,83,0,100,7,83,0,41,8,122,28, + 86,101,114,105,102,121,32,97,114,103,117,109,101,110,116,115, + 32,97,114,101,32,34,115,97,110,101,34,46,122,31,109,111, + 100,117,108,101,32,110,97,109,101,32,109,117,115,116,32,98, + 101,32,115,116,114,44,32,110,111,116,32,123,125,114,25,0, + 0,0,122,18,108,101,118,101,108,32,109,117,115,116,32,98, + 101,32,62,61,32,48,122,31,95,95,112,97,99,107,97,103, + 101,95,95,32,110,111,116,32,115,101,116,32,116,111,32,97, + 32,115,116,114,105,110,103,122,54,97,116,116,101,109,112,116, + 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111, + 114,116,32,119,105,116,104,32,110,111,32,107,110,111,119,110, + 32,112,97,114,101,110,116,32,112,97,99,107,97,103,101,122, + 17,69,109,112,116,121,32,109,111,100,117,108,101,32,110,97, + 109,101,78,41,7,218,10,105,115,105,110,115,116,97,110,99, + 101,218,3,115,116,114,218,9,84,121,112,101,69,114,114,111, + 114,114,50,0,0,0,114,3,0,0,0,218,10,86,97,108, + 117,101,69,114,114,111,114,114,87,0,0,0,169,3,114,20, + 0,0,0,114,208,0,0,0,114,209,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,13,95,115, + 97,110,105,116,121,95,99,104,101,99,107,200,3,0,0,115, + 26,0,0,0,10,2,18,1,8,1,8,1,8,1,10,1, + 8,1,4,1,8,1,12,2,8,1,8,255,255,128,114,220, + 0,0,0,122,16,78,111,32,109,111,100,117,108,101,32,110, + 97,109,101,100,32,122,4,123,33,114,125,99,2,0,0,0, + 0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0, + 67,0,0,0,115,16,1,0,0,100,0,125,2,124,0,160, + 0,100,1,161,1,100,2,25,0,125,3,124,3,114,63,124, + 3,116,1,106,2,118,1,114,21,116,3,124,1,124,3,131, + 2,1,0,124,0,116,1,106,2,118,0,114,31,116,1,106, + 2,124,0,25,0,83,0,116,1,106,2,124,3,25,0,125, + 4,122,5,124,4,106,4,125,2,87,0,110,21,4,0,116, + 5,121,135,1,0,1,0,1,0,116,6,100,3,23,0,160, + 7,124,0,124,3,161,2,125,5,116,8,124,5,124,0,100, + 4,141,2,100,0,130,2,116,9,124,0,124,2,131,2,125, + 6,124,6,100,0,117,0,114,81,116,8,116,6,160,7,124, + 0,161,1,124,0,100,4,141,2,130,1,116,10,124,6,131, + 1,125,7,124,3,114,132,116,1,106,2,124,3,25,0,125, + 4,124,0,160,0,100,1,161,1,100,5,25,0,125,8,122, + 9,116,11,124,4,124,8,124,7,131,3,1,0,87,0,124, + 7,83,0,4,0,116,5,121,134,1,0,1,0,1,0,100, + 6,124,3,155,2,100,7,124,8,155,2,157,4,125,5,116, + 12,160,13,124,5,116,14,161,2,1,0,89,0,124,7,83, + 0,124,7,83,0,119,0,119,0,41,8,78,114,141,0,0, + 0,114,25,0,0,0,122,23,59,32,123,33,114,125,32,105, + 115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,114, + 19,0,0,0,233,2,0,0,0,122,27,67,97,110,110,111, + 116,32,115,101,116,32,97,110,32,97,116,116,114,105,98,117, + 116,101,32,111,110,32,122,18,32,102,111,114,32,99,104,105, + 108,100,32,109,111,100,117,108,101,32,41,15,114,142,0,0, + 0,114,18,0,0,0,114,105,0,0,0,114,74,0,0,0, + 114,154,0,0,0,114,2,0,0,0,218,8,95,69,82,82, + 95,77,83,71,114,50,0,0,0,218,19,77,111,100,117,108, + 101,78,111,116,70,111,117,110,100,69,114,114,111,114,114,214, + 0,0,0,114,173,0,0,0,114,12,0,0,0,114,101,0, + 0,0,114,102,0,0,0,114,169,0,0,0,41,9,114,20, + 0,0,0,218,7,105,109,112,111,114,116,95,114,181,0,0, + 0,114,143,0,0,0,90,13,112,97,114,101,110,116,95,109, + 111,100,117,108,101,114,108,0,0,0,114,109,0,0,0,114, + 110,0,0,0,90,5,99,104,105,108,100,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,23,95,102,105,110, + 100,95,97,110,100,95,108,111,97,100,95,117,110,108,111,99, + 107,101,100,219,3,0,0,115,60,0,0,0,4,1,14,1, + 4,1,10,1,10,1,10,2,10,1,10,1,2,1,10,1, + 12,1,16,1,14,1,10,1,8,1,18,1,8,2,4,1, + 10,2,14,1,2,1,14,1,4,4,12,253,16,1,14,1, + 8,1,2,253,2,242,255,128,114,225,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,0, + 0,0,67,0,0,0,115,128,0,0,0,116,0,124,0,131, + 1,143,31,1,0,116,1,106,2,160,3,124,0,116,4,161, + 2,125,2,124,2,116,4,117,0,114,28,116,5,124,0,124, + 1,131,2,87,0,2,0,100,1,4,0,4,0,131,3,1, + 0,83,0,87,0,100,1,4,0,4,0,131,3,1,0,110, + 8,49,0,115,38,119,1,1,0,1,0,1,0,89,0,1, + 0,124,2,100,1,117,0,114,58,100,2,160,6,124,0,161, + 1,125,3,116,7,124,3,124,0,100,3,141,2,130,1,116, + 8,124,0,131,1,1,0,124,2,83,0,41,4,122,25,70, + 105,110,100,32,97,110,100,32,108,111,97,100,32,116,104,101, + 32,109,111,100,117,108,101,46,78,122,40,105,109,112,111,114, + 116,32,111,102,32,123,125,32,104,97,108,116,101,100,59,32, + 78,111,110,101,32,105,110,32,115,121,115,46,109,111,100,117, + 108,101,115,114,19,0,0,0,41,9,114,57,0,0,0,114, + 18,0,0,0,114,105,0,0,0,114,38,0,0,0,218,14, + 95,78,69,69,68,83,95,76,79,65,68,73,78,71,114,225, + 0,0,0,114,50,0,0,0,114,223,0,0,0,114,72,0, + 0,0,41,4,114,20,0,0,0,114,224,0,0,0,114,110, + 0,0,0,114,82,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,14,95,102,105,110,100,95,97, + 110,100,95,108,111,97,100,254,3,0,0,115,28,0,0,0, + 10,2,14,1,8,1,24,1,14,255,16,128,8,3,2,1, + 6,1,2,255,12,2,8,2,4,1,255,128,114,227,0,0, + 0,114,25,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, + 42,0,0,0,116,0,124,0,124,1,124,2,131,3,1,0, + 124,2,100,1,107,4,114,16,116,1,124,0,124,1,124,2, + 131,3,125,0,116,2,124,0,116,3,131,2,83,0,41,3, + 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, + 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, + 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, + 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, + 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, + 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, + 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, + 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, + 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, + 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, + 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, + 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, + 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, + 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, + 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, + 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, + 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, + 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, + 46,10,10,32,32,32,32,114,25,0,0,0,78,41,4,114, + 220,0,0,0,114,210,0,0,0,114,227,0,0,0,218,11, + 95,103,99,100,95,105,109,112,111,114,116,114,219,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 228,0,0,0,14,4,0,0,115,10,0,0,0,12,9,8, + 1,12,1,10,1,255,128,114,228,0,0,0,169,1,218,9, + 114,101,99,117,114,115,105,118,101,99,3,0,0,0,0,0, + 0,0,1,0,0,0,8,0,0,0,11,0,0,0,67,0, + 0,0,115,218,0,0,0,124,1,68,0,93,103,125,4,116, + 0,124,4,116,1,131,2,115,32,124,3,114,17,124,0,106, + 2,100,1,23,0,125,5,110,2,100,2,125,5,116,3,100, + 3,124,5,155,0,100,4,116,4,124,4,131,1,106,2,155, + 0,157,4,131,1,130,1,124,4,100,5,107,2,114,53,124, + 3,115,52,116,5,124,0,100,6,131,2,114,52,116,6,124, + 0,124,0,106,7,124,2,100,7,100,8,141,4,1,0,113, + 2,116,5,124,0,124,4,131,2,115,105,100,9,160,8,124, + 0,106,2,124,4,161,2,125,6,122,7,116,9,124,2,124, + 6,131,2,1,0,87,0,113,2,4,0,116,10,121,108,1, + 0,125,7,1,0,122,21,124,7,106,11,124,6,107,2,114, + 100,116,12,106,13,160,14,124,6,116,15,161,2,100,10,117, + 1,114,100,87,0,89,0,100,10,125,7,126,7,113,2,130, + 0,100,10,125,7,126,7,119,1,113,2,124,0,83,0,119, + 0,41,11,122,238,70,105,103,117,114,101,32,111,117,116,32, + 119,104,97,116,32,95,95,105,109,112,111,114,116,95,95,32, + 115,104,111,117,108,100,32,114,101,116,117,114,110,46,10,10, + 32,32,32,32,84,104,101,32,105,109,112,111,114,116,95,32, + 112,97,114,97,109,101,116,101,114,32,105,115,32,97,32,99, + 97,108,108,97,98,108,101,32,119,104,105,99,104,32,116,97, + 107,101,115,32,116,104,101,32,110,97,109,101,32,111,102,32, + 109,111,100,117,108,101,32,116,111,10,32,32,32,32,105,109, + 112,111,114,116,46,32,73,116,32,105,115,32,114,101,113,117, + 105,114,101,100,32,116,111,32,100,101,99,111,117,112,108,101, + 32,116,104,101,32,102,117,110,99,116,105,111,110,32,102,114, + 111,109,32,97,115,115,117,109,105,110,103,32,105,109,112,111, + 114,116,108,105,98,39,115,10,32,32,32,32,105,109,112,111, + 114,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,105,115,32,100,101,115,105,114,101,100,46,10,10,32, + 32,32,32,122,8,46,95,95,97,108,108,95,95,122,13,96, + 96,102,114,111,109,32,108,105,115,116,39,39,122,8,73,116, + 101,109,32,105,110,32,122,18,32,109,117,115,116,32,98,101, + 32,115,116,114,44,32,110,111,116,32,250,1,42,218,7,95, + 95,97,108,108,95,95,84,114,229,0,0,0,114,205,0,0, + 0,78,41,16,114,215,0,0,0,114,216,0,0,0,114,9, + 0,0,0,114,217,0,0,0,114,3,0,0,0,114,11,0, + 0,0,218,16,95,104,97,110,100,108,101,95,102,114,111,109, + 108,105,115,116,114,232,0,0,0,114,50,0,0,0,114,74, + 0,0,0,114,223,0,0,0,114,20,0,0,0,114,18,0, + 0,0,114,105,0,0,0,114,38,0,0,0,114,226,0,0, + 0,41,8,114,110,0,0,0,218,8,102,114,111,109,108,105, + 115,116,114,224,0,0,0,114,230,0,0,0,218,1,120,90, + 5,119,104,101,114,101,90,9,102,114,111,109,95,110,97,109, + 101,90,3,101,120,99,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,233,0,0,0,29,4,0,0,115,58, + 0,0,0,8,10,10,1,4,1,12,1,4,2,10,1,8, + 1,8,255,8,2,14,1,10,1,2,1,6,255,2,128,10, + 2,14,1,2,1,14,1,14,1,10,4,16,1,2,255,12, + 2,2,1,8,128,2,245,4,12,2,248,255,128,114,233,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,6,0,0,0,67,0,0,0,115,146,0,0,0, + 124,0,160,0,100,1,161,1,125,1,124,0,160,0,100,2, + 161,1,125,2,124,1,100,3,117,1,114,41,124,2,100,3, + 117,1,114,39,124,1,124,2,106,1,107,3,114,39,116,2, + 106,3,100,4,124,1,155,2,100,5,124,2,106,1,155,2, + 100,6,157,5,116,4,100,7,100,8,141,3,1,0,124,1, + 83,0,124,2,100,3,117,1,114,48,124,2,106,1,83,0, + 116,2,106,3,100,9,116,4,100,7,100,8,141,3,1,0, + 124,0,100,10,25,0,125,1,100,11,124,0,118,1,114,71, + 124,1,160,5,100,12,161,1,100,13,25,0,125,1,124,1, + 83,0,41,14,122,167,67,97,108,99,117,108,97,116,101,32, + 119,104,97,116,32,95,95,112,97,99,107,97,103,101,95,95, + 32,115,104,111,117,108,100,32,98,101,46,10,10,32,32,32, + 32,95,95,112,97,99,107,97,103,101,95,95,32,105,115,32, + 110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116, + 111,32,98,101,32,100,101,102,105,110,101,100,32,111,114,32, + 99,111,117,108,100,32,98,101,32,115,101,116,32,116,111,32, + 78,111,110,101,10,32,32,32,32,116,111,32,114,101,112,114, + 101,115,101,110,116,32,116,104,97,116,32,105,116,115,32,112, + 114,111,112,101,114,32,118,97,108,117,101,32,105,115,32,117, + 110,107,110,111,119,110,46,10,10,32,32,32,32,114,158,0, + 0,0,114,113,0,0,0,78,122,32,95,95,112,97,99,107, + 97,103,101,95,95,32,33,61,32,95,95,115,112,101,99,95, + 95,46,112,97,114,101,110,116,32,40,122,4,32,33,61,32, + 250,1,41,233,3,0,0,0,41,1,90,10,115,116,97,99, + 107,108,101,118,101,108,122,89,99,97,110,39,116,32,114,101, + 115,111,108,118,101,32,112,97,99,107,97,103,101,32,102,114, + 111,109,32,95,95,115,112,101,99,95,95,32,111,114,32,95, + 95,112,97,99,107,97,103,101,95,95,44,32,102,97,108,108, + 105,110,103,32,98,97,99,107,32,111,110,32,95,95,110,97, + 109,101,95,95,32,97,110,100,32,95,95,112,97,116,104,95, + 95,114,9,0,0,0,114,154,0,0,0,114,141,0,0,0, + 114,25,0,0,0,41,6,114,38,0,0,0,114,143,0,0, + 0,114,101,0,0,0,114,102,0,0,0,114,169,0,0,0, + 114,142,0,0,0,41,3,218,7,103,108,111,98,97,108,115, + 114,208,0,0,0,114,109,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,17,95,99,97,108,99, + 95,95,95,112,97,99,107,97,103,101,95,95,66,4,0,0, + 115,44,0,0,0,10,7,10,1,8,1,18,1,6,1,2, + 1,4,255,4,1,6,255,4,2,6,254,4,3,8,1,6, + 1,6,2,4,2,6,254,8,3,8,1,14,1,4,1,255, + 128,114,239,0,0,0,114,5,0,0,0,99,5,0,0,0, + 0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, + 67,0,0,0,115,174,0,0,0,124,4,100,1,107,2,114, + 9,116,0,124,0,131,1,125,5,110,18,124,1,100,2,117, + 1,114,15,124,1,110,1,105,0,125,6,116,1,124,6,131, + 1,125,7,116,0,124,0,124,7,124,4,131,3,125,5,124, + 3,115,74,124,4,100,1,107,2,114,42,116,0,124,0,160, + 2,100,3,161,1,100,1,25,0,131,1,83,0,124,0,115, + 46,124,5,83,0,116,3,124,0,131,1,116,3,124,0,160, + 2,100,3,161,1,100,1,25,0,131,1,24,0,125,8,116, + 4,106,5,124,5,106,6,100,2,116,3,124,5,106,6,131, + 1,124,8,24,0,133,2,25,0,25,0,83,0,116,7,124, + 5,100,4,131,2,114,85,116,8,124,5,124,3,116,0,131, + 3,83,0,124,5,83,0,41,5,97,215,1,0,0,73,109, + 112,111,114,116,32,97,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,84,104,101,32,39,103,108,111,98,97,108,115, + 39,32,97,114,103,117,109,101,110,116,32,105,115,32,117,115, + 101,100,32,116,111,32,105,110,102,101,114,32,119,104,101,114, + 101,32,116,104,101,32,105,109,112,111,114,116,32,105,115,32, + 111,99,99,117,114,114,105,110,103,32,102,114,111,109,10,32, + 32,32,32,116,111,32,104,97,110,100,108,101,32,114,101,108, + 97,116,105,118,101,32,105,109,112,111,114,116,115,46,32,84, + 104,101,32,39,108,111,99,97,108,115,39,32,97,114,103,117, + 109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,46, + 32,84,104,101,10,32,32,32,32,39,102,114,111,109,108,105, + 115,116,39,32,97,114,103,117,109,101,110,116,32,115,112,101, + 99,105,102,105,101,115,32,119,104,97,116,32,115,104,111,117, + 108,100,32,101,120,105,115,116,32,97,115,32,97,116,116,114, + 105,98,117,116,101,115,32,111,110,32,116,104,101,32,109,111, + 100,117,108,101,10,32,32,32,32,98,101,105,110,103,32,105, + 109,112,111,114,116,101,100,32,40,101,46,103,46,32,96,96, + 102,114,111,109,32,109,111,100,117,108,101,32,105,109,112,111, + 114,116,32,60,102,114,111,109,108,105,115,116,62,96,96,41, + 46,32,32,84,104,101,32,39,108,101,118,101,108,39,10,32, + 32,32,32,97,114,103,117,109,101,110,116,32,114,101,112,114, + 101,115,101,110,116,115,32,116,104,101,32,112,97,99,107,97, + 103,101,32,108,111,99,97,116,105,111,110,32,116,111,32,105, + 109,112,111,114,116,32,102,114,111,109,32,105,110,32,97,32, + 114,101,108,97,116,105,118,101,10,32,32,32,32,105,109,112, + 111,114,116,32,40,101,46,103,46,32,96,96,102,114,111,109, + 32,46,46,112,107,103,32,105,109,112,111,114,116,32,109,111, + 100,96,96,32,119,111,117,108,100,32,104,97,118,101,32,97, + 32,39,108,101,118,101,108,39,32,111,102,32,50,41,46,10, + 10,32,32,32,32,114,25,0,0,0,78,114,141,0,0,0, + 114,154,0,0,0,41,9,114,228,0,0,0,114,239,0,0, + 0,218,9,112,97,114,116,105,116,105,111,110,114,207,0,0, + 0,114,18,0,0,0,114,105,0,0,0,114,9,0,0,0, + 114,11,0,0,0,114,233,0,0,0,41,9,114,20,0,0, + 0,114,238,0,0,0,218,6,108,111,99,97,108,115,114,234, + 0,0,0,114,209,0,0,0,114,110,0,0,0,90,8,103, + 108,111,98,97,108,115,95,114,208,0,0,0,90,7,99,117, + 116,95,111,102,102,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,10,95,95,105,109,112,111,114,116,95,95, + 93,4,0,0,115,32,0,0,0,8,11,10,1,16,2,8, + 1,12,1,4,1,8,3,18,1,4,1,4,1,26,4,30, + 3,10,1,12,1,4,2,255,128,114,242,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,67,0,0,0,115,38,0,0,0,116,0,160,1, + 124,0,161,1,125,1,124,1,100,0,117,0,114,15,116,2, + 100,1,124,0,23,0,131,1,130,1,116,3,124,1,131,1, + 83,0,41,2,78,122,25,110,111,32,98,117,105,108,116,45, + 105,110,32,109,111,100,117,108,101,32,110,97,109,101,100,32, + 41,4,114,175,0,0,0,114,183,0,0,0,114,87,0,0, + 0,114,173,0,0,0,41,2,114,20,0,0,0,114,109,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,18,95,98,117,105,108,116,105,110,95,102,114,111,109, + 95,110,97,109,101,130,4,0,0,115,10,0,0,0,10,1, + 8,1,12,1,8,1,255,128,114,243,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,10,0,0,0,5,0, + 0,0,67,0,0,0,115,166,0,0,0,124,1,97,0,124, + 0,97,1,116,2,116,1,131,1,125,2,116,1,106,3,160, + 4,161,0,68,0,93,36,92,2,125,3,125,4,116,5,124, + 4,124,2,131,2,114,49,124,3,116,1,106,6,118,0,114, + 30,116,7,125,5,110,9,116,0,160,8,124,3,161,1,114, + 38,116,9,125,5,110,1,113,13,116,10,124,4,124,5,131, + 2,125,6,116,11,124,6,124,4,131,2,1,0,113,13,116, + 1,106,3,116,12,25,0,125,7,100,1,68,0,93,23,125, + 8,124,8,116,1,106,3,118,1,114,69,116,13,124,8,131, + 1,125,9,110,5,116,1,106,3,124,8,25,0,125,9,116, + 14,124,7,124,8,124,9,131,3,1,0,113,57,100,2,83, + 0,41,3,122,250,83,101,116,117,112,32,105,109,112,111,114, + 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, + 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, + 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, + 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, + 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, + 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, + 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, + 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, + 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, + 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, + 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, + 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, + 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, + 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, + 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,41, + 3,114,26,0,0,0,114,101,0,0,0,114,71,0,0,0, + 78,41,15,114,64,0,0,0,114,18,0,0,0,114,3,0, + 0,0,114,105,0,0,0,218,5,105,116,101,109,115,114,215, + 0,0,0,114,86,0,0,0,114,175,0,0,0,114,98,0, + 0,0,114,192,0,0,0,114,155,0,0,0,114,161,0,0, + 0,114,9,0,0,0,114,243,0,0,0,114,12,0,0,0, + 41,10,218,10,115,121,115,95,109,111,100,117,108,101,218,11, + 95,105,109,112,95,109,111,100,117,108,101,90,11,109,111,100, + 117,108,101,95,116,121,112,101,114,20,0,0,0,114,110,0, + 0,0,114,122,0,0,0,114,109,0,0,0,90,11,115,101, + 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, + 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, + 95,109,111,100,117,108,101,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,218,6,95,115,101,116,117,112,137,4, + 0,0,115,42,0,0,0,4,9,4,1,8,3,18,1,10, + 1,10,1,6,1,10,1,6,1,2,2,10,1,10,1,2, + 128,10,3,8,1,10,1,10,1,10,2,14,1,4,251,255, + 128,114,247,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,116,0,124,0,124,1,131,2,1,0,116,1, + 106,2,160,3,116,4,161,1,1,0,116,1,106,2,160,3, + 116,5,161,1,1,0,100,1,83,0,41,2,122,48,73,110, + 115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,32, + 102,111,114,32,98,117,105,108,116,105,110,32,97,110,100,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,115,78,41, + 6,114,247,0,0,0,114,18,0,0,0,114,213,0,0,0, + 114,132,0,0,0,114,175,0,0,0,114,192,0,0,0,41, + 2,114,245,0,0,0,114,246,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,8,95,105,110,115, + 116,97,108,108,172,4,0,0,115,8,0,0,0,10,2,12, + 2,16,1,255,128,114,248,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, + 0,0,0,115,32,0,0,0,100,1,100,2,108,0,125,0, + 124,0,97,1,124,0,160,2,116,3,106,4,116,5,25,0, + 161,1,1,0,100,2,83,0,41,3,122,57,73,110,115,116, + 97,108,108,32,105,109,112,111,114,116,101,114,115,32,116,104, + 97,116,32,114,101,113,117,105,114,101,32,101,120,116,101,114, + 110,97,108,32,102,105,108,101,115,121,115,116,101,109,32,97, + 99,99,101,115,115,114,25,0,0,0,78,41,6,218,26,95, + 102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,98, + 95,101,120,116,101,114,110,97,108,114,139,0,0,0,114,248, + 0,0,0,114,18,0,0,0,114,105,0,0,0,114,9,0, + 0,0,41,1,114,249,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,27,95,105,110,115,116,97, + 108,108,95,101,120,116,101,114,110,97,108,95,105,109,112,111, + 114,116,101,114,115,180,4,0,0,115,8,0,0,0,8,3, + 4,1,20,1,255,128,114,250,0,0,0,41,2,78,78,41, + 1,78,41,2,78,114,25,0,0,0,41,4,78,78,114,5, + 0,0,0,114,25,0,0,0,41,54,114,10,0,0,0,114, + 7,0,0,0,114,26,0,0,0,114,101,0,0,0,114,71, + 0,0,0,114,139,0,0,0,114,17,0,0,0,114,21,0, + 0,0,114,66,0,0,0,114,37,0,0,0,114,47,0,0, + 0,114,22,0,0,0,114,23,0,0,0,114,55,0,0,0, + 114,57,0,0,0,114,60,0,0,0,114,72,0,0,0,114, + 74,0,0,0,114,83,0,0,0,114,95,0,0,0,114,100, + 0,0,0,114,111,0,0,0,114,124,0,0,0,114,125,0, + 0,0,114,104,0,0,0,114,155,0,0,0,114,161,0,0, + 0,114,165,0,0,0,114,119,0,0,0,114,106,0,0,0, + 114,172,0,0,0,114,173,0,0,0,114,107,0,0,0,114, + 175,0,0,0,114,192,0,0,0,114,199,0,0,0,114,210, + 0,0,0,114,212,0,0,0,114,214,0,0,0,114,220,0, + 0,0,90,15,95,69,82,82,95,77,83,71,95,80,82,69, + 70,73,88,114,222,0,0,0,114,225,0,0,0,218,6,111, + 98,106,101,99,116,114,226,0,0,0,114,227,0,0,0,114, + 228,0,0,0,114,233,0,0,0,114,239,0,0,0,114,242, + 0,0,0,114,243,0,0,0,114,247,0,0,0,114,248,0, + 0,0,114,250,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,8,60,109,111, + 100,117,108,101,62,1,0,0,0,115,106,0,0,0,4,0, + 8,22,4,9,4,1,4,1,4,3,8,3,8,8,4,8, + 4,2,16,3,14,4,14,77,14,21,8,16,8,37,8,17, + 14,11,8,8,8,11,8,12,8,19,14,26,16,101,10,26, + 14,45,8,72,8,17,8,17,8,30,8,36,8,45,14,15, + 14,80,14,85,8,13,8,9,10,10,8,47,4,16,8,1, + 8,2,6,32,8,3,10,16,14,15,8,37,10,27,8,37, + 8,7,8,35,12,8,255,128, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 5eadfd06e52d0..a9a1f4dac2467 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -640,62 +640,185 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,115,14,0,0,0,14,8,8,10,8,1,8,2,10,6, 4,1,255,128,114,146,0,0,0,99,2,0,0,0,0,0, 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, - 0,0,115,60,0,0,0,124,0,160,0,124,1,161,1,92, - 2,125,2,125,3,124,2,100,1,117,0,114,28,116,1,124, - 3,131,1,114,28,100,2,125,4,116,2,160,3,124,4,160, - 4,124,3,100,3,25,0,161,1,116,5,161,2,1,0,124, - 2,83,0,41,4,122,155,84,114,121,32,116,111,32,102,105, - 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,32,98,121,32,100,101,108,101,103,97,116,105, - 110,103,32,116,111,10,32,32,32,32,115,101,108,102,46,102, - 105,110,100,95,108,111,97,100,101,114,40,41,46,10,10,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,105,110,32, - 102,97,118,111,114,32,111,102,32,102,105,110,100,101,114,46, - 102,105,110,100,95,115,112,101,99,40,41,46,10,10,32,32, - 32,32,78,122,44,78,111,116,32,105,109,112,111,114,116,105, - 110,103,32,100,105,114,101,99,116,111,114,121,32,123,125,58, - 32,109,105,115,115,105,110,103,32,95,95,105,110,105,116,95, - 95,114,0,0,0,0,41,6,218,11,102,105,110,100,95,108, - 111,97,100,101,114,114,4,0,0,0,114,87,0,0,0,114, - 88,0,0,0,114,76,0,0,0,218,13,73,109,112,111,114, - 116,87,97,114,110,105,110,103,41,5,114,129,0,0,0,218, - 8,102,117,108,108,110,97,109,101,218,6,108,111,97,100,101, - 114,218,8,112,111,114,116,105,111,110,115,218,3,109,115,103, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, - 105,109,17,2,0,0,115,12,0,0,0,14,10,16,1,4, - 1,22,1,4,1,255,128,114,153,0,0,0,99,3,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, - 0,67,0,0,0,115,166,0,0,0,124,0,100,1,100,2, - 133,2,25,0,125,3,124,3,116,0,107,3,114,32,100,3, - 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,1, - 160,2,100,5,124,4,161,2,1,0,116,3,124,4,102,1, - 105,0,124,2,164,1,142,1,130,1,116,4,124,0,131,1, - 100,6,107,0,114,53,100,7,124,1,155,2,157,2,125,4, - 116,1,160,2,100,5,124,4,161,2,1,0,116,5,124,4, - 131,1,130,1,116,6,124,0,100,2,100,8,133,2,25,0, - 131,1,125,5,124,5,100,9,64,0,114,81,100,10,124,5, - 155,2,100,11,124,1,155,2,157,4,125,4,116,3,124,4, - 102,1,105,0,124,2,164,1,142,1,130,1,124,5,83,0, - 41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,98, - 97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,104, - 101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,32, - 104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,114, - 110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,108, - 100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,116, - 101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32, - 112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,117, - 114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,32, - 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, - 99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,32, - 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, - 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, - 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, - 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, - 32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,117, - 103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,42, + 0,0,115,72,0,0,0,116,0,160,1,100,1,116,2,161, + 2,1,0,124,0,160,3,124,1,161,1,92,2,125,2,125, + 3,124,2,100,2,117,0,114,34,116,4,124,3,131,1,114, + 34,100,3,125,4,116,0,160,1,124,4,160,5,124,3,100, + 4,25,0,161,1,116,6,161,2,1,0,124,2,83,0,41, + 5,122,155,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 32,98,121,32,100,101,108,101,103,97,116,105,110,103,32,116, + 111,10,32,32,32,32,115,101,108,102,46,102,105,110,100,95, + 108,111,97,100,101,114,40,41,46,10,10,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,105,110,32,102,97,118,111, + 114,32,111,102,32,102,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,40,41,46,10,10,32,32,32,32,122,90, + 102,105,110,100,95,109,111,100,117,108,101,40,41,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32, + 115,108,97,116,101,100,32,102,111,114,32,114,101,109,111,118, + 97,108,32,105,110,32,80,121,116,104,111,110,32,51,46,49, + 50,59,32,117,115,101,32,102,105,110,100,95,115,112,101,99, + 40,41,32,105,110,115,116,101,97,100,78,122,44,78,111,116, + 32,105,109,112,111,114,116,105,110,103,32,100,105,114,101,99, + 116,111,114,121,32,123,125,58,32,109,105,115,115,105,110,103, + 32,95,95,105,110,105,116,95,95,114,0,0,0,0,41,7, + 114,87,0,0,0,114,88,0,0,0,114,89,0,0,0,218, + 11,102,105,110,100,95,108,111,97,100,101,114,114,4,0,0, + 0,114,76,0,0,0,218,13,73,109,112,111,114,116,87,97, + 114,110,105,110,103,41,5,114,129,0,0,0,218,8,102,117, + 108,108,110,97,109,101,218,6,108,111,97,100,101,114,218,8, + 112,111,114,116,105,111,110,115,218,3,109,115,103,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,17,95,102, + 105,110,100,95,109,111,100,117,108,101,95,115,104,105,109,17, + 2,0,0,115,18,0,0,0,6,7,2,2,4,254,14,6, + 16,1,4,1,22,1,4,1,255,128,114,153,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 4,0,0,0,67,0,0,0,115,166,0,0,0,124,0,100, + 1,100,2,133,2,25,0,125,3,124,3,116,0,107,3,114, + 32,100,3,124,1,155,2,100,4,124,3,155,2,157,4,125, + 4,116,1,160,2,100,5,124,4,161,2,1,0,116,3,124, + 4,102,1,105,0,124,2,164,1,142,1,130,1,116,4,124, + 0,131,1,100,6,107,0,114,53,100,7,124,1,155,2,157, + 2,125,4,116,1,160,2,100,5,124,4,161,2,1,0,116, + 5,124,4,131,1,130,1,116,6,124,0,100,2,100,8,133, + 2,25,0,131,1,125,5,124,5,100,9,64,0,114,81,100, + 10,124,5,155,2,100,11,124,1,155,2,157,4,125,4,116, + 3,124,4,102,1,105,0,124,2,164,1,142,1,130,1,124, + 5,83,0,41,12,97,84,2,0,0,80,101,114,102,111,114, + 109,32,98,97,115,105,99,32,118,97,108,105,100,105,116,121, + 32,99,104,101,99,107,105,110,103,32,111,102,32,97,32,112, + 121,99,32,104,101,97,100,101,114,32,97,110,100,32,114,101, + 116,117,114,110,32,116,104,101,32,102,108,97,103,115,32,102, + 105,101,108,100,44,10,32,32,32,32,119,104,105,99,104,32, + 100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,116, + 104,101,32,112,121,99,32,115,104,111,117,108,100,32,98,101, + 32,102,117,114,116,104,101,114,32,118,97,108,105,100,97,116, + 101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115, + 111,117,114,99,101,46,10,10,32,32,32,32,42,100,97,116, + 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, + 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, + 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, + 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, + 10,32,32,32,32,114,101,113,117,105,114,101,100,44,32,116, + 104,111,117,103,104,46,41,10,10,32,32,32,32,42,110,97, + 109,101,42,32,105,115,32,116,104,101,32,110,97,109,101,32, + 111,102,32,116,104,101,32,109,111,100,117,108,101,32,98,101, + 105,110,103,32,105,109,112,111,114,116,101,100,46,32,73,116, + 32,105,115,32,117,115,101,100,32,102,111,114,32,108,111,103, + 103,105,110,103,46,10,10,32,32,32,32,42,101,120,99,95, + 100,101,116,97,105,108,115,42,32,105,115,32,97,32,100,105, + 99,116,105,111,110,97,114,121,32,112,97,115,115,101,100,32, + 116,111,32,73,109,112,111,114,116,69,114,114,111,114,32,105, + 102,32,105,116,32,114,97,105,115,101,100,32,102,111,114,10, + 32,32,32,32,105,109,112,114,111,118,101,100,32,100,101,98, + 117,103,103,105,110,103,46,10,10,32,32,32,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, + 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, + 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, + 114,114,101,99,116,32,111,114,32,119,104,101,110,32,116,104, + 101,32,102,108,97,103,115,10,32,32,32,32,102,105,101,108, + 100,32,105,115,32,105,110,118,97,108,105,100,46,32,69,79, + 70,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 32,119,104,101,110,32,116,104,101,32,100,97,116,97,32,105, + 115,32,102,111,117,110,100,32,116,111,32,98,101,32,116,114, + 117,110,99,97,116,101,100,46,10,10,32,32,32,32,78,114, + 31,0,0,0,122,20,98,97,100,32,109,97,103,105,99,32, + 110,117,109,98,101,114,32,105,110,32,122,2,58,32,250,2, + 123,125,233,16,0,0,0,122,40,114,101,97,99,104,101,100, + 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, + 110,103,32,112,121,99,32,104,101,97,100,101,114,32,111,102, + 32,233,8,0,0,0,233,252,255,255,255,122,14,105,110,118, + 97,108,105,100,32,102,108,97,103,115,32,122,4,32,105,110, + 32,41,7,218,12,77,65,71,73,67,95,78,85,77,66,69, + 82,114,145,0,0,0,218,16,95,118,101,114,98,111,115,101, + 95,109,101,115,115,97,103,101,114,128,0,0,0,114,4,0, + 0,0,218,8,69,79,70,69,114,114,111,114,114,42,0,0, + 0,41,6,114,41,0,0,0,114,127,0,0,0,218,11,101, + 120,99,95,100,101,116,97,105,108,115,90,5,109,97,103,105, + 99,114,104,0,0,0,114,16,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,13,95,99,108,97, + 115,115,105,102,121,95,112,121,99,37,2,0,0,115,30,0, + 0,0,12,16,8,1,16,1,12,1,16,1,12,1,10,1, + 12,1,8,1,16,1,8,2,16,1,16,1,4,1,255,128, + 114,162,0,0,0,99,5,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,124, + 0,0,0,116,0,124,0,100,1,100,2,133,2,25,0,131, + 1,124,1,100,3,64,0,107,3,114,31,100,4,124,3,155, + 2,157,2,125,5,116,1,160,2,100,5,124,5,161,2,1, + 0,116,3,124,5,102,1,105,0,124,4,164,1,142,1,130, + 1,124,2,100,6,117,1,114,60,116,0,124,0,100,2,100, + 7,133,2,25,0,131,1,124,2,100,3,64,0,107,3,114, + 58,116,3,100,4,124,3,155,2,157,2,102,1,105,0,124, + 4,164,1,142,1,130,1,100,6,83,0,100,6,83,0,41, + 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, + 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, + 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, + 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, + 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, + 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, + 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, + 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, + 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, + 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, + 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, + 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, + 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, + 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, + 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, + 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, + 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, + 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, + 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, + 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, + 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, + 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, + 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, + 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, + 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, + 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, + 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, + 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, + 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, + 32,115,116,97,108,101,46,10,10,32,32,32,32,114,156,0, + 0,0,233,12,0,0,0,114,30,0,0,0,122,22,98,121, + 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, + 102,111,114,32,114,154,0,0,0,78,114,155,0,0,0,41, + 4,114,42,0,0,0,114,145,0,0,0,114,159,0,0,0, + 114,128,0,0,0,41,6,114,41,0,0,0,218,12,115,111, + 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, + 99,101,95,115,105,122,101,114,127,0,0,0,114,161,0,0, + 0,114,104,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,23,95,118,97,108,105,100,97,116,101, + 95,116,105,109,101,115,116,97,109,112,95,112,121,99,70,2, + 0,0,115,20,0,0,0,24,19,10,1,12,1,16,1,8, + 1,22,1,2,255,22,2,8,254,255,128,114,166,0,0,0, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,67,0,0,0,115,42,0,0,0,124,0, + 100,1,100,2,133,2,25,0,124,1,107,3,114,19,116,0, + 100,3,124,2,155,2,157,2,102,1,105,0,124,3,164,1, + 142,1,130,1,100,4,83,0,41,5,97,243,1,0,0,86, + 97,108,105,100,97,116,101,32,97,32,104,97,115,104,45,98, + 97,115,101,100,32,112,121,99,32,98,121,32,99,104,101,99, + 107,105,110,103,32,116,104,101,32,114,101,97,108,32,115,111, + 117,114,99,101,32,104,97,115,104,32,97,103,97,105,110,115, + 116,32,116,104,101,32,111,110,101,32,105,110,10,32,32,32, + 32,116,104,101,32,112,121,99,32,104,101,97,100,101,114,46, + 10,10,32,32,32,32,42,100,97,116,97,42,32,105,115,32, + 116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32, + 116,104,101,32,112,121,99,32,102,105,108,101,46,32,40,79, + 110,108,121,32,116,104,101,32,102,105,114,115,116,32,49,54, + 32,98,121,116,101,115,32,97,114,101,10,32,32,32,32,114, + 101,113,117,105,114,101,100,46,41,10,10,32,32,32,32,42, + 115,111,117,114,99,101,95,104,97,115,104,42,32,105,115,32, + 116,104,101,32,105,109,112,111,114,116,108,105,98,46,117,116, + 105,108,46,115,111,117,114,99,101,95,104,97,115,104,40,41, + 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,102, + 105,108,101,46,10,10,32,32,32,32,42,110,97,109,101,42, 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, @@ -706,1549 +829,1443 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,105, 116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,32, 32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,103, - 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, - 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, - 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, - 99,116,32,111,114,32,119,104,101,110,32,116,104,101,32,102, - 108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,105, - 115,32,105,110,118,97,108,105,100,46,32,69,79,70,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,104, - 101,110,32,116,104,101,32,100,97,116,97,32,105,115,32,102, - 111,117,110,100,32,116,111,32,98,101,32,116,114,117,110,99, - 97,116,101,100,46,10,10,32,32,32,32,78,114,31,0,0, - 0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,109, - 98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,233, - 16,0,0,0,122,40,114,101,97,99,104,101,100,32,69,79, - 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, - 112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,8, - 0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,105, - 100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,7, - 218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,145, - 0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,101, - 115,115,97,103,101,114,128,0,0,0,114,4,0,0,0,218, - 8,69,79,70,69,114,114,111,114,114,42,0,0,0,41,6, - 114,41,0,0,0,114,127,0,0,0,218,11,101,120,99,95, - 100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,104, - 0,0,0,114,16,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,13,95,99,108,97,115,115,105, - 102,121,95,112,121,99,34,2,0,0,115,30,0,0,0,12, - 16,8,1,16,1,12,1,16,1,12,1,10,1,12,1,8, - 1,16,1,8,2,16,1,16,1,4,1,255,128,114,162,0, - 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,4,0,0,0,67,0,0,0,115,124,0,0,0, - 116,0,124,0,100,1,100,2,133,2,25,0,131,1,124,1, - 100,3,64,0,107,3,114,31,100,4,124,3,155,2,157,2, - 125,5,116,1,160,2,100,5,124,5,161,2,1,0,116,3, - 124,5,102,1,105,0,124,4,164,1,142,1,130,1,124,2, - 100,6,117,1,114,60,116,0,124,0,100,2,100,7,133,2, - 25,0,131,1,124,2,100,3,64,0,107,3,114,58,116,3, - 100,4,124,3,155,2,157,2,102,1,105,0,124,4,164,1, - 142,1,130,1,100,6,83,0,100,6,83,0,41,8,97,7, - 2,0,0,86,97,108,105,100,97,116,101,32,97,32,112,121, - 99,32,97,103,97,105,110,115,116,32,116,104,101,32,115,111, - 117,114,99,101,32,108,97,115,116,45,109,111,100,105,102,105, - 101,100,32,116,105,109,101,46,10,10,32,32,32,32,42,100, - 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116, - 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32, - 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32, - 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97, - 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46, - 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,109, - 116,105,109,101,42,32,105,115,32,116,104,101,32,108,97,115, - 116,32,109,111,100,105,102,105,101,100,32,116,105,109,101,115, - 116,97,109,112,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,46,10,10,32,32,32,32,42,115, - 111,117,114,99,101,95,115,105,122,101,42,32,105,115,32,78, - 111,110,101,32,111,114,32,116,104,101,32,115,105,122,101,32, - 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, - 108,101,32,105,110,32,98,121,116,101,115,46,10,10,32,32, - 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, - 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, - 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, - 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, - 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, - 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, - 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, - 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, - 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104, - 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116, - 97,108,101,46,10,10,32,32,32,32,114,156,0,0,0,233, - 12,0,0,0,114,30,0,0,0,122,22,98,121,116,101,99, - 111,100,101,32,105,115,32,115,116,97,108,101,32,102,111,114, - 32,114,154,0,0,0,78,114,155,0,0,0,41,4,114,42, - 0,0,0,114,145,0,0,0,114,159,0,0,0,114,128,0, - 0,0,41,6,114,41,0,0,0,218,12,115,111,117,114,99, - 101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95, - 115,105,122,101,114,127,0,0,0,114,161,0,0,0,114,104, + 105,110,103,46,10,10,32,32,32,32,65,110,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, + 101,100,32,105,102,32,116,104,101,32,98,121,116,101,99,111, + 100,101,32,105,115,32,115,116,97,108,101,46,10,10,32,32, + 32,32,114,156,0,0,0,114,155,0,0,0,122,46,104,97, + 115,104,32,105,110,32,98,121,116,101,99,111,100,101,32,100, + 111,101,115,110,39,116,32,109,97,116,99,104,32,104,97,115, + 104,32,111,102,32,115,111,117,114,99,101,32,78,41,1,114, + 128,0,0,0,41,4,114,41,0,0,0,218,11,115,111,117, + 114,99,101,95,104,97,115,104,114,127,0,0,0,114,161,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,18,95,118,97,108,105,100,97,116,101,95,104,97,115, + 104,95,112,121,99,98,2,0,0,115,16,0,0,0,16,17, + 2,1,8,1,4,255,2,2,6,254,4,255,255,128,114,168, + 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,5,0,0,0,67,0,0,0,115,76,0,0, + 0,116,0,160,1,124,0,161,1,125,4,116,2,124,4,116, + 3,131,2,114,28,116,4,160,5,100,1,124,2,161,2,1, + 0,124,3,100,2,117,1,114,26,116,6,160,7,124,4,124, + 3,161,2,1,0,124,4,83,0,116,8,100,3,160,9,124, + 2,161,1,124,1,124,2,100,4,141,3,130,1,41,5,122, + 35,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, + 101,32,97,115,32,102,111,117,110,100,32,105,110,32,97,32, + 112,121,99,46,122,21,99,111,100,101,32,111,98,106,101,99, + 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, + 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, + 32,123,33,114,125,169,2,114,127,0,0,0,114,57,0,0, + 0,41,10,218,7,109,97,114,115,104,97,108,90,5,108,111, + 97,100,115,218,10,105,115,105,110,115,116,97,110,99,101,218, + 10,95,99,111,100,101,95,116,121,112,101,114,145,0,0,0, + 114,159,0,0,0,218,4,95,105,109,112,90,16,95,102,105, + 120,95,99,111,95,102,105,108,101,110,97,109,101,114,128,0, + 0,0,114,76,0,0,0,41,5,114,41,0,0,0,114,127, + 0,0,0,114,117,0,0,0,114,118,0,0,0,218,4,99, + 111,100,101,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,17,95,99,111,109,112,105,108,101,95,98,121,116, + 101,99,111,100,101,122,2,0,0,115,20,0,0,0,10,2, + 10,1,12,1,8,1,12,1,4,1,10,2,4,1,6,255, + 255,128,114,175,0,0,0,99,3,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,0, + 115,70,0,0,0,116,0,116,1,131,1,125,3,124,3,160, + 2,116,3,100,1,131,1,161,1,1,0,124,3,160,2,116, + 3,124,1,131,1,161,1,1,0,124,3,160,2,116,3,124, + 2,131,1,161,1,1,0,124,3,160,2,116,4,160,5,124, + 0,161,1,161,1,1,0,124,3,83,0,41,3,122,43,80, + 114,111,100,117,99,101,32,116,104,101,32,100,97,116,97,32, + 102,111,114,32,97,32,116,105,109,101,115,116,97,109,112,45, + 98,97,115,101,100,32,112,121,99,46,114,0,0,0,0,78, + 41,6,218,9,98,121,116,101,97,114,114,97,121,114,158,0, + 0,0,218,6,101,120,116,101,110,100,114,36,0,0,0,114, + 170,0,0,0,218,5,100,117,109,112,115,41,4,114,174,0, + 0,0,218,5,109,116,105,109,101,114,165,0,0,0,114,41, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,23,95,118,97,108,105,100,97,116,101,95,116,105, - 109,101,115,116,97,109,112,95,112,121,99,67,2,0,0,115, - 20,0,0,0,24,19,10,1,12,1,16,1,8,1,22,1, - 2,255,22,2,8,254,255,128,114,166,0,0,0,99,4,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, - 0,0,67,0,0,0,115,42,0,0,0,124,0,100,1,100, - 2,133,2,25,0,124,1,107,3,114,19,116,0,100,3,124, - 2,155,2,157,2,102,1,105,0,124,3,164,1,142,1,130, - 1,100,4,83,0,41,5,97,243,1,0,0,86,97,108,105, - 100,97,116,101,32,97,32,104,97,115,104,45,98,97,115,101, - 100,32,112,121,99,32,98,121,32,99,104,101,99,107,105,110, - 103,32,116,104,101,32,114,101,97,108,32,115,111,117,114,99, - 101,32,104,97,115,104,32,97,103,97,105,110,115,116,32,116, - 104,101,32,111,110,101,32,105,110,10,32,32,32,32,116,104, - 101,32,112,121,99,32,104,101,97,100,101,114,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,117, - 114,99,101,95,104,97,115,104,42,32,105,115,32,116,104,101, - 32,105,109,112,111,114,116,108,105,98,46,117,116,105,108,46, - 115,111,117,114,99,101,95,104,97,115,104,40,41,32,111,102, - 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, - 46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, - 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, - 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, - 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, - 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, - 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, - 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, - 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, - 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, - 46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, - 105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,32, - 105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,114, - 156,0,0,0,114,155,0,0,0,122,46,104,97,115,104,32, - 105,110,32,98,121,116,101,99,111,100,101,32,100,111,101,115, - 110,39,116,32,109,97,116,99,104,32,104,97,115,104,32,111, - 102,32,115,111,117,114,99,101,32,78,41,1,114,128,0,0, - 0,41,4,114,41,0,0,0,218,11,115,111,117,114,99,101, - 95,104,97,115,104,114,127,0,0,0,114,161,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,18, - 95,118,97,108,105,100,97,116,101,95,104,97,115,104,95,112, - 121,99,95,2,0,0,115,16,0,0,0,16,17,2,1,8, - 1,4,255,2,2,6,254,4,255,255,128,114,168,0,0,0, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,5,0,0,0,67,0,0,0,115,76,0,0,0,116,0, - 160,1,124,0,161,1,125,4,116,2,124,4,116,3,131,2, - 114,28,116,4,160,5,100,1,124,2,161,2,1,0,124,3, - 100,2,117,1,114,26,116,6,160,7,124,4,124,3,161,2, - 1,0,124,4,83,0,116,8,100,3,160,9,124,2,161,1, - 124,1,124,2,100,4,141,3,130,1,41,5,122,35,67,111, - 109,112,105,108,101,32,98,121,116,101,99,111,100,101,32,97, - 115,32,102,111,117,110,100,32,105,110,32,97,32,112,121,99, - 46,122,21,99,111,100,101,32,111,98,106,101,99,116,32,102, - 114,111,109,32,123,33,114,125,78,122,23,78,111,110,45,99, - 111,100,101,32,111,98,106,101,99,116,32,105,110,32,123,33, - 114,125,169,2,114,127,0,0,0,114,57,0,0,0,41,10, - 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, - 218,10,105,115,105,110,115,116,97,110,99,101,218,10,95,99, - 111,100,101,95,116,121,112,101,114,145,0,0,0,114,159,0, - 0,0,218,4,95,105,109,112,90,16,95,102,105,120,95,99, - 111,95,102,105,108,101,110,97,109,101,114,128,0,0,0,114, - 76,0,0,0,41,5,114,41,0,0,0,114,127,0,0,0, - 114,117,0,0,0,114,118,0,0,0,218,4,99,111,100,101, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, - 100,101,119,2,0,0,115,20,0,0,0,10,2,10,1,12, - 1,8,1,12,1,4,1,10,2,4,1,6,255,255,128,114, - 175,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0, - 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, - 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, - 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, - 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, - 161,1,1,0,124,3,83,0,41,3,122,43,80,114,111,100, - 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114, - 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115, - 101,100,32,112,121,99,46,114,0,0,0,0,78,41,6,218, - 9,98,121,116,101,97,114,114,97,121,114,158,0,0,0,218, - 6,101,120,116,101,110,100,114,36,0,0,0,114,170,0,0, - 0,218,5,100,117,109,112,115,41,4,114,174,0,0,0,218, - 5,109,116,105,109,101,114,165,0,0,0,114,41,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 22,95,99,111,100,101,95,116,111,95,116,105,109,101,115,116, - 97,109,112,95,112,121,99,132,2,0,0,115,14,0,0,0, - 8,2,14,1,14,1,14,1,16,1,4,1,255,128,114,180, - 0,0,0,84,99,3,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,80,0, - 0,0,116,0,116,1,131,1,125,3,100,1,124,2,100,1, - 62,0,66,0,125,4,124,3,160,2,116,3,124,4,131,1, - 161,1,1,0,116,4,124,1,131,1,100,2,107,2,115,25, - 74,0,130,1,124,3,160,2,124,1,161,1,1,0,124,3, - 160,2,116,5,160,6,124,0,161,1,161,1,1,0,124,3, - 83,0,41,4,122,38,80,114,111,100,117,99,101,32,116,104, - 101,32,100,97,116,97,32,102,111,114,32,97,32,104,97,115, - 104,45,98,97,115,101,100,32,112,121,99,46,114,3,0,0, - 0,114,156,0,0,0,78,41,7,114,176,0,0,0,114,158, - 0,0,0,114,177,0,0,0,114,36,0,0,0,114,4,0, - 0,0,114,170,0,0,0,114,178,0,0,0,41,5,114,174, - 0,0,0,114,167,0,0,0,90,7,99,104,101,99,107,101, - 100,114,41,0,0,0,114,16,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,17,95,99,111,100, - 101,95,116,111,95,104,97,115,104,95,112,121,99,142,2,0, - 0,115,16,0,0,0,8,2,12,1,14,1,16,1,10,1, - 16,1,4,1,255,128,114,181,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0, - 67,0,0,0,115,62,0,0,0,100,1,100,2,108,0,125, - 1,116,1,160,2,124,0,161,1,106,3,125,2,124,1,160, - 4,124,2,161,1,125,3,116,1,160,5,100,2,100,3,161, - 2,125,4,124,4,160,6,124,0,160,6,124,3,100,1,25, - 0,161,1,161,1,83,0,41,4,122,121,68,101,99,111,100, - 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, - 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, - 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, - 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, - 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, - 32,32,32,32,114,0,0,0,0,78,84,41,7,218,8,116, - 111,107,101,110,105,122,101,114,78,0,0,0,90,7,66,121, - 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, - 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, - 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, - 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, - 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, - 116,101,115,114,182,0,0,0,90,21,115,111,117,114,99,101, - 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, - 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, - 110,101,95,100,101,99,111,100,101,114,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,13,100,101,99,111,100, - 101,95,115,111,117,114,99,101,153,2,0,0,115,12,0,0, - 0,8,5,12,1,10,1,12,1,20,1,255,128,114,186,0, - 0,0,169,2,114,150,0,0,0,218,26,115,117,98,109,111, + 0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,109, + 101,115,116,97,109,112,95,112,121,99,135,2,0,0,115,14, + 0,0,0,8,2,14,1,14,1,14,1,16,1,4,1,255, + 128,114,180,0,0,0,84,99,3,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, + 115,80,0,0,0,116,0,116,1,131,1,125,3,100,1,124, + 2,100,1,62,0,66,0,125,4,124,3,160,2,116,3,124, + 4,131,1,161,1,1,0,116,4,124,1,131,1,100,2,107, + 2,115,25,74,0,130,1,124,3,160,2,124,1,161,1,1, + 0,124,3,160,2,116,5,160,6,124,0,161,1,161,1,1, + 0,124,3,83,0,41,4,122,38,80,114,111,100,117,99,101, + 32,116,104,101,32,100,97,116,97,32,102,111,114,32,97,32, + 104,97,115,104,45,98,97,115,101,100,32,112,121,99,46,114, + 3,0,0,0,114,156,0,0,0,78,41,7,114,176,0,0, + 0,114,158,0,0,0,114,177,0,0,0,114,36,0,0,0, + 114,4,0,0,0,114,170,0,0,0,114,178,0,0,0,41, + 5,114,174,0,0,0,114,167,0,0,0,90,7,99,104,101, + 99,107,101,100,114,41,0,0,0,114,16,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,17,95, + 99,111,100,101,95,116,111,95,104,97,115,104,95,112,121,99, + 145,2,0,0,115,16,0,0,0,8,2,12,1,14,1,16, + 1,10,1,16,1,4,1,255,128,114,181,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, + 0,0,0,67,0,0,0,115,62,0,0,0,100,1,100,2, + 108,0,125,1,116,1,160,2,124,0,161,1,106,3,125,2, + 124,1,160,4,124,2,161,1,125,3,116,1,160,5,100,2, + 100,3,161,2,125,4,124,4,160,6,124,0,160,6,124,3, + 100,1,25,0,161,1,161,1,83,0,41,4,122,121,68,101, + 99,111,100,101,32,98,121,116,101,115,32,114,101,112,114,101, + 115,101,110,116,105,110,103,32,115,111,117,114,99,101,32,99, + 111,100,101,32,97,110,100,32,114,101,116,117,114,110,32,116, + 104,101,32,115,116,114,105,110,103,46,10,10,32,32,32,32, + 85,110,105,118,101,114,115,97,108,32,110,101,119,108,105,110, + 101,32,115,117,112,112,111,114,116,32,105,115,32,117,115,101, + 100,32,105,110,32,116,104,101,32,100,101,99,111,100,105,110, + 103,46,10,32,32,32,32,114,0,0,0,0,78,84,41,7, + 218,8,116,111,107,101,110,105,122,101,114,78,0,0,0,90, + 7,66,121,116,101,115,73,79,90,8,114,101,97,100,108,105, + 110,101,90,15,100,101,116,101,99,116,95,101,110,99,111,100, + 105,110,103,90,25,73,110,99,114,101,109,101,110,116,97,108, + 78,101,119,108,105,110,101,68,101,99,111,100,101,114,218,6, + 100,101,99,111,100,101,41,5,218,12,115,111,117,114,99,101, + 95,98,121,116,101,115,114,182,0,0,0,90,21,115,111,117, + 114,99,101,95,98,121,116,101,115,95,114,101,97,100,108,105, + 110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101, + 119,108,105,110,101,95,100,101,99,111,100,101,114,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,13,100,101, + 99,111,100,101,95,115,111,117,114,99,101,156,2,0,0,115, + 12,0,0,0,8,5,12,1,10,1,12,1,20,1,255,128, + 114,186,0,0,0,169,2,114,150,0,0,0,218,26,115,117, + 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, + 111,99,97,116,105,111,110,115,99,2,0,0,0,0,0,0, + 0,2,0,0,0,9,0,0,0,8,0,0,0,67,0,0, + 0,115,8,1,0,0,124,1,100,1,117,0,114,28,100,2, + 125,1,116,0,124,2,100,3,131,2,114,27,122,7,124,2, + 160,1,124,0,161,1,125,1,87,0,110,14,4,0,116,2, + 121,131,1,0,1,0,1,0,89,0,110,6,110,5,116,3, + 160,4,124,1,161,1,125,1,116,5,106,6,124,0,124,2, + 124,1,100,4,141,3,125,4,100,5,124,4,95,7,124,2, + 100,1,117,0,114,75,116,8,131,0,68,0,93,21,92,2, + 125,5,125,6,124,1,160,9,116,10,124,6,131,1,161,1, + 114,72,124,5,124,0,124,1,131,2,125,2,124,2,124,4, + 95,11,1,0,113,75,113,51,100,1,83,0,124,3,116,12, + 117,0,114,106,116,0,124,2,100,6,131,2,114,105,122,7, + 124,2,160,13,124,0,161,1,125,7,87,0,110,8,4,0, + 116,2,121,130,1,0,1,0,1,0,89,0,110,9,124,7, + 114,105,103,0,124,4,95,14,110,3,124,3,124,4,95,14, + 124,4,106,14,103,0,107,2,114,128,124,1,114,128,116,15, + 124,1,131,1,100,7,25,0,125,8,124,4,106,14,160,16, + 124,8,161,1,1,0,124,4,83,0,119,0,119,0,41,8, + 97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,111, + 100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,32, + 111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,105, + 111,110,46,10,10,32,32,32,32,84,111,32,105,110,100,105, + 99,97,116,101,32,116,104,97,116,32,116,104,101,32,109,111, + 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, + 101,44,32,115,101,116,10,32,32,32,32,115,117,98,109,111, 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, - 116,105,111,110,115,99,2,0,0,0,0,0,0,0,2,0, - 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,8, - 1,0,0,124,1,100,1,117,0,114,28,100,2,125,1,116, - 0,124,2,100,3,131,2,114,27,122,7,124,2,160,1,124, - 0,161,1,125,1,87,0,110,14,4,0,116,2,121,131,1, - 0,1,0,1,0,89,0,110,6,110,5,116,3,160,4,124, - 1,161,1,125,1,116,5,106,6,124,0,124,2,124,1,100, - 4,141,3,125,4,100,5,124,4,95,7,124,2,100,1,117, - 0,114,75,116,8,131,0,68,0,93,21,92,2,125,5,125, - 6,124,1,160,9,116,10,124,6,131,1,161,1,114,72,124, - 5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,1, - 0,113,75,113,51,100,1,83,0,124,3,116,12,117,0,114, - 106,116,0,124,2,100,6,131,2,114,105,122,7,124,2,160, - 13,124,0,161,1,125,7,87,0,110,8,4,0,116,2,121, - 130,1,0,1,0,1,0,89,0,110,9,124,7,114,105,103, - 0,124,4,95,14,110,3,124,3,124,4,95,14,124,4,106, - 14,103,0,107,2,114,128,124,1,114,128,116,15,124,1,131, - 1,100,7,25,0,125,8,124,4,106,14,160,16,124,8,161, - 1,1,0,124,4,83,0,119,0,119,0,41,8,97,61,1, - 0,0,82,101,116,117,114,110,32,97,32,109,111,100,117,108, - 101,32,115,112,101,99,32,98,97,115,101,100,32,111,110,32, - 97,32,102,105,108,101,32,108,111,99,97,116,105,111,110,46, - 10,10,32,32,32,32,84,111,32,105,110,100,105,99,97,116, - 101,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,44,32, - 115,101,116,10,32,32,32,32,115,117,98,109,111,100,117,108, - 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, - 110,115,32,116,111,32,97,32,108,105,115,116,32,111,102,32, - 100,105,114,101,99,116,111,114,121,32,112,97,116,104,115,46, - 32,32,65,110,10,32,32,32,32,101,109,112,116,121,32,108, - 105,115,116,32,105,115,32,115,117,102,102,105,99,105,101,110, - 116,44,32,116,104,111,117,103,104,32,105,116,115,32,110,111, - 116,32,111,116,104,101,114,119,105,115,101,32,117,115,101,102, - 117,108,32,116,111,32,116,104,101,10,32,32,32,32,105,109, - 112,111,114,116,32,115,121,115,116,101,109,46,10,10,32,32, - 32,32,84,104,101,32,108,111,97,100,101,114,32,109,117,115, - 116,32,116,97,107,101,32,97,32,115,112,101,99,32,97,115, - 32,105,116,115,32,111,110,108,121,32,95,95,105,110,105,116, - 95,95,40,41,32,97,114,103,46,10,10,32,32,32,32,78, - 122,9,60,117,110,107,110,111,119,110,62,218,12,103,101,116, - 95,102,105,108,101,110,97,109,101,169,1,218,6,111,114,105, - 103,105,110,84,218,10,105,115,95,112,97,99,107,97,103,101, - 114,0,0,0,0,41,17,114,139,0,0,0,114,189,0,0, - 0,114,128,0,0,0,114,18,0,0,0,114,91,0,0,0, - 114,145,0,0,0,218,10,77,111,100,117,108,101,83,112,101, - 99,90,13,95,115,101,116,95,102,105,108,101,97,116,116,114, - 218,27,95,103,101,116,95,115,117,112,112,111,114,116,101,100, - 95,102,105,108,101,95,108,111,97,100,101,114,115,114,121,0, - 0,0,114,122,0,0,0,114,150,0,0,0,218,9,95,80, - 79,80,85,76,65,84,69,114,192,0,0,0,114,188,0,0, - 0,114,60,0,0,0,218,6,97,112,112,101,110,100,41,9, - 114,127,0,0,0,90,8,108,111,99,97,116,105,111,110,114, - 150,0,0,0,114,188,0,0,0,218,4,115,112,101,99,218, - 12,108,111,97,100,101,114,95,99,108,97,115,115,218,8,115, - 117,102,102,105,120,101,115,114,192,0,0,0,90,7,100,105, - 114,110,97,109,101,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,23,115,112,101,99,95,102,114,111,109,95, - 102,105,108,101,95,108,111,99,97,116,105,111,110,170,2,0, - 0,115,74,0,0,0,8,12,4,4,10,1,2,2,14,1, - 12,1,4,1,2,251,10,7,16,8,6,1,8,3,14,1, - 14,1,10,1,6,1,4,1,2,253,4,5,8,3,10,2, - 2,1,14,1,12,1,4,1,4,2,6,1,2,128,6,2, - 10,1,4,1,12,1,12,1,4,2,2,244,2,226,255,128, - 114,200,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,88, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,90,4,100,3,90,5,101,6,111,15,100,4,101,7,118, - 0,90,8,101,9,100,5,100,6,132,0,131,1,90,10,101, - 11,100,7,100,8,132,0,131,1,90,12,101,11,100,14,100, - 10,100,11,132,1,131,1,90,13,101,11,100,15,100,12,100, - 13,132,1,131,1,90,14,100,9,83,0,41,16,218,21,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, - 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108, - 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116, - 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115, - 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80, + 116,105,111,110,115,32,116,111,32,97,32,108,105,115,116,32, + 111,102,32,100,105,114,101,99,116,111,114,121,32,112,97,116, + 104,115,46,32,32,65,110,10,32,32,32,32,101,109,112,116, + 121,32,108,105,115,116,32,105,115,32,115,117,102,102,105,99, + 105,101,110,116,44,32,116,104,111,117,103,104,32,105,116,115, + 32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,117, + 115,101,102,117,108,32,116,111,32,116,104,101,10,32,32,32, + 32,105,109,112,111,114,116,32,115,121,115,116,101,109,46,10, + 10,32,32,32,32,84,104,101,32,108,111,97,100,101,114,32, + 109,117,115,116,32,116,97,107,101,32,97,32,115,112,101,99, + 32,97,115,32,105,116,115,32,111,110,108,121,32,95,95,105, + 110,105,116,95,95,40,41,32,97,114,103,46,10,10,32,32, + 32,32,78,122,9,60,117,110,107,110,111,119,110,62,218,12, + 103,101,116,95,102,105,108,101,110,97,109,101,169,1,218,6, + 111,114,105,103,105,110,84,218,10,105,115,95,112,97,99,107, + 97,103,101,114,0,0,0,0,41,17,114,139,0,0,0,114, + 189,0,0,0,114,128,0,0,0,114,18,0,0,0,114,91, + 0,0,0,114,145,0,0,0,218,10,77,111,100,117,108,101, + 83,112,101,99,90,13,95,115,101,116,95,102,105,108,101,97, + 116,116,114,218,27,95,103,101,116,95,115,117,112,112,111,114, + 116,101,100,95,102,105,108,101,95,108,111,97,100,101,114,115, + 114,121,0,0,0,114,122,0,0,0,114,150,0,0,0,218, + 9,95,80,79,80,85,76,65,84,69,114,192,0,0,0,114, + 188,0,0,0,114,60,0,0,0,218,6,97,112,112,101,110, + 100,41,9,114,127,0,0,0,90,8,108,111,99,97,116,105, + 111,110,114,150,0,0,0,114,188,0,0,0,218,4,115,112, + 101,99,218,12,108,111,97,100,101,114,95,99,108,97,115,115, + 218,8,115,117,102,102,105,120,101,115,114,192,0,0,0,90, + 7,100,105,114,110,97,109,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,23,115,112,101,99,95,102,114, + 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, + 173,2,0,0,115,74,0,0,0,8,12,4,4,10,1,2, + 2,14,1,12,1,4,1,2,251,10,7,16,8,6,1,8, + 3,14,1,14,1,10,1,6,1,4,1,2,253,4,5,8, + 3,10,2,2,1,14,1,12,1,4,1,4,2,6,1,2, + 128,6,2,10,1,4,1,12,1,12,1,4,2,2,244,2, + 226,255,128,114,200,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, + 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, + 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, + 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, + 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, + 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, + 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, + 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, + 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, + 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, + 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, + 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, + 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, + 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, + 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, - 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104, - 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, - 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, - 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68, - 101,98,117,103,122,6,95,100,46,112,121,100,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0, - 0,67,0,0,0,115,50,0,0,0,122,8,116,0,160,1, - 116,0,106,2,124,0,161,2,87,0,83,0,4,0,116,3, - 121,24,1,0,1,0,1,0,116,0,160,1,116,0,106,4, - 124,0,161,2,6,0,89,0,83,0,119,0,114,120,0,0, - 0,41,5,218,6,119,105,110,114,101,103,90,7,79,112,101, - 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, - 78,84,95,85,83,69,82,114,63,0,0,0,90,18,72,75, - 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, - 114,19,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,14,95,111,112,101,110,95,114,101,103,105, - 115,116,114,121,250,2,0,0,115,12,0,0,0,2,2,16, - 1,12,1,18,1,2,255,255,128,122,36,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, - 2,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 8,0,0,0,67,0,0,0,115,130,0,0,0,124,0,106, - 0,114,7,124,0,106,1,125,2,110,3,124,0,106,2,125, - 2,124,2,106,3,124,1,100,1,116,4,106,5,100,0,100, - 2,133,2,25,0,22,0,100,3,141,2,125,3,122,30,124, - 0,160,6,124,3,161,1,143,14,125,4,116,7,160,8,124, - 4,100,4,161,2,125,5,87,0,100,0,4,0,4,0,131, - 3,1,0,110,8,49,0,115,47,119,1,1,0,1,0,1, - 0,89,0,1,0,87,0,124,5,83,0,4,0,116,9,121, - 64,1,0,1,0,1,0,89,0,100,0,83,0,119,0,41, - 5,78,122,5,37,100,46,37,100,114,44,0,0,0,41,2, - 114,149,0,0,0,90,11,115,121,115,95,118,101,114,115,105, - 111,110,114,10,0,0,0,41,10,218,11,68,69,66,85,71, - 95,66,85,73,76,68,218,18,82,69,71,73,83,84,82,89, - 95,75,69,89,95,68,69,66,85,71,218,12,82,69,71,73, - 83,84,82,89,95,75,69,89,114,76,0,0,0,114,15,0, - 0,0,218,12,118,101,114,115,105,111,110,95,105,110,102,111, - 114,203,0,0,0,114,202,0,0,0,90,10,81,117,101,114, - 121,86,97,108,117,101,114,63,0,0,0,41,6,218,3,99, - 108,115,114,149,0,0,0,90,12,114,101,103,105,115,116,114, - 121,95,107,101,121,114,20,0,0,0,90,4,104,107,101,121, - 218,8,102,105,108,101,112,97,116,104,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,16,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,1,3,0,0,115, - 30,0,0,0,6,2,8,1,6,2,6,1,16,1,6,255, - 2,2,12,1,26,1,18,128,4,3,12,254,6,1,2,255, - 255,128,122,38,87,105,110,100,111,119,115,82,101,103,105,115, - 116,114,121,70,105,110,100,101,114,46,95,115,101,97,114,99, - 104,95,114,101,103,105,115,116,114,121,78,99,4,0,0,0, - 0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0, - 67,0,0,0,115,120,0,0,0,124,0,160,0,124,1,161, - 1,125,4,124,4,100,0,117,0,114,11,100,0,83,0,122, - 6,116,1,124,4,131,1,1,0,87,0,110,9,4,0,116, - 2,121,59,1,0,1,0,1,0,89,0,100,0,83,0,116, - 3,131,0,68,0,93,26,92,2,125,5,125,6,124,4,160, - 4,116,5,124,6,131,1,161,1,114,56,116,6,106,7,124, - 1,124,5,124,1,124,4,131,2,124,4,100,1,141,3,125, - 7,124,7,2,0,1,0,83,0,113,30,100,0,83,0,119, - 0,41,2,78,114,190,0,0,0,41,8,114,210,0,0,0, - 114,62,0,0,0,114,63,0,0,0,114,194,0,0,0,114, - 121,0,0,0,114,122,0,0,0,114,145,0,0,0,218,16, - 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114, - 41,8,114,208,0,0,0,114,149,0,0,0,114,57,0,0, - 0,218,6,116,97,114,103,101,116,114,209,0,0,0,114,150, - 0,0,0,114,199,0,0,0,114,197,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,9,102,105, - 110,100,95,115,112,101,99,16,3,0,0,115,36,0,0,0, - 10,2,8,1,4,1,2,1,12,1,12,1,6,1,14,1, - 14,1,6,1,8,1,2,1,6,254,8,3,2,252,4,255, - 2,254,255,128,122,31,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,30, - 0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,124, - 3,100,1,117,1,114,13,124,3,106,1,83,0,100,1,83, - 0,41,2,122,108,70,105,110,100,32,109,111,100,117,108,101, - 32,110,97,109,101,100,32,105,110,32,116,104,101,32,114,101, - 103,105,115,116,114,121,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, - 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,169,2,114,213,0,0,0,114,150,0,0,0,169,4, - 114,208,0,0,0,114,149,0,0,0,114,57,0,0,0,114, - 197,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, - 32,3,0,0,115,10,0,0,0,12,7,8,1,6,1,4, - 2,255,128,122,33,87,105,110,100,111,119,115,82,101,103,105, - 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, - 109,111,100,117,108,101,41,2,78,78,41,1,78,41,15,114, - 136,0,0,0,114,135,0,0,0,114,137,0,0,0,114,138, - 0,0,0,114,206,0,0,0,114,205,0,0,0,218,11,95, - 77,83,95,87,73,78,68,79,87,83,218,18,69,88,84,69, - 78,83,73,79,78,95,83,85,70,70,73,88,69,83,114,204, - 0,0,0,218,12,115,116,97,116,105,99,109,101,116,104,111, - 100,114,203,0,0,0,218,11,99,108,97,115,115,109,101,116, - 104,111,100,114,210,0,0,0,114,213,0,0,0,114,216,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,201,0,0,0,238,2,0,0,115, - 32,0,0,0,8,0,4,2,2,3,2,255,2,4,2,255, - 12,3,2,2,10,1,2,6,10,1,2,14,12,1,2,15, - 16,1,255,128,114,201,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,48,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, - 0,90,7,100,10,83,0,41,11,218,13,95,76,111,97,100, - 101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99, - 108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99, - 111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111, - 116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32, - 97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, - 0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,160, - 1,124,1,161,1,131,1,100,1,25,0,125,2,124,2,160, - 2,100,2,100,1,161,2,100,3,25,0,125,3,124,1,160, - 3,100,2,161,1,100,4,25,0,125,4,124,3,100,5,107, - 2,111,31,124,4,100,5,107,3,83,0,41,7,122,141,67, - 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, - 116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105, - 102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97, - 116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103, - 101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32, - 97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95, - 95,105,110,105,116,95,95,46,112,121,39,46,114,3,0,0, - 0,114,85,0,0,0,114,0,0,0,0,114,44,0,0,0, - 218,8,95,95,105,110,105,116,95,95,78,41,4,114,60,0, - 0,0,114,189,0,0,0,114,56,0,0,0,114,54,0,0, - 0,41,5,114,129,0,0,0,114,149,0,0,0,114,107,0, - 0,0,90,13,102,105,108,101,110,97,109,101,95,98,97,115, - 101,90,9,116,97,105,108,95,110,97,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,192,0,0,0, - 51,3,0,0,115,10,0,0,0,18,3,16,1,14,1,16, - 1,255,128,122,24,95,76,111,97,100,101,114,66,97,115,105, - 99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,114,23,0,0,0,169,2,122,42,85, - 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, - 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, - 99,114,101,97,116,105,111,110,46,78,114,7,0,0,0,169, - 2,114,129,0,0,0,114,197,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,13,99,114,101,97, - 116,101,95,109,111,100,117,108,101,59,3,0,0,243,4,0, - 0,0,4,0,255,128,122,27,95,76,111,97,100,101,114,66, - 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, + 125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, + 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, + 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, + 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, + 120,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, + 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, + 82,82,69,78,84,95,85,83,69,82,114,63,0,0,0,90, + 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, + 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, + 101,103,105,115,116,114,121,253,2,0,0,115,12,0,0,0, + 2,2,16,1,12,1,18,1,2,255,255,128,122,36,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, + 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0, + 124,0,106,0,114,7,124,0,106,1,125,2,110,3,124,0, + 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5, + 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3, + 122,30,124,0,160,6,124,3,161,1,143,14,125,4,116,7, + 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0, + 4,0,131,3,1,0,110,8,49,0,115,47,119,1,1,0, + 1,0,1,0,89,0,1,0,87,0,124,5,83,0,4,0, + 116,9,121,64,1,0,1,0,1,0,89,0,100,0,83,0, + 119,0,41,5,78,122,5,37,100,46,37,100,114,44,0,0, + 0,41,2,114,149,0,0,0,90,11,115,121,115,95,118,101, + 114,115,105,111,110,114,10,0,0,0,41,10,218,11,68,69, + 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, + 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, + 69,71,73,83,84,82,89,95,75,69,89,114,76,0,0,0, + 114,15,0,0,0,218,12,118,101,114,115,105,111,110,95,105, + 110,102,111,114,203,0,0,0,114,202,0,0,0,90,10,81, + 117,101,114,121,86,97,108,117,101,114,63,0,0,0,41,6, + 218,3,99,108,115,114,149,0,0,0,90,12,114,101,103,105, + 115,116,114,121,95,107,101,121,114,20,0,0,0,90,4,104, + 107,101,121,218,8,102,105,108,101,112,97,116,104,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,115, + 101,97,114,99,104,95,114,101,103,105,115,116,114,121,4,3, + 0,0,115,30,0,0,0,6,2,8,1,6,2,6,1,16, + 1,6,255,2,2,12,1,26,1,18,128,4,3,12,254,6, + 1,2,255,255,128,122,38,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,114,101,103,105,115,116,114,121,78,99,4, + 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8, + 0,0,0,67,0,0,0,115,120,0,0,0,124,0,160,0, + 124,1,161,1,125,4,124,4,100,0,117,0,114,11,100,0, + 83,0,122,6,116,1,124,4,131,1,1,0,87,0,110,9, + 4,0,116,2,121,59,1,0,1,0,1,0,89,0,100,0, + 83,0,116,3,131,0,68,0,93,26,92,2,125,5,125,6, + 124,4,160,4,116,5,124,6,131,1,161,1,114,56,116,6, + 106,7,124,1,124,5,124,1,124,4,131,2,124,4,100,1, + 141,3,125,7,124,7,2,0,1,0,83,0,113,30,100,0, + 83,0,119,0,41,2,78,114,190,0,0,0,41,8,114,210, + 0,0,0,114,62,0,0,0,114,63,0,0,0,114,194,0, + 0,0,114,121,0,0,0,114,122,0,0,0,114,145,0,0, + 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, + 100,101,114,41,8,114,208,0,0,0,114,149,0,0,0,114, + 57,0,0,0,218,6,116,97,114,103,101,116,114,209,0,0, + 0,114,150,0,0,0,114,199,0,0,0,114,197,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 9,102,105,110,100,95,115,112,101,99,19,3,0,0,115,36, + 0,0,0,10,2,8,1,4,1,2,1,12,1,12,1,6, + 1,14,1,14,1,6,1,8,1,2,1,6,254,8,3,2, + 252,4,255,2,254,255,128,122,31,87,105,110,100,111,119,115, + 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, + 0,115,42,0,0,0,116,0,160,1,100,1,116,2,161,2, + 1,0,124,0,160,3,124,1,124,2,161,2,125,3,124,3, + 100,2,117,1,114,19,124,3,106,4,83,0,100,2,83,0, + 41,3,122,106,70,105,110,100,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, + 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,112, + 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, + 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,46,49,50,59,32,117,115,101,32,102,105,110, + 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, + 78,169,5,114,87,0,0,0,114,88,0,0,0,114,89,0, + 0,0,114,213,0,0,0,114,150,0,0,0,169,4,114,208, + 0,0,0,114,149,0,0,0,114,57,0,0,0,114,197,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,11,102,105,110,100,95,109,111,100,117,108,101,35,3, + 0,0,115,16,0,0,0,6,7,2,2,4,254,12,3,8, + 1,6,1,4,2,255,128,122,33,87,105,110,100,111,119,115, + 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, + 105,110,100,95,109,111,100,117,108,101,41,2,78,78,41,1, + 78,41,15,114,136,0,0,0,114,135,0,0,0,114,137,0, + 0,0,114,138,0,0,0,114,206,0,0,0,114,205,0,0, + 0,218,11,95,77,83,95,87,73,78,68,79,87,83,218,18, + 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, + 69,83,114,204,0,0,0,218,12,115,116,97,116,105,99,109, + 101,116,104,111,100,114,203,0,0,0,218,11,99,108,97,115, + 115,109,101,116,104,111,100,114,210,0,0,0,114,213,0,0, + 0,114,216,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,201,0,0,0,241, + 2,0,0,115,32,0,0,0,8,0,4,2,2,3,2,255, + 2,4,2,255,12,3,2,2,10,1,2,6,10,1,2,14, + 12,1,2,15,16,1,255,128,114,201,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,48,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, + 8,100,9,132,0,90,7,100,10,83,0,41,11,218,13,95, + 76,111,97,100,101,114,66,97,115,105,99,115,122,83,66,97, + 115,101,32,99,108,97,115,115,32,111,102,32,99,111,109,109, + 111,110,32,99,111,100,101,32,110,101,101,100,101,100,32,98, + 121,32,98,111,116,104,32,83,111,117,114,99,101,76,111,97, + 100,101,114,32,97,110,100,10,32,32,32,32,83,111,117,114, + 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, + 46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,4,0,0,0,67,0,0,0,115,64,0,0,0,116, + 0,124,0,160,1,124,1,161,1,131,1,100,1,25,0,125, + 2,124,2,160,2,100,2,100,1,161,2,100,3,25,0,125, + 3,124,1,160,3,100,2,161,1,100,4,25,0,125,4,124, + 3,100,5,107,2,111,31,124,4,100,5,107,3,83,0,41, + 7,122,141,67,111,110,99,114,101,116,101,32,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, + 115,112,101,99,116,76,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,32,98,121,32,99,104,101,99,107,105, + 110,103,32,105,102,10,32,32,32,32,32,32,32,32,116,104, + 101,32,112,97,116,104,32,114,101,116,117,114,110,101,100,32, + 98,121,32,103,101,116,95,102,105,108,101,110,97,109,101,32, + 104,97,115,32,97,32,102,105,108,101,110,97,109,101,32,111, + 102,32,39,95,95,105,110,105,116,95,95,46,112,121,39,46, + 114,3,0,0,0,114,85,0,0,0,114,0,0,0,0,114, + 44,0,0,0,218,8,95,95,105,110,105,116,95,95,78,41, + 4,114,60,0,0,0,114,189,0,0,0,114,56,0,0,0, + 114,54,0,0,0,41,5,114,129,0,0,0,114,149,0,0, + 0,114,107,0,0,0,90,13,102,105,108,101,110,97,109,101, + 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 192,0,0,0,57,3,0,0,115,10,0,0,0,18,3,16, + 1,14,1,16,1,255,128,122,24,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,169, + 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, + 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, + 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,7, + 0,0,0,169,2,114,129,0,0,0,114,197,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, + 99,114,101,97,116,101,95,109,111,100,117,108,101,65,3,0, + 0,243,4,0,0,0,4,0,255,128,122,27,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, + 115,56,0,0,0,124,0,160,0,124,1,106,1,161,1,125, + 2,124,2,100,1,117,0,114,18,116,2,100,2,160,3,124, + 1,106,1,161,1,131,1,130,1,116,4,160,5,116,6,124, + 2,124,1,106,7,161,3,1,0,100,1,83,0,41,3,122, + 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, + 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, + 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, + 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, + 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, + 101,116,95,99,111,100,101,114,136,0,0,0,114,128,0,0, + 0,114,76,0,0,0,114,145,0,0,0,218,25,95,99,97, + 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, + 101,109,111,118,101,100,218,4,101,120,101,99,114,142,0,0, + 0,41,3,114,129,0,0,0,218,6,109,111,100,117,108,101, + 114,174,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, + 101,68,3,0,0,115,14,0,0,0,12,2,8,1,4,1, + 8,1,4,255,20,2,255,128,122,25,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,5,0,0,0,67,0,0,0,115,56,0,0, - 0,124,0,160,0,124,1,106,1,161,1,125,2,124,2,100, - 1,117,0,114,18,116,2,100,2,160,3,124,1,106,1,161, - 1,131,1,130,1,116,4,160,5,116,6,124,2,124,1,106, - 7,161,3,1,0,100,1,83,0,41,3,122,19,69,120,101, - 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, - 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, - 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, - 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, - 110,115,32,78,111,110,101,41,8,218,8,103,101,116,95,99, - 111,100,101,114,136,0,0,0,114,128,0,0,0,114,76,0, - 0,0,114,145,0,0,0,218,25,95,99,97,108,108,95,119, - 105,116,104,95,102,114,97,109,101,115,95,114,101,109,111,118, - 101,100,218,4,101,120,101,99,114,142,0,0,0,41,3,114, - 129,0,0,0,218,6,109,111,100,117,108,101,114,174,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,11,101,120,101,99,95,109,111,100,117,108,101,62,3,0, - 0,115,14,0,0,0,12,2,8,1,4,1,8,1,4,255, - 20,2,255,128,122,25,95,76,111,97,100,101,114,66,97,115, - 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, - 1,124,0,124,1,161,2,83,0,41,2,122,26,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,78,41,2,114,145,0,0,0,218, - 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, - 105,109,169,2,114,129,0,0,0,114,149,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,108, - 111,97,100,95,109,111,100,117,108,101,70,3,0,0,115,4, - 0,0,0,12,3,255,128,122,25,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,117, - 108,101,78,41,8,114,136,0,0,0,114,135,0,0,0,114, - 137,0,0,0,114,138,0,0,0,114,192,0,0,0,114,225, - 0,0,0,114,231,0,0,0,114,234,0,0,0,114,7,0, + 2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0, + 0,116,0,160,1,124,0,124,1,161,2,83,0,41,2,122, + 26,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,78,41,2,114,145, + 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, + 101,95,115,104,105,109,169,2,114,129,0,0,0,114,149,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,221,0,0,0,46,3,0,0,115,14,0,0,0,8, - 0,4,2,8,3,8,8,8,3,12,8,255,128,114,221,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0, - 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, - 100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,5, - 100,7,100,8,132,0,90,6,100,9,100,10,132,0,90,7, - 100,11,100,12,156,1,100,13,100,14,132,2,90,8,100,15, - 100,16,132,0,90,9,100,17,83,0,41,18,218,12,83,111, - 117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,116,0,130,1,41,2,122,165, - 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, - 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, - 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, - 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, - 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, - 105,102,105,101,100,32,112,97,116,104,32,40,97,32,115,116, - 114,41,46,10,10,32,32,32,32,32,32,32,32,82,97,105, - 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, - 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, - 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, - 32,32,32,32,32,78,41,1,114,63,0,0,0,169,2,114, - 129,0,0,0,114,57,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,10,112,97,116,104,95,109, - 116,105,109,101,78,3,0,0,115,4,0,0,0,4,6,255, - 128,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, - 112,97,116,104,95,109,116,105,109,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, - 0,0,0,115,14,0,0,0,100,1,124,0,160,0,124,1, - 161,1,105,1,83,0,41,3,97,158,1,0,0,79,112,116, - 105,111,110,97,108,32,109,101,116,104,111,100,32,114,101,116, - 117,114,110,105,110,103,32,97,32,109,101,116,97,100,97,116, - 97,32,100,105,99,116,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,10,32,32,32,32,32,32,32, - 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, - 32,32,32,32,32,32,32,32,80,111,115,115,105,98,108,101, - 32,107,101,121,115,58,10,32,32,32,32,32,32,32,32,45, - 32,39,109,116,105,109,101,39,32,40,109,97,110,100,97,116, - 111,114,121,41,32,105,115,32,116,104,101,32,110,117,109,101, - 114,105,99,32,116,105,109,101,115,116,97,109,112,32,111,102, - 32,108,97,115,116,32,115,111,117,114,99,101,10,32,32,32, - 32,32,32,32,32,32,32,99,111,100,101,32,109,111,100,105, - 102,105,99,97,116,105,111,110,59,10,32,32,32,32,32,32, - 32,32,45,32,39,115,105,122,101,39,32,40,111,112,116,105, - 111,110,97,108,41,32,105,115,32,116,104,101,32,115,105,122, - 101,32,105,110,32,98,121,116,101,115,32,111,102,32,116,104, - 101,32,115,111,117,114,99,101,32,99,111,100,101,46,10,10, - 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, - 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, - 32,97,108,108,111,119,115,32,116,104,101,32,108,111,97,100, - 101,114,32,116,111,32,114,101,97,100,32,98,121,116,101,99, - 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, - 32,32,32,82,97,105,115,101,115,32,79,83,69,114,114,111, - 114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32, - 99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101, - 100,46,10,32,32,32,32,32,32,32,32,114,179,0,0,0, - 78,41,1,114,237,0,0,0,114,236,0,0,0,114,7,0, + 0,218,11,108,111,97,100,95,109,111,100,117,108,101,76,3, + 0,0,115,4,0,0,0,12,3,255,128,122,25,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, + 109,111,100,117,108,101,78,41,8,114,136,0,0,0,114,135, + 0,0,0,114,137,0,0,0,114,138,0,0,0,114,192,0, + 0,0,114,225,0,0,0,114,231,0,0,0,114,234,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,221,0,0,0,52,3,0,0,115,14, + 0,0,0,8,0,4,2,8,3,8,8,8,3,12,8,255, + 128,114,221,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, + 74,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, + 132,0,90,5,100,7,100,8,132,0,90,6,100,9,100,10, + 132,0,90,7,100,11,100,12,156,1,100,13,100,14,132,2, + 90,8,100,15,100,16,132,0,90,9,100,17,83,0,41,18, + 218,12,83,111,117,114,99,101,76,111,97,100,101,114,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,116,0,130,1, + 41,2,122,165,79,112,116,105,111,110,97,108,32,109,101,116, + 104,111,100,32,116,104,97,116,32,114,101,116,117,114,110,115, + 32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111, + 110,32,116,105,109,101,32,40,97,110,32,105,110,116,41,32, + 102,111,114,32,116,104,101,10,32,32,32,32,32,32,32,32, + 115,112,101,99,105,102,105,101,100,32,112,97,116,104,32,40, + 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, + 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32, + 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97, + 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46, + 10,32,32,32,32,32,32,32,32,78,41,1,114,63,0,0, + 0,169,2,114,129,0,0,0,114,57,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,218,10,112,97, - 116,104,95,115,116,97,116,115,86,3,0,0,115,4,0,0, - 0,14,12,255,128,122,23,83,111,117,114,99,101,76,111,97, - 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, - 0,0,0,67,0,0,0,115,12,0,0,0,124,0,160,0, - 124,2,124,3,161,2,83,0,41,2,122,228,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, - 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, - 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, - 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, - 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, - 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, - 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, - 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, - 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, - 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, - 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, - 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, - 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, - 78,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, - 129,0,0,0,114,118,0,0,0,90,10,99,97,99,104,101, - 95,112,97,116,104,114,41,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,15,95,99,97,99,104, - 101,95,98,121,116,101,99,111,100,101,100,3,0,0,115,4, - 0,0,0,12,8,255,128,122,28,83,111,117,114,99,101,76, - 111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,1,0,0,0,67,0,0,0,114,23, - 0,0,0,41,2,122,150,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, - 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, - 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, - 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,7, - 0,0,0,41,3,114,129,0,0,0,114,57,0,0,0,114, - 41,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,239,0,0,0,110,3,0,0,114,226,0,0, - 0,122,21,83,111,117,114,99,101,76,111,97,100,101,114,46, - 115,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,10,0,0,0,67,0,0, - 0,115,70,0,0,0,124,0,160,0,124,1,161,1,125,2, - 122,10,124,0,160,1,124,2,161,1,125,3,87,0,116,4, - 124,3,131,1,83,0,4,0,116,2,121,34,1,0,125,4, - 1,0,122,7,116,3,100,1,124,1,100,2,141,2,124,4, - 130,2,100,3,125,4,126,4,119,1,119,0,41,4,122,52, - 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, - 99,116,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,46,122,39,115,111,117,114,99,101,32,110,111,116, - 32,97,118,97,105,108,97,98,108,101,32,116,104,114,111,117, - 103,104,32,103,101,116,95,100,97,116,97,40,41,114,126,0, - 0,0,78,41,5,114,189,0,0,0,218,8,103,101,116,95, - 100,97,116,97,114,63,0,0,0,114,128,0,0,0,114,186, - 0,0,0,41,5,114,129,0,0,0,114,149,0,0,0,114, - 57,0,0,0,114,184,0,0,0,218,3,101,120,99,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,10,103, - 101,116,95,115,111,117,114,99,101,117,3,0,0,115,26,0, - 0,0,10,2,2,1,12,1,8,4,14,253,4,1,2,1, - 4,255,2,1,2,255,8,128,2,255,255,128,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,114,115,0,0,0,41,1,218,9,95,111, - 112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0, - 1,0,0,0,4,0,0,0,8,0,0,0,67,0,0,0, - 115,22,0,0,0,116,0,106,1,116,2,124,1,124,2,100, - 1,100,2,124,3,100,3,141,6,83,0,41,5,122,130,82, - 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, - 98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102, - 114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32, - 97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32, - 97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32, - 116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115, - 117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32, - 32,114,229,0,0,0,84,41,2,218,12,100,111,110,116,95, - 105,110,104,101,114,105,116,114,95,0,0,0,78,41,3,114, - 145,0,0,0,114,228,0,0,0,218,7,99,111,109,112,105, - 108,101,41,4,114,129,0,0,0,114,41,0,0,0,114,57, - 0,0,0,114,244,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,14,115,111,117,114,99,101,95, - 116,111,95,99,111,100,101,127,3,0,0,115,8,0,0,0, - 12,5,4,1,6,255,255,128,122,27,83,111,117,114,99,101, - 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, - 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,15,0,0,0,9,0,0,0,67,0,0,0,115,12, - 2,0,0,124,0,160,0,124,1,161,1,125,2,100,1,125, - 3,100,1,125,4,100,1,125,5,100,2,125,6,100,3,125, - 7,122,6,116,1,124,2,131,1,125,8,87,0,110,11,4, - 0,116,2,144,1,121,5,1,0,1,0,1,0,100,1,125, - 8,89,0,110,143,122,7,124,0,160,3,124,2,161,1,125, - 9,87,0,110,9,4,0,116,4,144,1,121,4,1,0,1, - 0,1,0,89,0,110,126,116,5,124,9,100,4,25,0,131, - 1,125,3,122,7,124,0,160,6,124,8,161,1,125,10,87, - 0,110,9,4,0,116,4,144,1,121,3,1,0,1,0,1, - 0,89,0,110,103,124,1,124,8,100,5,156,2,125,11,122, - 71,116,7,124,10,124,1,124,11,131,3,125,12,116,8,124, - 10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,100, - 7,64,0,100,8,107,3,125,6,124,6,114,138,124,12,100, - 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107, - 3,114,137,124,7,115,119,116,9,106,10,100,11,107,2,114, - 137,124,0,160,6,124,2,161,1,125,4,116,9,160,11,116, - 12,124,4,161,2,125,5,116,13,124,10,124,5,124,1,124, - 11,131,4,1,0,110,10,116,14,124,10,124,3,124,9,100, - 12,25,0,124,1,124,11,131,5,1,0,87,0,110,11,4, - 0,116,15,116,16,102,2,144,1,121,2,1,0,1,0,1, - 0,89,0,110,15,116,17,160,18,100,13,124,8,124,2,161, - 3,1,0,116,19,124,13,124,1,124,8,124,2,100,14,141, - 4,83,0,124,4,100,1,117,0,114,185,124,0,160,6,124, - 2,161,1,125,4,124,0,160,20,124,4,124,2,161,2,125, - 14,116,17,160,18,100,15,124,2,161,2,1,0,116,21,106, - 22,115,255,124,8,100,1,117,1,114,255,124,3,100,1,117, - 1,114,255,124,6,114,226,124,5,100,1,117,0,114,219,116, - 9,160,11,124,4,161,1,125,5,116,23,124,14,124,5,124, - 7,131,3,125,10,110,8,116,24,124,14,124,3,116,25,124, - 4,131,1,131,3,125,10,122,10,124,0,160,26,124,2,124, - 8,124,10,161,3,1,0,87,0,124,14,83,0,4,0,116, - 2,144,1,121,1,1,0,1,0,1,0,89,0,124,14,83, - 0,124,14,83,0,119,0,119,0,119,0,119,0,119,0,41, - 16,122,190,67,111,110,99,114,101,116,101,32,105,109,112,108, - 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, - 115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,82, - 101,97,100,105,110,103,32,111,102,32,98,121,116,101,99,111, - 100,101,32,114,101,113,117,105,114,101,115,32,112,97,116,104, - 95,115,116,97,116,115,32,116,111,32,98,101,32,105,109,112, - 108,101,109,101,110,116,101,100,46,32,84,111,32,119,114,105, - 116,101,10,32,32,32,32,32,32,32,32,98,121,116,101,99, - 111,100,101,44,32,115,101,116,95,100,97,116,97,32,109,117, - 115,116,32,97,108,115,111,32,98,101,32,105,109,112,108,101, - 109,101,110,116,101,100,46,10,10,32,32,32,32,32,32,32, - 32,78,70,84,114,179,0,0,0,114,169,0,0,0,114,155, - 0,0,0,114,3,0,0,0,114,0,0,0,0,114,44,0, - 0,0,90,5,110,101,118,101,114,90,6,97,108,119,97,121, - 115,218,4,115,105,122,101,122,13,123,125,32,109,97,116,99, - 104,101,115,32,123,125,41,3,114,127,0,0,0,114,117,0, - 0,0,114,118,0,0,0,122,19,99,111,100,101,32,111,98, - 106,101,99,116,32,102,114,111,109,32,123,125,41,27,114,189, - 0,0,0,114,108,0,0,0,114,94,0,0,0,114,238,0, - 0,0,114,63,0,0,0,114,33,0,0,0,114,241,0,0, - 0,114,162,0,0,0,218,10,109,101,109,111,114,121,118,105, - 101,119,114,173,0,0,0,90,21,99,104,101,99,107,95,104, - 97,115,104,95,98,97,115,101,100,95,112,121,99,115,114,167, - 0,0,0,218,17,95,82,65,87,95,77,65,71,73,67,95, - 78,85,77,66,69,82,114,168,0,0,0,114,166,0,0,0, - 114,128,0,0,0,114,160,0,0,0,114,145,0,0,0,114, - 159,0,0,0,114,175,0,0,0,114,247,0,0,0,114,15, - 0,0,0,218,19,100,111,110,116,95,119,114,105,116,101,95, - 98,121,116,101,99,111,100,101,114,181,0,0,0,114,180,0, - 0,0,114,4,0,0,0,114,240,0,0,0,41,15,114,129, - 0,0,0,114,149,0,0,0,114,118,0,0,0,114,164,0, - 0,0,114,184,0,0,0,114,167,0,0,0,90,10,104,97, - 115,104,95,98,97,115,101,100,90,12,99,104,101,99,107,95, - 115,111,117,114,99,101,114,117,0,0,0,218,2,115,116,114, - 41,0,0,0,114,161,0,0,0,114,16,0,0,0,90,10, - 98,121,116,101,115,95,100,97,116,97,90,11,99,111,100,101, - 95,111,98,106,101,99,116,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,227,0,0,0,135,3,0,0,115, - 170,0,0,0,10,7,4,1,4,1,4,1,4,1,4,1, - 2,1,12,1,14,1,8,1,2,2,14,1,14,1,4,1, - 12,2,2,1,14,1,14,1,4,1,2,3,2,1,6,254, - 2,4,12,1,16,1,12,1,4,1,12,1,10,1,2,1, - 2,255,8,2,2,254,10,3,4,1,2,1,2,1,4,254, - 8,4,2,1,4,255,2,128,2,3,2,1,2,1,6,1, - 2,1,2,1,4,251,4,128,18,7,4,1,8,2,2,1, - 4,255,6,2,2,1,2,1,6,254,8,3,10,1,12,1, - 12,1,14,1,6,1,2,255,4,2,8,1,10,1,14,1, - 6,2,6,1,4,255,2,2,16,1,4,3,14,254,2,1, - 8,1,2,254,2,233,2,225,2,250,2,251,255,128,122,21, - 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,78,41,10,114,136,0,0,0,114,135,0, - 0,0,114,137,0,0,0,114,237,0,0,0,114,238,0,0, - 0,114,240,0,0,0,114,239,0,0,0,114,243,0,0,0, - 114,247,0,0,0,114,227,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,235, - 0,0,0,76,3,0,0,115,18,0,0,0,8,0,8,2, - 8,8,8,14,8,10,8,7,14,10,12,8,255,128,114,235, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,0,0,0,0,115,92,0,0, - 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, - 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, - 7,132,0,90,6,101,7,135,0,102,1,100,8,100,9,132, - 8,131,1,90,8,101,7,100,10,100,11,132,0,131,1,90, - 9,100,12,100,13,132,0,90,10,101,7,100,14,100,15,132, - 0,131,1,90,11,135,0,4,0,90,12,83,0,41,16,218, - 10,70,105,108,101,76,111,97,100,101,114,122,103,66,97,115, - 101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,108, - 97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,109, - 101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,32, - 112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,115, - 32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,114, - 101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,115, - 97,103,101,46,99,3,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,1, - 83,0,41,2,122,75,67,97,99,104,101,32,116,104,101,32, - 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, - 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, - 46,78,114,169,0,0,0,41,3,114,129,0,0,0,114,149, - 0,0,0,114,57,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,222,0,0,0,225,3,0,0, - 115,6,0,0,0,6,3,10,1,255,128,122,19,70,105,108, - 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,243,24,0,0,0,124,0, - 106,0,124,1,106,0,107,2,111,11,124,0,106,1,124,1, - 106,1,107,2,83,0,114,120,0,0,0,169,2,218,9,95, - 95,99,108,97,115,115,95,95,114,142,0,0,0,169,2,114, - 129,0,0,0,90,5,111,116,104,101,114,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,6,95,95,101,113, - 95,95,231,3,0,0,243,8,0,0,0,12,1,10,1,2, - 255,255,128,122,17,70,105,108,101,76,111,97,100,101,114,46, - 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, - 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, - 106,2,131,1,65,0,83,0,114,120,0,0,0,169,3,218, - 4,104,97,115,104,114,127,0,0,0,114,57,0,0,0,169, - 1,114,129,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,8,95,95,104,97,115,104,95,95,235, - 3,0,0,243,4,0,0,0,20,1,255,128,122,19,70,105, - 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, - 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,3,0,0,0,115,16,0,0,0,116, - 0,116,1,124,0,131,2,160,2,124,1,161,1,83,0,41, - 2,122,100,76,111,97,100,32,97,32,109,111,100,117,108,101, - 32,102,114,111,109,32,97,32,102,105,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, - 32,32,32,32,32,32,32,78,41,3,218,5,115,117,112,101, - 114,114,253,0,0,0,114,234,0,0,0,114,233,0,0,0, - 169,1,114,0,1,0,0,114,7,0,0,0,114,8,0,0, - 0,114,234,0,0,0,238,3,0,0,115,4,0,0,0,16, - 10,255,128,122,22,70,105,108,101,76,111,97,100,101,114,46, - 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,243,6,0,0,0,124,0,106,0,83,0,169, - 2,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, - 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, - 121,32,116,104,101,32,102,105,110,100,101,114,46,78,114,61, - 0,0,0,114,233,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,189,0,0,0,250,3,0,0, - 243,4,0,0,0,6,3,255,128,122,23,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, - 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,8,0,0,0,67,0,0,0,115,128,0,0,0, - 116,0,124,0,116,1,116,2,102,2,131,2,114,36,116,3, - 160,4,116,5,124,1,131,1,161,1,143,12,125,2,124,2, - 160,6,161,0,87,0,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,49,0,115,29,119,1,1,0,1,0,1,0, - 89,0,1,0,100,1,83,0,116,3,160,7,124,1,100,2, - 161,2,143,12,125,2,124,2,160,6,161,0,87,0,2,0, - 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,57, - 119,1,1,0,1,0,1,0,89,0,1,0,100,1,83,0, - 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, - 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, - 32,114,97,119,32,98,121,116,101,115,46,78,218,1,114,41, - 8,114,171,0,0,0,114,235,0,0,0,218,19,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 114,78,0,0,0,90,9,111,112,101,110,95,99,111,100,101, - 114,96,0,0,0,90,4,114,101,97,100,114,79,0,0,0, - 41,3,114,129,0,0,0,114,57,0,0,0,114,82,0,0, + 116,104,95,109,116,105,109,101,84,3,0,0,115,4,0,0, + 0,4,6,255,128,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,14,0,0,0,100,1,124,0, + 160,0,124,1,161,1,105,1,83,0,41,3,97,158,1,0, + 0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, + 32,114,101,116,117,114,110,105,110,103,32,97,32,109,101,116, + 97,100,97,116,97,32,100,105,99,116,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,10,32,32,32, + 32,32,32,32,32,112,97,116,104,32,40,97,32,115,116,114, + 41,46,10,10,32,32,32,32,32,32,32,32,80,111,115,115, + 105,98,108,101,32,107,101,121,115,58,10,32,32,32,32,32, + 32,32,32,45,32,39,109,116,105,109,101,39,32,40,109,97, + 110,100,97,116,111,114,121,41,32,105,115,32,116,104,101,32, + 110,117,109,101,114,105,99,32,116,105,109,101,115,116,97,109, + 112,32,111,102,32,108,97,115,116,32,115,111,117,114,99,101, + 10,32,32,32,32,32,32,32,32,32,32,99,111,100,101,32, + 109,111,100,105,102,105,99,97,116,105,111,110,59,10,32,32, + 32,32,32,32,32,32,45,32,39,115,105,122,101,39,32,40, + 111,112,116,105,111,110,97,108,41,32,105,115,32,116,104,101, + 32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,111, + 102,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100, + 101,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, + 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, + 116,104,111,100,32,97,108,108,111,119,115,32,116,104,101,32, + 108,111,97,100,101,114,32,116,111,32,114,101,97,100,32,98, + 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,32, + 32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83, + 69,114,114,111,114,32,119,104,101,110,32,116,104,101,32,112, + 97,116,104,32,99,97,110,110,111,116,32,98,101,32,104,97, + 110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,114, + 179,0,0,0,78,41,1,114,237,0,0,0,114,236,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,241,0,0,0,255,3,0,0,115,16,0,0,0,14,2, - 16,1,22,1,20,128,14,2,22,1,20,128,255,128,122,19, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, - 97,116,97,99,2,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,2,0,0,0,67,0,0,0,115,20,0,0, - 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,124, - 0,131,1,83,0,41,3,78,114,0,0,0,0,41,1,218, - 10,70,105,108,101,82,101,97,100,101,114,41,2,218,17,105, - 109,112,111,114,116,108,105,98,46,114,101,97,100,101,114,115, - 114,17,1,0,0,41,3,114,129,0,0,0,114,230,0,0, - 0,114,17,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,19,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,8,4,0,0,115,6, - 0,0,0,12,2,8,1,255,128,122,30,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,114,101,115,111,117,114, - 99,101,95,114,101,97,100,101,114,41,13,114,136,0,0,0, - 114,135,0,0,0,114,137,0,0,0,114,138,0,0,0,114, - 222,0,0,0,114,2,1,0,0,114,8,1,0,0,114,146, - 0,0,0,114,234,0,0,0,114,189,0,0,0,114,241,0, - 0,0,114,19,1,0,0,90,13,95,95,99,108,97,115,115, - 99,101,108,108,95,95,114,7,0,0,0,114,7,0,0,0, - 114,11,1,0,0,114,8,0,0,0,114,253,0,0,0,220, - 3,0,0,115,26,0,0,0,8,0,4,2,8,3,8,6, - 8,4,2,3,14,1,2,11,10,1,8,4,2,9,18,1, - 255,128,114,253,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, - 115,46,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 218,10,112,97,116,104,95,115,116,97,116,115,92,3,0,0, + 115,4,0,0,0,14,12,255,128,122,23,83,111,117,114,99, + 101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97, + 116,115,99,4,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,0, + 124,0,160,0,124,2,124,3,161,2,83,0,41,2,122,228, + 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, + 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, + 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, + 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, + 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, + 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, + 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, + 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,115,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,115,111,117,114,99, + 101,32,112,97,116,104,32,105,115,32,110,101,101,100,101,100, + 32,105,110,32,111,114,100,101,114,32,116,111,32,99,111,114, + 114,101,99,116,108,121,32,116,114,97,110,115,102,101,114,32, + 112,101,114,109,105,115,115,105,111,110,115,10,32,32,32,32, + 32,32,32,32,78,41,1,218,8,115,101,116,95,100,97,116, + 97,41,4,114,129,0,0,0,114,118,0,0,0,90,10,99, + 97,99,104,101,95,112,97,116,104,114,41,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,15,95, + 99,97,99,104,101,95,98,121,116,101,99,111,100,101,106,3, + 0,0,115,4,0,0,0,12,8,255,128,122,28,83,111,117, + 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,1,0,0,0,67,0, + 0,0,114,23,0,0,0,41,2,122,150,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,119,114,105,116,101,115,32,100,97,116,97,32,40,98,121, + 116,101,115,41,32,116,111,32,97,32,102,105,108,101,32,112, + 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, + 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, + 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, + 108,108,111,119,115,32,102,111,114,32,116,104,101,32,119,114, + 105,116,105,110,103,32,111,102,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,32, + 32,78,114,7,0,0,0,41,3,114,129,0,0,0,114,57, + 0,0,0,114,41,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,239,0,0,0,116,3,0,0, + 114,226,0,0,0,122,21,83,111,117,114,99,101,76,111,97, + 100,101,114,46,115,101,116,95,100,97,116,97,99,2,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,10,0,0, + 0,67,0,0,0,115,70,0,0,0,124,0,160,0,124,1, + 161,1,125,2,122,10,124,0,160,1,124,2,161,1,125,3, + 87,0,116,4,124,3,131,1,83,0,4,0,116,2,121,34, + 1,0,125,4,1,0,122,7,116,3,100,1,124,1,100,2, + 141,2,124,4,130,2,100,3,125,4,126,4,119,1,119,0, + 41,4,122,52,67,111,110,99,114,101,116,101,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, + 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,46,122,39,115,111,117,114,99,101, + 32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,116, + 104,114,111,117,103,104,32,103,101,116,95,100,97,116,97,40, + 41,114,126,0,0,0,78,41,5,114,189,0,0,0,218,8, + 103,101,116,95,100,97,116,97,114,63,0,0,0,114,128,0, + 0,0,114,186,0,0,0,41,5,114,129,0,0,0,114,149, + 0,0,0,114,57,0,0,0,114,184,0,0,0,218,3,101, + 120,99,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,10,103,101,116,95,115,111,117,114,99,101,123,3,0, + 0,115,26,0,0,0,10,2,2,1,12,1,8,4,14,253, + 4,1,2,1,4,255,2,1,2,255,8,128,2,255,255,128, + 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,103, + 101,116,95,115,111,117,114,99,101,114,115,0,0,0,41,1, + 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0, + 67,0,0,0,115,22,0,0,0,116,0,106,1,116,2,124, + 1,124,2,100,1,100,2,124,3,100,3,141,6,83,0,41, + 5,122,130,82,101,116,117,114,110,32,116,104,101,32,99,111, + 100,101,32,111,98,106,101,99,116,32,99,111,109,112,105,108, + 101,100,32,102,114,111,109,32,115,111,117,114,99,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,101,32,39,100,97, + 116,97,39,32,97,114,103,117,109,101,110,116,32,99,97,110, + 32,98,101,32,97,110,121,32,111,98,106,101,99,116,32,116, + 121,112,101,32,116,104,97,116,32,99,111,109,112,105,108,101, + 40,41,32,115,117,112,112,111,114,116,115,46,10,32,32,32, + 32,32,32,32,32,114,229,0,0,0,84,41,2,218,12,100, + 111,110,116,95,105,110,104,101,114,105,116,114,95,0,0,0, + 78,41,3,114,145,0,0,0,114,228,0,0,0,218,7,99, + 111,109,112,105,108,101,41,4,114,129,0,0,0,114,41,0, + 0,0,114,57,0,0,0,114,244,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,14,115,111,117, + 114,99,101,95,116,111,95,99,111,100,101,133,3,0,0,115, + 8,0,0,0,12,5,4,1,6,255,255,128,122,27,83,111, + 117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99, + 101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,15,0,0,0,9,0,0,0,67,0, + 0,0,115,12,2,0,0,124,0,160,0,124,1,161,1,125, + 2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125, + 6,100,3,125,7,122,6,116,1,124,2,131,1,125,8,87, + 0,110,11,4,0,116,2,144,1,121,5,1,0,1,0,1, + 0,100,1,125,8,89,0,110,143,122,7,124,0,160,3,124, + 2,161,1,125,9,87,0,110,9,4,0,116,4,144,1,121, + 4,1,0,1,0,1,0,89,0,110,126,116,5,124,9,100, + 4,25,0,131,1,125,3,122,7,124,0,160,6,124,8,161, + 1,125,10,87,0,110,9,4,0,116,4,144,1,121,3,1, + 0,1,0,1,0,89,0,110,103,124,1,124,8,100,5,156, + 2,125,11,122,71,116,7,124,10,124,1,124,11,131,3,125, + 12,116,8,124,10,131,1,100,6,100,1,133,2,25,0,125, + 13,124,12,100,7,64,0,100,8,107,3,125,6,124,6,114, + 138,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, + 10,100,10,107,3,114,137,124,7,115,119,116,9,106,10,100, + 11,107,2,114,137,124,0,160,6,124,2,161,1,125,4,116, + 9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124, + 5,124,1,124,11,131,4,1,0,110,10,116,14,124,10,124, + 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87, + 0,110,11,4,0,116,15,116,16,102,2,144,1,121,2,1, + 0,1,0,1,0,89,0,110,15,116,17,160,18,100,13,124, + 8,124,2,161,3,1,0,116,19,124,13,124,1,124,8,124, + 2,100,14,141,4,83,0,124,4,100,1,117,0,114,185,124, + 0,160,6,124,2,161,1,125,4,124,0,160,20,124,4,124, + 2,161,2,125,14,116,17,160,18,100,15,124,2,161,2,1, + 0,116,21,106,22,115,255,124,8,100,1,117,1,114,255,124, + 3,100,1,117,1,114,255,124,6,114,226,124,5,100,1,117, + 0,114,219,116,9,160,11,124,4,161,1,125,5,116,23,124, + 14,124,5,124,7,131,3,125,10,110,8,116,24,124,14,124, + 3,116,25,124,4,131,1,131,3,125,10,122,10,124,0,160, + 26,124,2,124,8,124,10,161,3,1,0,87,0,124,14,83, + 0,4,0,116,2,144,1,121,1,1,0,1,0,1,0,89, + 0,124,14,83,0,124,14,83,0,119,0,119,0,119,0,119, + 0,119,0,41,16,122,190,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,97,100,105,110,103,32,111,102,32,98,121, + 116,101,99,111,100,101,32,114,101,113,117,105,114,101,115,32, + 112,97,116,104,95,115,116,97,116,115,32,116,111,32,98,101, + 32,105,109,112,108,101,109,101,110,116,101,100,46,32,84,111, + 32,119,114,105,116,101,10,32,32,32,32,32,32,32,32,98, + 121,116,101,99,111,100,101,44,32,115,101,116,95,100,97,116, + 97,32,109,117,115,116,32,97,108,115,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,10,10,32,32,32, + 32,32,32,32,32,78,70,84,114,179,0,0,0,114,169,0, + 0,0,114,155,0,0,0,114,3,0,0,0,114,0,0,0, + 0,114,44,0,0,0,90,5,110,101,118,101,114,90,6,97, + 108,119,97,121,115,218,4,115,105,122,101,122,13,123,125,32, + 109,97,116,99,104,101,115,32,123,125,41,3,114,127,0,0, + 0,114,117,0,0,0,114,118,0,0,0,122,19,99,111,100, + 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,125, + 41,27,114,189,0,0,0,114,108,0,0,0,114,94,0,0, + 0,114,238,0,0,0,114,63,0,0,0,114,33,0,0,0, + 114,241,0,0,0,114,162,0,0,0,218,10,109,101,109,111, + 114,121,118,105,101,119,114,173,0,0,0,90,21,99,104,101, + 99,107,95,104,97,115,104,95,98,97,115,101,100,95,112,121, + 99,115,114,167,0,0,0,218,17,95,82,65,87,95,77,65, + 71,73,67,95,78,85,77,66,69,82,114,168,0,0,0,114, + 166,0,0,0,114,128,0,0,0,114,160,0,0,0,114,145, + 0,0,0,114,159,0,0,0,114,175,0,0,0,114,247,0, + 0,0,114,15,0,0,0,218,19,100,111,110,116,95,119,114, + 105,116,101,95,98,121,116,101,99,111,100,101,114,181,0,0, + 0,114,180,0,0,0,114,4,0,0,0,114,240,0,0,0, + 41,15,114,129,0,0,0,114,149,0,0,0,114,118,0,0, + 0,114,164,0,0,0,114,184,0,0,0,114,167,0,0,0, + 90,10,104,97,115,104,95,98,97,115,101,100,90,12,99,104, + 101,99,107,95,115,111,117,114,99,101,114,117,0,0,0,218, + 2,115,116,114,41,0,0,0,114,161,0,0,0,114,16,0, + 0,0,90,10,98,121,116,101,115,95,100,97,116,97,90,11, + 99,111,100,101,95,111,98,106,101,99,116,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,227,0,0,0,141, + 3,0,0,115,170,0,0,0,10,7,4,1,4,1,4,1, + 4,1,4,1,2,1,12,1,14,1,8,1,2,2,14,1, + 14,1,4,1,12,2,2,1,14,1,14,1,4,1,2,3, + 2,1,6,254,2,4,12,1,16,1,12,1,4,1,12,1, + 10,1,2,1,2,255,8,2,2,254,10,3,4,1,2,1, + 2,1,4,254,8,4,2,1,4,255,2,128,2,3,2,1, + 2,1,6,1,2,1,2,1,4,251,4,128,18,7,4,1, + 8,2,2,1,4,255,6,2,2,1,2,1,6,254,8,3, + 10,1,12,1,12,1,14,1,6,1,2,255,4,2,8,1, + 10,1,14,1,6,2,6,1,4,255,2,2,16,1,4,3, + 14,254,2,1,8,1,2,254,2,233,2,225,2,250,2,251, + 255,128,122,21,83,111,117,114,99,101,76,111,97,100,101,114, + 46,103,101,116,95,99,111,100,101,78,41,10,114,136,0,0, + 0,114,135,0,0,0,114,137,0,0,0,114,237,0,0,0, + 114,238,0,0,0,114,240,0,0,0,114,239,0,0,0,114, + 243,0,0,0,114,247,0,0,0,114,227,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,235,0,0,0,82,3,0,0,115,18,0,0,0, + 8,0,8,2,8,8,8,14,8,10,8,7,14,10,12,8, + 255,128,114,235,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, + 115,92,0,0,0,101,0,90,1,100,0,90,2,100,1,90, 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,100,7,156,1,100,8,100,9,132,2,90,6,100, - 10,83,0,41,11,218,16,83,111,117,114,99,101,70,105,108, - 101,76,111,97,100,101,114,122,62,67,111,110,99,114,101,116, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,83,111,117,114,99,101,76,111,97,100,101,114, - 32,117,115,105,110,103,32,116,104,101,32,102,105,108,101,32, - 115,121,115,116,101,109,46,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, - 115,22,0,0,0,116,0,124,1,131,1,125,2,124,2,106, - 1,124,2,106,2,100,1,156,2,83,0,41,3,122,33,82, - 101,116,117,114,110,32,116,104,101,32,109,101,116,97,100,97, - 116,97,32,102,111,114,32,116,104,101,32,112,97,116,104,46, - 41,2,114,179,0,0,0,114,248,0,0,0,78,41,3,114, - 62,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7, - 115,116,95,115,105,122,101,41,3,114,129,0,0,0,114,57, - 0,0,0,114,252,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,238,0,0,0,18,4,0,0, - 115,6,0,0,0,8,2,14,1,255,128,122,27,83,111,117, - 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, - 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, - 0,115,24,0,0,0,116,0,124,1,131,1,125,4,124,0, - 106,1,124,2,124,3,124,4,100,1,141,3,83,0,41,2, - 78,169,1,218,5,95,109,111,100,101,41,2,114,125,0,0, - 0,114,239,0,0,0,41,5,114,129,0,0,0,114,118,0, - 0,0,114,117,0,0,0,114,41,0,0,0,114,65,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,240,0,0,0,23,4,0,0,115,6,0,0,0,8,2, - 16,1,255,128,122,32,83,111,117,114,99,101,70,105,108,101, - 76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,121, - 116,101,99,111,100,101,114,74,0,0,0,114,22,1,0,0, - 99,3,0,0,0,0,0,0,0,1,0,0,0,9,0,0, - 0,11,0,0,0,67,0,0,0,115,254,0,0,0,116,0, - 124,1,131,1,92,2,125,4,125,5,103,0,125,6,124,4, - 114,31,116,1,124,4,131,1,115,31,116,0,124,4,131,1, - 92,2,125,4,125,7,124,6,160,2,124,7,161,1,1,0, - 124,4,114,31,116,1,124,4,131,1,114,14,116,3,124,6, - 131,1,68,0,93,48,125,7,116,4,124,4,124,7,131,2, - 125,4,122,7,116,5,160,6,124,4,161,1,1,0,87,0, - 113,35,4,0,116,7,121,58,1,0,1,0,1,0,89,0, - 113,35,4,0,116,8,121,126,1,0,125,8,1,0,122,15, - 116,9,160,10,100,1,124,4,124,8,161,3,1,0,87,0, - 89,0,100,2,125,8,126,8,1,0,100,2,83,0,100,2, - 125,8,126,8,119,1,122,15,116,11,124,1,124,2,124,3, - 131,3,1,0,116,9,160,10,100,3,124,1,161,2,1,0, - 87,0,100,2,83,0,4,0,116,8,121,125,1,0,125,8, - 1,0,122,14,116,9,160,10,100,1,124,1,124,8,161,3, - 1,0,87,0,89,0,100,2,125,8,126,8,100,2,83,0, - 100,2,125,8,126,8,119,1,119,0,119,0,41,4,122,27, - 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, - 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, - 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, - 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, - 101,100,32,123,33,114,125,41,12,114,60,0,0,0,114,70, - 0,0,0,114,196,0,0,0,114,55,0,0,0,114,53,0, - 0,0,114,18,0,0,0,90,5,109,107,100,105,114,218,15, - 70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,114, - 63,0,0,0,114,145,0,0,0,114,159,0,0,0,114,83, - 0,0,0,41,9,114,129,0,0,0,114,57,0,0,0,114, - 41,0,0,0,114,23,1,0,0,218,6,112,97,114,101,110, - 116,114,107,0,0,0,114,52,0,0,0,114,48,0,0,0, - 114,242,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,239,0,0,0,28,4,0,0,115,58,0, - 0,0,12,2,4,1,12,2,12,1,10,1,12,254,12,4, - 10,1,2,1,14,1,12,1,4,2,14,1,6,3,4,1, - 4,255,16,2,8,128,2,1,12,1,18,1,14,1,8,2, - 2,1,18,255,8,128,2,254,2,247,255,128,122,25,83,111, - 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, - 101,116,95,100,97,116,97,78,41,7,114,136,0,0,0,114, - 135,0,0,0,114,137,0,0,0,114,138,0,0,0,114,238, - 0,0,0,114,240,0,0,0,114,239,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,20,1,0,0,14,4,0,0,115,12,0,0,0,8, - 0,4,2,8,2,8,5,18,5,255,128,114,20,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,64,0,0,0,115,32,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, - 90,4,100,4,100,5,132,0,90,5,100,6,83,0,41,7, - 218,20,83,111,117,114,99,101,108,101,115,115,70,105,108,101, - 76,111,97,100,101,114,122,45,76,111,97,100,101,114,32,119, - 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, - 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, - 111,114,116,115,46,99,2,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,68, - 0,0,0,124,0,160,0,124,1,161,1,125,2,124,0,160, - 1,124,2,161,1,125,3,124,1,124,2,100,1,156,2,125, - 4,116,2,124,3,124,1,124,4,131,3,1,0,116,3,116, - 4,124,3,131,1,100,2,100,0,133,2,25,0,124,1,124, - 2,100,3,141,3,83,0,41,4,78,114,169,0,0,0,114, - 155,0,0,0,41,2,114,127,0,0,0,114,117,0,0,0, - 41,5,114,189,0,0,0,114,241,0,0,0,114,162,0,0, - 0,114,175,0,0,0,114,249,0,0,0,41,5,114,129,0, - 0,0,114,149,0,0,0,114,57,0,0,0,114,41,0,0, - 0,114,161,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,227,0,0,0,63,4,0,0,115,24, - 0,0,0,10,1,10,1,2,4,2,1,6,254,12,4,2, - 1,14,1,2,1,2,1,6,253,255,128,122,29,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,114,23,0,0,0,41,2,122,39,82,101,116,117, - 114,110,32,78,111,110,101,32,97,115,32,116,104,101,114,101, - 32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,111, - 100,101,46,78,114,7,0,0,0,114,233,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,243,0, - 0,0,79,4,0,0,114,24,0,0,0,122,31,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,78,41,6,114, + 5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100, + 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, + 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, + 14,100,15,132,0,131,1,90,11,135,0,4,0,90,12,83, + 0,41,16,218,10,70,105,108,101,76,111,97,100,101,114,122, + 103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101, + 114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109, + 112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97, + 100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116, + 104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101, + 113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101, + 109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, + 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, + 95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32, + 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, + 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, + 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, + 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, + 110,100,101,114,46,78,114,169,0,0,0,41,3,114,129,0, + 0,0,114,149,0,0,0,114,57,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,222,0,0,0, + 231,3,0,0,115,6,0,0,0,6,3,10,1,255,128,122, + 19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, + 105,116,95,95,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,243,24,0, + 0,0,124,0,106,0,124,1,106,0,107,2,111,11,124,0, + 106,1,124,1,106,1,107,2,83,0,114,120,0,0,0,169, + 2,218,9,95,95,99,108,97,115,115,95,95,114,142,0,0, + 0,169,2,114,129,0,0,0,90,5,111,116,104,101,114,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,6, + 95,95,101,113,95,95,237,3,0,0,243,8,0,0,0,12, + 1,10,1,2,255,255,128,122,17,70,105,108,101,76,111,97, + 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,243,20,0,0,0,116,0,124,0,106,1,131,1, + 116,0,124,0,106,2,131,1,65,0,83,0,114,120,0,0, + 0,169,3,218,4,104,97,115,104,114,127,0,0,0,114,57, + 0,0,0,169,1,114,129,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,8,95,95,104,97,115, + 104,95,95,241,3,0,0,243,4,0,0,0,20,1,255,128, + 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,104, + 97,115,104,95,95,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,16, + 0,0,0,116,0,116,1,124,0,131,2,160,2,124,1,161, + 1,83,0,41,2,122,100,76,111,97,100,32,97,32,109,111, + 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, + 46,10,10,32,32,32,32,32,32,32,32,78,41,3,218,5, + 115,117,112,101,114,114,253,0,0,0,114,234,0,0,0,114, + 233,0,0,0,169,1,114,0,1,0,0,114,7,0,0,0, + 114,8,0,0,0,114,234,0,0,0,244,3,0,0,115,4, + 0,0,0,16,10,255,128,122,22,70,105,108,101,76,111,97, + 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,243,6,0,0,0,124,0,106, + 0,83,0,169,2,122,58,82,101,116,117,114,110,32,116,104, + 101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,111, + 117,114,99,101,32,102,105,108,101,32,97,115,32,102,111,117, + 110,100,32,98,121,32,116,104,101,32,102,105,110,100,101,114, + 46,78,114,61,0,0,0,114,233,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,189,0,0,0, + 0,4,0,0,243,4,0,0,0,6,3,255,128,122,23,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, + 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115, + 128,0,0,0,116,0,124,0,116,1,116,2,102,2,131,2, + 114,36,116,3,160,4,116,5,124,1,131,1,161,1,143,12, + 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, + 4,0,131,3,1,0,83,0,49,0,115,29,119,1,1,0, + 1,0,1,0,89,0,1,0,100,1,83,0,116,3,160,7, + 124,1,100,2,161,2,143,12,125,2,124,2,160,6,161,0, + 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, + 49,0,115,57,119,1,1,0,1,0,1,0,89,0,1,0, + 100,1,83,0,41,3,122,39,82,101,116,117,114,110,32,116, + 104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,116, + 104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,78, + 218,1,114,41,8,114,171,0,0,0,114,235,0,0,0,218, + 19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,114,78,0,0,0,90,9,111,112,101,110,95, + 99,111,100,101,114,96,0,0,0,90,4,114,101,97,100,114, + 79,0,0,0,41,3,114,129,0,0,0,114,57,0,0,0, + 114,82,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,241,0,0,0,5,4,0,0,115,16,0, + 0,0,14,2,16,1,22,1,20,128,14,2,22,1,20,128, + 255,128,122,19,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, + 115,20,0,0,0,100,1,100,2,108,0,109,1,125,2,1, + 0,124,2,124,0,131,1,83,0,41,3,78,114,0,0,0, + 0,41,1,218,10,70,105,108,101,82,101,97,100,101,114,41, + 2,218,17,105,109,112,111,114,116,108,105,98,46,114,101,97, + 100,101,114,115,114,17,1,0,0,41,3,114,129,0,0,0, + 114,230,0,0,0,114,17,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,19,103,101,116,95,114, + 101,115,111,117,114,99,101,95,114,101,97,100,101,114,14,4, + 0,0,115,6,0,0,0,12,2,8,1,255,128,122,30,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101, + 115,111,117,114,99,101,95,114,101,97,100,101,114,41,13,114, 136,0,0,0,114,135,0,0,0,114,137,0,0,0,114,138, - 0,0,0,114,227,0,0,0,114,243,0,0,0,114,7,0, + 0,0,0,114,222,0,0,0,114,2,1,0,0,114,8,1, + 0,0,114,146,0,0,0,114,234,0,0,0,114,189,0,0, + 0,114,241,0,0,0,114,19,1,0,0,90,13,95,95,99, + 108,97,115,115,99,101,108,108,95,95,114,7,0,0,0,114, + 7,0,0,0,114,11,1,0,0,114,8,0,0,0,114,253, + 0,0,0,226,3,0,0,115,26,0,0,0,8,0,4,2, + 8,3,8,6,8,4,2,3,14,1,2,11,10,1,8,4, + 2,9,18,1,255,128,114,253,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 64,0,0,0,115,46,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,100,7,156,1,100,8,100,9,132, + 2,90,6,100,10,83,0,41,11,218,16,83,111,117,114,99, + 101,70,105,108,101,76,111,97,100,101,114,122,62,67,111,110, + 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,32,111,102,32,83,111,117,114,99,101,76,111, + 97,100,101,114,32,117,115,105,110,103,32,116,104,101,32,102, + 105,108,101,32,115,121,115,116,101,109,46,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,22,0,0,0,116,0,124,1,131,1,125, + 2,124,2,106,1,124,2,106,2,100,1,156,2,83,0,41, + 3,122,33,82,101,116,117,114,110,32,116,104,101,32,109,101, + 116,97,100,97,116,97,32,102,111,114,32,116,104,101,32,112, + 97,116,104,46,41,2,114,179,0,0,0,114,248,0,0,0, + 78,41,3,114,62,0,0,0,218,8,115,116,95,109,116,105, + 109,101,90,7,115,116,95,115,105,122,101,41,3,114,129,0, + 0,0,114,57,0,0,0,114,252,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,238,0,0,0, + 24,4,0,0,115,6,0,0,0,8,2,14,1,255,128,122, + 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, + 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,24,0,0,0,116,0,124,1,131,1, + 125,4,124,0,106,1,124,2,124,3,124,4,100,1,141,3, + 83,0,41,2,78,169,1,218,5,95,109,111,100,101,41,2, + 114,125,0,0,0,114,239,0,0,0,41,5,114,129,0,0, + 0,114,118,0,0,0,114,117,0,0,0,114,41,0,0,0, + 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,240,0,0,0,29,4,0,0,115,6,0, + 0,0,8,2,16,1,255,128,122,32,83,111,117,114,99,101, + 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, + 101,95,98,121,116,101,99,111,100,101,114,74,0,0,0,114, + 22,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, + 0,9,0,0,0,11,0,0,0,67,0,0,0,115,254,0, + 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0, + 125,6,124,4,114,31,116,1,124,4,131,1,115,31,116,0, + 124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7, + 161,1,1,0,124,4,114,31,116,1,124,4,131,1,114,14, + 116,3,124,6,131,1,68,0,93,48,125,7,116,4,124,4, + 124,7,131,2,125,4,122,7,116,5,160,6,124,4,161,1, + 1,0,87,0,113,35,4,0,116,7,121,58,1,0,1,0, + 1,0,89,0,113,35,4,0,116,8,121,126,1,0,125,8, + 1,0,122,15,116,9,160,10,100,1,124,4,124,8,161,3, + 1,0,87,0,89,0,100,2,125,8,126,8,1,0,100,2, + 83,0,100,2,125,8,126,8,119,1,122,15,116,11,124,1, + 124,2,124,3,131,3,1,0,116,9,160,10,100,3,124,1, + 161,2,1,0,87,0,100,2,83,0,4,0,116,8,121,125, + 1,0,125,8,1,0,122,14,116,9,160,10,100,1,124,1, + 124,8,161,3,1,0,87,0,89,0,100,2,125,8,126,8, + 100,2,83,0,100,2,125,8,126,8,119,1,119,0,119,0, + 41,4,122,27,87,114,105,116,101,32,98,121,116,101,115,32, + 100,97,116,97,32,116,111,32,97,32,102,105,108,101,46,122, + 27,99,111,117,108,100,32,110,111,116,32,99,114,101,97,116, + 101,32,123,33,114,125,58,32,123,33,114,125,78,122,12,99, + 114,101,97,116,101,100,32,123,33,114,125,41,12,114,60,0, + 0,0,114,70,0,0,0,114,196,0,0,0,114,55,0,0, + 0,114,53,0,0,0,114,18,0,0,0,90,5,109,107,100, + 105,114,218,15,70,105,108,101,69,120,105,115,116,115,69,114, + 114,111,114,114,63,0,0,0,114,145,0,0,0,114,159,0, + 0,0,114,83,0,0,0,41,9,114,129,0,0,0,114,57, + 0,0,0,114,41,0,0,0,114,23,1,0,0,218,6,112, + 97,114,101,110,116,114,107,0,0,0,114,52,0,0,0,114, + 48,0,0,0,114,242,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,239,0,0,0,34,4,0, + 0,115,58,0,0,0,12,2,4,1,12,2,12,1,10,1, + 12,254,12,4,10,1,2,1,14,1,12,1,4,2,14,1, + 6,3,4,1,4,255,16,2,8,128,2,1,12,1,18,1, + 14,1,8,2,2,1,18,255,8,128,2,254,2,247,255,128, + 122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,115,101,116,95,100,97,116,97,78,41,7,114,136, + 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, + 0,0,114,238,0,0,0,114,240,0,0,0,114,239,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,20,1,0,0,20,4,0,0,115,12, + 0,0,0,8,0,4,2,8,2,8,5,18,5,255,128,114, + 20,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,64,0,0,0,115,32,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 83,0,41,7,218,20,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,122,45,76,111,97,100, + 101,114,32,119,104,105,99,104,32,104,97,110,100,108,101,115, + 32,115,111,117,114,99,101,108,101,115,115,32,102,105,108,101, + 32,105,109,112,111,114,116,115,46,99,2,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, + 0,0,115,68,0,0,0,124,0,160,0,124,1,161,1,125, + 2,124,0,160,1,124,2,161,1,125,3,124,1,124,2,100, + 1,156,2,125,4,116,2,124,3,124,1,124,4,131,3,1, + 0,116,3,116,4,124,3,131,1,100,2,100,0,133,2,25, + 0,124,1,124,2,100,3,141,3,83,0,41,4,78,114,169, + 0,0,0,114,155,0,0,0,41,2,114,127,0,0,0,114, + 117,0,0,0,41,5,114,189,0,0,0,114,241,0,0,0, + 114,162,0,0,0,114,175,0,0,0,114,249,0,0,0,41, + 5,114,129,0,0,0,114,149,0,0,0,114,57,0,0,0, + 114,41,0,0,0,114,161,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,227,0,0,0,69,4, + 0,0,115,24,0,0,0,10,1,10,1,2,4,2,1,6, + 254,12,4,2,1,14,1,2,1,2,1,6,253,255,128,122, + 29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,114,23,0,0,0,41,2,122,39, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, + 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,7,0,0,0,114,233,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,26,1,0,0,59,4,0,0,115,10,0,0,0,8, - 0,4,2,8,2,12,16,255,128,114,26,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,64,0,0,0,115,92,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, - 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, - 100,8,100,9,132,0,90,7,100,10,100,11,132,0,90,8, - 100,12,100,13,132,0,90,9,100,14,100,15,132,0,90,10, - 100,16,100,17,132,0,90,11,101,12,100,18,100,19,132,0, - 131,1,90,13,100,20,83,0,41,21,114,16,1,0,0,122, - 93,76,111,97,100,101,114,32,102,111,114,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,115,46,10,10, - 32,32,32,32,84,104,101,32,99,111,110,115,116,114,117,99, - 116,111,114,32,105,115,32,100,101,115,105,103,110,101,100,32, - 116,111,32,119,111,114,107,32,119,105,116,104,32,70,105,108, - 101,70,105,110,100,101,114,46,10,10,32,32,32,32,99,3, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,124,1,124,0, - 95,0,124,2,124,0,95,1,100,0,83,0,114,120,0,0, - 0,114,169,0,0,0,41,3,114,129,0,0,0,114,127,0, - 0,0,114,57,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,222,0,0,0,92,4,0,0,115, - 6,0,0,0,6,1,10,1,255,128,122,28,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,114,254,0,0,0,114,120,0,0,0,114,255,0,0,0, - 114,1,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,2,1,0,0,96,4,0,0,114,3,1, - 0,0,122,26,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,95,95,101,113,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,114,4,1,0,0,114,120,0,0, - 0,114,5,1,0,0,114,7,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,8,1,0,0,100, - 4,0,0,114,9,1,0,0,122,28,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,95, - 104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,5,0,0,0,67,0,0,0,115, - 36,0,0,0,116,0,160,1,116,2,106,3,124,1,161,2, - 125,2,116,0,160,4,100,1,124,1,106,5,124,0,106,6, - 161,3,1,0,124,2,83,0,41,3,122,38,67,114,101,97, - 116,101,32,97,110,32,117,110,105,116,105,97,108,105,122,101, - 100,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,122,38,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,32,123,33,114,125,32,108,111,97,100,101,100, - 32,102,114,111,109,32,123,33,114,125,78,41,7,114,145,0, - 0,0,114,228,0,0,0,114,173,0,0,0,90,14,99,114, - 101,97,116,101,95,100,121,110,97,109,105,99,114,159,0,0, - 0,114,127,0,0,0,114,57,0,0,0,41,3,114,129,0, - 0,0,114,197,0,0,0,114,230,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,225,0,0,0, - 103,4,0,0,115,16,0,0,0,4,2,6,1,4,255,6, - 2,8,1,4,255,4,2,255,128,122,33,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,99, - 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,5,0,0, - 0,67,0,0,0,115,36,0,0,0,116,0,160,1,116,2, - 106,3,124,1,161,2,1,0,116,0,160,4,100,1,124,0, - 106,5,124,0,106,6,161,3,1,0,100,2,83,0,41,3, - 122,30,73,110,105,116,105,97,108,105,122,101,32,97,110,32, + 0,114,243,0,0,0,85,4,0,0,114,24,0,0,0,122, + 31,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, + 78,41,6,114,136,0,0,0,114,135,0,0,0,114,137,0, + 0,0,114,138,0,0,0,114,227,0,0,0,114,243,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,26,1,0,0,65,4,0,0,115,10, + 0,0,0,8,0,4,2,8,2,12,16,255,128,114,26,1, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,92,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, + 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, + 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, + 132,0,90,10,100,16,100,17,132,0,90,11,101,12,100,18, + 100,19,132,0,131,1,90,13,100,20,83,0,41,21,114,16, + 1,0,0,122,93,76,111,97,100,101,114,32,102,111,114,32, 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 122,40,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,123,33,114,125,32,101,120,101,99,117,116,101,100, - 32,102,114,111,109,32,123,33,114,125,78,41,7,114,145,0, - 0,0,114,228,0,0,0,114,173,0,0,0,90,12,101,120, - 101,99,95,100,121,110,97,109,105,99,114,159,0,0,0,114, - 127,0,0,0,114,57,0,0,0,169,2,114,129,0,0,0, - 114,230,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,231,0,0,0,111,4,0,0,115,10,0, - 0,0,14,2,6,1,8,1,8,255,255,128,122,31,69,120, + 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, + 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, + 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, + 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, + 32,32,99,3,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, + 124,1,124,0,95,0,124,2,124,0,95,1,100,0,83,0, + 114,120,0,0,0,114,169,0,0,0,41,3,114,129,0,0, + 0,114,127,0,0,0,114,57,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,222,0,0,0,98, + 4,0,0,115,6,0,0,0,6,1,10,1,255,128,122,28, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,114,254,0,0,0,114,120,0,0,0,114, + 255,0,0,0,114,1,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,2,1,0,0,102,4,0, + 0,114,3,1,0,0,122,26,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,114,4,1,0,0, + 114,120,0,0,0,114,5,1,0,0,114,7,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,8, + 1,0,0,106,4,0,0,114,9,1,0,0,122,28,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, + 114,46,95,95,104,97,115,104,95,95,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,5,0,0,0,67, + 0,0,0,115,36,0,0,0,116,0,160,1,116,2,106,3, + 124,1,161,2,125,2,116,0,160,4,100,1,124,1,106,5, + 124,0,106,6,161,3,1,0,124,2,83,0,41,3,122,38, + 67,114,101,97,116,101,32,97,110,32,117,110,105,116,105,97, + 108,105,122,101,100,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,122,38,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,32,123,33,114,125,32,108,111, + 97,100,101,100,32,102,114,111,109,32,123,33,114,125,78,41, + 7,114,145,0,0,0,114,228,0,0,0,114,173,0,0,0, + 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, + 114,159,0,0,0,114,127,0,0,0,114,57,0,0,0,41, + 3,114,129,0,0,0,114,197,0,0,0,114,230,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 225,0,0,0,109,4,0,0,115,16,0,0,0,4,2,6, + 1,4,255,6,2,8,1,4,255,4,2,255,128,122,33,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,0, + 160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,4, + 100,1,124,0,106,5,124,0,106,6,161,3,1,0,100,2, + 83,0,41,3,122,30,73,110,105,116,105,97,108,105,122,101, + 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,122,40,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,123,33,114,125,32,101,120,101,99, + 117,116,101,100,32,102,114,111,109,32,123,33,114,125,78,41, + 7,114,145,0,0,0,114,228,0,0,0,114,173,0,0,0, + 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,159, + 0,0,0,114,127,0,0,0,114,57,0,0,0,169,2,114, + 129,0,0,0,114,230,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,231,0,0,0,117,4,0, + 0,115,10,0,0,0,14,2,6,1,8,1,8,255,255,128, + 122,31,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,3,0,0,0,115,36,0,0,0,116, + 0,124,0,106,1,131,1,100,1,25,0,137,0,116,2,135, + 0,102,1,100,2,100,3,132,8,116,3,68,0,131,1,131, + 1,83,0,41,5,122,49,82,101,116,117,114,110,32,84,114, + 117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32, + 112,97,99,107,97,103,101,46,114,3,0,0,0,99,1,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,3,0,0,0,115,36,0,0,0,116,0,124,0,106, - 1,131,1,100,1,25,0,137,0,116,2,135,0,102,1,100, - 2,100,3,132,8,116,3,68,0,131,1,131,1,83,0,41, - 5,122,49,82,101,116,117,114,110,32,84,114,117,101,32,105, - 102,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107, - 97,103,101,46,114,3,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, - 0,0,115,28,0,0,0,129,0,124,0,93,9,125,1,136, - 0,100,0,124,1,23,0,107,2,86,0,1,0,113,2,100, - 1,83,0,41,2,114,222,0,0,0,78,114,7,0,0,0, - 169,2,114,5,0,0,0,218,6,115,117,102,102,105,120,169, - 1,90,9,102,105,108,101,95,110,97,109,101,114,7,0,0, - 0,114,8,0,0,0,114,9,0,0,0,120,4,0,0,115, - 8,0,0,0,6,128,2,1,20,255,255,128,122,49,69,120, + 0,0,51,0,0,0,115,28,0,0,0,129,0,124,0,93, + 9,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1, + 0,113,2,100,1,83,0,41,2,114,222,0,0,0,78,114, + 7,0,0,0,169,2,114,5,0,0,0,218,6,115,117,102, + 102,105,120,169,1,90,9,102,105,108,101,95,110,97,109,101, + 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,126, + 4,0,0,115,8,0,0,0,6,128,2,1,20,255,255,128, + 122,49,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, + 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, + 112,114,62,78,41,4,114,60,0,0,0,114,57,0,0,0, + 218,3,97,110,121,114,218,0,0,0,114,233,0,0,0,114, + 7,0,0,0,114,30,1,0,0,114,8,0,0,0,114,192, + 0,0,0,123,4,0,0,115,10,0,0,0,14,2,12,1, + 2,1,8,255,255,128,122,30,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, + 23,0,0,0,41,2,122,63,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,97,110,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,32,99,97,110,110,111, + 116,32,99,114,101,97,116,101,32,97,32,99,111,100,101,32, + 111,98,106,101,99,116,46,78,114,7,0,0,0,114,233,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,227,0,0,0,129,4,0,0,114,24,0,0,0,122, + 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,41,2,122,53,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,32, + 104,97,118,101,32,110,111,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,114,7,0,0,0,114,233,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,243, + 0,0,0,133,4,0,0,114,24,0,0,0,122,30,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,105,115,95,112,97,99,107,97,103,101,46,60,108,111, - 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,78, - 41,4,114,60,0,0,0,114,57,0,0,0,218,3,97,110, - 121,114,218,0,0,0,114,233,0,0,0,114,7,0,0,0, - 114,30,1,0,0,114,8,0,0,0,114,192,0,0,0,117, - 4,0,0,115,10,0,0,0,14,2,12,1,2,1,8,255, - 255,128,122,30,69,120,116,101,110,115,105,111,110,70,105,108, + 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,114,12,1,0,0,114,13,1,0,0,114, + 61,0,0,0,114,233,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,189,0,0,0,137,4,0, + 0,114,14,1,0,0,122,32,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 102,105,108,101,110,97,109,101,78,41,14,114,136,0,0,0, + 114,135,0,0,0,114,137,0,0,0,114,138,0,0,0,114, + 222,0,0,0,114,2,1,0,0,114,8,1,0,0,114,225, + 0,0,0,114,231,0,0,0,114,192,0,0,0,114,227,0, + 0,0,114,243,0,0,0,114,146,0,0,0,114,189,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,16,1,0,0,90,4,0,0,115,26, + 0,0,0,8,0,4,2,8,6,8,4,8,4,8,3,8, + 8,8,6,8,6,8,4,2,4,14,1,255,128,114,16,1, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,64,0,0,0,115,104,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, + 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, + 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, + 132,0,90,10,100,16,100,17,132,0,90,11,100,18,100,19, + 132,0,90,12,100,20,100,21,132,0,90,13,100,22,100,23, + 132,0,90,14,100,24,83,0,41,25,218,14,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,97,38,1,0,0,82, + 101,112,114,101,115,101,110,116,115,32,97,32,110,97,109,101, + 115,112,97,99,101,32,112,97,99,107,97,103,101,39,115,32, + 112,97,116,104,46,32,32,73,116,32,117,115,101,115,32,116, + 104,101,32,109,111,100,117,108,101,32,110,97,109,101,10,32, + 32,32,32,116,111,32,102,105,110,100,32,105,116,115,32,112, + 97,114,101,110,116,32,109,111,100,117,108,101,44,32,97,110, + 100,32,102,114,111,109,32,116,104,101,114,101,32,105,116,32, + 108,111,111,107,115,32,117,112,32,116,104,101,32,112,97,114, + 101,110,116,39,115,10,32,32,32,32,95,95,112,97,116,104, + 95,95,46,32,32,87,104,101,110,32,116,104,105,115,32,99, + 104,97,110,103,101,115,44,32,116,104,101,32,109,111,100,117, + 108,101,39,115,32,111,119,110,32,112,97,116,104,32,105,115, + 32,114,101,99,111,109,112,117,116,101,100,44,10,32,32,32, + 32,117,115,105,110,103,32,112,97,116,104,95,102,105,110,100, + 101,114,46,32,32,70,111,114,32,116,111,112,45,108,101,118, + 101,108,32,109,111,100,117,108,101,115,44,32,116,104,101,32, + 112,97,114,101,110,116,32,109,111,100,117,108,101,39,115,32, + 112,97,116,104,10,32,32,32,32,105,115,32,115,121,115,46, + 112,97,116,104,46,99,4,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,36, + 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,116, + 2,124,0,160,3,161,0,131,1,124,0,95,4,124,3,124, + 0,95,5,100,0,83,0,114,120,0,0,0,41,6,218,5, + 95,110,97,109,101,218,5,95,112,97,116,104,114,122,0,0, + 0,218,16,95,103,101,116,95,112,97,114,101,110,116,95,112, + 97,116,104,218,17,95,108,97,115,116,95,112,97,114,101,110, + 116,95,112,97,116,104,218,12,95,112,97,116,104,95,102,105, + 110,100,101,114,169,4,114,129,0,0,0,114,127,0,0,0, + 114,57,0,0,0,90,11,112,97,116,104,95,102,105,110,100, + 101,114,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,222,0,0,0,150,4,0,0,115,10,0,0,0,6, + 1,6,1,14,1,10,1,255,128,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, + 124,0,106,0,160,1,100,1,161,1,92,3,125,1,125,2, + 125,3,124,2,100,2,107,2,114,15,100,3,83,0,124,1, + 100,4,102,2,83,0,41,6,122,62,82,101,116,117,114,110, + 115,32,97,32,116,117,112,108,101,32,111,102,32,40,112,97, + 114,101,110,116,45,109,111,100,117,108,101,45,110,97,109,101, + 44,32,112,97,114,101,110,116,45,112,97,116,104,45,97,116, + 116,114,45,110,97,109,101,41,114,85,0,0,0,114,10,0, + 0,0,41,2,114,15,0,0,0,114,57,0,0,0,90,8, + 95,95,112,97,116,104,95,95,78,41,2,114,33,1,0,0, + 114,54,0,0,0,41,4,114,129,0,0,0,114,25,1,0, + 0,218,3,100,111,116,90,2,109,101,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,23,95,102,105,110,100, + 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, + 101,115,156,4,0,0,115,10,0,0,0,18,2,8,1,4, + 2,8,3,255,128,122,38,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,102,105,110,100,95,112,97,114,101, + 110,116,95,112,97,116,104,95,110,97,109,101,115,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,28,0,0,0,124,0,160,0,161, + 0,92,2,125,1,125,2,116,1,116,2,106,3,124,1,25, + 0,124,2,131,2,83,0,114,120,0,0,0,41,4,114,40, + 1,0,0,114,141,0,0,0,114,15,0,0,0,218,7,109, + 111,100,117,108,101,115,41,3,114,129,0,0,0,90,18,112, + 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, + 101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109, + 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,35,1,0,0,166,4,0,0,115,6,0,0,0,12,1, + 16,1,255,128,122,31,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, + 95,112,97,116,104,99,1,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,80, + 0,0,0,116,0,124,0,160,1,161,0,131,1,125,1,124, + 1,124,0,106,2,107,3,114,37,124,0,160,3,124,0,106, + 4,124,1,161,2,125,2,124,2,100,0,117,1,114,34,124, + 2,106,5,100,0,117,0,114,34,124,2,106,6,114,34,124, + 2,106,6,124,0,95,7,124,1,124,0,95,2,124,0,106, + 7,83,0,114,120,0,0,0,41,8,114,122,0,0,0,114, + 35,1,0,0,114,36,1,0,0,114,37,1,0,0,114,33, + 1,0,0,114,150,0,0,0,114,188,0,0,0,114,34,1, + 0,0,41,3,114,129,0,0,0,90,11,112,97,114,101,110, + 116,95,112,97,116,104,114,197,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,12,95,114,101,99, + 97,108,99,117,108,97,116,101,170,4,0,0,115,18,0,0, + 0,12,2,10,1,14,1,18,3,6,1,8,1,6,1,6, + 1,255,128,122,27,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,114,101,99,97,108,99,117,108,97,116,101, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,243,12,0,0,0,116,0, + 124,0,160,1,161,0,131,1,83,0,114,120,0,0,0,41, + 2,218,4,105,116,101,114,114,42,1,0,0,114,7,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,8,95,95,105,116,101,114,95,95,183,4,0,0,243,4, + 0,0,0,12,1,255,128,122,23,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,95,105,116,101,114,95,95, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,12,0,0,0,124,0, + 160,0,161,0,124,1,25,0,83,0,114,120,0,0,0,169, + 1,114,42,1,0,0,41,2,114,129,0,0,0,218,5,105, + 110,100,101,120,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,95,95,103,101,116,105,116,101,109,95,95, + 186,4,0,0,114,46,1,0,0,122,26,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,103,101,116,105, + 116,101,109,95,95,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,14, + 0,0,0,124,2,124,0,106,0,124,1,60,0,100,0,83, + 0,114,120,0,0,0,41,1,114,34,1,0,0,41,3,114, + 129,0,0,0,114,48,1,0,0,114,57,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, + 95,115,101,116,105,116,101,109,95,95,189,4,0,0,115,4, + 0,0,0,14,1,255,128,122,26,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,95,115,101,116,105,116,101, + 109,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,114,43,1,0, + 0,114,120,0,0,0,41,2,114,4,0,0,0,114,42,1, + 0,0,114,7,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,7,95,95,108,101,110,95,95,192, + 4,0,0,114,46,1,0,0,122,22,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,243,12,0,0,0,100,1, + 160,0,124,0,106,1,161,1,83,0,41,2,78,122,20,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, + 114,125,41,41,2,114,76,0,0,0,114,34,1,0,0,114, + 7,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,8,95,95,114,101,112,114,95,95,195,4,0, + 0,114,46,1,0,0,122,23,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,114,101,112,114,95,95,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,124,1,124, + 0,160,0,161,0,118,0,83,0,114,120,0,0,0,114,47, + 1,0,0,169,2,114,129,0,0,0,218,4,105,116,101,109, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 12,95,95,99,111,110,116,97,105,110,115,95,95,198,4,0, + 0,114,46,1,0,0,122,27,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,110, + 115,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, + 0,124,0,106,0,160,1,124,1,161,1,1,0,100,0,83, + 0,114,120,0,0,0,41,2,114,34,1,0,0,114,196,0, + 0,0,114,54,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,196,0,0,0,201,4,0,0,243, + 4,0,0,0,16,1,255,128,122,21,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, + 41,15,114,136,0,0,0,114,135,0,0,0,114,137,0,0, + 0,114,138,0,0,0,114,222,0,0,0,114,40,1,0,0, + 114,35,1,0,0,114,42,1,0,0,114,45,1,0,0,114, + 49,1,0,0,114,50,1,0,0,114,51,1,0,0,114,53, + 1,0,0,114,56,1,0,0,114,196,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,32,1,0,0,143,4,0,0,115,28,0,0,0,8, + 0,4,1,8,6,8,6,8,10,8,4,8,13,8,3,8, + 3,8,3,8,3,8,3,12,3,255,128,114,32,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,64,0,0,0,115,88,0,0,0,101,0, + 90,1,100,0,90,2,100,1,100,2,132,0,90,3,101,4, + 100,3,100,4,132,0,131,1,90,5,100,5,100,6,132,0, + 90,6,100,7,100,8,132,0,90,7,100,9,100,10,132,0, + 90,8,100,11,100,12,132,0,90,9,100,13,100,14,132,0, + 90,10,100,15,100,16,132,0,90,11,100,17,100,18,132,0, + 90,12,100,19,83,0,41,20,218,16,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,99,4,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,18,0,0,0,116,0,124,1,124,2,124,3, + 131,3,124,0,95,1,100,0,83,0,114,120,0,0,0,41, + 2,114,32,1,0,0,114,34,1,0,0,114,38,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 222,0,0,0,207,4,0,0,115,4,0,0,0,18,1,255, + 128,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,67,0,0,0,115,24,0,0,0,116,0,160,1,100,1, + 116,2,161,2,1,0,100,2,160,3,124,0,106,4,161,1, + 83,0,41,4,122,115,82,101,116,117,114,110,32,114,101,112, + 114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116, + 32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32, + 116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10, + 10,32,32,32,32,32,32,32,32,122,82,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,46,109,111,100,117, + 108,101,95,114,101,112,114,40,41,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, + 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, + 110,32,80,121,116,104,111,110,32,51,46,49,50,122,25,60, + 109,111,100,117,108,101,32,123,33,114,125,32,40,110,97,109, + 101,115,112,97,99,101,41,62,78,41,5,114,87,0,0,0, + 114,88,0,0,0,114,89,0,0,0,114,76,0,0,0,114, + 136,0,0,0,41,1,114,230,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,11,109,111,100,117, + 108,101,95,114,101,112,114,210,4,0,0,115,10,0,0,0, + 6,7,2,1,4,255,12,2,255,128,122,28,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, + 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,114,23,0,0,0,41,2,78,84,114,7,0,0,0,114, + 233,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,192,0,0,0,221,4,0,0,243,4,0,0, + 0,4,1,255,128,122,27,95,78,97,109,101,115,112,97,99, 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, 103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, 0,0,0,1,0,0,0,67,0,0,0,114,23,0,0,0, - 41,2,122,63,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,32,99,97,110,110,111,116,32,99,114, - 101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101, - 99,116,46,78,114,7,0,0,0,114,233,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,227,0, - 0,0,123,4,0,0,114,24,0,0,0,122,28,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,114,23,0,0,0,41,2,122,53,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, - 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,114,7,0,0,0,114,233,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,243,0,0,0,127, - 4,0,0,114,24,0,0,0,122,30,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,114,12,1,0,0,114,13,1,0,0,114,61,0,0,0, - 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,189,0,0,0,131,4,0,0,114,14,1, - 0,0,122,32,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, - 110,97,109,101,78,41,14,114,136,0,0,0,114,135,0,0, - 0,114,137,0,0,0,114,138,0,0,0,114,222,0,0,0, - 114,2,1,0,0,114,8,1,0,0,114,225,0,0,0,114, - 231,0,0,0,114,192,0,0,0,114,227,0,0,0,114,243, - 0,0,0,114,146,0,0,0,114,189,0,0,0,114,7,0, + 41,2,78,114,10,0,0,0,114,7,0,0,0,114,233,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,16,1,0,0,84,4,0,0,115,26,0,0,0,8, - 0,4,2,8,6,8,4,8,4,8,3,8,8,8,6,8, - 6,8,4,2,4,14,1,255,128,114,16,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,64,0,0,0,115,104,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, - 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, - 100,8,100,9,132,0,90,7,100,10,100,11,132,0,90,8, - 100,12,100,13,132,0,90,9,100,14,100,15,132,0,90,10, - 100,16,100,17,132,0,90,11,100,18,100,19,132,0,90,12, - 100,20,100,21,132,0,90,13,100,22,100,23,132,0,90,14, - 100,24,83,0,41,25,218,14,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,97,38,1,0,0,82,101,112,114,101, - 115,101,110,116,115,32,97,32,110,97,109,101,115,112,97,99, - 101,32,112,97,99,107,97,103,101,39,115,32,112,97,116,104, - 46,32,32,73,116,32,117,115,101,115,32,116,104,101,32,109, - 111,100,117,108,101,32,110,97,109,101,10,32,32,32,32,116, - 111,32,102,105,110,100,32,105,116,115,32,112,97,114,101,110, - 116,32,109,111,100,117,108,101,44,32,97,110,100,32,102,114, - 111,109,32,116,104,101,114,101,32,105,116,32,108,111,111,107, - 115,32,117,112,32,116,104,101,32,112,97,114,101,110,116,39, - 115,10,32,32,32,32,95,95,112,97,116,104,95,95,46,32, - 32,87,104,101,110,32,116,104,105,115,32,99,104,97,110,103, - 101,115,44,32,116,104,101,32,109,111,100,117,108,101,39,115, - 32,111,119,110,32,112,97,116,104,32,105,115,32,114,101,99, - 111,109,112,117,116,101,100,44,10,32,32,32,32,117,115,105, - 110,103,32,112,97,116,104,95,102,105,110,100,101,114,46,32, - 32,70,111,114,32,116,111,112,45,108,101,118,101,108,32,109, - 111,100,117,108,101,115,44,32,116,104,101,32,112,97,114,101, - 110,116,32,109,111,100,117,108,101,39,115,32,112,97,116,104, - 10,32,32,32,32,105,115,32,115,121,115,46,112,97,116,104, - 46,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,124, - 1,124,0,95,0,124,2,124,0,95,1,116,2,124,0,160, - 3,161,0,131,1,124,0,95,4,124,3,124,0,95,5,100, - 0,83,0,114,120,0,0,0,41,6,218,5,95,110,97,109, - 101,218,5,95,112,97,116,104,114,122,0,0,0,218,16,95, - 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218, - 17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97, - 116,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114, - 169,4,114,129,0,0,0,114,127,0,0,0,114,57,0,0, - 0,90,11,112,97,116,104,95,102,105,110,100,101,114,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,222,0, - 0,0,144,4,0,0,115,10,0,0,0,6,1,6,1,14, - 1,10,1,255,128,122,23,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,95,105,110,105,116,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,124,0,106,0, - 160,1,100,1,161,1,92,3,125,1,125,2,125,3,124,2, - 100,2,107,2,114,15,100,3,83,0,124,1,100,4,102,2, - 83,0,41,6,122,62,82,101,116,117,114,110,115,32,97,32, - 116,117,112,108,101,32,111,102,32,40,112,97,114,101,110,116, - 45,109,111,100,117,108,101,45,110,97,109,101,44,32,112,97, - 114,101,110,116,45,112,97,116,104,45,97,116,116,114,45,110, - 97,109,101,41,114,85,0,0,0,114,10,0,0,0,41,2, - 114,15,0,0,0,114,57,0,0,0,90,8,95,95,112,97, - 116,104,95,95,78,41,2,114,33,1,0,0,114,54,0,0, - 0,41,4,114,129,0,0,0,114,25,1,0,0,218,3,100, - 111,116,90,2,109,101,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,23,95,102,105,110,100,95,112,97,114, - 101,110,116,95,112,97,116,104,95,110,97,109,101,115,150,4, - 0,0,115,10,0,0,0,18,2,8,1,4,2,8,3,255, - 128,122,38,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,112, - 97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,28,0,0,0,124,0,160,0,161,0,92,2,125, - 1,125,2,116,1,116,2,106,3,124,1,25,0,124,2,131, - 2,83,0,114,120,0,0,0,41,4,114,40,1,0,0,114, - 141,0,0,0,114,15,0,0,0,218,7,109,111,100,117,108, - 101,115,41,3,114,129,0,0,0,90,18,112,97,114,101,110, - 116,95,109,111,100,117,108,101,95,110,97,109,101,90,14,112, - 97,116,104,95,97,116,116,114,95,110,97,109,101,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,35,1,0, - 0,160,4,0,0,115,6,0,0,0,12,1,16,1,255,128, - 122,31,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,103,101,116,95,112,97,114,101,110,116,95,112,97,116, - 104,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,116, - 0,124,0,160,1,161,0,131,1,125,1,124,1,124,0,106, - 2,107,3,114,37,124,0,160,3,124,0,106,4,124,1,161, - 2,125,2,124,2,100,0,117,1,114,34,124,2,106,5,100, - 0,117,0,114,34,124,2,106,6,114,34,124,2,106,6,124, - 0,95,7,124,1,124,0,95,2,124,0,106,7,83,0,114, - 120,0,0,0,41,8,114,122,0,0,0,114,35,1,0,0, - 114,36,1,0,0,114,37,1,0,0,114,33,1,0,0,114, - 150,0,0,0,114,188,0,0,0,114,34,1,0,0,41,3, - 114,129,0,0,0,90,11,112,97,114,101,110,116,95,112,97, - 116,104,114,197,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,12,95,114,101,99,97,108,99,117, - 108,97,116,101,164,4,0,0,115,18,0,0,0,12,2,10, - 1,14,1,18,3,6,1,8,1,6,1,6,1,255,128,122, - 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,243,12,0,0,0,116,0,124,0,160,1, - 161,0,131,1,83,0,114,120,0,0,0,41,2,218,4,105, - 116,101,114,114,42,1,0,0,114,7,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,95, - 105,116,101,114,95,95,177,4,0,0,243,4,0,0,0,12, - 1,255,128,122,23,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,105,116,101,114,95,95,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,115,12,0,0,0,124,0,160,0,161,0, - 124,1,25,0,83,0,114,120,0,0,0,169,1,114,42,1, - 0,0,41,2,114,129,0,0,0,218,5,105,110,100,101,120, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,95,95,103,101,116,105,116,101,109,95,95,180,4,0,0, - 114,46,1,0,0,122,26,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,95,103,101,116,105,116,101,109,95, - 95,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,67,0,0,0,115,14,0,0,0,124, - 2,124,0,106,0,124,1,60,0,100,0,83,0,114,120,0, - 0,0,41,1,114,34,1,0,0,41,3,114,129,0,0,0, - 114,48,1,0,0,114,57,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,95,95,115,101,116, - 105,116,101,109,95,95,183,4,0,0,115,4,0,0,0,14, - 1,255,128,122,26,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,115,101,116,105,116,101,109,95,95,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,114,43,1,0,0,114,120,0, - 0,0,41,2,114,4,0,0,0,114,42,1,0,0,114,7, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,7,95,95,108,101,110,95,95,186,4,0,0,114, - 46,1,0,0,122,22,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,108,101,110,95,95,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,243,12,0,0,0,100,1,160,0,124,0, - 106,1,161,1,83,0,41,2,78,122,20,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,41, - 2,114,76,0,0,0,114,34,1,0,0,114,7,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 8,95,95,114,101,112,114,95,95,189,4,0,0,114,46,1, - 0,0,122,23,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,12,0,0,0,124,1,124,0,160,0,161, - 0,118,0,83,0,114,120,0,0,0,114,47,1,0,0,169, - 2,114,129,0,0,0,218,4,105,116,101,109,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,12,95,95,99, - 111,110,116,97,105,110,115,95,95,192,4,0,0,114,46,1, - 0,0,122,27,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,95,99,111,110,116,97,105,110,115,95,95,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,16,0,0,0,124,0,106, - 0,160,1,124,1,161,1,1,0,100,0,83,0,114,120,0, - 0,0,41,2,114,34,1,0,0,114,196,0,0,0,114,54, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,196,0,0,0,195,4,0,0,243,4,0,0,0, - 16,1,255,128,122,21,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,97,112,112,101,110,100,78,41,15,114,136, - 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, - 0,0,114,222,0,0,0,114,40,1,0,0,114,35,1,0, - 0,114,42,1,0,0,114,45,1,0,0,114,49,1,0,0, - 114,50,1,0,0,114,51,1,0,0,114,53,1,0,0,114, - 56,1,0,0,114,196,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,32,1, - 0,0,137,4,0,0,115,28,0,0,0,8,0,4,1,8, - 6,8,6,8,10,8,4,8,13,8,3,8,3,8,3,8, - 3,8,3,12,3,255,128,114,32,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,64,0,0,0,115,88,0,0,0,101,0,90,1,100,0, - 90,2,100,1,100,2,132,0,90,3,101,4,100,3,100,4, - 132,0,131,1,90,5,100,5,100,6,132,0,90,6,100,7, - 100,8,132,0,90,7,100,9,100,10,132,0,90,8,100,11, - 100,12,132,0,90,9,100,13,100,14,132,0,90,10,100,15, - 100,16,132,0,90,11,100,17,100,18,132,0,90,12,100,19, - 83,0,41,20,218,16,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 18,0,0,0,116,0,124,1,124,2,124,3,131,3,124,0, - 95,1,100,0,83,0,114,120,0,0,0,41,2,114,32,1, - 0,0,114,34,1,0,0,114,38,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,222,0,0,0, - 201,4,0,0,115,4,0,0,0,18,1,255,128,122,25,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, - 0,115,24,0,0,0,116,0,160,1,100,1,116,2,161,2, - 1,0,100,2,160,3,124,0,106,4,161,1,83,0,41,4, - 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, - 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, - 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, - 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, - 32,32,32,32,32,122,82,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114, - 101,112,114,40,41,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, - 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, - 116,104,111,110,32,51,46,49,50,122,25,60,109,111,100,117, - 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, - 99,101,41,62,78,41,5,114,87,0,0,0,114,88,0,0, - 0,114,89,0,0,0,114,76,0,0,0,114,136,0,0,0, - 41,1,114,230,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,11,109,111,100,117,108,101,95,114, - 101,112,114,204,4,0,0,115,10,0,0,0,6,7,2,1, - 4,255,12,2,255,128,122,28,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,46,109,111,100,117,108,101,95, - 114,101,112,114,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, - 0,0,41,2,78,84,114,7,0,0,0,114,233,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 192,0,0,0,215,4,0,0,243,4,0,0,0,4,1,255, - 128,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,114,23,0,0,0,41,2,78,114, - 10,0,0,0,114,7,0,0,0,114,233,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,243,0, - 0,0,218,4,0,0,114,60,1,0,0,122,27,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, - 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,6,0,0,0,67,0,0, - 0,115,16,0,0,0,116,0,100,1,100,2,100,3,100,4, - 100,5,141,4,83,0,41,6,78,114,10,0,0,0,122,8, - 60,115,116,114,105,110,103,62,114,229,0,0,0,84,41,1, - 114,245,0,0,0,41,1,114,246,0,0,0,114,233,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,227,0,0,0,221,4,0,0,114,57,1,0,0,122,25, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,114,23,0,0,0,114,223,0,0,0,114,7,0,0, - 0,114,224,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,225,0,0,0,224,4,0,0,114,226, - 0,0,0,122,30,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, + 0,114,243,0,0,0,224,4,0,0,114,60,1,0,0,122, + 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,0, + 0,67,0,0,0,115,16,0,0,0,116,0,100,1,100,2, + 100,3,100,4,100,5,141,4,83,0,41,6,78,114,10,0, + 0,0,122,8,60,115,116,114,105,110,103,62,114,229,0,0, + 0,84,41,1,114,245,0,0,0,41,1,114,246,0,0,0, + 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,227,0,0,0,227,4,0,0,114,57,1, + 0,0,122,25,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,114,223,0,0,0, + 114,7,0,0,0,114,224,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,225,0,0,0,230,4, + 0,0,114,226,0,0,0,122,30,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,99,114,101,97,116,101, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,0,83,0,114,120,0,0,0,114,7, + 0,0,0,114,27,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,231,0,0,0,233,4,0,0, + 114,60,1,0,0,122,28,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,0,83,0,114,120,0,0,0,114,7,0,0,0,114, - 27,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,231,0,0,0,227,4,0,0,114,60,1,0, - 0,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,26,0,0,0,116,0,160, - 1,100,1,124,0,106,2,161,2,1,0,116,0,160,3,124, - 0,124,1,161,2,83,0,41,3,122,98,76,111,97,100,32, - 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, - 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, - 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, - 32,123,33,114,125,78,41,4,114,145,0,0,0,114,159,0, - 0,0,114,34,1,0,0,114,232,0,0,0,114,233,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,234,0,0,0,230,4,0,0,115,10,0,0,0,6,7, - 4,1,4,255,12,3,255,128,122,28,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,108,111,97,100,95, - 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 22,0,0,0,100,1,100,2,108,0,109,1,125,2,1,0, - 124,2,124,0,106,2,131,1,83,0,41,3,78,114,0,0, - 0,0,41,1,218,15,78,97,109,101,115,112,97,99,101,82, - 101,97,100,101,114,41,3,114,18,1,0,0,114,61,1,0, - 0,114,34,1,0,0,41,3,114,129,0,0,0,114,230,0, - 0,0,114,61,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,19,1,0,0,242,4,0,0,115, - 6,0,0,0,12,1,10,1,255,128,122,36,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, - 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, - 78,41,13,114,136,0,0,0,114,135,0,0,0,114,137,0, - 0,0,114,222,0,0,0,114,219,0,0,0,114,59,1,0, - 0,114,192,0,0,0,114,243,0,0,0,114,227,0,0,0, - 114,225,0,0,0,114,231,0,0,0,114,234,0,0,0,114, - 19,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,58,1,0,0,200,4,0, - 0,115,24,0,0,0,8,0,8,1,2,3,10,1,8,10, - 8,3,8,3,8,3,8,3,8,3,12,12,255,128,114,58, - 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,64,0,0,0,115,118,0,0, - 0,101,0,90,1,100,0,90,2,100,1,90,3,101,4,100, - 2,100,3,132,0,131,1,90,5,101,4,100,4,100,5,132, - 0,131,1,90,6,101,7,100,6,100,7,132,0,131,1,90, - 8,101,7,100,8,100,9,132,0,131,1,90,9,101,7,100, - 19,100,11,100,12,132,1,131,1,90,10,101,7,100,20,100, - 13,100,14,132,1,131,1,90,11,101,7,100,21,100,15,100, - 16,132,1,131,1,90,12,101,4,100,17,100,18,132,0,131, - 1,90,13,100,10,83,0,41,22,218,10,80,97,116,104,70, - 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, - 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, - 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, - 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, - 117,116,101,115,46,99,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,64, - 0,0,0,116,0,116,1,106,2,160,3,161,0,131,1,68, - 0,93,22,92,2,125,0,125,1,124,1,100,1,117,0,114, - 20,116,1,106,2,124,0,61,0,113,7,116,4,124,1,100, - 2,131,2,114,29,124,1,160,5,161,0,1,0,113,7,100, - 1,83,0,41,3,122,125,67,97,108,108,32,116,104,101,32, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,40,41,32,109,101,116,104,111,100,32,111,110,32,97,108, - 108,32,112,97,116,104,32,101,110,116,114,121,32,102,105,110, - 100,101,114,115,10,32,32,32,32,32,32,32,32,115,116,111, - 114,101,100,32,105,110,32,115,121,115,46,112,97,116,104,95, - 105,109,112,111,114,116,101,114,95,99,97,99,104,101,115,32, - 40,119,104,101,114,101,32,105,109,112,108,101,109,101,110,116, - 101,100,41,46,78,218,17,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,41,6,218,4,108,105,115,116, - 114,15,0,0,0,218,19,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,218,5,105,116,101,109, - 115,114,139,0,0,0,114,63,1,0,0,41,2,114,127,0, - 0,0,218,6,102,105,110,100,101,114,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,63,1,0,0,253,4, - 0,0,115,16,0,0,0,22,4,8,1,10,1,10,1,8, - 1,2,128,4,252,255,128,122,28,80,97,116,104,70,105,110, - 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,9,0,0,0,67,0,0,0,115,76, - 0,0,0,116,0,106,1,100,1,117,1,114,14,116,0,106, - 1,115,14,116,2,160,3,100,2,116,4,161,2,1,0,116, - 0,106,1,68,0,93,17,125,1,122,7,124,1,124,0,131, - 1,87,0,2,0,1,0,83,0,4,0,116,5,121,37,1, - 0,1,0,1,0,89,0,113,17,100,1,83,0,119,0,41, - 3,122,46,83,101,97,114,99,104,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102, - 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, - 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111, - 107,115,32,105,115,32,101,109,112,116,121,41,6,114,15,0, - 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,87, - 0,0,0,114,88,0,0,0,114,148,0,0,0,114,128,0, - 0,0,41,2,114,57,0,0,0,90,4,104,111,111,107,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,11, - 95,112,97,116,104,95,104,111,111,107,115,7,5,0,0,115, - 20,0,0,0,16,3,12,1,10,1,2,1,14,1,12,1, - 4,1,4,2,2,253,255,128,122,22,80,97,116,104,70,105, - 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,8,0,0,0,67,0,0,0,115,100,0,0,0,124,1, - 100,1,107,2,114,20,122,6,116,0,160,1,161,0,125,1, - 87,0,110,9,4,0,116,2,121,49,1,0,1,0,1,0, - 89,0,100,2,83,0,122,8,116,3,106,4,124,1,25,0, - 125,2,87,0,124,2,83,0,4,0,116,5,121,48,1,0, - 1,0,1,0,124,0,160,6,124,1,161,1,125,2,124,2, - 116,3,106,4,124,1,60,0,89,0,124,2,83,0,119,0, - 119,0,41,3,122,210,71,101,116,32,116,104,101,32,102,105, - 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, - 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, - 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, - 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, - 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, - 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, - 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, - 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, - 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, - 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, - 32,32,32,32,32,32,32,32,114,10,0,0,0,78,41,7, - 114,18,0,0,0,114,69,0,0,0,218,17,70,105,108,101, - 78,111,116,70,111,117,110,100,69,114,114,111,114,114,15,0, - 0,0,114,65,1,0,0,218,8,75,101,121,69,114,114,111, - 114,114,69,1,0,0,41,3,114,208,0,0,0,114,57,0, - 0,0,114,67,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,20,95,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,20,5,0,0, - 115,30,0,0,0,8,8,2,1,12,1,12,1,6,3,2, - 1,12,1,4,4,12,253,10,1,12,1,4,1,2,253,2, - 250,255,128,122,31,80,97,116,104,70,105,110,100,101,114,46, - 95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,99,3,0,0,0,0,0,0,0,0,0,0, - 0,7,0,0,0,4,0,0,0,67,0,0,0,115,138,0, - 0,0,116,0,124,2,100,1,131,2,114,27,116,1,160,2, - 124,2,161,1,155,0,100,2,157,2,125,3,116,3,160,4, - 124,3,116,5,161,2,1,0,124,2,160,6,124,1,161,1, - 92,2,125,4,125,5,110,21,116,1,160,2,124,2,161,1, - 155,0,100,3,157,2,125,3,116,3,160,4,124,3,116,5, - 161,2,1,0,124,2,160,7,124,1,161,1,125,4,103,0, - 125,5,124,4,100,0,117,1,114,58,116,1,160,8,124,1, - 124,4,161,2,83,0,116,1,160,9,124,1,100,0,161,2, - 125,6,124,5,124,6,95,10,124,6,83,0,41,4,78,114, - 147,0,0,0,122,53,46,102,105,110,100,95,115,112,101,99, - 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, - 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, - 110,100,95,108,111,97,100,101,114,40,41,122,53,46,102,105, - 110,100,95,115,112,101,99,40,41,32,110,111,116,32,102,111, - 117,110,100,59,32,102,97,108,108,105,110,103,32,98,97,99, - 107,32,116,111,32,102,105,110,100,95,109,111,100,117,108,101, - 40,41,41,11,114,139,0,0,0,114,145,0,0,0,90,12, - 95,111,98,106,101,99,116,95,110,97,109,101,114,87,0,0, - 0,114,88,0,0,0,114,148,0,0,0,114,147,0,0,0, - 114,216,0,0,0,114,211,0,0,0,114,193,0,0,0,114, - 188,0,0,0,41,7,114,208,0,0,0,114,149,0,0,0, - 114,67,1,0,0,114,152,0,0,0,114,150,0,0,0,114, - 151,0,0,0,114,197,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,16,95,108,101,103,97,99, - 121,95,103,101,116,95,115,112,101,99,42,5,0,0,115,28, - 0,0,0,10,4,16,1,12,2,16,1,16,2,12,2,10, - 1,4,1,8,1,12,1,12,1,6,1,4,1,255,128,122, - 27,80,97,116,104,70,105,110,100,101,114,46,95,108,101,103, - 97,99,121,95,103,101,116,95,115,112,101,99,78,99,4,0, - 0,0,0,0,0,0,0,0,0,0,9,0,0,0,5,0, - 0,0,67,0,0,0,115,166,0,0,0,103,0,125,4,124, - 2,68,0,93,67,125,5,116,0,124,5,116,1,116,2,102, - 2,131,2,115,14,113,4,124,0,160,3,124,5,161,1,125, - 6,124,6,100,1,117,1,114,71,116,4,124,6,100,2,131, - 2,114,35,124,6,160,5,124,1,124,3,161,2,125,7,110, - 6,124,0,160,6,124,1,124,6,161,2,125,7,124,7,100, - 1,117,0,114,46,113,4,124,7,106,7,100,1,117,1,114, - 55,124,7,2,0,1,0,83,0,124,7,106,8,125,8,124, - 8,100,1,117,0,114,66,116,9,100,3,131,1,130,1,124, - 4,160,10,124,8,161,1,1,0,113,4,116,11,160,12,124, - 1,100,1,161,2,125,7,124,4,124,7,95,8,124,7,83, - 0,41,4,122,63,70,105,110,100,32,116,104,101,32,108,111, - 97,100,101,114,32,111,114,32,110,97,109,101,115,112,97,99, - 101,95,112,97,116,104,32,102,111,114,32,116,104,105,115,32, - 109,111,100,117,108,101,47,112,97,99,107,97,103,101,32,110, - 97,109,101,46,78,114,213,0,0,0,122,19,115,112,101,99, - 32,109,105,115,115,105,110,103,32,108,111,97,100,101,114,41, - 13,114,171,0,0,0,114,96,0,0,0,218,5,98,121,116, - 101,115,114,72,1,0,0,114,139,0,0,0,114,213,0,0, - 0,114,73,1,0,0,114,150,0,0,0,114,188,0,0,0, - 114,128,0,0,0,114,177,0,0,0,114,145,0,0,0,114, - 193,0,0,0,41,9,114,208,0,0,0,114,149,0,0,0, - 114,57,0,0,0,114,212,0,0,0,218,14,110,97,109,101, - 115,112,97,99,101,95,112,97,116,104,90,5,101,110,116,114, - 121,114,67,1,0,0,114,197,0,0,0,114,151,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 9,95,103,101,116,95,115,112,101,99,63,5,0,0,115,44, - 0,0,0,4,5,8,1,14,1,2,1,10,1,8,1,10, - 1,14,1,12,2,8,1,2,1,10,1,8,1,6,1,8, - 1,8,1,10,5,2,128,12,2,6,1,4,1,255,128,122, - 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,99,4,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,5,0,0,0,67,0,0,0,115,94, - 0,0,0,124,2,100,1,117,0,114,7,116,0,106,1,125, - 2,124,0,160,2,124,1,124,2,124,3,161,3,125,4,124, - 4,100,1,117,0,114,20,100,1,83,0,124,4,106,3,100, - 1,117,0,114,45,124,4,106,4,125,5,124,5,114,43,100, - 1,124,4,95,5,116,6,124,1,124,5,124,0,106,2,131, - 3,124,4,95,4,124,4,83,0,100,1,83,0,124,4,83, - 0,41,2,122,141,84,114,121,32,116,111,32,102,105,110,100, - 32,97,32,115,112,101,99,32,102,111,114,32,39,102,117,108, - 108,110,97,109,101,39,32,111,110,32,115,121,115,46,112,97, - 116,104,32,111,114,32,39,112,97,116,104,39,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,115,101,97,114,99, - 104,32,105,115,32,98,97,115,101,100,32,111,110,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, + 2,0,0,0,4,0,0,0,67,0,0,0,115,26,0,0, + 0,116,0,160,1,100,1,124,0,106,2,161,2,1,0,116, + 0,160,3,124,0,124,1,161,2,83,0,41,3,122,98,76, + 111,97,100,32,97,32,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,122,38,110,97,109,101,115,112,97,99,101,32,109,111,100, + 117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,32, + 112,97,116,104,32,123,33,114,125,78,41,4,114,145,0,0, + 0,114,159,0,0,0,114,34,1,0,0,114,232,0,0,0, + 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,234,0,0,0,236,4,0,0,115,10,0, + 0,0,6,7,4,1,4,255,12,3,255,128,122,28,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,108, + 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, + 0,0,0,115,22,0,0,0,100,1,100,2,108,0,109,1, + 125,2,1,0,124,2,124,0,106,2,131,1,83,0,41,3, + 78,114,0,0,0,0,41,1,218,15,78,97,109,101,115,112, + 97,99,101,82,101,97,100,101,114,41,3,114,18,1,0,0, + 114,61,1,0,0,114,34,1,0,0,41,3,114,129,0,0, + 0,114,230,0,0,0,114,61,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,19,1,0,0,248, + 4,0,0,115,6,0,0,0,12,1,10,1,255,128,122,36, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, + 97,100,101,114,78,41,13,114,136,0,0,0,114,135,0,0, + 0,114,137,0,0,0,114,222,0,0,0,114,219,0,0,0, + 114,59,1,0,0,114,192,0,0,0,114,243,0,0,0,114, + 227,0,0,0,114,225,0,0,0,114,231,0,0,0,114,234, + 0,0,0,114,19,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,58,1,0, + 0,206,4,0,0,115,24,0,0,0,8,0,8,1,2,3, + 10,1,8,10,8,3,8,3,8,3,8,3,8,3,12,12, + 255,128,114,58,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, + 115,118,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,100, + 4,100,5,132,0,131,1,90,6,101,7,100,6,100,7,132, + 0,131,1,90,8,101,7,100,8,100,9,132,0,131,1,90, + 9,101,7,100,19,100,11,100,12,132,1,131,1,90,10,101, + 7,100,20,100,13,100,14,132,1,131,1,90,11,101,7,100, + 21,100,15,100,16,132,1,131,1,90,12,101,4,100,17,100, + 18,132,0,131,1,90,13,100,10,83,0,41,22,218,10,80, + 97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,32, + 112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,32, + 115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,99, + 107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,116, + 116,114,105,98,117,116,101,115,46,99,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,64,0,0,0,116,0,116,1,106,2,160,3,161, + 0,131,1,68,0,93,22,92,2,125,0,125,1,124,1,100, + 1,117,0,114,20,116,1,106,2,124,0,61,0,113,7,116, + 4,124,1,100,2,131,2,114,29,124,1,160,5,161,0,1, + 0,113,7,100,1,83,0,41,3,122,125,67,97,108,108,32, + 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, + 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, + 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, + 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, + 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, + 109,101,110,116,101,100,41,46,78,218,17,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,41,6,218,4, + 108,105,115,116,114,15,0,0,0,218,19,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,218,5, + 105,116,101,109,115,114,139,0,0,0,114,63,1,0,0,41, + 2,114,127,0,0,0,218,6,102,105,110,100,101,114,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,63,1, + 0,0,3,5,0,0,115,16,0,0,0,22,4,8,1,10, + 1,10,1,8,1,2,128,4,252,255,128,122,28,80,97,116, + 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, + 116,101,95,99,97,99,104,101,115,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,9,0,0,0,67,0, + 0,0,115,76,0,0,0,116,0,106,1,100,1,117,1,114, + 14,116,0,106,1,115,14,116,2,160,3,100,2,116,4,161, + 2,1,0,116,0,106,1,68,0,93,17,125,1,122,7,124, + 1,124,0,131,1,87,0,2,0,1,0,83,0,4,0,116, + 5,121,37,1,0,1,0,1,0,89,0,113,17,100,1,83, + 0,119,0,41,3,122,46,83,101,97,114,99,104,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,102,111,114, + 32,97,32,102,105,110,100,101,114,32,102,111,114,32,39,112, + 97,116,104,39,46,78,122,23,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,41, + 6,114,15,0,0,0,218,10,112,97,116,104,95,104,111,111, + 107,115,114,87,0,0,0,114,88,0,0,0,114,148,0,0, + 0,114,128,0,0,0,41,2,114,57,0,0,0,90,4,104, + 111,111,107,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,13, + 5,0,0,115,20,0,0,0,16,3,12,1,10,1,2,1, + 14,1,12,1,4,1,4,2,2,253,255,128,122,22,80,97, + 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,104, + 111,111,107,115,99,2,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,8,0,0,0,67,0,0,0,115,100,0, + 0,0,124,1,100,1,107,2,114,20,122,6,116,0,160,1, + 161,0,125,1,87,0,110,9,4,0,116,2,121,49,1,0, + 1,0,1,0,89,0,100,2,83,0,122,8,116,3,106,4, + 124,1,25,0,125,2,87,0,124,2,83,0,4,0,116,5, + 121,48,1,0,1,0,1,0,124,0,160,6,124,1,161,1, + 125,2,124,2,116,3,106,4,124,1,60,0,89,0,124,2, + 83,0,119,0,119,0,41,3,122,210,71,101,116,32,116,104, + 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, + 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,32,32,32,32,32,32, - 32,32,78,41,7,114,15,0,0,0,114,57,0,0,0,114, - 76,1,0,0,114,150,0,0,0,114,188,0,0,0,114,191, - 0,0,0,114,32,1,0,0,41,6,114,208,0,0,0,114, - 149,0,0,0,114,57,0,0,0,114,212,0,0,0,114,197, - 0,0,0,114,75,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,213,0,0,0,95,5,0,0, - 115,28,0,0,0,8,6,6,1,14,1,8,1,4,1,10, - 1,6,1,4,1,6,3,16,1,4,1,4,2,4,2,255, - 128,122,20,80,97,116,104,70,105,110,100,101,114,46,102,105, - 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, - 3,124,3,100,1,117,0,114,12,100,1,83,0,124,3,106, - 1,83,0,41,2,122,170,102,105,110,100,32,116,104,101,32, + 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, + 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, + 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, + 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, + 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, + 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, + 100,32,99,97,99,104,101,32,105,116,46,32,73,102,32,110, + 111,32,102,105,110,100,101,114,32,105,115,32,97,118,97,105, + 108,97,98,108,101,44,32,115,116,111,114,101,32,78,111,110, + 101,46,10,10,32,32,32,32,32,32,32,32,114,10,0,0, + 0,78,41,7,114,18,0,0,0,114,69,0,0,0,218,17, + 70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,111, + 114,114,15,0,0,0,114,65,1,0,0,218,8,75,101,121, + 69,114,114,111,114,114,69,1,0,0,41,3,114,208,0,0, + 0,114,57,0,0,0,114,67,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,20,95,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 26,5,0,0,115,30,0,0,0,8,8,2,1,12,1,12, + 1,6,3,2,1,12,1,4,4,12,253,10,1,12,1,4, + 1,2,253,2,250,255,128,122,31,80,97,116,104,70,105,110, + 100,101,114,46,95,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,99,3,0,0,0,0,0,0, + 0,0,0,0,0,7,0,0,0,4,0,0,0,67,0,0, + 0,115,138,0,0,0,116,0,124,2,100,1,131,2,114,27, + 116,1,160,2,124,2,161,1,155,0,100,2,157,2,125,3, + 116,3,160,4,124,3,116,5,161,2,1,0,124,2,160,6, + 124,1,161,1,92,2,125,4,125,5,110,21,116,1,160,2, + 124,2,161,1,155,0,100,3,157,2,125,3,116,3,160,4, + 124,3,116,5,161,2,1,0,124,2,160,7,124,1,161,1, + 125,4,103,0,125,5,124,4,100,0,117,1,114,58,116,1, + 160,8,124,1,124,4,161,2,83,0,116,1,160,9,124,1, + 100,0,161,2,125,6,124,5,124,6,95,10,124,6,83,0, + 41,4,78,114,147,0,0,0,122,53,46,102,105,110,100,95, + 115,112,101,99,40,41,32,110,111,116,32,102,111,117,110,100, + 59,32,102,97,108,108,105,110,103,32,98,97,99,107,32,116, + 111,32,102,105,110,100,95,108,111,97,100,101,114,40,41,122, + 53,46,102,105,110,100,95,115,112,101,99,40,41,32,110,111, + 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, + 32,98,97,99,107,32,116,111,32,102,105,110,100,95,109,111, + 100,117,108,101,40,41,41,11,114,139,0,0,0,114,145,0, + 0,0,90,12,95,111,98,106,101,99,116,95,110,97,109,101, + 114,87,0,0,0,114,88,0,0,0,114,148,0,0,0,114, + 147,0,0,0,114,216,0,0,0,114,211,0,0,0,114,193, + 0,0,0,114,188,0,0,0,41,7,114,208,0,0,0,114, + 149,0,0,0,114,67,1,0,0,114,152,0,0,0,114,150, + 0,0,0,114,151,0,0,0,114,197,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,108, + 101,103,97,99,121,95,103,101,116,95,115,112,101,99,48,5, + 0,0,115,28,0,0,0,10,4,16,1,12,2,16,1,16, + 2,12,2,10,1,4,1,8,1,12,1,12,1,6,1,4, + 1,255,128,122,27,80,97,116,104,70,105,110,100,101,114,46, + 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, + 78,99,4,0,0,0,0,0,0,0,0,0,0,0,9,0, + 0,0,5,0,0,0,67,0,0,0,115,166,0,0,0,103, + 0,125,4,124,2,68,0,93,67,125,5,116,0,124,5,116, + 1,116,2,102,2,131,2,115,14,113,4,124,0,160,3,124, + 5,161,1,125,6,124,6,100,1,117,1,114,71,116,4,124, + 6,100,2,131,2,114,35,124,6,160,5,124,1,124,3,161, + 2,125,7,110,6,124,0,160,6,124,1,124,6,161,2,125, + 7,124,7,100,1,117,0,114,46,113,4,124,7,106,7,100, + 1,117,1,114,55,124,7,2,0,1,0,83,0,124,7,106, + 8,125,8,124,8,100,1,117,0,114,66,116,9,100,3,131, + 1,130,1,124,4,160,10,124,8,161,1,1,0,113,4,116, + 11,160,12,124,1,100,1,161,2,125,7,124,4,124,7,95, + 8,124,7,83,0,41,4,122,63,70,105,110,100,32,116,104, + 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, + 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, + 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, + 103,101,32,110,97,109,101,46,78,114,213,0,0,0,122,19, + 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, + 100,101,114,41,13,114,171,0,0,0,114,96,0,0,0,218, + 5,98,121,116,101,115,114,72,1,0,0,114,139,0,0,0, + 114,213,0,0,0,114,73,1,0,0,114,150,0,0,0,114, + 188,0,0,0,114,128,0,0,0,114,177,0,0,0,114,145, + 0,0,0,114,193,0,0,0,41,9,114,208,0,0,0,114, + 149,0,0,0,114,57,0,0,0,114,212,0,0,0,218,14, + 110,97,109,101,115,112,97,99,101,95,112,97,116,104,90,5, + 101,110,116,114,121,114,67,1,0,0,114,197,0,0,0,114, + 151,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,9,95,103,101,116,95,115,112,101,99,69,5, + 0,0,115,44,0,0,0,4,5,8,1,14,1,2,1,10, + 1,8,1,10,1,14,1,12,2,8,1,2,1,10,1,8, + 1,6,1,8,1,8,1,10,5,2,128,12,2,6,1,4, + 1,255,128,122,20,80,97,116,104,70,105,110,100,101,114,46, + 95,103,101,116,95,115,112,101,99,99,4,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,5,0,0,0,67,0, + 0,0,115,94,0,0,0,124,2,100,1,117,0,114,7,116, + 0,106,1,125,2,124,0,160,2,124,1,124,2,124,3,161, + 3,125,4,124,4,100,1,117,0,114,20,100,1,83,0,124, + 4,106,3,100,1,117,0,114,45,124,4,106,4,125,5,124, + 5,114,43,100,1,124,4,95,5,116,6,124,1,124,5,124, + 0,106,2,131,3,124,4,95,4,124,4,83,0,100,1,83, + 0,124,4,83,0,41,2,122,141,84,114,121,32,116,111,32, + 102,105,110,100,32,97,32,115,112,101,99,32,102,111,114,32, + 39,102,117,108,108,110,97,109,101,39,32,111,110,32,115,121, + 115,46,112,97,116,104,32,111,114,32,39,112,97,116,104,39, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,115, + 101,97,114,99,104,32,105,115,32,98,97,115,101,100,32,111, + 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, + 32,97,110,100,32,115,121,115,46,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,46,10,32,32, + 32,32,32,32,32,32,78,41,7,114,15,0,0,0,114,57, + 0,0,0,114,76,1,0,0,114,150,0,0,0,114,188,0, + 0,0,114,191,0,0,0,114,32,1,0,0,41,6,114,208, + 0,0,0,114,149,0,0,0,114,57,0,0,0,114,212,0, + 0,0,114,197,0,0,0,114,75,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,213,0,0,0, + 101,5,0,0,115,28,0,0,0,8,6,6,1,14,1,8, + 1,4,1,10,1,6,1,4,1,6,3,16,1,4,1,4, + 2,4,2,255,128,122,20,80,97,116,104,70,105,110,100,101, + 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 67,0,0,0,115,42,0,0,0,116,0,160,1,100,1,116, + 2,161,2,1,0,124,0,160,3,124,1,124,2,161,2,125, + 3,124,3,100,2,117,0,114,18,100,2,83,0,124,3,106, + 4,83,0,41,3,122,170,102,105,110,100,32,116,104,101,32, 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, @@ -2259,432 +2276,447 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,114,214,0,0,0,114,215,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,216,0,0,0, - 119,5,0,0,115,10,0,0,0,12,8,8,1,4,1,6, - 1,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, - 102,105,110,100,95,109,111,100,117,108,101,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,109, - 1,125,2,1,0,124,2,106,2,124,0,105,0,124,1,164, - 1,142,1,83,0,41,4,97,32,1,0,0,10,32,32,32, - 32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,105, - 98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,114, - 97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,116, - 114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,99, - 101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,32, - 32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,104, - 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,112, - 97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,103, - 32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,96, - 96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,108, - 108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,110, - 101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,97, - 108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,105, - 110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,32, - 32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,101, - 115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,104, - 96,96,46,10,32,32,32,32,32,32,32,32,114,0,0,0, - 0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,116, - 104,70,105,110,100,101,114,78,41,3,90,18,105,109,112,111, - 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,77, - 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, - 98,117,116,105,111,110,115,41,3,114,130,0,0,0,114,131, - 0,0,0,114,77,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,78,1,0,0,132,5,0,0, - 115,6,0,0,0,12,10,16,1,255,128,122,29,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, - 116,114,105,98,117,116,105,111,110,115,41,1,78,41,2,78, - 78,41,1,78,41,14,114,136,0,0,0,114,135,0,0,0, - 114,137,0,0,0,114,138,0,0,0,114,219,0,0,0,114, - 63,1,0,0,114,69,1,0,0,114,220,0,0,0,114,72, - 1,0,0,114,73,1,0,0,114,76,1,0,0,114,213,0, - 0,0,114,216,0,0,0,114,78,1,0,0,114,7,0,0, + 32,122,101,80,97,116,104,70,105,110,100,101,114,46,102,105, + 110,100,95,109,111,100,117,108,101,40,41,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, + 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, + 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,59, + 32,117,115,101,32,102,105,110,100,95,115,112,101,99,40,41, + 32,105,110,115,116,101,97,100,78,114,214,0,0,0,114,215, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,216,0,0,0,125,5,0,0,115,16,0,0,0, + 6,8,2,2,4,254,12,3,8,1,4,1,6,1,255,128, + 122,22,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,99,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,79,0,0, + 0,115,28,0,0,0,100,1,100,2,108,0,109,1,125,2, + 1,0,124,2,106,2,124,0,105,0,124,1,164,1,142,1, + 83,0,41,4,97,32,1,0,0,10,32,32,32,32,32,32, + 32,32,70,105,110,100,32,100,105,115,116,114,105,98,117,116, + 105,111,110,115,46,10,10,32,32,32,32,32,32,32,32,82, + 101,116,117,114,110,32,97,110,32,105,116,101,114,97,98,108, + 101,32,111,102,32,97,108,108,32,68,105,115,116,114,105,98, + 117,116,105,111,110,32,105,110,115,116,97,110,99,101,115,32, + 99,97,112,97,98,108,101,32,111,102,10,32,32,32,32,32, + 32,32,32,108,111,97,100,105,110,103,32,116,104,101,32,109, + 101,116,97,100,97,116,97,32,102,111,114,32,112,97,99,107, + 97,103,101,115,32,109,97,116,99,104,105,110,103,32,96,96, + 99,111,110,116,101,120,116,46,110,97,109,101,96,96,10,32, + 32,32,32,32,32,32,32,40,111,114,32,97,108,108,32,110, + 97,109,101,115,32,105,102,32,96,96,78,111,110,101,96,96, + 32,105,110,100,105,99,97,116,101,100,41,32,97,108,111,110, + 103,32,116,104,101,32,112,97,116,104,115,32,105,110,32,116, + 104,101,32,108,105,115,116,10,32,32,32,32,32,32,32,32, + 111,102,32,100,105,114,101,99,116,111,114,105,101,115,32,96, + 96,99,111,110,116,101,120,116,46,112,97,116,104,96,96,46, + 10,32,32,32,32,32,32,32,32,114,0,0,0,0,41,1, + 218,18,77,101,116,97,100,97,116,97,80,97,116,104,70,105, + 110,100,101,114,78,41,3,90,18,105,109,112,111,114,116,108, + 105,98,46,109,101,116,97,100,97,116,97,114,77,1,0,0, + 218,18,102,105,110,100,95,100,105,115,116,114,105,98,117,116, + 105,111,110,115,41,3,114,130,0,0,0,114,131,0,0,0, + 114,77,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,78,1,0,0,141,5,0,0,115,6,0, + 0,0,12,10,16,1,255,128,122,29,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,100,105,115,116,114,105, + 98,117,116,105,111,110,115,41,1,78,41,2,78,78,41,1, + 78,41,14,114,136,0,0,0,114,135,0,0,0,114,137,0, + 0,0,114,138,0,0,0,114,219,0,0,0,114,63,1,0, + 0,114,69,1,0,0,114,220,0,0,0,114,72,1,0,0, + 114,73,1,0,0,114,76,1,0,0,114,213,0,0,0,114, + 216,0,0,0,114,78,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,62,1, + 0,0,255,4,0,0,115,38,0,0,0,8,0,4,2,2, + 2,10,1,2,9,10,1,2,12,10,1,2,21,10,1,2, + 20,12,1,2,31,12,1,2,23,12,1,2,15,14,1,255, + 128,114,62,1,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, + 90,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, + 101,6,90,7,100,6,100,7,132,0,90,8,100,8,100,9, + 132,0,90,9,100,19,100,11,100,12,132,1,90,10,100,13, + 100,14,132,0,90,11,101,12,100,15,100,16,132,0,131,1, + 90,13,100,17,100,18,132,0,90,14,100,10,83,0,41,20, + 218,10,70,105,108,101,70,105,110,100,101,114,122,172,70,105, + 108,101,45,98,97,115,101,100,32,102,105,110,100,101,114,46, + 10,10,32,32,32,32,73,110,116,101,114,97,99,116,105,111, + 110,115,32,119,105,116,104,32,116,104,101,32,102,105,108,101, + 32,115,121,115,116,101,109,32,97,114,101,32,99,97,99,104, + 101,100,32,102,111,114,32,112,101,114,102,111,114,109,97,110, + 99,101,44,32,98,101,105,110,103,10,32,32,32,32,114,101, + 102,114,101,115,104,101,100,32,119,104,101,110,32,116,104,101, + 32,100,105,114,101,99,116,111,114,121,32,116,104,101,32,102, + 105,110,100,101,114,32,105,115,32,104,97,110,100,108,105,110, + 103,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102, + 105,101,100,46,10,10,32,32,32,32,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,7, + 0,0,0,115,84,0,0,0,103,0,125,3,124,2,68,0, + 93,16,92,2,137,0,125,4,124,3,160,0,135,0,102,1, + 100,1,100,2,132,8,124,4,68,0,131,1,161,1,1,0, + 113,4,124,3,124,0,95,1,124,1,112,27,100,3,124,0, + 95,2,100,4,124,0,95,3,116,4,131,0,124,0,95,5, + 116,4,131,0,124,0,95,6,100,5,83,0,41,6,122,154, + 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, + 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, + 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, + 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, + 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, + 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, + 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, + 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, + 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, + 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,51, + 0,0,0,115,24,0,0,0,129,0,124,0,93,7,125,1, + 124,1,136,0,102,2,86,0,1,0,113,2,100,0,83,0, + 114,120,0,0,0,114,7,0,0,0,114,28,1,0,0,169, + 1,114,150,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,9,0,0,0,170,5,0,0,115,6,0,0,0,6,128, + 18,0,255,128,122,38,70,105,108,101,70,105,110,100,101,114, + 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,114,85,0,0, + 0,114,115,0,0,0,78,41,7,114,177,0,0,0,218,8, + 95,108,111,97,100,101,114,115,114,57,0,0,0,218,11,95, + 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, + 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, + 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, + 101,41,5,114,129,0,0,0,114,57,0,0,0,218,14,108, + 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, + 111,97,100,101,114,115,114,199,0,0,0,114,7,0,0,0, + 114,80,1,0,0,114,8,0,0,0,114,222,0,0,0,164, + 5,0,0,115,18,0,0,0,4,4,12,1,26,1,6,1, + 10,2,6,1,8,1,12,1,255,128,122,19,70,105,108,101, + 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,10,0,0,0,100,1,124, + 0,95,0,100,2,83,0,41,3,122,31,73,110,118,97,108, + 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, + 111,114,121,32,109,116,105,109,101,46,114,115,0,0,0,78, + 41,1,114,82,1,0,0,114,7,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,63,1,0,0, + 178,5,0,0,114,68,0,0,0,122,28,70,105,108,101,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, + 115,54,0,0,0,116,0,160,1,100,1,116,2,161,2,1, + 0,124,0,160,3,124,1,161,1,125,2,124,2,100,2,117, + 0,114,19,100,2,103,0,102,2,83,0,124,2,106,4,124, + 2,106,5,112,25,103,0,102,2,83,0,41,3,122,197,84, + 114,121,32,116,111,32,102,105,110,100,32,97,32,108,111,97, + 100,101,114,32,102,111,114,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,109,111,100,117,108,101,44,32,111,114, + 32,116,104,101,32,110,97,109,101,115,112,97,99,101,10,32, + 32,32,32,32,32,32,32,112,97,99,107,97,103,101,32,112, + 111,114,116,105,111,110,115,46,32,82,101,116,117,114,110,115, + 32,40,108,111,97,100,101,114,44,32,108,105,115,116,45,111, + 102,45,112,111,114,116,105,111,110,115,41,46,10,10,32,32, + 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,101,70,105,108,101,70,105,110,100,101,114, + 46,102,105,110,100,95,108,111,97,100,101,114,40,41,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, + 49,50,59,32,117,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,78,41,6,114,87, + 0,0,0,114,88,0,0,0,114,89,0,0,0,114,213,0, + 0,0,114,150,0,0,0,114,188,0,0,0,41,3,114,129, + 0,0,0,114,149,0,0,0,114,197,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,147,0,0, + 0,184,5,0,0,115,16,0,0,0,6,7,2,2,4,254, + 10,3,8,1,8,1,16,1,255,128,122,22,70,105,108,101, + 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, + 101,114,99,6,0,0,0,0,0,0,0,0,0,0,0,7, + 0,0,0,6,0,0,0,67,0,0,0,115,26,0,0,0, + 124,1,124,2,124,3,131,2,125,6,116,0,124,2,124,3, + 124,6,124,4,100,1,141,4,83,0,41,2,78,114,187,0, + 0,0,41,1,114,200,0,0,0,41,7,114,129,0,0,0, + 114,198,0,0,0,114,149,0,0,0,114,57,0,0,0,90, + 4,115,109,115,108,114,212,0,0,0,114,150,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,76, + 1,0,0,199,5,0,0,115,10,0,0,0,10,1,8,1, + 2,1,6,255,255,128,122,20,70,105,108,101,70,105,110,100, + 101,114,46,95,103,101,116,95,115,112,101,99,78,99,3,0, + 0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,0, + 0,0,67,0,0,0,115,92,1,0,0,100,1,125,3,124, + 1,160,0,100,2,161,1,100,3,25,0,125,4,122,12,116, + 1,124,0,106,2,112,17,116,3,160,4,161,0,131,1,106, + 5,125,5,87,0,110,9,4,0,116,6,121,173,1,0,1, + 0,1,0,100,4,125,5,89,0,124,5,124,0,106,7,107, + 3,114,43,124,0,160,8,161,0,1,0,124,5,124,0,95, + 7,116,9,131,0,114,54,124,0,106,10,125,6,124,4,160, + 11,161,0,125,7,110,5,124,0,106,12,125,6,124,4,125, + 7,124,7,124,6,118,0,114,106,116,13,124,0,106,2,124, + 4,131,2,125,8,124,0,106,14,68,0,93,29,92,2,125, + 9,125,10,100,5,124,9,23,0,125,11,116,13,124,8,124, + 11,131,2,125,12,116,15,124,12,131,1,114,101,124,0,160, + 16,124,10,124,1,124,12,124,8,103,1,124,2,161,5,2, + 0,1,0,83,0,113,72,116,17,124,8,131,1,125,3,124, + 0,106,14,68,0,93,41,92,2,125,9,125,10,116,13,124, + 0,106,2,124,4,124,9,23,0,131,2,125,12,116,18,106, + 19,100,6,124,12,100,3,100,7,141,3,1,0,124,7,124, + 9,23,0,124,6,118,0,114,150,116,15,124,12,131,1,114, + 150,124,0,160,16,124,10,124,1,124,12,100,8,124,2,161, + 5,2,0,1,0,83,0,113,109,124,3,114,171,116,18,160, + 19,100,9,124,8,161,2,1,0,116,18,160,20,124,1,100, + 8,161,2,125,13,124,8,103,1,124,13,95,21,124,13,83, + 0,100,8,83,0,119,0,41,10,122,111,84,114,121,32,116, + 111,32,102,105,110,100,32,97,32,115,112,101,99,32,102,111, + 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,82,101,116,117,114,110,115,32,116,104,101,32,109,97,116, + 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, + 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, + 46,10,32,32,32,32,32,32,32,32,70,114,85,0,0,0, + 114,44,0,0,0,114,115,0,0,0,114,222,0,0,0,122, + 9,116,114,121,105,110,103,32,123,125,41,1,90,9,118,101, + 114,98,111,115,105,116,121,78,122,25,112,111,115,115,105,98, + 108,101,32,110,97,109,101,115,112,97,99,101,32,102,111,114, + 32,123,125,41,22,114,54,0,0,0,114,62,0,0,0,114, + 57,0,0,0,114,18,0,0,0,114,69,0,0,0,114,21, + 1,0,0,114,63,0,0,0,114,82,1,0,0,218,11,95, + 102,105,108,108,95,99,97,99,104,101,114,21,0,0,0,114, + 85,1,0,0,114,116,0,0,0,114,84,1,0,0,114,53, + 0,0,0,114,81,1,0,0,114,67,0,0,0,114,76,1, + 0,0,114,70,0,0,0,114,145,0,0,0,114,159,0,0, + 0,114,193,0,0,0,114,188,0,0,0,41,14,114,129,0, + 0,0,114,149,0,0,0,114,212,0,0,0,90,12,105,115, + 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, + 95,109,111,100,117,108,101,114,179,0,0,0,90,5,99,97, + 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, + 101,90,9,98,97,115,101,95,112,97,116,104,114,29,1,0, + 0,114,198,0,0,0,90,13,105,110,105,116,95,102,105,108, + 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, + 114,197,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,213,0,0,0,204,5,0,0,115,80,0, + 0,0,4,5,14,1,2,1,24,1,12,1,6,1,10,1, + 8,1,6,1,6,2,6,1,10,1,6,2,4,1,8,2, + 12,1,14,1,8,1,10,1,8,1,24,1,2,255,8,5, + 14,2,16,1,16,1,12,1,8,1,10,1,4,1,8,255, + 2,128,4,2,12,1,12,1,8,1,4,1,4,1,2,219, + 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, + 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, + 0,115,190,0,0,0,124,0,106,0,125,1,122,11,116,1, + 160,2,124,1,112,11,116,1,160,3,161,0,161,1,125,2, + 87,0,110,12,4,0,116,4,116,5,116,6,102,3,121,94, + 1,0,1,0,1,0,103,0,125,2,89,0,116,7,106,8, + 160,9,100,1,161,1,115,39,116,10,124,2,131,1,124,0, + 95,11,110,37,116,10,131,0,125,3,124,2,68,0,93,28, + 125,4,124,4,160,12,100,2,161,1,92,3,125,5,125,6, + 125,7,124,6,114,65,100,3,160,13,124,5,124,7,160,14, + 161,0,161,2,125,8,110,2,124,5,125,8,124,3,160,15, + 124,8,161,1,1,0,113,44,124,3,124,0,95,11,116,7, + 106,8,160,9,116,16,161,1,114,92,100,4,100,5,132,0, + 124,2,68,0,131,1,124,0,95,17,100,6,83,0,100,6, + 83,0,119,0,41,7,122,68,70,105,108,108,32,116,104,101, + 32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116, + 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, + 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, + 115,32,100,105,114,101,99,116,111,114,121,46,114,14,0,0, + 0,114,85,0,0,0,114,75,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 83,0,0,0,115,20,0,0,0,104,0,124,0,93,6,125, + 1,124,1,160,0,161,0,146,2,113,2,83,0,114,7,0, + 0,0,41,1,114,116,0,0,0,41,2,114,5,0,0,0, + 90,2,102,110,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,13,0,0,0,25,6,0,0,115,4,0,0, + 0,20,0,255,128,122,41,70,105,108,101,70,105,110,100,101, + 114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108, + 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, + 78,41,18,114,57,0,0,0,114,18,0,0,0,90,7,108, + 105,115,116,100,105,114,114,69,0,0,0,114,70,1,0,0, + 218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,111, + 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, + 69,114,114,111,114,114,15,0,0,0,114,25,0,0,0,114, + 26,0,0,0,114,83,1,0,0,114,84,1,0,0,114,111, + 0,0,0,114,76,0,0,0,114,116,0,0,0,218,3,97, + 100,100,114,27,0,0,0,114,85,1,0,0,41,9,114,129, + 0,0,0,114,57,0,0,0,90,8,99,111,110,116,101,110, + 116,115,90,21,108,111,119,101,114,95,115,117,102,102,105,120, + 95,99,111,110,116,101,110,116,115,114,55,1,0,0,114,127, + 0,0,0,114,39,1,0,0,114,29,1,0,0,90,8,110, + 101,119,95,110,97,109,101,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,87,1,0,0,252,5,0,0,115, + 40,0,0,0,6,2,2,1,22,1,18,1,6,3,12,3, + 12,1,6,7,8,1,16,1,4,1,18,1,4,2,12,1, + 6,1,12,1,20,1,4,255,2,233,255,128,122,22,70,105, + 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, + 97,99,104,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,7,0,0,0,115,18,0, + 0,0,135,0,135,1,102,2,100,1,100,2,132,8,125,2, + 124,2,83,0,41,4,97,20,1,0,0,65,32,99,108,97, + 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, + 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, + 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, + 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, + 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, + 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, + 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, + 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, + 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, + 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, + 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, + 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, + 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, + 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,19,0,0,0,115,36,0,0,0,116,0,124, + 0,131,1,115,10,116,1,100,1,124,0,100,2,141,2,130, + 1,136,0,124,0,103,1,136,1,162,1,82,0,142,0,83, + 0,41,4,122,45,80,97,116,104,32,104,111,111,107,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, + 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, + 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, + 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, + 101,100,114,61,0,0,0,78,41,2,114,70,0,0,0,114, + 128,0,0,0,114,61,0,0,0,169,2,114,208,0,0,0, + 114,86,1,0,0,114,7,0,0,0,114,8,0,0,0,218, + 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,37,6,0,0,115,8,0, + 0,0,8,2,12,1,16,1,255,128,122,54,70,105,108,101, + 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, + 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,78,114,7,0,0,0,41,3,114,208,0,0,0,114, + 86,1,0,0,114,92,1,0,0,114,7,0,0,0,114,91, + 1,0,0,114,8,0,0,0,218,9,112,97,116,104,95,104, + 111,111,107,27,6,0,0,115,6,0,0,0,14,10,4,6, + 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,112, + 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,114,52,1,0,0,41,2,78,122,16,70,105,108,101,70, + 105,110,100,101,114,40,123,33,114,125,41,41,2,114,76,0, + 0,0,114,57,0,0,0,114,7,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,53,1,0,0, + 45,6,0,0,114,46,1,0,0,122,19,70,105,108,101,70, + 105,110,100,101,114,46,95,95,114,101,112,114,95,95,41,1, + 78,41,15,114,136,0,0,0,114,135,0,0,0,114,137,0, + 0,0,114,138,0,0,0,114,222,0,0,0,114,63,1,0, + 0,114,153,0,0,0,114,216,0,0,0,114,147,0,0,0, + 114,76,1,0,0,114,213,0,0,0,114,87,1,0,0,114, + 220,0,0,0,114,93,1,0,0,114,53,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,79,1,0,0,155,5,0,0,115,26,0,0,0, + 8,0,4,2,8,7,8,14,4,4,8,2,8,15,10,5, + 8,48,2,31,10,1,12,17,255,128,114,79,1,0,0,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 8,0,0,0,67,0,0,0,115,144,0,0,0,124,0,160, + 0,100,1,161,1,125,4,124,0,160,0,100,2,161,1,125, + 5,124,4,115,33,124,5,114,18,124,5,106,1,125,4,110, + 15,124,2,124,3,107,2,114,28,116,2,124,1,124,2,131, + 2,125,4,110,5,116,3,124,1,124,2,131,2,125,4,124, + 5,115,42,116,4,124,1,124,2,124,4,100,3,141,3,125, + 5,122,19,124,5,124,0,100,2,60,0,124,4,124,0,100, + 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, + 5,60,0,87,0,100,0,83,0,4,0,116,5,121,71,1, + 0,1,0,1,0,89,0,100,0,83,0,119,0,41,6,78, + 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, + 115,112,101,99,95,95,114,80,1,0,0,90,8,95,95,102, + 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, + 95,41,6,218,3,103,101,116,114,150,0,0,0,114,26,1, + 0,0,114,20,1,0,0,114,200,0,0,0,218,9,69,120, + 99,101,112,116,105,111,110,41,6,90,2,110,115,114,127,0, + 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, + 97,116,104,110,97,109,101,114,150,0,0,0,114,197,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,62,1,0,0,249,4,0,0,115,38,0,0,0,8,0, - 4,2,2,2,10,1,2,9,10,1,2,12,10,1,2,21, - 10,1,2,20,12,1,2,31,12,1,2,23,12,1,2,12, - 14,1,255,128,114,62,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, - 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, - 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, - 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, - 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, - 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, - 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, - 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, - 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, - 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, - 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, - 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, - 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, - 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, - 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, - 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, - 0,0,7,0,0,0,115,84,0,0,0,103,0,125,3,124, - 2,68,0,93,16,92,2,137,0,125,4,124,3,160,0,135, - 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, - 1,1,0,113,4,124,3,124,0,95,1,124,1,112,27,100, - 3,124,0,95,2,100,4,124,0,95,3,116,4,131,0,124, - 0,95,5,116,4,131,0,124,0,95,6,100,5,83,0,41, - 6,122,154,73,110,105,116,105,97,108,105,122,101,32,119,105, - 116,104,32,116,104,101,32,112,97,116,104,32,116,111,32,115, - 101,97,114,99,104,32,111,110,32,97,110,100,32,97,32,118, - 97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,111, - 102,10,32,32,32,32,32,32,32,32,50,45,116,117,112,108, - 101,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104, - 101,32,108,111,97,100,101,114,32,97,110,100,32,116,104,101, - 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,116, - 104,101,32,108,111,97,100,101,114,10,32,32,32,32,32,32, - 32,32,114,101,99,111,103,110,105,122,101,115,46,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,51,0,0,0,115,24,0,0,0,129,0,124,0,93, - 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, - 0,83,0,114,120,0,0,0,114,7,0,0,0,114,28,1, - 0,0,169,1,114,150,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,9,0,0,0,161,5,0,0,115,6,0,0, - 0,6,128,18,0,255,128,122,38,70,105,108,101,70,105,110, - 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, - 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, - 85,0,0,0,114,115,0,0,0,78,41,7,114,177,0,0, - 0,218,8,95,108,111,97,100,101,114,115,114,57,0,0,0, - 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, - 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, - 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, - 97,99,104,101,41,5,114,129,0,0,0,114,57,0,0,0, - 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, - 90,7,108,111,97,100,101,114,115,114,199,0,0,0,114,7, - 0,0,0,114,80,1,0,0,114,8,0,0,0,114,222,0, - 0,0,155,5,0,0,115,18,0,0,0,4,4,12,1,26, - 1,6,1,10,2,6,1,8,1,12,1,255,128,122,19,70, - 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, - 100,1,124,0,95,0,100,2,83,0,41,3,122,31,73,110, - 118,97,108,105,100,97,116,101,32,116,104,101,32,100,105,114, - 101,99,116,111,114,121,32,109,116,105,109,101,46,114,115,0, - 0,0,78,41,1,114,82,1,0,0,114,7,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,63, - 1,0,0,169,5,0,0,114,68,0,0,0,122,28,70,105, - 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,42,0,0,0,124,0,160,0,124,1,161,1, - 125,2,124,2,100,1,117,0,114,13,100,1,103,0,102,2, - 83,0,124,2,106,1,124,2,106,2,112,19,103,0,102,2, - 83,0,41,2,122,197,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, - 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, - 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, - 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, - 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, - 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,213, - 0,0,0,114,150,0,0,0,114,188,0,0,0,41,3,114, - 129,0,0,0,114,149,0,0,0,114,197,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,147,0, - 0,0,175,5,0,0,115,10,0,0,0,10,7,8,1,8, - 1,16,1,255,128,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, - 0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124, - 3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100, - 1,141,4,83,0,41,2,78,114,187,0,0,0,41,1,114, - 200,0,0,0,41,7,114,129,0,0,0,114,198,0,0,0, - 114,149,0,0,0,114,57,0,0,0,90,4,115,109,115,108, - 114,212,0,0,0,114,150,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,76,1,0,0,187,5, - 0,0,115,10,0,0,0,10,1,8,1,2,1,6,255,255, - 128,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, - 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, - 0,0,0,0,0,14,0,0,0,8,0,0,0,67,0,0, - 0,115,92,1,0,0,100,1,125,3,124,1,160,0,100,2, - 161,1,100,3,25,0,125,4,122,12,116,1,124,0,106,2, - 112,17,116,3,160,4,161,0,131,1,106,5,125,5,87,0, - 110,9,4,0,116,6,121,173,1,0,1,0,1,0,100,4, - 125,5,89,0,124,5,124,0,106,7,107,3,114,43,124,0, - 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, - 114,54,124,0,106,10,125,6,124,4,160,11,161,0,125,7, - 110,5,124,0,106,12,125,6,124,4,125,7,124,7,124,6, - 118,0,114,106,116,13,124,0,106,2,124,4,131,2,125,8, - 124,0,106,14,68,0,93,29,92,2,125,9,125,10,100,5, - 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12, - 116,15,124,12,131,1,114,101,124,0,160,16,124,10,124,1, - 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0, - 113,72,116,17,124,8,131,1,125,3,124,0,106,14,68,0, - 93,41,92,2,125,9,125,10,116,13,124,0,106,2,124,4, - 124,9,23,0,131,2,125,12,116,18,106,19,100,6,124,12, - 100,3,100,7,141,3,1,0,124,7,124,9,23,0,124,6, - 118,0,114,150,116,15,124,12,131,1,114,150,124,0,160,16, - 124,10,124,1,124,12,100,8,124,2,161,5,2,0,1,0, - 83,0,113,109,124,3,114,171,116,18,160,19,100,9,124,8, - 161,2,1,0,116,18,160,20,124,1,100,8,161,2,125,13, - 124,8,103,1,124,13,95,21,124,13,83,0,100,8,83,0, - 119,0,41,10,122,111,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, - 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, - 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103, - 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105, - 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32, - 32,32,32,32,32,70,114,85,0,0,0,114,44,0,0,0, - 114,115,0,0,0,114,222,0,0,0,122,9,116,114,121,105, - 110,103,32,123,125,41,1,90,9,118,101,114,98,111,115,105, - 116,121,78,122,25,112,111,115,115,105,98,108,101,32,110,97, - 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,22, - 114,54,0,0,0,114,62,0,0,0,114,57,0,0,0,114, - 18,0,0,0,114,69,0,0,0,114,21,1,0,0,114,63, - 0,0,0,114,82,1,0,0,218,11,95,102,105,108,108,95, - 99,97,99,104,101,114,21,0,0,0,114,85,1,0,0,114, - 116,0,0,0,114,84,1,0,0,114,53,0,0,0,114,81, - 1,0,0,114,67,0,0,0,114,76,1,0,0,114,70,0, - 0,0,114,145,0,0,0,114,159,0,0,0,114,193,0,0, - 0,114,188,0,0,0,41,14,114,129,0,0,0,114,149,0, - 0,0,114,212,0,0,0,90,12,105,115,95,110,97,109,101, - 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117, - 108,101,114,179,0,0,0,90,5,99,97,99,104,101,90,12, - 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97, - 115,101,95,112,97,116,104,114,29,1,0,0,114,198,0,0, - 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, - 90,9,102,117,108,108,95,112,97,116,104,114,197,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 51,6,0,0,115,38,0,0,0,10,2,10,1,4,1,4, + 1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,8, + 1,8,1,8,1,14,1,12,1,6,2,2,254,255,128,114, + 98,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,67,0,0,0,115,38,0, + 0,0,116,0,116,1,160,2,161,0,102,2,125,0,116,3, + 116,4,102,2,125,1,116,5,116,6,102,2,125,2,124,0, + 124,1,124,2,103,3,83,0,41,2,122,95,82,101,116,117, + 114,110,115,32,97,32,108,105,115,116,32,111,102,32,102,105, + 108,101,45,98,97,115,101,100,32,109,111,100,117,108,101,32, + 108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97, + 99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112, + 108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102, + 105,120,101,115,41,46,10,32,32,32,32,78,41,7,114,16, + 1,0,0,114,173,0,0,0,218,18,101,120,116,101,110,115, + 105,111,110,95,115,117,102,102,105,120,101,115,114,20,1,0, + 0,114,112,0,0,0,114,26,1,0,0,114,100,0,0,0, + 41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,6, + 115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,101, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 213,0,0,0,192,5,0,0,115,80,0,0,0,4,5,14, - 1,2,1,24,1,12,1,6,1,10,1,8,1,6,1,6, - 2,6,1,10,1,6,2,4,1,8,2,12,1,14,1,8, - 1,10,1,8,1,24,1,2,255,8,5,14,2,16,1,16, - 1,12,1,8,1,10,1,4,1,8,255,2,128,4,2,12, - 1,12,1,8,1,4,1,4,1,2,219,255,128,122,20,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,10,0,0,0,67,0,0,0,115,190,0,0, - 0,124,0,106,0,125,1,122,11,116,1,160,2,124,1,112, - 11,116,1,160,3,161,0,161,1,125,2,87,0,110,12,4, - 0,116,4,116,5,116,6,102,3,121,94,1,0,1,0,1, - 0,103,0,125,2,89,0,116,7,106,8,160,9,100,1,161, - 1,115,39,116,10,124,2,131,1,124,0,95,11,110,37,116, - 10,131,0,125,3,124,2,68,0,93,28,125,4,124,4,160, - 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114, - 65,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125, - 8,110,2,124,5,125,8,124,3,160,15,124,8,161,1,1, - 0,113,44,124,3,124,0,95,11,116,7,106,8,160,9,116, - 16,161,1,114,92,100,4,100,5,132,0,124,2,68,0,131, - 1,124,0,95,17,100,6,83,0,100,6,83,0,119,0,41, - 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, - 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, - 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, - 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,14,0,0,0,114,85,0,0, - 0,114,75,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, - 20,0,0,0,104,0,124,0,93,6,125,1,124,1,160,0, - 161,0,146,2,113,2,83,0,114,7,0,0,0,41,1,114, - 116,0,0,0,41,2,114,5,0,0,0,90,2,102,110,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,13, - 0,0,0,13,6,0,0,115,4,0,0,0,20,0,255,128, - 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, - 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, - 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,57, - 0,0,0,114,18,0,0,0,90,7,108,105,115,116,100,105, - 114,114,69,0,0,0,114,70,1,0,0,218,15,80,101,114, - 109,105,115,115,105,111,110,69,114,114,111,114,218,18,78,111, - 116,65,68,105,114,101,99,116,111,114,121,69,114,114,111,114, - 114,15,0,0,0,114,25,0,0,0,114,26,0,0,0,114, - 83,1,0,0,114,84,1,0,0,114,111,0,0,0,114,76, - 0,0,0,114,116,0,0,0,218,3,97,100,100,114,27,0, - 0,0,114,85,1,0,0,41,9,114,129,0,0,0,114,57, - 0,0,0,90,8,99,111,110,116,101,110,116,115,90,21,108, - 111,119,101,114,95,115,117,102,102,105,120,95,99,111,110,116, - 101,110,116,115,114,55,1,0,0,114,127,0,0,0,114,39, - 1,0,0,114,29,1,0,0,90,8,110,101,119,95,110,97, - 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,87,1,0,0,240,5,0,0,115,40,0,0,0,6, - 2,2,1,22,1,18,1,6,3,12,3,12,1,6,7,8, - 1,16,1,4,1,18,1,4,2,12,1,6,1,12,1,20, - 1,4,255,2,233,255,128,122,22,70,105,108,101,70,105,110, - 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,99, - 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135, - 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, - 4,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, - 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, - 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, - 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, - 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, - 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, - 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, - 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, - 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, - 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, - 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, - 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, - 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, - 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, - 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,19, - 0,0,0,115,36,0,0,0,116,0,124,0,131,1,115,10, - 116,1,100,1,124,0,100,2,141,2,130,1,136,0,124,0, - 103,1,136,1,162,1,82,0,142,0,83,0,41,4,122,45, - 80,97,116,104,32,104,111,111,107,32,102,111,114,32,105,109, - 112,111,114,116,108,105,98,46,109,97,99,104,105,110,101,114, - 121,46,70,105,108,101,70,105,110,100,101,114,46,122,30,111, - 110,108,121,32,100,105,114,101,99,116,111,114,105,101,115,32, - 97,114,101,32,115,117,112,112,111,114,116,101,100,114,61,0, - 0,0,78,41,2,114,70,0,0,0,114,128,0,0,0,114, - 61,0,0,0,169,2,114,208,0,0,0,114,86,1,0,0, - 114,7,0,0,0,114,8,0,0,0,218,24,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,25,6,0,0,115,8,0,0,0,8,2,12, - 1,16,1,255,128,122,54,70,105,108,101,70,105,110,100,101, - 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, - 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,78,114,7, - 0,0,0,41,3,114,208,0,0,0,114,86,1,0,0,114, - 92,1,0,0,114,7,0,0,0,114,91,1,0,0,114,8, - 0,0,0,218,9,112,97,116,104,95,104,111,111,107,15,6, - 0,0,115,6,0,0,0,14,10,4,6,255,128,122,20,70, - 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, - 111,111,107,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,114,52,1,0, - 0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, - 40,123,33,114,125,41,41,2,114,76,0,0,0,114,57,0, - 0,0,114,7,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,53,1,0,0,33,6,0,0,114, - 46,1,0,0,122,19,70,105,108,101,70,105,110,100,101,114, - 46,95,95,114,101,112,114,95,95,41,1,78,41,15,114,136, - 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, - 0,0,114,222,0,0,0,114,63,1,0,0,114,153,0,0, - 0,114,216,0,0,0,114,147,0,0,0,114,76,1,0,0, - 114,213,0,0,0,114,87,1,0,0,114,220,0,0,0,114, - 93,1,0,0,114,53,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,79,1, - 0,0,146,5,0,0,115,26,0,0,0,8,0,4,2,8, - 7,8,14,4,4,8,2,8,12,10,5,8,48,2,31,10, - 1,12,17,255,128,114,79,1,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, - 0,0,0,115,144,0,0,0,124,0,160,0,100,1,161,1, - 125,4,124,0,160,0,100,2,161,1,125,5,124,4,115,33, - 124,5,114,18,124,5,106,1,125,4,110,15,124,2,124,3, - 107,2,114,28,116,2,124,1,124,2,131,2,125,4,110,5, - 116,3,124,1,124,2,131,2,125,4,124,5,115,42,116,4, - 124,1,124,2,124,4,100,3,141,3,125,5,122,19,124,5, - 124,0,100,2,60,0,124,4,124,0,100,1,60,0,124,2, - 124,0,100,4,60,0,124,3,124,0,100,5,60,0,87,0, - 100,0,83,0,4,0,116,5,121,71,1,0,1,0,1,0, - 89,0,100,0,83,0,119,0,41,6,78,218,10,95,95,108, - 111,97,100,101,114,95,95,218,8,95,95,115,112,101,99,95, - 95,114,80,1,0,0,90,8,95,95,102,105,108,101,95,95, - 90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3, - 103,101,116,114,150,0,0,0,114,26,1,0,0,114,20,1, - 0,0,114,200,0,0,0,218,9,69,120,99,101,112,116,105, - 111,110,41,6,90,2,110,115,114,127,0,0,0,90,8,112, - 97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97, - 109,101,114,150,0,0,0,114,197,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,14,95,102,105, - 120,95,117,112,95,109,111,100,117,108,101,39,6,0,0,115, - 38,0,0,0,10,2,10,1,4,1,4,1,8,1,8,1, - 12,1,10,2,4,1,14,1,2,1,8,1,8,1,8,1, - 14,1,12,1,6,2,2,254,255,128,114,98,1,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,116, - 1,160,2,161,0,102,2,125,0,116,3,116,4,102,2,125, - 1,116,5,116,6,102,2,125,2,124,0,124,1,124,2,103, - 3,83,0,41,2,122,95,82,101,116,117,114,110,115,32,97, - 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, - 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, - 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, - 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, - 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, - 46,10,32,32,32,32,78,41,7,114,16,1,0,0,114,173, - 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, - 117,102,102,105,120,101,115,114,20,1,0,0,114,112,0,0, - 0,114,26,1,0,0,114,100,0,0,0,41,3,90,10,101, - 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99, - 101,90,8,98,121,116,101,99,111,100,101,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,194,0,0,0,62, - 6,0,0,115,10,0,0,0,12,5,8,1,8,1,10,1, - 255,128,114,194,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,1,0,0,0,67,0,0,0, - 115,8,0,0,0,124,0,97,0,100,0,83,0,114,120,0, - 0,0,41,1,114,145,0,0,0,41,1,218,17,95,98,111, - 111,116,115,116,114,97,112,95,109,111,100,117,108,101,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,21,95, - 115,101,116,95,98,111,111,116,115,116,114,97,112,95,109,111, - 100,117,108,101,73,6,0,0,115,4,0,0,0,8,2,255, - 128,114,101,1,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, - 50,0,0,0,116,0,124,0,131,1,1,0,116,1,131,0, - 125,1,116,2,106,3,160,4,116,5,106,6,124,1,142,0, - 103,1,161,1,1,0,116,2,106,7,160,8,116,9,161,1, - 1,0,100,1,83,0,41,2,122,41,73,110,115,116,97,108, - 108,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, - 32,105,109,112,111,114,116,32,99,111,109,112,111,110,101,110, - 116,115,46,78,41,10,114,101,1,0,0,114,194,0,0,0, - 114,15,0,0,0,114,68,1,0,0,114,177,0,0,0,114, - 79,1,0,0,114,93,1,0,0,218,9,109,101,116,97,95, - 112,97,116,104,114,196,0,0,0,114,62,1,0,0,41,2, - 114,100,1,0,0,90,17,115,117,112,112,111,114,116,101,100, - 95,108,111,97,100,101,114,115,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,8,95,105,110,115,116,97,108, - 108,78,6,0,0,115,10,0,0,0,8,2,6,1,20,1, - 16,1,255,128,114,103,1,0,0,41,1,114,74,0,0,0, - 41,1,78,41,3,78,78,78,41,2,114,0,0,0,0,114, - 0,0,0,0,41,1,84,41,1,78,41,1,78,41,83,114, - 138,0,0,0,114,145,0,0,0,114,173,0,0,0,114,78, - 0,0,0,114,15,0,0,0,114,87,0,0,0,114,170,0, - 0,0,114,25,0,0,0,114,217,0,0,0,90,2,110,116, - 114,18,0,0,0,114,202,0,0,0,90,5,112,111,115,105, - 120,114,47,0,0,0,218,3,97,108,108,114,50,0,0,0, - 114,51,0,0,0,114,72,0,0,0,114,28,0,0,0,90, - 37,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, - 86,69,95,80,76,65,84,70,79,82,77,83,95,66,89,84, - 69,83,95,75,69,89,114,27,0,0,0,114,29,0,0,0, - 114,21,0,0,0,114,36,0,0,0,114,42,0,0,0,114, - 45,0,0,0,114,53,0,0,0,114,60,0,0,0,114,62, - 0,0,0,114,66,0,0,0,114,67,0,0,0,114,70,0, - 0,0,114,73,0,0,0,114,83,0,0,0,218,4,116,121, - 112,101,218,8,95,95,99,111,100,101,95,95,114,172,0,0, - 0,114,34,0,0,0,114,158,0,0,0,114,33,0,0,0, - 114,39,0,0,0,114,250,0,0,0,114,103,0,0,0,114, - 99,0,0,0,114,112,0,0,0,114,196,0,0,0,114,99, - 1,0,0,114,218,0,0,0,114,100,0,0,0,90,23,68, - 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, - 70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,69, - 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, - 88,69,83,114,108,0,0,0,114,113,0,0,0,114,119,0, - 0,0,114,123,0,0,0,114,125,0,0,0,114,146,0,0, - 0,114,153,0,0,0,114,162,0,0,0,114,166,0,0,0, - 114,168,0,0,0,114,175,0,0,0,114,180,0,0,0,114, - 181,0,0,0,114,186,0,0,0,218,6,111,98,106,101,99, - 116,114,195,0,0,0,114,200,0,0,0,114,201,0,0,0, - 114,221,0,0,0,114,235,0,0,0,114,253,0,0,0,114, - 20,1,0,0,114,26,1,0,0,114,16,1,0,0,114,32, - 1,0,0,114,58,1,0,0,114,62,1,0,0,114,79,1, - 0,0,114,98,1,0,0,114,194,0,0,0,114,101,1,0, - 0,114,103,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,8,60,109,111,100, - 117,108,101,62,1,0,0,0,115,172,0,0,0,4,0,4, - 22,8,3,8,1,8,1,8,1,8,1,10,3,4,1,8, - 1,10,1,8,2,4,3,10,1,6,2,22,2,8,1,10, - 1,14,1,4,4,4,1,2,1,2,1,4,255,8,4,6, - 16,8,3,8,5,8,5,8,6,8,6,8,12,8,10,8, - 9,8,5,8,7,10,9,10,22,0,127,16,27,12,1,4, - 2,4,1,6,2,4,1,10,1,8,2,6,2,8,2,16, - 2,8,71,8,40,8,19,8,12,8,12,8,31,8,17,8, - 33,8,28,10,24,10,13,10,10,8,11,6,14,4,3,2, - 1,12,255,14,68,14,64,16,30,0,127,14,17,18,50,18, - 45,18,25,14,53,14,63,14,49,0,127,14,26,0,127,10, - 22,8,23,8,11,12,5,255,128, + 194,0,0,0,74,6,0,0,115,10,0,0,0,12,5,8, + 1,8,1,10,1,255,128,114,194,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, + 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, + 83,0,114,120,0,0,0,41,1,114,145,0,0,0,41,1, + 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, + 97,112,95,109,111,100,117,108,101,85,6,0,0,115,4,0, + 0,0,8,2,255,128,114,101,1,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, + 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, + 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160, + 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, + 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, + 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, + 112,111,110,101,110,116,115,46,78,41,10,114,101,1,0,0, + 114,194,0,0,0,114,15,0,0,0,114,68,1,0,0,114, + 177,0,0,0,114,79,1,0,0,114,93,1,0,0,218,9, + 109,101,116,97,95,112,97,116,104,114,196,0,0,0,114,62, + 1,0,0,41,2,114,100,1,0,0,90,17,115,117,112,112, + 111,114,116,101,100,95,108,111,97,100,101,114,115,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,105, + 110,115,116,97,108,108,90,6,0,0,115,10,0,0,0,8, + 2,6,1,20,1,16,1,255,128,114,103,1,0,0,41,1, + 114,74,0,0,0,41,1,78,41,3,78,78,78,41,2,114, + 0,0,0,0,114,0,0,0,0,41,1,84,41,1,78,41, + 1,78,41,83,114,138,0,0,0,114,145,0,0,0,114,173, + 0,0,0,114,78,0,0,0,114,15,0,0,0,114,87,0, + 0,0,114,170,0,0,0,114,25,0,0,0,114,217,0,0, + 0,90,2,110,116,114,18,0,0,0,114,202,0,0,0,90, + 5,112,111,115,105,120,114,47,0,0,0,218,3,97,108,108, + 114,50,0,0,0,114,51,0,0,0,114,72,0,0,0,114, + 28,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,95,66,89,84,69,83,95,75,69,89,114,27,0,0,0, + 114,29,0,0,0,114,21,0,0,0,114,36,0,0,0,114, + 42,0,0,0,114,45,0,0,0,114,53,0,0,0,114,60, + 0,0,0,114,62,0,0,0,114,66,0,0,0,114,67,0, + 0,0,114,70,0,0,0,114,73,0,0,0,114,83,0,0, + 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, + 95,114,172,0,0,0,114,34,0,0,0,114,158,0,0,0, + 114,33,0,0,0,114,39,0,0,0,114,250,0,0,0,114, + 103,0,0,0,114,99,0,0,0,114,112,0,0,0,114,196, + 0,0,0,114,99,1,0,0,114,218,0,0,0,114,100,0, + 0,0,90,23,68,69,66,85,71,95,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,90,27,79,80,84, + 73,77,73,90,69,68,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,114,108,0,0,0,114,113,0, + 0,0,114,119,0,0,0,114,123,0,0,0,114,125,0,0, + 0,114,146,0,0,0,114,153,0,0,0,114,162,0,0,0, + 114,166,0,0,0,114,168,0,0,0,114,175,0,0,0,114, + 180,0,0,0,114,181,0,0,0,114,186,0,0,0,218,6, + 111,98,106,101,99,116,114,195,0,0,0,114,200,0,0,0, + 114,201,0,0,0,114,221,0,0,0,114,235,0,0,0,114, + 253,0,0,0,114,20,1,0,0,114,26,1,0,0,114,16, + 1,0,0,114,32,1,0,0,114,58,1,0,0,114,62,1, + 0,0,114,79,1,0,0,114,98,1,0,0,114,194,0,0, + 0,114,101,1,0,0,114,103,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 8,60,109,111,100,117,108,101,62,1,0,0,0,115,172,0, + 0,0,4,0,4,22,8,3,8,1,8,1,8,1,8,1, + 10,3,4,1,8,1,10,1,8,2,4,3,10,1,6,2, + 22,2,8,1,10,1,14,1,4,4,4,1,2,1,2,1, + 4,255,8,4,6,16,8,3,8,5,8,5,8,6,8,6, + 8,12,8,10,8,9,8,5,8,7,10,9,10,22,0,127, + 16,27,12,1,4,2,4,1,6,2,4,1,10,1,8,2, + 6,2,8,2,16,2,8,71,8,40,8,19,8,12,8,12, + 8,31,8,20,8,33,8,28,10,24,10,13,10,10,8,11, + 6,14,4,3,2,1,12,255,14,68,14,67,16,30,0,127, + 14,17,18,50,18,45,18,25,14,53,14,63,14,49,0,127, + 14,29,0,127,10,25,8,23,8,11,12,5,255,128, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index 7997df0cc7af5..cbfba669a51bc 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -169,17 +169,300 @@ const unsigned char _Py_M__zipimport[] = { 18,1,4,255,2,249,2,239,255,128,122,20,122,105,112,105, 109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,95, 78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,4,0,0,0,67,0,0,0,115,78,0,0,0,116, - 0,124,0,124,1,131,2,125,3,124,3,100,1,117,1,114, - 13,124,0,103,0,102,2,83,0,116,1,124,0,124,1,131, - 2,125,4,116,2,124,0,124,4,131,2,114,35,100,1,124, - 0,106,3,155,0,116,4,155,0,124,4,155,0,157,3,103, - 1,102,2,83,0,100,1,103,0,102,2,83,0,41,2,97, - 47,2,0,0,102,105,110,100,95,108,111,97,100,101,114,40, - 102,117,108,108,110,97,109,101,44,32,112,97,116,104,61,78, - 111,110,101,41,32,45,62,32,115,101,108,102,44,32,115,116, - 114,32,111,114,32,78,111,110,101,46,10,10,32,32,32,32, - 32,32,32,32,83,101,97,114,99,104,32,102,111,114,32,97, + 0,0,4,0,0,0,67,0,0,0,115,90,0,0,0,116, + 0,160,1,100,1,116,2,161,2,1,0,116,3,124,0,124, + 1,131,2,125,3,124,3,100,2,117,1,114,19,124,0,103, + 0,102,2,83,0,116,4,124,0,124,1,131,2,125,4,116, + 5,124,0,124,4,131,2,114,41,100,2,124,0,106,6,155, + 0,116,7,155,0,124,4,155,0,157,3,103,1,102,2,83, + 0,100,2,103,0,102,2,83,0,41,3,97,47,2,0,0, + 102,105,110,100,95,108,111,97,100,101,114,40,102,117,108,108, + 110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,41, + 32,45,62,32,115,101,108,102,44,32,115,116,114,32,111,114, + 32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,32, + 83,101,97,114,99,104,32,102,111,114,32,97,32,109,111,100, + 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121, + 32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117, + 108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32, + 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108, + 121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116, + 116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101, + 46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101, + 32,122,105,112,105,109,112,111,114,116,101,114,10,32,32,32, + 32,32,32,32,32,105,110,115,116,97,110,99,101,32,105,116, + 115,101,108,102,32,105,102,32,116,104,101,32,109,111,100,117, + 108,101,32,119,97,115,32,102,111,117,110,100,44,32,97,32, + 115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110, + 103,32,116,104,101,10,32,32,32,32,32,32,32,32,102,117, + 108,108,32,112,97,116,104,32,110,97,109,101,32,105,102,32, + 105,116,39,115,32,112,111,115,115,105,98,108,121,32,97,32, + 112,111,114,116,105,111,110,32,111,102,32,97,32,110,97,109, + 101,115,112,97,99,101,32,112,97,99,107,97,103,101,44,10, + 32,32,32,32,32,32,32,32,111,114,32,78,111,110,101,32, + 111,116,104,101,114,119,105,115,101,46,32,84,104,101,32,111, + 112,116,105,111,110,97,108,32,39,112,97,116,104,39,32,97, + 114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,114, + 101,100,32,45,45,32,105,116,39,115,10,32,32,32,32,32, + 32,32,32,116,104,101,114,101,32,102,111,114,32,99,111,109, + 112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32, + 116,104,101,32,105,109,112,111,114,116,101,114,32,112,114,111, + 116,111,99,111,108,46,10,10,32,32,32,32,32,32,32,32, + 68,101,112,114,101,99,97,116,101,100,32,115,105,110,99,101, + 32,80,121,116,104,111,110,32,51,46,49,48,46,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,32,32,32,32,32,32,32,32,122, + 102,122,105,112,105,109,112,111,114,116,101,114,46,102,105,110, + 100,95,108,111,97,100,101,114,40,41,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, + 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, + 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, + 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,78,41,8,218,9,95,119,97,114, + 110,105,110,103,115,218,4,119,97,114,110,218,18,68,101,112, + 114,101,99,97,116,105,111,110,87,97,114,110,105,110,103,218, + 16,95,103,101,116,95,109,111,100,117,108,101,95,105,110,102, + 111,218,16,95,103,101,116,95,109,111,100,117,108,101,95,112, + 97,116,104,218,7,95,105,115,95,100,105,114,114,29,0,0, + 0,114,20,0,0,0,41,5,114,32,0,0,0,218,8,102, + 117,108,108,110,97,109,101,114,13,0,0,0,218,2,109,105, + 218,7,109,111,100,112,97,116,104,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,218,11,102,105,110,100,95,108, + 111,97,100,101,114,110,0,0,0,115,22,0,0,0,6,12, + 2,2,4,254,10,3,8,1,8,2,10,7,10,1,24,4, + 8,2,255,128,122,23,122,105,112,105,109,112,111,114,116,101, + 114,46,102,105,110,100,95,108,111,97,100,101,114,99,3,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, + 0,0,67,0,0,0,115,28,0,0,0,116,0,160,1,100, + 1,116,2,161,2,1,0,124,0,160,3,124,1,124,2,161, + 2,100,2,25,0,83,0,41,4,97,203,1,0,0,102,105, + 110,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97, + 109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45, + 62,32,115,101,108,102,32,111,114,32,78,111,110,101,46,10, + 10,32,32,32,32,32,32,32,32,83,101,97,114,99,104,32, + 102,111,114,32,97,32,109,111,100,117,108,101,32,115,112,101, + 99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,110, + 97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,39, + 32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,32, + 32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,105, + 102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,111, + 100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,101, + 116,117,114,110,115,32,116,104,101,32,122,105,112,105,109,112, + 111,114,116,101,114,10,32,32,32,32,32,32,32,32,105,110, + 115,116,97,110,99,101,32,105,116,115,101,108,102,32,105,102, + 32,116,104,101,32,109,111,100,117,108,101,32,119,97,115,32, + 102,111,117,110,100,44,32,111,114,32,78,111,110,101,32,105, + 102,32,105,116,32,119,97,115,110,39,116,46,10,32,32,32, + 32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97, + 108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110, + 116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32, + 105,116,39,115,32,116,104,101,114,101,32,102,111,114,32,99, + 111,109,112,97,116,105,98,105,108,105,116,121,10,32,32,32, + 32,32,32,32,32,119,105,116,104,32,116,104,101,32,105,109, + 112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46, + 10,10,32,32,32,32,32,32,32,32,68,101,112,114,101,99, + 97,116,101,100,32,115,105,110,99,101,32,80,121,116,104,111, + 110,32,51,46,49,48,46,32,85,115,101,32,102,105,110,100, + 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, + 10,32,32,32,32,32,32,32,32,122,102,122,105,112,105,109, + 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, + 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, + 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,114,0,0,0,0,78,41,4,114,35,0,0,0,114,36, + 0,0,0,114,37,0,0,0,114,44,0,0,0,41,3,114, + 32,0,0,0,114,41,0,0,0,114,13,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,11,102, + 105,110,100,95,109,111,100,117,108,101,147,0,0,0,115,10, + 0,0,0,6,11,2,2,4,254,16,3,255,128,122,23,122, + 105,112,105,109,112,111,114,116,101,114,46,102,105,110,100,95, + 109,111,100,117,108,101,99,3,0,0,0,0,0,0,0,0, + 0,0,0,7,0,0,0,5,0,0,0,67,0,0,0,115, + 108,0,0,0,116,0,124,0,124,1,131,2,125,3,124,3, + 100,1,117,1,114,17,116,1,106,2,124,1,124,0,124,3, + 100,2,141,3,83,0,116,3,124,0,124,1,131,2,125,4, + 116,4,124,0,124,4,131,2,114,52,124,0,106,5,155,0, + 116,6,155,0,124,4,155,0,157,3,125,5,116,1,106,7, + 124,1,100,1,100,3,100,4,141,3,125,6,124,6,106,8, + 160,9,124,5,161,1,1,0,124,6,83,0,100,1,83,0, + 41,5,122,107,67,114,101,97,116,101,32,97,32,77,111,100, + 117,108,101,83,112,101,99,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,114, + 110,115,32,78,111,110,101,32,105,102,32,116,104,101,32,109, + 111,100,117,108,101,32,99,97,110,110,111,116,32,98,101,32, + 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,78, + 41,1,218,10,105,115,95,112,97,99,107,97,103,101,84,41, + 3,218,4,110,97,109,101,90,6,108,111,97,100,101,114,114, + 46,0,0,0,41,10,114,38,0,0,0,218,10,95,98,111, + 111,116,115,116,114,97,112,90,16,115,112,101,99,95,102,114, + 111,109,95,108,111,97,100,101,114,114,39,0,0,0,114,40, + 0,0,0,114,29,0,0,0,114,20,0,0,0,90,10,77, + 111,100,117,108,101,83,112,101,99,90,26,115,117,98,109,111, + 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, + 116,105,111,110,115,114,24,0,0,0,41,7,114,32,0,0, + 0,114,41,0,0,0,90,6,116,97,114,103,101,116,90,11, + 109,111,100,117,108,101,95,105,110,102,111,114,43,0,0,0, + 114,13,0,0,0,90,4,115,112,101,99,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,218,9,102,105,110,100, + 95,115,112,101,99,163,0,0,0,115,26,0,0,0,10,5, + 8,1,16,1,10,7,10,1,18,4,8,1,2,1,6,255, + 12,2,4,1,4,2,255,128,122,21,122,105,112,105,109,112, + 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,99, + 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 3,0,0,0,67,0,0,0,115,20,0,0,0,116,0,124, + 0,124,1,131,2,92,3,125,2,125,3,125,4,124,2,83, + 0,41,2,122,166,103,101,116,95,99,111,100,101,40,102,117, + 108,108,110,97,109,101,41,32,45,62,32,99,111,100,101,32, + 111,98,106,101,99,116,46,10,10,32,32,32,32,32,32,32, + 32,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, + 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 46,32,82,97,105,115,101,32,90,105,112,73,109,112,111,114, + 116,69,114,114,111,114,10,32,32,32,32,32,32,32,32,105, + 102,32,116,104,101,32,109,111,100,117,108,101,32,99,111,117, + 108,100,110,39,116,32,98,101,32,105,109,112,111,114,116,101, + 100,46,10,32,32,32,32,32,32,32,32,78,169,1,218,16, + 95,103,101,116,95,109,111,100,117,108,101,95,99,111,100,101, + 169,5,114,32,0,0,0,114,41,0,0,0,218,4,99,111, + 100,101,218,9,105,115,112,97,99,107,97,103,101,114,43,0, + 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, + 0,218,8,103,101,116,95,99,111,100,101,190,0,0,0,115, + 6,0,0,0,16,6,4,1,255,128,122,20,122,105,112,105, + 109,112,111,114,116,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,8,0,0,0,67,0,0,0,115,112,0,0,0,116,0, + 114,8,124,1,160,1,116,0,116,2,161,2,125,1,124,1, + 125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,1, + 114,29,124,1,116,5,124,0,106,4,116,2,23,0,131,1, + 100,1,133,2,25,0,125,2,122,7,124,0,106,6,124,2, + 25,0,125,3,87,0,110,12,4,0,116,7,121,55,1,0, + 1,0,1,0,116,8,100,2,100,3,124,2,131,3,130,1, + 116,9,124,0,106,4,124,3,131,2,83,0,119,0,41,4, + 122,154,103,101,116,95,100,97,116,97,40,112,97,116,104,110, + 97,109,101,41,32,45,62,32,115,116,114,105,110,103,32,119, + 105,116,104,32,102,105,108,101,32,100,97,116,97,46,10,10, + 32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116, + 104,101,32,100,97,116,97,32,97,115,115,111,99,105,97,116, + 101,100,32,119,105,116,104,32,39,112,97,116,104,110,97,109, + 101,39,46,32,82,97,105,115,101,32,79,83,69,114,114,111, + 114,32,105,102,10,32,32,32,32,32,32,32,32,116,104,101, + 32,102,105,108,101,32,119,97,115,110,39,116,32,102,111,117, + 110,100,46,10,32,32,32,32,32,32,32,32,78,114,0,0, + 0,0,218,0,41,10,114,18,0,0,0,114,19,0,0,0, + 114,20,0,0,0,218,10,115,116,97,114,116,115,119,105,116, + 104,114,29,0,0,0,218,3,108,101,110,114,28,0,0,0, + 114,26,0,0,0,114,22,0,0,0,218,9,95,103,101,116, + 95,100,97,116,97,41,4,114,32,0,0,0,218,8,112,97, + 116,104,110,97,109,101,90,3,107,101,121,218,9,116,111,99, + 95,101,110,116,114,121,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,8,103,101,116,95,100,97,116,97,200, + 0,0,0,115,24,0,0,0,4,6,12,1,4,2,16,1, + 22,1,2,2,14,1,12,1,12,1,12,1,2,254,255,128, + 122,20,122,105,112,105,109,112,111,114,116,101,114,46,103,101, + 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115, + 20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2, + 125,3,125,4,124,4,83,0,41,2,122,165,103,101,116,95, + 102,105,108,101,110,97,109,101,40,102,117,108,108,110,97,109, + 101,41,32,45,62,32,102,105,108,101,110,97,109,101,32,115, + 116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,32, + 82,101,116,117,114,110,32,116,104,101,32,102,105,108,101,110, + 97,109,101,32,102,111,114,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,109,111,100,117,108,101,32,111,114,32, + 114,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69, + 114,114,111,114,10,32,32,32,32,32,32,32,32,105,102,32, + 105,116,32,99,111,117,108,100,110,39,116,32,98,101,32,105, + 109,112,111,114,116,101,100,46,10,32,32,32,32,32,32,32, + 32,78,114,50,0,0,0,114,52,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,12,103,101,116, + 95,102,105,108,101,110,97,109,101,221,0,0,0,115,6,0, + 0,0,16,8,4,1,255,128,122,24,122,105,112,105,109,112, + 111,114,116,101,114,46,103,101,116,95,102,105,108,101,110,97, + 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,8,0,0,0,67,0,0,0,115,126,0,0,0, + 116,0,124,0,124,1,131,2,125,2,124,2,100,1,117,0, + 114,18,116,1,100,2,124,1,155,2,157,2,124,1,100,3, + 141,2,130,1,116,2,124,0,124,1,131,2,125,3,124,2, + 114,32,116,3,160,4,124,3,100,4,161,2,125,4,110,5, + 124,3,155,0,100,5,157,2,125,4,122,7,124,0,106,5, + 124,4,25,0,125,5,87,0,110,9,4,0,116,6,121,62, + 1,0,1,0,1,0,89,0,100,1,83,0,116,7,124,0, + 106,8,124,5,131,2,160,9,161,0,83,0,119,0,41,6, + 122,253,103,101,116,95,115,111,117,114,99,101,40,102,117,108, + 108,110,97,109,101,41,32,45,62,32,115,111,117,114,99,101, + 32,115,116,114,105,110,103,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,32,116,104,101,32,115,111,117, + 114,99,101,32,99,111,100,101,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,46,32,82,97,105,115,101,32,90,105,112,73,109,112,111, + 114,116,69,114,114,111,114,10,32,32,32,32,32,32,32,32, + 105,102,32,116,104,101,32,109,111,100,117,108,101,32,99,111, + 117,108,100,110,39,116,32,98,101,32,102,111,117,110,100,44, + 32,114,101,116,117,114,110,32,78,111,110,101,32,105,102,32, + 116,104,101,32,97,114,99,104,105,118,101,32,100,111,101,115, + 10,32,32,32,32,32,32,32,32,99,111,110,116,97,105,110, + 32,116,104,101,32,109,111,100,117,108,101,44,32,98,117,116, + 32,104,97,115,32,110,111,32,115,111,117,114,99,101,32,102, + 111,114,32,105,116,46,10,32,32,32,32,32,32,32,32,78, + 250,18,99,97,110,39,116,32,102,105,110,100,32,109,111,100, + 117,108,101,32,169,1,114,47,0,0,0,250,11,95,95,105, + 110,105,116,95,95,46,112,121,250,3,46,112,121,41,10,114, + 38,0,0,0,114,3,0,0,0,114,39,0,0,0,114,21, + 0,0,0,114,30,0,0,0,114,28,0,0,0,114,26,0, + 0,0,114,59,0,0,0,114,29,0,0,0,218,6,100,101, + 99,111,100,101,41,6,114,32,0,0,0,114,41,0,0,0, + 114,42,0,0,0,114,13,0,0,0,218,8,102,117,108,108, + 112,97,116,104,114,61,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,218,10,103,101,116,95,115,111, + 117,114,99,101,233,0,0,0,115,28,0,0,0,10,7,8, + 1,18,1,10,2,4,1,14,1,10,2,2,2,14,1,12, + 1,6,2,16,1,2,253,255,128,122,22,122,105,112,105,109, + 112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,99, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,40,0,0,0,116, + 0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114, + 18,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141, + 2,130,1,124,2,83,0,41,4,122,171,105,115,95,112,97, + 99,107,97,103,101,40,102,117,108,108,110,97,109,101,41,32, + 45,62,32,98,111,111,108,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,109,111,100,117,108,101,32,115,112,101,99, + 105,102,105,101,100,32,98,121,32,102,117,108,108,110,97,109, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,10, + 32,32,32,32,32,32,32,32,82,97,105,115,101,32,90,105, + 112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, + 116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100, + 110,39,116,32,98,101,32,102,111,117,110,100,46,10,32,32, + 32,32,32,32,32,32,78,114,64,0,0,0,114,65,0,0, + 0,41,2,114,38,0,0,0,114,3,0,0,0,41,3,114, + 32,0,0,0,114,41,0,0,0,114,42,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,114,46,0, + 0,0,3,1,0,0,115,10,0,0,0,10,6,8,1,18, + 1,4,1,255,128,122,22,122,105,112,105,109,112,111,114,116, + 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0, + 0,0,67,0,0,0,115,252,0,0,0,100,1,125,2,116, + 0,160,1,124,2,116,2,161,2,1,0,116,3,124,0,124, + 1,131,2,92,3,125,3,125,4,125,5,116,4,106,5,160, + 6,124,1,161,1,125,6,124,6,100,2,117,0,115,31,116, + 7,124,6,116,8,131,2,115,40,116,8,124,1,131,1,125, + 6,124,6,116,4,106,5,124,1,60,0,124,0,124,6,95, + 9,122,42,124,4,114,62,116,10,124,0,124,1,131,2,125, + 7,116,11,160,12,124,0,106,13,124,7,161,2,125,8,124, + 8,103,1,124,6,95,14,116,15,124,6,100,3,131,2,115, + 70,116,16,124,6,95,16,116,11,160,17,124,6,106,18,124, + 1,124,5,161,3,1,0,116,19,124,3,124,6,106,18,131, + 2,1,0,87,0,110,8,1,0,1,0,1,0,116,4,106, + 5,124,1,61,0,130,0,122,7,116,4,106,5,124,1,25, + 0,125,6,87,0,110,14,4,0,116,20,121,125,1,0,1, + 0,1,0,116,21,100,4,124,1,155,2,100,5,157,3,131, + 1,130,1,116,22,160,23,100,6,124,1,124,5,161,3,1, + 0,124,6,83,0,119,0,41,7,97,64,1,0,0,108,111, + 97,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97, + 109,101,41,32,45,62,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,76,111,97,100,32,116,104,101, 32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,101, 100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,46, 32,39,102,117,108,108,110,97,109,101,39,32,109,117,115,116, @@ -187,864 +470,598 @@ const unsigned char _Py_M__zipimport[] = { 102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,32, 40,100,111,116,116,101,100,41,32,109,111,100,117,108,101,32, 110,97,109,101,46,32,73,116,32,114,101,116,117,114,110,115, - 32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,114, - 10,32,32,32,32,32,32,32,32,105,110,115,116,97,110,99, - 101,32,105,116,115,101,108,102,32,105,102,32,116,104,101,32, - 109,111,100,117,108,101,32,119,97,115,32,102,111,117,110,100, - 44,32,97,32,115,116,114,105,110,103,32,99,111,110,116,97, - 105,110,105,110,103,32,116,104,101,10,32,32,32,32,32,32, - 32,32,102,117,108,108,32,112,97,116,104,32,110,97,109,101, - 32,105,102,32,105,116,39,115,32,112,111,115,115,105,98,108, - 121,32,97,32,112,111,114,116,105,111,110,32,111,102,32,97, - 32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,97, - 103,101,44,10,32,32,32,32,32,32,32,32,111,114,32,78, - 111,110,101,32,111,116,104,101,114,119,105,115,101,46,32,84, - 104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,116, - 104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,105, - 103,110,111,114,101,100,32,45,45,32,105,116,39,115,10,32, - 32,32,32,32,32,32,32,116,104,101,114,101,32,102,111,114, - 32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,119, - 105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,114, - 32,112,114,111,116,111,99,111,108,46,10,10,32,32,32,32, - 32,32,32,32,68,101,112,114,101,99,97,116,101,100,32,115, - 105,110,99,101,32,80,121,116,104,111,110,32,51,46,49,48, - 46,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,46,10,32,32,32,32,32, - 32,32,32,78,41,5,218,16,95,103,101,116,95,109,111,100, - 117,108,101,95,105,110,102,111,218,16,95,103,101,116,95,109, - 111,100,117,108,101,95,112,97,116,104,218,7,95,105,115,95, - 100,105,114,114,29,0,0,0,114,20,0,0,0,41,5,114, - 32,0,0,0,218,8,102,117,108,108,110,97,109,101,114,13, - 0,0,0,218,2,109,105,218,7,109,111,100,112,97,116,104, - 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, - 11,102,105,110,100,95,108,111,97,100,101,114,110,0,0,0, - 115,16,0,0,0,10,12,8,1,8,2,10,7,10,1,24, - 4,8,2,255,128,122,23,122,105,112,105,109,112,111,114,116, - 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,3, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, - 0,0,0,67,0,0,0,115,16,0,0,0,124,0,160,0, - 124,1,124,2,161,2,100,1,25,0,83,0,41,3,97,203, - 1,0,0,102,105,110,100,95,109,111,100,117,108,101,40,102, - 117,108,108,110,97,109,101,44,32,112,97,116,104,61,78,111, - 110,101,41,32,45,62,32,115,101,108,102,32,111,114,32,78, - 111,110,101,46,10,10,32,32,32,32,32,32,32,32,83,101, - 97,114,99,104,32,102,111,114,32,97,32,109,111,100,117,108, - 101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,39, - 102,117,108,108,110,97,109,101,39,46,32,39,102,117,108,108, - 110,97,109,101,39,32,109,117,115,116,32,98,101,32,116,104, - 101,10,32,32,32,32,32,32,32,32,102,117,108,108,121,32, - 113,117,97,108,105,102,105,101,100,32,40,100,111,116,116,101, - 100,41,32,109,111,100,117,108,101,32,110,97,109,101,46,32, - 73,116,32,114,101,116,117,114,110,115,32,116,104,101,32,122, - 105,112,105,109,112,111,114,116,101,114,10,32,32,32,32,32, - 32,32,32,105,110,115,116,97,110,99,101,32,105,116,115,101, - 108,102,32,105,102,32,116,104,101,32,109,111,100,117,108,101, - 32,119,97,115,32,102,111,117,110,100,44,32,111,114,32,78, - 111,110,101,32,105,102,32,105,116,32,119,97,115,110,39,116, - 46,10,32,32,32,32,32,32,32,32,84,104,101,32,111,112, - 116,105,111,110,97,108,32,39,112,97,116,104,39,32,97,114, - 103,117,109,101,110,116,32,105,115,32,105,103,110,111,114,101, - 100,32,45,45,32,105,116,39,115,32,116,104,101,114,101,32, - 102,111,114,32,99,111,109,112,97,116,105,98,105,108,105,116, - 121,10,32,32,32,32,32,32,32,32,119,105,116,104,32,116, - 104,101,32,105,109,112,111,114,116,101,114,32,112,114,111,116, - 111,99,111,108,46,10,10,32,32,32,32,32,32,32,32,68, - 101,112,114,101,99,97,116,101,100,32,115,105,110,99,101,32, - 80,121,116,104,111,110,32,51,46,49,48,46,32,85,115,101, - 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,46,10,32,32,32,32,32,32,32,32,114,0, - 0,0,0,78,41,1,114,41,0,0,0,41,3,114,32,0, - 0,0,114,38,0,0,0,114,13,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,11,102,105,110, - 100,95,109,111,100,117,108,101,144,0,0,0,115,4,0,0, - 0,16,11,255,128,122,23,122,105,112,105,109,112,111,114,116, - 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,3, - 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5, - 0,0,0,67,0,0,0,115,108,0,0,0,116,0,124,0, - 124,1,131,2,125,3,124,3,100,1,117,1,114,17,116,1, - 106,2,124,1,124,0,124,3,100,2,141,3,83,0,116,3, - 124,0,124,1,131,2,125,4,116,4,124,0,124,4,131,2, - 114,52,124,0,106,5,155,0,116,6,155,0,124,4,155,0, - 157,3,125,5,116,1,106,7,124,1,100,1,100,3,100,4, - 141,3,125,6,124,6,106,8,160,9,124,5,161,1,1,0, - 124,6,83,0,100,1,83,0,41,5,122,107,67,114,101,97, - 116,101,32,97,32,77,111,100,117,108,101,83,112,101,99,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, - 32,32,32,82,101,116,117,114,110,115,32,78,111,110,101,32, - 105,102,32,116,104,101,32,109,111,100,117,108,101,32,99,97, - 110,110,111,116,32,98,101,32,102,111,117,110,100,46,10,32, - 32,32,32,32,32,32,32,78,41,1,218,10,105,115,95,112, - 97,99,107,97,103,101,84,41,3,218,4,110,97,109,101,90, - 6,108,111,97,100,101,114,114,43,0,0,0,41,10,114,35, - 0,0,0,218,10,95,98,111,111,116,115,116,114,97,112,90, - 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, - 114,114,36,0,0,0,114,37,0,0,0,114,29,0,0,0, - 114,20,0,0,0,90,10,77,111,100,117,108,101,83,112,101, - 99,90,26,115,117,98,109,111,100,117,108,101,95,115,101,97, - 114,99,104,95,108,111,99,97,116,105,111,110,115,114,24,0, - 0,0,41,7,114,32,0,0,0,114,38,0,0,0,90,6, - 116,97,114,103,101,116,90,11,109,111,100,117,108,101,95,105, - 110,102,111,114,40,0,0,0,114,13,0,0,0,90,4,115, - 112,101,99,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,218,9,102,105,110,100,95,115,112,101,99,157,0,0, - 0,115,26,0,0,0,10,5,8,1,16,1,10,7,10,1, - 18,4,8,1,2,1,6,255,12,2,4,1,4,2,255,128, - 122,21,122,105,112,105,109,112,111,114,116,101,114,46,102,105, - 110,100,95,115,112,101,99,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,0, - 115,20,0,0,0,116,0,124,0,124,1,131,2,92,3,125, - 2,125,3,125,4,124,2,83,0,41,2,122,166,103,101,116, - 95,99,111,100,101,40,102,117,108,108,110,97,109,101,41,32, - 45,62,32,99,111,100,101,32,111,98,106,101,99,116,46,10, - 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,32, - 116,104,101,32,99,111,100,101,32,111,98,106,101,99,116,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,46,32,82,97,105,115,101,32, - 90,105,112,73,109,112,111,114,116,69,114,114,111,114,10,32, - 32,32,32,32,32,32,32,105,102,32,116,104,101,32,109,111, - 100,117,108,101,32,99,111,117,108,100,110,39,116,32,98,101, - 32,105,109,112,111,114,116,101,100,46,10,32,32,32,32,32, - 32,32,32,78,169,1,218,16,95,103,101,116,95,109,111,100, - 117,108,101,95,99,111,100,101,169,5,114,32,0,0,0,114, - 38,0,0,0,218,4,99,111,100,101,218,9,105,115,112,97, - 99,107,97,103,101,114,40,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,99, - 111,100,101,184,0,0,0,115,6,0,0,0,16,6,4,1, - 255,128,122,20,122,105,112,105,109,112,111,114,116,101,114,46, - 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,8,0,0,0,67,0,0, - 0,115,112,0,0,0,116,0,114,8,124,1,160,1,116,0, - 116,2,161,2,125,1,124,1,125,2,124,1,160,3,124,0, - 106,4,116,2,23,0,161,1,114,29,124,1,116,5,124,0, - 106,4,116,2,23,0,131,1,100,1,133,2,25,0,125,2, - 122,7,124,0,106,6,124,2,25,0,125,3,87,0,110,12, - 4,0,116,7,121,55,1,0,1,0,1,0,116,8,100,2, - 100,3,124,2,131,3,130,1,116,9,124,0,106,4,124,3, - 131,2,83,0,119,0,41,4,122,154,103,101,116,95,100,97, - 116,97,40,112,97,116,104,110,97,109,101,41,32,45,62,32, - 115,116,114,105,110,103,32,119,105,116,104,32,102,105,108,101, - 32,100,97,116,97,46,10,10,32,32,32,32,32,32,32,32, - 82,101,116,117,114,110,32,116,104,101,32,100,97,116,97,32, - 97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32, - 39,112,97,116,104,110,97,109,101,39,46,32,82,97,105,115, - 101,32,79,83,69,114,114,111,114,32,105,102,10,32,32,32, - 32,32,32,32,32,116,104,101,32,102,105,108,101,32,119,97, - 115,110,39,116,32,102,111,117,110,100,46,10,32,32,32,32, - 32,32,32,32,78,114,0,0,0,0,218,0,41,10,114,18, - 0,0,0,114,19,0,0,0,114,20,0,0,0,218,10,115, - 116,97,114,116,115,119,105,116,104,114,29,0,0,0,218,3, - 108,101,110,114,28,0,0,0,114,26,0,0,0,114,22,0, - 0,0,218,9,95,103,101,116,95,100,97,116,97,41,4,114, - 32,0,0,0,218,8,112,97,116,104,110,97,109,101,90,3, - 107,101,121,218,9,116,111,99,95,101,110,116,114,121,114,9, - 0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,103, - 101,116,95,100,97,116,97,194,0,0,0,115,24,0,0,0, - 4,6,12,1,4,2,16,1,22,1,2,2,14,1,12,1, - 12,1,12,1,2,254,255,128,122,20,122,105,112,105,109,112, - 111,114,116,101,114,46,103,101,116,95,100,97,116,97,99,2, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,67,0,0,0,115,20,0,0,0,116,0,124,0, - 124,1,131,2,92,3,125,2,125,3,125,4,124,4,83,0, - 41,2,122,165,103,101,116,95,102,105,108,101,110,97,109,101, - 40,102,117,108,108,110,97,109,101,41,32,45,62,32,102,105, - 108,101,110,97,109,101,32,115,116,114,105,110,103,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116, - 104,101,32,102,105,108,101,110,97,109,101,32,102,111,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,32,111,114,32,114,97,105,115,101,32,90,105, - 112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,32, - 32,32,32,32,32,105,102,32,105,116,32,99,111,117,108,100, - 110,39,116,32,98,101,32,105,109,112,111,114,116,101,100,46, - 10,32,32,32,32,32,32,32,32,78,114,47,0,0,0,114, - 49,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,12,103,101,116,95,102,105,108,101,110,97,109, - 101,215,0,0,0,115,6,0,0,0,16,8,4,1,255,128, - 122,24,122,105,112,105,109,112,111,114,116,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, - 0,0,0,115,126,0,0,0,116,0,124,0,124,1,131,2, - 125,2,124,2,100,1,117,0,114,18,116,1,100,2,124,1, - 155,2,157,2,124,1,100,3,141,2,130,1,116,2,124,0, - 124,1,131,2,125,3,124,2,114,32,116,3,160,4,124,3, - 100,4,161,2,125,4,110,5,124,3,155,0,100,5,157,2, - 125,4,122,7,124,0,106,5,124,4,25,0,125,5,87,0, - 110,9,4,0,116,6,121,62,1,0,1,0,1,0,89,0, - 100,1,83,0,116,7,124,0,106,8,124,5,131,2,160,9, - 161,0,83,0,119,0,41,6,122,253,103,101,116,95,115,111, - 117,114,99,101,40,102,117,108,108,110,97,109,101,41,32,45, - 62,32,115,111,117,114,99,101,32,115,116,114,105,110,103,46, - 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, - 32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,32,109,111,100,117,108,101,46,32,82,97,105,115,101, - 32,90,105,112,73,109,112,111,114,116,69,114,114,111,114,10, - 32,32,32,32,32,32,32,32,105,102,32,116,104,101,32,109, - 111,100,117,108,101,32,99,111,117,108,100,110,39,116,32,98, - 101,32,102,111,117,110,100,44,32,114,101,116,117,114,110,32, - 78,111,110,101,32,105,102,32,116,104,101,32,97,114,99,104, - 105,118,101,32,100,111,101,115,10,32,32,32,32,32,32,32, - 32,99,111,110,116,97,105,110,32,116,104,101,32,109,111,100, - 117,108,101,44,32,98,117,116,32,104,97,115,32,110,111,32, - 115,111,117,114,99,101,32,102,111,114,32,105,116,46,10,32, - 32,32,32,32,32,32,32,78,250,18,99,97,110,39,116,32, - 102,105,110,100,32,109,111,100,117,108,101,32,169,1,114,44, - 0,0,0,250,11,95,95,105,110,105,116,95,95,46,112,121, - 250,3,46,112,121,41,10,114,35,0,0,0,114,3,0,0, - 0,114,36,0,0,0,114,21,0,0,0,114,30,0,0,0, - 114,28,0,0,0,114,26,0,0,0,114,56,0,0,0,114, - 29,0,0,0,218,6,100,101,99,111,100,101,41,6,114,32, - 0,0,0,114,38,0,0,0,114,39,0,0,0,114,13,0, - 0,0,218,8,102,117,108,108,112,97,116,104,114,58,0,0, + 32,116,104,101,32,105,109,112,111,114,116,101,100,10,32,32, + 32,32,32,32,32,32,109,111,100,117,108,101,44,32,111,114, + 32,114,97,105,115,101,115,32,90,105,112,73,109,112,111,114, + 116,69,114,114,111,114,32,105,102,32,105,116,32,99,111,117, + 108,100,32,110,111,116,32,98,101,32,105,109,112,111,114,116, + 101,100,46,10,10,32,32,32,32,32,32,32,32,68,101,112, + 114,101,99,97,116,101,100,32,115,105,110,99,101,32,80,121, + 116,104,111,110,32,51,46,49,48,46,32,85,115,101,32,101, + 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, + 116,101,97,100,46,10,32,32,32,32,32,32,32,32,122,114, + 122,105,112,105,109,112,111,114,116,46,122,105,112,105,109,112, + 111,114,116,101,114,46,108,111,97,100,95,109,111,100,117,108, + 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,46,49,50,59,32,117,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,78,218,12,95,95,98,117,105,108,116,105,110,115,95, + 95,122,14,76,111,97,100,101,100,32,109,111,100,117,108,101, + 32,122,25,32,110,111,116,32,102,111,117,110,100,32,105,110, + 32,115,121,115,46,109,111,100,117,108,101,115,122,30,105,109, + 112,111,114,116,32,123,125,32,35,32,108,111,97,100,101,100, + 32,102,114,111,109,32,90,105,112,32,123,125,41,24,114,35, + 0,0,0,114,36,0,0,0,114,37,0,0,0,114,51,0, + 0,0,218,3,115,121,115,218,7,109,111,100,117,108,101,115, + 218,3,103,101,116,114,15,0,0,0,218,12,95,109,111,100, + 117,108,101,95,116,121,112,101,218,10,95,95,108,111,97,100, + 101,114,95,95,114,39,0,0,0,114,21,0,0,0,114,30, + 0,0,0,114,29,0,0,0,90,8,95,95,112,97,116,104, + 95,95,218,7,104,97,115,97,116,116,114,114,71,0,0,0, + 90,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 218,8,95,95,100,105,99,116,95,95,218,4,101,120,101,99, + 114,26,0,0,0,218,11,73,109,112,111,114,116,69,114,114, + 111,114,114,48,0,0,0,218,16,95,118,101,114,98,111,115, + 101,95,109,101,115,115,97,103,101,41,9,114,32,0,0,0, + 114,41,0,0,0,218,3,109,115,103,114,53,0,0,0,114, + 54,0,0,0,114,43,0,0,0,90,3,109,111,100,114,13, + 0,0,0,114,69,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,11,108,111,97,100,95,109,111, + 100,117,108,101,16,1,0,0,115,56,0,0,0,4,9,12, + 2,16,1,12,1,18,1,8,1,10,1,6,1,2,2,4, + 1,10,3,14,1,8,1,10,2,6,1,16,1,16,1,6, + 1,8,1,2,1,2,2,14,1,12,1,16,1,14,1,4, + 1,2,253,255,128,122,23,122,105,112,105,109,112,111,114,116, + 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, + 0,0,0,67,0,0,0,115,64,0,0,0,122,10,124,0, + 160,0,124,1,161,1,115,9,87,0,100,1,83,0,87,0, + 110,9,4,0,116,1,121,31,1,0,1,0,1,0,89,0, + 100,1,83,0,100,2,100,3,108,2,109,3,125,2,1,0, + 124,2,124,0,124,1,131,2,83,0,119,0,41,4,122,204, + 82,101,116,117,114,110,32,116,104,101,32,82,101,115,111,117, + 114,99,101,82,101,97,100,101,114,32,102,111,114,32,97,32, + 112,97,99,107,97,103,101,32,105,110,32,97,32,122,105,112, + 32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,32, + 73,102,32,39,102,117,108,108,110,97,109,101,39,32,105,115, + 32,97,32,112,97,99,107,97,103,101,32,119,105,116,104,105, + 110,32,116,104,101,32,122,105,112,32,102,105,108,101,44,32, + 114,101,116,117,114,110,32,116,104,101,10,32,32,32,32,32, + 32,32,32,39,82,101,115,111,117,114,99,101,82,101,97,100, + 101,114,39,32,111,98,106,101,99,116,32,102,111,114,32,116, + 104,101,32,112,97,99,107,97,103,101,46,32,32,79,116,104, + 101,114,119,105,115,101,32,114,101,116,117,114,110,32,78,111, + 110,101,46,10,32,32,32,32,32,32,32,32,78,114,0,0, + 0,0,41,1,218,9,90,105,112,82,101,97,100,101,114,41, + 4,114,46,0,0,0,114,3,0,0,0,90,17,105,109,112, + 111,114,116,108,105,98,46,114,101,97,100,101,114,115,114,84, + 0,0,0,41,3,114,32,0,0,0,114,41,0,0,0,114, + 84,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,99, + 101,95,114,101,97,100,101,114,59,1,0,0,115,20,0,0, + 0,2,6,10,1,6,1,4,255,12,2,6,1,12,1,10, + 1,2,253,255,128,122,31,122,105,112,105,109,112,111,114,116, + 101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95, + 114,101,97,100,101,114,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,8,0,0,0,67,0,0,0,115, + 72,0,0,0,122,15,116,0,124,0,106,1,131,1,124,0, + 95,2,124,0,106,2,116,3,124,0,106,1,60,0,87,0, + 100,1,83,0,4,0,116,4,121,35,1,0,1,0,1,0, + 116,3,160,5,124,0,106,1,100,1,161,2,1,0,100,1, + 124,0,95,2,89,0,100,1,83,0,119,0,41,2,122,41, + 82,101,108,111,97,100,32,116,104,101,32,102,105,108,101,32, + 100,97,116,97,32,111,102,32,116,104,101,32,97,114,99,104, + 105,118,101,32,112,97,116,104,46,78,41,6,114,27,0,0, + 0,114,29,0,0,0,114,28,0,0,0,114,25,0,0,0, + 114,3,0,0,0,218,3,112,111,112,169,1,114,32,0,0, 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 218,10,103,101,116,95,115,111,117,114,99,101,227,0,0,0, - 115,28,0,0,0,10,7,8,1,18,1,10,2,4,1,14, - 1,10,2,2,2,14,1,12,1,6,2,16,1,2,253,255, - 128,122,22,122,105,112,105,109,112,111,114,116,101,114,46,103, - 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, - 0,0,115,40,0,0,0,116,0,124,0,124,1,131,2,125, - 2,124,2,100,1,117,0,114,18,116,1,100,2,124,1,155, - 2,157,2,124,1,100,3,141,2,130,1,124,2,83,0,41, - 4,122,171,105,115,95,112,97,99,107,97,103,101,40,102,117, - 108,108,110,97,109,101,41,32,45,62,32,98,111,111,108,46, - 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, - 32,84,114,117,101,32,105,102,32,116,104,101,32,109,111,100, - 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121, - 32,102,117,108,108,110,97,109,101,32,105,115,32,97,32,112, - 97,99,107,97,103,101,46,10,32,32,32,32,32,32,32,32, - 82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69, - 114,114,111,114,32,105,102,32,116,104,101,32,109,111,100,117, - 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102, - 111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,114, - 61,0,0,0,114,62,0,0,0,41,2,114,35,0,0,0, - 114,3,0,0,0,41,3,114,32,0,0,0,114,38,0,0, - 0,114,39,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,114,43,0,0,0,253,0,0,0,115,10, - 0,0,0,10,6,8,1,18,1,4,1,255,128,122,22,122, - 105,112,105,109,112,111,114,116,101,114,46,105,115,95,112,97, - 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,252, - 0,0,0,100,1,125,2,116,0,160,1,124,2,116,2,161, - 2,1,0,116,3,124,0,124,1,131,2,92,3,125,3,125, - 4,125,5,116,4,106,5,160,6,124,1,161,1,125,6,124, - 6,100,2,117,0,115,31,116,7,124,6,116,8,131,2,115, - 40,116,8,124,1,131,1,125,6,124,6,116,4,106,5,124, - 1,60,0,124,0,124,6,95,9,122,42,124,4,114,62,116, - 10,124,0,124,1,131,2,125,7,116,11,160,12,124,0,106, - 13,124,7,161,2,125,8,124,8,103,1,124,6,95,14,116, - 15,124,6,100,3,131,2,115,70,116,16,124,6,95,16,116, - 11,160,17,124,6,106,18,124,1,124,5,161,3,1,0,116, - 19,124,3,124,6,106,18,131,2,1,0,87,0,110,8,1, - 0,1,0,1,0,116,4,106,5,124,1,61,0,130,0,122, - 7,116,4,106,5,124,1,25,0,125,6,87,0,110,14,4, - 0,116,20,121,125,1,0,1,0,1,0,116,21,100,4,124, - 1,155,2,100,5,157,3,131,1,130,1,116,22,160,23,100, - 6,124,1,124,5,161,3,1,0,124,6,83,0,119,0,41, - 7,97,64,1,0,0,108,111,97,100,95,109,111,100,117,108, - 101,40,102,117,108,108,110,97,109,101,41,32,45,62,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, - 76,111,97,100,32,116,104,101,32,109,111,100,117,108,101,32, - 115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,117, - 108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,97, - 109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,10, - 32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,117, - 97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,41, - 32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,105,109,112, - 111,114,116,101,100,10,32,32,32,32,32,32,32,32,109,111, - 100,117,108,101,44,32,111,114,32,114,97,105,115,101,115,32, - 90,105,112,73,109,112,111,114,116,69,114,114,111,114,32,105, - 102,32,105,116,32,99,111,117,108,100,32,110,111,116,32,98, - 101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,32, - 32,32,32,32,32,68,101,112,114,101,99,97,116,101,100,32, - 115,105,110,99,101,32,80,121,116,104,111,110,32,51,46,49, - 48,46,32,85,115,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,46,10,32,32, - 32,32,32,32,32,32,122,114,122,105,112,105,109,112,111,114, - 116,46,122,105,112,105,109,112,111,114,116,101,114,46,108,111, - 97,100,95,109,111,100,117,108,101,40,41,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, - 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, - 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,59, - 32,117,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,78,218,12,95,95,98, - 117,105,108,116,105,110,115,95,95,122,14,76,111,97,100,101, - 100,32,109,111,100,117,108,101,32,122,25,32,110,111,116,32, - 102,111,117,110,100,32,105,110,32,115,121,115,46,109,111,100, - 117,108,101,115,122,30,105,109,112,111,114,116,32,123,125,32, - 35,32,108,111,97,100,101,100,32,102,114,111,109,32,90,105, - 112,32,123,125,41,24,218,9,95,119,97,114,110,105,110,103, - 115,90,4,119,97,114,110,218,18,68,101,112,114,101,99,97, - 116,105,111,110,87,97,114,110,105,110,103,114,48,0,0,0, - 218,3,115,121,115,218,7,109,111,100,117,108,101,115,218,3, - 103,101,116,114,15,0,0,0,218,12,95,109,111,100,117,108, - 101,95,116,121,112,101,218,10,95,95,108,111,97,100,101,114, - 95,95,114,36,0,0,0,114,21,0,0,0,114,30,0,0, - 0,114,29,0,0,0,90,8,95,95,112,97,116,104,95,95, - 218,7,104,97,115,97,116,116,114,114,68,0,0,0,90,14, - 95,102,105,120,95,117,112,95,109,111,100,117,108,101,218,8, - 95,95,100,105,99,116,95,95,218,4,101,120,101,99,114,26, - 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, - 114,45,0,0,0,218,16,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,41,9,114,32,0,0,0,114,38, - 0,0,0,218,3,109,115,103,114,50,0,0,0,114,51,0, - 0,0,114,40,0,0,0,90,3,109,111,100,114,13,0,0, - 0,114,66,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,11,108,111,97,100,95,109,111,100,117, - 108,101,10,1,0,0,115,56,0,0,0,4,9,12,2,16, - 1,12,1,18,1,8,1,10,1,6,1,2,2,4,1,10, - 3,14,1,8,1,10,2,6,1,16,1,16,1,6,1,8, - 1,2,1,2,2,14,1,12,1,16,1,14,1,4,1,2, - 253,255,128,122,23,122,105,112,105,109,112,111,114,116,101,114, - 46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, - 0,67,0,0,0,115,64,0,0,0,122,10,124,0,160,0, - 124,1,161,1,115,9,87,0,100,1,83,0,87,0,110,9, - 4,0,116,1,121,31,1,0,1,0,1,0,89,0,100,1, - 83,0,100,2,100,3,108,2,109,3,125,2,1,0,124,2, - 124,0,124,1,131,2,83,0,119,0,41,4,122,204,82,101, - 116,117,114,110,32,116,104,101,32,82,101,115,111,117,114,99, - 101,82,101,97,100,101,114,32,102,111,114,32,97,32,112,97, - 99,107,97,103,101,32,105,110,32,97,32,122,105,112,32,102, - 105,108,101,46,10,10,32,32,32,32,32,32,32,32,73,102, - 32,39,102,117,108,108,110,97,109,101,39,32,105,115,32,97, - 32,112,97,99,107,97,103,101,32,119,105,116,104,105,110,32, - 116,104,101,32,122,105,112,32,102,105,108,101,44,32,114,101, - 116,117,114,110,32,116,104,101,10,32,32,32,32,32,32,32, - 32,39,82,101,115,111,117,114,99,101,82,101,97,100,101,114, - 39,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101, - 32,112,97,99,107,97,103,101,46,32,32,79,116,104,101,114, - 119,105,115,101,32,114,101,116,117,114,110,32,78,111,110,101, - 46,10,32,32,32,32,32,32,32,32,78,114,0,0,0,0, - 41,1,218,9,90,105,112,82,101,97,100,101,114,41,4,114, - 43,0,0,0,114,3,0,0,0,90,17,105,109,112,111,114, - 116,108,105,98,46,114,101,97,100,101,114,115,114,83,0,0, - 0,41,3,114,32,0,0,0,114,38,0,0,0,114,83,0, - 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, - 114,101,97,100,101,114,53,1,0,0,115,20,0,0,0,2, - 6,10,1,6,1,4,255,12,2,6,1,12,1,10,1,2, - 253,255,128,122,31,122,105,112,105,109,112,111,114,116,101,114, - 46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, - 97,100,101,114,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,8,0,0,0,67,0,0,0,115,72,0, - 0,0,122,15,116,0,124,0,106,1,131,1,124,0,95,2, - 124,0,106,2,116,3,124,0,106,1,60,0,87,0,100,1, - 83,0,4,0,116,4,121,35,1,0,1,0,1,0,116,3, - 160,5,124,0,106,1,100,1,161,2,1,0,100,1,124,0, - 95,2,89,0,100,1,83,0,119,0,41,2,122,41,82,101, - 108,111,97,100,32,116,104,101,32,102,105,108,101,32,100,97, - 116,97,32,111,102,32,116,104,101,32,97,114,99,104,105,118, - 101,32,112,97,116,104,46,78,41,6,114,27,0,0,0,114, - 29,0,0,0,114,28,0,0,0,114,25,0,0,0,114,3, - 0,0,0,218,3,112,111,112,169,1,114,32,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,17, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,68,1,0,0,115,16,0,0,0,2,2,12,1,18,1, - 12,1,14,1,12,1,2,254,255,128,122,29,122,105,112,105, - 109,112,111,114,116,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0, - 0,0,115,24,0,0,0,100,1,124,0,106,0,155,0,116, - 1,155,0,124,0,106,2,155,0,100,2,157,5,83,0,41, - 3,78,122,21,60,122,105,112,105,109,112,111,114,116,101,114, - 32,111,98,106,101,99,116,32,34,122,2,34,62,41,3,114, - 29,0,0,0,114,20,0,0,0,114,31,0,0,0,114,86, - 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,218,8,95,95,114,101,112,114,95,95,78,1,0,0, - 115,4,0,0,0,24,1,255,128,122,20,122,105,112,105,109, - 112,111,114,116,101,114,46,95,95,114,101,112,114,95,95,41, - 1,78,41,1,78,41,1,78,41,17,114,6,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,7,95,95,100,111,99, - 95,95,114,34,0,0,0,114,41,0,0,0,114,42,0,0, - 0,114,46,0,0,0,114,52,0,0,0,114,59,0,0,0, - 114,60,0,0,0,114,67,0,0,0,114,43,0,0,0,114, - 82,0,0,0,114,84,0,0,0,114,87,0,0,0,114,88, - 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,4,0,0,0,46,0,0,0, - 115,32,0,0,0,8,0,4,1,8,17,10,46,10,34,10, - 13,8,27,8,10,8,21,8,12,8,26,8,13,8,43,8, - 15,12,10,255,128,122,12,95,95,105,110,105,116,95,95,46, - 112,121,99,84,114,63,0,0,0,70,41,3,122,4,46,112, - 121,99,84,70,41,3,114,64,0,0,0,70,70,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,67,0,0,0,115,20,0,0,0,124,0,106,0,124, - 1,160,1,100,1,161,1,100,2,25,0,23,0,83,0,41, - 3,78,218,1,46,233,2,0,0,0,41,2,114,31,0,0, - 0,218,10,114,112,97,114,116,105,116,105,111,110,41,2,114, - 32,0,0,0,114,38,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,114,36,0,0,0,96,1,0, - 0,115,4,0,0,0,20,1,255,128,114,36,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 2,0,0,0,67,0,0,0,115,18,0,0,0,124,1,116, - 0,23,0,125,2,124,2,124,0,106,1,118,0,83,0,169, - 1,78,41,2,114,20,0,0,0,114,28,0,0,0,41,3, - 114,32,0,0,0,114,13,0,0,0,90,7,100,105,114,112, - 97,116,104,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,114,37,0,0,0,100,1,0,0,115,6,0,0,0, - 8,4,10,2,255,128,114,37,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0, - 67,0,0,0,115,56,0,0,0,116,0,124,0,124,1,131, - 2,125,2,116,1,68,0,93,18,92,3,125,3,125,4,125, - 5,124,2,124,3,23,0,125,6,124,6,124,0,106,2,118, - 0,114,25,124,5,2,0,1,0,83,0,113,7,100,0,83, - 0,114,93,0,0,0,41,3,114,36,0,0,0,218,16,95, - 122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,114, - 28,0,0,0,41,7,114,32,0,0,0,114,38,0,0,0, - 114,13,0,0,0,218,6,115,117,102,102,105,120,218,10,105, - 115,98,121,116,101,99,111,100,101,114,51,0,0,0,114,66, - 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,114,35,0,0,0,109,1,0,0,115,16,0,0,0, - 10,1,14,1,8,1,10,1,8,1,2,255,4,2,255,128, - 114,35,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,26,0,0,0,9,0,0,0,67,0,0,0,115,226, - 4,0,0,122,7,116,0,160,1,124,0,161,1,125,1,87, - 0,110,16,4,0,116,2,144,2,121,112,1,0,1,0,1, - 0,116,3,100,1,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,124,1,144,2,143,60,1,0,122,18,124,1,160, - 4,116,5,11,0,100,3,161,2,1,0,124,1,160,6,161, - 0,125,2,124,1,160,7,116,5,161,1,125,3,87,0,110, - 16,4,0,116,2,144,2,121,111,1,0,1,0,1,0,116, - 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,116,8,124,3,131,1,116,5,107,3,114,78,116,3,100, - 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, - 3,100,0,100,5,133,2,25,0,116,9,107,3,114,201,122, - 12,124,1,160,4,100,6,100,3,161,2,1,0,124,1,160, - 6,161,0,125,4,87,0,110,16,4,0,116,2,144,2,121, - 110,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,116,10,124,4,116,11,24, - 0,116,5,24,0,100,6,131,2,125,5,122,11,124,1,160, - 4,124,5,161,1,1,0,124,1,160,7,161,0,125,6,87, - 0,110,16,4,0,116,2,144,2,121,109,1,0,1,0,1, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,74,1,0,0,115,16,0,0,0,2,2,12,1, + 18,1,12,1,14,1,12,1,2,254,255,128,122,29,122,105, + 112,105,109,112,111,114,116,101,114,46,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0, + 67,0,0,0,115,24,0,0,0,100,1,124,0,106,0,155, + 0,116,1,155,0,124,0,106,2,155,0,100,2,157,5,83, + 0,41,3,78,122,21,60,122,105,112,105,109,112,111,114,116, + 101,114,32,111,98,106,101,99,116,32,34,122,2,34,62,41, + 3,114,29,0,0,0,114,20,0,0,0,114,31,0,0,0, + 114,87,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,218,8,95,95,114,101,112,114,95,95,84,1, + 0,0,115,4,0,0,0,24,1,255,128,122,20,122,105,112, + 105,109,112,111,114,116,101,114,46,95,95,114,101,112,114,95, + 95,41,1,78,41,1,78,41,1,78,41,17,114,6,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,7,95,95,100, + 111,99,95,95,114,34,0,0,0,114,44,0,0,0,114,45, + 0,0,0,114,49,0,0,0,114,55,0,0,0,114,62,0, + 0,0,114,63,0,0,0,114,70,0,0,0,114,46,0,0, + 0,114,83,0,0,0,114,85,0,0,0,114,88,0,0,0, + 114,89,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,114,4,0,0,0,46,0, + 0,0,115,32,0,0,0,8,0,4,1,8,17,10,46,10, + 37,10,16,8,27,8,10,8,21,8,12,8,26,8,13,8, + 43,8,15,12,10,255,128,122,12,95,95,105,110,105,116,95, + 95,46,112,121,99,84,114,66,0,0,0,70,41,3,122,4, + 46,112,121,99,84,70,41,3,114,67,0,0,0,70,70,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,20,0,0,0,124,0,106, + 0,124,1,160,1,100,1,161,1,100,2,25,0,23,0,83, + 0,41,3,78,218,1,46,233,2,0,0,0,41,2,114,31, + 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,41, + 2,114,32,0,0,0,114,41,0,0,0,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,114,39,0,0,0,102, + 1,0,0,115,4,0,0,0,20,1,255,128,114,39,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,2,0,0,0,67,0,0,0,115,18,0,0,0,124, + 1,116,0,23,0,125,2,124,2,124,0,106,1,118,0,83, + 0,169,1,78,41,2,114,20,0,0,0,114,28,0,0,0, + 41,3,114,32,0,0,0,114,13,0,0,0,90,7,100,105, + 114,112,97,116,104,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,40,0,0,0,106,1,0,0,115,6,0, + 0,0,8,4,10,2,255,128,114,40,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0, + 0,0,67,0,0,0,115,56,0,0,0,116,0,124,0,124, + 1,131,2,125,2,116,1,68,0,93,18,92,3,125,3,125, + 4,125,5,124,2,124,3,23,0,125,6,124,6,124,0,106, + 2,118,0,114,25,124,5,2,0,1,0,83,0,113,7,100, + 0,83,0,114,94,0,0,0,41,3,114,39,0,0,0,218, + 16,95,122,105,112,95,115,101,97,114,99,104,111,114,100,101, + 114,114,28,0,0,0,41,7,114,32,0,0,0,114,41,0, + 0,0,114,13,0,0,0,218,6,115,117,102,102,105,120,218, + 10,105,115,98,121,116,101,99,111,100,101,114,54,0,0,0, + 114,69,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,38,0,0,0,115,1,0,0,115,16,0, + 0,0,10,1,14,1,8,1,10,1,8,1,2,255,4,2, + 255,128,114,38,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,26,0,0,0,9,0,0,0,67,0,0,0, + 115,226,4,0,0,122,7,116,0,160,1,124,0,161,1,125, + 1,87,0,110,16,4,0,116,2,144,2,121,112,1,0,1, + 0,1,0,116,3,100,1,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,124,1,144,2,143,60,1,0,122,18,124, + 1,160,4,116,5,11,0,100,3,161,2,1,0,124,1,160, + 6,161,0,125,2,124,1,160,7,116,5,161,1,125,3,87, + 0,110,16,4,0,116,2,144,2,121,111,1,0,1,0,1, 0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,124,6,160,12,116,9,161,1,125,7,124,7,100, - 6,107,0,114,170,116,3,100,7,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,124,6,124,7,124,7,116,5,23, - 0,133,2,25,0,125,3,116,8,124,3,131,1,116,5,107, - 3,114,193,116,3,100,8,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,4,116,8,124,6,131,1,24,0,124, - 7,23,0,125,2,116,13,124,3,100,9,100,10,133,2,25, - 0,131,1,125,8,116,13,124,3,100,10,100,11,133,2,25, - 0,131,1,125,9,124,2,124,8,107,0,114,230,116,3,100, - 12,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, - 2,124,9,107,0,114,243,116,3,100,13,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,125, - 2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,144, - 1,114,9,116,3,100,14,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,105,0,125,11,100,6,125,12,122,7,124, - 1,160,4,124,2,161,1,1,0,87,0,110,16,4,0,116, - 2,144,2,121,108,1,0,1,0,1,0,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,9,0,124, - 1,160,7,100,16,161,1,125,3,116,8,124,3,131,1,100, - 5,107,0,144,1,114,54,116,14,100,17,131,1,130,1,124, - 3,100,0,100,5,133,2,25,0,100,18,107,3,144,1,114, - 65,144,2,113,80,116,8,124,3,131,1,100,16,107,3,144, - 1,114,76,116,14,100,17,131,1,130,1,116,15,124,3,100, - 19,100,20,133,2,25,0,131,1,125,13,116,15,124,3,100, - 20,100,9,133,2,25,0,131,1,125,14,116,15,124,3,100, - 9,100,21,133,2,25,0,131,1,125,15,116,15,124,3,100, - 21,100,10,133,2,25,0,131,1,125,16,116,13,124,3,100, - 10,100,11,133,2,25,0,131,1,125,17,116,13,124,3,100, - 11,100,22,133,2,25,0,131,1,125,18,116,13,124,3,100, - 22,100,23,133,2,25,0,131,1,125,4,116,15,124,3,100, - 23,100,24,133,2,25,0,131,1,125,19,116,15,124,3,100, - 24,100,25,133,2,25,0,131,1,125,20,116,15,124,3,100, - 25,100,26,133,2,25,0,131,1,125,21,116,13,124,3,100, - 27,100,16,133,2,25,0,131,1,125,22,124,19,124,20,23, - 0,124,21,23,0,125,8,124,22,124,9,107,4,144,1,114, - 184,116,3,100,28,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,124,22,124,10,55,0,125,22,122,7,124,1,160, - 7,124,19,161,1,125,23,87,0,110,16,4,0,116,2,144, - 2,121,107,1,0,1,0,1,0,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,116,8,124,23,131, - 1,124,19,107,3,144,1,114,228,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,122,25,116,8,124, - 1,160,7,124,8,124,19,24,0,161,1,131,1,124,8,124, - 19,24,0,107,3,144,1,114,252,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,87,0,110,16,4, - 0,116,2,144,2,121,106,1,0,1,0,1,0,116,3,100, - 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, - 13,100,29,64,0,144,2,114,24,124,23,160,16,161,0,125, - 23,110,24,122,7,124,23,160,16,100,30,161,1,125,23,87, - 0,110,16,4,0,116,17,144,2,121,105,1,0,1,0,1, - 0,124,23,160,16,100,31,161,1,160,18,116,19,161,1,125, - 23,89,0,124,23,160,20,100,32,116,21,161,2,125,23,116, - 22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,124, - 18,124,4,124,22,124,15,124,16,124,17,102,8,125,25,124, - 25,124,11,124,23,60,0,124,12,100,33,55,0,125,12,144, - 1,113,38,87,0,100,0,4,0,4,0,131,3,1,0,110, - 9,49,0,144,2,115,91,119,1,1,0,1,0,1,0,89, - 0,1,0,116,24,160,25,100,34,124,12,124,0,161,3,1, - 0,124,11,83,0,119,0,119,0,119,0,119,0,119,0,119, - 0,119,0,119,0,41,35,78,122,21,99,97,110,39,116,32, - 111,112,101,110,32,90,105,112,32,102,105,108,101,58,32,114, - 12,0,0,0,114,91,0,0,0,250,21,99,97,110,39,116, - 32,114,101,97,100,32,90,105,112,32,102,105,108,101,58,32, - 233,4,0,0,0,114,0,0,0,0,122,16,110,111,116,32, - 97,32,90,105,112,32,102,105,108,101,58,32,122,18,99,111, - 114,114,117,112,116,32,90,105,112,32,102,105,108,101,58,32, - 233,12,0,0,0,233,16,0,0,0,233,20,0,0,0,122, - 28,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, - 101,99,116,111,114,121,32,115,105,122,101,58,32,122,30,98, - 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, - 116,111,114,121,32,111,102,102,115,101,116,58,32,122,38,98, - 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, - 116,111,114,121,32,115,105,122,101,32,111,114,32,111,102,102, - 115,101,116,58,32,84,233,46,0,0,0,250,27,69,79,70, - 32,114,101,97,100,32,119,104,101,114,101,32,110,111,116,32, - 101,120,112,101,99,116,101,100,115,4,0,0,0,80,75,1, - 2,233,8,0,0,0,233,10,0,0,0,233,14,0,0,0, - 233,24,0,0,0,233,28,0,0,0,233,30,0,0,0,233, - 32,0,0,0,233,34,0,0,0,233,42,0,0,0,122,25, - 98,97,100,32,108,111,99,97,108,32,104,101,97,100,101,114, - 32,111,102,102,115,101,116,58,32,105,0,8,0,0,218,5, - 97,115,99,105,105,90,6,108,97,116,105,110,49,250,1,47, - 114,5,0,0,0,122,33,122,105,112,105,109,112,111,114,116, - 58,32,102,111,117,110,100,32,123,125,32,110,97,109,101,115, - 32,105,110,32,123,33,114,125,41,26,218,3,95,105,111,218, - 9,111,112,101,110,95,99,111,100,101,114,22,0,0,0,114, - 3,0,0,0,218,4,115,101,101,107,218,20,69,78,68,95, - 67,69,78,84,82,65,76,95,68,73,82,95,83,73,90,69, - 90,4,116,101,108,108,218,4,114,101,97,100,114,55,0,0, - 0,218,18,83,84,82,73,78,71,95,69,78,68,95,65,82, - 67,72,73,86,69,218,3,109,97,120,218,15,77,65,88,95, - 67,79,77,77,69,78,84,95,76,69,78,218,5,114,102,105, - 110,100,114,2,0,0,0,218,8,69,79,70,69,114,114,111, - 114,114,1,0,0,0,114,65,0,0,0,218,18,85,110,105, - 99,111,100,101,68,101,99,111,100,101,69,114,114,111,114,218, - 9,116,114,97,110,115,108,97,116,101,218,11,99,112,52,51, - 55,95,116,97,98,108,101,114,19,0,0,0,114,20,0,0, - 0,114,21,0,0,0,114,30,0,0,0,114,45,0,0,0, - 114,80,0,0,0,41,26,114,29,0,0,0,218,2,102,112, - 90,15,104,101,97,100,101,114,95,112,111,115,105,116,105,111, - 110,218,6,98,117,102,102,101,114,218,9,102,105,108,101,95, - 115,105,122,101,90,17,109,97,120,95,99,111,109,109,101,110, - 116,95,115,116,97,114,116,218,4,100,97,116,97,90,3,112, - 111,115,218,11,104,101,97,100,101,114,95,115,105,122,101,90, - 13,104,101,97,100,101,114,95,111,102,102,115,101,116,90,10, - 97,114,99,95,111,102,102,115,101,116,114,33,0,0,0,218, - 5,99,111,117,110,116,218,5,102,108,97,103,115,218,8,99, - 111,109,112,114,101,115,115,218,4,116,105,109,101,218,4,100, - 97,116,101,218,3,99,114,99,218,9,100,97,116,97,95,115, - 105,122,101,218,9,110,97,109,101,95,115,105,122,101,218,10, - 101,120,116,114,97,95,115,105,122,101,90,12,99,111,109,109, - 101,110,116,95,115,105,122,101,218,11,102,105,108,101,95,111, - 102,102,115,101,116,114,44,0,0,0,114,13,0,0,0,218, - 1,116,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,114,27,0,0,0,140,1,0,0,115,240,0,0,0,2, - 1,14,1,14,1,18,1,8,2,2,1,14,1,8,1,14, - 1,14,1,18,1,12,1,18,1,16,1,2,3,12,1,12, - 1,14,1,10,1,2,1,6,255,8,2,2,1,2,255,2, - 1,4,255,2,2,10,1,12,1,14,1,10,1,2,1,6, - 255,10,2,8,1,10,1,2,1,6,255,16,2,12,1,10, - 1,2,1,6,255,16,2,16,2,16,1,8,1,18,1,8, - 1,18,1,8,1,8,1,10,1,18,1,4,2,4,2,2, - 1,14,1,14,1,18,1,2,1,10,1,14,1,8,1,18, - 2,4,1,14,1,8,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,12,1,10, - 1,18,1,8,1,2,2,14,1,14,1,18,1,14,1,18, - 1,2,4,28,1,18,1,4,255,14,2,18,1,10,2,10, - 2,2,3,14,1,14,1,18,1,12,2,12,1,20,1,8, - 1,8,1,4,202,14,6,18,128,14,49,4,1,2,247,2, - 246,2,246,2,227,2,227,2,248,2,246,2,248,255,128,114, - 27,0,0,0,117,190,1,0,0,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,195,135,195,188,195,169,195, - 162,195,164,195,160,195,165,195,167,195,170,195,171,195,168,195, - 175,195,174,195,172,195,132,195,133,195,137,195,166,195,134,195, - 180,195,182,195,178,195,187,195,185,195,191,195,150,195,156,194, - 162,194,163,194,165,226,130,167,198,146,195,161,195,173,195,179, - 195,186,195,177,195,145,194,170,194,186,194,191,226,140,144,194, - 172,194,189,194,188,194,161,194,171,194,187,226,150,145,226,150, - 146,226,150,147,226,148,130,226,148,164,226,149,161,226,149,162, - 226,149,150,226,149,149,226,149,163,226,149,145,226,149,151,226, - 149,157,226,149,156,226,149,155,226,148,144,226,148,148,226,148, - 180,226,148,172,226,148,156,226,148,128,226,148,188,226,149,158, - 226,149,159,226,149,154,226,149,148,226,149,169,226,149,166,226, - 149,160,226,149,144,226,149,172,226,149,167,226,149,168,226,149, - 164,226,149,165,226,149,153,226,149,152,226,149,146,226,149,147, - 226,149,171,226,149,170,226,148,152,226,148,140,226,150,136,226, - 150,132,226,150,140,226,150,144,226,150,128,206,177,195,159,206, - 147,207,128,206,163,207,131,194,181,207,132,206,166,206,152,206, - 169,206,180,226,136,158,207,134,206,181,226,136,169,226,137,161, - 194,177,226,137,165,226,137,164,226,140,160,226,140,161,195,183, - 226,137,136,194,176,226,136,153,194,183,226,136,154,226,129,191, - 194,178,226,150,160,194,160,99,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0, - 115,106,0,0,0,116,0,114,11,116,1,160,2,100,1,161, - 1,1,0,116,3,100,2,131,1,130,1,100,3,97,0,122, - 28,122,8,100,4,100,5,108,4,109,5,125,0,1,0,87, - 0,110,15,4,0,116,6,121,52,1,0,1,0,1,0,116, - 1,160,2,100,1,161,1,1,0,116,3,100,2,131,1,130, - 1,87,0,100,6,97,0,110,3,100,6,97,0,119,0,116, - 1,160,2,100,7,161,1,1,0,124,0,83,0,119,0,41, - 8,78,122,27,122,105,112,105,109,112,111,114,116,58,32,122, - 108,105,98,32,85,78,65,86,65,73,76,65,66,76,69,250, - 41,99,97,110,39,116,32,100,101,99,111,109,112,114,101,115, - 115,32,100,97,116,97,59,32,122,108,105,98,32,110,111,116, - 32,97,118,97,105,108,97,98,108,101,84,114,0,0,0,0, - 169,1,218,10,100,101,99,111,109,112,114,101,115,115,70,122, - 25,122,105,112,105,109,112,111,114,116,58,32,122,108,105,98, - 32,97,118,97,105,108,97,98,108,101,41,7,218,15,95,105, - 109,112,111,114,116,105,110,103,95,122,108,105,98,114,45,0, - 0,0,114,80,0,0,0,114,3,0,0,0,90,4,122,108, - 105,98,114,146,0,0,0,218,9,69,120,99,101,112,116,105, - 111,110,114,145,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,10,0,0,0,218,20,95,103,101,116,95,100,101,99, - 111,109,112,114,101,115,115,95,102,117,110,99,42,2,0,0, - 115,30,0,0,0,4,2,10,3,8,1,4,2,4,1,16, - 1,12,1,10,1,8,1,2,253,12,5,10,2,4,1,2, - 249,255,128,114,149,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,17,0,0,0,9,0,0,0,67,0,0, - 0,115,120,1,0,0,124,1,92,8,125,2,125,3,125,4, - 125,5,125,6,125,7,125,8,125,9,124,4,100,1,107,0, - 114,18,116,0,100,2,131,1,130,1,116,1,160,2,124,0, - 161,1,143,127,125,10,122,7,124,10,160,3,124,6,161,1, - 1,0,87,0,110,15,4,0,116,4,121,187,1,0,1,0, - 1,0,116,0,100,3,124,0,155,2,157,2,124,0,100,4, - 141,2,130,1,124,10,160,5,100,5,161,1,125,11,116,6, - 124,11,131,1,100,5,107,3,114,62,116,7,100,6,131,1, - 130,1,124,11,100,0,100,7,133,2,25,0,100,8,107,3, - 114,79,116,0,100,9,124,0,155,2,157,2,124,0,100,4, - 141,2,130,1,116,8,124,11,100,10,100,11,133,2,25,0, - 131,1,125,12,116,8,124,11,100,11,100,5,133,2,25,0, - 131,1,125,13,100,5,124,12,23,0,124,13,23,0,125,14, - 124,6,124,14,55,0,125,6,122,7,124,10,160,3,124,6, - 161,1,1,0,87,0,110,15,4,0,116,4,121,186,1,0, + 2,130,1,116,8,124,3,131,1,116,5,107,3,114,78,116, + 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,3,100,0,100,5,133,2,25,0,116,9,107,3,114, + 201,122,12,124,1,160,4,100,6,100,3,161,2,1,0,124, + 1,160,6,161,0,125,4,87,0,110,16,4,0,116,2,144, + 2,121,110,1,0,1,0,1,0,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,116,10,124,4,116, + 11,24,0,116,5,24,0,100,6,131,2,125,5,122,11,124, + 1,160,4,124,5,161,1,1,0,124,1,160,7,161,0,125, + 6,87,0,110,16,4,0,116,2,144,2,121,109,1,0,1, + 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,124,6,160,12,116,9,161,1,125,7,124, + 7,100,6,107,0,114,170,116,3,100,7,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,124,6,124,7,124,7,116, + 5,23,0,133,2,25,0,125,3,116,8,124,3,131,1,116, + 5,107,3,114,193,116,3,100,8,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,124,4,116,8,124,6,131,1,24, + 0,124,7,23,0,125,2,116,13,124,3,100,9,100,10,133, + 2,25,0,131,1,125,8,116,13,124,3,100,10,100,11,133, + 2,25,0,131,1,125,9,124,2,124,8,107,0,114,230,116, + 3,100,12,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,2,124,9,107,0,114,243,116,3,100,13,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,124,2,124,8,56, + 0,125,2,124,2,124,9,24,0,125,10,124,10,100,6,107, + 0,144,1,114,9,116,3,100,14,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,105,0,125,11,100,6,125,12,122, + 7,124,1,160,4,124,2,161,1,1,0,87,0,110,16,4, + 0,116,2,144,2,121,108,1,0,1,0,1,0,116,3,100, + 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,9, + 0,124,1,160,7,100,16,161,1,125,3,116,8,124,3,131, + 1,100,5,107,0,144,1,114,54,116,14,100,17,131,1,130, + 1,124,3,100,0,100,5,133,2,25,0,100,18,107,3,144, + 1,114,65,144,2,113,80,116,8,124,3,131,1,100,16,107, + 3,144,1,114,76,116,14,100,17,131,1,130,1,116,15,124, + 3,100,19,100,20,133,2,25,0,131,1,125,13,116,15,124, + 3,100,20,100,9,133,2,25,0,131,1,125,14,116,15,124, + 3,100,9,100,21,133,2,25,0,131,1,125,15,116,15,124, + 3,100,21,100,10,133,2,25,0,131,1,125,16,116,13,124, + 3,100,10,100,11,133,2,25,0,131,1,125,17,116,13,124, + 3,100,11,100,22,133,2,25,0,131,1,125,18,116,13,124, + 3,100,22,100,23,133,2,25,0,131,1,125,4,116,15,124, + 3,100,23,100,24,133,2,25,0,131,1,125,19,116,15,124, + 3,100,24,100,25,133,2,25,0,131,1,125,20,116,15,124, + 3,100,25,100,26,133,2,25,0,131,1,125,21,116,13,124, + 3,100,27,100,16,133,2,25,0,131,1,125,22,124,19,124, + 20,23,0,124,21,23,0,125,8,124,22,124,9,107,4,144, + 1,114,184,116,3,100,28,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,124,22,124,10,55,0,125,22,122,7,124, + 1,160,7,124,19,161,1,125,23,87,0,110,16,4,0,116, + 2,144,2,121,107,1,0,1,0,1,0,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,116,8,124, + 23,131,1,124,19,107,3,144,1,114,228,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,122,25,116, + 8,124,1,160,7,124,8,124,19,24,0,161,1,131,1,124, + 8,124,19,24,0,107,3,144,1,114,252,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,87,0,110, + 16,4,0,116,2,144,2,121,106,1,0,1,0,1,0,116, + 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,13,100,29,64,0,144,2,114,24,124,23,160,16,161, + 0,125,23,110,24,122,7,124,23,160,16,100,30,161,1,125, + 23,87,0,110,16,4,0,116,17,144,2,121,105,1,0,1, + 0,1,0,124,23,160,16,100,31,161,1,160,18,116,19,161, + 1,125,23,89,0,124,23,160,20,100,32,116,21,161,2,125, + 23,116,22,160,23,124,0,124,23,161,2,125,24,124,24,124, + 14,124,18,124,4,124,22,124,15,124,16,124,17,102,8,125, + 25,124,25,124,11,124,23,60,0,124,12,100,33,55,0,125, + 12,144,1,113,38,87,0,100,0,4,0,4,0,131,3,1, + 0,110,9,49,0,144,2,115,91,119,1,1,0,1,0,1, + 0,89,0,1,0,116,24,160,25,100,34,124,12,124,0,161, + 3,1,0,124,11,83,0,119,0,119,0,119,0,119,0,119, + 0,119,0,119,0,119,0,41,35,78,122,21,99,97,110,39, + 116,32,111,112,101,110,32,90,105,112,32,102,105,108,101,58, + 32,114,12,0,0,0,114,92,0,0,0,250,21,99,97,110, + 39,116,32,114,101,97,100,32,90,105,112,32,102,105,108,101, + 58,32,233,4,0,0,0,114,0,0,0,0,122,16,110,111, + 116,32,97,32,90,105,112,32,102,105,108,101,58,32,122,18, + 99,111,114,114,117,112,116,32,90,105,112,32,102,105,108,101, + 58,32,233,12,0,0,0,233,16,0,0,0,233,20,0,0, + 0,122,28,98,97,100,32,99,101,110,116,114,97,108,32,100, + 105,114,101,99,116,111,114,121,32,115,105,122,101,58,32,122, + 30,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, + 101,99,116,111,114,121,32,111,102,102,115,101,116,58,32,122, + 38,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, + 101,99,116,111,114,121,32,115,105,122,101,32,111,114,32,111, + 102,102,115,101,116,58,32,84,233,46,0,0,0,250,27,69, + 79,70,32,114,101,97,100,32,119,104,101,114,101,32,110,111, + 116,32,101,120,112,101,99,116,101,100,115,4,0,0,0,80, + 75,1,2,233,8,0,0,0,233,10,0,0,0,233,14,0, + 0,0,233,24,0,0,0,233,28,0,0,0,233,30,0,0, + 0,233,32,0,0,0,233,34,0,0,0,233,42,0,0,0, + 122,25,98,97,100,32,108,111,99,97,108,32,104,101,97,100, + 101,114,32,111,102,102,115,101,116,58,32,105,0,8,0,0, + 218,5,97,115,99,105,105,90,6,108,97,116,105,110,49,250, + 1,47,114,5,0,0,0,122,33,122,105,112,105,109,112,111, + 114,116,58,32,102,111,117,110,100,32,123,125,32,110,97,109, + 101,115,32,105,110,32,123,33,114,125,41,26,218,3,95,105, + 111,218,9,111,112,101,110,95,99,111,100,101,114,22,0,0, + 0,114,3,0,0,0,218,4,115,101,101,107,218,20,69,78, + 68,95,67,69,78,84,82,65,76,95,68,73,82,95,83,73, + 90,69,90,4,116,101,108,108,218,4,114,101,97,100,114,58, + 0,0,0,218,18,83,84,82,73,78,71,95,69,78,68,95, + 65,82,67,72,73,86,69,218,3,109,97,120,218,15,77,65, + 88,95,67,79,77,77,69,78,84,95,76,69,78,218,5,114, + 102,105,110,100,114,2,0,0,0,218,8,69,79,70,69,114, + 114,111,114,114,1,0,0,0,114,68,0,0,0,218,18,85, + 110,105,99,111,100,101,68,101,99,111,100,101,69,114,114,111, + 114,218,9,116,114,97,110,115,108,97,116,101,218,11,99,112, + 52,51,55,95,116,97,98,108,101,114,19,0,0,0,114,20, + 0,0,0,114,21,0,0,0,114,30,0,0,0,114,48,0, + 0,0,114,81,0,0,0,41,26,114,29,0,0,0,218,2, + 102,112,90,15,104,101,97,100,101,114,95,112,111,115,105,116, + 105,111,110,218,6,98,117,102,102,101,114,218,9,102,105,108, + 101,95,115,105,122,101,90,17,109,97,120,95,99,111,109,109, + 101,110,116,95,115,116,97,114,116,218,4,100,97,116,97,90, + 3,112,111,115,218,11,104,101,97,100,101,114,95,115,105,122, + 101,90,13,104,101,97,100,101,114,95,111,102,102,115,101,116, + 90,10,97,114,99,95,111,102,102,115,101,116,114,33,0,0, + 0,218,5,99,111,117,110,116,218,5,102,108,97,103,115,218, + 8,99,111,109,112,114,101,115,115,218,4,116,105,109,101,218, + 4,100,97,116,101,218,3,99,114,99,218,9,100,97,116,97, + 95,115,105,122,101,218,9,110,97,109,101,95,115,105,122,101, + 218,10,101,120,116,114,97,95,115,105,122,101,90,12,99,111, + 109,109,101,110,116,95,115,105,122,101,218,11,102,105,108,101, + 95,111,102,102,115,101,116,114,47,0,0,0,114,13,0,0, + 0,218,1,116,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,114,27,0,0,0,146,1,0,0,115,240,0,0, + 0,2,1,14,1,14,1,18,1,8,2,2,1,14,1,8, + 1,14,1,14,1,18,1,12,1,18,1,16,1,2,3,12, + 1,12,1,14,1,10,1,2,1,6,255,8,2,2,1,2, + 255,2,1,4,255,2,2,10,1,12,1,14,1,10,1,2, + 1,6,255,10,2,8,1,10,1,2,1,6,255,16,2,12, + 1,10,1,2,1,6,255,16,2,16,2,16,1,8,1,18, + 1,8,1,18,1,8,1,8,1,10,1,18,1,4,2,4, + 2,2,1,14,1,14,1,18,1,2,1,10,1,14,1,8, + 1,18,2,4,1,14,1,8,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,12, + 1,10,1,18,1,8,1,2,2,14,1,14,1,18,1,14, + 1,18,1,2,4,28,1,18,1,4,255,14,2,18,1,10, + 2,10,2,2,3,14,1,14,1,18,1,12,2,12,1,20, + 1,8,1,8,1,4,202,14,6,18,128,14,49,4,1,2, + 247,2,246,2,246,2,227,2,227,2,248,2,246,2,248,255, + 128,114,27,0,0,0,117,190,1,0,0,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,195,135,195,188,195, + 169,195,162,195,164,195,160,195,165,195,167,195,170,195,171,195, + 168,195,175,195,174,195,172,195,132,195,133,195,137,195,166,195, + 134,195,180,195,182,195,178,195,187,195,185,195,191,195,150,195, + 156,194,162,194,163,194,165,226,130,167,198,146,195,161,195,173, + 195,179,195,186,195,177,195,145,194,170,194,186,194,191,226,140, + 144,194,172,194,189,194,188,194,161,194,171,194,187,226,150,145, + 226,150,146,226,150,147,226,148,130,226,148,164,226,149,161,226, + 149,162,226,149,150,226,149,149,226,149,163,226,149,145,226,149, + 151,226,149,157,226,149,156,226,149,155,226,148,144,226,148,148, + 226,148,180,226,148,172,226,148,156,226,148,128,226,148,188,226, + 149,158,226,149,159,226,149,154,226,149,148,226,149,169,226,149, + 166,226,149,160,226,149,144,226,149,172,226,149,167,226,149,168, + 226,149,164,226,149,165,226,149,153,226,149,152,226,149,146,226, + 149,147,226,149,171,226,149,170,226,148,152,226,148,140,226,150, + 136,226,150,132,226,150,140,226,150,144,226,150,128,206,177,195, + 159,206,147,207,128,206,163,207,131,194,181,207,132,206,166,206, + 152,206,169,206,180,226,136,158,207,134,206,181,226,136,169,226, + 137,161,194,177,226,137,165,226,137,164,226,140,160,226,140,161, + 195,183,226,137,136,194,176,226,136,153,194,183,226,136,154,226, + 129,191,194,178,226,150,160,194,160,99,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, + 0,0,115,106,0,0,0,116,0,114,11,116,1,160,2,100, + 1,161,1,1,0,116,3,100,2,131,1,130,1,100,3,97, + 0,122,28,122,8,100,4,100,5,108,4,109,5,125,0,1, + 0,87,0,110,15,4,0,116,6,121,52,1,0,1,0,1, + 0,116,1,160,2,100,1,161,1,1,0,116,3,100,2,131, + 1,130,1,87,0,100,6,97,0,110,3,100,6,97,0,119, + 0,116,1,160,2,100,7,161,1,1,0,124,0,83,0,119, + 0,41,8,78,122,27,122,105,112,105,109,112,111,114,116,58, + 32,122,108,105,98,32,85,78,65,86,65,73,76,65,66,76, + 69,250,41,99,97,110,39,116,32,100,101,99,111,109,112,114, + 101,115,115,32,100,97,116,97,59,32,122,108,105,98,32,110, + 111,116,32,97,118,97,105,108,97,98,108,101,84,114,0,0, + 0,0,169,1,218,10,100,101,99,111,109,112,114,101,115,115, + 70,122,25,122,105,112,105,109,112,111,114,116,58,32,122,108, + 105,98,32,97,118,97,105,108,97,98,108,101,41,7,218,15, + 95,105,109,112,111,114,116,105,110,103,95,122,108,105,98,114, + 48,0,0,0,114,81,0,0,0,114,3,0,0,0,90,4, + 122,108,105,98,114,147,0,0,0,218,9,69,120,99,101,112, + 116,105,111,110,114,146,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,218,20,95,103,101,116,95,100, + 101,99,111,109,112,114,101,115,115,95,102,117,110,99,48,2, + 0,0,115,30,0,0,0,4,2,10,3,8,1,4,2,4, + 1,16,1,12,1,10,1,8,1,2,253,12,5,10,2,4, + 1,2,249,255,128,114,150,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67, + 0,0,0,115,120,1,0,0,124,1,92,8,125,2,125,3, + 125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1, + 107,0,114,18,116,0,100,2,131,1,130,1,116,1,160,2, + 124,0,161,1,143,127,125,10,122,7,124,10,160,3,124,6, + 161,1,1,0,87,0,110,15,4,0,116,4,121,187,1,0, 1,0,1,0,116,0,100,3,124,0,155,2,157,2,124,0, - 100,4,141,2,130,1,124,10,160,5,124,4,161,1,125,15, - 116,6,124,15,131,1,124,4,107,3,114,143,116,4,100,12, - 131,1,130,1,87,0,100,0,4,0,4,0,131,3,1,0, - 110,8,49,0,115,153,119,1,1,0,1,0,1,0,89,0, - 1,0,124,3,100,1,107,2,114,164,124,15,83,0,122,5, - 116,9,131,0,125,16,87,0,110,10,4,0,116,10,121,185, - 1,0,1,0,1,0,116,0,100,13,131,1,130,1,124,16, - 124,15,100,14,131,2,83,0,119,0,119,0,119,0,41,15, - 78,114,0,0,0,0,122,18,110,101,103,97,116,105,118,101, - 32,100,97,116,97,32,115,105,122,101,114,97,0,0,0,114, - 12,0,0,0,114,109,0,0,0,114,103,0,0,0,114,98, - 0,0,0,115,4,0,0,0,80,75,3,4,122,23,98,97, - 100,32,108,111,99,97,108,32,102,105,108,101,32,104,101,97, - 100,101,114,58,32,233,26,0,0,0,114,108,0,0,0,122, - 26,122,105,112,105,109,112,111,114,116,58,32,99,97,110,39, - 116,32,114,101,97,100,32,100,97,116,97,114,144,0,0,0, - 105,241,255,255,255,41,11,114,3,0,0,0,114,115,0,0, - 0,114,116,0,0,0,114,117,0,0,0,114,22,0,0,0, - 114,119,0,0,0,114,55,0,0,0,114,124,0,0,0,114, - 1,0,0,0,114,149,0,0,0,114,148,0,0,0,41,17, - 114,29,0,0,0,114,58,0,0,0,90,8,100,97,116,97, - 112,97,116,104,114,135,0,0,0,114,139,0,0,0,114,130, - 0,0,0,114,142,0,0,0,114,136,0,0,0,114,137,0, - 0,0,114,138,0,0,0,114,128,0,0,0,114,129,0,0, - 0,114,140,0,0,0,114,141,0,0,0,114,132,0,0,0, - 90,8,114,97,119,95,100,97,116,97,114,146,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,56, - 0,0,0,63,2,0,0,115,74,0,0,0,20,1,8,1, - 8,1,12,2,2,2,14,1,12,1,18,1,10,1,12,1, - 8,1,16,2,18,2,16,2,16,1,12,1,8,1,2,1, - 14,1,12,1,18,1,10,1,12,1,8,1,14,255,16,128, - 8,3,4,2,2,3,10,1,12,1,8,1,10,1,2,254, - 2,243,2,240,255,128,114,56,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,16,0,0,0,116,0,124,0,124,1,24, - 0,131,1,100,1,107,1,83,0,41,2,78,114,5,0,0, - 0,41,1,218,3,97,98,115,41,2,90,2,116,49,90,2, - 116,50,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,9,95,101,113,95,109,116,105,109,101,109,2,0,0, - 115,4,0,0,0,16,2,255,128,114,152,0,0,0,99,5, - 0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,6, - 0,0,0,67,0,0,0,115,254,0,0,0,124,3,124,2, - 100,1,156,2,125,5,116,0,160,1,124,4,124,3,124,5, - 161,3,125,6,124,6,100,2,64,0,100,3,107,3,125,7, - 124,7,114,63,124,6,100,4,64,0,100,3,107,3,125,8, - 116,2,106,3,100,5,107,3,114,62,124,8,115,38,116,2, - 106,3,100,6,107,2,114,62,116,4,124,0,124,2,131,2, - 125,9,124,9,100,0,117,1,114,62,116,2,160,5,116,0, - 106,6,124,9,161,2,125,10,116,0,160,7,124,4,124,10, - 124,3,124,5,161,4,1,0,110,40,116,8,124,0,124,2, - 131,2,92,2,125,11,125,12,124,11,114,103,116,9,116,10, - 124,4,100,7,100,8,133,2,25,0,131,1,124,11,131,2, - 114,93,116,10,124,4,100,8,100,9,133,2,25,0,131,1, - 124,12,107,3,114,103,116,11,160,12,100,10,124,3,155,2, - 157,2,161,1,1,0,100,0,83,0,116,13,160,14,124,4, - 100,9,100,0,133,2,25,0,161,1,125,13,116,15,124,13, - 116,16,131,2,115,125,116,17,100,11,124,1,155,2,100,12, - 157,3,131,1,130,1,124,13,83,0,41,13,78,41,2,114, - 44,0,0,0,114,13,0,0,0,114,5,0,0,0,114,0, - 0,0,0,114,91,0,0,0,90,5,110,101,118,101,114,90, - 6,97,108,119,97,121,115,114,104,0,0,0,114,99,0,0, - 0,114,100,0,0,0,122,22,98,121,116,101,99,111,100,101, - 32,105,115,32,115,116,97,108,101,32,102,111,114,32,122,16, - 99,111,109,112,105,108,101,100,32,109,111,100,117,108,101,32, - 122,21,32,105,115,32,110,111,116,32,97,32,99,111,100,101, - 32,111,98,106,101,99,116,41,18,114,21,0,0,0,90,13, - 95,99,108,97,115,115,105,102,121,95,112,121,99,218,4,95, - 105,109,112,90,21,99,104,101,99,107,95,104,97,115,104,95, - 98,97,115,101,100,95,112,121,99,115,218,15,95,103,101,116, - 95,112,121,99,95,115,111,117,114,99,101,218,11,115,111,117, - 114,99,101,95,104,97,115,104,90,17,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,90,18,95,118,97, - 108,105,100,97,116,101,95,104,97,115,104,95,112,121,99,218, - 29,95,103,101,116,95,109,116,105,109,101,95,97,110,100,95, - 115,105,122,101,95,111,102,95,115,111,117,114,99,101,114,152, - 0,0,0,114,2,0,0,0,114,45,0,0,0,114,80,0, - 0,0,218,7,109,97,114,115,104,97,108,90,5,108,111,97, - 100,115,114,15,0,0,0,218,10,95,99,111,100,101,95,116, - 121,112,101,218,9,84,121,112,101,69,114,114,111,114,41,14, - 114,32,0,0,0,114,57,0,0,0,114,66,0,0,0,114, - 38,0,0,0,114,131,0,0,0,90,11,101,120,99,95,100, - 101,116,97,105,108,115,114,134,0,0,0,90,10,104,97,115, - 104,95,98,97,115,101,100,90,12,99,104,101,99,107,95,115, - 111,117,114,99,101,90,12,115,111,117,114,99,101,95,98,121, - 116,101,115,114,155,0,0,0,90,12,115,111,117,114,99,101, - 95,109,116,105,109,101,90,11,115,111,117,114,99,101,95,115, - 105,122,101,114,50,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,15,95,117,110,109,97,114,115, - 104,97,108,95,99,111,100,101,117,2,0,0,115,74,0,0, - 0,2,2,2,1,6,254,14,5,12,2,4,1,12,1,10, - 1,2,1,2,255,8,1,2,255,10,2,8,1,4,1,4, - 1,2,1,4,254,4,5,8,1,4,255,2,128,8,4,6, - 255,4,3,22,3,18,1,2,255,4,2,8,1,4,255,4, - 2,18,2,10,1,16,1,4,1,255,128,114,160,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,67,0,0,0,115,28,0,0,0,124,0, - 160,0,100,1,100,2,161,2,125,0,124,0,160,0,100,3, - 100,2,161,2,125,0,124,0,83,0,41,4,78,115,2,0, - 0,0,13,10,243,1,0,0,0,10,243,1,0,0,0,13, - 41,1,114,19,0,0,0,41,1,218,6,115,111,117,114,99, - 101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 218,23,95,110,111,114,109,97,108,105,122,101,95,108,105,110, - 101,95,101,110,100,105,110,103,115,162,2,0,0,115,8,0, - 0,0,12,1,12,1,4,1,255,128,114,164,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 6,0,0,0,67,0,0,0,115,24,0,0,0,116,0,124, - 1,131,1,125,1,116,1,124,1,124,0,100,1,100,2,100, - 3,141,4,83,0,41,4,78,114,78,0,0,0,84,41,1, - 90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,2, - 114,164,0,0,0,218,7,99,111,109,112,105,108,101,41,2, - 114,57,0,0,0,114,163,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,15,95,99,111,109,112, - 105,108,101,95,115,111,117,114,99,101,169,2,0,0,115,6, - 0,0,0,8,1,16,1,255,128,114,166,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,11, - 0,0,0,67,0,0,0,115,68,0,0,0,116,0,160,1, - 124,0,100,1,63,0,100,2,23,0,124,0,100,3,63,0, - 100,4,64,0,124,0,100,5,64,0,124,1,100,6,63,0, - 124,1,100,3,63,0,100,7,64,0,124,1,100,5,64,0, - 100,8,20,0,100,9,100,9,100,9,102,9,161,1,83,0, - 41,10,78,233,9,0,0,0,105,188,7,0,0,233,5,0, - 0,0,233,15,0,0,0,233,31,0,0,0,233,11,0,0, - 0,233,63,0,0,0,114,91,0,0,0,114,14,0,0,0, - 41,2,114,136,0,0,0,90,6,109,107,116,105,109,101,41, - 2,218,1,100,114,143,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,218,14,95,112,97,114,115,101, - 95,100,111,115,116,105,109,101,175,2,0,0,115,20,0,0, - 0,4,1,10,1,10,1,6,1,6,1,10,1,10,1,6, - 1,6,249,255,128,114,174,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,10,0,0,0,67, - 0,0,0,115,110,0,0,0,122,41,124,1,100,1,100,0, - 133,2,25,0,100,2,118,0,115,11,74,0,130,1,124,1, - 100,0,100,1,133,2,25,0,125,1,124,0,106,0,124,1, - 25,0,125,2,124,2,100,3,25,0,125,3,124,2,100,4, - 25,0,125,4,124,2,100,5,25,0,125,5,116,1,124,4, - 124,3,131,2,124,5,102,2,87,0,83,0,4,0,116,2, - 116,3,116,4,102,3,121,54,1,0,1,0,1,0,89,0, - 100,6,83,0,119,0,41,7,78,114,14,0,0,0,169,2, - 218,1,99,218,1,111,114,168,0,0,0,233,6,0,0,0, - 233,3,0,0,0,41,2,114,0,0,0,0,114,0,0,0, - 0,41,5,114,28,0,0,0,114,174,0,0,0,114,26,0, - 0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,159, - 0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,114, - 58,0,0,0,114,136,0,0,0,114,137,0,0,0,90,17, - 117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,122, - 101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 114,156,0,0,0,188,2,0,0,115,24,0,0,0,2,1, - 20,2,12,1,10,1,8,3,8,1,8,1,16,1,18,1, - 6,1,2,255,255,128,114,156,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, - 67,0,0,0,115,80,0,0,0,124,1,100,1,100,0,133, - 2,25,0,100,2,118,0,115,10,74,0,130,1,124,1,100, - 0,100,1,133,2,25,0,125,1,122,7,124,0,106,0,124, - 1,25,0,125,2,87,0,110,9,4,0,116,1,121,39,1, - 0,1,0,1,0,89,0,100,0,83,0,116,2,124,0,106, - 3,124,2,131,2,83,0,119,0,41,3,78,114,14,0,0, - 0,114,175,0,0,0,41,4,114,28,0,0,0,114,26,0, - 0,0,114,56,0,0,0,114,29,0,0,0,41,3,114,32, - 0,0,0,114,13,0,0,0,114,58,0,0,0,114,9,0, - 0,0,114,9,0,0,0,114,10,0,0,0,114,154,0,0, - 0,207,2,0,0,115,18,0,0,0,20,2,12,1,2,2, - 14,1,12,1,6,1,12,2,2,253,255,128,114,154,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,14,0, - 0,0,11,0,0,0,67,0,0,0,115,14,1,0,0,116, - 0,124,0,124,1,131,2,125,2,100,0,125,3,116,1,68, - 0,93,100,92,3,125,4,125,5,125,6,124,2,124,4,23, - 0,125,7,116,2,106,3,100,1,124,0,106,4,116,5,124, - 7,100,2,100,3,141,5,1,0,122,7,124,0,106,6,124, - 7,25,0,125,8,87,0,110,8,4,0,116,7,121,134,1, - 0,1,0,1,0,89,0,113,9,124,8,100,4,25,0,125, - 9,116,8,124,0,106,4,124,8,131,2,125,10,100,0,125, - 11,124,5,114,89,122,10,116,9,124,0,124,9,124,7,124, - 1,124,10,131,5,125,11,87,0,110,24,4,0,116,10,121, - 133,1,0,125,12,1,0,122,8,124,12,125,3,87,0,89, - 0,100,0,125,12,126,12,110,9,100,0,125,12,126,12,119, - 1,116,11,124,9,124,10,131,2,125,11,124,11,100,0,117, - 0,114,99,113,9,124,8,100,4,25,0,125,9,124,11,124, - 6,124,9,102,3,2,0,1,0,83,0,124,3,114,124,100, - 5,124,3,155,0,157,2,125,13,116,12,124,13,124,1,100, - 6,141,2,124,3,130,2,116,12,100,7,124,1,155,2,157, - 2,124,1,100,6,141,2,130,1,119,0,119,0,41,8,78, - 122,13,116,114,121,105,110,103,32,123,125,123,125,123,125,114, - 91,0,0,0,41,1,90,9,118,101,114,98,111,115,105,116, - 121,114,0,0,0,0,122,20,109,111,100,117,108,101,32,108, - 111,97,100,32,102,97,105,108,101,100,58,32,114,62,0,0, - 0,114,61,0,0,0,41,13,114,36,0,0,0,114,94,0, - 0,0,114,45,0,0,0,114,80,0,0,0,114,29,0,0, - 0,114,20,0,0,0,114,28,0,0,0,114,26,0,0,0, - 114,56,0,0,0,114,160,0,0,0,114,79,0,0,0,114, - 166,0,0,0,114,3,0,0,0,41,14,114,32,0,0,0, - 114,38,0,0,0,114,13,0,0,0,90,12,105,109,112,111, - 114,116,95,101,114,114,111,114,114,95,0,0,0,114,96,0, - 0,0,114,51,0,0,0,114,66,0,0,0,114,58,0,0, - 0,114,40,0,0,0,114,131,0,0,0,114,50,0,0,0, - 90,3,101,120,99,114,81,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,114,48,0,0,0,222,2, - 0,0,115,60,0,0,0,10,1,4,1,14,1,8,1,22, - 1,2,1,14,1,12,1,4,1,8,2,12,1,4,1,4, - 1,2,1,20,1,14,1,16,1,8,128,10,2,8,1,2, - 3,8,1,14,1,4,2,10,1,14,1,18,2,2,241,2, - 247,255,128,114,48,0,0,0,41,46,114,89,0,0,0,90, - 26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,108, - 105,98,95,101,120,116,101,114,110,97,108,114,21,0,0,0, - 114,1,0,0,0,114,2,0,0,0,90,17,95,102,114,111, - 122,101,110,95,105,109,112,111,114,116,108,105,98,114,45,0, - 0,0,114,153,0,0,0,114,115,0,0,0,114,157,0,0, - 0,114,71,0,0,0,114,136,0,0,0,114,69,0,0,0, - 90,7,95,95,97,108,108,95,95,114,20,0,0,0,90,15, - 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114, - 18,0,0,0,114,79,0,0,0,114,3,0,0,0,114,25, - 0,0,0,218,4,116,121,112,101,114,74,0,0,0,114,118, - 0,0,0,114,120,0,0,0,114,122,0,0,0,90,13,95, - 76,111,97,100,101,114,66,97,115,105,99,115,114,4,0,0, - 0,114,94,0,0,0,114,36,0,0,0,114,37,0,0,0, - 114,35,0,0,0,114,27,0,0,0,114,127,0,0,0,114, - 147,0,0,0,114,149,0,0,0,114,56,0,0,0,114,152, - 0,0,0,114,160,0,0,0,218,8,95,95,99,111,100,101, - 95,95,114,158,0,0,0,114,164,0,0,0,114,166,0,0, - 0,114,174,0,0,0,114,156,0,0,0,114,154,0,0,0, - 114,48,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,8,60,109,111,100,117, - 108,101,62,1,0,0,0,115,92,0,0,0,4,0,8,16, - 16,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,2,6,3,14,1,16,3,4,4,8,2,4,2,4,1, - 4,1,18,2,0,127,0,127,12,44,12,1,2,1,2,1, - 4,252,8,9,8,4,8,9,8,31,2,126,2,254,4,29, - 8,5,8,21,8,46,8,8,10,40,8,5,8,7,8,6, - 8,13,8,19,12,15,255,128, + 100,4,141,2,130,1,124,10,160,5,100,5,161,1,125,11, + 116,6,124,11,131,1,100,5,107,3,114,62,116,7,100,6, + 131,1,130,1,124,11,100,0,100,7,133,2,25,0,100,8, + 107,3,114,79,116,0,100,9,124,0,155,2,157,2,124,0, + 100,4,141,2,130,1,116,8,124,11,100,10,100,11,133,2, + 25,0,131,1,125,12,116,8,124,11,100,11,100,5,133,2, + 25,0,131,1,125,13,100,5,124,12,23,0,124,13,23,0, + 125,14,124,6,124,14,55,0,125,6,122,7,124,10,160,3, + 124,6,161,1,1,0,87,0,110,15,4,0,116,4,121,186, + 1,0,1,0,1,0,116,0,100,3,124,0,155,2,157,2, + 124,0,100,4,141,2,130,1,124,10,160,5,124,4,161,1, + 125,15,116,6,124,15,131,1,124,4,107,3,114,143,116,4, + 100,12,131,1,130,1,87,0,100,0,4,0,4,0,131,3, + 1,0,110,8,49,0,115,153,119,1,1,0,1,0,1,0, + 89,0,1,0,124,3,100,1,107,2,114,164,124,15,83,0, + 122,5,116,9,131,0,125,16,87,0,110,10,4,0,116,10, + 121,185,1,0,1,0,1,0,116,0,100,13,131,1,130,1, + 124,16,124,15,100,14,131,2,83,0,119,0,119,0,119,0, + 41,15,78,114,0,0,0,0,122,18,110,101,103,97,116,105, + 118,101,32,100,97,116,97,32,115,105,122,101,114,98,0,0, + 0,114,12,0,0,0,114,110,0,0,0,114,104,0,0,0, + 114,99,0,0,0,115,4,0,0,0,80,75,3,4,122,23, + 98,97,100,32,108,111,99,97,108,32,102,105,108,101,32,104, + 101,97,100,101,114,58,32,233,26,0,0,0,114,109,0,0, + 0,122,26,122,105,112,105,109,112,111,114,116,58,32,99,97, + 110,39,116,32,114,101,97,100,32,100,97,116,97,114,145,0, + 0,0,105,241,255,255,255,41,11,114,3,0,0,0,114,116, + 0,0,0,114,117,0,0,0,114,118,0,0,0,114,22,0, + 0,0,114,120,0,0,0,114,58,0,0,0,114,125,0,0, + 0,114,1,0,0,0,114,150,0,0,0,114,149,0,0,0, + 41,17,114,29,0,0,0,114,61,0,0,0,90,8,100,97, + 116,97,112,97,116,104,114,136,0,0,0,114,140,0,0,0, + 114,131,0,0,0,114,143,0,0,0,114,137,0,0,0,114, + 138,0,0,0,114,139,0,0,0,114,129,0,0,0,114,130, + 0,0,0,114,141,0,0,0,114,142,0,0,0,114,133,0, + 0,0,90,8,114,97,119,95,100,97,116,97,114,147,0,0, + 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 114,59,0,0,0,69,2,0,0,115,74,0,0,0,20,1, + 8,1,8,1,12,2,2,2,14,1,12,1,18,1,10,1, + 12,1,8,1,16,2,18,2,16,2,16,1,12,1,8,1, + 2,1,14,1,12,1,18,1,10,1,12,1,8,1,14,255, + 16,128,8,3,4,2,2,3,10,1,12,1,8,1,10,1, + 2,254,2,243,2,240,255,128,114,59,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,67,0,0,0,115,16,0,0,0,116,0,124,0,124, + 1,24,0,131,1,100,1,107,1,83,0,41,2,78,114,5, + 0,0,0,41,1,218,3,97,98,115,41,2,90,2,116,49, + 90,2,116,50,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,218,9,95,101,113,95,109,116,105,109,101,115,2, + 0,0,115,4,0,0,0,16,2,255,128,114,153,0,0,0, + 99,5,0,0,0,0,0,0,0,0,0,0,0,14,0,0, + 0,6,0,0,0,67,0,0,0,115,254,0,0,0,124,3, + 124,2,100,1,156,2,125,5,116,0,160,1,124,4,124,3, + 124,5,161,3,125,6,124,6,100,2,64,0,100,3,107,3, + 125,7,124,7,114,63,124,6,100,4,64,0,100,3,107,3, + 125,8,116,2,106,3,100,5,107,3,114,62,124,8,115,38, + 116,2,106,3,100,6,107,2,114,62,116,4,124,0,124,2, + 131,2,125,9,124,9,100,0,117,1,114,62,116,2,160,5, + 116,0,106,6,124,9,161,2,125,10,116,0,160,7,124,4, + 124,10,124,3,124,5,161,4,1,0,110,40,116,8,124,0, + 124,2,131,2,92,2,125,11,125,12,124,11,114,103,116,9, + 116,10,124,4,100,7,100,8,133,2,25,0,131,1,124,11, + 131,2,114,93,116,10,124,4,100,8,100,9,133,2,25,0, + 131,1,124,12,107,3,114,103,116,11,160,12,100,10,124,3, + 155,2,157,2,161,1,1,0,100,0,83,0,116,13,160,14, + 124,4,100,9,100,0,133,2,25,0,161,1,125,13,116,15, + 124,13,116,16,131,2,115,125,116,17,100,11,124,1,155,2, + 100,12,157,3,131,1,130,1,124,13,83,0,41,13,78,41, + 2,114,47,0,0,0,114,13,0,0,0,114,5,0,0,0, + 114,0,0,0,0,114,92,0,0,0,90,5,110,101,118,101, + 114,90,6,97,108,119,97,121,115,114,105,0,0,0,114,100, + 0,0,0,114,101,0,0,0,122,22,98,121,116,101,99,111, + 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, + 122,16,99,111,109,112,105,108,101,100,32,109,111,100,117,108, + 101,32,122,21,32,105,115,32,110,111,116,32,97,32,99,111, + 100,101,32,111,98,106,101,99,116,41,18,114,21,0,0,0, + 90,13,95,99,108,97,115,115,105,102,121,95,112,121,99,218, + 4,95,105,109,112,90,21,99,104,101,99,107,95,104,97,115, + 104,95,98,97,115,101,100,95,112,121,99,115,218,15,95,103, + 101,116,95,112,121,99,95,115,111,117,114,99,101,218,11,115, + 111,117,114,99,101,95,104,97,115,104,90,17,95,82,65,87, + 95,77,65,71,73,67,95,78,85,77,66,69,82,90,18,95, + 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121, + 99,218,29,95,103,101,116,95,109,116,105,109,101,95,97,110, + 100,95,115,105,122,101,95,111,102,95,115,111,117,114,99,101, + 114,153,0,0,0,114,2,0,0,0,114,48,0,0,0,114, + 81,0,0,0,218,7,109,97,114,115,104,97,108,90,5,108, + 111,97,100,115,114,15,0,0,0,218,10,95,99,111,100,101, + 95,116,121,112,101,218,9,84,121,112,101,69,114,114,111,114, + 41,14,114,32,0,0,0,114,60,0,0,0,114,69,0,0, + 0,114,41,0,0,0,114,132,0,0,0,90,11,101,120,99, + 95,100,101,116,97,105,108,115,114,135,0,0,0,90,10,104, + 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107, + 95,115,111,117,114,99,101,90,12,115,111,117,114,99,101,95, + 98,121,116,101,115,114,156,0,0,0,90,12,115,111,117,114, + 99,101,95,109,116,105,109,101,90,11,115,111,117,114,99,101, + 95,115,105,122,101,114,53,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,15,95,117,110,109,97, + 114,115,104,97,108,95,99,111,100,101,123,2,0,0,115,74, + 0,0,0,2,2,2,1,6,254,14,5,12,2,4,1,12, + 1,10,1,2,1,2,255,8,1,2,255,10,2,8,1,4, + 1,4,1,2,1,4,254,4,5,8,1,4,255,2,128,8, + 4,6,255,4,3,22,3,18,1,2,255,4,2,8,1,4, + 255,4,2,18,2,10,1,16,1,4,1,255,128,114,161,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,67,0,0,0,115,28,0,0,0, + 124,0,160,0,100,1,100,2,161,2,125,0,124,0,160,0, + 100,3,100,2,161,2,125,0,124,0,83,0,41,4,78,115, + 2,0,0,0,13,10,243,1,0,0,0,10,243,1,0,0, + 0,13,41,1,114,19,0,0,0,41,1,218,6,115,111,117, + 114,99,101,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,218,23,95,110,111,114,109,97,108,105,122,101,95,108, + 105,110,101,95,101,110,100,105,110,103,115,168,2,0,0,115, + 8,0,0,0,12,1,12,1,4,1,255,128,114,165,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,6,0,0,0,67,0,0,0,115,24,0,0,0,116, + 0,124,1,131,1,125,1,116,1,124,1,124,0,100,1,100, + 2,100,3,141,4,83,0,41,4,78,114,79,0,0,0,84, + 41,1,90,12,100,111,110,116,95,105,110,104,101,114,105,116, + 41,2,114,165,0,0,0,218,7,99,111,109,112,105,108,101, + 41,2,114,60,0,0,0,114,164,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,15,95,99,111, + 109,112,105,108,101,95,115,111,117,114,99,101,175,2,0,0, + 115,6,0,0,0,8,1,16,1,255,128,114,167,0,0,0, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,11,0,0,0,67,0,0,0,115,68,0,0,0,116,0, + 160,1,124,0,100,1,63,0,100,2,23,0,124,0,100,3, + 63,0,100,4,64,0,124,0,100,5,64,0,124,1,100,6, + 63,0,124,1,100,3,63,0,100,7,64,0,124,1,100,5, + 64,0,100,8,20,0,100,9,100,9,100,9,102,9,161,1, + 83,0,41,10,78,233,9,0,0,0,105,188,7,0,0,233, + 5,0,0,0,233,15,0,0,0,233,31,0,0,0,233,11, + 0,0,0,233,63,0,0,0,114,92,0,0,0,114,14,0, + 0,0,41,2,114,137,0,0,0,90,6,109,107,116,105,109, + 101,41,2,218,1,100,114,144,0,0,0,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,218,14,95,112,97,114, + 115,101,95,100,111,115,116,105,109,101,181,2,0,0,115,20, + 0,0,0,4,1,10,1,10,1,6,1,6,1,10,1,10, + 1,6,1,6,249,255,128,114,175,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,10,0,0, + 0,67,0,0,0,115,110,0,0,0,122,41,124,1,100,1, + 100,0,133,2,25,0,100,2,118,0,115,11,74,0,130,1, + 124,1,100,0,100,1,133,2,25,0,125,1,124,0,106,0, + 124,1,25,0,125,2,124,2,100,3,25,0,125,3,124,2, + 100,4,25,0,125,4,124,2,100,5,25,0,125,5,116,1, + 124,4,124,3,131,2,124,5,102,2,87,0,83,0,4,0, + 116,2,116,3,116,4,102,3,121,54,1,0,1,0,1,0, + 89,0,100,6,83,0,119,0,41,7,78,114,14,0,0,0, + 169,2,218,1,99,218,1,111,114,169,0,0,0,233,6,0, + 0,0,233,3,0,0,0,41,2,114,0,0,0,0,114,0, + 0,0,0,41,5,114,28,0,0,0,114,175,0,0,0,114, + 26,0,0,0,218,10,73,110,100,101,120,69,114,114,111,114, + 114,160,0,0,0,41,6,114,32,0,0,0,114,13,0,0, + 0,114,61,0,0,0,114,137,0,0,0,114,138,0,0,0, + 90,17,117,110,99,111,109,112,114,101,115,115,101,100,95,115, + 105,122,101,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,157,0,0,0,194,2,0,0,115,24,0,0,0, + 2,1,20,2,12,1,10,1,8,3,8,1,8,1,16,1, + 18,1,6,1,2,255,255,128,114,157,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,0, + 0,0,67,0,0,0,115,80,0,0,0,124,1,100,1,100, + 0,133,2,25,0,100,2,118,0,115,10,74,0,130,1,124, + 1,100,0,100,1,133,2,25,0,125,1,122,7,124,0,106, + 0,124,1,25,0,125,2,87,0,110,9,4,0,116,1,121, + 39,1,0,1,0,1,0,89,0,100,0,83,0,116,2,124, + 0,106,3,124,2,131,2,83,0,119,0,41,3,78,114,14, + 0,0,0,114,176,0,0,0,41,4,114,28,0,0,0,114, + 26,0,0,0,114,59,0,0,0,114,29,0,0,0,41,3, + 114,32,0,0,0,114,13,0,0,0,114,61,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,155, + 0,0,0,213,2,0,0,115,18,0,0,0,20,2,12,1, + 2,2,14,1,12,1,6,1,12,2,2,253,255,128,114,155, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 14,0,0,0,11,0,0,0,67,0,0,0,115,14,1,0, + 0,116,0,124,0,124,1,131,2,125,2,100,0,125,3,116, + 1,68,0,93,100,92,3,125,4,125,5,125,6,124,2,124, + 4,23,0,125,7,116,2,106,3,100,1,124,0,106,4,116, + 5,124,7,100,2,100,3,141,5,1,0,122,7,124,0,106, + 6,124,7,25,0,125,8,87,0,110,8,4,0,116,7,121, + 134,1,0,1,0,1,0,89,0,113,9,124,8,100,4,25, + 0,125,9,116,8,124,0,106,4,124,8,131,2,125,10,100, + 0,125,11,124,5,114,89,122,10,116,9,124,0,124,9,124, + 7,124,1,124,10,131,5,125,11,87,0,110,24,4,0,116, + 10,121,133,1,0,125,12,1,0,122,8,124,12,125,3,87, + 0,89,0,100,0,125,12,126,12,110,9,100,0,125,12,126, + 12,119,1,116,11,124,9,124,10,131,2,125,11,124,11,100, + 0,117,0,114,99,113,9,124,8,100,4,25,0,125,9,124, + 11,124,6,124,9,102,3,2,0,1,0,83,0,124,3,114, + 124,100,5,124,3,155,0,157,2,125,13,116,12,124,13,124, + 1,100,6,141,2,124,3,130,2,116,12,100,7,124,1,155, + 2,157,2,124,1,100,6,141,2,130,1,119,0,119,0,41, + 8,78,122,13,116,114,121,105,110,103,32,123,125,123,125,123, + 125,114,92,0,0,0,41,1,90,9,118,101,114,98,111,115, + 105,116,121,114,0,0,0,0,122,20,109,111,100,117,108,101, + 32,108,111,97,100,32,102,97,105,108,101,100,58,32,114,65, + 0,0,0,114,64,0,0,0,41,13,114,39,0,0,0,114, + 95,0,0,0,114,48,0,0,0,114,81,0,0,0,114,29, + 0,0,0,114,20,0,0,0,114,28,0,0,0,114,26,0, + 0,0,114,59,0,0,0,114,161,0,0,0,114,80,0,0, + 0,114,167,0,0,0,114,3,0,0,0,41,14,114,32,0, + 0,0,114,41,0,0,0,114,13,0,0,0,90,12,105,109, + 112,111,114,116,95,101,114,114,111,114,114,96,0,0,0,114, + 97,0,0,0,114,54,0,0,0,114,69,0,0,0,114,61, + 0,0,0,114,43,0,0,0,114,132,0,0,0,114,53,0, + 0,0,90,3,101,120,99,114,82,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,51,0,0,0, + 228,2,0,0,115,60,0,0,0,10,1,4,1,14,1,8, + 1,22,1,2,1,14,1,12,1,4,1,8,2,12,1,4, + 1,4,1,2,1,20,1,14,1,16,1,8,128,10,2,8, + 1,2,3,8,1,14,1,4,2,10,1,14,1,18,2,2, + 241,2,247,255,128,114,51,0,0,0,41,46,114,90,0,0, + 0,90,26,95,102,114,111,122,101,110,95,105,109,112,111,114, + 116,108,105,98,95,101,120,116,101,114,110,97,108,114,21,0, + 0,0,114,1,0,0,0,114,2,0,0,0,90,17,95,102, + 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,114, + 48,0,0,0,114,154,0,0,0,114,116,0,0,0,114,158, + 0,0,0,114,72,0,0,0,114,137,0,0,0,114,35,0, + 0,0,90,7,95,95,97,108,108,95,95,114,20,0,0,0, + 90,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, + 115,114,18,0,0,0,114,80,0,0,0,114,3,0,0,0, + 114,25,0,0,0,218,4,116,121,112,101,114,75,0,0,0, + 114,119,0,0,0,114,121,0,0,0,114,123,0,0,0,90, + 13,95,76,111,97,100,101,114,66,97,115,105,99,115,114,4, + 0,0,0,114,95,0,0,0,114,39,0,0,0,114,40,0, + 0,0,114,38,0,0,0,114,27,0,0,0,114,128,0,0, + 0,114,148,0,0,0,114,150,0,0,0,114,59,0,0,0, + 114,153,0,0,0,114,161,0,0,0,218,8,95,95,99,111, + 100,101,95,95,114,159,0,0,0,114,165,0,0,0,114,167, + 0,0,0,114,175,0,0,0,114,157,0,0,0,114,155,0, + 0,0,114,51,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111, + 100,117,108,101,62,1,0,0,0,115,92,0,0,0,4,0, + 8,16,16,1,8,1,8,1,8,1,8,1,8,1,8,1, + 8,1,8,2,6,3,14,1,16,3,4,4,8,2,4,2, + 4,1,4,1,18,2,0,127,0,127,12,50,12,1,2,1, + 2,1,4,252,8,9,8,4,8,9,8,31,2,126,2,254, + 4,29,8,5,8,21,8,46,8,8,10,40,8,5,8,7, + 8,6,8,13,8,19,12,15,255,128, }; From webhook-mailer at python.org Tue Apr 6 12:03:09 2021 From: webhook-mailer at python.org (gvanrossum) Date: Tue, 06 Apr 2021 16:03:09 -0000 Subject: [Python-checkins] Update pattern matching docs for changes to the PEP (#25185) Message-ID: https://github.com/python/cpython/commit/5143fd15b4fe5e122c79e3be4745031f17bb4d8e commit: 5143fd15b4fe5e122c79e3be4745031f17bb4d8e branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-06T09:03:00-07:00 summary: Update pattern matching docs for changes to the PEP (#25185) See: - https://github.com/python/peps/pull/1909 (__match_args__ must be a tuple) - https://github.com/python/peps/pull/1908 (allow keyword patterns for int(x) etc.) files: M Doc/reference/compound_stmts.rst M Doc/reference/datamodel.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index e13d6dd956209..aae7c7f68b6e0 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -1030,7 +1030,7 @@ subject value: For a number of built-in types (specified below), a single positional subpattern is accepted which will match the entire subject; for these types - no keyword patterns are accepted. + keyword patterns also work as for other types. If only keyword patterns are present, they are processed as follows, one by one: @@ -1057,7 +1057,7 @@ subject value: * If this raises an exception, the exception bubbles up. - * If the returned value is not a list or tuple, the conversion fails and + * If the returned value is not a tuple, the conversion fails and :exc:`TypeError` is raised. * If there are more positional patterns than ``len(cls.__match_args__)``, diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index dfe5eb6857c0f..9c819b7ae6d28 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -2565,7 +2565,7 @@ define a *__match_args__* attribute. .. data:: object.__match_args__ - This class variable can be assigned a tuple or list of strings. When this class is + This class variable can be assigned a tuple of strings. When this class is used in a class pattern with positional arguments, each positional argument will be converted into a keyword argument, using the corresponding value in *__match_args__* as the keyword. The absence of this attribute is equivalent to From webhook-mailer at python.org Tue Apr 6 13:44:58 2021 From: webhook-mailer at python.org (markshannon) Date: Tue, 06 Apr 2021 17:44:58 -0000 Subject: [Python-checkins] bump the bytecode magic number (GH-25225) Message-ID: https://github.com/python/cpython/commit/50616223d1043f0f83534ffec38709439b8a49ab commit: 50616223d1043f0f83534ffec38709439b8a49ab branch: master author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: markshannon date: 2021-04-06T18:44:50+01:00 summary: bump the bytecode magic number (GH-25225) files: M Lib/importlib/_bootstrap_external.py M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 34f554a53f262..be11cfe64c7a5 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -325,7 +325,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3435).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3436).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Python/importlib_external.h b/Python/importlib_external.h index a9a1f4dac2467..62e52395c4ad2 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -315,7 +315,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,152,0,0,0,115,38,0,0,0,16,5,6,1,22,1, 4,255,2,2,14,3,24,1,16,128,18,1,12,1,2,1, 12,1,2,3,12,254,2,1,2,1,2,254,2,253,255,128, - 114,83,0,0,0,105,107,13,0,0,114,44,0,0,0,114, + 114,83,0,0,0,105,108,13,0,0,114,44,0,0,0,114, 32,0,0,0,115,2,0,0,0,13,10,90,11,95,95,112, 121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,3, 46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,41, From webhook-mailer at python.org Tue Apr 6 18:15:45 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 06 Apr 2021 22:15:45 -0000 Subject: [Python-checkins] bpo-43755: Update docs to reflect that lambda is not allowed in `comp_if` since 3.9 (GH-25231) Message-ID: https://github.com/python/cpython/commit/0fdf11e8e901a5f47149232557a7f9726b8177c9 commit: 0fdf11e8e901a5f47149232557a7f9726b8177c9 branch: master author: Saiyang Gou committer: pablogsal date: 2021-04-06T23:15:37+01:00 summary: bpo-43755: Update docs to reflect that lambda is not allowed in `comp_if` since 3.9 (GH-25231) files: A Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst M Doc/reference/expressions.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 17705b117c372..4b4c20b8d5e28 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -185,7 +185,7 @@ Common syntax elements for comprehensions are: comprehension: `assignment_expression` `comp_for` comp_for: ["async"] "for" `target_list` "in" `or_test` [`comp_iter`] comp_iter: `comp_for` | `comp_if` - comp_if: "if" `expression_nocond` [`comp_iter`] + comp_if: "if" `or_test` [`comp_iter`] The comprehension consists of a single expression followed by at least one :keyword:`!for` clause and zero or more :keyword:`!for` or :keyword:`!if` clauses. @@ -1707,7 +1707,6 @@ Conditional expressions .. productionlist:: python-grammar conditional_expression: `or_test` ["if" `or_test` "else" `expression`] expression: `conditional_expression` | `lambda_expr` - expression_nocond: `or_test` | `lambda_expr_nocond` Conditional expressions (sometimes called a "ternary operator") have the lowest priority of all Python operations. @@ -1733,7 +1732,6 @@ Lambdas .. productionlist:: python-grammar lambda_expr: "lambda" [`parameter_list`] ":" `expression` - lambda_expr_nocond: "lambda" [`parameter_list`] ":" `expression_nocond` Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression ``lambda parameters: expression`` yields a function diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 3086930569dc9..24c72ee0ea8a7 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -267,6 +267,10 @@ Other Language Changes :func:`~operator.countOf` of the :mod:`operator` module. (Contributed by Serhiy Storchaka in :issue:`40824`.) +* Unparenthesized lambda expressions can no longer be the expression part in an + ``if`` clause in comprehensions and generator expressions. See :issue:`41848` + and :issue:`43755` for details. + New Modules =========== diff --git a/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst b/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst new file mode 100644 index 0000000000000..53cba0b47d6d3 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst @@ -0,0 +1,3 @@ +Update documentation to reflect that unparenthesized lambda expressions can +no longer be the expression part in an ``if`` clause in comprehensions and +generator expressions since Python 3.9. From webhook-mailer at python.org Tue Apr 6 18:54:53 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 06 Apr 2021 22:54:53 -0000 Subject: [Python-checkins] bpo-43567: Improved generated code refresh on Windows (GH-25120) Message-ID: https://github.com/python/cpython/commit/748283819043c60b1cb272c2cc9ab5b457afb03a commit: 748283819043c60b1cb272c2cc9ab5b457afb03a branch: master author: Steve Dower committer: zooba date: 2021-04-06T23:54:43+01:00 summary: bpo-43567: Improved generated code refresh on Windows (GH-25120) Generated files are now refreshed automatically on regular build, or may be forcibly regenerated by calling `build.bat --regen`. files: A Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst A PCbuild/regen.targets D PCbuild/regen.vcxproj M PCbuild/_freeze_importlib.vcxproj M PCbuild/build.bat M PCbuild/pythoncore.vcxproj diff --git a/Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst b/Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst new file mode 100644 index 0000000000000..062662f6bceaf --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst @@ -0,0 +1 @@ +Improved generated code refresh (AST/tokens/opcodes/keywords) on Windows. diff --git a/PCbuild/_freeze_importlib.vcxproj b/PCbuild/_freeze_importlib.vcxproj index a0fe49c464d5c..52d8f1a64bb6b 100644 --- a/PCbuild/_freeze_importlib.vcxproj +++ b/PCbuild/_freeze_importlib.vcxproj @@ -140,10 +140,12 @@ Condition="!Exists(%(None.OutFile)) or (Exists(%(None.IntFile)) and '$([System.IO.File]::ReadAllText(%(None.OutFile)).Replace(` `, ` `))' != '$([System.IO.File]::ReadAllText(%(None.IntFile)).Replace(` `, ` `))')"> - - + - + + git diff --git a/PCbuild/regen.targets b/PCbuild/regen.targets new file mode 100644 index 0000000000000..4d386cfa5f387 --- /dev/null +++ b/PCbuild/regen.targets @@ -0,0 +1,84 @@ + + + + + $(PYTHON) + + + + + <_PegenSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" /> + <_PegenOutputs Include="$(PySourcePath)Parser\parser.c" /> + <_ASTSources Include="$(PySourcePath)Parser\Python.asdl" /> + <_ASTOutputs Include="$(PySourcePath)Include\internal\pycore_ast.h"> + -H + + <_ASTOutputs Include="$(PySourcePath)Include\internal\pycore_ast_state.h"> + -I + + <_ASTOutputs Include="$(PySourcePath)Python\Python-ast.c"> + -C + + <_OpcodeSources Include="$(PySourcePath)Tools\scripts\generate_opcode_h.py;$(PySourcePath)Lib\opcode.py" /> + <_OpcodeOutputs Include="$(PySourcePath)Include\opcode.h;$(PySourcePath)Python\opcode_targets.h" /> + <_TokenSources Include="$(PySourcePath)Grammar\Tokens" /> + <_TokenOutputs Include="$(PySourcePath)Doc\library\token-list.inc"> + rst + + <_TokenOutputs Include="$(PySourcePath)Include\token.h"> + h + + <_TokenOutputs Include="$(PySourcePath)Parser\token.c"> + c + + <_TokenOutputs Include="$(PySourcePath)Lib\token.py"> + py + + <_KeywordSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" /> + <_KeywordOutputs Include="$(PySourcePath)Lib\keyword.py" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild/regen.vcxproj b/PCbuild/regen.vcxproj deleted file mode 100644 index ef355a21820a4..0000000000000 --- a/PCbuild/regen.vcxproj +++ /dev/null @@ -1,215 +0,0 @@ - - - - - Debug - ARM - - - Debug - Win32 - - - Debug - x64 - - - PGInstrument - ARM - - - PGInstrument - Win32 - - - PGInstrument - x64 - - - PGUpdate - ARM - - - PGUpdate - Win32 - - - PGUpdate - x64 - - - Release - ARM - - - Release - Win32 - - - Release - x64 - - - - {21CF2108-2CC9-4005-A6ED-B7965ADE3854} - Win32Proj - regen - false - 10.0 - - - - - Utility - Unicode - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - v142 - - - - - - - - - - - - _CONSOLE;%(PreprocessorDefinitions) - - - Console - - - - - - - - {cf7ac3d1-e2df-41d2-bea6-1e2556cdea26} - true - true - false - true - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From webhook-mailer at python.org Tue Apr 6 19:01:38 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 06 Apr 2021 23:01:38 -0000 Subject: [Python-checkins] bpo-39924: handle missing os functions more consistently in pathlib (GH-19220) Message-ID: https://github.com/python/cpython/commit/b57e045320d1d2a70eab236b7d31a3ebb75037c3 commit: b57e045320d1d2a70eab236b7d31a3ebb75037c3 branch: master author: Barney Gale committer: zooba date: 2021-04-07T00:01:22+01:00 summary: bpo-39924: handle missing os functions more consistently in pathlib (GH-19220) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 5c9284b331a32..64f5f181ed995 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -13,16 +13,10 @@ from urllib.parse import quote_from_bytes as urlquote_from_bytes -supports_symlinks = True if os.name == 'nt': - import nt - if sys.getwindowsversion()[:2] >= (6, 0): - from nt import _getfinalpathname - else: - supports_symlinks = False - _getfinalpathname = None + from nt import _getfinalpathname else: - nt = None + _getfinalpathname = None __all__ = [ @@ -412,18 +406,17 @@ class _NormalAccessor(_Accessor): if hasattr(os, "lchmod"): lchmod = os.lchmod else: - def lchmod(self, pathobj, mode): - raise NotImplementedError("lchmod() not available on this system") + def lchmod(self, path, mode): + raise NotImplementedError("os.lchmod() not available on this system") mkdir = os.mkdir unlink = os.unlink if hasattr(os, "link"): - link_to = os.link + link = os.link else: - @staticmethod - def link_to(self, target): + def link(self, src, dst): raise NotImplementedError("os.link() not available on this system") rmdir = os.rmdir @@ -432,23 +425,19 @@ def link_to(self, target): replace = os.replace - if nt: - if supports_symlinks: - symlink = os.symlink - else: - def symlink(a, b, target_is_directory): - raise NotImplementedError("symlink() not available on this system") + if hasattr(os, "symlink"): + symlink = os.symlink else: - # Under POSIX, os.symlink() takes two args - @staticmethod - def symlink(a, b, target_is_directory): - return os.symlink(a, b) + def symlink(self, src, dst, target_is_directory=False): + raise NotImplementedError("os.symlink() not available on this system") utime = os.utime - # Helper for resolve() - def readlink(self, path): - return os.readlink(path) + if hasattr(os, "readlink"): + readlink = os.readlink + else: + def readlink(self, path): + raise NotImplementedError("os.readlink() not available on this system") def owner(self, path): try: @@ -1369,7 +1358,7 @@ def link_to(self, target): """ Create a hard link pointing to a path named target. """ - self._accessor.link_to(self, target) + self._accessor.link(self, target) def rename(self, target): """ From webhook-mailer at python.org Tue Apr 6 20:02:12 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 00:02:12 -0000 Subject: [Python-checkins] bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) Message-ID: https://github.com/python/cpython/commit/04732ca993fa077a8b9640cc77fb2f152339585a commit: 04732ca993fa077a8b9640cc77fb2f152339585a branch: master author: Steve Dower committer: zooba date: 2021-04-07T01:02:07+01:00 summary: bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) files: A Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_import/__init__.py M Lib/test/test_importlib/test_spec.py M Lib/test/test_importlib/test_windows.py M Lib/test/test_site.py M Modules/clinic/posixmodule.c.h M Modules/posixmodule.c M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index be11cfe64c7a5..0b6cc8a8e3214 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -45,6 +45,7 @@ # Assumption made in _path_join() assert all(len(sep) == 1 for sep in path_separators) path_sep = path_separators[0] +path_sep_tuple = tuple(path_separators) path_separators = ''.join(path_separators) _pathseps_with_colon = {f':{s}' for s in path_separators} @@ -91,22 +92,49 @@ def _unpack_uint16(data): return int.from_bytes(data, 'little') -def _path_join(*path_parts): - """Replacement for os.path.join().""" - return path_sep.join([part.rstrip(path_separators) - for part in path_parts if part]) +if _MS_WINDOWS: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + if not path_parts: + return "" + if len(path_parts) == 1: + return path_parts[0] + root = "" + path = [] + for new_root, tail in map(_os._path_splitroot, path_parts): + if new_root.startswith(path_sep_tuple) or new_root.endswith(path_sep_tuple): + root = new_root.rstrip(path_separators) or root + path = [path_sep + tail] + elif new_root.endswith(':'): + if root.casefold() != new_root.casefold(): + # Drive relative paths have to be resolved by the OS, so we reset the + # tail but do not add a path_sep prefix. + root = new_root + path = [tail] + else: + path.append(tail) + else: + root = new_root or root + path.append(tail) + path = [p.rstrip(path_separators) for p in path if p] + if len(path) == 1 and not path[0]: + # Avoid losing the root's trailing separator when joining with nothing + return root + path_sep + return root + path_sep.join(path) + +else: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + return path_sep.join([part.rstrip(path_separators) + for part in path_parts if part]) def _path_split(path): """Replacement for os.path.split().""" - if len(path_separators) == 1: - front, _, tail = path.rpartition(path_sep) - return front, tail - for x in reversed(path): - if x in path_separators: - front, tail = path.rsplit(x, maxsplit=1) - return front, tail - return '', path + i = max(path.rfind(p) for p in path_separators) + if i < 0: + return '', path + return path[:i], path[i + 1:] def _path_stat(path): @@ -140,13 +168,18 @@ def _path_isdir(path): return _path_is_mode_type(path, 0o040000) -def _path_isabs(path): - """Replacement for os.path.isabs. +if _MS_WINDOWS: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + if not path: + return False + root = _os._path_splitroot(path)[0].replace('/', '\\') + return len(root) > 1 and (root.startswith('\\\\') or root.endswith('\\')) - Considers a Windows drive-relative path (no drive, but starts with slash) to - still be "absolute". - """ - return path.startswith(path_separators) or path[1:3] in _pathseps_with_colon +else: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + return path.startswith(path_separators) def _write_atomic(path, data, mode=0o666): @@ -707,6 +740,11 @@ def spec_from_file_location(name, location=None, *, loader=None, pass else: location = _os.fspath(location) + if not _path_isabs(location): + try: + location = _path_join(_os.getcwd(), location) + except OSError: + pass # If the location is on the filesystem, but doesn't actually exist, # we could return None here, indicating that the location is not @@ -1451,6 +1489,8 @@ def __init__(self, path, *loader_details): self._loaders = loaders # Base (directory) path self.path = path or '.' + if not _path_isabs(self.path): + self.path = _path_join(_os.getcwd(), self.path) self._path_mtime = -1 self._path_cache = set() self._relaxed_path_cache = set() @@ -1516,7 +1556,10 @@ def find_spec(self, fullname, target=None): is_namespace = _path_isdir(base_path) # Check for a file w/ a proper suffix exists. for suffix, loader_class in self._loaders: - full_path = _path_join(self.path, tail_module + suffix) + try: + full_path = _path_join(self.path, tail_module + suffix) + except ValueError: + return None _bootstrap._verbose_message('trying {}', full_path, verbosity=2) if cache_module + suffix in cache: if _path_isfile(full_path): diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index dd832a1f6a763..8fe3e1d4bf38d 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -906,7 +906,7 @@ def test_missing_source_legacy(self): m = __import__(TESTFN) try: self.assertEqual(m.__file__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) finally: os.remove(pyc_file) @@ -914,7 +914,7 @@ def test___cached__(self): # Modules now also have an __cached__ that points to the pyc file. m = __import__(TESTFN) pyc_file = importlib.util.cache_from_source(TESTFN + '.py') - self.assertEqual(m.__cached__, os.path.join(os.curdir, pyc_file)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, pyc_file)) @skip_if_dont_write_bytecode def test___cached___legacy_pyc(self): @@ -930,7 +930,7 @@ def test___cached___legacy_pyc(self): importlib.invalidate_caches() m = __import__(TESTFN) self.assertEqual(m.__cached__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) @skip_if_dont_write_bytecode def test_package___cached__(self): @@ -950,10 +950,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_package___cached___from_pyc(self): # Like test___cached__ but ensuring __cached__ when imported from a @@ -977,10 +977,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_recompute_pyc_same_second(self): # Even when the source file doesn't change timestamp, a change in diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index b57eb6c0ff397..dcb0527e33cfe 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -506,7 +506,7 @@ class FactoryTests: def setUp(self): self.name = 'spam' - self.path = 'spam.py' + self.path = os.path.abspath('spam.py') self.cached = self.util.cache_from_source(self.path) self.loader = TestLoader() self.fileloader = TestLoader(self.path) @@ -645,7 +645,7 @@ def test_spec_from_loader_is_package_true_with_fileloader(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -744,7 +744,7 @@ def test_spec_from_file_location_smsl_empty(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -769,7 +769,7 @@ def test_spec_from_file_location_smsl_default(self): self.assertEqual(spec.loader, self.pkgloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -817,6 +817,17 @@ def is_package(self, name): self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) + def test_spec_from_file_location_relative_path(self): + spec = self.util.spec_from_file_location(self.name, + os.path.basename(self.path), loader=self.fileloader) + + self.assertEqual(spec.name, self.name) + self.assertEqual(spec.loader, self.fileloader) + self.assertEqual(spec.origin, self.path) + self.assertIs(spec.loader_state, None) + self.assertIs(spec.submodule_search_locations, None) + self.assertEqual(spec.cached, self.cached) + self.assertTrue(spec.has_location) (Frozen_FactoryTests, Source_FactoryTests diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index 64ffe100330ef..802fb34d8199b 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -126,3 +126,48 @@ def test_tagged_suffix(self): (Frozen_WindowsExtensionSuffixTests, Source_WindowsExtensionSuffixTests ) = test_util.test_both(WindowsExtensionSuffixTests, machinery=machinery) + + + at unittest.skipUnless(sys.platform.startswith('win'), 'requires Windows') +class WindowsBootstrapPathTests(unittest.TestCase): + def check_join(self, expected, *inputs): + from importlib._bootstrap_external import _path_join + actual = _path_join(*inputs) + if expected.casefold() == actual.casefold(): + return + self.assertEqual(expected, actual) + + def test_path_join(self): + self.check_join(r"C:\A\B", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "D:\\", "D", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "C:\\", "A", "C:B") + self.check_join(r"C:\A\B", "C:\\", "A\\B") + self.check_join(r"C:\A\B", r"C:\A\B") + + self.check_join("D:A", r"D:", "A") + self.check_join("D:A", r"C:\B\C", "D:", "A") + self.check_join("D:A", r"C:\B\C", r"D:A") + + self.check_join(r"A\B\C", "A", "B", "C") + self.check_join(r"A\B\C", "A", r"B\C") + self.check_join(r"A\B/C", "A", "B/C") + self.check_join(r"A\B\C", "A/", "B\\", "C") + + # Dots are not normalised by this function + self.check_join(r"A\../C", "A", "../C") + self.check_join(r"A.\.\B", "A.", ".", "B") + + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "D", r"\A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server2\Share2", "D", + r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server", r"\Share", "A", "B", "C") + self.check_join(r"\\Server\Share", r"\\Server\Share") + self.check_join(r"\\Server\Share\\", r"\\Server\Share\\") + + # Handle edge cases with empty segments + self.check_join("C:\\A", "C:/A", "") + self.check_join("C:\\", "C:/", "") + self.check_join("C:", "C:", "") + self.check_join("//Server/Share\\", "//Server/Share/", "") + self.check_join("//Server/Share\\", "//Server/Share", "") diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 6060288248efb..9b4ab42a727b4 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -173,6 +173,7 @@ def test_addpackage_import_bad_pth_file(self): pth_dir, pth_fn = self.make_pth("abc\x00def\n") with captured_stderr() as err_out: self.assertFalse(site.addpackage(pth_dir, pth_fn, set())) + self.maxDiff = None self.assertEqual(err_out.getvalue(), "") for path in sys.path: if isinstance(path, str): @@ -408,55 +409,6 @@ def tearDown(self): """Restore sys.path""" sys.path[:] = self.sys_path - def test_abs_paths(self): - # Make sure all imported modules have their __file__ and __cached__ - # attributes as absolute paths. Arranging to put the Lib directory on - # PYTHONPATH would cause the os module to have a relative path for - # __file__ if abs_paths() does not get run. sys and builtins (the - # only other modules imported before site.py runs) do not have - # __file__ or __cached__ because they are built-in. - try: - parent = os.path.relpath(os.path.dirname(os.__file__)) - cwd = os.getcwd() - except ValueError: - # Failure to get relpath probably means we need to chdir - # to the same drive. - cwd, parent = os.path.split(os.path.dirname(os.__file__)) - with change_cwd(cwd): - env = os.environ.copy() - env['PYTHONPATH'] = parent - code = ('import os, sys', - # use ASCII to avoid locale issues with non-ASCII directories - 'os_file = os.__file__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_file + b"\n")', - 'os_cached = os.__cached__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_cached + b"\n")') - command = '\n'.join(code) - # First, prove that with -S (no 'import site'), the paths are - # relative. - proc = subprocess.Popen([sys.executable, '-S', '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertFalse(os.path.isabs(os__file__)) - self.assertFalse(os.path.isabs(os__cached__)) - # Now, with 'import site', it works. - proc = subprocess.Popen([sys.executable, '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertTrue(os.path.isabs(os__file__), - "expected absolute path, got {}" - .format(os__file__.decode('ascii'))) - self.assertTrue(os.path.isabs(os__cached__), - "expected absolute path, got {}" - .format(os__cached__.decode('ascii'))) - def test_abs_paths_cached_None(self): """Test for __cached__ is None. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst new file mode 100644 index 0000000000000..dd4c18661ec0b --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst @@ -0,0 +1,2 @@ +Importlib now resolves relative paths when creating module spec objects from +file locations. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 4a72ea0dd56f4..36bb7c3ee2e30 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -1276,6 +1276,47 @@ os__getvolumepathname(PyObject *module, PyObject *const *args, Py_ssize_t nargs, #endif /* defined(MS_WINDOWS) */ +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__path_splitroot__doc__, +"_path_splitroot($module, /, path)\n" +"--\n" +"\n" +"Removes everything after the root on Win32."); + +#define OS__PATH_SPLITROOT_METHODDEF \ + {"_path_splitroot", (PyCFunction)(void(*)(void))os__path_splitroot, METH_FASTCALL|METH_KEYWORDS, os__path_splitroot__doc__}, + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path); + +static PyObject * +os__path_splitroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "_path_splitroot", 0}; + PyObject *argsbuf[1]; + path_t path = PATH_T_INITIALIZE("_path_splitroot", "path", 0, 0); + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!path_converter(args[0], &path)) { + goto exit; + } + return_value = os__path_splitroot_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + PyDoc_STRVAR(os_mkdir__doc__, "mkdir($module, /, path, mode=511, *, dir_fd=None)\n" "--\n" @@ -8664,6 +8705,10 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #define OS__GETVOLUMEPATHNAME_METHODDEF #endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ +#ifndef OS__PATH_SPLITROOT_METHODDEF + #define OS__PATH_SPLITROOT_METHODDEF +#endif /* !defined(OS__PATH_SPLITROOT_METHODDEF) */ + #ifndef OS_NICE_METHODDEF #define OS_NICE_METHODDEF #endif /* !defined(OS_NICE_METHODDEF) */ @@ -9163,4 +9208,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=f3ec08afcd6cd8f8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ede310b1d316d2b2 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index b30ae80290535..65e8d5e7bd984 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -19,6 +19,7 @@ FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */ # include +# include #endif #ifdef __VXWORKS__ @@ -4389,6 +4390,53 @@ os__getvolumepathname_impl(PyObject *module, path_t *path) return result; } + +/*[clinic input] +os._path_splitroot + + path: path_t + +Removes everything after the root on Win32. +[clinic start generated code]*/ + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=ab7f1a88b654581c input=dc93b1d3984cffb6]*/ +{ + wchar_t *buffer; + wchar_t *end; + PyObject *result = NULL; + HRESULT ret; + + buffer = (wchar_t*)PyMem_Malloc(sizeof(wchar_t) * (wcslen(path->wide) + 1)); + if (!buffer) { + return NULL; + } + wcscpy(buffer, path->wide); + for (wchar_t *p = wcschr(buffer, L'/'); p; p = wcschr(p, L'/')) { + *p = L'\\'; + } + + Py_BEGIN_ALLOW_THREADS + ret = PathCchSkipRoot(buffer, &end); + Py_END_ALLOW_THREADS + if (FAILED(ret)) { + result = Py_BuildValue("sO", "", path->object); + } else if (end != buffer) { + size_t rootLen = (size_t)(end - buffer); + result = Py_BuildValue("NN", + PyUnicode_FromWideChar(path->wide, rootLen), + PyUnicode_FromWideChar(path->wide + rootLen, -1) + ); + } else { + result = Py_BuildValue("Os", path->object, ""); + } + PyMem_Free(buffer); + + return result; +} + + #endif /* MS_WINDOWS */ @@ -14749,6 +14797,7 @@ static PyMethodDef posix_methods[] = { OS__GETDISKUSAGE_METHODDEF OS__GETFINALPATHNAME_METHODDEF OS__GETVOLUMEPATHNAME_METHODDEF + OS__PATH_SPLITROOT_METHODDEF OS_GETLOADAVG_METHODDEF OS_URANDOM_METHODDEF OS_SETRESUID_METHODDEF diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 62e52395c4ad2..f484b2d209fa3 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,7 +1,7 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,64,0,0,0,115,214,2,0,0,100,0, + 0,5,0,0,0,64,0,0,0,115,250,2,0,0,100,0, 90,0,100,1,97,1,100,2,100,1,108,2,90,2,100,2, 100,1,108,3,90,3,100,2,100,1,108,4,90,4,100,2, 100,1,108,5,90,5,100,2,100,1,108,6,90,6,101,4, @@ -10,312 +10,356 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,1,108,12,90,10,101,8,114,51,100,4,100,5,103,2, 90,13,110,3,100,5,103,1,90,13,101,14,100,6,100,7, 132,0,101,13,68,0,131,1,131,1,115,65,74,0,130,1, - 101,13,100,2,25,0,90,15,100,8,160,16,101,13,161,1, - 90,13,100,9,100,10,132,0,101,13,68,0,131,1,90,17, - 100,11,90,18,100,12,90,19,101,19,101,18,23,0,90,20, - 100,13,100,14,132,0,90,21,101,21,131,0,90,22,100,15, - 100,16,132,0,90,23,100,17,100,18,132,0,90,24,100,19, - 100,20,132,0,90,25,100,21,100,22,132,0,90,26,100,23, - 100,24,132,0,90,27,100,25,100,26,132,0,90,28,100,27, - 100,28,132,0,90,29,100,29,100,30,132,0,90,30,100,31, - 100,32,132,0,90,31,100,33,100,34,132,0,90,32,100,110, - 100,36,100,37,132,1,90,33,101,34,101,33,106,35,131,1, - 90,36,100,38,160,37,100,39,100,40,161,2,100,41,23,0, - 90,38,101,39,160,40,101,38,100,40,161,2,90,41,100,42, - 90,42,100,43,90,43,100,44,103,1,90,44,101,8,114,174, - 101,44,160,45,100,45,161,1,1,0,101,2,160,46,161,0, - 90,47,100,46,103,1,90,48,101,48,4,0,90,49,90,50, - 100,111,100,1,100,47,156,1,100,48,100,49,132,3,90,51, - 100,50,100,51,132,0,90,52,100,52,100,53,132,0,90,53, - 100,54,100,55,132,0,90,54,100,56,100,57,132,0,90,55, - 100,58,100,59,132,0,90,56,100,60,100,61,132,0,90,57, - 100,62,100,63,132,0,90,58,100,64,100,65,132,0,90,59, - 100,66,100,67,132,0,90,60,100,112,100,68,100,69,132,1, - 90,61,100,113,100,70,100,71,132,1,90,62,100,114,100,73, - 100,74,132,1,90,63,100,75,100,76,132,0,90,64,101,65, - 131,0,90,66,100,115,100,1,101,66,100,77,156,2,100,78, - 100,79,132,3,90,67,71,0,100,80,100,81,132,0,100,81, - 131,2,90,68,71,0,100,82,100,83,132,0,100,83,131,2, - 90,69,71,0,100,84,100,85,132,0,100,85,101,69,131,3, - 90,70,71,0,100,86,100,87,132,0,100,87,131,2,90,71, - 71,0,100,88,100,89,132,0,100,89,101,71,101,70,131,4, - 90,72,71,0,100,90,100,91,132,0,100,91,101,71,101,69, - 131,4,90,73,71,0,100,92,100,93,132,0,100,93,101,71, - 101,69,131,4,90,74,71,0,100,94,100,95,132,0,100,95, - 131,2,90,75,71,0,100,96,100,97,132,0,100,97,131,2, - 90,76,71,0,100,98,100,99,132,0,100,99,131,2,90,77, - 71,0,100,100,100,101,132,0,100,101,131,2,90,78,100,116, - 100,102,100,103,132,1,90,79,100,104,100,105,132,0,90,80, - 100,106,100,107,132,0,90,81,100,108,100,109,132,0,90,82, - 100,1,83,0,41,117,97,94,1,0,0,67,111,114,101,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, - 102,32,112,97,116,104,45,98,97,115,101,100,32,105,109,112, - 111,114,116,46,10,10,84,104,105,115,32,109,111,100,117,108, - 101,32,105,115,32,78,79,84,32,109,101,97,110,116,32,116, - 111,32,98,101,32,100,105,114,101,99,116,108,121,32,105,109, - 112,111,114,116,101,100,33,32,73,116,32,104,97,115,32,98, - 101,101,110,32,100,101,115,105,103,110,101,100,32,115,117,99, - 104,10,116,104,97,116,32,105,116,32,99,97,110,32,98,101, - 32,98,111,111,116,115,116,114,97,112,112,101,100,32,105,110, - 116,111,32,80,121,116,104,111,110,32,97,115,32,116,104,101, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 111,102,32,105,109,112,111,114,116,46,32,65,115,10,115,117, - 99,104,32,105,116,32,114,101,113,117,105,114,101,115,32,116, - 104,101,32,105,110,106,101,99,116,105,111,110,32,111,102,32, - 115,112,101,99,105,102,105,99,32,109,111,100,117,108,101,115, - 32,97,110,100,32,97,116,116,114,105,98,117,116,101,115,32, - 105,110,32,111,114,100,101,114,32,116,111,10,119,111,114,107, - 46,32,79,110,101,32,115,104,111,117,108,100,32,117,115,101, - 32,105,109,112,111,114,116,108,105,98,32,97,115,32,116,104, - 101,32,112,117,98,108,105,99,45,102,97,99,105,110,103,32, - 118,101,114,115,105,111,110,32,111,102,32,116,104,105,115,32, - 109,111,100,117,108,101,46,10,10,78,233,0,0,0,0,90, - 5,119,105,110,51,50,250,1,92,250,1,47,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,99,0,0,0,115,28,0,0,0,129,0,124,0,93,9, - 125,1,116,0,124,1,131,1,100,0,107,2,86,0,1,0, - 113,2,100,1,83,0,41,2,233,1,0,0,0,78,41,1, - 218,3,108,101,110,41,2,218,2,46,48,218,3,115,101,112, - 169,0,114,7,0,0,0,250,38,60,102,114,111,122,101,110, - 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, - 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218, - 9,60,103,101,110,101,120,112,114,62,46,0,0,0,115,6, - 0,0,0,6,128,22,0,255,128,114,9,0,0,0,218,0, + 101,13,100,2,25,0,90,15,101,16,101,13,131,1,90,17, + 100,8,160,18,101,13,161,1,90,13,100,9,100,10,132,0, + 101,13,68,0,131,1,90,19,100,11,90,20,100,12,90,21, + 101,21,101,20,23,0,90,22,100,13,100,14,132,0,90,23, + 101,23,131,0,90,24,100,15,100,16,132,0,90,25,100,17, + 100,18,132,0,90,26,100,19,100,20,132,0,90,27,101,8, + 114,119,100,21,100,22,132,0,90,28,110,4,100,23,100,22, + 132,0,90,28,100,24,100,25,132,0,90,29,100,26,100,27, + 132,0,90,30,100,28,100,29,132,0,90,31,100,30,100,31, + 132,0,90,32,100,32,100,33,132,0,90,33,101,8,114,150, + 100,34,100,35,132,0,90,34,110,4,100,36,100,35,132,0, + 90,34,100,112,100,38,100,39,132,1,90,35,101,36,101,35, + 106,37,131,1,90,38,100,40,160,39,100,41,100,42,161,2, + 100,43,23,0,90,40,101,41,160,42,101,40,100,42,161,2, + 90,43,100,44,90,44,100,45,90,45,100,46,103,1,90,46, + 101,8,114,192,101,46,160,47,100,47,161,1,1,0,101,2, + 160,48,161,0,90,49,100,48,103,1,90,50,101,50,4,0, + 90,51,90,52,100,113,100,1,100,49,156,1,100,50,100,51, + 132,3,90,53,100,52,100,53,132,0,90,54,100,54,100,55, + 132,0,90,55,100,56,100,57,132,0,90,56,100,58,100,59, + 132,0,90,57,100,60,100,61,132,0,90,58,100,62,100,63, + 132,0,90,59,100,64,100,65,132,0,90,60,100,66,100,67, + 132,0,90,61,100,68,100,69,132,0,90,62,100,114,100,70, + 100,71,132,1,90,63,100,115,100,72,100,73,132,1,90,64, + 100,116,100,75,100,76,132,1,90,65,100,77,100,78,132,0, + 90,66,101,67,131,0,90,68,100,117,100,1,101,68,100,79, + 156,2,100,80,100,81,132,3,90,69,71,0,100,82,100,83, + 132,0,100,83,131,2,90,70,71,0,100,84,100,85,132,0, + 100,85,131,2,90,71,71,0,100,86,100,87,132,0,100,87, + 101,71,131,3,90,72,71,0,100,88,100,89,132,0,100,89, + 131,2,90,73,71,0,100,90,100,91,132,0,100,91,101,73, + 101,72,131,4,90,74,71,0,100,92,100,93,132,0,100,93, + 101,73,101,71,131,4,90,75,71,0,100,94,100,95,132,0, + 100,95,101,73,101,71,131,4,90,76,71,0,100,96,100,97, + 132,0,100,97,131,2,90,77,71,0,100,98,100,99,132,0, + 100,99,131,2,90,78,71,0,100,100,100,101,132,0,100,101, + 131,2,90,79,71,0,100,102,100,103,132,0,100,103,131,2, + 90,80,100,118,100,104,100,105,132,1,90,81,100,106,100,107, + 132,0,90,82,100,108,100,109,132,0,90,83,100,110,100,111, + 132,0,90,84,100,1,83,0,41,119,97,94,1,0,0,67, + 111,114,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,112,97,116,104,45,98,97,115,101,100, + 32,105,109,112,111,114,116,46,10,10,84,104,105,115,32,109, + 111,100,117,108,101,32,105,115,32,78,79,84,32,109,101,97, + 110,116,32,116,111,32,98,101,32,100,105,114,101,99,116,108, + 121,32,105,109,112,111,114,116,101,100,33,32,73,116,32,104, + 97,115,32,98,101,101,110,32,100,101,115,105,103,110,101,100, + 32,115,117,99,104,10,116,104,97,116,32,105,116,32,99,97, + 110,32,98,101,32,98,111,111,116,115,116,114,97,112,112,101, + 100,32,105,110,116,111,32,80,121,116,104,111,110,32,97,115, + 32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,105,109,112,111,114,116,46,32,65, + 115,10,115,117,99,104,32,105,116,32,114,101,113,117,105,114, + 101,115,32,116,104,101,32,105,110,106,101,99,116,105,111,110, + 32,111,102,32,115,112,101,99,105,102,105,99,32,109,111,100, + 117,108,101,115,32,97,110,100,32,97,116,116,114,105,98,117, + 116,101,115,32,105,110,32,111,114,100,101,114,32,116,111,10, + 119,111,114,107,46,32,79,110,101,32,115,104,111,117,108,100, + 32,117,115,101,32,105,109,112,111,114,116,108,105,98,32,97, + 115,32,116,104,101,32,112,117,98,108,105,99,45,102,97,99, + 105,110,103,32,118,101,114,115,105,111,110,32,111,102,32,116, + 104,105,115,32,109,111,100,117,108,101,46,10,10,78,233,0, + 0,0,0,90,5,119,105,110,51,50,250,1,92,250,1,47, 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,4,0,0,0,67,0,0,0,115,22,0,0,0,104,0, - 124,0,93,7,125,1,100,0,124,1,155,0,157,2,146,2, - 113,2,83,0,41,1,250,1,58,114,7,0,0,0,41,2, - 114,5,0,0,0,218,1,115,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,9,60,115,101,116,99,111,109, - 112,62,49,0,0,0,115,4,0,0,0,22,0,255,128,114, - 13,0,0,0,41,1,218,3,119,105,110,41,2,90,6,99, - 121,103,119,105,110,90,6,100,97,114,119,105,110,99,0,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, - 0,0,3,0,0,0,115,62,0,0,0,116,0,106,1,160, - 2,116,3,161,1,114,25,116,0,106,1,160,2,116,4,161, - 1,114,15,100,1,137,0,110,2,100,2,137,0,135,0,102, - 1,100,3,100,4,132,8,125,0,124,0,83,0,100,5,100, - 4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,89, - 84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,80, - 89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 19,0,0,0,115,20,0,0,0,116,0,106,1,106,2,12, - 0,111,9,136,0,116,3,106,4,118,0,83,0,41,2,122, - 94,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 0,3,0,0,0,99,0,0,0,115,28,0,0,0,129,0, + 124,0,93,9,125,1,116,0,124,1,131,1,100,0,107,2, + 86,0,1,0,113,2,100,1,83,0,41,2,233,1,0,0, + 0,78,41,1,218,3,108,101,110,41,2,218,2,46,48,218, + 3,115,101,112,169,0,114,7,0,0,0,250,38,60,102,114, + 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95, + 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110, + 97,108,62,218,9,60,103,101,110,101,120,112,114,62,46,0, + 0,0,115,6,0,0,0,6,128,22,0,255,128,114,9,0, + 0,0,218,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,22,0, + 0,0,104,0,124,0,93,7,125,1,100,0,124,1,155,0, + 157,2,146,2,113,2,83,0,41,1,250,1,58,114,7,0, + 0,0,41,2,114,5,0,0,0,218,1,115,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,9,60,115,101, + 116,99,111,109,112,62,50,0,0,0,115,4,0,0,0,22, + 0,255,128,114,13,0,0,0,41,1,218,3,119,105,110,41, + 2,90,6,99,121,103,119,105,110,90,6,100,97,114,119,105, + 110,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,3,0,0,0,115,62,0,0,0,116, + 0,106,1,160,2,116,3,161,1,114,25,116,0,106,1,160, + 2,116,4,161,1,114,15,100,1,137,0,110,2,100,2,137, + 0,135,0,102,1,100,3,100,4,132,8,125,0,124,0,83, + 0,100,5,100,4,132,0,125,0,124,0,83,0,41,6,78, + 90,12,80,89,84,72,79,78,67,65,83,69,79,75,115,12, + 0,0,0,80,89,84,72,79,78,67,65,83,69,79,75,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,19,0,0,0,115,20,0,0,0,116,0,106, + 1,106,2,12,0,111,9,136,0,116,3,106,4,118,0,83, + 0,41,2,122,94,84,114,117,101,32,105,102,32,102,105,108, + 101,110,97,109,101,115,32,109,117,115,116,32,98,101,32,99, + 104,101,99,107,101,100,32,99,97,115,101,45,105,110,115,101, + 110,115,105,116,105,118,101,108,121,32,97,110,100,32,105,103, + 110,111,114,101,32,101,110,118,105,114,111,110,109,101,110,116, + 32,102,108,97,103,115,32,97,114,101,32,110,111,116,32,115, + 101,116,46,78,41,5,218,3,115,121,115,218,5,102,108,97, + 103,115,218,18,105,103,110,111,114,101,95,101,110,118,105,114, + 111,110,109,101,110,116,218,3,95,111,115,90,7,101,110,118, + 105,114,111,110,114,7,0,0,0,169,1,218,3,107,101,121, + 114,7,0,0,0,114,8,0,0,0,218,11,95,114,101,108, + 97,120,95,99,97,115,101,67,0,0,0,243,4,0,0,0, + 20,2,255,128,122,37,95,109,97,107,101,95,114,101,108,97, + 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, + 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 83,0,0,0,243,4,0,0,0,100,1,83,0,41,3,122, + 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, - 105,118,101,108,121,32,97,110,100,32,105,103,110,111,114,101, - 32,101,110,118,105,114,111,110,109,101,110,116,32,102,108,97, - 103,115,32,97,114,101,32,110,111,116,32,115,101,116,46,78, - 41,5,218,3,115,121,115,218,5,102,108,97,103,115,218,18, - 105,103,110,111,114,101,95,101,110,118,105,114,111,110,109,101, - 110,116,218,3,95,111,115,90,7,101,110,118,105,114,111,110, - 114,7,0,0,0,169,1,218,3,107,101,121,114,7,0,0, - 0,114,8,0,0,0,218,11,95,114,101,108,97,120,95,99, - 97,115,101,66,0,0,0,243,4,0,0,0,20,2,255,128, - 122,37,95,109,97,107,101,95,114,101,108,97,120,95,99,97, - 115,101,46,60,108,111,99,97,108,115,62,46,95,114,101,108, - 97,120,95,99,97,115,101,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, - 243,4,0,0,0,100,1,83,0,41,3,122,53,84,114,117, - 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, - 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, - 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, - 121,46,70,78,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,21,0, - 0,0,70,0,0,0,243,4,0,0,0,4,2,255,128,41, - 5,114,15,0,0,0,218,8,112,108,97,116,102,111,114,109, - 218,10,115,116,97,114,116,115,119,105,116,104,218,27,95,67, - 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, - 80,76,65,84,70,79,82,77,83,218,35,95,67,65,83,69, - 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, - 84,70,79,82,77,83,95,83,84,82,95,75,69,89,41,1, - 114,21,0,0,0,114,7,0,0,0,114,19,0,0,0,114, - 8,0,0,0,218,16,95,109,97,107,101,95,114,101,108,97, - 120,95,99,97,115,101,59,0,0,0,115,18,0,0,0,12, - 1,12,1,6,1,4,2,12,2,4,7,8,253,4,3,255, - 128,114,29,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, - 20,0,0,0,116,0,124,0,131,1,100,1,64,0,160,1, - 100,2,100,3,161,2,83,0,41,5,122,42,67,111,110,118, - 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, - 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, - 110,100,105,97,110,46,236,3,0,0,0,255,127,255,127,3, - 0,233,4,0,0,0,218,6,108,105,116,116,108,101,78,41, - 2,218,3,105,110,116,218,8,116,111,95,98,121,116,101,115, - 41,1,218,1,120,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,12,95,112,97,99,107,95,117,105,110,116, - 51,50,78,0,0,0,114,22,0,0,0,114,36,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,67,0,0,0,243,28,0,0,0,116,0, - 124,0,131,1,100,1,107,2,115,8,74,0,130,1,116,1, - 160,2,124,0,100,2,161,2,83,0,41,4,122,47,67,111, - 110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,110, - 32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,116, - 111,32,97,110,32,105,110,116,101,103,101,114,46,114,31,0, - 0,0,114,32,0,0,0,78,169,3,114,4,0,0,0,114, - 33,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, - 169,1,218,4,100,97,116,97,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,14,95,117,110,112,97,99,107, - 95,117,105,110,116,51,50,83,0,0,0,243,6,0,0,0, - 16,2,12,1,255,128,114,42,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 67,0,0,0,114,37,0,0,0,41,4,122,47,67,111,110, - 118,101,114,116,32,50,32,98,121,116,101,115,32,105,110,32, - 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, - 32,97,110,32,105,110,116,101,103,101,114,46,233,2,0,0, - 0,114,32,0,0,0,78,114,38,0,0,0,114,40,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,14,95,117,110,112,97,99,107,95,117,105,110,116,49,54, - 88,0,0,0,114,43,0,0,0,114,45,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,71,0,0,0,115,20,0,0,0,116,0,160,1, - 100,1,100,2,132,0,124,0,68,0,131,1,161,1,83,0, - 41,4,122,31,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,106,111,105,110, - 40,41,46,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,5,0,0,0,83,0,0,0,115,26,0,0, - 0,103,0,124,0,93,9,125,1,124,1,114,2,124,1,160, - 0,116,1,161,1,145,2,113,2,83,0,114,7,0,0,0, - 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, - 95,115,101,112,97,114,97,116,111,114,115,41,2,114,5,0, - 0,0,218,4,112,97,114,116,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,10,60,108,105,115,116,99,111, - 109,112,62,96,0,0,0,115,8,0,0,0,6,0,6,1, - 14,255,255,128,122,30,95,112,97,116,104,95,106,111,105,110, - 46,60,108,111,99,97,108,115,62,46,60,108,105,115,116,99, - 111,109,112,62,78,41,2,218,8,112,97,116,104,95,115,101, - 112,218,4,106,111,105,110,41,1,218,10,112,97,116,104,95, - 112,97,114,116,115,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,10,95,112,97,116,104,95,106,111,105,110, - 94,0,0,0,115,8,0,0,0,10,2,2,1,8,255,255, - 128,114,53,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 96,0,0,0,116,0,116,1,131,1,100,1,107,2,114,18, - 124,0,160,2,116,3,161,1,92,3,125,1,125,2,125,3, - 124,1,124,3,102,2,83,0,116,4,124,0,131,1,68,0, - 93,21,125,4,124,4,116,1,118,0,114,43,124,0,106,5, - 124,4,100,1,100,2,141,2,92,2,125,1,125,3,124,1, - 124,3,102,2,2,0,1,0,83,0,113,22,100,3,124,0, - 102,2,83,0,41,5,122,32,82,101,112,108,97,99,101,109, + 105,118,101,108,121,46,70,78,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,21,0,0,0,71,0,0,0,243,4,0,0,0,4, + 2,255,128,41,5,114,15,0,0,0,218,8,112,108,97,116, + 102,111,114,109,218,10,115,116,97,114,116,115,119,105,116,104, + 218,27,95,67,65,83,69,95,73,78,83,69,78,83,73,84, + 73,86,69,95,80,76,65,84,70,79,82,77,83,218,35,95, + 67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,69, + 95,80,76,65,84,70,79,82,77,83,95,83,84,82,95,75, + 69,89,41,1,114,21,0,0,0,114,7,0,0,0,114,19, + 0,0,0,114,8,0,0,0,218,16,95,109,97,107,101,95, + 114,101,108,97,120,95,99,97,115,101,60,0,0,0,115,18, + 0,0,0,12,1,12,1,6,1,4,2,12,2,4,7,8, + 253,4,3,255,128,114,29,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, + 0,0,0,115,20,0,0,0,116,0,124,0,131,1,100,1, + 64,0,160,1,100,2,100,3,161,2,83,0,41,5,122,42, + 67,111,110,118,101,114,116,32,97,32,51,50,45,98,105,116, + 32,105,110,116,101,103,101,114,32,116,111,32,108,105,116,116, + 108,101,45,101,110,100,105,97,110,46,236,3,0,0,0,255, + 127,255,127,3,0,233,4,0,0,0,218,6,108,105,116,116, + 108,101,78,41,2,218,3,105,110,116,218,8,116,111,95,98, + 121,116,101,115,41,1,218,1,120,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,12,95,112,97,99,107,95, + 117,105,110,116,51,50,79,0,0,0,114,22,0,0,0,114, + 36,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,4,0,0,0,67,0,0,0,243,28,0, + 0,0,116,0,124,0,131,1,100,1,107,2,115,8,74,0, + 130,1,116,1,160,2,124,0,100,2,161,2,83,0,41,4, + 122,47,67,111,110,118,101,114,116,32,52,32,98,121,116,101, + 115,32,105,110,32,108,105,116,116,108,101,45,101,110,100,105, + 97,110,32,116,111,32,97,110,32,105,110,116,101,103,101,114, + 46,114,31,0,0,0,114,32,0,0,0,78,169,3,114,4, + 0,0,0,114,33,0,0,0,218,10,102,114,111,109,95,98, + 121,116,101,115,169,1,218,4,100,97,116,97,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,14,95,117,110, + 112,97,99,107,95,117,105,110,116,51,50,84,0,0,0,243, + 6,0,0,0,16,2,12,1,255,128,114,42,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,67,0,0,0,114,37,0,0,0,41,4,122, + 47,67,111,110,118,101,114,116,32,50,32,98,121,116,101,115, + 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, + 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, + 233,2,0,0,0,114,32,0,0,0,78,114,38,0,0,0, + 114,40,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,14,95,117,110,112,97,99,107,95,117,105, + 110,116,49,54,89,0,0,0,114,43,0,0,0,114,45,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,4,0,0,0,71,0,0,0,115,228,0,0,0, + 124,0,115,4,100,1,83,0,116,0,124,0,131,1,100,2, + 107,2,114,14,124,0,100,3,25,0,83,0,100,1,125,1, + 103,0,125,2,116,1,116,2,106,3,124,0,131,2,68,0, + 93,61,92,2,125,3,125,4,124,3,160,4,116,5,161,1, + 115,38,124,3,160,6,116,5,161,1,114,51,124,3,160,7, + 116,8,161,1,112,44,124,1,125,1,116,9,124,4,23,0, + 103,1,125,2,113,24,124,3,160,6,100,4,161,1,114,76, + 124,1,160,10,161,0,124,3,160,10,161,0,107,3,114,70, + 124,3,125,1,124,4,103,1,125,2,113,24,124,2,160,11, + 124,4,161,1,1,0,113,24,124,3,112,79,124,1,125,1, + 124,2,160,11,124,4,161,1,1,0,113,24,100,5,100,6, + 132,0,124,2,68,0,131,1,125,2,116,0,124,2,131,1, + 100,2,107,2,114,107,124,2,100,3,25,0,115,107,124,1, + 116,9,23,0,83,0,124,1,116,9,160,12,124,2,161,1, + 23,0,83,0,41,8,250,31,82,101,112,108,97,99,101,109, 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, - 115,112,108,105,116,40,41,46,114,3,0,0,0,41,1,90, - 8,109,97,120,115,112,108,105,116,114,10,0,0,0,78,41, - 6,114,4,0,0,0,114,47,0,0,0,218,10,114,112,97, - 114,116,105,116,105,111,110,114,50,0,0,0,218,8,114,101, - 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, - 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, - 218,4,116,97,105,108,114,35,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,11,95,112,97,116, - 104,95,115,112,108,105,116,100,0,0,0,115,20,0,0,0, - 12,2,16,1,8,1,12,1,8,1,18,1,12,1,2,254, - 8,3,255,128,114,60,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,115,10,0,0,0,116,0,160,1,124,0,161,1,83, - 0,41,2,122,126,83,116,97,116,32,116,104,101,32,112,97, - 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, - 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, - 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, - 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, - 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, - 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, - 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, - 32,32,32,78,41,2,114,18,0,0,0,90,4,115,116,97, - 116,169,1,114,57,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,10,95,112,97,116,104,95,115, - 116,97,116,112,0,0,0,115,4,0,0,0,10,7,255,128, - 114,62,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,48, - 0,0,0,122,6,116,0,124,0,131,1,125,2,87,0,110, - 9,4,0,116,1,121,23,1,0,1,0,1,0,89,0,100, - 1,83,0,124,2,106,2,100,2,64,0,124,1,107,2,83, - 0,119,0,41,4,122,49,84,101,115,116,32,119,104,101,116, - 104,101,114,32,116,104,101,32,112,97,116,104,32,105,115,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,101,32,116,121,112,101,46,70,105,0,240,0,0,78,41, - 3,114,62,0,0,0,218,7,79,83,69,114,114,111,114,218, - 7,115,116,95,109,111,100,101,41,3,114,57,0,0,0,218, - 4,109,111,100,101,90,9,115,116,97,116,95,105,110,102,111, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 18,95,112,97,116,104,95,105,115,95,109,111,100,101,95,116, - 121,112,101,122,0,0,0,115,14,0,0,0,2,2,12,1, - 12,1,6,1,14,1,2,254,255,128,114,66,0,0,0,99, + 106,111,105,110,40,41,46,114,10,0,0,0,114,3,0,0, + 0,114,0,0,0,0,114,11,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, + 83,0,0,0,243,26,0,0,0,103,0,124,0,93,9,125, + 1,124,1,114,2,124,1,160,0,116,1,161,1,145,2,113, + 2,83,0,114,7,0,0,0,169,2,218,6,114,115,116,114, + 105,112,218,15,112,97,116,104,95,115,101,112,97,114,97,116, + 111,114,115,169,2,114,5,0,0,0,218,1,112,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,10,60,108, + 105,115,116,99,111,109,112,62,119,0,0,0,115,4,0,0, + 0,26,0,255,128,250,30,95,112,97,116,104,95,106,111,105, + 110,46,60,108,111,99,97,108,115,62,46,60,108,105,115,116, + 99,111,109,112,62,78,41,13,114,4,0,0,0,218,3,109, + 97,112,114,18,0,0,0,218,15,95,112,97,116,104,95,115, + 112,108,105,116,114,111,111,116,114,26,0,0,0,218,14,112, + 97,116,104,95,115,101,112,95,116,117,112,108,101,218,8,101, + 110,100,115,119,105,116,104,114,49,0,0,0,114,50,0,0, + 0,218,8,112,97,116,104,95,115,101,112,218,8,99,97,115, + 101,102,111,108,100,218,6,97,112,112,101,110,100,218,4,106, + 111,105,110,41,5,218,10,112,97,116,104,95,112,97,114,116, + 115,218,4,114,111,111,116,218,4,112,97,116,104,90,8,110, + 101,119,95,114,111,111,116,218,4,116,97,105,108,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,10,95,112, + 97,116,104,95,106,111,105,110,96,0,0,0,115,44,0,0, + 0,4,2,4,1,12,1,8,1,4,1,4,1,20,1,20, + 1,14,1,12,1,10,1,16,1,4,3,8,1,12,2,8, + 2,12,1,14,1,20,1,8,2,14,1,255,128,114,67,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,71,0,0,0,115,20,0,0,0, + 116,0,160,1,100,1,100,2,132,0,124,0,68,0,131,1, + 161,1,83,0,41,4,114,46,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, + 83,0,0,0,114,47,0,0,0,114,7,0,0,0,114,48, + 0,0,0,41,2,114,5,0,0,0,218,4,112,97,114,116, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 53,0,0,0,128,0,0,0,115,8,0,0,0,6,0,6, + 1,14,255,255,128,114,54,0,0,0,78,41,2,114,59,0, + 0,0,114,62,0,0,0,41,1,114,63,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,67,0, + 0,0,126,0,0,0,115,8,0,0,0,10,2,2,1,8, + 255,255,128,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,3,0,0,0,115,66,0,0, + 0,116,0,135,0,102,1,100,1,100,2,132,8,116,1,68, + 0,131,1,131,1,125,1,124,1,100,3,107,0,114,19,100, + 4,136,0,102,2,83,0,136,0,100,5,124,1,133,2,25, + 0,136,0,124,1,100,6,23,0,100,5,133,2,25,0,102, + 2,83,0,41,7,122,32,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,115, + 112,108,105,116,40,41,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,4,0,0,0,51,0,0,0, + 115,26,0,0,0,129,0,124,0,93,8,125,1,136,0,160, + 0,124,1,161,1,86,0,1,0,113,2,100,0,83,0,169, + 1,78,41,1,218,5,114,102,105,110,100,114,51,0,0,0, + 169,1,114,65,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,9,0,0,0,134,0,0,0,115,6,0,0,0,6, + 128,20,0,255,128,122,30,95,112,97,116,104,95,115,112,108, + 105,116,46,60,108,111,99,97,108,115,62,46,60,103,101,110, + 101,120,112,114,62,114,0,0,0,0,114,10,0,0,0,78, + 114,3,0,0,0,41,2,218,3,109,97,120,114,50,0,0, + 0,41,2,114,65,0,0,0,218,1,105,114,7,0,0,0, + 114,71,0,0,0,114,8,0,0,0,218,11,95,112,97,116, + 104,95,115,112,108,105,116,132,0,0,0,115,10,0,0,0, + 22,2,8,1,8,1,28,1,255,128,114,74,0,0,0,99, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,124, - 0,100,1,131,2,83,0,41,3,122,31,82,101,112,108,97, - 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97, - 116,104,46,105,115,102,105,108,101,46,105,0,128,0,0,78, - 41,1,114,66,0,0,0,114,61,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,12,95,112,97, - 116,104,95,105,115,102,105,108,101,131,0,0,0,243,4,0, - 0,0,10,2,255,128,114,67,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,22,0,0,0,124,0,115,6,116,0,160, - 1,161,0,125,0,116,2,124,0,100,1,131,2,83,0,41, - 3,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, - 46,105,0,64,0,0,78,41,3,114,18,0,0,0,218,6, - 103,101,116,99,119,100,114,66,0,0,0,114,61,0,0,0, + 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,160, + 1,124,0,161,1,83,0,41,2,122,126,83,116,97,116,32, + 116,104,101,32,112,97,116,104,46,10,10,32,32,32,32,77, + 97,100,101,32,97,32,115,101,112,97,114,97,116,101,32,102, + 117,110,99,116,105,111,110,32,116,111,32,109,97,107,101,32, + 105,116,32,101,97,115,105,101,114,32,116,111,32,111,118,101, + 114,114,105,100,101,32,105,110,32,101,120,112,101,114,105,109, + 101,110,116,115,10,32,32,32,32,40,101,46,103,46,32,99, + 97,99,104,101,32,115,116,97,116,32,114,101,115,117,108,116, + 115,41,46,10,10,32,32,32,32,78,41,2,114,18,0,0, + 0,90,4,115,116,97,116,114,71,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,10,95,112,97, + 116,104,95,115,116,97,116,140,0,0,0,115,4,0,0,0, + 10,7,255,128,114,75,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, + 0,0,115,48,0,0,0,122,6,116,0,124,0,131,1,125, + 2,87,0,110,9,4,0,116,1,121,23,1,0,1,0,1, + 0,89,0,100,1,83,0,124,2,106,2,100,2,64,0,124, + 1,107,2,83,0,119,0,41,4,122,49,84,101,115,116,32, + 119,104,101,116,104,101,114,32,116,104,101,32,112,97,116,104, + 32,105,115,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,101,32,116,121,112,101,46,70,105,0,240, + 0,0,78,41,3,114,75,0,0,0,218,7,79,83,69,114, + 114,111,114,218,7,115,116,95,109,111,100,101,41,3,114,65, + 0,0,0,218,4,109,111,100,101,90,9,115,116,97,116,95, + 105,110,102,111,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,18,95,112,97,116,104,95,105,115,95,109,111, + 100,101,95,116,121,112,101,150,0,0,0,115,14,0,0,0, + 2,2,12,1,12,1,6,1,14,1,2,254,255,128,114,79, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,10,0,0, + 0,116,0,124,0,100,1,131,2,83,0,41,3,122,31,82, + 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, + 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, + 128,0,0,78,41,1,114,79,0,0,0,114,71,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,95,112,97,116,104,95,105,115,100,105,114,136,0,0,0, - 115,8,0,0,0,4,2,8,1,10,1,255,128,114,70,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,26,0,0,0, - 124,0,160,0,116,1,161,1,112,12,124,0,100,1,100,2, - 133,2,25,0,116,2,118,0,83,0,41,4,122,142,82,101, - 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, - 46,112,97,116,104,46,105,115,97,98,115,46,10,10,32,32, - 32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,105, - 110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,97, - 116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,114, - 105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,32, - 119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,32, - 32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,115, - 111,108,117,116,101,34,46,10,32,32,32,32,114,3,0,0, - 0,233,3,0,0,0,78,41,3,114,26,0,0,0,114,47, - 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119, - 105,116,104,95,99,111,108,111,110,114,61,0,0,0,114,7, + 12,95,112,97,116,104,95,105,115,102,105,108,101,159,0,0, + 0,243,4,0,0,0,10,2,255,128,114,80,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115, + 6,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131, + 2,83,0,41,3,122,30,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, + 115,100,105,114,46,105,0,64,0,0,78,41,3,114,18,0, + 0,0,218,6,103,101,116,99,119,100,114,79,0,0,0,114, + 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,95,112,97,116,104,95,105,115,100,105,114, + 164,0,0,0,115,8,0,0,0,4,2,8,1,10,1,255, + 128,114,83,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 62,0,0,0,124,0,115,4,100,1,83,0,116,0,160,1, + 124,0,161,1,100,2,25,0,160,2,100,3,100,4,161,2, + 125,1,116,3,124,1,131,1,100,5,107,4,111,30,124,1, + 160,4,100,6,161,1,112,30,124,1,160,5,100,4,161,1, + 83,0,41,8,250,30,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115, + 97,98,115,46,70,114,0,0,0,0,114,2,0,0,0,114, + 1,0,0,0,114,3,0,0,0,122,2,92,92,78,41,6, + 114,18,0,0,0,114,56,0,0,0,218,7,114,101,112,108, + 97,99,101,114,4,0,0,0,114,26,0,0,0,114,58,0, + 0,0,41,2,114,65,0,0,0,114,64,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, - 112,97,116,104,95,105,115,97,98,115,143,0,0,0,115,4, - 0,0,0,26,6,255,128,114,73,0,0,0,233,182,1,0, - 0,99,3,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,11,0,0,0,67,0,0,0,115,170,0,0,0,100, - 1,160,0,124,0,116,1,124,0,131,1,161,2,125,3,116, - 2,160,3,124,3,116,2,106,4,116,2,106,5,66,0,116, - 2,106,6,66,0,124,2,100,2,64,0,161,3,125,4,122, - 36,116,7,160,8,124,4,100,3,161,2,143,13,125,5,124, - 5,160,9,124,1,161,1,1,0,87,0,100,4,4,0,4, - 0,131,3,1,0,110,8,49,0,115,47,119,1,1,0,1, - 0,1,0,89,0,1,0,116,2,160,10,124,3,124,0,161, - 2,1,0,87,0,100,4,83,0,4,0,116,11,121,84,1, - 0,1,0,1,0,122,7,116,2,160,12,124,3,161,1,1, - 0,87,0,130,0,4,0,116,11,121,83,1,0,1,0,1, - 0,89,0,130,0,119,0,119,0,41,5,122,162,66,101,115, - 116,45,101,102,102,111,114,116,32,102,117,110,99,116,105,111, - 110,32,116,111,32,119,114,105,116,101,32,100,97,116,97,32, - 116,111,32,97,32,112,97,116,104,32,97,116,111,109,105,99, - 97,108,108,121,46,10,32,32,32,32,66,101,32,112,114,101, - 112,97,114,101,100,32,116,111,32,104,97,110,100,108,101,32, - 97,32,70,105,108,101,69,120,105,115,116,115,69,114,114,111, - 114,32,105,102,32,99,111,110,99,117,114,114,101,110,116,32, - 119,114,105,116,105,110,103,32,111,102,32,116,104,101,10,32, - 32,32,32,116,101,109,112,111,114,97,114,121,32,102,105,108, - 101,32,105,115,32,97,116,116,101,109,112,116,101,100,46,250, - 5,123,125,46,123,125,114,74,0,0,0,90,2,119,98,78, - 41,13,218,6,102,111,114,109,97,116,218,2,105,100,114,18, - 0,0,0,90,4,111,112,101,110,90,6,79,95,69,88,67, - 76,90,7,79,95,67,82,69,65,84,90,8,79,95,87,82, - 79,78,76,89,218,3,95,105,111,218,6,70,105,108,101,73, - 79,218,5,119,114,105,116,101,218,7,114,101,112,108,97,99, - 101,114,63,0,0,0,90,6,117,110,108,105,110,107,41,6, - 114,57,0,0,0,114,41,0,0,0,114,65,0,0,0,90, + 112,97,116,104,95,105,115,97,98,115,172,0,0,0,115,10, + 0,0,0,4,2,4,1,22,1,32,1,255,128,114,86,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0, + 124,0,160,0,116,1,161,1,83,0,41,2,114,84,0,0, + 0,78,41,2,114,26,0,0,0,114,50,0,0,0,114,71, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,86,0,0,0,180,0,0,0,114,81,0,0,0, + 233,182,1,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,11,0,0,0,67,0,0,0,115,170, + 0,0,0,100,1,160,0,124,0,116,1,124,0,131,1,161, + 2,125,3,116,2,160,3,124,3,116,2,106,4,116,2,106, + 5,66,0,116,2,106,6,66,0,124,2,100,2,64,0,161, + 3,125,4,122,36,116,7,160,8,124,4,100,3,161,2,143, + 13,125,5,124,5,160,9,124,1,161,1,1,0,87,0,100, + 4,4,0,4,0,131,3,1,0,110,8,49,0,115,47,119, + 1,1,0,1,0,1,0,89,0,1,0,116,2,160,10,124, + 3,124,0,161,2,1,0,87,0,100,4,83,0,4,0,116, + 11,121,84,1,0,1,0,1,0,122,7,116,2,160,12,124, + 3,161,1,1,0,87,0,130,0,4,0,116,11,121,83,1, + 0,1,0,1,0,89,0,130,0,119,0,119,0,41,5,122, + 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110, + 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100, + 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116, + 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101, + 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110, + 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115, + 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114, + 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116, + 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121, + 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116, + 101,100,46,250,5,123,125,46,123,125,114,87,0,0,0,90, + 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, + 105,100,114,18,0,0,0,90,4,111,112,101,110,90,6,79, + 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, + 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, + 105,108,101,73,79,218,5,119,114,105,116,101,114,85,0,0, + 0,114,76,0,0,0,90,6,117,110,108,105,110,107,41,6, + 114,65,0,0,0,114,41,0,0,0,114,78,0,0,0,90, 8,112,97,116,104,95,116,109,112,90,2,102,100,218,4,102, 105,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, 0,0,218,13,95,119,114,105,116,101,95,97,116,111,109,105, - 99,152,0,0,0,115,38,0,0,0,16,5,6,1,22,1, + 99,185,0,0,0,115,38,0,0,0,16,5,6,1,22,1, 4,255,2,2,14,3,24,1,16,128,18,1,12,1,2,1, 12,1,2,3,12,254,2,1,2,1,2,254,2,253,255,128, - 114,83,0,0,0,105,108,13,0,0,114,44,0,0,0,114, + 114,95,0,0,0,105,108,13,0,0,114,44,0,0,0,114, 32,0,0,0,115,2,0,0,0,13,10,90,11,95,95,112, 121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,3, 46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,41, @@ -409,416 +453,368 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, 101,69,114,114,111,114,114,18,0,0,0,218,6,102,115,112, - 97,116,104,114,60,0,0,0,114,54,0,0,0,114,15,0, - 0,0,218,14,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,218,9,99,97,99,104,101,95,116,97,103,218,19,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, - 111,114,114,51,0,0,0,114,16,0,0,0,218,8,111,112, - 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, - 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, - 114,76,0,0,0,218,4,95,79,80,84,218,17,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,218,14, - 112,121,99,97,99,104,101,95,112,114,101,102,105,120,114,73, - 0,0,0,114,53,0,0,0,114,69,0,0,0,114,47,0, - 0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,67, - 65,67,72,69,41,12,114,57,0,0,0,90,14,100,101,98, - 117,103,95,111,118,101,114,114,105,100,101,114,84,0,0,0, - 218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,114, - 59,0,0,0,90,4,98,97,115,101,114,6,0,0,0,218, - 4,114,101,115,116,90,3,116,97,103,90,15,97,108,109,111, - 115,116,95,102,105,108,101,110,97,109,101,218,8,102,105,108, - 101,110,97,109,101,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,17,99,97,99,104,101,95,102,114,111,109, - 95,115,111,117,114,99,101,88,1,0,0,115,74,0,0,0, - 8,18,6,1,2,1,4,255,8,2,4,1,8,1,12,1, - 10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,1, - 12,1,6,1,8,2,8,1,8,1,8,1,14,1,14,1, - 12,1,10,1,8,9,14,1,24,5,12,1,2,4,4,1, - 8,1,2,1,4,253,12,5,255,128,114,108,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, - 5,0,0,0,67,0,0,0,115,40,1,0,0,116,0,106, - 1,106,2,100,1,117,0,114,10,116,3,100,2,131,1,130, - 1,116,4,160,5,124,0,161,1,125,0,116,6,124,0,131, - 1,92,2,125,1,125,2,100,3,125,3,116,0,106,7,100, - 1,117,1,114,51,116,0,106,7,160,8,116,9,161,1,125, - 4,124,1,160,10,124,4,116,11,23,0,161,1,114,51,124, - 1,116,12,124,4,131,1,100,1,133,2,25,0,125,1,100, - 4,125,3,124,3,115,72,116,6,124,1,131,1,92,2,125, - 1,125,5,124,5,116,13,107,3,114,72,116,14,116,13,155, - 0,100,5,124,0,155,2,157,3,131,1,130,1,124,2,160, - 15,100,6,161,1,125,6,124,6,100,7,118,1,114,88,116, - 14,100,8,124,2,155,2,157,2,131,1,130,1,124,6,100, - 9,107,2,114,132,124,2,160,16,100,6,100,10,161,2,100, - 11,25,0,125,7,124,7,160,10,116,17,161,1,115,112,116, - 14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,116, - 12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,160, - 18,161,0,115,132,116,14,100,13,124,7,155,2,100,14,157, - 3,131,1,130,1,124,2,160,19,100,6,161,1,100,15,25, - 0,125,9,116,20,124,1,124,9,116,21,100,15,25,0,23, - 0,131,2,83,0,41,16,97,110,1,0,0,71,105,118,101, - 110,32,116,104,101,32,112,97,116,104,32,116,111,32,97,32, - 46,112,121,99,46,32,102,105,108,101,44,32,114,101,116,117, - 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105, - 116,115,32,46,112,121,32,102,105,108,101,46,10,10,32,32, - 32,32,84,104,101,32,46,112,121,99,32,102,105,108,101,32, - 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, - 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, - 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, - 112,97,116,104,32,116,111,10,32,32,32,32,116,104,101,32, - 46,112,121,32,102,105,108,101,32,99,97,108,99,117,108,97, - 116,101,100,32,116,111,32,99,111,114,114,101,115,112,111,110, - 100,32,116,111,32,116,104,101,32,46,112,121,99,32,102,105, - 108,101,46,32,32,73,102,32,112,97,116,104,32,100,111,101, - 115,10,32,32,32,32,110,111,116,32,99,111,110,102,111,114, - 109,32,116,111,32,80,69,80,32,51,49,52,55,47,52,56, - 56,32,102,111,114,109,97,116,44,32,86,97,108,117,101,69, - 114,114,111,114,32,119,105,108,108,32,98,101,32,114,97,105, - 115,101,100,46,32,73,102,10,32,32,32,32,115,121,115,46, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,99, - 97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,101, - 32,116,104,101,110,32,78,111,116,73,109,112,108,101,109,101, - 110,116,101,100,69,114,114,111,114,32,105,115,32,114,97,105, - 115,101,100,46,10,10,32,32,32,32,78,114,86,0,0,0, - 70,84,122,31,32,110,111,116,32,98,111,116,116,111,109,45, - 108,101,118,101,108,32,100,105,114,101,99,116,111,114,121,32, - 105,110,32,114,85,0,0,0,62,2,0,0,0,114,44,0, - 0,0,114,71,0,0,0,122,29,101,120,112,101,99,116,101, - 100,32,111,110,108,121,32,50,32,111,114,32,51,32,100,111, - 116,115,32,105,110,32,114,71,0,0,0,114,44,0,0,0, - 233,254,255,255,255,122,53,111,112,116,105,109,105,122,97,116, - 105,111,110,32,112,111,114,116,105,111,110,32,111,102,32,102, - 105,108,101,110,97,109,101,32,100,111,101,115,32,110,111,116, - 32,115,116,97,114,116,32,119,105,116,104,32,122,19,111,112, - 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, - 32,122,29,32,105,115,32,110,111,116,32,97,110,32,97,108, - 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, - 114,0,0,0,0,41,22,114,15,0,0,0,114,92,0,0, - 0,114,93,0,0,0,114,94,0,0,0,114,18,0,0,0, - 114,91,0,0,0,114,60,0,0,0,114,101,0,0,0,114, - 46,0,0,0,114,47,0,0,0,114,26,0,0,0,114,50, - 0,0,0,114,4,0,0,0,114,103,0,0,0,114,98,0, - 0,0,218,5,99,111,117,110,116,114,56,0,0,0,114,99, - 0,0,0,114,97,0,0,0,218,9,112,97,114,116,105,116, - 105,111,110,114,53,0,0,0,218,15,83,79,85,82,67,69, - 95,83,85,70,70,73,88,69,83,41,10,114,57,0,0,0, - 114,105,0,0,0,90,16,112,121,99,97,99,104,101,95,102, - 105,108,101,110,97,109,101,90,23,102,111,117,110,100,95,105, - 110,95,112,121,99,97,99,104,101,95,112,114,101,102,105,120, - 90,13,115,116,114,105,112,112,101,100,95,112,97,116,104,90, - 7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,111, - 117,110,116,114,84,0,0,0,90,9,111,112,116,95,108,101, - 118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,97, - 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,99, - 97,99,104,101,159,1,0,0,115,62,0,0,0,12,9,8, - 1,10,1,12,1,4,1,10,1,12,1,14,1,16,1,4, - 1,4,1,12,1,8,1,8,1,2,1,8,255,10,2,8, - 1,14,1,8,1,16,1,10,1,4,1,2,1,8,255,16, - 2,8,1,16,1,14,2,18,1,255,128,114,113,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,9,0,0,0,67,0,0,0,115,122,0,0,0,116,0, - 124,0,131,1,100,1,107,2,114,8,100,2,83,0,124,0, - 160,1,100,3,161,1,92,3,125,1,125,2,125,3,124,1, - 114,28,124,3,160,2,161,0,100,4,100,5,133,2,25,0, - 100,6,107,3,114,30,124,0,83,0,122,6,116,3,124,0, - 131,1,125,4,87,0,110,15,4,0,116,4,116,5,102,2, - 121,60,1,0,1,0,1,0,124,0,100,2,100,5,133,2, - 25,0,125,4,89,0,116,6,124,4,131,1,114,58,124,4, - 83,0,124,0,83,0,119,0,41,7,122,188,67,111,110,118, - 101,114,116,32,97,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,32,112,97,116,104,32,116,111,32,97,32,115,111, - 117,114,99,101,32,112,97,116,104,32,40,105,102,32,112,111, - 115,115,105,98,108,101,41,46,10,10,32,32,32,32,84,104, - 105,115,32,102,117,110,99,116,105,111,110,32,101,120,105,115, - 116,115,32,112,117,114,101,108,121,32,102,111,114,32,98,97, - 99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,98, - 105,108,105,116,121,32,102,111,114,10,32,32,32,32,80,121, - 73,109,112,111,114,116,95,69,120,101,99,67,111,100,101,77, - 111,100,117,108,101,87,105,116,104,70,105,108,101,110,97,109, - 101,115,40,41,32,105,110,32,116,104,101,32,67,32,65,80, - 73,46,10,10,32,32,32,32,114,0,0,0,0,78,114,85, - 0,0,0,233,253,255,255,255,233,255,255,255,255,90,2,112, - 121,41,7,114,4,0,0,0,114,54,0,0,0,218,5,108, - 111,119,101,114,114,113,0,0,0,114,94,0,0,0,114,98, - 0,0,0,114,67,0,0,0,41,5,218,13,98,121,116,101, - 99,111,100,101,95,112,97,116,104,114,106,0,0,0,114,58, - 0,0,0,90,9,101,120,116,101,110,115,105,111,110,218,11, - 115,111,117,114,99,101,95,112,97,116,104,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,15,95,103,101,116, - 95,115,111,117,114,99,101,102,105,108,101,199,1,0,0,115, - 24,0,0,0,12,7,4,1,16,1,24,1,4,1,2,1, - 12,1,16,1,14,1,16,1,2,254,255,128,114,119,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,8,0,0,0,67,0,0,0,115,68,0,0,0,124, - 0,160,0,116,1,116,2,131,1,161,1,114,22,122,5,116, - 3,124,0,131,1,87,0,83,0,4,0,116,4,121,33,1, - 0,1,0,1,0,89,0,100,0,83,0,124,0,160,0,116, - 1,116,5,131,1,161,1,114,31,124,0,83,0,100,0,83, - 0,119,0,169,1,78,41,6,218,8,101,110,100,115,119,105, - 116,104,218,5,116,117,112,108,101,114,112,0,0,0,114,108, - 0,0,0,114,94,0,0,0,114,100,0,0,0,41,1,114, - 107,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, - 218,1,0,0,115,20,0,0,0,14,1,2,1,10,1,12, - 1,6,1,14,1,4,1,4,2,2,251,255,128,114,123,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,8,0,0,0,67,0,0,0,115,48,0,0,0, - 122,7,116,0,124,0,131,1,106,1,125,1,87,0,110,9, - 4,0,116,2,121,23,1,0,1,0,1,0,100,1,125,1, - 89,0,124,1,100,2,79,0,125,1,124,1,83,0,119,0, - 41,4,122,51,67,97,108,99,117,108,97,116,101,32,116,104, - 101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,111, - 110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,46,114,74,0,0,0,233,128,0,0, - 0,78,41,3,114,62,0,0,0,114,64,0,0,0,114,63, - 0,0,0,41,2,114,57,0,0,0,114,65,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, - 95,99,97,108,99,95,109,111,100,101,230,1,0,0,115,16, - 0,0,0,2,2,14,1,12,1,6,1,8,3,4,1,2, - 251,255,128,114,125,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,4,0,0,0,3,0,0, - 0,115,52,0,0,0,100,6,135,0,102,1,100,2,100,3, - 132,9,125,1,116,0,100,1,117,1,114,15,116,0,106,1, - 125,2,110,4,100,4,100,5,132,0,125,2,124,2,124,1, - 136,0,131,2,1,0,124,1,83,0,41,7,122,252,68,101, - 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102, - 121,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, - 101,32,98,101,105,110,103,32,114,101,113,117,101,115,116,101, - 100,32,109,97,116,99,104,101,115,32,116,104,101,32,111,110, - 101,32,116,104,101,10,32,32,32,32,108,111,97,100,101,114, - 32,99,97,110,32,104,97,110,100,108,101,46,10,10,32,32, - 32,32,84,104,101,32,102,105,114,115,116,32,97,114,103,117, - 109,101,110,116,32,40,115,101,108,102,41,32,109,117,115,116, - 32,100,101,102,105,110,101,32,95,110,97,109,101,32,119,104, - 105,99,104,32,116,104,101,32,115,101,99,111,110,100,32,97, - 114,103,117,109,101,110,116,32,105,115,10,32,32,32,32,99, - 111,109,112,97,114,101,100,32,97,103,97,105,110,115,116,46, - 32,73,102,32,116,104,101,32,99,111,109,112,97,114,105,115, - 111,110,32,102,97,105,108,115,32,116,104,101,110,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, - 115,101,100,46,10,10,32,32,32,32,78,99,2,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, - 31,0,0,0,115,72,0,0,0,124,1,100,0,117,0,114, - 8,124,0,106,0,125,1,110,16,124,0,106,0,124,1,107, - 3,114,24,116,1,100,1,124,0,106,0,124,1,102,2,22, - 0,124,1,100,2,141,2,130,1,136,0,124,0,124,1,103, - 2,124,2,162,1,82,0,105,0,124,3,164,1,142,1,83, - 0,41,3,78,122,30,108,111,97,100,101,114,32,102,111,114, - 32,37,115,32,99,97,110,110,111,116,32,104,97,110,100,108, - 101,32,37,115,169,1,218,4,110,97,109,101,41,2,114,127, - 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, - 41,4,218,4,115,101,108,102,114,127,0,0,0,218,4,97, - 114,103,115,218,6,107,119,97,114,103,115,169,1,218,6,109, - 101,116,104,111,100,114,7,0,0,0,114,8,0,0,0,218, - 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, - 112,112,101,114,250,1,0,0,115,20,0,0,0,8,1,8, - 1,10,1,4,1,8,1,2,255,2,1,6,255,24,2,255, - 128,122,40,95,99,104,101,99,107,95,110,97,109,101,46,60, - 108,111,99,97,108,115,62,46,95,99,104,101,99,107,95,110, - 97,109,101,95,119,114,97,112,112,101,114,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, - 83,0,0,0,115,56,0,0,0,100,1,68,0,93,16,125, - 2,116,0,124,1,124,2,131,2,114,18,116,1,124,0,124, - 2,116,2,124,1,124,2,131,2,131,3,1,0,113,2,124, - 0,106,3,160,4,124,1,106,3,161,1,1,0,100,0,83, - 0,41,2,78,41,4,218,10,95,95,109,111,100,117,108,101, - 95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,95, - 113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,111, - 99,95,95,41,5,218,7,104,97,115,97,116,116,114,218,7, - 115,101,116,97,116,116,114,218,7,103,101,116,97,116,116,114, - 218,8,95,95,100,105,99,116,95,95,218,6,117,112,100,97, - 116,101,41,3,90,3,110,101,119,90,3,111,108,100,114,81, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,5,95,119,114,97,112,7,2,0,0,115,12,0, - 0,0,8,1,10,1,18,1,2,128,18,1,255,128,122,26, - 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, - 97,108,115,62,46,95,119,114,97,112,41,1,78,41,2,218, - 10,95,98,111,111,116,115,116,114,97,112,114,144,0,0,0, - 41,3,114,133,0,0,0,114,134,0,0,0,114,144,0,0, - 0,114,7,0,0,0,114,132,0,0,0,114,8,0,0,0, - 218,11,95,99,104,101,99,107,95,110,97,109,101,242,1,0, - 0,115,14,0,0,0,14,8,8,10,8,1,8,2,10,6, - 4,1,255,128,114,146,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, - 0,0,115,72,0,0,0,116,0,160,1,100,1,116,2,161, - 2,1,0,124,0,160,3,124,1,161,1,92,2,125,2,125, - 3,124,2,100,2,117,0,114,34,116,4,124,3,131,1,114, - 34,100,3,125,4,116,0,160,1,124,4,160,5,124,3,100, - 4,25,0,161,1,116,6,161,2,1,0,124,2,83,0,41, - 5,122,155,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 32,98,121,32,100,101,108,101,103,97,116,105,110,103,32,116, - 111,10,32,32,32,32,115,101,108,102,46,102,105,110,100,95, - 108,111,97,100,101,114,40,41,46,10,10,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,105,110,32,102,97,118,111, - 114,32,111,102,32,102,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,40,41,46,10,10,32,32,32,32,122,90, - 102,105,110,100,95,109,111,100,117,108,101,40,41,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32, - 115,108,97,116,101,100,32,102,111,114,32,114,101,109,111,118, - 97,108,32,105,110,32,80,121,116,104,111,110,32,51,46,49, - 50,59,32,117,115,101,32,102,105,110,100,95,115,112,101,99, - 40,41,32,105,110,115,116,101,97,100,78,122,44,78,111,116, - 32,105,109,112,111,114,116,105,110,103,32,100,105,114,101,99, - 116,111,114,121,32,123,125,58,32,109,105,115,115,105,110,103, - 32,95,95,105,110,105,116,95,95,114,0,0,0,0,41,7, - 114,87,0,0,0,114,88,0,0,0,114,89,0,0,0,218, - 11,102,105,110,100,95,108,111,97,100,101,114,114,4,0,0, - 0,114,76,0,0,0,218,13,73,109,112,111,114,116,87,97, - 114,110,105,110,103,41,5,114,129,0,0,0,218,8,102,117, - 108,108,110,97,109,101,218,6,108,111,97,100,101,114,218,8, - 112,111,114,116,105,111,110,115,218,3,109,115,103,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,17,95,102, - 105,110,100,95,109,111,100,117,108,101,95,115,104,105,109,17, - 2,0,0,115,18,0,0,0,6,7,2,2,4,254,14,6, - 16,1,4,1,22,1,4,1,255,128,114,153,0,0,0,99, - 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 4,0,0,0,67,0,0,0,115,166,0,0,0,124,0,100, - 1,100,2,133,2,25,0,125,3,124,3,116,0,107,3,114, - 32,100,3,124,1,155,2,100,4,124,3,155,2,157,4,125, - 4,116,1,160,2,100,5,124,4,161,2,1,0,116,3,124, - 4,102,1,105,0,124,2,164,1,142,1,130,1,116,4,124, - 0,131,1,100,6,107,0,114,53,100,7,124,1,155,2,157, - 2,125,4,116,1,160,2,100,5,124,4,161,2,1,0,116, - 5,124,4,131,1,130,1,116,6,124,0,100,2,100,8,133, - 2,25,0,131,1,125,5,124,5,100,9,64,0,114,81,100, - 10,124,5,155,2,100,11,124,1,155,2,157,4,125,4,116, - 3,124,4,102,1,105,0,124,2,164,1,142,1,130,1,124, - 5,83,0,41,12,97,84,2,0,0,80,101,114,102,111,114, - 109,32,98,97,115,105,99,32,118,97,108,105,100,105,116,121, - 32,99,104,101,99,107,105,110,103,32,111,102,32,97,32,112, - 121,99,32,104,101,97,100,101,114,32,97,110,100,32,114,101, - 116,117,114,110,32,116,104,101,32,102,108,97,103,115,32,102, - 105,101,108,100,44,10,32,32,32,32,119,104,105,99,104,32, - 100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,116, - 104,101,32,112,121,99,32,115,104,111,117,108,100,32,98,101, - 32,102,117,114,116,104,101,114,32,118,97,108,105,100,97,116, - 101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115, - 111,117,114,99,101,46,10,10,32,32,32,32,42,100,97,116, - 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, - 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, - 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, - 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, - 10,32,32,32,32,114,101,113,117,105,114,101,100,44,32,116, - 104,111,117,103,104,46,41,10,10,32,32,32,32,42,110,97, - 109,101,42,32,105,115,32,116,104,101,32,110,97,109,101,32, - 111,102,32,116,104,101,32,109,111,100,117,108,101,32,98,101, - 105,110,103,32,105,109,112,111,114,116,101,100,46,32,73,116, - 32,105,115,32,117,115,101,100,32,102,111,114,32,108,111,103, - 103,105,110,103,46,10,10,32,32,32,32,42,101,120,99,95, - 100,101,116,97,105,108,115,42,32,105,115,32,97,32,100,105, - 99,116,105,111,110,97,114,121,32,112,97,115,115,101,100,32, - 116,111,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 102,32,105,116,32,114,97,105,115,101,100,32,102,111,114,10, - 32,32,32,32,105,109,112,114,111,118,101,100,32,100,101,98, - 117,103,103,105,110,103,46,10,10,32,32,32,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, - 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, - 114,114,101,99,116,32,111,114,32,119,104,101,110,32,116,104, - 101,32,102,108,97,103,115,10,32,32,32,32,102,105,101,108, - 100,32,105,115,32,105,110,118,97,108,105,100,46,32,69,79, - 70,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 32,119,104,101,110,32,116,104,101,32,100,97,116,97,32,105, - 115,32,102,111,117,110,100,32,116,111,32,98,101,32,116,114, - 117,110,99,97,116,101,100,46,10,10,32,32,32,32,78,114, - 31,0,0,0,122,20,98,97,100,32,109,97,103,105,99,32, - 110,117,109,98,101,114,32,105,110,32,122,2,58,32,250,2, - 123,125,233,16,0,0,0,122,40,114,101,97,99,104,101,100, - 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, - 110,103,32,112,121,99,32,104,101,97,100,101,114,32,111,102, - 32,233,8,0,0,0,233,252,255,255,255,122,14,105,110,118, - 97,108,105,100,32,102,108,97,103,115,32,122,4,32,105,110, - 32,41,7,218,12,77,65,71,73,67,95,78,85,77,66,69, - 82,114,145,0,0,0,218,16,95,118,101,114,98,111,115,101, - 95,109,101,115,115,97,103,101,114,128,0,0,0,114,4,0, - 0,0,218,8,69,79,70,69,114,114,111,114,114,42,0,0, - 0,41,6,114,41,0,0,0,114,127,0,0,0,218,11,101, - 120,99,95,100,101,116,97,105,108,115,90,5,109,97,103,105, - 99,114,104,0,0,0,114,16,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,13,95,99,108,97, - 115,115,105,102,121,95,112,121,99,37,2,0,0,115,30,0, - 0,0,12,16,8,1,16,1,12,1,16,1,12,1,10,1, - 12,1,8,1,16,1,8,2,16,1,16,1,4,1,255,128, - 114,162,0,0,0,99,5,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,124, - 0,0,0,116,0,124,0,100,1,100,2,133,2,25,0,131, - 1,124,1,100,3,64,0,107,3,114,31,100,4,124,3,155, - 2,157,2,125,5,116,1,160,2,100,5,124,5,161,2,1, - 0,116,3,124,5,102,1,105,0,124,4,164,1,142,1,130, - 1,124,2,100,6,117,1,114,60,116,0,124,0,100,2,100, - 7,133,2,25,0,131,1,124,2,100,3,64,0,107,3,114, - 58,116,3,100,4,124,3,155,2,157,2,102,1,105,0,124, - 4,164,1,142,1,130,1,100,6,83,0,100,6,83,0,41, - 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, - 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, - 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, - 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, + 97,116,104,114,74,0,0,0,218,10,114,112,97,114,116,105, + 116,105,111,110,114,15,0,0,0,218,14,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,218,9,99,97,99,104,101, + 95,116,97,103,218,19,78,111,116,73,109,112,108,101,109,101, + 110,116,101,100,69,114,114,111,114,114,62,0,0,0,114,16, + 0,0,0,218,8,111,112,116,105,109,105,122,101,218,3,115, + 116,114,218,7,105,115,97,108,110,117,109,218,10,86,97,108, + 117,101,69,114,114,111,114,114,89,0,0,0,218,4,95,79, + 80,84,218,17,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,218,14,112,121,99,97,99,104,101,95,112, + 114,101,102,105,120,114,86,0,0,0,114,67,0,0,0,114, + 82,0,0,0,114,50,0,0,0,218,6,108,115,116,114,105, + 112,218,8,95,80,89,67,65,67,72,69,41,12,114,65,0, + 0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105, + 100,101,114,96,0,0,0,218,7,109,101,115,115,97,103,101, + 218,4,104,101,97,100,114,66,0,0,0,90,4,98,97,115, + 101,114,6,0,0,0,218,4,114,101,115,116,90,3,116,97, + 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, + 109,101,218,8,102,105,108,101,110,97,109,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,17,99,97,99, + 104,101,95,102,114,111,109,95,115,111,117,114,99,101,121,1, + 0,0,115,74,0,0,0,8,18,6,1,2,1,4,255,8, + 2,4,1,8,1,12,1,10,1,12,1,16,1,8,1,8, + 1,8,1,24,1,8,1,12,1,6,1,8,2,8,1,8, + 1,8,1,14,1,14,1,12,1,10,1,8,9,14,1,24, + 5,12,1,2,4,4,1,8,1,2,1,4,253,12,5,255, + 128,114,121,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,10,0,0,0,5,0,0,0,67,0,0,0,115, + 40,1,0,0,116,0,106,1,106,2,100,1,117,0,114,10, + 116,3,100,2,131,1,130,1,116,4,160,5,124,0,161,1, + 125,0,116,6,124,0,131,1,92,2,125,1,125,2,100,3, + 125,3,116,0,106,7,100,1,117,1,114,51,116,0,106,7, + 160,8,116,9,161,1,125,4,124,1,160,10,124,4,116,11, + 23,0,161,1,114,51,124,1,116,12,124,4,131,1,100,1, + 133,2,25,0,125,1,100,4,125,3,124,3,115,72,116,6, + 124,1,131,1,92,2,125,1,125,5,124,5,116,13,107,3, + 114,72,116,14,116,13,155,0,100,5,124,0,155,2,157,3, + 131,1,130,1,124,2,160,15,100,6,161,1,125,6,124,6, + 100,7,118,1,114,88,116,14,100,8,124,2,155,2,157,2, + 131,1,130,1,124,6,100,9,107,2,114,132,124,2,160,16, + 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10, + 116,17,161,1,115,112,116,14,100,12,116,17,155,2,157,2, + 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2, + 25,0,125,8,124,8,160,18,161,0,115,132,116,14,100,13, + 124,7,155,2,100,14,157,3,131,1,130,1,124,2,160,19, + 100,6,161,1,100,15,25,0,125,9,116,20,124,1,124,9, + 116,21,100,15,25,0,23,0,131,2,83,0,41,16,97,110, + 1,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,97,32,46,112,121,99,46,32,102,105,108, + 101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,105,116,115,32,46,112,121,32,102,105, + 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, + 99,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32, + 110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116, + 104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114, + 110,115,32,116,104,101,32,112,97,116,104,32,116,111,10,32, + 32,32,32,116,104,101,32,46,112,121,32,102,105,108,101,32, + 99,97,108,99,117,108,97,116,101,100,32,116,111,32,99,111, + 114,114,101,115,112,111,110,100,32,116,111,32,116,104,101,32, + 46,112,121,99,32,102,105,108,101,46,32,32,73,102,32,112, + 97,116,104,32,100,111,101,115,10,32,32,32,32,110,111,116, + 32,99,111,110,102,111,114,109,32,116,111,32,80,69,80,32, + 51,49,52,55,47,52,56,56,32,102,111,114,109,97,116,44, + 32,86,97,108,117,101,69,114,114,111,114,32,119,105,108,108, + 32,98,101,32,114,97,105,115,101,100,46,32,73,102,10,32, + 32,32,32,115,121,115,46,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, + 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, + 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, + 32,78,114,98,0,0,0,70,84,122,31,32,110,111,116,32, + 98,111,116,116,111,109,45,108,101,118,101,108,32,100,105,114, + 101,99,116,111,114,121,32,105,110,32,114,97,0,0,0,62, + 2,0,0,0,114,44,0,0,0,233,3,0,0,0,122,29, + 101,120,112,101,99,116,101,100,32,111,110,108,121,32,50,32, + 111,114,32,51,32,100,111,116,115,32,105,110,32,114,122,0, + 0,0,114,44,0,0,0,233,254,255,255,255,122,53,111,112, + 116,105,109,105,122,97,116,105,111,110,32,112,111,114,116,105, + 111,110,32,111,102,32,102,105,108,101,110,97,109,101,32,100, + 111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105, + 116,104,32,122,19,111,112,116,105,109,105,122,97,116,105,111, + 110,32,108,101,118,101,108,32,122,29,32,105,115,32,110,111, + 116,32,97,110,32,97,108,112,104,97,110,117,109,101,114,105, + 99,32,118,97,108,117,101,114,0,0,0,0,41,22,114,15, + 0,0,0,114,105,0,0,0,114,106,0,0,0,114,107,0, + 0,0,114,18,0,0,0,114,103,0,0,0,114,74,0,0, + 0,114,114,0,0,0,114,49,0,0,0,114,50,0,0,0, + 114,26,0,0,0,114,59,0,0,0,114,4,0,0,0,114, + 116,0,0,0,114,111,0,0,0,218,5,99,111,117,110,116, + 218,6,114,115,112,108,105,116,114,112,0,0,0,114,110,0, + 0,0,218,9,112,97,114,116,105,116,105,111,110,114,67,0, + 0,0,218,15,83,79,85,82,67,69,95,83,85,70,70,73, + 88,69,83,41,10,114,65,0,0,0,114,118,0,0,0,90, + 16,112,121,99,97,99,104,101,95,102,105,108,101,110,97,109, + 101,90,23,102,111,117,110,100,95,105,110,95,112,121,99,97, + 99,104,101,95,112,114,101,102,105,120,90,13,115,116,114,105, + 112,112,101,100,95,112,97,116,104,90,7,112,121,99,97,99, + 104,101,90,9,100,111,116,95,99,111,117,110,116,114,96,0, + 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, + 97,115,101,95,102,105,108,101,110,97,109,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,17,115,111,117, + 114,99,101,95,102,114,111,109,95,99,97,99,104,101,192,1, + 0,0,115,62,0,0,0,12,9,8,1,10,1,12,1,4, + 1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,8, + 1,8,1,2,1,8,255,10,2,8,1,14,1,8,1,16, + 1,10,1,4,1,2,1,8,255,16,2,8,1,16,1,14, + 2,18,1,255,128,114,128,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,9,0,0,0,67, + 0,0,0,115,122,0,0,0,116,0,124,0,131,1,100,1, + 107,2,114,8,100,2,83,0,124,0,160,1,100,3,161,1, + 92,3,125,1,125,2,125,3,124,1,114,28,124,3,160,2, + 161,0,100,4,100,5,133,2,25,0,100,6,107,3,114,30, + 124,0,83,0,122,6,116,3,124,0,131,1,125,4,87,0, + 110,15,4,0,116,4,116,5,102,2,121,60,1,0,1,0, + 1,0,124,0,100,2,100,5,133,2,25,0,125,4,89,0, + 116,6,124,4,131,1,114,58,124,4,83,0,124,0,83,0, + 119,0,41,7,122,188,67,111,110,118,101,114,116,32,97,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,97, + 116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,112, + 97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,101, + 41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, + 99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,114, + 101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,100, + 115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,32, + 102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,116, + 95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,87, + 105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,105, + 110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,32, + 32,32,114,0,0,0,0,78,114,97,0,0,0,233,253,255, + 255,255,233,255,255,255,255,90,2,112,121,41,7,114,4,0, + 0,0,114,104,0,0,0,218,5,108,111,119,101,114,114,128, + 0,0,0,114,107,0,0,0,114,111,0,0,0,114,80,0, + 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, + 97,116,104,114,119,0,0,0,218,1,95,90,9,101,120,116, + 101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,112, + 97,116,104,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,15,95,103,101,116,95,115,111,117,114,99,101,102, + 105,108,101,232,1,0,0,115,24,0,0,0,12,7,4,1, + 16,1,24,1,4,1,2,1,12,1,16,1,14,1,16,1, + 2,254,255,128,114,135,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, + 0,0,115,68,0,0,0,124,0,160,0,116,1,116,2,131, + 1,161,1,114,22,122,5,116,3,124,0,131,1,87,0,83, + 0,4,0,116,4,121,33,1,0,1,0,1,0,89,0,100, + 0,83,0,124,0,160,0,116,1,116,5,131,1,161,1,114, + 31,124,0,83,0,100,0,83,0,119,0,114,69,0,0,0, + 41,6,114,58,0,0,0,218,5,116,117,112,108,101,114,127, + 0,0,0,114,121,0,0,0,114,107,0,0,0,114,113,0, + 0,0,41,1,114,120,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,11,95,103,101,116,95,99, + 97,99,104,101,100,251,1,0,0,115,20,0,0,0,14,1, + 2,1,10,1,12,1,6,1,14,1,4,1,4,2,2,251, + 255,128,114,137,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,0, + 115,48,0,0,0,122,7,116,0,124,0,131,1,106,1,125, + 1,87,0,110,9,4,0,116,2,121,23,1,0,1,0,1, + 0,100,1,125,1,89,0,124,1,100,2,79,0,125,1,124, + 1,83,0,119,0,41,4,122,51,67,97,108,99,117,108,97, + 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109, + 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,46,114,87,0,0, + 0,233,128,0,0,0,78,41,3,114,75,0,0,0,114,77, + 0,0,0,114,76,0,0,0,41,2,114,65,0,0,0,114, + 78,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,7, + 2,0,0,115,16,0,0,0,2,2,14,1,12,1,6,1, + 8,3,4,1,2,251,255,128,114,139,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, + 0,0,3,0,0,0,115,52,0,0,0,100,6,135,0,102, + 1,100,2,100,3,132,9,125,1,116,0,100,1,117,1,114, + 15,116,0,106,1,125,2,110,4,100,4,100,5,132,0,125, + 2,124,2,124,1,136,0,131,2,1,0,124,1,83,0,41, + 7,122,252,68,101,99,111,114,97,116,111,114,32,116,111,32, + 118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32, + 109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,113, + 117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,116, + 104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,108, + 111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,101, + 46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,116, + 32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,41, + 32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,97, + 109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,99, + 111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,10, + 32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,97, + 105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,109, + 112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,104, + 101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, + 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,31,0,0,0,115,72,0,0,0,124,1, + 100,0,117,0,114,8,124,0,106,0,125,1,110,16,124,0, + 106,0,124,1,107,3,114,24,116,1,100,1,124,0,106,0, + 124,1,102,2,22,0,124,1,100,2,141,2,130,1,136,0, + 124,0,124,1,103,2,124,2,162,1,82,0,105,0,124,3, + 164,1,142,1,83,0,41,3,78,122,30,108,111,97,100,101, + 114,32,102,111,114,32,37,115,32,99,97,110,110,111,116,32, + 104,97,110,100,108,101,32,37,115,169,1,218,4,110,97,109, + 101,41,2,114,141,0,0,0,218,11,73,109,112,111,114,116, + 69,114,114,111,114,41,4,218,4,115,101,108,102,114,141,0, + 0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,115, + 169,1,218,6,109,101,116,104,111,100,114,7,0,0,0,114, + 8,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, + 101,95,119,114,97,112,112,101,114,27,2,0,0,115,20,0, + 0,0,8,1,8,1,10,1,4,1,8,1,2,255,2,1, + 6,255,24,2,255,128,122,40,95,99,104,101,99,107,95,110, + 97,109,101,46,60,108,111,99,97,108,115,62,46,95,99,104, + 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, + 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,7,0,0,0,83,0,0,0,115,56,0,0,0,100,1, + 68,0,93,16,125,2,116,0,124,1,124,2,131,2,114,18, + 116,1,124,0,124,2,116,2,124,1,124,2,131,2,131,3, + 1,0,113,2,124,0,106,3,160,4,124,1,106,3,161,1, + 1,0,100,0,83,0,41,2,78,41,4,218,10,95,95,109, + 111,100,117,108,101,95,95,218,8,95,95,110,97,109,101,95, + 95,218,12,95,95,113,117,97,108,110,97,109,101,95,95,218, + 7,95,95,100,111,99,95,95,41,5,218,7,104,97,115,97, + 116,116,114,218,7,115,101,116,97,116,116,114,218,7,103,101, + 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, + 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, + 111,108,100,114,85,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,5,95,119,114,97,112,40,2, + 0,0,115,12,0,0,0,8,1,10,1,18,1,2,128,18, + 1,255,128,122,26,95,99,104,101,99,107,95,110,97,109,101, + 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,41, + 1,78,41,2,218,10,95,98,111,111,116,115,116,114,97,112, + 114,158,0,0,0,41,3,114,147,0,0,0,114,148,0,0, + 0,114,158,0,0,0,114,7,0,0,0,114,146,0,0,0, + 114,8,0,0,0,218,11,95,99,104,101,99,107,95,110,97, + 109,101,19,2,0,0,115,14,0,0,0,14,8,8,10,8, + 1,8,2,10,6,4,1,255,128,114,160,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, + 0,0,0,67,0,0,0,115,72,0,0,0,116,0,160,1, + 100,1,116,2,161,2,1,0,124,0,160,3,124,1,161,1, + 92,2,125,2,125,3,124,2,100,2,117,0,114,34,116,4, + 124,3,131,1,114,34,100,3,125,4,116,0,160,1,124,4, + 160,5,124,3,100,4,25,0,161,1,116,6,161,2,1,0, + 124,2,83,0,41,5,122,155,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, + 111,100,117,108,101,32,98,121,32,100,101,108,101,103,97,116, + 105,110,103,32,116,111,10,32,32,32,32,115,101,108,102,46, + 102,105,110,100,95,108,111,97,100,101,114,40,41,46,10,10, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,105,110, + 32,102,97,118,111,114,32,111,102,32,102,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,40,41,46,10,10,32, + 32,32,32,122,90,102,105,110,100,95,109,111,100,117,108,101, + 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, + 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, + 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, + 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, + 122,44,78,111,116,32,105,109,112,111,114,116,105,110,103,32, + 100,105,114,101,99,116,111,114,121,32,123,125,58,32,109,105, + 115,115,105,110,103,32,95,95,105,110,105,116,95,95,114,0, + 0,0,0,41,7,114,99,0,0,0,114,100,0,0,0,114, + 101,0,0,0,218,11,102,105,110,100,95,108,111,97,100,101, + 114,114,4,0,0,0,114,89,0,0,0,218,13,73,109,112, + 111,114,116,87,97,114,110,105,110,103,41,5,114,143,0,0, + 0,218,8,102,117,108,108,110,97,109,101,218,6,108,111,97, + 100,101,114,218,8,112,111,114,116,105,111,110,115,218,3,109, + 115,103,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,17,95,102,105,110,100,95,109,111,100,117,108,101,95, + 115,104,105,109,50,2,0,0,115,18,0,0,0,6,7,2, + 2,4,254,14,6,16,1,4,1,22,1,4,1,255,128,114, + 167,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,4,0,0,0,67,0,0,0,115,166,0, + 0,0,124,0,100,1,100,2,133,2,25,0,125,3,124,3, + 116,0,107,3,114,32,100,3,124,1,155,2,100,4,124,3, + 155,2,157,4,125,4,116,1,160,2,100,5,124,4,161,2, + 1,0,116,3,124,4,102,1,105,0,124,2,164,1,142,1, + 130,1,116,4,124,0,131,1,100,6,107,0,114,53,100,7, + 124,1,155,2,157,2,125,4,116,1,160,2,100,5,124,4, + 161,2,1,0,116,5,124,4,131,1,130,1,116,6,124,0, + 100,2,100,8,133,2,25,0,131,1,125,5,124,5,100,9, + 64,0,114,81,100,10,124,5,155,2,100,11,124,1,155,2, + 157,4,125,4,116,3,124,4,102,1,105,0,124,2,164,1, + 142,1,130,1,124,5,83,0,41,12,97,84,2,0,0,80, + 101,114,102,111,114,109,32,98,97,115,105,99,32,118,97,108, + 105,100,105,116,121,32,99,104,101,99,107,105,110,103,32,111, + 102,32,97,32,112,121,99,32,104,101,97,100,101,114,32,97, + 110,100,32,114,101,116,117,114,110,32,116,104,101,32,102,108, + 97,103,115,32,102,105,101,108,100,44,10,32,32,32,32,119, + 104,105,99,104,32,100,101,116,101,114,109,105,110,101,115,32, + 104,111,119,32,116,104,101,32,112,121,99,32,115,104,111,117, + 108,100,32,98,101,32,102,117,114,116,104,101,114,32,118,97, + 108,105,100,97,116,101,100,32,97,103,97,105,110,115,116,32, + 116,104,101,32,115,111,117,114,99,101,46,10,10,32,32,32, 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, - 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, - 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, - 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, - 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, - 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, - 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, - 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, - 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, - 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, - 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, - 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, - 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, - 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, - 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, - 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, - 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, - 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, - 32,115,116,97,108,101,46,10,10,32,32,32,32,114,156,0, - 0,0,233,12,0,0,0,114,30,0,0,0,122,22,98,121, - 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, - 102,111,114,32,114,154,0,0,0,78,114,155,0,0,0,41, - 4,114,42,0,0,0,114,145,0,0,0,114,159,0,0,0, - 114,128,0,0,0,41,6,114,41,0,0,0,218,12,115,111, - 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, - 99,101,95,115,105,122,101,114,127,0,0,0,114,161,0,0, - 0,114,104,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,23,95,118,97,108,105,100,97,116,101, - 95,116,105,109,101,115,116,97,109,112,95,112,121,99,70,2, - 0,0,115,20,0,0,0,24,19,10,1,12,1,16,1,8, - 1,22,1,2,255,22,2,8,254,255,128,114,166,0,0,0, - 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,4,0,0,0,67,0,0,0,115,42,0,0,0,124,0, - 100,1,100,2,133,2,25,0,124,1,107,3,114,19,116,0, - 100,3,124,2,155,2,157,2,102,1,105,0,124,3,164,1, - 142,1,130,1,100,4,83,0,41,5,97,243,1,0,0,86, - 97,108,105,100,97,116,101,32,97,32,104,97,115,104,45,98, - 97,115,101,100,32,112,121,99,32,98,121,32,99,104,101,99, - 107,105,110,103,32,116,104,101,32,114,101,97,108,32,115,111, - 117,114,99,101,32,104,97,115,104,32,97,103,97,105,110,115, - 116,32,116,104,101,32,111,110,101,32,105,110,10,32,32,32, - 32,116,104,101,32,112,121,99,32,104,101,97,100,101,114,46, + 101,100,44,32,116,104,111,117,103,104,46,41,10,10,32,32, + 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, + 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, + 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, + 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, + 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, + 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, + 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, + 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, + 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, + 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, + 32,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, + 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,115, + 32,105,110,99,111,114,114,101,99,116,32,111,114,32,119,104, + 101,110,32,116,104,101,32,102,108,97,103,115,10,32,32,32, + 32,102,105,101,108,100,32,105,115,32,105,110,118,97,108,105, + 100,46,32,69,79,70,69,114,114,111,114,32,105,115,32,114, + 97,105,115,101,100,32,119,104,101,110,32,116,104,101,32,100, + 97,116,97,32,105,115,32,102,111,117,110,100,32,116,111,32, + 98,101,32,116,114,117,110,99,97,116,101,100,46,10,10,32, + 32,32,32,78,114,31,0,0,0,122,20,98,97,100,32,109, + 97,103,105,99,32,110,117,109,98,101,114,32,105,110,32,122, + 2,58,32,250,2,123,125,233,16,0,0,0,122,40,114,101, + 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, + 114,101,97,100,105,110,103,32,112,121,99,32,104,101,97,100, + 101,114,32,111,102,32,233,8,0,0,0,233,252,255,255,255, + 122,14,105,110,118,97,108,105,100,32,102,108,97,103,115,32, + 122,4,32,105,110,32,41,7,218,12,77,65,71,73,67,95, + 78,85,77,66,69,82,114,159,0,0,0,218,16,95,118,101, + 114,98,111,115,101,95,109,101,115,115,97,103,101,114,142,0, + 0,0,114,4,0,0,0,218,8,69,79,70,69,114,114,111, + 114,114,42,0,0,0,41,6,114,41,0,0,0,114,141,0, + 0,0,218,11,101,120,99,95,100,101,116,97,105,108,115,90, + 5,109,97,103,105,99,114,117,0,0,0,114,16,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 13,95,99,108,97,115,115,105,102,121,95,112,121,99,70,2, + 0,0,115,30,0,0,0,12,16,8,1,16,1,12,1,16, + 1,12,1,10,1,12,1,8,1,16,1,8,2,16,1,16, + 1,4,1,255,128,114,176,0,0,0,99,5,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,67, + 0,0,0,115,124,0,0,0,116,0,124,0,100,1,100,2, + 133,2,25,0,131,1,124,1,100,3,64,0,107,3,114,31, + 100,4,124,3,155,2,157,2,125,5,116,1,160,2,100,5, + 124,5,161,2,1,0,116,3,124,5,102,1,105,0,124,4, + 164,1,142,1,130,1,124,2,100,6,117,1,114,60,116,0, + 124,0,100,2,100,7,133,2,25,0,131,1,124,2,100,3, + 64,0,107,3,114,58,116,3,100,4,124,3,155,2,157,2, + 102,1,105,0,124,4,164,1,142,1,130,1,100,6,83,0, + 100,6,83,0,41,8,97,7,2,0,0,86,97,108,105,100, + 97,116,101,32,97,32,112,121,99,32,97,103,97,105,110,115, + 116,32,116,104,101,32,115,111,117,114,99,101,32,108,97,115, + 116,45,109,111,100,105,102,105,101,100,32,116,105,109,101,46, 10,10,32,32,32,32,42,100,97,116,97,42,32,105,115,32, 116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32, 116,104,101,32,112,121,99,32,102,105,108,101,46,32,40,79, 110,108,121,32,116,104,101,32,102,105,114,115,116,32,49,54, 32,98,121,116,101,115,32,97,114,101,10,32,32,32,32,114, 101,113,117,105,114,101,100,46,41,10,10,32,32,32,32,42, - 115,111,117,114,99,101,95,104,97,115,104,42,32,105,115,32, - 116,104,101,32,105,109,112,111,114,116,108,105,98,46,117,116, - 105,108,46,115,111,117,114,99,101,95,104,97,115,104,40,41, - 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,102, - 105,108,101,46,10,10,32,32,32,32,42,110,97,109,101,42, + 115,111,117,114,99,101,95,109,116,105,109,101,42,32,105,115, + 32,116,104,101,32,108,97,115,116,32,109,111,100,105,102,105, + 101,100,32,116,105,109,101,115,116,97,109,112,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,46, + 10,10,32,32,32,32,42,115,111,117,114,99,101,95,115,105, + 122,101,42,32,105,115,32,78,111,110,101,32,111,114,32,116, + 104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,32,105,110,32,98,121, + 116,101,115,46,10,10,32,32,32,32,42,110,97,109,101,42, 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, @@ -833,1669 +829,1728 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, 101,100,32,105,102,32,116,104,101,32,98,121,116,101,99,111, 100,101,32,105,115,32,115,116,97,108,101,46,10,10,32,32, - 32,32,114,156,0,0,0,114,155,0,0,0,122,46,104,97, - 115,104,32,105,110,32,98,121,116,101,99,111,100,101,32,100, - 111,101,115,110,39,116,32,109,97,116,99,104,32,104,97,115, - 104,32,111,102,32,115,111,117,114,99,101,32,78,41,1,114, - 128,0,0,0,41,4,114,41,0,0,0,218,11,115,111,117, - 114,99,101,95,104,97,115,104,114,127,0,0,0,114,161,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,18,95,118,97,108,105,100,97,116,101,95,104,97,115, - 104,95,112,121,99,98,2,0,0,115,16,0,0,0,16,17, - 2,1,8,1,4,255,2,2,6,254,4,255,255,128,114,168, - 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,5,0,0,0,67,0,0,0,115,76,0,0, - 0,116,0,160,1,124,0,161,1,125,4,116,2,124,4,116, - 3,131,2,114,28,116,4,160,5,100,1,124,2,161,2,1, - 0,124,3,100,2,117,1,114,26,116,6,160,7,124,4,124, - 3,161,2,1,0,124,4,83,0,116,8,100,3,160,9,124, - 2,161,1,124,1,124,2,100,4,141,3,130,1,41,5,122, - 35,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, - 101,32,97,115,32,102,111,117,110,100,32,105,110,32,97,32, - 112,121,99,46,122,21,99,111,100,101,32,111,98,106,101,99, - 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, - 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, - 32,123,33,114,125,169,2,114,127,0,0,0,114,57,0,0, - 0,41,10,218,7,109,97,114,115,104,97,108,90,5,108,111, - 97,100,115,218,10,105,115,105,110,115,116,97,110,99,101,218, - 10,95,99,111,100,101,95,116,121,112,101,114,145,0,0,0, - 114,159,0,0,0,218,4,95,105,109,112,90,16,95,102,105, - 120,95,99,111,95,102,105,108,101,110,97,109,101,114,128,0, - 0,0,114,76,0,0,0,41,5,114,41,0,0,0,114,127, - 0,0,0,114,117,0,0,0,114,118,0,0,0,218,4,99, - 111,100,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,17,95,99,111,109,112,105,108,101,95,98,121,116, - 101,99,111,100,101,122,2,0,0,115,20,0,0,0,10,2, - 10,1,12,1,8,1,12,1,4,1,10,2,4,1,6,255, - 255,128,114,175,0,0,0,99,3,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,0, - 115,70,0,0,0,116,0,116,1,131,1,125,3,124,3,160, - 2,116,3,100,1,131,1,161,1,1,0,124,3,160,2,116, - 3,124,1,131,1,161,1,1,0,124,3,160,2,116,3,124, - 2,131,1,161,1,1,0,124,3,160,2,116,4,160,5,124, - 0,161,1,161,1,1,0,124,3,83,0,41,3,122,43,80, - 114,111,100,117,99,101,32,116,104,101,32,100,97,116,97,32, - 102,111,114,32,97,32,116,105,109,101,115,116,97,109,112,45, - 98,97,115,101,100,32,112,121,99,46,114,0,0,0,0,78, - 41,6,218,9,98,121,116,101,97,114,114,97,121,114,158,0, - 0,0,218,6,101,120,116,101,110,100,114,36,0,0,0,114, - 170,0,0,0,218,5,100,117,109,112,115,41,4,114,174,0, - 0,0,218,5,109,116,105,109,101,114,165,0,0,0,114,41, + 32,32,114,170,0,0,0,233,12,0,0,0,114,30,0,0, + 0,122,22,98,121,116,101,99,111,100,101,32,105,115,32,115, + 116,97,108,101,32,102,111,114,32,114,168,0,0,0,78,114, + 169,0,0,0,41,4,114,42,0,0,0,114,159,0,0,0, + 114,173,0,0,0,114,142,0,0,0,41,6,114,41,0,0, + 0,218,12,115,111,117,114,99,101,95,109,116,105,109,101,218, + 11,115,111,117,114,99,101,95,115,105,122,101,114,141,0,0, + 0,114,175,0,0,0,114,117,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,23,95,118,97,108, + 105,100,97,116,101,95,116,105,109,101,115,116,97,109,112,95, + 112,121,99,103,2,0,0,115,20,0,0,0,24,19,10,1, + 12,1,16,1,8,1,22,1,2,255,22,2,8,254,255,128, + 114,180,0,0,0,99,4,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,42, + 0,0,0,124,0,100,1,100,2,133,2,25,0,124,1,107, + 3,114,19,116,0,100,3,124,2,155,2,157,2,102,1,105, + 0,124,3,164,1,142,1,130,1,100,4,83,0,41,5,97, + 243,1,0,0,86,97,108,105,100,97,116,101,32,97,32,104, + 97,115,104,45,98,97,115,101,100,32,112,121,99,32,98,121, + 32,99,104,101,99,107,105,110,103,32,116,104,101,32,114,101, + 97,108,32,115,111,117,114,99,101,32,104,97,115,104,32,97, + 103,97,105,110,115,116,32,116,104,101,32,111,110,101,32,105, + 110,10,32,32,32,32,116,104,101,32,112,121,99,32,104,101, + 97,100,101,114,46,10,10,32,32,32,32,42,100,97,116,97, + 42,32,105,115,32,116,104,101,32,99,111,110,116,101,110,116, + 115,32,111,102,32,116,104,101,32,112,121,99,32,102,105,108, + 101,46,32,40,79,110,108,121,32,116,104,101,32,102,105,114, + 115,116,32,49,54,32,98,121,116,101,115,32,97,114,101,10, + 32,32,32,32,114,101,113,117,105,114,101,100,46,41,10,10, + 32,32,32,32,42,115,111,117,114,99,101,95,104,97,115,104, + 42,32,105,115,32,116,104,101,32,105,109,112,111,114,116,108, + 105,98,46,117,116,105,108,46,115,111,117,114,99,101,95,104, + 97,115,104,40,41,32,111,102,32,116,104,101,32,115,111,117, + 114,99,101,32,102,105,108,101,46,10,10,32,32,32,32,42, + 110,97,109,101,42,32,105,115,32,116,104,101,32,110,97,109, + 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, + 98,101,105,110,103,32,105,109,112,111,114,116,101,100,46,32, + 73,116,32,105,115,32,117,115,101,100,32,102,111,114,32,108, + 111,103,103,105,110,103,46,10,10,32,32,32,32,42,101,120, + 99,95,100,101,116,97,105,108,115,42,32,105,115,32,97,32, + 100,105,99,116,105,111,110,97,114,121,32,112,97,115,115,101, + 100,32,116,111,32,73,109,112,111,114,116,69,114,114,111,114, + 32,105,102,32,105,116,32,114,97,105,115,101,100,32,102,111, + 114,10,32,32,32,32,105,109,112,114,111,118,101,100,32,100, + 101,98,117,103,103,105,110,103,46,10,10,32,32,32,32,65, + 110,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,32,105,102,32,116,104,101,32,98, + 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, + 46,10,10,32,32,32,32,114,170,0,0,0,114,169,0,0, + 0,122,46,104,97,115,104,32,105,110,32,98,121,116,101,99, + 111,100,101,32,100,111,101,115,110,39,116,32,109,97,116,99, + 104,32,104,97,115,104,32,111,102,32,115,111,117,114,99,101, + 32,78,41,1,114,142,0,0,0,41,4,114,41,0,0,0, + 218,11,115,111,117,114,99,101,95,104,97,115,104,114,141,0, + 0,0,114,175,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,18,95,118,97,108,105,100,97,116, + 101,95,104,97,115,104,95,112,121,99,131,2,0,0,115,16, + 0,0,0,16,17,2,1,8,1,4,255,2,2,6,254,4, + 255,255,128,114,182,0,0,0,99,4,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, + 0,115,76,0,0,0,116,0,160,1,124,0,161,1,125,4, + 116,2,124,4,116,3,131,2,114,28,116,4,160,5,100,1, + 124,2,161,2,1,0,124,3,100,2,117,1,114,26,116,6, + 160,7,124,4,124,3,161,2,1,0,124,4,83,0,116,8, + 100,3,160,9,124,2,161,1,124,1,124,2,100,4,141,3, + 130,1,41,5,122,35,67,111,109,112,105,108,101,32,98,121, + 116,101,99,111,100,101,32,97,115,32,102,111,117,110,100,32, + 105,110,32,97,32,112,121,99,46,122,21,99,111,100,101,32, + 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, + 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, + 99,116,32,105,110,32,123,33,114,125,169,2,114,141,0,0, + 0,114,65,0,0,0,41,10,218,7,109,97,114,115,104,97, + 108,90,5,108,111,97,100,115,218,10,105,115,105,110,115,116, + 97,110,99,101,218,10,95,99,111,100,101,95,116,121,112,101, + 114,159,0,0,0,114,173,0,0,0,218,4,95,105,109,112, + 90,16,95,102,105,120,95,99,111,95,102,105,108,101,110,97, + 109,101,114,142,0,0,0,114,89,0,0,0,41,5,114,41, + 0,0,0,114,141,0,0,0,114,132,0,0,0,114,134,0, + 0,0,218,4,99,111,100,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,17,95,99,111,109,112,105,108, + 101,95,98,121,116,101,99,111,100,101,155,2,0,0,115,20, + 0,0,0,10,2,10,1,12,1,8,1,12,1,4,1,10, + 2,4,1,6,255,255,128,114,189,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0, + 0,67,0,0,0,115,70,0,0,0,116,0,116,1,131,1, + 125,3,124,3,160,2,116,3,100,1,131,1,161,1,1,0, + 124,3,160,2,116,3,124,1,131,1,161,1,1,0,124,3, + 160,2,116,3,124,2,131,1,161,1,1,0,124,3,160,2, + 116,4,160,5,124,0,161,1,161,1,1,0,124,3,83,0, + 41,3,122,43,80,114,111,100,117,99,101,32,116,104,101,32, + 100,97,116,97,32,102,111,114,32,97,32,116,105,109,101,115, + 116,97,109,112,45,98,97,115,101,100,32,112,121,99,46,114, + 0,0,0,0,78,41,6,218,9,98,121,116,101,97,114,114, + 97,121,114,172,0,0,0,218,6,101,120,116,101,110,100,114, + 36,0,0,0,114,184,0,0,0,218,5,100,117,109,112,115, + 41,4,114,188,0,0,0,218,5,109,116,105,109,101,114,179, + 0,0,0,114,41,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,22,95,99,111,100,101,95,116, + 111,95,116,105,109,101,115,116,97,109,112,95,112,121,99,168, + 2,0,0,115,14,0,0,0,8,2,14,1,14,1,14,1, + 16,1,4,1,255,128,114,194,0,0,0,84,99,3,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,80,0,0,0,116,0,116,1,131,1, + 125,3,100,1,124,2,100,1,62,0,66,0,125,4,124,3, + 160,2,116,3,124,4,131,1,161,1,1,0,116,4,124,1, + 131,1,100,2,107,2,115,25,74,0,130,1,124,3,160,2, + 124,1,161,1,1,0,124,3,160,2,116,5,160,6,124,0, + 161,1,161,1,1,0,124,3,83,0,41,4,122,38,80,114, + 111,100,117,99,101,32,116,104,101,32,100,97,116,97,32,102, + 111,114,32,97,32,104,97,115,104,45,98,97,115,101,100,32, + 112,121,99,46,114,3,0,0,0,114,170,0,0,0,78,41, + 7,114,190,0,0,0,114,172,0,0,0,114,191,0,0,0, + 114,36,0,0,0,114,4,0,0,0,114,184,0,0,0,114, + 192,0,0,0,41,5,114,188,0,0,0,114,181,0,0,0, + 90,7,99,104,101,99,107,101,100,114,41,0,0,0,114,16, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,109, - 101,115,116,97,109,112,95,112,121,99,135,2,0,0,115,14, - 0,0,0,8,2,14,1,14,1,14,1,16,1,4,1,255, - 128,114,180,0,0,0,84,99,3,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, - 115,80,0,0,0,116,0,116,1,131,1,125,3,100,1,124, - 2,100,1,62,0,66,0,125,4,124,3,160,2,116,3,124, - 4,131,1,161,1,1,0,116,4,124,1,131,1,100,2,107, - 2,115,25,74,0,130,1,124,3,160,2,124,1,161,1,1, - 0,124,3,160,2,116,5,160,6,124,0,161,1,161,1,1, - 0,124,3,83,0,41,4,122,38,80,114,111,100,117,99,101, - 32,116,104,101,32,100,97,116,97,32,102,111,114,32,97,32, - 104,97,115,104,45,98,97,115,101,100,32,112,121,99,46,114, - 3,0,0,0,114,156,0,0,0,78,41,7,114,176,0,0, - 0,114,158,0,0,0,114,177,0,0,0,114,36,0,0,0, - 114,4,0,0,0,114,170,0,0,0,114,178,0,0,0,41, - 5,114,174,0,0,0,114,167,0,0,0,90,7,99,104,101, - 99,107,101,100,114,41,0,0,0,114,16,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,17,95, - 99,111,100,101,95,116,111,95,104,97,115,104,95,112,121,99, - 145,2,0,0,115,16,0,0,0,8,2,12,1,14,1,16, - 1,10,1,16,1,4,1,255,128,114,181,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, - 0,0,0,67,0,0,0,115,62,0,0,0,100,1,100,2, - 108,0,125,1,116,1,160,2,124,0,161,1,106,3,125,2, - 124,1,160,4,124,2,161,1,125,3,116,1,160,5,100,2, - 100,3,161,2,125,4,124,4,160,6,124,0,160,6,124,3, - 100,1,25,0,161,1,161,1,83,0,41,4,122,121,68,101, - 99,111,100,101,32,98,121,116,101,115,32,114,101,112,114,101, - 115,101,110,116,105,110,103,32,115,111,117,114,99,101,32,99, - 111,100,101,32,97,110,100,32,114,101,116,117,114,110,32,116, - 104,101,32,115,116,114,105,110,103,46,10,10,32,32,32,32, - 85,110,105,118,101,114,115,97,108,32,110,101,119,108,105,110, - 101,32,115,117,112,112,111,114,116,32,105,115,32,117,115,101, - 100,32,105,110,32,116,104,101,32,100,101,99,111,100,105,110, - 103,46,10,32,32,32,32,114,0,0,0,0,78,84,41,7, - 218,8,116,111,107,101,110,105,122,101,114,78,0,0,0,90, - 7,66,121,116,101,115,73,79,90,8,114,101,97,100,108,105, - 110,101,90,15,100,101,116,101,99,116,95,101,110,99,111,100, - 105,110,103,90,25,73,110,99,114,101,109,101,110,116,97,108, - 78,101,119,108,105,110,101,68,101,99,111,100,101,114,218,6, - 100,101,99,111,100,101,41,5,218,12,115,111,117,114,99,101, - 95,98,121,116,101,115,114,182,0,0,0,90,21,115,111,117, - 114,99,101,95,98,121,116,101,115,95,114,101,97,100,108,105, - 110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101, - 119,108,105,110,101,95,100,101,99,111,100,101,114,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,13,100,101, - 99,111,100,101,95,115,111,117,114,99,101,156,2,0,0,115, - 12,0,0,0,8,5,12,1,10,1,12,1,20,1,255,128, - 114,186,0,0,0,169,2,114,150,0,0,0,218,26,115,117, - 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, - 111,99,97,116,105,111,110,115,99,2,0,0,0,0,0,0, - 0,2,0,0,0,9,0,0,0,8,0,0,0,67,0,0, - 0,115,8,1,0,0,124,1,100,1,117,0,114,28,100,2, - 125,1,116,0,124,2,100,3,131,2,114,27,122,7,124,2, - 160,1,124,0,161,1,125,1,87,0,110,14,4,0,116,2, - 121,131,1,0,1,0,1,0,89,0,110,6,110,5,116,3, - 160,4,124,1,161,1,125,1,116,5,106,6,124,0,124,2, - 124,1,100,4,141,3,125,4,100,5,124,4,95,7,124,2, - 100,1,117,0,114,75,116,8,131,0,68,0,93,21,92,2, - 125,5,125,6,124,1,160,9,116,10,124,6,131,1,161,1, - 114,72,124,5,124,0,124,1,131,2,125,2,124,2,124,4, - 95,11,1,0,113,75,113,51,100,1,83,0,124,3,116,12, - 117,0,114,106,116,0,124,2,100,6,131,2,114,105,122,7, - 124,2,160,13,124,0,161,1,125,7,87,0,110,8,4,0, - 116,2,121,130,1,0,1,0,1,0,89,0,110,9,124,7, - 114,105,103,0,124,4,95,14,110,3,124,3,124,4,95,14, - 124,4,106,14,103,0,107,2,114,128,124,1,114,128,116,15, - 124,1,131,1,100,7,25,0,125,8,124,4,106,14,160,16, - 124,8,161,1,1,0,124,4,83,0,119,0,119,0,41,8, - 97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,111, - 100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,32, - 111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,105, - 111,110,46,10,10,32,32,32,32,84,111,32,105,110,100,105, - 99,97,116,101,32,116,104,97,116,32,116,104,101,32,109,111, - 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, - 101,44,32,115,101,116,10,32,32,32,32,115,117,98,109,111, - 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, - 116,105,111,110,115,32,116,111,32,97,32,108,105,115,116,32, - 111,102,32,100,105,114,101,99,116,111,114,121,32,112,97,116, - 104,115,46,32,32,65,110,10,32,32,32,32,101,109,112,116, - 121,32,108,105,115,116,32,105,115,32,115,117,102,102,105,99, - 105,101,110,116,44,32,116,104,111,117,103,104,32,105,116,115, - 32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,117, - 115,101,102,117,108,32,116,111,32,116,104,101,10,32,32,32, - 32,105,109,112,111,114,116,32,115,121,115,116,101,109,46,10, - 10,32,32,32,32,84,104,101,32,108,111,97,100,101,114,32, - 109,117,115,116,32,116,97,107,101,32,97,32,115,112,101,99, - 32,97,115,32,105,116,115,32,111,110,108,121,32,95,95,105, - 110,105,116,95,95,40,41,32,97,114,103,46,10,10,32,32, - 32,32,78,122,9,60,117,110,107,110,111,119,110,62,218,12, - 103,101,116,95,102,105,108,101,110,97,109,101,169,1,218,6, - 111,114,105,103,105,110,84,218,10,105,115,95,112,97,99,107, - 97,103,101,114,0,0,0,0,41,17,114,139,0,0,0,114, - 189,0,0,0,114,128,0,0,0,114,18,0,0,0,114,91, - 0,0,0,114,145,0,0,0,218,10,77,111,100,117,108,101, - 83,112,101,99,90,13,95,115,101,116,95,102,105,108,101,97, - 116,116,114,218,27,95,103,101,116,95,115,117,112,112,111,114, - 116,101,100,95,102,105,108,101,95,108,111,97,100,101,114,115, - 114,121,0,0,0,114,122,0,0,0,114,150,0,0,0,218, - 9,95,80,79,80,85,76,65,84,69,114,192,0,0,0,114, - 188,0,0,0,114,60,0,0,0,218,6,97,112,112,101,110, - 100,41,9,114,127,0,0,0,90,8,108,111,99,97,116,105, - 111,110,114,150,0,0,0,114,188,0,0,0,218,4,115,112, - 101,99,218,12,108,111,97,100,101,114,95,99,108,97,115,115, - 218,8,115,117,102,102,105,120,101,115,114,192,0,0,0,90, - 7,100,105,114,110,97,109,101,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,23,115,112,101,99,95,102,114, - 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, - 173,2,0,0,115,74,0,0,0,8,12,4,4,10,1,2, - 2,14,1,12,1,4,1,2,251,10,7,16,8,6,1,8, - 3,14,1,14,1,10,1,6,1,4,1,2,253,4,5,8, - 3,10,2,2,1,14,1,12,1,4,1,4,2,6,1,2, - 128,6,2,10,1,4,1,12,1,12,1,4,2,2,244,2, - 226,255,128,114,200,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, - 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, - 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, - 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, - 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, - 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, - 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, - 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, - 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, - 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, - 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, - 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, - 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, - 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, - 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, - 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, - 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, - 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, - 125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, - 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, - 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, - 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, - 120,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, - 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, - 82,82,69,78,84,95,85,83,69,82,114,63,0,0,0,90, - 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, - 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,253,2,0,0,115,12,0,0,0, - 2,2,16,1,12,1,18,1,2,255,255,128,122,36,87,105, + 0,0,218,17,95,99,111,100,101,95,116,111,95,104,97,115, + 104,95,112,121,99,178,2,0,0,115,16,0,0,0,8,2, + 12,1,14,1,16,1,10,1,16,1,4,1,255,128,114,195, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,6,0,0,0,67,0,0,0,115,62,0,0, + 0,100,1,100,2,108,0,125,1,116,1,160,2,124,0,161, + 1,106,3,125,2,124,1,160,4,124,2,161,1,125,3,116, + 1,160,5,100,2,100,3,161,2,125,4,124,4,160,6,124, + 0,160,6,124,3,100,1,25,0,161,1,161,1,83,0,41, + 4,122,121,68,101,99,111,100,101,32,98,121,116,101,115,32, + 114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,117, + 114,99,101,32,99,111,100,101,32,97,110,100,32,114,101,116, + 117,114,110,32,116,104,101,32,115,116,114,105,110,103,46,10, + 10,32,32,32,32,85,110,105,118,101,114,115,97,108,32,110, + 101,119,108,105,110,101,32,115,117,112,112,111,114,116,32,105, + 115,32,117,115,101,100,32,105,110,32,116,104,101,32,100,101, + 99,111,100,105,110,103,46,10,32,32,32,32,114,0,0,0, + 0,78,84,41,7,218,8,116,111,107,101,110,105,122,101,114, + 91,0,0,0,90,7,66,121,116,101,115,73,79,90,8,114, + 101,97,100,108,105,110,101,90,15,100,101,116,101,99,116,95, + 101,110,99,111,100,105,110,103,90,25,73,110,99,114,101,109, + 101,110,116,97,108,78,101,119,108,105,110,101,68,101,99,111, + 100,101,114,218,6,100,101,99,111,100,101,41,5,218,12,115, + 111,117,114,99,101,95,98,121,116,101,115,114,196,0,0,0, + 90,21,115,111,117,114,99,101,95,98,121,116,101,115,95,114, + 101,97,100,108,105,110,101,218,8,101,110,99,111,100,105,110, + 103,90,15,110,101,119,108,105,110,101,95,100,101,99,111,100, + 101,114,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,13,100,101,99,111,100,101,95,115,111,117,114,99,101, + 189,2,0,0,115,12,0,0,0,8,5,12,1,10,1,12, + 1,20,1,255,128,114,200,0,0,0,169,2,114,164,0,0, + 0,218,26,115,117,98,109,111,100,117,108,101,95,115,101,97, + 114,99,104,95,108,111,99,97,116,105,111,110,115,99,2,0, + 0,0,0,0,0,0,2,0,0,0,9,0,0,0,8,0, + 0,0,67,0,0,0,115,52,1,0,0,124,1,100,1,117, + 0,114,28,100,2,125,1,116,0,124,2,100,3,131,2,114, + 27,122,7,124,2,160,1,124,0,161,1,125,1,87,0,110, + 35,4,0,116,2,121,153,1,0,1,0,1,0,89,0,110, + 27,110,26,116,3,160,4,124,1,161,1,125,1,116,5,124, + 1,131,1,115,54,122,9,116,6,116,3,160,7,161,0,124, + 1,131,2,125,1,87,0,110,7,4,0,116,8,121,152,1, + 0,1,0,1,0,89,0,116,9,106,10,124,0,124,2,124, + 1,100,4,141,3,125,4,100,5,124,4,95,11,124,2,100, + 1,117,0,114,96,116,12,131,0,68,0,93,21,92,2,125, + 5,125,6,124,1,160,13,116,14,124,6,131,1,161,1,114, + 93,124,5,124,0,124,1,131,2,125,2,124,2,124,4,95, + 15,1,0,113,96,113,72,100,1,83,0,124,3,116,16,117, + 0,114,127,116,0,124,2,100,6,131,2,114,126,122,7,124, + 2,160,17,124,0,161,1,125,7,87,0,110,8,4,0,116, + 2,121,151,1,0,1,0,1,0,89,0,110,9,124,7,114, + 126,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, + 4,106,18,103,0,107,2,114,149,124,1,114,149,116,19,124, + 1,131,1,100,7,25,0,125,8,124,4,106,18,160,20,124, + 8,161,1,1,0,124,4,83,0,119,0,119,0,119,0,41, + 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, + 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, + 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, + 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, + 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, + 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, + 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, + 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, + 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, + 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, + 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, + 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, + 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, + 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, + 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, + 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, + 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, + 12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,218, + 6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,99, + 107,97,103,101,114,0,0,0,0,41,21,114,153,0,0,0, + 114,203,0,0,0,114,142,0,0,0,114,18,0,0,0,114, + 103,0,0,0,114,86,0,0,0,114,67,0,0,0,114,82, + 0,0,0,114,76,0,0,0,114,159,0,0,0,218,10,77, + 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, + 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, + 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, + 97,100,101,114,115,114,58,0,0,0,114,136,0,0,0,114, + 164,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, + 206,0,0,0,114,202,0,0,0,114,74,0,0,0,114,61, + 0,0,0,41,9,114,141,0,0,0,90,8,108,111,99,97, + 116,105,111,110,114,164,0,0,0,114,202,0,0,0,218,4, + 115,112,101,99,218,12,108,111,97,100,101,114,95,99,108,97, + 115,115,218,8,115,117,102,102,105,120,101,115,114,206,0,0, + 0,90,7,100,105,114,110,97,109,101,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,23,115,112,101,99,95, + 102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105, + 111,110,206,2,0,0,115,86,0,0,0,8,12,4,4,10, + 1,2,2,14,1,12,1,4,1,2,251,10,7,8,1,2, + 1,18,1,12,1,2,1,16,8,6,1,8,3,14,1,14, + 1,10,1,6,1,4,1,2,253,4,5,8,3,10,2,2, + 1,14,1,12,1,4,1,4,2,6,1,2,128,6,2,10, + 1,4,1,12,1,12,1,4,2,2,244,2,228,2,249,255, + 128,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, + 88,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,90,4,100,3,90,5,101,6,111,15,100,4,101,7, + 118,0,90,8,101,9,100,5,100,6,132,0,131,1,90,10, + 101,11,100,7,100,8,132,0,131,1,90,12,101,11,100,14, + 100,10,100,11,132,1,131,1,90,13,101,11,100,15,100,12, + 100,13,132,1,131,1,90,14,100,9,83,0,41,16,218,21, + 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, + 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, + 32,102,105,110,100,101,114,32,102,111,114,32,109,111,100,117, + 108,101,115,32,100,101,99,108,97,114,101,100,32,105,110,32, + 116,104,101,32,87,105,110,100,111,119,115,32,114,101,103,105, + 115,116,114,121,46,122,59,83,111,102,116,119,97,114,101,92, + 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, + 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, + 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, + 101,125,122,65,83,111,102,116,119,97,114,101,92,80,121,116, + 104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123, + 115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100, + 117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,92, + 68,101,98,117,103,122,6,95,100,46,112,121,100,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0, + 0,0,67,0,0,0,115,50,0,0,0,122,8,116,0,160, + 1,116,0,106,2,124,0,161,2,87,0,83,0,4,0,116, + 3,121,24,1,0,1,0,1,0,116,0,160,1,116,0,106, + 4,124,0,161,2,6,0,89,0,83,0,119,0,114,69,0, + 0,0,41,5,218,6,119,105,110,114,101,103,90,7,79,112, + 101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82, + 69,78,84,95,85,83,69,82,114,76,0,0,0,90,18,72, + 75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78, + 69,114,19,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103, + 105,115,116,114,121,35,3,0,0,115,12,0,0,0,2,2, + 16,1,12,1,18,1,2,255,255,128,122,36,87,105,110,100, + 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, + 114,46,95,111,112,101,110,95,114,101,103,105,115,116,114,121, + 99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,8,0,0,0,67,0,0,0,115,130,0,0,0,124,0, + 106,0,114,7,124,0,106,1,125,2,110,3,124,0,106,2, + 125,2,124,2,106,3,124,1,100,1,116,4,106,5,100,0, + 100,2,133,2,25,0,22,0,100,3,141,2,125,3,122,30, + 124,0,160,6,124,3,161,1,143,14,125,4,116,7,160,8, + 124,4,100,4,161,2,125,5,87,0,100,0,4,0,4,0, + 131,3,1,0,110,8,49,0,115,47,119,1,1,0,1,0, + 1,0,89,0,1,0,87,0,124,5,83,0,4,0,116,9, + 121,64,1,0,1,0,1,0,89,0,100,0,83,0,119,0, + 41,5,78,122,5,37,100,46,37,100,114,44,0,0,0,41, + 2,114,163,0,0,0,90,11,115,121,115,95,118,101,114,115, + 105,111,110,114,10,0,0,0,41,10,218,11,68,69,66,85, + 71,95,66,85,73,76,68,218,18,82,69,71,73,83,84,82, + 89,95,75,69,89,95,68,69,66,85,71,218,12,82,69,71, + 73,83,84,82,89,95,75,69,89,114,89,0,0,0,114,15, + 0,0,0,218,12,118,101,114,115,105,111,110,95,105,110,102, + 111,114,216,0,0,0,114,215,0,0,0,90,10,81,117,101, + 114,121,86,97,108,117,101,114,76,0,0,0,41,6,218,3, + 99,108,115,114,163,0,0,0,90,12,114,101,103,105,115,116, + 114,121,95,107,101,121,114,20,0,0,0,90,4,104,107,101, + 121,218,8,102,105,108,101,112,97,116,104,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,16,95,115,101,97, + 114,99,104,95,114,101,103,105,115,116,114,121,42,3,0,0, + 115,30,0,0,0,6,2,8,1,6,2,6,1,16,1,6, + 255,2,2,12,1,26,1,18,128,4,3,12,254,6,1,2, + 255,255,128,122,38,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114, + 99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0, + 0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0, + 0,67,0,0,0,115,120,0,0,0,124,0,160,0,124,1, + 161,1,125,4,124,4,100,0,117,0,114,11,100,0,83,0, + 122,6,116,1,124,4,131,1,1,0,87,0,110,9,4,0, + 116,2,121,59,1,0,1,0,1,0,89,0,100,0,83,0, + 116,3,131,0,68,0,93,26,92,2,125,5,125,6,124,4, + 160,4,116,5,124,6,131,1,161,1,114,56,116,6,106,7, + 124,1,124,5,124,1,124,4,131,2,124,4,100,1,141,3, + 125,7,124,7,2,0,1,0,83,0,113,30,100,0,83,0, + 119,0,41,2,78,114,204,0,0,0,41,8,114,223,0,0, + 0,114,75,0,0,0,114,76,0,0,0,114,208,0,0,0, + 114,58,0,0,0,114,136,0,0,0,114,159,0,0,0,218, + 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, + 114,41,8,114,221,0,0,0,114,163,0,0,0,114,65,0, + 0,0,218,6,116,97,114,103,101,116,114,222,0,0,0,114, + 164,0,0,0,114,212,0,0,0,114,210,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,9,102, + 105,110,100,95,115,112,101,99,57,3,0,0,115,36,0,0, + 0,10,2,8,1,4,1,2,1,12,1,12,1,6,1,14, + 1,14,1,6,1,8,1,2,1,6,254,8,3,2,252,4, + 255,2,254,255,128,122,31,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, + 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 42,0,0,0,116,0,160,1,100,1,116,2,161,2,1,0, + 124,0,160,3,124,1,124,2,161,2,125,3,124,3,100,2, + 117,1,114,19,124,3,106,4,83,0,100,2,83,0,41,3, + 122,106,70,105,110,100,32,109,111,100,117,108,101,32,110,97, + 109,101,100,32,105,110,32,116,104,101,32,114,101,103,105,115, + 116,114,121,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,122,112,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, - 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0, - 124,0,106,0,114,7,124,0,106,1,125,2,110,3,124,0, - 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5, - 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3, - 122,30,124,0,160,6,124,3,161,1,143,14,125,4,116,7, - 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0, - 4,0,131,3,1,0,110,8,49,0,115,47,119,1,1,0, - 1,0,1,0,89,0,1,0,87,0,124,5,83,0,4,0, - 116,9,121,64,1,0,1,0,1,0,89,0,100,0,83,0, - 119,0,41,5,78,122,5,37,100,46,37,100,114,44,0,0, - 0,41,2,114,149,0,0,0,90,11,115,121,115,95,118,101, - 114,115,105,111,110,114,10,0,0,0,41,10,218,11,68,69, - 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, - 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, - 69,71,73,83,84,82,89,95,75,69,89,114,76,0,0,0, - 114,15,0,0,0,218,12,118,101,114,115,105,111,110,95,105, - 110,102,111,114,203,0,0,0,114,202,0,0,0,90,10,81, - 117,101,114,121,86,97,108,117,101,114,63,0,0,0,41,6, - 218,3,99,108,115,114,149,0,0,0,90,12,114,101,103,105, - 115,116,114,121,95,107,101,121,114,20,0,0,0,90,4,104, - 107,101,121,218,8,102,105,108,101,112,97,116,104,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,115, - 101,97,114,99,104,95,114,101,103,105,115,116,114,121,4,3, - 0,0,115,30,0,0,0,6,2,8,1,6,2,6,1,16, - 1,6,255,2,2,12,1,26,1,18,128,4,3,12,254,6, - 1,2,255,255,128,122,38,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,78,99,4, - 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8, - 0,0,0,67,0,0,0,115,120,0,0,0,124,0,160,0, - 124,1,161,1,125,4,124,4,100,0,117,0,114,11,100,0, - 83,0,122,6,116,1,124,4,131,1,1,0,87,0,110,9, - 4,0,116,2,121,59,1,0,1,0,1,0,89,0,100,0, - 83,0,116,3,131,0,68,0,93,26,92,2,125,5,125,6, - 124,4,160,4,116,5,124,6,131,1,161,1,114,56,116,6, - 106,7,124,1,124,5,124,1,124,4,131,2,124,4,100,1, - 141,3,125,7,124,7,2,0,1,0,83,0,113,30,100,0, - 83,0,119,0,41,2,78,114,190,0,0,0,41,8,114,210, - 0,0,0,114,62,0,0,0,114,63,0,0,0,114,194,0, - 0,0,114,121,0,0,0,114,122,0,0,0,114,145,0,0, - 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, - 100,101,114,41,8,114,208,0,0,0,114,149,0,0,0,114, - 57,0,0,0,218,6,116,97,114,103,101,116,114,209,0,0, - 0,114,150,0,0,0,114,199,0,0,0,114,197,0,0,0, + 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,40, + 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, + 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, + 32,51,46,49,50,59,32,117,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,78,169, + 5,114,99,0,0,0,114,100,0,0,0,114,101,0,0,0, + 114,226,0,0,0,114,164,0,0,0,169,4,114,221,0,0, + 0,114,163,0,0,0,114,65,0,0,0,114,210,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 9,102,105,110,100,95,115,112,101,99,19,3,0,0,115,36, - 0,0,0,10,2,8,1,4,1,2,1,12,1,12,1,6, - 1,14,1,14,1,6,1,8,1,2,1,6,254,8,3,2, - 252,4,255,2,254,255,128,122,31,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,42,0,0,0,116,0,160,1,100,1,116,2,161,2, - 1,0,124,0,160,3,124,1,124,2,161,2,125,3,124,3, - 100,2,117,1,114,19,124,3,106,4,83,0,100,2,83,0, - 41,3,122,106,70,105,110,100,32,109,111,100,117,108,101,32, - 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, - 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,112, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, - 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, - 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, - 111,110,32,51,46,49,50,59,32,117,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 78,169,5,114,87,0,0,0,114,88,0,0,0,114,89,0, - 0,0,114,213,0,0,0,114,150,0,0,0,169,4,114,208, - 0,0,0,114,149,0,0,0,114,57,0,0,0,114,197,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,102,105,110,100,95,109,111,100,117,108,101,35,3, - 0,0,115,16,0,0,0,6,7,2,2,4,254,12,3,8, - 1,6,1,4,2,255,128,122,33,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,41,2,78,78,41,1, - 78,41,15,114,136,0,0,0,114,135,0,0,0,114,137,0, - 0,0,114,138,0,0,0,114,206,0,0,0,114,205,0,0, - 0,218,11,95,77,83,95,87,73,78,68,79,87,83,218,18, - 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, - 69,83,114,204,0,0,0,218,12,115,116,97,116,105,99,109, - 101,116,104,111,100,114,203,0,0,0,218,11,99,108,97,115, - 115,109,101,116,104,111,100,114,210,0,0,0,114,213,0,0, - 0,114,216,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,201,0,0,0,241, - 2,0,0,115,32,0,0,0,8,0,4,2,2,3,2,255, - 2,4,2,255,12,3,2,2,10,1,2,6,10,1,2,14, - 12,1,2,15,16,1,255,128,114,201,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,64,0,0,0,115,48,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, - 8,100,9,132,0,90,7,100,10,83,0,41,11,218,13,95, - 76,111,97,100,101,114,66,97,115,105,99,115,122,83,66,97, - 115,101,32,99,108,97,115,115,32,111,102,32,99,111,109,109, - 111,110,32,99,111,100,101,32,110,101,101,100,101,100,32,98, - 121,32,98,111,116,104,32,83,111,117,114,99,101,76,111,97, - 100,101,114,32,97,110,100,10,32,32,32,32,83,111,117,114, - 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, - 46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,4,0,0,0,67,0,0,0,115,64,0,0,0,116, - 0,124,0,160,1,124,1,161,1,131,1,100,1,25,0,125, - 2,124,2,160,2,100,2,100,1,161,2,100,3,25,0,125, - 3,124,1,160,3,100,2,161,1,100,4,25,0,125,4,124, - 3,100,5,107,2,111,31,124,4,100,5,107,3,83,0,41, - 7,122,141,67,111,110,99,114,101,116,101,32,105,109,112,108, - 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, - 115,112,101,99,116,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,32,98,121,32,99,104,101,99,107,105, - 110,103,32,105,102,10,32,32,32,32,32,32,32,32,116,104, - 101,32,112,97,116,104,32,114,101,116,117,114,110,101,100,32, - 98,121,32,103,101,116,95,102,105,108,101,110,97,109,101,32, - 104,97,115,32,97,32,102,105,108,101,110,97,109,101,32,111, - 102,32,39,95,95,105,110,105,116,95,95,46,112,121,39,46, - 114,3,0,0,0,114,85,0,0,0,114,0,0,0,0,114, - 44,0,0,0,218,8,95,95,105,110,105,116,95,95,78,41, - 4,114,60,0,0,0,114,189,0,0,0,114,56,0,0,0, - 114,54,0,0,0,41,5,114,129,0,0,0,114,149,0,0, - 0,114,107,0,0,0,90,13,102,105,108,101,110,97,109,101, - 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 192,0,0,0,57,3,0,0,115,10,0,0,0,18,3,16, - 1,14,1,16,1,255,128,122,24,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, + 11,102,105,110,100,95,109,111,100,117,108,101,73,3,0,0, + 115,16,0,0,0,6,7,2,2,4,254,12,3,8,1,6, + 1,4,2,255,128,122,33,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,41,2,78,78,41,1,78,41, + 15,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, + 114,152,0,0,0,114,219,0,0,0,114,218,0,0,0,218, + 11,95,77,83,95,87,73,78,68,79,87,83,218,18,69,88, + 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, + 114,217,0,0,0,218,12,115,116,97,116,105,99,109,101,116, + 104,111,100,114,216,0,0,0,218,11,99,108,97,115,115,109, + 101,116,104,111,100,114,223,0,0,0,114,226,0,0,0,114, + 229,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,214,0,0,0,23,3,0, + 0,115,32,0,0,0,8,0,4,2,2,3,2,255,2,4, + 2,255,12,3,2,2,10,1,2,6,10,1,2,14,12,1, + 2,15,16,1,255,128,114,214,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, + 9,132,0,90,7,100,10,83,0,41,11,218,13,95,76,111, + 97,100,101,114,66,97,115,105,99,115,122,83,66,97,115,101, + 32,99,108,97,115,115,32,111,102,32,99,111,109,109,111,110, + 32,99,111,100,101,32,110,101,101,100,101,100,32,98,121,32, + 98,111,116,104,32,83,111,117,114,99,101,76,111,97,100,101, + 114,32,97,110,100,10,32,32,32,32,83,111,117,114,99,101, + 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,99, + 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,124, + 0,160,1,124,1,161,1,131,1,100,1,25,0,125,2,124, + 2,160,2,100,2,100,1,161,2,100,3,25,0,125,3,124, + 1,160,3,100,2,161,1,100,4,25,0,125,4,124,3,100, + 5,107,2,111,31,124,4,100,5,107,3,83,0,41,7,122, + 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, + 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, + 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, + 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, + 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, + 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, + 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, + 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,3, + 0,0,0,114,97,0,0,0,114,0,0,0,0,114,44,0, + 0,0,218,8,95,95,105,110,105,116,95,95,78,41,4,114, + 74,0,0,0,114,203,0,0,0,114,125,0,0,0,114,104, + 0,0,0,41,5,114,143,0,0,0,114,163,0,0,0,114, + 120,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, + 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,206,0, + 0,0,95,3,0,0,115,10,0,0,0,18,3,16,1,14, + 1,16,1,255,128,122,24,95,76,111,97,100,101,114,66,97, + 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,114,23,0,0,0,169,2,122, + 42,85,115,101,32,100,101,102,97,117,108,116,32,115,101,109, + 97,110,116,105,99,115,32,102,111,114,32,109,111,100,117,108, + 101,32,99,114,101,97,116,105,111,110,46,78,114,7,0,0, + 0,169,2,114,143,0,0,0,114,210,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,13,99,114, + 101,97,116,101,95,109,111,100,117,108,101,103,3,0,0,243, + 4,0,0,0,4,0,255,128,122,27,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,56, + 0,0,0,124,0,160,0,124,1,106,1,161,1,125,2,124, + 2,100,1,117,0,114,18,116,2,100,2,160,3,124,1,106, + 1,161,1,131,1,130,1,116,4,160,5,116,6,124,2,124, + 1,106,7,161,3,1,0,100,1,83,0,41,3,122,19,69, + 120,101,99,117,116,101,32,116,104,101,32,109,111,100,117,108, + 101,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100, + 32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101, + 110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116, + 117,114,110,115,32,78,111,110,101,41,8,218,8,103,101,116, + 95,99,111,100,101,114,150,0,0,0,114,142,0,0,0,114, + 89,0,0,0,114,159,0,0,0,218,25,95,99,97,108,108, + 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, + 111,118,101,100,218,4,101,120,101,99,114,156,0,0,0,41, + 3,114,143,0,0,0,218,6,109,111,100,117,108,101,114,188, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,106, + 3,0,0,115,14,0,0,0,12,2,8,1,4,1,8,1, + 4,255,20,2,255,128,122,25,95,76,111,97,100,101,114,66, + 97,115,105,99,115,46,101,120,101,99,95,109,111,100,117,108, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,169, - 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, - 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, - 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,7, - 0,0,0,169,2,114,129,0,0,0,114,197,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,65,3,0, - 0,243,4,0,0,0,4,0,255,128,122,27,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, - 115,56,0,0,0,124,0,160,0,124,1,106,1,161,1,125, - 2,124,2,100,1,117,0,114,18,116,2,100,2,160,3,124, - 1,106,1,161,1,131,1,130,1,116,4,160,5,116,6,124, - 2,124,1,106,7,161,3,1,0,100,1,83,0,41,3,122, - 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, - 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, - 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, - 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, - 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, - 101,116,95,99,111,100,101,114,136,0,0,0,114,128,0,0, - 0,114,76,0,0,0,114,145,0,0,0,218,25,95,99,97, - 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, - 101,109,111,118,101,100,218,4,101,120,101,99,114,142,0,0, - 0,41,3,114,129,0,0,0,218,6,109,111,100,117,108,101, - 114,174,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, - 101,68,3,0,0,115,14,0,0,0,12,2,8,1,4,1, - 8,1,4,255,20,2,255,128,122,25,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0, - 0,116,0,160,1,124,0,124,1,161,2,83,0,41,2,122, - 26,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,78,41,2,114,145, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,169,2,114,129,0,0,0,114,149,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,108,111,97,100,95,109,111,100,117,108,101,76,3, - 0,0,115,4,0,0,0,12,3,255,128,122,25,95,76,111, - 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, - 109,111,100,117,108,101,78,41,8,114,136,0,0,0,114,135, - 0,0,0,114,137,0,0,0,114,138,0,0,0,114,192,0, - 0,0,114,225,0,0,0,114,231,0,0,0,114,234,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,221,0,0,0,52,3,0,0,115,14, - 0,0,0,8,0,4,2,8,3,8,8,8,3,12,8,255, - 128,114,221,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 74,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, - 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, - 132,0,90,5,100,7,100,8,132,0,90,6,100,9,100,10, - 132,0,90,7,100,11,100,12,156,1,100,13,100,14,132,2, - 90,8,100,15,100,16,132,0,90,9,100,17,83,0,41,18, - 218,12,83,111,117,114,99,101,76,111,97,100,101,114,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,116,0,130,1, - 41,2,122,165,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,116,104,97,116,32,114,101,116,117,114,110,115, - 32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111, - 110,32,116,105,109,101,32,40,97,110,32,105,110,116,41,32, - 102,111,114,32,116,104,101,10,32,32,32,32,32,32,32,32, - 115,112,101,99,105,102,105,101,100,32,112,97,116,104,32,40, - 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, - 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32, - 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97, - 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46, - 10,32,32,32,32,32,32,32,32,78,41,1,114,63,0,0, - 0,169,2,114,129,0,0,0,114,57,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,10,112,97, - 116,104,95,109,116,105,109,101,84,3,0,0,115,4,0,0, - 0,4,6,255,128,122,23,83,111,117,114,99,101,76,111,97, - 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,67,0,0,0,115,14,0,0,0,100,1,124,0, - 160,0,124,1,161,1,105,1,83,0,41,3,97,158,1,0, - 0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,114,101,116,117,114,110,105,110,103,32,97,32,109,101,116, - 97,100,97,116,97,32,100,105,99,116,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,10,32,32,32, - 32,32,32,32,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,80,111,115,115, - 105,98,108,101,32,107,101,121,115,58,10,32,32,32,32,32, - 32,32,32,45,32,39,109,116,105,109,101,39,32,40,109,97, - 110,100,97,116,111,114,121,41,32,105,115,32,116,104,101,32, - 110,117,109,101,114,105,99,32,116,105,109,101,115,116,97,109, - 112,32,111,102,32,108,97,115,116,32,115,111,117,114,99,101, - 10,32,32,32,32,32,32,32,32,32,32,99,111,100,101,32, - 109,111,100,105,102,105,99,97,116,105,111,110,59,10,32,32, - 32,32,32,32,32,32,45,32,39,115,105,122,101,39,32,40, - 111,112,116,105,111,110,97,108,41,32,105,115,32,116,104,101, - 32,115,105,122,101,32,105,110,32,98,121,116,101,115,32,111, - 102,32,116,104,101,32,115,111,117,114,99,101,32,99,111,100, - 101,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,116,104,101,32, - 108,111,97,100,101,114,32,116,111,32,114,101,97,100,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,32, - 32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83, - 69,114,114,111,114,32,119,104,101,110,32,116,104,101,32,112, - 97,116,104,32,99,97,110,110,111,116,32,98,101,32,104,97, - 110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,114, - 179,0,0,0,78,41,1,114,237,0,0,0,114,236,0,0, + 0,0,4,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,160,1,124,0,124,1,161,2,83,0,41,2,122,26,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,78,41,2,114,159,0,0, + 0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,95, + 115,104,105,109,169,2,114,143,0,0,0,114,163,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 11,108,111,97,100,95,109,111,100,117,108,101,114,3,0,0, + 115,4,0,0,0,12,3,255,128,122,25,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, + 100,117,108,101,78,41,8,114,150,0,0,0,114,149,0,0, + 0,114,151,0,0,0,114,152,0,0,0,114,206,0,0,0, + 114,238,0,0,0,114,244,0,0,0,114,247,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,234,0,0,0,90,3,0,0,115,14,0,0, + 0,8,0,4,2,8,3,8,8,8,3,12,8,255,128,114, + 234,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,64,0,0,0,115,74,0, + 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0, + 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, + 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, + 90,7,100,11,100,12,156,1,100,13,100,14,132,2,90,8, + 100,15,100,16,132,0,90,9,100,17,83,0,41,18,218,12, + 83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,116,0,130,1,41,2, + 122,165,79,112,116,105,111,110,97,108,32,109,101,116,104,111, + 100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,116, + 104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32, + 116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,111, + 114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,112, + 101,99,105,102,105,101,100,32,112,97,116,104,32,40,97,32, + 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, + 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, + 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, + 32,32,32,32,32,32,32,78,41,1,114,76,0,0,0,169, + 2,114,143,0,0,0,114,65,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,10,112,97,116,104, + 95,109,116,105,109,101,122,3,0,0,115,4,0,0,0,4, + 6,255,128,122,23,83,111,117,114,99,101,76,111,97,100,101, + 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0, + 124,1,161,1,105,1,83,0,41,3,97,158,1,0,0,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114, + 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100, + 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32, + 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, + 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, + 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, + 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, + 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, + 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, + 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, + 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, + 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, + 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, + 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, + 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,114,193,0, + 0,0,78,41,1,114,250,0,0,0,114,249,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,130,3,0,0,115,4, + 0,0,0,14,12,255,128,122,23,83,111,117,114,99,101,76, + 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,67,0,0,0,115,12,0,0,0,124,0, + 160,0,124,2,124,3,161,2,83,0,41,2,122,228,79,112, + 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, + 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, + 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, + 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, + 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, + 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, + 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,32, + 32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,32, + 112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,105, + 110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,101, + 99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,101, + 114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,32, + 32,32,78,41,1,218,8,115,101,116,95,100,97,116,97,41, + 4,114,143,0,0,0,114,134,0,0,0,90,10,99,97,99, + 104,101,95,112,97,116,104,114,41,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,15,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,144,3,0,0, + 115,4,0,0,0,12,8,255,128,122,28,83,111,117,114,99, + 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, + 121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0, + 114,23,0,0,0,41,2,122,150,79,112,116,105,111,110,97, + 108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119, + 114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101, + 115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116, + 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, + 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, + 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, + 111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116, + 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78, + 114,7,0,0,0,41,3,114,143,0,0,0,114,65,0,0, + 0,114,41,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,252,0,0,0,154,3,0,0,114,239, + 0,0,0,122,21,83,111,117,114,99,101,76,111,97,100,101, + 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67, + 0,0,0,115,70,0,0,0,124,0,160,0,124,1,161,1, + 125,2,122,10,124,0,160,1,124,2,161,1,125,3,87,0, + 116,4,124,3,131,1,83,0,4,0,116,2,121,34,1,0, + 125,4,1,0,122,7,116,3,100,1,124,1,100,2,141,2, + 124,4,130,2,100,3,125,4,126,4,119,1,119,0,41,4, + 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, + 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, + 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, + 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, + 140,0,0,0,78,41,5,114,203,0,0,0,218,8,103,101, + 116,95,100,97,116,97,114,76,0,0,0,114,142,0,0,0, + 114,200,0,0,0,41,5,114,143,0,0,0,114,163,0,0, + 0,114,65,0,0,0,114,198,0,0,0,218,3,101,120,99, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 10,103,101,116,95,115,111,117,114,99,101,161,3,0,0,115, + 26,0,0,0,10,2,2,1,12,1,8,4,14,253,4,1, + 2,1,4,255,2,1,2,255,8,128,2,255,255,128,122,23, + 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,114,130,0,0,0,41,1,218,9, + 95,111,112,116,105,109,105,122,101,99,3,0,0,0,0,0, + 0,0,1,0,0,0,4,0,0,0,8,0,0,0,67,0, + 0,0,115,22,0,0,0,116,0,106,1,116,2,124,1,124, + 2,100,1,100,2,124,3,100,3,141,6,83,0,41,5,122, + 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, + 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, + 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, + 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, + 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, + 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, + 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, + 32,32,32,114,242,0,0,0,84,41,2,218,12,100,111,110, + 116,95,105,110,104,101,114,105,116,114,108,0,0,0,78,41, + 3,114,159,0,0,0,114,241,0,0,0,218,7,99,111,109, + 112,105,108,101,41,4,114,143,0,0,0,114,41,0,0,0, + 114,65,0,0,0,114,1,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,14,115,111,117,114,99, + 101,95,116,111,95,99,111,100,101,171,3,0,0,115,8,0, + 0,0,12,5,4,1,6,255,255,128,122,27,83,111,117,114, + 99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95, + 116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,15,0,0,0,9,0,0,0,67,0,0,0, + 115,12,2,0,0,124,0,160,0,124,1,161,1,125,2,100, + 1,125,3,100,1,125,4,100,1,125,5,100,2,125,6,100, + 3,125,7,122,6,116,1,124,2,131,1,125,8,87,0,110, + 11,4,0,116,2,144,1,121,5,1,0,1,0,1,0,100, + 1,125,8,89,0,110,143,122,7,124,0,160,3,124,2,161, + 1,125,9,87,0,110,9,4,0,116,4,144,1,121,4,1, + 0,1,0,1,0,89,0,110,126,116,5,124,9,100,4,25, + 0,131,1,125,3,122,7,124,0,160,6,124,8,161,1,125, + 10,87,0,110,9,4,0,116,4,144,1,121,3,1,0,1, + 0,1,0,89,0,110,103,124,1,124,8,100,5,156,2,125, + 11,122,71,116,7,124,10,124,1,124,11,131,3,125,12,116, + 8,124,10,131,1,100,6,100,1,133,2,25,0,125,13,124, + 12,100,7,64,0,100,8,107,3,125,6,124,6,114,138,124, + 12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,100, + 10,107,3,114,137,124,7,115,119,116,9,106,10,100,11,107, + 2,114,137,124,0,160,6,124,2,161,1,125,4,116,9,160, + 11,116,12,124,4,161,2,125,5,116,13,124,10,124,5,124, + 1,124,11,131,4,1,0,110,10,116,14,124,10,124,3,124, + 9,100,12,25,0,124,1,124,11,131,5,1,0,87,0,110, + 11,4,0,116,15,116,16,102,2,144,1,121,2,1,0,1, + 0,1,0,89,0,110,15,116,17,160,18,100,13,124,8,124, + 2,161,3,1,0,116,19,124,13,124,1,124,8,124,2,100, + 14,141,4,83,0,124,4,100,1,117,0,114,185,124,0,160, + 6,124,2,161,1,125,4,124,0,160,20,124,4,124,2,161, + 2,125,14,116,17,160,18,100,15,124,2,161,2,1,0,116, + 21,106,22,115,255,124,8,100,1,117,1,114,255,124,3,100, + 1,117,1,114,255,124,6,114,226,124,5,100,1,117,0,114, + 219,116,9,160,11,124,4,161,1,125,5,116,23,124,14,124, + 5,124,7,131,3,125,10,110,8,116,24,124,14,124,3,116, + 25,124,4,131,1,131,3,125,10,122,10,124,0,160,26,124, + 2,124,8,124,10,161,3,1,0,87,0,124,14,83,0,4, + 0,116,2,144,1,121,1,1,0,1,0,1,0,89,0,124, + 14,83,0,124,14,83,0,119,0,119,0,119,0,119,0,119, + 0,41,16,122,190,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, + 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, + 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, + 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, + 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, + 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, + 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, + 32,32,32,78,70,84,114,193,0,0,0,114,183,0,0,0, + 114,169,0,0,0,114,3,0,0,0,114,0,0,0,0,114, + 44,0,0,0,90,5,110,101,118,101,114,90,6,97,108,119, + 97,121,115,218,4,115,105,122,101,122,13,123,125,32,109,97, + 116,99,104,101,115,32,123,125,41,3,114,141,0,0,0,114, + 132,0,0,0,114,134,0,0,0,122,19,99,111,100,101,32, + 111,98,106,101,99,116,32,102,114,111,109,32,123,125,41,27, + 114,203,0,0,0,114,121,0,0,0,114,107,0,0,0,114, + 251,0,0,0,114,76,0,0,0,114,33,0,0,0,114,254, + 0,0,0,114,176,0,0,0,218,10,109,101,109,111,114,121, + 118,105,101,119,114,187,0,0,0,90,21,99,104,101,99,107, + 95,104,97,115,104,95,98,97,115,101,100,95,112,121,99,115, + 114,181,0,0,0,218,17,95,82,65,87,95,77,65,71,73, + 67,95,78,85,77,66,69,82,114,182,0,0,0,114,180,0, + 0,0,114,142,0,0,0,114,174,0,0,0,114,159,0,0, + 0,114,173,0,0,0,114,189,0,0,0,114,4,1,0,0, + 114,15,0,0,0,218,19,100,111,110,116,95,119,114,105,116, + 101,95,98,121,116,101,99,111,100,101,114,195,0,0,0,114, + 194,0,0,0,114,4,0,0,0,114,253,0,0,0,41,15, + 114,143,0,0,0,114,163,0,0,0,114,134,0,0,0,114, + 178,0,0,0,114,198,0,0,0,114,181,0,0,0,90,10, + 104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99, + 107,95,115,111,117,114,99,101,114,132,0,0,0,218,2,115, + 116,114,41,0,0,0,114,175,0,0,0,114,16,0,0,0, + 90,10,98,121,116,101,115,95,100,97,116,97,90,11,99,111, + 100,101,95,111,98,106,101,99,116,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,240,0,0,0,179,3,0, + 0,115,170,0,0,0,10,7,4,1,4,1,4,1,4,1, + 4,1,2,1,12,1,14,1,8,1,2,2,14,1,14,1, + 4,1,12,2,2,1,14,1,14,1,4,1,2,3,2,1, + 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, + 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, + 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, + 6,1,2,1,2,1,4,251,4,128,18,7,4,1,8,2, + 2,1,4,255,6,2,2,1,2,1,6,254,8,3,10,1, + 12,1,12,1,14,1,6,1,2,255,4,2,8,1,10,1, + 14,1,6,2,6,1,4,255,2,2,16,1,4,3,14,254, + 2,1,8,1,2,254,2,233,2,225,2,250,2,251,255,128, + 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, + 101,116,95,99,111,100,101,78,41,10,114,150,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,250,0,0,0,114,251, + 0,0,0,114,253,0,0,0,114,252,0,0,0,114,0,1, + 0,0,114,4,1,0,0,114,240,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,10,112,97,116,104,95,115,116,97,116,115,92,3,0,0, - 115,4,0,0,0,14,12,255,128,122,23,83,111,117,114,99, - 101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97, - 116,115,99,4,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,0, - 124,0,160,0,124,2,124,3,161,2,83,0,41,2,122,228, - 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, - 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, - 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, - 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, - 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, - 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, - 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,115,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,115,111,117,114,99, - 101,32,112,97,116,104,32,105,115,32,110,101,101,100,101,100, - 32,105,110,32,111,114,100,101,114,32,116,111,32,99,111,114, - 114,101,99,116,108,121,32,116,114,97,110,115,102,101,114,32, - 112,101,114,109,105,115,115,105,111,110,115,10,32,32,32,32, - 32,32,32,32,78,41,1,218,8,115,101,116,95,100,97,116, - 97,41,4,114,129,0,0,0,114,118,0,0,0,90,10,99, - 97,99,104,101,95,112,97,116,104,114,41,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,15,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,106,3, - 0,0,115,4,0,0,0,12,8,255,128,122,28,83,111,117, - 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,1,0,0,0,67,0, - 0,0,114,23,0,0,0,41,2,122,150,79,112,116,105,111, - 110,97,108,32,109,101,116,104,111,100,32,119,104,105,99,104, - 32,119,114,105,116,101,115,32,100,97,116,97,32,40,98,121, - 116,101,115,41,32,116,111,32,97,32,102,105,108,101,32,112, - 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, - 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, - 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, - 108,108,111,119,115,32,102,111,114,32,116,104,101,32,119,114, - 105,116,105,110,103,32,111,102,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,32, - 32,78,114,7,0,0,0,41,3,114,129,0,0,0,114,57, - 0,0,0,114,41,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,239,0,0,0,116,3,0,0, - 114,226,0,0,0,122,21,83,111,117,114,99,101,76,111,97, - 100,101,114,46,115,101,116,95,100,97,116,97,99,2,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,10,0,0, - 0,67,0,0,0,115,70,0,0,0,124,0,160,0,124,1, - 161,1,125,2,122,10,124,0,160,1,124,2,161,1,125,3, - 87,0,116,4,124,3,131,1,83,0,4,0,116,2,121,34, - 1,0,125,4,1,0,122,7,116,3,100,1,124,1,100,2, - 141,2,124,4,130,2,100,3,125,4,126,4,119,1,119,0, - 41,4,122,52,67,111,110,99,114,101,116,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, - 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, - 95,115,111,117,114,99,101,46,122,39,115,111,117,114,99,101, - 32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,116, - 104,114,111,117,103,104,32,103,101,116,95,100,97,116,97,40, - 41,114,126,0,0,0,78,41,5,114,189,0,0,0,218,8, - 103,101,116,95,100,97,116,97,114,63,0,0,0,114,128,0, - 0,0,114,186,0,0,0,41,5,114,129,0,0,0,114,149, - 0,0,0,114,57,0,0,0,114,184,0,0,0,218,3,101, - 120,99,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,10,103,101,116,95,115,111,117,114,99,101,123,3,0, - 0,115,26,0,0,0,10,2,2,1,12,1,8,4,14,253, - 4,1,2,1,4,255,2,1,2,255,8,128,2,255,255,128, - 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,103, - 101,116,95,115,111,117,114,99,101,114,115,0,0,0,41,1, - 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0, - 67,0,0,0,115,22,0,0,0,116,0,106,1,116,2,124, - 1,124,2,100,1,100,2,124,3,100,3,141,6,83,0,41, - 5,122,130,82,101,116,117,114,110,32,116,104,101,32,99,111, - 100,101,32,111,98,106,101,99,116,32,99,111,109,112,105,108, - 101,100,32,102,114,111,109,32,115,111,117,114,99,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,101,32,39,100,97, - 116,97,39,32,97,114,103,117,109,101,110,116,32,99,97,110, - 32,98,101,32,97,110,121,32,111,98,106,101,99,116,32,116, - 121,112,101,32,116,104,97,116,32,99,111,109,112,105,108,101, - 40,41,32,115,117,112,112,111,114,116,115,46,10,32,32,32, - 32,32,32,32,32,114,229,0,0,0,84,41,2,218,12,100, - 111,110,116,95,105,110,104,101,114,105,116,114,95,0,0,0, - 78,41,3,114,145,0,0,0,114,228,0,0,0,218,7,99, - 111,109,112,105,108,101,41,4,114,129,0,0,0,114,41,0, - 0,0,114,57,0,0,0,114,244,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,14,115,111,117, - 114,99,101,95,116,111,95,99,111,100,101,133,3,0,0,115, - 8,0,0,0,12,5,4,1,6,255,255,128,122,27,83,111, - 117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,15,0,0,0,9,0,0,0,67,0, - 0,0,115,12,2,0,0,124,0,160,0,124,1,161,1,125, - 2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125, - 6,100,3,125,7,122,6,116,1,124,2,131,1,125,8,87, - 0,110,11,4,0,116,2,144,1,121,5,1,0,1,0,1, - 0,100,1,125,8,89,0,110,143,122,7,124,0,160,3,124, - 2,161,1,125,9,87,0,110,9,4,0,116,4,144,1,121, - 4,1,0,1,0,1,0,89,0,110,126,116,5,124,9,100, - 4,25,0,131,1,125,3,122,7,124,0,160,6,124,8,161, - 1,125,10,87,0,110,9,4,0,116,4,144,1,121,3,1, - 0,1,0,1,0,89,0,110,103,124,1,124,8,100,5,156, - 2,125,11,122,71,116,7,124,10,124,1,124,11,131,3,125, - 12,116,8,124,10,131,1,100,6,100,1,133,2,25,0,125, - 13,124,12,100,7,64,0,100,8,107,3,125,6,124,6,114, - 138,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, - 10,100,10,107,3,114,137,124,7,115,119,116,9,106,10,100, - 11,107,2,114,137,124,0,160,6,124,2,161,1,125,4,116, - 9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124, - 5,124,1,124,11,131,4,1,0,110,10,116,14,124,10,124, - 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87, - 0,110,11,4,0,116,15,116,16,102,2,144,1,121,2,1, - 0,1,0,1,0,89,0,110,15,116,17,160,18,100,13,124, - 8,124,2,161,3,1,0,116,19,124,13,124,1,124,8,124, - 2,100,14,141,4,83,0,124,4,100,1,117,0,114,185,124, - 0,160,6,124,2,161,1,125,4,124,0,160,20,124,4,124, - 2,161,2,125,14,116,17,160,18,100,15,124,2,161,2,1, - 0,116,21,106,22,115,255,124,8,100,1,117,1,114,255,124, - 3,100,1,117,1,114,255,124,6,114,226,124,5,100,1,117, - 0,114,219,116,9,160,11,124,4,161,1,125,5,116,23,124, - 14,124,5,124,7,131,3,125,10,110,8,116,24,124,14,124, - 3,116,25,124,4,131,1,131,3,125,10,122,10,124,0,160, - 26,124,2,124,8,124,10,161,3,1,0,87,0,124,14,83, - 0,4,0,116,2,144,1,121,1,1,0,1,0,1,0,89, - 0,124,14,83,0,124,14,83,0,119,0,119,0,119,0,119, - 0,119,0,41,16,122,190,67,111,110,99,114,101,116,101,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, - 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, - 103,101,116,95,99,111,100,101,46,10,10,32,32,32,32,32, - 32,32,32,82,101,97,100,105,110,103,32,111,102,32,98,121, - 116,101,99,111,100,101,32,114,101,113,117,105,114,101,115,32, - 112,97,116,104,95,115,116,97,116,115,32,116,111,32,98,101, - 32,105,109,112,108,101,109,101,110,116,101,100,46,32,84,111, - 32,119,114,105,116,101,10,32,32,32,32,32,32,32,32,98, - 121,116,101,99,111,100,101,44,32,115,101,116,95,100,97,116, - 97,32,109,117,115,116,32,97,108,115,111,32,98,101,32,105, - 109,112,108,101,109,101,110,116,101,100,46,10,10,32,32,32, - 32,32,32,32,32,78,70,84,114,179,0,0,0,114,169,0, - 0,0,114,155,0,0,0,114,3,0,0,0,114,0,0,0, - 0,114,44,0,0,0,90,5,110,101,118,101,114,90,6,97, - 108,119,97,121,115,218,4,115,105,122,101,122,13,123,125,32, - 109,97,116,99,104,101,115,32,123,125,41,3,114,127,0,0, - 0,114,117,0,0,0,114,118,0,0,0,122,19,99,111,100, - 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,125, - 41,27,114,189,0,0,0,114,108,0,0,0,114,94,0,0, - 0,114,238,0,0,0,114,63,0,0,0,114,33,0,0,0, - 114,241,0,0,0,114,162,0,0,0,218,10,109,101,109,111, - 114,121,118,105,101,119,114,173,0,0,0,90,21,99,104,101, - 99,107,95,104,97,115,104,95,98,97,115,101,100,95,112,121, - 99,115,114,167,0,0,0,218,17,95,82,65,87,95,77,65, - 71,73,67,95,78,85,77,66,69,82,114,168,0,0,0,114, - 166,0,0,0,114,128,0,0,0,114,160,0,0,0,114,145, - 0,0,0,114,159,0,0,0,114,175,0,0,0,114,247,0, - 0,0,114,15,0,0,0,218,19,100,111,110,116,95,119,114, - 105,116,101,95,98,121,116,101,99,111,100,101,114,181,0,0, - 0,114,180,0,0,0,114,4,0,0,0,114,240,0,0,0, - 41,15,114,129,0,0,0,114,149,0,0,0,114,118,0,0, - 0,114,164,0,0,0,114,184,0,0,0,114,167,0,0,0, - 90,10,104,97,115,104,95,98,97,115,101,100,90,12,99,104, - 101,99,107,95,115,111,117,114,99,101,114,117,0,0,0,218, - 2,115,116,114,41,0,0,0,114,161,0,0,0,114,16,0, - 0,0,90,10,98,121,116,101,115,95,100,97,116,97,90,11, - 99,111,100,101,95,111,98,106,101,99,116,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,227,0,0,0,141, - 3,0,0,115,170,0,0,0,10,7,4,1,4,1,4,1, - 4,1,4,1,2,1,12,1,14,1,8,1,2,2,14,1, - 14,1,4,1,12,2,2,1,14,1,14,1,4,1,2,3, - 2,1,6,254,2,4,12,1,16,1,12,1,4,1,12,1, - 10,1,2,1,2,255,8,2,2,254,10,3,4,1,2,1, - 2,1,4,254,8,4,2,1,4,255,2,128,2,3,2,1, - 2,1,6,1,2,1,2,1,4,251,4,128,18,7,4,1, - 8,2,2,1,4,255,6,2,2,1,2,1,6,254,8,3, - 10,1,12,1,12,1,14,1,6,1,2,255,4,2,8,1, - 10,1,14,1,6,2,6,1,4,255,2,2,16,1,4,3, - 14,254,2,1,8,1,2,254,2,233,2,225,2,250,2,251, - 255,128,122,21,83,111,117,114,99,101,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,78,41,10,114,136,0,0, - 0,114,135,0,0,0,114,137,0,0,0,114,237,0,0,0, - 114,238,0,0,0,114,240,0,0,0,114,239,0,0,0,114, - 243,0,0,0,114,247,0,0,0,114,227,0,0,0,114,7, + 114,248,0,0,0,120,3,0,0,115,18,0,0,0,8,0, + 8,2,8,8,8,14,8,10,8,7,14,10,12,8,255,128, + 114,248,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,92, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,101,7,135,0,102,1,100,8,100, + 9,132,8,131,1,90,8,101,7,100,10,100,11,132,0,131, + 1,90,9,100,12,100,13,132,0,90,10,101,7,100,14,100, + 15,132,0,131,1,90,11,135,0,4,0,90,12,83,0,41, + 16,218,10,70,105,108,101,76,111,97,100,101,114,122,103,66, + 97,115,101,32,102,105,108,101,32,108,111,97,100,101,114,32, + 99,108,97,115,115,32,119,104,105,99,104,32,105,109,112,108, + 101,109,101,110,116,115,32,116,104,101,32,108,111,97,100,101, + 114,32,112,114,111,116,111,99,111,108,32,109,101,116,104,111, + 100,115,32,116,104,97,116,10,32,32,32,32,114,101,113,117, + 105,114,101,32,102,105,108,101,32,115,121,115,116,101,109,32, + 117,115,97,103,101,46,99,3,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, + 16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, + 100,1,83,0,41,2,122,75,67,97,99,104,101,32,116,104, + 101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,110, + 100,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,32,102,105,108,101,32,102,111,117,110,100,32,98,121,32, + 116,104,101,10,32,32,32,32,32,32,32,32,102,105,110,100, + 101,114,46,78,114,183,0,0,0,41,3,114,143,0,0,0, + 114,163,0,0,0,114,65,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,235,0,0,0,13,4, + 0,0,115,6,0,0,0,6,3,10,1,255,128,122,19,70, + 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, + 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,2,0,0,0,67,0,0,0,243,24,0,0,0, + 124,0,106,0,124,1,106,0,107,2,111,11,124,0,106,1, + 124,1,106,1,107,2,83,0,114,69,0,0,0,169,2,218, + 9,95,95,99,108,97,115,115,95,95,114,156,0,0,0,169, + 2,114,143,0,0,0,90,5,111,116,104,101,114,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,6,95,95, + 101,113,95,95,19,4,0,0,243,8,0,0,0,12,1,10, + 1,2,255,255,128,122,17,70,105,108,101,76,111,97,100,101, + 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,243,20,0,0,0,116,0,124,0,106,1,131,1,116,0, + 124,0,106,2,131,1,65,0,83,0,114,69,0,0,0,169, + 3,218,4,104,97,115,104,114,141,0,0,0,114,65,0,0, + 0,169,1,114,143,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,8,95,95,104,97,115,104,95, + 95,23,4,0,0,243,4,0,0,0,20,1,255,128,122,19, + 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, + 104,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,3,0,0,0,115,16,0,0, + 0,116,0,116,1,124,0,131,2,160,2,124,1,161,1,83, + 0,41,2,122,100,76,111,97,100,32,97,32,109,111,100,117, + 108,101,32,102,114,111,109,32,97,32,102,105,108,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, + 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,3,218,5,115,117, + 112,101,114,114,10,1,0,0,114,247,0,0,0,114,246,0, + 0,0,169,1,114,13,1,0,0,114,7,0,0,0,114,8, + 0,0,0,114,247,0,0,0,26,4,0,0,115,4,0,0, + 0,16,10,255,128,122,22,70,105,108,101,76,111,97,100,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,243,6,0,0,0,124,0,106,0,83, + 0,169,2,122,58,82,101,116,117,114,110,32,116,104,101,32, + 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, + 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, + 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,78, + 114,71,0,0,0,114,246,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,203,0,0,0,38,4, + 0,0,243,4,0,0,0,6,3,255,128,122,23,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,8,0,0,0,67,0,0,0,115,128,0, + 0,0,116,0,124,0,116,1,116,2,102,2,131,2,114,36, + 116,3,160,4,116,5,124,1,131,1,161,1,143,12,125,2, + 124,2,160,6,161,0,87,0,2,0,100,1,4,0,4,0, + 131,3,1,0,83,0,49,0,115,29,119,1,1,0,1,0, + 1,0,89,0,1,0,100,1,83,0,116,3,160,7,124,1, + 100,2,161,2,143,12,125,2,124,2,160,6,161,0,87,0, + 2,0,100,1,4,0,4,0,131,3,1,0,83,0,49,0, + 115,57,119,1,1,0,1,0,1,0,89,0,1,0,100,1, + 83,0,41,3,122,39,82,101,116,117,114,110,32,116,104,101, + 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, + 97,115,32,114,97,119,32,98,121,116,101,115,46,78,218,1, + 114,41,8,114,185,0,0,0,114,248,0,0,0,218,19,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,114,91,0,0,0,90,9,111,112,101,110,95,99,111, + 100,101,114,109,0,0,0,90,4,114,101,97,100,114,92,0, + 0,0,41,3,114,143,0,0,0,114,65,0,0,0,114,94, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,235,0,0,0,82,3,0,0,115,18,0,0,0, - 8,0,8,2,8,8,8,14,8,10,8,7,14,10,12,8, - 255,128,114,235,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, - 115,92,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 0,0,114,254,0,0,0,43,4,0,0,115,16,0,0,0, + 14,2,16,1,22,1,20,128,14,2,22,1,20,128,255,128, + 122,19,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,100,97,116,97,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,20, + 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, + 2,124,0,131,1,83,0,41,3,78,114,0,0,0,0,41, + 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, + 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, + 114,115,114,30,1,0,0,41,3,114,143,0,0,0,114,243, + 0,0,0,114,30,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,19,103,101,116,95,114,101,115, + 111,117,114,99,101,95,114,101,97,100,101,114,52,4,0,0, + 115,6,0,0,0,12,2,8,1,255,128,122,30,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, + 117,114,99,101,95,114,101,97,100,101,114,41,13,114,150,0, + 0,0,114,149,0,0,0,114,151,0,0,0,114,152,0,0, + 0,114,235,0,0,0,114,15,1,0,0,114,21,1,0,0, + 114,160,0,0,0,114,247,0,0,0,114,203,0,0,0,114, + 254,0,0,0,114,32,1,0,0,90,13,95,95,99,108,97, + 115,115,99,101,108,108,95,95,114,7,0,0,0,114,7,0, + 0,0,114,24,1,0,0,114,8,0,0,0,114,10,1,0, + 0,8,4,0,0,115,26,0,0,0,8,0,4,2,8,3, + 8,6,8,4,2,3,14,1,2,11,10,1,8,4,2,9, + 18,1,255,128,114,10,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90, + 6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, + 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, + 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, + 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, + 2,106,1,124,2,106,2,100,1,156,2,83,0,41,3,122, + 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, + 104,46,41,2,114,193,0,0,0,114,5,1,0,0,78,41, + 3,114,75,0,0,0,218,8,115,116,95,109,116,105,109,101, + 90,7,115,116,95,115,105,122,101,41,3,114,143,0,0,0, + 114,65,0,0,0,114,9,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,251,0,0,0,62,4, + 0,0,115,6,0,0,0,8,2,14,1,255,128,122,27,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, + 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,24,0,0,0,116,0,124,1,131,1,125,4, + 124,0,106,1,124,2,124,3,124,4,100,1,141,3,83,0, + 41,2,78,169,1,218,5,95,109,111,100,101,41,2,114,139, + 0,0,0,114,252,0,0,0,41,5,114,143,0,0,0,114, + 134,0,0,0,114,132,0,0,0,114,41,0,0,0,114,78, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,253,0,0,0,67,4,0,0,115,6,0,0,0, + 8,2,16,1,255,128,122,32,83,111,117,114,99,101,70,105, + 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, + 98,121,116,101,99,111,100,101,114,87,0,0,0,114,35,1, + 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,9, + 0,0,0,11,0,0,0,67,0,0,0,115,254,0,0,0, + 116,0,124,1,131,1,92,2,125,4,125,5,103,0,125,6, + 124,4,114,31,116,1,124,4,131,1,115,31,116,0,124,4, + 131,1,92,2,125,4,125,7,124,6,160,2,124,7,161,1, + 1,0,124,4,114,31,116,1,124,4,131,1,114,14,116,3, + 124,6,131,1,68,0,93,48,125,7,116,4,124,4,124,7, + 131,2,125,4,122,7,116,5,160,6,124,4,161,1,1,0, + 87,0,113,35,4,0,116,7,121,58,1,0,1,0,1,0, + 89,0,113,35,4,0,116,8,121,126,1,0,125,8,1,0, + 122,15,116,9,160,10,100,1,124,4,124,8,161,3,1,0, + 87,0,89,0,100,2,125,8,126,8,1,0,100,2,83,0, + 100,2,125,8,126,8,119,1,122,15,116,11,124,1,124,2, + 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, + 1,0,87,0,100,2,83,0,4,0,116,8,121,125,1,0, + 125,8,1,0,122,14,116,9,160,10,100,1,124,1,124,8, + 161,3,1,0,87,0,89,0,100,2,125,8,126,8,100,2, + 83,0,100,2,125,8,126,8,119,1,119,0,119,0,41,4, + 122,27,87,114,105,116,101,32,98,121,116,101,115,32,100,97, + 116,97,32,116,111,32,97,32,102,105,108,101,46,122,27,99, + 111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32, + 123,33,114,125,58,32,123,33,114,125,78,122,12,99,114,101, + 97,116,101,100,32,123,33,114,125,41,12,114,74,0,0,0, + 114,83,0,0,0,114,61,0,0,0,218,8,114,101,118,101, + 114,115,101,100,114,67,0,0,0,114,18,0,0,0,90,5, + 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, + 115,69,114,114,111,114,114,76,0,0,0,114,159,0,0,0, + 114,173,0,0,0,114,95,0,0,0,41,9,114,143,0,0, + 0,114,65,0,0,0,114,41,0,0,0,114,36,1,0,0, + 218,6,112,97,114,101,110,116,114,120,0,0,0,114,63,0, + 0,0,114,68,0,0,0,114,255,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,252,0,0,0, + 72,4,0,0,115,58,0,0,0,12,2,4,1,12,2,12, + 1,10,1,12,254,12,4,10,1,2,1,14,1,12,1,4, + 2,14,1,6,3,4,1,4,255,16,2,8,128,2,1,12, + 1,18,1,14,1,8,2,2,1,18,255,8,128,2,254,2, + 247,255,128,122,25,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,41, + 7,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, + 114,152,0,0,0,114,251,0,0,0,114,253,0,0,0,114, + 252,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,33,1,0,0,58,4,0, + 0,115,12,0,0,0,8,0,4,2,8,2,8,5,18,5, + 255,128,114,33,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, + 115,32,0,0,0,101,0,90,1,100,0,90,2,100,1,90, 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100, - 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, - 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, - 14,100,15,132,0,131,1,90,11,135,0,4,0,90,12,83, - 0,41,16,218,10,70,105,108,101,76,111,97,100,101,114,122, - 103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101, - 114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109, - 112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97, - 100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116, - 104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101, - 113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101, - 109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, - 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, - 95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32, - 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, - 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, - 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, - 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, - 110,100,101,114,46,78,114,169,0,0,0,41,3,114,129,0, - 0,0,114,149,0,0,0,114,57,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,222,0,0,0, - 231,3,0,0,115,6,0,0,0,6,3,10,1,255,128,122, - 19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, - 105,116,95,95,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,243,24,0, - 0,0,124,0,106,0,124,1,106,0,107,2,111,11,124,0, - 106,1,124,1,106,1,107,2,83,0,114,120,0,0,0,169, - 2,218,9,95,95,99,108,97,115,115,95,95,114,142,0,0, - 0,169,2,114,129,0,0,0,90,5,111,116,104,101,114,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,6, - 95,95,101,113,95,95,237,3,0,0,243,8,0,0,0,12, - 1,10,1,2,255,255,128,122,17,70,105,108,101,76,111,97, - 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, - 0,0,0,243,20,0,0,0,116,0,124,0,106,1,131,1, - 116,0,124,0,106,2,131,1,65,0,83,0,114,120,0,0, - 0,169,3,218,4,104,97,115,104,114,127,0,0,0,114,57, - 0,0,0,169,1,114,129,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,8,95,95,104,97,115, - 104,95,95,241,3,0,0,243,4,0,0,0,20,1,255,128, - 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,104, - 97,115,104,95,95,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,16, - 0,0,0,116,0,116,1,124,0,131,2,160,2,124,1,161, - 1,83,0,41,2,122,100,76,111,97,100,32,97,32,109,111, - 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, - 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, - 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,41,3,218,5, - 115,117,112,101,114,114,253,0,0,0,114,234,0,0,0,114, - 233,0,0,0,169,1,114,0,1,0,0,114,7,0,0,0, - 114,8,0,0,0,114,234,0,0,0,244,3,0,0,115,4, - 0,0,0,16,10,255,128,122,22,70,105,108,101,76,111,97, - 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,243,6,0,0,0,124,0,106, - 0,83,0,169,2,122,58,82,101,116,117,114,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,111, - 117,114,99,101,32,102,105,108,101,32,97,115,32,102,111,117, - 110,100,32,98,121,32,116,104,101,32,102,105,110,100,101,114, - 46,78,114,61,0,0,0,114,233,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,189,0,0,0, - 0,4,0,0,243,4,0,0,0,6,3,255,128,122,23,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, - 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115, - 128,0,0,0,116,0,124,0,116,1,116,2,102,2,131,2, - 114,36,116,3,160,4,116,5,124,1,131,1,161,1,143,12, - 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, - 4,0,131,3,1,0,83,0,49,0,115,29,119,1,1,0, - 1,0,1,0,89,0,1,0,100,1,83,0,116,3,160,7, - 124,1,100,2,161,2,143,12,125,2,124,2,160,6,161,0, - 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, - 49,0,115,57,119,1,1,0,1,0,1,0,89,0,1,0, - 100,1,83,0,41,3,122,39,82,101,116,117,114,110,32,116, - 104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,116, - 104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,78, - 218,1,114,41,8,114,171,0,0,0,114,235,0,0,0,218, - 19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,114,78,0,0,0,90,9,111,112,101,110,95, - 99,111,100,101,114,96,0,0,0,90,4,114,101,97,100,114, - 79,0,0,0,41,3,114,129,0,0,0,114,57,0,0,0, - 114,82,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,241,0,0,0,5,4,0,0,115,16,0, - 0,0,14,2,16,1,22,1,20,128,14,2,22,1,20,128, - 255,128,122,19,70,105,108,101,76,111,97,100,101,114,46,103, - 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, - 115,20,0,0,0,100,1,100,2,108,0,109,1,125,2,1, - 0,124,2,124,0,131,1,83,0,41,3,78,114,0,0,0, - 0,41,1,218,10,70,105,108,101,82,101,97,100,101,114,41, - 2,218,17,105,109,112,111,114,116,108,105,98,46,114,101,97, - 100,101,114,115,114,17,1,0,0,41,3,114,129,0,0,0, - 114,230,0,0,0,114,17,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,19,103,101,116,95,114, - 101,115,111,117,114,99,101,95,114,101,97,100,101,114,14,4, - 0,0,115,6,0,0,0,12,2,8,1,255,128,122,30,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101, - 115,111,117,114,99,101,95,114,101,97,100,101,114,41,13,114, - 136,0,0,0,114,135,0,0,0,114,137,0,0,0,114,138, - 0,0,0,114,222,0,0,0,114,2,1,0,0,114,8,1, - 0,0,114,146,0,0,0,114,234,0,0,0,114,189,0,0, - 0,114,241,0,0,0,114,19,1,0,0,90,13,95,95,99, - 108,97,115,115,99,101,108,108,95,95,114,7,0,0,0,114, - 7,0,0,0,114,11,1,0,0,114,8,0,0,0,114,253, - 0,0,0,226,3,0,0,115,26,0,0,0,8,0,4,2, - 8,3,8,6,8,4,2,3,14,1,2,11,10,1,8,4, - 2,9,18,1,255,128,114,253,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 64,0,0,0,115,46,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,156,1,100,8,100,9,132, - 2,90,6,100,10,83,0,41,11,218,16,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,122,62,67,111,110, - 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,32,111,102,32,83,111,117,114,99,101,76,111, - 97,100,101,114,32,117,115,105,110,103,32,116,104,101,32,102, - 105,108,101,32,115,121,115,116,101,109,46,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,22,0,0,0,116,0,124,1,131,1,125, - 2,124,2,106,1,124,2,106,2,100,1,156,2,83,0,41, - 3,122,33,82,101,116,117,114,110,32,116,104,101,32,109,101, - 116,97,100,97,116,97,32,102,111,114,32,116,104,101,32,112, - 97,116,104,46,41,2,114,179,0,0,0,114,248,0,0,0, - 78,41,3,114,62,0,0,0,218,8,115,116,95,109,116,105, - 109,101,90,7,115,116,95,115,105,122,101,41,3,114,129,0, - 0,0,114,57,0,0,0,114,252,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,238,0,0,0, - 24,4,0,0,115,6,0,0,0,8,2,14,1,255,128,122, - 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, - 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, + 5,100,6,83,0,41,7,218,20,83,111,117,114,99,101,108, + 101,115,115,70,105,108,101,76,111,97,100,101,114,122,45,76, + 111,97,100,101,114,32,119,104,105,99,104,32,104,97,110,100, + 108,101,115,32,115,111,117,114,99,101,108,101,115,115,32,102, + 105,108,101,32,105,109,112,111,114,116,115,46,99,2,0,0, 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,67,0,0,0,115,24,0,0,0,116,0,124,1,131,1, - 125,4,124,0,106,1,124,2,124,3,124,4,100,1,141,3, - 83,0,41,2,78,169,1,218,5,95,109,111,100,101,41,2, - 114,125,0,0,0,114,239,0,0,0,41,5,114,129,0,0, - 0,114,118,0,0,0,114,117,0,0,0,114,41,0,0,0, - 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,240,0,0,0,29,4,0,0,115,6,0, - 0,0,8,2,16,1,255,128,122,32,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, - 101,95,98,121,116,101,99,111,100,101,114,74,0,0,0,114, - 22,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, - 0,9,0,0,0,11,0,0,0,67,0,0,0,115,254,0, - 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0, - 125,6,124,4,114,31,116,1,124,4,131,1,115,31,116,0, - 124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7, - 161,1,1,0,124,4,114,31,116,1,124,4,131,1,114,14, - 116,3,124,6,131,1,68,0,93,48,125,7,116,4,124,4, - 124,7,131,2,125,4,122,7,116,5,160,6,124,4,161,1, - 1,0,87,0,113,35,4,0,116,7,121,58,1,0,1,0, - 1,0,89,0,113,35,4,0,116,8,121,126,1,0,125,8, - 1,0,122,15,116,9,160,10,100,1,124,4,124,8,161,3, - 1,0,87,0,89,0,100,2,125,8,126,8,1,0,100,2, - 83,0,100,2,125,8,126,8,119,1,122,15,116,11,124,1, - 124,2,124,3,131,3,1,0,116,9,160,10,100,3,124,1, - 161,2,1,0,87,0,100,2,83,0,4,0,116,8,121,125, - 1,0,125,8,1,0,122,14,116,9,160,10,100,1,124,1, - 124,8,161,3,1,0,87,0,89,0,100,2,125,8,126,8, - 100,2,83,0,100,2,125,8,126,8,119,1,119,0,119,0, - 41,4,122,27,87,114,105,116,101,32,98,121,116,101,115,32, - 100,97,116,97,32,116,111,32,97,32,102,105,108,101,46,122, - 27,99,111,117,108,100,32,110,111,116,32,99,114,101,97,116, - 101,32,123,33,114,125,58,32,123,33,114,125,78,122,12,99, - 114,101,97,116,101,100,32,123,33,114,125,41,12,114,60,0, - 0,0,114,70,0,0,0,114,196,0,0,0,114,55,0,0, - 0,114,53,0,0,0,114,18,0,0,0,90,5,109,107,100, - 105,114,218,15,70,105,108,101,69,120,105,115,116,115,69,114, - 114,111,114,114,63,0,0,0,114,145,0,0,0,114,159,0, - 0,0,114,83,0,0,0,41,9,114,129,0,0,0,114,57, - 0,0,0,114,41,0,0,0,114,23,1,0,0,218,6,112, - 97,114,101,110,116,114,107,0,0,0,114,52,0,0,0,114, - 48,0,0,0,114,242,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,239,0,0,0,34,4,0, - 0,115,58,0,0,0,12,2,4,1,12,2,12,1,10,1, - 12,254,12,4,10,1,2,1,14,1,12,1,4,2,14,1, - 6,3,4,1,4,255,16,2,8,128,2,1,12,1,18,1, - 14,1,8,2,2,1,18,255,8,128,2,254,2,247,255,128, - 122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,100, - 101,114,46,115,101,116,95,100,97,116,97,78,41,7,114,136, - 0,0,0,114,135,0,0,0,114,137,0,0,0,114,138,0, - 0,0,114,238,0,0,0,114,240,0,0,0,114,239,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,20,1,0,0,20,4,0,0,115,12, - 0,0,0,8,0,4,2,8,2,8,5,18,5,255,128,114, - 20,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,64,0,0,0,115,32,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, - 83,0,41,7,218,20,83,111,117,114,99,101,108,101,115,115, - 70,105,108,101,76,111,97,100,101,114,122,45,76,111,97,100, - 101,114,32,119,104,105,99,104,32,104,97,110,100,108,101,115, - 32,115,111,117,114,99,101,108,101,115,115,32,102,105,108,101, - 32,105,109,112,111,114,116,115,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, - 0,0,115,68,0,0,0,124,0,160,0,124,1,161,1,125, - 2,124,0,160,1,124,2,161,1,125,3,124,1,124,2,100, - 1,156,2,125,4,116,2,124,3,124,1,124,4,131,3,1, - 0,116,3,116,4,124,3,131,1,100,2,100,0,133,2,25, - 0,124,1,124,2,100,3,141,3,83,0,41,4,78,114,169, - 0,0,0,114,155,0,0,0,41,2,114,127,0,0,0,114, - 117,0,0,0,41,5,114,189,0,0,0,114,241,0,0,0, - 114,162,0,0,0,114,175,0,0,0,114,249,0,0,0,41, - 5,114,129,0,0,0,114,149,0,0,0,114,57,0,0,0, - 114,41,0,0,0,114,161,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,227,0,0,0,69,4, - 0,0,115,24,0,0,0,10,1,10,1,2,4,2,1,6, - 254,12,4,2,1,14,1,2,1,2,1,6,253,255,128,122, - 29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,114,23,0,0,0,41,2,122,39, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, - 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,114,7,0,0,0,114,233,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,243,0,0,0,85,4,0,0,114,24,0,0,0,122, - 31,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, - 78,41,6,114,136,0,0,0,114,135,0,0,0,114,137,0, - 0,0,114,138,0,0,0,114,227,0,0,0,114,243,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,26,1,0,0,65,4,0,0,115,10, - 0,0,0,8,0,4,2,8,2,12,16,255,128,114,26,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,64,0,0,0,115,92,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, - 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, - 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, - 132,0,90,10,100,16,100,17,132,0,90,11,101,12,100,18, - 100,19,132,0,131,1,90,13,100,20,83,0,41,21,114,16, - 1,0,0,122,93,76,111,97,100,101,114,32,102,111,114,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, - 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, - 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, - 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, - 32,32,99,3,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, - 124,1,124,0,95,0,124,2,124,0,95,1,100,0,83,0, - 114,120,0,0,0,114,169,0,0,0,41,3,114,129,0,0, - 0,114,127,0,0,0,114,57,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,222,0,0,0,98, - 4,0,0,115,6,0,0,0,6,1,10,1,255,128,122,28, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,114,254,0,0,0,114,120,0,0,0,114, - 255,0,0,0,114,1,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,2,1,0,0,102,4,0, - 0,114,3,1,0,0,122,26,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,114,4,1,0,0, - 114,120,0,0,0,114,5,1,0,0,114,7,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,8, - 1,0,0,106,4,0,0,114,9,1,0,0,122,28,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,95,95,104,97,115,104,95,95,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,5,0,0,0,67, - 0,0,0,115,36,0,0,0,116,0,160,1,116,2,106,3, - 124,1,161,2,125,2,116,0,160,4,100,1,124,1,106,5, - 124,0,106,6,161,3,1,0,124,2,83,0,41,3,122,38, - 67,114,101,97,116,101,32,97,110,32,117,110,105,116,105,97, - 108,105,122,101,100,32,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,122,38,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,32,123,33,114,125,32,108,111, - 97,100,101,100,32,102,114,111,109,32,123,33,114,125,78,41, - 7,114,145,0,0,0,114,228,0,0,0,114,173,0,0,0, - 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, - 114,159,0,0,0,114,127,0,0,0,114,57,0,0,0,41, - 3,114,129,0,0,0,114,197,0,0,0,114,230,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 225,0,0,0,109,4,0,0,115,16,0,0,0,4,2,6, - 1,4,255,6,2,8,1,4,255,4,2,255,128,122,33,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,0, - 160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,4, - 100,1,124,0,106,5,124,0,106,6,161,3,1,0,100,2, - 83,0,41,3,122,30,73,110,105,116,105,97,108,105,122,101, - 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,122,40,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,32,123,33,114,125,32,101,120,101,99, - 117,116,101,100,32,102,114,111,109,32,123,33,114,125,78,41, - 7,114,145,0,0,0,114,228,0,0,0,114,173,0,0,0, - 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,159, - 0,0,0,114,127,0,0,0,114,57,0,0,0,169,2,114, - 129,0,0,0,114,230,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,231,0,0,0,117,4,0, - 0,115,10,0,0,0,14,2,6,1,8,1,8,255,255,128, - 122,31,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, + 0,67,0,0,0,115,68,0,0,0,124,0,160,0,124,1, + 161,1,125,2,124,0,160,1,124,2,161,1,125,3,124,1, + 124,2,100,1,156,2,125,4,116,2,124,3,124,1,124,4, + 131,3,1,0,116,3,116,4,124,3,131,1,100,2,100,0, + 133,2,25,0,124,1,124,2,100,3,141,3,83,0,41,4, + 78,114,183,0,0,0,114,169,0,0,0,41,2,114,141,0, + 0,0,114,132,0,0,0,41,5,114,203,0,0,0,114,254, + 0,0,0,114,176,0,0,0,114,189,0,0,0,114,6,1, + 0,0,41,5,114,143,0,0,0,114,163,0,0,0,114,65, + 0,0,0,114,41,0,0,0,114,175,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, + 0,107,4,0,0,115,24,0,0,0,10,1,10,1,2,4, + 2,1,6,254,12,4,2,1,14,1,2,1,2,1,6,253, + 255,128,122,29,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,3,0,0,0,115,36,0,0,0,116, - 0,124,0,106,1,131,1,100,1,25,0,137,0,116,2,135, - 0,102,1,100,2,100,3,132,8,116,3,68,0,131,1,131, - 1,83,0,41,5,122,49,82,101,116,117,114,110,32,84,114, - 117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32, - 112,97,99,107,97,103,101,46,114,3,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,51,0,0,0,115,28,0,0,0,129,0,124,0,93, - 9,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1, - 0,113,2,100,1,83,0,41,2,114,222,0,0,0,78,114, - 7,0,0,0,169,2,114,5,0,0,0,218,6,115,117,102, - 102,105,120,169,1,90,9,102,105,108,101,95,110,97,109,101, - 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,126, - 4,0,0,115,8,0,0,0,6,128,2,1,20,255,255,128, - 122,49,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, - 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, - 112,114,62,78,41,4,114,60,0,0,0,114,57,0,0,0, - 218,3,97,110,121,114,218,0,0,0,114,233,0,0,0,114, - 7,0,0,0,114,30,1,0,0,114,8,0,0,0,114,192, - 0,0,0,123,4,0,0,115,10,0,0,0,14,2,12,1, - 2,1,8,255,255,128,122,30,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, - 23,0,0,0,41,2,122,63,82,101,116,117,114,110,32,78, - 111,110,101,32,97,115,32,97,110,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,99,97,110,110,111, - 116,32,99,114,101,97,116,101,32,97,32,99,111,100,101,32, - 111,98,106,101,99,116,46,78,114,7,0,0,0,114,233,0, + 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,41, + 2,122,39,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,116,104,101,114,101,32,105,115,32,110,111,32,115,111, + 117,114,99,101,32,99,111,100,101,46,78,114,7,0,0,0, + 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,0,1,0,0,123,4,0,0,114,24,0, + 0,0,122,31,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,78,41,6,114,150,0,0,0,114,149,0,0,0, + 114,151,0,0,0,114,152,0,0,0,114,240,0,0,0,114, + 0,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,40,1,0,0,103,4,0, + 0,115,10,0,0,0,8,0,4,2,8,2,12,16,255,128, + 114,40,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,92, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, + 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,101, + 12,100,18,100,19,132,0,131,1,90,13,100,20,83,0,41, + 21,114,29,1,0,0,122,93,76,111,97,100,101,114,32,102, + 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, + 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, + 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, + 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, + 10,32,32,32,32,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, + 0,83,0,114,69,0,0,0,114,183,0,0,0,41,3,114, + 143,0,0,0,114,141,0,0,0,114,65,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, + 0,0,136,4,0,0,115,6,0,0,0,6,1,10,1,255, + 128,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 2,0,0,0,67,0,0,0,114,11,1,0,0,114,69,0, + 0,0,114,12,1,0,0,114,14,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,15,1,0,0, + 140,4,0,0,114,16,1,0,0,122,26,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, + 95,101,113,95,95,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,17, + 1,0,0,114,69,0,0,0,114,18,1,0,0,114,20,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,227,0,0,0,129,4,0,0,114,24,0,0,0,122, + 0,114,21,1,0,0,144,4,0,0,114,22,1,0,0,122, 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,114,23,0,0,0,41,2,122,53,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,32, - 104,97,118,101,32,110,111,32,115,111,117,114,99,101,32,99, - 111,100,101,46,78,114,7,0,0,0,114,233,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,243, - 0,0,0,133,4,0,0,114,24,0,0,0,122,30,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,114,12,1,0,0,114,13,1,0,0,114, - 61,0,0,0,114,233,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,189,0,0,0,137,4,0, - 0,114,14,1,0,0,122,32,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, - 102,105,108,101,110,97,109,101,78,41,14,114,136,0,0,0, - 114,135,0,0,0,114,137,0,0,0,114,138,0,0,0,114, - 222,0,0,0,114,2,1,0,0,114,8,1,0,0,114,225, - 0,0,0,114,231,0,0,0,114,192,0,0,0,114,227,0, - 0,0,114,243,0,0,0,114,146,0,0,0,114,189,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,16,1,0,0,90,4,0,0,115,26, - 0,0,0,8,0,4,2,8,6,8,4,8,4,8,3,8, - 8,8,6,8,6,8,4,2,4,14,1,255,128,114,16,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,104,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, - 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, - 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, - 132,0,90,10,100,16,100,17,132,0,90,11,100,18,100,19, - 132,0,90,12,100,20,100,21,132,0,90,13,100,22,100,23, - 132,0,90,14,100,24,83,0,41,25,218,14,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,97,38,1,0,0,82, - 101,112,114,101,115,101,110,116,115,32,97,32,110,97,109,101, - 115,112,97,99,101,32,112,97,99,107,97,103,101,39,115,32, - 112,97,116,104,46,32,32,73,116,32,117,115,101,115,32,116, - 104,101,32,109,111,100,117,108,101,32,110,97,109,101,10,32, - 32,32,32,116,111,32,102,105,110,100,32,105,116,115,32,112, - 97,114,101,110,116,32,109,111,100,117,108,101,44,32,97,110, - 100,32,102,114,111,109,32,116,104,101,114,101,32,105,116,32, - 108,111,111,107,115,32,117,112,32,116,104,101,32,112,97,114, - 101,110,116,39,115,10,32,32,32,32,95,95,112,97,116,104, - 95,95,46,32,32,87,104,101,110,32,116,104,105,115,32,99, - 104,97,110,103,101,115,44,32,116,104,101,32,109,111,100,117, - 108,101,39,115,32,111,119,110,32,112,97,116,104,32,105,115, - 32,114,101,99,111,109,112,117,116,101,100,44,10,32,32,32, - 32,117,115,105,110,103,32,112,97,116,104,95,102,105,110,100, - 101,114,46,32,32,70,111,114,32,116,111,112,45,108,101,118, - 101,108,32,109,111,100,117,108,101,115,44,32,116,104,101,32, - 112,97,114,101,110,116,32,109,111,100,117,108,101,39,115,32, - 112,97,116,104,10,32,32,32,32,105,115,32,115,121,115,46, - 112,97,116,104,46,99,4,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,36, - 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,116, - 2,124,0,160,3,161,0,131,1,124,0,95,4,124,3,124, - 0,95,5,100,0,83,0,114,120,0,0,0,41,6,218,5, - 95,110,97,109,101,218,5,95,112,97,116,104,114,122,0,0, - 0,218,16,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,218,17,95,108,97,115,116,95,112,97,114,101,110, - 116,95,112,97,116,104,218,12,95,112,97,116,104,95,102,105, - 110,100,101,114,169,4,114,129,0,0,0,114,127,0,0,0, - 114,57,0,0,0,90,11,112,97,116,104,95,102,105,110,100, - 101,114,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,222,0,0,0,150,4,0,0,115,10,0,0,0,6, - 1,6,1,14,1,10,1,255,128,122,23,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, - 124,0,106,0,160,1,100,1,161,1,92,3,125,1,125,2, - 125,3,124,2,100,2,107,2,114,15,100,3,83,0,124,1, - 100,4,102,2,83,0,41,6,122,62,82,101,116,117,114,110, - 115,32,97,32,116,117,112,108,101,32,111,102,32,40,112,97, - 114,101,110,116,45,109,111,100,117,108,101,45,110,97,109,101, - 44,32,112,97,114,101,110,116,45,112,97,116,104,45,97,116, - 116,114,45,110,97,109,101,41,114,85,0,0,0,114,10,0, - 0,0,41,2,114,15,0,0,0,114,57,0,0,0,90,8, - 95,95,112,97,116,104,95,95,78,41,2,114,33,1,0,0, - 114,54,0,0,0,41,4,114,129,0,0,0,114,25,1,0, - 0,218,3,100,111,116,90,2,109,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,23,95,102,105,110,100, - 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, - 101,115,156,4,0,0,115,10,0,0,0,18,2,8,1,4, - 2,8,3,255,128,122,38,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,102,105,110,100,95,112,97,114,101, - 110,116,95,112,97,116,104,95,110,97,109,101,115,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,28,0,0,0,124,0,160,0,161, - 0,92,2,125,1,125,2,116,1,116,2,106,3,124,1,25, - 0,124,2,131,2,83,0,114,120,0,0,0,41,4,114,40, - 1,0,0,114,141,0,0,0,114,15,0,0,0,218,7,109, - 111,100,117,108,101,115,41,3,114,129,0,0,0,90,18,112, - 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, - 101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,35,1,0,0,166,4,0,0,115,6,0,0,0,12,1, - 16,1,255,128,122,31,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, - 95,112,97,116,104,99,1,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,80, - 0,0,0,116,0,124,0,160,1,161,0,131,1,125,1,124, - 1,124,0,106,2,107,3,114,37,124,0,160,3,124,0,106, - 4,124,1,161,2,125,2,124,2,100,0,117,1,114,34,124, - 2,106,5,100,0,117,0,114,34,124,2,106,6,114,34,124, - 2,106,6,124,0,95,7,124,1,124,0,95,2,124,0,106, - 7,83,0,114,120,0,0,0,41,8,114,122,0,0,0,114, - 35,1,0,0,114,36,1,0,0,114,37,1,0,0,114,33, - 1,0,0,114,150,0,0,0,114,188,0,0,0,114,34,1, - 0,0,41,3,114,129,0,0,0,90,11,112,97,114,101,110, - 116,95,112,97,116,104,114,197,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,12,95,114,101,99, - 97,108,99,117,108,97,116,101,170,4,0,0,115,18,0,0, - 0,12,2,10,1,14,1,18,3,6,1,8,1,6,1,6, - 1,255,128,122,27,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,114,101,99,97,108,99,117,108,97,116,101, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,243,12,0,0,0,116,0, - 124,0,160,1,161,0,131,1,83,0,114,120,0,0,0,41, - 2,218,4,105,116,101,114,114,42,1,0,0,114,7,1,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,8,95,95,105,116,101,114,95,95,183,4,0,0,243,4, - 0,0,0,12,1,255,128,122,23,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,95,105,116,101,114,95,95, + 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,5,0, + 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, + 2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,124, + 1,106,5,124,0,106,6,161,3,1,0,124,2,83,0,41, + 3,122,38,67,114,101,97,116,101,32,97,110,32,117,110,105, + 116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, + 32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,114, + 125,78,41,7,114,159,0,0,0,114,241,0,0,0,114,187, + 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, + 109,105,99,114,173,0,0,0,114,141,0,0,0,114,65,0, + 0,0,41,3,114,143,0,0,0,114,210,0,0,0,114,243, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,238,0,0,0,147,4,0,0,115,16,0,0,0, + 4,2,6,1,4,255,6,2,8,1,4,255,4,2,255,128, + 122,33,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,5,0,0,0,67,0,0,0,115,36,0,0, + 0,116,0,160,1,116,2,106,3,124,1,161,2,1,0,116, + 0,160,4,100,1,124,0,106,5,124,0,106,6,161,3,1, + 0,100,2,83,0,41,3,122,30,73,110,105,116,105,97,108, + 105,122,101,32,97,110,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,122,40,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,101, + 120,101,99,117,116,101,100,32,102,114,111,109,32,123,33,114, + 125,78,41,7,114,159,0,0,0,114,241,0,0,0,114,187, + 0,0,0,90,12,101,120,101,99,95,100,121,110,97,109,105, + 99,114,173,0,0,0,114,141,0,0,0,114,65,0,0,0, + 169,2,114,143,0,0,0,114,243,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,244,0,0,0, + 155,4,0,0,115,10,0,0,0,14,2,6,1,8,1,8, + 255,255,128,122,31,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,3,0,0,0,115,36,0, + 0,0,116,0,124,0,106,1,131,1,100,1,25,0,137,0, + 116,2,135,0,102,1,100,2,100,3,132,8,116,3,68,0, + 131,1,131,1,83,0,41,5,122,49,82,101,116,117,114,110, + 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, + 32,97,32,112,97,99,107,97,103,101,46,114,3,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,51,0,0,0,115,28,0,0,0,129,0, + 124,0,93,9,125,1,136,0,100,0,124,1,23,0,107,2, + 86,0,1,0,113,2,100,1,83,0,41,2,114,235,0,0, + 0,78,114,7,0,0,0,169,2,114,5,0,0,0,218,6, + 115,117,102,102,105,120,169,1,90,9,102,105,108,101,95,110, + 97,109,101,114,7,0,0,0,114,8,0,0,0,114,9,0, + 0,0,164,4,0,0,115,8,0,0,0,6,128,2,1,20, + 255,255,128,122,49,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, + 97,103,101,46,60,108,111,99,97,108,115,62,46,60,103,101, + 110,101,120,112,114,62,78,41,4,114,74,0,0,0,114,65, + 0,0,0,218,3,97,110,121,114,231,0,0,0,114,246,0, + 0,0,114,7,0,0,0,114,44,1,0,0,114,8,0,0, + 0,114,206,0,0,0,161,4,0,0,115,10,0,0,0,14, + 2,12,1,2,1,8,255,255,128,122,30,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, + 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,23,0,0,0,41,2,122,63,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97, + 110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111, + 100,101,32,111,98,106,101,99,116,46,78,114,7,0,0,0, + 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,240,0,0,0,167,4,0,0,114,24,0, + 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,12,0,0,0,124,0, - 160,0,161,0,124,1,25,0,83,0,114,120,0,0,0,169, - 1,114,42,1,0,0,41,2,114,129,0,0,0,218,5,105, - 110,100,101,120,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,95,95,103,101,116,105,116,101,109,95,95, - 186,4,0,0,114,46,1,0,0,122,26,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,103,101,116,105, - 116,101,109,95,95,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,14, - 0,0,0,124,2,124,0,106,0,124,1,60,0,100,0,83, - 0,114,120,0,0,0,41,1,114,34,1,0,0,41,3,114, - 129,0,0,0,114,48,1,0,0,114,57,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, - 95,115,101,116,105,116,101,109,95,95,189,4,0,0,115,4, - 0,0,0,14,1,255,128,122,26,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,95,115,101,116,105,116,101, - 109,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,114,43,1,0, - 0,114,120,0,0,0,41,2,114,4,0,0,0,114,42,1, - 0,0,114,7,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,7,95,95,108,101,110,95,95,192, - 4,0,0,114,46,1,0,0,122,22,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,243,12,0,0,0,100,1, - 160,0,124,0,106,1,161,1,83,0,41,2,78,122,20,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, - 114,125,41,41,2,114,76,0,0,0,114,34,1,0,0,114, - 7,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,8,95,95,114,101,112,114,95,95,195,4,0, - 0,114,46,1,0,0,122,23,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,114,101,112,114,95,95,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,12,0,0,0,124,1,124, - 0,160,0,161,0,118,0,83,0,114,120,0,0,0,114,47, - 1,0,0,169,2,114,129,0,0,0,218,4,105,116,101,109, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 12,95,95,99,111,110,116,97,105,110,115,95,95,198,4,0, - 0,114,46,1,0,0,122,27,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,110, - 115,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, - 0,124,0,106,0,160,1,124,1,161,1,1,0,100,0,83, - 0,114,120,0,0,0,41,2,114,34,1,0,0,114,196,0, - 0,0,114,54,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,196,0,0,0,201,4,0,0,243, - 4,0,0,0,16,1,255,128,122,21,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, - 41,15,114,136,0,0,0,114,135,0,0,0,114,137,0,0, - 0,114,138,0,0,0,114,222,0,0,0,114,40,1,0,0, - 114,35,1,0,0,114,42,1,0,0,114,45,1,0,0,114, - 49,1,0,0,114,50,1,0,0,114,51,1,0,0,114,53, - 1,0,0,114,56,1,0,0,114,196,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,32,1,0,0,143,4,0,0,115,28,0,0,0,8, - 0,4,1,8,6,8,6,8,10,8,4,8,13,8,3,8, - 3,8,3,8,3,8,3,12,3,255,128,114,32,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,64,0,0,0,115,88,0,0,0,101,0, - 90,1,100,0,90,2,100,1,100,2,132,0,90,3,101,4, - 100,3,100,4,132,0,131,1,90,5,100,5,100,6,132,0, - 90,6,100,7,100,8,132,0,90,7,100,9,100,10,132,0, - 90,8,100,11,100,12,132,0,90,9,100,13,100,14,132,0, - 90,10,100,15,100,16,132,0,90,11,100,17,100,18,132,0, - 90,12,100,19,83,0,41,20,218,16,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,99,4,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,18,0,0,0,116,0,124,1,124,2,124,3, - 131,3,124,0,95,1,100,0,83,0,114,120,0,0,0,41, - 2,114,32,1,0,0,114,34,1,0,0,114,38,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 222,0,0,0,207,4,0,0,115,4,0,0,0,18,1,255, - 128,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,95,95,105,110,105,116,95,95,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,67,0,0,0,115,24,0,0,0,116,0,160,1,100,1, - 116,2,161,2,1,0,100,2,160,3,124,0,106,4,161,1, - 83,0,41,4,122,115,82,101,116,117,114,110,32,114,101,112, - 114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116, - 32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32, - 116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10, - 10,32,32,32,32,32,32,32,32,122,82,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,109,111,100,117, - 108,101,95,114,101,112,114,40,41,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, - 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, - 110,32,80,121,116,104,111,110,32,51,46,49,50,122,25,60, - 109,111,100,117,108,101,32,123,33,114,125,32,40,110,97,109, - 101,115,112,97,99,101,41,62,78,41,5,114,87,0,0,0, - 114,88,0,0,0,114,89,0,0,0,114,76,0,0,0,114, - 136,0,0,0,41,1,114,230,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,11,109,111,100,117, - 108,101,95,114,101,112,114,210,4,0,0,115,10,0,0,0, - 6,7,2,1,4,255,12,2,255,128,122,28,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, - 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,114,23,0,0,0,41,2,78,84,114,7,0,0,0,114, - 233,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,192,0,0,0,221,4,0,0,243,4,0,0, - 0,4,1,255,128,122,27,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,114,23,0,0,0, - 41,2,78,114,10,0,0,0,114,7,0,0,0,114,233,0, + 0,1,0,0,0,67,0,0,0,114,23,0,0,0,41,2, + 122,53,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,7,0,0,0,114,246,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,243,0,0,0,224,4,0,0,114,60,1,0,0,122, - 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,0, - 0,67,0,0,0,115,16,0,0,0,116,0,100,1,100,2, - 100,3,100,4,100,5,141,4,83,0,41,6,78,114,10,0, - 0,0,122,8,60,115,116,114,105,110,103,62,114,229,0,0, - 0,84,41,1,114,245,0,0,0,41,1,114,246,0,0,0, - 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,227,0,0,0,227,4,0,0,114,57,1, - 0,0,122,25,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,114,23,0,0,0,114,223,0,0,0, - 114,7,0,0,0,114,224,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,225,0,0,0,230,4, - 0,0,114,226,0,0,0,122,30,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,0,83,0,114,120,0,0,0,114,7, - 0,0,0,114,27,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,231,0,0,0,233,4,0,0, - 114,60,1,0,0,122,28,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,26,0,0, - 0,116,0,160,1,100,1,124,0,106,2,161,2,1,0,116, - 0,160,3,124,0,124,1,161,2,83,0,41,3,122,98,76, - 111,97,100,32,97,32,110,97,109,101,115,112,97,99,101,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, - 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,122,38,110,97,109,101,115,112,97,99,101,32,109,111,100, - 117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,32, - 112,97,116,104,32,123,33,114,125,78,41,4,114,145,0,0, - 0,114,159,0,0,0,114,34,1,0,0,114,232,0,0,0, - 114,233,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,234,0,0,0,236,4,0,0,115,10,0, - 0,0,6,7,4,1,4,255,12,3,255,128,122,28,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, - 0,0,0,115,22,0,0,0,100,1,100,2,108,0,109,1, - 125,2,1,0,124,2,124,0,106,2,131,1,83,0,41,3, - 78,114,0,0,0,0,41,1,218,15,78,97,109,101,115,112, - 97,99,101,82,101,97,100,101,114,41,3,114,18,1,0,0, - 114,61,1,0,0,114,34,1,0,0,41,3,114,129,0,0, - 0,114,230,0,0,0,114,61,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,19,1,0,0,248, - 4,0,0,115,6,0,0,0,12,1,10,1,255,128,122,36, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, - 97,100,101,114,78,41,13,114,136,0,0,0,114,135,0,0, - 0,114,137,0,0,0,114,222,0,0,0,114,219,0,0,0, - 114,59,1,0,0,114,192,0,0,0,114,243,0,0,0,114, - 227,0,0,0,114,225,0,0,0,114,231,0,0,0,114,234, - 0,0,0,114,19,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,58,1,0, - 0,206,4,0,0,115,24,0,0,0,8,0,8,1,2,3, - 10,1,8,10,8,3,8,3,8,3,8,3,8,3,12,12, - 255,128,114,58,1,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, - 115,118,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,100, - 4,100,5,132,0,131,1,90,6,101,7,100,6,100,7,132, - 0,131,1,90,8,101,7,100,8,100,9,132,0,131,1,90, - 9,101,7,100,19,100,11,100,12,132,1,131,1,90,10,101, - 7,100,20,100,13,100,14,132,1,131,1,90,11,101,7,100, - 21,100,15,100,16,132,1,131,1,90,12,101,4,100,17,100, - 18,132,0,131,1,90,13,100,10,83,0,41,22,218,10,80, - 97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,32, - 112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,32, - 115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,99, - 107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,116, - 116,114,105,98,117,116,101,115,46,99,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,64,0,0,0,116,0,116,1,106,2,160,3,161, - 0,131,1,68,0,93,22,92,2,125,0,125,1,124,1,100, - 1,117,0,114,20,116,1,106,2,124,0,61,0,113,7,116, - 4,124,1,100,2,131,2,114,29,124,1,160,5,161,0,1, - 0,113,7,100,1,83,0,41,3,122,125,67,97,108,108,32, - 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, - 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, - 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, - 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, - 109,101,110,116,101,100,41,46,78,218,17,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,41,6,218,4, - 108,105,115,116,114,15,0,0,0,218,19,112,97,116,104,95, - 105,109,112,111,114,116,101,114,95,99,97,99,104,101,218,5, - 105,116,101,109,115,114,139,0,0,0,114,63,1,0,0,41, - 2,114,127,0,0,0,218,6,102,105,110,100,101,114,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,63,1, - 0,0,3,5,0,0,115,16,0,0,0,22,4,8,1,10, - 1,10,1,8,1,2,128,4,252,255,128,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,9,0,0,0,67,0, - 0,0,115,76,0,0,0,116,0,106,1,100,1,117,1,114, - 14,116,0,106,1,115,14,116,2,160,3,100,2,116,4,161, - 2,1,0,116,0,106,1,68,0,93,17,125,1,122,7,124, - 1,124,0,131,1,87,0,2,0,1,0,83,0,4,0,116, - 5,121,37,1,0,1,0,1,0,89,0,113,17,100,1,83, - 0,119,0,41,3,122,46,83,101,97,114,99,104,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,102,111,114, - 32,97,32,102,105,110,100,101,114,32,102,111,114,32,39,112, - 97,116,104,39,46,78,122,23,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,41, - 6,114,15,0,0,0,218,10,112,97,116,104,95,104,111,111, - 107,115,114,87,0,0,0,114,88,0,0,0,114,148,0,0, - 0,114,128,0,0,0,41,2,114,57,0,0,0,90,4,104, - 111,111,107,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,13, - 5,0,0,115,20,0,0,0,16,3,12,1,10,1,2,1, - 14,1,12,1,4,1,4,2,2,253,255,128,122,22,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,104, - 111,111,107,115,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,8,0,0,0,67,0,0,0,115,100,0, - 0,0,124,1,100,1,107,2,114,20,122,6,116,0,160,1, - 161,0,125,1,87,0,110,9,4,0,116,2,121,49,1,0, - 1,0,1,0,89,0,100,2,83,0,122,8,116,3,106,4, - 124,1,25,0,125,2,87,0,124,2,83,0,4,0,116,5, - 121,48,1,0,1,0,1,0,124,0,160,6,124,1,161,1, - 125,2,124,2,116,3,106,4,124,1,60,0,89,0,124,2, - 83,0,119,0,119,0,41,3,122,210,71,101,116,32,116,104, - 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, - 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, - 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, - 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, - 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, - 100,32,99,97,99,104,101,32,105,116,46,32,73,102,32,110, - 111,32,102,105,110,100,101,114,32,105,115,32,97,118,97,105, - 108,97,98,108,101,44,32,115,116,111,114,101,32,78,111,110, - 101,46,10,10,32,32,32,32,32,32,32,32,114,10,0,0, - 0,78,41,7,114,18,0,0,0,114,69,0,0,0,218,17, - 70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,111, - 114,114,15,0,0,0,114,65,1,0,0,218,8,75,101,121, - 69,114,114,111,114,114,69,1,0,0,41,3,114,208,0,0, - 0,114,57,0,0,0,114,67,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,20,95,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 26,5,0,0,115,30,0,0,0,8,8,2,1,12,1,12, - 1,6,3,2,1,12,1,4,4,12,253,10,1,12,1,4, - 1,2,253,2,250,255,128,122,31,80,97,116,104,70,105,110, - 100,101,114,46,95,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,99,3,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,4,0,0,0,67,0,0, - 0,115,138,0,0,0,116,0,124,2,100,1,131,2,114,27, - 116,1,160,2,124,2,161,1,155,0,100,2,157,2,125,3, - 116,3,160,4,124,3,116,5,161,2,1,0,124,2,160,6, - 124,1,161,1,92,2,125,4,125,5,110,21,116,1,160,2, - 124,2,161,1,155,0,100,3,157,2,125,3,116,3,160,4, - 124,3,116,5,161,2,1,0,124,2,160,7,124,1,161,1, - 125,4,103,0,125,5,124,4,100,0,117,1,114,58,116,1, - 160,8,124,1,124,4,161,2,83,0,116,1,160,9,124,1, - 100,0,161,2,125,6,124,5,124,6,95,10,124,6,83,0, - 41,4,78,114,147,0,0,0,122,53,46,102,105,110,100,95, - 115,112,101,99,40,41,32,110,111,116,32,102,111,117,110,100, - 59,32,102,97,108,108,105,110,103,32,98,97,99,107,32,116, - 111,32,102,105,110,100,95,108,111,97,100,101,114,40,41,122, - 53,46,102,105,110,100,95,115,112,101,99,40,41,32,110,111, - 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, - 32,98,97,99,107,32,116,111,32,102,105,110,100,95,109,111, - 100,117,108,101,40,41,41,11,114,139,0,0,0,114,145,0, - 0,0,90,12,95,111,98,106,101,99,116,95,110,97,109,101, - 114,87,0,0,0,114,88,0,0,0,114,148,0,0,0,114, - 147,0,0,0,114,216,0,0,0,114,211,0,0,0,114,193, - 0,0,0,114,188,0,0,0,41,7,114,208,0,0,0,114, - 149,0,0,0,114,67,1,0,0,114,152,0,0,0,114,150, - 0,0,0,114,151,0,0,0,114,197,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,108, - 101,103,97,99,121,95,103,101,116,95,115,112,101,99,48,5, - 0,0,115,28,0,0,0,10,4,16,1,12,2,16,1,16, - 2,12,2,10,1,4,1,8,1,12,1,12,1,6,1,4, - 1,255,128,122,27,80,97,116,104,70,105,110,100,101,114,46, - 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, - 78,99,4,0,0,0,0,0,0,0,0,0,0,0,9,0, - 0,0,5,0,0,0,67,0,0,0,115,166,0,0,0,103, - 0,125,4,124,2,68,0,93,67,125,5,116,0,124,5,116, - 1,116,2,102,2,131,2,115,14,113,4,124,0,160,3,124, - 5,161,1,125,6,124,6,100,1,117,1,114,71,116,4,124, - 6,100,2,131,2,114,35,124,6,160,5,124,1,124,3,161, - 2,125,7,110,6,124,0,160,6,124,1,124,6,161,2,125, - 7,124,7,100,1,117,0,114,46,113,4,124,7,106,7,100, - 1,117,1,114,55,124,7,2,0,1,0,83,0,124,7,106, - 8,125,8,124,8,100,1,117,0,114,66,116,9,100,3,131, - 1,130,1,124,4,160,10,124,8,161,1,1,0,113,4,116, - 11,160,12,124,1,100,1,161,2,125,7,124,4,124,7,95, - 8,124,7,83,0,41,4,122,63,70,105,110,100,32,116,104, - 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, - 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, - 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, - 103,101,32,110,97,109,101,46,78,114,213,0,0,0,122,19, - 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, - 100,101,114,41,13,114,171,0,0,0,114,96,0,0,0,218, - 5,98,121,116,101,115,114,72,1,0,0,114,139,0,0,0, - 114,213,0,0,0,114,73,1,0,0,114,150,0,0,0,114, - 188,0,0,0,114,128,0,0,0,114,177,0,0,0,114,145, - 0,0,0,114,193,0,0,0,41,9,114,208,0,0,0,114, - 149,0,0,0,114,57,0,0,0,114,212,0,0,0,218,14, - 110,97,109,101,115,112,97,99,101,95,112,97,116,104,90,5, - 101,110,116,114,121,114,67,1,0,0,114,197,0,0,0,114, - 151,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,9,95,103,101,116,95,115,112,101,99,69,5, - 0,0,115,44,0,0,0,4,5,8,1,14,1,2,1,10, - 1,8,1,10,1,14,1,12,2,8,1,2,1,10,1,8, - 1,6,1,8,1,8,1,10,5,2,128,12,2,6,1,4, - 1,255,128,122,20,80,97,116,104,70,105,110,100,101,114,46, - 95,103,101,116,95,115,112,101,99,99,4,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,5,0,0,0,67,0, - 0,0,115,94,0,0,0,124,2,100,1,117,0,114,7,116, - 0,106,1,125,2,124,0,160,2,124,1,124,2,124,3,161, - 3,125,4,124,4,100,1,117,0,114,20,100,1,83,0,124, - 4,106,3,100,1,117,0,114,45,124,4,106,4,125,5,124, - 5,114,43,100,1,124,4,95,5,116,6,124,1,124,5,124, - 0,106,2,131,3,124,4,95,4,124,4,83,0,100,1,83, - 0,124,4,83,0,41,2,122,141,84,114,121,32,116,111,32, - 102,105,110,100,32,97,32,115,112,101,99,32,102,111,114,32, - 39,102,117,108,108,110,97,109,101,39,32,111,110,32,115,121, - 115,46,112,97,116,104,32,111,114,32,39,112,97,116,104,39, - 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,115, - 101,97,114,99,104,32,105,115,32,98,97,115,101,100,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,97,110,100,32,115,121,115,46,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,46,10,32,32, - 32,32,32,32,32,32,78,41,7,114,15,0,0,0,114,57, - 0,0,0,114,76,1,0,0,114,150,0,0,0,114,188,0, - 0,0,114,191,0,0,0,114,32,1,0,0,41,6,114,208, - 0,0,0,114,149,0,0,0,114,57,0,0,0,114,212,0, - 0,0,114,197,0,0,0,114,75,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,213,0,0,0, - 101,5,0,0,115,28,0,0,0,8,6,6,1,14,1,8, - 1,4,1,10,1,6,1,4,1,6,3,16,1,4,1,4, - 2,4,2,255,128,122,20,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, - 67,0,0,0,115,42,0,0,0,116,0,160,1,100,1,116, - 2,161,2,1,0,124,0,160,3,124,1,124,2,161,2,125, - 3,124,3,100,2,117,0,114,18,100,2,83,0,124,3,106, - 4,83,0,41,3,122,170,102,105,110,100,32,116,104,101,32, - 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, - 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, - 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, - 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,122,101,80,97,116,104,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,40,41,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, - 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, - 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,59, - 32,117,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,78,114,214,0,0,0,114,215, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,216,0,0,0,125,5,0,0,115,16,0,0,0, - 6,8,2,2,4,254,12,3,8,1,4,1,6,1,255,128, - 122,22,80,97,116,104,70,105,110,100,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,99,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,4,0,0,0,79,0,0, - 0,115,28,0,0,0,100,1,100,2,108,0,109,1,125,2, - 1,0,124,2,106,2,124,0,105,0,124,1,164,1,142,1, - 83,0,41,4,97,32,1,0,0,10,32,32,32,32,32,32, - 32,32,70,105,110,100,32,100,105,115,116,114,105,98,117,116, - 105,111,110,115,46,10,10,32,32,32,32,32,32,32,32,82, - 101,116,117,114,110,32,97,110,32,105,116,101,114,97,98,108, - 101,32,111,102,32,97,108,108,32,68,105,115,116,114,105,98, - 117,116,105,111,110,32,105,110,115,116,97,110,99,101,115,32, - 99,97,112,97,98,108,101,32,111,102,10,32,32,32,32,32, - 32,32,32,108,111,97,100,105,110,103,32,116,104,101,32,109, - 101,116,97,100,97,116,97,32,102,111,114,32,112,97,99,107, - 97,103,101,115,32,109,97,116,99,104,105,110,103,32,96,96, - 99,111,110,116,101,120,116,46,110,97,109,101,96,96,10,32, - 32,32,32,32,32,32,32,40,111,114,32,97,108,108,32,110, - 97,109,101,115,32,105,102,32,96,96,78,111,110,101,96,96, - 32,105,110,100,105,99,97,116,101,100,41,32,97,108,111,110, - 103,32,116,104,101,32,112,97,116,104,115,32,105,110,32,116, - 104,101,32,108,105,115,116,10,32,32,32,32,32,32,32,32, - 111,102,32,100,105,114,101,99,116,111,114,105,101,115,32,96, - 96,99,111,110,116,101,120,116,46,112,97,116,104,96,96,46, - 10,32,32,32,32,32,32,32,32,114,0,0,0,0,41,1, - 218,18,77,101,116,97,100,97,116,97,80,97,116,104,70,105, - 110,100,101,114,78,41,3,90,18,105,109,112,111,114,116,108, - 105,98,46,109,101,116,97,100,97,116,97,114,77,1,0,0, - 218,18,102,105,110,100,95,100,105,115,116,114,105,98,117,116, - 105,111,110,115,41,3,114,130,0,0,0,114,131,0,0,0, - 114,77,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,78,1,0,0,141,5,0,0,115,6,0, - 0,0,12,10,16,1,255,128,122,29,80,97,116,104,70,105, - 110,100,101,114,46,102,105,110,100,95,100,105,115,116,114,105, - 98,117,116,105,111,110,115,41,1,78,41,2,78,78,41,1, - 78,41,14,114,136,0,0,0,114,135,0,0,0,114,137,0, - 0,0,114,138,0,0,0,114,219,0,0,0,114,63,1,0, - 0,114,69,1,0,0,114,220,0,0,0,114,72,1,0,0, - 114,73,1,0,0,114,76,1,0,0,114,213,0,0,0,114, - 216,0,0,0,114,78,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,62,1, - 0,0,255,4,0,0,115,38,0,0,0,8,0,4,2,2, - 2,10,1,2,9,10,1,2,12,10,1,2,21,10,1,2, - 20,12,1,2,31,12,1,2,23,12,1,2,15,14,1,255, - 128,114,62,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 90,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 101,6,90,7,100,6,100,7,132,0,90,8,100,8,100,9, - 132,0,90,9,100,19,100,11,100,12,132,1,90,10,100,13, - 100,14,132,0,90,11,101,12,100,15,100,16,132,0,131,1, - 90,13,100,17,100,18,132,0,90,14,100,10,83,0,41,20, - 218,10,70,105,108,101,70,105,110,100,101,114,122,172,70,105, - 108,101,45,98,97,115,101,100,32,102,105,110,100,101,114,46, - 10,10,32,32,32,32,73,110,116,101,114,97,99,116,105,111, - 110,115,32,119,105,116,104,32,116,104,101,32,102,105,108,101, - 32,115,121,115,116,101,109,32,97,114,101,32,99,97,99,104, - 101,100,32,102,111,114,32,112,101,114,102,111,114,109,97,110, - 99,101,44,32,98,101,105,110,103,10,32,32,32,32,114,101, - 102,114,101,115,104,101,100,32,119,104,101,110,32,116,104,101, - 32,100,105,114,101,99,116,111,114,121,32,116,104,101,32,102, - 105,110,100,101,114,32,105,115,32,104,97,110,100,108,105,110, - 103,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102, - 105,101,100,46,10,10,32,32,32,32,99,2,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,7, - 0,0,0,115,84,0,0,0,103,0,125,3,124,2,68,0, - 93,16,92,2,137,0,125,4,124,3,160,0,135,0,102,1, - 100,1,100,2,132,8,124,4,68,0,131,1,161,1,1,0, - 113,4,124,3,124,0,95,1,124,1,112,27,100,3,124,0, - 95,2,100,4,124,0,95,3,116,4,131,0,124,0,95,5, - 116,4,131,0,124,0,95,6,100,5,83,0,41,6,122,154, - 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, - 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, - 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, - 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, - 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, - 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, - 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, - 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, - 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, - 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,51, - 0,0,0,115,24,0,0,0,129,0,124,0,93,7,125,1, - 124,1,136,0,102,2,86,0,1,0,113,2,100,0,83,0, - 114,120,0,0,0,114,7,0,0,0,114,28,1,0,0,169, - 1,114,150,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,9,0,0,0,170,5,0,0,115,6,0,0,0,6,128, - 18,0,255,128,122,38,70,105,108,101,70,105,110,100,101,114, - 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,114,85,0,0, - 0,114,115,0,0,0,78,41,7,114,177,0,0,0,218,8, - 95,108,111,97,100,101,114,115,114,57,0,0,0,218,11,95, - 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, - 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,41,5,114,129,0,0,0,114,57,0,0,0,218,14,108, - 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, - 111,97,100,101,114,115,114,199,0,0,0,114,7,0,0,0, - 114,80,1,0,0,114,8,0,0,0,114,222,0,0,0,164, - 5,0,0,115,18,0,0,0,4,4,12,1,26,1,6,1, - 10,2,6,1,8,1,12,1,255,128,122,19,70,105,108,101, - 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, + 0,114,0,1,0,0,171,4,0,0,114,24,0,0,0,122, + 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,114,25,1,0,0,114,26,1, + 0,0,114,71,0,0,0,114,246,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,203,0,0,0, + 175,4,0,0,114,27,1,0,0,122,32,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,102,105,108,101,110,97,109,101,78,41,14,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, + 0,0,114,235,0,0,0,114,15,1,0,0,114,21,1,0, + 0,114,238,0,0,0,114,244,0,0,0,114,206,0,0,0, + 114,240,0,0,0,114,0,1,0,0,114,160,0,0,0,114, + 203,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,29,1,0,0,128,4,0, + 0,115,26,0,0,0,8,0,4,2,8,6,8,4,8,4, + 8,3,8,8,8,6,8,6,8,4,2,4,14,1,255,128, + 114,29,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,104, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, + 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,100, + 18,100,19,132,0,90,12,100,20,100,21,132,0,90,13,100, + 22,100,23,132,0,90,14,100,24,83,0,41,25,218,14,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,1, + 0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,110, + 97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,101, + 39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,101, + 115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, + 101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,116, + 115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,44, + 32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,32, + 105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,32, + 112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,112, + 97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,105, + 115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,109, + 111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,104, + 32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,10, + 32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,102, + 105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,45, + 108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,116, + 104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,101, + 39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,115, + 121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,36,0,0,0,124,1,124,0,95,0,124,2,124,0, + 95,1,116,2,124,0,160,3,161,0,131,1,124,0,95,4, + 124,3,124,0,95,5,100,0,83,0,114,69,0,0,0,41, + 6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,114, + 136,0,0,0,218,16,95,103,101,116,95,112,97,114,101,110, + 116,95,112,97,116,104,218,17,95,108,97,115,116,95,112,97, + 114,101,110,116,95,112,97,116,104,218,12,95,112,97,116,104, + 95,102,105,110,100,101,114,169,4,114,143,0,0,0,114,141, + 0,0,0,114,65,0,0,0,90,11,112,97,116,104,95,102, + 105,110,100,101,114,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,235,0,0,0,188,4,0,0,115,10,0, + 0,0,6,1,6,1,14,1,10,1,255,128,122,23,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, + 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,124,0,106,0,160,1,100,1,161,1,92,3,125, + 1,125,2,125,3,124,2,100,2,107,2,114,15,100,3,83, + 0,124,1,100,4,102,2,83,0,41,6,122,62,82,101,116, + 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, + 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, + 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, + 45,97,116,116,114,45,110,97,109,101,41,114,97,0,0,0, + 114,10,0,0,0,41,2,114,15,0,0,0,114,65,0,0, + 0,90,8,95,95,112,97,116,104,95,95,78,41,2,114,47, + 1,0,0,114,104,0,0,0,41,4,114,143,0,0,0,114, + 39,1,0,0,218,3,100,111,116,90,2,109,101,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,102, + 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, + 110,97,109,101,115,194,4,0,0,115,10,0,0,0,18,2, + 8,1,4,2,8,3,255,128,122,38,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, + 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,28,0,0,0,124,0, + 160,0,161,0,92,2,125,1,125,2,116,1,116,2,106,3, + 124,1,25,0,124,2,131,2,83,0,114,69,0,0,0,41, + 4,114,54,1,0,0,114,155,0,0,0,114,15,0,0,0, + 218,7,109,111,100,117,108,101,115,41,3,114,143,0,0,0, + 90,18,112,97,114,101,110,116,95,109,111,100,117,108,101,95, + 110,97,109,101,90,14,112,97,116,104,95,97,116,116,114,95, + 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,49,1,0,0,204,4,0,0,115,6,0,0, + 0,12,1,16,1,255,128,122,31,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,114, + 101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, + 0,115,80,0,0,0,116,0,124,0,160,1,161,0,131,1, + 125,1,124,1,124,0,106,2,107,3,114,37,124,0,160,3, + 124,0,106,4,124,1,161,2,125,2,124,2,100,0,117,1, + 114,34,124,2,106,5,100,0,117,0,114,34,124,2,106,6, + 114,34,124,2,106,6,124,0,95,7,124,1,124,0,95,2, + 124,0,106,7,83,0,114,69,0,0,0,41,8,114,136,0, + 0,0,114,49,1,0,0,114,50,1,0,0,114,51,1,0, + 0,114,47,1,0,0,114,164,0,0,0,114,202,0,0,0, + 114,48,1,0,0,41,3,114,143,0,0,0,90,11,112,97, + 114,101,110,116,95,112,97,116,104,114,210,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,12,95, + 114,101,99,97,108,99,117,108,97,116,101,208,4,0,0,115, + 18,0,0,0,12,2,10,1,14,1,18,3,6,1,8,1, + 6,1,6,1,255,128,122,27,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,114,101,99,97,108,99,117,108, + 97,116,101,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,243,12,0,0, + 0,116,0,124,0,160,1,161,0,131,1,83,0,114,69,0, + 0,0,41,2,218,4,105,116,101,114,114,56,1,0,0,114, + 20,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,8,95,95,105,116,101,114,95,95,221,4,0, + 0,243,4,0,0,0,12,1,255,128,122,23,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,95,105,116,101, + 114,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, + 0,124,0,160,0,161,0,124,1,25,0,83,0,114,69,0, + 0,0,169,1,114,56,1,0,0,41,2,114,143,0,0,0, + 218,5,105,110,100,101,120,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,11,95,95,103,101,116,105,116,101, + 109,95,95,224,4,0,0,114,60,1,0,0,122,26,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,103, + 101,116,105,116,101,109,95,95,99,3,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,14,0,0,0,124,2,124,0,106,0,124,1,60,0, + 100,0,83,0,114,69,0,0,0,41,1,114,48,1,0,0, + 41,3,114,143,0,0,0,114,62,1,0,0,114,65,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,11,95,95,115,101,116,105,116,101,109,95,95,227,4,0, + 0,115,4,0,0,0,14,1,255,128,122,26,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,95,115,101,116, + 105,116,101,109,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, + 57,1,0,0,114,69,0,0,0,41,2,114,4,0,0,0, + 114,56,1,0,0,114,20,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,7,95,95,108,101,110, + 95,95,230,4,0,0,114,60,1,0,0,122,22,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, + 110,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,243,12,0,0, + 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, + 122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 40,123,33,114,125,41,41,2,114,89,0,0,0,114,48,1, + 0,0,114,20,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,8,95,95,114,101,112,114,95,95, + 233,4,0,0,114,60,1,0,0,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114, + 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, + 124,1,124,0,160,0,161,0,118,0,83,0,114,69,0,0, + 0,114,61,1,0,0,169,2,114,143,0,0,0,218,4,105, + 116,101,109,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,95, + 236,4,0,0,114,60,1,0,0,122,27,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,99,111,110,116, + 97,105,110,115,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 16,0,0,0,124,0,106,0,160,1,124,1,161,1,1,0, + 100,0,83,0,114,69,0,0,0,41,2,114,48,1,0,0, + 114,61,0,0,0,114,68,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,61,0,0,0,239,4, + 0,0,243,4,0,0,0,16,1,255,128,122,21,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,97,112,112,101, + 110,100,78,41,15,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,235,0,0,0,114,54, + 1,0,0,114,49,1,0,0,114,56,1,0,0,114,59,1, + 0,0,114,63,1,0,0,114,64,1,0,0,114,65,1,0, + 0,114,67,1,0,0,114,70,1,0,0,114,61,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,46,1,0,0,181,4,0,0,115,28,0, + 0,0,8,0,4,1,8,6,8,6,8,10,8,4,8,13, + 8,3,8,3,8,3,8,3,8,3,12,3,255,128,114,46, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,88,0,0, + 0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,90, + 3,101,4,100,3,100,4,132,0,131,1,90,5,100,5,100, + 6,132,0,90,6,100,7,100,8,132,0,90,7,100,9,100, + 10,132,0,90,8,100,11,100,12,132,0,90,9,100,13,100, + 14,132,0,90,10,100,15,100,16,132,0,90,11,100,17,100, + 18,132,0,90,12,100,19,83,0,41,20,218,16,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,18,0,0,0,116,0,124,1,124, + 2,124,3,131,3,124,0,95,1,100,0,83,0,114,69,0, + 0,0,41,2,114,46,1,0,0,114,48,1,0,0,114,52, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,235,0,0,0,245,4,0,0,115,4,0,0,0, + 18,1,255,128,122,25,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,10,0,0,0,100,1,124, - 0,95,0,100,2,83,0,41,3,122,31,73,110,118,97,108, - 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, - 111,114,121,32,109,116,105,109,101,46,114,115,0,0,0,78, - 41,1,114,82,1,0,0,114,7,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,63,1,0,0, - 178,5,0,0,114,68,0,0,0,122,28,70,105,108,101,70, - 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, - 115,54,0,0,0,116,0,160,1,100,1,116,2,161,2,1, - 0,124,0,160,3,124,1,161,1,125,2,124,2,100,2,117, - 0,114,19,100,2,103,0,102,2,83,0,124,2,106,4,124, - 2,106,5,112,25,103,0,102,2,83,0,41,3,122,197,84, - 114,121,32,116,111,32,102,105,110,100,32,97,32,108,111,97, - 100,101,114,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,44,32,111,114, - 32,116,104,101,32,110,97,109,101,115,112,97,99,101,10,32, - 32,32,32,32,32,32,32,112,97,99,107,97,103,101,32,112, - 111,114,116,105,111,110,115,46,32,82,101,116,117,114,110,115, - 32,40,108,111,97,100,101,114,44,32,108,105,115,116,45,111, - 102,45,112,111,114,116,105,111,110,115,41,46,10,10,32,32, + 4,0,0,0,67,0,0,0,115,24,0,0,0,116,0,160, + 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106, + 4,161,1,83,0,41,4,122,115,82,101,116,117,114,110,32, + 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, + 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, + 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, + 102,46,10,10,32,32,32,32,32,32,32,32,122,82,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,109, + 111,100,117,108,101,95,114,101,112,114,40,41,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, + 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, + 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, + 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, + 110,97,109,101,115,112,97,99,101,41,62,78,41,5,114,99, + 0,0,0,114,100,0,0,0,114,101,0,0,0,114,89,0, + 0,0,114,150,0,0,0,41,1,114,243,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,109, + 111,100,117,108,101,95,114,101,112,114,248,4,0,0,115,10, + 0,0,0,6,7,2,1,4,255,12,2,255,128,122,28,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,114,23,0,0,0,41,2,78,84,114,7,0, + 0,0,114,246,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,206,0,0,0,3,5,0,0,243, + 4,0,0,0,4,1,255,128,122,27,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,23, + 0,0,0,41,2,78,114,10,0,0,0,114,7,0,0,0, + 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,0,1,0,0,6,5,0,0,114,74,1, + 0,0,122,27,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 6,0,0,0,67,0,0,0,115,16,0,0,0,116,0,100, + 1,100,2,100,3,100,4,100,5,141,4,83,0,41,6,78, + 114,10,0,0,0,122,8,60,115,116,114,105,110,103,62,114, + 242,0,0,0,84,41,1,114,2,1,0,0,41,1,114,3, + 1,0,0,114,246,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,240,0,0,0,9,5,0,0, + 114,71,1,0,0,122,25,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,114,23,0,0,0,114,236, + 0,0,0,114,7,0,0,0,114,237,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,238,0,0, + 0,12,5,0,0,114,239,0,0,0,122,30,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,99,114,101, + 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,115,4,0,0,0,100,0,83,0,114,69,0,0, + 0,114,7,0,0,0,114,41,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,244,0,0,0,15, + 5,0,0,114,74,1,0,0,122,28,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,101,120,101,99,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 26,0,0,0,116,0,160,1,100,1,124,0,106,2,161,2, + 1,0,116,0,160,3,124,0,124,1,161,2,83,0,41,3, + 122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97, + 99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105, + 116,104,32,112,97,116,104,32,123,33,114,125,78,41,4,114, + 159,0,0,0,114,173,0,0,0,114,48,1,0,0,114,245, + 0,0,0,114,246,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,247,0,0,0,18,5,0,0, + 115,10,0,0,0,6,7,4,1,4,255,12,3,255,128,122, + 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0, + 0,0,67,0,0,0,115,22,0,0,0,100,1,100,2,108, + 0,109,1,125,2,1,0,124,2,124,0,106,2,131,1,83, + 0,41,3,78,114,0,0,0,0,41,1,218,15,78,97,109, + 101,115,112,97,99,101,82,101,97,100,101,114,41,3,114,31, + 1,0,0,114,75,1,0,0,114,48,1,0,0,41,3,114, + 143,0,0,0,114,243,0,0,0,114,75,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,32,1, + 0,0,30,5,0,0,115,6,0,0,0,12,1,10,1,255, + 128,122,36,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101, + 95,114,101,97,100,101,114,78,41,13,114,150,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,235,0,0,0,114,232, + 0,0,0,114,73,1,0,0,114,206,0,0,0,114,0,1, + 0,0,114,240,0,0,0,114,238,0,0,0,114,244,0,0, + 0,114,247,0,0,0,114,32,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 72,1,0,0,244,4,0,0,115,24,0,0,0,8,0,8, + 1,2,3,10,1,8,10,8,3,8,3,8,3,8,3,8, + 3,12,12,255,128,114,72,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, + 0,0,0,115,118,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,101,4,100,2,100,3,132,0,131,1,90,5, + 101,4,100,4,100,5,132,0,131,1,90,6,101,7,100,6, + 100,7,132,0,131,1,90,8,101,7,100,8,100,9,132,0, + 131,1,90,9,101,7,100,19,100,11,100,12,132,1,131,1, + 90,10,101,7,100,20,100,13,100,14,132,1,131,1,90,11, + 101,7,100,21,100,15,100,16,132,1,131,1,90,12,101,4, + 100,17,100,18,132,0,131,1,90,13,100,10,83,0,41,22, + 218,10,80,97,116,104,70,105,110,100,101,114,122,62,77,101, + 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, + 111,114,32,115,121,115,46,112,97,116,104,32,97,110,100,32, + 112,97,99,107,97,103,101,32,95,95,112,97,116,104,95,95, + 32,97,116,116,114,105,98,117,116,101,115,46,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,64,0,0,0,116,0,116,1,106,2, + 160,3,161,0,131,1,68,0,93,22,92,2,125,0,125,1, + 124,1,100,1,117,0,114,20,116,1,106,2,124,0,61,0, + 113,7,116,4,124,1,100,2,131,2,114,29,124,1,160,5, + 161,0,1,0,113,7,100,1,83,0,41,3,122,125,67,97, + 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, + 100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,110, + 116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,32, + 32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,109, + 112,108,101,109,101,110,116,101,100,41,46,78,218,17,105,110, + 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,41, + 6,218,4,108,105,115,116,114,15,0,0,0,218,19,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,218,5,105,116,101,109,115,114,153,0,0,0,114,77,1, + 0,0,41,2,114,141,0,0,0,218,6,102,105,110,100,101, + 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,77,1,0,0,41,5,0,0,115,16,0,0,0,22,4, + 8,1,10,1,10,1,8,1,2,128,4,252,255,128,122,28, + 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,9,0,0, + 0,67,0,0,0,115,76,0,0,0,116,0,106,1,100,1, + 117,1,114,14,116,0,106,1,115,14,116,2,160,3,100,2, + 116,4,161,2,1,0,116,0,106,1,68,0,93,17,125,1, + 122,7,124,1,124,0,131,1,87,0,2,0,1,0,83,0, + 4,0,116,5,121,37,1,0,1,0,1,0,89,0,113,17, + 100,1,83,0,119,0,41,3,122,46,83,101,97,114,99,104, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, + 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, + 116,121,41,6,114,15,0,0,0,218,10,112,97,116,104,95, + 104,111,111,107,115,114,99,0,0,0,114,100,0,0,0,114, + 162,0,0,0,114,142,0,0,0,41,2,114,65,0,0,0, + 90,4,104,111,111,107,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,11,95,112,97,116,104,95,104,111,111, + 107,115,51,5,0,0,115,20,0,0,0,16,3,12,1,10, + 1,2,1,14,1,12,1,4,1,4,2,2,253,255,128,122, + 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, + 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0, + 115,100,0,0,0,124,1,100,1,107,2,114,20,122,6,116, + 0,160,1,161,0,125,1,87,0,110,9,4,0,116,2,121, + 49,1,0,1,0,1,0,89,0,100,2,83,0,122,8,116, + 3,106,4,124,1,25,0,125,2,87,0,124,2,83,0,4, + 0,116,5,121,48,1,0,1,0,1,0,124,0,160,6,124, + 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89, + 0,124,2,83,0,119,0,119,0,41,3,122,210,71,101,116, + 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32, + 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102, + 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, + 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105, + 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110, + 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116, + 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32, + 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73, + 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97, + 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32, + 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114, + 10,0,0,0,78,41,7,114,18,0,0,0,114,82,0,0, + 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, + 114,114,111,114,114,15,0,0,0,114,79,1,0,0,218,8, + 75,101,121,69,114,114,111,114,114,83,1,0,0,41,3,114, + 221,0,0,0,114,65,0,0,0,114,81,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,20,95, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,64,5,0,0,115,30,0,0,0,8,8,2,1, + 12,1,12,1,6,3,2,1,12,1,4,4,12,253,10,1, + 12,1,4,1,2,253,2,250,255,128,122,31,80,97,116,104, + 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0, + 67,0,0,0,115,138,0,0,0,116,0,124,2,100,1,131, + 2,114,27,116,1,160,2,124,2,161,1,155,0,100,2,157, + 2,125,3,116,3,160,4,124,3,116,5,161,2,1,0,124, + 2,160,6,124,1,161,1,92,2,125,4,125,5,110,21,116, + 1,160,2,124,2,161,1,155,0,100,3,157,2,125,3,116, + 3,160,4,124,3,116,5,161,2,1,0,124,2,160,7,124, + 1,161,1,125,4,103,0,125,5,124,4,100,0,117,1,114, + 58,116,1,160,8,124,1,124,4,161,2,83,0,116,1,160, + 9,124,1,100,0,161,2,125,6,124,5,124,6,95,10,124, + 6,83,0,41,4,78,114,161,0,0,0,122,53,46,102,105, + 110,100,95,115,112,101,99,40,41,32,110,111,116,32,102,111, + 117,110,100,59,32,102,97,108,108,105,110,103,32,98,97,99, + 107,32,116,111,32,102,105,110,100,95,108,111,97,100,101,114, + 40,41,122,53,46,102,105,110,100,95,115,112,101,99,40,41, + 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, + 105,110,103,32,98,97,99,107,32,116,111,32,102,105,110,100, + 95,109,111,100,117,108,101,40,41,41,11,114,153,0,0,0, + 114,159,0,0,0,90,12,95,111,98,106,101,99,116,95,110, + 97,109,101,114,99,0,0,0,114,100,0,0,0,114,162,0, + 0,0,114,161,0,0,0,114,229,0,0,0,114,224,0,0, + 0,114,207,0,0,0,114,202,0,0,0,41,7,114,221,0, + 0,0,114,163,0,0,0,114,81,1,0,0,114,166,0,0, + 0,114,164,0,0,0,114,165,0,0,0,114,210,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, + 99,86,5,0,0,115,28,0,0,0,10,4,16,1,12,2, + 16,1,16,2,12,2,10,1,4,1,8,1,12,1,12,1, + 6,1,4,1,255,128,122,27,80,97,116,104,70,105,110,100, + 101,114,46,95,108,101,103,97,99,121,95,103,101,116,95,115, + 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,166,0, + 0,0,103,0,125,4,124,2,68,0,93,67,125,5,116,0, + 124,5,116,1,116,2,102,2,131,2,115,14,113,4,124,0, + 160,3,124,5,161,1,125,6,124,6,100,1,117,1,114,71, + 116,4,124,6,100,2,131,2,114,35,124,6,160,5,124,1, + 124,3,161,2,125,7,110,6,124,0,160,6,124,1,124,6, + 161,2,125,7,124,7,100,1,117,0,114,46,113,4,124,7, + 106,7,100,1,117,1,114,55,124,7,2,0,1,0,83,0, + 124,7,106,8,125,8,124,8,100,1,117,0,114,66,116,9, + 100,3,131,1,130,1,124,4,160,10,124,8,161,1,1,0, + 113,4,116,11,160,12,124,1,100,1,161,2,125,7,124,4, + 124,7,95,8,124,7,83,0,41,4,122,63,70,105,110,100, + 32,116,104,101,32,108,111,97,100,101,114,32,111,114,32,110, + 97,109,101,115,112,97,99,101,95,112,97,116,104,32,102,111, + 114,32,116,104,105,115,32,109,111,100,117,108,101,47,112,97, + 99,107,97,103,101,32,110,97,109,101,46,78,114,226,0,0, + 0,122,19,115,112,101,99,32,109,105,115,115,105,110,103,32, + 108,111,97,100,101,114,41,13,114,185,0,0,0,114,109,0, + 0,0,218,5,98,121,116,101,115,114,86,1,0,0,114,153, + 0,0,0,114,226,0,0,0,114,87,1,0,0,114,164,0, + 0,0,114,202,0,0,0,114,142,0,0,0,114,191,0,0, + 0,114,159,0,0,0,114,207,0,0,0,41,9,114,221,0, + 0,0,114,163,0,0,0,114,65,0,0,0,114,225,0,0, + 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, + 104,90,5,101,110,116,114,121,114,81,1,0,0,114,210,0, + 0,0,114,165,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,9,95,103,101,116,95,115,112,101, + 99,107,5,0,0,115,44,0,0,0,4,5,8,1,14,1, + 2,1,10,1,8,1,10,1,14,1,12,2,8,1,2,1, + 10,1,8,1,6,1,8,1,8,1,10,5,2,128,12,2, + 6,1,4,1,255,128,122,20,80,97,116,104,70,105,110,100, + 101,114,46,95,103,101,116,95,115,112,101,99,99,4,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0, + 0,67,0,0,0,115,94,0,0,0,124,2,100,1,117,0, + 114,7,116,0,106,1,125,2,124,0,160,2,124,1,124,2, + 124,3,161,3,125,4,124,4,100,1,117,0,114,20,100,1, + 83,0,124,4,106,3,100,1,117,0,114,45,124,4,106,4, + 125,5,124,5,114,43,100,1,124,4,95,5,116,6,124,1, + 124,5,124,0,106,2,131,3,124,4,95,4,124,4,83,0, + 100,1,83,0,124,4,83,0,41,2,122,141,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, + 111,114,32,39,102,117,108,108,110,97,109,101,39,32,111,110, + 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, + 116,104,39,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,115,101,97,114,99,104,32,105,115,32,98,97,115,101, + 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,97,110,100,32,115,121,115,46,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, + 10,32,32,32,32,32,32,32,32,78,41,7,114,15,0,0, + 0,114,65,0,0,0,114,90,1,0,0,114,164,0,0,0, + 114,202,0,0,0,114,205,0,0,0,114,46,1,0,0,41, + 6,114,221,0,0,0,114,163,0,0,0,114,65,0,0,0, + 114,225,0,0,0,114,210,0,0,0,114,89,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,226, + 0,0,0,139,5,0,0,115,28,0,0,0,8,6,6,1, + 14,1,8,1,4,1,10,1,6,1,4,1,6,3,16,1, + 4,1,4,2,4,2,255,128,122,20,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, + 0,0,0,67,0,0,0,115,42,0,0,0,116,0,160,1, + 100,1,116,2,161,2,1,0,124,0,160,3,124,1,124,2, + 161,2,125,3,124,3,100,2,117,0,114,18,100,2,83,0, + 124,3,106,4,83,0,41,3,122,170,102,105,110,100,32,116, + 104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115, + 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32, + 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32, + 32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,122,101,70,105,108,101,70,105,110,100,101,114, - 46,102,105,110,100,95,108,111,97,100,101,114,40,41,32,105, + 32,32,32,32,122,101,80,97,116,104,70,105,110,100,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,40,41,32,105, 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, 49,50,59,32,117,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,78,41,6,114,87, - 0,0,0,114,88,0,0,0,114,89,0,0,0,114,213,0, - 0,0,114,150,0,0,0,114,188,0,0,0,41,3,114,129, - 0,0,0,114,149,0,0,0,114,197,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,147,0,0, - 0,184,5,0,0,115,16,0,0,0,6,7,2,2,4,254, - 10,3,8,1,8,1,16,1,255,128,122,22,70,105,108,101, - 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, - 101,114,99,6,0,0,0,0,0,0,0,0,0,0,0,7, - 0,0,0,6,0,0,0,67,0,0,0,115,26,0,0,0, - 124,1,124,2,124,3,131,2,125,6,116,0,124,2,124,3, - 124,6,124,4,100,1,141,4,83,0,41,2,78,114,187,0, - 0,0,41,1,114,200,0,0,0,41,7,114,129,0,0,0, - 114,198,0,0,0,114,149,0,0,0,114,57,0,0,0,90, - 4,115,109,115,108,114,212,0,0,0,114,150,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,76, - 1,0,0,199,5,0,0,115,10,0,0,0,10,1,8,1, - 2,1,6,255,255,128,122,20,70,105,108,101,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,78,99,3,0, - 0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,0, - 0,0,67,0,0,0,115,92,1,0,0,100,1,125,3,124, - 1,160,0,100,2,161,1,100,3,25,0,125,4,122,12,116, - 1,124,0,106,2,112,17,116,3,160,4,161,0,131,1,106, - 5,125,5,87,0,110,9,4,0,116,6,121,173,1,0,1, - 0,1,0,100,4,125,5,89,0,124,5,124,0,106,7,107, - 3,114,43,124,0,160,8,161,0,1,0,124,5,124,0,95, - 7,116,9,131,0,114,54,124,0,106,10,125,6,124,4,160, - 11,161,0,125,7,110,5,124,0,106,12,125,6,124,4,125, - 7,124,7,124,6,118,0,114,106,116,13,124,0,106,2,124, - 4,131,2,125,8,124,0,106,14,68,0,93,29,92,2,125, - 9,125,10,100,5,124,9,23,0,125,11,116,13,124,8,124, - 11,131,2,125,12,116,15,124,12,131,1,114,101,124,0,160, - 16,124,10,124,1,124,12,124,8,103,1,124,2,161,5,2, - 0,1,0,83,0,113,72,116,17,124,8,131,1,125,3,124, - 0,106,14,68,0,93,41,92,2,125,9,125,10,116,13,124, - 0,106,2,124,4,124,9,23,0,131,2,125,12,116,18,106, - 19,100,6,124,12,100,3,100,7,141,3,1,0,124,7,124, - 9,23,0,124,6,118,0,114,150,116,15,124,12,131,1,114, - 150,124,0,160,16,124,10,124,1,124,12,100,8,124,2,161, - 5,2,0,1,0,83,0,113,109,124,3,114,171,116,18,160, - 19,100,9,124,8,161,2,1,0,116,18,160,20,124,1,100, - 8,161,2,125,13,124,8,103,1,124,13,95,21,124,13,83, - 0,100,8,83,0,119,0,41,10,122,111,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,115,112,101,99,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,82,101,116,117,114,110,115,32,116,104,101,32,109,97,116, - 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, - 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, - 46,10,32,32,32,32,32,32,32,32,70,114,85,0,0,0, - 114,44,0,0,0,114,115,0,0,0,114,222,0,0,0,122, - 9,116,114,121,105,110,103,32,123,125,41,1,90,9,118,101, - 114,98,111,115,105,116,121,78,122,25,112,111,115,115,105,98, - 108,101,32,110,97,109,101,115,112,97,99,101,32,102,111,114, - 32,123,125,41,22,114,54,0,0,0,114,62,0,0,0,114, - 57,0,0,0,114,18,0,0,0,114,69,0,0,0,114,21, - 1,0,0,114,63,0,0,0,114,82,1,0,0,218,11,95, - 102,105,108,108,95,99,97,99,104,101,114,21,0,0,0,114, - 85,1,0,0,114,116,0,0,0,114,84,1,0,0,114,53, - 0,0,0,114,81,1,0,0,114,67,0,0,0,114,76,1, - 0,0,114,70,0,0,0,114,145,0,0,0,114,159,0,0, - 0,114,193,0,0,0,114,188,0,0,0,41,14,114,129,0, - 0,0,114,149,0,0,0,114,212,0,0,0,90,12,105,115, - 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, - 95,109,111,100,117,108,101,114,179,0,0,0,90,5,99,97, - 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, - 101,90,9,98,97,115,101,95,112,97,116,104,114,29,1,0, - 0,114,198,0,0,0,90,13,105,110,105,116,95,102,105,108, - 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, - 114,197,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,213,0,0,0,204,5,0,0,115,80,0, - 0,0,4,5,14,1,2,1,24,1,12,1,6,1,10,1, - 8,1,6,1,6,2,6,1,10,1,6,2,4,1,8,2, - 12,1,14,1,8,1,10,1,8,1,24,1,2,255,8,5, - 14,2,16,1,16,1,12,1,8,1,10,1,4,1,8,255, - 2,128,4,2,12,1,12,1,8,1,4,1,4,1,2,219, + 99,40,41,32,105,110,115,116,101,97,100,78,114,227,0,0, + 0,114,228,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,229,0,0,0,163,5,0,0,115,16, + 0,0,0,6,8,2,2,4,254,12,3,8,1,4,1,6, + 1,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, + 102,105,110,100,95,109,111,100,117,108,101,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,109, + 1,125,2,1,0,124,2,106,2,124,0,105,0,124,1,164, + 1,142,1,83,0,41,4,97,32,1,0,0,10,32,32,32, + 32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,105, + 98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,114, + 97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,116, + 114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,99, + 101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,32, + 32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,104, + 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,112, + 97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,103, + 32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,96, + 96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,108, + 108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,110, + 101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,97, + 108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,105, + 110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,32, + 32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,101, + 115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,104, + 96,96,46,10,32,32,32,32,32,32,32,32,114,0,0,0, + 0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,116, + 104,70,105,110,100,101,114,78,41,3,90,18,105,109,112,111, + 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,91, + 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, + 98,117,116,105,111,110,115,41,3,114,144,0,0,0,114,145, + 0,0,0,114,91,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,92,1,0,0,179,5,0,0, + 115,6,0,0,0,12,10,16,1,255,128,122,29,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, + 116,114,105,98,117,116,105,111,110,115,41,1,78,41,2,78, + 78,41,1,78,41,14,114,150,0,0,0,114,149,0,0,0, + 114,151,0,0,0,114,152,0,0,0,114,232,0,0,0,114, + 77,1,0,0,114,83,1,0,0,114,233,0,0,0,114,86, + 1,0,0,114,87,1,0,0,114,90,1,0,0,114,226,0, + 0,0,114,229,0,0,0,114,92,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,76,1,0,0,37,5,0,0,115,38,0,0,0,8,0, + 4,2,2,2,10,1,2,9,10,1,2,12,10,1,2,21, + 10,1,2,20,12,1,2,31,12,1,2,23,12,1,2,15, + 14,1,255,128,114,76,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, + 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, + 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, + 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, + 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, + 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, + 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, + 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, + 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, + 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, + 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, + 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, + 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, + 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, + 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, + 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, + 0,0,7,0,0,0,115,112,0,0,0,103,0,125,3,124, + 2,68,0,93,16,92,2,137,0,125,4,124,3,160,0,135, + 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, + 1,1,0,113,4,124,3,124,0,95,1,124,1,112,27,100, + 3,124,0,95,2,116,3,124,0,106,2,131,1,115,43,116, + 4,116,5,160,6,161,0,124,0,106,2,131,2,124,0,95, + 2,100,4,124,0,95,7,116,8,131,0,124,0,95,9,116, + 8,131,0,124,0,95,10,100,5,83,0,41,6,122,154,73, + 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, + 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, + 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, + 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, + 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, + 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, + 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, + 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, + 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, + 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,0, + 0,0,115,24,0,0,0,129,0,124,0,93,7,125,1,124, + 1,136,0,102,2,86,0,1,0,113,2,100,0,83,0,114, + 69,0,0,0,114,7,0,0,0,114,42,1,0,0,169,1, + 114,164,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 9,0,0,0,208,5,0,0,115,6,0,0,0,6,128,18, + 0,255,128,122,38,70,105,108,101,70,105,110,100,101,114,46, + 95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115, + 62,46,60,103,101,110,101,120,112,114,62,114,97,0,0,0, + 114,130,0,0,0,78,41,11,114,191,0,0,0,218,8,95, + 108,111,97,100,101,114,115,114,65,0,0,0,114,86,0,0, + 0,114,67,0,0,0,114,18,0,0,0,114,82,0,0,0, + 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, + 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, + 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, + 97,99,104,101,41,5,114,143,0,0,0,114,65,0,0,0, + 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, + 90,7,108,111,97,100,101,114,115,114,212,0,0,0,114,7, + 0,0,0,114,94,1,0,0,114,8,0,0,0,114,235,0, + 0,0,202,5,0,0,115,22,0,0,0,4,4,12,1,26, + 1,6,1,10,2,10,1,18,1,6,1,8,1,12,1,255, + 128,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 10,0,0,0,100,1,124,0,95,0,100,2,83,0,41,3, + 122,31,73,110,118,97,108,105,100,97,116,101,32,116,104,101, + 32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,101, + 46,114,130,0,0,0,78,41,1,114,96,1,0,0,114,20, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,77,1,0,0,218,5,0,0,114,81,0,0,0, + 122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, + 0,0,0,67,0,0,0,115,54,0,0,0,116,0,160,1, + 100,1,116,2,161,2,1,0,124,0,160,3,124,1,161,1, + 125,2,124,2,100,2,117,0,114,19,100,2,103,0,102,2, + 83,0,124,2,106,4,124,2,106,5,112,25,103,0,102,2, + 83,0,41,3,122,197,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, + 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, + 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, + 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, + 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, + 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, + 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, + 46,10,10,32,32,32,32,32,32,32,32,122,101,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,97, + 100,101,114,40,41,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, + 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, + 116,104,111,110,32,51,46,49,50,59,32,117,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,78,41,6,114,99,0,0,0,114,100,0,0,0,114, + 101,0,0,0,114,226,0,0,0,114,164,0,0,0,114,202, + 0,0,0,41,3,114,143,0,0,0,114,163,0,0,0,114, + 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,161,0,0,0,224,5,0,0,115,16,0,0, + 0,6,7,2,2,4,254,10,3,8,1,8,1,16,1,255, + 128,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, + 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, + 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0, + 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125, + 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83, + 0,41,2,78,114,201,0,0,0,41,1,114,213,0,0,0, + 41,7,114,143,0,0,0,114,211,0,0,0,114,163,0,0, + 0,114,65,0,0,0,90,4,115,109,115,108,114,225,0,0, + 0,114,164,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,90,1,0,0,239,5,0,0,115,10, + 0,0,0,10,1,8,1,2,1,6,255,255,128,122,20,70, + 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, + 112,101,99,78,99,3,0,0,0,0,0,0,0,0,0,0, + 0,14,0,0,0,9,0,0,0,67,0,0,0,115,120,1, + 0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,3, + 25,0,125,4,122,12,116,1,124,0,106,2,112,17,116,3, + 160,4,161,0,131,1,106,5,125,5,87,0,110,9,4,0, + 116,6,121,187,1,0,1,0,1,0,100,4,125,5,89,0, + 124,5,124,0,106,7,107,3,114,43,124,0,160,8,161,0, + 1,0,124,5,124,0,95,7,116,9,131,0,114,54,124,0, + 106,10,125,6,124,4,160,11,161,0,125,7,110,5,124,0, + 106,12,125,6,124,4,125,7,124,7,124,6,118,0,114,106, + 116,13,124,0,106,2,124,4,131,2,125,8,124,0,106,14, + 68,0,93,29,92,2,125,9,125,10,100,5,124,9,23,0, + 125,11,116,13,124,8,124,11,131,2,125,12,116,15,124,12, + 131,1,114,101,124,0,160,16,124,10,124,1,124,12,124,8, + 103,1,124,2,161,5,2,0,1,0,83,0,113,72,116,17, + 124,8,131,1,125,3,124,0,106,14,68,0,93,54,92,2, + 125,9,125,10,122,10,116,13,124,0,106,2,124,4,124,9, + 23,0,131,2,125,12,87,0,110,10,4,0,116,18,121,186, + 1,0,1,0,1,0,89,0,1,0,100,6,83,0,116,19, + 106,20,100,7,124,12,100,3,100,8,141,3,1,0,124,7, + 124,9,23,0,124,6,118,0,114,163,116,15,124,12,131,1, + 114,163,124,0,160,16,124,10,124,1,124,12,100,6,124,2, + 161,5,2,0,1,0,83,0,113,109,124,3,114,184,116,19, + 160,20,100,9,124,8,161,2,1,0,116,19,160,21,124,1, + 100,6,161,2,125,13,124,8,103,1,124,13,95,22,124,13, + 83,0,100,6,83,0,119,0,119,0,41,10,122,111,84,114, + 121,32,116,111,32,102,105,110,100,32,97,32,115,112,101,99, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 32,32,32,32,82,101,116,117,114,110,115,32,116,104,101,32, + 109,97,116,99,104,105,110,103,32,115,112,101,99,44,32,111, + 114,32,78,111,110,101,32,105,102,32,110,111,116,32,102,111, + 117,110,100,46,10,32,32,32,32,32,32,32,32,70,114,97, + 0,0,0,114,44,0,0,0,114,130,0,0,0,114,235,0, + 0,0,78,122,9,116,114,121,105,110,103,32,123,125,41,1, + 90,9,118,101,114,98,111,115,105,116,121,122,25,112,111,115, + 115,105,98,108,101,32,110,97,109,101,115,112,97,99,101,32, + 102,111,114,32,123,125,41,23,114,104,0,0,0,114,75,0, + 0,0,114,65,0,0,0,114,18,0,0,0,114,82,0,0, + 0,114,34,1,0,0,114,76,0,0,0,114,96,1,0,0, + 218,11,95,102,105,108,108,95,99,97,99,104,101,114,21,0, + 0,0,114,99,1,0,0,114,131,0,0,0,114,98,1,0, + 0,114,67,0,0,0,114,95,1,0,0,114,80,0,0,0, + 114,90,1,0,0,114,83,0,0,0,114,111,0,0,0,114, + 159,0,0,0,114,173,0,0,0,114,207,0,0,0,114,202, + 0,0,0,41,14,114,143,0,0,0,114,163,0,0,0,114, + 225,0,0,0,90,12,105,115,95,110,97,109,101,115,112,97, + 99,101,90,11,116,97,105,108,95,109,111,100,117,108,101,114, + 193,0,0,0,90,5,99,97,99,104,101,90,12,99,97,99, + 104,101,95,109,111,100,117,108,101,90,9,98,97,115,101,95, + 112,97,116,104,114,43,1,0,0,114,211,0,0,0,90,13, + 105,110,105,116,95,102,105,108,101,110,97,109,101,90,9,102, + 117,108,108,95,112,97,116,104,114,210,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,226,0,0, + 0,244,5,0,0,115,88,0,0,0,4,5,14,1,2,1, + 24,1,12,1,6,1,10,1,8,1,6,1,6,2,6,1, + 10,1,6,2,4,1,8,2,12,1,14,1,8,1,10,1, + 8,1,24,1,2,255,8,5,14,2,2,1,20,1,12,1, + 8,1,16,1,12,1,8,1,10,1,4,1,8,255,2,128, + 4,2,12,1,12,1,8,1,4,1,4,1,2,244,2,228, 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,102, 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, @@ -2516,30 +2571,30 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, 115,32,100,105,114,101,99,116,111,114,121,46,114,14,0,0, - 0,114,85,0,0,0,114,75,0,0,0,99,1,0,0,0, + 0,114,97,0,0,0,114,88,0,0,0,99,1,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, 83,0,0,0,115,20,0,0,0,104,0,124,0,93,6,125, 1,124,1,160,0,161,0,146,2,113,2,83,0,114,7,0, - 0,0,41,1,114,116,0,0,0,41,2,114,5,0,0,0, + 0,0,41,1,114,131,0,0,0,41,2,114,5,0,0,0, 90,2,102,110,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,13,0,0,0,25,6,0,0,115,4,0,0, + 0,0,0,114,13,0,0,0,68,6,0,0,115,4,0,0, 0,20,0,255,128,122,41,70,105,108,101,70,105,110,100,101, 114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108, 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, - 78,41,18,114,57,0,0,0,114,18,0,0,0,90,7,108, - 105,115,116,100,105,114,114,69,0,0,0,114,70,1,0,0, + 78,41,18,114,65,0,0,0,114,18,0,0,0,90,7,108, + 105,115,116,100,105,114,114,82,0,0,0,114,84,1,0,0, 218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,111, 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, 69,114,114,111,114,114,15,0,0,0,114,25,0,0,0,114, - 26,0,0,0,114,83,1,0,0,114,84,1,0,0,114,111, - 0,0,0,114,76,0,0,0,114,116,0,0,0,218,3,97, - 100,100,114,27,0,0,0,114,85,1,0,0,41,9,114,129, - 0,0,0,114,57,0,0,0,90,8,99,111,110,116,101,110, + 26,0,0,0,114,97,1,0,0,114,98,1,0,0,114,126, + 0,0,0,114,89,0,0,0,114,131,0,0,0,218,3,97, + 100,100,114,27,0,0,0,114,99,1,0,0,41,9,114,143, + 0,0,0,114,65,0,0,0,90,8,99,111,110,116,101,110, 116,115,90,21,108,111,119,101,114,95,115,117,102,102,105,120, - 95,99,111,110,116,101,110,116,115,114,55,1,0,0,114,127, - 0,0,0,114,39,1,0,0,114,29,1,0,0,90,8,110, + 95,99,111,110,116,101,110,116,115,114,69,1,0,0,114,141, + 0,0,0,114,53,1,0,0,114,43,1,0,0,90,8,110, 101,119,95,110,97,109,101,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,87,1,0,0,252,5,0,0,115, + 0,114,8,0,0,0,114,101,1,0,0,39,6,0,0,115, 40,0,0,0,6,2,2,1,22,1,18,1,6,3,12,3, 12,1,6,7,8,1,16,1,4,1,18,1,4,2,12,1, 6,1,12,1,20,1,4,255,2,233,255,128,122,22,70,105, @@ -2574,37 +2629,37 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,61,0,0,0,78,41,2,114,70,0,0,0,114, - 128,0,0,0,114,61,0,0,0,169,2,114,208,0,0,0, - 114,86,1,0,0,114,7,0,0,0,114,8,0,0,0,218, + 101,100,114,71,0,0,0,78,41,2,114,83,0,0,0,114, + 142,0,0,0,114,71,0,0,0,169,2,114,221,0,0,0, + 114,100,1,0,0,114,7,0,0,0,114,8,0,0,0,218, 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, - 105,108,101,70,105,110,100,101,114,37,6,0,0,115,8,0, + 105,108,101,70,105,110,100,101,114,80,6,0,0,115,8,0, 0,0,8,2,12,1,16,1,255,128,122,54,70,105,108,101, 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, - 101,114,78,114,7,0,0,0,41,3,114,208,0,0,0,114, - 86,1,0,0,114,92,1,0,0,114,7,0,0,0,114,91, + 101,114,78,114,7,0,0,0,41,3,114,221,0,0,0,114, + 100,1,0,0,114,106,1,0,0,114,7,0,0,0,114,105, 1,0,0,114,8,0,0,0,218,9,112,97,116,104,95,104, - 111,111,107,27,6,0,0,115,6,0,0,0,14,10,4,6, + 111,111,107,70,6,0,0,115,6,0,0,0,14,10,4,6, 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,112, 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,114,52,1,0,0,41,2,78,122,16,70,105,108,101,70, - 105,110,100,101,114,40,123,33,114,125,41,41,2,114,76,0, - 0,0,114,57,0,0,0,114,7,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,53,1,0,0, - 45,6,0,0,114,46,1,0,0,122,19,70,105,108,101,70, + 0,114,66,1,0,0,41,2,78,122,16,70,105,108,101,70, + 105,110,100,101,114,40,123,33,114,125,41,41,2,114,89,0, + 0,0,114,65,0,0,0,114,20,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,67,1,0,0, + 88,6,0,0,114,60,1,0,0,122,19,70,105,108,101,70, 105,110,100,101,114,46,95,95,114,101,112,114,95,95,41,1, - 78,41,15,114,136,0,0,0,114,135,0,0,0,114,137,0, - 0,0,114,138,0,0,0,114,222,0,0,0,114,63,1,0, - 0,114,153,0,0,0,114,216,0,0,0,114,147,0,0,0, - 114,76,1,0,0,114,213,0,0,0,114,87,1,0,0,114, - 220,0,0,0,114,93,1,0,0,114,53,1,0,0,114,7, + 78,41,15,114,150,0,0,0,114,149,0,0,0,114,151,0, + 0,0,114,152,0,0,0,114,235,0,0,0,114,77,1,0, + 0,114,167,0,0,0,114,229,0,0,0,114,161,0,0,0, + 114,90,1,0,0,114,226,0,0,0,114,101,1,0,0,114, + 233,0,0,0,114,107,1,0,0,114,67,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,79,1,0,0,155,5,0,0,115,26,0,0,0, - 8,0,4,2,8,7,8,14,4,4,8,2,8,15,10,5, - 8,48,2,31,10,1,12,17,255,128,114,79,1,0,0,99, + 0,0,114,93,1,0,0,193,5,0,0,115,26,0,0,0, + 8,0,4,2,8,7,8,16,4,4,8,2,8,15,10,5, + 8,51,2,31,10,1,12,17,255,128,114,93,1,0,0,99, 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, 8,0,0,0,67,0,0,0,115,144,0,0,0,124,0,160, 0,100,1,161,1,125,4,124,0,160,0,100,2,161,1,125, @@ -2617,19 +2672,19 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 5,60,0,87,0,100,0,83,0,4,0,116,5,121,71,1, 0,1,0,1,0,89,0,100,0,83,0,119,0,41,6,78, 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, - 115,112,101,99,95,95,114,80,1,0,0,90,8,95,95,102, + 115,112,101,99,95,95,114,94,1,0,0,90,8,95,95,102, 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, - 95,41,6,218,3,103,101,116,114,150,0,0,0,114,26,1, - 0,0,114,20,1,0,0,114,200,0,0,0,218,9,69,120, - 99,101,112,116,105,111,110,41,6,90,2,110,115,114,127,0, + 95,41,6,218,3,103,101,116,114,164,0,0,0,114,40,1, + 0,0,114,33,1,0,0,114,213,0,0,0,218,9,69,120, + 99,101,112,116,105,111,110,41,6,90,2,110,115,114,141,0, 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, - 97,116,104,110,97,109,101,114,150,0,0,0,114,197,0,0, + 97,116,104,110,97,109,101,114,164,0,0,0,114,210,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, - 51,6,0,0,115,38,0,0,0,10,2,10,1,4,1,4, + 94,6,0,0,115,38,0,0,0,10,2,10,1,4,1,4, 1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,8, 1,8,1,8,1,14,1,12,1,6,2,2,254,255,128,114, - 98,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 112,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,0,0,3,0,0,0,67,0,0,0,115,38,0, 0,0,116,0,116,1,160,2,161,0,102,2,125,0,116,3, 116,4,102,2,125,1,116,5,116,6,102,2,125,2,124,0, @@ -2639,23 +2694,23 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97, 99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112, 108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102, - 105,120,101,115,41,46,10,32,32,32,32,78,41,7,114,16, - 1,0,0,114,173,0,0,0,218,18,101,120,116,101,110,115, - 105,111,110,95,115,117,102,102,105,120,101,115,114,20,1,0, - 0,114,112,0,0,0,114,26,1,0,0,114,100,0,0,0, + 105,120,101,115,41,46,10,32,32,32,32,78,41,7,114,29, + 1,0,0,114,187,0,0,0,218,18,101,120,116,101,110,115, + 105,111,110,95,115,117,102,102,105,120,101,115,114,33,1,0, + 0,114,127,0,0,0,114,40,1,0,0,114,113,0,0,0, 41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,6, 115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,101, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 194,0,0,0,74,6,0,0,115,10,0,0,0,12,5,8, - 1,8,1,10,1,255,128,114,194,0,0,0,99,1,0,0, + 208,0,0,0,117,6,0,0,115,10,0,0,0,12,5,8, + 1,8,1,10,1,255,128,114,208,0,0,0,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, - 83,0,114,120,0,0,0,41,1,114,145,0,0,0,41,1, + 83,0,114,69,0,0,0,41,1,114,159,0,0,0,41,1, 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,85,6,0,0,115,4,0, - 0,0,8,2,255,128,114,101,1,0,0,99,1,0,0,0, + 97,112,95,109,111,100,117,108,101,128,6,0,0,115,4,0, + 0,0,8,2,255,128,114,115,1,0,0,99,1,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, @@ -2663,60 +2718,63 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, - 112,111,110,101,110,116,115,46,78,41,10,114,101,1,0,0, - 114,194,0,0,0,114,15,0,0,0,114,68,1,0,0,114, - 177,0,0,0,114,79,1,0,0,114,93,1,0,0,218,9, - 109,101,116,97,95,112,97,116,104,114,196,0,0,0,114,62, - 1,0,0,41,2,114,100,1,0,0,90,17,115,117,112,112, + 112,111,110,101,110,116,115,46,78,41,10,114,115,1,0,0, + 114,208,0,0,0,114,15,0,0,0,114,82,1,0,0,114, + 191,0,0,0,114,93,1,0,0,114,107,1,0,0,218,9, + 109,101,116,97,95,112,97,116,104,114,61,0,0,0,114,76, + 1,0,0,41,2,114,114,1,0,0,90,17,115,117,112,112, 111,114,116,101,100,95,108,111,97,100,101,114,115,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,105, - 110,115,116,97,108,108,90,6,0,0,115,10,0,0,0,8, - 2,6,1,20,1,16,1,255,128,114,103,1,0,0,41,1, - 114,74,0,0,0,41,1,78,41,3,78,78,78,41,2,114, + 110,115,116,97,108,108,133,6,0,0,115,10,0,0,0,8, + 2,6,1,20,1,16,1,255,128,114,117,1,0,0,41,1, + 114,87,0,0,0,41,1,78,41,3,78,78,78,41,2,114, 0,0,0,0,114,0,0,0,0,41,1,84,41,1,78,41, - 1,78,41,83,114,138,0,0,0,114,145,0,0,0,114,173, - 0,0,0,114,78,0,0,0,114,15,0,0,0,114,87,0, - 0,0,114,170,0,0,0,114,25,0,0,0,114,217,0,0, - 0,90,2,110,116,114,18,0,0,0,114,202,0,0,0,90, - 5,112,111,115,105,120,114,47,0,0,0,218,3,97,108,108, - 114,50,0,0,0,114,51,0,0,0,114,72,0,0,0,114, - 28,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69, - 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, - 83,95,66,89,84,69,83,95,75,69,89,114,27,0,0,0, - 114,29,0,0,0,114,21,0,0,0,114,36,0,0,0,114, - 42,0,0,0,114,45,0,0,0,114,53,0,0,0,114,60, - 0,0,0,114,62,0,0,0,114,66,0,0,0,114,67,0, - 0,0,114,70,0,0,0,114,73,0,0,0,114,83,0,0, - 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, - 95,114,172,0,0,0,114,34,0,0,0,114,158,0,0,0, - 114,33,0,0,0,114,39,0,0,0,114,250,0,0,0,114, - 103,0,0,0,114,99,0,0,0,114,112,0,0,0,114,196, - 0,0,0,114,99,1,0,0,114,218,0,0,0,114,100,0, - 0,0,90,23,68,69,66,85,71,95,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,90,27,79,80,84, - 73,77,73,90,69,68,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,114,108,0,0,0,114,113,0, - 0,0,114,119,0,0,0,114,123,0,0,0,114,125,0,0, - 0,114,146,0,0,0,114,153,0,0,0,114,162,0,0,0, - 114,166,0,0,0,114,168,0,0,0,114,175,0,0,0,114, - 180,0,0,0,114,181,0,0,0,114,186,0,0,0,218,6, - 111,98,106,101,99,116,114,195,0,0,0,114,200,0,0,0, - 114,201,0,0,0,114,221,0,0,0,114,235,0,0,0,114, - 253,0,0,0,114,20,1,0,0,114,26,1,0,0,114,16, - 1,0,0,114,32,1,0,0,114,58,1,0,0,114,62,1, - 0,0,114,79,1,0,0,114,98,1,0,0,114,194,0,0, - 0,114,101,1,0,0,114,103,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 8,60,109,111,100,117,108,101,62,1,0,0,0,115,172,0, - 0,0,4,0,4,22,8,3,8,1,8,1,8,1,8,1, - 10,3,4,1,8,1,10,1,8,2,4,3,10,1,6,2, - 22,2,8,1,10,1,14,1,4,4,4,1,2,1,2,1, - 4,255,8,4,6,16,8,3,8,5,8,5,8,6,8,6, - 8,12,8,10,8,9,8,5,8,7,10,9,10,22,0,127, - 16,27,12,1,4,2,4,1,6,2,4,1,10,1,8,2, - 6,2,8,2,16,2,8,71,8,40,8,19,8,12,8,12, - 8,31,8,20,8,33,8,28,10,24,10,13,10,10,8,11, - 6,14,4,3,2,1,12,255,14,68,14,67,16,30,0,127, - 14,17,18,50,18,45,18,25,14,53,14,63,14,49,0,127, - 14,29,0,127,10,25,8,23,8,11,12,5,255,128, + 1,78,41,85,114,152,0,0,0,114,159,0,0,0,114,187, + 0,0,0,114,91,0,0,0,114,15,0,0,0,114,99,0, + 0,0,114,184,0,0,0,114,25,0,0,0,114,230,0,0, + 0,90,2,110,116,114,18,0,0,0,114,215,0,0,0,90, + 5,112,111,115,105,120,114,50,0,0,0,218,3,97,108,108, + 114,59,0,0,0,114,136,0,0,0,114,57,0,0,0,114, + 62,0,0,0,90,20,95,112,97,116,104,115,101,112,115,95, + 119,105,116,104,95,99,111,108,111,110,114,28,0,0,0,90, + 37,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,95,66,89,84, + 69,83,95,75,69,89,114,27,0,0,0,114,29,0,0,0, + 114,21,0,0,0,114,36,0,0,0,114,42,0,0,0,114, + 45,0,0,0,114,67,0,0,0,114,74,0,0,0,114,75, + 0,0,0,114,79,0,0,0,114,80,0,0,0,114,83,0, + 0,0,114,86,0,0,0,114,95,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,186,0,0, + 0,114,34,0,0,0,114,172,0,0,0,114,33,0,0,0, + 114,39,0,0,0,114,7,1,0,0,114,116,0,0,0,114, + 112,0,0,0,114,127,0,0,0,114,61,0,0,0,114,113, + 1,0,0,114,231,0,0,0,114,113,0,0,0,90,23,68, + 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, + 70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,69, + 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, + 88,69,83,114,121,0,0,0,114,128,0,0,0,114,135,0, + 0,0,114,137,0,0,0,114,139,0,0,0,114,160,0,0, + 0,114,167,0,0,0,114,176,0,0,0,114,180,0,0,0, + 114,182,0,0,0,114,189,0,0,0,114,194,0,0,0,114, + 195,0,0,0,114,200,0,0,0,218,6,111,98,106,101,99, + 116,114,209,0,0,0,114,213,0,0,0,114,214,0,0,0, + 114,234,0,0,0,114,248,0,0,0,114,10,1,0,0,114, + 33,1,0,0,114,40,1,0,0,114,29,1,0,0,114,46, + 1,0,0,114,72,1,0,0,114,76,1,0,0,114,93,1, + 0,0,114,112,1,0,0,114,208,0,0,0,114,115,1,0, + 0,114,117,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,8,60,109,111,100, + 117,108,101,62,1,0,0,0,115,182,0,0,0,4,0,4, + 22,8,3,8,1,8,1,8,1,8,1,10,3,4,1,8, + 1,10,1,8,2,4,3,10,1,6,2,22,2,8,1,8, + 1,10,1,14,1,4,4,4,1,2,1,2,1,4,255,8, + 4,6,16,8,3,8,5,8,5,4,6,10,1,8,30,8, + 6,8,8,8,10,8,9,8,5,4,7,10,1,8,8,10, + 5,10,22,0,127,16,27,12,1,4,2,4,1,6,2,4, + 1,10,1,8,2,6,2,8,2,16,2,8,71,8,40,8, + 19,8,12,8,12,8,31,8,20,8,33,8,28,10,24,10, + 13,10,10,8,11,6,14,4,3,2,1,12,255,14,73,14, + 67,16,30,0,127,14,17,18,50,18,45,18,25,14,53,14, + 63,14,49,0,127,14,29,0,127,10,30,8,23,8,11,12, + 5,255,128, }; From webhook-mailer at python.org Tue Apr 6 20:25:42 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 00:25:42 -0000 Subject: [Python-checkins] bpo-39895: Move `pathlib.Path.touch()` implementation into the path accessor. (GH-18838) Message-ID: https://github.com/python/cpython/commit/986da8effcd2e9e9334ae016928ef795fb93c373 commit: 986da8effcd2e9e9334ae016928ef795fb93c373 branch: master author: Barney Gale committer: zooba date: 2021-04-07T01:25:37+01:00 summary: bpo-39895: Move `pathlib.Path.touch()` implementation into the path accessor. (GH-18838) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 64f5f181ed995..cd5884d87d520 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -431,7 +431,23 @@ def link(self, src, dst): def symlink(self, src, dst, target_is_directory=False): raise NotImplementedError("os.symlink() not available on this system") - utime = os.utime + def touch(self, path, mode=0o666, exist_ok=True): + if exist_ok: + # First try to bump modification time + # Implementation note: GNU touch uses the UTIME_NOW option of + # the utimensat() / futimens() functions. + try: + os.utime(path, None) + except OSError: + # Avoid exception chaining + pass + else: + return + flags = os.O_CREAT | os.O_WRONLY + if not exist_ok: + flags |= os.O_EXCL + fd = os.open(path, flags, mode) + os.close(fd) if hasattr(os, "readlink"): readlink = os.readlink @@ -1100,13 +1116,6 @@ def _opener(self, name, flags, mode=0o666): # A stub for the opener argument to built-in open() return self._accessor.open(self, flags, mode) - def _raw_open(self, flags, mode=0o777): - """ - Open the file pointed by this path and return a file descriptor, - as os.open() does. - """ - return self._accessor.open(self, flags, mode) - # Public API @classmethod @@ -1283,22 +1292,7 @@ def touch(self, mode=0o666, exist_ok=True): """ Create this file with the given access mode, if it doesn't exist. """ - if exist_ok: - # First try to bump modification time - # Implementation note: GNU touch uses the UTIME_NOW option of - # the utimensat() / futimens() functions. - try: - self._accessor.utime(self, None) - except OSError: - # Avoid exception chaining - pass - else: - return - flags = os.O_CREAT | os.O_WRONLY - if not exist_ok: - flags |= os.O_EXCL - fd = self._raw_open(flags, mode) - os.close(fd) + self._accessor.touch(self, mode, exist_ok) def mkdir(self, mode=0o777, parents=False, exist_ok=False): """ From webhook-mailer at python.org Tue Apr 6 20:26:41 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 00:26:41 -0000 Subject: [Python-checkins] bpo-40038: pathlib: remove partial support for preserving accessor when modifying a path (GH-19342) Message-ID: https://github.com/python/cpython/commit/2219187cab6bca009c42b63b2f4c30b5b10c916d commit: 2219187cab6bca009c42b63b2f4c30b5b10c916d branch: master author: Barney Gale committer: zooba date: 2021-04-07T01:26:37+01:00 summary: bpo-40038: pathlib: remove partial support for preserving accessor when modifying a path (GH-19342) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index cd5884d87d520..9db8ae2d8a389 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -697,7 +697,7 @@ def _parse_args(cls, args): return cls._flavour.parse_parts(parts) @classmethod - def _from_parts(cls, args, init=True): + def _from_parts(cls, args): # We need to call _parse_args on the instance, so as to get the # right flavour. self = object.__new__(cls) @@ -705,18 +705,14 @@ def _from_parts(cls, args, init=True): self._drv = drv self._root = root self._parts = parts - if init: - self._init() return self @classmethod - def _from_parsed_parts(cls, drv, root, parts, init=True): + def _from_parsed_parts(cls, drv, root, parts): self = object.__new__(cls) self._drv = drv self._root = root self._parts = parts - if init: - self._init() return self @classmethod @@ -726,10 +722,6 @@ def _format_parsed_parts(cls, drv, root, parts): else: return cls._flavour.join(parts) - def _init(self): - # Overridden in concrete Path - pass - def _make_child(self, args): drv, root, parts = self._parse_args(args) drv, root, parts = self._flavour.join_parsed_parts( @@ -1069,29 +1061,18 @@ class Path(PurePath): object. You can also instantiate a PosixPath or WindowsPath directly, but cannot instantiate a WindowsPath on a POSIX system or vice versa. """ - __slots__ = ( - '_accessor', - ) + _accessor = _normal_accessor + __slots__ = () def __new__(cls, *args, **kwargs): if cls is Path: cls = WindowsPath if os.name == 'nt' else PosixPath - self = cls._from_parts(args, init=False) + self = cls._from_parts(args) if not self._flavour.is_supported: raise NotImplementedError("cannot instantiate %r on your system" % (cls.__name__,)) - self._init() return self - def _init(self, - # Private non-constructor arguments - template=None, - ): - if template is not None: - self._accessor = template._accessor - else: - self._accessor = _normal_accessor - def _make_child_relpath(self, part): # This is an optimization used for dir walking. `part` must be # a single part relative to this path. @@ -1192,9 +1173,7 @@ def absolute(self): return self # FIXME this must defer to the specific flavour (and, under Windows, # use nt._getfullpathname()) - obj = self._from_parts([os.getcwd()] + self._parts, init=False) - obj._init(template=self) - return obj + return self._from_parts([os.getcwd()] + self._parts) def resolve(self, strict=False): """ @@ -1210,9 +1189,7 @@ def resolve(self, strict=False): s = str(self.absolute()) # Now we have no symlinks in the path, it's safe to normalize it. normed = self._flavour.pathmod.normpath(s) - obj = self._from_parts((normed,), init=False) - obj._init(template=self) - return obj + return self._from_parts((normed,)) def stat(self): """ @@ -1284,9 +1261,7 @@ def readlink(self): Return the path to which the symbolic link points. """ path = self._accessor.readlink(self) - obj = self._from_parts((path,), init=False) - obj._init(template=self) - return obj + return self._from_parts((path,)) def touch(self, mode=0o666, exist_ok=True): """ From webhook-mailer at python.org Wed Apr 7 01:02:28 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 07 Apr 2021 05:02:28 -0000 Subject: [Python-checkins] bpo-38605: Update "Future statements" docs since PEP 563 is always enabled (GH-25236) Message-ID: https://github.com/python/cpython/commit/1be456ae9d53bb1cba2b24fc86175c282d1c2169 commit: 1be456ae9d53bb1cba2b24fc86175c282d1c2169 branch: master author: Saiyang Gou committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-06T22:02:20-07:00 summary: bpo-38605: Update "Future statements" docs since PEP 563 is always enabled (GH-25236) Update documentation section for "Future statements" to reflect that `from __future__ import annotations` is on by default, and no features require using the future statement now. files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 2c6c90140201c..3fff8484856ab 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -874,14 +874,11 @@ can appear before a future statement are: * blank lines, and * other future statements. -The only feature that requires using the future statement is -``annotations`` (see :pep:`563`). - All historical features enabled by the future statement are still recognized by Python 3. The list includes ``absolute_import``, ``division``, ``generators``, ``generator_stop``, ``unicode_literals``, -``print_function``, ``nested_scopes`` and ``with_statement``. They are -all redundant because they are always enabled, and only kept for +``print_function``, ``nested_scopes``, ``with_statement`` and ``annotations``. +They are all redundant because they are always enabled, and only kept for backwards compatibility. A future statement is recognized and treated specially at compile time: Changes From webhook-mailer at python.org Wed Apr 7 05:52:16 2021 From: webhook-mailer at python.org (markshannon) Date: Wed, 07 Apr 2021 09:52:16 -0000 Subject: [Python-checkins] Correct micro release number and add a couple of asserts. (GH-25224) Message-ID: https://github.com/python/cpython/commit/67969f5eb80844b68005181fd887bcf94c01fb40 commit: 67969f5eb80844b68005181fd887bcf94c01fb40 branch: master author: Mark Shannon committer: markshannon date: 2021-04-07T10:52:07+01:00 summary: Correct micro release number and add a couple of asserts. (GH-25224) files: M Lib/importlib/_bootstrap_external.py M Python/compile.c diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 0b6cc8a8e3214..66ba7dceedc8b 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -348,7 +348,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10a2 3433 (RERAISE restores f_lasti if oparg != 0) # Python 3.10a6 3434 (PEP 634: Structural Pattern Matching) # Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). -# Python 3.10a7 3436 (Add GEN_START bytecode #43683) +# Python 3.10b1 3436 (Add GEN_START bytecode #43683) # # MAGIC must change whenever the bytecode emitted by the compiler may no diff --git a/Python/compile.c b/Python/compile.c index c2fa1c0282191..65dacc2da64bd 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6162,8 +6162,7 @@ stackdepth(struct compiler *c) entryblock = b; nblocks++; } - if (!entryblock) - return 0; + assert(entryblock!= NULL); stack = (basicblock **)PyObject_Malloc(sizeof(basicblock *) * nblocks); if (!stack) { PyErr_NoMemory(); @@ -6725,6 +6724,7 @@ assemble(struct compiler *c, int addNone) nblocks++; entryblock = b; } + assert(entryblock != NULL); if (insert_generator_prefix(c, entryblock)) { goto error; @@ -6732,7 +6732,7 @@ assemble(struct compiler *c, int addNone) /* Set firstlineno if it wasn't explicitly set. */ if (!c->u->u_firstlineno) { - if (entryblock && entryblock->b_instr && entryblock->b_instr->i_lineno) + if (entryblock->b_instr && entryblock->b_instr->i_lineno) c->u->u_firstlineno = entryblock->b_instr->i_lineno; else c->u->u_firstlineno = 1; From webhook-mailer at python.org Wed Apr 7 07:01:19 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 11:01:19 -0000 Subject: [Python-checkins] bpo-43244: Remove Yield macro from pycore_ast.h (GH-25243) Message-ID: https://github.com/python/cpython/commit/d36d6a9c1808e87628ebaa855d4bec80130189f4 commit: d36d6a9c1808e87628ebaa855d4bec80130189f4 branch: master author: Victor Stinner committer: vstinner date: 2021-04-07T13:01:09+02:00 summary: bpo-43244: Remove Yield macro from pycore_ast.h (GH-25243) * pycore_ast.h no longer defines the Yield macro. * Fix a compiler warning on Windows: "warning C4005: 'Yield': macro redefinition". * Python-ast.c now defines directly functions with their real _Py_xxx() name, rather than xxx(). * Remove "#undef Yield" in C files including pycore_ast.h. files: M Include/internal/pycore_ast.h M Parser/asdl_c.py M Python/Python-ast.c M Python/ast_opt.c M Python/bltinmodule.c M Python/import.c M Python/pythonrun.c M Python/symtable.c diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h index ac1e387560b78..5099cf6ec8c99 100644 --- a/Include/internal/pycore_ast.h +++ b/Include/internal/pycore_ast.h @@ -12,8 +12,6 @@ extern "C" { #include "pycore_asdl.h" -#undef Yield /* undefine macro conflicting with */ - typedef struct _mod *mod_ty; typedef struct _stmt *stmt_ty; @@ -729,7 +727,6 @@ expr_ty _Py_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int #define Await(a0, a1, a2, a3, a4, a5) _Py_Await(a0, a1, a2, a3, a4, a5) expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Yield(a0, a1, a2, a3, a4, a5) _Py_Yield(a0, a1, a2, a3, a4, a5) expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); #define YieldFrom(a0, a1, a2, a3, a4, a5) _Py_YieldFrom(a0, a1, a2, a3, a4, a5) diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index 3bdeedb394d61..02be1b3ccb0db 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -325,8 +325,12 @@ def emit_function(self, name, ctype, args, attrs, union=True): margs = "a0" for i in range(1, len(args)+1): margs += ", a%d" % i - self.emit("#define %s(%s) _Py_%s(%s)" % (name, margs, name, margs), 0, - reflow=False) + # bpo-43244: defines Yield macro. Don't redefine it in + # pycore_ast.h: it is not needed outside Python-ast.c which calls + # directly _Py_Yield(). + if name != "Yield": + self.emit("#define %s(%s) _Py_%s(%s)" % (name, margs, name, margs), 0, + reflow=False) self.emit("%s _Py_%s(%s);" % (ctype, name, argstr), False) def visitProduct(self, prod, name): @@ -336,6 +340,10 @@ def visitProduct(self, prod, name): union=False) +def pyfunc_name(name): + return f"_Py_{name}" + + class FunctionVisitor(PrototypeVisitor): """Visitor to generate constructor functions for AST.""" @@ -349,7 +357,7 @@ def emit(s, depth=0, reflow=True): else: argstr = "PyArena *arena" self.emit("%s" % ctype, 0) - emit("%s(%s)" % (name, argstr)) + emit("%s(%s)" % (pyfunc_name(name), argstr)) emit("{") emit("%s p;" % ctype, 1) for argtype, argname, opt in args: @@ -488,7 +496,7 @@ def complexSum(self, sum, name): for f in t.fields: self.visitField(f, t.name, sum=sum, depth=2) args = [f.name for f in t.fields] + [a.name for a in sum.attributes] - self.emit("*out = %s(%s);" % (t.name, self.buildArgs(args)), 2) + self.emit("*out = %s(%s);" % (pyfunc_name(t.name), self.buildArgs(args)), 2) self.emit("if (*out == NULL) goto failed;", 2) self.emit("return 0;", 2) self.emit("}", 1) @@ -521,7 +529,7 @@ def visitProduct(self, prod, name): self.visitField(a, name, prod=prod, depth=1) args = [f.name for f in prod.fields] args.extend([a.name for a in prod.attributes]) - self.emit("*out = %s(%s);" % (name, self.buildArgs(args)), 1) + self.emit("*out = %s(%s);" % (pyfunc_name(name), self.buildArgs(args)), 1) self.emit("return 0;", 1) self.emit("failed:", 0) self.emit("Py_XDECREF(tmp);", 1) @@ -1423,34 +1431,29 @@ def generate_module_def(mod, f, internal_h): generate_ast_state(module_state, internal_h) - print(textwrap.dedent(f""" + print(textwrap.dedent(""" + #include "Python.h" + #include "pycore_ast.h" #include "pycore_ast_state.h" // struct ast_state #include "pycore_interp.h" // _PyInterpreterState.ast #include "pycore_pystate.h" // _PyInterpreterState_GET() - """).rstrip(), file=f) - - f.write(""" -// Forward declaration -static int init_types(struct ast_state *state); + #include "structmember.h" + #include -static struct ast_state* -get_ast_state(void) -{ - PyInterpreterState *interp = _PyInterpreterState_GET(); - struct ast_state *state = &interp->ast; - if (!init_types(state)) { - return NULL; - } - return state; -} -""") + // Forward declaration + static int init_types(struct ast_state *state); - print(textwrap.dedent(""" - // Include pycore_ast.h after pycore_interp.h to avoid conflicts - // with the Yield macro redefined by - #include "pycore_ast.h" - #include "structmember.h" - """).rstrip(), file=f) + static struct ast_state* + get_ast_state(void) + { + PyInterpreterState *interp = _PyInterpreterState_GET(); + struct ast_state *state = &interp->ast; + if (!init_types(state)) { + return NULL; + } + return state; + } + """).strip(), file=f) generate_ast_fini(module_state, f) @@ -1477,8 +1480,6 @@ def write_header(mod, f): #include "pycore_asdl.h" - #undef Yield /* undefine macro conflicting with */ - """).lstrip()) c = ChainOfVisitors(TypeDefVisitor(f), SequenceDefVisitor(f), @@ -1534,12 +1535,6 @@ def write_internal_h_footer(mod, f): def write_source(mod, f, internal_h_file): - print(textwrap.dedent(f""" - #include - - #include "Python.h" - """), file=f) - generate_module_def(mod, f, internal_h_file) v = ChainOfVisitors( diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 3c4b0ba8b83c5..e34bd26d74a19 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -1,14 +1,12 @@ // File automatically generated by Parser/asdl_c.py. - -#include - #include "Python.h" - - +#include "pycore_ast.h" #include "pycore_ast_state.h" // struct ast_state #include "pycore_interp.h" // _PyInterpreterState.ast #include "pycore_pystate.h" // _PyInterpreterState_GET() +#include "structmember.h" +#include // Forward declaration static int init_types(struct ast_state *state); @@ -24,11 +22,6 @@ get_ast_state(void) return state; } -// Include pycore_ast.h after pycore_interp.h to avoid conflicts -// with the Yield macro redefined by -#include "pycore_ast.h" -#include "structmember.h" - void _PyAST_Fini(PyInterpreterState *interp) { struct ast_state *state = &interp->ast; @@ -1783,8 +1776,8 @@ static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* out, PyArena* arena); mod_ty -Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena - *arena) +_Py_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena + *arena) { mod_ty p; p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1797,7 +1790,7 @@ Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena } mod_ty -Interactive(asdl_stmt_seq * body, PyArena *arena) +_Py_Interactive(asdl_stmt_seq * body, PyArena *arena) { mod_ty p; p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1809,7 +1802,7 @@ Interactive(asdl_stmt_seq * body, PyArena *arena) } mod_ty -Expression(expr_ty body, PyArena *arena) +_Py_Expression(expr_ty body, PyArena *arena) { mod_ty p; if (!body) { @@ -1826,7 +1819,7 @@ Expression(expr_ty body, PyArena *arena) } mod_ty -FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) +_Py_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) { mod_ty p; if (!returns) { @@ -1844,10 +1837,10 @@ FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) } stmt_ty -FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, - asdl_expr_seq * decorator_list, expr_ty returns, string - type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, + asdl_expr_seq * decorator_list, expr_ty returns, string + type_comment, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; if (!name) { @@ -1878,10 +1871,10 @@ FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, } stmt_ty -AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, - asdl_expr_seq * decorator_list, expr_ty returns, string - type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, + asdl_expr_seq * decorator_list, expr_ty returns, string + type_comment, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { stmt_ty p; if (!name) { @@ -1912,9 +1905,10 @@ AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, } stmt_ty -ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * keywords, - asdl_stmt_seq * body, asdl_expr_seq * decorator_list, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * + keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; if (!name) { @@ -1939,8 +1933,8 @@ ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * keywords, } stmt_ty -Return(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1956,8 +1950,8 @@ Return(expr_ty value, int lineno, int col_offset, int end_lineno, int } stmt_ty -Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1973,8 +1967,9 @@ Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, int } stmt_ty -Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int + lineno, int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { stmt_ty p; if (!value) { @@ -1997,8 +1992,8 @@ Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int lineno, } stmt_ty -AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2031,9 +2026,9 @@ AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int } stmt_ty -AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; if (!target) { @@ -2062,9 +2057,9 @@ AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int } stmt_ty -For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * orelse, - string type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * + orelse, string type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2094,9 +2089,9 @@ For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * orelse, } stmt_ty -AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * - orelse, string type_comment, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq + * orelse, string type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2126,8 +2121,9 @@ AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * } stmt_ty -While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int + lineno, int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { stmt_ty p; if (!test) { @@ -2150,8 +2146,8 @@ While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, } stmt_ty -If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!test) { @@ -2174,8 +2170,9 @@ If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, int } stmt_ty -With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2193,9 +2190,9 @@ With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, int } stmt_ty -AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, - int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_Py_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string + type_comment, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2213,8 +2210,8 @@ AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, } stmt_ty -Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!subject) { @@ -2236,8 +2233,8 @@ Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int col_offset, } stmt_ty -Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2254,9 +2251,9 @@ Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int end_lineno, } stmt_ty -Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq * - orelse, asdl_stmt_seq * finalbody, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq + * orelse, asdl_stmt_seq * finalbody, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2275,8 +2272,8 @@ Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq * } stmt_ty -Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!test) { @@ -2298,8 +2295,8 @@ Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno, } stmt_ty -Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2315,8 +2312,9 @@ Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, int } stmt_ty -ImportFrom(identifier module, asdl_alias_seq * names, int level, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_ImportFrom(identifier module, asdl_alias_seq * names, int level, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2334,8 +2332,8 @@ ImportFrom(identifier module, asdl_alias_seq * names, int level, int lineno, } stmt_ty -Global(asdl_identifier_seq * names, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_Py_Global(asdl_identifier_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2351,8 +2349,8 @@ Global(asdl_identifier_seq * names, int lineno, int col_offset, int end_lineno, } stmt_ty -Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2368,8 +2366,8 @@ Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int } stmt_ty -Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; if (!value) { @@ -2390,8 +2388,8 @@ Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int } stmt_ty -Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2406,8 +2404,8 @@ Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena } stmt_ty -Break(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_Break(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2422,8 +2420,8 @@ Break(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena } stmt_ty -Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_Py_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2438,8 +2436,8 @@ Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, } expr_ty -BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!op) { @@ -2461,8 +2459,8 @@ BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, int } expr_ty -NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!target) { @@ -2489,8 +2487,8 @@ NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int } expr_ty -BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!left) { @@ -2523,8 +2521,8 @@ BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset, } expr_ty -UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!op) { @@ -2551,8 +2549,8 @@ UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int } expr_ty -Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!args) { @@ -2579,8 +2577,8 @@ Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int } expr_ty -IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!test) { @@ -2613,8 +2611,8 @@ IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset, } expr_ty -Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2631,8 +2629,8 @@ Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int col_offset, } expr_ty -Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2648,8 +2646,8 @@ Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int } expr_ty -ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!elt) { @@ -2671,8 +2669,8 @@ ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int } expr_ty -SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!elt) { @@ -2694,9 +2692,9 @@ SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int } expr_ty -DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!key) { @@ -2724,8 +2722,9 @@ DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, int } expr_ty -GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!elt) { @@ -2747,8 +2746,8 @@ GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int } expr_ty -Await(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2769,8 +2768,8 @@ Await(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2786,8 +2785,8 @@ Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_Py_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2808,9 +2807,9 @@ YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int + lineno, int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!left) { @@ -2833,8 +2832,9 @@ Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int } expr_ty -Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int + lineno, int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!func) { @@ -2857,9 +2857,9 @@ Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int } expr_ty -FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!value) { @@ -2882,8 +2882,8 @@ FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno, } expr_ty -JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_Py_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2899,8 +2899,8 @@ JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int end_lineno, } expr_ty -Constant(constant value, string kind, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Constant(constant value, string kind, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2922,8 +2922,9 @@ Constant(constant value, string kind, int lineno, int col_offset, int } expr_ty -Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!value) { @@ -2956,8 +2957,9 @@ Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int } expr_ty -Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!value) { @@ -2990,8 +2992,8 @@ Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int } expr_ty -Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -3018,8 +3020,8 @@ Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int } expr_ty -Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!id) { @@ -3046,8 +3048,8 @@ Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int } expr_ty -List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!ctx) { @@ -3069,8 +3071,8 @@ List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int } expr_ty -Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!ctx) { @@ -3092,8 +3094,8 @@ Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, } expr_ty -Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3111,8 +3113,8 @@ Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset, } expr_ty -MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!pattern) { @@ -3139,8 +3141,8 @@ MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int } expr_ty -MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_Py_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3156,8 +3158,8 @@ MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int end_lineno, } comprehension_ty -comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async, - PyArena *arena) +_Py_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int + is_async, PyArena *arena) { comprehension_ty p; if (!target) { @@ -3181,9 +3183,9 @@ comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async, } excepthandler_ty -ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_Py_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { excepthandler_ty p; p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3201,9 +3203,9 @@ ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int lineno, } arguments_ty -arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg, - asdl_arg_seq * kwonlyargs, asdl_expr_seq * kw_defaults, arg_ty kwarg, - asdl_expr_seq * defaults, PyArena *arena) +_Py_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg, + asdl_arg_seq * kwonlyargs, asdl_expr_seq * kw_defaults, arg_ty + kwarg, asdl_expr_seq * defaults, PyArena *arena) { arguments_ty p; p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3220,8 +3222,8 @@ arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg, } arg_ty -arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_Py_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena *arena) { arg_ty p; if (!arg) { @@ -3243,8 +3245,8 @@ arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int } keyword_ty -keyword(identifier arg, expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_Py_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { keyword_ty p; if (!value) { @@ -3265,7 +3267,7 @@ keyword(identifier arg, expr_ty value, int lineno, int col_offset, int } alias_ty -alias(identifier name, identifier asname, PyArena *arena) +_Py_alias(identifier name, identifier asname, PyArena *arena) { alias_ty p; if (!name) { @@ -3282,7 +3284,7 @@ alias(identifier name, identifier asname, PyArena *arena) } withitem_ty -withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) +_Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) { withitem_ty p; if (!context_expr) { @@ -3299,7 +3301,8 @@ withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) } match_case_ty -match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena *arena) +_Py_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena + *arena) { match_case_ty p; if (!pattern) { @@ -3317,7 +3320,7 @@ match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena *arena) } type_ignore_ty -TypeIgnore(int lineno, string tag, PyArena *arena) +_Py_TypeIgnore(int lineno, string tag, PyArena *arena) { type_ignore_ty p; if (!tag) { @@ -5034,7 +5037,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) } Py_CLEAR(tmp); } - *out = Module(body, type_ignores, arena); + *out = _Py_Module(body, type_ignores, arena); if (*out == NULL) goto failed; return 0; } @@ -5079,7 +5082,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) } Py_CLEAR(tmp); } - *out = Interactive(body, arena); + *out = _Py_Interactive(body, arena); if (*out == NULL) goto failed; return 0; } @@ -5104,7 +5107,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Expression(body, arena); + *out = _Py_Expression(body, arena); if (*out == NULL) goto failed; return 0; } @@ -5163,7 +5166,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = FunctionType(argtypes, returns, arena); + *out = _Py_FunctionType(argtypes, returns, arena); if (*out == NULL) goto failed; return 0; } @@ -5374,9 +5377,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = FunctionDef(name, args, body, decorator_list, returns, - type_comment, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_FunctionDef(name, args, body, decorator_list, returns, + type_comment, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5511,9 +5514,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = AsyncFunctionDef(name, args, body, decorator_list, returns, - type_comment, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_AsyncFunctionDef(name, args, body, decorator_list, returns, + type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5674,8 +5677,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = ClassDef(name, bases, keywords, body, decorator_list, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _Py_ClassDef(name, bases, keywords, body, decorator_list, + lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -5700,8 +5704,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Return(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Return(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5746,8 +5750,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Delete(targets, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Delete(targets, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5820,8 +5824,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Assign(targets, value, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _Py_Assign(targets, value, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5874,8 +5878,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = AugAssign(target, op, value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_AugAssign(target, op, value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5942,8 +5946,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = AnnAssign(target, annotation, value, simple, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _Py_AnnAssign(target, annotation, value, simple, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6064,8 +6068,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = For(target, iter, body, orelse, type_comment, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _Py_For(target, iter, body, orelse, type_comment, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6186,8 +6190,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = AsyncFor(target, iter, body, orelse, type_comment, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _Py_AsyncFor(target, iter, body, orelse, type_comment, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6280,8 +6284,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = While(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_While(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6374,8 +6378,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = If(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_If(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6468,8 +6472,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = With(items, body, type_comment, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_With(items, body, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6562,8 +6566,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = AsyncWith(items, body, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _Py_AsyncWith(items, body, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6622,8 +6626,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Match(subject, cases, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Match(subject, cases, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6662,8 +6666,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Raise(exc, cause, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Raise(exc, cause, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6810,8 +6814,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Try(body, handlers, orelse, finalbody, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _Py_Try(body, handlers, orelse, finalbody, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6850,8 +6854,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Assert(test, msg, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Assert(test, msg, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6896,8 +6900,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Import(names, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Import(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6970,8 +6974,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = ImportFrom(module, names, level, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_ImportFrom(module, names, level, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7016,8 +7020,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Global(names, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Global(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7062,8 +7066,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Nonlocal(names, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Nonlocal(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7088,8 +7092,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Expr(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Expr(value, lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7100,7 +7104,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = Pass(lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _Py_Pass(lineno, col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7111,7 +7115,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = Break(lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _Py_Break(lineno, col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7122,7 +7126,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = Continue(lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _Py_Continue(lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7257,8 +7262,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = BoolOp(op, values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_BoolOp(op, values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7297,8 +7302,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = NamedExpr(target, value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_NamedExpr(target, value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7351,8 +7356,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = BinOp(left, op, right, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_BinOp(left, op, right, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7391,8 +7396,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = UnaryOp(op, operand, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_UnaryOp(op, operand, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7431,8 +7436,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Lambda(args, body, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Lambda(args, body, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7485,8 +7490,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = IfExp(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_IfExp(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7565,8 +7570,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Dict(keys, values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Dict(keys, values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7611,7 +7616,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Set(elts, lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _Py_Set(elts, lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7670,8 +7676,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = ListComp(elt, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_ListComp(elt, generators, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7730,8 +7736,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = SetComp(elt, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_SetComp(elt, generators, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7804,8 +7810,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = DictComp(key, value, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_DictComp(key, value, generators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7864,8 +7870,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = GeneratorExp(elt, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_GeneratorExp(elt, generators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7890,8 +7896,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Await(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Await(value, lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7916,8 +7922,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Yield(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Yield(value, lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7942,8 +7948,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = YieldFrom(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_YieldFrom(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8036,8 +8042,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Compare(left, ops, comparators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Compare(left, ops, comparators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8130,8 +8136,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = Call(func, args, keywords, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Call(func, args, keywords, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8184,8 +8190,9 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = FormattedValue(value, conversion, format_spec, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _Py_FormattedValue(value, conversion, format_spec, lineno, + col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -8230,8 +8237,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = JoinedStr(values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_JoinedStr(values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8270,8 +8277,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Constant(value, kind, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Constant(value, kind, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8324,8 +8331,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Attribute(value, attr, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Attribute(value, attr, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8378,8 +8385,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Subscript(value, slice, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Subscript(value, slice, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8418,8 +8425,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Starred(value, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Starred(value, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8458,8 +8465,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Name(id, ctx, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Name(id, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8518,8 +8525,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = List(elts, ctx, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_List(elts, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8578,8 +8585,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Tuple(elts, ctx, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_Tuple(elts, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8632,8 +8639,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = Slice(lower, upper, step, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_Slice(lower, upper, step, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8672,8 +8679,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = MatchAs(pattern, name, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_MatchAs(pattern, name, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8718,8 +8725,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = MatchOr(patterns, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_MatchOr(patterns, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -9123,7 +9130,7 @@ obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = comprehension(target, iter, ifs, is_async, arena); + *out = _Py_comprehension(target, iter, ifs, is_async, arena); return 0; failed: Py_XDECREF(tmp); @@ -9268,8 +9275,8 @@ obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty* } Py_CLEAR(tmp); } - *out = ExceptHandler(type, name, body, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_ExceptHandler(type, name, body, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -9484,8 +9491,8 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out, } Py_CLEAR(tmp); } - *out = arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg, - defaults, arena); + *out = _Py_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, + kwarg, defaults, arena); return 0; failed: Py_XDECREF(tmp); @@ -9595,8 +9602,8 @@ obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = arg(arg, annotation, type_comment, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _Py_arg(arg, annotation, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); return 0; failed: Py_XDECREF(tmp); @@ -9693,8 +9700,8 @@ obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out, if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _Py_keyword(arg, value, lineno, col_offset, end_lineno, + end_col_offset, arena); return 0; failed: Py_XDECREF(tmp); @@ -9735,7 +9742,7 @@ obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = alias(name, asname, arena); + *out = _Py_alias(name, asname, arena); return 0; failed: Py_XDECREF(tmp); @@ -9776,7 +9783,7 @@ obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out, if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = withitem(context_expr, optional_vars, arena); + *out = _Py_withitem(context_expr, optional_vars, arena); return 0; failed: Py_XDECREF(tmp); @@ -9851,7 +9858,7 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, } Py_CLEAR(tmp); } - *out = match_case(pattern, guard, body, arena); + *out = _Py_match_case(pattern, guard, body, arena); return 0; failed: Py_XDECREF(tmp); @@ -9906,7 +9913,7 @@ obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = TypeIgnore(lineno, tag, arena); + *out = _Py_TypeIgnore(lineno, tag, arena); if (*out == NULL) goto failed; return 0; } diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 0310466b34f3f..46dba7646e0cd 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -451,8 +451,8 @@ astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state) return 0; } asdl_seq_SET(values, 0, st->v.Expr.value); - expr_ty expr = JoinedStr(values, st->lineno, st->col_offset, - st->end_lineno, st->end_col_offset, ctx_); + expr_ty expr = _Py_JoinedStr(values, st->lineno, st->col_offset, + st->end_lineno, st->end_col_offset, ctx_); if (!expr) { return 0; } diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index a076006d65231..3b0e59a6d18c3 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -3,7 +3,6 @@ #include "Python.h" #include #include "pycore_ast.h" // _PyAST_Validate() -#undef Yield /* undefine macro conflicting with */ #include "pycore_compile.h" // _PyAST_Compile() #include "pycore_object.h" // _Py_AddToAllObjects() #include "pycore_pyerrors.h" // _PyErr_NoMemory() diff --git a/Python/import.c b/Python/import.c index 6fba057baddeb..c4878c628bedc 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2,7 +2,6 @@ #include "Python.h" -#undef Yield /* undefine macro conflicting with */ #include "pycore_import.h" // _PyImport_BootstrapImp() #include "pycore_initconfig.h" #include "pycore_pyerrors.h" diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 1715cde49dd68..99be6295b48a7 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -11,8 +11,6 @@ #include "Python.h" #include "pycore_ast.h" // PyAST_mod2obj -#undef Yield /* undefine macro conflicting with */ - #include "pycore_compile.h" // _PyAST_Compile() #include "pycore_interp.h" // PyInterpreterState.importlib #include "pycore_object.h" // _PyDebug_PrintTotalRefs() diff --git a/Python/symtable.c b/Python/symtable.c index 68f2c71f18ea8..d148a563a3eb5 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1,6 +1,5 @@ #include "Python.h" #include "pycore_ast.h" // identifier, stmt_ty -#undef Yield /* undefine macro conflicting with */ #include "pycore_compile.h" // _Py_Mangle() #include "pycore_parser.h" // _PyParser_ASTFromString() #include "pycore_pystate.h" // _PyThreadState_GET() From webhook-mailer at python.org Wed Apr 7 07:27:51 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 11:27:51 -0000 Subject: [Python-checkins] bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) Message-ID: https://github.com/python/cpython/commit/7215d1ae25525c92b026166f9d5cac85fb1defe1 commit: 7215d1ae25525c92b026166f9d5cac85fb1defe1 branch: master author: Yeting Li committer: vstinner date: 2021-04-07T13:27:41+02:00 summary: bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) Fix Regular Expression Denial of Service (ReDoS) vulnerability in urllib.request.AbstractBasicAuthHandler. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. files: A Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst M Lib/urllib/request.py diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index e5febe61f556d..8363905f20fa3 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -945,7 +945,7 @@ class AbstractBasicAuthHandler: # (single quotes are a violation of the RFC, but appear in the wild) rx = re.compile('(?:^|,)' # start of the string or ',' '[ \t]*' # optional whitespaces - '([^ \t]+)' # scheme like "Basic" + '([^ \t,]+)' # scheme like "Basic" '[ \t]+' # mandatory whitespaces # realm=xxx # realm='xxx' diff --git a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst new file mode 100644 index 0000000000000..1c9f727e965fb --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst @@ -0,0 +1 @@ +Fix Regular Expression Denial of Service (ReDoS) vulnerability in :class:`urllib.request.AbstractBasicAuthHandler`. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. From webhook-mailer at python.org Wed Apr 7 07:36:02 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 11:36:02 -0000 Subject: [Python-checkins] bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) Message-ID: https://github.com/python/cpython/commit/0af99b44edf559305def22b2d68be685ce50d7f6 commit: 0af99b44edf559305def22b2d68be685ce50d7f6 branch: 3.9 author: Steve Dower committer: zooba date: 2021-04-07T12:35:36+01:00 summary: bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) files: A Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_import/__init__.py M Lib/test/test_importlib/test_spec.py M Lib/test/test_importlib/test_windows.py M Lib/test/test_site.py M Modules/clinic/posixmodule.c.h M Modules/posixmodule.c M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 25a3f8c0e0934..7c4157369d3f9 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -19,6 +19,34 @@ # reference any injected objects! This includes not only global code but also # anything specified at the class level. +# Import builtin modules +import _imp +import _io +import sys +import _warnings +import marshal + + +_MS_WINDOWS = (sys.platform == 'win32') +if _MS_WINDOWS: + import nt as _os + import winreg +else: + import posix as _os + + +if _MS_WINDOWS: + path_separators = ['\\', '/'] +else: + path_separators = ['/'] +# Assumption made in _path_join() +assert all(len(sep) == 1 for sep in path_separators) +path_sep = path_separators[0] +path_sep_tuple = tuple(path_separators) +path_separators = ''.join(path_separators) +_pathseps_with_colon = {f':{s}' for s in path_separators} + + # Bootstrap-related code ###################################################### _CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', _CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' @@ -59,22 +87,49 @@ def _unpack_uint16(data): return int.from_bytes(data, 'little') -def _path_join(*path_parts): - """Replacement for os.path.join().""" - return path_sep.join([part.rstrip(path_separators) - for part in path_parts if part]) +if _MS_WINDOWS: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + if not path_parts: + return "" + if len(path_parts) == 1: + return path_parts[0] + root = "" + path = [] + for new_root, tail in map(_os._path_splitroot, path_parts): + if new_root.startswith(path_sep_tuple) or new_root.endswith(path_sep_tuple): + root = new_root.rstrip(path_separators) or root + path = [path_sep + tail] + elif new_root.endswith(':'): + if root.casefold() != new_root.casefold(): + # Drive relative paths have to be resolved by the OS, so we reset the + # tail but do not add a path_sep prefix. + root = new_root + path = [tail] + else: + path.append(tail) + else: + root = new_root or root + path.append(tail) + path = [p.rstrip(path_separators) for p in path if p] + if len(path) == 1 and not path[0]: + # Avoid losing the root's trailing separator when joining with nothing + return root + path_sep + return root + path_sep.join(path) + +else: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + return path_sep.join([part.rstrip(path_separators) + for part in path_parts if part]) def _path_split(path): """Replacement for os.path.split().""" - if len(path_separators) == 1: - front, _, tail = path.rpartition(path_sep) - return front, tail - for x in reversed(path): - if x in path_separators: - front, tail = path.rsplit(x, maxsplit=1) - return front, tail - return '', path + i = max(path.rfind(p) for p in path_separators) + if i < 0: + return '', path + return path[:i], path[i + 1:] def _path_stat(path): @@ -108,13 +163,18 @@ def _path_isdir(path): return _path_is_mode_type(path, 0o040000) -def _path_isabs(path): - """Replacement for os.path.isabs. +if _MS_WINDOWS: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + if not path: + return False + root = _os._path_splitroot(path)[0].replace('/', '\\') + return len(root) > 1 and (root.startswith('\\\\') or root.endswith('\\')) - Considers a Windows drive-relative path (no drive, but starts with slash) to - still be "absolute". - """ - return path.startswith(path_separators) or path[1:3] in _pathseps_with_colon +else: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + return path.startswith(path_separators) def _write_atomic(path, data, mode=0o666): @@ -658,6 +718,11 @@ def spec_from_file_location(name, location=None, *, loader=None, pass else: location = _os.fspath(location) + if not _path_isabs(location): + try: + location = _path_join(_os.getcwd(), location) + except OSError: + pass # If the location is on the filesystem, but doesn't actually exist, # we could return None here, indicating that the location is not @@ -1408,6 +1473,8 @@ def __init__(self, path, *loader_details): self._loaders = loaders # Base (directory) path self.path = path or '.' + if not _path_isabs(self.path): + self.path = _path_join(_os.getcwd(), self.path) self._path_mtime = -1 self._path_cache = set() self._relaxed_path_cache = set() @@ -1470,7 +1537,10 @@ def find_spec(self, fullname, target=None): is_namespace = _path_isdir(base_path) # Check for a file w/ a proper suffix exists. for suffix, loader_class in self._loaders: - full_path = _path_join(self.path, tail_module + suffix) + try: + full_path = _path_join(self.path, tail_module + suffix) + except ValueError: + return None _bootstrap._verbose_message('trying {}', full_path, verbosity=2) if cache_module + suffix in cache: if _path_isfile(full_path): diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index d1dafbe0bfd4b..35f148436df39 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -904,7 +904,7 @@ def test_missing_source_legacy(self): m = __import__(TESTFN) try: self.assertEqual(m.__file__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) finally: os.remove(pyc_file) @@ -912,7 +912,7 @@ def test___cached__(self): # Modules now also have an __cached__ that points to the pyc file. m = __import__(TESTFN) pyc_file = importlib.util.cache_from_source(TESTFN + '.py') - self.assertEqual(m.__cached__, os.path.join(os.curdir, pyc_file)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, pyc_file)) @skip_if_dont_write_bytecode def test___cached___legacy_pyc(self): @@ -928,7 +928,7 @@ def test___cached___legacy_pyc(self): importlib.invalidate_caches() m = __import__(TESTFN) self.assertEqual(m.__cached__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) @skip_if_dont_write_bytecode def test_package___cached__(self): @@ -948,10 +948,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_package___cached___from_pyc(self): # Like test___cached__ but ensuring __cached__ when imported from a @@ -975,10 +975,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_recompute_pyc_same_second(self): # Even when the source file doesn't change timestamp, a change in diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index 5a16a03de60fa..14aec09d97c90 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -498,7 +498,7 @@ class FactoryTests: def setUp(self): self.name = 'spam' - self.path = 'spam.py' + self.path = os.path.abspath('spam.py') self.cached = self.util.cache_from_source(self.path) self.loader = TestLoader() self.fileloader = TestLoader(self.path) @@ -637,7 +637,7 @@ def test_spec_from_loader_is_package_true_with_fileloader(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -736,7 +736,7 @@ def test_spec_from_file_location_smsl_empty(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -761,7 +761,7 @@ def test_spec_from_file_location_smsl_default(self): self.assertEqual(spec.loader, self.pkgloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -809,6 +809,17 @@ def is_package(self, name): self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) + def test_spec_from_file_location_relative_path(self): + spec = self.util.spec_from_file_location(self.name, + os.path.basename(self.path), loader=self.fileloader) + + self.assertEqual(spec.name, self.name) + self.assertEqual(spec.loader, self.fileloader) + self.assertEqual(spec.origin, self.path) + self.assertIs(spec.loader_state, None) + self.assertIs(spec.submodule_search_locations, None) + self.assertEqual(spec.cached, self.cached) + self.assertTrue(spec.has_location) (Frozen_FactoryTests, Source_FactoryTests diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index 005b685cc03cd..9a53e8dbee56f 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -107,3 +107,48 @@ def test_tagged_suffix(self): (Frozen_WindowsExtensionSuffixTests, Source_WindowsExtensionSuffixTests ) = test_util.test_both(WindowsExtensionSuffixTests, machinery=machinery) + + + at unittest.skipUnless(sys.platform.startswith('win'), 'requires Windows') +class WindowsBootstrapPathTests(unittest.TestCase): + def check_join(self, expected, *inputs): + from importlib._bootstrap_external import _path_join + actual = _path_join(*inputs) + if expected.casefold() == actual.casefold(): + return + self.assertEqual(expected, actual) + + def test_path_join(self): + self.check_join(r"C:\A\B", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "D:\\", "D", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "C:\\", "A", "C:B") + self.check_join(r"C:\A\B", "C:\\", "A\\B") + self.check_join(r"C:\A\B", r"C:\A\B") + + self.check_join("D:A", r"D:", "A") + self.check_join("D:A", r"C:\B\C", "D:", "A") + self.check_join("D:A", r"C:\B\C", r"D:A") + + self.check_join(r"A\B\C", "A", "B", "C") + self.check_join(r"A\B\C", "A", r"B\C") + self.check_join(r"A\B/C", "A", "B/C") + self.check_join(r"A\B\C", "A/", "B\\", "C") + + # Dots are not normalised by this function + self.check_join(r"A\../C", "A", "../C") + self.check_join(r"A.\.\B", "A.", ".", "B") + + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "D", r"\A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server2\Share2", "D", + r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server", r"\Share", "A", "B", "C") + self.check_join(r"\\Server\Share", r"\\Server\Share") + self.check_join(r"\\Server\Share\\", r"\\Server\Share\\") + + # Handle edge cases with empty segments + self.check_join("C:\\A", "C:/A", "") + self.check_join("C:\\", "C:/", "") + self.check_join("C:", "C:", "") + self.check_join("//Server/Share\\", "//Server/Share/", "") + self.check_join("//Server/Share\\", "//Server/Share", "") diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index ffba139dbeade..5a3bd1828eb56 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -164,6 +164,7 @@ def test_addpackage_import_bad_pth_file(self): pth_dir, pth_fn = self.make_pth("abc\x00def\n") with captured_stderr() as err_out: self.assertFalse(site.addpackage(pth_dir, pth_fn, set())) + self.maxDiff = None self.assertEqual(err_out.getvalue(), "") for path in sys.path: if isinstance(path, str): @@ -387,55 +388,6 @@ def tearDown(self): """Restore sys.path""" sys.path[:] = self.sys_path - def test_abs_paths(self): - # Make sure all imported modules have their __file__ and __cached__ - # attributes as absolute paths. Arranging to put the Lib directory on - # PYTHONPATH would cause the os module to have a relative path for - # __file__ if abs_paths() does not get run. sys and builtins (the - # only other modules imported before site.py runs) do not have - # __file__ or __cached__ because they are built-in. - try: - parent = os.path.relpath(os.path.dirname(os.__file__)) - cwd = os.getcwd() - except ValueError: - # Failure to get relpath probably means we need to chdir - # to the same drive. - cwd, parent = os.path.split(os.path.dirname(os.__file__)) - with change_cwd(cwd): - env = os.environ.copy() - env['PYTHONPATH'] = parent - code = ('import os, sys', - # use ASCII to avoid locale issues with non-ASCII directories - 'os_file = os.__file__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_file + b"\n")', - 'os_cached = os.__cached__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_cached + b"\n")') - command = '\n'.join(code) - # First, prove that with -S (no 'import site'), the paths are - # relative. - proc = subprocess.Popen([sys.executable, '-S', '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertFalse(os.path.isabs(os__file__)) - self.assertFalse(os.path.isabs(os__cached__)) - # Now, with 'import site', it works. - proc = subprocess.Popen([sys.executable, '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertTrue(os.path.isabs(os__file__), - "expected absolute path, got {}" - .format(os__file__.decode('ascii'))) - self.assertTrue(os.path.isabs(os__cached__), - "expected absolute path, got {}" - .format(os__cached__.decode('ascii'))) - def test_abs_paths_cached_None(self): """Test for __cached__ is None. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst new file mode 100644 index 0000000000000..dd4c18661ec0b --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst @@ -0,0 +1,2 @@ +Importlib now resolves relative paths when creating module spec objects from +file locations. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 41baa45573979..28798ab99c1a0 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -1311,6 +1311,47 @@ os__getvolumepathname(PyObject *module, PyObject *const *args, Py_ssize_t nargs, #endif /* defined(MS_WINDOWS) */ +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__path_splitroot__doc__, +"_path_splitroot($module, /, path)\n" +"--\n" +"\n" +"Removes everything after the root on Win32."); + +#define OS__PATH_SPLITROOT_METHODDEF \ + {"_path_splitroot", (PyCFunction)(void(*)(void))os__path_splitroot, METH_FASTCALL|METH_KEYWORDS, os__path_splitroot__doc__}, + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path); + +static PyObject * +os__path_splitroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "_path_splitroot", 0}; + PyObject *argsbuf[1]; + path_t path = PATH_T_INITIALIZE("_path_splitroot", "path", 0, 0); + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!path_converter(args[0], &path)) { + goto exit; + } + return_value = os__path_splitroot_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + PyDoc_STRVAR(os_mkdir__doc__, "mkdir($module, /, path, mode=511, *, dir_fd=None)\n" "--\n" @@ -8913,6 +8954,10 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #define OS__GETVOLUMEPATHNAME_METHODDEF #endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ +#ifndef OS__PATH_SPLITROOT_METHODDEF + #define OS__PATH_SPLITROOT_METHODDEF +#endif /* !defined(OS__PATH_SPLITROOT_METHODDEF) */ + #ifndef OS_NICE_METHODDEF #define OS_NICE_METHODDEF #endif /* !defined(OS_NICE_METHODDEF) */ @@ -9396,4 +9441,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=005919eaaef3f8e6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c7c8796918b09139 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index f83150f1ef343..80f82be7be9d7 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -18,6 +18,7 @@ FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */ # include +# include #endif #include "pycore_ceval.h" // _PyEval_ReInitThreads() @@ -4342,6 +4343,53 @@ os__getvolumepathname_impl(PyObject *module, path_t *path) return result; } + +/*[clinic input] +os._path_splitroot + + path: path_t + +Removes everything after the root on Win32. +[clinic start generated code]*/ + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=ab7f1a88b654581c input=dc93b1d3984cffb6]*/ +{ + wchar_t *buffer; + wchar_t *end; + PyObject *result = NULL; + HRESULT ret; + + buffer = (wchar_t*)PyMem_Malloc(sizeof(wchar_t) * (wcslen(path->wide) + 1)); + if (!buffer) { + return NULL; + } + wcscpy(buffer, path->wide); + for (wchar_t *p = wcschr(buffer, L'/'); p; p = wcschr(p, L'/')) { + *p = L'\\'; + } + + Py_BEGIN_ALLOW_THREADS + ret = PathCchSkipRoot(buffer, &end); + Py_END_ALLOW_THREADS + if (FAILED(ret)) { + result = Py_BuildValue("sO", "", path->object); + } else if (end != buffer) { + size_t rootLen = (size_t)(end - buffer); + result = Py_BuildValue("NN", + PyUnicode_FromWideChar(path->wide, rootLen), + PyUnicode_FromWideChar(path->wide + rootLen, -1) + ); + } else { + result = Py_BuildValue("Os", path->object, ""); + } + PyMem_Free(buffer); + + return result; +} + + #endif /* MS_WINDOWS */ @@ -14591,6 +14639,7 @@ static PyMethodDef posix_methods[] = { OS__GETDISKUSAGE_METHODDEF OS__GETFINALPATHNAME_METHODDEF OS__GETVOLUMEPATHNAME_METHODDEF + OS__PATH_SPLITROOT_METHODDEF OS_GETLOADAVG_METHODDEF OS_URANDOM_METHODDEF OS_SETRESUID_METHODDEF diff --git a/Python/importlib_external.h b/Python/importlib_external.h index a8d5d9aaba0df..c47eead1ed7de 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,41 +1,53 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,64,0,0,0,115,32,2,0,0,100,0, - 90,0,100,1,90,1,100,2,90,2,101,2,101,1,23,0, - 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, - 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, - 90,7,100,11,100,12,132,0,90,8,100,13,100,14,132,0, - 90,9,100,15,100,16,132,0,90,10,100,17,100,18,132,0, - 90,11,100,19,100,20,132,0,90,12,100,21,100,22,132,0, - 90,13,100,23,100,24,132,0,90,14,100,101,100,26,100,27, - 132,1,90,15,101,16,101,15,106,17,131,1,90,18,100,28, - 160,19,100,29,100,30,161,2,100,31,23,0,90,20,101,21, - 160,22,101,20,100,30,161,2,90,23,100,32,90,24,100,33, - 90,25,100,34,103,1,90,26,100,35,103,1,90,27,101,27, - 4,0,90,28,90,29,100,102,100,36,100,37,156,1,100,38, - 100,39,132,3,90,30,100,40,100,41,132,0,90,31,100,42, - 100,43,132,0,90,32,100,44,100,45,132,0,90,33,100,46, - 100,47,132,0,90,34,100,48,100,49,132,0,90,35,100,50, - 100,51,132,0,90,36,100,52,100,53,132,0,90,37,100,54, - 100,55,132,0,90,38,100,56,100,57,132,0,90,39,100,103, - 100,58,100,59,132,1,90,40,100,104,100,61,100,62,132,1, - 90,41,100,105,100,64,100,65,132,1,90,42,100,66,100,67, - 132,0,90,43,101,44,131,0,90,45,100,106,100,36,101,45, - 100,68,156,2,100,69,100,70,132,3,90,46,71,0,100,71, - 100,72,132,0,100,72,131,2,90,47,71,0,100,73,100,74, - 132,0,100,74,131,2,90,48,71,0,100,75,100,76,132,0, - 100,76,101,48,131,3,90,49,71,0,100,77,100,78,132,0, - 100,78,131,2,90,50,71,0,100,79,100,80,132,0,100,80, - 101,50,101,49,131,4,90,51,71,0,100,81,100,82,132,0, - 100,82,101,50,101,48,131,4,90,52,103,0,90,53,71,0, - 100,83,100,84,132,0,100,84,101,50,101,48,131,4,90,54, - 71,0,100,85,100,86,132,0,100,86,131,2,90,55,71,0, - 100,87,100,88,132,0,100,88,131,2,90,56,71,0,100,89, - 100,90,132,0,100,90,131,2,90,57,71,0,100,91,100,92, - 132,0,100,92,131,2,90,58,100,107,100,93,100,94,132,1, - 90,59,100,95,100,96,132,0,90,60,100,97,100,98,132,0, - 90,61,100,99,100,100,132,0,90,62,100,36,83,0,41,108, + 0,5,0,0,0,64,0,0,0,115,224,2,0,0,100,0, + 90,0,100,1,100,2,108,1,97,1,100,1,100,2,108,2, + 90,2,100,1,100,2,108,3,97,3,100,1,100,2,108,4, + 90,4,100,1,100,2,108,5,90,5,116,3,106,6,100,3, + 107,2,90,7,101,7,114,76,100,1,100,2,108,8,90,9, + 100,1,100,2,108,10,90,10,110,8,100,1,100,2,108,11, + 90,9,101,7,114,98,100,4,100,5,103,2,90,12,110,6, + 100,5,103,1,90,12,101,13,100,6,100,7,132,0,101,12, + 68,0,131,1,131,1,115,126,74,0,130,1,101,12,100,1, + 25,0,90,14,101,15,101,12,131,1,90,16,100,8,160,17, + 101,12,161,1,90,12,100,9,100,10,132,0,101,12,68,0, + 131,1,90,18,100,11,90,19,100,12,90,20,101,20,101,19, + 23,0,90,21,100,13,100,14,132,0,90,22,100,15,100,16, + 132,0,90,23,100,17,100,18,132,0,90,24,100,19,100,20, + 132,0,90,25,101,7,114,228,100,21,100,22,132,0,90,26, + 110,8,100,23,100,22,132,0,90,26,100,24,100,25,132,0, + 90,27,100,26,100,27,132,0,90,28,100,28,100,29,132,0, + 90,29,100,30,100,31,132,0,90,30,100,32,100,33,132,0, + 90,31,101,7,144,1,114,36,100,34,100,35,132,0,90,32, + 110,8,100,36,100,35,132,0,90,32,100,111,100,38,100,39, + 132,1,90,33,101,34,101,33,106,35,131,1,90,36,100,40, + 160,37,100,41,100,42,161,2,100,43,23,0,90,38,101,39, + 160,40,101,38,100,42,161,2,90,41,100,44,90,42,100,45, + 90,43,100,46,103,1,90,44,100,47,103,1,90,45,101,45, + 4,0,90,46,90,47,100,112,100,2,100,48,156,1,100,49, + 100,50,132,3,90,48,100,51,100,52,132,0,90,49,100,53, + 100,54,132,0,90,50,100,55,100,56,132,0,90,51,100,57, + 100,58,132,0,90,52,100,59,100,60,132,0,90,53,100,61, + 100,62,132,0,90,54,100,63,100,64,132,0,90,55,100,65, + 100,66,132,0,90,56,100,67,100,68,132,0,90,57,100,113, + 100,69,100,70,132,1,90,58,100,114,100,71,100,72,132,1, + 90,59,100,115,100,74,100,75,132,1,90,60,100,76,100,77, + 132,0,90,61,101,62,131,0,90,63,100,116,100,2,101,63, + 100,78,156,2,100,79,100,80,132,3,90,64,71,0,100,81, + 100,82,132,0,100,82,131,2,90,65,71,0,100,83,100,84, + 132,0,100,84,131,2,90,66,71,0,100,85,100,86,132,0, + 100,86,101,66,131,3,90,67,71,0,100,87,100,88,132,0, + 100,88,131,2,90,68,71,0,100,89,100,90,132,0,100,90, + 101,68,101,67,131,4,90,69,71,0,100,91,100,92,132,0, + 100,92,101,68,101,66,131,4,90,70,103,0,90,71,71,0, + 100,93,100,94,132,0,100,94,101,68,101,66,131,4,90,72, + 71,0,100,95,100,96,132,0,100,96,131,2,90,73,71,0, + 100,97,100,98,132,0,100,98,131,2,90,74,71,0,100,99, + 100,100,132,0,100,100,131,2,90,75,71,0,100,101,100,102, + 132,0,100,102,131,2,90,76,100,117,100,103,100,104,132,1, + 90,77,100,105,100,106,132,0,90,78,100,107,100,108,132,0, + 90,79,100,109,100,110,132,0,90,80,100,2,83,0,41,118, 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, @@ -58,2677 +70,2755 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108, 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, - 46,10,10,41,1,218,3,119,105,110,41,2,90,6,99,121, - 103,119,105,110,90,6,100,97,114,119,105,110,99,0,0,0, + 46,10,10,233,0,0,0,0,78,90,5,119,105,110,51,50, + 250,1,92,250,1,47,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,99,0,0,0,115, + 26,0,0,0,124,0,93,18,125,1,116,0,124,1,131,1, + 100,0,107,2,86,0,1,0,113,2,100,1,83,0,169,2, + 233,1,0,0,0,78,169,1,218,3,108,101,110,169,2,218, + 2,46,48,218,3,115,101,112,169,0,114,10,0,0,0,250, + 38,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, + 105,98,46,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,62,218,9,60,103,101,110,101,120,112, + 114,62,43,0,0,0,243,0,0,0,0,114,12,0,0,0, + 218,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,4,0,0,0,67,0,0,0,115,22,0,0,0, + 104,0,124,0,93,14,125,1,100,0,124,1,155,0,157,2, + 146,2,113,4,83,0,169,1,250,1,58,114,10,0,0,0, + 169,2,114,8,0,0,0,218,1,115,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,9,60,115,101,116,99, + 111,109,112,62,47,0,0,0,114,13,0,0,0,114,19,0, + 0,0,41,1,218,3,119,105,110,41,2,90,6,99,121,103, + 119,105,110,90,6,100,97,114,119,105,110,99,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 3,0,0,0,115,60,0,0,0,116,0,106,1,160,2,116, + 3,161,1,114,48,116,0,106,1,160,2,116,4,161,1,114, + 30,100,1,137,0,110,4,100,2,137,0,135,0,102,1,100, + 3,100,4,132,8,125,0,110,8,100,5,100,4,132,0,125, + 0,124,0,83,0,41,6,78,90,12,80,89,84,72,79,78, + 67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,79, + 78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,0, + 115,20,0,0,0,116,0,106,1,106,2,12,0,111,18,136, + 0,116,3,106,4,118,0,83,0,41,1,122,94,84,114,117, + 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, + 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, + 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, + 121,32,97,110,100,32,105,103,110,111,114,101,32,101,110,118, + 105,114,111,110,109,101,110,116,32,102,108,97,103,115,32,97, + 114,101,32,110,111,116,32,115,101,116,46,41,5,218,3,115, + 121,115,218,5,102,108,97,103,115,218,18,105,103,110,111,114, + 101,95,101,110,118,105,114,111,110,109,101,110,116,218,3,95, + 111,115,90,7,101,110,118,105,114,111,110,114,10,0,0,0, + 169,1,218,3,107,101,121,114,10,0,0,0,114,11,0,0, + 0,218,11,95,114,101,108,97,120,95,99,97,115,101,64,0, + 0,0,115,2,0,0,0,0,2,122,37,95,109,97,107,101, + 95,114,101,108,97,120,95,99,97,115,101,46,60,108,111,99, + 97,108,115,62,46,95,114,101,108,97,120,95,99,97,115,101, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,83,0,0,0,115,4,0,0,0,100,1, + 83,0,41,2,122,53,84,114,117,101,32,105,102,32,102,105, + 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, + 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, + 101,110,115,105,116,105,118,101,108,121,46,70,114,10,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,27,0,0,0,68,0,0,0,115,2, + 0,0,0,0,2,41,5,114,21,0,0,0,218,8,112,108, + 97,116,102,111,114,109,218,10,115,116,97,114,116,115,119,105, + 116,104,218,27,95,67,65,83,69,95,73,78,83,69,78,83, + 73,84,73,86,69,95,80,76,65,84,70,79,82,77,83,218, + 35,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,95,83,84,82, + 95,75,69,89,41,1,114,27,0,0,0,114,10,0,0,0, + 114,25,0,0,0,114,11,0,0,0,218,16,95,109,97,107, + 101,95,114,101,108,97,120,95,99,97,115,101,57,0,0,0, + 115,14,0,0,0,0,1,12,1,12,1,6,2,4,2,14, + 4,8,3,114,32,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, + 0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,0, + 160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,111, + 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105, + 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101, + 45,101,110,100,105,97,110,46,236,3,0,0,0,255,127,255, + 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101, + 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101, + 115,41,1,218,1,120,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,12,95,112,97,99,107,95,117,105,110, + 116,51,50,74,0,0,0,115,2,0,0,0,0,2,114,39, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0, + 0,116,0,124,0,131,1,100,1,107,2,115,16,74,0,130, + 1,116,1,160,2,124,0,100,2,161,2,83,0,41,3,122, + 47,67,111,110,118,101,114,116,32,52,32,98,121,116,101,115, + 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, + 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, + 114,34,0,0,0,114,35,0,0,0,169,3,114,6,0,0, + 0,114,36,0,0,0,218,10,102,114,111,109,95,98,121,116, + 101,115,169,1,218,4,100,97,116,97,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,14,95,117,110,112,97, + 99,107,95,117,105,110,116,51,50,79,0,0,0,115,4,0, + 0,0,0,2,16,1,114,44,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,28,0,0,0,116,0,124,0,131,1,100, + 1,107,2,115,16,74,0,130,1,116,1,160,2,124,0,100, + 2,161,2,83,0,41,3,122,47,67,111,110,118,101,114,116, + 32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,116, + 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, + 105,110,116,101,103,101,114,46,233,2,0,0,0,114,35,0, + 0,0,114,40,0,0,0,114,42,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,14,95,117,110, + 112,97,99,107,95,117,105,110,116,49,54,84,0,0,0,115, + 4,0,0,0,0,2,16,1,114,46,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, + 0,0,71,0,0,0,115,228,0,0,0,124,0,115,8,100, + 1,83,0,116,0,124,0,131,1,100,2,107,2,114,28,124, + 0,100,3,25,0,83,0,100,1,125,1,103,0,125,2,116, + 1,116,2,106,3,124,0,131,2,68,0,93,122,92,2,125, + 3,125,4,124,3,160,4,116,5,161,1,115,76,124,3,160, + 6,116,5,161,1,114,102,124,3,160,7,116,8,161,1,112, + 88,124,1,125,1,116,9,124,4,23,0,103,1,125,2,113, + 48,124,3,160,6,100,4,161,1,114,152,124,1,160,10,161, + 0,124,3,160,10,161,0,107,3,114,140,124,3,125,1,124, + 4,103,1,125,2,113,170,124,2,160,11,124,4,161,1,1, + 0,113,48,124,3,112,158,124,1,125,1,124,2,160,11,124, + 4,161,1,1,0,113,48,100,5,100,6,132,0,124,2,68, + 0,131,1,125,2,116,0,124,2,131,1,100,2,107,2,114, + 214,124,2,100,3,25,0,115,214,124,1,116,9,23,0,83, + 0,124,1,116,9,160,12,124,2,161,1,23,0,83,0,41, + 7,250,31,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,40, + 41,46,114,14,0,0,0,114,4,0,0,0,114,0,0,0, + 0,114,16,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,5,0,0,0,83,0,0,0,115, + 26,0,0,0,103,0,124,0,93,18,125,1,124,1,114,4, + 124,1,160,0,116,1,161,1,145,2,113,4,83,0,114,10, + 0,0,0,169,2,218,6,114,115,116,114,105,112,218,15,112, + 97,116,104,95,115,101,112,97,114,97,116,111,114,115,169,2, + 114,8,0,0,0,218,1,112,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,10,60,108,105,115,116,99,111, + 109,112,62,114,0,0,0,114,13,0,0,0,250,30,95,112, + 97,116,104,95,106,111,105,110,46,60,108,111,99,97,108,115, + 62,46,60,108,105,115,116,99,111,109,112,62,41,13,114,6, + 0,0,0,218,3,109,97,112,114,24,0,0,0,218,15,95, + 112,97,116,104,95,115,112,108,105,116,114,111,111,116,114,29, + 0,0,0,218,14,112,97,116,104,95,115,101,112,95,116,117, + 112,108,101,218,8,101,110,100,115,119,105,116,104,114,49,0, + 0,0,114,50,0,0,0,218,8,112,97,116,104,95,115,101, + 112,218,8,99,97,115,101,102,111,108,100,218,6,97,112,112, + 101,110,100,218,4,106,111,105,110,41,5,218,10,112,97,116, + 104,95,112,97,114,116,115,218,4,114,111,111,116,218,4,112, + 97,116,104,90,8,110,101,119,95,114,111,111,116,218,4,116, + 97,105,108,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,10,95,112,97,116,104,95,106,111,105,110,91,0, + 0,0,115,42,0,0,0,0,2,4,1,4,1,12,1,8, + 1,4,1,4,1,20,1,20,1,14,1,12,1,10,1,16, + 3,4,1,8,2,12,2,8,1,12,1,14,1,20,2,8, + 1,114,67,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,71,0,0,0,115, + 20,0,0,0,116,0,160,1,100,1,100,2,132,0,124,0, + 68,0,131,1,161,1,83,0,41,3,114,47,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 5,0,0,0,83,0,0,0,115,26,0,0,0,103,0,124, + 0,93,18,125,1,124,1,114,4,124,1,160,0,116,1,161, + 1,145,2,113,4,83,0,114,10,0,0,0,114,48,0,0, + 0,41,2,114,8,0,0,0,218,4,112,97,114,116,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,53,0, + 0,0,123,0,0,0,115,4,0,0,0,6,1,6,255,114, + 54,0,0,0,41,2,114,59,0,0,0,114,62,0,0,0, + 41,1,114,63,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,67,0,0,0,121,0,0,0,115, + 6,0,0,0,0,2,10,1,2,255,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,3, + 0,0,0,115,66,0,0,0,116,0,135,0,102,1,100,1, + 100,2,132,8,116,1,68,0,131,1,131,1,125,1,124,1, + 100,3,107,0,114,38,100,4,136,0,102,2,83,0,136,0, + 100,5,124,1,133,2,25,0,136,0,124,1,100,6,23,0, + 100,5,133,2,25,0,102,2,83,0,41,7,122,32,82,101, + 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, + 46,112,97,116,104,46,115,112,108,105,116,40,41,46,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,51,0,0,0,115,24,0,0,0,124,0,93,16, + 125,1,136,0,160,0,124,1,161,1,86,0,1,0,113,2, + 100,0,83,0,169,1,78,41,1,218,5,114,102,105,110,100, + 114,51,0,0,0,169,1,114,65,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,12,0,0,0,129,0,0,0,114, + 13,0,0,0,122,30,95,112,97,116,104,95,115,112,108,105, + 116,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,114,0,0,0,0,114,14,0,0,0,78,114, + 4,0,0,0,41,2,218,3,109,97,120,114,50,0,0,0, + 41,2,114,65,0,0,0,218,1,105,114,10,0,0,0,114, + 71,0,0,0,114,11,0,0,0,218,11,95,112,97,116,104, + 95,115,112,108,105,116,127,0,0,0,115,8,0,0,0,0, + 2,22,1,8,1,8,1,114,74,0,0,0,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,3,0,0,0,115,60,0,0,0,116,0,106,1,160,2, - 116,3,161,1,114,48,116,0,106,1,160,2,116,4,161,1, - 114,30,100,1,137,0,110,4,100,2,137,0,135,0,102,1, - 100,3,100,4,132,8,125,0,110,8,100,5,100,4,132,0, - 125,0,124,0,83,0,41,6,78,90,12,80,89,84,72,79, - 78,67,65,83,69,79,75,115,12,0,0,0,80,89,84,72, - 79,78,67,65,83,69,79,75,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, - 0,115,20,0,0,0,116,0,106,1,106,2,12,0,111,18, - 136,0,116,3,106,4,118,0,83,0,41,1,122,94,84,114, - 117,101,32,105,102,32,102,105,108,101,110,97,109,101,115,32, - 109,117,115,116,32,98,101,32,99,104,101,99,107,101,100,32, - 99,97,115,101,45,105,110,115,101,110,115,105,116,105,118,101, - 108,121,32,97,110,100,32,105,103,110,111,114,101,32,101,110, - 118,105,114,111,110,109,101,110,116,32,102,108,97,103,115,32, - 97,114,101,32,110,111,116,32,115,101,116,46,41,5,218,3, - 115,121,115,218,5,102,108,97,103,115,218,18,105,103,110,111, - 114,101,95,101,110,118,105,114,111,110,109,101,110,116,218,3, - 95,111,115,90,7,101,110,118,105,114,111,110,169,0,169,1, - 218,3,107,101,121,114,5,0,0,0,250,38,60,102,114,111, - 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, - 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97, - 108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,36, - 0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,107, - 101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,111, - 99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,115, - 101,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,83,0,0,0,115,4,0,0,0,100, - 1,83,0,41,2,122,53,84,114,117,101,32,105,102,32,102, - 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, - 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, - 115,101,110,115,105,116,105,118,101,108,121,46,70,114,5,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,114,9,0,0,0,40,0,0,0,115, - 2,0,0,0,0,2,41,5,114,1,0,0,0,218,8,112, - 108,97,116,102,111,114,109,218,10,115,116,97,114,116,115,119, - 105,116,104,218,27,95,67,65,83,69,95,73,78,83,69,78, - 83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83, - 218,35,95,67,65,83,69,95,73,78,83,69,78,83,73,84, - 73,86,69,95,80,76,65,84,70,79,82,77,83,95,83,84, - 82,95,75,69,89,41,1,114,9,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,8,0,0,0,218,16,95,109,97, - 107,101,95,114,101,108,97,120,95,99,97,115,101,29,0,0, - 0,115,14,0,0,0,0,1,12,1,12,1,6,2,4,2, - 14,4,8,3,114,14,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, - 0,0,115,20,0,0,0,116,0,124,0,131,1,100,1,64, - 0,160,1,100,2,100,3,161,2,83,0,41,4,122,42,67, - 111,110,118,101,114,116,32,97,32,51,50,45,98,105,116,32, - 105,110,116,101,103,101,114,32,116,111,32,108,105,116,116,108, - 101,45,101,110,100,105,97,110,46,236,3,0,0,0,255,127, - 255,127,3,0,233,4,0,0,0,218,6,108,105,116,116,108, - 101,41,2,218,3,105,110,116,218,8,116,111,95,98,121,116, - 101,115,41,1,218,1,120,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,218,12,95,112,97,99,107,95,117,105, - 110,116,51,50,46,0,0,0,115,2,0,0,0,0,2,114, - 21,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,67,0,0,0,115,28,0, - 0,0,116,0,124,0,131,1,100,1,107,2,115,16,74,0, - 130,1,116,1,160,2,124,0,100,2,161,2,83,0,41,3, - 122,47,67,111,110,118,101,114,116,32,52,32,98,121,116,101, - 115,32,105,110,32,108,105,116,116,108,101,45,101,110,100,105, - 97,110,32,116,111,32,97,110,32,105,110,116,101,103,101,114, - 46,114,16,0,0,0,114,17,0,0,0,169,3,218,3,108, - 101,110,114,18,0,0,0,218,10,102,114,111,109,95,98,121, - 116,101,115,169,1,218,4,100,97,116,97,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,218,14,95,117,110,112, - 97,99,107,95,117,105,110,116,51,50,51,0,0,0,115,4, - 0,0,0,0,2,16,1,114,27,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,67,0,0,0,115,28,0,0,0,116,0,124,0,131,1, - 100,1,107,2,115,16,74,0,130,1,116,1,160,2,124,0, - 100,2,161,2,83,0,41,3,122,47,67,111,110,118,101,114, - 116,32,50,32,98,121,116,101,115,32,105,110,32,108,105,116, - 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, - 32,105,110,116,101,103,101,114,46,233,2,0,0,0,114,17, - 0,0,0,114,22,0,0,0,114,25,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,218,14,95,117, - 110,112,97,99,107,95,117,105,110,116,49,54,56,0,0,0, - 115,4,0,0,0,0,2,16,1,114,29,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,71,0,0,0,115,20,0,0,0,116,0,160,1, - 100,1,100,2,132,0,124,0,68,0,131,1,161,1,83,0, - 41,3,122,31,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,106,111,105,110, - 40,41,46,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,5,0,0,0,83,0,0,0,115,26,0,0, - 0,103,0,124,0,93,18,125,1,124,1,114,4,124,1,160, - 0,116,1,161,1,145,2,113,4,83,0,114,5,0,0,0, - 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, - 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, - 48,218,4,112,97,114,116,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,218,10,60,108,105,115,116,99,111,109, - 112,62,64,0,0,0,115,4,0,0,0,6,1,6,255,122, - 30,95,112,97,116,104,95,106,111,105,110,46,60,108,111,99, - 97,108,115,62,46,60,108,105,115,116,99,111,109,112,62,41, - 2,218,8,112,97,116,104,95,115,101,112,218,4,106,111,105, - 110,41,1,218,10,112,97,116,104,95,112,97,114,116,115,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,10, - 95,112,97,116,104,95,106,111,105,110,62,0,0,0,115,6, - 0,0,0,0,2,10,1,2,255,114,38,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, - 0,0,0,67,0,0,0,115,96,0,0,0,116,0,116,1, - 131,1,100,1,107,2,114,36,124,0,160,2,116,3,161,1, - 92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,0, - 116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,1, - 118,0,114,44,124,0,106,5,124,4,100,1,100,2,141,2, - 92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,0, - 83,0,113,44,100,3,124,0,102,2,83,0,41,4,122,32, - 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, - 111,115,46,112,97,116,104,46,115,112,108,105,116,40,41,46, - 233,1,0,0,0,41,1,90,8,109,97,120,115,112,108,105, - 116,218,0,41,6,114,23,0,0,0,114,31,0,0,0,218, - 10,114,112,97,114,116,105,116,105,111,110,114,35,0,0,0, - 218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108, - 105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110, - 116,218,1,95,218,4,116,97,105,108,114,20,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11, - 95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,115, - 16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,1, - 18,1,14,1,114,47,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,115,10,0,0,0,116,0,160,1,124,0,161,1,83, - 0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97, - 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, - 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, - 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, - 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, - 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, - 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, - 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, - 32,32,32,41,2,114,4,0,0,0,90,4,115,116,97,116, - 169,1,114,44,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,218,10,95,112,97,116,104,95,115,116, - 97,116,80,0,0,0,115,2,0,0,0,0,7,114,49,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,8,0,0,0,67,0,0,0,115,48,0,0,0, - 122,12,116,0,124,0,131,1,125,2,87,0,110,20,4,0, - 116,1,121,32,1,0,1,0,1,0,89,0,100,1,83,0, - 48,0,124,2,106,2,100,2,64,0,124,1,107,2,83,0, - 41,3,122,49,84,101,115,116,32,119,104,101,116,104,101,114, - 32,116,104,101,32,112,97,116,104,32,105,115,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,109,111,100,101,32, - 116,121,112,101,46,70,105,0,240,0,0,41,3,114,49,0, - 0,0,218,7,79,83,69,114,114,111,114,218,7,115,116,95, - 109,111,100,101,41,3,114,44,0,0,0,218,4,109,111,100, - 101,90,9,115,116,97,116,95,105,110,102,111,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,218,18,95,112,97, - 116,104,95,105,115,95,109,111,100,101,95,116,121,112,101,90, - 0,0,0,115,10,0,0,0,0,2,2,1,12,1,12,1, - 8,1,114,53,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,10,0,0,0,116,0,124,0,100,1,131,2,83,0,41, - 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, - 101,46,105,0,128,0,0,41,1,114,53,0,0,0,114,48, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,12,95,112,97,116,104,95,105,115,102,105,108,101, - 99,0,0,0,115,2,0,0,0,0,2,114,54,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,22,0,0,0,124,0, - 115,12,116,0,160,1,161,0,125,0,116,2,124,0,100,1, - 131,2,83,0,41,2,122,30,82,101,112,108,97,99,101,109, - 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, - 105,115,100,105,114,46,105,0,64,0,0,41,3,114,4,0, - 0,0,218,6,103,101,116,99,119,100,114,53,0,0,0,114, - 48,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,11,95,112,97,116,104,95,105,115,100,105,114, - 104,0,0,0,115,6,0,0,0,0,2,4,1,8,1,114, - 56,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, - 0,0,124,0,160,0,116,1,161,1,112,24,124,0,100,1, - 100,2,133,2,25,0,116,2,118,0,83,0,41,3,122,142, - 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, - 111,115,46,112,97,116,104,46,105,115,97,98,115,46,10,10, - 32,32,32,32,67,111,110,115,105,100,101,114,115,32,97,32, - 87,105,110,100,111,119,115,32,100,114,105,118,101,45,114,101, - 108,97,116,105,118,101,32,112,97,116,104,32,40,110,111,32, - 100,114,105,118,101,44,32,98,117,116,32,115,116,97,114,116, - 115,32,119,105,116,104,32,115,108,97,115,104,41,32,116,111, - 10,32,32,32,32,115,116,105,108,108,32,98,101,32,34,97, - 98,115,111,108,117,116,101,34,46,10,32,32,32,32,114,39, - 0,0,0,233,3,0,0,0,41,3,114,11,0,0,0,114, - 31,0,0,0,218,20,95,112,97,116,104,115,101,112,115,95, - 119,105,116,104,95,99,111,108,111,110,114,48,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11, - 95,112,97,116,104,95,105,115,97,98,115,111,0,0,0,115, - 2,0,0,0,0,6,114,59,0,0,0,233,182,1,0,0, - 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,11,0,0,0,67,0,0,0,115,178,0,0,0,100,1, - 160,0,124,0,116,1,124,0,131,1,161,2,125,3,116,2, - 160,3,124,3,116,2,106,4,116,2,106,5,66,0,116,2, - 106,6,66,0,124,2,100,2,64,0,161,3,125,4,122,70, - 116,7,160,8,124,4,100,3,161,2,143,26,125,5,124,5, - 160,9,124,1,161,1,1,0,87,0,100,4,4,0,4,0, - 131,3,1,0,110,16,49,0,115,94,48,0,1,0,1,0, - 1,0,89,0,1,0,116,2,160,10,124,3,124,0,161,2, - 1,0,87,0,110,54,4,0,116,11,121,172,1,0,1,0, - 1,0,122,14,116,2,160,12,124,3,161,1,1,0,87,0, - 110,18,4,0,116,11,121,164,1,0,1,0,1,0,89,0, - 110,2,48,0,130,0,89,0,110,2,48,0,100,4,83,0, - 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, - 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, - 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, - 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, - 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, - 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, - 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, - 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, - 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, - 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, - 109,112,116,101,100,46,250,5,123,125,46,123,125,114,60,0, - 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, - 116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110, - 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, - 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, - 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, - 7,114,101,112,108,97,99,101,114,50,0,0,0,90,6,117, - 110,108,105,110,107,41,6,114,44,0,0,0,114,26,0,0, - 0,114,52,0,0,0,90,8,112,97,116,104,95,116,109,112, - 90,2,102,100,218,4,102,105,108,101,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,13,95,119,114,105,116, - 101,95,97,116,111,109,105,99,120,0,0,0,115,28,0,0, - 0,0,5,16,1,6,1,22,255,4,2,2,3,14,1,40, - 1,16,1,12,1,2,1,14,1,12,1,6,1,114,69,0, - 0,0,105,97,13,0,0,114,28,0,0,0,114,17,0,0, - 0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,97, - 99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121, - 122,4,46,112,121,99,78,41,1,218,12,111,112,116,105,109, - 105,122,97,116,105,111,110,99,2,0,0,0,0,0,0,0, - 1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,0, - 115,88,1,0,0,124,1,100,1,117,1,114,52,116,0,160, - 1,100,2,116,2,161,2,1,0,124,2,100,1,117,1,114, - 40,100,3,125,3,116,3,124,3,131,1,130,1,124,1,114, - 48,100,4,110,2,100,5,125,2,116,4,160,5,124,0,161, - 1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,124, - 5,160,7,100,6,161,1,92,3,125,6,125,7,125,8,116, - 8,106,9,106,10,125,9,124,9,100,1,117,0,114,114,116, - 11,100,7,131,1,130,1,100,4,160,12,124,6,114,126,124, - 6,110,2,124,8,124,7,124,9,103,3,161,1,125,10,124, - 2,100,1,117,0,114,172,116,8,106,13,106,14,100,8,107, - 2,114,164,100,4,125,2,110,8,116,8,106,13,106,14,125, - 2,116,15,124,2,131,1,125,2,124,2,100,4,107,3,114, - 224,124,2,160,16,161,0,115,210,116,17,100,9,160,18,124, - 2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,124, - 2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,125, - 11,116,8,106,21,100,1,117,1,144,1,114,76,116,22,124, - 4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,124, - 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,144, - 1,114,56,124,4,100,8,25,0,116,25,118,1,144,1,114, - 56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116, - 8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83, - 0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,97, - 254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,101, - 44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,116, - 104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,105, - 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, - 32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,110, - 101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,104, - 105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,110, - 115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, - 101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,32, - 99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,102, - 32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,101, - 114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,32, - 32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,99, - 111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,115, - 117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,111, - 110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,116, - 104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,44, - 32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,114, - 101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,111, - 102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105, - 115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,105, - 102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,97, - 110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,97, - 108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,32, - 114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,104, - 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,98, - 117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110, - 111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,84, - 114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,101, - 32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,103, - 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, - 116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,114, - 105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,32, - 70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,101, - 113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116, - 116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,32, - 32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110, + 0,67,0,0,0,115,10,0,0,0,116,0,160,1,124,0, + 161,1,83,0,41,1,122,126,83,116,97,116,32,116,104,101, + 32,112,97,116,104,46,10,10,32,32,32,32,77,97,100,101, + 32,97,32,115,101,112,97,114,97,116,101,32,102,117,110,99, + 116,105,111,110,32,116,111,32,109,97,107,101,32,105,116,32, + 101,97,115,105,101,114,32,116,111,32,111,118,101,114,114,105, + 100,101,32,105,110,32,101,120,112,101,114,105,109,101,110,116, + 115,10,32,32,32,32,40,101,46,103,46,32,99,97,99,104, + 101,32,115,116,97,116,32,114,101,115,117,108,116,115,41,46, + 10,10,32,32,32,32,41,2,114,24,0,0,0,90,4,115, + 116,97,116,114,71,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,10,95,112,97,116,104,95,115, + 116,97,116,135,0,0,0,115,2,0,0,0,0,7,114,75, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,8,0,0,0,67,0,0,0,115,48,0,0, + 0,122,12,116,0,124,0,131,1,125,2,87,0,110,20,4, + 0,116,1,121,32,1,0,1,0,1,0,89,0,100,1,83, + 0,48,0,124,2,106,2,100,2,64,0,124,1,107,2,83, + 0,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, + 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, + 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,75, + 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, + 95,109,111,100,101,41,3,114,65,0,0,0,218,4,109,111, + 100,101,90,9,115,116,97,116,95,105,110,102,111,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,18,95,112, + 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, + 145,0,0,0,115,10,0,0,0,0,2,2,1,12,1,12, + 1,8,1,114,79,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,10,0,0,0,116,0,124,0,100,1,131,2,83,0, + 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, + 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, + 108,101,46,105,0,128,0,0,41,1,114,79,0,0,0,114, + 71,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,12,95,112,97,116,104,95,105,115,102,105,108, + 101,154,0,0,0,115,2,0,0,0,0,2,114,80,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,22,0,0,0,124, + 0,115,12,116,0,160,1,161,0,125,0,116,2,124,0,100, + 1,131,2,83,0,41,2,122,30,82,101,112,108,97,99,101, + 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, + 46,105,115,100,105,114,46,105,0,64,0,0,41,3,114,24, + 0,0,0,218,6,103,101,116,99,119,100,114,79,0,0,0, + 114,71,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,11,95,112,97,116,104,95,105,115,100,105, + 114,159,0,0,0,115,6,0,0,0,0,2,4,1,8,1, + 114,82,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,62, + 0,0,0,124,0,115,8,100,1,83,0,116,0,160,1,124, + 0,161,1,100,2,25,0,160,2,100,3,100,4,161,2,125, + 1,116,3,124,1,131,1,100,5,107,4,111,60,124,1,160, + 4,100,6,161,1,112,60,124,1,160,5,100,4,161,1,83, + 0,41,7,250,30,82,101,112,108,97,99,101,109,101,110,116, + 32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,97, + 98,115,46,70,114,0,0,0,0,114,2,0,0,0,114,1, + 0,0,0,114,4,0,0,0,122,2,92,92,41,6,114,24, + 0,0,0,114,56,0,0,0,218,7,114,101,112,108,97,99, + 101,114,6,0,0,0,114,29,0,0,0,114,58,0,0,0, + 41,2,114,65,0,0,0,114,64,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,11,95,112,97, + 116,104,95,105,115,97,98,115,167,0,0,0,115,8,0,0, + 0,0,2,4,1,4,1,22,1,114,85,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,115,10,0,0,0,124,0,160,0, + 116,1,161,1,83,0,41,1,114,83,0,0,0,41,2,114, + 29,0,0,0,114,50,0,0,0,114,71,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,85,0, + 0,0,175,0,0,0,115,2,0,0,0,0,2,233,182,1, + 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,11,0,0,0,67,0,0,0,115,178,0,0,0, + 100,1,160,0,124,0,116,1,124,0,131,1,161,2,125,3, + 116,2,160,3,124,3,116,2,106,4,116,2,106,5,66,0, + 116,2,106,6,66,0,124,2,100,2,64,0,161,3,125,4, + 122,70,116,7,160,8,124,4,100,3,161,2,143,26,125,5, + 124,5,160,9,124,1,161,1,1,0,87,0,100,4,4,0, + 4,0,131,3,1,0,110,16,49,0,115,94,48,0,1,0, + 1,0,1,0,89,0,1,0,116,2,160,10,124,3,124,0, + 161,2,1,0,87,0,110,54,4,0,116,11,121,172,1,0, + 1,0,1,0,122,14,116,2,160,12,124,3,161,1,1,0, + 87,0,110,18,4,0,116,11,121,164,1,0,1,0,1,0, + 89,0,110,2,48,0,130,0,89,0,110,2,48,0,100,4, + 83,0,41,5,122,162,66,101,115,116,45,101,102,102,111,114, + 116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,114, + 105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,97, + 116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,32, + 32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,116, + 111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,69, + 120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,111, + 110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,103, + 32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,112, + 111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,116, + 116,101,109,112,116,101,100,46,250,5,123,125,46,123,125,114, + 86,0,0,0,90,2,119,98,78,41,13,218,6,102,111,114, + 109,97,116,218,2,105,100,114,24,0,0,0,90,4,111,112, + 101,110,90,6,79,95,69,88,67,76,90,7,79,95,67,82, + 69,65,84,90,8,79,95,87,82,79,78,76,89,218,3,95, + 105,111,218,6,70,105,108,101,73,79,218,5,119,114,105,116, + 101,114,84,0,0,0,114,76,0,0,0,90,6,117,110,108, + 105,110,107,41,6,114,65,0,0,0,114,43,0,0,0,114, + 78,0,0,0,90,8,112,97,116,104,95,116,109,112,90,2, + 102,100,218,4,102,105,108,101,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,13,95,119,114,105,116,101,95, + 97,116,111,109,105,99,180,0,0,0,115,28,0,0,0,0, + 5,16,1,6,1,22,255,4,2,2,3,14,1,40,1,16, + 1,12,1,2,1,14,1,12,1,6,1,114,94,0,0,0, + 105,97,13,0,0,114,45,0,0,0,114,35,0,0,0,115, + 2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104, + 101,95,95,122,4,111,112,116,45,122,3,46,112,121,122,4, + 46,112,121,99,41,1,218,12,111,112,116,105,109,105,122,97, + 116,105,111,110,99,2,0,0,0,0,0,0,0,1,0,0, + 0,12,0,0,0,5,0,0,0,67,0,0,0,115,88,1, + 0,0,124,1,100,1,117,1,114,52,116,0,160,1,100,2, + 116,2,161,2,1,0,124,2,100,1,117,1,114,40,100,3, + 125,3,116,3,124,3,131,1,130,1,124,1,114,48,100,4, + 110,2,100,5,125,2,116,4,160,5,124,0,161,1,125,0, + 116,6,124,0,131,1,92,2,125,4,125,5,124,5,160,7, + 100,6,161,1,92,3,125,6,125,7,125,8,116,8,106,9, + 106,10,125,9,124,9,100,1,117,0,114,114,116,11,100,7, + 131,1,130,1,100,4,160,12,124,6,114,126,124,6,110,2, + 124,8,124,7,124,9,103,3,161,1,125,10,124,2,100,1, + 117,0,114,172,116,8,106,13,106,14,100,8,107,2,114,164, + 100,4,125,2,110,8,116,8,106,13,106,14,125,2,116,15, + 124,2,131,1,125,2,124,2,100,4,107,3,114,224,124,2, + 160,16,161,0,115,210,116,17,100,9,160,18,124,2,161,1, + 131,1,130,1,100,10,160,18,124,10,116,19,124,2,161,3, + 125,10,124,10,116,20,100,8,25,0,23,0,125,11,116,8, + 106,21,100,1,117,1,144,1,114,76,116,22,124,4,131,1, + 144,1,115,16,116,23,116,4,160,24,161,0,124,4,131,2, + 125,4,124,4,100,5,25,0,100,11,107,2,144,1,114,56, + 124,4,100,8,25,0,116,25,118,1,144,1,114,56,124,4, + 100,12,100,1,133,2,25,0,125,4,116,23,116,8,106,21, + 124,4,160,26,116,25,161,1,124,11,131,3,83,0,116,23, + 124,4,116,27,124,11,131,3,83,0,41,13,97,254,2,0, + 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, + 116,111,32,97,32,46,112,121,32,102,105,108,101,44,32,114, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,105,116,115,32,46,112,121,99,32,102,105,108,101,46, + 10,10,32,32,32,32,84,104,101,32,46,112,121,32,102,105, + 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, + 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, + 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, + 104,101,32,112,97,116,104,32,116,111,32,116,104,101,10,32, + 32,32,32,46,112,121,99,32,102,105,108,101,32,99,97,108, + 99,117,108,97,116,101,100,32,97,115,32,105,102,32,116,104, + 101,32,46,112,121,32,102,105,108,101,32,119,101,114,101,32, + 105,109,112,111,114,116,101,100,46,10,10,32,32,32,32,84, + 104,101,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,112,97,114,97,109,101,116,101,114,32,99,111,110,116, + 114,111,108,115,32,116,104,101,32,112,114,101,115,117,109,101, + 100,32,111,112,116,105,109,105,122,97,116,105,111,110,32,108, + 101,118,101,108,32,111,102,10,32,32,32,32,116,104,101,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,46,32,73, + 102,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,115,32,110,111,116,32,78,111,110,101,44,32,116,104, + 101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101, + 110,116,97,116,105,111,110,10,32,32,32,32,111,102,32,116, + 104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,116, + 97,107,101,110,32,97,110,100,32,118,101,114,105,102,105,101, + 100,32,116,111,32,98,101,32,97,108,112,104,97,110,117,109, + 101,114,105,99,32,40,101,108,115,101,32,86,97,108,117,101, + 69,114,114,111,114,10,32,32,32,32,105,115,32,114,97,105, + 115,101,100,41,46,10,10,32,32,32,32,84,104,101,32,100, + 101,98,117,103,95,111,118,101,114,114,105,100,101,32,112,97, + 114,97,109,101,116,101,114,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,73,102,32,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,105,115,32,110,111,116,32, + 78,111,110,101,44,10,32,32,32,32,97,32,84,114,117,101, + 32,118,97,108,117,101,32,105,115,32,116,104,101,32,115,97, + 109,101,32,97,115,32,115,101,116,116,105,110,103,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, + 116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103, + 10,32,32,32,32,119,104,105,108,101,32,97,32,70,97,108, + 115,101,32,118,97,108,117,101,32,105,115,32,101,113,117,105, + 118,97,108,101,110,116,32,116,111,32,115,101,116,116,105,110, + 103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,116,111,32,39,49,39,46,10,10,32,32,32,32,73,102, + 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, + 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, + 122,70,116,104,101,32,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,112,97,114,97,109,101,116,101,114,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,59,32,117,115, + 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,110,115,116,101,97,100,122,50,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,111,114,32,111,112,116,105, + 109,105,122,97,116,105,111,110,32,109,117,115,116,32,98,101, + 32,115,101,116,32,116,111,32,78,111,110,101,114,14,0,0, + 0,114,4,0,0,0,218,1,46,250,36,115,121,115,46,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,46,99,97, + 99,104,101,95,116,97,103,32,105,115,32,78,111,110,101,114, + 0,0,0,0,122,24,123,33,114,125,32,105,115,32,110,111, + 116,32,97,108,112,104,97,110,117,109,101,114,105,99,122,7, + 123,125,46,123,125,123,125,114,16,0,0,0,114,45,0,0, + 0,41,28,218,9,95,119,97,114,110,105,110,103,115,218,4, + 119,97,114,110,218,18,68,101,112,114,101,99,97,116,105,111, + 110,87,97,114,110,105,110,103,218,9,84,121,112,101,69,114, + 114,111,114,114,24,0,0,0,218,6,102,115,112,97,116,104, + 114,74,0,0,0,218,10,114,112,97,114,116,105,116,105,111, + 110,114,21,0,0,0,218,14,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,218,9,99,97,99,104,101,95,116,97, + 103,218,19,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,114,62,0,0,0,114,22,0,0,0, + 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, + 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, + 114,114,111,114,114,88,0,0,0,218,4,95,79,80,84,218, + 17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,218,14,112,121,99,97,99,104,101,95,112,114,101,102, + 105,120,114,85,0,0,0,114,67,0,0,0,114,81,0,0, + 0,114,50,0,0,0,218,6,108,115,116,114,105,112,218,8, + 95,80,89,67,65,67,72,69,41,12,114,65,0,0,0,90, + 14,100,101,98,117,103,95,111,118,101,114,114,105,100,101,114, + 95,0,0,0,218,7,109,101,115,115,97,103,101,218,4,104, + 101,97,100,114,66,0,0,0,90,4,98,97,115,101,114,9, + 0,0,0,218,4,114,101,115,116,90,3,116,97,103,90,15, + 97,108,109,111,115,116,95,102,105,108,101,110,97,109,101,218, + 8,102,105,108,101,110,97,109,101,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,17,99,97,99,104,101,95, + 102,114,111,109,95,115,111,117,114,99,101,105,1,0,0,115, + 72,0,0,0,0,18,8,1,6,1,2,255,4,2,8,1, + 4,1,8,1,12,1,10,1,12,1,16,1,8,1,8,1, + 8,1,24,1,8,1,12,1,6,2,8,1,8,1,8,1, + 8,1,14,1,14,1,12,1,12,9,10,1,14,5,28,1, + 12,4,2,1,4,1,8,1,2,253,4,5,114,120,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,10,0, + 0,0,5,0,0,0,67,0,0,0,115,46,1,0,0,116, + 0,106,1,106,2,100,1,117,0,114,20,116,3,100,2,131, + 1,130,1,116,4,160,5,124,0,161,1,125,0,116,6,124, + 0,131,1,92,2,125,1,125,2,100,3,125,3,116,0,106, + 7,100,1,117,1,114,102,116,0,106,7,160,8,116,9,161, + 1,125,4,124,1,160,10,124,4,116,11,23,0,161,1,114, + 102,124,1,116,12,124,4,131,1,100,1,133,2,25,0,125, + 1,100,4,125,3,124,3,115,144,116,6,124,1,131,1,92, + 2,125,1,125,5,124,5,116,13,107,3,114,144,116,14,116, + 13,155,0,100,5,124,0,155,2,157,3,131,1,130,1,124, + 2,160,15,100,6,161,1,125,6,124,6,100,7,118,1,114, + 178,116,14,100,8,124,2,155,2,157,2,131,1,130,1,110, + 92,124,6,100,9,107,2,144,1,114,14,124,2,160,16,100, + 6,100,10,161,2,100,11,25,0,125,7,124,7,160,10,116, + 17,161,1,115,228,116,14,100,12,116,17,155,2,157,2,131, + 1,130,1,124,7,116,12,116,17,131,1,100,1,133,2,25, + 0,125,8,124,8,160,18,161,0,144,1,115,14,116,14,100, + 13,124,7,155,2,100,14,157,3,131,1,130,1,124,2,160, + 19,100,6,161,1,100,15,25,0,125,9,116,20,124,1,124, + 9,116,21,100,15,25,0,23,0,131,2,83,0,41,16,97, + 110,1,0,0,71,105,118,101,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,97,32,46,112,121,99,46,32,102,105, + 108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,112, + 97,116,104,32,116,111,32,105,116,115,32,46,112,121,32,102, + 105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112, + 121,99,32,102,105,108,101,32,100,111,101,115,32,110,111,116, + 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, + 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, + 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, + 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, + 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, + 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, + 32,46,112,121,99,32,102,105,108,101,46,32,32,73,102,32, + 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, + 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, + 32,51,49,52,55,47,52,56,56,32,102,111,114,109,97,116, + 44,32,86,97,108,117,101,69,114,114,111,114,32,119,105,108, + 108,32,98,101,32,114,97,105,115,101,100,46,32,73,102,10, + 32,32,32,32,115,121,115,46,105,109,112,108,101,109,101,110, 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, 32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111, 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101, - 114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59, - 32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,98, - 117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,111, - 112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,116, - 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,114, - 40,0,0,0,114,39,0,0,0,218,1,46,250,36,115,121, - 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, - 110,101,233,0,0,0,0,122,24,123,33,114,125,32,105,115, - 32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,105, - 99,122,7,123,125,46,123,125,123,125,250,1,58,114,28,0, - 0,0,41,28,218,9,95,119,97,114,110,105,110,103,115,218, - 4,119,97,114,110,218,18,68,101,112,114,101,99,97,116,105, - 111,110,87,97,114,110,105,110,103,218,9,84,121,112,101,69, - 114,114,111,114,114,4,0,0,0,218,6,102,115,112,97,116, - 104,114,47,0,0,0,114,41,0,0,0,114,1,0,0,0, - 218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,116, - 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, - 114,36,0,0,0,114,2,0,0,0,218,8,111,112,116,105, - 109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110, - 117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,62, - 0,0,0,218,4,95,79,80,84,218,17,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,218,14,112,121, - 99,97,99,104,101,95,112,114,101,102,105,120,114,59,0,0, - 0,114,38,0,0,0,114,55,0,0,0,114,31,0,0,0, - 218,6,108,115,116,114,105,112,218,8,95,80,89,67,65,67, - 72,69,41,12,114,44,0,0,0,90,14,100,101,98,117,103, - 95,111,118,101,114,114,105,100,101,114,70,0,0,0,218,7, - 109,101,115,115,97,103,101,218,4,104,101,97,100,114,46,0, - 0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,114, - 101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,116, - 95,102,105,108,101,110,97,109,101,218,8,102,105,108,101,110, - 97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,115, - 111,117,114,99,101,45,1,0,0,115,72,0,0,0,0,18, - 8,1,6,1,2,255,4,2,8,1,4,1,8,1,12,1, - 10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,1, - 12,1,6,2,8,1,8,1,8,1,8,1,14,1,14,1, - 12,1,12,9,10,1,14,5,28,1,12,4,2,1,4,1, - 8,1,2,253,4,5,114,97,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,0, - 67,0,0,0,115,46,1,0,0,116,0,106,1,106,2,100, - 1,117,0,114,20,116,3,100,2,131,1,130,1,116,4,160, - 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, - 1,125,2,100,3,125,3,116,0,106,7,100,1,117,1,114, - 102,116,0,106,7,160,8,116,9,161,1,125,4,124,1,160, - 10,124,4,116,11,23,0,161,1,114,102,124,1,116,12,124, - 4,131,1,100,1,133,2,25,0,125,1,100,4,125,3,124, - 3,115,144,116,6,124,1,131,1,92,2,125,1,125,5,124, - 5,116,13,107,3,114,144,116,14,116,13,155,0,100,5,124, - 0,155,2,157,3,131,1,130,1,124,2,160,15,100,6,161, - 1,125,6,124,6,100,7,118,1,114,178,116,14,100,8,124, - 2,155,2,157,2,131,1,130,1,110,92,124,6,100,9,107, - 2,144,1,114,14,124,2,160,16,100,6,100,10,161,2,100, - 11,25,0,125,7,124,7,160,10,116,17,161,1,115,228,116, - 14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,116, - 12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,160, - 18,161,0,144,1,115,14,116,14,100,13,124,7,155,2,100, - 14,157,3,131,1,130,1,124,2,160,19,100,6,161,1,100, - 15,25,0,125,9,116,20,124,1,124,9,116,21,100,15,25, - 0,23,0,131,2,83,0,41,16,97,110,1,0,0,71,105, - 118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32, - 97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,101, - 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, - 32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,10, - 32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,108, - 101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32, - 116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115, - 105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104, - 101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,104, - 101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,117, - 108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,112, - 111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,32, - 102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,100, - 111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,102, - 111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,47, - 52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,117, - 101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,114, - 97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,121, - 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, - 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, - 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, - 97,105,115,101,100,46,10,10,32,32,32,32,78,114,72,0, - 0,0,70,84,122,31,32,110,111,116,32,98,111,116,116,111, - 109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,114, - 121,32,105,110,32,114,71,0,0,0,62,2,0,0,0,114, - 28,0,0,0,114,57,0,0,0,122,29,101,120,112,101,99, - 116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,32, - 100,111,116,115,32,105,110,32,114,57,0,0,0,114,28,0, - 0,0,233,254,255,255,255,122,53,111,112,116,105,109,105,122, - 97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,102, - 32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110, - 111,116,32,115,116,97,114,116,32,119,105,116,104,32,122,19, - 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118, - 101,108,32,122,29,32,105,115,32,110,111,116,32,97,110,32, - 97,108,112,104,97,110,117,109,101,114,105,99,32,118,97,108, - 117,101,114,73,0,0,0,41,22,114,1,0,0,0,114,80, - 0,0,0,114,81,0,0,0,114,82,0,0,0,114,4,0, - 0,0,114,79,0,0,0,114,47,0,0,0,114,89,0,0, - 0,114,30,0,0,0,114,31,0,0,0,114,11,0,0,0, - 114,35,0,0,0,114,23,0,0,0,114,91,0,0,0,114, - 86,0,0,0,218,5,99,111,117,110,116,114,43,0,0,0, - 114,87,0,0,0,114,85,0,0,0,218,9,112,97,114,116, - 105,116,105,111,110,114,38,0,0,0,218,15,83,79,85,82, - 67,69,95,83,85,70,70,73,88,69,83,41,10,114,44,0, - 0,0,114,93,0,0,0,90,16,112,121,99,97,99,104,101, - 95,102,105,108,101,110,97,109,101,90,23,102,111,117,110,100, - 95,105,110,95,112,121,99,97,99,104,101,95,112,114,101,102, - 105,120,90,13,115,116,114,105,112,112,101,100,95,112,97,116, - 104,90,7,112,121,99,97,99,104,101,90,9,100,111,116,95, - 99,111,117,110,116,114,70,0,0,0,90,9,111,112,116,95, - 108,101,118,101,108,90,13,98,97,115,101,95,102,105,108,101, - 110,97,109,101,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,17,115,111,117,114,99,101,95,102,114,111,109, - 95,99,97,99,104,101,116,1,0,0,115,60,0,0,0,0, - 9,12,1,8,1,10,1,12,1,4,1,10,1,12,1,14, - 1,16,1,4,1,4,1,12,1,8,1,8,1,2,255,8, - 2,10,1,8,1,16,1,10,1,16,1,10,1,4,1,2, - 255,8,2,16,1,10,1,16,2,14,1,114,102,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,9,0,0,0,67,0,0,0,115,124,0,0,0,116,0, - 124,0,131,1,100,1,107,2,114,16,100,2,83,0,124,0, - 160,1,100,3,161,1,92,3,125,1,125,2,125,3,124,1, - 114,56,124,3,160,2,161,0,100,4,100,5,133,2,25,0, - 100,6,107,3,114,60,124,0,83,0,122,12,116,3,124,0, - 131,1,125,4,87,0,110,34,4,0,116,4,116,5,102,2, - 121,106,1,0,1,0,1,0,124,0,100,2,100,5,133,2, - 25,0,125,4,89,0,110,2,48,0,116,6,124,4,131,1, - 114,120,124,4,83,0,124,0,83,0,41,7,122,188,67,111, - 110,118,101,114,116,32,97,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,32,112,97,116,104,32,116,111,32,97,32, - 115,111,117,114,99,101,32,112,97,116,104,32,40,105,102,32, - 112,111,115,115,105,98,108,101,41,46,10,10,32,32,32,32, - 84,104,105,115,32,102,117,110,99,116,105,111,110,32,101,120, - 105,115,116,115,32,112,117,114,101,108,121,32,102,111,114,32, - 98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,116, - 105,98,105,108,105,116,121,32,102,111,114,10,32,32,32,32, - 80,121,73,109,112,111,114,116,95,69,120,101,99,67,111,100, - 101,77,111,100,117,108,101,87,105,116,104,70,105,108,101,110, - 97,109,101,115,40,41,32,105,110,32,116,104,101,32,67,32, - 65,80,73,46,10,10,32,32,32,32,114,73,0,0,0,78, - 114,71,0,0,0,233,253,255,255,255,233,255,255,255,255,90, - 2,112,121,41,7,114,23,0,0,0,114,41,0,0,0,218, - 5,108,111,119,101,114,114,102,0,0,0,114,82,0,0,0, - 114,86,0,0,0,114,54,0,0,0,41,5,218,13,98,121, - 116,101,99,111,100,101,95,112,97,116,104,114,95,0,0,0, - 114,45,0,0,0,90,9,101,120,116,101,110,115,105,111,110, - 218,11,115,111,117,114,99,101,95,112,97,116,104,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,218,15,95,103, - 101,116,95,115,111,117,114,99,101,102,105,108,101,156,1,0, - 0,115,20,0,0,0,0,7,12,1,4,1,16,1,24,1, - 4,1,2,1,12,1,16,1,18,1,114,108,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 8,0,0,0,67,0,0,0,115,72,0,0,0,124,0,160, - 0,116,1,116,2,131,1,161,1,114,46,122,10,116,3,124, - 0,131,1,87,0,83,0,4,0,116,4,121,42,1,0,1, - 0,1,0,89,0,113,68,48,0,110,22,124,0,160,0,116, - 1,116,5,131,1,161,1,114,64,124,0,83,0,100,0,83, - 0,100,0,83,0,169,1,78,41,6,218,8,101,110,100,115, - 119,105,116,104,218,5,116,117,112,108,101,114,101,0,0,0, - 114,97,0,0,0,114,82,0,0,0,114,88,0,0,0,41, - 1,114,96,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,11,95,103,101,116,95,99,97,99,104, - 101,100,175,1,0,0,115,16,0,0,0,0,1,14,1,2, - 1,10,1,12,1,8,1,14,1,4,2,114,112,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,8,0,0,0,67,0,0,0,115,50,0,0,0,122,14, - 116,0,124,0,131,1,106,1,125,1,87,0,110,22,4,0, - 116,2,121,36,1,0,1,0,1,0,100,1,125,1,89,0, - 110,2,48,0,124,1,100,2,79,0,125,1,124,1,83,0, - 41,3,122,51,67,97,108,99,117,108,97,116,101,32,116,104, - 101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,111, - 110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,46,114,60,0,0,0,233,128,0,0, - 0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,0, - 0,0,41,2,114,44,0,0,0,114,52,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,95, - 99,97,108,99,95,109,111,100,101,187,1,0,0,115,12,0, - 0,0,0,2,2,1,14,1,12,1,10,3,8,1,114,114, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,8,0,0,0,3,0,0,0,115,66,0,0, - 0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,122, - 10,116,0,106,1,125,2,87,0,110,26,4,0,116,2,121, - 50,1,0,1,0,1,0,100,4,100,5,132,0,125,2,89, - 0,110,2,48,0,124,2,124,1,136,0,131,2,1,0,124, - 1,83,0,41,7,122,252,68,101,99,111,114,97,116,111,114, - 32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32, - 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, - 32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104, - 101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32, - 32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97, - 110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102, - 105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115, - 101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101, - 32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101, - 32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116, - 32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100, - 32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101, - 32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108, - 115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,78,99,2,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,31,0,0,0,115,72,0, - 0,0,124,1,100,0,117,0,114,16,124,0,106,0,125,1, - 110,32,124,0,106,0,124,1,107,3,114,48,116,1,100,1, - 124,0,106,0,124,1,102,2,22,0,124,1,100,2,141,2, - 130,1,136,0,124,0,124,1,103,2,124,2,162,1,82,0, - 105,0,124,3,164,1,142,1,83,0,41,3,78,122,30,108, - 111,97,100,101,114,32,102,111,114,32,37,115,32,99,97,110, - 110,111,116,32,104,97,110,100,108,101,32,37,115,169,1,218, - 4,110,97,109,101,41,2,114,116,0,0,0,218,11,73,109, - 112,111,114,116,69,114,114,111,114,41,4,218,4,115,101,108, - 102,114,116,0,0,0,218,4,97,114,103,115,218,6,107,119, - 97,114,103,115,169,1,218,6,109,101,116,104,111,100,114,5, - 0,0,0,114,8,0,0,0,218,19,95,99,104,101,99,107, - 95,110,97,109,101,95,119,114,97,112,112,101,114,207,1,0, - 0,115,18,0,0,0,0,1,8,1,8,1,10,1,4,1, - 8,255,2,1,2,255,6,2,122,40,95,99,104,101,99,107, - 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, - 99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112, - 101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,7,0,0,0,83,0,0,0,115,56,0,0,0, - 100,1,68,0,93,32,125,2,116,0,124,1,124,2,131,2, - 114,4,116,1,124,0,124,2,116,2,124,1,124,2,131,2, - 131,3,1,0,113,4,124,0,106,3,160,4,124,1,106,3, - 161,1,1,0,100,0,83,0,41,2,78,41,4,218,10,95, - 95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109, - 101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95, - 95,218,7,95,95,100,111,99,95,95,41,5,218,7,104,97, - 115,97,116,116,114,218,7,115,101,116,97,116,116,114,218,7, - 103,101,116,97,116,116,114,218,8,95,95,100,105,99,116,95, - 95,218,6,117,112,100,97,116,101,41,3,90,3,110,101,119, - 90,3,111,108,100,114,67,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,5,95,119,114,97,112, - 218,1,0,0,115,8,0,0,0,0,1,8,1,10,1,20, - 1,122,26,95,99,104,101,99,107,95,110,97,109,101,46,60, - 108,111,99,97,108,115,62,46,95,119,114,97,112,41,1,78, - 41,3,218,10,95,98,111,111,116,115,116,114,97,112,114,133, - 0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,3, - 114,122,0,0,0,114,123,0,0,0,114,133,0,0,0,114, - 5,0,0,0,114,121,0,0,0,114,8,0,0,0,218,11, - 95,99,104,101,99,107,95,110,97,109,101,199,1,0,0,115, - 14,0,0,0,0,8,14,7,2,1,10,1,12,2,14,5, - 10,1,114,136,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, - 115,60,0,0,0,124,0,160,0,124,1,161,1,92,2,125, - 2,125,3,124,2,100,1,117,0,114,56,116,1,124,3,131, - 1,114,56,100,2,125,4,116,2,160,3,124,4,160,4,124, - 3,100,3,25,0,161,1,116,5,161,2,1,0,124,2,83, - 0,41,4,122,155,84,114,121,32,116,111,32,102,105,110,100, - 32,97,32,108,111,97,100,101,114,32,102,111,114,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, - 108,101,32,98,121,32,100,101,108,101,103,97,116,105,110,103, - 32,116,111,10,32,32,32,32,115,101,108,102,46,102,105,110, - 100,95,108,111,97,100,101,114,40,41,46,10,10,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,32,105,110,32,102,97, - 118,111,114,32,111,102,32,102,105,110,100,101,114,46,102,105, - 110,100,95,115,112,101,99,40,41,46,10,10,32,32,32,32, - 78,122,44,78,111,116,32,105,109,112,111,114,116,105,110,103, - 32,100,105,114,101,99,116,111,114,121,32,123,125,58,32,109, - 105,115,115,105,110,103,32,95,95,105,110,105,116,95,95,114, - 73,0,0,0,41,6,218,11,102,105,110,100,95,108,111,97, - 100,101,114,114,23,0,0,0,114,75,0,0,0,114,76,0, - 0,0,114,62,0,0,0,218,13,73,109,112,111,114,116,87, - 97,114,110,105,110,103,41,5,114,118,0,0,0,218,8,102, - 117,108,108,110,97,109,101,218,6,108,111,97,100,101,114,218, - 8,112,111,114,116,105,111,110,115,218,3,109,115,103,114,5, - 0,0,0,114,5,0,0,0,114,8,0,0,0,218,17,95, - 102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,109, - 227,1,0,0,115,10,0,0,0,0,10,14,1,16,1,4, - 1,22,1,114,143,0,0,0,99,3,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, - 0,115,166,0,0,0,124,0,100,1,100,2,133,2,25,0, - 125,3,124,3,116,0,107,3,114,64,100,3,124,1,155,2, - 100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,5, - 124,4,161,2,1,0,116,3,124,4,102,1,105,0,124,2, - 164,1,142,1,130,1,116,4,124,0,131,1,100,6,107,0, - 114,106,100,7,124,1,155,2,157,2,125,4,116,1,160,2, - 100,5,124,4,161,2,1,0,116,5,124,4,131,1,130,1, - 116,6,124,0,100,2,100,8,133,2,25,0,131,1,125,5, - 124,5,100,9,64,0,114,162,100,10,124,5,155,2,100,11, - 124,1,155,2,157,4,125,4,116,3,124,4,102,1,105,0, - 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84, - 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99, - 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105, - 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100, - 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104, - 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32, - 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105, - 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32, - 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101, - 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105, - 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10, - 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, - 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, - 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, - 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, - 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, - 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41, - 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, - 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, - 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, - 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, - 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, - 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, - 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, - 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, - 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, - 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, - 10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110, - 32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101, - 114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111, - 114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115, - 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110, - 118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32, - 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, - 104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100, - 32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100, - 46,10,10,32,32,32,32,78,114,16,0,0,0,122,20,98, - 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32, - 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0, - 122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104, - 105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32, - 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233, - 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108, - 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65, - 71,73,67,95,78,85,77,66,69,82,114,134,0,0,0,218, - 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, - 101,114,117,0,0,0,114,23,0,0,0,218,8,69,79,70, - 69,114,114,111,114,114,27,0,0,0,41,6,114,26,0,0, - 0,114,116,0,0,0,218,11,101,120,99,95,100,101,116,97, - 105,108,115,90,5,109,97,103,105,99,114,92,0,0,0,114, - 2,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,13,95,99,108,97,115,115,105,102,121,95,112, - 121,99,244,1,0,0,115,28,0,0,0,0,16,12,1,8, - 1,16,1,12,1,16,1,12,1,10,1,12,1,8,1,16, - 2,8,1,16,1,16,1,114,152,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, - 0,67,0,0,0,115,120,0,0,0,116,0,124,0,100,1, - 100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3, - 114,62,100,4,124,3,155,2,157,2,125,5,116,1,160,2, - 100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0, - 124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,116, - 116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2, - 100,3,64,0,107,3,114,116,116,3,100,4,124,3,155,2, - 157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6, - 83,0,41,8,97,7,2,0,0,86,97,108,105,100,97,116, - 101,32,97,32,112,121,99,32,97,103,97,105,110,115,116,32, - 116,104,101,32,115,111,117,114,99,101,32,108,97,115,116,45, - 109,111,100,105,102,105,101,100,32,116,105,109,101,46,10,10, - 32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,104, - 101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104, - 101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,108, - 121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,98, - 121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,113, - 117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,111, - 117,114,99,101,95,109,116,105,109,101,42,32,105,115,32,116, - 104,101,32,108,97,115,116,32,109,111,100,105,102,105,101,100, - 32,116,105,109,101,115,116,97,109,112,32,111,102,32,116,104, - 101,32,115,111,117,114,99,101,32,102,105,108,101,46,10,10, - 32,32,32,32,42,115,111,117,114,99,101,95,115,105,122,101, - 42,32,105,115,32,78,111,110,101,32,111,114,32,116,104,101, - 32,115,105,122,101,32,111,102,32,116,104,101,32,115,111,117, - 114,99,101,32,102,105,108,101,32,105,110,32,98,121,116,101, - 115,46,10,10,32,32,32,32,42,110,97,109,101,42,32,105, - 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104, - 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,105, - 109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,117, - 115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,46, - 10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,105, - 108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,110, - 97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,32, - 114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,105, - 109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,110, - 103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,114, + 32,32,78,114,97,0,0,0,70,84,122,31,32,110,111,116, + 32,98,111,116,116,111,109,45,108,101,118,101,108,32,100,105, + 114,101,99,116,111,114,121,32,105,110,32,114,96,0,0,0, + 62,2,0,0,0,114,45,0,0,0,233,3,0,0,0,122, + 29,101,120,112,101,99,116,101,100,32,111,110,108,121,32,50, + 32,111,114,32,51,32,100,111,116,115,32,105,110,32,114,121, + 0,0,0,114,45,0,0,0,233,254,255,255,255,122,53,111, + 112,116,105,109,105,122,97,116,105,111,110,32,112,111,114,116, + 105,111,110,32,111,102,32,102,105,108,101,110,97,109,101,32, + 100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119, + 105,116,104,32,122,19,111,112,116,105,109,105,122,97,116,105, + 111,110,32,108,101,118,101,108,32,122,29,32,105,115,32,110, + 111,116,32,97,110,32,97,108,112,104,97,110,117,109,101,114, + 105,99,32,118,97,108,117,101,114,0,0,0,0,41,22,114, + 21,0,0,0,114,104,0,0,0,114,105,0,0,0,114,106, + 0,0,0,114,24,0,0,0,114,102,0,0,0,114,74,0, + 0,0,114,113,0,0,0,114,49,0,0,0,114,50,0,0, + 0,114,29,0,0,0,114,59,0,0,0,114,6,0,0,0, + 114,115,0,0,0,114,110,0,0,0,218,5,99,111,117,110, + 116,218,6,114,115,112,108,105,116,114,111,0,0,0,114,109, + 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,67, + 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, + 73,88,69,83,41,10,114,65,0,0,0,114,117,0,0,0, + 90,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, + 109,101,90,23,102,111,117,110,100,95,105,110,95,112,121,99, + 97,99,104,101,95,112,114,101,102,105,120,90,13,115,116,114, + 105,112,112,101,100,95,112,97,116,104,90,7,112,121,99,97, + 99,104,101,90,9,100,111,116,95,99,111,117,110,116,114,95, + 0,0,0,90,9,111,112,116,95,108,101,118,101,108,90,13, + 98,97,115,101,95,102,105,108,101,110,97,109,101,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,17,115,111, + 117,114,99,101,95,102,114,111,109,95,99,97,99,104,101,176, + 1,0,0,115,60,0,0,0,0,9,12,1,8,1,10,1, + 12,1,4,1,10,1,12,1,14,1,16,1,4,1,4,1, + 12,1,8,1,8,1,2,255,8,2,10,1,8,1,16,1, + 10,1,16,1,10,1,4,1,2,255,8,2,16,1,10,1, + 16,2,14,1,114,127,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,9,0,0,0,67,0, + 0,0,115,124,0,0,0,116,0,124,0,131,1,100,1,107, + 2,114,16,100,2,83,0,124,0,160,1,100,3,161,1,92, + 3,125,1,125,2,125,3,124,1,114,56,124,3,160,2,161, + 0,100,4,100,5,133,2,25,0,100,6,107,3,114,60,124, + 0,83,0,122,12,116,3,124,0,131,1,125,4,87,0,110, + 34,4,0,116,4,116,5,102,2,121,106,1,0,1,0,1, + 0,124,0,100,2,100,5,133,2,25,0,125,4,89,0,110, + 2,48,0,116,6,124,4,131,1,114,120,124,4,83,0,124, + 0,83,0,41,7,122,188,67,111,110,118,101,114,116,32,97, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,32,112, + 97,116,104,32,116,111,32,97,32,115,111,117,114,99,101,32, + 112,97,116,104,32,40,105,102,32,112,111,115,115,105,98,108, + 101,41,46,10,10,32,32,32,32,84,104,105,115,32,102,117, + 110,99,116,105,111,110,32,101,120,105,115,116,115,32,112,117, + 114,101,108,121,32,102,111,114,32,98,97,99,107,119,97,114, + 100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121, + 32,102,111,114,10,32,32,32,32,80,121,73,109,112,111,114, + 116,95,69,120,101,99,67,111,100,101,77,111,100,117,108,101, + 87,105,116,104,70,105,108,101,110,97,109,101,115,40,41,32, + 105,110,32,116,104,101,32,67,32,65,80,73,46,10,10,32, + 32,32,32,114,0,0,0,0,78,114,96,0,0,0,233,253, + 255,255,255,233,255,255,255,255,90,2,112,121,41,7,114,6, + 0,0,0,114,103,0,0,0,218,5,108,111,119,101,114,114, + 127,0,0,0,114,106,0,0,0,114,110,0,0,0,114,80, + 0,0,0,41,5,218,13,98,121,116,101,99,111,100,101,95, + 112,97,116,104,114,118,0,0,0,218,1,95,90,9,101,120, + 116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95, + 112,97,116,104,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,15,95,103,101,116,95,115,111,117,114,99,101, + 102,105,108,101,216,1,0,0,115,20,0,0,0,0,7,12, + 1,4,1,16,1,24,1,4,1,2,1,12,1,16,1,18, + 1,114,134,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,8,0,0,0,67,0,0,0,115, + 72,0,0,0,124,0,160,0,116,1,116,2,131,1,161,1, + 114,46,122,10,116,3,124,0,131,1,87,0,83,0,4,0, + 116,4,121,42,1,0,1,0,1,0,89,0,113,68,48,0, + 110,22,124,0,160,0,116,1,116,5,131,1,161,1,114,64, + 124,0,83,0,100,0,83,0,100,0,83,0,114,69,0,0, + 0,41,6,114,58,0,0,0,218,5,116,117,112,108,101,114, + 126,0,0,0,114,120,0,0,0,114,106,0,0,0,114,112, + 0,0,0,41,1,114,119,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,11,95,103,101,116,95, + 99,97,99,104,101,100,235,1,0,0,115,16,0,0,0,0, + 1,14,1,2,1,10,1,12,1,8,1,14,1,4,2,114, + 136,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,8,0,0,0,67,0,0,0,115,50,0, + 0,0,122,14,116,0,124,0,131,1,106,1,125,1,87,0, + 110,22,4,0,116,2,121,36,1,0,1,0,1,0,100,1, + 125,1,89,0,110,2,48,0,124,1,100,2,79,0,125,1, + 124,1,83,0,41,3,122,51,67,97,108,99,117,108,97,116, + 101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105, + 115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,46,114,86,0,0,0, + 233,128,0,0,0,41,3,114,75,0,0,0,114,77,0,0, + 0,114,76,0,0,0,41,2,114,65,0,0,0,114,78,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,10,95,99,97,108,99,95,109,111,100,101,247,1,0, + 0,115,12,0,0,0,0,2,2,1,14,1,12,1,10,3, + 8,1,114,138,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,8,0,0,0,3,0,0,0, + 115,66,0,0,0,100,6,135,0,102,1,100,2,100,3,132, + 9,125,1,122,10,116,0,106,1,125,2,87,0,110,26,4, + 0,116,2,121,50,1,0,1,0,1,0,100,4,100,5,132, + 0,125,2,89,0,110,2,48,0,124,2,124,1,136,0,131, + 2,1,0,124,1,83,0,41,7,122,252,68,101,99,111,114, + 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, + 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, + 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, + 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, + 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, + 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, + 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, + 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, + 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, + 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, + 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, + 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, + 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, + 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,101, - 32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,32, - 114,146,0,0,0,233,12,0,0,0,114,15,0,0,0,122, - 22,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97, - 108,101,32,102,111,114,32,114,144,0,0,0,78,114,145,0, - 0,0,41,4,114,27,0,0,0,114,134,0,0,0,114,149, - 0,0,0,114,117,0,0,0,41,6,114,26,0,0,0,218, - 12,115,111,117,114,99,101,95,109,116,105,109,101,218,11,115, - 111,117,114,99,101,95,115,105,122,101,114,116,0,0,0,114, - 151,0,0,0,114,92,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,23,95,118,97,108,105,100, - 97,116,101,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,21,2,0,0,115,16,0,0,0,0,19,24,1,10,1, - 12,1,16,1,8,1,22,255,2,2,114,156,0,0,0,99, - 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 4,0,0,0,67,0,0,0,115,42,0,0,0,124,0,100, - 1,100,2,133,2,25,0,124,1,107,3,114,38,116,0,100, - 3,124,2,155,2,157,2,102,1,105,0,124,3,164,1,142, - 1,130,1,100,4,83,0,41,5,97,243,1,0,0,86,97, - 108,105,100,97,116,101,32,97,32,104,97,115,104,45,98,97, - 115,101,100,32,112,121,99,32,98,121,32,99,104,101,99,107, - 105,110,103,32,116,104,101,32,114,101,97,108,32,115,111,117, - 114,99,101,32,104,97,115,104,32,97,103,97,105,110,115,116, - 32,116,104,101,32,111,110,101,32,105,110,10,32,32,32,32, - 116,104,101,32,112,121,99,32,104,101,97,100,101,114,46,10, - 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, - 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, - 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, - 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, - 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, - 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115, - 111,117,114,99,101,95,104,97,115,104,42,32,105,115,32,116, - 104,101,32,105,109,112,111,114,116,108,105,98,46,117,116,105, - 108,46,115,111,117,114,99,101,95,104,97,115,104,40,41,32, - 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, - 108,101,46,10,10,32,32,32,32,42,110,97,109,101,42,32, - 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116, - 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, - 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32, - 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103, - 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97, - 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111, - 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116, - 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32, - 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105, - 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101, - 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100, - 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32, - 32,114,146,0,0,0,114,145,0,0,0,122,46,104,97,115, - 104,32,105,110,32,98,121,116,101,99,111,100,101,32,100,111, - 101,115,110,39,116,32,109,97,116,99,104,32,104,97,115,104, - 32,111,102,32,115,111,117,114,99,101,32,78,41,1,114,117, - 0,0,0,41,4,114,26,0,0,0,218,11,115,111,117,114, - 99,101,95,104,97,115,104,114,116,0,0,0,114,151,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 218,18,95,118,97,108,105,100,97,116,101,95,104,97,115,104, - 95,112,121,99,49,2,0,0,115,12,0,0,0,0,17,16, - 1,2,1,8,255,4,2,2,254,114,158,0,0,0,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, - 0,0,0,67,0,0,0,115,80,0,0,0,116,0,160,1, - 124,0,161,1,125,4,116,2,124,4,116,3,131,2,114,56, - 116,4,160,5,100,1,124,2,161,2,1,0,124,3,100,2, - 117,1,114,52,116,6,160,7,124,4,124,3,161,2,1,0, - 124,4,83,0,116,8,100,3,160,9,124,2,161,1,124,1, - 124,2,100,4,141,3,130,1,100,2,83,0,41,5,122,35, - 67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101, - 32,97,115,32,102,111,117,110,100,32,105,110,32,97,32,112, - 121,99,46,122,21,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,33,114,125,78,122,23,78,111,110, - 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, - 123,33,114,125,169,2,114,116,0,0,0,114,44,0,0,0, - 41,10,218,7,109,97,114,115,104,97,108,90,5,108,111,97, - 100,115,218,10,105,115,105,110,115,116,97,110,99,101,218,10, - 95,99,111,100,101,95,116,121,112,101,114,134,0,0,0,114, - 149,0,0,0,218,4,95,105,109,112,90,16,95,102,105,120, - 95,99,111,95,102,105,108,101,110,97,109,101,114,117,0,0, - 0,114,62,0,0,0,41,5,114,26,0,0,0,114,116,0, - 0,0,114,106,0,0,0,114,107,0,0,0,218,4,99,111, - 100,101,114,5,0,0,0,114,5,0,0,0,114,8,0,0, - 0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101, - 99,111,100,101,73,2,0,0,115,18,0,0,0,0,2,10, - 1,10,1,12,1,8,1,12,1,4,2,10,1,4,255,114, - 165,0,0,0,114,73,0,0,0,99,3,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, - 0,0,115,70,0,0,0,116,0,116,1,131,1,125,3,124, - 3,160,2,116,3,100,1,131,1,161,1,1,0,124,3,160, - 2,116,3,124,1,131,1,161,1,1,0,124,3,160,2,116, - 3,124,2,131,1,161,1,1,0,124,3,160,2,116,4,160, - 5,124,0,161,1,161,1,1,0,124,3,83,0,41,2,122, - 43,80,114,111,100,117,99,101,32,116,104,101,32,100,97,116, - 97,32,102,111,114,32,97,32,116,105,109,101,115,116,97,109, - 112,45,98,97,115,101,100,32,112,121,99,46,114,73,0,0, - 0,41,6,218,9,98,121,116,101,97,114,114,97,121,114,148, - 0,0,0,218,6,101,120,116,101,110,100,114,21,0,0,0, - 114,160,0,0,0,218,5,100,117,109,112,115,41,4,114,164, - 0,0,0,218,5,109,116,105,109,101,114,155,0,0,0,114, - 26,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,22,95,99,111,100,101,95,116,111,95,116,105, - 109,101,115,116,97,109,112,95,112,121,99,86,2,0,0,115, - 12,0,0,0,0,2,8,1,14,1,14,1,14,1,16,1, - 114,170,0,0,0,84,99,3,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 80,0,0,0,116,0,116,1,131,1,125,3,100,1,124,2, - 100,1,62,0,66,0,125,4,124,3,160,2,116,3,124,4, - 131,1,161,1,1,0,116,4,124,1,131,1,100,2,107,2, - 115,50,74,0,130,1,124,3,160,2,124,1,161,1,1,0, - 124,3,160,2,116,5,160,6,124,0,161,1,161,1,1,0, - 124,3,83,0,41,3,122,38,80,114,111,100,117,99,101,32, - 116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,104, - 97,115,104,45,98,97,115,101,100,32,112,121,99,46,114,39, - 0,0,0,114,146,0,0,0,41,7,114,166,0,0,0,114, - 148,0,0,0,114,167,0,0,0,114,21,0,0,0,114,23, - 0,0,0,114,160,0,0,0,114,168,0,0,0,41,5,114, - 164,0,0,0,114,157,0,0,0,90,7,99,104,101,99,107, - 101,100,114,26,0,0,0,114,2,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,218,17,95,99,111, - 100,101,95,116,111,95,104,97,115,104,95,112,121,99,96,2, - 0,0,115,14,0,0,0,0,2,8,1,12,1,14,1,16, - 1,10,1,16,1,114,171,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, - 0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1, - 116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4, - 124,2,161,1,125,3,116,1,160,5,100,2,100,3,161,2, - 125,4,124,4,160,6,124,0,160,6,124,3,100,1,25,0, - 161,1,161,1,83,0,41,4,122,121,68,101,99,111,100,101, - 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, - 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, - 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,85,110,105,118, - 101,114,115,97,108,32,110,101,119,108,105,110,101,32,115,117, - 112,112,111,114,116,32,105,115,32,117,115,101,100,32,105,110, - 32,116,104,101,32,100,101,99,111,100,105,110,103,46,10,32, - 32,32,32,114,73,0,0,0,78,84,41,7,218,8,116,111, - 107,101,110,105,122,101,114,64,0,0,0,90,7,66,121,116, - 101,115,73,79,90,8,114,101,97,100,108,105,110,101,90,15, - 100,101,116,101,99,116,95,101,110,99,111,100,105,110,103,90, - 25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, - 105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111, - 100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116, - 101,115,114,172,0,0,0,90,21,115,111,117,114,99,101,95, - 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, - 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, - 101,95,100,101,99,111,100,101,114,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,13,100,101,99,111,100,101, - 95,115,111,117,114,99,101,107,2,0,0,115,10,0,0,0, - 0,5,8,1,12,1,10,1,12,1,114,176,0,0,0,169, - 2,114,140,0,0,0,218,26,115,117,98,109,111,100,117,108, - 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, - 110,115,99,2,0,0,0,0,0,0,0,2,0,0,0,9, - 0,0,0,8,0,0,0,67,0,0,0,115,12,1,0,0, - 124,1,100,1,117,0,114,58,100,2,125,1,116,0,124,2, - 100,3,131,2,114,68,122,14,124,2,160,1,124,0,161,1, - 125,1,87,0,113,68,4,0,116,2,121,54,1,0,1,0, - 1,0,89,0,113,68,48,0,110,10,116,3,160,4,124,1, - 161,1,125,1,116,5,106,6,124,0,124,2,124,1,100,4, - 141,3,125,4,100,5,124,4,95,7,124,2,100,1,117,0, - 114,152,116,8,131,0,68,0,93,42,92,2,125,5,125,6, - 124,1,160,9,116,10,124,6,131,1,161,1,114,104,124,5, - 124,0,124,1,131,2,125,2,124,2,124,4,95,11,1,0, - 113,152,113,104,100,1,83,0,124,3,116,12,117,0,114,216, - 116,0,124,2,100,6,131,2,114,222,122,14,124,2,160,13, - 124,0,161,1,125,7,87,0,110,18,4,0,116,2,121,202, - 1,0,1,0,1,0,89,0,113,222,48,0,124,7,114,222, - 103,0,124,4,95,14,110,6,124,3,124,4,95,14,124,4, - 106,14,103,0,107,2,144,1,114,8,124,1,144,1,114,8, - 116,15,124,1,131,1,100,7,25,0,125,8,124,4,106,14, - 160,16,124,8,161,1,1,0,124,4,83,0,41,8,97,61, - 1,0,0,82,101,116,117,114,110,32,97,32,109,111,100,117, - 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, - 32,97,32,102,105,108,101,32,108,111,99,97,116,105,111,110, - 46,10,10,32,32,32,32,84,111,32,105,110,100,105,99,97, - 116,101,32,116,104,97,116,32,116,104,101,32,109,111,100,117, - 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,44, - 32,115,101,116,10,32,32,32,32,115,117,98,109,111,100,117, - 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, - 111,110,115,32,116,111,32,97,32,108,105,115,116,32,111,102, - 32,100,105,114,101,99,116,111,114,121,32,112,97,116,104,115, - 46,32,32,65,110,10,32,32,32,32,101,109,112,116,121,32, - 108,105,115,116,32,105,115,32,115,117,102,102,105,99,105,101, - 110,116,44,32,116,104,111,117,103,104,32,105,116,115,32,110, - 111,116,32,111,116,104,101,114,119,105,115,101,32,117,115,101, - 102,117,108,32,116,111,32,116,104,101,10,32,32,32,32,105, - 109,112,111,114,116,32,115,121,115,116,101,109,46,10,10,32, - 32,32,32,84,104,101,32,108,111,97,100,101,114,32,109,117, - 115,116,32,116,97,107,101,32,97,32,115,112,101,99,32,97, - 115,32,105,116,115,32,111,110,108,121,32,95,95,105,110,105, - 116,95,95,40,41,32,97,114,103,46,10,10,32,32,32,32, - 78,122,9,60,117,110,107,110,111,119,110,62,218,12,103,101, - 116,95,102,105,108,101,110,97,109,101,169,1,218,6,111,114, - 105,103,105,110,84,218,10,105,115,95,112,97,99,107,97,103, - 101,114,73,0,0,0,41,17,114,128,0,0,0,114,179,0, - 0,0,114,117,0,0,0,114,4,0,0,0,114,79,0,0, - 0,114,134,0,0,0,218,10,77,111,100,117,108,101,83,112, - 101,99,90,13,95,115,101,116,95,102,105,108,101,97,116,116, - 114,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101, - 100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,110, - 0,0,0,114,111,0,0,0,114,140,0,0,0,218,9,95, - 80,79,80,85,76,65,84,69,114,182,0,0,0,114,178,0, - 0,0,114,47,0,0,0,218,6,97,112,112,101,110,100,41, - 9,114,116,0,0,0,90,8,108,111,99,97,116,105,111,110, - 114,140,0,0,0,114,178,0,0,0,218,4,115,112,101,99, - 218,12,108,111,97,100,101,114,95,99,108,97,115,115,218,8, - 115,117,102,102,105,120,101,115,114,182,0,0,0,90,7,100, - 105,114,110,97,109,101,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,23,115,112,101,99,95,102,114,111,109, - 95,102,105,108,101,95,108,111,99,97,116,105,111,110,124,2, - 0,0,115,62,0,0,0,0,12,8,4,4,1,10,2,2, - 1,14,1,12,1,8,2,10,8,16,1,6,3,8,1,14, - 1,14,1,10,1,6,1,6,2,4,3,8,2,10,1,2, - 1,14,1,12,1,6,2,4,1,8,2,6,1,12,1,6, - 1,12,1,12,2,114,190,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, - 0,0,0,115,80,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,90,4,100,3,90,5,100,4,90,6, - 101,7,100,5,100,6,132,0,131,1,90,8,101,7,100,7, - 100,8,132,0,131,1,90,9,101,7,100,14,100,10,100,11, - 132,1,131,1,90,10,101,7,100,15,100,12,100,13,132,1, - 131,1,90,11,100,9,83,0,41,16,218,21,87,105,110,100, - 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, - 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, - 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, - 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, - 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, - 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, - 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, - 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, - 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, - 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, - 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, - 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, - 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, - 103,70,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,8,0,0,0,67,0,0,0,115,54,0,0,0, - 122,16,116,0,160,1,116,0,106,2,124,1,161,2,87,0, - 83,0,4,0,116,3,121,48,1,0,1,0,1,0,116,0, - 160,1,116,0,106,4,124,1,161,2,6,0,89,0,83,0, - 48,0,100,0,83,0,114,109,0,0,0,41,5,218,6,119, - 105,110,114,101,103,90,7,79,112,101,110,75,101,121,90,17, - 72,75,69,89,95,67,85,82,82,69,78,84,95,85,83,69, - 82,114,50,0,0,0,90,18,72,75,69,89,95,76,79,67, - 65,76,95,77,65,67,72,73,78,69,41,2,218,3,99,108, - 115,114,7,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103, - 105,115,116,114,121,204,2,0,0,115,8,0,0,0,0,2, - 2,1,16,1,12,1,122,36,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,95,111, - 112,101,110,95,114,101,103,105,115,116,114,121,99,2,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,8,0,0, - 0,67,0,0,0,115,132,0,0,0,124,0,106,0,114,14, - 124,0,106,1,125,2,110,6,124,0,106,2,125,2,124,2, - 106,3,124,1,100,1,116,4,106,5,100,0,100,2,133,2, - 25,0,22,0,100,3,141,2,125,3,122,58,124,0,160,6, - 124,3,161,1,143,28,125,4,116,7,160,8,124,4,100,4, - 161,2,125,5,87,0,100,0,4,0,4,0,131,3,1,0, - 110,16,49,0,115,94,48,0,1,0,1,0,1,0,89,0, - 1,0,87,0,110,20,4,0,116,9,121,126,1,0,1,0, - 1,0,89,0,100,0,83,0,48,0,124,5,83,0,41,5, - 78,122,5,37,100,46,37,100,114,28,0,0,0,41,2,114, - 139,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, - 110,114,40,0,0,0,41,10,218,11,68,69,66,85,71,95, - 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, - 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, - 84,82,89,95,75,69,89,114,62,0,0,0,114,1,0,0, - 0,218,12,118,101,114,115,105,111,110,95,105,110,102,111,114, - 194,0,0,0,114,192,0,0,0,90,10,81,117,101,114,121, - 86,97,108,117,101,114,50,0,0,0,41,6,114,193,0,0, - 0,114,139,0,0,0,90,12,114,101,103,105,115,116,114,121, - 95,107,101,121,114,7,0,0,0,90,4,104,107,101,121,218, - 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,16,95,115,101,97,114,99, - 104,95,114,101,103,105,115,116,114,121,211,2,0,0,115,24, - 0,0,0,0,2,6,1,8,2,6,1,6,1,16,255,6, - 2,2,1,12,1,46,1,12,1,8,1,122,38,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, - 116,114,121,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,8,0,0,0,8,0,0,0,67,0,0,0,115,120,0, - 0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0, - 117,0,114,22,100,0,83,0,122,12,116,1,124,4,131,1, - 1,0,87,0,110,20,4,0,116,2,121,54,1,0,1,0, - 1,0,89,0,100,0,83,0,48,0,116,3,131,0,68,0, - 93,52,92,2,125,5,125,6,124,4,160,4,116,5,124,6, - 131,1,161,1,114,62,116,6,106,7,124,1,124,5,124,1, - 124,4,131,2,124,4,100,1,141,3,125,7,124,7,2,0, - 1,0,83,0,113,62,100,0,83,0,41,2,78,114,180,0, - 0,0,41,8,114,200,0,0,0,114,49,0,0,0,114,50, - 0,0,0,114,184,0,0,0,114,110,0,0,0,114,111,0, - 0,0,114,134,0,0,0,218,16,115,112,101,99,95,102,114, - 111,109,95,108,111,97,100,101,114,41,8,114,193,0,0,0, - 114,139,0,0,0,114,44,0,0,0,218,6,116,97,114,103, - 101,116,114,199,0,0,0,114,140,0,0,0,114,189,0,0, - 0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,9,102,105,110,100,95,115,112,101,99, - 226,2,0,0,115,28,0,0,0,0,2,10,1,8,1,4, - 1,2,1,12,1,12,1,8,1,14,1,14,1,6,1,8, - 1,2,254,6,3,122,31,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, - 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 34,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3, - 124,3,100,1,117,1,114,26,124,3,106,1,83,0,100,1, - 83,0,100,1,83,0,41,2,122,108,70,105,110,100,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, - 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,169,2,114,203,0,0,0,114,140, - 0,0,0,169,4,114,193,0,0,0,114,139,0,0,0,114, - 44,0,0,0,114,187,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,11,102,105,110,100,95,109, - 111,100,117,108,101,242,2,0,0,115,8,0,0,0,0,7, - 12,1,8,1,6,2,122,33,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,41,2,78,78,41,1,78, - 41,12,114,125,0,0,0,114,124,0,0,0,114,126,0,0, - 0,114,127,0,0,0,114,197,0,0,0,114,196,0,0,0, - 114,195,0,0,0,218,11,99,108,97,115,115,109,101,116,104, - 111,100,114,194,0,0,0,114,200,0,0,0,114,203,0,0, - 0,114,206,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,114,191,0,0,0,192, - 2,0,0,115,28,0,0,0,8,2,4,3,2,255,2,4, - 2,255,2,3,4,2,2,1,10,6,2,1,10,14,2,1, - 12,15,2,1,114,191,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,48,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, - 0,90,7,100,10,83,0,41,11,218,13,95,76,111,97,100, - 101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99, - 108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99, - 111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111, - 116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32, - 97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, - 0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,160, - 1,124,1,161,1,131,1,100,1,25,0,125,2,124,2,160, - 2,100,2,100,1,161,2,100,3,25,0,125,3,124,1,160, - 3,100,2,161,1,100,4,25,0,125,4,124,3,100,5,107, - 2,111,62,124,4,100,5,107,3,83,0,41,6,122,141,67, - 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, - 116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105, - 102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97, - 116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103, - 101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32, - 97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95, - 95,105,110,105,116,95,95,46,112,121,39,46,114,39,0,0, - 0,114,71,0,0,0,114,73,0,0,0,114,28,0,0,0, - 218,8,95,95,105,110,105,116,95,95,41,4,114,47,0,0, - 0,114,179,0,0,0,114,43,0,0,0,114,41,0,0,0, - 41,5,114,118,0,0,0,114,139,0,0,0,114,96,0,0, - 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, - 90,9,116,97,105,108,95,110,97,109,101,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,114,182,0,0,0,5, - 3,0,0,115,8,0,0,0,0,3,18,1,16,1,14,1, - 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, - 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,83,0,169,2,122,42, - 85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97, - 110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101, - 32,99,114,101,97,116,105,111,110,46,78,114,5,0,0,0, - 169,2,114,118,0,0,0,114,187,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,218,13,99,114,101, - 97,116,101,95,109,111,100,117,108,101,13,3,0,0,115,2, - 0,0,0,0,1,122,27,95,76,111,97,100,101,114,66,97, - 115,105,99,115,46,99,114,101,97,116,101,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,5,0,0,0,67,0,0,0,115,56,0,0,0, - 124,0,160,0,124,1,106,1,161,1,125,2,124,2,100,1, - 117,0,114,36,116,2,100,2,160,3,124,1,106,1,161,1, - 131,1,130,1,116,4,160,5,116,6,124,2,124,1,106,7, - 161,3,1,0,100,1,83,0,41,3,122,19,69,120,101,99, - 117,116,101,32,116,104,101,32,109,111,100,117,108,101,46,78, - 122,52,99,97,110,110,111,116,32,108,111,97,100,32,109,111, - 100,117,108,101,32,123,33,114,125,32,119,104,101,110,32,103, - 101,116,95,99,111,100,101,40,41,32,114,101,116,117,114,110, - 115,32,78,111,110,101,41,8,218,8,103,101,116,95,99,111, - 100,101,114,125,0,0,0,114,117,0,0,0,114,62,0,0, - 0,114,134,0,0,0,218,25,95,99,97,108,108,95,119,105, - 116,104,95,102,114,97,109,101,115,95,114,101,109,111,118,101, - 100,218,4,101,120,101,99,114,131,0,0,0,41,3,114,118, - 0,0,0,218,6,109,111,100,117,108,101,114,164,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 11,101,120,101,99,95,109,111,100,117,108,101,16,3,0,0, - 115,12,0,0,0,0,2,12,1,8,1,6,1,4,255,6, - 2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,12,0,0,0,116,0,160,1,124,0, - 124,1,161,2,83,0,41,1,122,26,84,104,105,115,32,109, - 111,100,117,108,101,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,41,2,114,134,0,0,0,218,17,95,108,111, - 97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2, - 114,118,0,0,0,114,139,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95, - 109,111,100,117,108,101,24,3,0,0,115,2,0,0,0,0, - 2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114, - 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,127, - 0,0,0,114,182,0,0,0,114,212,0,0,0,114,217,0, - 0,0,114,220,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,114,208,0,0,0, - 0,3,0,0,115,10,0,0,0,8,2,4,3,8,8,8, - 3,8,8,114,208,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, - 0,115,74,0,0,0,101,0,90,1,100,0,90,2,100,1, - 100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5, - 100,6,132,0,90,5,100,7,100,8,132,0,90,6,100,9, - 100,10,132,0,90,7,100,11,100,12,156,1,100,13,100,14, - 132,2,90,8,100,15,100,16,132,0,90,9,100,17,83,0, - 41,18,218,12,83,111,117,114,99,101,76,111,97,100,101,114, + 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,4,0,0,0,31,0,0, + 0,115,72,0,0,0,124,1,100,0,117,0,114,16,124,0, + 106,0,125,1,110,32,124,0,106,0,124,1,107,3,114,48, + 116,1,100,1,124,0,106,0,124,1,102,2,22,0,124,1, + 100,2,141,2,130,1,136,0,124,0,124,1,103,2,124,2, + 162,1,82,0,105,0,124,3,164,1,142,1,83,0,41,3, + 78,122,30,108,111,97,100,101,114,32,102,111,114,32,37,115, + 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, + 115,169,1,218,4,110,97,109,101,41,2,114,140,0,0,0, + 218,11,73,109,112,111,114,116,69,114,114,111,114,41,4,218, + 4,115,101,108,102,114,140,0,0,0,218,4,97,114,103,115, + 218,6,107,119,97,114,103,115,169,1,218,6,109,101,116,104, + 111,100,114,10,0,0,0,114,11,0,0,0,218,19,95,99, + 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, + 114,11,2,0,0,115,18,0,0,0,0,1,8,1,8,1, + 10,1,4,1,8,255,2,1,2,255,6,2,122,40,95,99, + 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, + 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, + 114,97,112,112,101,114,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,7,0,0,0,83,0,0,0,115, + 56,0,0,0,100,1,68,0,93,32,125,2,116,0,124,1, + 124,2,131,2,114,4,116,1,124,0,124,2,116,2,124,1, + 124,2,131,2,131,3,1,0,113,4,124,0,106,3,160,4, + 124,1,106,3,161,1,1,0,100,0,83,0,41,2,78,41, + 4,218,10,95,95,109,111,100,117,108,101,95,95,218,8,95, + 95,110,97,109,101,95,95,218,12,95,95,113,117,97,108,110, + 97,109,101,95,95,218,7,95,95,100,111,99,95,95,41,5, + 218,7,104,97,115,97,116,116,114,218,7,115,101,116,97,116, + 116,114,218,7,103,101,116,97,116,116,114,218,8,95,95,100, + 105,99,116,95,95,218,6,117,112,100,97,116,101,41,3,90, + 3,110,101,119,90,3,111,108,100,114,84,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,5,95, + 119,114,97,112,22,2,0,0,115,8,0,0,0,0,1,8, + 1,10,1,20,1,122,26,95,99,104,101,99,107,95,110,97, + 109,101,46,60,108,111,99,97,108,115,62,46,95,119,114,97, + 112,41,1,78,41,3,218,10,95,98,111,111,116,115,116,114, + 97,112,114,157,0,0,0,218,9,78,97,109,101,69,114,114, + 111,114,41,3,114,146,0,0,0,114,147,0,0,0,114,157, + 0,0,0,114,10,0,0,0,114,145,0,0,0,114,11,0, + 0,0,218,11,95,99,104,101,99,107,95,110,97,109,101,3, + 2,0,0,115,14,0,0,0,0,8,14,7,2,1,10,1, + 12,2,14,5,10,1,114,160,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0, + 67,0,0,0,115,60,0,0,0,124,0,160,0,124,1,161, + 1,92,2,125,2,125,3,124,2,100,1,117,0,114,56,116, + 1,124,3,131,1,114,56,100,2,125,4,116,2,160,3,124, + 4,160,4,124,3,100,3,25,0,161,1,116,5,161,2,1, + 0,124,2,83,0,41,4,122,155,84,114,121,32,116,111,32, + 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, + 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, + 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, + 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, + 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, + 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, + 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, + 32,32,32,32,78,122,44,78,111,116,32,105,109,112,111,114, + 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, + 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, + 116,95,95,114,0,0,0,0,41,6,218,11,102,105,110,100, + 95,108,111,97,100,101,114,114,6,0,0,0,114,98,0,0, + 0,114,99,0,0,0,114,88,0,0,0,218,13,73,109,112, + 111,114,116,87,97,114,110,105,110,103,41,5,114,142,0,0, + 0,218,8,102,117,108,108,110,97,109,101,218,6,108,111,97, + 100,101,114,218,8,112,111,114,116,105,111,110,115,218,3,109, + 115,103,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,17,95,102,105,110,100,95,109,111,100,117,108,101,95, + 115,104,105,109,31,2,0,0,115,10,0,0,0,0,10,14, + 1,16,1,4,1,22,1,114,167,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, + 0,67,0,0,0,115,166,0,0,0,124,0,100,1,100,2, + 133,2,25,0,125,3,124,3,116,0,107,3,114,64,100,3, + 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,1, + 160,2,100,5,124,4,161,2,1,0,116,3,124,4,102,1, + 105,0,124,2,164,1,142,1,130,1,116,4,124,0,131,1, + 100,6,107,0,114,106,100,7,124,1,155,2,157,2,125,4, + 116,1,160,2,100,5,124,4,161,2,1,0,116,5,124,4, + 131,1,130,1,116,6,124,0,100,2,100,8,133,2,25,0, + 131,1,125,5,124,5,100,9,64,0,114,162,100,10,124,5, + 155,2,100,11,124,1,155,2,157,4,125,4,116,3,124,4, + 102,1,105,0,124,2,164,1,142,1,130,1,124,5,83,0, + 41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,98, + 97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,104, + 101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,32, + 104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,114, + 110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,108, + 100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,116, + 101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,32, + 112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,117, + 114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,32, + 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, + 99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,32, + 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, + 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, + 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, + 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, + 32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,117, + 103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,42, + 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, + 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, + 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, + 32,117,115,101,100,32,102,111,114,32,108,111,103,103,105,110, + 103,46,10,10,32,32,32,32,42,101,120,99,95,100,101,116, + 97,105,108,115,42,32,105,115,32,97,32,100,105,99,116,105, + 111,110,97,114,121,32,112,97,115,115,101,100,32,116,111,32, + 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,105, + 116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,32, + 32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,103, + 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, + 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, + 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, + 99,116,32,111,114,32,119,104,101,110,32,116,104,101,32,102, + 108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,105, + 115,32,105,110,118,97,108,105,100,46,32,69,79,70,69,114, + 114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,104, + 101,110,32,116,104,101,32,100,97,116,97,32,105,115,32,102, + 111,117,110,100,32,116,111,32,98,101,32,116,114,117,110,99, + 97,116,101,100,46,10,10,32,32,32,32,78,114,34,0,0, + 0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,109, + 98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,233, + 16,0,0,0,122,40,114,101,97,99,104,101,100,32,69,79, + 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, + 112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,8, + 0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,105, + 100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,7, + 218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,158, + 0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,101, + 115,115,97,103,101,114,141,0,0,0,114,6,0,0,0,218, + 8,69,79,70,69,114,114,111,114,114,44,0,0,0,41,6, + 114,43,0,0,0,114,140,0,0,0,218,11,101,120,99,95, + 100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,116, + 0,0,0,114,22,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,13,95,99,108,97,115,115,105, + 102,121,95,112,121,99,48,2,0,0,115,28,0,0,0,0, + 16,12,1,8,1,16,1,12,1,16,1,12,1,10,1,12, + 1,8,1,16,2,8,1,16,1,16,1,114,176,0,0,0, + 99,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,4,0,0,0,67,0,0,0,115,120,0,0,0,116,0, + 124,0,100,1,100,2,133,2,25,0,131,1,124,1,100,3, + 64,0,107,3,114,62,100,4,124,3,155,2,157,2,125,5, + 116,1,160,2,100,5,124,5,161,2,1,0,116,3,124,5, + 102,1,105,0,124,4,164,1,142,1,130,1,124,2,100,6, + 117,1,114,116,116,0,124,0,100,2,100,7,133,2,25,0, + 131,1,124,2,100,3,64,0,107,3,114,116,116,3,100,4, + 124,3,155,2,157,2,102,1,105,0,124,4,164,1,142,1, + 130,1,100,6,83,0,41,8,97,7,2,0,0,86,97,108, + 105,100,97,116,101,32,97,32,112,121,99,32,97,103,97,105, + 110,115,116,32,116,104,101,32,115,111,117,114,99,101,32,108, + 97,115,116,45,109,111,100,105,102,105,101,100,32,116,105,109, + 101,46,10,10,32,32,32,32,42,100,97,116,97,42,32,105, + 115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111, + 102,32,116,104,101,32,112,121,99,32,102,105,108,101,46,32, + 40,79,110,108,121,32,116,104,101,32,102,105,114,115,116,32, + 49,54,32,98,121,116,101,115,32,97,114,101,10,32,32,32, + 32,114,101,113,117,105,114,101,100,46,41,10,10,32,32,32, + 32,42,115,111,117,114,99,101,95,109,116,105,109,101,42,32, + 105,115,32,116,104,101,32,108,97,115,116,32,109,111,100,105, + 102,105,101,100,32,116,105,109,101,115,116,97,109,112,32,111, + 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,46,10,10,32,32,32,32,42,115,111,117,114,99,101,95, + 115,105,122,101,42,32,105,115,32,78,111,110,101,32,111,114, + 32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101, + 32,115,111,117,114,99,101,32,102,105,108,101,32,105,110,32, + 98,121,116,101,115,46,10,10,32,32,32,32,42,110,97,109, + 101,42,32,105,115,32,116,104,101,32,110,97,109,101,32,111, + 102,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, + 110,103,32,105,109,112,111,114,116,101,100,46,32,73,116,32, + 105,115,32,117,115,101,100,32,102,111,114,32,108,111,103,103, + 105,110,103,46,10,10,32,32,32,32,42,101,120,99,95,100, + 101,116,97,105,108,115,42,32,105,115,32,97,32,100,105,99, + 116,105,111,110,97,114,121,32,112,97,115,115,101,100,32,116, + 111,32,73,109,112,111,114,116,69,114,114,111,114,32,105,102, + 32,105,116,32,114,97,105,115,101,100,32,102,111,114,10,32, + 32,32,32,105,109,112,114,111,118,101,100,32,100,101,98,117, + 103,103,105,110,103,46,10,10,32,32,32,32,65,110,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,32,105,102,32,116,104,101,32,98,121,116,101, + 99,111,100,101,32,105,115,32,115,116,97,108,101,46,10,10, + 32,32,32,32,114,170,0,0,0,233,12,0,0,0,114,33, + 0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,115, + 32,115,116,97,108,101,32,102,111,114,32,114,168,0,0,0, + 78,114,169,0,0,0,41,4,114,44,0,0,0,114,158,0, + 0,0,114,173,0,0,0,114,141,0,0,0,41,6,114,43, + 0,0,0,218,12,115,111,117,114,99,101,95,109,116,105,109, + 101,218,11,115,111,117,114,99,101,95,115,105,122,101,114,140, + 0,0,0,114,175,0,0,0,114,116,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,23,95,118, + 97,108,105,100,97,116,101,95,116,105,109,101,115,116,97,109, + 112,95,112,121,99,81,2,0,0,115,16,0,0,0,0,19, + 24,1,10,1,12,1,16,1,8,1,22,255,2,2,114,180, + 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,4,0,0,0,67,0,0,0,115,42,0,0, + 0,124,0,100,1,100,2,133,2,25,0,124,1,107,3,114, + 38,116,0,100,3,124,2,155,2,157,2,102,1,105,0,124, + 3,164,1,142,1,130,1,100,4,83,0,41,5,97,243,1, + 0,0,86,97,108,105,100,97,116,101,32,97,32,104,97,115, + 104,45,98,97,115,101,100,32,112,121,99,32,98,121,32,99, + 104,101,99,107,105,110,103,32,116,104,101,32,114,101,97,108, + 32,115,111,117,114,99,101,32,104,97,115,104,32,97,103,97, + 105,110,115,116,32,116,104,101,32,111,110,101,32,105,110,10, + 32,32,32,32,116,104,101,32,112,121,99,32,104,101,97,100, + 101,114,46,10,10,32,32,32,32,42,100,97,116,97,42,32, + 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, + 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, + 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, + 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, + 32,32,114,101,113,117,105,114,101,100,46,41,10,10,32,32, + 32,32,42,115,111,117,114,99,101,95,104,97,115,104,42,32, + 105,115,32,116,104,101,32,105,109,112,111,114,116,108,105,98, + 46,117,116,105,108,46,115,111,117,114,99,101,95,104,97,115, + 104,40,41,32,111,102,32,116,104,101,32,115,111,117,114,99, + 101,32,102,105,108,101,46,10,10,32,32,32,32,42,110,97, + 109,101,42,32,105,115,32,116,104,101,32,110,97,109,101,32, + 111,102,32,116,104,101,32,109,111,100,117,108,101,32,98,101, + 105,110,103,32,105,109,112,111,114,116,101,100,46,32,73,116, + 32,105,115,32,117,115,101,100,32,102,111,114,32,108,111,103, + 103,105,110,103,46,10,10,32,32,32,32,42,101,120,99,95, + 100,101,116,97,105,108,115,42,32,105,115,32,97,32,100,105, + 99,116,105,111,110,97,114,121,32,112,97,115,115,101,100,32, + 116,111,32,73,109,112,111,114,116,69,114,114,111,114,32,105, + 102,32,105,116,32,114,97,105,115,101,100,32,102,111,114,10, + 32,32,32,32,105,109,112,114,111,118,101,100,32,100,101,98, + 117,103,103,105,110,103,46,10,10,32,32,32,32,65,110,32, + 73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,114, + 97,105,115,101,100,32,105,102,32,116,104,101,32,98,121,116, + 101,99,111,100,101,32,105,115,32,115,116,97,108,101,46,10, + 10,32,32,32,32,114,170,0,0,0,114,169,0,0,0,122, + 46,104,97,115,104,32,105,110,32,98,121,116,101,99,111,100, + 101,32,100,111,101,115,110,39,116,32,109,97,116,99,104,32, + 104,97,115,104,32,111,102,32,115,111,117,114,99,101,32,78, + 41,1,114,141,0,0,0,41,4,114,43,0,0,0,218,11, + 115,111,117,114,99,101,95,104,97,115,104,114,140,0,0,0, + 114,175,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,18,95,118,97,108,105,100,97,116,101,95, + 104,97,115,104,95,112,121,99,109,2,0,0,115,12,0,0, + 0,0,17,16,1,2,1,8,255,4,2,2,254,114,182,0, + 0,0,99,4,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,5,0,0,0,67,0,0,0,115,80,0,0,0, + 116,0,160,1,124,0,161,1,125,4,116,2,124,4,116,3, + 131,2,114,56,116,4,160,5,100,1,124,2,161,2,1,0, + 124,3,100,2,117,1,114,52,116,6,160,7,124,4,124,3, + 161,2,1,0,124,4,83,0,116,8,100,3,160,9,124,2, + 161,1,124,1,124,2,100,4,141,3,130,1,100,2,83,0, + 41,5,122,35,67,111,109,112,105,108,101,32,98,121,116,101, + 99,111,100,101,32,97,115,32,102,111,117,110,100,32,105,110, + 32,97,32,112,121,99,46,122,21,99,111,100,101,32,111,98, + 106,101,99,116,32,102,114,111,109,32,123,33,114,125,78,122, + 23,78,111,110,45,99,111,100,101,32,111,98,106,101,99,116, + 32,105,110,32,123,33,114,125,169,2,114,140,0,0,0,114, + 65,0,0,0,41,10,218,7,109,97,114,115,104,97,108,90, + 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, + 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,158, + 0,0,0,114,173,0,0,0,218,4,95,105,109,112,90,16, + 95,102,105,120,95,99,111,95,102,105,108,101,110,97,109,101, + 114,141,0,0,0,114,88,0,0,0,41,5,114,43,0,0, + 0,114,140,0,0,0,114,131,0,0,0,114,133,0,0,0, + 218,4,99,111,100,101,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,17,95,99,111,109,112,105,108,101,95, + 98,121,116,101,99,111,100,101,133,2,0,0,115,18,0,0, + 0,0,2,10,1,10,1,12,1,8,1,12,1,4,2,10, + 1,4,255,114,189,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0, + 0,115,70,0,0,0,116,0,116,1,131,1,125,3,124,3, + 160,2,116,3,100,1,131,1,161,1,1,0,124,3,160,2, + 116,3,124,1,131,1,161,1,1,0,124,3,160,2,116,3, + 124,2,131,1,161,1,1,0,124,3,160,2,116,4,160,5, + 124,0,161,1,161,1,1,0,124,3,83,0,41,2,122,43, + 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, + 32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,112, + 45,98,97,115,101,100,32,112,121,99,46,114,0,0,0,0, + 41,6,218,9,98,121,116,101,97,114,114,97,121,114,172,0, + 0,0,218,6,101,120,116,101,110,100,114,39,0,0,0,114, + 184,0,0,0,218,5,100,117,109,112,115,41,4,114,188,0, + 0,0,218,5,109,116,105,109,101,114,179,0,0,0,114,43, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,109, + 101,115,116,97,109,112,95,112,121,99,146,2,0,0,115,12, + 0,0,0,0,2,8,1,14,1,14,1,14,1,16,1,114, + 194,0,0,0,84,99,3,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,80, + 0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,100, + 1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,131, + 1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,115, + 50,74,0,130,1,124,3,160,2,124,1,161,1,1,0,124, + 3,160,2,116,5,160,6,124,0,161,1,161,1,1,0,124, + 3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,116, + 104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,97, + 115,104,45,98,97,115,101,100,32,112,121,99,46,114,4,0, + 0,0,114,170,0,0,0,41,7,114,190,0,0,0,114,172, + 0,0,0,114,191,0,0,0,114,39,0,0,0,114,6,0, + 0,0,114,184,0,0,0,114,192,0,0,0,41,5,114,188, + 0,0,0,114,181,0,0,0,90,7,99,104,101,99,107,101, + 100,114,43,0,0,0,114,22,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,17,95,99,111,100, + 101,95,116,111,95,104,97,115,104,95,112,121,99,156,2,0, + 0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,1, + 10,1,16,1,114,195,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, + 0,0,115,62,0,0,0,100,1,100,2,108,0,125,1,116, + 1,160,2,124,0,161,1,106,3,125,2,124,1,160,4,124, + 2,161,1,125,3,116,1,160,5,100,2,100,3,161,2,125, + 4,124,4,160,6,124,0,160,6,124,3,100,1,25,0,161, + 1,161,1,83,0,41,4,122,121,68,101,99,111,100,101,32, + 98,121,116,101,115,32,114,101,112,114,101,115,101,110,116,105, + 110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,97, + 110,100,32,114,101,116,117,114,110,32,116,104,101,32,115,116, + 114,105,110,103,46,10,10,32,32,32,32,85,110,105,118,101, + 114,115,97,108,32,110,101,119,108,105,110,101,32,115,117,112, + 112,111,114,116,32,105,115,32,117,115,101,100,32,105,110,32, + 116,104,101,32,100,101,99,111,100,105,110,103,46,10,32,32, + 32,32,114,0,0,0,0,78,84,41,7,218,8,116,111,107, + 101,110,105,122,101,114,90,0,0,0,90,7,66,121,116,101, + 115,73,79,90,8,114,101,97,100,108,105,110,101,90,15,100, + 101,116,101,99,116,95,101,110,99,111,100,105,110,103,90,25, + 73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,105, + 110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,100, + 101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,101, + 115,114,196,0,0,0,90,21,115,111,117,114,99,101,95,98, + 121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,101, + 110,99,111,100,105,110,103,90,15,110,101,119,108,105,110,101, + 95,100,101,99,111,100,101,114,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,13,100,101,99,111,100,101,95, + 115,111,117,114,99,101,167,2,0,0,115,10,0,0,0,0, + 5,8,1,12,1,10,1,12,1,114,200,0,0,0,169,2, + 114,164,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, + 115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,0, + 0,0,8,0,0,0,67,0,0,0,115,64,1,0,0,124, + 1,100,1,117,0,114,58,100,2,125,1,116,0,124,2,100, + 3,131,2,114,114,122,14,124,2,160,1,124,0,161,1,125, + 1,87,0,113,114,4,0,116,2,121,54,1,0,1,0,1, + 0,89,0,113,114,48,0,110,56,116,3,160,4,124,1,161, + 1,125,1,116,5,124,1,131,1,115,114,122,18,116,6,116, + 3,160,7,161,0,124,1,131,2,125,1,87,0,110,18,4, + 0,116,8,121,112,1,0,1,0,1,0,89,0,110,2,48, + 0,116,9,106,10,124,0,124,2,124,1,100,4,141,3,125, + 4,100,5,124,4,95,11,124,2,100,1,117,0,114,198,116, + 12,131,0,68,0,93,42,92,2,125,5,125,6,124,1,160, + 13,116,14,124,6,131,1,161,1,114,150,124,5,124,0,124, + 1,131,2,125,2,124,2,124,4,95,15,1,0,113,198,113, + 150,100,1,83,0,124,3,116,16,117,0,144,1,114,12,116, + 0,124,2,100,6,131,2,144,1,114,18,122,14,124,2,160, + 17,124,0,161,1,125,7,87,0,110,18,4,0,116,2,121, + 252,1,0,1,0,1,0,89,0,110,14,48,0,124,7,144, + 1,114,18,103,0,124,4,95,18,110,6,124,3,124,4,95, + 18,124,4,106,18,103,0,107,2,144,1,114,60,124,1,144, + 1,114,60,116,19,124,1,131,1,100,7,25,0,125,8,124, + 4,106,18,160,20,124,8,161,1,1,0,124,4,83,0,41, + 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, + 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, + 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, + 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, + 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, + 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, + 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, + 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, + 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, + 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, + 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, + 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, + 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, + 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, + 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, + 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, + 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, + 12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,218, + 6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,99, + 107,97,103,101,114,0,0,0,0,41,21,114,152,0,0,0, + 114,203,0,0,0,114,141,0,0,0,114,24,0,0,0,114, + 102,0,0,0,114,85,0,0,0,114,67,0,0,0,114,81, + 0,0,0,114,76,0,0,0,114,158,0,0,0,218,10,77, + 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, + 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, + 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, + 97,100,101,114,115,114,58,0,0,0,114,135,0,0,0,114, + 164,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, + 206,0,0,0,114,202,0,0,0,114,74,0,0,0,114,61, + 0,0,0,41,9,114,140,0,0,0,90,8,108,111,99,97, + 116,105,111,110,114,164,0,0,0,114,202,0,0,0,218,4, + 115,112,101,99,218,12,108,111,97,100,101,114,95,99,108,97, + 115,115,218,8,115,117,102,102,105,120,101,115,114,206,0,0, + 0,90,7,100,105,114,110,97,109,101,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,23,115,112,101,99,95, + 102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105, + 111,110,184,2,0,0,115,72,0,0,0,0,12,8,4,4, + 1,10,2,2,1,14,1,12,1,8,2,10,1,8,1,2, + 1,18,1,12,1,6,8,16,1,6,3,8,1,14,1,14, + 1,10,1,6,1,6,2,4,3,10,2,12,1,2,1,14, + 1,12,1,6,2,6,1,8,2,6,1,12,1,6,1,12, + 1,12,2,114,213,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, + 0,115,80,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,90,4,100,3,90,5,100,4,90,6,101,7, + 100,5,100,6,132,0,131,1,90,8,101,7,100,7,100,8, + 132,0,131,1,90,9,101,7,100,14,100,10,100,11,132,1, + 131,1,90,10,101,7,100,15,100,12,100,13,132,1,131,1, + 90,11,100,9,83,0,41,16,218,21,87,105,110,100,111,119, + 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,122, + 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, + 114,32,102,111,114,32,109,111,100,117,108,101,115,32,100,101, + 99,108,97,114,101,100,32,105,110,32,116,104,101,32,87,105, + 110,100,111,119,115,32,114,101,103,105,115,116,114,121,46,122, + 59,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, + 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, + 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, + 115,92,123,102,117,108,108,110,97,109,101,125,122,65,83,111, + 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, + 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, + 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, + 102,117,108,108,110,97,109,101,125,92,68,101,98,117,103,70, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,8,0,0,0,116,0, - 130,1,100,1,83,0,41,2,122,165,79,112,116,105,111,110, - 97,108,32,109,101,116,104,111,100,32,116,104,97,116,32,114, - 101,116,117,114,110,115,32,116,104,101,32,109,111,100,105,102, - 105,99,97,116,105,111,110,32,116,105,109,101,32,40,97,110, - 32,105,110,116,41,32,102,111,114,32,116,104,101,10,32,32, - 32,32,32,32,32,32,115,112,101,99,105,102,105,101,100,32, - 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, - 32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83, - 69,114,114,111,114,32,119,104,101,110,32,116,104,101,32,112, - 97,116,104,32,99,97,110,110,111,116,32,98,101,32,104,97, - 110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,78, - 41,1,114,50,0,0,0,169,2,114,118,0,0,0,114,44, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,10,112,97,116,104,95,109,116,105,109,101,31,3, - 0,0,115,2,0,0,0,0,6,122,23,83,111,117,114,99, - 101,76,111,97,100,101,114,46,112,97,116,104,95,109,116,105, - 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,4,0,0,0,67,0,0,0,115,14,0,0,0, - 100,1,124,0,160,0,124,1,161,1,105,1,83,0,41,2, - 97,158,1,0,0,79,112,116,105,111,110,97,108,32,109,101, - 116,104,111,100,32,114,101,116,117,114,110,105,110,103,32,97, - 32,109,101,116,97,100,97,116,97,32,100,105,99,116,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 10,32,32,32,32,32,32,32,32,112,97,116,104,32,40,97, - 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, - 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, - 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, - 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, - 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, - 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, - 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, - 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, - 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, - 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, - 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, - 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, - 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, - 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, - 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, - 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, - 115,32,79,83,69,114,114,111,114,32,119,104,101,110,32,116, - 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, - 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, - 32,32,32,114,169,0,0,0,41,1,114,223,0,0,0,114, - 222,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,10,112,97,116,104,95,115,116,97,116,115,39, - 3,0,0,115,2,0,0,0,0,12,122,23,83,111,117,114, - 99,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116, - 97,116,115,99,4,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0, - 0,124,0,160,0,124,2,124,3,161,2,83,0,41,1,122, - 228,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, - 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, - 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, - 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114, - 99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101, - 100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111, - 114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114, - 32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32, - 32,32,32,32,32,41,1,218,8,115,101,116,95,100,97,116, - 97,41,4,114,118,0,0,0,114,107,0,0,0,90,10,99, - 97,99,104,101,95,112,97,116,104,114,26,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,8,0,0,0,218,15,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,53,3, - 0,0,115,2,0,0,0,0,8,122,28,83,111,117,114,99, - 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, - 121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,83,0,41,2,122,150,79,112,116, - 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, - 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, - 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, - 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, - 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, - 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, - 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, - 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, - 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, - 32,32,32,78,114,5,0,0,0,41,3,114,118,0,0,0, - 114,44,0,0,0,114,26,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,225,0,0,0,63,3, - 0,0,115,2,0,0,0,0,1,122,21,83,111,117,114,99, - 101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97, - 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,10,0,0,0,67,0,0,0,115,84,0,0,0,124,0, - 160,0,124,1,161,1,125,2,122,14,124,0,160,1,124,2, - 161,1,125,3,87,0,110,50,4,0,116,2,121,74,1,0, - 125,4,1,0,122,26,116,3,100,1,124,1,100,2,141,2, - 124,4,130,2,87,0,89,0,100,3,125,4,126,4,110,10, - 100,3,125,4,126,4,48,0,48,0,116,4,124,3,131,1, - 83,0,41,4,122,52,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103, - 101,116,95,115,111,117,114,99,101,46,122,39,115,111,117,114, - 99,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101, - 32,116,104,114,111,117,103,104,32,103,101,116,95,100,97,116, - 97,40,41,114,115,0,0,0,78,41,5,114,179,0,0,0, - 218,8,103,101,116,95,100,97,116,97,114,50,0,0,0,114, - 117,0,0,0,114,176,0,0,0,41,5,114,118,0,0,0, - 114,139,0,0,0,114,44,0,0,0,114,174,0,0,0,218, - 3,101,120,99,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,70, - 3,0,0,115,20,0,0,0,0,2,10,1,2,1,14,1, - 14,1,4,1,2,255,4,1,2,255,24,2,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,114,104,0,0,0,41,1,218,9,95,111, - 112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0, - 1,0,0,0,4,0,0,0,8,0,0,0,67,0,0,0, - 115,22,0,0,0,116,0,106,1,116,2,124,1,124,2,100, - 1,100,2,124,3,100,3,141,6,83,0,41,4,122,130,82, - 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, - 98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102, - 114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32, - 97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32, - 97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32, - 116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115, - 117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32, - 32,114,215,0,0,0,84,41,2,218,12,100,111,110,116,95, - 105,110,104,101,114,105,116,114,83,0,0,0,41,3,114,134, - 0,0,0,114,214,0,0,0,218,7,99,111,109,112,105,108, - 101,41,4,114,118,0,0,0,114,26,0,0,0,114,44,0, - 0,0,114,230,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,218,14,115,111,117,114,99,101,95,116, - 111,95,99,111,100,101,80,3,0,0,115,6,0,0,0,0, - 5,12,1,4,255,122,27,83,111,117,114,99,101,76,111,97, - 100,101,114,46,115,111,117,114,99,101,95,116,111,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,15, - 0,0,0,9,0,0,0,67,0,0,0,115,24,2,0,0, - 124,0,160,0,124,1,161,1,125,2,100,1,125,3,100,1, - 125,4,100,1,125,5,100,2,125,6,100,3,125,7,122,12, - 116,1,124,2,131,1,125,8,87,0,110,24,4,0,116,2, - 121,66,1,0,1,0,1,0,100,1,125,8,89,0,144,1, - 110,42,48,0,122,14,124,0,160,3,124,2,161,1,125,9, - 87,0,110,20,4,0,116,4,121,102,1,0,1,0,1,0, - 89,0,144,1,110,6,48,0,116,5,124,9,100,4,25,0, - 131,1,125,3,122,14,124,0,160,6,124,8,161,1,125,10, - 87,0,110,18,4,0,116,4,121,148,1,0,1,0,1,0, - 89,0,110,216,48,0,124,1,124,8,100,5,156,2,125,11, - 122,148,116,7,124,10,124,1,124,11,131,3,125,12,116,8, - 124,10,131,1,100,6,100,1,133,2,25,0,125,13,124,12, - 100,7,64,0,100,8,107,3,125,6,124,6,144,1,114,30, - 124,12,100,9,64,0,100,8,107,3,125,7,116,9,106,10, - 100,10,107,3,144,1,114,50,124,7,115,248,116,9,106,10, - 100,11,107,2,144,1,114,50,124,0,160,6,124,2,161,1, - 125,4,116,9,160,11,116,12,124,4,161,2,125,5,116,13, - 124,10,124,5,124,1,124,11,131,4,1,0,110,20,116,14, - 124,10,124,3,124,9,100,12,25,0,124,1,124,11,131,5, - 1,0,87,0,110,24,4,0,116,15,116,16,102,2,144,1, - 121,76,1,0,1,0,1,0,89,0,110,32,48,0,116,17, - 160,18,100,13,124,8,124,2,161,3,1,0,116,19,124,13, - 124,1,124,8,124,2,100,14,141,4,83,0,124,4,100,1, - 117,0,144,1,114,128,124,0,160,6,124,2,161,1,125,4, - 124,0,160,20,124,4,124,2,161,2,125,14,116,17,160,18, - 100,15,124,2,161,2,1,0,116,21,106,22,144,2,115,20, - 124,8,100,1,117,1,144,2,114,20,124,3,100,1,117,1, - 144,2,114,20,124,6,144,1,114,220,124,5,100,1,117,0, - 144,1,114,206,116,9,160,11,124,4,161,1,125,5,116,23, - 124,14,124,5,124,7,131,3,125,10,110,16,116,24,124,14, - 124,3,116,25,124,4,131,1,131,3,125,10,122,18,124,0, - 160,26,124,2,124,8,124,10,161,3,1,0,87,0,110,20, - 4,0,116,2,144,2,121,18,1,0,1,0,1,0,89,0, - 110,2,48,0,124,14,83,0,41,16,122,190,67,111,110,99, - 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32, - 111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117, - 105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32, - 116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, - 100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32, - 32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101, - 116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111, - 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, - 10,10,32,32,32,32,32,32,32,32,78,70,84,114,169,0, - 0,0,114,159,0,0,0,114,145,0,0,0,114,39,0,0, - 0,114,73,0,0,0,114,28,0,0,0,90,5,110,101,118, - 101,114,90,6,97,108,119,97,121,115,218,4,115,105,122,101, - 122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,41, - 3,114,116,0,0,0,114,106,0,0,0,114,107,0,0,0, - 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114, - 111,109,32,123,125,41,27,114,179,0,0,0,114,97,0,0, - 0,114,82,0,0,0,114,224,0,0,0,114,50,0,0,0, - 114,18,0,0,0,114,227,0,0,0,114,152,0,0,0,218, - 10,109,101,109,111,114,121,118,105,101,119,114,163,0,0,0, - 90,21,99,104,101,99,107,95,104,97,115,104,95,98,97,115, - 101,100,95,112,121,99,115,114,157,0,0,0,218,17,95,82, - 65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114, - 158,0,0,0,114,156,0,0,0,114,117,0,0,0,114,150, - 0,0,0,114,134,0,0,0,114,149,0,0,0,114,165,0, - 0,0,114,233,0,0,0,114,1,0,0,0,218,19,100,111, - 110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,100, - 101,114,171,0,0,0,114,170,0,0,0,114,23,0,0,0, - 114,226,0,0,0,41,15,114,118,0,0,0,114,139,0,0, - 0,114,107,0,0,0,114,154,0,0,0,114,174,0,0,0, - 114,157,0,0,0,90,10,104,97,115,104,95,98,97,115,101, - 100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,114, - 106,0,0,0,218,2,115,116,114,26,0,0,0,114,151,0, - 0,0,114,2,0,0,0,90,10,98,121,116,101,115,95,100, - 97,116,97,90,11,99,111,100,101,95,111,98,106,101,99,116, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 213,0,0,0,88,3,0,0,115,152,0,0,0,0,7,10, - 1,4,1,4,1,4,1,4,1,4,1,2,1,12,1,12, - 1,12,2,2,1,14,1,12,1,8,2,12,1,2,1,14, - 1,12,1,6,3,2,1,2,254,6,4,2,1,12,1,16, - 1,12,1,6,1,12,1,12,1,2,255,2,2,8,254,4, - 3,10,1,4,1,2,1,2,254,4,4,8,1,2,255,6, - 3,2,1,2,1,2,1,6,1,2,1,2,251,8,7,18, - 1,6,2,8,1,2,255,4,2,6,1,2,1,2,254,6, - 3,10,1,10,1,12,1,12,1,18,1,6,255,4,2,6, - 1,10,1,10,1,14,2,6,1,6,255,4,2,2,1,18, - 1,14,1,6,1,122,21,83,111,117,114,99,101,76,111,97, - 100,101,114,46,103,101,116,95,99,111,100,101,78,41,10,114, - 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,223, - 0,0,0,114,224,0,0,0,114,226,0,0,0,114,225,0, - 0,0,114,229,0,0,0,114,233,0,0,0,114,213,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,221,0,0,0,29,3,0,0,115,14, - 0,0,0,8,2,8,8,8,14,8,10,8,7,8,10,14, - 8,114,221,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,115, - 124,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 100,6,100,7,132,0,90,6,101,7,135,0,102,1,100,8, - 100,9,132,8,131,1,90,8,101,7,100,10,100,11,132,0, - 131,1,90,9,100,12,100,13,132,0,90,10,101,7,100,14, - 100,15,132,0,131,1,90,11,100,16,100,17,132,0,90,12, - 100,18,100,19,132,0,90,13,100,20,100,21,132,0,90,14, - 100,22,100,23,132,0,90,15,135,0,4,0,90,16,83,0, - 41,24,218,10,70,105,108,101,76,111,97,100,101,114,122,103, - 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, - 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, - 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, - 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, - 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, - 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, - 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, - 115,16,0,0,0,124,1,124,0,95,0,124,2,124,0,95, - 1,100,1,83,0,41,2,122,75,67,97,99,104,101,32,116, - 104,101,32,109,111,100,117,108,101,32,110,97,109,101,32,97, - 110,100,32,116,104,101,32,112,97,116,104,32,116,111,32,116, - 104,101,32,102,105,108,101,32,102,111,117,110,100,32,98,121, - 32,116,104,101,10,32,32,32,32,32,32,32,32,102,105,110, - 100,101,114,46,78,114,159,0,0,0,41,3,114,118,0,0, - 0,114,139,0,0,0,114,44,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,114,209,0,0,0,178, - 3,0,0,115,4,0,0,0,0,3,6,1,122,19,70,105, - 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, - 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,24,0,0,0,124, - 0,106,0,124,1,106,0,107,2,111,22,124,0,106,1,124, - 1,106,1,107,2,83,0,114,109,0,0,0,169,2,218,9, - 95,95,99,108,97,115,115,95,95,114,131,0,0,0,169,2, - 114,118,0,0,0,90,5,111,116,104,101,114,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,218,6,95,95,101, - 113,95,95,184,3,0,0,115,6,0,0,0,0,1,12,1, - 10,255,122,17,70,105,108,101,76,111,97,100,101,114,46,95, - 95,101,113,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,20, - 0,0,0,116,0,124,0,106,1,131,1,116,0,124,0,106, - 2,131,1,65,0,83,0,114,109,0,0,0,169,3,218,4, - 104,97,115,104,114,116,0,0,0,114,44,0,0,0,169,1, - 114,118,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,218,8,95,95,104,97,115,104,95,95,188,3, - 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, - 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,3,0,0,0,115,16,0,0,0,116,0,116,1, - 124,0,131,2,160,2,124,1,161,1,83,0,41,1,122,100, - 76,111,97,100,32,97,32,109,111,100,117,108,101,32,102,114, - 111,109,32,97,32,102,105,108,101,46,10,10,32,32,32,32, + 0,8,0,0,0,67,0,0,0,115,54,0,0,0,122,16, + 116,0,160,1,116,0,106,2,124,1,161,2,87,0,83,0, + 4,0,116,3,121,48,1,0,1,0,1,0,116,0,160,1, + 116,0,106,4,124,1,161,2,6,0,89,0,83,0,48,0, + 100,0,83,0,114,69,0,0,0,41,5,218,6,119,105,110, + 114,101,103,90,7,79,112,101,110,75,101,121,90,17,72,75, + 69,89,95,67,85,82,82,69,78,84,95,85,83,69,82,114, + 76,0,0,0,90,18,72,75,69,89,95,76,79,67,65,76, + 95,77,65,67,72,73,78,69,41,2,218,3,99,108,115,114, + 26,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,14,95,111,112,101,110,95,114,101,103,105,115, + 116,114,121,13,3,0,0,115,8,0,0,0,0,2,2,1, + 16,1,12,1,122,36,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101, + 110,95,114,101,103,105,115,116,114,121,99,2,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, + 0,0,0,115,132,0,0,0,124,0,106,0,114,14,124,0, + 106,1,125,2,110,6,124,0,106,2,125,2,124,2,106,3, + 124,1,100,1,116,4,106,5,100,0,100,2,133,2,25,0, + 22,0,100,3,141,2,125,3,122,58,124,0,160,6,124,3, + 161,1,143,28,125,4,116,7,160,8,124,4,100,4,161,2, + 125,5,87,0,100,0,4,0,4,0,131,3,1,0,110,16, + 49,0,115,94,48,0,1,0,1,0,1,0,89,0,1,0, + 87,0,110,20,4,0,116,9,121,126,1,0,1,0,1,0, + 89,0,100,0,83,0,48,0,124,5,83,0,41,5,78,122, + 5,37,100,46,37,100,114,45,0,0,0,41,2,114,163,0, + 0,0,90,11,115,121,115,95,118,101,114,115,105,111,110,114, + 14,0,0,0,41,10,218,11,68,69,66,85,71,95,66,85, + 73,76,68,218,18,82,69,71,73,83,84,82,89,95,75,69, + 89,95,68,69,66,85,71,218,12,82,69,71,73,83,84,82, + 89,95,75,69,89,114,88,0,0,0,114,21,0,0,0,218, + 12,118,101,114,115,105,111,110,95,105,110,102,111,114,217,0, + 0,0,114,215,0,0,0,90,10,81,117,101,114,121,86,97, + 108,117,101,114,76,0,0,0,41,6,114,216,0,0,0,114, + 163,0,0,0,90,12,114,101,103,105,115,116,114,121,95,107, + 101,121,114,26,0,0,0,90,4,104,107,101,121,218,8,102, + 105,108,101,112,97,116,104,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,16,95,115,101,97,114,99,104,95, + 114,101,103,105,115,116,114,121,20,3,0,0,115,24,0,0, + 0,0,2,6,1,8,2,6,1,6,1,16,255,6,2,2, + 1,12,1,46,1,12,1,8,1,122,38,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, + 121,78,99,4,0,0,0,0,0,0,0,0,0,0,0,8, + 0,0,0,8,0,0,0,67,0,0,0,115,120,0,0,0, + 124,0,160,0,124,1,161,1,125,4,124,4,100,0,117,0, + 114,22,100,0,83,0,122,12,116,1,124,4,131,1,1,0, + 87,0,110,20,4,0,116,2,121,54,1,0,1,0,1,0, + 89,0,100,0,83,0,48,0,116,3,131,0,68,0,93,52, + 92,2,125,5,125,6,124,4,160,4,116,5,124,6,131,1, + 161,1,114,62,116,6,106,7,124,1,124,5,124,1,124,4, + 131,2,124,4,100,1,141,3,125,7,124,7,2,0,1,0, + 83,0,113,62,100,0,83,0,41,2,78,114,204,0,0,0, + 41,8,114,223,0,0,0,114,75,0,0,0,114,76,0,0, + 0,114,208,0,0,0,114,58,0,0,0,114,135,0,0,0, + 114,158,0,0,0,218,16,115,112,101,99,95,102,114,111,109, + 95,108,111,97,100,101,114,41,8,114,216,0,0,0,114,163, + 0,0,0,114,65,0,0,0,218,6,116,97,114,103,101,116, + 114,222,0,0,0,114,164,0,0,0,114,212,0,0,0,114, + 210,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,9,102,105,110,100,95,115,112,101,99,35,3, + 0,0,115,28,0,0,0,0,2,10,1,8,1,4,1,2, + 1,12,1,12,1,8,1,14,1,14,1,6,1,8,1,2, + 254,6,3,122,31,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,3,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,34,0, + 0,0,124,0,160,0,124,1,124,2,161,2,125,3,124,3, + 100,1,117,1,114,26,124,3,106,1,83,0,100,1,83,0, + 100,1,83,0,41,2,122,108,70,105,110,100,32,109,111,100, + 117,108,101,32,110,97,109,101,100,32,105,110,32,116,104,101, + 32,114,101,103,105,115,116,114,121,46,10,10,32,32,32,32, 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,41,3,218,5,115,117,112,101,114,114,239,0, - 0,0,114,220,0,0,0,114,219,0,0,0,169,1,114,241, - 0,0,0,114,5,0,0,0,114,8,0,0,0,114,220,0, - 0,0,191,3,0,0,115,2,0,0,0,0,10,122,22,70, - 105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,6, - 0,0,0,124,0,106,0,83,0,169,1,122,58,82,101,116, - 117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32, - 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,32, - 97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,32, - 102,105,110,100,101,114,46,114,48,0,0,0,114,219,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,179,0,0,0,203,3,0,0,115,2,0,0,0,0,3, - 122,23,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,102,105,108,101,110,97,109,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, - 0,0,115,126,0,0,0,116,0,124,0,116,1,116,2,102, - 2,131,2,114,70,116,3,160,4,116,5,124,1,131,1,161, - 1,143,24,125,2,124,2,160,6,161,0,87,0,2,0,100, - 1,4,0,4,0,131,3,1,0,83,0,49,0,115,58,48, - 0,1,0,1,0,1,0,89,0,1,0,110,52,116,3,160, - 7,124,1,100,2,161,2,143,24,125,2,124,2,160,6,161, - 0,87,0,2,0,100,1,4,0,4,0,131,3,1,0,83, - 0,49,0,115,112,48,0,1,0,1,0,1,0,89,0,1, - 0,100,1,83,0,41,3,122,39,82,101,116,117,114,110,32, - 116,104,101,32,100,97,116,97,32,102,114,111,109,32,112,97, - 116,104,32,97,115,32,114,97,119,32,98,121,116,101,115,46, - 78,218,1,114,41,8,114,161,0,0,0,114,221,0,0,0, - 218,19,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,114,64,0,0,0,90,9,111,112,101,110, - 95,99,111,100,101,114,84,0,0,0,90,4,114,101,97,100, - 114,65,0,0,0,41,3,114,118,0,0,0,114,44,0,0, - 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,227,0,0,0,208,3,0,0,115,10, - 0,0,0,0,2,14,1,16,1,40,2,14,1,122,19,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,100,97, - 116,97,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0, - 124,0,160,0,124,1,161,1,114,14,124,0,83,0,100,0, - 83,0,114,109,0,0,0,41,1,114,182,0,0,0,169,2, - 114,118,0,0,0,114,216,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,19,103,101,116,95,114, - 101,115,111,117,114,99,101,95,114,101,97,100,101,114,219,3, - 0,0,115,6,0,0,0,0,2,10,1,4,1,122,30,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101, - 115,111,117,114,99,101,95,114,101,97,100,101,114,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,32,0,0,0,116,0,116,1,124, - 0,106,2,131,1,100,1,25,0,124,1,131,2,125,2,116, - 3,160,4,124,2,100,2,161,2,83,0,41,3,78,114,73, - 0,0,0,114,251,0,0,0,41,5,114,38,0,0,0,114, - 47,0,0,0,114,44,0,0,0,114,64,0,0,0,114,65, - 0,0,0,169,3,114,118,0,0,0,90,8,114,101,115,111, - 117,114,99,101,114,44,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,13,111,112,101,110,95,114, - 101,115,111,117,114,99,101,225,3,0,0,115,4,0,0,0, - 0,1,20,1,122,24,70,105,108,101,76,111,97,100,101,114, - 46,111,112,101,110,95,114,101,115,111,117,114,99,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,124,0,160,0, - 124,1,161,1,115,14,116,1,130,1,116,2,116,3,124,0, - 106,4,131,1,100,1,25,0,124,1,131,2,125,2,124,2, - 83,0,169,2,78,114,73,0,0,0,41,5,218,11,105,115, - 95,114,101,115,111,117,114,99,101,218,17,70,105,108,101,78, - 111,116,70,111,117,110,100,69,114,114,111,114,114,38,0,0, - 0,114,47,0,0,0,114,44,0,0,0,114,255,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 13,114,101,115,111,117,114,99,101,95,112,97,116,104,229,3, - 0,0,115,8,0,0,0,0,1,10,1,4,1,20,1,122, - 24,70,105,108,101,76,111,97,100,101,114,46,114,101,115,111, - 117,114,99,101,95,112,97,116,104,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,40,0,0,0,116,0,124,1,118,0,114,12,100, - 1,83,0,116,1,116,2,124,0,106,3,131,1,100,2,25, - 0,124,1,131,2,125,2,116,4,124,2,131,1,83,0,41, - 3,78,70,114,73,0,0,0,41,5,114,35,0,0,0,114, - 38,0,0,0,114,47,0,0,0,114,44,0,0,0,114,54, - 0,0,0,169,3,114,118,0,0,0,114,116,0,0,0,114, - 44,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,2,1,0,0,235,3,0,0,115,8,0,0, - 0,0,1,8,1,4,1,20,1,122,22,70,105,108,101,76, - 111,97,100,101,114,46,105,115,95,114,101,115,111,117,114,99, - 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,5,0,0,0,67,0,0,0,115,24,0,0,0,116, - 0,116,1,160,2,116,3,124,0,106,4,131,1,100,1,25, - 0,161,1,131,1,83,0,114,1,1,0,0,41,5,218,4, - 105,116,101,114,114,4,0,0,0,218,7,108,105,115,116,100, - 105,114,114,47,0,0,0,114,44,0,0,0,114,246,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 218,8,99,111,110,116,101,110,116,115,241,3,0,0,115,2, - 0,0,0,0,1,122,19,70,105,108,101,76,111,97,100,101, - 114,46,99,111,110,116,101,110,116,115,41,17,114,125,0,0, - 0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0, - 114,209,0,0,0,114,243,0,0,0,114,247,0,0,0,114, - 136,0,0,0,114,220,0,0,0,114,179,0,0,0,114,227, - 0,0,0,114,254,0,0,0,114,0,1,0,0,114,4,1, - 0,0,114,2,1,0,0,114,8,1,0,0,90,13,95,95, - 99,108,97,115,115,99,101,108,108,95,95,114,5,0,0,0, - 114,5,0,0,0,114,249,0,0,0,114,8,0,0,0,114, - 239,0,0,0,173,3,0,0,115,30,0,0,0,8,2,4, - 3,8,6,8,4,8,3,2,1,14,11,2,1,10,4,8, - 11,2,1,10,5,8,4,8,6,8,6,114,239,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,64,0,0,0,115,46,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, - 90,4,100,4,100,5,132,0,90,5,100,6,100,7,156,1, - 100,8,100,9,132,2,90,6,100,10,83,0,41,11,218,16, - 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, - 122,62,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,83,111,117, - 114,99,101,76,111,97,100,101,114,32,117,115,105,110,103,32, - 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46, + 32,32,32,32,78,169,2,114,226,0,0,0,114,164,0,0, + 0,169,4,114,216,0,0,0,114,163,0,0,0,114,65,0, + 0,0,114,210,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,11,102,105,110,100,95,109,111,100, + 117,108,101,51,3,0,0,115,8,0,0,0,0,7,12,1, + 8,1,6,2,122,33,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,102,105,110,100, + 95,109,111,100,117,108,101,41,2,78,78,41,1,78,41,12, + 114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,114, + 151,0,0,0,114,220,0,0,0,114,219,0,0,0,114,218, + 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, + 114,217,0,0,0,114,223,0,0,0,114,226,0,0,0,114, + 229,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,214,0,0,0,1,3,0, + 0,115,28,0,0,0,8,2,4,3,2,255,2,4,2,255, + 2,3,4,2,2,1,10,6,2,1,10,14,2,1,12,15, + 2,1,114,214,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, + 115,48,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, + 5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,90, + 7,100,10,83,0,41,11,218,13,95,76,111,97,100,101,114, + 66,97,115,105,99,115,122,83,66,97,115,101,32,99,108,97, + 115,115,32,111,102,32,99,111,109,109,111,110,32,99,111,100, + 101,32,110,101,101,100,101,100,32,98,121,32,98,111,116,104, + 32,83,111,117,114,99,101,76,111,97,100,101,114,32,97,110, + 100,10,32,32,32,32,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,46,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, + 67,0,0,0,115,64,0,0,0,116,0,124,0,160,1,124, + 1,161,1,131,1,100,1,25,0,125,2,124,2,160,2,100, + 2,100,1,161,2,100,3,25,0,125,3,124,1,160,3,100, + 2,161,1,100,4,25,0,125,4,124,3,100,5,107,2,111, + 62,124,4,100,5,107,3,83,0,41,6,122,141,67,111,110, + 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, + 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, + 32,98,121,32,99,104,101,99,107,105,110,103,32,105,102,10, + 32,32,32,32,32,32,32,32,116,104,101,32,112,97,116,104, + 32,114,101,116,117,114,110,101,100,32,98,121,32,103,101,116, + 95,102,105,108,101,110,97,109,101,32,104,97,115,32,97,32, + 102,105,108,101,110,97,109,101,32,111,102,32,39,95,95,105, + 110,105,116,95,95,46,112,121,39,46,114,4,0,0,0,114, + 96,0,0,0,114,0,0,0,0,114,45,0,0,0,218,8, + 95,95,105,110,105,116,95,95,41,4,114,74,0,0,0,114, + 203,0,0,0,114,124,0,0,0,114,103,0,0,0,41,5, + 114,142,0,0,0,114,163,0,0,0,114,119,0,0,0,90, + 13,102,105,108,101,110,97,109,101,95,98,97,115,101,90,9, + 116,97,105,108,95,110,97,109,101,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,206,0,0,0,70,3,0, + 0,115,8,0,0,0,0,3,18,1,16,1,14,1,122,24, + 95,76,111,97,100,101,114,66,97,115,105,99,115,46,105,115, + 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,83,0,169,2,122,42,85,115, + 101,32,100,101,102,97,117,108,116,32,115,101,109,97,110,116, + 105,99,115,32,102,111,114,32,109,111,100,117,108,101,32,99, + 114,101,97,116,105,111,110,46,78,114,10,0,0,0,169,2, + 114,142,0,0,0,114,210,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,13,99,114,101,97,116, + 101,95,109,111,100,117,108,101,78,3,0,0,115,2,0,0, + 0,0,1,122,27,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,99,114,101,97,116,101,95,109,111,100,117,108,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,22,0,0,0,116,0, - 124,1,131,1,125,2,124,2,106,1,124,2,106,2,100,1, - 156,2,83,0,41,2,122,33,82,101,116,117,114,110,32,116, - 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, - 116,104,101,32,112,97,116,104,46,41,2,114,169,0,0,0, - 114,234,0,0,0,41,3,114,49,0,0,0,218,8,115,116, - 95,109,116,105,109,101,90,7,115,116,95,115,105,122,101,41, - 3,114,118,0,0,0,114,44,0,0,0,114,238,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 224,0,0,0,249,3,0,0,115,4,0,0,0,0,2,8, - 1,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, - 0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1, - 131,1,125,4,124,0,106,1,124,2,124,3,124,4,100,1, - 141,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101, - 41,2,114,114,0,0,0,114,225,0,0,0,41,5,114,118, - 0,0,0,114,107,0,0,0,114,106,0,0,0,114,26,0, - 0,0,114,52,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,114,226,0,0,0,254,3,0,0,115, - 4,0,0,0,0,2,8,1,122,32,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, - 101,95,98,121,116,101,99,111,100,101,114,60,0,0,0,114, - 11,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, - 0,9,0,0,0,11,0,0,0,67,0,0,0,115,252,0, - 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0, - 125,6,124,4,114,52,116,1,124,4,131,1,115,52,116,0, - 124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7, - 161,1,1,0,113,16,116,3,124,6,131,1,68,0,93,104, - 125,7,116,4,124,4,124,7,131,2,125,4,122,14,116,5, - 160,6,124,4,161,1,1,0,87,0,113,60,4,0,116,7, - 121,110,1,0,1,0,1,0,89,0,113,60,89,0,113,60, - 4,0,116,8,121,162,1,0,125,8,1,0,122,30,116,9, - 160,10,100,1,124,4,124,8,161,3,1,0,87,0,89,0, - 100,2,125,8,126,8,1,0,100,2,83,0,100,2,125,8, - 126,8,48,0,48,0,113,60,122,28,116,11,124,1,124,2, - 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, - 1,0,87,0,110,52,4,0,116,8,144,0,121,246,1,0, - 125,8,1,0,122,26,116,9,160,10,100,1,124,1,124,8, - 161,3,1,0,87,0,89,0,100,2,125,8,126,8,110,10, - 100,2,125,8,126,8,48,0,48,0,100,2,83,0,41,4, - 122,27,87,114,105,116,101,32,98,121,116,101,115,32,100,97, - 116,97,32,116,111,32,97,32,102,105,108,101,46,122,27,99, - 111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32, - 123,33,114,125,58,32,123,33,114,125,78,122,12,99,114,101, - 97,116,101,100,32,123,33,114,125,41,12,114,47,0,0,0, - 114,56,0,0,0,114,186,0,0,0,114,42,0,0,0,114, - 38,0,0,0,114,4,0,0,0,90,5,109,107,100,105,114, - 218,15,70,105,108,101,69,120,105,115,116,115,69,114,114,111, - 114,114,50,0,0,0,114,134,0,0,0,114,149,0,0,0, - 114,69,0,0,0,41,9,114,118,0,0,0,114,44,0,0, - 0,114,26,0,0,0,114,12,1,0,0,218,6,112,97,114, - 101,110,116,114,96,0,0,0,114,37,0,0,0,114,33,0, - 0,0,114,228,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,114,225,0,0,0,3,4,0,0,115, - 46,0,0,0,0,2,12,1,4,2,12,1,12,1,12,2, - 12,1,10,1,2,1,14,1,12,2,8,1,14,3,6,1, - 4,255,4,2,28,1,2,1,12,1,16,1,16,2,8,1, - 2,255,122,25,83,111,117,114,99,101,70,105,108,101,76,111, - 97,100,101,114,46,115,101,116,95,100,97,116,97,78,41,7, - 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, - 127,0,0,0,114,224,0,0,0,114,226,0,0,0,114,225, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,9,1,0,0,245,3,0,0, - 115,8,0,0,0,8,2,4,2,8,5,8,5,114,9,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,32,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,83,0, - 41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, - 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, - 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, - 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, - 115,68,0,0,0,124,0,160,0,124,1,161,1,125,2,124, - 0,160,1,124,2,161,1,125,3,124,1,124,2,100,1,156, - 2,125,4,116,2,124,3,124,1,124,4,131,3,1,0,116, - 3,116,4,124,3,131,1,100,2,100,0,133,2,25,0,124, - 1,124,2,100,3,141,3,83,0,41,4,78,114,159,0,0, - 0,114,145,0,0,0,41,2,114,116,0,0,0,114,106,0, - 0,0,41,5,114,179,0,0,0,114,227,0,0,0,114,152, - 0,0,0,114,165,0,0,0,114,235,0,0,0,41,5,114, - 118,0,0,0,114,139,0,0,0,114,44,0,0,0,114,26, - 0,0,0,114,151,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,213,0,0,0,38,4,0,0, - 115,22,0,0,0,0,1,10,1,10,4,2,1,2,254,6, - 4,12,1,2,1,14,1,2,1,2,253,122,29,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,39, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, - 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,114,5,0,0,0,114,219,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0, - 0,114,229,0,0,0,54,4,0,0,115,2,0,0,0,0, - 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, - 99,101,78,41,6,114,125,0,0,0,114,124,0,0,0,114, - 126,0,0,0,114,127,0,0,0,114,213,0,0,0,114,229, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,15,1,0,0,34,4,0,0, - 115,6,0,0,0,8,2,4,2,8,16,114,15,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,64,0,0,0,115,92,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, - 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, - 90,6,100,8,100,9,132,0,90,7,100,10,100,11,132,0, - 90,8,100,12,100,13,132,0,90,9,100,14,100,15,132,0, - 90,10,100,16,100,17,132,0,90,11,101,12,100,18,100,19, - 132,0,131,1,90,13,100,20,83,0,41,21,114,252,0,0, - 0,122,93,76,111,97,100,101,114,32,102,111,114,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,84,104,101,32,99,111,110,115,116,114, - 117,99,116,111,114,32,105,115,32,100,101,115,105,103,110,101, - 100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,70, - 105,108,101,70,105,110,100,101,114,46,10,10,32,32,32,32, - 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, - 124,0,95,0,124,2,124,0,95,1,100,0,83,0,114,109, - 0,0,0,114,159,0,0,0,114,5,1,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,114,209,0,0, - 0,71,4,0,0,115,4,0,0,0,0,1,6,1,122,28, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,115,24,0,0,0,124,0,106,0,124,1, - 106,0,107,2,111,22,124,0,106,1,124,1,106,1,107,2, - 83,0,114,109,0,0,0,114,240,0,0,0,114,242,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,243,0,0,0,75,4,0,0,115,6,0,0,0,0,1, - 12,1,10,255,122,26,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,20,0,0,0,116,0, - 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, - 83,0,114,109,0,0,0,114,244,0,0,0,114,246,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,247,0,0,0,79,4,0,0,115,2,0,0,0,0,1, - 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5, - 0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1, - 116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1, - 124,1,106,5,124,0,106,6,161,3,1,0,124,2,83,0, - 41,2,122,38,67,114,101,97,116,101,32,97,110,32,117,110, - 105,116,105,97,108,105,122,101,100,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,122,38,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,32,123,33,114, - 125,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33, - 114,125,41,7,114,134,0,0,0,114,214,0,0,0,114,163, - 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, - 109,105,99,114,149,0,0,0,114,116,0,0,0,114,44,0, - 0,0,41,3,114,118,0,0,0,114,187,0,0,0,114,216, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,212,0,0,0,82,4,0,0,115,14,0,0,0, - 0,2,4,1,6,255,4,2,6,1,8,255,4,2,122,33, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, - 0,160,1,116,2,106,3,124,1,161,2,1,0,116,0,160, - 4,100,1,124,0,106,5,124,0,106,6,161,3,1,0,100, - 2,83,0,41,3,122,30,73,110,105,116,105,97,108,105,122, - 101,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,122,40,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,32,123,33,114,125,32,101,120,101, - 99,117,116,101,100,32,102,114,111,109,32,123,33,114,125,78, - 41,7,114,134,0,0,0,114,214,0,0,0,114,163,0,0, - 0,90,12,101,120,101,99,95,100,121,110,97,109,105,99,114, - 149,0,0,0,114,116,0,0,0,114,44,0,0,0,114,253, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,217,0,0,0,90,4,0,0,115,8,0,0,0, - 0,2,14,1,6,1,8,255,122,31,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,0, - 0,0,115,36,0,0,0,116,0,124,0,106,1,131,1,100, - 1,25,0,137,0,116,2,135,0,102,1,100,2,100,3,132, - 8,116,3,68,0,131,1,131,1,83,0,41,4,122,49,82, - 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, - 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, - 114,39,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,26, - 0,0,0,124,0,93,18,125,1,136,0,100,0,124,1,23, - 0,107,2,86,0,1,0,113,2,100,1,83,0,41,2,114, - 209,0,0,0,78,114,5,0,0,0,169,2,114,32,0,0, - 0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,108, - 101,95,110,97,109,101,114,5,0,0,0,114,8,0,0,0, - 218,9,60,103,101,110,101,120,112,114,62,99,4,0,0,115, - 4,0,0,0,4,1,2,255,122,49,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, - 95,112,97,99,107,97,103,101,46,60,108,111,99,97,108,115, - 62,46,60,103,101,110,101,120,112,114,62,41,4,114,47,0, - 0,0,114,44,0,0,0,218,3,97,110,121,218,18,69,88, - 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, - 114,219,0,0,0,114,5,0,0,0,114,18,1,0,0,114, - 8,0,0,0,114,182,0,0,0,96,4,0,0,115,8,0, - 0,0,0,2,14,1,12,1,2,255,122,30,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,63, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,97, - 110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,99,97,110,110,111,116,32,99,114,101,97,116,101, - 32,97,32,99,111,100,101,32,111,98,106,101,99,116,46,78, - 114,5,0,0,0,114,219,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,213,0,0,0,102,4, - 0,0,115,2,0,0,0,0,2,122,28,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,83,0,41,2,122,53,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97, - 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,5,0,0,0,114,219,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,114,229,0,0, - 0,106,4,0,0,115,2,0,0,0,0,2,122,30,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,0, - 114,250,0,0,0,114,48,0,0,0,114,219,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,179, - 0,0,0,110,4,0,0,115,2,0,0,0,0,3,122,32, + 0,5,0,0,0,67,0,0,0,115,56,0,0,0,124,0, + 160,0,124,1,106,1,161,1,125,2,124,2,100,1,117,0, + 114,36,116,2,100,2,160,3,124,1,106,1,161,1,131,1, + 130,1,116,4,160,5,116,6,124,2,124,1,106,7,161,3, + 1,0,100,1,83,0,41,3,122,19,69,120,101,99,117,116, + 101,32,116,104,101,32,109,111,100,117,108,101,46,78,122,52, + 99,97,110,110,111,116,32,108,111,97,100,32,109,111,100,117, + 108,101,32,123,33,114,125,32,119,104,101,110,32,103,101,116, + 95,99,111,100,101,40,41,32,114,101,116,117,114,110,115,32, + 78,111,110,101,41,8,218,8,103,101,116,95,99,111,100,101, + 114,149,0,0,0,114,141,0,0,0,114,88,0,0,0,114, + 158,0,0,0,218,25,95,99,97,108,108,95,119,105,116,104, + 95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,218, + 4,101,120,101,99,114,155,0,0,0,41,3,114,142,0,0, + 0,218,6,109,111,100,117,108,101,114,188,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,11,101, + 120,101,99,95,109,111,100,117,108,101,81,3,0,0,115,12, + 0,0,0,0,2,12,1,8,1,6,1,4,255,6,2,122, + 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,101, + 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,12,0,0,0,116,0,160,1,124,0,124,1, + 161,2,83,0,41,1,122,26,84,104,105,115,32,109,111,100, + 117,108,101,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,41,2,114,158,0,0,0,218,17,95,108,111,97,100, + 95,109,111,100,117,108,101,95,115,104,105,109,169,2,114,142, + 0,0,0,114,163,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,11,108,111,97,100,95,109,111, + 100,117,108,101,89,3,0,0,115,2,0,0,0,0,2,122, + 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,108, + 111,97,100,95,109,111,100,117,108,101,78,41,8,114,149,0, + 0,0,114,148,0,0,0,114,150,0,0,0,114,151,0,0, + 0,114,206,0,0,0,114,235,0,0,0,114,240,0,0,0, + 114,243,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,231,0,0,0,65,3, + 0,0,115,10,0,0,0,8,2,4,3,8,8,8,3,8, + 8,114,231,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, + 74,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, + 132,0,90,5,100,7,100,8,132,0,90,6,100,9,100,10, + 132,0,90,7,100,11,100,12,156,1,100,13,100,14,132,2, + 90,8,100,15,100,16,132,0,90,9,100,17,83,0,41,18, + 218,12,83,111,117,114,99,101,76,111,97,100,101,114,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,8,0,0,0,116,0,130,1, + 100,1,83,0,41,2,122,165,79,112,116,105,111,110,97,108, + 32,109,101,116,104,111,100,32,116,104,97,116,32,114,101,116, + 117,114,110,115,32,116,104,101,32,109,111,100,105,102,105,99, + 97,116,105,111,110,32,116,105,109,101,32,40,97,110,32,105, + 110,116,41,32,102,111,114,32,116,104,101,10,32,32,32,32, + 32,32,32,32,115,112,101,99,105,102,105,101,100,32,112,97, + 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,78,41,1, + 114,76,0,0,0,169,2,114,142,0,0,0,114,65,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,10,112,97,116,104,95,109,116,105,109,101,96,3,0,0, + 115,2,0,0,0,0,6,122,23,83,111,117,114,99,101,76, + 111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,14,0,0,0,100,1, + 124,0,160,0,124,1,161,1,105,1,83,0,41,2,97,158, + 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, + 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, + 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,10,32, + 32,32,32,32,32,32,32,112,97,116,104,32,40,97,32,115, + 116,114,41,46,10,10,32,32,32,32,32,32,32,32,80,111, + 115,115,105,98,108,101,32,107,101,121,115,58,10,32,32,32, + 32,32,32,32,32,45,32,39,109,116,105,109,101,39,32,40, + 109,97,110,100,97,116,111,114,121,41,32,105,115,32,116,104, + 101,32,110,117,109,101,114,105,99,32,116,105,109,101,115,116, + 97,109,112,32,111,102,32,108,97,115,116,32,115,111,117,114, + 99,101,10,32,32,32,32,32,32,32,32,32,32,99,111,100, + 101,32,109,111,100,105,102,105,99,97,116,105,111,110,59,10, + 32,32,32,32,32,32,32,32,45,32,39,115,105,122,101,39, + 32,40,111,112,116,105,111,110,97,108,41,32,105,115,32,116, + 104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115, + 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,10,10,32,32,32,32,32,32,32,32,73,109, + 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, + 109,101,116,104,111,100,32,97,108,108,111,119,115,32,116,104, + 101,32,108,111,97,100,101,114,32,116,111,32,114,101,97,100, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, + 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, + 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, + 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, + 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, + 32,114,193,0,0,0,41,1,114,246,0,0,0,114,245,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,10,112,97,116,104,95,115,116,97,116,115,104,3,0, + 0,115,2,0,0,0,0,12,122,23,83,111,117,114,99,101, + 76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116, + 115,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,4,0,0,0,67,0,0,0,115,12,0,0,0,124, + 0,160,0,124,2,124,3,161,2,83,0,41,1,122,228,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, + 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, + 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, + 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, + 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,101, + 32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,32, + 105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,114, + 101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,112, + 101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,32, + 32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,41, + 4,114,142,0,0,0,114,133,0,0,0,90,10,99,97,99, + 104,101,95,112,97,116,104,114,43,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,15,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,118,3,0,0, + 115,2,0,0,0,0,8,122,28,83,111,117,114,99,101,76, + 111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116, + 101,99,111,100,101,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,122,150,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,119,114,105,116,101,115,32,100,97,116,97,32,40,98,121, + 116,101,115,41,32,116,111,32,97,32,102,105,108,101,32,112, + 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, + 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, + 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, + 108,108,111,119,115,32,102,111,114,32,116,104,101,32,119,114, + 105,116,105,110,103,32,111,102,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,32, + 32,78,114,10,0,0,0,41,3,114,142,0,0,0,114,65, + 0,0,0,114,43,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,248,0,0,0,128,3,0,0, + 115,2,0,0,0,0,1,122,21,83,111,117,114,99,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,10, + 0,0,0,67,0,0,0,115,84,0,0,0,124,0,160,0, + 124,1,161,1,125,2,122,14,124,0,160,1,124,2,161,1, + 125,3,87,0,110,50,4,0,116,2,121,74,1,0,125,4, + 1,0,122,26,116,3,100,1,124,1,100,2,141,2,124,4, + 130,2,87,0,89,0,100,3,125,4,126,4,110,10,100,3, + 125,4,126,4,48,0,48,0,116,4,124,3,131,1,83,0, + 41,4,122,52,67,111,110,99,114,101,116,101,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, + 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,46,122,39,115,111,117,114,99,101, + 32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,116, + 104,114,111,117,103,104,32,103,101,116,95,100,97,116,97,40, + 41,114,139,0,0,0,78,41,5,114,203,0,0,0,218,8, + 103,101,116,95,100,97,116,97,114,76,0,0,0,114,141,0, + 0,0,114,200,0,0,0,41,5,114,142,0,0,0,114,163, + 0,0,0,114,65,0,0,0,114,198,0,0,0,218,3,101, + 120,99,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,10,103,101,116,95,115,111,117,114,99,101,135,3,0, + 0,115,20,0,0,0,0,2,10,1,2,1,14,1,14,1, + 4,1,2,255,4,1,2,255,24,2,122,23,83,111,117,114, + 99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,114,129,0,0,0,41,1,218,9,95,111,112,116, + 105,109,105,122,101,99,3,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,8,0,0,0,67,0,0,0,115,22, + 0,0,0,116,0,106,1,116,2,124,1,124,2,100,1,100, + 2,124,3,100,3,141,6,83,0,41,4,122,130,82,101,116, + 117,114,110,32,116,104,101,32,99,111,100,101,32,111,98,106, + 101,99,116,32,99,111,109,112,105,108,101,100,32,102,114,111, + 109,32,115,111,117,114,99,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,101,32,39,100,97,116,97,39,32,97,114, + 103,117,109,101,110,116,32,99,97,110,32,98,101,32,97,110, + 121,32,111,98,106,101,99,116,32,116,121,112,101,32,116,104, + 97,116,32,99,111,109,112,105,108,101,40,41,32,115,117,112, + 112,111,114,116,115,46,10,32,32,32,32,32,32,32,32,114, + 238,0,0,0,84,41,2,218,12,100,111,110,116,95,105,110, + 104,101,114,105,116,114,107,0,0,0,41,3,114,158,0,0, + 0,114,237,0,0,0,218,7,99,111,109,112,105,108,101,41, + 4,114,142,0,0,0,114,43,0,0,0,114,65,0,0,0, + 114,253,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,14,115,111,117,114,99,101,95,116,111,95, + 99,111,100,101,145,3,0,0,115,6,0,0,0,0,5,12, + 1,4,255,122,27,83,111,117,114,99,101,76,111,97,100,101, + 114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,15,0,0, + 0,9,0,0,0,67,0,0,0,115,24,2,0,0,124,0, + 160,0,124,1,161,1,125,2,100,1,125,3,100,1,125,4, + 100,1,125,5,100,2,125,6,100,3,125,7,122,12,116,1, + 124,2,131,1,125,8,87,0,110,24,4,0,116,2,121,66, + 1,0,1,0,1,0,100,1,125,8,89,0,144,1,110,42, + 48,0,122,14,124,0,160,3,124,2,161,1,125,9,87,0, + 110,20,4,0,116,4,121,102,1,0,1,0,1,0,89,0, + 144,1,110,6,48,0,116,5,124,9,100,4,25,0,131,1, + 125,3,122,14,124,0,160,6,124,8,161,1,125,10,87,0, + 110,18,4,0,116,4,121,148,1,0,1,0,1,0,89,0, + 110,216,48,0,124,1,124,8,100,5,156,2,125,11,122,148, + 116,7,124,10,124,1,124,11,131,3,125,12,116,8,124,10, + 131,1,100,6,100,1,133,2,25,0,125,13,124,12,100,7, + 64,0,100,8,107,3,125,6,124,6,144,1,114,30,124,12, + 100,9,64,0,100,8,107,3,125,7,116,9,106,10,100,10, + 107,3,144,1,114,50,124,7,115,248,116,9,106,10,100,11, + 107,2,144,1,114,50,124,0,160,6,124,2,161,1,125,4, + 116,9,160,11,116,12,124,4,161,2,125,5,116,13,124,10, + 124,5,124,1,124,11,131,4,1,0,110,20,116,14,124,10, + 124,3,124,9,100,12,25,0,124,1,124,11,131,5,1,0, + 87,0,110,24,4,0,116,15,116,16,102,2,144,1,121,76, + 1,0,1,0,1,0,89,0,110,32,48,0,116,17,160,18, + 100,13,124,8,124,2,161,3,1,0,116,19,124,13,124,1, + 124,8,124,2,100,14,141,4,83,0,124,4,100,1,117,0, + 144,1,114,128,124,0,160,6,124,2,161,1,125,4,124,0, + 160,20,124,4,124,2,161,2,125,14,116,17,160,18,100,15, + 124,2,161,2,1,0,116,21,106,22,144,2,115,20,124,8, + 100,1,117,1,144,2,114,20,124,3,100,1,117,1,144,2, + 114,20,124,6,144,1,114,220,124,5,100,1,117,0,144,1, + 114,206,116,9,160,11,124,4,161,1,125,5,116,23,124,14, + 124,5,124,7,131,3,125,10,110,16,116,24,124,14,124,3, + 116,25,124,4,131,1,131,3,125,10,122,18,124,0,160,26, + 124,2,124,8,124,10,161,3,1,0,87,0,110,20,4,0, + 116,2,144,2,121,18,1,0,1,0,1,0,89,0,110,2, + 48,0,124,14,83,0,41,16,122,190,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, + 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, + 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, + 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, + 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, + 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, + 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, + 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, + 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, + 32,32,32,32,32,32,32,32,78,70,84,114,193,0,0,0, + 114,183,0,0,0,114,169,0,0,0,114,4,0,0,0,114, + 0,0,0,0,114,45,0,0,0,90,5,110,101,118,101,114, + 90,6,97,108,119,97,121,115,218,4,115,105,122,101,122,13, + 123,125,32,109,97,116,99,104,101,115,32,123,125,41,3,114, + 140,0,0,0,114,131,0,0,0,114,133,0,0,0,122,19, + 99,111,100,101,32,111,98,106,101,99,116,32,102,114,111,109, + 32,123,125,41,27,114,203,0,0,0,114,120,0,0,0,114, + 106,0,0,0,114,247,0,0,0,114,76,0,0,0,114,36, + 0,0,0,114,250,0,0,0,114,176,0,0,0,218,10,109, + 101,109,111,114,121,118,105,101,119,114,187,0,0,0,90,21, + 99,104,101,99,107,95,104,97,115,104,95,98,97,115,101,100, + 95,112,121,99,115,114,181,0,0,0,218,17,95,82,65,87, + 95,77,65,71,73,67,95,78,85,77,66,69,82,114,182,0, + 0,0,114,180,0,0,0,114,141,0,0,0,114,174,0,0, + 0,114,158,0,0,0,114,173,0,0,0,114,189,0,0,0, + 114,0,1,0,0,114,21,0,0,0,218,19,100,111,110,116, + 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, + 195,0,0,0,114,194,0,0,0,114,6,0,0,0,114,249, + 0,0,0,41,15,114,142,0,0,0,114,163,0,0,0,114, + 133,0,0,0,114,178,0,0,0,114,198,0,0,0,114,181, + 0,0,0,90,10,104,97,115,104,95,98,97,115,101,100,90, + 12,99,104,101,99,107,95,115,111,117,114,99,101,114,131,0, + 0,0,218,2,115,116,114,43,0,0,0,114,175,0,0,0, + 114,22,0,0,0,90,10,98,121,116,101,115,95,100,97,116, + 97,90,11,99,111,100,101,95,111,98,106,101,99,116,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,236,0, + 0,0,153,3,0,0,115,152,0,0,0,0,7,10,1,4, + 1,4,1,4,1,4,1,4,1,2,1,12,1,12,1,12, + 2,2,1,14,1,12,1,8,2,12,1,2,1,14,1,12, + 1,6,3,2,1,2,254,6,4,2,1,12,1,16,1,12, + 1,6,1,12,1,12,1,2,255,2,2,8,254,4,3,10, + 1,4,1,2,1,2,254,4,4,8,1,2,255,6,3,2, + 1,2,1,2,1,6,1,2,1,2,251,8,7,18,1,6, + 2,8,1,2,255,4,2,6,1,2,1,2,254,6,3,10, + 1,10,1,12,1,12,1,18,1,6,255,4,2,6,1,10, + 1,10,1,14,2,6,1,6,255,4,2,2,1,18,1,14, + 1,6,1,122,21,83,111,117,114,99,101,76,111,97,100,101, + 114,46,103,101,116,95,99,111,100,101,78,41,10,114,149,0, + 0,0,114,148,0,0,0,114,150,0,0,0,114,246,0,0, + 0,114,247,0,0,0,114,249,0,0,0,114,248,0,0,0, + 114,252,0,0,0,114,0,1,0,0,114,236,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,244,0,0,0,94,3,0,0,115,14,0,0, + 0,8,2,8,8,8,14,8,10,8,7,8,10,14,8,114, + 244,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,0,0,0,0,115,124,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 100,7,132,0,90,6,101,7,135,0,102,1,100,8,100,9, + 132,8,131,1,90,8,101,7,100,10,100,11,132,0,131,1, + 90,9,100,12,100,13,132,0,90,10,101,7,100,14,100,15, + 132,0,131,1,90,11,100,16,100,17,132,0,90,12,100,18, + 100,19,132,0,90,13,100,20,100,21,132,0,90,14,100,22, + 100,23,132,0,90,15,135,0,4,0,90,16,83,0,41,24, + 218,10,70,105,108,101,76,111,97,100,101,114,122,103,66,97, + 115,101,32,102,105,108,101,32,108,111,97,100,101,114,32,99, + 108,97,115,115,32,119,104,105,99,104,32,105,109,112,108,101, + 109,101,110,116,115,32,116,104,101,32,108,111,97,100,101,114, + 32,112,114,111,116,111,99,111,108,32,109,101,116,104,111,100, + 115,32,116,104,97,116,10,32,32,32,32,114,101,113,117,105, + 114,101,32,102,105,108,101,32,115,121,115,116,101,109,32,117, + 115,97,103,101,46,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, + 1,83,0,41,2,122,75,67,97,99,104,101,32,116,104,101, + 32,109,111,100,117,108,101,32,110,97,109,101,32,97,110,100, + 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, + 32,102,105,108,101,32,102,111,117,110,100,32,98,121,32,116, + 104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,101, + 114,46,78,114,183,0,0,0,41,3,114,142,0,0,0,114, + 163,0,0,0,114,65,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,232,0,0,0,243,3,0, + 0,115,4,0,0,0,0,3,6,1,122,19,70,105,108,101, + 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 2,0,0,0,67,0,0,0,115,24,0,0,0,124,0,106, + 0,124,1,106,0,107,2,111,22,124,0,106,1,124,1,106, + 1,107,2,83,0,114,69,0,0,0,169,2,218,9,95,95, + 99,108,97,115,115,95,95,114,155,0,0,0,169,2,114,142, + 0,0,0,90,5,111,116,104,101,114,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,6,95,95,101,113,95, + 95,249,3,0,0,115,6,0,0,0,0,1,12,1,10,255, + 122,17,70,105,108,101,76,111,97,100,101,114,46,95,95,101, + 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,20,0,0, + 0,116,0,124,0,106,1,131,1,116,0,124,0,106,2,131, + 1,65,0,83,0,114,69,0,0,0,169,3,218,4,104,97, + 115,104,114,140,0,0,0,114,65,0,0,0,169,1,114,142, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,8,95,95,104,97,115,104,95,95,253,3,0,0, + 115,2,0,0,0,0,1,122,19,70,105,108,101,76,111,97, + 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,3,0,0,0,115,16,0,0,0,116,0,116,1,124,0, + 131,2,160,2,124,1,161,1,83,0,41,1,122,100,76,111, + 97,100,32,97,32,109,111,100,117,108,101,32,102,114,111,109, + 32,97,32,102,105,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,41,3,218,5,115,117,112,101,114,114,6,1,0,0, + 114,243,0,0,0,114,242,0,0,0,169,1,114,8,1,0, + 0,114,10,0,0,0,114,11,0,0,0,114,243,0,0,0, + 0,4,0,0,115,2,0,0,0,0,10,122,22,70,105,108, + 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,6,0,0, + 0,124,0,106,0,83,0,169,1,122,58,82,101,116,117,114, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115, + 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105, + 110,100,101,114,46,114,71,0,0,0,114,242,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,203, + 0,0,0,12,4,0,0,115,2,0,0,0,0,3,122,23, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,102, + 105,108,101,110,97,109,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0, + 115,126,0,0,0,116,0,124,0,116,1,116,2,102,2,131, + 2,114,70,116,3,160,4,116,5,124,1,131,1,161,1,143, + 24,125,2,124,2,160,6,161,0,87,0,2,0,100,1,4, + 0,4,0,131,3,1,0,83,0,49,0,115,58,48,0,1, + 0,1,0,1,0,89,0,1,0,110,52,116,3,160,7,124, + 1,100,2,161,2,143,24,125,2,124,2,160,6,161,0,87, + 0,2,0,100,1,4,0,4,0,131,3,1,0,83,0,49, + 0,115,112,48,0,1,0,1,0,1,0,89,0,1,0,100, + 1,83,0,41,3,122,39,82,101,116,117,114,110,32,116,104, + 101,32,100,97,116,97,32,102,114,111,109,32,112,97,116,104, + 32,97,115,32,114,97,119,32,98,121,116,101,115,46,78,218, + 1,114,41,8,114,185,0,0,0,114,244,0,0,0,218,19, 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101, - 78,41,14,114,125,0,0,0,114,124,0,0,0,114,126,0, - 0,0,114,127,0,0,0,114,209,0,0,0,114,243,0,0, - 0,114,247,0,0,0,114,212,0,0,0,114,217,0,0,0, - 114,182,0,0,0,114,213,0,0,0,114,229,0,0,0,114, - 136,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,8,0,0,0,114,252,0, - 0,0,63,4,0,0,115,22,0,0,0,8,2,4,6,8, - 4,8,4,8,3,8,8,8,6,8,6,8,4,8,4,2, - 1,114,252,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 104,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7, - 100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,9, - 100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,11, - 100,18,100,19,132,0,90,12,100,20,100,21,132,0,90,13, - 100,22,100,23,132,0,90,14,100,24,83,0,41,25,218,14, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, - 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, - 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, - 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, - 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, - 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, - 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, - 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, - 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, - 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, - 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, - 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, - 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, - 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, - 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, - 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, - 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, - 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, - 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, - 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,36,0,0,0,124,1,124,0,95,0,124,2,124, - 0,95,1,116,2,124,0,160,3,161,0,131,1,124,0,95, - 4,124,3,124,0,95,5,100,0,83,0,114,109,0,0,0, - 41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,104, - 114,111,0,0,0,218,16,95,103,101,116,95,112,97,114,101, - 110,116,95,112,97,116,104,218,17,95,108,97,115,116,95,112, - 97,114,101,110,116,95,112,97,116,104,218,12,95,112,97,116, - 104,95,102,105,110,100,101,114,169,4,114,118,0,0,0,114, - 116,0,0,0,114,44,0,0,0,90,11,112,97,116,104,95, - 102,105,110,100,101,114,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,209,0,0,0,123,4,0,0,115,8, - 0,0,0,0,1,6,1,6,1,14,1,122,23,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,38,0, - 0,0,124,0,106,0,160,1,100,1,161,1,92,3,125,1, - 125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,0, - 124,1,100,4,102,2,83,0,41,5,122,62,82,101,116,117, - 114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,40, - 112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,97, - 109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45, - 97,116,116,114,45,110,97,109,101,41,114,71,0,0,0,114, - 40,0,0,0,41,2,114,1,0,0,0,114,44,0,0,0, - 90,8,95,95,112,97,116,104,95,95,41,2,114,23,1,0, - 0,114,41,0,0,0,41,4,114,118,0,0,0,114,14,1, - 0,0,218,3,100,111,116,90,2,109,101,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,218,23,95,102,105,110, - 100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97, - 109,101,115,129,4,0,0,115,8,0,0,0,0,2,18,1, - 8,2,4,3,122,38,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,110, - 116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,0, + 100,101,114,114,90,0,0,0,90,9,111,112,101,110,95,99, + 111,100,101,114,108,0,0,0,90,4,114,101,97,100,114,91, + 0,0,0,41,3,114,142,0,0,0,114,65,0,0,0,114, + 93,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,250,0,0,0,17,4,0,0,115,10,0,0, + 0,0,2,14,1,16,1,40,2,14,1,122,19,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,100,97,116,97, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,18,0,0,0,124,0, + 160,0,124,1,161,1,114,14,124,0,83,0,100,0,83,0, + 114,69,0,0,0,41,1,114,206,0,0,0,169,2,114,142, + 0,0,0,114,239,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,19,103,101,116,95,114,101,115, + 111,117,114,99,101,95,114,101,97,100,101,114,28,4,0,0, + 115,6,0,0,0,0,2,10,1,4,1,122,30,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, + 117,114,99,101,95,114,101,97,100,101,114,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 67,0,0,0,115,32,0,0,0,116,0,116,1,124,0,106, + 2,131,1,100,1,25,0,124,1,131,2,125,2,116,3,160, + 4,124,2,100,2,161,2,83,0,41,3,78,114,0,0,0, + 0,114,18,1,0,0,41,5,114,67,0,0,0,114,74,0, + 0,0,114,65,0,0,0,114,90,0,0,0,114,91,0,0, + 0,169,3,114,142,0,0,0,90,8,114,101,115,111,117,114, + 99,101,114,65,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,13,111,112,101,110,95,114,101,115, + 111,117,114,99,101,34,4,0,0,115,4,0,0,0,0,1, + 20,1,122,24,70,105,108,101,76,111,97,100,101,114,46,111, + 112,101,110,95,114,101,115,111,117,114,99,101,99,2,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,0, - 92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,0, - 124,2,131,2,83,0,114,109,0,0,0,41,4,114,30,1, - 0,0,114,130,0,0,0,114,1,0,0,0,218,7,109,111, - 100,117,108,101,115,41,3,114,118,0,0,0,90,18,112,97, - 114,101,110,116,95,109,111,100,117,108,101,95,110,97,109,101, - 90,14,112,97,116,104,95,97,116,116,114,95,110,97,109,101, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 25,1,0,0,139,4,0,0,115,4,0,0,0,0,1,12, - 1,122,31,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,97, - 116,104,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,0, - 116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,0, - 106,2,107,3,114,74,124,0,160,3,124,0,106,4,124,1, - 161,2,125,2,124,2,100,0,117,1,114,68,124,2,106,5, - 100,0,117,0,114,68,124,2,106,6,114,68,124,2,106,6, - 124,0,95,7,124,1,124,0,95,2,124,0,106,7,83,0, - 114,109,0,0,0,41,8,114,111,0,0,0,114,25,1,0, - 0,114,26,1,0,0,114,27,1,0,0,114,23,1,0,0, - 114,140,0,0,0,114,178,0,0,0,114,24,1,0,0,41, - 3,114,118,0,0,0,90,11,112,97,114,101,110,116,95,112, - 97,116,104,114,187,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,218,12,95,114,101,99,97,108,99, - 117,108,97,116,101,143,4,0,0,115,16,0,0,0,0,2, - 12,1,10,1,14,3,18,1,6,1,8,1,6,1,122,27, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 114,101,99,97,108,99,117,108,97,116,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161, - 0,131,1,83,0,114,109,0,0,0,41,2,114,6,1,0, - 0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,218,8,95,95,105,116, - 101,114,95,95,156,4,0,0,115,2,0,0,0,0,1,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,105,116,101,114,95,95,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,115,12,0,0,0,124,0,160,0,161,0,124,1,25,0, - 83,0,114,109,0,0,0,169,1,114,32,1,0,0,41,2, - 114,118,0,0,0,218,5,105,110,100,101,120,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,218,11,95,95,103, - 101,116,105,116,101,109,95,95,159,4,0,0,115,2,0,0, - 0,0,1,122,26,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,103,101,116,105,116,101,109,95,95,99, - 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,14,0,0,0,124,2,124, - 0,106,0,124,1,60,0,100,0,83,0,114,109,0,0,0, - 41,1,114,24,1,0,0,41,3,114,118,0,0,0,114,35, - 1,0,0,114,44,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,218,11,95,95,115,101,116,105,116, - 101,109,95,95,162,4,0,0,115,2,0,0,0,0,1,122, - 26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,115,101,116,105,116,101,109,95,95,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161, - 0,131,1,83,0,114,109,0,0,0,41,2,114,23,0,0, - 0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,218,7,95,95,108,101, - 110,95,95,165,4,0,0,115,2,0,0,0,0,1,122,22, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,0, - 41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,40,123,33,114,125,41,41,2,114,62,0,0,0, - 114,24,1,0,0,114,246,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,8,95,95,114,101,112, - 114,95,95,168,4,0,0,115,2,0,0,0,0,1,122,23, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,124,1,124,0,160,0,161,0,118,0,83, - 0,114,109,0,0,0,114,34,1,0,0,169,2,114,118,0, - 0,0,218,4,105,116,101,109,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,218,12,95,95,99,111,110,116,97, - 105,110,115,95,95,171,4,0,0,115,2,0,0,0,0,1, - 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,16,0,0,0,124,0,106,0,160, - 1,124,1,161,1,1,0,100,0,83,0,114,109,0,0,0, - 41,2,114,24,1,0,0,114,186,0,0,0,114,40,1,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,186,0,0,0,174,4,0,0,115,2,0,0,0,0,1, - 122,21,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,97,112,112,101,110,100,78,41,15,114,125,0,0,0,114, - 124,0,0,0,114,126,0,0,0,114,127,0,0,0,114,209, - 0,0,0,114,30,1,0,0,114,25,1,0,0,114,32,1, - 0,0,114,33,1,0,0,114,36,1,0,0,114,37,1,0, - 0,114,38,1,0,0,114,39,1,0,0,114,42,1,0,0, - 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,22,1,0,0,116,4, - 0,0,115,24,0,0,0,8,1,4,6,8,6,8,10,8, - 4,8,13,8,3,8,3,8,3,8,3,8,3,8,3,114, - 22,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,80,0, - 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0, - 90,3,101,4,100,3,100,4,132,0,131,1,90,5,100,5, - 100,6,132,0,90,6,100,7,100,8,132,0,90,7,100,9, - 100,10,132,0,90,8,100,11,100,12,132,0,90,9,100,13, - 100,14,132,0,90,10,100,15,100,16,132,0,90,11,100,17, - 83,0,41,18,218,16,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 18,0,0,0,116,0,124,1,124,2,124,3,131,3,124,0, - 95,1,100,0,83,0,114,109,0,0,0,41,2,114,22,1, - 0,0,114,24,1,0,0,114,28,1,0,0,114,5,0,0, - 0,114,5,0,0,0,114,8,0,0,0,114,209,0,0,0, - 180,4,0,0,115,2,0,0,0,0,1,122,25,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,95, - 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 12,0,0,0,100,1,160,0,124,1,106,1,161,1,83,0, - 41,2,122,115,82,101,116,117,114,110,32,114,101,112,114,32, - 102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,101,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,84,104,101,32,105,109,112,111,114,116,32,109, - 97,99,104,105,110,101,114,121,32,100,111,101,115,32,116,104, - 101,32,106,111,98,32,105,116,115,101,108,102,46,10,10,32, - 32,32,32,32,32,32,32,122,25,60,109,111,100,117,108,101, - 32,123,33,114,125,32,40,110,97,109,101,115,112,97,99,101, - 41,62,41,2,114,62,0,0,0,114,125,0,0,0,41,2, - 114,193,0,0,0,114,216,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,218,11,109,111,100,117,108, - 101,95,114,101,112,114,183,4,0,0,115,2,0,0,0,0, - 7,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, + 0,67,0,0,0,115,38,0,0,0,124,0,160,0,124,1, + 161,1,115,14,116,1,130,1,116,2,116,3,124,0,106,4, + 131,1,100,1,25,0,124,1,131,2,125,2,124,2,83,0, + 169,2,78,114,0,0,0,0,41,5,218,11,105,115,95,114, + 101,115,111,117,114,99,101,218,17,70,105,108,101,78,111,116, + 70,111,117,110,100,69,114,114,111,114,114,67,0,0,0,114, + 74,0,0,0,114,65,0,0,0,114,22,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,13,114, + 101,115,111,117,114,99,101,95,112,97,116,104,38,4,0,0, + 115,8,0,0,0,0,1,10,1,4,1,20,1,122,24,70, + 105,108,101,76,111,97,100,101,114,46,114,101,115,111,117,114, + 99,101,95,112,97,116,104,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,40,0,0,0,116,0,124,1,118,0,114,12,100,1,83, + 0,116,1,116,2,124,0,106,3,131,1,100,2,25,0,124, + 1,131,2,125,2,116,4,124,2,131,1,83,0,41,3,78, + 70,114,0,0,0,0,41,5,114,59,0,0,0,114,67,0, + 0,0,114,74,0,0,0,114,65,0,0,0,114,80,0,0, + 0,169,3,114,142,0,0,0,114,140,0,0,0,114,65,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,25,1,0,0,44,4,0,0,115,8,0,0,0,0, + 1,8,1,4,1,20,1,122,22,70,105,108,101,76,111,97, + 100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 5,0,0,0,67,0,0,0,115,24,0,0,0,116,0,116, + 1,160,2,116,3,124,0,106,4,131,1,100,1,25,0,161, + 1,131,1,83,0,114,24,1,0,0,41,5,218,4,105,116, + 101,114,114,24,0,0,0,218,7,108,105,115,116,100,105,114, + 114,74,0,0,0,114,65,0,0,0,114,13,1,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, + 99,111,110,116,101,110,116,115,50,4,0,0,115,2,0,0, + 0,0,1,122,19,70,105,108,101,76,111,97,100,101,114,46, + 99,111,110,116,101,110,116,115,41,17,114,149,0,0,0,114, + 148,0,0,0,114,150,0,0,0,114,151,0,0,0,114,232, + 0,0,0,114,10,1,0,0,114,14,1,0,0,114,160,0, + 0,0,114,243,0,0,0,114,203,0,0,0,114,250,0,0, + 0,114,21,1,0,0,114,23,1,0,0,114,27,1,0,0, + 114,25,1,0,0,114,31,1,0,0,90,13,95,95,99,108, + 97,115,115,99,101,108,108,95,95,114,10,0,0,0,114,10, + 0,0,0,114,16,1,0,0,114,11,0,0,0,114,6,1, + 0,0,238,3,0,0,115,30,0,0,0,8,2,4,3,8, + 6,8,4,8,3,2,1,14,11,2,1,10,4,8,11,2, + 1,10,5,8,4,8,6,8,6,114,6,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,46,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,100,7,156,1,100,8, + 100,9,132,2,90,6,100,10,83,0,41,11,218,16,83,111, + 117,114,99,101,70,105,108,101,76,111,97,100,101,114,122,62, + 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,32,111,102,32,83,111,117,114,99, + 101,76,111,97,100,101,114,32,117,115,105,110,103,32,116,104, + 101,32,102,105,108,101,32,115,121,115,116,101,109,46,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,22,0,0,0,116,0,124,1, + 131,1,125,2,124,2,106,1,124,2,106,2,100,1,156,2, + 83,0,41,2,122,33,82,101,116,117,114,110,32,116,104,101, + 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, + 101,32,112,97,116,104,46,41,2,114,193,0,0,0,114,1, + 1,0,0,41,3,114,75,0,0,0,218,8,115,116,95,109, + 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, + 142,0,0,0,114,65,0,0,0,114,5,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,247,0, + 0,0,58,4,0,0,115,4,0,0,0,0,2,8,1,122, + 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, + 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,24,0,0,0,116,0,124,1,131,1, + 125,4,124,0,106,1,124,2,124,3,124,4,100,1,141,3, + 83,0,41,2,78,169,1,218,5,95,109,111,100,101,41,2, + 114,138,0,0,0,114,248,0,0,0,41,5,114,142,0,0, + 0,114,133,0,0,0,114,131,0,0,0,114,43,0,0,0, + 114,78,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,249,0,0,0,63,4,0,0,115,4,0, + 0,0,0,2,8,1,122,32,83,111,117,114,99,101,70,105, + 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, + 98,121,116,101,99,111,100,101,114,86,0,0,0,114,34,1, + 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,9, + 0,0,0,11,0,0,0,67,0,0,0,115,252,0,0,0, + 116,0,124,1,131,1,92,2,125,4,125,5,103,0,125,6, + 124,4,114,52,116,1,124,4,131,1,115,52,116,0,124,4, + 131,1,92,2,125,4,125,7,124,6,160,2,124,7,161,1, + 1,0,113,16,116,3,124,6,131,1,68,0,93,104,125,7, + 116,4,124,4,124,7,131,2,125,4,122,14,116,5,160,6, + 124,4,161,1,1,0,87,0,113,60,4,0,116,7,121,110, + 1,0,1,0,1,0,89,0,113,60,89,0,113,60,4,0, + 116,8,121,162,1,0,125,8,1,0,122,30,116,9,160,10, + 100,1,124,4,124,8,161,3,1,0,87,0,89,0,100,2, + 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, + 48,0,48,0,113,60,122,28,116,11,124,1,124,2,124,3, + 131,3,1,0,116,9,160,10,100,3,124,1,161,2,1,0, + 87,0,110,52,4,0,116,8,144,0,121,246,1,0,125,8, + 1,0,122,26,116,9,160,10,100,1,124,1,124,8,161,3, + 1,0,87,0,89,0,100,2,125,8,126,8,110,10,100,2, + 125,8,126,8,48,0,48,0,100,2,83,0,41,4,122,27, + 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, + 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, + 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, + 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, + 101,100,32,123,33,114,125,41,12,114,74,0,0,0,114,82, + 0,0,0,114,61,0,0,0,218,8,114,101,118,101,114,115, + 101,100,114,67,0,0,0,114,24,0,0,0,90,5,109,107, + 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, + 114,114,111,114,114,76,0,0,0,114,158,0,0,0,114,173, + 0,0,0,114,94,0,0,0,41,9,114,142,0,0,0,114, + 65,0,0,0,114,43,0,0,0,114,35,1,0,0,218,6, + 112,97,114,101,110,116,114,119,0,0,0,114,63,0,0,0, + 114,68,0,0,0,114,251,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,248,0,0,0,68,4, + 0,0,115,46,0,0,0,0,2,12,1,4,2,12,1,12, + 1,12,2,12,1,10,1,2,1,14,1,12,2,8,1,14, + 3,6,1,4,255,4,2,28,1,2,1,12,1,16,1,16, + 2,8,1,2,255,122,25,83,111,117,114,99,101,70,105,108, + 101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97, + 78,41,7,114,149,0,0,0,114,148,0,0,0,114,150,0, + 0,0,114,151,0,0,0,114,247,0,0,0,114,249,0,0, + 0,114,248,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,32,1,0,0,54, + 4,0,0,115,8,0,0,0,8,2,4,2,8,5,8,5, + 114,32,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,32, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,83,0,41,7,218,20,83,111,117,114,99,101,108,101,115, + 115,70,105,108,101,76,111,97,100,101,114,122,45,76,111,97, + 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, + 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, + 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,68,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,0,160,1,124,2,161,1,125,3,124,1,124,2, + 100,1,156,2,125,4,116,2,124,3,124,1,124,4,131,3, + 1,0,116,3,116,4,124,3,131,1,100,2,100,0,133,2, + 25,0,124,1,124,2,100,3,141,3,83,0,41,4,78,114, + 183,0,0,0,114,169,0,0,0,41,2,114,140,0,0,0, + 114,131,0,0,0,41,5,114,203,0,0,0,114,250,0,0, + 0,114,176,0,0,0,114,189,0,0,0,114,2,1,0,0, + 41,5,114,142,0,0,0,114,163,0,0,0,114,65,0,0, + 0,114,43,0,0,0,114,175,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,236,0,0,0,103, + 4,0,0,115,22,0,0,0,0,1,10,1,10,4,2,1, + 2,254,6,4,12,1,2,1,14,1,2,1,2,253,122,29, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,41, + 2,122,39,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,116,104,101,114,101,32,105,115,32,110,111,32,115,111, + 117,114,99,101,32,99,111,100,101,46,78,114,10,0,0,0, + 114,242,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,252,0,0,0,119,4,0,0,115,2,0, + 0,0,0,2,122,31,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,78,41,6,114,149,0,0,0,114,148,0, + 0,0,114,150,0,0,0,114,151,0,0,0,114,236,0,0, + 0,114,252,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,39,1,0,0,99, + 4,0,0,115,6,0,0,0,8,2,4,2,8,16,114,39, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,92,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,100, + 11,132,0,90,8,100,12,100,13,132,0,90,9,100,14,100, + 15,132,0,90,10,100,16,100,17,132,0,90,11,101,12,100, + 18,100,19,132,0,131,1,90,13,100,20,83,0,41,21,114, + 19,1,0,0,122,93,76,111,97,100,101,114,32,102,111,114, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,115,46,10,10,32,32,32,32,84,104,101,32,99,111,110, + 115,116,114,117,99,116,111,114,32,105,115,32,100,101,115,105, + 103,110,101,100,32,116,111,32,119,111,114,107,32,119,105,116, + 104,32,70,105,108,101,70,105,110,100,101,114,46,10,10,32, + 32,32,32,99,3,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, + 0,124,1,124,0,95,0,124,2,124,0,95,1,100,0,83, + 0,114,69,0,0,0,114,183,0,0,0,114,28,1,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 232,0,0,0,136,4,0,0,115,4,0,0,0,0,1,6, + 1,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,41,2,78,84,114,5,0,0,0,114,219,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,182, - 0,0,0,192,4,0,0,115,2,0,0,0,0,1,122,27, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,78, - 114,40,0,0,0,114,5,0,0,0,114,219,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,229, - 0,0,0,195,4,0,0,115,2,0,0,0,0,1,122,27, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0, - 67,0,0,0,115,16,0,0,0,116,0,100,1,100,2,100, - 3,100,4,100,5,141,4,83,0,41,6,78,114,40,0,0, - 0,122,8,60,115,116,114,105,110,103,62,114,215,0,0,0, - 84,41,1,114,231,0,0,0,41,1,114,232,0,0,0,114, - 219,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,213,0,0,0,198,4,0,0,115,2,0,0, - 0,0,1,122,25,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, - 114,210,0,0,0,114,5,0,0,0,114,211,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,212, - 0,0,0,201,4,0,0,115,2,0,0,0,0,1,122,30, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,0, - 114,109,0,0,0,114,5,0,0,0,114,253,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,217, - 0,0,0,204,4,0,0,115,2,0,0,0,0,1,122,28, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 2,0,0,0,67,0,0,0,115,24,0,0,0,124,0,106, + 0,124,1,106,0,107,2,111,22,124,0,106,1,124,1,106, + 1,107,2,83,0,114,69,0,0,0,114,7,1,0,0,114, + 9,1,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,10,1,0,0,140,4,0,0,115,6,0,0, + 0,0,1,12,1,10,255,122,26,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,101, + 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,20,0,0, + 0,116,0,124,0,106,1,131,1,116,0,124,0,106,2,131, + 1,65,0,83,0,114,69,0,0,0,114,11,1,0,0,114, + 13,1,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,14,1,0,0,144,4,0,0,115,2,0,0, + 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, + 95,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, + 0,160,1,116,2,106,3,124,1,161,2,125,2,116,0,160, + 4,100,1,124,1,106,5,124,0,106,6,161,3,1,0,124, + 2,83,0,41,2,122,38,67,114,101,97,116,101,32,97,110, + 32,117,110,105,116,105,97,108,105,122,101,100,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,122,38,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, + 123,33,114,125,32,108,111,97,100,101,100,32,102,114,111,109, + 32,123,33,114,125,41,7,114,158,0,0,0,114,237,0,0, + 0,114,187,0,0,0,90,14,99,114,101,97,116,101,95,100, + 121,110,97,109,105,99,114,173,0,0,0,114,140,0,0,0, + 114,65,0,0,0,41,3,114,142,0,0,0,114,210,0,0, + 0,114,239,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,235,0,0,0,147,4,0,0,115,14, + 0,0,0,0,2,4,1,6,255,4,2,6,1,8,255,4, + 2,122,33,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,5,0,0,0,67,0,0,0,115,36,0, + 0,0,116,0,160,1,116,2,106,3,124,1,161,2,1,0, + 116,0,160,4,100,1,124,0,106,5,124,0,106,6,161,3, + 1,0,100,2,83,0,41,3,122,30,73,110,105,116,105,97, + 108,105,122,101,32,97,110,32,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,122,40,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, + 101,120,101,99,117,116,101,100,32,102,114,111,109,32,123,33, + 114,125,78,41,7,114,158,0,0,0,114,237,0,0,0,114, + 187,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, + 105,99,114,173,0,0,0,114,140,0,0,0,114,65,0,0, + 0,114,20,1,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,240,0,0,0,155,4,0,0,115,8, + 0,0,0,0,2,14,1,6,1,8,255,122,31,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,1, - 124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,1, - 161,2,83,0,41,2,122,98,76,111,97,100,32,97,32,110, - 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,97, - 100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,33, - 114,125,41,4,114,134,0,0,0,114,149,0,0,0,114,24, - 1,0,0,114,218,0,0,0,114,219,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,114,220,0,0, - 0,207,4,0,0,115,8,0,0,0,0,7,6,1,4,255, - 4,2,122,28,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, - 78,41,12,114,125,0,0,0,114,124,0,0,0,114,126,0, - 0,0,114,209,0,0,0,114,207,0,0,0,114,44,1,0, - 0,114,182,0,0,0,114,229,0,0,0,114,213,0,0,0, - 114,212,0,0,0,114,217,0,0,0,114,220,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,43,1,0,0,179,4,0,0,115,18,0,0, - 0,8,1,8,3,2,1,10,8,8,3,8,3,8,3,8, - 3,8,3,114,43,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, - 0,115,118,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,101,4,100,2,100,3,132,0,131,1,90,5,101,4, - 100,4,100,5,132,0,131,1,90,6,101,4,100,6,100,7, - 132,0,131,1,90,7,101,4,100,8,100,9,132,0,131,1, - 90,8,101,4,100,19,100,11,100,12,132,1,131,1,90,9, - 101,4,100,20,100,13,100,14,132,1,131,1,90,10,101,4, - 100,21,100,15,100,16,132,1,131,1,90,11,101,4,100,17, - 100,18,132,0,131,1,90,12,100,10,83,0,41,22,218,10, - 80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97, - 32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114, - 32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97, - 99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97, - 116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67, - 0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,3, - 161,0,131,1,68,0,93,44,92,2,125,1,125,2,124,2, - 100,1,117,0,114,40,116,1,106,2,124,1,61,0,113,14, - 116,4,124,2,100,2,131,2,114,14,124,2,160,5,161,0, - 1,0,113,14,100,1,83,0,41,3,122,125,67,97,108,108, - 32,116,104,101,32,105,110,118,97,108,105,100,97,116,101,95, - 99,97,99,104,101,115,40,41,32,109,101,116,104,111,100,32, - 111,110,32,97,108,108,32,112,97,116,104,32,101,110,116,114, - 121,32,102,105,110,100,101,114,115,10,32,32,32,32,32,32, - 32,32,115,116,111,114,101,100,32,105,110,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,115,32,40,119,104,101,114,101,32,105,109,112,108, - 101,109,101,110,116,101,100,41,46,78,218,17,105,110,118,97, - 108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,218, - 4,108,105,115,116,114,1,0,0,0,218,19,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,218, - 5,105,116,101,109,115,114,128,0,0,0,114,46,1,0,0, - 41,3,114,193,0,0,0,114,116,0,0,0,218,6,102,105, - 110,100,101,114,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,46,1,0,0,225,4,0,0,115,10,0,0, - 0,0,4,22,1,8,1,10,1,10,1,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,9,0,0,0,67,0, - 0,0,115,82,0,0,0,116,0,106,1,100,1,117,1,114, - 28,116,0,106,1,115,28,116,2,160,3,100,2,116,4,161, - 2,1,0,116,0,106,1,68,0,93,42,125,2,122,14,124, - 2,124,1,131,1,87,0,2,0,1,0,83,0,4,0,116, - 5,121,74,1,0,1,0,1,0,89,0,113,34,89,0,113, - 34,48,0,113,34,100,1,83,0,41,3,122,46,83,101,97, - 114,99,104,32,115,121,115,46,112,97,116,104,95,104,111,111, - 107,115,32,102,111,114,32,97,32,102,105,110,100,101,114,32, - 102,111,114,32,39,112,97,116,104,39,46,78,122,23,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, - 101,109,112,116,121,41,6,114,1,0,0,0,218,10,112,97, - 116,104,95,104,111,111,107,115,114,75,0,0,0,114,76,0, - 0,0,114,138,0,0,0,114,117,0,0,0,41,3,114,193, - 0,0,0,114,44,0,0,0,90,4,104,111,111,107,114,5, - 0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,95, - 112,97,116,104,95,104,111,111,107,115,235,4,0,0,115,16, - 0,0,0,0,3,16,1,12,1,10,1,2,1,14,1,12, - 1,12,2,122,22,80,97,116,104,70,105,110,100,101,114,46, - 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, - 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114, - 42,122,12,116,0,160,1,161,0,125,1,87,0,110,20,4, - 0,116,2,121,40,1,0,1,0,1,0,89,0,100,2,83, - 0,48,0,122,14,116,3,106,4,124,1,25,0,125,2,87, - 0,110,38,4,0,116,5,121,94,1,0,1,0,1,0,124, - 0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124, - 1,60,0,89,0,110,2,48,0,124,2,83,0,41,3,122, - 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, - 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, - 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, - 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, - 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, - 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, - 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, - 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, - 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, - 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, - 32,32,32,114,40,0,0,0,78,41,7,114,4,0,0,0, - 114,55,0,0,0,114,3,1,0,0,114,1,0,0,0,114, - 48,1,0,0,218,8,75,101,121,69,114,114,111,114,114,52, - 1,0,0,41,3,114,193,0,0,0,114,44,0,0,0,114, - 50,1,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,20,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,248,4,0,0,115,22,0, - 0,0,0,8,8,1,2,1,12,1,12,3,8,1,2,1, - 14,1,12,1,10,1,16,1,122,31,80,97,116,104,70,105, - 110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,99,3,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0, - 0,0,115,82,0,0,0,116,0,124,2,100,1,131,2,114, - 26,124,2,160,1,124,1,161,1,92,2,125,3,125,4,110, - 14,124,2,160,2,124,1,161,1,125,3,103,0,125,4,124, - 3,100,0,117,1,114,60,116,3,160,4,124,1,124,3,161, - 2,83,0,116,3,160,5,124,1,100,0,161,2,125,5,124, - 4,124,5,95,6,124,5,83,0,41,2,78,114,137,0,0, - 0,41,7,114,128,0,0,0,114,137,0,0,0,114,206,0, - 0,0,114,134,0,0,0,114,201,0,0,0,114,183,0,0, - 0,114,178,0,0,0,41,6,114,193,0,0,0,114,139,0, - 0,0,114,50,1,0,0,114,140,0,0,0,114,141,0,0, - 0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,16,95,108,101,103,97,99,121,95,103, - 101,116,95,115,112,101,99,14,5,0,0,115,18,0,0,0, - 0,4,10,1,16,2,10,1,4,1,8,1,12,1,12,1, - 6,1,122,27,80,97,116,104,70,105,110,100,101,114,46,95, - 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,78, - 99,4,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0, - 125,4,124,2,68,0,93,134,125,5,116,0,124,5,116,1, - 116,2,102,2,131,2,115,28,113,8,124,0,160,3,124,5, - 161,1,125,6,124,6,100,1,117,1,114,8,116,4,124,6, - 100,2,131,2,114,70,124,6,160,5,124,1,124,3,161,2, - 125,7,110,12,124,0,160,6,124,1,124,6,161,2,125,7, - 124,7,100,1,117,0,114,92,113,8,124,7,106,7,100,1, - 117,1,114,110,124,7,2,0,1,0,83,0,124,7,106,8, - 125,8,124,8,100,1,117,0,114,132,116,9,100,3,131,1, - 130,1,124,4,160,10,124,8,161,1,1,0,113,8,116,11, - 160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8, - 124,7,83,0,41,4,122,63,70,105,110,100,32,116,104,101, - 32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115, - 112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104, - 105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103, - 101,32,110,97,109,101,46,78,114,203,0,0,0,122,19,115, - 112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100, - 101,114,41,13,114,161,0,0,0,114,84,0,0,0,218,5, - 98,121,116,101,115,114,54,1,0,0,114,128,0,0,0,114, - 203,0,0,0,114,55,1,0,0,114,140,0,0,0,114,178, - 0,0,0,114,117,0,0,0,114,167,0,0,0,114,134,0, - 0,0,114,183,0,0,0,41,9,114,193,0,0,0,114,139, - 0,0,0,114,44,0,0,0,114,202,0,0,0,218,14,110, - 97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101, - 110,116,114,121,114,50,1,0,0,114,187,0,0,0,114,141, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,9,95,103,101,116,95,115,112,101,99,29,5,0, - 0,115,40,0,0,0,0,5,4,1,8,1,14,1,2,1, - 10,1,8,1,10,1,14,2,12,1,8,1,2,1,10,1, - 8,1,6,1,8,1,8,5,12,2,12,1,6,1,122,20, - 80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95, - 115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0, - 0,6,0,0,0,5,0,0,0,67,0,0,0,115,100,0, - 0,0,124,2,100,1,117,0,114,14,116,0,106,1,125,2, - 124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4, - 100,1,117,0,114,40,100,1,83,0,124,4,106,3,100,1, - 117,0,114,92,124,4,106,4,125,5,124,5,114,86,100,1, - 124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3, - 124,4,95,4,124,4,83,0,100,1,83,0,110,4,124,4, - 83,0,100,1,83,0,41,2,122,141,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, - 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, - 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, - 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, - 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, - 32,32,32,32,32,32,32,78,41,7,114,1,0,0,0,114, - 44,0,0,0,114,58,1,0,0,114,140,0,0,0,114,178, - 0,0,0,114,181,0,0,0,114,22,1,0,0,41,6,114, - 193,0,0,0,114,139,0,0,0,114,44,0,0,0,114,202, - 0,0,0,114,187,0,0,0,114,57,1,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,114,203,0,0, - 0,61,5,0,0,115,26,0,0,0,0,6,8,1,6,1, - 14,1,8,1,4,1,10,1,6,1,4,3,6,1,16,1, - 4,2,6,2,122,20,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,30,0,0,0,124,0,160,0,124,1,124,2, - 161,2,125,3,124,3,100,1,117,0,114,24,100,1,83,0, - 124,3,106,1,83,0,41,2,122,170,102,105,110,100,32,116, - 104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115, - 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32, - 32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,78,114,204,0,0,0,114,205,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,206, - 0,0,0,85,5,0,0,115,8,0,0,0,0,8,12,1, - 8,1,4,1,122,22,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,79,0,0,0,115,28,0,0,0,100,1,100,2,108,0, - 109,1,125,3,1,0,124,3,106,2,124,1,105,0,124,2, - 164,1,142,1,83,0,41,3,97,32,1,0,0,10,32,32, - 32,32,32,32,32,32,70,105,110,100,32,100,105,115,116,114, - 105,98,117,116,105,111,110,115,46,10,10,32,32,32,32,32, - 32,32,32,82,101,116,117,114,110,32,97,110,32,105,116,101, - 114,97,98,108,101,32,111,102,32,97,108,108,32,68,105,115, - 116,114,105,98,117,116,105,111,110,32,105,110,115,116,97,110, - 99,101,115,32,99,97,112,97,98,108,101,32,111,102,10,32, - 32,32,32,32,32,32,32,108,111,97,100,105,110,103,32,116, - 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, - 112,97,99,107,97,103,101,115,32,109,97,116,99,104,105,110, - 103,32,96,96,99,111,110,116,101,120,116,46,110,97,109,101, - 96,96,10,32,32,32,32,32,32,32,32,40,111,114,32,97, - 108,108,32,110,97,109,101,115,32,105,102,32,96,96,78,111, - 110,101,96,96,32,105,110,100,105,99,97,116,101,100,41,32, - 97,108,111,110,103,32,116,104,101,32,112,97,116,104,115,32, - 105,110,32,116,104,101,32,108,105,115,116,10,32,32,32,32, - 32,32,32,32,111,102,32,100,105,114,101,99,116,111,114,105, - 101,115,32,96,96,99,111,110,116,101,120,116,46,112,97,116, - 104,96,96,46,10,32,32,32,32,32,32,32,32,114,73,0, - 0,0,41,1,218,18,77,101,116,97,100,97,116,97,80,97, - 116,104,70,105,110,100,101,114,41,3,90,18,105,109,112,111, - 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,59, - 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, - 98,117,116,105,111,110,115,41,4,114,193,0,0,0,114,119, - 0,0,0,114,120,0,0,0,114,59,1,0,0,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,114,60,1,0, - 0,98,5,0,0,115,4,0,0,0,0,10,12,1,122,29, - 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, - 100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78, - 41,2,78,78,41,1,78,41,13,114,125,0,0,0,114,124, - 0,0,0,114,126,0,0,0,114,127,0,0,0,114,207,0, - 0,0,114,46,1,0,0,114,52,1,0,0,114,54,1,0, - 0,114,55,1,0,0,114,58,1,0,0,114,203,0,0,0, - 114,206,0,0,0,114,60,1,0,0,114,5,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,45, - 1,0,0,221,4,0,0,115,34,0,0,0,8,2,4,2, - 2,1,10,9,2,1,10,12,2,1,10,21,2,1,10,14, - 2,1,12,31,2,1,12,23,2,1,12,12,2,1,114,45, + 0,3,0,0,0,115,36,0,0,0,116,0,124,0,106,1, + 131,1,100,1,25,0,137,0,116,2,135,0,102,1,100,2, + 100,3,132,8,116,3,68,0,131,1,131,1,83,0,41,4, + 122,49,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,46,114,4,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,51,0,0, + 0,115,26,0,0,0,124,0,93,18,125,1,136,0,100,0, + 124,1,23,0,107,2,86,0,1,0,113,2,100,1,83,0, + 41,2,114,232,0,0,0,78,114,10,0,0,0,169,2,114, + 8,0,0,0,218,6,115,117,102,102,105,120,169,1,90,9, + 102,105,108,101,95,110,97,109,101,114,10,0,0,0,114,11, + 0,0,0,114,12,0,0,0,164,4,0,0,115,4,0,0, + 0,4,1,2,255,122,49,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,105,115,95,112,97, + 99,107,97,103,101,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,41,4,114,74,0,0,0,114, + 65,0,0,0,218,3,97,110,121,218,18,69,88,84,69,78, + 83,73,79,78,95,83,85,70,70,73,88,69,83,114,242,0, + 0,0,114,10,0,0,0,114,42,1,0,0,114,11,0,0, + 0,114,206,0,0,0,161,4,0,0,115,8,0,0,0,0, + 2,14,1,12,1,2,255,122,30,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, + 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,83,0,41,2,122,63,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,97,110,32,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, + 99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32, + 99,111,100,101,32,111,98,106,101,99,116,46,78,114,10,0, + 0,0,114,242,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,236,0,0,0,167,4,0,0,115, + 2,0,0,0,0,2,122,28,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,83,0,41,2,122,53,82,101,116,117,114,110, + 32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32, + 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, + 114,10,0,0,0,114,242,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,252,0,0,0,171,4, + 0,0,115,2,0,0,0,0,2,122,30,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,115,6,0,0,0,124,0,106,0,83,0,114,17,1, + 0,0,114,71,0,0,0,114,242,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,203,0,0,0, + 175,4,0,0,115,2,0,0,0,0,3,122,32,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,102,105,108,101,110,97,109,101,78,41,14, + 114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,114, + 151,0,0,0,114,232,0,0,0,114,10,1,0,0,114,14, + 1,0,0,114,235,0,0,0,114,240,0,0,0,114,206,0, + 0,0,114,236,0,0,0,114,252,0,0,0,114,160,0,0, + 0,114,203,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,19,1,0,0,128, + 4,0,0,115,22,0,0,0,8,2,4,6,8,4,8,4, + 8,3,8,8,8,6,8,6,8,4,8,4,2,1,114,19, 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0, + 0,0,0,0,2,0,0,0,64,0,0,0,115,104,0,0, 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, - 3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90, - 7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90, - 9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132, - 0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100, - 17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70, - 105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45, - 98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32, - 32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32, - 119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121, - 115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32, - 102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44, - 32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101, - 115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105, - 114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100, - 101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104, - 97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100, - 46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0, - 115,84,0,0,0,103,0,125,3,124,2,68,0,93,32,92, - 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100, - 2,132,8,124,4,68,0,131,1,161,1,1,0,113,8,124, - 3,124,0,95,1,124,1,112,54,100,3,124,0,95,2,100, - 4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131, - 0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105, - 116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101, - 32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32, - 111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108, - 101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32, - 32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110, - 116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100, - 101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32, - 115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97, - 100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111, - 103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, - 115,22,0,0,0,124,0,93,14,125,1,124,1,136,0,102, - 2,86,0,1,0,113,2,100,0,83,0,114,109,0,0,0, - 114,5,0,0,0,114,16,1,0,0,169,1,114,140,0,0, - 0,114,5,0,0,0,114,8,0,0,0,114,19,1,0,0, - 127,5,0,0,243,0,0,0,0,122,38,70,105,108,101,70, - 105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60, - 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, - 62,114,71,0,0,0,114,104,0,0,0,78,41,7,114,167, - 0,0,0,218,8,95,108,111,97,100,101,114,115,114,44,0, - 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, - 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, - 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, - 95,99,97,99,104,101,41,5,114,118,0,0,0,114,44,0, - 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, - 108,115,90,7,108,111,97,100,101,114,115,114,189,0,0,0, - 114,5,0,0,0,114,62,1,0,0,114,8,0,0,0,114, - 209,0,0,0,121,5,0,0,115,16,0,0,0,0,4,4, - 1,12,1,26,1,6,2,10,1,6,1,8,1,122,19,70, - 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, - 100,1,124,0,95,0,100,2,83,0,41,3,122,31,73,110, - 118,97,108,105,100,97,116,101,32,116,104,101,32,100,105,114, - 101,99,116,111,114,121,32,109,116,105,109,101,46,114,104,0, - 0,0,78,41,1,114,65,1,0,0,114,246,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,46, - 1,0,0,135,5,0,0,115,2,0,0,0,0,2,122,28, - 70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,100, + 11,132,0,90,8,100,12,100,13,132,0,90,9,100,14,100, + 15,132,0,90,10,100,16,100,17,132,0,90,11,100,18,100, + 19,132,0,90,12,100,20,100,21,132,0,90,13,100,22,100, + 23,132,0,90,14,100,24,83,0,41,25,218,14,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,97,38,1,0,0, + 82,101,112,114,101,115,101,110,116,115,32,97,32,110,97,109, + 101,115,112,97,99,101,32,112,97,99,107,97,103,101,39,115, + 32,112,97,116,104,46,32,32,73,116,32,117,115,101,115,32, + 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,10, + 32,32,32,32,116,111,32,102,105,110,100,32,105,116,115,32, + 112,97,114,101,110,116,32,109,111,100,117,108,101,44,32,97, + 110,100,32,102,114,111,109,32,116,104,101,114,101,32,105,116, + 32,108,111,111,107,115,32,117,112,32,116,104,101,32,112,97, + 114,101,110,116,39,115,10,32,32,32,32,95,95,112,97,116, + 104,95,95,46,32,32,87,104,101,110,32,116,104,105,115,32, + 99,104,97,110,103,101,115,44,32,116,104,101,32,109,111,100, + 117,108,101,39,115,32,111,119,110,32,112,97,116,104,32,105, + 115,32,114,101,99,111,109,112,117,116,101,100,44,10,32,32, + 32,32,117,115,105,110,103,32,112,97,116,104,95,102,105,110, + 100,101,114,46,32,32,70,111,114,32,116,111,112,45,108,101, + 118,101,108,32,109,111,100,117,108,101,115,44,32,116,104,101, + 32,112,97,114,101,110,116,32,109,111,100,117,108,101,39,115, + 32,112,97,116,104,10,32,32,32,32,105,115,32,115,121,115, + 46,112,97,116,104,46,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, + 36,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, + 116,2,124,0,160,3,161,0,131,1,124,0,95,4,124,3, + 124,0,95,5,100,0,83,0,114,69,0,0,0,41,6,218, + 5,95,110,97,109,101,218,5,95,112,97,116,104,114,135,0, + 0,0,218,16,95,103,101,116,95,112,97,114,101,110,116,95, + 112,97,116,104,218,17,95,108,97,115,116,95,112,97,114,101, + 110,116,95,112,97,116,104,218,12,95,112,97,116,104,95,102, + 105,110,100,101,114,169,4,114,142,0,0,0,114,140,0,0, + 0,114,65,0,0,0,90,11,112,97,116,104,95,102,105,110, + 100,101,114,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,232,0,0,0,188,4,0,0,115,8,0,0,0, + 0,1,6,1,6,1,14,1,122,23,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,95,105,110,105,116,95, + 95,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,124, + 0,106,0,160,1,100,1,161,1,92,3,125,1,125,2,125, + 3,124,2,100,2,107,2,114,30,100,3,83,0,124,1,100, + 4,102,2,83,0,41,5,122,62,82,101,116,117,114,110,115, + 32,97,32,116,117,112,108,101,32,111,102,32,40,112,97,114, + 101,110,116,45,109,111,100,117,108,101,45,110,97,109,101,44, + 32,112,97,114,101,110,116,45,112,97,116,104,45,97,116,116, + 114,45,110,97,109,101,41,114,96,0,0,0,114,14,0,0, + 0,41,2,114,21,0,0,0,114,65,0,0,0,90,8,95, + 95,112,97,116,104,95,95,41,2,114,46,1,0,0,114,103, + 0,0,0,41,4,114,142,0,0,0,114,38,1,0,0,218, + 3,100,111,116,90,2,109,101,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,23,95,102,105,110,100,95,112, + 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 194,4,0,0,115,8,0,0,0,0,2,18,1,8,2,4, + 3,122,38,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,112, + 97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,28,0,0,0,124,0,160,0,161,0,92,2,125, + 1,125,2,116,1,116,2,106,3,124,1,25,0,124,2,131, + 2,83,0,114,69,0,0,0,41,4,114,53,1,0,0,114, + 154,0,0,0,114,21,0,0,0,218,7,109,111,100,117,108, + 101,115,41,3,114,142,0,0,0,90,18,112,97,114,101,110, + 116,95,109,111,100,117,108,101,95,110,97,109,101,90,14,112, + 97,116,104,95,97,116,116,114,95,110,97,109,101,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,48,1,0, + 0,204,4,0,0,115,4,0,0,0,0,1,12,1,122,31, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,80,0,0,0,116,0,124, + 0,160,1,161,0,131,1,125,1,124,1,124,0,106,2,107, + 3,114,74,124,0,160,3,124,0,106,4,124,1,161,2,125, + 2,124,2,100,0,117,1,114,68,124,2,106,5,100,0,117, + 0,114,68,124,2,106,6,114,68,124,2,106,6,124,0,95, + 7,124,1,124,0,95,2,124,0,106,7,83,0,114,69,0, + 0,0,41,8,114,135,0,0,0,114,48,1,0,0,114,49, + 1,0,0,114,50,1,0,0,114,46,1,0,0,114,164,0, + 0,0,114,202,0,0,0,114,47,1,0,0,41,3,114,142, + 0,0,0,90,11,112,97,114,101,110,116,95,112,97,116,104, + 114,210,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,12,95,114,101,99,97,108,99,117,108,97, + 116,101,208,4,0,0,115,16,0,0,0,0,2,12,1,10, + 1,14,3,18,1,6,1,8,1,6,1,122,27,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,114,101,99, + 97,108,99,117,108,97,116,101,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,12,0,0,0,116,0,124,0,160,1,161,0,131,1, + 83,0,114,69,0,0,0,41,2,114,29,1,0,0,114,55, + 1,0,0,114,13,1,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,8,95,95,105,116,101,114,95, + 95,221,4,0,0,115,2,0,0,0,0,1,122,23,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, + 116,101,114,95,95,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,12, + 0,0,0,124,0,160,0,161,0,124,1,25,0,83,0,114, + 69,0,0,0,169,1,114,55,1,0,0,41,2,114,142,0, + 0,0,218,5,105,110,100,101,120,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,11,95,95,103,101,116,105, + 116,101,109,95,95,224,4,0,0,115,2,0,0,0,0,1, + 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,42,0,0,0,124,0,160,0,124,1, - 161,1,125,2,124,2,100,1,117,0,114,26,100,1,103,0, - 102,2,83,0,124,2,106,1,124,2,106,2,112,38,103,0, - 102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 114,203,0,0,0,114,140,0,0,0,114,178,0,0,0,41, - 3,114,118,0,0,0,114,139,0,0,0,114,187,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 137,0,0,0,141,5,0,0,115,8,0,0,0,0,7,10, - 1,8,1,8,1,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, - 0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124, - 3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100, - 1,141,4,83,0,41,2,78,114,177,0,0,0,41,1,114, - 190,0,0,0,41,7,114,118,0,0,0,114,188,0,0,0, - 114,139,0,0,0,114,44,0,0,0,90,4,115,109,115,108, - 114,202,0,0,0,114,140,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,58,1,0,0,153,5, - 0,0,115,8,0,0,0,0,1,10,1,8,1,2,255,122, - 20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,0, - 0,0,0,14,0,0,0,8,0,0,0,67,0,0,0,115, - 96,1,0,0,100,1,125,3,124,1,160,0,100,2,161,1, - 100,3,25,0,125,4,122,24,116,1,124,0,106,2,112,34, - 116,3,160,4,161,0,131,1,106,5,125,5,87,0,110,22, - 4,0,116,6,121,64,1,0,1,0,1,0,100,4,125,5, - 89,0,110,2,48,0,124,5,124,0,106,7,107,3,114,90, - 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, - 131,0,114,112,124,0,106,10,125,6,124,4,160,11,161,0, - 125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7, - 124,6,118,0,114,216,116,13,124,0,106,2,124,4,131,2, - 125,8,124,0,106,14,68,0,93,58,92,2,125,9,125,10, - 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, - 125,12,116,15,124,12,131,1,114,148,124,0,160,16,124,10, - 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, - 83,0,113,148,116,17,124,8,131,1,125,3,124,0,106,14, - 68,0,93,82,92,2,125,9,125,10,116,13,124,0,106,2, - 124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6, - 124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0, - 124,6,118,0,114,222,116,15,124,12,131,1,114,222,124,0, - 160,16,124,10,124,1,124,12,100,8,124,2,161,5,2,0, - 1,0,83,0,113,222,124,3,144,1,114,92,116,18,160,19, - 100,9,124,8,161,2,1,0,116,18,160,20,124,1,100,8, - 161,2,125,13,124,8,103,1,124,13,95,21,124,13,83,0, - 100,8,83,0,41,10,122,111,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101, - 116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105, - 110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101, - 32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32, - 32,32,32,32,32,32,32,70,114,71,0,0,0,114,28,0, - 0,0,114,104,0,0,0,114,209,0,0,0,122,9,116,114, - 121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111, - 115,105,116,121,78,122,25,112,111,115,115,105,98,108,101,32, - 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, - 41,22,114,41,0,0,0,114,49,0,0,0,114,44,0,0, - 0,114,4,0,0,0,114,55,0,0,0,114,10,1,0,0, - 114,50,0,0,0,114,65,1,0,0,218,11,95,102,105,108, - 108,95,99,97,99,104,101,114,9,0,0,0,114,68,1,0, - 0,114,105,0,0,0,114,67,1,0,0,114,38,0,0,0, - 114,64,1,0,0,114,54,0,0,0,114,58,1,0,0,114, - 56,0,0,0,114,134,0,0,0,114,149,0,0,0,114,183, - 0,0,0,114,178,0,0,0,41,14,114,118,0,0,0,114, - 139,0,0,0,114,202,0,0,0,90,12,105,115,95,110,97, - 109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,111, - 100,117,108,101,114,169,0,0,0,90,5,99,97,99,104,101, - 90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,9, - 98,97,115,101,95,112,97,116,104,114,17,1,0,0,114,188, - 0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97, - 109,101,90,9,102,117,108,108,95,112,97,116,104,114,187,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0, - 0,114,203,0,0,0,158,5,0,0,115,72,0,0,0,0, - 5,4,1,14,1,2,1,24,1,12,1,10,1,10,1,8, - 1,6,2,6,1,6,1,10,2,6,1,4,2,8,1,12, - 1,14,1,8,1,10,1,8,1,26,4,8,2,14,1,16, - 1,16,1,12,1,8,1,10,1,4,255,10,2,6,1,12, - 1,12,1,8,1,4,1,122,20,70,105,108,101,70,105,110, - 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, - 0,0,0,0,0,0,0,0,0,0,9,0,0,0,10,0, - 0,0,67,0,0,0,115,188,0,0,0,124,0,106,0,125, - 1,122,22,116,1,160,2,124,1,112,22,116,1,160,3,161, - 0,161,1,125,2,87,0,110,28,4,0,116,4,116,5,116, - 6,102,3,121,56,1,0,1,0,1,0,103,0,125,2,89, - 0,110,2,48,0,116,7,106,8,160,9,100,1,161,1,115, - 82,116,10,124,2,131,1,124,0,95,11,110,74,116,10,131, - 0,125,3,124,2,68,0,93,56,125,4,124,4,160,12,100, - 2,161,1,92,3,125,5,125,6,125,7,124,6,114,134,100, - 3,160,13,124,5,124,7,160,14,161,0,161,2,125,8,110, - 4,124,5,125,8,124,3,160,15,124,8,161,1,1,0,113, - 92,124,3,124,0,95,11,116,7,106,8,160,9,116,16,161, - 1,114,184,100,4,100,5,132,0,124,2,68,0,131,1,124, - 0,95,17,100,6,83,0,41,7,122,68,70,105,108,108,32, - 116,104,101,32,99,97,99,104,101,32,111,102,32,112,111,116, - 101,110,116,105,97,108,32,109,111,100,117,108,101,115,32,97, - 110,100,32,112,97,99,107,97,103,101,115,32,102,111,114,32, - 116,104,105,115,32,100,105,114,101,99,116,111,114,121,46,114, - 0,0,0,0,114,71,0,0,0,114,61,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,83,0,0,0,115,20,0,0,0,104,0,124,0, - 93,12,125,1,124,1,160,0,161,0,146,2,113,4,83,0, - 114,5,0,0,0,41,1,114,105,0,0,0,41,2,114,32, - 0,0,0,90,2,102,110,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,218,9,60,115,101,116,99,111,109,112, - 62,235,5,0,0,114,63,1,0,0,122,41,70,105,108,101, - 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, - 104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,116, - 99,111,109,112,62,78,41,18,114,44,0,0,0,114,4,0, - 0,0,114,7,1,0,0,114,55,0,0,0,114,3,1,0, - 0,218,15,80,101,114,109,105,115,115,105,111,110,69,114,114, - 111,114,218,18,78,111,116,65,68,105,114,101,99,116,111,114, - 121,69,114,114,111,114,114,1,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,66,1,0,0,114,67,1,0,0,114, - 100,0,0,0,114,62,0,0,0,114,105,0,0,0,218,3, - 97,100,100,114,12,0,0,0,114,68,1,0,0,41,9,114, - 118,0,0,0,114,44,0,0,0,114,8,1,0,0,90,21, - 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, - 116,101,110,116,115,114,41,1,0,0,114,116,0,0,0,114, - 29,1,0,0,114,17,1,0,0,90,8,110,101,119,95,110, - 97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,70,1,0,0,206,5,0,0,115,34,0,0,0, - 0,2,6,1,2,1,22,1,18,3,10,3,12,1,12,7, - 6,1,8,1,16,1,4,1,18,2,4,1,12,1,6,1, - 12,1,122,22,70,105,108,101,70,105,110,100,101,114,46,95, - 102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,7, - 0,0,0,115,18,0,0,0,135,0,135,1,102,2,100,1, - 100,2,132,8,125,2,124,2,83,0,41,3,97,20,1,0, - 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, - 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, - 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, - 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, - 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, - 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, - 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, - 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, - 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, - 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, - 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, - 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, - 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,32,32,32,32,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,36, - 0,0,0,116,0,124,0,131,1,115,20,116,1,100,1,124, - 0,100,2,141,2,130,1,136,0,124,0,103,1,136,1,162, - 1,82,0,142,0,83,0,41,3,122,45,80,97,116,104,32, - 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, - 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, - 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, - 117,112,112,111,114,116,101,100,114,48,0,0,0,41,2,114, - 56,0,0,0,114,117,0,0,0,114,48,0,0,0,169,2, - 114,193,0,0,0,114,69,1,0,0,114,5,0,0,0,114, - 8,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, - 102,111,114,95,70,105,108,101,70,105,110,100,101,114,247,5, - 0,0,115,6,0,0,0,0,2,8,1,12,1,122,54,70, - 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, - 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116, - 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, - 105,110,100,101,114,114,5,0,0,0,41,3,114,193,0,0, - 0,114,69,1,0,0,114,76,1,0,0,114,5,0,0,0, - 114,75,1,0,0,114,8,0,0,0,218,9,112,97,116,104, - 95,104,111,111,107,237,5,0,0,115,4,0,0,0,0,10, - 14,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112, - 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, + 0,67,0,0,0,115,14,0,0,0,124,2,124,0,106,0, + 124,1,60,0,100,0,83,0,114,69,0,0,0,41,1,114, + 47,1,0,0,41,3,114,142,0,0,0,114,58,1,0,0, + 114,65,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, + 95,227,4,0,0,115,2,0,0,0,0,1,122,26,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,115, + 101,116,105,116,101,109,95,95,99,1,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1, - 83,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101, - 114,40,123,33,114,125,41,41,2,114,62,0,0,0,114,44, - 0,0,0,114,246,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,39,1,0,0,255,5,0,0, - 115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,110, - 100,101,114,46,95,95,114,101,112,114,95,95,41,1,78,41, - 15,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, - 114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114, - 143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58, - 1,0,0,114,203,0,0,0,114,70,1,0,0,114,207,0, - 0,0,114,77,1,0,0,114,39,1,0,0,114,5,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,61,1,0,0,112,5,0,0,115,22,0,0,0,8,2, - 4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31, - 2,1,10,17,114,61,1,0,0,99,4,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0, - 0,0,115,144,0,0,0,124,0,160,0,100,1,161,1,125, - 4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124, - 5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107, - 2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116, - 3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124, - 1,124,2,124,4,100,3,141,3,125,5,122,36,124,5,124, - 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, - 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110, - 18,4,0,116,5,121,138,1,0,1,0,1,0,89,0,110, - 2,48,0,100,0,83,0,41,6,78,218,10,95,95,108,111, - 97,100,101,114,95,95,218,8,95,95,115,112,101,99,95,95, - 114,62,1,0,0,90,8,95,95,102,105,108,101,95,95,90, - 10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,103, - 101,116,114,140,0,0,0,114,15,1,0,0,114,9,1,0, - 0,114,190,0,0,0,218,9,69,120,99,101,112,116,105,111, - 110,41,6,90,2,110,115,114,116,0,0,0,90,8,112,97, - 116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,109, - 101,114,140,0,0,0,114,187,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,218,14,95,102,105,120, - 95,117,112,95,109,111,100,117,108,101,5,6,0,0,115,34, - 0,0,0,0,2,10,1,10,1,4,1,4,1,8,1,8, - 1,12,2,10,1,4,1,14,1,2,1,8,1,8,1,8, - 1,12,1,12,2,114,82,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, - 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, - 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,1, - 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, - 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, - 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, - 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, - 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, - 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, - 32,41,7,114,252,0,0,0,114,163,0,0,0,218,18,101, - 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, - 115,114,9,1,0,0,114,101,0,0,0,114,15,1,0,0, - 114,88,0,0,0,41,3,90,10,101,120,116,101,110,115,105, - 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, - 101,99,111,100,101,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,114,184,0,0,0,28,6,0,0,115,8,0, - 0,0,0,5,12,1,8,1,8,1,114,184,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, - 9,0,0,0,67,0,0,0,115,132,1,0,0,124,0,97, - 0,116,0,106,1,97,1,116,0,106,2,97,2,116,1,106, - 3,116,4,25,0,125,1,100,1,100,2,103,1,102,2,100, - 3,100,4,100,2,103,2,102,2,102,2,125,2,124,2,68, - 0,93,108,92,2,125,3,125,4,116,5,100,5,100,6,132, - 0,124,4,68,0,131,1,131,1,115,82,74,0,130,1,124, - 4,100,7,25,0,125,5,124,3,116,1,106,3,118,0,114, - 116,116,1,106,3,124,3,25,0,125,6,1,0,113,170,113, - 52,122,20,116,0,160,6,124,3,161,1,125,6,87,0,1, - 0,113,170,87,0,113,52,4,0,116,7,121,158,1,0,1, - 0,1,0,89,0,113,52,89,0,113,52,48,0,113,52,116, - 7,100,8,131,1,130,1,116,8,124,1,100,9,124,6,131, - 3,1,0,116,8,124,1,100,10,124,5,131,3,1,0,116, - 8,124,1,100,11,100,12,160,9,124,4,161,1,131,3,1, - 0,116,8,124,1,100,13,100,14,100,15,132,0,124,4,68, - 0,131,1,131,3,1,0,103,0,100,16,162,1,125,7,124, - 3,100,3,107,2,144,1,114,6,124,7,160,10,100,17,161, - 1,1,0,124,7,68,0,93,52,125,8,124,8,116,1,106, - 3,118,1,144,1,114,38,116,0,160,6,124,8,161,1,125, - 9,110,10,116,1,106,3,124,8,25,0,125,9,116,8,124, - 1,124,8,124,9,131,3,1,0,144,1,113,10,116,8,124, - 1,100,18,116,11,131,0,131,3,1,0,116,12,160,13,116, - 2,160,14,161,0,161,1,1,0,124,3,100,3,107,2,144, - 1,114,128,116,15,160,10,100,19,161,1,1,0,100,20,116, - 12,118,0,144,1,114,128,100,21,116,16,95,17,100,22,83, - 0,41,23,122,205,83,101,116,117,112,32,116,104,101,32,112, - 97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,116, - 101,114,115,32,102,111,114,32,105,109,112,111,114,116,108,105, - 98,32,98,121,32,105,109,112,111,114,116,105,110,103,32,110, - 101,101,100,101,100,10,32,32,32,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,32,97,110,100,32,105, - 110,106,101,99,116,105,110,103,32,116,104,101,109,32,105,110, - 116,111,32,116,104,101,32,103,108,111,98,97,108,32,110,97, - 109,101,115,112,97,99,101,46,10,10,32,32,32,32,79,116, - 104,101,114,32,99,111,109,112,111,110,101,110,116,115,32,97, - 114,101,32,101,120,116,114,97,99,116,101,100,32,102,114,111, - 109,32,116,104,101,32,99,111,114,101,32,98,111,111,116,115, - 116,114,97,112,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,90,5,112,111,115,105,120,250,1,47,90,2,110,116, - 250,1,92,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,115,0,0,0,115,26,0,0, - 0,124,0,93,18,125,1,116,0,124,1,131,1,100,0,107, - 2,86,0,1,0,113,2,100,1,83,0,41,2,114,39,0, - 0,0,78,41,1,114,23,0,0,0,41,2,114,32,0,0, - 0,114,94,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,19,1,0,0,57,6,0,0,114,63, - 1,0,0,122,25,95,115,101,116,117,112,46,60,108,111,99, - 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,73, - 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, - 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, - 32,110,116,114,4,0,0,0,114,35,0,0,0,114,31,0, - 0,0,114,40,0,0,0,114,58,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,83,0,0,0,115,22,0,0,0,104,0,124,0,93,14, - 125,1,100,0,124,1,155,0,157,2,146,2,113,4,83,0, - 41,1,114,74,0,0,0,114,5,0,0,0,41,2,114,32, - 0,0,0,218,1,115,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,71,1,0,0,74,6,0,0,114,63, - 1,0,0,122,25,95,115,101,116,117,112,46,60,108,111,99, - 97,108,115,62,46,60,115,101,116,99,111,109,112,62,41,3, - 114,64,0,0,0,114,75,0,0,0,114,160,0,0,0,114, - 192,0,0,0,114,9,0,0,0,122,4,46,112,121,119,122, - 6,95,100,46,112,121,100,84,78,41,18,114,134,0,0,0, - 114,1,0,0,0,114,163,0,0,0,114,31,1,0,0,114, - 125,0,0,0,218,3,97,108,108,90,18,95,98,117,105,108, - 116,105,110,95,102,114,111,109,95,110,97,109,101,114,117,0, - 0,0,114,129,0,0,0,114,36,0,0,0,114,186,0,0, - 0,114,14,0,0,0,114,21,1,0,0,114,167,0,0,0, - 114,83,1,0,0,114,101,0,0,0,114,191,0,0,0,114, - 195,0,0,0,41,10,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,95, - 109,111,100,117,108,101,90,10,111,115,95,100,101,116,97,105, - 108,115,90,10,98,117,105,108,116,105,110,95,111,115,114,31, - 0,0,0,114,35,0,0,0,90,9,111,115,95,109,111,100, - 117,108,101,90,13,98,117,105,108,116,105,110,95,110,97,109, - 101,115,90,12,98,117,105,108,116,105,110,95,110,97,109,101, - 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, - 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 6,95,115,101,116,117,112,39,6,0,0,115,70,0,0,0, - 0,8,4,1,6,1,6,2,10,3,22,1,12,2,22,1, - 8,1,10,1,10,1,6,2,2,1,10,1,10,1,12,1, - 12,2,8,2,12,1,12,1,18,1,22,3,8,1,10,1, - 10,1,8,1,12,1,12,2,10,1,16,3,14,1,14,1, - 10,1,10,1,10,1,114,89,1,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, - 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, - 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160, - 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, - 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, - 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, - 112,111,110,101,110,116,115,46,78,41,10,114,89,1,0,0, - 114,184,0,0,0,114,1,0,0,0,114,51,1,0,0,114, - 167,0,0,0,114,61,1,0,0,114,77,1,0,0,218,9, - 109,101,116,97,95,112,97,116,104,114,186,0,0,0,114,45, - 1,0,0,41,2,114,88,1,0,0,90,17,115,117,112,112, - 111,114,116,101,100,95,108,111,97,100,101,114,115,114,5,0, - 0,0,114,5,0,0,0,114,8,0,0,0,218,8,95,105, - 110,115,116,97,108,108,96,6,0,0,115,8,0,0,0,0, - 2,8,1,6,1,20,1,114,91,1,0,0,41,1,114,60, - 0,0,0,41,1,78,41,3,78,78,78,41,2,114,73,0, - 0,0,114,73,0,0,0,41,1,84,41,1,78,41,1,78, - 41,63,114,127,0,0,0,114,13,0,0,0,90,37,95,67, - 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, - 80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95, - 75,69,89,114,12,0,0,0,114,14,0,0,0,114,21,0, - 0,0,114,27,0,0,0,114,29,0,0,0,114,38,0,0, - 0,114,47,0,0,0,114,49,0,0,0,114,53,0,0,0, - 114,54,0,0,0,114,56,0,0,0,114,59,0,0,0,114, - 69,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, - 100,101,95,95,114,162,0,0,0,114,19,0,0,0,114,148, - 0,0,0,114,18,0,0,0,114,24,0,0,0,114,236,0, - 0,0,114,91,0,0,0,114,87,0,0,0,114,101,0,0, - 0,114,88,0,0,0,90,23,68,69,66,85,71,95,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, - 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,114,97,0,0, - 0,114,102,0,0,0,114,108,0,0,0,114,112,0,0,0, - 114,114,0,0,0,114,136,0,0,0,114,143,0,0,0,114, - 152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165, - 0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0, - 0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114, - 190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221, - 0,0,0,114,239,0,0,0,114,9,1,0,0,114,15,1, - 0,0,114,21,1,0,0,114,252,0,0,0,114,22,1,0, - 0,114,43,1,0,0,114,45,1,0,0,114,61,1,0,0, - 114,82,1,0,0,114,184,0,0,0,114,89,1,0,0,114, - 91,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,218,8,60,109,111,100,117,108, - 101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4, - 1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8, - 6,8,12,8,10,8,9,8,5,8,7,8,9,10,22,10, - 127,0,20,16,1,12,2,4,1,4,2,6,2,6,2,8, - 2,16,71,8,40,8,19,8,12,8,12,8,28,8,17,8, - 33,8,28,8,24,10,13,10,10,10,11,8,14,6,3,4, - 1,2,255,12,68,14,64,14,29,16,127,0,17,14,72,18, - 45,18,26,4,3,18,53,14,63,14,42,14,127,0,20,14, - 127,0,22,10,23,8,11,8,57, + 0,115,12,0,0,0,116,0,124,0,160,1,161,0,131,1, + 83,0,114,69,0,0,0,41,2,114,6,0,0,0,114,55, + 1,0,0,114,13,1,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,7,95,95,108,101,110,95,95, + 230,4,0,0,115,2,0,0,0,0,1,122,22,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, + 110,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, + 122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 40,123,33,114,125,41,41,2,114,88,0,0,0,114,47,1, + 0,0,114,13,1,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,8,95,95,114,101,112,114,95,95, + 233,4,0,0,115,2,0,0,0,0,1,122,23,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,114,101, + 112,114,95,95,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,3,0,0,0,67,0,0,0,115,12,0, + 0,0,124,1,124,0,160,0,161,0,118,0,83,0,114,69, + 0,0,0,114,57,1,0,0,169,2,114,142,0,0,0,218, + 4,105,116,101,109,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,12,95,95,99,111,110,116,97,105,110,115, + 95,95,236,4,0,0,115,2,0,0,0,0,1,122,27,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 99,111,110,116,97,105,110,115,95,95,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,16,0,0,0,124,0,106,0,160,1,124,1, + 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, + 47,1,0,0,114,61,0,0,0,114,63,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,61,0, + 0,0,239,4,0,0,115,2,0,0,0,0,1,122,21,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, + 112,101,110,100,78,41,15,114,149,0,0,0,114,148,0,0, + 0,114,150,0,0,0,114,151,0,0,0,114,232,0,0,0, + 114,53,1,0,0,114,48,1,0,0,114,55,1,0,0,114, + 56,1,0,0,114,59,1,0,0,114,60,1,0,0,114,61, + 1,0,0,114,62,1,0,0,114,65,1,0,0,114,61,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,45,1,0,0,181,4,0,0,115, + 24,0,0,0,8,1,4,6,8,6,8,10,8,4,8,13, + 8,3,8,3,8,3,8,3,8,3,8,3,114,45,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,64,0,0,0,115,80,0,0,0,101, + 0,90,1,100,0,90,2,100,1,100,2,132,0,90,3,101, + 4,100,3,100,4,132,0,131,1,90,5,100,5,100,6,132, + 0,90,6,100,7,100,8,132,0,90,7,100,9,100,10,132, + 0,90,8,100,11,100,12,132,0,90,9,100,13,100,14,132, + 0,90,10,100,15,100,16,132,0,90,11,100,17,83,0,41, + 18,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,99,4,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,4,0,0,0,67,0,0,0,115,18,0,0, + 0,116,0,124,1,124,2,124,3,131,3,124,0,95,1,100, + 0,83,0,114,69,0,0,0,41,2,114,45,1,0,0,114, + 47,1,0,0,114,51,1,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,232,0,0,0,245,4,0, + 0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,160,0,124,1,106,1,161,1,83,0,41,2,122, + 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, + 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,84,104,101,32,105,109,112,111,114,116,32,109,97,99,104, + 105,110,101,114,121,32,100,111,101,115,32,116,104,101,32,106, + 111,98,32,105,116,115,101,108,102,46,10,10,32,32,32,32, + 32,32,32,32,122,25,60,109,111,100,117,108,101,32,123,33, + 114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,41, + 2,114,88,0,0,0,114,149,0,0,0,41,2,114,216,0, + 0,0,114,239,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,11,109,111,100,117,108,101,95,114, + 101,112,114,248,4,0,0,115,2,0,0,0,0,7,122,28, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,109,111,100,117,108,101,95,114,101,112,114,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, + 78,84,114,10,0,0,0,114,242,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,206,0,0,0, + 1,5,0,0,115,2,0,0,0,0,1,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,83,0,41,2,78,114,14,0, + 0,0,114,10,0,0,0,114,242,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,252,0,0,0, + 4,5,0,0,115,2,0,0,0,0,1,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, + 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,6,0,0,0,67,0,0, + 0,115,16,0,0,0,116,0,100,1,100,2,100,3,100,4, + 100,5,141,4,83,0,41,6,78,114,14,0,0,0,122,8, + 60,115,116,114,105,110,103,62,114,238,0,0,0,84,41,1, + 114,254,0,0,0,41,1,114,255,0,0,0,114,242,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,236,0,0,0,7,5,0,0,115,2,0,0,0,0,1, + 122,25,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,83,0,114,233,0, + 0,0,114,10,0,0,0,114,234,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,235,0,0,0, + 10,5,0,0,115,2,0,0,0,0,1,122,30,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,99,114, + 101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,0,83,0,114,69,0, + 0,0,114,10,0,0,0,114,20,1,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,240,0,0,0, + 13,5,0,0,115,2,0,0,0,0,1,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,101,120, + 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,26,0,0,0,116,0,160,1,100,1,124,0,106, + 2,161,2,1,0,116,0,160,3,124,0,124,1,161,2,83, + 0,41,2,122,98,76,111,97,100,32,97,32,110,97,109,101, + 115,112,97,99,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,122,38,110,97,109,101,115,112,97, + 99,101,32,109,111,100,117,108,101,32,108,111,97,100,101,100, + 32,119,105,116,104,32,112,97,116,104,32,123,33,114,125,41, + 4,114,158,0,0,0,114,173,0,0,0,114,47,1,0,0, + 114,241,0,0,0,114,242,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,243,0,0,0,16,5, + 0,0,115,8,0,0,0,0,7,6,1,4,255,4,2,122, + 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,78,41,12, + 114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,114, + 232,0,0,0,114,230,0,0,0,114,67,1,0,0,114,206, + 0,0,0,114,252,0,0,0,114,236,0,0,0,114,235,0, + 0,0,114,240,0,0,0,114,243,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,66,1,0,0,244,4,0,0,115,18,0,0,0,8,1, + 8,3,2,1,10,8,8,3,8,3,8,3,8,3,8,3, + 114,66,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,118, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,101, + 4,100,2,100,3,132,0,131,1,90,5,101,4,100,4,100, + 5,132,0,131,1,90,6,101,4,100,6,100,7,132,0,131, + 1,90,7,101,4,100,8,100,9,132,0,131,1,90,8,101, + 4,100,19,100,11,100,12,132,1,131,1,90,9,101,4,100, + 20,100,13,100,14,132,1,131,1,90,10,101,4,100,21,100, + 15,100,16,132,1,131,1,90,11,101,4,100,17,100,18,132, + 0,131,1,90,12,100,10,83,0,41,22,218,10,80,97,116, + 104,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, + 116,104,32,102,105,110,100,101,114,32,102,111,114,32,115,121, + 115,46,112,97,116,104,32,97,110,100,32,112,97,99,107,97, + 103,101,32,95,95,112,97,116,104,95,95,32,97,116,116,114, + 105,98,117,116,101,115,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, + 115,64,0,0,0,116,0,116,1,106,2,160,3,161,0,131, + 1,68,0,93,44,92,2,125,1,125,2,124,2,100,1,117, + 0,114,40,116,1,106,2,124,1,61,0,113,14,116,4,124, + 2,100,2,131,2,114,14,124,2,160,5,161,0,1,0,113, + 14,100,1,83,0,41,3,122,125,67,97,108,108,32,116,104, + 101,32,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,40,41,32,109,101,116,104,111,100,32,111,110,32, + 97,108,108,32,112,97,116,104,32,101,110,116,114,121,32,102, + 105,110,100,101,114,115,10,32,32,32,32,32,32,32,32,115, + 116,111,114,101,100,32,105,110,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 115,32,40,119,104,101,114,101,32,105,109,112,108,101,109,101, + 110,116,101,100,41,46,78,218,17,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,41,6,218,4,108,105, + 115,116,114,21,0,0,0,218,19,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,218,5,105,116, + 101,109,115,114,152,0,0,0,114,69,1,0,0,41,3,114, + 216,0,0,0,114,140,0,0,0,218,6,102,105,110,100,101, + 114,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,69,1,0,0,34,5,0,0,115,10,0,0,0,0,4, + 22,1,8,1,10,1,10,1,122,28,80,97,116,104,70,105, + 110,100,101,114,46,105,110,118,97,108,105,100,97,116,101,95, + 99,97,99,104,101,115,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,9,0,0,0,67,0,0,0,115, + 82,0,0,0,116,0,106,1,100,1,117,1,114,28,116,0, + 106,1,115,28,116,2,160,3,100,2,116,4,161,2,1,0, + 116,0,106,1,68,0,93,42,125,2,122,14,124,2,124,1, + 131,1,87,0,2,0,1,0,83,0,4,0,116,5,121,74, + 1,0,1,0,1,0,89,0,113,34,89,0,113,34,48,0, + 113,34,100,1,83,0,41,3,122,46,83,101,97,114,99,104, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, + 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, + 116,121,41,6,114,21,0,0,0,218,10,112,97,116,104,95, + 104,111,111,107,115,114,98,0,0,0,114,99,0,0,0,114, + 162,0,0,0,114,141,0,0,0,41,3,114,216,0,0,0, + 114,65,0,0,0,90,4,104,111,111,107,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,11,95,112,97,116, + 104,95,104,111,111,107,115,44,5,0,0,115,16,0,0,0, + 0,3,16,1,12,1,10,1,2,1,14,1,12,1,12,2, + 122,22,80,97,116,104,70,105,110,100,101,114,46,95,112,97, + 116,104,95,104,111,111,107,115,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, + 0,115,100,0,0,0,124,1,100,1,107,2,114,42,122,12, + 116,0,160,1,161,0,125,1,87,0,110,20,4,0,116,2, + 121,40,1,0,1,0,1,0,89,0,100,2,83,0,48,0, + 122,14,116,3,106,4,124,1,25,0,125,2,87,0,110,38, + 4,0,116,5,121,94,1,0,1,0,1,0,124,0,160,6, + 124,1,161,1,125,2,124,2,116,3,106,4,124,1,60,0, + 89,0,110,2,48,0,124,2,83,0,41,3,122,210,71,101, + 116,32,116,104,101,32,102,105,110,100,101,114,32,102,111,114, + 32,116,104,101,32,112,97,116,104,32,101,110,116,114,121,32, + 102,114,111,109,32,115,121,115,46,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,46,10,10,32, + 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, + 116,104,32,101,110,116,114,121,32,105,115,32,110,111,116,32, + 105,110,32,116,104,101,32,99,97,99,104,101,44,32,102,105, + 110,100,32,116,104,101,32,97,112,112,114,111,112,114,105,97, + 116,101,32,102,105,110,100,101,114,10,32,32,32,32,32,32, + 32,32,97,110,100,32,99,97,99,104,101,32,105,116,46,32, + 73,102,32,110,111,32,102,105,110,100,101,114,32,105,115,32, + 97,118,97,105,108,97,98,108,101,44,32,115,116,111,114,101, + 32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,32, + 114,14,0,0,0,78,41,7,114,24,0,0,0,114,81,0, + 0,0,114,26,1,0,0,114,21,0,0,0,114,71,1,0, + 0,218,8,75,101,121,69,114,114,111,114,114,75,1,0,0, + 41,3,114,216,0,0,0,114,65,0,0,0,114,73,1,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,20,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,57,5,0,0,115,22,0,0,0,0, + 8,8,1,2,1,12,1,12,3,8,1,2,1,14,1,12, + 1,10,1,16,1,122,31,80,97,116,104,70,105,110,100,101, + 114,46,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,99,3,0,0,0,0,0,0,0,0, + 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, + 82,0,0,0,116,0,124,2,100,1,131,2,114,26,124,2, + 160,1,124,1,161,1,92,2,125,3,125,4,110,14,124,2, + 160,2,124,1,161,1,125,3,103,0,125,4,124,3,100,0, + 117,1,114,60,116,3,160,4,124,1,124,3,161,2,83,0, + 116,3,160,5,124,1,100,0,161,2,125,5,124,4,124,5, + 95,6,124,5,83,0,41,2,78,114,161,0,0,0,41,7, + 114,152,0,0,0,114,161,0,0,0,114,229,0,0,0,114, + 158,0,0,0,114,224,0,0,0,114,207,0,0,0,114,202, + 0,0,0,41,6,114,216,0,0,0,114,163,0,0,0,114, + 73,1,0,0,114,164,0,0,0,114,165,0,0,0,114,210, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,16,95,108,101,103,97,99,121,95,103,101,116,95, + 115,112,101,99,79,5,0,0,115,18,0,0,0,0,4,10, + 1,16,2,10,1,4,1,8,1,12,1,12,1,6,1,122, + 27,80,97,116,104,70,105,110,100,101,114,46,95,108,101,103, + 97,99,121,95,103,101,116,95,115,112,101,99,78,99,4,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,5,0, + 0,0,67,0,0,0,115,166,0,0,0,103,0,125,4,124, + 2,68,0,93,134,125,5,116,0,124,5,116,1,116,2,102, + 2,131,2,115,28,113,8,124,0,160,3,124,5,161,1,125, + 6,124,6,100,1,117,1,114,8,116,4,124,6,100,2,131, + 2,114,70,124,6,160,5,124,1,124,3,161,2,125,7,110, + 12,124,0,160,6,124,1,124,6,161,2,125,7,124,7,100, + 1,117,0,114,92,113,8,124,7,106,7,100,1,117,1,114, + 110,124,7,2,0,1,0,83,0,124,7,106,8,125,8,124, + 8,100,1,117,0,114,132,116,9,100,3,131,1,130,1,124, + 4,160,10,124,8,161,1,1,0,113,8,116,11,160,12,124, + 1,100,1,161,2,125,7,124,4,124,7,95,8,124,7,83, + 0,41,4,122,63,70,105,110,100,32,116,104,101,32,108,111, + 97,100,101,114,32,111,114,32,110,97,109,101,115,112,97,99, + 101,95,112,97,116,104,32,102,111,114,32,116,104,105,115,32, + 109,111,100,117,108,101,47,112,97,99,107,97,103,101,32,110, + 97,109,101,46,78,114,226,0,0,0,122,19,115,112,101,99, + 32,109,105,115,115,105,110,103,32,108,111,97,100,101,114,41, + 13,114,185,0,0,0,114,108,0,0,0,218,5,98,121,116, + 101,115,114,77,1,0,0,114,152,0,0,0,114,226,0,0, + 0,114,78,1,0,0,114,164,0,0,0,114,202,0,0,0, + 114,141,0,0,0,114,191,0,0,0,114,158,0,0,0,114, + 207,0,0,0,41,9,114,216,0,0,0,114,163,0,0,0, + 114,65,0,0,0,114,225,0,0,0,218,14,110,97,109,101, + 115,112,97,99,101,95,112,97,116,104,90,5,101,110,116,114, + 121,114,73,1,0,0,114,210,0,0,0,114,165,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 9,95,103,101,116,95,115,112,101,99,94,5,0,0,115,40, + 0,0,0,0,5,4,1,8,1,14,1,2,1,10,1,8, + 1,10,1,14,2,12,1,8,1,2,1,10,1,8,1,6, + 1,8,1,8,5,12,2,12,1,6,1,122,20,80,97,116, + 104,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101, + 99,99,4,0,0,0,0,0,0,0,0,0,0,0,6,0, + 0,0,5,0,0,0,67,0,0,0,115,100,0,0,0,124, + 2,100,1,117,0,114,14,116,0,106,1,125,2,124,0,160, + 2,124,1,124,2,124,3,161,3,125,4,124,4,100,1,117, + 0,114,40,100,1,83,0,124,4,106,3,100,1,117,0,114, + 92,124,4,106,4,125,5,124,5,114,86,100,1,124,4,95, + 5,116,6,124,1,124,5,124,0,106,2,131,3,124,4,95, + 4,124,4,83,0,100,1,83,0,110,4,124,4,83,0,100, + 1,83,0,41,2,122,141,84,114,121,32,116,111,32,102,105, + 110,100,32,97,32,115,112,101,99,32,102,111,114,32,39,102, + 117,108,108,110,97,109,101,39,32,111,110,32,115,121,115,46, + 112,97,116,104,32,111,114,32,39,112,97,116,104,39,46,10, + 10,32,32,32,32,32,32,32,32,84,104,101,32,115,101,97, + 114,99,104,32,105,115,32,98,97,115,101,100,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, + 110,100,32,115,121,115,46,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,46,10,32,32,32,32, + 32,32,32,32,78,41,7,114,21,0,0,0,114,65,0,0, + 0,114,81,1,0,0,114,164,0,0,0,114,202,0,0,0, + 114,205,0,0,0,114,45,1,0,0,41,6,114,216,0,0, + 0,114,163,0,0,0,114,65,0,0,0,114,225,0,0,0, + 114,210,0,0,0,114,80,1,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,226,0,0,0,126,5, + 0,0,115,26,0,0,0,0,6,8,1,6,1,14,1,8, + 1,4,1,10,1,6,1,4,3,6,1,16,1,4,2,6, + 2,122,20,80,97,116,104,70,105,110,100,101,114,46,102,105, + 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, + 115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,125, + 3,124,3,100,1,117,0,114,24,100,1,83,0,124,3,106, + 1,83,0,41,2,122,170,102,105,110,100,32,116,104,101,32, + 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, + 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, + 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, + 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,114,227,0,0,0,114,228,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,229,0,0,0, + 150,5,0,0,115,8,0,0,0,0,8,12,1,8,1,4, + 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, + 110,100,95,109,111,100,117,108,101,99,1,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,79,0, + 0,0,115,28,0,0,0,100,1,100,2,108,0,109,1,125, + 3,1,0,124,3,106,2,124,1,105,0,124,2,164,1,142, + 1,83,0,41,3,97,32,1,0,0,10,32,32,32,32,32, + 32,32,32,70,105,110,100,32,100,105,115,116,114,105,98,117, + 116,105,111,110,115,46,10,10,32,32,32,32,32,32,32,32, + 82,101,116,117,114,110,32,97,110,32,105,116,101,114,97,98, + 108,101,32,111,102,32,97,108,108,32,68,105,115,116,114,105, + 98,117,116,105,111,110,32,105,110,115,116,97,110,99,101,115, + 32,99,97,112,97,98,108,101,32,111,102,10,32,32,32,32, + 32,32,32,32,108,111,97,100,105,110,103,32,116,104,101,32, + 109,101,116,97,100,97,116,97,32,102,111,114,32,112,97,99, + 107,97,103,101,115,32,109,97,116,99,104,105,110,103,32,96, + 96,99,111,110,116,101,120,116,46,110,97,109,101,96,96,10, + 32,32,32,32,32,32,32,32,40,111,114,32,97,108,108,32, + 110,97,109,101,115,32,105,102,32,96,96,78,111,110,101,96, + 96,32,105,110,100,105,99,97,116,101,100,41,32,97,108,111, + 110,103,32,116,104,101,32,112,97,116,104,115,32,105,110,32, + 116,104,101,32,108,105,115,116,10,32,32,32,32,32,32,32, + 32,111,102,32,100,105,114,101,99,116,111,114,105,101,115,32, + 96,96,99,111,110,116,101,120,116,46,112,97,116,104,96,96, + 46,10,32,32,32,32,32,32,32,32,114,0,0,0,0,41, + 1,218,18,77,101,116,97,100,97,116,97,80,97,116,104,70, + 105,110,100,101,114,41,3,90,18,105,109,112,111,114,116,108, + 105,98,46,109,101,116,97,100,97,116,97,114,82,1,0,0, + 218,18,102,105,110,100,95,100,105,115,116,114,105,98,117,116, + 105,111,110,115,41,4,114,216,0,0,0,114,143,0,0,0, + 114,144,0,0,0,114,82,1,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,83,1,0,0,163,5, + 0,0,115,4,0,0,0,0,10,12,1,122,29,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, + 116,114,105,98,117,116,105,111,110,115,41,1,78,41,2,78, + 78,41,1,78,41,13,114,149,0,0,0,114,148,0,0,0, + 114,150,0,0,0,114,151,0,0,0,114,230,0,0,0,114, + 69,1,0,0,114,75,1,0,0,114,77,1,0,0,114,78, + 1,0,0,114,81,1,0,0,114,226,0,0,0,114,229,0, + 0,0,114,83,1,0,0,114,10,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,68,1,0,0, + 30,5,0,0,115,34,0,0,0,8,2,4,2,2,1,10, + 9,2,1,10,12,2,1,10,21,2,1,10,14,2,1,12, + 31,2,1,12,23,2,1,12,12,2,1,114,68,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,64,0,0,0,115,90,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,101,6,90,7,100,6, + 100,7,132,0,90,8,100,8,100,9,132,0,90,9,100,19, + 100,11,100,12,132,1,90,10,100,13,100,14,132,0,90,11, + 101,12,100,15,100,16,132,0,131,1,90,13,100,17,100,18, + 132,0,90,14,100,10,83,0,41,20,218,10,70,105,108,101, + 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, + 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, + 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, + 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, + 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, + 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, + 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, + 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, + 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, + 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, + 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, + 32,32,32,32,99,2,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,6,0,0,0,7,0,0,0,115,112,0, + 0,0,103,0,125,3,124,2,68,0,93,32,92,2,137,0, + 125,4,124,3,160,0,135,0,102,1,100,1,100,2,132,8, + 124,4,68,0,131,1,161,1,1,0,113,8,124,3,124,0, + 95,1,124,1,112,54,100,3,124,0,95,2,116,3,124,0, + 106,2,131,1,115,86,116,4,116,5,160,6,161,0,124,0, + 106,2,131,2,124,0,95,2,100,4,124,0,95,7,116,8, + 131,0,124,0,95,9,116,8,131,0,124,0,95,10,100,5, + 83,0,41,6,122,154,73,110,105,116,105,97,108,105,122,101, + 32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116, + 111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32, + 97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101, + 114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116, + 117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103, + 32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32, + 116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101, + 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32, + 32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,51,0,0,0,115,22,0,0,0,124,0, + 93,14,125,1,124,1,136,0,102,2,86,0,1,0,113,2, + 100,0,83,0,114,69,0,0,0,114,10,0,0,0,114,40, + 1,0,0,169,1,114,164,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,12,0,0,0,192,5,0,0,114,13,0, + 0,0,122,38,70,105,108,101,70,105,110,100,101,114,46,95, + 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,114,96,0,0,0,114, + 129,0,0,0,78,41,11,114,191,0,0,0,218,8,95,108, + 111,97,100,101,114,115,114,65,0,0,0,114,85,0,0,0, + 114,67,0,0,0,114,24,0,0,0,114,81,0,0,0,218, + 11,95,112,97,116,104,95,109,116,105,109,101,218,3,115,101, + 116,218,11,95,112,97,116,104,95,99,97,99,104,101,218,19, + 95,114,101,108,97,120,101,100,95,112,97,116,104,95,99,97, + 99,104,101,41,5,114,142,0,0,0,114,65,0,0,0,218, + 14,108,111,97,100,101,114,95,100,101,116,97,105,108,115,90, + 7,108,111,97,100,101,114,115,114,212,0,0,0,114,10,0, + 0,0,114,85,1,0,0,114,11,0,0,0,114,232,0,0, + 0,186,5,0,0,115,20,0,0,0,0,4,4,1,12,1, + 26,1,6,2,10,1,10,1,18,1,6,1,8,1,122,19, + 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,10,0,0, + 0,100,1,124,0,95,0,100,2,83,0,41,3,122,31,73, + 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,129, + 0,0,0,78,41,1,114,87,1,0,0,114,13,1,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 69,1,0,0,202,5,0,0,115,2,0,0,0,0,2,122, + 28,70,105,108,101,70,105,110,100,101,114,46,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,42,0,0,0,124,0,160,0,124, + 1,161,1,125,2,124,2,100,1,117,0,114,26,100,1,103, + 0,102,2,83,0,124,2,106,1,124,2,106,2,112,38,103, + 0,102,2,83,0,41,2,122,197,84,114,121,32,116,111,32, + 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, + 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, + 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, + 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, + 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, + 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, + 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, + 3,114,226,0,0,0,114,164,0,0,0,114,202,0,0,0, + 41,3,114,142,0,0,0,114,163,0,0,0,114,210,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,161,0,0,0,208,5,0,0,115,8,0,0,0,0,7, + 10,1,8,1,8,1,122,22,70,105,108,101,70,105,110,100, + 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,6, + 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,6, + 0,0,0,67,0,0,0,115,26,0,0,0,124,1,124,2, + 124,3,131,2,125,6,116,0,124,2,124,3,124,6,124,4, + 100,1,141,4,83,0,41,2,78,114,201,0,0,0,41,1, + 114,213,0,0,0,41,7,114,142,0,0,0,114,211,0,0, + 0,114,163,0,0,0,114,65,0,0,0,90,4,115,109,115, + 108,114,225,0,0,0,114,164,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,81,1,0,0,220, + 5,0,0,115,8,0,0,0,0,1,10,1,8,1,2,255, + 122,20,70,105,108,101,70,105,110,100,101,114,46,95,103,101, + 116,95,115,112,101,99,78,99,3,0,0,0,0,0,0,0, + 0,0,0,0,14,0,0,0,9,0,0,0,67,0,0,0, + 115,126,1,0,0,100,1,125,3,124,1,160,0,100,2,161, + 1,100,3,25,0,125,4,122,24,116,1,124,0,106,2,112, + 34,116,3,160,4,161,0,131,1,106,5,125,5,87,0,110, + 22,4,0,116,6,121,64,1,0,1,0,1,0,100,4,125, + 5,89,0,110,2,48,0,124,5,124,0,106,7,107,3,114, + 90,124,0,160,8,161,0,1,0,124,5,124,0,95,7,116, + 9,131,0,114,112,124,0,106,10,125,6,124,4,160,11,161, + 0,125,7,110,10,124,0,106,12,125,6,124,4,125,7,124, + 7,124,6,118,0,114,216,116,13,124,0,106,2,124,4,131, + 2,125,8,124,0,106,14,68,0,93,58,92,2,125,9,125, + 10,100,5,124,9,23,0,125,11,116,13,124,8,124,11,131, + 2,125,12,116,15,124,12,131,1,114,148,124,0,160,16,124, + 10,124,1,124,12,124,8,103,1,124,2,161,5,2,0,1, + 0,83,0,113,148,116,17,124,8,131,1,125,3,124,0,106, + 14,68,0,93,112,92,2,125,9,125,10,122,20,116,13,124, + 0,106,2,124,4,124,9,23,0,131,2,125,12,87,0,110, + 24,4,0,116,18,144,1,121,18,1,0,1,0,1,0,89, + 0,1,0,100,6,83,0,48,0,116,19,106,20,100,7,124, + 12,100,3,100,8,141,3,1,0,124,7,124,9,23,0,124, + 6,118,0,114,222,116,15,124,12,131,1,114,222,124,0,160, + 16,124,10,124,1,124,12,100,6,124,2,161,5,2,0,1, + 0,83,0,113,222,124,3,144,1,114,122,116,19,160,20,100, + 9,124,8,161,2,1,0,116,19,160,21,124,1,100,6,161, + 2,125,13,124,8,103,1,124,13,95,22,124,13,83,0,100, + 6,83,0,41,10,122,111,84,114,121,32,116,111,32,102,105, + 110,100,32,97,32,115,112,101,99,32,102,111,114,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,82,101,116, + 117,114,110,115,32,116,104,101,32,109,97,116,99,104,105,110, + 103,32,115,112,101,99,44,32,111,114,32,78,111,110,101,32, + 105,102,32,110,111,116,32,102,111,117,110,100,46,10,32,32, + 32,32,32,32,32,32,70,114,96,0,0,0,114,45,0,0, + 0,114,129,0,0,0,114,232,0,0,0,78,122,9,116,114, + 121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111, + 115,105,116,121,122,25,112,111,115,115,105,98,108,101,32,110, + 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,41, + 23,114,103,0,0,0,114,75,0,0,0,114,65,0,0,0, + 114,24,0,0,0,114,81,0,0,0,114,33,1,0,0,114, + 76,0,0,0,114,87,1,0,0,218,11,95,102,105,108,108, + 95,99,97,99,104,101,114,27,0,0,0,114,90,1,0,0, + 114,130,0,0,0,114,89,1,0,0,114,67,0,0,0,114, + 86,1,0,0,114,80,0,0,0,114,81,1,0,0,114,82, + 0,0,0,114,110,0,0,0,114,158,0,0,0,114,173,0, + 0,0,114,207,0,0,0,114,202,0,0,0,41,14,114,142, + 0,0,0,114,163,0,0,0,114,225,0,0,0,90,12,105, + 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, + 108,95,109,111,100,117,108,101,114,193,0,0,0,90,5,99, + 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, + 108,101,90,9,98,97,115,101,95,112,97,116,104,114,41,1, + 0,0,114,211,0,0,0,90,13,105,110,105,116,95,102,105, + 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, + 104,114,210,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,226,0,0,0,225,5,0,0,115,78, + 0,0,0,0,5,4,1,14,1,2,1,24,1,12,1,10, + 1,10,1,8,1,6,2,6,1,6,1,10,2,6,1,4, + 2,8,1,12,1,14,1,8,1,10,1,8,1,26,4,8, + 2,14,1,2,1,20,1,14,1,10,1,16,1,12,1,8, + 1,10,1,4,255,10,2,6,1,12,1,12,1,8,1,4, + 1,122,20,70,105,108,101,70,105,110,100,101,114,46,102,105, + 110,100,95,115,112,101,99,99,1,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,10,0,0,0,67,0,0,0, + 115,188,0,0,0,124,0,106,0,125,1,122,22,116,1,160, + 2,124,1,112,22,116,1,160,3,161,0,161,1,125,2,87, + 0,110,28,4,0,116,4,116,5,116,6,102,3,121,56,1, + 0,1,0,1,0,103,0,125,2,89,0,110,2,48,0,116, + 7,106,8,160,9,100,1,161,1,115,82,116,10,124,2,131, + 1,124,0,95,11,110,74,116,10,131,0,125,3,124,2,68, + 0,93,56,125,4,124,4,160,12,100,2,161,1,92,3,125, + 5,125,6,125,7,124,6,114,134,100,3,160,13,124,5,124, + 7,160,14,161,0,161,2,125,8,110,4,124,5,125,8,124, + 3,160,15,124,8,161,1,1,0,113,92,124,3,124,0,95, + 11,116,7,106,8,160,9,116,16,161,1,114,184,100,4,100, + 5,132,0,124,2,68,0,131,1,124,0,95,17,100,6,83, + 0,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, + 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, + 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, + 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, + 105,114,101,99,116,111,114,121,46,114,20,0,0,0,114,96, + 0,0,0,114,87,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, + 0,115,20,0,0,0,104,0,124,0,93,12,125,1,124,1, + 160,0,161,0,146,2,113,4,83,0,114,10,0,0,0,41, + 1,114,130,0,0,0,41,2,114,8,0,0,0,90,2,102, + 110,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,19,0,0,0,49,6,0,0,114,13,0,0,0,122,41, + 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, + 95,99,97,99,104,101,46,60,108,111,99,97,108,115,62,46, + 60,115,101,116,99,111,109,112,62,78,41,18,114,65,0,0, + 0,114,24,0,0,0,114,30,1,0,0,114,81,0,0,0, + 114,26,1,0,0,218,15,80,101,114,109,105,115,115,105,111, + 110,69,114,114,111,114,218,18,78,111,116,65,68,105,114,101, + 99,116,111,114,121,69,114,114,111,114,114,21,0,0,0,114, + 28,0,0,0,114,29,0,0,0,114,88,1,0,0,114,89, + 1,0,0,114,125,0,0,0,114,88,0,0,0,114,130,0, + 0,0,218,3,97,100,100,114,30,0,0,0,114,90,1,0, + 0,41,9,114,142,0,0,0,114,65,0,0,0,114,31,1, + 0,0,90,21,108,111,119,101,114,95,115,117,102,102,105,120, + 95,99,111,110,116,101,110,116,115,114,64,1,0,0,114,140, + 0,0,0,114,52,1,0,0,114,41,1,0,0,90,8,110, + 101,119,95,110,97,109,101,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,92,1,0,0,20,6,0,0,115, + 34,0,0,0,0,2,6,1,2,1,22,1,18,3,10,3, + 12,1,12,7,6,1,8,1,16,1,4,1,18,2,4,1, + 12,1,6,1,12,1,122,22,70,105,108,101,70,105,110,100, + 101,114,46,95,102,105,108,108,95,99,97,99,104,101,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,7,0,0,0,115,18,0,0,0,135,0,135,1, + 102,2,100,1,100,2,132,8,125,2,124,2,83,0,41,3, + 97,20,1,0,0,65,32,99,108,97,115,115,32,109,101,116, + 104,111,100,32,119,104,105,99,104,32,114,101,116,117,114,110, + 115,32,97,32,99,108,111,115,117,114,101,32,116,111,32,117, + 115,101,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,10,32,32,32,32,32,32,32,32,119,104,105,99, + 104,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110, + 32,105,110,115,116,97,110,99,101,32,117,115,105,110,103,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,108,111, + 97,100,101,114,115,32,97,110,100,32,116,104,101,32,112,97, + 116,104,10,32,32,32,32,32,32,32,32,99,97,108,108,101, + 100,32,111,110,32,116,104,101,32,99,108,111,115,117,114,101, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, + 101,32,112,97,116,104,32,99,97,108,108,101,100,32,111,110, + 32,116,104,101,32,99,108,111,115,117,114,101,32,105,115,32, + 110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,44, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,10, + 32,32,32,32,32,32,32,32,114,97,105,115,101,100,46,10, + 10,32,32,32,32,32,32,32,32,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,4,0,0,0,19,0, + 0,0,115,36,0,0,0,116,0,124,0,131,1,115,20,116, + 1,100,1,124,0,100,2,141,2,130,1,136,0,124,0,103, + 1,136,1,162,1,82,0,142,0,83,0,41,3,122,45,80, + 97,116,104,32,104,111,111,107,32,102,111,114,32,105,109,112, + 111,114,116,108,105,98,46,109,97,99,104,105,110,101,114,121, + 46,70,105,108,101,70,105,110,100,101,114,46,122,30,111,110, + 108,121,32,100,105,114,101,99,116,111,114,105,101,115,32,97, + 114,101,32,115,117,112,112,111,114,116,101,100,114,71,0,0, + 0,41,2,114,82,0,0,0,114,141,0,0,0,114,71,0, + 0,0,169,2,114,216,0,0,0,114,91,1,0,0,114,10, + 0,0,0,114,11,0,0,0,218,24,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,61,6,0,0,115,6,0,0,0,0,2,8,1,12, + 1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, + 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, + 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,114,10,0,0,0,41,3, + 114,216,0,0,0,114,91,1,0,0,114,97,1,0,0,114, + 10,0,0,0,114,96,1,0,0,114,11,0,0,0,218,9, + 112,97,116,104,95,104,111,111,107,51,6,0,0,115,4,0, + 0,0,0,10,14,6,122,20,70,105,108,101,70,105,110,100, + 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,16,70,105,108,101,70, + 105,110,100,101,114,40,123,33,114,125,41,41,2,114,88,0, + 0,0,114,65,0,0,0,114,13,1,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,62,1,0,0, + 69,6,0,0,115,2,0,0,0,0,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, + 41,1,78,41,15,114,149,0,0,0,114,148,0,0,0,114, + 150,0,0,0,114,151,0,0,0,114,232,0,0,0,114,69, + 1,0,0,114,167,0,0,0,114,229,0,0,0,114,161,0, + 0,0,114,81,1,0,0,114,226,0,0,0,114,92,1,0, + 0,114,230,0,0,0,114,98,1,0,0,114,62,1,0,0, + 114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,84,1,0,0,177,5,0,0,115,22,0, + 0,0,8,2,4,7,8,16,8,4,4,2,8,12,8,5, + 10,51,8,31,2,1,10,17,114,84,1,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,8,0, + 0,0,67,0,0,0,115,144,0,0,0,124,0,160,0,100, + 1,161,1,125,4,124,0,160,0,100,2,161,1,125,5,124, + 4,115,66,124,5,114,36,124,5,106,1,125,4,110,30,124, + 2,124,3,107,2,114,56,116,2,124,1,124,2,131,2,125, + 4,110,10,116,3,124,1,124,2,131,2,125,4,124,5,115, + 84,116,4,124,1,124,2,124,4,100,3,141,3,125,5,122, + 36,124,5,124,0,100,2,60,0,124,4,124,0,100,1,60, + 0,124,2,124,0,100,4,60,0,124,3,124,0,100,5,60, + 0,87,0,110,18,4,0,116,5,121,138,1,0,1,0,1, + 0,89,0,110,2,48,0,100,0,83,0,41,6,78,218,10, + 95,95,108,111,97,100,101,114,95,95,218,8,95,95,115,112, + 101,99,95,95,114,85,1,0,0,90,8,95,95,102,105,108, + 101,95,95,90,10,95,95,99,97,99,104,101,100,95,95,41, + 6,218,3,103,101,116,114,164,0,0,0,114,39,1,0,0, + 114,32,1,0,0,114,213,0,0,0,218,9,69,120,99,101, + 112,116,105,111,110,41,6,90,2,110,115,114,140,0,0,0, + 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, + 104,110,97,109,101,114,164,0,0,0,114,210,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,14, + 95,102,105,120,95,117,112,95,109,111,100,117,108,101,75,6, + 0,0,115,34,0,0,0,0,2,10,1,10,1,4,1,4, + 1,8,1,8,1,12,2,10,1,4,1,14,1,2,1,8, + 1,8,1,8,1,12,1,12,2,114,103,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,38,0,0,0,116,0,116,1, + 160,2,161,0,102,2,125,0,116,3,116,4,102,2,125,1, + 116,5,116,6,102,2,125,2,124,0,124,1,124,2,103,3, + 83,0,41,1,122,95,82,101,116,117,114,110,115,32,97,32, + 108,105,115,116,32,111,102,32,102,105,108,101,45,98,97,115, + 101,100,32,109,111,100,117,108,101,32,108,111,97,100,101,114, + 115,46,10,10,32,32,32,32,69,97,99,104,32,105,116,101, + 109,32,105,115,32,97,32,116,117,112,108,101,32,40,108,111, + 97,100,101,114,44,32,115,117,102,102,105,120,101,115,41,46, + 10,32,32,32,32,41,7,114,19,1,0,0,114,187,0,0, + 0,218,18,101,120,116,101,110,115,105,111,110,95,115,117,102, + 102,105,120,101,115,114,32,1,0,0,114,126,0,0,0,114, + 39,1,0,0,114,112,0,0,0,41,3,90,10,101,120,116, + 101,110,115,105,111,110,115,90,6,115,111,117,114,99,101,90, + 8,98,121,116,101,99,111,100,101,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,208,0,0,0,98,6,0, + 0,115,8,0,0,0,0,5,12,1,8,1,8,1,114,208, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 10,0,0,0,9,0,0,0,67,0,0,0,115,132,1,0, + 0,124,0,97,0,116,0,106,1,97,1,116,0,106,2,97, + 2,116,1,106,3,116,4,25,0,125,1,100,1,100,2,103, + 1,102,2,100,3,100,4,100,2,103,2,102,2,102,2,125, + 2,124,2,68,0,93,108,92,2,125,3,125,4,116,5,100, + 5,100,6,132,0,124,4,68,0,131,1,131,1,115,82,74, + 0,130,1,124,4,100,7,25,0,125,5,124,3,116,1,106, + 3,118,0,114,116,116,1,106,3,124,3,25,0,125,6,1, + 0,113,170,113,52,122,20,116,0,160,6,124,3,161,1,125, + 6,87,0,1,0,113,170,87,0,113,52,4,0,116,7,121, + 158,1,0,1,0,1,0,89,0,113,52,89,0,113,52,48, + 0,113,52,116,7,100,8,131,1,130,1,116,8,124,1,100, + 9,124,6,131,3,1,0,116,8,124,1,100,10,124,5,131, + 3,1,0,116,8,124,1,100,11,100,12,160,9,124,4,161, + 1,131,3,1,0,116,8,124,1,100,13,100,14,100,15,132, + 0,124,4,68,0,131,1,131,3,1,0,103,0,100,16,162, + 1,125,7,124,3,100,3,107,2,144,1,114,6,124,7,160, + 10,100,17,161,1,1,0,124,7,68,0,93,52,125,8,124, + 8,116,1,106,3,118,1,144,1,114,38,116,0,160,6,124, + 8,161,1,125,9,110,10,116,1,106,3,124,8,25,0,125, + 9,116,8,124,1,124,8,124,9,131,3,1,0,144,1,113, + 10,116,8,124,1,100,18,116,11,131,0,131,3,1,0,116, + 12,160,13,116,2,160,14,161,0,161,1,1,0,124,3,100, + 3,107,2,144,1,114,128,116,15,160,10,100,19,161,1,1, + 0,100,20,116,12,118,0,144,1,114,128,100,21,116,16,95, + 17,100,22,83,0,41,23,122,205,83,101,116,117,112,32,116, + 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, + 112,111,114,116,101,114,115,32,102,111,114,32,105,109,112,111, + 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105, + 110,103,32,110,101,101,100,101,100,10,32,32,32,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, + 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, + 109,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97, + 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32, + 32,32,79,116,104,101,114,32,99,111,109,112,111,110,101,110, + 116,115,32,97,114,101,32,101,120,116,114,97,99,116,101,100, + 32,102,114,111,109,32,116,104,101,32,99,111,114,101,32,98, + 111,111,116,115,116,114,97,112,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,218,5,112,111,115,105,120,114,2,0, + 0,0,218,2,110,116,114,1,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 115,0,0,0,115,26,0,0,0,124,0,93,18,125,1,116, + 0,124,1,131,1,100,0,107,2,86,0,1,0,113,2,100, + 1,83,0,114,3,0,0,0,114,5,0,0,0,114,7,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,12,0,0,0,127,6,0,0,114,13,0,0,0,122, + 25,95,115,101,116,117,112,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,114,0,0,0,0,122, + 30,105,109,112,111,114,116,108,105,98,32,114,101,113,117,105, + 114,101,115,32,112,111,115,105,120,32,111,114,32,110,116,114, + 24,0,0,0,114,59,0,0,0,114,50,0,0,0,114,14, + 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119, + 105,116,104,95,99,111,108,111,110,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, + 0,0,115,22,0,0,0,104,0,124,0,93,14,125,1,100, + 0,124,1,155,0,157,2,146,2,113,4,83,0,114,15,0, + 0,0,114,10,0,0,0,114,17,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,19,0,0,0, + 144,6,0,0,114,13,0,0,0,122,25,95,115,101,116,117, + 112,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, + 111,109,112,62,41,3,114,90,0,0,0,114,98,0,0,0, + 114,184,0,0,0,114,215,0,0,0,114,27,0,0,0,122, + 4,46,112,121,119,122,6,95,100,46,112,121,100,84,78,41, + 18,114,158,0,0,0,114,21,0,0,0,114,187,0,0,0, + 114,54,1,0,0,114,149,0,0,0,218,3,97,108,108,90, + 18,95,98,117,105,108,116,105,110,95,102,114,111,109,95,110, + 97,109,101,114,141,0,0,0,114,153,0,0,0,114,62,0, + 0,0,114,61,0,0,0,114,32,0,0,0,114,44,1,0, + 0,114,191,0,0,0,114,104,1,0,0,114,126,0,0,0, + 114,214,0,0,0,114,218,0,0,0,41,10,218,17,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,90, + 11,115,101,108,102,95,109,111,100,117,108,101,90,10,111,115, + 95,100,101,116,97,105,108,115,90,10,98,117,105,108,116,105, + 110,95,111,115,114,50,0,0,0,114,59,0,0,0,90,9, + 111,115,95,109,111,100,117,108,101,90,13,98,117,105,108,116, + 105,110,95,110,97,109,101,115,90,12,98,117,105,108,116,105, + 110,95,110,97,109,101,90,14,98,117,105,108,116,105,110,95, + 109,111,100,117,108,101,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,6,95,115,101,116,117,112,109,6,0, + 0,115,70,0,0,0,0,8,4,1,6,1,6,2,10,3, + 22,1,12,2,22,1,8,1,10,1,10,1,6,2,2,1, + 10,1,10,1,12,1,12,2,8,2,12,1,12,1,18,1, + 22,3,8,1,10,1,10,1,8,1,12,1,12,2,10,1, + 16,3,14,1,14,1,10,1,10,1,10,1,114,110,1,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, + 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, + 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, + 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, + 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, + 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, + 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, + 10,114,110,1,0,0,114,208,0,0,0,114,21,0,0,0, + 114,74,1,0,0,114,191,0,0,0,114,84,1,0,0,114, + 98,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, + 61,0,0,0,114,68,1,0,0,41,2,114,109,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,8,95,105,110,115,116,97,108,108,166,6,0,0, + 115,8,0,0,0,0,2,8,1,6,1,20,1,114,112,1, + 0,0,41,1,114,86,0,0,0,41,1,78,41,3,78,78, + 78,41,2,114,0,0,0,0,114,0,0,0,0,41,1,84, + 41,1,78,41,1,78,41,81,114,151,0,0,0,114,187,0, + 0,0,114,90,0,0,0,114,21,0,0,0,114,98,0,0, + 0,114,184,0,0,0,114,28,0,0,0,90,11,95,77,83, + 95,87,73,78,68,79,87,83,114,106,1,0,0,114,24,0, + 0,0,114,215,0,0,0,114,105,1,0,0,114,50,0,0, + 0,114,108,1,0,0,114,59,0,0,0,114,135,0,0,0, + 114,57,0,0,0,114,62,0,0,0,114,107,1,0,0,114, + 31,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,95,66,89,84,69,83,95,75,69,89,114,30,0,0,0, + 114,32,0,0,0,114,39,0,0,0,114,44,0,0,0,114, + 46,0,0,0,114,67,0,0,0,114,74,0,0,0,114,75, + 0,0,0,114,79,0,0,0,114,80,0,0,0,114,82,0, + 0,0,114,85,0,0,0,114,94,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,186,0,0, + 0,114,37,0,0,0,114,172,0,0,0,114,36,0,0,0, + 114,41,0,0,0,114,3,1,0,0,114,115,0,0,0,114, + 111,0,0,0,114,126,0,0,0,114,112,0,0,0,90,23, + 68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83, + 85,70,70,73,88,69,83,90,27,79,80,84,73,77,73,90, + 69,68,95,66,89,84,69,67,79,68,69,95,83,85,70,70, + 73,88,69,83,114,120,0,0,0,114,127,0,0,0,114,134, + 0,0,0,114,136,0,0,0,114,138,0,0,0,114,160,0, + 0,0,114,167,0,0,0,114,176,0,0,0,114,180,0,0, + 0,114,182,0,0,0,114,189,0,0,0,114,194,0,0,0, + 114,195,0,0,0,114,200,0,0,0,218,6,111,98,106,101, + 99,116,114,209,0,0,0,114,213,0,0,0,114,214,0,0, + 0,114,231,0,0,0,114,244,0,0,0,114,6,1,0,0, + 114,32,1,0,0,114,39,1,0,0,114,44,1,0,0,114, + 19,1,0,0,114,45,1,0,0,114,66,1,0,0,114,68, + 1,0,0,114,84,1,0,0,114,103,1,0,0,114,208,0, + 0,0,114,110,1,0,0,114,112,1,0,0,114,10,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,170, + 0,0,0,4,22,8,1,8,1,8,1,8,1,8,3,10, + 1,4,1,8,1,10,2,8,3,4,1,10,2,6,2,22, + 1,8,1,8,1,10,1,14,4,4,1,4,1,2,1,2, + 255,4,4,8,17,8,5,8,5,8,6,4,1,10,30,8, + 6,8,8,8,10,8,9,8,5,8,7,6,1,10,8,8, + 5,10,22,10,127,0,20,16,1,12,2,4,1,4,2,6, + 2,6,2,8,2,16,71,8,40,8,19,8,12,8,12,8, + 28,8,17,8,33,8,28,8,24,10,13,10,10,10,11,8, + 14,6,3,4,1,2,255,12,73,14,64,14,29,16,127,0, + 17,14,72,18,45,18,26,4,3,18,53,14,63,14,42,14, + 127,0,20,14,127,0,27,10,23,8,11,8,57, }; From webhook-mailer at python.org Wed Apr 7 07:45:14 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 07 Apr 2021 11:45:14 -0000 Subject: [Python-checkins] bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) Message-ID: https://github.com/python/cpython/commit/e7654b6046090914a8323931ed759a94a5f85d60 commit: e7654b6046090914a8323931ed759a94a5f85d60 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-07T04:45:05-07:00 summary: bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) Fix Regular Expression Denial of Service (ReDoS) vulnerability in urllib.request.AbstractBasicAuthHandler. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. (cherry picked from commit 7215d1ae25525c92b026166f9d5cac85fb1defe1) Co-authored-by: Yeting Li files: A Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst M Lib/urllib/request.py diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 550a2732697d9..5f67077fb0a5c 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -951,7 +951,7 @@ class AbstractBasicAuthHandler: # (single quotes are a violation of the RFC, but appear in the wild) rx = re.compile('(?:^|,)' # start of the string or ',' '[ \t]*' # optional whitespaces - '([^ \t]+)' # scheme like "Basic" + '([^ \t,]+)' # scheme like "Basic" '[ \t]+' # mandatory whitespaces # realm=xxx # realm='xxx' diff --git a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst new file mode 100644 index 0000000000000..1c9f727e965fb --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst @@ -0,0 +1 @@ +Fix Regular Expression Denial of Service (ReDoS) vulnerability in :class:`urllib.request.AbstractBasicAuthHandler`. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. From webhook-mailer at python.org Wed Apr 7 08:14:09 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 12:14:09 -0000 Subject: [Python-checkins] Improve CDN purge script (GH-25251) Message-ID: https://github.com/python/cpython/commit/e35dd556e1adb4fc8b83e5b75ac59e428a8b5460 commit: e35dd556e1adb4fc8b83e5b75ac59e428a8b5460 branch: master author: Steve Dower committer: zooba date: 2021-04-07T13:14:00+01:00 summary: Improve CDN purge script (GH-25251) files: M Tools/msi/purge.py diff --git a/Tools/msi/purge.py b/Tools/msi/purge.py index 27b6b054a445a..41be06939ab4c 100644 --- a/Tools/msi/purge.py +++ b/Tools/msi/purge.py @@ -65,7 +65,10 @@ "python-{}-webinstall.exe".format(m.group(0)), "python-{}-amd64.exe".format(m.group(0)), "python-{}-amd64-webinstall.exe".format(m.group(0)), + "python-{}-embed-amd64.zip".format(m.group(0)), + "python-{}-embed-win32.zip".format(m.group(0)), ] + ["win32{}/{}".format(REL, f) for f in FILES] + ["amd64{}/{}".format(REL, f) for f in FILES] +PATHS = PATHS + [p + ".asc" for p in PATHS] print('Purged:') for n in PATHS: From webhook-mailer at python.org Wed Apr 7 08:33:02 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 07 Apr 2021 12:33:02 -0000 Subject: [Python-checkins] Improve CDN purge script (GH-25251) Message-ID: https://github.com/python/cpython/commit/d0e858d82d493d5341d80f34c7a09094e27ea0ce commit: d0e858d82d493d5341d80f34c7a09094e27ea0ce branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-07T05:32:50-07:00 summary: Improve CDN purge script (GH-25251) (cherry picked from commit e35dd556e1adb4fc8b83e5b75ac59e428a8b5460) Co-authored-by: Steve Dower files: M Tools/msi/purge.py diff --git a/Tools/msi/purge.py b/Tools/msi/purge.py index a8b8f4d8973c4..c543cac30aad3 100644 --- a/Tools/msi/purge.py +++ b/Tools/msi/purge.py @@ -65,7 +65,10 @@ "python-{}-webinstall.exe".format(m.group(0)), "python-{}-amd64.exe".format(m.group(0)), "python-{}-amd64-webinstall.exe".format(m.group(0)), + "python-{}-embed-amd64.zip".format(m.group(0)), + "python-{}-embed-win32.zip".format(m.group(0)), ] + ["win32{}/{}".format(REL, f) for f in FILES] + ["amd64{}/{}".format(REL, f) for f in FILES] +PATHS = PATHS + [p + ".asc" for p in PATHS] print('Purged:') for n in PATHS: From webhook-mailer at python.org Wed Apr 7 10:44:00 2021 From: webhook-mailer at python.org (markshannon) Date: Wed, 07 Apr 2021 14:44:00 -0000 Subject: [Python-checkins] bpo-43495 : Push missing frame block in compile.c (GH-24865) Message-ID: https://github.com/python/cpython/commit/7a7ba3d343d360a03a34bc3901628f9f40a58307 commit: 7a7ba3d343d360a03a34bc3901628f9f40a58307 branch: master author: tomKPZ committer: markshannon date: 2021-04-07T15:43:45+01:00 summary: bpo-43495 : Push missing frame block in compile.c (GH-24865) files: M Python/compile.c diff --git a/Python/compile.c b/Python/compile.c index 65dacc2da64bd..85bc87dbf6820 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -116,7 +116,8 @@ compiler IR. */ enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END, - WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER }; + WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER, + ASYNC_COMPREHENSION_GENERATOR }; struct fblockinfo { enum fblocktype fb_type; @@ -1700,6 +1701,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, switch (info->fb_type) { case WHILE_LOOP: case EXCEPTION_HANDLER: + case ASYNC_COMPREHENSION_GENERATOR: return 1; case FOR_LOOP: @@ -4573,6 +4575,11 @@ compiler_async_comprehension_generator(struct compiler *c, } compiler_use_next_block(c, start); + /* Runtime will push a block here, so we need to account for that */ + if (!compiler_push_fblock(c, ASYNC_COMPREHENSION_GENERATOR, start, + NULL, NULL)) { + return 0; + } ADDOP_JUMP(c, SETUP_FINALLY, except); ADDOP(c, GET_ANEXT); @@ -4627,6 +4634,8 @@ compiler_async_comprehension_generator(struct compiler *c, compiler_use_next_block(c, if_cleanup); ADDOP_JUMP(c, JUMP_ABSOLUTE, start); + compiler_pop_fblock(c, ASYNC_COMPREHENSION_GENERATOR, start); + compiler_use_next_block(c, except); ADDOP(c, END_ASYNC_FOR); From webhook-mailer at python.org Wed Apr 7 11:53:47 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 15:53:47 -0000 Subject: [Python-checkins] bpo-39906: Add follow_symlinks parameter to pathlib.Path.stat() and chmod() (GH-18864) Message-ID: https://github.com/python/cpython/commit/abf964942f97f6489360a75fd57b5e4f41c75f57 commit: abf964942f97f6489360a75fd57b5e4f41c75f57 branch: master author: Barney Gale committer: zooba date: 2021-04-07T16:53:39+01:00 summary: bpo-39906: Add follow_symlinks parameter to pathlib.Path.stat() and chmod() (GH-18864) files: A Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst M Doc/library/pathlib.rst M Lib/pathlib.py M Lib/test/test_pathlib.py diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index ac96de334b329..b1cfbeda60195 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -713,11 +713,14 @@ call fails (for example because the path doesn't exist). .. versionadded:: 3.5 -.. method:: Path.stat() +.. method:: Path.stat(*, follow_symlinks=True) Return a :class:`os.stat_result` object containing information about this path, like :func:`os.stat`. The result is looked up at each call to this method. + This method normally follows symlinks; to stat a symlink add the argument + ``follow_symlinks=False``, or use :meth:`~Path.lstat`. + :: >>> p = Path('setup.py') @@ -726,10 +729,18 @@ call fails (for example because the path doesn't exist). >>> p.stat().st_mtime 1327883547.852554 + .. versionchanged:: 3.10 + The *follow_symlinks* parameter was added. + +.. method:: Path.chmod(mode, *, follow_symlinks=True) -.. method:: Path.chmod(mode) + Change the file mode and permissions, like :func:`os.chmod`. - Change the file mode and permissions, like :func:`os.chmod`:: + This method normally follows symlinks. Some Unix flavours support changing + permissions on the symlink itself; on these platforms you may add the + argument ``follow_symlinks=False``, or use :meth:`~Path.lchmod`. + + :: >>> p = Path('setup.py') >>> p.stat().st_mode @@ -738,6 +749,8 @@ call fails (for example because the path doesn't exist). >>> p.stat().st_mode 33060 + .. versionchanged:: 3.10 + The *follow_symlinks* parameter was added. .. method:: Path.exists() diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 9db8ae2d8a389..eaaf980631fc6 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -393,8 +393,6 @@ class _NormalAccessor(_Accessor): stat = os.stat - lstat = os.lstat - open = os.open listdir = os.listdir @@ -403,12 +401,6 @@ class _NormalAccessor(_Accessor): chmod = os.chmod - if hasattr(os, "lchmod"): - lchmod = os.lchmod - else: - def lchmod(self, path, mode): - raise NotImplementedError("os.lchmod() not available on this system") - mkdir = os.mkdir unlink = os.unlink @@ -1191,12 +1183,12 @@ def resolve(self, strict=False): normed = self._flavour.pathmod.normpath(s) return self._from_parts((normed,)) - def stat(self): + def stat(self, *, follow_symlinks=True): """ Return the result of the stat() system call on this path, like os.stat() does. """ - return self._accessor.stat(self) + return self._accessor.stat(self, follow_symlinks=follow_symlinks) def owner(self): """ @@ -1286,18 +1278,18 @@ def mkdir(self, mode=0o777, parents=False, exist_ok=False): if not exist_ok or not self.is_dir(): raise - def chmod(self, mode): + def chmod(self, mode, *, follow_symlinks=True): """ Change the permissions of the path, like os.chmod(). """ - self._accessor.chmod(self, mode) + self._accessor.chmod(self, mode, follow_symlinks=follow_symlinks) def lchmod(self, mode): """ Like chmod(), except if the path points to a symlink, the symlink's permissions are changed, rather than its target's. """ - self._accessor.lchmod(self, mode) + self.chmod(mode, follow_symlinks=False) def unlink(self, missing_ok=False): """ @@ -1321,7 +1313,7 @@ def lstat(self): Like stat(), except if the path points to a symlink, the symlink's status information is returned, rather than its target's. """ - return self._accessor.lstat(self) + return self.stat(follow_symlinks=False) def link_to(self, target): """ diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 9be72941d3354..2643119352790 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1828,6 +1828,21 @@ def test_chmod(self): p.chmod(new_mode) self.assertEqual(p.stat().st_mode, new_mode) + # On Windows, os.chmod does not follow symlinks (issue #15411) + @only_posix + def test_chmod_follow_symlinks_true(self): + p = self.cls(BASE) / 'linkA' + q = p.resolve() + mode = q.stat().st_mode + # Clear writable bit. + new_mode = mode & ~0o222 + p.chmod(new_mode, follow_symlinks=True) + self.assertEqual(q.stat().st_mode, new_mode) + # Set writable bit + new_mode = mode | 0o222 + p.chmod(new_mode, follow_symlinks=True) + self.assertEqual(q.stat().st_mode, new_mode) + # XXX also need a test for lchmod. def test_stat(self): @@ -1839,6 +1854,17 @@ def test_stat(self): self.addCleanup(p.chmod, st.st_mode) self.assertNotEqual(p.stat(), st) + @os_helper.skip_unless_symlink + def test_stat_no_follow_symlinks(self): + p = self.cls(BASE) / 'linkA' + st = p.stat() + self.assertNotEqual(st, p.stat(follow_symlinks=False)) + + def test_stat_no_follow_symlinks_nosymlink(self): + p = self.cls(BASE) / 'fileA' + st = p.stat() + self.assertEqual(st, p.stat(follow_symlinks=False)) + @os_helper.skip_unless_symlink def test_lstat(self): p = self.cls(BASE)/ 'linkA' diff --git a/Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst b/Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst new file mode 100644 index 0000000000000..dacefb73d93dd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst @@ -0,0 +1 @@ +:meth:`pathlib.Path.stat` and :meth:`~pathlib.Path.chmod` now accept a *follow_symlinks* keyword-only argument for consistency with corresponding functions in the :mod:`os` module. \ No newline at end of file From webhook-mailer at python.org Wed Apr 7 11:56:38 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 15:56:38 -0000 Subject: [Python-checkins] bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) Message-ID: https://github.com/python/cpython/commit/8aac1bea2eeac25a49f8912b67aacbedf9bc7934 commit: 8aac1bea2eeac25a49f8912b67aacbedf9bc7934 branch: master author: Barney Gale committer: zooba date: 2021-04-07T16:56:32+01:00 summary: bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) files: M Doc/library/pathlib.rst M Lib/pathlib.py diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index b1cfbeda60195..e269bf9a7be12 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -1134,6 +1134,20 @@ call fails (for example because the path doesn't exist). of :func:`os.symlink`'s. +.. method:: Path.link_to(target) + + Make *target* a hard link to this path. + + .. warning:: + + This function does not make this path a hard link to *target*, despite + the implication of the function and argument names. The argument order + (target, link) is the reverse of :func:`Path.symlink_to`, but matches + that of :func:`os.link`. + + .. versionadded:: 3.8 + + .. method:: Path.touch(mode=0o666, exist_ok=True) Create a file at this given path. If *mode* is given, it is combined @@ -1158,13 +1172,6 @@ call fails (for example because the path doesn't exist). The *missing_ok* parameter was added. -.. method:: Path.link_to(target) - - Create a hard link pointing to a path named *target*. - - .. versionadded:: 3.8 - - .. method:: Path.write_bytes(data) Open the file pointed to in bytes mode, write *data* to it, and close the diff --git a/Lib/pathlib.py b/Lib/pathlib.py index eaaf980631fc6..6838feae8dbe4 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1315,12 +1315,6 @@ def lstat(self): """ return self.stat(follow_symlinks=False) - def link_to(self, target): - """ - Create a hard link pointing to a path named target. - """ - self._accessor.link(self, target) - def rename(self, target): """ Rename this path to the target path. @@ -1349,11 +1343,23 @@ def replace(self, target): def symlink_to(self, target, target_is_directory=False): """ - Make this path a symlink pointing to the given path. - Note the order of arguments (self, target) is the reverse of os.symlink's. + Make this path a symlink pointing to the target path. + Note the order of arguments (link, target) is the reverse of os.symlink. """ self._accessor.symlink(target, self, target_is_directory) + def link_to(self, target): + """ + Make the target path a hard link pointing to this path. + + Note this function does not make this path a hard link to *target*, + despite the implication of the function and argument names. The order + of arguments (target, link) is the reverse of Path.symlink_to, but + matches that of os.link. + + """ + self._accessor.link(self, target) + # Convenience functions for querying the stat results def exists(self): From webhook-mailer at python.org Wed Apr 7 11:58:08 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 15:58:08 -0000 Subject: [Python-checkins] bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (GH-25247) Message-ID: https://github.com/python/cpython/commit/a21d4fbd549ec9685068a113660553d7f80d9b09 commit: a21d4fbd549ec9685068a113660553d7f80d9b09 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-07T17:58:04+02:00 summary: bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (GH-25247) Fix Regular Expression Denial of Service (ReDoS) vulnerability in urllib.request.AbstractBasicAuthHandler. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. (cherry picked from commit 7215d1ae25525c92b026166f9d5cac85fb1defe1) Co-authored-by: Yeting Li Co-authored-by: Yeting Li files: A Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst M Lib/urllib/request.py diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 57d991465a5b0..af3fb9ca54a0b 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -943,7 +943,7 @@ class AbstractBasicAuthHandler: # (single quotes are a violation of the RFC, but appear in the wild) rx = re.compile('(?:^|,)' # start of the string or ',' '[ \t]*' # optional whitespaces - '([^ \t]+)' # scheme like "Basic" + '([^ \t,]+)' # scheme like "Basic" '[ \t]+' # mandatory whitespaces # realm=xxx # realm='xxx' diff --git a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst new file mode 100644 index 0000000000000..1c9f727e965fb --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst @@ -0,0 +1 @@ +Fix Regular Expression Denial of Service (ReDoS) vulnerability in :class:`urllib.request.AbstractBasicAuthHandler`. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. From webhook-mailer at python.org Wed Apr 7 12:31:57 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 16:31:57 -0000 Subject: [Python-checkins] bpo-39659: Route calls from pathlib.Path to os.getcwd() via the path accessor (GH-18834) Message-ID: https://github.com/python/cpython/commit/b05440c52b9814dbd47f679d47367e87855bd7b5 commit: b05440c52b9814dbd47f679d47367e87855bd7b5 branch: master author: Barney Gale committer: zooba date: 2021-04-07T17:31:49+01:00 summary: bpo-39659: Route calls from pathlib.Path to os.getcwd() via the path accessor (GH-18834) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 6838feae8dbe4..9e682dcad9eac 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -187,7 +187,7 @@ def compile_pattern(self, pattern): def resolve(self, path, strict=False): s = str(path) if not s: - return os.getcwd() + return path._accessor.getcwd() previous_s = None if _getfinalpathname is not None: if strict: @@ -352,7 +352,7 @@ def _resolve(path, rest): return path # NOTE: according to POSIX, getcwd() cannot contain path components # which are symlinks. - base = '' if path.is_absolute() else os.getcwd() + base = '' if path.is_absolute() else accessor.getcwd() return _resolve(base, str(path)) or sep def is_reserved(self, parts): @@ -461,6 +461,8 @@ def group(self, path): except ImportError: raise NotImplementedError("Path.group() is unsupported on this system") + getcwd = os.getcwd + _normal_accessor = _NormalAccessor() @@ -1096,7 +1098,7 @@ def cwd(cls): """Return a new path pointing to the current working directory (as returned by os.getcwd()). """ - return cls(os.getcwd()) + return cls(cls()._accessor.getcwd()) @classmethod def home(cls): @@ -1165,7 +1167,7 @@ def absolute(self): return self # FIXME this must defer to the specific flavour (and, under Windows, # use nt._getfullpathname()) - return self._from_parts([os.getcwd()] + self._parts) + return self._from_parts([self._accessor.getcwd()] + self._parts) def resolve(self, strict=False): """ From webhook-mailer at python.org Wed Apr 7 13:12:47 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 17:12:47 -0000 Subject: [Python-checkins] bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) Message-ID: https://github.com/python/cpython/commit/34f93002bac980176a670ce2a4038c3be84effed commit: 34f93002bac980176a670ce2a4038c3be84effed branch: 3.9 author: Steve Dower committer: zooba date: 2021-04-07T18:12:42+01:00 summary: bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) Co-authored-by: Barney Gale files: M Doc/library/pathlib.rst M Lib/pathlib.py diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 9526a03b05398..c31ff6543aee5 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -1119,6 +1119,20 @@ call fails (for example because the path doesn't exist). of :func:`os.symlink`'s. +.. method:: Path.link_to(target) + + Make *target* a hard link to this path. + + .. warning:: + + This function does not make this path a hard link to *target*, despite + the implication of the function and argument names. The argument order + (target, link) is the reverse of :func:`Path.symlink_to`, but matches + that of :func:`os.link`. + + .. versionadded:: 3.8 + + .. method:: Path.touch(mode=0o666, exist_ok=True) Create a file at this given path. If *mode* is given, it is combined @@ -1143,13 +1157,6 @@ call fails (for example because the path doesn't exist). The *missing_ok* parameter was added. -.. method:: Path.link_to(target) - - Create a hard link pointing to a path named *target*. - - .. versionadded:: 3.8 - - .. method:: Path.write_bytes(data) Open the file pointed to in bytes mode, write *data* to it, and close the diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 147be2ff0dddf..da51a4f500e80 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1358,12 +1358,6 @@ def lstat(self): """ return self._accessor.lstat(self) - def link_to(self, target): - """ - Create a hard link pointing to a path named target. - """ - self._accessor.link_to(self, target) - def rename(self, target): """ Rename this path to the target path. @@ -1392,11 +1386,23 @@ def replace(self, target): def symlink_to(self, target, target_is_directory=False): """ - Make this path a symlink pointing to the given path. - Note the order of arguments (self, target) is the reverse of os.symlink's. + Make this path a symlink pointing to the target path. + Note the order of arguments (link, target) is the reverse of os.symlink. """ self._accessor.symlink(target, self, target_is_directory) + def link_to(self, target): + """ + Make the target path a hard link pointing to this path. + + Note this function does not make this path a hard link to *target*, + despite the implication of the function and argument names. The order + of arguments (target, link) is the reverse of Path.symlink_to, but + matches that of os.link. + + """ + self._accessor.link_to(self, target) + # Convenience functions for querying the stat results def exists(self): From webhook-mailer at python.org Wed Apr 7 14:18:04 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 07 Apr 2021 18:18:04 -0000 Subject: [Python-checkins] bpo-43755: Update docs to reflect that lambda is not allowed in `comp_if` since 3.9 (GH-25231) (GH-25233) Message-ID: https://github.com/python/cpython/commit/f91fc7a679e076cb9a703f6db4d95b63935562e3 commit: f91fc7a679e076cb9a703f6db4d95b63935562e3 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: pablogsal date: 2021-04-07T19:17:56+01:00 summary: bpo-43755: Update docs to reflect that lambda is not allowed in `comp_if` since 3.9 (GH-25231) (GH-25233) files: A Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst M Doc/reference/expressions.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 9b1a395b724d9..e7b1d3838be35 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -183,7 +183,7 @@ Common syntax elements for comprehensions are: comprehension: `assignment_expression` `comp_for` comp_for: ["async"] "for" `target_list` "in" `or_test` [`comp_iter`] comp_iter: `comp_for` | `comp_if` - comp_if: "if" `expression_nocond` [`comp_iter`] + comp_if: "if" `or_test` [`comp_iter`] The comprehension consists of a single expression followed by at least one :keyword:`!for` clause and zero or more :keyword:`!for` or :keyword:`!if` clauses. @@ -1695,7 +1695,6 @@ Conditional expressions .. productionlist:: python-grammar conditional_expression: `or_test` ["if" `or_test` "else" `expression`] expression: `conditional_expression` | `lambda_expr` - expression_nocond: `or_test` | `lambda_expr_nocond` Conditional expressions (sometimes called a "ternary operator") have the lowest priority of all Python operations. @@ -1721,7 +1720,6 @@ Lambdas .. productionlist:: python-grammar lambda_expr: "lambda" [`parameter_list`] ":" `expression` - lambda_expr_nocond: "lambda" [`parameter_list`] ":" `expression_nocond` Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression ``lambda parameters: expression`` yields a function diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 4cb49406d6b77..d5eaccacde67a 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -267,6 +267,10 @@ Other Language Changes :func:`~operator.countOf` of the :mod:`operator` module. (Contributed by Serhiy Storchaka in :issue:`40824`.) +* Unparenthesized lambda expressions can no longer be the expression part in an + ``if`` clause in comprehensions and generator expressions. See :issue:`41848` + and :issue:`43755` for details. + New Modules =========== diff --git a/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst b/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst new file mode 100644 index 0000000000000..53cba0b47d6d3 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst @@ -0,0 +1,3 @@ +Update documentation to reflect that unparenthesized lambda expressions can +no longer be the expression part in an ``if`` clause in comprehensions and +generator expressions since Python 3.9. From webhook-mailer at python.org Wed Apr 7 14:23:52 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 18:23:52 -0000 Subject: [Python-checkins] bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) Message-ID: https://github.com/python/cpython/commit/9f578734624d1c0172220556ca97898730144172 commit: 9f578734624d1c0172220556ca97898730144172 branch: 3.8 author: Steve Dower committer: zooba date: 2021-04-07T19:23:30+01:00 summary: bpo-42999: Expand and clarify pathlib.Path.link_to() documentation. (GH-24294) Co-authored-by: Barney Gale files: M Doc/library/pathlib.rst M Lib/pathlib.py diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 4518f56004929..1aae59610c7f7 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -1063,6 +1063,20 @@ call fails (for example because the path doesn't exist). of :func:`os.symlink`'s. +.. method:: Path.link_to(target) + + Make *target* a hard link to this path. + + .. warning:: + + This function does not make this path a hard link to *target*, despite + the implication of the function and argument names. The argument order + (target, link) is the reverse of :func:`Path.symlink_to`, but matches + that of :func:`os.link`. + + .. versionadded:: 3.8 + + .. method:: Path.touch(mode=0o666, exist_ok=True) Create a file at this given path. If *mode* is given, it is combined @@ -1087,13 +1101,6 @@ call fails (for example because the path doesn't exist). The *missing_ok* parameter was added. -.. method:: Path.link_to(target) - - Create a hard link pointing to a path named *target*. - - .. versionadded:: 3.8 - - .. method:: Path.write_bytes(data) Open the file pointed to in bytes mode, write *data* to it, and close the diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 171d8b8252106..5e3940bccc8ff 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1343,14 +1343,6 @@ def lstat(self): self._raise_closed() return self._accessor.lstat(self) - def link_to(self, target): - """ - Create a hard link pointing to a path named target. - """ - if self._closed: - self._raise_closed() - self._accessor.link_to(self, target) - def rename(self, target): """ Rename this path to the target path. @@ -1383,13 +1375,27 @@ def replace(self, target): def symlink_to(self, target, target_is_directory=False): """ - Make this path a symlink pointing to the given path. - Note the order of arguments (self, target) is the reverse of os.symlink's. + Make this path a symlink pointing to the target path. + Note the order of arguments (link, target) is the reverse of os.symlink. """ if self._closed: self._raise_closed() self._accessor.symlink(target, self, target_is_directory) + def link_to(self, target): + """ + Make the target path a hard link pointing to this path. + + Note this function does not make this path a hard link to *target*, + despite the implication of the function and argument names. The order + of arguments (target, link) is the reverse of Path.symlink_to, but + matches that of os.link. + + """ + if self._closed: + self._raise_closed() + self._accessor.link_to(self, target) + # Convenience functions for querying the stat results def exists(self): From webhook-mailer at python.org Wed Apr 7 15:06:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 07 Apr 2021 19:06:52 -0000 Subject: [Python-checkins] bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) Message-ID: https://github.com/python/cpython/commit/58d72cab89cf9652acc0bf0007aa20b2bcc98499 commit: 58d72cab89cf9652acc0bf0007aa20b2bcc98499 branch: master author: Saiyang Gou committer: pablogsal date: 2021-04-07T20:06:43+01:00 summary: bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index aae7c7f68b6e0..c36b50e757127 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -1215,19 +1215,25 @@ e.g.:: return penguin .. index:: + single: / (slash); function definition single: * (asterisk); function definition single: **; function definition Function call semantics are described in more detail in section :ref:`calls`. A function call always assigns values to all parameters mentioned in the parameter -list, either from position arguments, from keyword arguments, or from default +list, either from positional arguments, from keyword arguments, or from default values. If the form "``*identifier``" is present, it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple. If the form "``**identifier``" is present, it is initialized to a new ordered mapping receiving any excess keyword arguments, defaulting to a new empty mapping of the same type. Parameters after "``*``" or "``*identifier``" are keyword-only parameters and may only be passed -used keyword arguments. +by keyword arguments. Parameters before "``/``" are positional-only parameters +and may only be passed by positional arguments. + +.. versionchanged:: 3.8 + The ``/`` function parameter syntax may be used to indicate positional-only + parameters. See :pep:`570` for details. .. index:: pair: function; annotations From webhook-mailer at python.org Wed Apr 7 15:32:33 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 07 Apr 2021 19:32:33 -0000 Subject: [Python-checkins] [3.8] bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) (GH-25260) Message-ID: https://github.com/python/cpython/commit/4554ab435727a0f3b6441c9c1a8d3fe6534433c7 commit: 4554ab435727a0f3b6441c9c1a8d3fe6534433c7 branch: 3.8 author: Saiyang Gou committer: pablogsal date: 2021-04-07T20:32:24+01:00 summary: [3.8] bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) (GH-25260) (cherry picked from commit 58d72cab89cf9652acc0bf0007aa20b2bcc98499) Co-authored-by: Saiyang Gou files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 61037d97a0c3c..9dd471a0c83ec 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -582,19 +582,25 @@ e.g.:: return penguin .. index:: + single: / (slash); function definition single: * (asterisk); function definition single: **; function definition Function call semantics are described in more detail in section :ref:`calls`. A function call always assigns values to all parameters mentioned in the parameter -list, either from position arguments, from keyword arguments, or from default +list, either from positional arguments, from keyword arguments, or from default values. If the form "``*identifier``" is present, it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple. If the form "``**identifier``" is present, it is initialized to a new ordered mapping receiving any excess keyword arguments, defaulting to a new empty mapping of the same type. Parameters after "``*``" or "``*identifier``" are keyword-only parameters and may only be passed -used keyword arguments. +by keyword arguments. Parameters before "``/``" are positional-only parameters +and may only be passed by positional arguments. + +.. versionchanged:: 3.8 + The ``/`` function parameter syntax may be used to indicate positional-only + parameters. See :pep:`570` for details. .. index:: pair: function; annotations From webhook-mailer at python.org Wed Apr 7 15:32:56 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 07 Apr 2021 19:32:56 -0000 Subject: [Python-checkins] [3.9] bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) (GH-25259) Message-ID: https://github.com/python/cpython/commit/3b1cf202976d9590d5b453c47b883f2e7cd1a7a5 commit: 3b1cf202976d9590d5b453c47b883f2e7cd1a7a5 branch: 3.9 author: Saiyang Gou committer: pablogsal date: 2021-04-07T20:32:48+01:00 summary: [3.9] bpo-36540: Improve doc of function definition regarding positional-only arguments (GH-25235) (GH-25259) (cherry picked from commit 58d72cab89cf9652acc0bf0007aa20b2bcc98499) Co-authored-by: Saiyang Gou files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 7e666351b1b31..f7eca2aa8472b 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -587,19 +587,25 @@ e.g.:: return penguin .. index:: + single: / (slash); function definition single: * (asterisk); function definition single: **; function definition Function call semantics are described in more detail in section :ref:`calls`. A function call always assigns values to all parameters mentioned in the parameter -list, either from position arguments, from keyword arguments, or from default +list, either from positional arguments, from keyword arguments, or from default values. If the form "``*identifier``" is present, it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple. If the form "``**identifier``" is present, it is initialized to a new ordered mapping receiving any excess keyword arguments, defaulting to a new empty mapping of the same type. Parameters after "``*``" or "``*identifier``" are keyword-only parameters and may only be passed -used keyword arguments. +by keyword arguments. Parameters before "``/``" are positional-only parameters +and may only be passed by positional arguments. + +.. versionchanged:: 3.8 + The ``/`` function parameter syntax may be used to indicate positional-only + parameters. See :pep:`570` for details. .. index:: pair: function; annotations From webhook-mailer at python.org Wed Apr 7 15:34:33 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 19:34:33 -0000 Subject: [Python-checkins] bpo-43244: Rename pycore_ast.h functions to _PyAST_xxx() (GH-25252) Message-ID: https://github.com/python/cpython/commit/d27f8d2e07d31670af469ef387a37bc9e96ea8ad commit: d27f8d2e07d31670af469ef387a37bc9e96ea8ad branch: master author: Victor Stinner committer: vstinner date: 2021-04-07T21:34:22+02:00 summary: bpo-43244: Rename pycore_ast.h functions to _PyAST_xxx() (GH-25252) Rename AST functions of pycore_ast.h to use the "_PyAST_" prefix. Remove macros creating aliases without prefix. For example, Module() becomes _PyAST_Module(). Update Grammar/python.gram to use _PyAST_xxx() functions. files: M Grammar/python.gram M Include/internal/pycore_ast.h M Lib/test/test_peg_generator/test_c_parser.py M Parser/asdl_c.py M Parser/parser.c M Parser/pegen.c M Parser/string_parser.c M Python/Python-ast.c M Python/ast_opt.c diff --git a/Grammar/python.gram b/Grammar/python.gram index 4f3b649f9d57e..ebf028fa81900 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -28,9 +28,9 @@ _PyPegen_parse(Parser *p) // The end ''' file[mod_ty]: a=[statements] ENDMARKER { _PyPegen_make_module(p, a) } -interactive[mod_ty]: a=statement_newline { Interactive(a, p->arena) } -eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { Expression(a, p->arena) } -func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { FunctionType(a, b, p->arena) } +interactive[mod_ty]: a=statement_newline { _PyAST_Interactive(a, p->arena) } +eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { _PyAST_Expression(a, p->arena) } +func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { _PyAST_FunctionType(a, b, p->arena) } fstring[expr_ty]: star_expressions # type_expressions allow */** but ignore them @@ -56,7 +56,7 @@ statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_ statement_newline[asdl_stmt_seq*]: | a=compound_stmt NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | simple_stmts - | NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _Py_Pass(EXTRA))) } + | NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _PyAST_Pass(EXTRA))) } | ENDMARKER { _PyPegen_interactive_exit(p) } simple_stmts[asdl_stmt_seq*]: | a=simple_stmt !';' NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } # Not needed, there for speedup @@ -65,16 +65,16 @@ simple_stmts[asdl_stmt_seq*]: # will throw a SyntaxError. simple_stmt[stmt_ty] (memo): | assignment - | e=star_expressions { _Py_Expr(e, EXTRA) } + | e=star_expressions { _PyAST_Expr(e, EXTRA) } | &'return' return_stmt | &('import' | 'from') import_stmt | &'raise' raise_stmt - | 'pass' { _Py_Pass(EXTRA) } + | 'pass' { _PyAST_Pass(EXTRA) } | &'del' del_stmt | &'yield' yield_stmt | &'assert' assert_stmt - | 'break' { _Py_Break(EXTRA) } - | 'continue' { _Py_Continue(EXTRA) } + | 'break' { _PyAST_Break(EXTRA) } + | 'continue' { _PyAST_Continue(EXTRA) } | &'global' global_stmt | &'nonlocal' nonlocal_stmt compound_stmt[stmt_ty]: @@ -94,15 +94,15 @@ assignment[stmt_ty]: stmt_ty, 6, "Variable annotation syntax is", - _Py_AnnAssign(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, c, 1, EXTRA) + _PyAST_AnnAssign(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, c, 1, EXTRA) ) } | a=('(' b=single_target ')' { b } | single_subscript_attribute_target) ':' b=expression c=['=' d=annotated_rhs { d }] { - CHECK_VERSION(stmt_ty, 6, "Variable annotations syntax is", _Py_AnnAssign(a, b, c, 0, EXTRA)) } + CHECK_VERSION(stmt_ty, 6, "Variable annotations syntax is", _PyAST_AnnAssign(a, b, c, 0, EXTRA)) } | a[asdl_expr_seq*]=(z=star_targets '=' { z })+ b=(yield_expr | star_expressions) !'=' tc=[TYPE_COMMENT] { - _Py_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) } + _PyAST_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) } | a=single_target b=augassign ~ c=(yield_expr | star_expressions) { - _Py_AugAssign(a, b->kind, c, EXTRA) } + _PyAST_AugAssign(a, b->kind, c, EXTRA) } | invalid_assignment augassign[AugOperator*]: @@ -121,26 +121,26 @@ augassign[AugOperator*]: | '//=' { _PyPegen_augoperator(p, FloorDiv) } global_stmt[stmt_ty]: 'global' a[asdl_expr_seq*]=','.NAME+ { - _Py_Global(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } + _PyAST_Global(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } nonlocal_stmt[stmt_ty]: 'nonlocal' a[asdl_expr_seq*]=','.NAME+ { - _Py_Nonlocal(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } + _PyAST_Nonlocal(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } -yield_stmt[stmt_ty]: y=yield_expr { _Py_Expr(y, EXTRA) } +yield_stmt[stmt_ty]: y=yield_expr { _PyAST_Expr(y, EXTRA) } -assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _Py_Assert(a, b, EXTRA) } +assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _PyAST_Assert(a, b, EXTRA) } del_stmt[stmt_ty]: - | 'del' a=del_targets &(';' | NEWLINE) { _Py_Delete(a, EXTRA) } + | 'del' a=del_targets &(';' | NEWLINE) { _PyAST_Delete(a, EXTRA) } | invalid_del_stmt import_stmt[stmt_ty]: import_name | import_from -import_name[stmt_ty]: 'import' a=dotted_as_names { _Py_Import(a, EXTRA) } +import_name[stmt_ty]: 'import' a=dotted_as_names { _PyAST_Import(a, EXTRA) } # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS import_from[stmt_ty]: | 'from' a=('.' | '...')* b=dotted_name 'import' c=import_from_targets { - _Py_ImportFrom(b->v.Name.id, c, _PyPegen_seq_count_dots(a), EXTRA) } + _PyAST_ImportFrom(b->v.Name.id, c, _PyPegen_seq_count_dots(a), EXTRA) } | 'from' a=('.' | '...')+ 'import' b=import_from_targets { - _Py_ImportFrom(NULL, b, _PyPegen_seq_count_dots(a), EXTRA) } + _PyAST_ImportFrom(NULL, b, _PyPegen_seq_count_dots(a), EXTRA) } import_from_targets[asdl_alias_seq*]: | '(' a=import_from_as_names [','] ')' { a } | import_from_as_names !',' @@ -149,13 +149,13 @@ import_from_targets[asdl_alias_seq*]: import_from_as_names[asdl_alias_seq*]: | a[asdl_alias_seq*]=','.import_from_as_name+ { a } import_from_as_name[alias_ty]: - | a=NAME b=['as' z=NAME { z }] { _Py_alias(a->v.Name.id, + | a=NAME b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id, (b) ? ((expr_ty) b)->v.Name.id : NULL, p->arena) } dotted_as_names[asdl_alias_seq*]: | a[asdl_alias_seq*]=','.dotted_as_name+ { a } dotted_as_name[alias_ty]: - | a=dotted_name b=['as' z=NAME { z }] { _Py_alias(a->v.Name.id, + | a=dotted_name b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id, (b) ? ((expr_ty) b)->v.Name.id : NULL, p->arena) } dotted_name[expr_ty]: @@ -164,77 +164,77 @@ dotted_name[expr_ty]: if_stmt[stmt_ty]: | 'if' a=named_expression &&':' b=block c=elif_stmt { - _Py_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } - | 'if' a=named_expression &&':' b=block c=[else_block] { _Py_If(a, b, c, EXTRA) } + _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } + | 'if' a=named_expression &&':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } elif_stmt[stmt_ty]: | 'elif' a=named_expression &&':' b=block c=elif_stmt { - _Py_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } - | 'elif' a=named_expression &&':' b=block c=[else_block] { _Py_If(a, b, c, EXTRA) } + _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } + | 'elif' a=named_expression &&':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } else_block[asdl_stmt_seq*]: 'else' &&':' b=block { b } while_stmt[stmt_ty]: - | 'while' a=named_expression &&':' b=block c=[else_block] { _Py_While(a, b, c, EXTRA) } + | 'while' a=named_expression &&':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } for_stmt[stmt_ty]: | 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { - _Py_For(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA) } + _PyAST_For(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA) } | ASYNC 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { - CHECK_VERSION(stmt_ty, 5, "Async for loops are", _Py_AsyncFor(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA)) } + CHECK_VERSION(stmt_ty, 5, "Async for loops are", _PyAST_AsyncFor(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA)) } | invalid_for_target with_stmt[stmt_ty]: | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block { - _Py_With(a, b, NULL, EXTRA) } + _PyAST_With(a, b, NULL, EXTRA) } | 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block { - _Py_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) } + _PyAST_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) } | ASYNC 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block { - CHECK_VERSION(stmt_ty, 5, "Async with statements are", _Py_AsyncWith(a, b, NULL, EXTRA)) } + CHECK_VERSION(stmt_ty, 5, "Async with statements are", _PyAST_AsyncWith(a, b, NULL, EXTRA)) } | ASYNC 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block { - CHECK_VERSION(stmt_ty, 5, "Async with statements are", _Py_AsyncWith(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA)) } + CHECK_VERSION(stmt_ty, 5, "Async with statements are", _PyAST_AsyncWith(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA)) } | invalid_with_stmt with_item[withitem_ty]: - | e=expression 'as' t=star_target &(',' | ')' | ':') { _Py_withitem(e, t, p->arena) } + | e=expression 'as' t=star_target &(',' | ')' | ':') { _PyAST_withitem(e, t, p->arena) } | invalid_with_item - | e=expression { _Py_withitem(e, NULL, p->arena) } + | e=expression { _PyAST_withitem(e, NULL, p->arena) } try_stmt[stmt_ty]: - | 'try' &&':' b=block f=finally_block { _Py_Try(b, NULL, NULL, f, EXTRA) } - | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_block+ el=[else_block] f=[finally_block] { _Py_Try(b, ex, el, f, EXTRA) } + | 'try' &&':' b=block f=finally_block { _PyAST_Try(b, NULL, NULL, f, EXTRA) } + | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_block+ el=[else_block] f=[finally_block] { _PyAST_Try(b, ex, el, f, EXTRA) } except_block[excepthandler_ty]: | 'except' e=expression t=['as' z=NAME { z }] ':' b=block { - _Py_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) } - | 'except' ':' b=block { _Py_ExceptHandler(NULL, NULL, b, EXTRA) } + _PyAST_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) } + | 'except' ':' b=block { _PyAST_ExceptHandler(NULL, NULL, b, EXTRA) } | invalid_except_block finally_block[asdl_stmt_seq*]: 'finally' ':' a=block { a } match_stmt[stmt_ty]: | "match" subject=subject_expr ':' NEWLINE INDENT cases[asdl_match_case_seq*]=case_block+ DEDENT { - CHECK_VERSION(stmt_ty, 10, "Pattern matching is", _Py_Match(subject, cases, EXTRA)) } + CHECK_VERSION(stmt_ty, 10, "Pattern matching is", _PyAST_Match(subject, cases, EXTRA)) } | invalid_match_stmt subject_expr[expr_ty]: | value=star_named_expression ',' values=star_named_expressions? { - _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, value, values)), Load, EXTRA) } + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, value, values)), Load, EXTRA) } | named_expression case_block[match_case_ty]: | "case" pattern=patterns guard=guard? ':' body=block { - _Py_match_case(pattern, guard, body, p->arena) } + _PyAST_match_case(pattern, guard, body, p->arena) } | invalid_case_block guard[expr_ty]: 'if' guard=named_expression { guard } patterns[expr_ty]: | values[asdl_expr_seq*]=open_sequence_pattern { - _Py_Tuple(values, Load, EXTRA) } + _PyAST_Tuple(values, Load, EXTRA) } | pattern pattern[expr_ty]: | as_pattern | or_pattern as_pattern[expr_ty]: | pattern=or_pattern 'as' target=capture_pattern { - _Py_MatchAs(pattern, target->v.Name.id, EXTRA) } + _PyAST_MatchAs(pattern, target->v.Name.id, EXTRA) } or_pattern[expr_ty]: | patterns[asdl_expr_seq*]='|'.closed_pattern+ { - asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _Py_MatchOr(patterns, EXTRA) } + asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _PyAST_MatchOr(patterns, EXTRA) } closed_pattern[expr_ty]: | literal_pattern | capture_pattern @@ -247,28 +247,28 @@ closed_pattern[expr_ty]: literal_pattern[expr_ty]: | signed_number !('+' | '-') - | real=signed_number '+' imag=NUMBER { _Py_BinOp(real, Add, imag, EXTRA) } - | real=signed_number '-' imag=NUMBER { _Py_BinOp(real, Sub, imag, EXTRA) } + | real=signed_number '+' imag=NUMBER { _PyAST_BinOp(real, Add, imag, EXTRA) } + | real=signed_number '-' imag=NUMBER { _PyAST_BinOp(real, Sub, imag, EXTRA) } | strings - | 'None' { _Py_Constant(Py_None, NULL, EXTRA) } - | 'True' { _Py_Constant(Py_True, NULL, EXTRA) } - | 'False' { _Py_Constant(Py_False, NULL, EXTRA) } + | 'None' { _PyAST_Constant(Py_None, NULL, EXTRA) } + | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) } + | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) } signed_number[expr_ty]: | NUMBER - | '-' number=NUMBER { _Py_UnaryOp(USub, number, EXTRA) } + | '-' number=NUMBER { _PyAST_UnaryOp(USub, number, EXTRA) } capture_pattern[expr_ty]: | !"_" name=NAME !('.' | '(' | '=') { _PyPegen_set_expr_context(p, name, Store) } wildcard_pattern[expr_ty]: - | "_" { _Py_Name(CHECK(PyObject*, _PyPegen_new_identifier(p, "_")), Store, EXTRA) } + | "_" { _PyAST_Name(CHECK(PyObject*, _PyPegen_new_identifier(p, "_")), Store, EXTRA) } value_pattern[expr_ty]: | attr=attr !('.' | '(' | '=') { attr } attr[expr_ty]: | value=name_or_attr '.' attr=NAME { - _Py_Attribute(value, attr->v.Name.id, Load, EXTRA) } + _PyAST_Attribute(value, attr->v.Name.id, Load, EXTRA) } name_or_attr[expr_ty]: | attr | NAME @@ -277,8 +277,8 @@ group_pattern[expr_ty]: | '(' pattern=pattern ')' { pattern } sequence_pattern[expr_ty]: - | '[' values=maybe_sequence_pattern? ']' { _Py_List(values, Load, EXTRA) } - | '(' values=open_sequence_pattern? ')' { _Py_Tuple(values, Load, EXTRA) } + | '[' values=maybe_sequence_pattern? ']' { _PyAST_List(values, Load, EXTRA) } + | '(' values=open_sequence_pattern? ')' { _PyAST_Tuple(values, Load, EXTRA) } open_sequence_pattern[asdl_seq*]: | value=maybe_star_pattern ',' values=maybe_sequence_pattern? { _PyPegen_seq_insert_in_front(p, value, values) } @@ -289,11 +289,11 @@ maybe_star_pattern[expr_ty]: | pattern star_pattern[expr_ty]: | '*' value=(capture_pattern | wildcard_pattern) { - _Py_Starred(value, Store, EXTRA) } + _PyAST_Starred(value, Store, EXTRA) } mapping_pattern[expr_ty]: | '{' items=items_pattern? '}' { - _Py_Dict(CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, items)), CHECK(asdl_expr_seq*, _PyPegen_get_values(p, items)), EXTRA) } + _PyAST_Dict(CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, items)), CHECK(asdl_expr_seq*, _PyPegen_get_values(p, items)), EXTRA) } items_pattern[asdl_seq*]: | items=','.key_value_pattern+ ','? { items } key_value_pattern[KeyValuePair*]: @@ -304,26 +304,26 @@ double_star_pattern[KeyValuePair*]: | '**' value=capture_pattern { _PyPegen_key_value_pair(p, NULL, value) } class_pattern[expr_ty]: - | func=name_or_attr '(' ')' { _Py_Call(func, NULL, NULL, EXTRA) } + | func=name_or_attr '(' ')' { _PyAST_Call(func, NULL, NULL, EXTRA) } | func=name_or_attr '(' args=positional_patterns ','? ')' { - _Py_Call(func, args, NULL, EXTRA) } + _PyAST_Call(func, args, NULL, EXTRA) } | func=name_or_attr '(' keywords=keyword_patterns ','? ')' { - _Py_Call(func, NULL, keywords, EXTRA) } + _PyAST_Call(func, NULL, keywords, EXTRA) } | func=name_or_attr '(' args=positional_patterns ',' keywords=keyword_patterns ','? ')' { - _Py_Call(func, args, keywords, EXTRA) } + _PyAST_Call(func, args, keywords, EXTRA) } positional_patterns[asdl_expr_seq*]: | args[asdl_expr_seq*]=','.pattern+ { args } keyword_patterns[asdl_keyword_seq*]: | keywords[asdl_keyword_seq*]=','.keyword_pattern+ { keywords } keyword_pattern[keyword_ty]: - | arg=NAME '=' value=pattern { _Py_keyword(arg->v.Name.id, value, EXTRA) } + | arg=NAME '=' value=pattern { _PyAST_keyword(arg->v.Name.id, value, EXTRA) } return_stmt[stmt_ty]: - | 'return' a=[star_expressions] { _Py_Return(a, EXTRA) } + | 'return' a=[star_expressions] { _PyAST_Return(a, EXTRA) } raise_stmt[stmt_ty]: - | 'raise' a=expression b=['from' z=expression { z }] { _Py_Raise(a, b, EXTRA) } - | 'raise' { _Py_Raise(NULL, NULL, EXTRA) } + | 'raise' a=expression b=['from' z=expression { z }] { _PyAST_Raise(a, b, EXTRA) } + | 'raise' { _PyAST_Raise(NULL, NULL, EXTRA) } function_def[stmt_ty]: | d=decorators f=function_def_raw { _PyPegen_function_def_decorators(p, d, f) } @@ -331,7 +331,7 @@ function_def[stmt_ty]: function_def_raw[stmt_ty]: | 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { - _Py_FunctionDef(n->v.Name.id, + _PyAST_FunctionDef(n->v.Name.id, (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) } | ASYNC 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { @@ -339,7 +339,7 @@ function_def_raw[stmt_ty]: stmt_ty, 5, "Async functions are", - _Py_AsyncFunctionDef(n->v.Name.id, + _PyAST_AsyncFunctionDef(n->v.Name.id, (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) ) } @@ -403,7 +403,7 @@ param_with_default[NameDefaultPair*]: param_maybe_default[NameDefaultPair*]: | a=param c=default? ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) } | a=param c=default? tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) } -param[arg_ty]: a=NAME b=annotation? { _Py_arg(a->v.Name.id, b, NULL, EXTRA) } +param[arg_ty]: a=NAME b=annotation? { _PyAST_arg(a->v.Name.id, b, NULL, EXTRA) } annotation[expr_ty]: ':' a=expression { a } default[expr_ty]: '=' a=expression { a } @@ -415,7 +415,7 @@ class_def[stmt_ty]: | class_def_raw class_def_raw[stmt_ty]: | 'class' a=NAME b=['(' z=[arguments] ')' { z }] &&':' c=block { - _Py_ClassDef(a->v.Name.id, + _PyAST_ClassDef(a->v.Name.id, (b) ? ((expr_ty) b)->v.Call.args : NULL, (b) ? ((expr_ty) b)->v.Call.keywords : NULL, c, NULL, EXTRA) } @@ -427,19 +427,19 @@ block[asdl_stmt_seq*] (memo): star_expressions[expr_ty]: | a=star_expression b=(',' c=star_expression { c })+ [','] { - _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } - | a=star_expression ',' { _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } + | a=star_expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } | star_expression star_expression[expr_ty] (memo): - | '*' a=bitwise_or { _Py_Starred(a, Load, EXTRA) } + | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } | expression star_named_expressions[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_named_expression+ [','] { a } star_named_expression[expr_ty]: - | '*' a=bitwise_or { _Py_Starred(a, Load, EXTRA) } + | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } | named_expression named_expression[expr_ty]: - | a=NAME ':=' ~ b=expression { _Py_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) } + | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) } | expression !':=' | invalid_named_expression @@ -447,17 +447,17 @@ annotated_rhs[expr_ty]: yield_expr | star_expressions expressions[expr_ty]: | a=expression b=(',' c=expression { c })+ [','] { - _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } - | a=expression ',' { _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } + | a=expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } | expression expression[expr_ty] (memo): - | a=disjunction 'if' b=disjunction 'else' c=expression { _Py_IfExp(b, a, c, EXTRA) } + | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) } | disjunction | lambdef lambdef[expr_ty]: | 'lambda' a=[lambda_params] ':' b=expression { - _Py_Lambda((a) ? a : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, EXTRA) } + _PyAST_Lambda((a) ? a : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, EXTRA) } lambda_params[arguments_ty]: | invalid_lambda_parameters @@ -503,26 +503,26 @@ lambda_param_with_default[NameDefaultPair*]: lambda_param_maybe_default[NameDefaultPair*]: | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) } | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) } -lambda_param[arg_ty]: a=NAME { _Py_arg(a->v.Name.id, NULL, NULL, EXTRA) } +lambda_param[arg_ty]: a=NAME { _PyAST_arg(a->v.Name.id, NULL, NULL, EXTRA) } disjunction[expr_ty] (memo): - | a=conjunction b=('or' c=conjunction { c })+ { _Py_BoolOp( + | a=conjunction b=('or' c=conjunction { c })+ { _PyAST_BoolOp( Or, CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) } | conjunction conjunction[expr_ty] (memo): - | a=inversion b=('and' c=inversion { c })+ { _Py_BoolOp( + | a=inversion b=('and' c=inversion { c })+ { _PyAST_BoolOp( And, CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) } | inversion inversion[expr_ty] (memo): - | 'not' a=inversion { _Py_UnaryOp(Not, a, EXTRA) } + | 'not' a=inversion { _PyAST_UnaryOp(Not, a, EXTRA) } | comparison comparison[expr_ty]: | a=bitwise_or b=compare_op_bitwise_or_pair+ { - _Py_Compare( + _PyAST_Compare( a, CHECK(asdl_int_seq*, _PyPegen_get_cmpops(p, b)), CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)), @@ -552,98 +552,98 @@ isnot_bitwise_or[CmpopExprPair*]: 'is' 'not' a=bitwise_or { _PyPegen_cmpop_expr_ is_bitwise_or[CmpopExprPair*]: 'is' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Is, a) } bitwise_or[expr_ty]: - | a=bitwise_or '|' b=bitwise_xor { _Py_BinOp(a, BitOr, b, EXTRA) } + | a=bitwise_or '|' b=bitwise_xor { _PyAST_BinOp(a, BitOr, b, EXTRA) } | bitwise_xor bitwise_xor[expr_ty]: - | a=bitwise_xor '^' b=bitwise_and { _Py_BinOp(a, BitXor, b, EXTRA) } + | a=bitwise_xor '^' b=bitwise_and { _PyAST_BinOp(a, BitXor, b, EXTRA) } | bitwise_and bitwise_and[expr_ty]: - | a=bitwise_and '&' b=shift_expr { _Py_BinOp(a, BitAnd, b, EXTRA) } + | a=bitwise_and '&' b=shift_expr { _PyAST_BinOp(a, BitAnd, b, EXTRA) } | shift_expr shift_expr[expr_ty]: - | a=shift_expr '<<' b=sum { _Py_BinOp(a, LShift, b, EXTRA) } - | a=shift_expr '>>' b=sum { _Py_BinOp(a, RShift, b, EXTRA) } + | a=shift_expr '<<' b=sum { _PyAST_BinOp(a, LShift, b, EXTRA) } + | a=shift_expr '>>' b=sum { _PyAST_BinOp(a, RShift, b, EXTRA) } | sum sum[expr_ty]: - | a=sum '+' b=term { _Py_BinOp(a, Add, b, EXTRA) } - | a=sum '-' b=term { _Py_BinOp(a, Sub, b, EXTRA) } + | a=sum '+' b=term { _PyAST_BinOp(a, Add, b, EXTRA) } + | a=sum '-' b=term { _PyAST_BinOp(a, Sub, b, EXTRA) } | term term[expr_ty]: - | a=term '*' b=factor { _Py_BinOp(a, Mult, b, EXTRA) } - | a=term '/' b=factor { _Py_BinOp(a, Div, b, EXTRA) } - | a=term '//' b=factor { _Py_BinOp(a, FloorDiv, b, EXTRA) } - | a=term '%' b=factor { _Py_BinOp(a, Mod, b, EXTRA) } - | a=term '@' b=factor { CHECK_VERSION(expr_ty, 5, "The '@' operator is", _Py_BinOp(a, MatMult, b, EXTRA)) } + | a=term '*' b=factor { _PyAST_BinOp(a, Mult, b, EXTRA) } + | a=term '/' b=factor { _PyAST_BinOp(a, Div, b, EXTRA) } + | a=term '//' b=factor { _PyAST_BinOp(a, FloorDiv, b, EXTRA) } + | a=term '%' b=factor { _PyAST_BinOp(a, Mod, b, EXTRA) } + | a=term '@' b=factor { CHECK_VERSION(expr_ty, 5, "The '@' operator is", _PyAST_BinOp(a, MatMult, b, EXTRA)) } | factor factor[expr_ty] (memo): - | '+' a=factor { _Py_UnaryOp(UAdd, a, EXTRA) } - | '-' a=factor { _Py_UnaryOp(USub, a, EXTRA) } - | '~' a=factor { _Py_UnaryOp(Invert, a, EXTRA) } + | '+' a=factor { _PyAST_UnaryOp(UAdd, a, EXTRA) } + | '-' a=factor { _PyAST_UnaryOp(USub, a, EXTRA) } + | '~' a=factor { _PyAST_UnaryOp(Invert, a, EXTRA) } | power power[expr_ty]: - | a=await_primary '**' b=factor { _Py_BinOp(a, Pow, b, EXTRA) } + | a=await_primary '**' b=factor { _PyAST_BinOp(a, Pow, b, EXTRA) } | await_primary await_primary[expr_ty] (memo): - | AWAIT a=primary { CHECK_VERSION(expr_ty, 5, "Await expressions are", _Py_Await(a, EXTRA)) } + | AWAIT a=primary { CHECK_VERSION(expr_ty, 5, "Await expressions are", _PyAST_Await(a, EXTRA)) } | primary primary[expr_ty]: | invalid_primary # must be before 'primay genexp' because of invalid_genexp - | a=primary '.' b=NAME { _Py_Attribute(a, b->v.Name.id, Load, EXTRA) } - | a=primary b=genexp { _Py_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) } + | a=primary '.' b=NAME { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) } + | a=primary b=genexp { _PyAST_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) } | a=primary '(' b=[arguments] ')' { - _Py_Call(a, + _PyAST_Call(a, (b) ? ((expr_ty) b)->v.Call.args : NULL, (b) ? ((expr_ty) b)->v.Call.keywords : NULL, EXTRA) } - | a=primary '[' b=slices ']' { _Py_Subscript(a, b, Load, EXTRA) } + | a=primary '[' b=slices ']' { _PyAST_Subscript(a, b, Load, EXTRA) } | atom slices[expr_ty]: | a=slice !',' { a } - | a[asdl_expr_seq*]=','.slice+ [','] { _Py_Tuple(a, Load, EXTRA) } + | a[asdl_expr_seq*]=','.slice+ [','] { _PyAST_Tuple(a, Load, EXTRA) } slice[expr_ty]: - | a=[expression] ':' b=[expression] c=[':' d=[expression] { d }] { _Py_Slice(a, b, c, EXTRA) } + | a=[expression] ':' b=[expression] c=[':' d=[expression] { d }] { _PyAST_Slice(a, b, c, EXTRA) } | a=named_expression { a } atom[expr_ty]: | NAME - | 'True' { _Py_Constant(Py_True, NULL, EXTRA) } - | 'False' { _Py_Constant(Py_False, NULL, EXTRA) } - | 'None' { _Py_Constant(Py_None, NULL, EXTRA) } + | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) } + | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) } + | 'None' { _PyAST_Constant(Py_None, NULL, EXTRA) } | &STRING strings | NUMBER | &'(' (tuple | group | genexp) | &'[' (list | listcomp) | &'{' (dict | set | dictcomp | setcomp) - | '...' { _Py_Constant(Py_Ellipsis, NULL, EXTRA) } + | '...' { _PyAST_Constant(Py_Ellipsis, NULL, EXTRA) } strings[expr_ty] (memo): a=STRING+ { _PyPegen_concatenate_strings(p, a) } list[expr_ty]: - | '[' a=[star_named_expressions] ']' { _Py_List(a, Load, EXTRA) } + | '[' a=[star_named_expressions] ']' { _PyAST_List(a, Load, EXTRA) } listcomp[expr_ty]: - | '[' a=named_expression b=for_if_clauses ']' { _Py_ListComp(a, b, EXTRA) } + | '[' a=named_expression b=for_if_clauses ']' { _PyAST_ListComp(a, b, EXTRA) } | invalid_comprehension tuple[expr_ty]: | '(' a=[y=star_named_expression ',' z=[star_named_expressions] { _PyPegen_seq_insert_in_front(p, y, z) } ] ')' { - _Py_Tuple(a, Load, EXTRA) } + _PyAST_Tuple(a, Load, EXTRA) } group[expr_ty]: | '(' a=(yield_expr | named_expression) ')' { a } | invalid_group genexp[expr_ty]: - | '(' a=named_expression b=for_if_clauses ')' { _Py_GeneratorExp(a, b, EXTRA) } + | '(' a=named_expression b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) } | invalid_comprehension -set[expr_ty]: '{' a=star_named_expressions '}' { _Py_Set(a, EXTRA) } +set[expr_ty]: '{' a=star_named_expressions '}' { _PyAST_Set(a, EXTRA) } setcomp[expr_ty]: - | '{' a=named_expression b=for_if_clauses '}' { _Py_SetComp(a, b, EXTRA) } + | '{' a=named_expression b=for_if_clauses '}' { _PyAST_SetComp(a, b, EXTRA) } | invalid_comprehension dict[expr_ty]: | '{' a=[double_starred_kvpairs] '}' { - _Py_Dict( + _PyAST_Dict( CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, a)), CHECK(asdl_expr_seq*, _PyPegen_get_values(p, a)), EXTRA) } dictcomp[expr_ty]: - | '{' a=kvpair b=for_if_clauses '}' { _Py_DictComp(a->key, a->value, b, EXTRA) } + | '{' a=kvpair b=for_if_clauses '}' { _PyAST_DictComp(a->key, a->value, b, EXTRA) } | invalid_dict_comprehension double_starred_kvpairs[asdl_seq*]: a=','.double_starred_kvpair+ [','] { a } double_starred_kvpair[KeyValuePair*]: @@ -654,21 +654,21 @@ for_if_clauses[asdl_comprehension_seq*]: | a[asdl_comprehension_seq*]=for_if_clause+ { a } for_if_clause[comprehension_ty]: | ASYNC 'for' a=star_targets 'in' ~ b=disjunction c[asdl_expr_seq*]=('if' z=disjunction { z })* { - CHECK_VERSION(comprehension_ty, 6, "Async comprehensions are", _Py_comprehension(a, b, c, 1, p->arena)) } + CHECK_VERSION(comprehension_ty, 6, "Async comprehensions are", _PyAST_comprehension(a, b, c, 1, p->arena)) } | 'for' a=star_targets 'in' ~ b=disjunction c[asdl_expr_seq*]=('if' z=disjunction { z })* { - _Py_comprehension(a, b, c, 0, p->arena) } + _PyAST_comprehension(a, b, c, 0, p->arena) } | invalid_for_target yield_expr[expr_ty]: - | 'yield' 'from' a=expression { _Py_YieldFrom(a, EXTRA) } - | 'yield' a=[star_expressions] { _Py_Yield(a, EXTRA) } + | 'yield' 'from' a=expression { _PyAST_YieldFrom(a, EXTRA) } + | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) } arguments[expr_ty] (memo): | a=args [','] &')' { a } | invalid_arguments args[expr_ty]: | a[asdl_expr_seq*]=','.(starred_expression | named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) } - | a=kwargs { _Py_Call(_PyPegen_dummy_name(p), + | a=kwargs { _PyAST_Call(_PyPegen_dummy_name(p), CHECK_NULL_ALLOWED(asdl_expr_seq*, _PyPegen_seq_extract_starred_exprs(p, a)), CHECK_NULL_ALLOWED(asdl_keyword_seq*, _PyPegen_seq_delete_starred_exprs(p, a)), EXTRA) } @@ -677,72 +677,72 @@ kwargs[asdl_seq*]: | ','.kwarg_or_starred+ | ','.kwarg_or_double_starred+ starred_expression[expr_ty]: - | '*' a=expression { _Py_Starred(a, Load, EXTRA) } + | '*' a=expression { _PyAST_Starred(a, Load, EXTRA) } kwarg_or_starred[KeywordOrStarred*]: | a=NAME '=' b=expression { - _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _Py_keyword(a->v.Name.id, b, EXTRA)), 1) } + _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) } | a=starred_expression { _PyPegen_keyword_or_starred(p, a, 0) } | invalid_kwarg kwarg_or_double_starred[KeywordOrStarred*]: | a=NAME '=' b=expression { - _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _Py_keyword(a->v.Name.id, b, EXTRA)), 1) } - | '**' a=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _Py_keyword(NULL, a, EXTRA)), 1) } + _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) } + | '**' a=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(NULL, a, EXTRA)), 1) } | invalid_kwarg # NOTE: star_targets may contain *bitwise_or, targets may not. star_targets[expr_ty]: | a=star_target !',' { a } | a=star_target b=(',' c=star_target { c })* [','] { - _Py_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Store, EXTRA) } + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Store, EXTRA) } star_targets_list_seq[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_target+ [','] { a } star_targets_tuple_seq[asdl_expr_seq*]: | a=star_target b=(',' c=star_target { c })+ [','] { (asdl_expr_seq*) _PyPegen_seq_insert_in_front(p, a, b) } | a=star_target ',' { (asdl_expr_seq*) _PyPegen_singleton_seq(p, a) } star_target[expr_ty] (memo): | '*' a=(!'*' star_target) { - _Py_Starred(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), Store, EXTRA) } + _PyAST_Starred(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), Store, EXTRA) } | target_with_star_atom target_with_star_atom[expr_ty] (memo): - | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) } - | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) } + | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) } + | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) } | star_atom star_atom[expr_ty]: | a=NAME { _PyPegen_set_expr_context(p, a, Store) } | '(' a=target_with_star_atom ')' { _PyPegen_set_expr_context(p, a, Store) } - | '(' a=[star_targets_tuple_seq] ')' { _Py_Tuple(a, Store, EXTRA) } - | '[' a=[star_targets_list_seq] ']' { _Py_List(a, Store, EXTRA) } + | '(' a=[star_targets_tuple_seq] ')' { _PyAST_Tuple(a, Store, EXTRA) } + | '[' a=[star_targets_list_seq] ']' { _PyAST_List(a, Store, EXTRA) } single_target[expr_ty]: | single_subscript_attribute_target | a=NAME { _PyPegen_set_expr_context(p, a, Store) } | '(' a=single_target ')' { a } single_subscript_attribute_target[expr_ty]: - | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) } - | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) } + | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) } + | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) } del_targets[asdl_expr_seq*]: a[asdl_expr_seq*]=','.del_target+ [','] { a } del_target[expr_ty] (memo): - | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Del, EXTRA) } - | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Del, EXTRA) } + | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Del, EXTRA) } + | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Del, EXTRA) } | del_t_atom del_t_atom[expr_ty]: | a=NAME { _PyPegen_set_expr_context(p, a, Del) } | '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) } - | '(' a=[del_targets] ')' { _Py_Tuple(a, Del, EXTRA) } - | '[' a=[del_targets] ']' { _Py_List(a, Del, EXTRA) } + | '(' a=[del_targets] ')' { _PyAST_Tuple(a, Del, EXTRA) } + | '[' a=[del_targets] ']' { _PyAST_List(a, Del, EXTRA) } targets[asdl_expr_seq*]: a[asdl_expr_seq*]=','.target+ [','] { a } target[expr_ty] (memo): - | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) } - | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) } + | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) } + | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) } | t_atom t_primary[expr_ty]: - | a=t_primary '.' b=NAME &t_lookahead { _Py_Attribute(a, b->v.Name.id, Load, EXTRA) } - | a=t_primary '[' b=slices ']' &t_lookahead { _Py_Subscript(a, b, Load, EXTRA) } + | a=t_primary '.' b=NAME &t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) } + | a=t_primary '[' b=slices ']' &t_lookahead { _PyAST_Subscript(a, b, Load, EXTRA) } | a=t_primary b=genexp &t_lookahead { - _Py_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) } + _PyAST_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) } | a=t_primary '(' b=[arguments] ')' &t_lookahead { - _Py_Call(a, + _PyAST_Call(a, (b) ? ((expr_ty) b)->v.Call.args : NULL, (b) ? ((expr_ty) b)->v.Call.keywords : NULL, EXTRA) } @@ -751,8 +751,8 @@ t_lookahead: '(' | '[' | '.' t_atom[expr_ty]: | a=NAME { _PyPegen_set_expr_context(p, a, Store) } | '(' a=target ')' { _PyPegen_set_expr_context(p, a, Store) } - | '(' b=[targets] ')' { _Py_Tuple(b, Store, EXTRA) } - | '[' b=[targets] ']' { _Py_List(b, Store, EXTRA) } + | '(' b=[targets] ')' { _PyAST_Tuple(b, Store, EXTRA) } + | '[' b=[targets] ']' { _PyAST_List(b, Store, EXTRA) } # From here on, there are rules for invalid syntax with specialised error messages @@ -856,7 +856,7 @@ invalid_except_block: | 'except' a=expression ',' expressions ['as' NAME ] ':' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "exception group must be parenthesized") } | 'except' expression ['as' NAME ] &&':' - | 'except' &&':' + | 'except' &&':' invalid_match_stmt: | "match" subject_expr !':' { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) } diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h index 5099cf6ec8c99..38c8013d13413 100644 --- a/Include/internal/pycore_ast.h +++ b/Include/internal/pycore_ast.h @@ -570,252 +570,193 @@ struct _type_ignore { // Note: these macros affect function definitions, not only call sites. -#define Module(a0, a1, a2) _Py_Module(a0, a1, a2) -mod_ty _Py_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, - PyArena *arena); -#define Interactive(a0, a1) _Py_Interactive(a0, a1) -mod_ty _Py_Interactive(asdl_stmt_seq * body, PyArena *arena); -#define Expression(a0, a1) _Py_Expression(a0, a1) -mod_ty _Py_Expression(expr_ty body, PyArena *arena); -#define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2) -mod_ty _Py_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena - *arena); -#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * - body, asdl_expr_seq * decorator_list, expr_ty returns, - string type_comment, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq - * body, asdl_expr_seq * decorator_list, expr_ty - returns, string type_comment, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -#define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) -stmt_ty _Py_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * - keywords, asdl_stmt_seq * body, asdl_expr_seq * - decorator_list, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Return(a0, a1, a2, a3, a4, a5) _Py_Return(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -#define Delete(a0, a1, a2, a3, a4, a5) _Py_Delete(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Assign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Assign(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define AugAssign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AugAssign(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8) -stmt_ty _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int - simple, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) -stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, - asdl_stmt_seq * orelse, string type_comment, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) -stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, - asdl_stmt_seq * orelse, string type_comment, int lineno, - int col_offset, int end_lineno, int end_col_offset, +mod_ty _PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena *arena); -#define While(a0, a1, a2, a3, a4, a5, a6, a7) _Py_While(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define If(a0, a1, a2, a3, a4, a5, a6, a7) _Py_If(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -#define With(a0, a1, a2, a3, a4, a5, a6, a7) _Py_With(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string - type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string +mod_ty _PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena); +mod_ty _PyAST_Expression(expr_ty body, PyArena *arena); +mod_ty _PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena + *arena); +stmt_ty _PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * + body, asdl_expr_seq * decorator_list, expr_ty + returns, string type_comment, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +stmt_ty _PyAST_AsyncFunctionDef(identifier name, arguments_ty args, + asdl_stmt_seq * body, asdl_expr_seq * + decorator_list, expr_ty returns, string + type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_ClassDef(identifier name, asdl_expr_seq * bases, + asdl_keyword_seq * keywords, asdl_stmt_seq * body, + asdl_expr_seq * decorator_list, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +stmt_ty _PyAST_Return(expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Match(a0, a1, a2, a3, a4, a5, a6) _Py_Match(a0, a1, a2, a3, a4, a5, a6) -stmt_ty _Py_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Raise(a0, a1, a2, a3, a4, a5, a6) _Py_Raise(a0, a1, a2, a3, a4, a5, a6) -stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Try(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_Try(a0, a1, a2, a3, a4, a5, a6, a7, a8) -stmt_ty _Py_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, - asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Assert(a0, a1, a2, a3, a4, a5, a6) _Py_Assert(a0, a1, a2, a3, a4, a5, a6) -stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Import(a0, a1, a2, a3, a4, a5) _Py_Import(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Import(asdl_alias_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7) -stmt_ty _Py_ImportFrom(identifier module, asdl_alias_seq * names, int level, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Global(a0, a1, a2, a3, a4, a5) _Py_Global(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Global(asdl_identifier_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Nonlocal(a0, a1, a2, a3, a4, a5) _Py_Nonlocal(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -#define Expr(a0, a1, a2, a3, a4, a5) _Py_Expr(a0, a1, a2, a3, a4, a5) -stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Pass(a0, a1, a2, a3, a4) _Py_Pass(a0, a1, a2, a3, a4) -stmt_ty _Py_Pass(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Break(a0, a1, a2, a3, a4) _Py_Break(a0, a1, a2, a3, a4) -stmt_ty _Py_Break(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Continue(a0, a1, a2, a3, a4) _Py_Continue(a0, a1, a2, a3, a4) -stmt_ty _Py_Continue(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define BoolOp(a0, a1, a2, a3, a4, a5, a6) _Py_BoolOp(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int +stmt_ty _PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int + simple, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +stmt_ty _PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, + asdl_stmt_seq * orelse, string type_comment, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define NamedExpr(a0, a1, a2, a3, a4, a5, a6) _Py_NamedExpr(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int +stmt_ty _PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, + asdl_stmt_seq * orelse, string type_comment, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * + orelse, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, + int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string + type_comment, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +stmt_ty _PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, + string type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, + int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +stmt_ty _PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, + asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +stmt_ty _PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, + int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +stmt_ty _PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +stmt_ty _PyAST_Pass(int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_Break(int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +stmt_ty _PyAST_Continue(int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define BinOp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_BinOp(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define UnaryOp(a0, a1, a2, a3, a4, a5, a6) _Py_UnaryOp(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -#define Lambda(a0, a1, a2, a3, a4, a5, a6) _Py_Lambda(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -#define IfExp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_IfExp(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Dict(a0, a1, a2, a3, a4, a5, a6) _Py_Dict(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Set(a0, a1, a2, a3, a4, a5) _Py_Set(a0, a1, a2, a3, a4, a5) -expr_ty _Py_Set(asdl_expr_seq * elts, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define ListComp(a0, a1, a2, a3, a4, a5, a6) _Py_ListComp(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define SetComp(a0, a1, a2, a3, a4, a5, a6) _Py_SetComp(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -#define DictComp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_DictComp(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * - generators, int lineno, int col_offset, int end_lineno, +expr_ty _PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +expr_ty _PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, + int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +expr_ty _PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, + int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +expr_ty _PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +expr_ty _PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * + generators, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +expr_ty _PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, + int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +expr_ty _PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define GeneratorExp(a0, a1, a2, a3, a4, a5, a6) _Py_GeneratorExp(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int +expr_ty _PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +expr_ty _PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * + comparators, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena); +expr_ty _PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * + keywords, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_FormattedValue(expr_ty value, int conversion, expr_ty + format_spec, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +expr_ty _PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena); +expr_ty _PyAST_Constant(constant value, string kind, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, + int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +expr_ty _PyAST_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Await(a0, a1, a2, a3, a4, a5) _Py_Await(a0, a1, a2, a3, a4, a5) -expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -#define YieldFrom(a0, a1, a2, a3, a4, a5) _Py_YieldFrom(a0, a1, a2, a3, a4, a5) -expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Compare(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Compare(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * - comparators, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -#define Call(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Call(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * - keywords, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define JoinedStr(a0, a1, a2, a3, a4, a5) _Py_JoinedStr(a0, a1, a2, a3, a4, a5) -expr_ty _Py_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define Constant(a0, a1, a2, a3, a4, a5, a6) _Py_Constant(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Constant(constant value, string kind, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -#define Attribute(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Attribute(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -#define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int +expr_ty _PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Name(a0, a1, a2, a3, a4, a5, a6) _Py_Name(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define List(a0, a1, a2, a3, a4, a5, a6) _Py_List(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Tuple(a0, a1, a2, a3, a4, a5, a6) _Py_Tuple(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define Slice(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Slice(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -#define MatchAs(a0, a1, a2, a3, a4, a5, a6) _Py_MatchAs(a0, a1, a2, a3, a4, a5, a6) -expr_ty _Py_MatchAs(expr_ty pattern, identifier name, int lineno, int +expr_ty _PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define MatchOr(a0, a1, a2, a3, a4, a5) _Py_MatchOr(a0, a1, a2, a3, a4, a5) -expr_ty _Py_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4) -comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq - * ifs, int is_async, PyArena *arena); -#define ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7) -excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq - * body, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena - *arena); -#define arguments(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arguments(a0, a1, a2, a3, a4, a5, a6, a7) -arguments_ty _Py_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, - arg_ty vararg, asdl_arg_seq * kwonlyargs, - asdl_expr_seq * kw_defaults, arg_ty kwarg, - asdl_expr_seq * defaults, PyArena *arena); -#define arg(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arg(a0, a1, a2, a3, a4, a5, a6, a7) -arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -#define keyword(a0, a1, a2, a3, a4, a5, a6) _Py_keyword(a0, a1, a2, a3, a4, a5, a6) -keyword_ty _Py_keyword(identifier arg, expr_ty value, int lineno, int +expr_ty _PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); +expr_ty _PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, + int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +expr_ty _PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define alias(a0, a1, a2) _Py_alias(a0, a1, a2) -alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); -#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2) -withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena - *arena); -#define match_case(a0, a1, a2, a3) _Py_match_case(a0, a1, a2, a3) -match_case_ty _Py_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * - body, PyArena *arena); -#define TypeIgnore(a0, a1, a2) _Py_TypeIgnore(a0, a1, a2) -type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena); +expr_ty _PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena); +comprehension_ty _PyAST_comprehension(expr_ty target, expr_ty iter, + asdl_expr_seq * ifs, int is_async, + PyArena *arena); +excepthandler_ty _PyAST_ExceptHandler(expr_ty type, identifier name, + asdl_stmt_seq * body, int lineno, int + col_offset, int end_lineno, int + end_col_offset, PyArena *arena); +arguments_ty _PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, + arg_ty vararg, asdl_arg_seq * kwonlyargs, + asdl_expr_seq * kw_defaults, arg_ty kwarg, + asdl_expr_seq * defaults, PyArena *arena); +arg_ty _PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +keyword_ty _PyAST_keyword(identifier arg, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +alias_ty _PyAST_alias(identifier name, identifier asname, PyArena *arena); +withitem_ty _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, + PyArena *arena); +match_case_ty _PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * + body, PyArena *arena); +type_ignore_ty _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena); PyObject* PyAST_mod2obj(mod_ty t); diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py index 67bb8512118e3..5d8f54399e746 100644 --- a/Lib/test/test_peg_generator/test_c_parser.py +++ b/Lib/test/test_peg_generator/test_c_parser.py @@ -96,15 +96,15 @@ def run_test(self, grammar_source, test_source): def test_c_parser(self) -> None: grammar_source = """ - start[mod_ty]: a[asdl_stmt_seq*]=stmt* $ { Module(a, NULL, p->arena) } + start[mod_ty]: a[asdl_stmt_seq*]=stmt* $ { _PyAST_Module(a, NULL, p->arena) } stmt[stmt_ty]: a=expr_stmt { a } - expr_stmt[stmt_ty]: a=expression NEWLINE { _Py_Expr(a, EXTRA) } - expression[expr_ty]: ( l=expression '+' r=term { _Py_BinOp(l, Add, r, EXTRA) } - | l=expression '-' r=term { _Py_BinOp(l, Sub, r, EXTRA) } + expr_stmt[stmt_ty]: a=expression NEWLINE { _PyAST_Expr(a, EXTRA) } + expression[expr_ty]: ( l=expression '+' r=term { _PyAST_BinOp(l, Add, r, EXTRA) } + | l=expression '-' r=term { _PyAST_BinOp(l, Sub, r, EXTRA) } | t=term { t } ) - term[expr_ty]: ( l=term '*' r=factor { _Py_BinOp(l, Mult, r, EXTRA) } - | l=term '/' r=factor { _Py_BinOp(l, Div, r, EXTRA) } + term[expr_ty]: ( l=term '*' r=factor { _PyAST_BinOp(l, Mult, r, EXTRA) } + | l=term '/' r=factor { _PyAST_BinOp(l, Div, r, EXTRA) } | f=factor { f } ) factor[expr_ty]: ('(' e=expression ')' { e } @@ -237,12 +237,12 @@ def test_nasty_mutually_left_recursive(self) -> None: def test_return_stmt_noexpr_action(self) -> None: grammar_source = """ - start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) } + start[mod_ty]: a=[statements] ENDMARKER { _PyAST_Module(a, NULL, p->arena) } statements[asdl_stmt_seq*]: a[asdl_stmt_seq*]=statement+ { a } statement[stmt_ty]: simple_stmt simple_stmt[stmt_ty]: small_stmt small_stmt[stmt_ty]: return_stmt - return_stmt[stmt_ty]: a='return' NEWLINE { _Py_Return(NULL, EXTRA) } + return_stmt[stmt_ty]: a='return' NEWLINE { _PyAST_Return(NULL, EXTRA) } """ test_source = """ stmt = "return" @@ -252,8 +252,8 @@ def test_return_stmt_noexpr_action(self) -> None: def test_gather_action_ast(self) -> None: grammar_source = """ - start[mod_ty]: a[asdl_stmt_seq*]=';'.pass_stmt+ NEWLINE ENDMARKER { Module(a, NULL, p->arena) } - pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA)} + start[mod_ty]: a[asdl_stmt_seq*]=';'.pass_stmt+ NEWLINE ENDMARKER { _PyAST_Module(a, NULL, p->arena) } + pass_stmt[stmt_ty]: a='pass' { _PyAST_Pass(EXTRA)} """ test_source = """ stmt = "pass; pass" @@ -263,12 +263,12 @@ def test_gather_action_ast(self) -> None: def test_pass_stmt_action(self) -> None: grammar_source = """ - start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) } + start[mod_ty]: a=[statements] ENDMARKER { _PyAST_Module(a, NULL, p->arena) } statements[asdl_stmt_seq*]: a[asdl_stmt_seq*]=statement+ { a } statement[stmt_ty]: simple_stmt simple_stmt[stmt_ty]: small_stmt small_stmt[stmt_ty]: pass_stmt - pass_stmt[stmt_ty]: a='pass' NEWLINE { _Py_Pass(EXTRA) } + pass_stmt[stmt_ty]: a='pass' NEWLINE { _PyAST_Pass(EXTRA) } """ test_source = """ stmt = "pass" @@ -278,7 +278,7 @@ def test_pass_stmt_action(self) -> None: def test_if_stmt_action(self) -> None: grammar_source = """ - start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) } + start[mod_ty]: a=[statements] ENDMARKER { _PyAST_Module(a, NULL, p->arena) } statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) } statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | simple_stmt @@ -290,11 +290,11 @@ def test_if_stmt_action(self) -> None: compound_stmt: if_stmt - if_stmt: 'if' a=full_expression ':' b=block { _Py_If(a, b, NULL, EXTRA) } + if_stmt: 'if' a=full_expression ':' b=block { _PyAST_If(a, b, NULL, EXTRA) } small_stmt[stmt_ty]: pass_stmt - pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA) } + pass_stmt[stmt_ty]: a='pass' { _PyAST_Pass(EXTRA) } full_expression: NAME """ @@ -306,15 +306,15 @@ def test_if_stmt_action(self) -> None: def test_same_name_different_types(self) -> None: grammar_source = """ - start[mod_ty]: a[asdl_stmt_seq*]=import_from+ NEWLINE ENDMARKER { Module(a, NULL, p->arena)} + start[mod_ty]: a[asdl_stmt_seq*]=import_from+ NEWLINE ENDMARKER { _PyAST_Module(a, NULL, p->arena)} import_from[stmt_ty]: ( a='from' !'import' c=simple_name 'import' d=import_as_names_from { - _Py_ImportFrom(c->v.Name.id, d, 0, EXTRA) } + _PyAST_ImportFrom(c->v.Name.id, d, 0, EXTRA) } | a='from' '.' 'import' c=import_as_names_from { - _Py_ImportFrom(NULL, c, 1, EXTRA) } + _PyAST_ImportFrom(NULL, c, 1, EXTRA) } ) simple_name[expr_ty]: NAME import_as_names_from[asdl_alias_seq*]: a[asdl_alias_seq*]=','.import_as_name_from+ { a } - import_as_name_from[alias_ty]: a=NAME 'as' b=NAME { _Py_alias(((expr_ty) a)->v.Name.id, ((expr_ty) b)->v.Name.id, p->arena) } + import_as_name_from[alias_ty]: a=NAME 'as' b=NAME { _PyAST_alias(((expr_ty) a)->v.Name.id, ((expr_ty) b)->v.Name.id, p->arena) } """ test_source = """ for stmt in ("from a import b as c", "from . import a as b"): @@ -326,19 +326,19 @@ def test_same_name_different_types(self) -> None: def test_with_stmt_with_paren(self) -> None: grammar_source = """ - start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) } + start[mod_ty]: a=[statements] ENDMARKER { _PyAST_Module(a, NULL, p->arena) } statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) } statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } compound_stmt[stmt_ty]: with_stmt with_stmt[stmt_ty]: ( a='with' '(' b[asdl_withitem_seq*]=','.with_item+ ')' ':' c=block { - _Py_With(b, (asdl_stmt_seq*) _PyPegen_singleton_seq(p, c), NULL, EXTRA) } + _PyAST_With(b, (asdl_stmt_seq*) _PyPegen_singleton_seq(p, c), NULL, EXTRA) } ) with_item[withitem_ty]: ( - e=NAME o=['as' t=NAME { t }] { _Py_withitem(e, _PyPegen_set_expr_context(p, o, Store), p->arena) } + e=NAME o=['as' t=NAME { t }] { _PyAST_withitem(e, _PyPegen_set_expr_context(p, o, Store), p->arena) } ) block[stmt_ty]: a=pass_stmt NEWLINE { a } | NEWLINE INDENT a=pass_stmt DEDENT { a } - pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA) } + pass_stmt[stmt_ty]: a='pass' { _PyAST_Pass(EXTRA) } """ test_source = """ stmt = "with (\\n a as b,\\n c as d\\n): pass" @@ -352,14 +352,14 @@ def test_with_stmt_with_paren(self) -> None: def test_ternary_operator(self) -> None: grammar_source = """ - start[mod_ty]: a=expr ENDMARKER { Module(a, NULL, p->arena) } - expr[asdl_stmt_seq*]: a=listcomp NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, _Py_Expr(a, EXTRA)) } + start[mod_ty]: a=expr ENDMARKER { _PyAST_Module(a, NULL, p->arena) } + expr[asdl_stmt_seq*]: a=listcomp NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, _PyAST_Expr(a, EXTRA)) } listcomp[expr_ty]: ( - a='[' b=NAME c=for_if_clauses d=']' { _Py_ListComp(b, c, EXTRA) } + a='[' b=NAME c=for_if_clauses d=']' { _PyAST_ListComp(b, c, EXTRA) } ) for_if_clauses[asdl_comprehension_seq*]: ( a[asdl_comprehension_seq*]=(y=[ASYNC] 'for' a=NAME 'in' b=NAME c[asdl_expr_seq*]=('if' z=NAME { z })* - { _Py_comprehension(_Py_Name(((expr_ty) a)->v.Name.id, Store, EXTRA), b, c, (y == NULL) ? 0 : 1, p->arena) })+ { a } + { _PyAST_comprehension(_PyAST_Name(((expr_ty) a)->v.Name.id, Store, EXTRA), b, c, (y == NULL) ? 0 : 1, p->arena) })+ { a } ) """ test_source = """ diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index 02be1b3ccb0db..b71565c53fc01 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -264,6 +264,10 @@ def visitProduct(self, product, name, depth): self.emit("", depth) +def ast_func_name(name): + return f"_PyAST_{name}" + + class PrototypeVisitor(EmitVisitor): """Generate function prototypes for the .h file""" @@ -322,16 +326,7 @@ def emit_function(self, name, ctype, args, attrs, union=True): argstr += ", PyArena *arena" else: argstr = "PyArena *arena" - margs = "a0" - for i in range(1, len(args)+1): - margs += ", a%d" % i - # bpo-43244: defines Yield macro. Don't redefine it in - # pycore_ast.h: it is not needed outside Python-ast.c which calls - # directly _Py_Yield(). - if name != "Yield": - self.emit("#define %s(%s) _Py_%s(%s)" % (name, margs, name, margs), 0, - reflow=False) - self.emit("%s _Py_%s(%s);" % (ctype, name, argstr), False) + self.emit("%s %s(%s);" % (ctype, ast_func_name(name), argstr), False) def visitProduct(self, prod, name): self.emit_function(name, get_c_type(name), @@ -340,10 +335,6 @@ def visitProduct(self, prod, name): union=False) -def pyfunc_name(name): - return f"_Py_{name}" - - class FunctionVisitor(PrototypeVisitor): """Visitor to generate constructor functions for AST.""" @@ -357,7 +348,7 @@ def emit(s, depth=0, reflow=True): else: argstr = "PyArena *arena" self.emit("%s" % ctype, 0) - emit("%s(%s)" % (pyfunc_name(name), argstr)) + emit("%s(%s)" % (ast_func_name(name), argstr)) emit("{") emit("%s p;" % ctype, 1) for argtype, argname, opt in args: @@ -496,7 +487,7 @@ def complexSum(self, sum, name): for f in t.fields: self.visitField(f, t.name, sum=sum, depth=2) args = [f.name for f in t.fields] + [a.name for a in sum.attributes] - self.emit("*out = %s(%s);" % (pyfunc_name(t.name), self.buildArgs(args)), 2) + self.emit("*out = %s(%s);" % (ast_func_name(t.name), self.buildArgs(args)), 2) self.emit("if (*out == NULL) goto failed;", 2) self.emit("return 0;", 2) self.emit("}", 1) @@ -529,7 +520,7 @@ def visitProduct(self, prod, name): self.visitField(a, name, prod=prod, depth=1) args = [f.name for f in prod.fields] args.extend([a.name for a in prod.attributes]) - self.emit("*out = %s(%s);" % (pyfunc_name(name), self.buildArgs(args)), 1) + self.emit("*out = %s(%s);" % (ast_func_name(name), self.buildArgs(args)), 1) self.emit("return 0;", 1) self.emit("failed:", 0) self.emit("Py_XDECREF(tmp);", 1) diff --git a/Parser/parser.c b/Parser/parser.c index de90c87db38e6..cf8b624ce7dde 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -897,7 +897,7 @@ interactive_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ interactive[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement_newline")); - _res = Interactive ( a , p -> arena ); + _res = _PyAST_Interactive ( a , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -944,7 +944,7 @@ eval_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ eval[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $")); - _res = Expression ( a , p -> arena ); + _res = _PyAST_Expression ( a , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1003,7 +1003,7 @@ func_type_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ func_type[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $")); - _res = FunctionType ( a , b , p -> arena ); + _res = _PyAST_FunctionType ( a , b , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1496,7 +1496,7 @@ statement_newline_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , CHECK ( stmt_ty , _Py_Pass ( EXTRA ) ) ); + _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , CHECK ( stmt_ty , _PyAST_Pass ( EXTRA ) ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1692,7 +1692,7 @@ simple_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Expr ( e , EXTRA ); + _res = _PyAST_Expr ( e , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1788,7 +1788,7 @@ simple_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Pass ( EXTRA ); + _res = _PyAST_Pass ( EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1884,7 +1884,7 @@ simple_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Break ( EXTRA ); + _res = _PyAST_Break ( EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1917,7 +1917,7 @@ simple_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Continue ( EXTRA ); + _res = _PyAST_Continue ( EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2224,7 +2224,7 @@ assignment_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotation syntax is" , _Py_AnnAssign ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotation syntax is" , _PyAST_AnnAssign ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2266,7 +2266,7 @@ assignment_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotations syntax is" , _Py_AnnAssign ( a , b , c , 0 , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotations syntax is" , _PyAST_AnnAssign ( a , b , c , 0 , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2307,7 +2307,7 @@ assignment_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2349,7 +2349,7 @@ assignment_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_AugAssign ( a , b -> kind , c , EXTRA ); + _res = _PyAST_AugAssign ( a , b -> kind , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2776,7 +2776,7 @@ global_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Global ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); + _res = _PyAST_Global ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2838,7 +2838,7 @@ nonlocal_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Nonlocal ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); + _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2897,7 +2897,7 @@ yield_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Expr ( y , EXTRA ); + _res = _PyAST_Expr ( y , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2962,7 +2962,7 @@ assert_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Assert ( a , b , EXTRA ); + _res = _PyAST_Assert ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3026,7 +3026,7 @@ del_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Delete ( a , EXTRA ); + _res = _PyAST_Delete ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3162,7 +3162,7 @@ import_name_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Import ( a , EXTRA ); + _res = _PyAST_Import ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3235,7 +3235,7 @@ import_from_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ImportFrom ( b -> v . Name . id , c , _PyPegen_seq_count_dots ( a ) , EXTRA ); + _res = _PyAST_ImportFrom ( b -> v . Name . id , c , _PyPegen_seq_count_dots ( a ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3277,7 +3277,7 @@ import_from_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , EXTRA ); + _res = _PyAST_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3481,7 +3481,7 @@ import_from_as_name_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]")); - _res = _Py_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); + _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3566,7 +3566,7 @@ dotted_as_name_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]")); - _res = _Py_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); + _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3737,7 +3737,7 @@ if_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); + _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3782,7 +3782,7 @@ if_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_If ( a , b , c , EXTRA ); + _res = _PyAST_If ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3855,7 +3855,7 @@ elif_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); + _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3900,7 +3900,7 @@ elif_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_If ( a , b , c , EXTRA ); + _res = _PyAST_If ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4018,7 +4018,7 @@ while_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_While ( a , b , c , EXTRA ); + _res = _PyAST_While ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4104,7 +4104,7 @@ for_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4168,7 +4168,7 @@ for_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _Py_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4274,7 +4274,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_With ( a , b , NULL , EXTRA ); + _res = _PyAST_With ( a , b , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4319,7 +4319,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4374,7 +4374,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _Py_AsyncWith ( a , b , NULL , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4422,7 +4422,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _Py_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4493,7 +4493,7 @@ with_item_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); - _res = _Py_withitem ( e , t , p -> arena ); + _res = _PyAST_withitem ( e , t , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4536,7 +4536,7 @@ with_item_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression")); - _res = _Py_withitem ( e , NULL , p -> arena ); + _res = _PyAST_withitem ( e , NULL , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4606,7 +4606,7 @@ try_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Try ( b , NULL , NULL , f , EXTRA ); + _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4654,7 +4654,7 @@ try_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Try ( b , ex , el , f , EXTRA ); + _res = _PyAST_Try ( b , ex , el , f , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4728,7 +4728,7 @@ except_block_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA ); + _res = _PyAST_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4767,7 +4767,7 @@ except_block_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ExceptHandler ( NULL , NULL , b , EXTRA ); + _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4912,7 +4912,7 @@ match_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _Py_Match ( subject , cases , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4996,7 +4996,7 @@ subject_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5068,7 +5068,7 @@ case_block_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block")); - _res = _Py_match_case ( pattern , guard , body , p -> arena ); + _res = _PyAST_match_case ( pattern , guard , body , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5190,7 +5190,7 @@ patterns_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( values , Load , EXTRA ); + _res = _PyAST_Tuple ( values , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5329,7 +5329,7 @@ as_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_MatchAs ( pattern , target -> v . Name . id , EXTRA ); + _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5388,7 +5388,7 @@ or_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _Py_MatchOr ( patterns , EXTRA ); + _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5658,7 +5658,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( real , Add , imag , EXTRA ); + _res = _PyAST_BinOp ( real , Add , imag , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5697,7 +5697,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( real , Sub , imag , EXTRA ); + _res = _PyAST_BinOp ( real , Sub , imag , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5749,7 +5749,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_None , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5782,7 +5782,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_True , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5815,7 +5815,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_False , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5896,7 +5896,7 @@ signed_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_UnaryOp ( USub , number , EXTRA ); + _res = _PyAST_UnaryOp ( USub , number , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6000,7 +6000,7 @@ wildcard_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Name ( CHECK ( PyObject * , _PyPegen_new_identifier ( p , "_" ) ) , Store , EXTRA ); + _res = _PyAST_Name ( CHECK ( PyObject * , _PyPegen_new_identifier ( p , "_" ) ) , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6140,7 +6140,7 @@ attr_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( value , attr -> v . Name . id , Load , EXTRA ); + _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6308,7 +6308,7 @@ sequence_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_List ( values , Load , EXTRA ); + _res = _PyAST_List ( values , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6347,7 +6347,7 @@ sequence_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( values , Load , EXTRA ); + _res = _PyAST_Tuple ( values , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6556,7 +6556,7 @@ star_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Starred ( value , Store , EXTRA ); + _res = _PyAST_Starred ( value , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6621,7 +6621,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , items ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , items ) ) , EXTRA ); + _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , items ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , items ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6845,7 +6845,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( func , NULL , NULL , EXTRA ); + _res = _PyAST_Call ( func , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6891,7 +6891,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( func , args , NULL , EXTRA ); + _res = _PyAST_Call ( func , args , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6937,7 +6937,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( func , NULL , keywords , EXTRA ); + _res = _PyAST_Call ( func , NULL , keywords , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6989,7 +6989,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( func , args , keywords , EXTRA ); + _res = _PyAST_Call ( func , args , keywords , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7136,7 +7136,7 @@ keyword_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_keyword ( arg -> v . Name . id , value , EXTRA ); + _res = _PyAST_keyword ( arg -> v . Name . id , value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7198,7 +7198,7 @@ return_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Return ( a , EXTRA ); + _res = _PyAST_Return ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7263,7 +7263,7 @@ raise_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Raise ( a , b , EXTRA ); + _res = _PyAST_Raise ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7296,7 +7296,7 @@ raise_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Raise ( NULL , NULL , EXTRA ); + _res = _PyAST_Raise ( NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7444,7 +7444,7 @@ function_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7504,7 +7504,7 @@ function_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _Py_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8450,7 +8450,7 @@ param_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_arg ( a -> v . Name . id , b , NULL , EXTRA ); + _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8713,7 +8713,7 @@ class_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA ); + _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8875,7 +8875,7 @@ star_expressions_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8911,7 +8911,7 @@ star_expressions_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8996,7 +8996,7 @@ star_expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Starred ( a , Load , EXTRA ); + _res = _PyAST_Starred ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9123,7 +9123,7 @@ star_named_expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Starred ( a , Load , EXTRA ); + _res = _PyAST_Starred ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9210,7 +9210,7 @@ named_expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA ); + _res = _PyAST_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9375,7 +9375,7 @@ expressions_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9411,7 +9411,7 @@ expressions_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9505,7 +9505,7 @@ expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_IfExp ( b , a , c , EXTRA ); + _res = _PyAST_IfExp ( b , a , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9612,7 +9612,7 @@ lambdef_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA ); + _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10450,7 +10450,7 @@ lambda_param_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_arg ( a -> v . Name . id , NULL , NULL , EXTRA ); + _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10516,7 +10516,7 @@ disjunction_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BoolOp ( Or , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10602,7 +10602,7 @@ conjunction_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BoolOp ( And , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10688,7 +10688,7 @@ inversion_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_UnaryOp ( Not , a , EXTRA ); + _res = _PyAST_UnaryOp ( Not , a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10770,7 +10770,7 @@ comparison_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Compare ( a , CHECK ( asdl_int_seq * , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_exprs ( p , b ) ) , EXTRA ); + _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq * , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_exprs ( p , b ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11549,7 +11549,7 @@ bitwise_or_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , BitOr , b , EXTRA ); + _res = _PyAST_BinOp ( a , BitOr , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11665,7 +11665,7 @@ bitwise_xor_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , BitXor , b , EXTRA ); + _res = _PyAST_BinOp ( a , BitXor , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11781,7 +11781,7 @@ bitwise_and_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , BitAnd , b , EXTRA ); + _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11897,7 +11897,7 @@ shift_expr_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , LShift , b , EXTRA ); + _res = _PyAST_BinOp ( a , LShift , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11936,7 +11936,7 @@ shift_expr_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , RShift , b , EXTRA ); + _res = _PyAST_BinOp ( a , RShift , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12052,7 +12052,7 @@ sum_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Add , b , EXTRA ); + _res = _PyAST_BinOp ( a , Add , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12091,7 +12091,7 @@ sum_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Sub , b , EXTRA ); + _res = _PyAST_BinOp ( a , Sub , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12213,7 +12213,7 @@ term_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Mult , b , EXTRA ); + _res = _PyAST_BinOp ( a , Mult , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12252,7 +12252,7 @@ term_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Div , b , EXTRA ); + _res = _PyAST_BinOp ( a , Div , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12291,7 +12291,7 @@ term_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , FloorDiv , b , EXTRA ); + _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12330,7 +12330,7 @@ term_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Mod , b , EXTRA ); + _res = _PyAST_BinOp ( a , Mod , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12369,7 +12369,7 @@ term_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _Py_BinOp ( a , MatMult , b , EXTRA ) ); + _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12454,7 +12454,7 @@ factor_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_UnaryOp ( UAdd , a , EXTRA ); + _res = _PyAST_UnaryOp ( UAdd , a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12490,7 +12490,7 @@ factor_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_UnaryOp ( USub , a , EXTRA ); + _res = _PyAST_UnaryOp ( USub , a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12526,7 +12526,7 @@ factor_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_UnaryOp ( Invert , a , EXTRA ); + _res = _PyAST_UnaryOp ( Invert , a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12611,7 +12611,7 @@ power_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_BinOp ( a , Pow , b , EXTRA ); + _res = _PyAST_BinOp ( a , Pow , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12696,7 +12696,7 @@ await_primary_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _Py_Await ( a , EXTRA ) ); + _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12838,7 +12838,7 @@ primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Load , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12874,7 +12874,7 @@ primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); + _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12916,7 +12916,7 @@ primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); + _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12958,7 +12958,7 @@ primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Load , EXTRA ); + _res = _PyAST_Subscript ( a , b , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13066,7 +13066,7 @@ slices_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( a , Load , EXTRA ); + _res = _PyAST_Tuple ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13134,7 +13134,7 @@ slice_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Slice ( a , b , c , EXTRA ); + _res = _PyAST_Slice ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13246,7 +13246,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_True , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13279,7 +13279,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_False , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13312,7 +13312,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_None , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13448,7 +13448,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Constant ( Py_Ellipsis , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13559,7 +13559,7 @@ list_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_List ( a , Load , EXTRA ); + _res = _PyAST_List ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13627,7 +13627,7 @@ listcomp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_ListComp ( a , b , EXTRA ); + _res = _PyAST_ListComp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13711,7 +13711,7 @@ tuple_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( a , Load , EXTRA ); + _res = _PyAST_Tuple ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13845,7 +13845,7 @@ genexp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_GeneratorExp ( a , b , EXTRA ); + _res = _PyAST_GeneratorExp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13929,7 +13929,7 @@ set_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Set ( a , EXTRA ); + _res = _PyAST_Set ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13997,7 +13997,7 @@ setcomp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_SetComp ( a , b , EXTRA ); + _res = _PyAST_SetComp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14081,7 +14081,7 @@ dict_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , a ) ) , EXTRA ); + _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14149,7 +14149,7 @@ dictcomp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_DictComp ( a -> key , a -> value , b , EXTRA ); + _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14426,7 +14426,7 @@ for_if_clause_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _Py_comprehension ( a , b , c , 1 , p -> arena ) ); + _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14469,7 +14469,7 @@ for_if_clause_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - _res = _Py_comprehension ( a , b , c , 0 , p -> arena ); + _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14557,7 +14557,7 @@ yield_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_YieldFrom ( a , EXTRA ); + _res = _PyAST_YieldFrom ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14593,7 +14593,7 @@ yield_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Yield ( a , EXTRA ); + _res = _PyAST_Yield ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14759,7 +14759,7 @@ args_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq * , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq * , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA ); + _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq * , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq * , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14909,7 +14909,7 @@ starred_expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Starred ( a , Load , EXTRA ); + _res = _PyAST_Starred ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14974,7 +14974,7 @@ kwarg_or_starred_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _Py_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15082,7 +15082,7 @@ kwarg_or_double_starred_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _Py_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15118,7 +15118,7 @@ kwarg_or_double_starred_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _Py_keyword ( NULL , a , EXTRA ) ) , 1 ); + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15229,7 +15229,7 @@ star_targets_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15415,7 +15415,7 @@ star_target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA ); + _res = _PyAST_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15509,7 +15509,7 @@ target_with_star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15553,7 +15553,7 @@ target_with_star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Store , EXTRA ); + _res = _PyAST_Subscript ( a , b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15696,7 +15696,7 @@ star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( a , Store , EXTRA ); + _res = _PyAST_Tuple ( a , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15735,7 +15735,7 @@ star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_List ( a , Store , EXTRA ); + _res = _PyAST_List ( a , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15894,7 +15894,7 @@ single_subscript_attribute_target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15938,7 +15938,7 @@ single_subscript_attribute_target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Store , EXTRA ); + _res = _PyAST_Subscript ( a , b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16057,7 +16057,7 @@ del_target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Del , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Del , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16101,7 +16101,7 @@ del_target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Del , EXTRA ); + _res = _PyAST_Subscript ( a , b , Del , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16240,7 +16240,7 @@ del_t_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( a , Del , EXTRA ); + _res = _PyAST_Tuple ( a , Del , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16279,7 +16279,7 @@ del_t_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_List ( a , Del , EXTRA ); + _res = _PyAST_List ( a , Del , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16398,7 +16398,7 @@ target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16442,7 +16442,7 @@ target_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Store , EXTRA ); + _res = _PyAST_Subscript ( a , b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16566,7 +16566,7 @@ t_primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Attribute ( a , b -> v . Name . id , Load , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16610,7 +16610,7 @@ t_primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Subscript ( a , b , Load , EXTRA ); + _res = _PyAST_Subscript ( a , b , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16648,7 +16648,7 @@ t_primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); + _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16692,7 +16692,7 @@ t_primary_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); + _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16911,7 +16911,7 @@ t_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_Tuple ( b , Store , EXTRA ); + _res = _PyAST_Tuple ( b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16950,7 +16950,7 @@ t_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _Py_List ( b , Store , EXTRA ); + _res = _PyAST_List ( b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); diff --git a/Parser/pegen.c b/Parser/pegen.c index 1d23b99dd980c..82dcd3bb5a858 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -34,9 +34,9 @@ _PyPegen_add_type_comment_to_arg(Parser *p, arg_ty a, Token *tc) if (tco == NULL) { return NULL; } - return arg(a->arg, a->annotation, tco, - a->lineno, a->col_offset, a->end_lineno, a->end_col_offset, - p->arena); + return _PyAST_arg(a->arg, a->annotation, tco, + a->lineno, a->col_offset, a->end_lineno, a->end_col_offset, + p->arena); } static int @@ -568,7 +568,7 @@ _PyPegen_dummy_name(Parser *p, ...) if (!id) { return NULL; } - cache = Name(id, Load, 1, 0, 1, 0, p->arena); + cache = _PyAST_Name(id, Load, 1, 0, 1, 0, p->arena); return cache; } @@ -919,8 +919,8 @@ _PyPegen_name_token(Parser *p) p->error_indicator = 1; return NULL; } - return Name(id, Load, t->lineno, t->col_offset, t->end_lineno, t->end_col_offset, - p->arena); + return _PyAST_Name(id, Load, t->lineno, t->col_offset, t->end_lineno, + t->end_col_offset, p->arena); } void * @@ -1035,8 +1035,8 @@ _PyPegen_number_token(Parser *p) return NULL; } - return Constant(c, NULL, t->lineno, t->col_offset, t->end_lineno, t->end_col_offset, - p->arena); + return _PyAST_Constant(c, NULL, t->lineno, t->col_offset, t->end_lineno, + t->end_col_offset, p->arena); } static int // bool @@ -1514,7 +1514,7 @@ _PyPegen_join_names_with_dot(Parser *p, expr_ty first_name, expr_ty second_name) return NULL; } - return _Py_Name(uni, Load, EXTRA_EXPR(first_name, second_name)); + return _PyAST_Name(uni, Load, EXTRA_EXPR(first_name, second_name)); } /* Counts the total number of dots in seq's tokens */ @@ -1551,7 +1551,7 @@ _PyPegen_alias_for_star(Parser *p) Py_DECREF(str); return NULL; } - return alias(str, NULL, p->arena); + return _PyAST_alias(str, NULL, p->arena); } /* Creates a new asdl_seq* with the identifiers of all the names in seq */ @@ -1643,13 +1643,13 @@ _set_seq_context(Parser *p, asdl_expr_seq *seq, expr_context_ty ctx) static expr_ty _set_name_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_Name(e->v.Name.id, ctx, EXTRA_EXPR(e, e)); + return _PyAST_Name(e->v.Name.id, ctx, EXTRA_EXPR(e, e)); } static expr_ty _set_tuple_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_Tuple( + return _PyAST_Tuple( _set_seq_context(p, e->v.Tuple.elts, ctx), ctx, EXTRA_EXPR(e, e)); @@ -1658,7 +1658,7 @@ _set_tuple_context(Parser *p, expr_ty e, expr_context_ty ctx) static expr_ty _set_list_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_List( + return _PyAST_List( _set_seq_context(p, e->v.List.elts, ctx), ctx, EXTRA_EXPR(e, e)); @@ -1667,19 +1667,22 @@ _set_list_context(Parser *p, expr_ty e, expr_context_ty ctx) static expr_ty _set_subscript_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_Subscript(e->v.Subscript.value, e->v.Subscript.slice, ctx, EXTRA_EXPR(e, e)); + return _PyAST_Subscript(e->v.Subscript.value, e->v.Subscript.slice, + ctx, EXTRA_EXPR(e, e)); } static expr_ty _set_attribute_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_Attribute(e->v.Attribute.value, e->v.Attribute.attr, ctx, EXTRA_EXPR(e, e)); + return _PyAST_Attribute(e->v.Attribute.value, e->v.Attribute.attr, + ctx, EXTRA_EXPR(e, e)); } static expr_ty _set_starred_context(Parser *p, expr_ty e, expr_context_ty ctx) { - return _Py_Starred(_PyPegen_set_expr_context(p, e->v.Starred.value, ctx), ctx, EXTRA_EXPR(e, e)); + return _PyAST_Starred(_PyPegen_set_expr_context(p, e->v.Starred.value, ctx), + ctx, EXTRA_EXPR(e, e)); } /* Creates an `expr_ty` equivalent to `expr` but with `ctx` as context */ @@ -1987,8 +1990,8 @@ _PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default, kwarg = star_etc->kwarg; } - return _Py_arguments(posonlyargs, posargs, vararg, kwonlyargs, kwdefaults, kwarg, - posdefaults, p->arena); + return _PyAST_arguments(posonlyargs, posargs, vararg, kwonlyargs, + kwdefaults, kwarg, posdefaults, p->arena); } /* Constructs an empty arguments_ty object, that gets used when a function accepts no @@ -2017,8 +2020,8 @@ _PyPegen_empty_arguments(Parser *p) return NULL; } - return _Py_arguments(posonlyargs, posargs, NULL, kwonlyargs, kwdefaults, NULL, posdefaults, - p->arena); + return _PyAST_arguments(posonlyargs, posargs, NULL, kwonlyargs, + kwdefaults, NULL, posdefaults, p->arena); } /* Encapsulates the value of an operator_ty into an AugOperator struct */ @@ -2039,7 +2042,7 @@ _PyPegen_function_def_decorators(Parser *p, asdl_expr_seq *decorators, stmt_ty f { assert(function_def != NULL); if (function_def->kind == AsyncFunctionDef_kind) { - return _Py_AsyncFunctionDef( + return _PyAST_AsyncFunctionDef( function_def->v.FunctionDef.name, function_def->v.FunctionDef.args, function_def->v.FunctionDef.body, decorators, function_def->v.FunctionDef.returns, function_def->v.FunctionDef.type_comment, function_def->lineno, @@ -2047,12 +2050,13 @@ _PyPegen_function_def_decorators(Parser *p, asdl_expr_seq *decorators, stmt_ty f p->arena); } - return _Py_FunctionDef(function_def->v.FunctionDef.name, function_def->v.FunctionDef.args, - function_def->v.FunctionDef.body, decorators, - function_def->v.FunctionDef.returns, - function_def->v.FunctionDef.type_comment, function_def->lineno, - function_def->col_offset, function_def->end_lineno, - function_def->end_col_offset, p->arena); + return _PyAST_FunctionDef( + function_def->v.FunctionDef.name, function_def->v.FunctionDef.args, + function_def->v.FunctionDef.body, decorators, + function_def->v.FunctionDef.returns, + function_def->v.FunctionDef.type_comment, function_def->lineno, + function_def->col_offset, function_def->end_lineno, + function_def->end_col_offset, p->arena); } /* Construct a ClassDef equivalent to class_def, but with decorators */ @@ -2060,10 +2064,11 @@ stmt_ty _PyPegen_class_def_decorators(Parser *p, asdl_expr_seq *decorators, stmt_ty class_def) { assert(class_def != NULL); - return _Py_ClassDef(class_def->v.ClassDef.name, class_def->v.ClassDef.bases, - class_def->v.ClassDef.keywords, class_def->v.ClassDef.body, decorators, - class_def->lineno, class_def->col_offset, class_def->end_lineno, - class_def->end_col_offset, p->arena); + return _PyAST_ClassDef( + class_def->v.ClassDef.name, class_def->v.ClassDef.bases, + class_def->v.ClassDef.keywords, class_def->v.ClassDef.body, decorators, + class_def->lineno, class_def->col_offset, class_def->end_lineno, + class_def->end_col_offset, p->arena); } /* Construct a KeywordOrStarred */ @@ -2214,8 +2219,9 @@ _PyPegen_concatenate_strings(Parser *p, asdl_seq *strings) if (_PyArena_AddPyObject(p->arena, bytes_str) < 0) { goto error; } - return Constant(bytes_str, NULL, first->lineno, first->col_offset, last->end_lineno, - last->end_col_offset, p->arena); + return _PyAST_Constant(bytes_str, NULL, first->lineno, + first->col_offset, last->end_lineno, + last->end_col_offset, p->arena); } return _PyPegen_FstringParser_Finish(p, &state, first, last); @@ -2244,14 +2250,15 @@ _PyPegen_make_module(Parser *p, asdl_stmt_seq *a) { if (tag == NULL) { return NULL; } - type_ignore_ty ti = TypeIgnore(p->type_ignore_comments.items[i].lineno, tag, p->arena); + type_ignore_ty ti = _PyAST_TypeIgnore(p->type_ignore_comments.items[i].lineno, + tag, p->arena); if (ti == NULL) { return NULL; } asdl_seq_SET(type_ignores, i, ti); } } - return Module(a, type_ignores, p->arena); + return _PyAST_Module(a, type_ignores, p->arena); } // Error reporting helpers @@ -2361,7 +2368,7 @@ expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_expr_seq *a, asdl_seq *b, Py_ssize_t total_len = args_len; if (b == NULL) { - return _Py_Call(_PyPegen_dummy_name(p), a, NULL, lineno, col_offset, + return _PyAST_Call(_PyPegen_dummy_name(p), a, NULL, lineno, col_offset, end_lineno, end_col_offset, arena); } @@ -2383,6 +2390,6 @@ expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_expr_seq *a, asdl_seq *b, asdl_seq_SET(args, i, asdl_seq_GET(starreds, i - args_len)); } - return _Py_Call(_PyPegen_dummy_name(p), args, keywords, lineno, - col_offset, end_lineno, end_col_offset, arena); + return _PyAST_Call(_PyPegen_dummy_name(p), args, keywords, lineno, + col_offset, end_lineno, end_col_offset, arena); } diff --git a/Parser/string_parser.c b/Parser/string_parser.c index 6a1a3952e72f7..b919633ded8d9 100644 --- a/Parser/string_parser.c +++ b/Parser/string_parser.c @@ -797,10 +797,11 @@ fstring_find_expr(Parser *p, const char **str, const char *end, int raw, int rec /* And now create the FormattedValue node that represents this entire expression with the conversion and format spec. */ //TODO: Fix this - *expression = FormattedValue(simple_expression, conversion, - format_spec, first_token->lineno, - first_token->col_offset, last_token->end_lineno, - last_token->end_col_offset, p->arena); + *expression = _PyAST_FormattedValue(simple_expression, conversion, + format_spec, first_token->lineno, + first_token->col_offset, + last_token->end_lineno, + last_token->end_col_offset, p->arena); if (!*expression) { goto error; } @@ -1044,8 +1045,9 @@ make_str_node_and_del(Parser *p, PyObject **str, Token* first_token, Token *last return NULL; } - return Constant(s, kind, first_token->lineno, first_token->col_offset, - last_token->end_lineno, last_token->end_col_offset, p->arena); + return _PyAST_Constant(s, kind, first_token->lineno, first_token->col_offset, + last_token->end_lineno, last_token->end_col_offset, + p->arena); } @@ -1204,8 +1206,9 @@ _PyPegen_FstringParser_Finish(Parser *p, FstringParser *state, Token* first_toke goto error; } - return _Py_JoinedStr(seq, first_token->lineno, first_token->col_offset, - last_token->end_lineno, last_token->end_col_offset, p->arena); + return _PyAST_JoinedStr(seq, first_token->lineno, first_token->col_offset, + last_token->end_lineno, last_token->end_col_offset, + p->arena); error: _PyPegen_FstringParser_Dealloc(state); diff --git a/Python/Python-ast.c b/Python/Python-ast.c index e34bd26d74a19..2105729ea3489 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -1776,8 +1776,8 @@ static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* out, PyArena* arena); mod_ty -_Py_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena - *arena) +_PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, + PyArena *arena) { mod_ty p; p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1790,7 +1790,7 @@ _Py_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena } mod_ty -_Py_Interactive(asdl_stmt_seq * body, PyArena *arena) +_PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena) { mod_ty p; p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1802,7 +1802,7 @@ _Py_Interactive(asdl_stmt_seq * body, PyArena *arena) } mod_ty -_Py_Expression(expr_ty body, PyArena *arena) +_PyAST_Expression(expr_ty body, PyArena *arena) { mod_ty p; if (!body) { @@ -1819,7 +1819,7 @@ _Py_Expression(expr_ty body, PyArena *arena) } mod_ty -_Py_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) +_PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) { mod_ty p; if (!returns) { @@ -1837,10 +1837,10 @@ _Py_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) } stmt_ty -_Py_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, - asdl_expr_seq * decorator_list, expr_ty returns, string - type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, + asdl_expr_seq * decorator_list, expr_ty returns, string + type_comment, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { stmt_ty p; if (!name) { @@ -1871,10 +1871,10 @@ _Py_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, } stmt_ty -_Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, - asdl_expr_seq * decorator_list, expr_ty returns, string - type_comment, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * + body, asdl_expr_seq * decorator_list, expr_ty returns, + string type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!name) { @@ -1905,10 +1905,10 @@ _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body, } stmt_ty -_Py_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * - keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list, - int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * + keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; if (!name) { @@ -1933,8 +1933,8 @@ _Py_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * } stmt_ty -_Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1950,8 +1950,8 @@ _Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int } stmt_ty -_Py_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -1967,9 +1967,9 @@ _Py_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, } stmt_ty -_Py_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; if (!value) { @@ -1992,8 +1992,8 @@ _Py_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int } stmt_ty -_Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2026,9 +2026,9 @@ _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int } stmt_ty -_Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, - int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, + int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2057,9 +2057,9 @@ _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, } stmt_ty -_Py_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * - orelse, string type_comment, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * + orelse, string type_comment, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2089,9 +2089,9 @@ _Py_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * } stmt_ty -_Py_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq - * orelse, string type_comment, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, + asdl_stmt_seq * orelse, string type_comment, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!target) { @@ -2121,9 +2121,9 @@ _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq } stmt_ty -_Py_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; if (!test) { @@ -2146,8 +2146,9 @@ _Py_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int } stmt_ty -_Py_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int + lineno, int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { stmt_ty p; if (!test) { @@ -2170,9 +2171,9 @@ _Py_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, } stmt_ty -_Py_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, - int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string + type_comment, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2190,9 +2191,9 @@ _Py_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, } stmt_ty -_Py_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string - type_comment, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string + type_comment, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2210,8 +2211,8 @@ _Py_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string } stmt_ty -_Py_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!subject) { @@ -2233,8 +2234,8 @@ _Py_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int } stmt_ty -_Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2251,9 +2252,9 @@ _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int } stmt_ty -_Py_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq - * orelse, asdl_stmt_seq * finalbody, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, + asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2272,8 +2273,8 @@ _Py_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq } stmt_ty -_Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; if (!test) { @@ -2295,8 +2296,8 @@ _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int } stmt_ty -_Py_Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena) +_PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2312,9 +2313,9 @@ _Py_Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, } stmt_ty -_Py_ImportFrom(identifier module, asdl_alias_seq * names, int level, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2332,8 +2333,8 @@ _Py_ImportFrom(identifier module, asdl_alias_seq * names, int level, int } stmt_ty -_Py_Global(asdl_identifier_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2349,8 +2350,8 @@ _Py_Global(asdl_identifier_seq * names, int lineno, int col_offset, int } stmt_ty -_Py_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2366,8 +2367,8 @@ _Py_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int } stmt_ty -_Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { stmt_ty p; if (!value) { @@ -2388,8 +2389,8 @@ _Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int } stmt_ty -_Py_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2404,8 +2405,8 @@ _Py_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, } stmt_ty -_Py_Break(int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_Break(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2420,8 +2421,8 @@ _Py_Break(int lineno, int col_offset, int end_lineno, int end_col_offset, } stmt_ty -_Py_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { stmt_ty p; p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2436,8 +2437,8 @@ _Py_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, } expr_ty -_Py_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!op) { @@ -2459,8 +2460,8 @@ _Py_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, } expr_ty -_Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!target) { @@ -2487,8 +2488,8 @@ _Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int } expr_ty -_Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!left) { @@ -2521,8 +2522,8 @@ _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int } expr_ty -_Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!op) { @@ -2549,8 +2550,8 @@ _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int } expr_ty -_Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!args) { @@ -2577,8 +2578,8 @@ _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int } expr_ty -_Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!test) { @@ -2611,8 +2612,8 @@ _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int } expr_ty -_Py_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2629,8 +2630,8 @@ _Py_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int } expr_ty -_Py_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2646,8 +2647,9 @@ _Py_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int } expr_ty -_Py_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!elt) { @@ -2669,8 +2671,9 @@ _Py_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int } expr_ty -_Py_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!elt) { @@ -2692,9 +2695,9 @@ _Py_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int } expr_ty -_Py_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, - int lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * + generators, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!key) { @@ -2722,9 +2725,9 @@ _Py_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, } expr_ty -_Py_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!elt) { @@ -2746,8 +2749,8 @@ _Py_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, } expr_ty -_Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2768,8 +2771,8 @@ _Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -_Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2785,8 +2788,8 @@ _Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -_Py_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena) +_PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2807,9 +2810,9 @@ _Py_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int } expr_ty -_Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!left) { @@ -2832,9 +2835,9 @@ _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int } expr_ty -_Py_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int - lineno, int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, + int lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!func) { @@ -2857,9 +2860,9 @@ _Py_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int } expr_ty -_Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2882,8 +2885,8 @@ _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int } expr_ty -_Py_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -2899,8 +2902,8 @@ _Py_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int } expr_ty -_Py_Constant(constant value, string kind, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Constant(constant value, string kind, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -2922,9 +2925,9 @@ _Py_Constant(constant value, string kind, int lineno, int col_offset, int } expr_ty -_Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int + lineno, int col_offset, int end_lineno, int end_col_offset, + PyArena *arena) { expr_ty p; if (!value) { @@ -2957,9 +2960,9 @@ _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, } expr_ty -_Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena) +_PyAST_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena + *arena) { expr_ty p; if (!value) { @@ -2992,8 +2995,8 @@ _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, } expr_ty -_Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!value) { @@ -3020,8 +3023,8 @@ _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int } expr_ty -_Py_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!id) { @@ -3048,8 +3051,8 @@ _Py_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int } expr_ty -_Py_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!ctx) { @@ -3071,8 +3074,8 @@ _Py_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, } expr_ty -_Py_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!ctx) { @@ -3094,8 +3097,8 @@ _Py_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int } expr_ty -_Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3113,8 +3116,8 @@ _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int } expr_ty -_Py_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; if (!pattern) { @@ -3141,8 +3144,8 @@ _Py_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int } expr_ty -_Py_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { expr_ty p; p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3158,8 +3161,8 @@ _Py_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int } comprehension_ty -_Py_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int - is_async, PyArena *arena) +_PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int + is_async, PyArena *arena) { comprehension_ty p; if (!target) { @@ -3183,9 +3186,9 @@ _Py_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int } excepthandler_ty -_Py_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena) +_PyAST_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int + lineno, int col_offset, int end_lineno, int + end_col_offset, PyArena *arena) { excepthandler_ty p; p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3203,9 +3206,10 @@ _Py_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int } arguments_ty -_Py_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg, - asdl_arg_seq * kwonlyargs, asdl_expr_seq * kw_defaults, arg_ty - kwarg, asdl_expr_seq * defaults, PyArena *arena) +_PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty + vararg, asdl_arg_seq * kwonlyargs, asdl_expr_seq * + kw_defaults, arg_ty kwarg, asdl_expr_seq * defaults, PyArena + *arena) { arguments_ty p; p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p)); @@ -3222,8 +3226,8 @@ _Py_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg, } arg_ty -_Py_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena *arena) +_PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, + int col_offset, int end_lineno, int end_col_offset, PyArena *arena) { arg_ty p; if (!arg) { @@ -3245,8 +3249,8 @@ _Py_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, } keyword_ty -_Py_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) +_PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) { keyword_ty p; if (!value) { @@ -3267,7 +3271,7 @@ _Py_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int } alias_ty -_Py_alias(identifier name, identifier asname, PyArena *arena) +_PyAST_alias(identifier name, identifier asname, PyArena *arena) { alias_ty p; if (!name) { @@ -3284,7 +3288,7 @@ _Py_alias(identifier name, identifier asname, PyArena *arena) } withitem_ty -_Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) +_PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) { withitem_ty p; if (!context_expr) { @@ -3301,8 +3305,8 @@ _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) } match_case_ty -_Py_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena - *arena) +_PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena + *arena) { match_case_ty p; if (!pattern) { @@ -3320,7 +3324,7 @@ _Py_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena } type_ignore_ty -_Py_TypeIgnore(int lineno, string tag, PyArena *arena) +_PyAST_TypeIgnore(int lineno, string tag, PyArena *arena) { type_ignore_ty p; if (!tag) { @@ -5037,7 +5041,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) } Py_CLEAR(tmp); } - *out = _Py_Module(body, type_ignores, arena); + *out = _PyAST_Module(body, type_ignores, arena); if (*out == NULL) goto failed; return 0; } @@ -5082,7 +5086,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) } Py_CLEAR(tmp); } - *out = _Py_Interactive(body, arena); + *out = _PyAST_Interactive(body, arena); if (*out == NULL) goto failed; return 0; } @@ -5107,7 +5111,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Expression(body, arena); + *out = _PyAST_Expression(body, arena); if (*out == NULL) goto failed; return 0; } @@ -5166,7 +5170,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_FunctionType(argtypes, returns, arena); + *out = _PyAST_FunctionType(argtypes, returns, arena); if (*out == NULL) goto failed; return 0; } @@ -5377,9 +5381,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_FunctionDef(name, args, body, decorator_list, returns, - type_comment, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_FunctionDef(name, args, body, decorator_list, returns, + type_comment, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5514,9 +5518,10 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_AsyncFunctionDef(name, args, body, decorator_list, returns, - type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list, + returns, type_comment, lineno, + col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -5677,9 +5682,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_ClassDef(name, bases, keywords, body, decorator_list, - lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list, + lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -5704,8 +5709,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Return(value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Return(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5750,8 +5755,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Delete(targets, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Delete(targets, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5824,8 +5829,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Assign(targets, value, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_Assign(targets, value, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5878,8 +5883,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_AugAssign(target, op, value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_AugAssign(target, op, value, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -5946,8 +5951,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_AnnAssign(target, annotation, value, simple, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _PyAST_AnnAssign(target, annotation, value, simple, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6068,8 +6073,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_For(target, iter, body, orelse, type_comment, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _PyAST_For(target, iter, body, orelse, type_comment, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6190,8 +6195,9 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_AsyncFor(target, iter, body, orelse, type_comment, lineno, - col_offset, end_lineno, end_col_offset, arena); + *out = _PyAST_AsyncFor(target, iter, body, orelse, type_comment, + lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -6284,8 +6290,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_While(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_While(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6378,8 +6384,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_If(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_If(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6472,8 +6478,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_With(items, body, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_With(items, body, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6566,8 +6572,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_AsyncWith(items, body, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_AsyncWith(items, body, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6626,8 +6632,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Match(subject, cases, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Match(subject, cases, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6666,8 +6672,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Raise(exc, cause, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Raise(exc, cause, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6814,8 +6820,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Try(body, handlers, orelse, finalbody, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_Try(body, handlers, orelse, finalbody, lineno, + col_offset, end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6854,8 +6860,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Assert(test, msg, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Assert(test, msg, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6900,8 +6906,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Import(names, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Import(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -6974,8 +6980,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_ImportFrom(module, names, level, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_ImportFrom(module, names, level, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7020,8 +7026,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Global(names, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Global(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7066,8 +7072,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Nonlocal(names, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Nonlocal(names, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7092,8 +7098,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Expr(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_Expr(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7104,7 +7110,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = _Py_Pass(lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _PyAST_Pass(lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7115,7 +7122,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = _Py_Break(lineno, col_offset, end_lineno, end_col_offset, arena); + *out = _PyAST_Break(lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7126,8 +7134,8 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* } if (isinstance) { - *out = _Py_Continue(lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_Continue(lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7262,8 +7270,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_BoolOp(op, values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_BoolOp(op, values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7302,8 +7310,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_NamedExpr(target, value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_NamedExpr(target, value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7356,8 +7364,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_BinOp(left, op, right, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_BinOp(left, op, right, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7396,8 +7404,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_UnaryOp(op, operand, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_UnaryOp(op, operand, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7436,8 +7444,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Lambda(args, body, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Lambda(args, body, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7490,8 +7498,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_IfExp(test, body, orelse, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_IfExp(test, body, orelse, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7570,8 +7578,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Dict(keys, values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Dict(keys, values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7616,8 +7624,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Set(elts, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_Set(elts, lineno, col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -7676,8 +7684,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_ListComp(elt, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_ListComp(elt, generators, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7736,8 +7744,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_SetComp(elt, generators, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_SetComp(elt, generators, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7810,8 +7818,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_DictComp(key, value, generators, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_DictComp(key, value, generators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7870,8 +7878,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_GeneratorExp(elt, generators, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_GeneratorExp(elt, generators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7896,8 +7904,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Await(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_Await(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7922,8 +7930,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Yield(value, lineno, col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_Yield(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -7948,8 +7956,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_YieldFrom(value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_YieldFrom(value, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8042,8 +8050,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Compare(left, ops, comparators, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_Compare(left, ops, comparators, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8136,8 +8144,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_Call(func, args, keywords, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Call(func, args, keywords, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8190,9 +8198,9 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_FormattedValue(value, conversion, format_spec, lineno, - col_offset, end_lineno, end_col_offset, - arena); + *out = _PyAST_FormattedValue(value, conversion, format_spec, lineno, + col_offset, end_lineno, end_col_offset, + arena); if (*out == NULL) goto failed; return 0; } @@ -8237,8 +8245,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_JoinedStr(values, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_JoinedStr(values, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8277,8 +8285,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Constant(value, kind, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Constant(value, kind, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8331,8 +8339,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Attribute(value, attr, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Attribute(value, attr, ctx, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8385,8 +8393,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Subscript(value, slice, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Subscript(value, slice, ctx, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8425,8 +8433,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Starred(value, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Starred(value, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8465,8 +8473,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Name(id, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Name(id, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8525,8 +8533,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_List(elts, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_List(elts, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8585,8 +8593,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Tuple(elts, ctx, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Tuple(elts, ctx, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8639,8 +8647,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_Slice(lower, upper, step, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_Slice(lower, upper, step, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8679,8 +8687,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_MatchAs(pattern, name, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -8725,8 +8733,8 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* } Py_CLEAR(tmp); } - *out = _Py_MatchOr(patterns, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno, + end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -9130,7 +9138,7 @@ obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_comprehension(target, iter, ifs, is_async, arena); + *out = _PyAST_comprehension(target, iter, ifs, is_async, arena); return 0; failed: Py_XDECREF(tmp); @@ -9275,8 +9283,8 @@ obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty* } Py_CLEAR(tmp); } - *out = _Py_ExceptHandler(type, name, body, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_ExceptHandler(type, name, body, lineno, col_offset, + end_lineno, end_col_offset, arena); if (*out == NULL) goto failed; return 0; } @@ -9491,8 +9499,8 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out, } Py_CLEAR(tmp); } - *out = _Py_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, - kwarg, defaults, arena); + *out = _PyAST_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, + kwarg, defaults, arena); return 0; failed: Py_XDECREF(tmp); @@ -9602,8 +9610,8 @@ obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena) if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_arg(arg, annotation, type_comment, lineno, col_offset, - end_lineno, end_col_offset, arena); + *out = _PyAST_arg(arg, annotation, type_comment, lineno, col_offset, + end_lineno, end_col_offset, arena); return 0; failed: Py_XDECREF(tmp); @@ -9700,8 +9708,8 @@ obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out, if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_keyword(arg, value, lineno, col_offset, end_lineno, - end_col_offset, arena); + *out = _PyAST_keyword(arg, value, lineno, col_offset, end_lineno, + end_col_offset, arena); return 0; failed: Py_XDECREF(tmp); @@ -9742,7 +9750,7 @@ obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_alias(name, asname, arena); + *out = _PyAST_alias(name, asname, arena); return 0; failed: Py_XDECREF(tmp); @@ -9783,7 +9791,7 @@ obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out, if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_withitem(context_expr, optional_vars, arena); + *out = _PyAST_withitem(context_expr, optional_vars, arena); return 0; failed: Py_XDECREF(tmp); @@ -9858,7 +9866,7 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, } Py_CLEAR(tmp); } - *out = _Py_match_case(pattern, guard, body, arena); + *out = _PyAST_match_case(pattern, guard, body, arena); return 0; failed: Py_XDECREF(tmp); @@ -9913,7 +9921,7 @@ obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _Py_TypeIgnore(lineno, tag, arena); + *out = _PyAST_TypeIgnore(lineno, tag, arena); if (*out == NULL) goto failed; return 0; } diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 46dba7646e0cd..311e0c7a8aa38 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -451,8 +451,9 @@ astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state) return 0; } asdl_seq_SET(values, 0, st->v.Expr.value); - expr_ty expr = _Py_JoinedStr(values, st->lineno, st->col_offset, - st->end_lineno, st->end_col_offset, ctx_); + expr_ty expr = _PyAST_JoinedStr(values, st->lineno, st->col_offset, + st->end_lineno, st->end_col_offset, + ctx_); if (!expr) { return 0; } From webhook-mailer at python.org Wed Apr 7 17:13:03 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 21:13:03 -0000 Subject: [Python-checkins] bpo-42923: Fix _Py_DumpExtensionModules() for NULL sysdict (GH-25262) Message-ID: https://github.com/python/cpython/commit/3d55aa9e7365af76e40680271328deece27a7339 commit: 3d55aa9e7365af76e40680271328deece27a7339 branch: master author: Victor Stinner committer: vstinner date: 2021-04-07T23:12:45+02:00 summary: bpo-42923: Fix _Py_DumpExtensionModules() for NULL sysdict (GH-25262) Fix Py_FatalError() is called before interp->sysdict is set. files: M Python/pylifecycle.c diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 64723ce82d76c..0ad1796e3cbc6 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -2551,12 +2551,14 @@ _Py_DumpExtensionModules(int fd, PyInterpreterState *interp) // memory cannot be allocated on the heap in a signal handler. // Iterate on the dict instead. PyObject *stdlib_module_names = NULL; - pos = 0; - while (PyDict_Next(interp->sysdict, &pos, &key, &value)) { - if (PyUnicode_Check(key) - && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) { - stdlib_module_names = value; - break; + if (interp->sysdict != NULL) { + pos = 0; + while (PyDict_Next(interp->sysdict, &pos, &key, &value)) { + if (PyUnicode_Check(key) + && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) { + stdlib_module_names = value; + break; + } } } // If we failed to get sys.stdlib_module_names or it's not a frozenset, From webhook-mailer at python.org Wed Apr 7 18:12:46 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 22:12:46 -0000 Subject: [Python-checkins] bpo-43770: Sort types in _PyTypes_Init() (GH-25263) Message-ID: https://github.com/python/cpython/commit/a518099078c8ae51860009fb801db897af9eed62 commit: a518099078c8ae51860009fb801db897af9eed62 branch: master author: Victor Stinner committer: vstinner date: 2021-04-08T00:12:38+02:00 summary: bpo-43770: Sort types in _PyTypes_Init() (GH-25263) files: M Objects/object.c diff --git a/Objects/object.c b/Objects/object.c index 0845966c5fe9d..93c6315451d70 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1745,82 +1745,87 @@ _PyTypes_Init(void) return status; } -#define INIT_TYPE(TYPE, NAME) \ +#define INIT_TYPE(TYPE) \ do { \ - if (PyType_Ready(TYPE) < 0) { \ - return _PyStatus_ERR("Can't initialize " NAME " type"); \ + if (PyType_Ready(&(TYPE)) < 0) { \ + return _PyStatus_ERR("Can't initialize " #TYPE " type"); \ } \ } while (0) - INIT_TYPE(&PyBaseObject_Type, "object"); - INIT_TYPE(&PyType_Type, "type"); - INIT_TYPE(&_PyWeakref_RefType, "weakref"); - INIT_TYPE(&_PyWeakref_CallableProxyType, "callable weakref proxy"); - INIT_TYPE(&_PyWeakref_ProxyType, "weakref proxy"); - INIT_TYPE(&PyLong_Type, "int"); - INIT_TYPE(&PyBool_Type, "bool"); - INIT_TYPE(&PyByteArray_Type, "bytearray"); - INIT_TYPE(&PyBytes_Type, "str"); - INIT_TYPE(&PyList_Type, "list"); - INIT_TYPE(&_PyNone_Type, "None"); - INIT_TYPE(&_PyNotImplemented_Type, "NotImplemented"); - INIT_TYPE(&PyTraceBack_Type, "traceback"); - INIT_TYPE(&PySuper_Type, "super"); - INIT_TYPE(&PyRange_Type, "range"); - INIT_TYPE(&PyDict_Type, "dict"); - INIT_TYPE(&PyDictKeys_Type, "dict keys"); - INIT_TYPE(&PyDictValues_Type, "dict values"); - INIT_TYPE(&PyDictItems_Type, "dict items"); - INIT_TYPE(&PyDictRevIterKey_Type, "reversed dict keys"); - INIT_TYPE(&PyDictRevIterValue_Type, "reversed dict values"); - INIT_TYPE(&PyDictRevIterItem_Type, "reversed dict items"); - INIT_TYPE(&PyODict_Type, "OrderedDict"); - INIT_TYPE(&PyODictKeys_Type, "odict_keys"); - INIT_TYPE(&PyODictItems_Type, "odict_items"); - INIT_TYPE(&PyODictValues_Type, "odict_values"); - INIT_TYPE(&PyODictIter_Type, "odict_keyiterator"); - INIT_TYPE(&PySet_Type, "set"); - INIT_TYPE(&PyUnicode_Type, "str"); - INIT_TYPE(&PySlice_Type, "slice"); - INIT_TYPE(&PyStaticMethod_Type, "static method"); - INIT_TYPE(&PyComplex_Type, "complex"); - INIT_TYPE(&PyFloat_Type, "float"); - INIT_TYPE(&PyFrozenSet_Type, "frozenset"); - INIT_TYPE(&PyProperty_Type, "property"); - INIT_TYPE(&_PyManagedBuffer_Type, "managed buffer"); - INIT_TYPE(&PyMemoryView_Type, "memoryview"); - INIT_TYPE(&PyTuple_Type, "tuple"); - INIT_TYPE(&PyEnum_Type, "enumerate"); - INIT_TYPE(&PyReversed_Type, "reversed"); - INIT_TYPE(&PyStdPrinter_Type, "StdPrinter"); - INIT_TYPE(&PyCode_Type, "code"); - INIT_TYPE(&PyFrame_Type, "frame"); - INIT_TYPE(&PyCFunction_Type, "builtin function"); - INIT_TYPE(&PyCMethod_Type, "builtin method"); - INIT_TYPE(&PyMethod_Type, "method"); - INIT_TYPE(&PyFunction_Type, "function"); - INIT_TYPE(&PyDictProxy_Type, "dict proxy"); - INIT_TYPE(&PyGen_Type, "generator"); - INIT_TYPE(&PyGetSetDescr_Type, "get-set descriptor"); - INIT_TYPE(&PyWrapperDescr_Type, "wrapper"); - INIT_TYPE(&_PyMethodWrapper_Type, "method wrapper"); - INIT_TYPE(&PyEllipsis_Type, "ellipsis"); - INIT_TYPE(&PyMemberDescr_Type, "member descriptor"); - INIT_TYPE(&_PyNamespace_Type, "namespace"); - INIT_TYPE(&PyCapsule_Type, "capsule"); - INIT_TYPE(&PyLongRangeIter_Type, "long range iterator"); - INIT_TYPE(&PyCell_Type, "cell"); - INIT_TYPE(&PyInstanceMethod_Type, "instance method"); - INIT_TYPE(&PyClassMethodDescr_Type, "class method descr"); - INIT_TYPE(&PyMethodDescr_Type, "method descr"); - INIT_TYPE(&PyCallIter_Type, "call iter"); - INIT_TYPE(&PySeqIter_Type, "sequence iterator"); - INIT_TYPE(&PyPickleBuffer_Type, "pickle.PickleBuffer"); - INIT_TYPE(&PyCoro_Type, "coroutine"); - INIT_TYPE(&_PyCoroWrapper_Type, "coroutine wrapper"); - INIT_TYPE(&_PyInterpreterID_Type, "interpreter ID"); - return _PyStatus_OK(); + // Base types + INIT_TYPE(PyBaseObject_Type); + INIT_TYPE(PyType_Type); + assert(PyBaseObject_Type.tp_base == NULL); + assert(PyType_Type.tp_base == &PyBaseObject_Type); + + // All other static types + INIT_TYPE(PyBool_Type); + INIT_TYPE(PyByteArray_Type); + INIT_TYPE(PyBytes_Type); + INIT_TYPE(PyCFunction_Type); + INIT_TYPE(PyCMethod_Type); + INIT_TYPE(PyCallIter_Type); + INIT_TYPE(PyCapsule_Type); + INIT_TYPE(PyCell_Type); + INIT_TYPE(PyClassMethodDescr_Type); + INIT_TYPE(PyCode_Type); + INIT_TYPE(PyComplex_Type); + INIT_TYPE(PyCoro_Type); + INIT_TYPE(PyDictItems_Type); + INIT_TYPE(PyDictKeys_Type); + INIT_TYPE(PyDictProxy_Type); + INIT_TYPE(PyDictRevIterItem_Type); + INIT_TYPE(PyDictRevIterKey_Type); + INIT_TYPE(PyDictRevIterValue_Type); + INIT_TYPE(PyDictValues_Type); + INIT_TYPE(PyDict_Type); + INIT_TYPE(PyEllipsis_Type); + INIT_TYPE(PyEnum_Type); + INIT_TYPE(PyFloat_Type); + INIT_TYPE(PyFrame_Type); + INIT_TYPE(PyFrozenSet_Type); + INIT_TYPE(PyFunction_Type); + INIT_TYPE(PyGen_Type); + INIT_TYPE(PyGetSetDescr_Type); + INIT_TYPE(PyInstanceMethod_Type); + INIT_TYPE(PyList_Type); + INIT_TYPE(PyLongRangeIter_Type); + INIT_TYPE(PyLong_Type); + INIT_TYPE(PyMemberDescr_Type); + INIT_TYPE(PyMemoryView_Type); + INIT_TYPE(PyMethodDescr_Type); + INIT_TYPE(PyMethod_Type); + INIT_TYPE(PyODictItems_Type); + INIT_TYPE(PyODictIter_Type); + INIT_TYPE(PyODictKeys_Type); + INIT_TYPE(PyODictValues_Type); + INIT_TYPE(PyODict_Type); + INIT_TYPE(PyPickleBuffer_Type); + INIT_TYPE(PyProperty_Type); + INIT_TYPE(PyRange_Type); + INIT_TYPE(PyReversed_Type); + INIT_TYPE(PySeqIter_Type); + INIT_TYPE(PySet_Type); + INIT_TYPE(PySlice_Type); + INIT_TYPE(PyStaticMethod_Type); + INIT_TYPE(PyStdPrinter_Type); + INIT_TYPE(PySuper_Type); + INIT_TYPE(PyTraceBack_Type); + INIT_TYPE(PyTuple_Type); + INIT_TYPE(PyUnicode_Type); + INIT_TYPE(PyWrapperDescr_Type); + INIT_TYPE(_PyCoroWrapper_Type); + INIT_TYPE(_PyInterpreterID_Type); + INIT_TYPE(_PyManagedBuffer_Type); + INIT_TYPE(_PyMethodWrapper_Type); + INIT_TYPE(_PyNamespace_Type); + INIT_TYPE(_PyNone_Type); + INIT_TYPE(_PyNotImplemented_Type); + INIT_TYPE(_PyWeakref_CallableProxyType); + INIT_TYPE(_PyWeakref_ProxyType); + INIT_TYPE(_PyWeakref_RefType); + return _PyStatus_OK(); #undef INIT_TYPE } From webhook-mailer at python.org Wed Apr 7 18:48:12 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 07 Apr 2021 22:48:12 -0000 Subject: [Python-checkins] bpo-43770: _PyTypes_Init() inits more static types (GH-25265) Message-ID: https://github.com/python/cpython/commit/df5dc1c7a536abc2b497cb9506f8a37949838309 commit: df5dc1c7a536abc2b497cb9506f8a37949838309 branch: master author: Victor Stinner committer: vstinner date: 2021-04-08T00:47:55+02:00 summary: bpo-43770: _PyTypes_Init() inits more static types (GH-25265) files: M Objects/object.c diff --git a/Objects/object.c b/Objects/object.c index 93c6315451d70..ceb0990dbc41a 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -10,6 +10,8 @@ #include "pycore_pylifecycle.h" #include "pycore_pymem.h" // _PyMem_IsPtrFreed() #include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_symtable.h" // PySTEntry_Type +#include "pycore_unionobject.h" // _Py_UnionType #include "frameobject.h" #include "interpreteridobject.h" @@ -1759,8 +1761,11 @@ _PyTypes_Init(void) assert(PyType_Type.tp_base == &PyBaseObject_Type); // All other static types + INIT_TYPE(PyAsyncGen_Type); INIT_TYPE(PyBool_Type); + INIT_TYPE(PyByteArrayIter_Type); INIT_TYPE(PyByteArray_Type); + INIT_TYPE(PyBytesIter_Type); INIT_TYPE(PyBytes_Type); INIT_TYPE(PyCFunction_Type); INIT_TYPE(PyCMethod_Type); @@ -1768,10 +1773,14 @@ _PyTypes_Init(void) INIT_TYPE(PyCapsule_Type); INIT_TYPE(PyCell_Type); INIT_TYPE(PyClassMethodDescr_Type); + INIT_TYPE(PyClassMethod_Type); INIT_TYPE(PyCode_Type); INIT_TYPE(PyComplex_Type); INIT_TYPE(PyCoro_Type); INIT_TYPE(PyDictItems_Type); + INIT_TYPE(PyDictIterItem_Type); + INIT_TYPE(PyDictIterKey_Type); + INIT_TYPE(PyDictIterValue_Type); INIT_TYPE(PyDictKeys_Type); INIT_TYPE(PyDictProxy_Type); INIT_TYPE(PyDictRevIterItem_Type); @@ -1788,6 +1797,8 @@ _PyTypes_Init(void) INIT_TYPE(PyGen_Type); INIT_TYPE(PyGetSetDescr_Type); INIT_TYPE(PyInstanceMethod_Type); + INIT_TYPE(PyListIter_Type); + INIT_TYPE(PyListRevIter_Type); INIT_TYPE(PyList_Type); INIT_TYPE(PyLongRangeIter_Type); INIT_TYPE(PyLong_Type); @@ -1795,6 +1806,8 @@ _PyTypes_Init(void) INIT_TYPE(PyMemoryView_Type); INIT_TYPE(PyMethodDescr_Type); INIT_TYPE(PyMethod_Type); + INIT_TYPE(PyModuleDef_Type); + INIT_TYPE(PyModule_Type); INIT_TYPE(PyODictItems_Type); INIT_TYPE(PyODictIter_Type); INIT_TYPE(PyODictKeys_Type); @@ -1802,18 +1815,27 @@ _PyTypes_Init(void) INIT_TYPE(PyODict_Type); INIT_TYPE(PyPickleBuffer_Type); INIT_TYPE(PyProperty_Type); + INIT_TYPE(PyRangeIter_Type); INIT_TYPE(PyRange_Type); INIT_TYPE(PyReversed_Type); + INIT_TYPE(PySTEntry_Type); INIT_TYPE(PySeqIter_Type); + INIT_TYPE(PySetIter_Type); INIT_TYPE(PySet_Type); INIT_TYPE(PySlice_Type); INIT_TYPE(PyStaticMethod_Type); INIT_TYPE(PyStdPrinter_Type); INIT_TYPE(PySuper_Type); INIT_TYPE(PyTraceBack_Type); + INIT_TYPE(PyTupleIter_Type); INIT_TYPE(PyTuple_Type); + INIT_TYPE(PyUnicodeIter_Type); INIT_TYPE(PyUnicode_Type); INIT_TYPE(PyWrapperDescr_Type); + INIT_TYPE(Py_GenericAliasType); + INIT_TYPE(_PyAsyncGenASend_Type); + INIT_TYPE(_PyAsyncGenAThrow_Type); + INIT_TYPE(_PyAsyncGenWrappedValue_Type); INIT_TYPE(_PyCoroWrapper_Type); INIT_TYPE(_PyInterpreterID_Type); INIT_TYPE(_PyManagedBuffer_Type); @@ -1824,6 +1846,7 @@ _PyTypes_Init(void) INIT_TYPE(_PyWeakref_CallableProxyType); INIT_TYPE(_PyWeakref_ProxyType); INIT_TYPE(_PyWeakref_RefType); + INIT_TYPE(_Py_UnionType); return _PyStatus_OK(); #undef INIT_TYPE From webhook-mailer at python.org Wed Apr 7 18:50:19 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 07 Apr 2021 22:50:19 -0000 Subject: [Python-checkins] bpo-39899: os.path.expanduser(): don't guess other Windows users' home directories if the basename of the current user's home directory doesn't match their username. (GH-18841) Message-ID: https://github.com/python/cpython/commit/3f3d82b84823eb28abeedf317bbe107bbe7f6492 commit: 3f3d82b84823eb28abeedf317bbe107bbe7f6492 branch: master author: Barney Gale committer: zooba date: 2021-04-07T23:50:13+01:00 summary: bpo-39899: os.path.expanduser(): don't guess other Windows users' home directories if the basename of the current user's home directory doesn't match their username. (GH-18841) This makes `ntpath.expanduser()` match `pathlib.Path.expanduser()` in this regard, and is more in line with `posixpath.expanduser()`'s cautious approach. Also remove the near-duplicate implementation of `expanduser()` in pathlib, and by doing so fix a bug where KeyError could be raised when expanding another user's home directory. files: A Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst M Doc/library/os.path.rst M Doc/library/pathlib.rst M Lib/ntpath.py M Lib/pathlib.py M Lib/test/test_ntpath.py M Lib/test/test_pathlib.py diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index 251df4d516eb5..e2f335ee8c309 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -175,8 +175,8 @@ the :mod:`glob` module.) On Windows, :envvar:`USERPROFILE` will be used if set, otherwise a combination of :envvar:`HOMEPATH` and :envvar:`HOMEDRIVE` will be used. An initial - ``~user`` is handled by stripping the last directory component from the created - user path derived above. + ``~user`` is handled by checking that the last directory component of the current + user's home directory matches :envvar:`USERNAME`, and replacing it if so. If the expansion fails or if the path does not begin with a tilde, the path is returned unchanged. diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index e269bf9a7be12..f15fed3f02a04 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -705,7 +705,10 @@ call fails (for example because the path doesn't exist). .. classmethod:: Path.home() Return a new path object representing the user's home directory (as - returned by :func:`os.path.expanduser` with ``~`` construct):: + returned by :func:`os.path.expanduser` with ``~`` construct). If the home + directory can't be resolved, :exc:`RuntimeError` is raised. + + :: >>> Path.home() PosixPath('/home/antoine') @@ -773,7 +776,10 @@ call fails (for example because the path doesn't exist). .. method:: Path.expanduser() Return a new path with expanded ``~`` and ``~user`` constructs, - as returned by :meth:`os.path.expanduser`:: + as returned by :meth:`os.path.expanduser`. If a home directory can't be + resolved, :exc:`RuntimeError` is raised. + + :: >>> p = PosixPath('~/films/Monty Python') >>> p.expanduser() diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 6f771773a7d1b..421db50a3b7f5 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -312,12 +312,24 @@ def expanduser(path): drive = '' userhome = join(drive, os.environ['HOMEPATH']) + if i != 1: #~user + # Try to guess user home directory. By default all users directories + # are located in the same place and are named by corresponding + # usernames. If current user home directory points to nonstandard + # place, this guess is likely wrong, and so we bail out. + current_user = os.environ.get('USERNAME') + if current_user != basename(userhome): + return path + + target_user = path[1:i] + if isinstance(target_user, bytes): + target_user = os.fsdecode(target_user) + if target_user != current_user: + userhome = join(dirname(userhome), target_user) + if isinstance(path, bytes): userhome = os.fsencode(userhome) - if i != 1: #~user - userhome = join(dirname(userhome), path[1:i]) - return userhome + path[i:] diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 9e682dcad9eac..19d45a3d2ba78 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -246,34 +246,6 @@ def make_uri(self, path): # It's a path on a network drive => 'file://host/share/a/b' return 'file:' + urlquote_from_bytes(path.as_posix().encode('utf-8')) - def gethomedir(self, username): - if 'USERPROFILE' in os.environ: - userhome = os.environ['USERPROFILE'] - elif 'HOMEPATH' in os.environ: - try: - drv = os.environ['HOMEDRIVE'] - except KeyError: - drv = '' - userhome = drv + os.environ['HOMEPATH'] - else: - raise RuntimeError("Can't determine home directory") - - if username: - # Try to guess user home directory. By default all users - # directories are located in the same place and are named by - # corresponding usernames. If current user home directory points - # to nonstandard place, this guess is likely wrong. - if os.environ['USERNAME'] != username: - drv, root, parts = self.parse_parts((userhome,)) - if parts[-1] != os.environ['USERNAME']: - raise RuntimeError("Can't determine home directory " - "for %r" % username) - parts[-1] = username - if drv or root: - userhome = drv + root + self.join(parts[1:]) - else: - userhome = self.join(parts) - return userhome class _PosixFlavour(_Flavour): sep = '/' @@ -364,21 +336,6 @@ def make_uri(self, path): bpath = bytes(path) return 'file://' + urlquote_from_bytes(bpath) - def gethomedir(self, username): - if not username: - try: - return os.environ['HOME'] - except KeyError: - import pwd - return pwd.getpwuid(os.getuid()).pw_dir - else: - import pwd - try: - return pwd.getpwnam(username).pw_dir - except KeyError: - raise RuntimeError("Can't determine home directory " - "for %r" % username) - _windows_flavour = _WindowsFlavour() _posix_flavour = _PosixFlavour() @@ -463,6 +420,8 @@ def group(self, path): getcwd = os.getcwd + expanduser = staticmethod(os.path.expanduser) + _normal_accessor = _NormalAccessor() @@ -1105,7 +1064,7 @@ def home(cls): """Return a new path pointing to the user's home directory (as returned by os.path.expanduser('~')). """ - return cls(cls()._flavour.gethomedir(None)) + return cls("~").expanduser() def samefile(self, other_path): """Return whether other_path is the same or not as this file @@ -1517,7 +1476,9 @@ def expanduser(self): """ if (not (self._drv or self._root) and self._parts and self._parts[0][:1] == '~'): - homedir = self._flavour.gethomedir(self._parts[0][1:]) + homedir = self._accessor.expanduser(self._parts[0]) + if homedir[:1] == "~": + raise RuntimeError("Could not determine home directory.") return self._from_parts([homedir] + self._parts[1:]) return self diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py index a8f764f48ca00..f97aca5f94f57 100644 --- a/Lib/test/test_ntpath.py +++ b/Lib/test/test_ntpath.py @@ -503,34 +503,47 @@ def test_expanduser(self): env.clear() tester('ntpath.expanduser("~test")', '~test') - env['HOMEPATH'] = 'eric\\idle' env['HOMEDRIVE'] = 'C:\\' - tester('ntpath.expanduser("~test")', 'C:\\eric\\test') - tester('ntpath.expanduser("~")', 'C:\\eric\\idle') + env['HOMEPATH'] = 'Users\\eric' + env['USERNAME'] = 'eric' + tester('ntpath.expanduser("~test")', 'C:\\Users\\test') + tester('ntpath.expanduser("~")', 'C:\\Users\\eric') del env['HOMEDRIVE'] - tester('ntpath.expanduser("~test")', 'eric\\test') - tester('ntpath.expanduser("~")', 'eric\\idle') + tester('ntpath.expanduser("~test")', 'Users\\test') + tester('ntpath.expanduser("~")', 'Users\\eric') env.clear() - env['USERPROFILE'] = 'C:\\eric\\idle' - tester('ntpath.expanduser("~test")', 'C:\\eric\\test') - tester('ntpath.expanduser("~")', 'C:\\eric\\idle') + env['USERPROFILE'] = 'C:\\Users\\eric' + env['USERNAME'] = 'eric' + tester('ntpath.expanduser("~test")', 'C:\\Users\\test') + tester('ntpath.expanduser("~")', 'C:\\Users\\eric') tester('ntpath.expanduser("~test\\foo\\bar")', - 'C:\\eric\\test\\foo\\bar') + 'C:\\Users\\test\\foo\\bar') tester('ntpath.expanduser("~test/foo/bar")', - 'C:\\eric\\test/foo/bar') + 'C:\\Users\\test/foo/bar') tester('ntpath.expanduser("~\\foo\\bar")', - 'C:\\eric\\idle\\foo\\bar') + 'C:\\Users\\eric\\foo\\bar') tester('ntpath.expanduser("~/foo/bar")', - 'C:\\eric\\idle/foo/bar') + 'C:\\Users\\eric/foo/bar') # bpo-36264: ignore `HOME` when set on windows env.clear() env['HOME'] = 'F:\\' - env['USERPROFILE'] = 'C:\\eric\\idle' - tester('ntpath.expanduser("~test")', 'C:\\eric\\test') - tester('ntpath.expanduser("~")', 'C:\\eric\\idle') + env['USERPROFILE'] = 'C:\\Users\\eric' + env['USERNAME'] = 'eric' + tester('ntpath.expanduser("~test")', 'C:\\Users\\test') + tester('ntpath.expanduser("~")', 'C:\\Users\\eric') + + # bpo-39899: don't guess another user's home directory if + # `%USERNAME% != basename(%USERPROFILE%)` + env.clear() + env['USERPROFILE'] = 'C:\\Users\\eric' + env['USERNAME'] = 'idle' + tester('ntpath.expanduser("~test")', '~test') + tester('ntpath.expanduser("~")', 'C:\\Users\\eric') + + @unittest.skipUnless(nt, "abspath requires 'nt' module") def test_abspath(self): diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 2643119352790..0c89b6ef141d7 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -2609,7 +2609,7 @@ def check(): env.pop('USERNAME', None) self.assertEqual(p1.expanduser(), P('C:/Users/alice/My Documents')) - self.assertRaises(KeyError, p2.expanduser) + self.assertRaises(RuntimeError, p2.expanduser) env['USERNAME'] = 'alice' self.assertEqual(p2.expanduser(), P('C:/Users/alice/My Documents')) diff --git a/Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst b/Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst new file mode 100644 index 0000000000000..5239553d51c67 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst @@ -0,0 +1,3 @@ +:func:`os.path.expanduser()` now refuses to guess Windows home directories if the basename of current user's home directory does not match their username. + +:meth:`pathlib.Path.expanduser()` and :meth:`~pathlib.Path.home()` now consistently raise :exc:`RuntimeError` exception when a home directory cannot be resolved. Previously a :exc:`KeyError` exception could be raised on Windows when the ``"USERNAME"`` environment variable was unset. From webhook-mailer at python.org Wed Apr 7 19:32:03 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 07 Apr 2021 23:32:03 -0000 Subject: [Python-checkins] Fix broken test for MutableSet.pop() (GH-25209) Message-ID: https://github.com/python/cpython/commit/453074c8daf996b1815a0cd2218f0dbf1801056c commit: 453074c8daf996b1815a0cd2218f0dbf1801056c branch: master author: Stepan Sindelar committer: rhettinger date: 2021-04-07T16:31:55-07:00 summary: Fix broken test for MutableSet.pop() (GH-25209) Changes the test to not assert concrete result of pop, but just that it was an item from the set, and that the set shrunk by one. files: M Lib/test/test_collections.py diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 30303f00ba5c1..7b245c08b5ddd 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1512,8 +1512,12 @@ def discard(self,v): return result def __repr__(self): return "MySet(%s)" % repr(list(self)) - s = MySet([5,43,2,1]) - self.assertEqual(s.pop(), 1) + items = [5,43,2,1] + s = MySet(items) + r = s.pop() + self.assertEquals(len(s), len(items) - 1) + self.assertNotIn(r, s) + self.assertIn(r, items) def test_issue8750(self): empty = WithSet() From webhook-mailer at python.org Wed Apr 7 19:56:55 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 07 Apr 2021 23:56:55 -0000 Subject: [Python-checkins] Fix broken test for MutableSet.pop() (GH-25209) (GH-25269) Message-ID: https://github.com/python/cpython/commit/b3e8722853c25fa03ae0e3b74513498ce19ea10c commit: b3e8722853c25fa03ae0e3b74513498ce19ea10c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-07T16:56:48-07:00 summary: Fix broken test for MutableSet.pop() (GH-25209) (GH-25269) files: M Lib/test/test_collections.py diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 3ff660cf7a37b..6a819358fe89f 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1502,8 +1502,12 @@ def discard(self,v): return result def __repr__(self): return "MySet(%s)" % repr(list(self)) - s = MySet([5,43,2,1]) - self.assertEqual(s.pop(), 1) + items = [5,43,2,1] + s = MySet(items) + r = s.pop() + self.assertEquals(len(s), len(items) - 1) + self.assertNotIn(r, s) + self.assertIn(r, items) def test_issue8750(self): empty = WithSet() From webhook-mailer at python.org Wed Apr 7 19:57:43 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 07 Apr 2021 23:57:43 -0000 Subject: [Python-checkins] Fix broken test for MutableSet.pop() (GH-25209) (GH-25270) Message-ID: https://github.com/python/cpython/commit/05d0fcd13ea0defd9cdb5c4982b895bf0094dfd7 commit: 05d0fcd13ea0defd9cdb5c4982b895bf0094dfd7 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-07T16:57:39-07:00 summary: Fix broken test for MutableSet.pop() (GH-25209) (GH-25270) files: M Lib/test/test_collections.py diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 58f65f3e266c6..a961821230c7b 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1423,8 +1423,12 @@ def discard(self,v): return result def __repr__(self): return "MySet(%s)" % repr(list(self)) - s = MySet([5,43,2,1]) - self.assertEqual(s.pop(), 1) + items = [5,43,2,1] + s = MySet(items) + r = s.pop() + self.assertEquals(len(s), len(items) - 1) + self.assertNotIn(r, s) + self.assertIn(r, items) def test_issue8750(self): empty = WithSet() From webhook-mailer at python.org Thu Apr 8 03:58:44 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 08 Apr 2021 07:58:44 -0000 Subject: [Python-checkins] bpo-43770: _PyTypes_Init() inits _PyAnextAwaitable_Type (GH-25266) Message-ID: https://github.com/python/cpython/commit/b98eba5bc2ffbe7a0ed49d540ebc4f756ae61985 commit: b98eba5bc2ffbe7a0ed49d540ebc4f756ae61985 branch: master author: Victor Stinner committer: vstinner date: 2021-04-08T09:58:15+02:00 summary: bpo-43770: _PyTypes_Init() inits _PyAnextAwaitable_Type (GH-25266) * Rename PyAnextAwaitable_Type to _PyAnextAwaitable_Type. * Expose the type in the internal C API. files: M Include/iterobject.h M Objects/iterobject.c M Objects/object.c diff --git a/Include/iterobject.h b/Include/iterobject.h index 51139bf187408..6454611aebef8 100644 --- a/Include/iterobject.h +++ b/Include/iterobject.h @@ -7,6 +7,9 @@ extern "C" { PyAPI_DATA(PyTypeObject) PySeqIter_Type; PyAPI_DATA(PyTypeObject) PyCallIter_Type; +#ifdef Py_BUILD_CORE +extern PyTypeObject _PyAnextAwaitable_Type; +#endif #define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type) diff --git a/Objects/iterobject.c b/Objects/iterobject.c index f0c6b79917680..65af18abf79de 100644 --- a/Objects/iterobject.c +++ b/Objects/iterobject.c @@ -333,7 +333,7 @@ static PyAsyncMethods anextawaitable_as_async = { 0, /* am_send */ }; -PyTypeObject PyAnextAwaitable_Type = { +PyTypeObject _PyAnextAwaitable_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "anext_awaitable", /* tp_name */ sizeof(anextawaitableobject), /* tp_basicsize */ @@ -369,7 +369,7 @@ PyObject * PyAnextAwaitable_New(PyObject *awaitable, PyObject *default_value) { anextawaitableobject *anext = PyObject_GC_New( - anextawaitableobject, &PyAnextAwaitable_Type); + anextawaitableobject, &_PyAnextAwaitable_Type); if (anext == NULL) { return NULL; } diff --git a/Objects/object.c b/Objects/object.c index ceb0990dbc41a..1224160dd50c4 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1833,6 +1833,7 @@ _PyTypes_Init(void) INIT_TYPE(PyUnicode_Type); INIT_TYPE(PyWrapperDescr_Type); INIT_TYPE(Py_GenericAliasType); + INIT_TYPE(_PyAnextAwaitable_Type); INIT_TYPE(_PyAsyncGenASend_Type); INIT_TYPE(_PyAsyncGenAThrow_Type); INIT_TYPE(_PyAsyncGenWrappedValue_Type); From webhook-mailer at python.org Thu Apr 8 04:21:43 2021 From: webhook-mailer at python.org (terryjreedy) Date: Thu, 08 Apr 2021 08:21:43 -0000 Subject: [Python-checkins] [3.9] bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) Message-ID: https://github.com/python/cpython/commit/5490b49fa6646c9f48869955c12cf6af9fc3f2a4 commit: 5490b49fa6646c9f48869955c12cf6af9fc3f2a4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-08T04:21:35-04:00 summary: [3.9] bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) The previous "Fundamental data types" section says a c_char_p must be bytes (or None). (cherry picked from commit 14829b09eb652f457cf837836909169746a810f0) Co-authored-by: Zackery Spytz files: M Doc/library/ctypes.rst diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 7313148721dac..fd6422cc8c06c 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -919,9 +919,9 @@ Let's try it. We create two instances of ``cell``, and let them point to each other, and finally follow the pointer chain a few times:: >>> c1 = cell() - >>> c1.name = "foo" + >>> c1.name = b"foo" >>> c2 = cell() - >>> c2.name = "bar" + >>> c2.name = b"bar" >>> c1.next = pointer(c2) >>> c2.next = pointer(c1) >>> p = c1 From webhook-mailer at python.org Thu Apr 8 04:22:06 2021 From: webhook-mailer at python.org (terryjreedy) Date: Thu, 08 Apr 2021 08:22:06 -0000 Subject: [Python-checkins] [3.8] bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) Message-ID: https://github.com/python/cpython/commit/754dc353565eeb4a43a912417cc5b66959458f1b commit: 754dc353565eeb4a43a912417cc5b66959458f1b branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-08T04:22:00-04:00 summary: [3.8] bpo-43087: Fix error in ctypes "Incomplete Types" doc (GH-24404) The previous "Fundamental data types" section says a c_char_p must be bytes (or None). (cherry picked from commit 14829b09eb652f457cf837836909169746a810f0) Co-authored-by: Zackery Spytz Co-authored-by: Zackery Spytz files: M Doc/library/ctypes.rst diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 7313148721dac..fd6422cc8c06c 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -919,9 +919,9 @@ Let's try it. We create two instances of ``cell``, and let them point to each other, and finally follow the pointer chain a few times:: >>> c1 = cell() - >>> c1.name = "foo" + >>> c1.name = b"foo" >>> c2 = cell() - >>> c2.name = "bar" + >>> c2.name = b"bar" >>> c1.next = pointer(c2) >>> c2.next = pointer(c1) >>> p = c1 From webhook-mailer at python.org Thu Apr 8 06:23:00 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 08 Apr 2021 10:23:00 -0000 Subject: [Python-checkins] bpo-43760: Streamline dispatch sequence for machines without computed gotos. (GH-25244) Message-ID: https://github.com/python/cpython/commit/28d28e053db6b69d91c2dfd579207cd8ccbc39e7 commit: 28d28e053db6b69d91c2dfd579207cd8ccbc39e7 branch: master author: Mark Shannon committer: markshannon date: 2021-04-08T11:22:55+01:00 summary: bpo-43760: Streamline dispatch sequence for machines without computed gotos. (GH-25244) * Do fetch and decode at end of opcode then jump directly to switch. Should allow compilers that don't support computed-gotos, specifically MSVC, to generate better code. files: M Python/ceval.c diff --git a/Python/ceval.c b/Python/ceval.c index eda993927093c..ea31179f8629b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1264,6 +1264,23 @@ eval_frame_handle_pending(PyThreadState *tstate) -fno-crossjumping). */ +/* Use macros rather than inline functions, to make it as clear as possible + * to the C compiler that the tracing check is a simple test then branch. + * We want to be sure that the compiler knows this before it generates + * the CFG. + */ +#ifdef LLTRACE +#define OR_LLTRACE || lltrace +#else +#define OR_LLTRACE +#endif + +#ifdef WITH_DTRACE +#define OR_DTRACE_LINE || PyDTrace_LINE_ENABLED() +#else +#define OR_DTRACE_LINE +#endif + #ifdef DYNAMIC_EXECUTION_PROFILE #undef USE_COMPUTED_GOTOS #define USE_COMPUTED_GOTOS 0 @@ -1282,37 +1299,22 @@ eval_frame_handle_pending(PyThreadState *tstate) #endif #if USE_COMPUTED_GOTOS -#define TARGET(op) \ - op: \ - TARGET_##op - -#ifdef LLTRACE -#define DISPATCH() \ - { \ - if (!lltrace && !_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \ - f->f_lasti = INSTR_OFFSET(); \ - NEXTOPARG(); \ - goto *opcode_targets[opcode]; \ - } \ - goto fast_next_opcode; \ - } +#define TARGET(op) op: TARGET_##op +#define DISPATCH_GOTO() goto *opcode_targets[opcode] #else +#define TARGET(op) op +#define DISPATCH_GOTO() goto dispatch_opcode +#endif + #define DISPATCH() \ { \ - if (!_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \ - f->f_lasti = INSTR_OFFSET(); \ - NEXTOPARG(); \ - goto *opcode_targets[opcode]; \ + if (_Py_TracingPossible(ceval2) OR_DTRACE_LINE OR_LLTRACE) { \ + goto tracing_dispatch; \ } \ - goto fast_next_opcode; \ + f->f_lasti = INSTR_OFFSET(); \ + NEXTOPARG(); \ + DISPATCH_GOTO(); \ } -#endif - -#else -#define TARGET(op) op -#define DISPATCH() goto fast_next_opcode - -#endif #define CHECK_EVAL_BREAKER() \ if (_Py_atomic_load_relaxed(eval_breaker)) { \ @@ -1598,14 +1600,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) _Py_atomic_int * const eval_breaker = &ceval2->eval_breaker; PyCodeObject *co; - /* when tracing we set things up so that - - not (instr_lb <= current_bytecode_offset < instr_ub) - - is true when the line being executed has changed. The - initial values are such as to make this false the first - time it is tested. */ - const _Py_CODEUNIT *first_instr; PyObject *names; PyObject *consts; @@ -1620,7 +1614,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } PyTraceInfo trace_info; - /* Mark trace_info as initialized */ + /* Mark trace_info as uninitialized */ trace_info.code = NULL; /* push frame */ @@ -1754,10 +1748,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) if (_Py_atomic_load_relaxed(eval_breaker)) { opcode = _Py_OPCODE(*next_instr); - if (opcode == SETUP_FINALLY || - opcode == SETUP_WITH || - opcode == BEFORE_ASYNC_WITH || - opcode == YIELD_FROM) { + if (opcode != SETUP_FINALLY && + opcode != SETUP_WITH && + opcode != BEFORE_ASYNC_WITH && + opcode != YIELD_FROM) { /* Few cases where we skip running signal handlers and other pending calls: - If we're about to enter the 'with:'. It will prevent @@ -1774,16 +1768,15 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) running the signal handler and raising KeyboardInterrupt (see bpo-30039). */ - goto fast_next_opcode; - } - - if (eval_frame_handle_pending(tstate) != 0) { - goto error; - } + if (eval_frame_handle_pending(tstate) != 0) { + goto error; + } + } } - fast_next_opcode: + tracing_dispatch: f->f_lasti = INSTR_OFFSET(); + NEXTOPARG(); if (PyDTrace_LINE_ENABLED()) maybe_dtrace_line(f, &trace_info); @@ -1805,23 +1798,13 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) JUMPTO(f->f_lasti); stack_pointer = f->f_valuestack+f->f_stackdepth; f->f_stackdepth = -1; - if (err) + if (err) { /* trace function raised an exception */ goto error; + } + NEXTOPARG(); } - /* Extract opcode and argument */ - - NEXTOPARG(); - dispatch_opcode: -#ifdef DYNAMIC_EXECUTION_PROFILE -#ifdef DXPAIRS - dxpairs[lastopcode][opcode]++; - lastopcode = opcode; -#endif - dxp[opcode]++; -#endif - #ifdef LLTRACE /* Instruction tracing */ @@ -1837,11 +1820,20 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } #endif + dispatch_opcode: +#ifdef DYNAMIC_EXECUTION_PROFILE +#ifdef DXPAIRS + dxpairs[lastopcode][opcode]++; + lastopcode = opcode; +#endif + dxp[opcode]++; +#endif + switch (opcode) { /* BEWARE! It is essential that any operation that fails must goto error - and that all operation that succeed call [FAST_]DISPATCH() ! */ + and that all operation that succeed call DISPATCH() ! */ case TARGET(NOP): { DISPATCH(); @@ -5427,7 +5419,6 @@ unpack_iterable(PyThreadState *tstate, PyObject *v, return 0; } - #ifdef LLTRACE static int prtrace(PyThreadState *tstate, PyObject *v, const char *str) From webhook-mailer at python.org Thu Apr 8 15:54:46 2021 From: webhook-mailer at python.org (brandtbucher) Date: Thu, 08 Apr 2021 19:54:46 -0000 Subject: [Python-checkins] bpo-43764: Fix `__match_args__` generation logic for dataclasses (GH-25284) Message-ID: https://github.com/python/cpython/commit/d92c59f48680122ce0e4d1ccf69d92b983e8db01 commit: d92c59f48680122ce0e4d1ccf69d92b983e8db01 branch: master author: Brandt Bucher committer: brandtbucher date: 2021-04-08T12:54:34-07:00 summary: bpo-43764: Fix `__match_args__` generation logic for dataclasses (GH-25284) files: A Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index afc4b8282abe3..ceda8220f1f6c 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1017,7 +1017,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): str(inspect.signature(cls)).replace(' -> NoneType', '')) if '__match_args__' not in cls.__dict__: - cls.__match_args__ = tuple(f.name for f in flds if f.init) + cls.__match_args__ = tuple(f.name for f in field_list if f.init) abc.update_abstractmethods(cls) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 12c1918602d6a..29f29e1e6895e 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3432,6 +3432,14 @@ class C: __match_args__ = ma self.assertIs(C(42).__match_args__, ma) + def test_bpo_43764(self): + @dataclass(repr=False, eq=False, init=False) + class X: + a: int + b: int + c: int + self.assertEqual(X.__match_args__, ("a", "b", "c")) + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst b/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst new file mode 100644 index 0000000000000..838dd0200f1d6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst @@ -0,0 +1,2 @@ +Fix an issue where :data:`~object.__match_args__` generation could fail for +some :mod:`dataclasses`. From webhook-mailer at python.org Thu Apr 8 16:32:39 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 08 Apr 2021 20:32:39 -0000 Subject: [Python-checkins] bpo-43774: Document configure options (GH-25283) Message-ID: https://github.com/python/cpython/commit/a41782cc84bcd813209a03e6e11c60e77dbc7718 commit: a41782cc84bcd813209a03e6e11c60e77dbc7718 branch: master author: Victor Stinner committer: vstinner date: 2021-04-08T22:32:21+02:00 summary: bpo-43774: Document configure options (GH-25283) Add Doc/using/configure.rst documentation to document configure, preprocessor, compiler and linker options. Add a new section about the "Python debug build". files: A Doc/using/configure.rst M Doc/c-api/init_config.rst M Doc/c-api/intro.rst M Doc/c-api/memory.rst M Doc/extending/newtypes.rst M Doc/extending/newtypes_tutorial.rst M Doc/howto/instrumentation.rst M Doc/library/decimal.rst M Doc/library/devmode.rst M Doc/library/stdtypes.rst M Doc/library/sys.rst M Doc/library/warnings.rst M Doc/using/cmdline.rst M Doc/using/index.rst M Doc/using/unix.rst M Doc/whatsnew/3.10.rst M Doc/whatsnew/3.6.rst M Doc/whatsnew/3.7.rst M Doc/whatsnew/3.8.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index 29fbb68195b34..7ececeb6c6269 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -241,8 +241,9 @@ PyPreConfig * ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` (``6``): :ref:`Python pymalloc memory allocator ` with debug hooks - ``PYMEM_ALLOCATOR_PYMALLOC`` and ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` - are not supported if Python is configured using ``--without-pymalloc`` + ``PYMEM_ALLOCATOR_PYMALLOC`` and ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` are + not supported if Python is :option:`configured using --without-pymalloc + <--without-pymalloc>`. See :ref:`Memory Management `. @@ -636,7 +637,8 @@ PyConfig Set to ``1`` by the :envvar:`PYTHONDUMPREFS` environment variable. - Need a special build of Python with the ``Py_TRACE_REFS`` macro defined. + Need a special build of Python with the ``Py_TRACE_REFS`` macro defined: + see :option:`configure --with-trace-refs <--with-trace-refs>`. Default: ``0``. @@ -817,7 +819,8 @@ PyConfig Set to ``1`` by the :envvar:`PYTHONMALLOCSTATS` environment variable. - The option is ignored if Python is built using ``--without-pymalloc``. + The option is ignored if Python is :option:`configured using + --without-pymalloc <--without-pymalloc>`. Default: ``0``. @@ -827,8 +830,9 @@ PyConfig Set by the :envvar:`PYTHONPLATLIBDIR` environment variable. - Default: value of the ``PLATLIBDIR`` macro which is set at configure time - by ``--with-platlibdir`` (default: ``"lib"``). + Default: value of the ``PLATLIBDIR`` macro which is set by the + :option`configure --with-platlibdir option <--with-platlibdir>` (default: + ``"lib"``). Part of the :ref:`Python Path Configuration ` input. @@ -1016,7 +1020,8 @@ PyConfig Set to 1 by :option:`-X showrefcount <-X>` command line option. - Need a debug build of Python (``Py_REF_DEBUG`` macro must be defined). + Need a :ref:`debug build of Python ` (the ``Py_REF_DEBUG`` + macro must be defined). Default: ``0``. diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst index bae5ce11b73c4..1223059ce9aca 100644 --- a/Doc/c-api/intro.rst +++ b/Doc/c-api/intro.rst @@ -742,9 +742,10 @@ allocator, or low-level profiling of the main interpreter loop. Only the most frequently-used builds will be described in the remainder of this section. Compiling the interpreter with the :c:macro:`Py_DEBUG` macro defined produces -what is generally meant by "a debug build" of Python. :c:macro:`Py_DEBUG` is -enabled in the Unix build by adding ``--with-pydebug`` to the -:file:`./configure` command. It is also implied by the presence of the +what is generally meant by :ref:`a debug build of Python `. +:c:macro:`Py_DEBUG` is enabled in the Unix build by adding +:option:`--with-pydebug` to the :file:`./configure` command. +It is also implied by the presence of the not-Python-specific :c:macro:`_DEBUG` macro. When :c:macro:`Py_DEBUG` is enabled in the Unix build, compiler optimization is disabled. @@ -778,7 +779,7 @@ Defining :c:macro:`Py_TRACE_REFS` enables reference tracing. When defined, a circular doubly linked list of active objects is maintained by adding two extra fields to every :c:type:`PyObject`. Total allocations are tracked as well. Upon exit, all existing references are printed. (In interactive mode this happens -after every statement run by the interpreter.) Implied by :c:macro:`Py_DEBUG`. +after every statement run by the interpreter.) Please refer to :file:`Misc/SpecialBuilds.txt` in the Python source distribution for more detailed information. diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst index d2d212b25d7ec..b945429d87da8 100644 --- a/Doc/c-api/memory.rst +++ b/Doc/c-api/memory.rst @@ -385,11 +385,12 @@ Debug build, without pymalloc ``"malloc_debug"`` ``malloc`` + debug ``mal Legend: -* Name: value for :envvar:`PYTHONMALLOC` environment variable +* Name: value for :envvar:`PYTHONMALLOC` environment variable. * ``malloc``: system allocators from the standard C library, C functions: - :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free` -* ``pymalloc``: :ref:`pymalloc memory allocator ` -* "+ debug": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks` + :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. +* ``pymalloc``: :ref:`pymalloc memory allocator `. +* "+ debug": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks`. +* "Debug build": :ref:`Python build in debug mode `. .. _customize-memory-allocators: @@ -500,8 +501,8 @@ Customize Memory Allocators memory block was traced. These hooks are :ref:`installed by default ` if - Python is compiled in debug - mode. The :envvar:`PYTHONMALLOC` environment variable can be used to install + :ref:`Python is built in debug mode `. + The :envvar:`PYTHONMALLOC` environment variable can be used to install debug hooks on a Python compiled in release mode. .. versionchanged:: 3.6 diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst index d9023709fddc8..c078476aae80a 100644 --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -12,7 +12,7 @@ This section aims to give a quick fly-by on the various type methods you can implement and what they do. Here is the definition of :c:type:`PyTypeObject`, with some fields only used in -debug builds omitted: +:ref:`debug builds ` omitted: .. literalinclude:: ../includes/typestruct.h diff --git a/Doc/extending/newtypes_tutorial.rst b/Doc/extending/newtypes_tutorial.rst index 4da77e797d222..530e2c4d35f84 100644 --- a/Doc/extending/newtypes_tutorial.rst +++ b/Doc/extending/newtypes_tutorial.rst @@ -69,7 +69,8 @@ at the start of each object struct and defines a field called ``ob_base`` of type :c:type:`PyObject`, containing a pointer to a type object and a reference count (these can be accessed using the macros :c:macro:`Py_REFCNT` and :c:macro:`Py_TYPE` respectively). The reason for the macro is to -abstract away the layout and to enable additional fields in debug builds. +abstract away the layout and to enable additional fields in :ref:`debug builds +`. .. note:: There is no semicolon above after the :c:macro:`PyObject_HEAD` macro. diff --git a/Doc/howto/instrumentation.rst b/Doc/howto/instrumentation.rst index f0081e4ec2890..ab6240d1c02e7 100644 --- a/Doc/howto/instrumentation.rst +++ b/Doc/howto/instrumentation.rst @@ -266,7 +266,7 @@ should instead read: probe process("python").library("libpython3.6dm.so.1.0").mark("function__entry") { -(assuming a debug build of CPython 3.6) +(assuming a :ref:`debug build ` of CPython 3.6) Available static markers diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index e194649e30d85..35a263a659eaf 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -1484,7 +1484,8 @@ are also included in the pure Python version for compatibility. .. data:: HAVE_CONTEXTVAR - The default value is ``True``. If Python is compiled ``--without-decimal-contextvar``, + The default value is ``True``. If Python is :option:`configured with + --without-decimal-contextvar <--without-decimal-contextvar>`, the C version uses a thread-local rather than a coroutine-local context and the value is ``False``. This is slightly faster in some nested context scenarios. diff --git a/Doc/library/devmode.rst b/Doc/library/devmode.rst index e6ed59496c242..44e7d4f541d81 100644 --- a/Doc/library/devmode.rst +++ b/Doc/library/devmode.rst @@ -13,6 +13,8 @@ detected. It can be enabled using the :option:`-X dev <-X>` command line option or by setting the :envvar:`PYTHONDEVMODE` environment variable to ``1``. +See also :ref:`Python debug build `. + Effects of the Python Development Mode ====================================== diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index 0929f3271e051..68b60508b73d2 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -1581,13 +1581,15 @@ expression support in the :mod:`re` module). By default, the *errors* argument is not checked for best performances, but only used at the first encoding error. Enable the :ref:`Python Development - Mode `, or use a debug build to check *errors*. + Mode `, or use a :ref:`debug build ` to check + *errors*. .. versionchanged:: 3.1 Support for keyword arguments added. .. versionchanged:: 3.9 - The *errors* is now checked in development mode and in debug mode. + The *errors* is now checked in development mode and + in :ref:`debug mode `. .. method:: str.endswith(suffix[, start[, end]]) @@ -2710,7 +2712,7 @@ arbitrary binary data. By default, the *errors* argument is not checked for best performances, but only used at the first decoding error. Enable the :ref:`Python Development - Mode `, or use a debug build to check *errors*. + Mode `, or use a :ref:`debug build ` to check *errors*. .. note:: @@ -2722,7 +2724,8 @@ arbitrary binary data. Added support for keyword arguments. .. versionchanged:: 3.9 - The *errors* is now checked in development mode and in debug mode. + The *errors* is now checked in development mode and + in :ref:`debug mode `. .. method:: bytes.endswith(suffix[, start[, end]]) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 80b30d01f91aa..d85eadbf5a8fa 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -250,8 +250,8 @@ always available. Print low-level information to stderr about the state of CPython's memory allocator. - If Python is configured --with-pydebug, it also performs some expensive - internal consistency checks. + If Python is :option:`configured --with-pydebug <--with-pydebug>`, it also + performs some expensive internal consistency checks. .. versionadded:: 3.3 diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst index 9c1743cad23cb..fe11aabbcbdd6 100644 --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -229,7 +229,7 @@ In regular release builds, the default warning filter has the following entries ignore::ImportWarning ignore::ResourceWarning -In debug builds, the list of default warning filters is empty. +In a :ref:`debug build `, the list of default warning filters is empty. .. versionchanged:: 3.2 :exc:`DeprecationWarning` is now ignored by default in addition to diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index 1493c7c901754..a39cfd68828bf 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -433,7 +433,8 @@ Miscellaneous options * ``-X faulthandler`` to enable :mod:`faulthandler`; * ``-X showrefcount`` to output the total reference count and number of used memory blocks when the program finishes or after each statement in the - interactive interpreter. This only works on debug builds. + interactive interpreter. This only works on :ref:`debug builds + `. * ``-X tracemalloc`` to start tracing Python memory allocations using the :mod:`tracemalloc` module. By default, only the most recent frame is stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start @@ -926,13 +927,11 @@ conflict. Debug-mode variables ~~~~~~~~~~~~~~~~~~~~ -Setting these variables only has an effect in a debug build of Python. - .. envvar:: PYTHONTHREADDEBUG If set, Python will print threading debug info. - Need Python configured with the ``--with-pydebug`` build option. + Need a :ref:`debug build of Python `. .. envvar:: PYTHONDUMPREFS @@ -940,4 +939,4 @@ Setting these variables only has an effect in a debug build of Python. If set, Python will dump objects and reference counts still alive after shutting down the interpreter. - Need Python configured with the ``--with-trace-refs`` build option. + Need Python configured with the :option:`--with-trace-refs` build option. diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst new file mode 100644 index 0000000000000..f855c633cfd5b --- /dev/null +++ b/Doc/using/configure.rst @@ -0,0 +1,616 @@ +**************** +Configure Python +**************** + +.. _configure-options: + +Configure Options +================= + +List all ``./configure`` script options using:: + + ./configure --help + +See also the :file:`Misc/SpecialBuilds.txt` in the Python source distribution. + +General Options +--------------- + +.. cmdoption:: --enable-loadable-sqlite-extensions + + Support loadable extensions in the :mod:`_sqlite` extension module (default + is no), see the :mod:`sqlite3` module. + + .. versionadded:: 3.6 + +.. cmdoption:: --disable-ipv6 + + Disable IPv6 support (enabled by default if supported), see the + :mod:`socket` module. + +.. cmdoption:: --enable-big-digits[=15|30] + + Use big digits (15 or 30 bits) for Python :class:`int` numbers (default is + system-dependent). + + See :data:`sys.int_info.bits_per_digit `. + +.. cmdoption:: --with-cxx-main[=COMPILER] + + Compile the Python ``main()`` function and link Python executable with C++ + compiler specified in *COMPILER* (default is ``$CXX``). + +.. cmdoption:: --with-suffix=SUFFIX + + Set executable suffix to *SUFFIX* (default is ``.exe``). + +.. cmdoption:: --with-tzpath= + + Select the default time zone search path for :data:`zoneinfo.TZPATH`, + see the :mod:`zoneinfo` module. + + .. versionadded:: 3.9 + +.. cmdoption:: --without-decimal-contextvar + + Build the ``_decimal`` extension module using a thread-local context rather + than a coroutine-local context (default), see the :mod:`decimal` module. + + See :data:`decimal.HAVE_CONTEXTVAR`. + + .. versionadded:: 3.9 + +.. cmdoption:: --with-dbmliborder=db1:db2:... + + Override order to check db backends for the :mod:`dbm` module + + A valid value is a colon separated string with the backend names: + + * ``ndbm``; + * ``gdbm``; + * ``bdb``. + +.. cmdoption:: --with-c-locale-coercion + + Enable C locale coercion to a UTF-8 based locale (default is yes). + + See :envvar:`PYTHONCOERCECLOCALE` and the :pep:`538`. + +.. cmdoption:: --with-platlibdir=DIRNAME + + Python library directory name (default is ``lib``). + + Fedora and SuSE use ``lib64`` on 64-bit platforms. + + See :data:`sys.platlibdir`. + + .. versionadded:: 3.9 + +.. cmdoption:: --with-wheel-pkg-dir=PATH + + Directory of wheel packages used by the :mod:`ensurepip` module + (none by default). + + Some Linux distribution packaging policies recommend against bundling + dependencies. For example, Fedora installs wheel packages in the + ``/usr/share/python-wheels/`` directory and don't install the + :mod:`ensurepip._bundled` package. + + .. versionadded:: 3.10 + + +Install Options +--------------- + +.. cmdoption:: --disable-test-modules + + Don't build nor install test modules, like the :mod:`test` package or the + :mod:`_testcapi` extension module (built and installed by default). + + .. versionadded:: 3.10 + +.. cmdoption:: --with-ensurepip[=install|upgrade|no] + + ``install`` or ``upgrade`` using bundled pip of the :mod:`ensurepip` module, + when installing Python (default is ``upgrade``). + + .. versionadded:: 3.6 + + +Performance options +------------------- + +Configuring Python using ``--enable-optimizations --with-lto`` (PGO + LTO) is +recommended for best performance. + +.. cmdoption:: --enable-optimizations + + Enable Profile Guided Optimization (PGO) using :envvar:`PROFILE_TASK` + (disabled by default). + + Disable also semantic interposition in libpython if ``--enable-shared`` and + GCC is used: add ``-fno-semantic-interposition`` to the compiler and linker + flags. + + .. versionadded:: 3.6 + + .. versionchanged:: 3.10 + Use ``-fno-semantic-interposition`` on GCC. + +.. envvar:: PROFILE_TASK + + Environment variable used in the Makefile: Python command line arguments for + the PGO generation task. + + Default: ``-m test --pgo --timeout=$(TESTTIMEOUT)``. + + .. versionadded:: 3.8 + +.. cmdoption:: --with-lto + + Enable Link Time Optimization (LTO) in any build (disabled by default). + + .. versionadded:: 3.6 + +.. cmdoption:: --with-computed-gotos + + Enable computed gotos in evaluation loop (enabled by default on supported + compilers). + +.. cmdoption:: --without-pymalloc + + Disable the specialized Python memory allocator :ref:`pymalloc ` + (enabled by default). + + See also :envvar:`PYTHONMALLOC` environment variable. + +.. cmdoption:: --without-doc-strings + + Disable static documentation strings to reduce the memory footprint (enabled + by default). Documentation strings defined in Python are not affected. + + If used, the ``WITH_DOC_STRINGS`` macro is not defined. See the + ``PyDoc_STRVAR()`` macro. + +.. cmdoption:: --enable-profiling + + Enable C-level code profiling with ``gprof`` (disabled by default). + + +.. _debug-build: + +Debug build +----------- + +A debug build is Python built with the :option:`--with-pydebug` configure +option. + +Effects of a debug build: + +* Define ``Py_DEBUG`` and ``Py_REF_DEBUG`` macros. +* Add ``d`` to :data:`sys.abiflags`. +* Add :func:`sys.gettotalrefcount` function. +* Add :option:`-X showrefcount <-X>` command line option. +* Add :envvar:`PYTHONTHREADDEBUG` environment variable. +* The list of default warning filters is empty in the :mod:`warnings` module. +* Install debug hooks on memory allocators to detect buffer overflow and other + memory errors: see :c:func:`PyMem_SetupDebugHooks`. +* Build Python with assertions (don't set ``NDEBUG`` macro): + ``assert(...);`` and ``_PyObject_ASSERT(...);`` are removed. + See also the :option:`--with-assertions` configure option. +* Add runtime checks, code surroundeded by ``#ifdef Py_DEBUG`` and ``#endif``. +* Unicode and int objects are created with their memory filled with a pattern + to help detecting uninitialized bytes. +* Many functions ensure that are not called with an exception raised, since + they can clear or replace the current exception. +* The garbage collector (:func:`gc.collect` function) runs some quick checks on + consistency. +* Add support for the ``__ltrace__`` variable: enable low-level tracing in the + bytecode evaluation loop if the variable is defined. + +See also the :ref:`Python Development Mode ` and the +:option:`--with-trace-refs` configure option. + +.. versionchanged:: 3.8 + Release builds and debug builds are now ABI compatible: defining the + ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which + introduces the only ABI incompatibility. + + +Debug options +------------- + +.. cmdoption:: --with-pydebug + + :ref:`Build Python in debug mode ` (disabled by default). + +.. cmdoption:: --with-trace-refs + + Enable tracing references for debugging purpose (disabled by default). + + Effects: + + * Define the ``Py_TRACE_REFS`` macro. + * Add :func:`sys.getobjects` function. + * Add :envvar:`PYTHONDUMPREFS` environment variable. + + This build is not ABI compatible with release build (default build) or debug + build (``Py_DEBUG`` macro). + + .. versionadded:: 3.8 + +.. cmdoption:: --with-assertions + + Build with C assertions enabled (default is no). + + If set, the ``NDEBUG`` macro is not defined in the :envvar:`OPT` compiler + variable. + + See also the :option:`--with-pydebug` option (:ref:`debug build + `) which also enables assertions. + + .. versionadded:: 3.6 + +.. cmdoption:: --with-valgrind + + Enable Valgrind support (default is no). + +.. cmdoption:: --with-dtrace + + Enable DTrace support (default is no). + + .. versionadded:: 3.6 + +.. cmdoption:: --with-address-sanitizer + + Enable AddressSanitizer memory error detector, 'asan' (default is no). + + .. versionadded:: 3.6 + +.. cmdoption:: --with-memory-sanitizer + + Enable MemorySanitizer allocation error detector, 'msan' (default is no). + + .. versionadded:: 3.6 + +.. cmdoption:: --with-undefined-behavior-sanitizer + + Enable UndefinedBehaviorSanitizer undefined behaviour detector, 'ubsan' + (default is no). + + .. versionadded:: 3.6 + + +Linker options +-------------- + +.. cmdoption:: --enable-shared + + Enable building a shared Python library: "libpython" (default is no). + +.. cmdoption:: --without-static-libpython + + Do not build ``libpythonMAJOR.MINOR.a`` and do not install ``python.o`` + (built and enabled by default). + + .. versionadded:: 3.10 + + +Libraries options +----------------- + +.. cmdoption:: --with-libs='lib1 ...' + + Link against additional libraries (default is no). + +.. cmdoption:: --with-system-expat + + Build the :mod:`pyexpat` module using an installed ``expat`` library + (default is no). + +.. cmdoption:: --with-system-ffi + + Build the :mod:`_ctypes` extension module using an installed ``ffi`` + library, see the :mod:`ctypes` module (default is system-dependent). + +.. cmdoption:: --with-system-libmpdec + + Build the ``_decimal`` extension module using an installed ``libmpdec`` + library, see the :mod:`decimal` module (default is no). + + .. versionadded:: 3.3 + +.. cmdoption:: --with(out)-readline[=editline] + + Use ``editline`` for backend or disable the :mod:`readline` module. + + .. versionadded:: 3.10 + +.. cmdoption:: --with-tcltk-includes='-I...' + + Override search for Tcl and Tk include files. + +.. cmdoption:: --with-tcltk-libs='-L...' + + Override search for Tcl and Tk libraries. + +.. cmdoption:: --with-libm=STRING + + Override ``libm`` math library to *STRING* (default is system-dependent). + +.. cmdoption:: --with-libc=STRING + + Override ``libc`` C library to *STRING* (default is system-dependent). + +.. cmdoption:: --with-openssl=DIR + + Root of the OpenSSL directory. + +.. cmdoption:: --with-openssl-rpath=[DIR|auto|no] + + Set runtime library directory (rpath) for OpenSSL libraries: + + * ``no`` (default): don't set rpath; + * ``auto``: auto-detect rpath from :option:`--with-openssl` and + ``pkg-config``; + * *DIR*: set an explicit rpath. + + .. versionadded:: 3.10 + + +Security Options +---------------- + +.. cmdoption:: --with-hash-algorithm=[fnv|siphash24] + + Select hash algorithm for use in ``Python/pyhash.c``: + + * ``fnv``; + * ``siphash24`` (default). + + .. versionadded:: 3.4 + +.. cmdoption:: --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2 + + Built-in hash modules: + + * ``md5``; + * ``sha1``; + * ``sha256``; + * ``sha512``; + * ``sha3`` (with shake); + * ``blake2``. + + .. versionadded:: 3.9 + +.. cmdoption:: --with-ssl-default-suites=[python|openssl|STRING] + + Override the OpenSSL default cipher suites string: + + * ``python``: use Python's preferred selection (default); + * ``openssl``: leave OpenSSL's defaults untouched; + * *STRING*: use a custom string, PROTOCOL_SSLv2 ignores the setting. + + See the :mod:`ssl` module. + + .. versionadded:: 3.7 + + +macOS Options +------------- + +See ``Mac/README.rst``. + +.. cmdoption:: --enable-universalsdk[=SDKDIR] + + Create a universal binary build. *SDKDIR* specifies which macOS SDK should + be used to perform the build (default is no). + +.. cmdoption:: --enable-framework[=INSTALLDIR] + + Create a Python.framework rather than a traditional Unix install. Optional + *INSTALLDIR* specifies the installation path (default is no). + +.. cmdoption:: --with-universal-archs=ARCH + + Specify the kind of universal binary that should be created. this option is + only valid when :option:`--enable-universalsdk` is set. + + Options are: + + * ``universal2``; + * ``32-bit``; + * ``64-bit``; + * ``3-way``; + * ``intel``; + * ``intel-32``; + * ``intel-64``; + * ``all``. + +.. cmdoption:: --with-framework-name=FRAMEWORK + + Specify the name for the python framework on macOS only valid when + :option:`--enable-framework` is set (default: ``Python``). + + +Compiler and linker flags +========================= + +Options set by the ``./configure`` script, ``Makefile`` and by environment +variables. + +Preprocessor flags +------------------ + +.. envvar:: CPP + + C preprocessor. + +.. envvar:: CONFIGURE_CPPFLAGS + + .. versionadded:: 3.6 + +.. envvar:: CPPFLAGS + + (Objective) C/C++ preprocessor flags, e.g. ``-I`` if you have + headers in a nonstandard directory ````. + + Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's + value for setup.py to be able to build extension modules using the + directories specified in the environment variables. + +.. envvar:: BASECPPFLAGS + + .. versionadded:: 3.4 + +.. envvar:: MULTIARCH_CPPFLAGS + + .. versionadded:: 3.6 + +.. envvar:: PY_CPPFLAGS + + Extra preprocessor flags added for building the interpreter object files. + + Default: ``$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)``. + + .. versionadded:: 3.2 + +Compiler flags +-------------- + +.. envvar:: CC + + C compiler command. + +.. envvar:: CFLAGS + + C compiler flags. + +.. envvar:: CFLAGS_NODIST + + :envvar:`CFLAGS_NODIST` is used for building the interpreter and stdlib C + extensions. Use it when a compiler flag should *not* be part of the + distutils :envvar:`CFLAGS` once Python is installed (:issue:`21121`). + + .. versionadded:: 3.5 + +.. envvar:: EXTRA_CFLAGS + + Extra C compiler flags. + +.. envvar:: CONFIGURE_CFLAGS + + .. versionadded:: 3.2 + +.. envvar:: CONFIGURE_CFLAGS_NODIST + + .. versionadded:: 3.5 + +.. envvar:: BASECFLAGS + +.. envvar:: OPT + + Optimization flags. + +.. envvar:: CFLAGS_ALIASING + + Strict or non-strict aliasing flags used to compile ``Python/dtoa.c``. + + .. versionadded:: 3.7 + +.. envvar:: CFLAGSFORSHARED + + Extra C flags added for building the interpreter object files. + +.. envvar:: PY_CFLAGS + + Default: ``$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)``. + +.. envvar:: PY_CFLAGS_NODIST + + Default: ``$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal``. + + .. versionadded:: 3.5 + +.. envvar:: PY_STDMODULE_CFLAGS + + C flags used for building the interpreter object files. + + Default: ``$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)``. + + .. versionadded:: 3.7 + +.. envvar:: PY_CORE_CFLAGS + + Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE``. + + .. versionadded:: 3.2 + +.. envvar:: PY_BUILTIN_MODULE_CFLAGS + + Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN``. + + .. versionadded:: 3.8 + + +Linker flags +------------ + +.. envvar:: CONFIGURE_LDFLAGS + + Avoid assigning :envvar:`CFLAGS`, :envvar:`LDFLAGS`, etc. so users can use + them on the command line to append to these values without stomping the + pre-set values. + + .. versionadded:: 3.2 + +.. envvar:: LDFLAGS_NODIST + + :envvar:`LDFLAGS_NODIST` is used in the same manner as + :envvar:`CFLAGS_NODIST`. Use it when a linker flag should *not* be part of + the distutils :envvar:`LDFLAGS` once Python is installed (:issue:`35257`). + +.. envvar:: CONFIGURE_LDFLAGS_NODIST + + .. versionadded:: 3.8 + +.. envvar:: LDFLAGS + + Linker flags, e.g. ``-L`` if you have libraries in a nonstandard + directory ````. + + Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's + value for setup.py to be able to build extension modules using the + directories specified in the environment variables. + +.. envvar:: LIBS + + Libraries to pass to the linker, e.g. ``-l``. + +.. envvar:: LDSHARED + + Command to build a shared library. + + Default: ``@LDSHARED@ $(PY_LDFLAGS)``. + +.. envvar:: BLDSHARED + + Command to build libpython shared library. + + Default: ``@BLDSHARED@ $(PY_CORE_LDFLAGS)``. + +.. envvar:: PY_LDFLAGS + + Default: ``$(CONFIGURE_LDFLAGS) $(LDFLAGS)``. + +.. envvar:: PY_LDFLAGS_NODIST + + Default: ``$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)``. + + .. versionadded:: 3.8 + +.. envvar:: PY_CORE_LDFLAGS + + Linker flags used for building the interpreter object files. + + .. versionadded:: 3.8 diff --git a/Doc/using/index.rst b/Doc/using/index.rst index 4a45121ac2eeb..e1a3111f36a44 100644 --- a/Doc/using/index.rst +++ b/Doc/using/index.rst @@ -15,6 +15,7 @@ interpreter and things that make working with Python easier. cmdline.rst unix.rst + configure.rst windows.rst mac.rst editors.rst diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst index d5f073cd9f3b4..b5b26ecef20fb 100644 --- a/Doc/using/unix.rst +++ b/Doc/using/unix.rst @@ -78,9 +78,9 @@ The build process consists of the usual commands:: make make install -Configuration options and caveats for specific Unix platforms are extensively -documented in the :source:`README.rst` file in the root of the Python source -tree. +:ref:`Configuration options ` and caveats for specific Unix +platforms are extensively documented in the :source:`README.rst` file in the +root of the Python source tree. .. warning:: diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 453a1b42adfa9..d690463fe2440 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1365,9 +1365,10 @@ New Features to simulate. (Contributed by Antoine Pitrou in :issue:`43356`.) -* The limited C API is now supported if Python is built in debug mode (if the - ``Py_DEBUG`` macro is defined). In the limited C API, the :c:func:`Py_INCREF` - and :c:func:`Py_DECREF` functions are now implemented as opaque function +* The limited C API is now supported if :ref:`Python is built in debug mode + ` (if the ``Py_DEBUG`` macro is defined). In the limited C API, + the :c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented + as opaque function calls, rather than accessing directly the :c:member:`PyObject.ob_refcnt` member, if Python is built in debug mode and the ``Py_LIMITED_API`` macro targets Python 3.10 or newer. It became possible to support the limited C API diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 03a877a3d9178..d7884ea30d7d2 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -722,8 +722,8 @@ for the following events in the interpreter: * line of code executed. This can be used to instrument running interpreters in production, -without the need to recompile specific debug builds or providing -application-specific profiling/debugging code. +without the need to recompile specific :ref:`debug builds ` or +providing application-specific profiling/debugging code. More details in :ref:`instrumentation`. diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst index 75e1973b3e1b7..1199535c84dca 100644 --- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -1588,8 +1588,8 @@ The initialization of the default warnings filters has changed as follows: for the new ``-X dev`` mode) * any implicit filters defined directly by the warnings machinery -* in CPython debug builds, all warnings are now displayed by default (the - implicit filter list is empty) +* in :ref:`CPython debug builds `, all warnings are now displayed + by default (the implicit filter list is empty) (Contributed by Nick Coghlan and Victor Stinner in :issue:`20361`, :issue:`32043`, and :issue:`32230`.) diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index 91afffb58a7e6..b1ecaae6c29ad 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -211,7 +211,7 @@ Python now uses the same ABI whether it's built in release or debug mode. On Unix, when Python is built in debug mode, it is now possible to load C extensions built in release mode and C extensions built using the stable ABI. -Release builds and debug builds are now ABI compatible: defining the +Release builds and :ref:`debug builds ` are now ABI compatible: defining the ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` macro, which adds the :func:`sys.getobjects` function and the :envvar:`PYTHONDUMPREFS` @@ -904,7 +904,7 @@ for :func:`property`, :func:`classmethod`, and :func:`staticmethod`:: io -- -In development mode (:option:`-X` ``env``) and in debug build, the +In development mode (:option:`-X` ``env``) and in :ref:`debug build `, the :class:`io.IOBase` finalizer now logs the exception if the ``close()`` method fails. The exception is ignored silently by default in release build. (Contributed by Victor Stinner in :issue:`18748`.) @@ -2246,4 +2246,4 @@ separator key, with ``&`` as the default. This change also affects :func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected functions internally. For more details, please see their respective documentation. -(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) \ No newline at end of file +(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 24c72ee0ea8a7..c16b9a70fbdd1 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -231,7 +231,7 @@ Other Language Changes absolute path for :mod:`__main__` module frames in this case. (Contributed by Victor Stinner in :issue:`20443`.) -* In the :ref:`Python Development Mode ` and in debug build, the +* In the :ref:`Python Development Mode ` and in :ref:`debug build `, the *encoding* and *errors* arguments are now checked for string encoding and decoding operations. Examples: :func:`open`, :meth:`str.encode` and :meth:`bytes.decode`. From webhook-mailer at python.org Thu Apr 8 18:07:22 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 08 Apr 2021 22:07:22 -0000 Subject: [Python-checkins] bpo-43778: Fix Sphinx glossary_search extension (GH-25286) Message-ID: https://github.com/python/cpython/commit/f32d0221477f18993666bb66cc79c61c4e145d42 commit: f32d0221477f18993666bb66cc79c61c4e145d42 branch: master author: Victor Stinner committer: vstinner date: 2021-04-09T00:07:01+02:00 summary: bpo-43778: Fix Sphinx glossary_search extension (GH-25286) Create the _static/ directory if it doesn't exist. Add also constants for the static directory and the JSON filename. files: A Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst M Doc/tools/extensions/glossary_search.py diff --git a/Doc/tools/extensions/glossary_search.py b/Doc/tools/extensions/glossary_search.py index 34d227d670243..59a6862ea3d3f 100644 --- a/Doc/tools/extensions/glossary_search.py +++ b/Doc/tools/extensions/glossary_search.py @@ -7,14 +7,16 @@ :license: Python license. """ -from os import path +import json +import os.path +from docutils.nodes import definition_list_item from sphinx.addnodes import glossary from sphinx.util import logging -from docutils.nodes import definition_list_item -import json logger = logging.getLogger(__name__) +STATIC_DIR = '_static' +JSON = 'glossary.json' def process_glossary_nodes(app, doctree, fromdocname): @@ -45,8 +47,12 @@ def on_build_finish(app, exc): if not app.env.glossary_terms: return - logger.info('Writing glossary.json', color='green') - with open(path.join(app.outdir, '_static', 'glossary.json'), 'w') as f: + logger.info(f'Writing {JSON}', color='green') + + dest_dir = os.path.join(app.outdir, STATIC_DIR) + os.makedirs(dest_dir, exist_ok=True) + + with open(os.path.join(dest_dir, JSON), 'w') as f: json.dump(app.env.glossary_terms, f) diff --git a/Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst b/Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst new file mode 100644 index 0000000000000..86dc286f83ce9 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst @@ -0,0 +1,2 @@ +Fix the Sphinx glossary_search extension: create the _static/ sub-directory +if it doesn't exist. From webhook-mailer at python.org Thu Apr 8 18:34:30 2021 From: webhook-mailer at python.org (brandtbucher) Date: Thu, 08 Apr 2021 22:34:30 -0000 Subject: [Python-checkins] bpo-39702: Remove dotted_name from decorator documentation (GH-25234) Message-ID: https://github.com/python/cpython/commit/1e051a21b7106a93c30b74aad7e1f40d6c0c477b commit: 1e051a21b7106a93c30b74aad7e1f40d6c0c477b branch: master author: Saiyang Gou committer: brandtbucher date: 2021-04-08T15:34:09-07:00 summary: bpo-39702: Remove dotted_name from decorator documentation (GH-25234) files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index c36b50e757127..2da90682a1f9b 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -1138,7 +1138,6 @@ A function definition defines a user-defined function object (see section : ["->" `expression`] ":" `suite` decorators: `decorator`+ decorator: "@" `assignment_expression` NEWLINE - dotted_name: `identifier` ("." `identifier`)* parameter_list: `defparameter` ("," `defparameter`)* "," "/" ["," [`parameter_list_no_posonly`]] : | `parameter_list_no_posonly` parameter_list_no_posonly: `defparameter` ("," `defparameter`)* ["," [`parameter_list_starargs`]] From webhook-mailer at python.org Thu Apr 8 19:04:04 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 08 Apr 2021 23:04:04 -0000 Subject: [Python-checkins] [3.9] bpo-39702: Remove dotted_name from decorator documentation (GH-25234) (GH-25290) Message-ID: https://github.com/python/cpython/commit/a9228d02d16fe90f2f13e7e9ec478f7b4f8607a2 commit: a9228d02d16fe90f2f13e7e9ec478f7b4f8607a2 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-08T16:03:53-07:00 summary: [3.9] bpo-39702: Remove dotted_name from decorator documentation (GH-25234) (GH-25290) (cherry picked from commit 1e051a21b7106a93c30b74aad7e1f40d6c0c477b) Co-authored-by: Saiyang Gou Automerge-Triggered-By: GH:brandtbucher files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index f7eca2aa8472b..75424162a48b0 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -510,7 +510,6 @@ A function definition defines a user-defined function object (see section : ["->" `expression`] ":" `suite` decorators: `decorator`+ decorator: "@" `assignment_expression` NEWLINE - dotted_name: `identifier` ("." `identifier`)* parameter_list: `defparameter` ("," `defparameter`)* "," "/" ["," [`parameter_list_no_posonly`]] : | `parameter_list_no_posonly` parameter_list_no_posonly: `defparameter` ("," `defparameter`)* ["," [`parameter_list_starargs`]] From webhook-mailer at python.org Thu Apr 8 19:05:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Thu, 08 Apr 2021 23:05:52 -0000 Subject: [Python-checkins] Fix possible refleak involving _PyArena_AddPyObject (GH-25289) Message-ID: https://github.com/python/cpython/commit/c0e11a3ceb9427e09db4224f394c7789bf6deec5 commit: c0e11a3ceb9427e09db4224f394c7789bf6deec5 branch: master author: Erlend Egeberg Aasland committer: pablogsal date: 2021-04-09T00:05:44+01:00 summary: Fix possible refleak involving _PyArena_AddPyObject (GH-25289) files: M Parser/pegen.c diff --git a/Parser/pegen.c b/Parser/pegen.c index 82dcd3bb5a858..7b5a5e9146857 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -690,7 +690,10 @@ _PyPegen_fill_token(Parser *p) if (t->bytes == NULL) { return -1; } - _PyArena_AddPyObject(p->arena, t->bytes); + if (_PyArena_AddPyObject(p->arena, t->bytes) < 0) { + Py_DECREF(t->bytes); + return -1; + } int lineno = type == STRING ? p->tok->first_lineno : p->tok->lineno; const char *line_start = type == STRING ? p->tok->multi_line_start : p->tok->line_start; From webhook-mailer at python.org Thu Apr 8 19:29:28 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 08 Apr 2021 23:29:28 -0000 Subject: [Python-checkins] bpo-39674: Fix collections ABC deprecation notice (GH-25281) Message-ID: https://github.com/python/cpython/commit/20d56bd41b56023ce9fa3739c0c9aa8be8d48bfa commit: 20d56bd41b56023ce9fa3739c0c9aa8be8d48bfa branch: 3.8 author: Markus Gerstel <2102431+Anthchirp at users.noreply.github.com> committer: vstinner date: 2021-04-09T01:29:19+02:00 summary: bpo-39674: Fix collections ABC deprecation notice (GH-25281) The deprecation originally slated for 3.9 was deferred to 3.10 (bpo-39674, GH-18545) and the documentation on the 3.8 release was updated accordingly (GH-18748). However the deprecation notice in the code was left as is, and still indicates deprecation with 3.9. files: M Lib/collections/__init__.py diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index a78a47c55a8fc..064e3622863f3 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -48,7 +48,7 @@ def __getattr__(name): import warnings warnings.warn("Using or importing the ABCs from 'collections' instead " "of from 'collections.abc' is deprecated since Python 3.3, " - "and in 3.9 it will stop working", + "and in 3.10 it will stop working", DeprecationWarning, stacklevel=2) globals()[name] = obj return obj From webhook-mailer at python.org Thu Apr 8 19:49:01 2021 From: webhook-mailer at python.org (pablogsal) Date: Thu, 08 Apr 2021 23:49:01 -0000 Subject: [Python-checkins] Break down some complex functions in pegen.c for readability (GH-25292) Message-ID: https://github.com/python/cpython/commit/4f642dae4ef9cb88673971bb5c9eff97d5675a0e commit: 4f642dae4ef9cb88673971bb5c9eff97d5675a0e branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-09T00:48:53+01:00 summary: Break down some complex functions in pegen.c for readability (GH-25292) files: M Parser/pegen.c diff --git a/Parser/pegen.c b/Parser/pegen.c index 7b5a5e9146857..729b74762a6d2 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1856,136 +1856,147 @@ _get_defaults(Parser *p, asdl_seq *names_with_defaults) return seq; } -/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */ -arguments_ty -_PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default, - SlashWithDefault *slash_with_default, asdl_arg_seq *plain_names, - asdl_seq *names_with_default, StarEtc *star_etc) -{ - asdl_arg_seq *posonlyargs; +static int +_make_posonlyargs(Parser *p, + asdl_arg_seq *slash_without_default, + SlashWithDefault *slash_with_default, + asdl_arg_seq **posonlyargs) { if (slash_without_default != NULL) { - posonlyargs = slash_without_default; + *posonlyargs = slash_without_default; } else if (slash_with_default != NULL) { asdl_arg_seq *slash_with_default_names = - _get_names(p, slash_with_default->names_with_defaults); + _get_names(p, slash_with_default->names_with_defaults); if (!slash_with_default_names) { - return NULL; + return -1; } - posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences( + *posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences( p, (asdl_seq*)slash_with_default->plain_names, (asdl_seq*)slash_with_default_names); - if (!posonlyargs) { - return NULL; - } } else { - posonlyargs = _Py_asdl_arg_seq_new(0, p->arena); - if (!posonlyargs) { - return NULL; - } + *posonlyargs = _Py_asdl_arg_seq_new(0, p->arena); } + return *posonlyargs == NULL ? -1 : 0; +} - asdl_arg_seq *posargs; +static int +_make_posargs(Parser *p, + asdl_arg_seq *plain_names, + asdl_seq *names_with_default, + asdl_arg_seq **posargs) { if (plain_names != NULL && names_with_default != NULL) { asdl_arg_seq *names_with_default_names = _get_names(p, names_with_default); if (!names_with_default_names) { - return NULL; - } - posargs = (asdl_arg_seq*)_PyPegen_join_sequences( - p, - (asdl_seq*)plain_names, - (asdl_seq*)names_with_default_names); - if (!posargs) { - return NULL; + return -1; } + *posargs = (asdl_arg_seq*)_PyPegen_join_sequences( + p,(asdl_seq*)plain_names, (asdl_seq*)names_with_default_names); } else if (plain_names == NULL && names_with_default != NULL) { - posargs = _get_names(p, names_with_default); - if (!posargs) { - return NULL; - } + *posargs = _get_names(p, names_with_default); } else if (plain_names != NULL && names_with_default == NULL) { - posargs = plain_names; + *posargs = plain_names; } else { - posargs = _Py_asdl_arg_seq_new(0, p->arena); - if (!posargs) { - return NULL; - } + *posargs = _Py_asdl_arg_seq_new(0, p->arena); } + return *posargs == NULL ? -1 : 0; +} - asdl_expr_seq *posdefaults; +static int +_make_posdefaults(Parser *p, + SlashWithDefault *slash_with_default, + asdl_seq *names_with_default, + asdl_expr_seq **posdefaults) { if (slash_with_default != NULL && names_with_default != NULL) { asdl_expr_seq *slash_with_default_values = - _get_defaults(p, slash_with_default->names_with_defaults); + _get_defaults(p, slash_with_default->names_with_defaults); if (!slash_with_default_values) { - return NULL; + return -1; } asdl_expr_seq *names_with_default_values = _get_defaults(p, names_with_default); if (!names_with_default_values) { - return NULL; + return -1; } - posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences( + *posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences( p, (asdl_seq*)slash_with_default_values, (asdl_seq*)names_with_default_values); - if (!posdefaults) { - return NULL; - } } else if (slash_with_default == NULL && names_with_default != NULL) { - posdefaults = _get_defaults(p, names_with_default); - if (!posdefaults) { - return NULL; - } + *posdefaults = _get_defaults(p, names_with_default); } else if (slash_with_default != NULL && names_with_default == NULL) { - posdefaults = _get_defaults(p, slash_with_default->names_with_defaults); - if (!posdefaults) { - return NULL; - } + *posdefaults = _get_defaults(p, slash_with_default->names_with_defaults); } else { - posdefaults = _Py_asdl_expr_seq_new(0, p->arena); - if (!posdefaults) { - return NULL; - } - } - - arg_ty vararg = NULL; - if (star_etc != NULL && star_etc->vararg != NULL) { - vararg = star_etc->vararg; + *posdefaults = _Py_asdl_expr_seq_new(0, p->arena); } + return *posdefaults == NULL ? -1 : 0; +} - asdl_arg_seq *kwonlyargs; +static int +_make_kwargs(Parser *p, StarEtc *star_etc, + asdl_arg_seq **kwonlyargs, + asdl_expr_seq **kwdefaults) { if (star_etc != NULL && star_etc->kwonlyargs != NULL) { - kwonlyargs = _get_names(p, star_etc->kwonlyargs); - if (!kwonlyargs) { - return NULL; - } + *kwonlyargs = _get_names(p, star_etc->kwonlyargs); } else { - kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena); - if (!kwonlyargs) { - return NULL; - } + *kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena); + } + + if (*kwonlyargs == NULL) { + return -1; } - asdl_expr_seq *kwdefaults; if (star_etc != NULL && star_etc->kwonlyargs != NULL) { - kwdefaults = _get_defaults(p, star_etc->kwonlyargs); - if (!kwdefaults) { - return NULL; - } + *kwdefaults = _get_defaults(p, star_etc->kwonlyargs); } else { - kwdefaults = _Py_asdl_expr_seq_new(0, p->arena); - if (!kwdefaults) { - return NULL; - } + *kwdefaults = _Py_asdl_expr_seq_new(0, p->arena); + } + + if (*kwdefaults == NULL) { + return -1; + } + + return 0; +} + +/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */ +arguments_ty +_PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default, + SlashWithDefault *slash_with_default, asdl_arg_seq *plain_names, + asdl_seq *names_with_default, StarEtc *star_etc) +{ + asdl_arg_seq *posonlyargs; + if (_make_posonlyargs(p, slash_without_default, slash_with_default, &posonlyargs) == -1) { + return NULL; + } + + asdl_arg_seq *posargs; + if (_make_posargs(p, plain_names, names_with_default, &posargs) == -1) { + return NULL; + } + + asdl_expr_seq *posdefaults; + if (_make_posdefaults(p,slash_with_default, names_with_default, &posdefaults) == -1) { + return NULL; + } + + arg_ty vararg = NULL; + if (star_etc != NULL && star_etc->vararg != NULL) { + vararg = star_etc->vararg; + } + + asdl_arg_seq *kwonlyargs; + asdl_expr_seq *kwdefaults; + if (_make_kwargs(p, star_etc, &kwonlyargs, &kwdefaults) == -1) { + return NULL; } arg_ty kwarg = NULL; @@ -1997,6 +2008,7 @@ _PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default, kwdefaults, kwarg, posdefaults, p->arena); } + /* Constructs an empty arguments_ty object, that gets used when a function accepts no * arguments. */ arguments_ty From webhook-mailer at python.org Thu Apr 8 19:58:28 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 08 Apr 2021 23:58:28 -0000 Subject: [Python-checkins] bpo-43774: Enhance configure documentation (GH-25293) Message-ID: https://github.com/python/cpython/commit/54366953633dbe5d9585dbae0c633d4e92df2d04 commit: 54366953633dbe5d9585dbae0c633d4e92df2d04 branch: master author: Victor Stinner committer: vstinner date: 2021-04-09T01:58:20+02:00 summary: bpo-43774: Enhance configure documentation (GH-25293) files: M Doc/using/configure.rst diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index f855c633cfd5b..940bc19923aa9 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -28,27 +28,39 @@ General Options Disable IPv6 support (enabled by default if supported), see the :mod:`socket` module. -.. cmdoption:: --enable-big-digits[=15|30] +.. cmdoption:: --enable-big-digits=[15|30] - Use big digits (15 or 30 bits) for Python :class:`int` numbers (default is - system-dependent). + Define the size in bits of Python :class:`int` digits: 15 or 30 bits. + + By default, the number of bits is selected depending on ``sizeof(void*)``: + 30 bits if ``void*`` size is 64-bit or larger, 15 bits otherwise. + + Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``. See :data:`sys.int_info.bits_per_digit `. -.. cmdoption:: --with-cxx-main[=COMPILER] +.. cmdoption:: --with-cxx-main +.. cmdoption:: --with-cxx-main=COMPILER Compile the Python ``main()`` function and link Python executable with C++ - compiler specified in *COMPILER* (default is ``$CXX``). + compiler: ``$CXX``, or *COMPILER* if specified. .. cmdoption:: --with-suffix=SUFFIX - Set executable suffix to *SUFFIX* (default is ``.exe``). + Set the Python executable suffix to *SUFFIX*. + + The default suffix is ``.exe`` on Windows and macOS (``python.exe`` + executable), and an empty string on other platforms (``python`` executable). .. cmdoption:: --with-tzpath= Select the default time zone search path for :data:`zoneinfo.TZPATH`, see the :mod:`zoneinfo` module. + Default: ``/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo``. + + See :data:`os.pathsep` path separator. + .. versionadded:: 3.9 .. cmdoption:: --without-decimal-contextvar @@ -56,7 +68,7 @@ General Options Build the ``_decimal`` extension module using a thread-local context rather than a coroutine-local context (default), see the :mod:`decimal` module. - See :data:`decimal.HAVE_CONTEXTVAR`. + See :data:`decimal.HAVE_CONTEXTVAR` and the :mod:`contextvars` module. .. versionadded:: 3.9 @@ -64,15 +76,17 @@ General Options Override order to check db backends for the :mod:`dbm` module - A valid value is a colon separated string with the backend names: + A valid value is a colon (``:``) separated string with the backend names: * ``ndbm``; * ``gdbm``; * ``bdb``. -.. cmdoption:: --with-c-locale-coercion +.. cmdoption:: --without-c-locale-coercion + + Disable C locale coercion to a UTF-8 based locale (enabled by default). - Enable C locale coercion to a UTF-8 based locale (default is yes). + Don't define the ``PY_COERCE_C_LOCALE`` macro. See :envvar:`PYTHONCOERCECLOCALE` and the :pep:`538`. @@ -109,10 +123,14 @@ Install Options .. versionadded:: 3.10 -.. cmdoption:: --with-ensurepip[=install|upgrade|no] +.. cmdoption:: --with-ensurepip=[upgrade|install|no] - ``install`` or ``upgrade`` using bundled pip of the :mod:`ensurepip` module, - when installing Python (default is ``upgrade``). + Select the :mod:`ensurepip` command run on Python installation: + + * ``upgrade`` (default): run ``python -m ensurepip --altinstall --upgrade`` + command. + * ``install``: run ``python -m ensurepip --altinstall`` command; + * ``no``: don't run ensurepip; .. versionadded:: 3.6 @@ -169,8 +187,9 @@ recommended for best performance. Disable static documentation strings to reduce the memory footprint (enabled by default). Documentation strings defined in Python are not affected. - If used, the ``WITH_DOC_STRINGS`` macro is not defined. See the - ``PyDoc_STRVAR()`` macro. + Don't define the ``WITH_DOC_STRINGS`` macro. + + See the ``PyDoc_STRVAR()`` macro. .. cmdoption:: --enable-profiling @@ -192,21 +211,22 @@ Effects of a debug build: * Add :func:`sys.gettotalrefcount` function. * Add :option:`-X showrefcount <-X>` command line option. * Add :envvar:`PYTHONTHREADDEBUG` environment variable. +* Add support for the ``__ltrace__`` variable: enable low-level tracing in the + bytecode evaluation loop if the variable is defined. * The list of default warning filters is empty in the :mod:`warnings` module. * Install debug hooks on memory allocators to detect buffer overflow and other memory errors: see :c:func:`PyMem_SetupDebugHooks`. * Build Python with assertions (don't set ``NDEBUG`` macro): - ``assert(...);`` and ``_PyObject_ASSERT(...);`` are removed. + ``assert(...);`` and ``_PyObject_ASSERT(...);``. See also the :option:`--with-assertions` configure option. -* Add runtime checks, code surroundeded by ``#ifdef Py_DEBUG`` and ``#endif``. * Unicode and int objects are created with their memory filled with a pattern to help detecting uninitialized bytes. * Many functions ensure that are not called with an exception raised, since they can clear or replace the current exception. -* The garbage collector (:func:`gc.collect` function) runs some quick checks on - consistency. -* Add support for the ``__ltrace__`` variable: enable low-level tracing in the - bytecode evaluation loop if the variable is defined. +* The garbage collector (:func:`gc.collect` function) runs some basic checks on + objects consistency. +* More generally, add runtime checks, code surroundeded by ``#ifdef Py_DEBUG`` + and ``#endif``. See also the :ref:`Python Development Mode ` and the :option:`--with-trace-refs` configure option. @@ -222,7 +242,8 @@ Debug options .. cmdoption:: --with-pydebug - :ref:`Build Python in debug mode ` (disabled by default). + :ref:`Build Python in debug mode `: define the ``Py_DEBUG`` + macro (disabled by default). .. cmdoption:: --with-trace-refs @@ -235,13 +256,14 @@ Debug options * Add :envvar:`PYTHONDUMPREFS` environment variable. This build is not ABI compatible with release build (default build) or debug - build (``Py_DEBUG`` macro). + build (``Py_DEBUG`` and ``Py_REF_DEBUG`` macros). .. versionadded:: 3.8 .. cmdoption:: --with-assertions - Build with C assertions enabled (default is no). + Build with C assertions enabled (default is no): ``assert(...);`` and + ``_PyObject_ASSERT(...);``. If set, the ``NDEBUG`` macro is not defined in the :envvar:`OPT` compiler variable. @@ -263,19 +285,19 @@ Debug options .. cmdoption:: --with-address-sanitizer - Enable AddressSanitizer memory error detector, 'asan' (default is no). + Enable AddressSanitizer memory error detector, ``asan`` (default is no). .. versionadded:: 3.6 .. cmdoption:: --with-memory-sanitizer - Enable MemorySanitizer allocation error detector, 'msan' (default is no). + Enable MemorySanitizer allocation error detector, ``msan`` (default is no). .. versionadded:: 3.6 .. cmdoption:: --with-undefined-behavior-sanitizer - Enable UndefinedBehaviorSanitizer undefined behaviour detector, 'ubsan' + Enable UndefinedBehaviorSanitizer undefined behaviour detector, ``ubsan`` (default is no). .. versionadded:: 3.6 @@ -286,7 +308,7 @@ Linker options .. cmdoption:: --enable-shared - Enable building a shared Python library: "libpython" (default is no). + Enable building a shared Python library: ``libpython`` (default is no). .. cmdoption:: --without-static-libpython @@ -315,14 +337,24 @@ Libraries options .. cmdoption:: --with-system-libmpdec - Build the ``_decimal`` extension module using an installed ``libmpdec`` + Build the ``_decimal`` extension module using an installed ``mpdec`` library, see the :mod:`decimal` module (default is no). .. versionadded:: 3.3 -.. cmdoption:: --with(out)-readline[=editline] +.. cmdoption:: --with-readline=editline - Use ``editline`` for backend or disable the :mod:`readline` module. + Use ``editline`` library for backend of the :mod:`readline` module. + + Define the ``WITH_EDITLINE`` macro. + + .. versionadded:: 3.10 + +.. cmdoption:: --without-readline + + Don't build the :mod:`readline` module (built by default). + + Don't define the ``HAVE_LIBREADLINE`` macro. .. versionadded:: 3.10 @@ -346,7 +378,9 @@ Libraries options Root of the OpenSSL directory. -.. cmdoption:: --with-openssl-rpath=[DIR|auto|no] + .. versionadded:: 3.7 + +.. cmdoption:: --with-openssl-rpath=[no|auto|DIR] Set runtime library directory (rpath) for OpenSSL libraries: @@ -365,8 +399,8 @@ Security Options Select hash algorithm for use in ``Python/pyhash.c``: - * ``fnv``; * ``siphash24`` (default). + * ``fnv``; .. versionadded:: 3.4 @@ -387,7 +421,7 @@ Security Options Override the OpenSSL default cipher suites string: - * ``python``: use Python's preferred selection (default); + * ``python`` (default): use Python's preferred selection; * ``openssl``: leave OpenSSL's defaults untouched; * *STRING*: use a custom string, PROTOCOL_SSLv2 ignores the setting. @@ -401,22 +435,24 @@ macOS Options See ``Mac/README.rst``. -.. cmdoption:: --enable-universalsdk[=SDKDIR] +.. cmdoption:: --enable-universalsdk +.. cmdoption:: --enable-universalsdk=SDKDIR Create a universal binary build. *SDKDIR* specifies which macOS SDK should be used to perform the build (default is no). -.. cmdoption:: --enable-framework[=INSTALLDIR] +.. cmdoption:: --enable-framework +.. cmdoption:: --enable-framework=INSTALLDIR Create a Python.framework rather than a traditional Unix install. Optional *INSTALLDIR* specifies the installation path (default is no). .. cmdoption:: --with-universal-archs=ARCH - Specify the kind of universal binary that should be created. this option is + Specify the kind of universal binary that should be created. This option is only valid when :option:`--enable-universalsdk` is set. - Options are: + Options: * ``universal2``; * ``32-bit``; @@ -436,18 +472,23 @@ See ``Mac/README.rst``. Compiler and linker flags ========================= -Options set by the ``./configure`` script, ``Makefile`` and by environment -variables. +Options set by the ``./configure`` script and environment variables and used by +``Makefile``. -Preprocessor flags ------------------- +Main files of the Python build system: -.. envvar:: CPP +* :file:`configure.ac` => :file:`configure`; +* :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`); +* :file:`pyconfig.h` (created by :file:`configure`); +* :file:`Modules/Setup`. - C preprocessor. +Preprocessor flags +------------------ .. envvar:: CONFIGURE_CPPFLAGS + Value of :envvar:`CPPFLAGS` variable passed to the ``./configure`` script. + .. versionadded:: 3.6 .. envvar:: CPPFLAGS @@ -463,10 +504,6 @@ Preprocessor flags .. versionadded:: 3.4 -.. envvar:: MULTIARCH_CPPFLAGS - - .. versionadded:: 3.6 - .. envvar:: PY_CPPFLAGS Extra preprocessor flags added for building the interpreter object files. @@ -482,6 +519,16 @@ Compiler flags C compiler command. + Example: ``gcc -pthread``. + +.. envvar:: CXX + + C++ compiler command. + + Used if the :option:`--with-cxx-main` option is used. + + Example: ``g++ -pthread``. + .. envvar:: CFLAGS C compiler flags. @@ -500,14 +547,22 @@ Compiler flags .. envvar:: CONFIGURE_CFLAGS + Value of :envvar:`CFLAGS` variable passed to the ``./configure`` + script. + .. versionadded:: 3.2 .. envvar:: CONFIGURE_CFLAGS_NODIST + Value of :envvar:`CFLAGS_NODIST` variable passed to the ``./configure`` + script. + .. versionadded:: 3.5 .. envvar:: BASECFLAGS + Base compiler flags. + .. envvar:: OPT Optimization flags. @@ -518,10 +573,19 @@ Compiler flags .. versionadded:: 3.7 +.. envvar:: CCSHARED + + Compiler flags used to build a shared library. + + For example, ``-fPIC`` is used on Linux and on BSD. + .. envvar:: CFLAGSFORSHARED Extra C flags added for building the interpreter object files. + Default: ``$(CCSHARED)`` when :option:`--enable-shared` is used, or an empty + string otherwise. + .. envvar:: PY_CFLAGS Default: ``$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)``. @@ -548,6 +612,9 @@ Compiler flags .. envvar:: PY_BUILTIN_MODULE_CFLAGS + Compiler flags to build a standard library extension module as a built-in + module, like the :mod:`posix` module. + Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN``. .. versionadded:: 3.8 @@ -558,6 +625,8 @@ Linker flags .. envvar:: CONFIGURE_LDFLAGS + Value of :envvar:`LDFLAGS` variable passed to the ``./configure`` script. + Avoid assigning :envvar:`CFLAGS`, :envvar:`LDFLAGS`, etc. so users can use them on the command line to append to these values without stomping the pre-set values. @@ -572,6 +641,9 @@ Linker flags .. envvar:: CONFIGURE_LDFLAGS_NODIST + Value of :envvar:`LDFLAGS_NODIST` variable passed to the ``./configure`` + script. + .. versionadded:: 3.8 .. envvar:: LDFLAGS @@ -585,7 +657,10 @@ Linker flags .. envvar:: LIBS - Libraries to pass to the linker, e.g. ``-l``. + Linker flags to pass libraries to the linker when linking the Python + executable. + + Example: ``-lrt``. .. envvar:: LDSHARED @@ -595,7 +670,7 @@ Linker flags .. envvar:: BLDSHARED - Command to build libpython shared library. + Command to build ``libpython`` shared library. Default: ``@BLDSHARED@ $(PY_CORE_LDFLAGS)``. From webhook-mailer at python.org Thu Apr 8 20:17:36 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 00:17:36 -0000 Subject: [Python-checkins] Sanitize macros and debug functions in pegen.c (GH-25291) Message-ID: https://github.com/python/cpython/commit/58bafe42ab161473ba36c9231c3bf2e64ac8db82 commit: 58bafe42ab161473ba36c9231c3bf2e64ac8db82 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-09T01:17:31+01:00 summary: Sanitize macros and debug functions in pegen.c (GH-25291) files: M Parser/pegen.c M Parser/pegen.h M Tools/peg_generator/peg_extension/peg_extension.c diff --git a/Parser/pegen.c b/Parser/pegen.c index 729b74762a6d2..0aa55cf63abdc 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -725,6 +725,8 @@ _PyPegen_fill_token(Parser *p) return 0; } + +#if defined(Py_DEBUG) // Instrumentation to count the effectiveness of memoization. // The array counts the number of tokens skipped by memoization, // indexed by type. @@ -761,6 +763,7 @@ _PyPegen_get_memo_statistics() } return ret; } +#endif int // bool _PyPegen_is_memoized(Parser *p, int type, void *pres) @@ -776,6 +779,7 @@ _PyPegen_is_memoized(Parser *p, int type, void *pres) for (Memo *m = t->memo; m != NULL; m = m->next) { if (m->type == type) { +#if defined(PY_DEBUG) if (0 <= type && type < NSTATISTICS) { long count = m->mark - p->mark; // A memoized negative result counts for one. @@ -784,6 +788,7 @@ _PyPegen_is_memoized(Parser *p, int type, void *pres) } memo_statistics[type] += count; } +#endif p->mark = m->mark; *(void **)(pres) = m->node; return 1; @@ -2286,9 +2291,9 @@ _PyPegen_get_invalid_target(expr_ty e, TARGETS_TYPE targets_type) } #define VISIT_CONTAINER(CONTAINER, TYPE) do { \ - Py_ssize_t len = asdl_seq_LEN(CONTAINER->v.TYPE.elts);\ + Py_ssize_t len = asdl_seq_LEN((CONTAINER)->v.TYPE.elts);\ for (Py_ssize_t i = 0; i < len; i++) {\ - expr_ty other = asdl_seq_GET(CONTAINER->v.TYPE.elts, i);\ + expr_ty other = asdl_seq_GET((CONTAINER)->v.TYPE.elts, i);\ expr_ty child = _PyPegen_get_invalid_target(other, targets_type);\ if (child != NULL) {\ return child;\ diff --git a/Parser/pegen.h b/Parser/pegen.h index af160d6a43d6b..53d8e5221bfcf 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -107,8 +107,10 @@ typedef struct { int is_keyword; } KeywordOrStarred; +#if defined(Py_DEBUG) void _PyPegen_clear_memo_statistics(void); PyObject *_PyPegen_get_memo_statistics(void); +#endif int _PyPegen_insert_memo(Parser *p, int mark, int type, void *node); int _PyPegen_update_memo(Parser *p, int mark, int type, void *node); @@ -150,7 +152,7 @@ RAISE_ERROR_KNOWN_LOCATION(Parser *p, PyObject *errtype, #define UNUSED(expr) do { (void)(expr); } while (0) -#define EXTRA_EXPR(head, tail) head->lineno, head->col_offset, tail->end_lineno, tail->end_col_offset, p->arena +#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena #define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena #define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, msg, ##__VA_ARGS__) #define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, msg, ##__VA_ARGS__) diff --git a/Tools/peg_generator/peg_extension/peg_extension.c b/Tools/peg_generator/peg_extension/peg_extension.c index 94e729e56d9b9..bb4c1b0178c91 100644 --- a/Tools/peg_generator/peg_extension/peg_extension.c +++ b/Tools/peg_generator/peg_extension/peg_extension.c @@ -109,20 +109,27 @@ parse_string(PyObject *self, PyObject *args, PyObject *kwds) static PyObject * clear_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored)) { +#if defined(PY_DEBUG) _PyPegen_clear_memo_statistics(); +#endif Py_RETURN_NONE; } static PyObject * get_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored)) { +#if defined(PY_DEBUG) return _PyPegen_get_memo_statistics(); +#else + Py_RETURN_NONE; +#endif } // TODO: Write to Python's sys.stdout instead of C's stdout. static PyObject * dump_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored)) { +#if defined(PY_DEBUG) PyObject *list = _PyPegen_get_memo_statistics(); if (list == NULL) { return NULL; @@ -139,6 +146,7 @@ dump_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored)) } } Py_DECREF(list); +#endif Py_RETURN_NONE; } From webhook-mailer at python.org Thu Apr 8 20:32:46 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 00:32:46 -0000 Subject: [Python-checkins] Simplify _PyPegen_fill_token in pegen.c (GH-25295) Message-ID: https://github.com/python/cpython/commit/d00a449d6d421391557393cce695795b4b66c212 commit: d00a449d6d421391557393cce695795b4b66c212 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-09T01:32:25+01:00 summary: Simplify _PyPegen_fill_token in pegen.c (GH-25295) files: M Parser/pegen.c diff --git a/Parser/pegen.c b/Parser/pegen.c index 0aa55cf63abdc..57759f7512573 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -625,6 +625,64 @@ growable_comment_array_deallocate(growable_comment_array *arr) { PyMem_Free(arr->items); } +static int +initialize_token(Parser *p, Token *token, const char *start, const char *end, int token_type) { + assert(token != NULL); + + token->type = (token_type == NAME) ? _get_keyword_or_name_type(p, start, (int)(end - start)) : token_type; + token->bytes = PyBytes_FromStringAndSize(start, end - start); + if (token->bytes == NULL) { + return -1; + } + + if (_PyArena_AddPyObject(p->arena, token->bytes) < 0) { + Py_DECREF(token->bytes); + return -1; + } + + const char *line_start = token_type == STRING ? p->tok->multi_line_start : p->tok->line_start; + int lineno = token_type == STRING ? p->tok->first_lineno : p->tok->lineno; + int end_lineno = p->tok->lineno; + + int col_offset = (start != NULL && start >= line_start) ? (int)(start - line_start) : -1; + int end_col_offset = (end != NULL && end >= p->tok->line_start) ? (int)(end - p->tok->line_start) : -1; + + token->lineno = p->starting_lineno + lineno; + token->col_offset = p->tok->lineno == 1 ? p->starting_col_offset + col_offset : col_offset; + token->end_lineno = p->starting_lineno + end_lineno; + token->end_col_offset = p->tok->lineno == 1 ? p->starting_col_offset + end_col_offset : end_col_offset; + + p->fill += 1; + + if (token_type == ERRORTOKEN && p->tok->done == E_DECODE) { + return raise_decode_error(p); + } + + return (token_type == ERRORTOKEN ? tokenizer_error(p) : 0); +} + +static int +_resize_tokens_array(Parser *p) { + int newsize = p->size * 2; + Token **new_tokens = PyMem_Realloc(p->tokens, newsize * sizeof(Token *)); + if (new_tokens == NULL) { + PyErr_NoMemory(); + return -1; + } + p->tokens = new_tokens; + + for (int i = p->size; i < newsize; i++) { + p->tokens[i] = PyMem_Calloc(1, sizeof(Token)); + if (p->tokens[i] == NULL) { + p->size = i; // Needed, in order to cleanup correctly after parser fails + PyErr_NoMemory(); + return -1; + } + } + p->size = newsize; + return 0; +} + int _PyPegen_fill_token(Parser *p) { @@ -650,7 +708,8 @@ _PyPegen_fill_token(Parser *p) type = PyTokenizer_Get(p->tok, &start, &end); } - if (type == ENDMARKER && p->start_rule == Py_single_input && p->parsing_started) { + // If we have reached the end and we are in single input mode we need to insert a newline and reset the parsing + if (p->start_rule == Py_single_input && type == ENDMARKER && p->parsing_started) { type = NEWLINE; /* Add an extra newline */ p->parsing_started = 0; @@ -663,66 +722,13 @@ _PyPegen_fill_token(Parser *p) p->parsing_started = 1; } - if (p->fill == p->size) { - int newsize = p->size * 2; - Token **new_tokens = PyMem_Realloc(p->tokens, newsize * sizeof(Token *)); - if (new_tokens == NULL) { - PyErr_NoMemory(); - return -1; - } - p->tokens = new_tokens; - - for (int i = p->size; i < newsize; i++) { - p->tokens[i] = PyMem_Malloc(sizeof(Token)); - if (p->tokens[i] == NULL) { - p->size = i; // Needed, in order to cleanup correctly after parser fails - PyErr_NoMemory(); - return -1; - } - memset(p->tokens[i], '\0', sizeof(Token)); - } - p->size = newsize; - } - - Token *t = p->tokens[p->fill]; - t->type = (type == NAME) ? _get_keyword_or_name_type(p, start, (int)(end - start)) : type; - t->bytes = PyBytes_FromStringAndSize(start, end - start); - if (t->bytes == NULL) { - return -1; - } - if (_PyArena_AddPyObject(p->arena, t->bytes) < 0) { - Py_DECREF(t->bytes); + // Check if we are at the limit of the token array capacity and resize if needed + if ((p->fill == p->size) && (_resize_tokens_array(p) != 0)) { return -1; } - int lineno = type == STRING ? p->tok->first_lineno : p->tok->lineno; - const char *line_start = type == STRING ? p->tok->multi_line_start : p->tok->line_start; - int end_lineno = p->tok->lineno; - int col_offset = -1; - int end_col_offset = -1; - if (start != NULL && start >= line_start) { - col_offset = (int)(start - line_start); - } - if (end != NULL && end >= p->tok->line_start) { - end_col_offset = (int)(end - p->tok->line_start); - } - - t->lineno = p->starting_lineno + lineno; - t->col_offset = p->tok->lineno == 1 ? p->starting_col_offset + col_offset : col_offset; - t->end_lineno = p->starting_lineno + end_lineno; - t->end_col_offset = p->tok->lineno == 1 ? p->starting_col_offset + end_col_offset : end_col_offset; - - p->fill += 1; - - if (type == ERRORTOKEN) { - if (p->tok->done == E_DECODE) { - return raise_decode_error(p); - } - return tokenizer_error(p); - - } - - return 0; + Token *t = p->tokens[p->fill]; + return initialize_token(p, t, start, end, type); } From webhook-mailer at python.org Thu Apr 8 20:33:58 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 00:33:58 -0000 Subject: [Python-checkins] Add CI step to check changes in the exported ABI (GH-25232) Message-ID: https://github.com/python/cpython/commit/49b7ab1533294529f15f78b65853dcf1fd872909 commit: 49b7ab1533294529f15f78b65853dcf1fd872909 branch: 3.8 author: Pablo Galindo committer: pablogsal date: 2021-04-09T01:33:48+01:00 summary: Add CI step to check changes in the exported ABI (GH-25232) files: A Doc/data/python3.8.abi M .github/workflows/build.yml M Makefile.pre.in diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cafe3d18bc3e7..71b36e9ddd29e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,6 +41,28 @@ jobs: git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true fi + check_abi: + name: 'Check if the ABI has changed' + runs-on: ubuntu-20.04 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' + steps: + - uses: actions/checkout at v2 + - uses: actions/setup-python at v2 + - name: Install Dependencies + run: | + sudo ./.github/workflows/posix-deps-apt.sh + sudo apt-get install -yq abigail-tools + - name: Build CPython + env: + CFLAGS: -g3 -O0 + run: | + # Build Python with the libpython dynamic library + ./configure --enable-shared + make -j4 + - name: Check for changes in the ABI + run: make check-abidump + check_generated_files: name: 'Check if generated files are up to date' runs-on: ubuntu-latest diff --git a/Doc/data/python3.8.abi b/Doc/data/python3.8.abi new file mode 100644 index 0000000000000..8a11301b45336 --- /dev/null +++ b/Doc/data/python3.8.abi @@ -0,0 +1,16017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Makefile.pre.in b/Makefile.pre.in index a914a9c70f679..30280782216cc 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -725,6 +725,13 @@ regen-importlib: Programs/_freeze_importlib $(srcdir)/Python/importlib_zipimport.h.new $(UPDATE_FILE) $(srcdir)/Python/importlib_zipimport.h $(srcdir)/Python/importlib_zipimport.h.new +regen-abidump: all + @$(MKDIR_P) $(srcdir)/Doc/data/ + abidw "libpython$(LDVERSION).so" --no-architecture --out-file $(srcdir)/Doc/data/python$(LDVERSION).abi.new + @$(UPDATE_FILE) $(srcdir)/Doc/data/python$(LDVERSION).abi $(srcdir)/Doc/data/python$(LDVERSION).abi.new + +check-abidump: all + abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types --no-architecture --no-added-syms ############################################################################ # Regenerate all generated files From webhook-mailer at python.org Thu Apr 8 20:34:23 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 00:34:23 -0000 Subject: [Python-checkins] Add CI step to check changes in the exported ABI (GH-25230) Message-ID: https://github.com/python/cpython/commit/4d9336d1147a7855a03e441120bf720a73cb742f commit: 4d9336d1147a7855a03e441120bf720a73cb742f branch: 3.9 author: Pablo Galindo committer: pablogsal date: 2021-04-09T01:34:08+01:00 summary: Add CI step to check changes in the exported ABI (GH-25230) files: A Doc/data/python3.9.abi M .github/workflows/build.yml M Makefile.pre.in diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce77250d7ff6d..4a4a687bc9522 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,6 +48,28 @@ jobs: git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true fi + check_abi: + name: 'Check if the ABI has changed' + runs-on: ubuntu-20.04 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' + steps: + - uses: actions/checkout at v2 + - uses: actions/setup-python at v2 + - name: Install Dependencies + run: | + sudo ./.github/workflows/posix-deps-apt.sh + sudo apt-get install -yq abigail-tools + - name: Build CPython + env: + CFLAGS: -g3 -O0 + run: | + # Build Python with the libpython dynamic library + ./configure --enable-shared + make -j4 + - name: Check for changes in the ABI + run: make check-abidump + check_generated_files: name: 'Check if generated files are up to date' runs-on: ubuntu-latest diff --git a/Doc/data/python3.9.abi b/Doc/data/python3.9.abi new file mode 100644 index 0000000000000..228fefcd87005 --- /dev/null +++ b/Doc/data/python3.9.abi @@ -0,0 +1,13843 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Makefile.pre.in b/Makefile.pre.in index 3137d9306c2c4..d088eb5768fc8 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -753,6 +753,13 @@ regen-importlib: Programs/_freeze_importlib $(srcdir)/Python/importlib_zipimport.h.new $(UPDATE_FILE) $(srcdir)/Python/importlib_zipimport.h $(srcdir)/Python/importlib_zipimport.h.new +regen-abidump: all + @$(MKDIR_P) $(srcdir)/Doc/data/ + abidw "libpython$(LDVERSION).so" --no-architecture --out-file $(srcdir)/Doc/data/python$(LDVERSION).abi.new + @$(UPDATE_FILE) $(srcdir)/Doc/data/python$(LDVERSION).abi $(srcdir)/Doc/data/python$(LDVERSION).abi.new + +check-abidump: all + abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types --no-architecture --no-added-syms ############################################################################ # Regenerate all generated files From webhook-mailer at python.org Fri Apr 9 06:37:01 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 10:37:01 -0000 Subject: [Python-checkins] bpo-43774: Doc job of Azure Pipelines uses Doc/requirements.txt (GH-25296) Message-ID: https://github.com/python/cpython/commit/f7be26a8f2ed588df90959ae7c0fdcafe2091f76 commit: f7be26a8f2ed588df90959ae7c0fdcafe2091f76 branch: master author: Victor Stinner committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T03:36:47-07:00 summary: bpo-43774: Doc job of Azure Pipelines uses Doc/requirements.txt (GH-25296) Don't hardcode the Sphinx version but use Doc/requirements.txt. files: M .azure-pipelines/docs-steps.yml diff --git a/.azure-pipelines/docs-steps.yml b/.azure-pipelines/docs-steps.yml index 33d379b95aa3d..647daff7a033a 100644 --- a/.azure-pipelines/docs-steps.yml +++ b/.azure-pipelines/docs-steps.yml @@ -12,7 +12,8 @@ steps: inputs: versionSpec: '>=3.6' -- script: python -m pip install sphinx==2.2.0 blurb python-docs-theme +- script: python -m pip install -r requirements.txt + workingDirectory: '$(build.sourcesDirectory)/Doc' displayName: 'Install build dependencies' - ${{ if ne(parameters.latex, 'true') }}: From webhook-mailer at python.org Fri Apr 9 08:35:20 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 09 Apr 2021 12:35:20 -0000 Subject: [Python-checkins] bpo-43774: Document the Python Build System (GH-25302) Message-ID: https://github.com/python/cpython/commit/bd88ccb943c0ea672c14a87e76157fade4feae11 commit: bd88ccb943c0ea672c14a87e76157fade4feae11 branch: master author: Victor Stinner committer: vstinner date: 2021-04-09T14:35:10+02:00 summary: bpo-43774: Document the Python Build System (GH-25302) * Elaborate PGO and LTO documentaton. * Document MAINCC, PURIFY and LINKCC variables. files: M Doc/using/configure.rst diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index 940bc19923aa9..85c9018067e04 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -146,6 +146,9 @@ recommended for best performance. Enable Profile Guided Optimization (PGO) using :envvar:`PROFILE_TASK` (disabled by default). + The C compiler Clang requires ``llvm-profdata`` program for PGO. On + macOS, GCC also requires it: GCC is just an alias to Clang on macOS. + Disable also semantic interposition in libpython if ``--enable-shared`` and GCC is used: add ``-fno-semantic-interposition`` to the compiler and linker flags. @@ -168,6 +171,9 @@ recommended for best performance. Enable Link Time Optimization (LTO) in any build (disabled by default). + The C compiler Clang requires ``llvm-ar`` for LTO, as well as an LTO-aware + linker (``ld.gold`` or ``lld``). + .. versionadded:: 3.6 .. cmdoption:: --with-computed-gotos @@ -469,19 +475,100 @@ See ``Mac/README.rst``. :option:`--enable-framework` is set (default: ``Python``). +Python Build System +=================== + +Main files of the build system +------------------------------ + +* :file:`configure.ac` => :file:`configure`; +* :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`); +* :file:`pyconfig.h` (created by :file:`configure`); +* :file:`Modules/Setup`: C extensions built by the Makefile using + :file:`Module/makesetup` shell script; +* :file:`setup.py`: C extensions built using the :mod:`distutils` module. + +Main build steps +---------------- + +* C files (``.c``) are built as object files (``.o``). +* A static ``libpython`` library (``.a``) is created from objects files. +* ``python.o`` and the static ``libpython`` library are linked into the + final ``python`` program. +* C extensions are built by the Makefile (see :file:`Modules/Setup`) + and ``python setup.py build``. + +Main Makefile targets +--------------------- + +* ``make``: Build Python with the standard library. +* ``make platform:``: build the ``python`` program, but don't build the + standard library extension modules. +* ``make profile-opt``: build Python using Profile Guided Optimization (PGO). + You can use the configure :option:`--enable-optimizations` option to make + this the default target of the ``make`` command (``make all`` or just + ``make``). +* ``make buildbottest``: Build Python and run the Python test suite, the same + way than buildbots test Python. Set ``TESTTIMEOUT`` variable (in seconds) + to change the test timeout (1200 by default: 20 minutes). +* ``make install``: Build and install Python. +* ``make regen-all``: Regenerate (almost) all generated files; + ``make regen-stdlib-module-names`` and ``autoconf`` must be run separately + for the remaining generated files. +* ``make clean``: Remove built files. +* ``make distclean``: Same than ``make clean``, but remove also files created + by the configure script. + +C extensions +------------ + +Some C extensions are built as built-in modules, like the ``sys`` module. +They are built with the ``Py_BUILD_CORE_BUILTIN`` macro defined. +Built-in modules have no ``__file__`` attribute:: + + >>> import sys + >>> sys + + >>> sys.__file__ + Traceback (most recent call last): + File "", line 1, in + AttributeError: module 'sys' has no attribute '__file__' + +Other C extensins are built as dynamic libraires, like the ``_asyncio`` module. +They are built with the ``Py_BUILD_CORE_MODULE`` macro defined. +Example on Linux x86-64:: + + >>> import _asyncio + >>> _asyncio + + >>> _asyncio.__file__ + '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so' + +:file:`Modules/Setup` is used to generate Makefile targets to build C extensions. +At the beginning of the files, C extensions are built as built-in modules. +Extensions defined after the ``*shared*`` marker are built as dynamic libraries. + +The :file:`setup.py` script only builds C extensions as shared libraries using +the :mod:`distutils` module. + +The :c:macro:`PyAPI_FUNC()`, :c:macro:`PyAPI_API()` and +:c:macro:`PyMODINIT_FUNC()` macros of :file:`Include/pyport.h` are defined +differently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined: + +* Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined +* Use ``Py_IMPORTED_SYMBOL`` otherwise. + +If the ``Py_BUILD_CORE_BUILTIN`` macro is used by mistake on a C extension +built as a shared library, its ``PyInit_xxx()`` function is not exported, +causing an :exc:`ImportError` on import. + + Compiler and linker flags ========================= Options set by the ``./configure`` script and environment variables and used by ``Makefile``. -Main files of the Python build system: - -* :file:`configure.ac` => :file:`configure`; -* :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`); -* :file:`pyconfig.h` (created by :file:`configure`); -* :file:`Modules/Setup`. - Preprocessor flags ------------------ @@ -521,6 +608,16 @@ Compiler flags Example: ``gcc -pthread``. +.. envvar:: MAINCC + + C compiler command used to build the ``main()`` function of programs like + ``python``. + + Variable set by the :option:`--with-cxx-main` option of the configure + script. + + Default: ``$(CC)``. + .. envvar:: CXX C++ compiler command. @@ -619,10 +716,22 @@ Compiler flags .. versionadded:: 3.8 +.. envvar:: PURIFY + + Purify command. Purify is a memory debugger program. + + Default: empty string (not used). + Linker flags ------------ +.. envvar:: LINKCC + + Linker command used to build programs like ``python`` and ``_testembed``. + + Default: ``$(PURIFY) $(MAINCC)``. + .. envvar:: CONFIGURE_LDFLAGS Value of :envvar:`LDFLAGS` variable passed to the ``./configure`` script. From webhook-mailer at python.org Fri Apr 9 09:23:47 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 13:23:47 -0000 Subject: [Python-checkins] bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) Message-ID: https://github.com/python/cpython/commit/d3b73f32ef7c693a6ae8c54eb0e62df3b5315caf commit: d3b73f32ef7c693a6ae8c54eb0e62df3b5315caf branch: master author: Christian Heimes committer: tiran date: 2021-04-09T15:23:38+02:00 summary: bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) files: A Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst new file mode 100644 index 0000000000000..1c0852946214d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index f3c3b20fe1ff1..94b06dd4b79e7 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3926,6 +3926,13 @@ _password_callback(char *buf, int size, int rwflag, void *userdata) PySSL_END_ALLOW_THREADS_S(pw_info->thread_state); + if (pw_info->error) { + /* already failed previously. OpenSSL 3.0.0-alpha14 invokes the + * callback multiple times which can lead to fatal Python error in + * exception check. */ + goto error; + } + if (pw_info->callable) { fn_ret = _PyObject_CallNoArg(pw_info->callable); if (!fn_ret) { From webhook-mailer at python.org Fri Apr 9 09:43:23 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 13:43:23 -0000 Subject: [Python-checkins] bpo-4379: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) Message-ID: https://github.com/python/cpython/commit/5151d642004c59cce58d669be85d9a5e987f51d3 commit: 5151d642004c59cce58d669be85d9a5e987f51d3 branch: master author: Christian Heimes committer: tiran date: 2021-04-09T15:43:06+02:00 summary: bpo-4379: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 4ef1fb8d63bb2..c0e040d77253f 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -42,6 +42,7 @@ IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') IS_OPENSSL_1_1_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0) IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) +IS_OPENSSL_3_0_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') PROTOCOL_TO_TLS_VERSION = {} @@ -212,6 +213,10 @@ def has_tls_version(version): if not getattr(ssl, f'HAS_{version.name}'): return False + if IS_OPENSSL_3_0_0 and version < ssl.TLSVersion.TLSv1_2: + # bpo43791: 3.0.0-alpha14 fails with TLSV1_ALERT_INTERNAL_ERROR + return False + # check runtime and dynamic crypto policy settings. A TLS version may # be compiled in but disabled by a policy or config option. ctx = ssl.SSLContext() diff --git a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst new file mode 100644 index 0000000000000..964ae5abb3d88 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. From webhook-mailer at python.org Fri Apr 9 09:46:21 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 13:46:21 -0000 Subject: [Python-checkins] bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) Message-ID: https://github.com/python/cpython/commit/a188bd44ac3c54dc3bf927f1b10464ab80f37549 commit: a188bd44ac3c54dc3bf927f1b10464ab80f37549 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T06:46:11-07:00 summary: bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) (cherry picked from commit d3b73f32ef7c693a6ae8c54eb0e62df3b5315caf) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst new file mode 100644 index 0000000000000..1c0852946214d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index aab5713997580..3fbb3630886a5 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3931,6 +3931,13 @@ _password_callback(char *buf, int size, int rwflag, void *userdata) PySSL_END_ALLOW_THREADS_S(pw_info->thread_state); + if (pw_info->error) { + /* already failed previously. OpenSSL 3.0.0-alpha14 invokes the + * callback multiple times which can lead to fatal Python error in + * exception check. */ + goto error; + } + if (pw_info->callable) { fn_ret = _PyObject_CallNoArg(pw_info->callable); if (!fn_ret) { From webhook-mailer at python.org Fri Apr 9 10:02:13 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 14:02:13 -0000 Subject: [Python-checkins] [3.8] bpo-43791: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) (GH-25308) Message-ID: https://github.com/python/cpython/commit/4e710d1c88cbebdb17578de00997457b3b26874d commit: 4e710d1c88cbebdb17578de00997457b3b26874d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T07:02:03-07:00 summary: [3.8] bpo-43791: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) (GH-25308) Signed-off-by: Christian Heimes (cherry picked from commit 5151d642004c59cce58d669be85d9a5e987f51d3) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index ec7bb74d28ce6..292794c69b5a0 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -34,6 +34,7 @@ IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') IS_OPENSSL_1_1_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0) IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) +IS_OPENSSL_3_0_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') PROTOCOL_TO_TLS_VERSION = {} @@ -204,6 +205,10 @@ def has_tls_version(version): if not getattr(ssl, f'HAS_{version.name}'): return False + if IS_OPENSSL_3_0_0 and version < ssl.TLSVersion.TLSv1_2: + # bpo43791: 3.0.0-alpha14 fails with TLSV1_ALERT_INTERNAL_ERROR + return False + # check runtime and dynamic crypto policy settings. A TLS version may # be compiled in but disabled by a policy or config option. ctx = ssl.SSLContext() diff --git a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst new file mode 100644 index 0000000000000..964ae5abb3d88 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. From webhook-mailer at python.org Fri Apr 9 10:08:40 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 14:08:40 -0000 Subject: [Python-checkins] bpo-4379: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) Message-ID: https://github.com/python/cpython/commit/4a5c101936900d11d723b59508464f73e4ab3a36 commit: 4a5c101936900d11d723b59508464f73e4ab3a36 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T07:08:32-07:00 summary: bpo-4379: Skip TLS 1.0/1.1 tests under OpenSSL 3.0.0 (GH-25304) Signed-off-by: Christian Heimes (cherry picked from commit 5151d642004c59cce58d669be85d9a5e987f51d3) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index ae9a0b2efc985..79c97a4d5607d 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -38,6 +38,7 @@ IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') IS_OPENSSL_1_1_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0) IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) +IS_OPENSSL_3_0_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') PROTOCOL_TO_TLS_VERSION = {} @@ -208,6 +209,10 @@ def has_tls_version(version): if not getattr(ssl, f'HAS_{version.name}'): return False + if IS_OPENSSL_3_0_0 and version < ssl.TLSVersion.TLSv1_2: + # bpo43791: 3.0.0-alpha14 fails with TLSV1_ALERT_INTERNAL_ERROR + return False + # check runtime and dynamic crypto policy settings. A TLS version may # be compiled in but disabled by a policy or config option. ctx = ssl.SSLContext() diff --git a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst new file mode 100644 index 0000000000000..964ae5abb3d88 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. From webhook-mailer at python.org Fri Apr 9 10:51:34 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 14:51:34 -0000 Subject: [Python-checkins] [3.8] bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) (GH-25306) Message-ID: https://github.com/python/cpython/commit/a28398e9c60848fc291c83dac44e5212694fb0b2 commit: a28398e9c60848fc291c83dac44e5212694fb0b2 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: tiran date: 2021-04-09T16:51:25+02:00 summary: [3.8] bpo-43789: OpenSSL 3.0.0 Don't call passwd callback again in error case (GH-25303) (GH-25306) (cherry picked from commit d3b73f32ef7c693a6ae8c54eb0e62df3b5315caf) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst new file mode 100644 index 0000000000000..1c0852946214d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index bc98375379b54..58d9f86489c4c 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3933,6 +3933,13 @@ _password_callback(char *buf, int size, int rwflag, void *userdata) PySSL_END_ALLOW_THREADS_S(pw_info->thread_state); + if (pw_info->error) { + /* already failed previously. OpenSSL 3.0.0-alpha14 invokes the + * callback multiple times which can lead to fatal Python error in + * exception check. */ + goto error; + } + if (pw_info->callable) { fn_ret = _PyObject_CallNoArg(pw_info->callable); if (!fn_ret) { From webhook-mailer at python.org Fri Apr 9 11:51:30 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 09 Apr 2021 15:51:30 -0000 Subject: [Python-checkins] bpo-43682: @staticmethod inherits attributes (GH-25268) Message-ID: https://github.com/python/cpython/commit/507a574de31a1bd7fed8ba4f04afa285d985109b commit: 507a574de31a1bd7fed8ba4f04afa285d985109b branch: master author: Victor Stinner committer: vstinner date: 2021-04-09T17:51:22+02:00 summary: bpo-43682: @staticmethod inherits attributes (GH-25268) Static methods (@staticmethod) and class methods (@classmethod) now inherit the method attributes (__module__, __name__, __qualname__, __doc__, __annotations__) and have a new __wrapped__ attribute. Changes: * Add a repr() method to staticmethod and classmethod types. * Add tests on the @classmethod decorator. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst M Doc/library/functions.rst M Doc/whatsnew/3.10.rst M Lib/test/test_decorators.py M Lib/test/test_descr.py M Lib/test/test_pydoc.py M Lib/test/test_reprlib.py M Objects/funcobject.c diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 5cb1df93702d6..dca8b9334877d 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -269,6 +269,11 @@ are always available. They are listed here in alphabetical order. Class methods can now wrap other :term:`descriptors ` such as :func:`property`. + .. versionchanged:: 3.10 + Class methods now inherit the method attributes (``__module__``, + ``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``) and + have a new ``__wrapped__`` attribute. + .. function:: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the *source* into a code or AST object. Code objects can be executed @@ -1632,6 +1637,11 @@ are always available. They are listed here in alphabetical order. For more information on static methods, see :ref:`types`. + .. versionchanged:: 3.10 + Static methods now inherit the method attributes (``__module__``, + ``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``) and + have a new ``__wrapped__`` attribute. + .. index:: single: string; str() (built-in function) diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index d690463fe2440..7cf5576765748 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -617,6 +617,12 @@ Other Language Changes respectively. (Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.) +* Static methods (:func:`@staticmethod `) and class methods + (:func:`@classmethod `) now inherit the method attributes + (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, + ``__annotations__``) and have a new ``__wrapped__`` attribute. + (Contributed by Victor Stinner in :issue:`43682`.) + New Modules =========== diff --git a/Lib/test/test_decorators.py b/Lib/test/test_decorators.py index 298979e509f8d..7d0243ab19939 100644 --- a/Lib/test/test_decorators.py +++ b/Lib/test/test_decorators.py @@ -1,3 +1,4 @@ +from test import support import unittest def funcattrs(**kwds): @@ -76,11 +77,28 @@ def foo(): return 42 self.assertEqual(C.foo(), 42) self.assertEqual(C().foo(), 42) - def test_staticmethod_function(self): - @staticmethod - def notamethod(x): + def check_wrapper_attrs(self, method_wrapper, format_str): + def func(x): return x - self.assertRaises(TypeError, notamethod, 1) + wrapper = method_wrapper(func) + + self.assertIs(wrapper.__func__, func) + self.assertIs(wrapper.__wrapped__, func) + + for attr in ('__module__', '__qualname__', '__name__', + '__doc__', '__annotations__'): + self.assertIs(getattr(wrapper, attr), + getattr(func, attr)) + + self.assertEqual(repr(wrapper), format_str.format(func)) + + self.assertRaises(TypeError, wrapper, 1) + + def test_staticmethod(self): + self.check_wrapper_attrs(staticmethod, '') + + def test_classmethod(self): + self.check_wrapper_attrs(classmethod, '') def test_dotted(self): decorators = MiscDecorators() diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 8c75ec304f780..79d6c4b5e7232 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1545,7 +1545,9 @@ class D(C): self.assertEqual(d.foo(1), (d, 1)) self.assertEqual(D.foo(d, 1), (d, 1)) # Test for a specific crash (SF bug 528132) - def f(cls, arg): return (cls, arg) + def f(cls, arg): + "f docstring" + return (cls, arg) ff = classmethod(f) self.assertEqual(ff.__get__(0, int)(42), (int, 42)) self.assertEqual(ff.__get__(0)(42), (int, 42)) @@ -1571,10 +1573,16 @@ def f(cls, arg): return (cls, arg) self.fail("classmethod shouldn't accept keyword args") cm = classmethod(f) - self.assertEqual(cm.__dict__, {}) + cm_dict = {'__annotations__': {}, + '__doc__': "f docstring", + '__module__': __name__, + '__name__': 'f', + '__qualname__': f.__qualname__} + self.assertEqual(cm.__dict__, cm_dict) + cm.x = 42 self.assertEqual(cm.x, 42) - self.assertEqual(cm.__dict__, {"x" : 42}) + self.assertEqual(cm.__dict__, {"x" : 42, **cm_dict}) del cm.x self.assertNotHasAttr(cm, "x") @@ -1654,10 +1662,10 @@ class D(C): self.assertEqual(d.foo(1), (d, 1)) self.assertEqual(D.foo(d, 1), (d, 1)) sm = staticmethod(None) - self.assertEqual(sm.__dict__, {}) + self.assertEqual(sm.__dict__, {'__doc__': None}) sm.x = 42 self.assertEqual(sm.x, 42) - self.assertEqual(sm.__dict__, {"x" : 42}) + self.assertEqual(sm.__dict__, {"x" : 42, '__doc__': None}) del sm.x self.assertNotHasAttr(sm, "x") diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 61575b522a66b..e94ebd30160e0 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -1142,7 +1142,8 @@ def sm(x, y): '''A static method''' ... self.assertEqual(self._get_summary_lines(X.__dict__['sm']), - "") + 'sm(...)\n' + ' A static method\n') self.assertEqual(self._get_summary_lines(X.sm), """\ sm(x, y) A static method @@ -1162,7 +1163,8 @@ def cm(cls, x): '''A class method''' ... self.assertEqual(self._get_summary_lines(X.__dict__['cm']), - "") + 'cm(...)\n' + ' A class method\n') self.assertEqual(self._get_summary_lines(X.cm), """\ cm(x) method of builtins.type instance A class method diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py index a328810c21ec6..0555b71bbf21a 100644 --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -203,9 +203,9 @@ def test_descriptors(self): class C: def foo(cls): pass x = staticmethod(C.foo) - self.assertTrue(repr(x).startswith('') x = classmethod(C.foo) - self.assertTrue(repr(x).startswith('') def test_unsortable(self): # Repr.repr() used to call sorted() on sets, frozensets and dicts diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst new file mode 100644 index 0000000000000..ab5873edbd70f --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst @@ -0,0 +1,5 @@ +Static methods (:func:`@staticmethod `) and class methods +(:func:`@classmethod `) now inherit the method attributes +(``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, +``__annotations__``) and have a new ``__wrapped__`` attribute. +Patch by Victor Stinner. diff --git a/Objects/funcobject.c b/Objects/funcobject.c index 45135a8c98a70..df59131912190 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -639,7 +639,7 @@ static PyObject* func_repr(PyFunctionObject *op) { return PyUnicode_FromFormat("", - op->func_qualname, op); + op->func_qualname, op); } static int @@ -715,6 +715,50 @@ PyTypeObject PyFunction_Type = { }; +static int +functools_copy_attr(PyObject *wrapper, PyObject *wrapped, PyObject *name) +{ + PyObject *value = PyObject_GetAttr(wrapped, name); + if (value == NULL) { + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + return 0; + } + return -1; + } + + int res = PyObject_SetAttr(wrapper, name, value); + Py_DECREF(value); + return res; +} + +// Similar to functools.wraps(wrapper, wrapped) +static int +functools_wraps(PyObject *wrapper, PyObject *wrapped) +{ +#define COPY_ATTR(ATTR) \ + do { \ + _Py_IDENTIFIER(ATTR); \ + PyObject *attr = _PyUnicode_FromId(&PyId_ ## ATTR); \ + if (attr == NULL) { \ + return -1; \ + } \ + if (functools_copy_attr(wrapper, wrapped, attr) < 0) { \ + return -1; \ + } \ + } while (0) \ + + COPY_ATTR(__module__); + COPY_ATTR(__name__); + COPY_ATTR(__qualname__); + COPY_ATTR(__doc__); + COPY_ATTR(__annotations__); + return 0; + +#undef COPY_ATTR +} + + /* Class method object */ /* A class method receives the class as implicit first argument, @@ -798,11 +842,16 @@ cm_init(PyObject *self, PyObject *args, PyObject *kwds) return -1; Py_INCREF(callable); Py_XSETREF(cm->cm_callable, callable); + + if (functools_wraps((PyObject *)cm, cm->cm_callable) < 0) { + return -1; + } return 0; } static PyMemberDef cm_memberlist[] = { {"__func__", T_OBJECT, offsetof(classmethod, cm_callable), READONLY}, + {"__wrapped__", T_OBJECT, offsetof(classmethod, cm_callable), READONLY}, {NULL} /* Sentinel */ }; @@ -821,13 +870,17 @@ cm_get___isabstractmethod__(classmethod *cm, void *closure) static PyGetSetDef cm_getsetlist[] = { {"__isabstractmethod__", - (getter)cm_get___isabstractmethod__, NULL, - NULL, - NULL}, + (getter)cm_get___isabstractmethod__, NULL, NULL, NULL}, {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL}, {NULL} /* Sentinel */ }; +static PyObject* +cm_repr(classmethod *cm) +{ + return PyUnicode_FromFormat("", cm->cm_callable); +} + PyDoc_STRVAR(classmethod_doc, "classmethod(function) -> method\n\ \n\ @@ -860,7 +913,7 @@ PyTypeObject PyClassMethod_Type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_as_async */ - 0, /* tp_repr */ + (reprfunc)cm_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ @@ -980,11 +1033,16 @@ sm_init(PyObject *self, PyObject *args, PyObject *kwds) return -1; Py_INCREF(callable); Py_XSETREF(sm->sm_callable, callable); + + if (functools_wraps((PyObject *)sm, sm->sm_callable) < 0) { + return -1; + } return 0; } static PyMemberDef sm_memberlist[] = { {"__func__", T_OBJECT, offsetof(staticmethod, sm_callable), READONLY}, + {"__wrapped__", T_OBJECT, offsetof(staticmethod, sm_callable), READONLY}, {NULL} /* Sentinel */ }; @@ -1003,13 +1061,17 @@ sm_get___isabstractmethod__(staticmethod *sm, void *closure) static PyGetSetDef sm_getsetlist[] = { {"__isabstractmethod__", - (getter)sm_get___isabstractmethod__, NULL, - NULL, - NULL}, + (getter)sm_get___isabstractmethod__, NULL, NULL, NULL}, {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL}, {NULL} /* Sentinel */ }; +static PyObject* +sm_repr(staticmethod *sm) +{ + return PyUnicode_FromFormat("", sm->sm_callable); +} + PyDoc_STRVAR(staticmethod_doc, "staticmethod(function) -> method\n\ \n\ @@ -1040,7 +1102,7 @@ PyTypeObject PyStaticMethod_Type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_as_async */ - 0, /* tp_repr */ + (reprfunc)sm_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ From webhook-mailer at python.org Fri Apr 9 11:59:37 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 15:59:37 -0000 Subject: [Python-checkins] bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Message-ID: https://github.com/python/cpython/commit/6f37ebc61e9e0d13bcb1a2ddb7fc9723c04b6372 commit: 6f37ebc61e9e0d13bcb1a2ddb7fc9723c04b6372 branch: master author: Christian Heimes committer: tiran date: 2021-04-09T17:59:21+02:00 summary: bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst M Doc/library/ssl.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 93331681266de..587d3b3ac9f61 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -893,6 +893,14 @@ Constants .. versionadded:: 3.6 +.. data:: OP_IGNORE_UNEXPECTED_EOF + + Ignore unexpected shutdown of TLS connections. + + This option is only available with OpenSSL 3.0.0 and later. + + .. versionadded:: 3.10 + .. data:: HAS_ALPN Whether the OpenSSL library has built-in support for the *Application-Layer diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index c0e040d77253f..831f411b12be6 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -151,6 +151,7 @@ def data_file(*name): OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0) OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0) +OP_IGNORE_UNEXPECTED_EOF = getattr(ssl, "OP_IGNORE_UNEXPECTED_EOF", 0) # Ubuntu has patched OpenSSL and changed behavior of security level 2 # see https://bugs.python.org/issue41561#msg389003 @@ -1168,7 +1169,8 @@ def test_options(self): # SSLContext also enables these by default default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE | - OP_ENABLE_MIDDLEBOX_COMPAT) + OP_ENABLE_MIDDLEBOX_COMPAT | + OP_IGNORE_UNEXPECTED_EOF) self.assertEqual(default, ctx.options) ctx.options |= ssl.OP_NO_TLSv1 self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) diff --git a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst new file mode 100644 index 0000000000000..64894bdc017e5 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst @@ -0,0 +1 @@ +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3ee61e3e631eb..c08665be295fa 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3202,6 +3202,10 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #endif #ifdef SSL_OP_SINGLE_ECDH_USE options |= SSL_OP_SINGLE_ECDH_USE; +#endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + /* Make OpenSSL 3.0.0 behave like 1.1.1 */ + options |= SSL_OP_IGNORE_UNEXPECTED_EOF; #endif SSL_CTX_set_options(self->ctx, options); @@ -6313,6 +6317,10 @@ sslmodule_init_constants(PyObject *m) PyModule_AddIntConstant(m, "OP_NO_RENEGOTIATION", SSL_OP_NO_RENEGOTIATION); #endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + PyModule_AddIntConstant(m, "OP_IGNORE_UNEXPECTED_EOF", + SSL_OP_IGNORE_UNEXPECTED_EOF); +#endif #ifdef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT PyModule_AddIntConstant(m, "HOSTFLAG_ALWAYS_CHECK_SUBJECT", From webhook-mailer at python.org Fri Apr 9 12:21:14 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 16:21:14 -0000 Subject: [Python-checkins] bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Message-ID: https://github.com/python/cpython/commit/e18ebd9ec546a3647a57c282735350f60a26d66d commit: e18ebd9ec546a3647a57c282735350f60a26d66d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T09:21:06-07:00 summary: bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Signed-off-by: Christian Heimes (cherry picked from commit 6f37ebc61e9e0d13bcb1a2ddb7fc9723c04b6372) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst M Doc/library/ssl.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 24b46ca1c7dc1..12cd747c6ea9b 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -886,6 +886,14 @@ Constants .. versionadded:: 3.6 +.. data:: OP_IGNORE_UNEXPECTED_EOF + + Ignore unexpected shutdown of TLS connections. + + This option is only available with OpenSSL 3.0.0 and later. + + .. versionadded:: 3.10 + .. data:: HAS_ALPN Whether the OpenSSL library has built-in support for the *Application-Layer diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 292794c69b5a0..75ba8a9489bed 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -143,6 +143,7 @@ def data_file(*name): OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0) OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0) +OP_IGNORE_UNEXPECTED_EOF = getattr(ssl, "OP_IGNORE_UNEXPECTED_EOF", 0) # Ubuntu has patched OpenSSL and changed behavior of security level 2 # see https://bugs.python.org/issue41561#msg389003 @@ -1161,7 +1162,8 @@ def test_options(self): # SSLContext also enables these by default default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE | - OP_ENABLE_MIDDLEBOX_COMPAT) + OP_ENABLE_MIDDLEBOX_COMPAT | + OP_IGNORE_UNEXPECTED_EOF) self.assertEqual(default, ctx.options) ctx.options |= ssl.OP_NO_TLSv1 self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) diff --git a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst new file mode 100644 index 0000000000000..64894bdc017e5 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst @@ -0,0 +1 @@ +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 58d9f86489c4c..bb6cf63ee7fab 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3214,6 +3214,10 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #endif #ifdef SSL_OP_SINGLE_ECDH_USE options |= SSL_OP_SINGLE_ECDH_USE; +#endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + /* Make OpenSSL 3.0.0 behave like 1.1.1 */ + options |= SSL_OP_IGNORE_UNEXPECTED_EOF; #endif SSL_CTX_set_options(self->ctx, options); @@ -6273,6 +6277,10 @@ PyInit__ssl(void) PyModule_AddIntConstant(m, "OP_NO_RENEGOTIATION", SSL_OP_NO_RENEGOTIATION); #endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + PyModule_AddIntConstant(m, "OP_IGNORE_UNEXPECTED_EOF", + SSL_OP_IGNORE_UNEXPECTED_EOF); +#endif #ifdef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT PyModule_AddIntConstant(m, "HOSTFLAG_ALWAYS_CHECK_SUBJECT", From webhook-mailer at python.org Fri Apr 9 12:22:00 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 16:22:00 -0000 Subject: [Python-checkins] bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Message-ID: https://github.com/python/cpython/commit/54d89a33e0d1b854fd5a72889d6554aeeb4170f0 commit: 54d89a33e0d1b854fd5a72889d6554aeeb4170f0 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T09:21:54-07:00 summary: bpo-43794: OpenSSL 3.0.0: set OP_IGNORE_UNEXPECTED_EOF by default (GH-25309) Signed-off-by: Christian Heimes (cherry picked from commit 6f37ebc61e9e0d13bcb1a2ddb7fc9723c04b6372) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst M Doc/library/ssl.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 0bf0554d94a50..8e6fd2cd8f342 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -886,6 +886,14 @@ Constants .. versionadded:: 3.6 +.. data:: OP_IGNORE_UNEXPECTED_EOF + + Ignore unexpected shutdown of TLS connections. + + This option is only available with OpenSSL 3.0.0 and later. + + .. versionadded:: 3.10 + .. data:: HAS_ALPN Whether the OpenSSL library has built-in support for the *Application-Layer diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 79c97a4d5607d..fdd557c861dc2 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -147,6 +147,7 @@ def data_file(*name): OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0) OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0) +OP_IGNORE_UNEXPECTED_EOF = getattr(ssl, "OP_IGNORE_UNEXPECTED_EOF", 0) # Ubuntu has patched OpenSSL and changed behavior of security level 2 # see https://bugs.python.org/issue41561#msg389003 @@ -1164,7 +1165,8 @@ def test_options(self): # SSLContext also enables these by default default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE | - OP_ENABLE_MIDDLEBOX_COMPAT) + OP_ENABLE_MIDDLEBOX_COMPAT | + OP_IGNORE_UNEXPECTED_EOF) self.assertEqual(default, ctx.options) ctx.options |= ssl.OP_NO_TLSv1 self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) diff --git a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst new file mode 100644 index 0000000000000..64894bdc017e5 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst @@ -0,0 +1 @@ +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3fbb3630886a5..13eecbe5b75a3 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3212,6 +3212,10 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #endif #ifdef SSL_OP_SINGLE_ECDH_USE options |= SSL_OP_SINGLE_ECDH_USE; +#endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + /* Make OpenSSL 3.0.0 behave like 1.1.1 */ + options |= SSL_OP_IGNORE_UNEXPECTED_EOF; #endif SSL_CTX_set_options(self->ctx, options); @@ -6270,6 +6274,10 @@ PyInit__ssl(void) PyModule_AddIntConstant(m, "OP_NO_RENEGOTIATION", SSL_OP_NO_RENEGOTIATION); #endif +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + PyModule_AddIntConstant(m, "OP_IGNORE_UNEXPECTED_EOF", + SSL_OP_IGNORE_UNEXPECTED_EOF); +#endif #ifdef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT PyModule_AddIntConstant(m, "HOSTFLAG_ALWAYS_CHECK_SUBJECT", From webhook-mailer at python.org Fri Apr 9 12:34:51 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 16:34:51 -0000 Subject: [Python-checkins] [3.9] bpo-43788: Generate version specific _ssl_data.h (GH-25300) (GH-25310) Message-ID: https://github.com/python/cpython/commit/299ae9c7a2a169d54921815b9bb41a8f9277a3aa commit: 299ae9c7a2a169d54921815b9bb41a8f9277a3aa branch: 3.9 author: Christian Heimes committer: tiran date: 2021-04-09T18:34:39+02:00 summary: [3.9] bpo-43788: Generate version specific _ssl_data.h (GH-25300) (GH-25310) (cherry picked from commit 150af7543214e1541fa582374502ac1cd70e8eb4) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst A Modules/_ssl_data_111.h A Modules/_ssl_data_300.h M Modules/_ssl.c M Tools/ssl/make_ssl_data.py M Tools/ssl/multissltests.py M setup.py diff --git a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst new file mode 100644 index 0000000000000..ff76256472c6e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst @@ -0,0 +1,4 @@ +The header files for :mod:`ssl` error codes are now OpenSSL +version-specific. Exceptions will now show correct reason and library +codes. The ``make_ssl_data.py`` script has been rewritten to use OpenSSL's +text file with error codes. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 13eecbe5b75a3..4ff948e2ab174 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -135,7 +135,13 @@ static void _PySSLFixErrno(void) { #endif /* Include generated data (error codes) */ +#if (OPENSSL_VERSION_NUMBER >= 0x30000000L) +#include "_ssl_data_300.h" +#elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) +#include "_ssl_data_111.h" +#else #include "_ssl_data.h" +#endif #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) # define OPENSSL_VERSION_1_1 1 diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h new file mode 100644 index 0000000000000..85a2f7ec1561e --- /dev/null +++ b/Modules/_ssl_data_111.h @@ -0,0 +1,6525 @@ +/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2021-04-09T09:36:21.493286 */ +static struct py_ssl_library_code library_codes[] = { +#ifdef ERR_LIB_ASN1 + {"ASN1", ERR_LIB_ASN1}, +#endif +#ifdef ERR_LIB_ASYNC + {"ASYNC", ERR_LIB_ASYNC}, +#endif +#ifdef ERR_LIB_BIO + {"BIO", ERR_LIB_BIO}, +#endif +#ifdef ERR_LIB_BN + {"BN", ERR_LIB_BN}, +#endif +#ifdef ERR_LIB_BUF + {"BUF", ERR_LIB_BUF}, +#endif +#ifdef ERR_LIB_CMS + {"CMS", ERR_LIB_CMS}, +#endif +#ifdef ERR_LIB_COMP + {"COMP", ERR_LIB_COMP}, +#endif +#ifdef ERR_LIB_CONF + {"CONF", ERR_LIB_CONF}, +#endif +#ifdef ERR_LIB_CRYPTO + {"CRYPTO", ERR_LIB_CRYPTO}, +#endif +#ifdef ERR_LIB_CT + {"CT", ERR_LIB_CT}, +#endif +#ifdef ERR_LIB_DH + {"DH", ERR_LIB_DH}, +#endif +#ifdef ERR_LIB_DSA + {"DSA", ERR_LIB_DSA}, +#endif +#ifdef ERR_LIB_DSO + {"DSO", ERR_LIB_DSO}, +#endif +#ifdef ERR_LIB_EC + {"EC", ERR_LIB_EC}, +#endif +#ifdef ERR_LIB_ECDH + {"ECDH", ERR_LIB_ECDH}, +#endif +#ifdef ERR_LIB_ECDSA + {"ECDSA", ERR_LIB_ECDSA}, +#endif +#ifdef ERR_LIB_ENGINE + {"ENGINE", ERR_LIB_ENGINE}, +#endif +#ifdef ERR_LIB_EVP + {"EVP", ERR_LIB_EVP}, +#endif +#ifdef ERR_LIB_FIPS + {"FIPS", ERR_LIB_FIPS}, +#endif +#ifdef ERR_LIB_HMAC + {"HMAC", ERR_LIB_HMAC}, +#endif +#ifdef ERR_LIB_JPAKE + {"JPAKE", ERR_LIB_JPAKE}, +#endif +#ifdef ERR_LIB_KDF + {"KDF", ERR_LIB_KDF}, +#endif +#ifdef ERR_LIB_METH + {"METH", ERR_LIB_METH}, +#endif +#ifdef ERR_LIB_NONE + {"NONE", ERR_LIB_NONE}, +#endif +#ifdef ERR_LIB_OBJ + {"OBJ", ERR_LIB_OBJ}, +#endif +#ifdef ERR_LIB_OCSP + {"OCSP", ERR_LIB_OCSP}, +#endif +#ifdef ERR_LIB_OSSL_STORE + {"OSSL_STORE", ERR_LIB_OSSL_STORE}, +#endif +#ifdef ERR_LIB_PEM + {"PEM", ERR_LIB_PEM}, +#endif +#ifdef ERR_LIB_PKCS12 + {"PKCS12", ERR_LIB_PKCS12}, +#endif +#ifdef ERR_LIB_PKCS7 + {"PKCS7", ERR_LIB_PKCS7}, +#endif +#ifdef ERR_LIB_PROXY + {"PROXY", ERR_LIB_PROXY}, +#endif +#ifdef ERR_LIB_RAND + {"RAND", ERR_LIB_RAND}, +#endif +#ifdef ERR_LIB_RSA + {"RSA", ERR_LIB_RSA}, +#endif +#ifdef ERR_LIB_RSAREF + {"RSAREF", ERR_LIB_RSAREF}, +#endif +#ifdef ERR_LIB_SM2 + {"SM2", ERR_LIB_SM2}, +#endif +#ifdef ERR_LIB_SSL + {"SSL", ERR_LIB_SSL}, +#endif +#ifdef ERR_LIB_SSL2 + {"SSL2", ERR_LIB_SSL2}, +#endif +#ifdef ERR_LIB_SSL23 + {"SSL23", ERR_LIB_SSL23}, +#endif +#ifdef ERR_LIB_SSL3 + {"SSL3", ERR_LIB_SSL3}, +#endif +#ifdef ERR_LIB_SYS + {"SYS", ERR_LIB_SYS}, +#endif +#ifdef ERR_LIB_TS + {"TS", ERR_LIB_TS}, +#endif +#ifdef ERR_LIB_UI + {"UI", ERR_LIB_UI}, +#endif +#ifdef ERR_LIB_USER + {"USER", ERR_LIB_USER}, +#endif +#ifdef ERR_LIB_X509 + {"X509", ERR_LIB_X509}, +#endif +#ifdef ERR_LIB_X509V3 + {"X509V3", ERR_LIB_X509V3}, +#endif + { NULL } +}; + + +static struct py_ssl_error_code error_codes[] = { + #ifdef ASN1_R_ADDING_OBJECT + {"ADDING_OBJECT", ERR_LIB_ASN1, ASN1_R_ADDING_OBJECT}, + #else + {"ADDING_OBJECT", 13, 171}, + #endif + #ifdef ASN1_R_ASN1_PARSE_ERROR + {"ASN1_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_PARSE_ERROR}, + #else + {"ASN1_PARSE_ERROR", 13, 203}, + #endif + #ifdef ASN1_R_ASN1_SIG_PARSE_ERROR + {"ASN1_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_SIG_PARSE_ERROR}, + #else + {"ASN1_SIG_PARSE_ERROR", 13, 204}, + #endif + #ifdef ASN1_R_AUX_ERROR + {"AUX_ERROR", ERR_LIB_ASN1, ASN1_R_AUX_ERROR}, + #else + {"AUX_ERROR", 13, 100}, + #endif + #ifdef ASN1_R_BAD_OBJECT_HEADER + {"BAD_OBJECT_HEADER", ERR_LIB_ASN1, ASN1_R_BAD_OBJECT_HEADER}, + #else + {"BAD_OBJECT_HEADER", 13, 102}, + #endif + #ifdef ASN1_R_BAD_TEMPLATE + {"BAD_TEMPLATE", ERR_LIB_ASN1, ASN1_R_BAD_TEMPLATE}, + #else + {"BAD_TEMPLATE", 13, 230}, + #endif + #ifdef ASN1_R_BMPSTRING_IS_WRONG_LENGTH + {"BMPSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BMPSTRING_IS_WRONG_LENGTH}, + #else + {"BMPSTRING_IS_WRONG_LENGTH", 13, 214}, + #endif + #ifdef ASN1_R_BN_LIB + {"BN_LIB", ERR_LIB_ASN1, ASN1_R_BN_LIB}, + #else + {"BN_LIB", 13, 105}, + #endif + #ifdef ASN1_R_BOOLEAN_IS_WRONG_LENGTH + {"BOOLEAN_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH}, + #else + {"BOOLEAN_IS_WRONG_LENGTH", 13, 106}, + #endif + #ifdef ASN1_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_ASN1, ASN1_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 13, 107}, + #endif + #ifdef ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_ASN1, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 13, 108}, + #endif + #ifdef ASN1_R_CONTEXT_NOT_INITIALISED + {"CONTEXT_NOT_INITIALISED", ERR_LIB_ASN1, ASN1_R_CONTEXT_NOT_INITIALISED}, + #else + {"CONTEXT_NOT_INITIALISED", 13, 217}, + #endif + #ifdef ASN1_R_DATA_IS_WRONG + {"DATA_IS_WRONG", ERR_LIB_ASN1, ASN1_R_DATA_IS_WRONG}, + #else + {"DATA_IS_WRONG", 13, 109}, + #endif + #ifdef ASN1_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_ASN1, ASN1_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 13, 110}, + #endif + #ifdef ASN1_R_DEPTH_EXCEEDED + {"DEPTH_EXCEEDED", ERR_LIB_ASN1, ASN1_R_DEPTH_EXCEEDED}, + #else + {"DEPTH_EXCEEDED", 13, 174}, + #endif + #ifdef ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED}, + #else + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", 13, 198}, + #endif + #ifdef ASN1_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_ASN1, ASN1_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 13, 112}, + #endif + #ifdef ASN1_R_ERROR_GETTING_TIME + {"ERROR_GETTING_TIME", ERR_LIB_ASN1, ASN1_R_ERROR_GETTING_TIME}, + #else + {"ERROR_GETTING_TIME", 13, 173}, + #endif + #ifdef ASN1_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_ASN1, ASN1_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 13, 172}, + #endif + #ifdef ASN1_R_ERROR_SETTING_CIPHER_PARAMS + {"ERROR_SETTING_CIPHER_PARAMS", ERR_LIB_ASN1, ASN1_R_ERROR_SETTING_CIPHER_PARAMS}, + #else + {"ERROR_SETTING_CIPHER_PARAMS", 13, 114}, + #endif + #ifdef ASN1_R_EXPECTING_AN_INTEGER + {"EXPECTING_AN_INTEGER", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_INTEGER}, + #else + {"EXPECTING_AN_INTEGER", 13, 115}, + #endif + #ifdef ASN1_R_EXPECTING_AN_OBJECT + {"EXPECTING_AN_OBJECT", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_OBJECT}, + #else + {"EXPECTING_AN_OBJECT", 13, 116}, + #endif + #ifdef ASN1_R_EXPLICIT_LENGTH_MISMATCH + {"EXPLICIT_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH}, + #else + {"EXPLICIT_LENGTH_MISMATCH", 13, 119}, + #endif + #ifdef ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED + {"EXPLICIT_TAG_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED}, + #else + {"EXPLICIT_TAG_NOT_CONSTRUCTED", 13, 120}, + #endif + #ifdef ASN1_R_FIELD_MISSING + {"FIELD_MISSING", ERR_LIB_ASN1, ASN1_R_FIELD_MISSING}, + #else + {"FIELD_MISSING", 13, 121}, + #endif + #ifdef ASN1_R_FIRST_NUM_TOO_LARGE + {"FIRST_NUM_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_FIRST_NUM_TOO_LARGE}, + #else + {"FIRST_NUM_TOO_LARGE", 13, 122}, + #endif + #ifdef ASN1_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 13, 123}, + #endif + #ifdef ASN1_R_ILLEGAL_BITSTRING_FORMAT + {"ILLEGAL_BITSTRING_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT}, + #else + {"ILLEGAL_BITSTRING_FORMAT", 13, 175}, + #endif + #ifdef ASN1_R_ILLEGAL_BOOLEAN + {"ILLEGAL_BOOLEAN", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BOOLEAN}, + #else + {"ILLEGAL_BOOLEAN", 13, 176}, + #endif + #ifdef ASN1_R_ILLEGAL_CHARACTERS + {"ILLEGAL_CHARACTERS", ERR_LIB_ASN1, ASN1_R_ILLEGAL_CHARACTERS}, + #else + {"ILLEGAL_CHARACTERS", 13, 124}, + #endif + #ifdef ASN1_R_ILLEGAL_FORMAT + {"ILLEGAL_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_FORMAT}, + #else + {"ILLEGAL_FORMAT", 13, 177}, + #endif + #ifdef ASN1_R_ILLEGAL_HEX + {"ILLEGAL_HEX", ERR_LIB_ASN1, ASN1_R_ILLEGAL_HEX}, + #else + {"ILLEGAL_HEX", 13, 178}, + #endif + #ifdef ASN1_R_ILLEGAL_IMPLICIT_TAG + {"ILLEGAL_IMPLICIT_TAG", ERR_LIB_ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG}, + #else + {"ILLEGAL_IMPLICIT_TAG", 13, 179}, + #endif + #ifdef ASN1_R_ILLEGAL_INTEGER + {"ILLEGAL_INTEGER", ERR_LIB_ASN1, ASN1_R_ILLEGAL_INTEGER}, + #else + {"ILLEGAL_INTEGER", 13, 180}, + #endif + #ifdef ASN1_R_ILLEGAL_NEGATIVE_VALUE + {"ILLEGAL_NEGATIVE_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NEGATIVE_VALUE}, + #else + {"ILLEGAL_NEGATIVE_VALUE", 13, 226}, + #endif + #ifdef ASN1_R_ILLEGAL_NESTED_TAGGING + {"ILLEGAL_NESTED_TAGGING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING}, + #else + {"ILLEGAL_NESTED_TAGGING", 13, 181}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL + {"ILLEGAL_NULL", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL}, + #else + {"ILLEGAL_NULL", 13, 125}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL_VALUE + {"ILLEGAL_NULL_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL_VALUE}, + #else + {"ILLEGAL_NULL_VALUE", 13, 182}, + #endif + #ifdef ASN1_R_ILLEGAL_OBJECT + {"ILLEGAL_OBJECT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OBJECT}, + #else + {"ILLEGAL_OBJECT", 13, 183}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONAL_ANY + {"ILLEGAL_OPTIONAL_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY}, + #else + {"ILLEGAL_OPTIONAL_ANY", 13, 126}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE}, + #else + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", 13, 170}, + #endif + #ifdef ASN1_R_ILLEGAL_PADDING + {"ILLEGAL_PADDING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_PADDING}, + #else + {"ILLEGAL_PADDING", 13, 221}, + #endif + #ifdef ASN1_R_ILLEGAL_TAGGED_ANY + {"ILLEGAL_TAGGED_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TAGGED_ANY}, + #else + {"ILLEGAL_TAGGED_ANY", 13, 127}, + #endif + #ifdef ASN1_R_ILLEGAL_TIME_VALUE + {"ILLEGAL_TIME_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TIME_VALUE}, + #else + {"ILLEGAL_TIME_VALUE", 13, 184}, + #endif + #ifdef ASN1_R_ILLEGAL_ZERO_CONTENT + {"ILLEGAL_ZERO_CONTENT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_ZERO_CONTENT}, + #else + {"ILLEGAL_ZERO_CONTENT", 13, 222}, + #endif + #ifdef ASN1_R_INTEGER_NOT_ASCII_FORMAT + {"INTEGER_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT}, + #else + {"INTEGER_NOT_ASCII_FORMAT", 13, 185}, + #endif + #ifdef ASN1_R_INTEGER_TOO_LARGE_FOR_LONG + {"INTEGER_TOO_LARGE_FOR_LONG", ERR_LIB_ASN1, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG}, + #else + {"INTEGER_TOO_LARGE_FOR_LONG", 13, 128}, + #endif + #ifdef ASN1_R_INVALID_BIT_STRING_BITS_LEFT + {"INVALID_BIT_STRING_BITS_LEFT", ERR_LIB_ASN1, ASN1_R_INVALID_BIT_STRING_BITS_LEFT}, + #else + {"INVALID_BIT_STRING_BITS_LEFT", 13, 220}, + #endif + #ifdef ASN1_R_INVALID_BMPSTRING_LENGTH + {"INVALID_BMPSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH}, + #else + {"INVALID_BMPSTRING_LENGTH", 13, 129}, + #endif + #ifdef ASN1_R_INVALID_DIGIT + {"INVALID_DIGIT", ERR_LIB_ASN1, ASN1_R_INVALID_DIGIT}, + #else + {"INVALID_DIGIT", 13, 130}, + #endif + #ifdef ASN1_R_INVALID_MIME_TYPE + {"INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_INVALID_MIME_TYPE}, + #else + {"INVALID_MIME_TYPE", 13, 205}, + #endif + #ifdef ASN1_R_INVALID_MODIFIER + {"INVALID_MODIFIER", ERR_LIB_ASN1, ASN1_R_INVALID_MODIFIER}, + #else + {"INVALID_MODIFIER", 13, 186}, + #endif + #ifdef ASN1_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_ASN1, ASN1_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 13, 187}, + #endif + #ifdef ASN1_R_INVALID_OBJECT_ENCODING + {"INVALID_OBJECT_ENCODING", ERR_LIB_ASN1, ASN1_R_INVALID_OBJECT_ENCODING}, + #else + {"INVALID_OBJECT_ENCODING", 13, 216}, + #endif + #ifdef ASN1_R_INVALID_SCRYPT_PARAMETERS + {"INVALID_SCRYPT_PARAMETERS", ERR_LIB_ASN1, ASN1_R_INVALID_SCRYPT_PARAMETERS}, + #else + {"INVALID_SCRYPT_PARAMETERS", 13, 227}, + #endif + #ifdef ASN1_R_INVALID_SEPARATOR + {"INVALID_SEPARATOR", ERR_LIB_ASN1, ASN1_R_INVALID_SEPARATOR}, + #else + {"INVALID_SEPARATOR", 13, 131}, + #endif + #ifdef ASN1_R_INVALID_STRING_TABLE_VALUE + {"INVALID_STRING_TABLE_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE}, + #else + {"INVALID_STRING_TABLE_VALUE", 13, 218}, + #endif + #ifdef ASN1_R_INVALID_UNIVERSALSTRING_LENGTH + {"INVALID_UNIVERSALSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH}, + #else + {"INVALID_UNIVERSALSTRING_LENGTH", 13, 133}, + #endif + #ifdef ASN1_R_INVALID_UTF8STRING + {"INVALID_UTF8STRING", ERR_LIB_ASN1, ASN1_R_INVALID_UTF8STRING}, + #else + {"INVALID_UTF8STRING", 13, 134}, + #endif + #ifdef ASN1_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 13, 219}, + #endif + #ifdef ASN1_R_LIST_ERROR + {"LIST_ERROR", ERR_LIB_ASN1, ASN1_R_LIST_ERROR}, + #else + {"LIST_ERROR", 13, 188}, + #endif + #ifdef ASN1_R_MIME_NO_CONTENT_TYPE + {"MIME_NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_MIME_NO_CONTENT_TYPE}, + #else + {"MIME_NO_CONTENT_TYPE", 13, 206}, + #endif + #ifdef ASN1_R_MIME_PARSE_ERROR + {"MIME_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_PARSE_ERROR}, + #else + {"MIME_PARSE_ERROR", 13, 207}, + #endif + #ifdef ASN1_R_MIME_SIG_PARSE_ERROR + {"MIME_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_SIG_PARSE_ERROR}, + #else + {"MIME_SIG_PARSE_ERROR", 13, 208}, + #endif + #ifdef ASN1_R_MISSING_EOC + {"MISSING_EOC", ERR_LIB_ASN1, ASN1_R_MISSING_EOC}, + #else + {"MISSING_EOC", 13, 137}, + #endif + #ifdef ASN1_R_MISSING_SECOND_NUMBER + {"MISSING_SECOND_NUMBER", ERR_LIB_ASN1, ASN1_R_MISSING_SECOND_NUMBER}, + #else + {"MISSING_SECOND_NUMBER", 13, 138}, + #endif + #ifdef ASN1_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_ASN1, ASN1_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 13, 189}, + #endif + #ifdef ASN1_R_MSTRING_NOT_UNIVERSAL + {"MSTRING_NOT_UNIVERSAL", ERR_LIB_ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL}, + #else + {"MSTRING_NOT_UNIVERSAL", 13, 139}, + #endif + #ifdef ASN1_R_MSTRING_WRONG_TAG + {"MSTRING_WRONG_TAG", ERR_LIB_ASN1, ASN1_R_MSTRING_WRONG_TAG}, + #else + {"MSTRING_WRONG_TAG", 13, 140}, + #endif + #ifdef ASN1_R_NESTED_ASN1_STRING + {"NESTED_ASN1_STRING", ERR_LIB_ASN1, ASN1_R_NESTED_ASN1_STRING}, + #else + {"NESTED_ASN1_STRING", 13, 197}, + #endif + #ifdef ASN1_R_NESTED_TOO_DEEP + {"NESTED_TOO_DEEP", ERR_LIB_ASN1, ASN1_R_NESTED_TOO_DEEP}, + #else + {"NESTED_TOO_DEEP", 13, 201}, + #endif + #ifdef ASN1_R_NON_HEX_CHARACTERS + {"NON_HEX_CHARACTERS", ERR_LIB_ASN1, ASN1_R_NON_HEX_CHARACTERS}, + #else + {"NON_HEX_CHARACTERS", 13, 141}, + #endif + #ifdef ASN1_R_NOT_ASCII_FORMAT + {"NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_NOT_ASCII_FORMAT}, + #else + {"NOT_ASCII_FORMAT", 13, 190}, + #endif + #ifdef ASN1_R_NOT_ENOUGH_DATA + {"NOT_ENOUGH_DATA", ERR_LIB_ASN1, ASN1_R_NOT_ENOUGH_DATA}, + #else + {"NOT_ENOUGH_DATA", 13, 142}, + #endif + #ifdef ASN1_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 13, 209}, + #endif + #ifdef ASN1_R_NO_MATCHING_CHOICE_TYPE + {"NO_MATCHING_CHOICE_TYPE", ERR_LIB_ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE}, + #else + {"NO_MATCHING_CHOICE_TYPE", 13, 143}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BODY_FAILURE + {"NO_MULTIPART_BODY_FAILURE", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BODY_FAILURE}, + #else + {"NO_MULTIPART_BODY_FAILURE", 13, 210}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BOUNDARY + {"NO_MULTIPART_BOUNDARY", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BOUNDARY}, + #else + {"NO_MULTIPART_BOUNDARY", 13, 211}, + #endif + #ifdef ASN1_R_NO_SIG_CONTENT_TYPE + {"NO_SIG_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_SIG_CONTENT_TYPE}, + #else + {"NO_SIG_CONTENT_TYPE", 13, 212}, + #endif + #ifdef ASN1_R_NULL_IS_WRONG_LENGTH + {"NULL_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_NULL_IS_WRONG_LENGTH}, + #else + {"NULL_IS_WRONG_LENGTH", 13, 144}, + #endif + #ifdef ASN1_R_OBJECT_NOT_ASCII_FORMAT + {"OBJECT_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT}, + #else + {"OBJECT_NOT_ASCII_FORMAT", 13, 191}, + #endif + #ifdef ASN1_R_ODD_NUMBER_OF_CHARS + {"ODD_NUMBER_OF_CHARS", ERR_LIB_ASN1, ASN1_R_ODD_NUMBER_OF_CHARS}, + #else + {"ODD_NUMBER_OF_CHARS", 13, 145}, + #endif + #ifdef ASN1_R_SECOND_NUMBER_TOO_LARGE + {"SECOND_NUMBER_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_SECOND_NUMBER_TOO_LARGE}, + #else + {"SECOND_NUMBER_TOO_LARGE", 13, 147}, + #endif + #ifdef ASN1_R_SEQUENCE_LENGTH_MISMATCH + {"SEQUENCE_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH}, + #else + {"SEQUENCE_LENGTH_MISMATCH", 13, 148}, + #endif + #ifdef ASN1_R_SEQUENCE_NOT_CONSTRUCTED + {"SEQUENCE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED}, + #else + {"SEQUENCE_NOT_CONSTRUCTED", 13, 149}, + #endif + #ifdef ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG + {"SEQUENCE_OR_SET_NEEDS_CONFIG", ERR_LIB_ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG}, + #else + {"SEQUENCE_OR_SET_NEEDS_CONFIG", 13, 192}, + #endif + #ifdef ASN1_R_SHORT_LINE + {"SHORT_LINE", ERR_LIB_ASN1, ASN1_R_SHORT_LINE}, + #else + {"SHORT_LINE", 13, 150}, + #endif + #ifdef ASN1_R_SIG_INVALID_MIME_TYPE + {"SIG_INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_SIG_INVALID_MIME_TYPE}, + #else + {"SIG_INVALID_MIME_TYPE", 13, 213}, + #endif + #ifdef ASN1_R_STREAMING_NOT_SUPPORTED + {"STREAMING_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_STREAMING_NOT_SUPPORTED}, + #else + {"STREAMING_NOT_SUPPORTED", 13, 202}, + #endif + #ifdef ASN1_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_ASN1, ASN1_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 13, 151}, + #endif + #ifdef ASN1_R_STRING_TOO_SHORT + {"STRING_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_STRING_TOO_SHORT}, + #else + {"STRING_TOO_SHORT", 13, 152}, + #endif + #ifdef ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_ASN1, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 13, 154}, + #endif + #ifdef ASN1_R_TIME_NOT_ASCII_FORMAT + {"TIME_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT}, + #else + {"TIME_NOT_ASCII_FORMAT", 13, 193}, + #endif + #ifdef ASN1_R_TOO_LARGE + {"TOO_LARGE", ERR_LIB_ASN1, ASN1_R_TOO_LARGE}, + #else + {"TOO_LARGE", 13, 223}, + #endif + #ifdef ASN1_R_TOO_LONG + {"TOO_LONG", ERR_LIB_ASN1, ASN1_R_TOO_LONG}, + #else + {"TOO_LONG", 13, 155}, + #endif + #ifdef ASN1_R_TOO_SMALL + {"TOO_SMALL", ERR_LIB_ASN1, ASN1_R_TOO_SMALL}, + #else + {"TOO_SMALL", 13, 224}, + #endif + #ifdef ASN1_R_TYPE_NOT_CONSTRUCTED + {"TYPE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED}, + #else + {"TYPE_NOT_CONSTRUCTED", 13, 156}, + #endif + #ifdef ASN1_R_TYPE_NOT_PRIMITIVE + {"TYPE_NOT_PRIMITIVE", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_PRIMITIVE}, + #else + {"TYPE_NOT_PRIMITIVE", 13, 195}, + #endif + #ifdef ASN1_R_UNEXPECTED_EOC + {"UNEXPECTED_EOC", ERR_LIB_ASN1, ASN1_R_UNEXPECTED_EOC}, + #else + {"UNEXPECTED_EOC", 13, 159}, + #endif + #ifdef ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH + {"UNIVERSALSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH}, + #else + {"UNIVERSALSTRING_IS_WRONG_LENGTH", 13, 215}, + #endif + #ifdef ASN1_R_UNKNOWN_FORMAT + {"UNKNOWN_FORMAT", ERR_LIB_ASN1, ASN1_R_UNKNOWN_FORMAT}, + #else + {"UNKNOWN_FORMAT", 13, 160}, + #endif + #ifdef ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", 13, 161}, + #endif + #ifdef ASN1_R_UNKNOWN_OBJECT_TYPE + {"UNKNOWN_OBJECT_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_OBJECT_TYPE}, + #else + {"UNKNOWN_OBJECT_TYPE", 13, 162}, + #endif + #ifdef ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE + {"UNKNOWN_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE}, + #else + {"UNKNOWN_PUBLIC_KEY_TYPE", 13, 163}, + #endif + #ifdef ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM + {"UNKNOWN_SIGNATURE_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM}, + #else + {"UNKNOWN_SIGNATURE_ALGORITHM", 13, 199}, + #endif + #ifdef ASN1_R_UNKNOWN_TAG + {"UNKNOWN_TAG", ERR_LIB_ASN1, ASN1_R_UNKNOWN_TAG}, + #else + {"UNKNOWN_TAG", 13, 194}, + #endif + #ifdef ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE}, + #else + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", 13, 164}, + #endif + #ifdef ASN1_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 13, 228}, + #endif + #ifdef ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 13, 167}, + #endif + #ifdef ASN1_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 13, 196}, + #endif + #ifdef ASN1_R_WRONG_INTEGER_TYPE + {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, + #else + {"WRONG_INTEGER_TYPE", 13, 225}, + #endif + #ifdef ASN1_R_WRONG_PUBLIC_KEY_TYPE + {"WRONG_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_PUBLIC_KEY_TYPE}, + #else + {"WRONG_PUBLIC_KEY_TYPE", 13, 200}, + #endif + #ifdef ASN1_R_WRONG_TAG + {"WRONG_TAG", ERR_LIB_ASN1, ASN1_R_WRONG_TAG}, + #else + {"WRONG_TAG", 13, 168}, + #endif + #ifdef ASYNC_R_FAILED_TO_SET_POOL + {"FAILED_TO_SET_POOL", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SET_POOL}, + #else + {"FAILED_TO_SET_POOL", 51, 101}, + #endif + #ifdef ASYNC_R_FAILED_TO_SWAP_CONTEXT + {"FAILED_TO_SWAP_CONTEXT", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SWAP_CONTEXT}, + #else + {"FAILED_TO_SWAP_CONTEXT", 51, 102}, + #endif + #ifdef ASYNC_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ASYNC, ASYNC_R_INIT_FAILED}, + #else + {"INIT_FAILED", 51, 105}, + #endif + #ifdef ASYNC_R_INVALID_POOL_SIZE + {"INVALID_POOL_SIZE", ERR_LIB_ASYNC, ASYNC_R_INVALID_POOL_SIZE}, + #else + {"INVALID_POOL_SIZE", 51, 103}, + #endif + #ifdef BIO_R_ACCEPT_ERROR + {"ACCEPT_ERROR", ERR_LIB_BIO, BIO_R_ACCEPT_ERROR}, + #else + {"ACCEPT_ERROR", 32, 100}, + #endif + #ifdef BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET + {"ADDRINFO_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET}, + #else + {"ADDRINFO_ADDR_IS_NOT_AF_INET", 32, 141}, + #endif + #ifdef BIO_R_AMBIGUOUS_HOST_OR_SERVICE + {"AMBIGUOUS_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_AMBIGUOUS_HOST_OR_SERVICE}, + #else + {"AMBIGUOUS_HOST_OR_SERVICE", 32, 129}, + #endif + #ifdef BIO_R_BAD_FOPEN_MODE + {"BAD_FOPEN_MODE", ERR_LIB_BIO, BIO_R_BAD_FOPEN_MODE}, + #else + {"BAD_FOPEN_MODE", 32, 101}, + #endif + #ifdef BIO_R_BROKEN_PIPE + {"BROKEN_PIPE", ERR_LIB_BIO, BIO_R_BROKEN_PIPE}, + #else + {"BROKEN_PIPE", 32, 124}, + #endif + #ifdef BIO_R_CONNECT_ERROR + {"CONNECT_ERROR", ERR_LIB_BIO, BIO_R_CONNECT_ERROR}, + #else + {"CONNECT_ERROR", 32, 103}, + #endif + #ifdef BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET}, + #else + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", 32, 107}, + #endif + #ifdef BIO_R_GETSOCKNAME_ERROR + {"GETSOCKNAME_ERROR", ERR_LIB_BIO, BIO_R_GETSOCKNAME_ERROR}, + #else + {"GETSOCKNAME_ERROR", 32, 132}, + #endif + #ifdef BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS + {"GETSOCKNAME_TRUNCATED_ADDRESS", ERR_LIB_BIO, BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS}, + #else + {"GETSOCKNAME_TRUNCATED_ADDRESS", 32, 133}, + #endif + #ifdef BIO_R_GETTING_SOCKTYPE + {"GETTING_SOCKTYPE", ERR_LIB_BIO, BIO_R_GETTING_SOCKTYPE}, + #else + {"GETTING_SOCKTYPE", 32, 134}, + #endif + #ifdef BIO_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_BIO, BIO_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 32, 125}, + #endif + #ifdef BIO_R_INVALID_SOCKET + {"INVALID_SOCKET", ERR_LIB_BIO, BIO_R_INVALID_SOCKET}, + #else + {"INVALID_SOCKET", 32, 135}, + #endif + #ifdef BIO_R_IN_USE + {"IN_USE", ERR_LIB_BIO, BIO_R_IN_USE}, + #else + {"IN_USE", 32, 123}, + #endif + #ifdef BIO_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_BIO, BIO_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 32, 102}, + #endif + #ifdef BIO_R_LISTEN_V6_ONLY + {"LISTEN_V6_ONLY", ERR_LIB_BIO, BIO_R_LISTEN_V6_ONLY}, + #else + {"LISTEN_V6_ONLY", 32, 136}, + #endif + #ifdef BIO_R_LOOKUP_RETURNED_NOTHING + {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, + #else + {"LOOKUP_RETURNED_NOTHING", 32, 142}, + #endif + #ifdef BIO_R_MALFORMED_HOST_OR_SERVICE + {"MALFORMED_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_MALFORMED_HOST_OR_SERVICE}, + #else + {"MALFORMED_HOST_OR_SERVICE", 32, 130}, + #endif + #ifdef BIO_R_NBIO_CONNECT_ERROR + {"NBIO_CONNECT_ERROR", ERR_LIB_BIO, BIO_R_NBIO_CONNECT_ERROR}, + #else + {"NBIO_CONNECT_ERROR", 32, 110}, + #endif + #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, + #else + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", 32, 143}, + #endif + #ifdef BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED}, + #else + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", 32, 144}, + #endif + #ifdef BIO_R_NO_PORT_DEFINED + {"NO_PORT_DEFINED", ERR_LIB_BIO, BIO_R_NO_PORT_DEFINED}, + #else + {"NO_PORT_DEFINED", 32, 113}, + #endif + #ifdef BIO_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_BIO, BIO_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 32, 128}, + #endif + #ifdef BIO_R_NULL_PARAMETER + {"NULL_PARAMETER", ERR_LIB_BIO, BIO_R_NULL_PARAMETER}, + #else + {"NULL_PARAMETER", 32, 115}, + #endif + #ifdef BIO_R_UNABLE_TO_BIND_SOCKET + {"UNABLE_TO_BIND_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_BIND_SOCKET}, + #else + {"UNABLE_TO_BIND_SOCKET", 32, 117}, + #endif + #ifdef BIO_R_UNABLE_TO_CREATE_SOCKET + {"UNABLE_TO_CREATE_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_CREATE_SOCKET}, + #else + {"UNABLE_TO_CREATE_SOCKET", 32, 118}, + #endif + #ifdef BIO_R_UNABLE_TO_KEEPALIVE + {"UNABLE_TO_KEEPALIVE", ERR_LIB_BIO, BIO_R_UNABLE_TO_KEEPALIVE}, + #else + {"UNABLE_TO_KEEPALIVE", 32, 137}, + #endif + #ifdef BIO_R_UNABLE_TO_LISTEN_SOCKET + {"UNABLE_TO_LISTEN_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_LISTEN_SOCKET}, + #else + {"UNABLE_TO_LISTEN_SOCKET", 32, 119}, + #endif + #ifdef BIO_R_UNABLE_TO_NODELAY + {"UNABLE_TO_NODELAY", ERR_LIB_BIO, BIO_R_UNABLE_TO_NODELAY}, + #else + {"UNABLE_TO_NODELAY", 32, 138}, + #endif + #ifdef BIO_R_UNABLE_TO_REUSEADDR + {"UNABLE_TO_REUSEADDR", ERR_LIB_BIO, BIO_R_UNABLE_TO_REUSEADDR}, + #else + {"UNABLE_TO_REUSEADDR", 32, 139}, + #endif + #ifdef BIO_R_UNAVAILABLE_IP_FAMILY + {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, + #else + {"UNAVAILABLE_IP_FAMILY", 32, 145}, + #endif + #ifdef BIO_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_BIO, BIO_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 32, 120}, + #endif + #ifdef BIO_R_UNKNOWN_INFO_TYPE + {"UNKNOWN_INFO_TYPE", ERR_LIB_BIO, BIO_R_UNKNOWN_INFO_TYPE}, + #else + {"UNKNOWN_INFO_TYPE", 32, 140}, + #endif + #ifdef BIO_R_UNSUPPORTED_IP_FAMILY + {"UNSUPPORTED_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_IP_FAMILY}, + #else + {"UNSUPPORTED_IP_FAMILY", 32, 146}, + #endif + #ifdef BIO_R_UNSUPPORTED_METHOD + {"UNSUPPORTED_METHOD", ERR_LIB_BIO, BIO_R_UNSUPPORTED_METHOD}, + #else + {"UNSUPPORTED_METHOD", 32, 121}, + #endif + #ifdef BIO_R_UNSUPPORTED_PROTOCOL_FAMILY + {"UNSUPPORTED_PROTOCOL_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY}, + #else + {"UNSUPPORTED_PROTOCOL_FAMILY", 32, 131}, + #endif + #ifdef BIO_R_WRITE_TO_READ_ONLY_BIO + {"WRITE_TO_READ_ONLY_BIO", ERR_LIB_BIO, BIO_R_WRITE_TO_READ_ONLY_BIO}, + #else + {"WRITE_TO_READ_ONLY_BIO", 32, 126}, + #endif + #ifdef BIO_R_WSASTARTUP + {"WSASTARTUP", ERR_LIB_BIO, BIO_R_WSASTARTUP}, + #else + {"WSASTARTUP", 32, 122}, + #endif + #ifdef BN_R_ARG2_LT_ARG3 + {"ARG2_LT_ARG3", ERR_LIB_BN, BN_R_ARG2_LT_ARG3}, + #else + {"ARG2_LT_ARG3", 3, 100}, + #endif + #ifdef BN_R_BAD_RECIPROCAL + {"BAD_RECIPROCAL", ERR_LIB_BN, BN_R_BAD_RECIPROCAL}, + #else + {"BAD_RECIPROCAL", 3, 101}, + #endif + #ifdef BN_R_BIGNUM_TOO_LONG + {"BIGNUM_TOO_LONG", ERR_LIB_BN, BN_R_BIGNUM_TOO_LONG}, + #else + {"BIGNUM_TOO_LONG", 3, 114}, + #endif + #ifdef BN_R_BITS_TOO_SMALL + {"BITS_TOO_SMALL", ERR_LIB_BN, BN_R_BITS_TOO_SMALL}, + #else + {"BITS_TOO_SMALL", 3, 118}, + #endif + #ifdef BN_R_CALLED_WITH_EVEN_MODULUS + {"CALLED_WITH_EVEN_MODULUS", ERR_LIB_BN, BN_R_CALLED_WITH_EVEN_MODULUS}, + #else + {"CALLED_WITH_EVEN_MODULUS", 3, 102}, + #endif + #ifdef BN_R_DIV_BY_ZERO + {"DIV_BY_ZERO", ERR_LIB_BN, BN_R_DIV_BY_ZERO}, + #else + {"DIV_BY_ZERO", 3, 103}, + #endif + #ifdef BN_R_ENCODING_ERROR + {"ENCODING_ERROR", ERR_LIB_BN, BN_R_ENCODING_ERROR}, + #else + {"ENCODING_ERROR", 3, 104}, + #endif + #ifdef BN_R_EXPAND_ON_STATIC_BIGNUM_DATA + {"EXPAND_ON_STATIC_BIGNUM_DATA", ERR_LIB_BN, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA}, + #else + {"EXPAND_ON_STATIC_BIGNUM_DATA", 3, 105}, + #endif + #ifdef BN_R_INPUT_NOT_REDUCED + {"INPUT_NOT_REDUCED", ERR_LIB_BN, BN_R_INPUT_NOT_REDUCED}, + #else + {"INPUT_NOT_REDUCED", 3, 110}, + #endif + #ifdef BN_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_BN, BN_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 3, 106}, + #endif + #ifdef BN_R_INVALID_RANGE + {"INVALID_RANGE", ERR_LIB_BN, BN_R_INVALID_RANGE}, + #else + {"INVALID_RANGE", 3, 115}, + #endif + #ifdef BN_R_INVALID_SHIFT + {"INVALID_SHIFT", ERR_LIB_BN, BN_R_INVALID_SHIFT}, + #else + {"INVALID_SHIFT", 3, 119}, + #endif + #ifdef BN_R_NOT_A_SQUARE + {"NOT_A_SQUARE", ERR_LIB_BN, BN_R_NOT_A_SQUARE}, + #else + {"NOT_A_SQUARE", 3, 111}, + #endif + #ifdef BN_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_BN, BN_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 3, 107}, + #endif + #ifdef BN_R_NO_INVERSE + {"NO_INVERSE", ERR_LIB_BN, BN_R_NO_INVERSE}, + #else + {"NO_INVERSE", 3, 108}, + #endif + #ifdef BN_R_NO_SOLUTION + {"NO_SOLUTION", ERR_LIB_BN, BN_R_NO_SOLUTION}, + #else + {"NO_SOLUTION", 3, 116}, + #endif + #ifdef BN_R_PRIVATE_KEY_TOO_LARGE + {"PRIVATE_KEY_TOO_LARGE", ERR_LIB_BN, BN_R_PRIVATE_KEY_TOO_LARGE}, + #else + {"PRIVATE_KEY_TOO_LARGE", 3, 117}, + #endif + #ifdef BN_R_P_IS_NOT_PRIME + {"P_IS_NOT_PRIME", ERR_LIB_BN, BN_R_P_IS_NOT_PRIME}, + #else + {"P_IS_NOT_PRIME", 3, 112}, + #endif + #ifdef BN_R_TOO_MANY_ITERATIONS + {"TOO_MANY_ITERATIONS", ERR_LIB_BN, BN_R_TOO_MANY_ITERATIONS}, + #else + {"TOO_MANY_ITERATIONS", 3, 113}, + #endif + #ifdef BN_R_TOO_MANY_TEMPORARY_VARIABLES + {"TOO_MANY_TEMPORARY_VARIABLES", ERR_LIB_BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES}, + #else + {"TOO_MANY_TEMPORARY_VARIABLES", 3, 109}, + #endif + #ifdef CMS_R_ADD_SIGNER_ERROR + {"ADD_SIGNER_ERROR", ERR_LIB_CMS, CMS_R_ADD_SIGNER_ERROR}, + #else + {"ADD_SIGNER_ERROR", 46, 99}, + #endif + #ifdef CMS_R_ATTRIBUTE_ERROR + {"ATTRIBUTE_ERROR", ERR_LIB_CMS, CMS_R_ATTRIBUTE_ERROR}, + #else + {"ATTRIBUTE_ERROR", 46, 161}, + #endif + #ifdef CMS_R_CERTIFICATE_ALREADY_PRESENT + {"CERTIFICATE_ALREADY_PRESENT", ERR_LIB_CMS, CMS_R_CERTIFICATE_ALREADY_PRESENT}, + #else + {"CERTIFICATE_ALREADY_PRESENT", 46, 175}, + #endif + #ifdef CMS_R_CERTIFICATE_HAS_NO_KEYID + {"CERTIFICATE_HAS_NO_KEYID", ERR_LIB_CMS, CMS_R_CERTIFICATE_HAS_NO_KEYID}, + #else + {"CERTIFICATE_HAS_NO_KEYID", 46, 160}, + #endif + #ifdef CMS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 46, 100}, + #endif + #ifdef CMS_R_CIPHER_INITIALISATION_ERROR + {"CIPHER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_INITIALISATION_ERROR}, + #else + {"CIPHER_INITIALISATION_ERROR", 46, 101}, + #endif + #ifdef CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR + {"CIPHER_PARAMETER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR}, + #else + {"CIPHER_PARAMETER_INITIALISATION_ERROR", 46, 102}, + #endif + #ifdef CMS_R_CMS_DATAFINAL_ERROR + {"CMS_DATAFINAL_ERROR", ERR_LIB_CMS, CMS_R_CMS_DATAFINAL_ERROR}, + #else + {"CMS_DATAFINAL_ERROR", 46, 103}, + #endif + #ifdef CMS_R_CMS_LIB + {"CMS_LIB", ERR_LIB_CMS, CMS_R_CMS_LIB}, + #else + {"CMS_LIB", 46, 104}, + #endif + #ifdef CMS_R_CONTENTIDENTIFIER_MISMATCH + {"CONTENTIDENTIFIER_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENTIDENTIFIER_MISMATCH}, + #else + {"CONTENTIDENTIFIER_MISMATCH", 46, 170}, + #endif + #ifdef CMS_R_CONTENT_NOT_FOUND + {"CONTENT_NOT_FOUND", ERR_LIB_CMS, CMS_R_CONTENT_NOT_FOUND}, + #else + {"CONTENT_NOT_FOUND", 46, 105}, + #endif + #ifdef CMS_R_CONTENT_TYPE_MISMATCH + {"CONTENT_TYPE_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_MISMATCH}, + #else + {"CONTENT_TYPE_MISMATCH", 46, 171}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA}, + #else + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", 46, 106}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA}, + #else + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", 46, 107}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA + {"CONTENT_TYPE_NOT_SIGNED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA}, + #else + {"CONTENT_TYPE_NOT_SIGNED_DATA", 46, 108}, + #endif + #ifdef CMS_R_CONTENT_VERIFY_ERROR + {"CONTENT_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CONTENT_VERIFY_ERROR}, + #else + {"CONTENT_VERIFY_ERROR", 46, 109}, + #endif + #ifdef CMS_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_CMS, CMS_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 46, 110}, + #endif + #ifdef CMS_R_CTRL_FAILURE + {"CTRL_FAILURE", ERR_LIB_CMS, CMS_R_CTRL_FAILURE}, + #else + {"CTRL_FAILURE", 46, 111}, + #endif + #ifdef CMS_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_CMS, CMS_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 46, 112}, + #endif + #ifdef CMS_R_ERROR_GETTING_PUBLIC_KEY + {"ERROR_GETTING_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_ERROR_GETTING_PUBLIC_KEY}, + #else + {"ERROR_GETTING_PUBLIC_KEY", 46, 113}, + #endif + #ifdef CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", ERR_LIB_CMS, CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE}, + #else + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", 46, 114}, + #endif + #ifdef CMS_R_ERROR_SETTING_KEY + {"ERROR_SETTING_KEY", ERR_LIB_CMS, CMS_R_ERROR_SETTING_KEY}, + #else + {"ERROR_SETTING_KEY", 46, 115}, + #endif + #ifdef CMS_R_ERROR_SETTING_RECIPIENTINFO + {"ERROR_SETTING_RECIPIENTINFO", ERR_LIB_CMS, CMS_R_ERROR_SETTING_RECIPIENTINFO}, + #else + {"ERROR_SETTING_RECIPIENTINFO", 46, 116}, + #endif + #ifdef CMS_R_INVALID_ENCRYPTED_KEY_LENGTH + {"INVALID_ENCRYPTED_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_ENCRYPTED_KEY_LENGTH}, + #else + {"INVALID_ENCRYPTED_KEY_LENGTH", 46, 117}, + #endif + #ifdef CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER + {"INVALID_KEY_ENCRYPTION_PARAMETER", ERR_LIB_CMS, CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER}, + #else + {"INVALID_KEY_ENCRYPTION_PARAMETER", 46, 176}, + #endif + #ifdef CMS_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 46, 118}, + #endif + #ifdef CMS_R_MD_BIO_INIT_ERROR + {"MD_BIO_INIT_ERROR", ERR_LIB_CMS, CMS_R_MD_BIO_INIT_ERROR}, + #else + {"MD_BIO_INIT_ERROR", 46, 119}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", 46, 120}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_WRONG_LENGTH + {"MESSAGEDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_WRONG_LENGTH", 46, 121}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_ERROR + {"MSGSIGDIGEST_ERROR", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_ERROR}, + #else + {"MSGSIGDIGEST_ERROR", 46, 172}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE + {"MSGSIGDIGEST_VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE}, + #else + {"MSGSIGDIGEST_VERIFICATION_FAILURE", 46, 162}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_WRONG_LENGTH + {"MSGSIGDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_WRONG_LENGTH}, + #else + {"MSGSIGDIGEST_WRONG_LENGTH", 46, 163}, + #endif + #ifdef CMS_R_NEED_ONE_SIGNER + {"NEED_ONE_SIGNER", ERR_LIB_CMS, CMS_R_NEED_ONE_SIGNER}, + #else + {"NEED_ONE_SIGNER", 46, 164}, + #endif + #ifdef CMS_R_NOT_A_SIGNED_RECEIPT + {"NOT_A_SIGNED_RECEIPT", ERR_LIB_CMS, CMS_R_NOT_A_SIGNED_RECEIPT}, + #else + {"NOT_A_SIGNED_RECEIPT", 46, 165}, + #endif + #ifdef CMS_R_NOT_ENCRYPTED_DATA + {"NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_NOT_ENCRYPTED_DATA}, + #else + {"NOT_ENCRYPTED_DATA", 46, 122}, + #endif + #ifdef CMS_R_NOT_KEK + {"NOT_KEK", ERR_LIB_CMS, CMS_R_NOT_KEK}, + #else + {"NOT_KEK", 46, 123}, + #endif + #ifdef CMS_R_NOT_KEY_AGREEMENT + {"NOT_KEY_AGREEMENT", ERR_LIB_CMS, CMS_R_NOT_KEY_AGREEMENT}, + #else + {"NOT_KEY_AGREEMENT", 46, 181}, + #endif + #ifdef CMS_R_NOT_KEY_TRANSPORT + {"NOT_KEY_TRANSPORT", ERR_LIB_CMS, CMS_R_NOT_KEY_TRANSPORT}, + #else + {"NOT_KEY_TRANSPORT", 46, 124}, + #endif + #ifdef CMS_R_NOT_PWRI + {"NOT_PWRI", ERR_LIB_CMS, CMS_R_NOT_PWRI}, + #else + {"NOT_PWRI", 46, 177}, + #endif + #ifdef CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_CMS, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 46, 125}, + #endif + #ifdef CMS_R_NO_CIPHER + {"NO_CIPHER", ERR_LIB_CMS, CMS_R_NO_CIPHER}, + #else + {"NO_CIPHER", 46, 126}, + #endif + #ifdef CMS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_CMS, CMS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 46, 127}, + #endif + #ifdef CMS_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 46, 173}, + #endif + #ifdef CMS_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_CMS, CMS_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 46, 128}, + #endif + #ifdef CMS_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_CMS, CMS_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 46, 129}, + #endif + #ifdef CMS_R_NO_KEY + {"NO_KEY", ERR_LIB_CMS, CMS_R_NO_KEY}, + #else + {"NO_KEY", 46, 130}, + #endif + #ifdef CMS_R_NO_KEY_OR_CERT + {"NO_KEY_OR_CERT", ERR_LIB_CMS, CMS_R_NO_KEY_OR_CERT}, + #else + {"NO_KEY_OR_CERT", 46, 174}, + #endif + #ifdef CMS_R_NO_MATCHING_DIGEST + {"NO_MATCHING_DIGEST", ERR_LIB_CMS, CMS_R_NO_MATCHING_DIGEST}, + #else + {"NO_MATCHING_DIGEST", 46, 131}, + #endif + #ifdef CMS_R_NO_MATCHING_RECIPIENT + {"NO_MATCHING_RECIPIENT", ERR_LIB_CMS, CMS_R_NO_MATCHING_RECIPIENT}, + #else + {"NO_MATCHING_RECIPIENT", 46, 132}, + #endif + #ifdef CMS_R_NO_MATCHING_SIGNATURE + {"NO_MATCHING_SIGNATURE", ERR_LIB_CMS, CMS_R_NO_MATCHING_SIGNATURE}, + #else + {"NO_MATCHING_SIGNATURE", 46, 166}, + #endif + #ifdef CMS_R_NO_MSGSIGDIGEST + {"NO_MSGSIGDIGEST", ERR_LIB_CMS, CMS_R_NO_MSGSIGDIGEST}, + #else + {"NO_MSGSIGDIGEST", 46, 167}, + #endif + #ifdef CMS_R_NO_PASSWORD + {"NO_PASSWORD", ERR_LIB_CMS, CMS_R_NO_PASSWORD}, + #else + {"NO_PASSWORD", 46, 178}, + #endif + #ifdef CMS_R_NO_PRIVATE_KEY + {"NO_PRIVATE_KEY", ERR_LIB_CMS, CMS_R_NO_PRIVATE_KEY}, + #else + {"NO_PRIVATE_KEY", 46, 133}, + #endif + #ifdef CMS_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 46, 134}, + #endif + #ifdef CMS_R_NO_RECEIPT_REQUEST + {"NO_RECEIPT_REQUEST", ERR_LIB_CMS, CMS_R_NO_RECEIPT_REQUEST}, + #else + {"NO_RECEIPT_REQUEST", 46, 168}, + #endif + #ifdef CMS_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_CMS, CMS_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 46, 135}, + #endif + #ifdef CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_CMS, CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 46, 136}, + #endif + #ifdef CMS_R_RECEIPT_DECODE_ERROR + {"RECEIPT_DECODE_ERROR", ERR_LIB_CMS, CMS_R_RECEIPT_DECODE_ERROR}, + #else + {"RECEIPT_DECODE_ERROR", 46, 169}, + #endif + #ifdef CMS_R_RECIPIENT_ERROR + {"RECIPIENT_ERROR", ERR_LIB_CMS, CMS_R_RECIPIENT_ERROR}, + #else + {"RECIPIENT_ERROR", 46, 137}, + #endif + #ifdef CMS_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_CMS, CMS_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 46, 138}, + #endif + #ifdef CMS_R_SIGNFINAL_ERROR + {"SIGNFINAL_ERROR", ERR_LIB_CMS, CMS_R_SIGNFINAL_ERROR}, + #else + {"SIGNFINAL_ERROR", 46, 139}, + #endif + #ifdef CMS_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_CMS, CMS_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 46, 140}, + #endif + #ifdef CMS_R_STORE_INIT_ERROR + {"STORE_INIT_ERROR", ERR_LIB_CMS, CMS_R_STORE_INIT_ERROR}, + #else + {"STORE_INIT_ERROR", 46, 141}, + #endif + #ifdef CMS_R_TYPE_NOT_COMPRESSED_DATA + {"TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_COMPRESSED_DATA}, + #else + {"TYPE_NOT_COMPRESSED_DATA", 46, 142}, + #endif + #ifdef CMS_R_TYPE_NOT_DATA + {"TYPE_NOT_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DATA}, + #else + {"TYPE_NOT_DATA", 46, 143}, + #endif + #ifdef CMS_R_TYPE_NOT_DIGESTED_DATA + {"TYPE_NOT_DIGESTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DIGESTED_DATA}, + #else + {"TYPE_NOT_DIGESTED_DATA", 46, 144}, + #endif + #ifdef CMS_R_TYPE_NOT_ENCRYPTED_DATA + {"TYPE_NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENCRYPTED_DATA}, + #else + {"TYPE_NOT_ENCRYPTED_DATA", 46, 145}, + #endif + #ifdef CMS_R_TYPE_NOT_ENVELOPED_DATA + {"TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENVELOPED_DATA}, + #else + {"TYPE_NOT_ENVELOPED_DATA", 46, 146}, + #endif + #ifdef CMS_R_UNABLE_TO_FINALIZE_CONTEXT + {"UNABLE_TO_FINALIZE_CONTEXT", ERR_LIB_CMS, CMS_R_UNABLE_TO_FINALIZE_CONTEXT}, + #else + {"UNABLE_TO_FINALIZE_CONTEXT", 46, 147}, + #endif + #ifdef CMS_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_CMS, CMS_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 46, 148}, + #endif + #ifdef CMS_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_CMS, CMS_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 46, 149}, + #endif + #ifdef CMS_R_UNKNOWN_ID + {"UNKNOWN_ID", ERR_LIB_CMS, CMS_R_UNKNOWN_ID}, + #else + {"UNKNOWN_ID", 46, 150}, + #endif + #ifdef CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 46, 151}, + #endif + #ifdef CMS_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 46, 152}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEK_ALGORITHM + {"UNSUPPORTED_KEK_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEK_ALGORITHM}, + #else + {"UNSUPPORTED_KEK_ALGORITHM", 46, 153}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM}, + #else + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", 46, 179}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + {"UNSUPPORTED_RECIPIENTINFO_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE}, + #else + {"UNSUPPORTED_RECIPIENTINFO_TYPE", 46, 155}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENT_TYPE + {"UNSUPPORTED_RECIPIENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENT_TYPE}, + #else + {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, + #endif + #ifdef CMS_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 46, 156}, + #endif + #ifdef CMS_R_UNWRAP_ERROR + {"UNWRAP_ERROR", ERR_LIB_CMS, CMS_R_UNWRAP_ERROR}, + #else + {"UNWRAP_ERROR", 46, 157}, + #endif + #ifdef CMS_R_UNWRAP_FAILURE + {"UNWRAP_FAILURE", ERR_LIB_CMS, CMS_R_UNWRAP_FAILURE}, + #else + {"UNWRAP_FAILURE", 46, 180}, + #endif + #ifdef CMS_R_VERIFICATION_FAILURE + {"VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_VERIFICATION_FAILURE}, + #else + {"VERIFICATION_FAILURE", 46, 158}, + #endif + #ifdef CMS_R_WRAP_ERROR + {"WRAP_ERROR", ERR_LIB_CMS, CMS_R_WRAP_ERROR}, + #else + {"WRAP_ERROR", 46, 159}, + #endif + #ifdef COMP_R_ZLIB_DEFLATE_ERROR + {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, + #else + {"ZLIB_DEFLATE_ERROR", 41, 99}, + #endif + #ifdef COMP_R_ZLIB_INFLATE_ERROR + {"ZLIB_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_INFLATE_ERROR}, + #else + {"ZLIB_INFLATE_ERROR", 41, 100}, + #endif + #ifdef COMP_R_ZLIB_NOT_SUPPORTED + {"ZLIB_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZLIB_NOT_SUPPORTED}, + #else + {"ZLIB_NOT_SUPPORTED", 41, 101}, + #endif + #ifdef CONF_R_ERROR_LOADING_DSO + {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, + #else + {"ERROR_LOADING_DSO", 14, 110}, + #endif + #ifdef CONF_R_LIST_CANNOT_BE_NULL + {"LIST_CANNOT_BE_NULL", ERR_LIB_CONF, CONF_R_LIST_CANNOT_BE_NULL}, + #else + {"LIST_CANNOT_BE_NULL", 14, 115}, + #endif + #ifdef CONF_R_MISSING_CLOSE_SQUARE_BRACKET + {"MISSING_CLOSE_SQUARE_BRACKET", ERR_LIB_CONF, CONF_R_MISSING_CLOSE_SQUARE_BRACKET}, + #else + {"MISSING_CLOSE_SQUARE_BRACKET", 14, 100}, + #endif + #ifdef CONF_R_MISSING_EQUAL_SIGN + {"MISSING_EQUAL_SIGN", ERR_LIB_CONF, CONF_R_MISSING_EQUAL_SIGN}, + #else + {"MISSING_EQUAL_SIGN", 14, 101}, + #endif + #ifdef CONF_R_MISSING_INIT_FUNCTION + {"MISSING_INIT_FUNCTION", ERR_LIB_CONF, CONF_R_MISSING_INIT_FUNCTION}, + #else + {"MISSING_INIT_FUNCTION", 14, 112}, + #endif + #ifdef CONF_R_MODULE_INITIALIZATION_ERROR + {"MODULE_INITIALIZATION_ERROR", ERR_LIB_CONF, CONF_R_MODULE_INITIALIZATION_ERROR}, + #else + {"MODULE_INITIALIZATION_ERROR", 14, 109}, + #endif + #ifdef CONF_R_NO_CLOSE_BRACE + {"NO_CLOSE_BRACE", ERR_LIB_CONF, CONF_R_NO_CLOSE_BRACE}, + #else + {"NO_CLOSE_BRACE", 14, 102}, + #endif + #ifdef CONF_R_NO_CONF + {"NO_CONF", ERR_LIB_CONF, CONF_R_NO_CONF}, + #else + {"NO_CONF", 14, 105}, + #endif + #ifdef CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", ERR_LIB_CONF, CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE}, + #else + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", 14, 106}, + #endif + #ifdef CONF_R_NO_SECTION + {"NO_SECTION", ERR_LIB_CONF, CONF_R_NO_SECTION}, + #else + {"NO_SECTION", 14, 107}, + #endif + #ifdef CONF_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_CONF, CONF_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 14, 114}, + #endif + #ifdef CONF_R_NO_VALUE + {"NO_VALUE", ERR_LIB_CONF, CONF_R_NO_VALUE}, + #else + {"NO_VALUE", 14, 108}, + #endif + #ifdef CONF_R_NUMBER_TOO_LARGE + {"NUMBER_TOO_LARGE", ERR_LIB_CONF, CONF_R_NUMBER_TOO_LARGE}, + #else + {"NUMBER_TOO_LARGE", 14, 121}, + #endif + #ifdef CONF_R_RECURSIVE_DIRECTORY_INCLUDE + {"RECURSIVE_DIRECTORY_INCLUDE", ERR_LIB_CONF, CONF_R_RECURSIVE_DIRECTORY_INCLUDE}, + #else + {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 14, 117}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 14, 118}, + #endif + #ifdef CONF_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 14, 119}, + #endif + #ifdef CONF_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 14, 120}, + #endif + #ifdef CONF_R_UNABLE_TO_CREATE_NEW_SECTION + {"UNABLE_TO_CREATE_NEW_SECTION", ERR_LIB_CONF, CONF_R_UNABLE_TO_CREATE_NEW_SECTION}, + #else + {"UNABLE_TO_CREATE_NEW_SECTION", 14, 103}, + #endif + #ifdef CONF_R_UNKNOWN_MODULE_NAME + {"UNKNOWN_MODULE_NAME", ERR_LIB_CONF, CONF_R_UNKNOWN_MODULE_NAME}, + #else + {"UNKNOWN_MODULE_NAME", 14, 113}, + #endif + #ifdef CONF_R_VARIABLE_EXPANSION_TOO_LONG + {"VARIABLE_EXPANSION_TOO_LONG", ERR_LIB_CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG}, + #else + {"VARIABLE_EXPANSION_TOO_LONG", 14, 116}, + #endif + #ifdef CONF_R_VARIABLE_HAS_NO_VALUE + {"VARIABLE_HAS_NO_VALUE", ERR_LIB_CONF, CONF_R_VARIABLE_HAS_NO_VALUE}, + #else + {"VARIABLE_HAS_NO_VALUE", 14, 104}, + #endif + #ifdef CRYPTO_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_CRYPTO, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 15, 101}, + #endif + #ifdef CRYPTO_R_ILLEGAL_HEX_DIGIT + {"ILLEGAL_HEX_DIGIT", ERR_LIB_CRYPTO, CRYPTO_R_ILLEGAL_HEX_DIGIT}, + #else + {"ILLEGAL_HEX_DIGIT", 15, 102}, + #endif + #ifdef CRYPTO_R_ODD_NUMBER_OF_DIGITS + {"ODD_NUMBER_OF_DIGITS", ERR_LIB_CRYPTO, CRYPTO_R_ODD_NUMBER_OF_DIGITS}, + #else + {"ODD_NUMBER_OF_DIGITS", 15, 103}, + #endif + #ifdef CT_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_CT, CT_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 50, 108}, + #endif + #ifdef CT_R_INVALID_LOG_ID_LENGTH + {"INVALID_LOG_ID_LENGTH", ERR_LIB_CT, CT_R_INVALID_LOG_ID_LENGTH}, + #else + {"INVALID_LOG_ID_LENGTH", 50, 100}, + #endif + #ifdef CT_R_LOG_CONF_INVALID + {"LOG_CONF_INVALID", ERR_LIB_CT, CT_R_LOG_CONF_INVALID}, + #else + {"LOG_CONF_INVALID", 50, 109}, + #endif + #ifdef CT_R_LOG_CONF_INVALID_KEY + {"LOG_CONF_INVALID_KEY", ERR_LIB_CT, CT_R_LOG_CONF_INVALID_KEY}, + #else + {"LOG_CONF_INVALID_KEY", 50, 110}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_DESCRIPTION + {"LOG_CONF_MISSING_DESCRIPTION", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_DESCRIPTION}, + #else + {"LOG_CONF_MISSING_DESCRIPTION", 50, 111}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_KEY + {"LOG_CONF_MISSING_KEY", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_KEY}, + #else + {"LOG_CONF_MISSING_KEY", 50, 112}, + #endif + #ifdef CT_R_LOG_KEY_INVALID + {"LOG_KEY_INVALID", ERR_LIB_CT, CT_R_LOG_KEY_INVALID}, + #else + {"LOG_KEY_INVALID", 50, 113}, + #endif + #ifdef CT_R_SCT_FUTURE_TIMESTAMP + {"SCT_FUTURE_TIMESTAMP", ERR_LIB_CT, CT_R_SCT_FUTURE_TIMESTAMP}, + #else + {"SCT_FUTURE_TIMESTAMP", 50, 116}, + #endif + #ifdef CT_R_SCT_INVALID + {"SCT_INVALID", ERR_LIB_CT, CT_R_SCT_INVALID}, + #else + {"SCT_INVALID", 50, 104}, + #endif + #ifdef CT_R_SCT_INVALID_SIGNATURE + {"SCT_INVALID_SIGNATURE", ERR_LIB_CT, CT_R_SCT_INVALID_SIGNATURE}, + #else + {"SCT_INVALID_SIGNATURE", 50, 107}, + #endif + #ifdef CT_R_SCT_LIST_INVALID + {"SCT_LIST_INVALID", ERR_LIB_CT, CT_R_SCT_LIST_INVALID}, + #else + {"SCT_LIST_INVALID", 50, 105}, + #endif + #ifdef CT_R_SCT_LOG_ID_MISMATCH + {"SCT_LOG_ID_MISMATCH", ERR_LIB_CT, CT_R_SCT_LOG_ID_MISMATCH}, + #else + {"SCT_LOG_ID_MISMATCH", 50, 114}, + #endif + #ifdef CT_R_SCT_NOT_SET + {"SCT_NOT_SET", ERR_LIB_CT, CT_R_SCT_NOT_SET}, + #else + {"SCT_NOT_SET", 50, 106}, + #endif + #ifdef CT_R_SCT_UNSUPPORTED_VERSION + {"SCT_UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_SCT_UNSUPPORTED_VERSION}, + #else + {"SCT_UNSUPPORTED_VERSION", 50, 115}, + #endif + #ifdef CT_R_UNRECOGNIZED_SIGNATURE_NID + {"UNRECOGNIZED_SIGNATURE_NID", ERR_LIB_CT, CT_R_UNRECOGNIZED_SIGNATURE_NID}, + #else + {"UNRECOGNIZED_SIGNATURE_NID", 50, 101}, + #endif + #ifdef CT_R_UNSUPPORTED_ENTRY_TYPE + {"UNSUPPORTED_ENTRY_TYPE", ERR_LIB_CT, CT_R_UNSUPPORTED_ENTRY_TYPE}, + #else + {"UNSUPPORTED_ENTRY_TYPE", 50, 102}, + #endif + #ifdef CT_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 50, 103}, + #endif + #ifdef DH_R_BAD_GENERATOR + {"BAD_GENERATOR", ERR_LIB_DH, DH_R_BAD_GENERATOR}, + #else + {"BAD_GENERATOR", 5, 101}, + #endif + #ifdef DH_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DH, DH_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 5, 109}, + #endif + #ifdef DH_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DH, DH_R_BN_ERROR}, + #else + {"BN_ERROR", 5, 106}, + #endif + #ifdef DH_R_CHECK_INVALID_J_VALUE + {"CHECK_INVALID_J_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_J_VALUE}, + #else + {"CHECK_INVALID_J_VALUE", 5, 115}, + #endif + #ifdef DH_R_CHECK_INVALID_Q_VALUE + {"CHECK_INVALID_Q_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_Q_VALUE}, + #else + {"CHECK_INVALID_Q_VALUE", 5, 116}, + #endif + #ifdef DH_R_CHECK_PUBKEY_INVALID + {"CHECK_PUBKEY_INVALID", ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID}, + #else + {"CHECK_PUBKEY_INVALID", 5, 122}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_LARGE + {"CHECK_PUBKEY_TOO_LARGE", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_LARGE}, + #else + {"CHECK_PUBKEY_TOO_LARGE", 5, 123}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_SMALL + {"CHECK_PUBKEY_TOO_SMALL", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_SMALL}, + #else + {"CHECK_PUBKEY_TOO_SMALL", 5, 124}, + #endif + #ifdef DH_R_CHECK_P_NOT_PRIME + {"CHECK_P_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_PRIME}, + #else + {"CHECK_P_NOT_PRIME", 5, 117}, + #endif + #ifdef DH_R_CHECK_P_NOT_SAFE_PRIME + {"CHECK_P_NOT_SAFE_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_SAFE_PRIME}, + #else + {"CHECK_P_NOT_SAFE_PRIME", 5, 118}, + #endif + #ifdef DH_R_CHECK_Q_NOT_PRIME + {"CHECK_Q_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_Q_NOT_PRIME}, + #else + {"CHECK_Q_NOT_PRIME", 5, 119}, + #endif + #ifdef DH_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DH, DH_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 5, 104}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NAME + {"INVALID_PARAMETER_NAME", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NAME}, + #else + {"INVALID_PARAMETER_NAME", 5, 110}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NID + {"INVALID_PARAMETER_NID", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NID}, + #else + {"INVALID_PARAMETER_NID", 5, 114}, + #endif + #ifdef DH_R_INVALID_PUBKEY + {"INVALID_PUBKEY", ERR_LIB_DH, DH_R_INVALID_PUBKEY}, + #else + {"INVALID_PUBKEY", 5, 102}, + #endif + #ifdef DH_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 5, 112}, + #endif + #ifdef DH_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_DH, DH_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 5, 108}, + #endif + #ifdef DH_R_MISSING_PUBKEY + {"MISSING_PUBKEY", ERR_LIB_DH, DH_R_MISSING_PUBKEY}, + #else + {"MISSING_PUBKEY", 5, 125}, + #endif + #ifdef DH_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 5, 103}, + #endif + #ifdef DH_R_NOT_SUITABLE_GENERATOR + {"NOT_SUITABLE_GENERATOR", ERR_LIB_DH, DH_R_NOT_SUITABLE_GENERATOR}, + #else + {"NOT_SUITABLE_GENERATOR", 5, 120}, + #endif + #ifdef DH_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DH, DH_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 5, 107}, + #endif + #ifdef DH_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_DH, DH_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 5, 100}, + #endif + #ifdef DH_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DH, DH_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 5, 105}, + #endif + #ifdef DH_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_DH, DH_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 5, 111}, + #endif + #ifdef DH_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 5, 113}, + #endif + #ifdef DH_R_UNABLE_TO_CHECK_GENERATOR + {"UNABLE_TO_CHECK_GENERATOR", ERR_LIB_DH, DH_R_UNABLE_TO_CHECK_GENERATOR}, + #else + {"UNABLE_TO_CHECK_GENERATOR", 5, 121}, + #endif + #ifdef DSA_R_BAD_Q_VALUE + {"BAD_Q_VALUE", ERR_LIB_DSA, DSA_R_BAD_Q_VALUE}, + #else + {"BAD_Q_VALUE", 10, 102}, + #endif + #ifdef DSA_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DSA, DSA_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 10, 108}, + #endif + #ifdef DSA_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DSA, DSA_R_BN_ERROR}, + #else + {"BN_ERROR", 10, 109}, + #endif + #ifdef DSA_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DSA, DSA_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 10, 104}, + #endif + #ifdef DSA_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_DSA, DSA_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 10, 106}, + #endif + #ifdef DSA_R_INVALID_PARAMETERS + {"INVALID_PARAMETERS", ERR_LIB_DSA, DSA_R_INVALID_PARAMETERS}, + #else + {"INVALID_PARAMETERS", 10, 112}, + #endif + #ifdef DSA_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_DSA, DSA_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 10, 101}, + #endif + #ifdef DSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_DSA, DSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 10, 111}, + #endif + #ifdef DSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DSA, DSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 10, 103}, + #endif + #ifdef DSA_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DSA, DSA_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 10, 107}, + #endif + #ifdef DSA_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DSA, DSA_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 10, 105}, + #endif + #ifdef DSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_DSA, DSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 10, 113}, + #endif + #ifdef DSA_R_SEED_LEN_SMALL + {"SEED_LEN_SMALL", ERR_LIB_DSA, DSA_R_SEED_LEN_SMALL}, + #else + {"SEED_LEN_SMALL", 10, 110}, + #endif + #ifdef DSO_R_CTRL_FAILED + {"CTRL_FAILED", ERR_LIB_DSO, DSO_R_CTRL_FAILED}, + #else + {"CTRL_FAILED", 37, 100}, + #endif + #ifdef DSO_R_DSO_ALREADY_LOADED + {"DSO_ALREADY_LOADED", ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED}, + #else + {"DSO_ALREADY_LOADED", 37, 110}, + #endif + #ifdef DSO_R_EMPTY_FILE_STRUCTURE + {"EMPTY_FILE_STRUCTURE", ERR_LIB_DSO, DSO_R_EMPTY_FILE_STRUCTURE}, + #else + {"EMPTY_FILE_STRUCTURE", 37, 113}, + #endif + #ifdef DSO_R_FAILURE + {"FAILURE", ERR_LIB_DSO, DSO_R_FAILURE}, + #else + {"FAILURE", 37, 114}, + #endif + #ifdef DSO_R_FILENAME_TOO_BIG + {"FILENAME_TOO_BIG", ERR_LIB_DSO, DSO_R_FILENAME_TOO_BIG}, + #else + {"FILENAME_TOO_BIG", 37, 101}, + #endif + #ifdef DSO_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_DSO, DSO_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 37, 102}, + #endif + #ifdef DSO_R_INCORRECT_FILE_SYNTAX + {"INCORRECT_FILE_SYNTAX", ERR_LIB_DSO, DSO_R_INCORRECT_FILE_SYNTAX}, + #else + {"INCORRECT_FILE_SYNTAX", 37, 115}, + #endif + #ifdef DSO_R_LOAD_FAILED + {"LOAD_FAILED", ERR_LIB_DSO, DSO_R_LOAD_FAILED}, + #else + {"LOAD_FAILED", 37, 103}, + #endif + #ifdef DSO_R_NAME_TRANSLATION_FAILED + {"NAME_TRANSLATION_FAILED", ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED}, + #else + {"NAME_TRANSLATION_FAILED", 37, 109}, + #endif + #ifdef DSO_R_NO_FILENAME + {"NO_FILENAME", ERR_LIB_DSO, DSO_R_NO_FILENAME}, + #else + {"NO_FILENAME", 37, 111}, + #endif + #ifdef DSO_R_NULL_HANDLE + {"NULL_HANDLE", ERR_LIB_DSO, DSO_R_NULL_HANDLE}, + #else + {"NULL_HANDLE", 37, 104}, + #endif + #ifdef DSO_R_SET_FILENAME_FAILED + {"SET_FILENAME_FAILED", ERR_LIB_DSO, DSO_R_SET_FILENAME_FAILED}, + #else + {"SET_FILENAME_FAILED", 37, 112}, + #endif + #ifdef DSO_R_STACK_ERROR + {"STACK_ERROR", ERR_LIB_DSO, DSO_R_STACK_ERROR}, + #else + {"STACK_ERROR", 37, 105}, + #endif + #ifdef DSO_R_SYM_FAILURE + {"SYM_FAILURE", ERR_LIB_DSO, DSO_R_SYM_FAILURE}, + #else + {"SYM_FAILURE", 37, 106}, + #endif + #ifdef DSO_R_UNLOAD_FAILED + {"UNLOAD_FAILED", ERR_LIB_DSO, DSO_R_UNLOAD_FAILED}, + #else + {"UNLOAD_FAILED", 37, 107}, + #endif + #ifdef DSO_R_UNSUPPORTED + {"UNSUPPORTED", ERR_LIB_DSO, DSO_R_UNSUPPORTED}, + #else + {"UNSUPPORTED", 37, 108}, + #endif + #ifdef EC_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_EC, EC_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 16, 115}, + #endif + #ifdef EC_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_EC, EC_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 16, 156}, + #endif + #ifdef EC_R_BIGNUM_OUT_OF_RANGE + {"BIGNUM_OUT_OF_RANGE", ERR_LIB_EC, EC_R_BIGNUM_OUT_OF_RANGE}, + #else + {"BIGNUM_OUT_OF_RANGE", 16, 144}, + #endif + #ifdef EC_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EC, EC_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 16, 100}, + #endif + #ifdef EC_R_CANNOT_INVERT + {"CANNOT_INVERT", ERR_LIB_EC, EC_R_CANNOT_INVERT}, + #else + {"CANNOT_INVERT", 16, 165}, + #endif + #ifdef EC_R_COORDINATES_OUT_OF_RANGE + {"COORDINATES_OUT_OF_RANGE", ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE}, + #else + {"COORDINATES_OUT_OF_RANGE", 16, 146}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDH + {"CURVE_DOES_NOT_SUPPORT_ECDH", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDH", 16, 160}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING + {"CURVE_DOES_NOT_SUPPORT_SIGNING", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING}, + #else + {"CURVE_DOES_NOT_SUPPORT_SIGNING", 16, 159}, + #endif + #ifdef EC_R_D2I_ECPKPARAMETERS_FAILURE + {"D2I_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_D2I_ECPKPARAMETERS_FAILURE}, + #else + {"D2I_ECPKPARAMETERS_FAILURE", 16, 117}, + #endif + #ifdef EC_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EC, EC_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 16, 142}, + #endif + #ifdef EC_R_DISCRIMINANT_IS_ZERO + {"DISCRIMINANT_IS_ZERO", ERR_LIB_EC, EC_R_DISCRIMINANT_IS_ZERO}, + #else + {"DISCRIMINANT_IS_ZERO", 16, 118}, + #endif + #ifdef EC_R_EC_GROUP_NEW_BY_NAME_FAILURE + {"EC_GROUP_NEW_BY_NAME_FAILURE", ERR_LIB_EC, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE}, + #else + {"EC_GROUP_NEW_BY_NAME_FAILURE", 16, 119}, + #endif + #ifdef EC_R_FIELD_TOO_LARGE + {"FIELD_TOO_LARGE", ERR_LIB_EC, EC_R_FIELD_TOO_LARGE}, + #else + {"FIELD_TOO_LARGE", 16, 143}, + #endif + #ifdef EC_R_GF2M_NOT_SUPPORTED + {"GF2M_NOT_SUPPORTED", ERR_LIB_EC, EC_R_GF2M_NOT_SUPPORTED}, + #else + {"GF2M_NOT_SUPPORTED", 16, 147}, + #endif + #ifdef EC_R_GROUP2PKPARAMETERS_FAILURE + {"GROUP2PKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_GROUP2PKPARAMETERS_FAILURE}, + #else + {"GROUP2PKPARAMETERS_FAILURE", 16, 120}, + #endif + #ifdef EC_R_I2D_ECPKPARAMETERS_FAILURE + {"I2D_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_I2D_ECPKPARAMETERS_FAILURE}, + #else + {"I2D_ECPKPARAMETERS_FAILURE", 16, 121}, + #endif + #ifdef EC_R_INCOMPATIBLE_OBJECTS + {"INCOMPATIBLE_OBJECTS", ERR_LIB_EC, EC_R_INCOMPATIBLE_OBJECTS}, + #else + {"INCOMPATIBLE_OBJECTS", 16, 101}, + #endif + #ifdef EC_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_EC, EC_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 16, 112}, + #endif + #ifdef EC_R_INVALID_COMPRESSED_POINT + {"INVALID_COMPRESSED_POINT", ERR_LIB_EC, EC_R_INVALID_COMPRESSED_POINT}, + #else + {"INVALID_COMPRESSED_POINT", 16, 110}, + #endif + #ifdef EC_R_INVALID_COMPRESSION_BIT + {"INVALID_COMPRESSION_BIT", ERR_LIB_EC, EC_R_INVALID_COMPRESSION_BIT}, + #else + {"INVALID_COMPRESSION_BIT", 16, 109}, + #endif + #ifdef EC_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_EC, EC_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 16, 141}, + #endif + #ifdef EC_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EC, EC_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 16, 151}, + #endif + #ifdef EC_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_EC, EC_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 16, 138}, + #endif + #ifdef EC_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_EC, EC_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 16, 102}, + #endif + #ifdef EC_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_EC, EC_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 16, 103}, + #endif + #ifdef EC_R_INVALID_FORM + {"INVALID_FORM", ERR_LIB_EC, EC_R_INVALID_FORM}, + #else + {"INVALID_FORM", 16, 104}, + #endif + #ifdef EC_R_INVALID_GROUP_ORDER + {"INVALID_GROUP_ORDER", ERR_LIB_EC, EC_R_INVALID_GROUP_ORDER}, + #else + {"INVALID_GROUP_ORDER", 16, 122}, + #endif + #ifdef EC_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EC, EC_R_INVALID_KEY}, + #else + {"INVALID_KEY", 16, 116}, + #endif + #ifdef EC_R_INVALID_OUTPUT_LENGTH + {"INVALID_OUTPUT_LENGTH", ERR_LIB_EC, EC_R_INVALID_OUTPUT_LENGTH}, + #else + {"INVALID_OUTPUT_LENGTH", 16, 161}, + #endif + #ifdef EC_R_INVALID_PEER_KEY + {"INVALID_PEER_KEY", ERR_LIB_EC, EC_R_INVALID_PEER_KEY}, + #else + {"INVALID_PEER_KEY", 16, 133}, + #endif + #ifdef EC_R_INVALID_PENTANOMIAL_BASIS + {"INVALID_PENTANOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_PENTANOMIAL_BASIS}, + #else + {"INVALID_PENTANOMIAL_BASIS", 16, 132}, + #endif + #ifdef EC_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_EC, EC_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 16, 123}, + #endif + #ifdef EC_R_INVALID_TRINOMIAL_BASIS + {"INVALID_TRINOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_TRINOMIAL_BASIS}, + #else + {"INVALID_TRINOMIAL_BASIS", 16, 137}, + #endif + #ifdef EC_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_EC, EC_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 16, 148}, + #endif + #ifdef EC_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_EC, EC_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 16, 140}, + #endif + #ifdef EC_R_LADDER_POST_FAILURE + {"LADDER_POST_FAILURE", ERR_LIB_EC, EC_R_LADDER_POST_FAILURE}, + #else + {"LADDER_POST_FAILURE", 16, 136}, + #endif + #ifdef EC_R_LADDER_PRE_FAILURE + {"LADDER_PRE_FAILURE", ERR_LIB_EC, EC_R_LADDER_PRE_FAILURE}, + #else + {"LADDER_PRE_FAILURE", 16, 153}, + #endif + #ifdef EC_R_LADDER_STEP_FAILURE + {"LADDER_STEP_FAILURE", ERR_LIB_EC, EC_R_LADDER_STEP_FAILURE}, + #else + {"LADDER_STEP_FAILURE", 16, 162}, + #endif + #ifdef EC_R_MISSING_OID + {"MISSING_OID", ERR_LIB_EC, EC_R_MISSING_OID}, + #else + {"MISSING_OID", 16, 167}, + #endif + #ifdef EC_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EC, EC_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 16, 124}, + #endif + #ifdef EC_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_EC, EC_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 16, 125}, + #endif + #ifdef EC_R_NEED_NEW_SETUP_VALUES + {"NEED_NEW_SETUP_VALUES", ERR_LIB_EC, EC_R_NEED_NEW_SETUP_VALUES}, + #else + {"NEED_NEW_SETUP_VALUES", 16, 157}, + #endif + #ifdef EC_R_NOT_A_NIST_PRIME + {"NOT_A_NIST_PRIME", ERR_LIB_EC, EC_R_NOT_A_NIST_PRIME}, + #else + {"NOT_A_NIST_PRIME", 16, 135}, + #endif + #ifdef EC_R_NOT_IMPLEMENTED + {"NOT_IMPLEMENTED", ERR_LIB_EC, EC_R_NOT_IMPLEMENTED}, + #else + {"NOT_IMPLEMENTED", 16, 126}, + #endif + #ifdef EC_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_EC, EC_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 16, 111}, + #endif + #ifdef EC_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_EC, EC_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 16, 139}, + #endif + #ifdef EC_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_EC, EC_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 16, 154}, + #endif + #ifdef EC_R_OPERATION_NOT_SUPPORTED + {"OPERATION_NOT_SUPPORTED", ERR_LIB_EC, EC_R_OPERATION_NOT_SUPPORTED}, + #else + {"OPERATION_NOT_SUPPORTED", 16, 152}, + #endif + #ifdef EC_R_PASSED_NULL_PARAMETER + {"PASSED_NULL_PARAMETER", ERR_LIB_EC, EC_R_PASSED_NULL_PARAMETER}, + #else + {"PASSED_NULL_PARAMETER", 16, 134}, + #endif + #ifdef EC_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_EC, EC_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 16, 149}, + #endif + #ifdef EC_R_PKPARAMETERS2GROUP_FAILURE + {"PKPARAMETERS2GROUP_FAILURE", ERR_LIB_EC, EC_R_PKPARAMETERS2GROUP_FAILURE}, + #else + {"PKPARAMETERS2GROUP_FAILURE", 16, 127}, + #endif + #ifdef EC_R_POINT_ARITHMETIC_FAILURE + {"POINT_ARITHMETIC_FAILURE", ERR_LIB_EC, EC_R_POINT_ARITHMETIC_FAILURE}, + #else + {"POINT_ARITHMETIC_FAILURE", 16, 155}, + #endif + #ifdef EC_R_POINT_AT_INFINITY + {"POINT_AT_INFINITY", ERR_LIB_EC, EC_R_POINT_AT_INFINITY}, + #else + {"POINT_AT_INFINITY", 16, 106}, + #endif + #ifdef EC_R_POINT_COORDINATES_BLIND_FAILURE + {"POINT_COORDINATES_BLIND_FAILURE", ERR_LIB_EC, EC_R_POINT_COORDINATES_BLIND_FAILURE}, + #else + {"POINT_COORDINATES_BLIND_FAILURE", 16, 163}, + #endif + #ifdef EC_R_POINT_IS_NOT_ON_CURVE + {"POINT_IS_NOT_ON_CURVE", ERR_LIB_EC, EC_R_POINT_IS_NOT_ON_CURVE}, + #else + {"POINT_IS_NOT_ON_CURVE", 16, 107}, + #endif + #ifdef EC_R_RANDOM_NUMBER_GENERATION_FAILED + {"RANDOM_NUMBER_GENERATION_FAILED", ERR_LIB_EC, EC_R_RANDOM_NUMBER_GENERATION_FAILED}, + #else + {"RANDOM_NUMBER_GENERATION_FAILED", 16, 158}, + #endif + #ifdef EC_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_EC, EC_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 16, 150}, + #endif + #ifdef EC_R_SLOT_FULL + {"SLOT_FULL", ERR_LIB_EC, EC_R_SLOT_FULL}, + #else + {"SLOT_FULL", 16, 108}, + #endif + #ifdef EC_R_UNDEFINED_GENERATOR + {"UNDEFINED_GENERATOR", ERR_LIB_EC, EC_R_UNDEFINED_GENERATOR}, + #else + {"UNDEFINED_GENERATOR", 16, 113}, + #endif + #ifdef EC_R_UNDEFINED_ORDER + {"UNDEFINED_ORDER", ERR_LIB_EC, EC_R_UNDEFINED_ORDER}, + #else + {"UNDEFINED_ORDER", 16, 128}, + #endif + #ifdef EC_R_UNKNOWN_COFACTOR + {"UNKNOWN_COFACTOR", ERR_LIB_EC, EC_R_UNKNOWN_COFACTOR}, + #else + {"UNKNOWN_COFACTOR", 16, 164}, + #endif + #ifdef EC_R_UNKNOWN_GROUP + {"UNKNOWN_GROUP", ERR_LIB_EC, EC_R_UNKNOWN_GROUP}, + #else + {"UNKNOWN_GROUP", 16, 129}, + #endif + #ifdef EC_R_UNKNOWN_ORDER + {"UNKNOWN_ORDER", ERR_LIB_EC, EC_R_UNKNOWN_ORDER}, + #else + {"UNKNOWN_ORDER", 16, 114}, + #endif + #ifdef EC_R_UNSUPPORTED_FIELD + {"UNSUPPORTED_FIELD", ERR_LIB_EC, EC_R_UNSUPPORTED_FIELD}, + #else + {"UNSUPPORTED_FIELD", 16, 131}, + #endif + #ifdef EC_R_WRONG_CURVE_PARAMETERS + {"WRONG_CURVE_PARAMETERS", ERR_LIB_EC, EC_R_WRONG_CURVE_PARAMETERS}, + #else + {"WRONG_CURVE_PARAMETERS", 16, 145}, + #endif + #ifdef EC_R_WRONG_ORDER + {"WRONG_ORDER", ERR_LIB_EC, EC_R_WRONG_ORDER}, + #else + {"WRONG_ORDER", 16, 130}, + #endif + #ifdef ENGINE_R_ALREADY_LOADED + {"ALREADY_LOADED", ERR_LIB_ENGINE, ENGINE_R_ALREADY_LOADED}, + #else + {"ALREADY_LOADED", 38, 100}, + #endif + #ifdef ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER + {"ARGUMENT_IS_NOT_A_NUMBER", ERR_LIB_ENGINE, ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER}, + #else + {"ARGUMENT_IS_NOT_A_NUMBER", 38, 133}, + #endif + #ifdef ENGINE_R_CMD_NOT_EXECUTABLE + {"CMD_NOT_EXECUTABLE", ERR_LIB_ENGINE, ENGINE_R_CMD_NOT_EXECUTABLE}, + #else + {"CMD_NOT_EXECUTABLE", 38, 134}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_INPUT + {"COMMAND_TAKES_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_INPUT}, + #else + {"COMMAND_TAKES_INPUT", 38, 135}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_NO_INPUT + {"COMMAND_TAKES_NO_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_NO_INPUT}, + #else + {"COMMAND_TAKES_NO_INPUT", 38, 136}, + #endif + #ifdef ENGINE_R_CONFLICTING_ENGINE_ID + {"CONFLICTING_ENGINE_ID", ERR_LIB_ENGINE, ENGINE_R_CONFLICTING_ENGINE_ID}, + #else + {"CONFLICTING_ENGINE_ID", 38, 103}, + #endif + #ifdef ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED + {"CTRL_COMMAND_NOT_IMPLEMENTED", ERR_LIB_ENGINE, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED}, + #else + {"CTRL_COMMAND_NOT_IMPLEMENTED", 38, 119}, + #endif + #ifdef ENGINE_R_DSO_FAILURE + {"DSO_FAILURE", ERR_LIB_ENGINE, ENGINE_R_DSO_FAILURE}, + #else + {"DSO_FAILURE", 38, 104}, + #endif + #ifdef ENGINE_R_DSO_NOT_FOUND + {"DSO_NOT_FOUND", ERR_LIB_ENGINE, ENGINE_R_DSO_NOT_FOUND}, + #else + {"DSO_NOT_FOUND", 38, 132}, + #endif + #ifdef ENGINE_R_ENGINES_SECTION_ERROR + {"ENGINES_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINES_SECTION_ERROR}, + #else + {"ENGINES_SECTION_ERROR", 38, 148}, + #endif + #ifdef ENGINE_R_ENGINE_CONFIGURATION_ERROR + {"ENGINE_CONFIGURATION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_CONFIGURATION_ERROR}, + #else + {"ENGINE_CONFIGURATION_ERROR", 38, 102}, + #endif + #ifdef ENGINE_R_ENGINE_IS_NOT_IN_LIST + {"ENGINE_IS_NOT_IN_LIST", ERR_LIB_ENGINE, ENGINE_R_ENGINE_IS_NOT_IN_LIST}, + #else + {"ENGINE_IS_NOT_IN_LIST", 38, 105}, + #endif + #ifdef ENGINE_R_ENGINE_SECTION_ERROR + {"ENGINE_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_SECTION_ERROR}, + #else + {"ENGINE_SECTION_ERROR", 38, 149}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PRIVATE_KEY + {"FAILED_LOADING_PRIVATE_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PRIVATE_KEY}, + #else + {"FAILED_LOADING_PRIVATE_KEY", 38, 128}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PUBLIC_KEY + {"FAILED_LOADING_PUBLIC_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PUBLIC_KEY}, + #else + {"FAILED_LOADING_PUBLIC_KEY", 38, 129}, + #endif + #ifdef ENGINE_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_ENGINE, ENGINE_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 38, 106}, + #endif + #ifdef ENGINE_R_ID_OR_NAME_MISSING + {"ID_OR_NAME_MISSING", ERR_LIB_ENGINE, ENGINE_R_ID_OR_NAME_MISSING}, + #else + {"ID_OR_NAME_MISSING", 38, 108}, + #endif + #ifdef ENGINE_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ENGINE, ENGINE_R_INIT_FAILED}, + #else + {"INIT_FAILED", 38, 109}, + #endif + #ifdef ENGINE_R_INTERNAL_LIST_ERROR + {"INTERNAL_LIST_ERROR", ERR_LIB_ENGINE, ENGINE_R_INTERNAL_LIST_ERROR}, + #else + {"INTERNAL_LIST_ERROR", 38, 110}, + #endif + #ifdef ENGINE_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_ENGINE, ENGINE_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 38, 143}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NAME + {"INVALID_CMD_NAME", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NAME}, + #else + {"INVALID_CMD_NAME", 38, 137}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NUMBER + {"INVALID_CMD_NUMBER", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NUMBER}, + #else + {"INVALID_CMD_NUMBER", 38, 138}, + #endif + #ifdef ENGINE_R_INVALID_INIT_VALUE + {"INVALID_INIT_VALUE", ERR_LIB_ENGINE, ENGINE_R_INVALID_INIT_VALUE}, + #else + {"INVALID_INIT_VALUE", 38, 151}, + #endif + #ifdef ENGINE_R_INVALID_STRING + {"INVALID_STRING", ERR_LIB_ENGINE, ENGINE_R_INVALID_STRING}, + #else + {"INVALID_STRING", 38, 150}, + #endif + #ifdef ENGINE_R_NOT_INITIALISED + {"NOT_INITIALISED", ERR_LIB_ENGINE, ENGINE_R_NOT_INITIALISED}, + #else + {"NOT_INITIALISED", 38, 117}, + #endif + #ifdef ENGINE_R_NOT_LOADED + {"NOT_LOADED", ERR_LIB_ENGINE, ENGINE_R_NOT_LOADED}, + #else + {"NOT_LOADED", 38, 112}, + #endif + #ifdef ENGINE_R_NO_CONTROL_FUNCTION + {"NO_CONTROL_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_CONTROL_FUNCTION}, + #else + {"NO_CONTROL_FUNCTION", 38, 120}, + #endif + #ifdef ENGINE_R_NO_INDEX + {"NO_INDEX", ERR_LIB_ENGINE, ENGINE_R_NO_INDEX}, + #else + {"NO_INDEX", 38, 144}, + #endif + #ifdef ENGINE_R_NO_LOAD_FUNCTION + {"NO_LOAD_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_LOAD_FUNCTION}, + #else + {"NO_LOAD_FUNCTION", 38, 125}, + #endif + #ifdef ENGINE_R_NO_REFERENCE + {"NO_REFERENCE", ERR_LIB_ENGINE, ENGINE_R_NO_REFERENCE}, + #else + {"NO_REFERENCE", 38, 130}, + #endif + #ifdef ENGINE_R_NO_SUCH_ENGINE + {"NO_SUCH_ENGINE", ERR_LIB_ENGINE, ENGINE_R_NO_SUCH_ENGINE}, + #else + {"NO_SUCH_ENGINE", 38, 116}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_CIPHER + {"UNIMPLEMENTED_CIPHER", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_CIPHER}, + #else + {"UNIMPLEMENTED_CIPHER", 38, 146}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_DIGEST + {"UNIMPLEMENTED_DIGEST", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_DIGEST}, + #else + {"UNIMPLEMENTED_DIGEST", 38, 147}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD}, + #else + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", 38, 101}, + #endif + #ifdef ENGINE_R_VERSION_INCOMPATIBILITY + {"VERSION_INCOMPATIBILITY", ERR_LIB_ENGINE, ENGINE_R_VERSION_INCOMPATIBILITY}, + #else + {"VERSION_INCOMPATIBILITY", 38, 145}, + #endif + #ifdef EVP_R_AES_KEY_SETUP_FAILED + {"AES_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED}, + #else + {"AES_KEY_SETUP_FAILED", 6, 143}, + #endif + #ifdef EVP_R_ARIA_KEY_SETUP_FAILED + {"ARIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_ARIA_KEY_SETUP_FAILED}, + #else + {"ARIA_KEY_SETUP_FAILED", 6, 176}, + #endif + #ifdef EVP_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_EVP, EVP_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 6, 100}, + #endif + #ifdef EVP_R_BAD_KEY_LENGTH + {"BAD_KEY_LENGTH", ERR_LIB_EVP, EVP_R_BAD_KEY_LENGTH}, + #else + {"BAD_KEY_LENGTH", 6, 195}, + #endif + #ifdef EVP_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EVP, EVP_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 6, 155}, + #endif + #ifdef EVP_R_CAMELLIA_KEY_SETUP_FAILED + {"CAMELLIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_CAMELLIA_KEY_SETUP_FAILED}, + #else + {"CAMELLIA_KEY_SETUP_FAILED", 6, 157}, + #endif + #ifdef EVP_R_CIPHER_PARAMETER_ERROR + {"CIPHER_PARAMETER_ERROR", ERR_LIB_EVP, EVP_R_CIPHER_PARAMETER_ERROR}, + #else + {"CIPHER_PARAMETER_ERROR", 6, 122}, + #endif + #ifdef EVP_R_COMMAND_NOT_SUPPORTED + {"COMMAND_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_COMMAND_NOT_SUPPORTED}, + #else + {"COMMAND_NOT_SUPPORTED", 6, 147}, + #endif + #ifdef EVP_R_COPY_ERROR + {"COPY_ERROR", ERR_LIB_EVP, EVP_R_COPY_ERROR}, + #else + {"COPY_ERROR", 6, 173}, + #endif + #ifdef EVP_R_CTRL_NOT_IMPLEMENTED + {"CTRL_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_NOT_IMPLEMENTED}, + #else + {"CTRL_NOT_IMPLEMENTED", 6, 132}, + #endif + #ifdef EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED + {"CTRL_OPERATION_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED}, + #else + {"CTRL_OPERATION_NOT_IMPLEMENTED", 6, 133}, + #endif + #ifdef EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH}, + #else + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", 6, 138}, + #endif + #ifdef EVP_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EVP, EVP_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 6, 114}, + #endif + #ifdef EVP_R_DIFFERENT_KEY_TYPES + {"DIFFERENT_KEY_TYPES", ERR_LIB_EVP, EVP_R_DIFFERENT_KEY_TYPES}, + #else + {"DIFFERENT_KEY_TYPES", 6, 101}, + #endif + #ifdef EVP_R_DIFFERENT_PARAMETERS + {"DIFFERENT_PARAMETERS", ERR_LIB_EVP, EVP_R_DIFFERENT_PARAMETERS}, + #else + {"DIFFERENT_PARAMETERS", 6, 153}, + #endif + #ifdef EVP_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_EVP, EVP_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 6, 165}, + #endif + #ifdef EVP_R_ERROR_SETTING_FIPS_MODE + {"ERROR_SETTING_FIPS_MODE", ERR_LIB_EVP, EVP_R_ERROR_SETTING_FIPS_MODE}, + #else + {"ERROR_SETTING_FIPS_MODE", 6, 166}, + #endif + #ifdef EVP_R_EXPECTING_AN_HMAC_KEY + {"EXPECTING_AN_HMAC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY}, + #else + {"EXPECTING_AN_HMAC_KEY", 6, 174}, + #endif + #ifdef EVP_R_EXPECTING_AN_RSA_KEY + {"EXPECTING_AN_RSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY}, + #else + {"EXPECTING_AN_RSA_KEY", 6, 127}, + #endif + #ifdef EVP_R_EXPECTING_A_DH_KEY + {"EXPECTING_A_DH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DH_KEY}, + #else + {"EXPECTING_A_DH_KEY", 6, 128}, + #endif + #ifdef EVP_R_EXPECTING_A_DSA_KEY + {"EXPECTING_A_DSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DSA_KEY}, + #else + {"EXPECTING_A_DSA_KEY", 6, 129}, + #endif + #ifdef EVP_R_EXPECTING_A_EC_KEY + {"EXPECTING_A_EC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_EC_KEY}, + #else + {"EXPECTING_A_EC_KEY", 6, 142}, + #endif + #ifdef EVP_R_EXPECTING_A_POLY1305_KEY + {"EXPECTING_A_POLY1305_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY}, + #else + {"EXPECTING_A_POLY1305_KEY", 6, 164}, + #endif + #ifdef EVP_R_EXPECTING_A_SIPHASH_KEY + {"EXPECTING_A_SIPHASH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY}, + #else + {"EXPECTING_A_SIPHASH_KEY", 6, 175}, + #endif + #ifdef EVP_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 6, 167}, + #endif + #ifdef EVP_R_GET_RAW_KEY_FAILED + {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, + #else + {"GET_RAW_KEY_FAILED", 6, 182}, + #endif + #ifdef EVP_R_ILLEGAL_SCRYPT_PARAMETERS + {"ILLEGAL_SCRYPT_PARAMETERS", ERR_LIB_EVP, EVP_R_ILLEGAL_SCRYPT_PARAMETERS}, + #else + {"ILLEGAL_SCRYPT_PARAMETERS", 6, 171}, + #endif + #ifdef EVP_R_INITIALIZATION_ERROR + {"INITIALIZATION_ERROR", ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR}, + #else + {"INITIALIZATION_ERROR", 6, 134}, + #endif + #ifdef EVP_R_INPUT_NOT_INITIALIZED + {"INPUT_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_INPUT_NOT_INITIALIZED}, + #else + {"INPUT_NOT_INITIALIZED", 6, 111}, + #endif + #ifdef EVP_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EVP, EVP_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 6, 152}, + #endif + #ifdef EVP_R_INVALID_FIPS_MODE + {"INVALID_FIPS_MODE", ERR_LIB_EVP, EVP_R_INVALID_FIPS_MODE}, + #else + {"INVALID_FIPS_MODE", 6, 168}, + #endif + #ifdef EVP_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 6, 194}, + #endif + #ifdef EVP_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EVP, EVP_R_INVALID_KEY}, + #else + {"INVALID_KEY", 6, 163}, + #endif + #ifdef EVP_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 6, 130}, + #endif + #ifdef EVP_R_INVALID_OPERATION + {"INVALID_OPERATION", ERR_LIB_EVP, EVP_R_INVALID_OPERATION}, + #else + {"INVALID_OPERATION", 6, 148}, + #endif + #ifdef EVP_R_KEYGEN_FAILURE + {"KEYGEN_FAILURE", ERR_LIB_EVP, EVP_R_KEYGEN_FAILURE}, + #else + {"KEYGEN_FAILURE", 6, 120}, + #endif + #ifdef EVP_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 6, 180}, + #endif + #ifdef EVP_R_MEMORY_LIMIT_EXCEEDED + {"MEMORY_LIMIT_EXCEEDED", ERR_LIB_EVP, EVP_R_MEMORY_LIMIT_EXCEEDED}, + #else + {"MEMORY_LIMIT_EXCEEDED", 6, 172}, + #endif + #ifdef EVP_R_MESSAGE_DIGEST_IS_NULL + {"MESSAGE_DIGEST_IS_NULL", ERR_LIB_EVP, EVP_R_MESSAGE_DIGEST_IS_NULL}, + #else + {"MESSAGE_DIGEST_IS_NULL", 6, 159}, + #endif + #ifdef EVP_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 6, 144}, + #endif + #ifdef EVP_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EVP, EVP_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 6, 103}, + #endif + #ifdef EVP_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_EVP, EVP_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 6, 178}, + #endif + #ifdef EVP_R_NO_CIPHER_SET + {"NO_CIPHER_SET", ERR_LIB_EVP, EVP_R_NO_CIPHER_SET}, + #else + {"NO_CIPHER_SET", 6, 131}, + #endif + #ifdef EVP_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_EVP, EVP_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 6, 158}, + #endif + #ifdef EVP_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_EVP, EVP_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 6, 139}, + #endif + #ifdef EVP_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_EVP, EVP_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 6, 154}, + #endif + #ifdef EVP_R_NO_OPERATION_SET + {"NO_OPERATION_SET", ERR_LIB_EVP, EVP_R_NO_OPERATION_SET}, + #else + {"NO_OPERATION_SET", 6, 149}, + #endif + #ifdef EVP_R_ONLY_ONESHOT_SUPPORTED + {"ONLY_ONESHOT_SUPPORTED", ERR_LIB_EVP, EVP_R_ONLY_ONESHOT_SUPPORTED}, + #else + {"ONLY_ONESHOT_SUPPORTED", 6, 177}, + #endif + #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, + #endif + #ifdef EVP_R_OPERATON_NOT_INITIALIZED + {"OPERATON_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_OPERATON_NOT_INITIALIZED}, + #else + {"OPERATON_NOT_INITIALIZED", 6, 151}, + #endif + #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW + {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, + #else + {"OUTPUT_WOULD_OVERFLOW", 6, 184}, + #endif + #ifdef EVP_R_PARTIALLY_OVERLAPPING + {"PARTIALLY_OVERLAPPING", ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING}, + #else + {"PARTIALLY_OVERLAPPING", 6, 162}, + #endif + #ifdef EVP_R_PBKDF2_ERROR + {"PBKDF2_ERROR", ERR_LIB_EVP, EVP_R_PBKDF2_ERROR}, + #else + {"PBKDF2_ERROR", 6, 181}, + #endif + #ifdef EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", ERR_LIB_EVP, EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED}, + #else + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", 6, 179}, + #endif + #ifdef EVP_R_PRIVATE_KEY_DECODE_ERROR + {"PRIVATE_KEY_DECODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_DECODE_ERROR}, + #else + {"PRIVATE_KEY_DECODE_ERROR", 6, 145}, + #endif + #ifdef EVP_R_PRIVATE_KEY_ENCODE_ERROR + {"PRIVATE_KEY_ENCODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_ENCODE_ERROR}, + #else + {"PRIVATE_KEY_ENCODE_ERROR", 6, 146}, + #endif + #ifdef EVP_R_PUBLIC_KEY_NOT_RSA + {"PUBLIC_KEY_NOT_RSA", ERR_LIB_EVP, EVP_R_PUBLIC_KEY_NOT_RSA}, + #else + {"PUBLIC_KEY_NOT_RSA", 6, 106}, + #endif + #ifdef EVP_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 6, 160}, + #endif + #ifdef EVP_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_EVP, EVP_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 6, 161}, + #endif + #ifdef EVP_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 6, 169}, + #endif + #ifdef EVP_R_UNKNOWN_PBE_ALGORITHM + {"UNKNOWN_PBE_ALGORITHM", ERR_LIB_EVP, EVP_R_UNKNOWN_PBE_ALGORITHM}, + #else + {"UNKNOWN_PBE_ALGORITHM", 6, 121}, + #endif + #ifdef EVP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 6, 156}, + #endif + #ifdef EVP_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_EVP, EVP_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 6, 107}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEYLENGTH + {"UNSUPPORTED_KEYLENGTH", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEYLENGTH}, + #else + {"UNSUPPORTED_KEYLENGTH", 6, 123}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION}, + #else + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", 6, 124}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 6, 108}, + #endif + #ifdef EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_EVP, EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 6, 135}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRF + {"UNSUPPORTED_PRF", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRF}, + #else + {"UNSUPPORTED_PRF", 6, 125}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM}, + #else + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", 6, 118}, + #endif + #ifdef EVP_R_UNSUPPORTED_SALT_TYPE + {"UNSUPPORTED_SALT_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_SALT_TYPE}, + #else + {"UNSUPPORTED_SALT_TYPE", 6, 126}, + #endif + #ifdef EVP_R_WRAP_MODE_NOT_ALLOWED + {"WRAP_MODE_NOT_ALLOWED", ERR_LIB_EVP, EVP_R_WRAP_MODE_NOT_ALLOWED}, + #else + {"WRAP_MODE_NOT_ALLOWED", 6, 170}, + #endif + #ifdef EVP_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 6, 109}, + #endif + #ifdef EVP_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 6, 183}, + #endif + #ifdef KDF_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_KDF, KDF_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 52, 100}, + #endif + #ifdef KDF_R_MISSING_ITERATION_COUNT + {"MISSING_ITERATION_COUNT", ERR_LIB_KDF, KDF_R_MISSING_ITERATION_COUNT}, + #else + {"MISSING_ITERATION_COUNT", 52, 109}, + #endif + #ifdef KDF_R_MISSING_KEY + {"MISSING_KEY", ERR_LIB_KDF, KDF_R_MISSING_KEY}, + #else + {"MISSING_KEY", 52, 104}, + #endif + #ifdef KDF_R_MISSING_MESSAGE_DIGEST + {"MISSING_MESSAGE_DIGEST", ERR_LIB_KDF, KDF_R_MISSING_MESSAGE_DIGEST}, + #else + {"MISSING_MESSAGE_DIGEST", 52, 105}, + #endif + #ifdef KDF_R_MISSING_PARAMETER + {"MISSING_PARAMETER", ERR_LIB_KDF, KDF_R_MISSING_PARAMETER}, + #else + {"MISSING_PARAMETER", 52, 101}, + #endif + #ifdef KDF_R_MISSING_PASS + {"MISSING_PASS", ERR_LIB_KDF, KDF_R_MISSING_PASS}, + #else + {"MISSING_PASS", 52, 110}, + #endif + #ifdef KDF_R_MISSING_SALT + {"MISSING_SALT", ERR_LIB_KDF, KDF_R_MISSING_SALT}, + #else + {"MISSING_SALT", 52, 111}, + #endif + #ifdef KDF_R_MISSING_SECRET + {"MISSING_SECRET", ERR_LIB_KDF, KDF_R_MISSING_SECRET}, + #else + {"MISSING_SECRET", 52, 107}, + #endif + #ifdef KDF_R_MISSING_SEED + {"MISSING_SEED", ERR_LIB_KDF, KDF_R_MISSING_SEED}, + #else + {"MISSING_SEED", 52, 106}, + #endif + #ifdef KDF_R_UNKNOWN_PARAMETER_TYPE + {"UNKNOWN_PARAMETER_TYPE", ERR_LIB_KDF, KDF_R_UNKNOWN_PARAMETER_TYPE}, + #else + {"UNKNOWN_PARAMETER_TYPE", 52, 103}, + #endif + #ifdef KDF_R_VALUE_ERROR + {"VALUE_ERROR", ERR_LIB_KDF, KDF_R_VALUE_ERROR}, + #else + {"VALUE_ERROR", 52, 108}, + #endif + #ifdef KDF_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_KDF, KDF_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 52, 102}, + #endif + #ifdef OBJ_R_OID_EXISTS + {"OID_EXISTS", ERR_LIB_OBJ, OBJ_R_OID_EXISTS}, + #else + {"OID_EXISTS", 8, 102}, + #endif + #ifdef OBJ_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 8, 101}, + #endif + #ifdef OCSP_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_OCSP, OCSP_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 39, 101}, + #endif + #ifdef OCSP_R_DIGEST_ERR + {"DIGEST_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_ERR}, + #else + {"DIGEST_ERR", 39, 102}, + #endif + #ifdef OCSP_R_ERROR_IN_NEXTUPDATE_FIELD + {"ERROR_IN_NEXTUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD}, + #else + {"ERROR_IN_NEXTUPDATE_FIELD", 39, 122}, + #endif + #ifdef OCSP_R_ERROR_IN_THISUPDATE_FIELD + {"ERROR_IN_THISUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_THISUPDATE_FIELD}, + #else + {"ERROR_IN_THISUPDATE_FIELD", 39, 123}, + #endif + #ifdef OCSP_R_ERROR_PARSING_URL + {"ERROR_PARSING_URL", ERR_LIB_OCSP, OCSP_R_ERROR_PARSING_URL}, + #else + {"ERROR_PARSING_URL", 39, 121}, + #endif + #ifdef OCSP_R_MISSING_OCSPSIGNING_USAGE + {"MISSING_OCSPSIGNING_USAGE", ERR_LIB_OCSP, OCSP_R_MISSING_OCSPSIGNING_USAGE}, + #else + {"MISSING_OCSPSIGNING_USAGE", 39, 103}, + #endif + #ifdef OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE + {"NEXTUPDATE_BEFORE_THISUPDATE", ERR_LIB_OCSP, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE}, + #else + {"NEXTUPDATE_BEFORE_THISUPDATE", 39, 124}, + #endif + #ifdef OCSP_R_NOT_BASIC_RESPONSE + {"NOT_BASIC_RESPONSE", ERR_LIB_OCSP, OCSP_R_NOT_BASIC_RESPONSE}, + #else + {"NOT_BASIC_RESPONSE", 39, 104}, + #endif + #ifdef OCSP_R_NO_CERTIFICATES_IN_CHAIN + {"NO_CERTIFICATES_IN_CHAIN", ERR_LIB_OCSP, OCSP_R_NO_CERTIFICATES_IN_CHAIN}, + #else + {"NO_CERTIFICATES_IN_CHAIN", 39, 105}, + #endif + #ifdef OCSP_R_NO_RESPONSE_DATA + {"NO_RESPONSE_DATA", ERR_LIB_OCSP, OCSP_R_NO_RESPONSE_DATA}, + #else + {"NO_RESPONSE_DATA", 39, 108}, + #endif + #ifdef OCSP_R_NO_REVOKED_TIME + {"NO_REVOKED_TIME", ERR_LIB_OCSP, OCSP_R_NO_REVOKED_TIME}, + #else + {"NO_REVOKED_TIME", 39, 109}, + #endif + #ifdef OCSP_R_NO_SIGNER_KEY + {"NO_SIGNER_KEY", ERR_LIB_OCSP, OCSP_R_NO_SIGNER_KEY}, + #else + {"NO_SIGNER_KEY", 39, 130}, + #endif + #ifdef OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_OCSP, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 39, 110}, + #endif + #ifdef OCSP_R_REQUEST_NOT_SIGNED + {"REQUEST_NOT_SIGNED", ERR_LIB_OCSP, OCSP_R_REQUEST_NOT_SIGNED}, + #else + {"REQUEST_NOT_SIGNED", 39, 128}, + #endif + #ifdef OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", ERR_LIB_OCSP, OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA}, + #else + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", 39, 111}, + #endif + #ifdef OCSP_R_ROOT_CA_NOT_TRUSTED + {"ROOT_CA_NOT_TRUSTED", ERR_LIB_OCSP, OCSP_R_ROOT_CA_NOT_TRUSTED}, + #else + {"ROOT_CA_NOT_TRUSTED", 39, 112}, + #endif + #ifdef OCSP_R_SERVER_RESPONSE_ERROR + {"SERVER_RESPONSE_ERROR", ERR_LIB_OCSP, OCSP_R_SERVER_RESPONSE_ERROR}, + #else + {"SERVER_RESPONSE_ERROR", 39, 114}, + #endif + #ifdef OCSP_R_SERVER_RESPONSE_PARSE_ERROR + {"SERVER_RESPONSE_PARSE_ERROR", ERR_LIB_OCSP, OCSP_R_SERVER_RESPONSE_PARSE_ERROR}, + #else + {"SERVER_RESPONSE_PARSE_ERROR", 39, 115}, + #endif + #ifdef OCSP_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_OCSP, OCSP_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 39, 117}, + #endif + #ifdef OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_OCSP, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 39, 118}, + #endif + #ifdef OCSP_R_STATUS_EXPIRED + {"STATUS_EXPIRED", ERR_LIB_OCSP, OCSP_R_STATUS_EXPIRED}, + #else + {"STATUS_EXPIRED", 39, 125}, + #endif + #ifdef OCSP_R_STATUS_NOT_YET_VALID + {"STATUS_NOT_YET_VALID", ERR_LIB_OCSP, OCSP_R_STATUS_NOT_YET_VALID}, + #else + {"STATUS_NOT_YET_VALID", 39, 126}, + #endif + #ifdef OCSP_R_STATUS_TOO_OLD + {"STATUS_TOO_OLD", ERR_LIB_OCSP, OCSP_R_STATUS_TOO_OLD}, + #else + {"STATUS_TOO_OLD", 39, 127}, + #endif + #ifdef OCSP_R_UNKNOWN_MESSAGE_DIGEST + {"UNKNOWN_MESSAGE_DIGEST", ERR_LIB_OCSP, OCSP_R_UNKNOWN_MESSAGE_DIGEST}, + #else + {"UNKNOWN_MESSAGE_DIGEST", 39, 119}, + #endif + #ifdef OCSP_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OCSP, OCSP_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 39, 120}, + #endif + #ifdef OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE + {"UNSUPPORTED_REQUESTORNAME_TYPE", ERR_LIB_OCSP, OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE}, + #else + {"UNSUPPORTED_REQUESTORNAME_TYPE", 39, 129}, + #endif + #ifdef OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE + {"AMBIGUOUS_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE}, + #else + {"AMBIGUOUS_CONTENT_TYPE", 44, 107}, + #endif + #ifdef OSSL_STORE_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_OSSL_STORE, OSSL_STORE_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 44, 115}, + #endif + #ifdef OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC + {"ERROR_VERIFYING_PKCS12_MAC", ERR_LIB_OSSL_STORE, OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC}, + #else + {"ERROR_VERIFYING_PKCS12_MAC", 44, 113}, + #endif + #ifdef OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", ERR_LIB_OSSL_STORE, OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST}, + #else + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", 44, 121}, + #endif + #ifdef OSSL_STORE_R_INVALID_SCHEME + {"INVALID_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_INVALID_SCHEME}, + #else + {"INVALID_SCHEME", 44, 106}, + #endif + #ifdef OSSL_STORE_R_IS_NOT_A + {"IS_NOT_A", ERR_LIB_OSSL_STORE, OSSL_STORE_R_IS_NOT_A}, + #else + {"IS_NOT_A", 44, 112}, + #endif + #ifdef OSSL_STORE_R_LOADER_INCOMPLETE + {"LOADER_INCOMPLETE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADER_INCOMPLETE}, + #else + {"LOADER_INCOMPLETE", 44, 116}, + #endif + #ifdef OSSL_STORE_R_LOADING_STARTED + {"LOADING_STARTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADING_STARTED}, + #else + {"LOADING_STARTED", 44, 117}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CERTIFICATE + {"NOT_A_CERTIFICATE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CERTIFICATE}, + #else + {"NOT_A_CERTIFICATE", 44, 100}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CRL + {"NOT_A_CRL", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CRL}, + #else + {"NOT_A_CRL", 44, 101}, + #endif + #ifdef OSSL_STORE_R_NOT_A_KEY + {"NOT_A_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_KEY}, + #else + {"NOT_A_KEY", 44, 102}, + #endif + #ifdef OSSL_STORE_R_NOT_A_NAME + {"NOT_A_NAME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_NAME}, + #else + {"NOT_A_NAME", 44, 103}, + #endif + #ifdef OSSL_STORE_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 44, 104}, + #endif + #ifdef OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR + {"PASSPHRASE_CALLBACK_ERROR", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR}, + #else + {"PASSPHRASE_CALLBACK_ERROR", 44, 114}, + #endif + #ifdef OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 44, 108}, + #endif + #ifdef OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_OSSL_STORE, OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 44, 119}, + #endif + #ifdef OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED}, + #else + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", 44, 109}, + #endif + #ifdef OSSL_STORE_R_UNREGISTERED_SCHEME + {"UNREGISTERED_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNREGISTERED_SCHEME}, + #else + {"UNREGISTERED_SCHEME", 44, 105}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 44, 110}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_OPERATION + {"UNSUPPORTED_OPERATION", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_OPERATION}, + #else + {"UNSUPPORTED_OPERATION", 44, 118}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE + {"UNSUPPORTED_SEARCH_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE}, + #else + {"UNSUPPORTED_SEARCH_TYPE", 44, 120}, + #endif + #ifdef OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 44, 111}, + #endif + #ifdef PEM_R_BAD_BASE64_DECODE + {"BAD_BASE64_DECODE", ERR_LIB_PEM, PEM_R_BAD_BASE64_DECODE}, + #else + {"BAD_BASE64_DECODE", 9, 100}, + #endif + #ifdef PEM_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PEM, PEM_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 9, 101}, + #endif + #ifdef PEM_R_BAD_END_LINE + {"BAD_END_LINE", ERR_LIB_PEM, PEM_R_BAD_END_LINE}, + #else + {"BAD_END_LINE", 9, 102}, + #endif + #ifdef PEM_R_BAD_IV_CHARS + {"BAD_IV_CHARS", ERR_LIB_PEM, PEM_R_BAD_IV_CHARS}, + #else + {"BAD_IV_CHARS", 9, 103}, + #endif + #ifdef PEM_R_BAD_MAGIC_NUMBER + {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, PEM_R_BAD_MAGIC_NUMBER}, + #else + {"BAD_MAGIC_NUMBER", 9, 116}, + #endif + #ifdef PEM_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_PEM, PEM_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 9, 104}, + #endif + #ifdef PEM_R_BAD_VERSION_NUMBER + {"BAD_VERSION_NUMBER", ERR_LIB_PEM, PEM_R_BAD_VERSION_NUMBER}, + #else + {"BAD_VERSION_NUMBER", 9, 117}, + #endif + #ifdef PEM_R_BIO_WRITE_FAILURE + {"BIO_WRITE_FAILURE", ERR_LIB_PEM, PEM_R_BIO_WRITE_FAILURE}, + #else + {"BIO_WRITE_FAILURE", 9, 118}, + #endif + #ifdef PEM_R_CIPHER_IS_NULL + {"CIPHER_IS_NULL", ERR_LIB_PEM, PEM_R_CIPHER_IS_NULL}, + #else + {"CIPHER_IS_NULL", 9, 127}, + #endif + #ifdef PEM_R_ERROR_CONVERTING_PRIVATE_KEY + {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, PEM_R_ERROR_CONVERTING_PRIVATE_KEY}, + #else + {"ERROR_CONVERTING_PRIVATE_KEY", 9, 115}, + #endif + #ifdef PEM_R_EXPECTING_PRIVATE_KEY_BLOB + {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PRIVATE_KEY_BLOB}, + #else + {"EXPECTING_PRIVATE_KEY_BLOB", 9, 119}, + #endif + #ifdef PEM_R_EXPECTING_PUBLIC_KEY_BLOB + {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PUBLIC_KEY_BLOB}, + #else + {"EXPECTING_PUBLIC_KEY_BLOB", 9, 120}, + #endif + #ifdef PEM_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_PEM, PEM_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 9, 128}, + #endif + #ifdef PEM_R_INCONSISTENT_HEADER + {"INCONSISTENT_HEADER", ERR_LIB_PEM, PEM_R_INCONSISTENT_HEADER}, + #else + {"INCONSISTENT_HEADER", 9, 121}, + #endif + #ifdef PEM_R_KEYBLOB_HEADER_PARSE_ERROR + {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, PEM_R_KEYBLOB_HEADER_PARSE_ERROR}, + #else + {"KEYBLOB_HEADER_PARSE_ERROR", 9, 122}, + #endif + #ifdef PEM_R_KEYBLOB_TOO_SHORT + {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, PEM_R_KEYBLOB_TOO_SHORT}, + #else + {"KEYBLOB_TOO_SHORT", 9, 123}, + #endif + #ifdef PEM_R_MISSING_DEK_IV + {"MISSING_DEK_IV", ERR_LIB_PEM, PEM_R_MISSING_DEK_IV}, + #else + {"MISSING_DEK_IV", 9, 129}, + #endif + #ifdef PEM_R_NOT_DEK_INFO + {"NOT_DEK_INFO", ERR_LIB_PEM, PEM_R_NOT_DEK_INFO}, + #else + {"NOT_DEK_INFO", 9, 105}, + #endif + #ifdef PEM_R_NOT_ENCRYPTED + {"NOT_ENCRYPTED", ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED}, + #else + {"NOT_ENCRYPTED", 9, 106}, + #endif + #ifdef PEM_R_NOT_PROC_TYPE + {"NOT_PROC_TYPE", ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE}, + #else + {"NOT_PROC_TYPE", 9, 107}, + #endif + #ifdef PEM_R_NO_START_LINE + {"NO_START_LINE", ERR_LIB_PEM, PEM_R_NO_START_LINE}, + #else + {"NO_START_LINE", 9, 108}, + #endif + #ifdef PEM_R_PROBLEMS_GETTING_PASSWORD + {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, PEM_R_PROBLEMS_GETTING_PASSWORD}, + #else + {"PROBLEMS_GETTING_PASSWORD", 9, 109}, + #endif + #ifdef PEM_R_PVK_DATA_TOO_SHORT + {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_DATA_TOO_SHORT}, + #else + {"PVK_DATA_TOO_SHORT", 9, 124}, + #endif + #ifdef PEM_R_PVK_TOO_SHORT + {"PVK_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_TOO_SHORT}, + #else + {"PVK_TOO_SHORT", 9, 125}, + #endif + #ifdef PEM_R_READ_KEY + {"READ_KEY", ERR_LIB_PEM, PEM_R_READ_KEY}, + #else + {"READ_KEY", 9, 111}, + #endif + #ifdef PEM_R_SHORT_HEADER + {"SHORT_HEADER", ERR_LIB_PEM, PEM_R_SHORT_HEADER}, + #else + {"SHORT_HEADER", 9, 112}, + #endif + #ifdef PEM_R_UNEXPECTED_DEK_IV + {"UNEXPECTED_DEK_IV", ERR_LIB_PEM, PEM_R_UNEXPECTED_DEK_IV}, + #else + {"UNEXPECTED_DEK_IV", 9, 130}, + #endif + #ifdef PEM_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, PEM_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 9, 113}, + #endif + #ifdef PEM_R_UNSUPPORTED_ENCRYPTION + {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION}, + #else + {"UNSUPPORTED_ENCRYPTION", 9, 114}, + #endif + #ifdef PEM_R_UNSUPPORTED_KEY_COMPONENTS + {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, PEM_R_UNSUPPORTED_KEY_COMPONENTS}, + #else + {"UNSUPPORTED_KEY_COMPONENTS", 9, 126}, + #endif + #ifdef PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_PEM, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, + #endif + #ifdef PKCS12_R_CANT_PACK_STRUCTURE + {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, + #else + {"CANT_PACK_STRUCTURE", 35, 100}, + #endif + #ifdef PKCS12_R_CONTENT_TYPE_NOT_DATA + {"CONTENT_TYPE_NOT_DATA", ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA}, + #else + {"CONTENT_TYPE_NOT_DATA", 35, 121}, + #endif + #ifdef PKCS12_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 35, 101}, + #endif + #ifdef PKCS12_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 35, 102}, + #endif + #ifdef PKCS12_R_ENCRYPT_ERROR + {"ENCRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCRYPT_ERROR}, + #else + {"ENCRYPT_ERROR", 35, 103}, + #endif + #ifdef PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", ERR_LIB_PKCS12, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE}, + #else + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", 35, 120}, + #endif + #ifdef PKCS12_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 35, 104}, + #endif + #ifdef PKCS12_R_INVALID_NULL_PKCS12_POINTER + {"INVALID_NULL_PKCS12_POINTER", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_PKCS12_POINTER}, + #else + {"INVALID_NULL_PKCS12_POINTER", 35, 105}, + #endif + #ifdef PKCS12_R_IV_GEN_ERROR + {"IV_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_IV_GEN_ERROR}, + #else + {"IV_GEN_ERROR", 35, 106}, + #endif + #ifdef PKCS12_R_KEY_GEN_ERROR + {"KEY_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_KEY_GEN_ERROR}, + #else + {"KEY_GEN_ERROR", 35, 107}, + #endif + #ifdef PKCS12_R_MAC_ABSENT + {"MAC_ABSENT", ERR_LIB_PKCS12, PKCS12_R_MAC_ABSENT}, + #else + {"MAC_ABSENT", 35, 108}, + #endif + #ifdef PKCS12_R_MAC_GENERATION_ERROR + {"MAC_GENERATION_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_GENERATION_ERROR}, + #else + {"MAC_GENERATION_ERROR", 35, 109}, + #endif + #ifdef PKCS12_R_MAC_SETUP_ERROR + {"MAC_SETUP_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_SETUP_ERROR}, + #else + {"MAC_SETUP_ERROR", 35, 110}, + #endif + #ifdef PKCS12_R_MAC_STRING_SET_ERROR + {"MAC_STRING_SET_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_STRING_SET_ERROR}, + #else + {"MAC_STRING_SET_ERROR", 35, 111}, + #endif + #ifdef PKCS12_R_MAC_VERIFY_FAILURE + {"MAC_VERIFY_FAILURE", ERR_LIB_PKCS12, PKCS12_R_MAC_VERIFY_FAILURE}, + #else + {"MAC_VERIFY_FAILURE", 35, 113}, + #endif + #ifdef PKCS12_R_PARSE_ERROR + {"PARSE_ERROR", ERR_LIB_PKCS12, PKCS12_R_PARSE_ERROR}, + #else + {"PARSE_ERROR", 35, 114}, + #endif + #ifdef PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR + {"PKCS12_ALGOR_CIPHERINIT_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR}, + #else + {"PKCS12_ALGOR_CIPHERINIT_ERROR", 35, 115}, + #endif + #ifdef PKCS12_R_PKCS12_CIPHERFINAL_ERROR + {"PKCS12_CIPHERFINAL_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_CIPHERFINAL_ERROR}, + #else + {"PKCS12_CIPHERFINAL_ERROR", 35, 116}, + #endif + #ifdef PKCS12_R_PKCS12_PBE_CRYPT_ERROR + {"PKCS12_PBE_CRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_PBE_CRYPT_ERROR}, + #else + {"PKCS12_PBE_CRYPT_ERROR", 35, 117}, + #endif + #ifdef PKCS12_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_PKCS12, PKCS12_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 35, 118}, + #endif + #ifdef PKCS12_R_UNSUPPORTED_PKCS12_MODE + {"UNSUPPORTED_PKCS12_MODE", ERR_LIB_PKCS12, PKCS12_R_UNSUPPORTED_PKCS12_MODE}, + #else + {"UNSUPPORTED_PKCS12_MODE", 35, 119}, + #endif + #ifdef PKCS7_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_PKCS7, PKCS7_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 33, 117}, + #endif + #ifdef PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_PKCS7, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 33, 144}, + #endif + #ifdef PKCS7_R_CIPHER_NOT_INITIALIZED + {"CIPHER_NOT_INITIALIZED", ERR_LIB_PKCS7, PKCS7_R_CIPHER_NOT_INITIALIZED}, + #else + {"CIPHER_NOT_INITIALIZED", 33, 116}, + #endif + #ifdef PKCS7_R_CONTENT_AND_DATA_PRESENT + {"CONTENT_AND_DATA_PRESENT", ERR_LIB_PKCS7, PKCS7_R_CONTENT_AND_DATA_PRESENT}, + #else + {"CONTENT_AND_DATA_PRESENT", 33, 118}, + #endif + #ifdef PKCS7_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_PKCS7, PKCS7_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 33, 152}, + #endif + #ifdef PKCS7_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_PKCS7, PKCS7_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 33, 119}, + #endif + #ifdef PKCS7_R_DIGEST_FAILURE + {"DIGEST_FAILURE", ERR_LIB_PKCS7, PKCS7_R_DIGEST_FAILURE}, + #else + {"DIGEST_FAILURE", 33, 101}, + #endif + #ifdef PKCS7_R_ENCRYPTION_CTRL_FAILURE + {"ENCRYPTION_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_CTRL_FAILURE}, + #else + {"ENCRYPTION_CTRL_FAILURE", 33, 149}, + #endif + #ifdef PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 150}, + #endif + #ifdef PKCS7_R_ERROR_ADDING_RECIPIENT + {"ERROR_ADDING_RECIPIENT", ERR_LIB_PKCS7, PKCS7_R_ERROR_ADDING_RECIPIENT}, + #else + {"ERROR_ADDING_RECIPIENT", 33, 120}, + #endif + #ifdef PKCS7_R_ERROR_SETTING_CIPHER + {"ERROR_SETTING_CIPHER", ERR_LIB_PKCS7, PKCS7_R_ERROR_SETTING_CIPHER}, + #else + {"ERROR_SETTING_CIPHER", 33, 121}, + #endif + #ifdef PKCS7_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_PKCS7, PKCS7_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 33, 143}, + #endif + #ifdef PKCS7_R_INVALID_SIGNED_DATA_TYPE + {"INVALID_SIGNED_DATA_TYPE", ERR_LIB_PKCS7, PKCS7_R_INVALID_SIGNED_DATA_TYPE}, + #else + {"INVALID_SIGNED_DATA_TYPE", 33, 155}, + #endif + #ifdef PKCS7_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_PKCS7, PKCS7_R_NO_CONTENT}, + #else + {"NO_CONTENT", 33, 122}, + #endif + #ifdef PKCS7_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_PKCS7, PKCS7_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 33, 151}, + #endif + #ifdef PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND + {"NO_MATCHING_DIGEST_TYPE_FOUND", ERR_LIB_PKCS7, PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND}, + #else + {"NO_MATCHING_DIGEST_TYPE_FOUND", 33, 154}, + #endif + #ifdef PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE + {"NO_RECIPIENT_MATCHES_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE}, + #else + {"NO_RECIPIENT_MATCHES_CERTIFICATE", 33, 115}, + #endif + #ifdef PKCS7_R_NO_SIGNATURES_ON_DATA + {"NO_SIGNATURES_ON_DATA", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNATURES_ON_DATA}, + #else + {"NO_SIGNATURES_ON_DATA", 33, 123}, + #endif + #ifdef PKCS7_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 33, 142}, + #endif + #ifdef PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", ERR_LIB_PKCS7, PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE}, + #else + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", 33, 104}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 33, 124}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNER_ERROR + {"PKCS7_ADD_SIGNER_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNER_ERROR}, + #else + {"PKCS7_ADD_SIGNER_ERROR", 33, 153}, + #endif + #ifdef PKCS7_R_PKCS7_DATASIGN + {"PKCS7_DATASIGN", ERR_LIB_PKCS7, PKCS7_R_PKCS7_DATASIGN}, + #else + {"PKCS7_DATASIGN", 33, 145}, + #endif + #ifdef PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 33, 127}, + #endif + #ifdef PKCS7_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 33, 105}, + #endif + #ifdef PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_PKCS7, PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 33, 128}, + #endif + #ifdef PKCS7_R_SIGNING_CTRL_FAILURE + {"SIGNING_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_CTRL_FAILURE}, + #else + {"SIGNING_CTRL_FAILURE", 33, 147}, + #endif + #ifdef PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 148}, + #endif + #ifdef PKCS7_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_PKCS7, PKCS7_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 33, 129}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_CERTIFICATE + {"UNABLE_TO_FIND_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_CERTIFICATE}, + #else + {"UNABLE_TO_FIND_CERTIFICATE", 33, 106}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MEM_BIO + {"UNABLE_TO_FIND_MEM_BIO", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MEM_BIO}, + #else + {"UNABLE_TO_FIND_MEM_BIO", 33, 107}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST + {"UNABLE_TO_FIND_MESSAGE_DIGEST", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST}, + #else + {"UNABLE_TO_FIND_MESSAGE_DIGEST", 33, 108}, + #endif + #ifdef PKCS7_R_UNKNOWN_DIGEST_TYPE + {"UNKNOWN_DIGEST_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_DIGEST_TYPE}, + #else + {"UNKNOWN_DIGEST_TYPE", 33, 109}, + #endif + #ifdef PKCS7_R_UNKNOWN_OPERATION + {"UNKNOWN_OPERATION", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_OPERATION}, + #else + {"UNKNOWN_OPERATION", 33, 110}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CIPHER_TYPE + {"UNSUPPORTED_CIPHER_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CIPHER_TYPE}, + #else + {"UNSUPPORTED_CIPHER_TYPE", 33, 111}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 33, 112}, + #endif + #ifdef PKCS7_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 33, 113}, + #endif + #ifdef PKCS7_R_WRONG_PKCS7_TYPE + {"WRONG_PKCS7_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_PKCS7_TYPE}, + #else + {"WRONG_PKCS7_TYPE", 33, 114}, + #endif + #ifdef RAND_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 36, 102}, + #endif + #ifdef RAND_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_RAND, RAND_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 36, 103}, + #endif + #ifdef RAND_R_ARGUMENT_OUT_OF_RANGE + {"ARGUMENT_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE}, + #else + {"ARGUMENT_OUT_OF_RANGE", 36, 105}, + #endif + #ifdef RAND_R_CANNOT_OPEN_FILE + {"CANNOT_OPEN_FILE", ERR_LIB_RAND, RAND_R_CANNOT_OPEN_FILE}, + #else + {"CANNOT_OPEN_FILE", 36, 121}, + #endif + #ifdef RAND_R_DRBG_ALREADY_INITIALIZED + {"DRBG_ALREADY_INITIALIZED", ERR_LIB_RAND, RAND_R_DRBG_ALREADY_INITIALIZED}, + #else + {"DRBG_ALREADY_INITIALIZED", 36, 129}, + #endif + #ifdef RAND_R_DRBG_NOT_INITIALISED + {"DRBG_NOT_INITIALISED", ERR_LIB_RAND, RAND_R_DRBG_NOT_INITIALISED}, + #else + {"DRBG_NOT_INITIALISED", 36, 104}, + #endif + #ifdef RAND_R_ENTROPY_INPUT_TOO_LONG + {"ENTROPY_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ENTROPY_INPUT_TOO_LONG}, + #else + {"ENTROPY_INPUT_TOO_LONG", 36, 106}, + #endif + #ifdef RAND_R_ENTROPY_OUT_OF_RANGE + {"ENTROPY_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ENTROPY_OUT_OF_RANGE}, + #else + {"ENTROPY_OUT_OF_RANGE", 36, 124}, + #endif + #ifdef RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED + {"ERROR_ENTROPY_POOL_WAS_IGNORED", ERR_LIB_RAND, RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED}, + #else + {"ERROR_ENTROPY_POOL_WAS_IGNORED", 36, 127}, + #endif + #ifdef RAND_R_ERROR_INITIALISING_DRBG + {"ERROR_INITIALISING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INITIALISING_DRBG}, + #else + {"ERROR_INITIALISING_DRBG", 36, 107}, + #endif + #ifdef RAND_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 36, 108}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT}, + #else + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", 36, 109}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 36, 110}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 36, 111}, + #endif + #ifdef RAND_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_RAND, RAND_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 36, 126}, + #endif + #ifdef RAND_R_FUNC_NOT_IMPLEMENTED + {"FUNC_NOT_IMPLEMENTED", ERR_LIB_RAND, RAND_R_FUNC_NOT_IMPLEMENTED}, + #else + {"FUNC_NOT_IMPLEMENTED", 36, 101}, + #endif + #ifdef RAND_R_FWRITE_ERROR + {"FWRITE_ERROR", ERR_LIB_RAND, RAND_R_FWRITE_ERROR}, + #else + {"FWRITE_ERROR", 36, 123}, + #endif + #ifdef RAND_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_RAND, RAND_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 36, 112}, + #endif + #ifdef RAND_R_INTERNAL_ERROR + {"INTERNAL_ERROR", ERR_LIB_RAND, RAND_R_INTERNAL_ERROR}, + #else + {"INTERNAL_ERROR", 36, 113}, + #endif + #ifdef RAND_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 36, 114}, + #endif + #ifdef RAND_R_NOT_A_REGULAR_FILE + {"NOT_A_REGULAR_FILE", ERR_LIB_RAND, RAND_R_NOT_A_REGULAR_FILE}, + #else + {"NOT_A_REGULAR_FILE", 36, 122}, + #endif + #ifdef RAND_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_RAND, RAND_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 36, 115}, + #endif + #ifdef RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED + {"NO_DRBG_IMPLEMENTATION_SELECTED", ERR_LIB_RAND, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED}, + #else + {"NO_DRBG_IMPLEMENTATION_SELECTED", 36, 128}, + #endif + #ifdef RAND_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_RAND, RAND_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 36, 130}, + #endif + #ifdef RAND_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_RAND, RAND_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 36, 131}, + #endif + #ifdef RAND_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_RAND, RAND_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 36, 116}, + #endif + #ifdef RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", ERR_LIB_RAND, RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED}, + #else + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", 36, 133}, + #endif + #ifdef RAND_R_PRNG_NOT_SEEDED + {"PRNG_NOT_SEEDED", ERR_LIB_RAND, RAND_R_PRNG_NOT_SEEDED}, + #else + {"PRNG_NOT_SEEDED", 36, 100}, + #endif + #ifdef RAND_R_RANDOM_POOL_OVERFLOW + {"RANDOM_POOL_OVERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW}, + #else + {"RANDOM_POOL_OVERFLOW", 36, 125}, + #endif + #ifdef RAND_R_RANDOM_POOL_UNDERFLOW + {"RANDOM_POOL_UNDERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_UNDERFLOW}, + #else + {"RANDOM_POOL_UNDERFLOW", 36, 134}, + #endif + #ifdef RAND_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_RAND, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 36, 117}, + #endif + #ifdef RAND_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_RAND, RAND_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 36, 118}, + #endif + #ifdef RAND_R_SELFTEST_FAILURE + {"SELFTEST_FAILURE", ERR_LIB_RAND, RAND_R_SELFTEST_FAILURE}, + #else + {"SELFTEST_FAILURE", 36, 119}, + #endif + #ifdef RAND_R_TOO_LITTLE_NONCE_REQUESTED + {"TOO_LITTLE_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_LITTLE_NONCE_REQUESTED}, + #else + {"TOO_LITTLE_NONCE_REQUESTED", 36, 135}, + #endif + #ifdef RAND_R_TOO_MUCH_NONCE_REQUESTED + {"TOO_MUCH_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_MUCH_NONCE_REQUESTED}, + #else + {"TOO_MUCH_NONCE_REQUESTED", 36, 136}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_FLAGS + {"UNSUPPORTED_DRBG_FLAGS", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_FLAGS}, + #else + {"UNSUPPORTED_DRBG_FLAGS", 36, 132}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_TYPE + {"UNSUPPORTED_DRBG_TYPE", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_TYPE}, + #else + {"UNSUPPORTED_DRBG_TYPE", 36, 120}, + #endif + #ifdef RSA_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_RSA, RSA_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 4, 100}, + #endif + #ifdef RSA_R_BAD_E_VALUE + {"BAD_E_VALUE", ERR_LIB_RSA, RSA_R_BAD_E_VALUE}, + #else + {"BAD_E_VALUE", 4, 101}, + #endif + #ifdef RSA_R_BAD_FIXED_HEADER_DECRYPT + {"BAD_FIXED_HEADER_DECRYPT", ERR_LIB_RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT}, + #else + {"BAD_FIXED_HEADER_DECRYPT", 4, 102}, + #endif + #ifdef RSA_R_BAD_PAD_BYTE_COUNT + {"BAD_PAD_BYTE_COUNT", ERR_LIB_RSA, RSA_R_BAD_PAD_BYTE_COUNT}, + #else + {"BAD_PAD_BYTE_COUNT", 4, 103}, + #endif + #ifdef RSA_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_RSA, RSA_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 4, 104}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_01 + {"BLOCK_TYPE_IS_NOT_01", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_01}, + #else + {"BLOCK_TYPE_IS_NOT_01", 4, 106}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_02 + {"BLOCK_TYPE_IS_NOT_02", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_02}, + #else + {"BLOCK_TYPE_IS_NOT_02", 4, 107}, + #endif + #ifdef RSA_R_DATA_GREATER_THAN_MOD_LEN + {"DATA_GREATER_THAN_MOD_LEN", ERR_LIB_RSA, RSA_R_DATA_GREATER_THAN_MOD_LEN}, + #else + {"DATA_GREATER_THAN_MOD_LEN", 4, 108}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE + {"DATA_TOO_LARGE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE}, + #else + {"DATA_TOO_LARGE", 4, 109}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + {"DATA_TOO_LARGE_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE}, + #else + {"DATA_TOO_LARGE_FOR_KEY_SIZE", 4, 110}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_MODULUS + {"DATA_TOO_LARGE_FOR_MODULUS", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS}, + #else + {"DATA_TOO_LARGE_FOR_MODULUS", 4, 132}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL + {"DATA_TOO_SMALL", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL}, + #else + {"DATA_TOO_SMALL", 4, 111}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE + {"DATA_TOO_SMALL_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE}, + #else + {"DATA_TOO_SMALL_FOR_KEY_SIZE", 4, 122}, + #endif + #ifdef RSA_R_DIGEST_DOES_NOT_MATCH + {"DIGEST_DOES_NOT_MATCH", ERR_LIB_RSA, RSA_R_DIGEST_DOES_NOT_MATCH}, + #else + {"DIGEST_DOES_NOT_MATCH", 4, 158}, + #endif + #ifdef RSA_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 4, 145}, + #endif + #ifdef RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + {"DIGEST_TOO_BIG_FOR_RSA_KEY", ERR_LIB_RSA, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY}, + #else + {"DIGEST_TOO_BIG_FOR_RSA_KEY", 4, 112}, + #endif + #ifdef RSA_R_DMP1_NOT_CONGRUENT_TO_D + {"DMP1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMP1_NOT_CONGRUENT_TO_D}, + #else + {"DMP1_NOT_CONGRUENT_TO_D", 4, 124}, + #endif + #ifdef RSA_R_DMQ1_NOT_CONGRUENT_TO_D + {"DMQ1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMQ1_NOT_CONGRUENT_TO_D}, + #else + {"DMQ1_NOT_CONGRUENT_TO_D", 4, 125}, + #endif + #ifdef RSA_R_D_E_NOT_CONGRUENT_TO_1 + {"D_E_NOT_CONGRUENT_TO_1", ERR_LIB_RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1}, + #else + {"D_E_NOT_CONGRUENT_TO_1", 4, 123}, + #endif + #ifdef RSA_R_FIRST_OCTET_INVALID + {"FIRST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_FIRST_OCTET_INVALID}, + #else + {"FIRST_OCTET_INVALID", 4, 133}, + #endif + #ifdef RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_RSA, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 4, 144}, + #endif + #ifdef RSA_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 4, 157}, + #endif + #ifdef RSA_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 4, 143}, + #endif + #ifdef RSA_R_INVALID_HEADER + {"INVALID_HEADER", ERR_LIB_RSA, RSA_R_INVALID_HEADER}, + #else + {"INVALID_HEADER", 4, 137}, + #endif + #ifdef RSA_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_RSA, RSA_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 4, 160}, + #endif + #ifdef RSA_R_INVALID_MESSAGE_LENGTH + {"INVALID_MESSAGE_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_MESSAGE_LENGTH}, + #else + {"INVALID_MESSAGE_LENGTH", 4, 131}, + #endif + #ifdef RSA_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_RSA, RSA_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 4, 156}, + #endif + #ifdef RSA_R_INVALID_MULTI_PRIME_KEY + {"INVALID_MULTI_PRIME_KEY", ERR_LIB_RSA, RSA_R_INVALID_MULTI_PRIME_KEY}, + #else + {"INVALID_MULTI_PRIME_KEY", 4, 167}, + #endif + #ifdef RSA_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 4, 161}, + #endif + #ifdef RSA_R_INVALID_PADDING + {"INVALID_PADDING", ERR_LIB_RSA, RSA_R_INVALID_PADDING}, + #else + {"INVALID_PADDING", 4, 138}, + #endif + #ifdef RSA_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_RSA, RSA_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 4, 141}, + #endif + #ifdef RSA_R_INVALID_PSS_PARAMETERS + {"INVALID_PSS_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_PSS_PARAMETERS}, + #else + {"INVALID_PSS_PARAMETERS", 4, 149}, + #endif + #ifdef RSA_R_INVALID_PSS_SALTLEN + {"INVALID_PSS_SALTLEN", ERR_LIB_RSA, RSA_R_INVALID_PSS_SALTLEN}, + #else + {"INVALID_PSS_SALTLEN", 4, 146}, + #endif + #ifdef RSA_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 4, 150}, + #endif + #ifdef RSA_R_INVALID_TRAILER + {"INVALID_TRAILER", ERR_LIB_RSA, RSA_R_INVALID_TRAILER}, + #else + {"INVALID_TRAILER", 4, 139}, + #endif + #ifdef RSA_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 4, 142}, + #endif + #ifdef RSA_R_IQMP_NOT_INVERSE_OF_Q + {"IQMP_NOT_INVERSE_OF_Q", ERR_LIB_RSA, RSA_R_IQMP_NOT_INVERSE_OF_Q}, + #else + {"IQMP_NOT_INVERSE_OF_Q", 4, 126}, + #endif + #ifdef RSA_R_KEY_PRIME_NUM_INVALID + {"KEY_PRIME_NUM_INVALID", ERR_LIB_RSA, RSA_R_KEY_PRIME_NUM_INVALID}, + #else + {"KEY_PRIME_NUM_INVALID", 4, 165}, + #endif + #ifdef RSA_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_RSA, RSA_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 4, 120}, + #endif + #ifdef RSA_R_LAST_OCTET_INVALID + {"LAST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_LAST_OCTET_INVALID}, + #else + {"LAST_OCTET_INVALID", 4, 134}, + #endif + #ifdef RSA_R_MGF1_DIGEST_NOT_ALLOWED + {"MGF1_DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED}, + #else + {"MGF1_DIGEST_NOT_ALLOWED", 4, 152}, + #endif + #ifdef RSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_RSA, RSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 4, 179}, + #endif + #ifdef RSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_RSA, RSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 4, 105}, + #endif + #ifdef RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", ERR_LIB_RSA, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R}, + #else + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", 4, 168}, + #endif + #ifdef RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D}, + #else + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", 4, 169}, + #endif + #ifdef RSA_R_MP_R_NOT_PRIME + {"MP_R_NOT_PRIME", ERR_LIB_RSA, RSA_R_MP_R_NOT_PRIME}, + #else + {"MP_R_NOT_PRIME", 4, 170}, + #endif + #ifdef RSA_R_NO_PUBLIC_EXPONENT + {"NO_PUBLIC_EXPONENT", ERR_LIB_RSA, RSA_R_NO_PUBLIC_EXPONENT}, + #else + {"NO_PUBLIC_EXPONENT", 4, 140}, + #endif + #ifdef RSA_R_NULL_BEFORE_BLOCK_MISSING + {"NULL_BEFORE_BLOCK_MISSING", ERR_LIB_RSA, RSA_R_NULL_BEFORE_BLOCK_MISSING}, + #else + {"NULL_BEFORE_BLOCK_MISSING", 4, 113}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES}, + #else + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", 4, 172}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_P_Q + {"N_DOES_NOT_EQUAL_P_Q", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_P_Q}, + #else + {"N_DOES_NOT_EQUAL_P_Q", 4, 127}, + #endif + #ifdef RSA_R_OAEP_DECODING_ERROR + {"OAEP_DECODING_ERROR", ERR_LIB_RSA, RSA_R_OAEP_DECODING_ERROR}, + #else + {"OAEP_DECODING_ERROR", 4, 121}, + #endif + #ifdef RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_RSA, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 4, 148}, + #endif + #ifdef RSA_R_PADDING_CHECK_FAILED + {"PADDING_CHECK_FAILED", ERR_LIB_RSA, RSA_R_PADDING_CHECK_FAILED}, + #else + {"PADDING_CHECK_FAILED", 4, 114}, + #endif + #ifdef RSA_R_PKCS_DECODING_ERROR + {"PKCS_DECODING_ERROR", ERR_LIB_RSA, RSA_R_PKCS_DECODING_ERROR}, + #else + {"PKCS_DECODING_ERROR", 4, 159}, + #endif + #ifdef RSA_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_RSA, RSA_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 4, 164}, + #endif + #ifdef RSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_RSA, RSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 4, 128}, + #endif + #ifdef RSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_RSA, RSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 4, 129}, + #endif + #ifdef RSA_R_RSA_OPERATIONS_NOT_SUPPORTED + {"RSA_OPERATIONS_NOT_SUPPORTED", ERR_LIB_RSA, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED}, + #else + {"RSA_OPERATIONS_NOT_SUPPORTED", 4, 130}, + #endif + #ifdef RSA_R_SLEN_CHECK_FAILED + {"SLEN_CHECK_FAILED", ERR_LIB_RSA, RSA_R_SLEN_CHECK_FAILED}, + #else + {"SLEN_CHECK_FAILED", 4, 136}, + #endif + #ifdef RSA_R_SLEN_RECOVERY_FAILED + {"SLEN_RECOVERY_FAILED", ERR_LIB_RSA, RSA_R_SLEN_RECOVERY_FAILED}, + #else + {"SLEN_RECOVERY_FAILED", 4, 135}, + #endif + #ifdef RSA_R_SSLV3_ROLLBACK_ATTACK + {"SSLV3_ROLLBACK_ATTACK", ERR_LIB_RSA, RSA_R_SSLV3_ROLLBACK_ATTACK}, + #else + {"SSLV3_ROLLBACK_ATTACK", 4, 115}, + #endif + #ifdef RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_RSA, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 4, 116}, + #endif + #ifdef RSA_R_UNKNOWN_ALGORITHM_TYPE + {"UNKNOWN_ALGORITHM_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_ALGORITHM_TYPE}, + #else + {"UNKNOWN_ALGORITHM_TYPE", 4, 117}, + #endif + #ifdef RSA_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 4, 166}, + #endif + #ifdef RSA_R_UNKNOWN_MASK_DIGEST + {"UNKNOWN_MASK_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_MASK_DIGEST}, + #else + {"UNKNOWN_MASK_DIGEST", 4, 151}, + #endif + #ifdef RSA_R_UNKNOWN_PADDING_TYPE + {"UNKNOWN_PADDING_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_PADDING_TYPE}, + #else + {"UNKNOWN_PADDING_TYPE", 4, 118}, + #endif + #ifdef RSA_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 4, 162}, + #endif + #ifdef RSA_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 4, 163}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_ALGORITHM + {"UNSUPPORTED_MASK_ALGORITHM", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_ALGORITHM}, + #else + {"UNSUPPORTED_MASK_ALGORITHM", 4, 153}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_PARAMETER + {"UNSUPPORTED_MASK_PARAMETER", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_PARAMETER}, + #else + {"UNSUPPORTED_MASK_PARAMETER", 4, 154}, + #endif + #ifdef RSA_R_UNSUPPORTED_SIGNATURE_TYPE + {"UNSUPPORTED_SIGNATURE_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_SIGNATURE_TYPE}, + #else + {"UNSUPPORTED_SIGNATURE_TYPE", 4, 155}, + #endif + #ifdef RSA_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_RSA, RSA_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 4, 147}, + #endif + #ifdef RSA_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_RSA, RSA_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 4, 119}, + #endif + #ifdef SM2_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_SM2, SM2_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 53, 100}, + #endif + #ifdef SM2_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SM2, SM2_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 53, 101}, + #endif + #ifdef SM2_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_SM2, SM2_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 53, 107}, + #endif + #ifdef SM2_R_DIST_ID_TOO_LARGE + {"DIST_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_DIST_ID_TOO_LARGE}, + #else + {"DIST_ID_TOO_LARGE", 53, 110}, + #endif + #ifdef SM2_R_ID_NOT_SET + {"ID_NOT_SET", ERR_LIB_SM2, SM2_R_ID_NOT_SET}, + #else + {"ID_NOT_SET", 53, 112}, + #endif + #ifdef SM2_R_ID_TOO_LARGE + {"ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_ID_TOO_LARGE}, + #else + {"ID_TOO_LARGE", 53, 111}, + #endif + #ifdef SM2_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_SM2, SM2_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 53, 108}, + #endif + #ifdef SM2_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_SM2, SM2_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 53, 102}, + #endif + #ifdef SM2_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_SM2, SM2_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 53, 103}, + #endif + #ifdef SM2_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_SM2, SM2_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 53, 104}, + #endif + #ifdef SM2_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_SM2, SM2_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 53, 105}, + #endif + #ifdef SM2_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_SM2, SM2_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 53, 109}, + #endif + #ifdef SM2_R_USER_ID_TOO_LARGE + {"USER_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_USER_ID_TOO_LARGE}, + #else + {"USER_ID_TOO_LARGE", 53, 106}, + #endif + #ifdef SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", ERR_LIB_SSL, SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY}, + #else + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", 20, 291}, + #endif + #ifdef SSL_R_APP_DATA_IN_HANDSHAKE + {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, SSL_R_APP_DATA_IN_HANDSHAKE}, + #else + {"APP_DATA_IN_HANDSHAKE", 20, 100}, + #endif + #ifdef SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT}, + #else + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", 20, 272}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE}, + #else + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", 20, 143}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE}, + #else + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, + #endif + #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC + {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, + #else + {"BAD_CHANGE_CIPHER_SPEC", 20, 103}, + #endif + #ifdef SSL_R_BAD_CIPHER + {"BAD_CIPHER", ERR_LIB_SSL, SSL_R_BAD_CIPHER}, + #else + {"BAD_CIPHER", 20, 186}, + #endif + #ifdef SSL_R_BAD_DATA + {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, + #else + {"BAD_DATA", 20, 390}, + #endif + #ifdef SSL_R_BAD_DATA_RETURNED_BY_CALLBACK + {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK}, + #else + {"BAD_DATA_RETURNED_BY_CALLBACK", 20, 106}, + #endif + #ifdef SSL_R_BAD_DECOMPRESSION + {"BAD_DECOMPRESSION", ERR_LIB_SSL, SSL_R_BAD_DECOMPRESSION}, + #else + {"BAD_DECOMPRESSION", 20, 107}, + #endif + #ifdef SSL_R_BAD_DH_VALUE + {"BAD_DH_VALUE", ERR_LIB_SSL, SSL_R_BAD_DH_VALUE}, + #else + {"BAD_DH_VALUE", 20, 102}, + #endif + #ifdef SSL_R_BAD_DIGEST_LENGTH + {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DIGEST_LENGTH}, + #else + {"BAD_DIGEST_LENGTH", 20, 111}, + #endif + #ifdef SSL_R_BAD_EARLY_DATA + {"BAD_EARLY_DATA", ERR_LIB_SSL, SSL_R_BAD_EARLY_DATA}, + #else + {"BAD_EARLY_DATA", 20, 233}, + #endif + #ifdef SSL_R_BAD_ECC_CERT + {"BAD_ECC_CERT", ERR_LIB_SSL, SSL_R_BAD_ECC_CERT}, + #else + {"BAD_ECC_CERT", 20, 304}, + #endif + #ifdef SSL_R_BAD_ECPOINT + {"BAD_ECPOINT", ERR_LIB_SSL, SSL_R_BAD_ECPOINT}, + #else + {"BAD_ECPOINT", 20, 306}, + #endif + #ifdef SSL_R_BAD_EXTENSION + {"BAD_EXTENSION", ERR_LIB_SSL, SSL_R_BAD_EXTENSION}, + #else + {"BAD_EXTENSION", 20, 110}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_LENGTH + {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_LENGTH}, + #else + {"BAD_HANDSHAKE_LENGTH", 20, 332}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_STATE + {"BAD_HANDSHAKE_STATE", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_STATE}, + #else + {"BAD_HANDSHAKE_STATE", 20, 236}, + #endif + #ifdef SSL_R_BAD_HELLO_REQUEST + {"BAD_HELLO_REQUEST", ERR_LIB_SSL, SSL_R_BAD_HELLO_REQUEST}, + #else + {"BAD_HELLO_REQUEST", 20, 105}, + #endif + #ifdef SSL_R_BAD_HRR_VERSION + {"BAD_HRR_VERSION", ERR_LIB_SSL, SSL_R_BAD_HRR_VERSION}, + #else + {"BAD_HRR_VERSION", 20, 263}, + #endif + #ifdef SSL_R_BAD_KEY_SHARE + {"BAD_KEY_SHARE", ERR_LIB_SSL, SSL_R_BAD_KEY_SHARE}, + #else + {"BAD_KEY_SHARE", 20, 108}, + #endif + #ifdef SSL_R_BAD_KEY_UPDATE + {"BAD_KEY_UPDATE", ERR_LIB_SSL, SSL_R_BAD_KEY_UPDATE}, + #else + {"BAD_KEY_UPDATE", 20, 122}, + #endif + #ifdef SSL_R_BAD_LEGACY_VERSION + {"BAD_LEGACY_VERSION", ERR_LIB_SSL, SSL_R_BAD_LEGACY_VERSION}, + #else + {"BAD_LEGACY_VERSION", 20, 292}, + #endif + #ifdef SSL_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_SSL, SSL_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 20, 271}, + #endif + #ifdef SSL_R_BAD_PACKET + {"BAD_PACKET", ERR_LIB_SSL, SSL_R_BAD_PACKET}, + #else + {"BAD_PACKET", 20, 240}, + #endif + #ifdef SSL_R_BAD_PACKET_LENGTH + {"BAD_PACKET_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PACKET_LENGTH}, + #else + {"BAD_PACKET_LENGTH", 20, 115}, + #endif + #ifdef SSL_R_BAD_PROTOCOL_VERSION_NUMBER + {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_BAD_PROTOCOL_VERSION_NUMBER}, + #else + {"BAD_PROTOCOL_VERSION_NUMBER", 20, 116}, + #endif + #ifdef SSL_R_BAD_PSK + {"BAD_PSK", ERR_LIB_SSL, SSL_R_BAD_PSK}, + #else + {"BAD_PSK", 20, 219}, + #endif + #ifdef SSL_R_BAD_PSK_IDENTITY + {"BAD_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_BAD_PSK_IDENTITY}, + #else + {"BAD_PSK_IDENTITY", 20, 114}, + #endif + #ifdef SSL_R_BAD_RECORD_TYPE + {"BAD_RECORD_TYPE", ERR_LIB_SSL, SSL_R_BAD_RECORD_TYPE}, + #else + {"BAD_RECORD_TYPE", 20, 443}, + #endif + #ifdef SSL_R_BAD_RSA_ENCRYPT + {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_ENCRYPT}, + #else + {"BAD_RSA_ENCRYPT", 20, 119}, + #endif + #ifdef SSL_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 20, 123}, + #endif + #ifdef SSL_R_BAD_SRP_A_LENGTH + {"BAD_SRP_A_LENGTH", ERR_LIB_SSL, SSL_R_BAD_SRP_A_LENGTH}, + #else + {"BAD_SRP_A_LENGTH", 20, 347}, + #endif + #ifdef SSL_R_BAD_SRP_PARAMETERS + {"BAD_SRP_PARAMETERS", ERR_LIB_SSL, SSL_R_BAD_SRP_PARAMETERS}, + #else + {"BAD_SRP_PARAMETERS", 20, 371}, + #endif + #ifdef SSL_R_BAD_SRTP_MKI_VALUE + {"BAD_SRTP_MKI_VALUE", ERR_LIB_SSL, SSL_R_BAD_SRTP_MKI_VALUE}, + #else + {"BAD_SRTP_MKI_VALUE", 20, 352}, + #endif + #ifdef SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST + {"BAD_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"BAD_SRTP_PROTECTION_PROFILE_LIST", 20, 353}, + #endif + #ifdef SSL_R_BAD_SSL_FILETYPE + {"BAD_SSL_FILETYPE", ERR_LIB_SSL, SSL_R_BAD_SSL_FILETYPE}, + #else + {"BAD_SSL_FILETYPE", 20, 124}, + #endif + #ifdef SSL_R_BAD_VALUE + {"BAD_VALUE", ERR_LIB_SSL, SSL_R_BAD_VALUE}, + #else + {"BAD_VALUE", 20, 384}, + #endif + #ifdef SSL_R_BAD_WRITE_RETRY + {"BAD_WRITE_RETRY", ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY}, + #else + {"BAD_WRITE_RETRY", 20, 127}, + #endif + #ifdef SSL_R_BINDER_DOES_NOT_VERIFY + {"BINDER_DOES_NOT_VERIFY", ERR_LIB_SSL, SSL_R_BINDER_DOES_NOT_VERIFY}, + #else + {"BINDER_DOES_NOT_VERIFY", 20, 253}, + #endif + #ifdef SSL_R_BIO_NOT_SET + {"BIO_NOT_SET", ERR_LIB_SSL, SSL_R_BIO_NOT_SET}, + #else + {"BIO_NOT_SET", 20, 128}, + #endif + #ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG + {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG}, + #else + {"BLOCK_CIPHER_PAD_IS_WRONG", 20, 129}, + #endif + #ifdef SSL_R_BN_LIB + {"BN_LIB", ERR_LIB_SSL, SSL_R_BN_LIB}, + #else + {"BN_LIB", 20, 130}, + #endif + #ifdef SSL_R_CALLBACK_FAILED + {"CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_CALLBACK_FAILED}, + #else + {"CALLBACK_FAILED", 20, 234}, + #endif + #ifdef SSL_R_CANNOT_CHANGE_CIPHER + {"CANNOT_CHANGE_CIPHER", ERR_LIB_SSL, SSL_R_CANNOT_CHANGE_CIPHER}, + #else + {"CANNOT_CHANGE_CIPHER", 20, 109}, + #endif + #ifdef SSL_R_CA_DN_LENGTH_MISMATCH + {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CA_DN_LENGTH_MISMATCH}, + #else + {"CA_DN_LENGTH_MISMATCH", 20, 131}, + #endif + #ifdef SSL_R_CA_KEY_TOO_SMALL + {"CA_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_CA_KEY_TOO_SMALL}, + #else + {"CA_KEY_TOO_SMALL", 20, 397}, + #endif + #ifdef SSL_R_CA_MD_TOO_WEAK + {"CA_MD_TOO_WEAK", ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK}, + #else + {"CA_MD_TOO_WEAK", 20, 398}, + #endif + #ifdef SSL_R_CCS_RECEIVED_EARLY + {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, SSL_R_CCS_RECEIVED_EARLY}, + #else + {"CCS_RECEIVED_EARLY", 20, 133}, + #endif + #ifdef SSL_R_CERTIFICATE_VERIFY_FAILED + {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED}, + #else + {"CERTIFICATE_VERIFY_FAILED", 20, 134}, + #endif + #ifdef SSL_R_CERT_CB_ERROR + {"CERT_CB_ERROR", ERR_LIB_SSL, SSL_R_CERT_CB_ERROR}, + #else + {"CERT_CB_ERROR", 20, 377}, + #endif + #ifdef SSL_R_CERT_LENGTH_MISMATCH + {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CERT_LENGTH_MISMATCH}, + #else + {"CERT_LENGTH_MISMATCH", 20, 135}, + #endif + #ifdef SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED + {"CIPHERSUITE_DIGEST_HAS_CHANGED", ERR_LIB_SSL, SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED}, + #else + {"CIPHERSUITE_DIGEST_HAS_CHANGED", 20, 218}, + #endif + #ifdef SSL_R_CIPHER_CODE_WRONG_LENGTH + {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, SSL_R_CIPHER_CODE_WRONG_LENGTH}, + #else + {"CIPHER_CODE_WRONG_LENGTH", 20, 137}, + #endif + #ifdef SSL_R_CIPHER_OR_HASH_UNAVAILABLE + {"CIPHER_OR_HASH_UNAVAILABLE", ERR_LIB_SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE}, + #else + {"CIPHER_OR_HASH_UNAVAILABLE", 20, 138}, + #endif + #ifdef SSL_R_CLIENTHELLO_TLSEXT + {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_CLIENTHELLO_TLSEXT}, + #else + {"CLIENTHELLO_TLSEXT", 20, 226}, + #endif + #ifdef SSL_R_COMPRESSED_LENGTH_TOO_LONG + {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_COMPRESSED_LENGTH_TOO_LONG}, + #else + {"COMPRESSED_LENGTH_TOO_LONG", 20, 140}, + #endif + #ifdef SSL_R_COMPRESSION_DISABLED + {"COMPRESSION_DISABLED", ERR_LIB_SSL, SSL_R_COMPRESSION_DISABLED}, + #else + {"COMPRESSION_DISABLED", 20, 343}, + #endif + #ifdef SSL_R_COMPRESSION_FAILURE + {"COMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_COMPRESSION_FAILURE}, + #else + {"COMPRESSION_FAILURE", 20, 141}, + #endif + #ifdef SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE}, + #else + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", 20, 307}, + #endif + #ifdef SSL_R_COMPRESSION_LIBRARY_ERROR + {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, SSL_R_COMPRESSION_LIBRARY_ERROR}, + #else + {"COMPRESSION_LIBRARY_ERROR", 20, 142}, + #endif + #ifdef SSL_R_CONNECTION_TYPE_NOT_SET + {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET}, + #else + {"CONNECTION_TYPE_NOT_SET", 20, 144}, + #endif + #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED + {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, + #else + {"CONTEXT_NOT_DANE_ENABLED", 20, 167}, + #endif + #ifdef SSL_R_COOKIE_GEN_CALLBACK_FAILURE + {"COOKIE_GEN_CALLBACK_FAILURE", ERR_LIB_SSL, SSL_R_COOKIE_GEN_CALLBACK_FAILURE}, + #else + {"COOKIE_GEN_CALLBACK_FAILURE", 20, 400}, + #endif + #ifdef SSL_R_COOKIE_MISMATCH + {"COOKIE_MISMATCH", ERR_LIB_SSL, SSL_R_COOKIE_MISMATCH}, + #else + {"COOKIE_MISMATCH", 20, 308}, + #endif + #ifdef SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED}, + #else + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", 20, 206}, + #endif + #ifdef SSL_R_DANE_ALREADY_ENABLED + {"DANE_ALREADY_ENABLED", ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED}, + #else + {"DANE_ALREADY_ENABLED", 20, 172}, + #endif + #ifdef SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL}, + #else + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", 20, 173}, + #endif + #ifdef SSL_R_DANE_NOT_ENABLED + {"DANE_NOT_ENABLED", ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED}, + #else + {"DANE_NOT_ENABLED", 20, 175}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE + {"DANE_TLSA_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE", 20, 180}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", 20, 184}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DATA_LENGTH + {"DANE_TLSA_BAD_DATA_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH}, + #else + {"DANE_TLSA_BAD_DATA_LENGTH", 20, 189}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH + {"DANE_TLSA_BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH}, + #else + {"DANE_TLSA_BAD_DIGEST_LENGTH", 20, 192}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_MATCHING_TYPE + {"DANE_TLSA_BAD_MATCHING_TYPE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE}, + #else + {"DANE_TLSA_BAD_MATCHING_TYPE", 20, 200}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_PUBLIC_KEY + {"DANE_TLSA_BAD_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY}, + #else + {"DANE_TLSA_BAD_PUBLIC_KEY", 20, 201}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_SELECTOR + {"DANE_TLSA_BAD_SELECTOR", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR}, + #else + {"DANE_TLSA_BAD_SELECTOR", 20, 202}, + #endif + #ifdef SSL_R_DANE_TLSA_NULL_DATA + {"DANE_TLSA_NULL_DATA", ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA}, + #else + {"DANE_TLSA_NULL_DATA", 20, 203}, + #endif + #ifdef SSL_R_DATA_BETWEEN_CCS_AND_FINISHED + {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED}, + #else + {"DATA_BETWEEN_CCS_AND_FINISHED", 20, 145}, + #endif + #ifdef SSL_R_DATA_LENGTH_TOO_LONG + {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG}, + #else + {"DATA_LENGTH_TOO_LONG", 20, 146}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED + {"DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED}, + #else + {"DECRYPTION_FAILED", 20, 147}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC}, + #else + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", 20, 281}, + #endif + #ifdef SSL_R_DH_KEY_TOO_SMALL + {"DH_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL}, + #else + {"DH_KEY_TOO_SMALL", 20, 394}, + #endif + #ifdef SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG}, + #else + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", 20, 148}, + #endif + #ifdef SSL_R_DIGEST_CHECK_FAILED + {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, SSL_R_DIGEST_CHECK_FAILED}, + #else + {"DIGEST_CHECK_FAILED", 20, 149}, + #endif + #ifdef SSL_R_DTLS_MESSAGE_TOO_BIG + {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, SSL_R_DTLS_MESSAGE_TOO_BIG}, + #else + {"DTLS_MESSAGE_TOO_BIG", 20, 334}, + #endif + #ifdef SSL_R_DUPLICATE_COMPRESSION_ID + {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, SSL_R_DUPLICATE_COMPRESSION_ID}, + #else + {"DUPLICATE_COMPRESSION_ID", 20, 309}, + #endif + #ifdef SSL_R_ECC_CERT_NOT_FOR_SIGNING + {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING}, + #else + {"ECC_CERT_NOT_FOR_SIGNING", 20, 318}, + #endif + #ifdef SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE + {"ECDH_REQUIRED_FOR_SUITEB_MODE", ERR_LIB_SSL, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE}, + #else + {"ECDH_REQUIRED_FOR_SUITEB_MODE", 20, 374}, + #endif + #ifdef SSL_R_EE_KEY_TOO_SMALL + {"EE_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_EE_KEY_TOO_SMALL}, + #else + {"EE_KEY_TOO_SMALL", 20, 399}, + #endif + #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", 20, 354}, + #endif + #ifdef SSL_R_ENCRYPTED_LENGTH_TOO_LONG + {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_ENCRYPTED_LENGTH_TOO_LONG}, + #else + {"ENCRYPTED_LENGTH_TOO_LONG", 20, 150}, + #endif + #ifdef SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST + {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST}, + #else + {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, + #endif + #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN + {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, + #else + {"ERROR_SETTING_TLSA_BASE_DOMAIN", 20, 204}, + #endif + #ifdef SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE + {"EXCEEDS_MAX_FRAGMENT_SIZE", ERR_LIB_SSL, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE}, + #else + {"EXCEEDS_MAX_FRAGMENT_SIZE", 20, 194}, + #endif + #ifdef SSL_R_EXCESSIVE_MESSAGE_SIZE + {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, SSL_R_EXCESSIVE_MESSAGE_SIZE}, + #else + {"EXCESSIVE_MESSAGE_SIZE", 20, 152}, + #endif + #ifdef SSL_R_EXTENSION_NOT_RECEIVED + {"EXTENSION_NOT_RECEIVED", ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED}, + #else + {"EXTENSION_NOT_RECEIVED", 20, 279}, + #endif + #ifdef SSL_R_EXTRA_DATA_IN_MESSAGE + {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, SSL_R_EXTRA_DATA_IN_MESSAGE}, + #else + {"EXTRA_DATA_IN_MESSAGE", 20, 153}, + #endif + #ifdef SSL_R_EXT_LENGTH_MISMATCH + {"EXT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_EXT_LENGTH_MISMATCH}, + #else + {"EXT_LENGTH_MISMATCH", 20, 163}, + #endif + #ifdef SSL_R_FAILED_TO_INIT_ASYNC + {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, + #else + {"FAILED_TO_INIT_ASYNC", 20, 405}, + #endif + #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO + {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, + #else + {"FRAGMENTED_CLIENT_HELLO", 20, 401}, + #endif + #ifdef SSL_R_GOT_A_FIN_BEFORE_A_CCS + {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, SSL_R_GOT_A_FIN_BEFORE_A_CCS}, + #else + {"GOT_A_FIN_BEFORE_A_CCS", 20, 154}, + #endif + #ifdef SSL_R_HTTPS_PROXY_REQUEST + {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, SSL_R_HTTPS_PROXY_REQUEST}, + #else + {"HTTPS_PROXY_REQUEST", 20, 155}, + #endif + #ifdef SSL_R_HTTP_REQUEST + {"HTTP_REQUEST", ERR_LIB_SSL, SSL_R_HTTP_REQUEST}, + #else + {"HTTP_REQUEST", 20, 156}, + #endif + #ifdef SSL_R_ILLEGAL_POINT_COMPRESSION + {"ILLEGAL_POINT_COMPRESSION", ERR_LIB_SSL, SSL_R_ILLEGAL_POINT_COMPRESSION}, + #else + {"ILLEGAL_POINT_COMPRESSION", 20, 162}, + #endif + #ifdef SSL_R_ILLEGAL_SUITEB_DIGEST + {"ILLEGAL_SUITEB_DIGEST", ERR_LIB_SSL, SSL_R_ILLEGAL_SUITEB_DIGEST}, + #else + {"ILLEGAL_SUITEB_DIGEST", 20, 380}, + #endif + #ifdef SSL_R_INAPPROPRIATE_FALLBACK + {"INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_INAPPROPRIATE_FALLBACK}, + #else + {"INAPPROPRIATE_FALLBACK", 20, 373}, + #endif + #ifdef SSL_R_INCONSISTENT_COMPRESSION + {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, SSL_R_INCONSISTENT_COMPRESSION}, + #else + {"INCONSISTENT_COMPRESSION", 20, 340}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_ALPN + {"INCONSISTENT_EARLY_DATA_ALPN", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_ALPN}, + #else + {"INCONSISTENT_EARLY_DATA_ALPN", 20, 222}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_SNI + {"INCONSISTENT_EARLY_DATA_SNI", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_SNI}, + #else + {"INCONSISTENT_EARLY_DATA_SNI", 20, 231}, + #endif + #ifdef SSL_R_INCONSISTENT_EXTMS + {"INCONSISTENT_EXTMS", ERR_LIB_SSL, SSL_R_INCONSISTENT_EXTMS}, + #else + {"INCONSISTENT_EXTMS", 20, 104}, + #endif + #ifdef SSL_R_INSUFFICIENT_SECURITY + {"INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_INSUFFICIENT_SECURITY}, + #else + {"INSUFFICIENT_SECURITY", 20, 241}, + #endif + #ifdef SSL_R_INVALID_ALERT + {"INVALID_ALERT", ERR_LIB_SSL, SSL_R_INVALID_ALERT}, + #else + {"INVALID_ALERT", 20, 205}, + #endif + #ifdef SSL_R_INVALID_CCS_MESSAGE + {"INVALID_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_INVALID_CCS_MESSAGE}, + #else + {"INVALID_CCS_MESSAGE", 20, 260}, + #endif + #ifdef SSL_R_INVALID_CERTIFICATE_OR_ALG + {"INVALID_CERTIFICATE_OR_ALG", ERR_LIB_SSL, SSL_R_INVALID_CERTIFICATE_OR_ALG}, + #else + {"INVALID_CERTIFICATE_OR_ALG", 20, 238}, + #endif + #ifdef SSL_R_INVALID_COMMAND + {"INVALID_COMMAND", ERR_LIB_SSL, SSL_R_INVALID_COMMAND}, + #else + {"INVALID_COMMAND", 20, 280}, + #endif + #ifdef SSL_R_INVALID_COMPRESSION_ALGORITHM + {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_INVALID_COMPRESSION_ALGORITHM}, + #else + {"INVALID_COMPRESSION_ALGORITHM", 20, 341}, + #endif + #ifdef SSL_R_INVALID_CONFIG + {"INVALID_CONFIG", ERR_LIB_SSL, SSL_R_INVALID_CONFIG}, + #else + {"INVALID_CONFIG", 20, 283}, + #endif + #ifdef SSL_R_INVALID_CONFIGURATION_NAME + {"INVALID_CONFIGURATION_NAME", ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME}, + #else + {"INVALID_CONFIGURATION_NAME", 20, 113}, + #endif + #ifdef SSL_R_INVALID_CONTEXT + {"INVALID_CONTEXT", ERR_LIB_SSL, SSL_R_INVALID_CONTEXT}, + #else + {"INVALID_CONTEXT", 20, 282}, + #endif + #ifdef SSL_R_INVALID_CT_VALIDATION_TYPE + {"INVALID_CT_VALIDATION_TYPE", ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE}, + #else + {"INVALID_CT_VALIDATION_TYPE", 20, 212}, + #endif + #ifdef SSL_R_INVALID_KEY_UPDATE_TYPE + {"INVALID_KEY_UPDATE_TYPE", ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE}, + #else + {"INVALID_KEY_UPDATE_TYPE", 20, 120}, + #endif + #ifdef SSL_R_INVALID_MAX_EARLY_DATA + {"INVALID_MAX_EARLY_DATA", ERR_LIB_SSL, SSL_R_INVALID_MAX_EARLY_DATA}, + #else + {"INVALID_MAX_EARLY_DATA", 20, 174}, + #endif + #ifdef SSL_R_INVALID_NULL_CMD_NAME + {"INVALID_NULL_CMD_NAME", ERR_LIB_SSL, SSL_R_INVALID_NULL_CMD_NAME}, + #else + {"INVALID_NULL_CMD_NAME", 20, 385}, + #endif + #ifdef SSL_R_INVALID_SEQUENCE_NUMBER + {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, + #else + {"INVALID_SEQUENCE_NUMBER", 20, 402}, + #endif + #ifdef SSL_R_INVALID_SERVERINFO_DATA + {"INVALID_SERVERINFO_DATA", ERR_LIB_SSL, SSL_R_INVALID_SERVERINFO_DATA}, + #else + {"INVALID_SERVERINFO_DATA", 20, 388}, + #endif + #ifdef SSL_R_INVALID_SESSION_ID + {"INVALID_SESSION_ID", ERR_LIB_SSL, SSL_R_INVALID_SESSION_ID}, + #else + {"INVALID_SESSION_ID", 20, 999}, + #endif + #ifdef SSL_R_INVALID_SRP_USERNAME + {"INVALID_SRP_USERNAME", ERR_LIB_SSL, SSL_R_INVALID_SRP_USERNAME}, + #else + {"INVALID_SRP_USERNAME", 20, 357}, + #endif + #ifdef SSL_R_INVALID_STATUS_RESPONSE + {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_INVALID_STATUS_RESPONSE}, + #else + {"INVALID_STATUS_RESPONSE", 20, 328}, + #endif + #ifdef SSL_R_INVALID_TICKET_KEYS_LENGTH + {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH}, + #else + {"INVALID_TICKET_KEYS_LENGTH", 20, 325}, + #endif + #ifdef SSL_R_LENGTH_MISMATCH + {"LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_LENGTH_MISMATCH}, + #else + {"LENGTH_MISMATCH", 20, 159}, + #endif + #ifdef SSL_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 20, 404}, + #endif + #ifdef SSL_R_LENGTH_TOO_SHORT + {"LENGTH_TOO_SHORT", ERR_LIB_SSL, SSL_R_LENGTH_TOO_SHORT}, + #else + {"LENGTH_TOO_SHORT", 20, 160}, + #endif + #ifdef SSL_R_LIBRARY_BUG + {"LIBRARY_BUG", ERR_LIB_SSL, SSL_R_LIBRARY_BUG}, + #else + {"LIBRARY_BUG", 20, 274}, + #endif + #ifdef SSL_R_LIBRARY_HAS_NO_CIPHERS + {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS}, + #else + {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, + #endif + #ifdef SSL_R_MISSING_DSA_SIGNING_CERT + {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, + #else + {"MISSING_DSA_SIGNING_CERT", 20, 165}, + #endif + #ifdef SSL_R_MISSING_ECDSA_SIGNING_CERT + {"MISSING_ECDSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_ECDSA_SIGNING_CERT}, + #else + {"MISSING_ECDSA_SIGNING_CERT", 20, 381}, + #endif + #ifdef SSL_R_MISSING_FATAL + {"MISSING_FATAL", ERR_LIB_SSL, SSL_R_MISSING_FATAL}, + #else + {"MISSING_FATAL", 20, 256}, + #endif + #ifdef SSL_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_SSL, SSL_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 20, 290}, + #endif + #ifdef SSL_R_MISSING_RSA_CERTIFICATE + {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, SSL_R_MISSING_RSA_CERTIFICATE}, + #else + {"MISSING_RSA_CERTIFICATE", 20, 168}, + #endif + #ifdef SSL_R_MISSING_RSA_ENCRYPTING_CERT + {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_ENCRYPTING_CERT}, + #else + {"MISSING_RSA_ENCRYPTING_CERT", 20, 169}, + #endif + #ifdef SSL_R_MISSING_RSA_SIGNING_CERT + {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_SIGNING_CERT}, + #else + {"MISSING_RSA_SIGNING_CERT", 20, 170}, + #endif + #ifdef SSL_R_MISSING_SIGALGS_EXTENSION + {"MISSING_SIGALGS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SIGALGS_EXTENSION}, + #else + {"MISSING_SIGALGS_EXTENSION", 20, 112}, + #endif + #ifdef SSL_R_MISSING_SIGNING_CERT + {"MISSING_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_SIGNING_CERT}, + #else + {"MISSING_SIGNING_CERT", 20, 221}, + #endif + #ifdef SSL_R_MISSING_SRP_PARAM + {"MISSING_SRP_PARAM", ERR_LIB_SSL, SSL_R_MISSING_SRP_PARAM}, + #else + {"MISSING_SRP_PARAM", 20, 358}, + #endif + #ifdef SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION + {"MISSING_SUPPORTED_GROUPS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION}, + #else + {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, + #endif + #ifdef SSL_R_MISSING_TMP_DH_KEY + {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, + #else + {"MISSING_TMP_DH_KEY", 20, 171}, + #endif + #ifdef SSL_R_MISSING_TMP_ECDH_KEY + {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_ECDH_KEY}, + #else + {"MISSING_TMP_ECDH_KEY", 20, 311}, + #endif + #ifdef SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", ERR_LIB_SSL, SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA}, + #else + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", 20, 293}, + #endif + #ifdef SSL_R_NOT_ON_RECORD_BOUNDARY + {"NOT_ON_RECORD_BOUNDARY", ERR_LIB_SSL, SSL_R_NOT_ON_RECORD_BOUNDARY}, + #else + {"NOT_ON_RECORD_BOUNDARY", 20, 182}, + #endif + #ifdef SSL_R_NOT_REPLACING_CERTIFICATE + {"NOT_REPLACING_CERTIFICATE", ERR_LIB_SSL, SSL_R_NOT_REPLACING_CERTIFICATE}, + #else + {"NOT_REPLACING_CERTIFICATE", 20, 289}, + #endif + #ifdef SSL_R_NOT_SERVER + {"NOT_SERVER", ERR_LIB_SSL, SSL_R_NOT_SERVER}, + #else + {"NOT_SERVER", 20, 284}, + #endif + #ifdef SSL_R_NO_APPLICATION_PROTOCOL + {"NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_NO_APPLICATION_PROTOCOL}, + #else + {"NO_APPLICATION_PROTOCOL", 20, 235}, + #endif + #ifdef SSL_R_NO_CERTIFICATES_RETURNED + {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATES_RETURNED}, + #else + {"NO_CERTIFICATES_RETURNED", 20, 176}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_ASSIGNED + {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED}, + #else + {"NO_CERTIFICATE_ASSIGNED", 20, 177}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_SET + {"NO_CERTIFICATE_SET", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SET}, + #else + {"NO_CERTIFICATE_SET", 20, 179}, + #endif + #ifdef SSL_R_NO_CHANGE_FOLLOWING_HRR + {"NO_CHANGE_FOLLOWING_HRR", ERR_LIB_SSL, SSL_R_NO_CHANGE_FOLLOWING_HRR}, + #else + {"NO_CHANGE_FOLLOWING_HRR", 20, 214}, + #endif + #ifdef SSL_R_NO_CIPHERS_AVAILABLE + {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_CIPHERS_AVAILABLE}, + #else + {"NO_CIPHERS_AVAILABLE", 20, 181}, + #endif + #ifdef SSL_R_NO_CIPHERS_SPECIFIED + {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED}, + #else + {"NO_CIPHERS_SPECIFIED", 20, 183}, + #endif + #ifdef SSL_R_NO_CIPHER_MATCH + {"NO_CIPHER_MATCH", ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH}, + #else + {"NO_CIPHER_MATCH", 20, 185}, + #endif + #ifdef SSL_R_NO_CLIENT_CERT_METHOD + {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD}, + #else + {"NO_CLIENT_CERT_METHOD", 20, 331}, + #endif + #ifdef SSL_R_NO_COMPRESSION_SPECIFIED + {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_COMPRESSION_SPECIFIED}, + #else + {"NO_COMPRESSION_SPECIFIED", 20, 187}, + #endif + #ifdef SSL_R_NO_COOKIE_CALLBACK_SET + {"NO_COOKIE_CALLBACK_SET", ERR_LIB_SSL, SSL_R_NO_COOKIE_CALLBACK_SET}, + #else + {"NO_COOKIE_CALLBACK_SET", 20, 287}, + #endif + #ifdef SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER}, + #else + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", 20, 330}, + #endif + #ifdef SSL_R_NO_METHOD_SPECIFIED + {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED}, + #else + {"NO_METHOD_SPECIFIED", 20, 188}, + #endif + #ifdef SSL_R_NO_PEM_EXTENSIONS + {"NO_PEM_EXTENSIONS", ERR_LIB_SSL, SSL_R_NO_PEM_EXTENSIONS}, + #else + {"NO_PEM_EXTENSIONS", 20, 389}, + #endif + #ifdef SSL_R_NO_PRIVATE_KEY_ASSIGNED + {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED}, + #else + {"NO_PRIVATE_KEY_ASSIGNED", 20, 190}, + #endif + #ifdef SSL_R_NO_PROTOCOLS_AVAILABLE + {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_PROTOCOLS_AVAILABLE}, + #else + {"NO_PROTOCOLS_AVAILABLE", 20, 191}, + #endif + #ifdef SSL_R_NO_RENEGOTIATION + {"NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION}, + #else + {"NO_RENEGOTIATION", 20, 339}, + #endif + #ifdef SSL_R_NO_REQUIRED_DIGEST + {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, SSL_R_NO_REQUIRED_DIGEST}, + #else + {"NO_REQUIRED_DIGEST", 20, 324}, + #endif + #ifdef SSL_R_NO_SHARED_CIPHER + {"NO_SHARED_CIPHER", ERR_LIB_SSL, SSL_R_NO_SHARED_CIPHER}, + #else + {"NO_SHARED_CIPHER", 20, 193}, + #endif + #ifdef SSL_R_NO_SHARED_GROUPS + {"NO_SHARED_GROUPS", ERR_LIB_SSL, SSL_R_NO_SHARED_GROUPS}, + #else + {"NO_SHARED_GROUPS", 20, 410}, + #endif + #ifdef SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS + {"NO_SHARED_SIGNATURE_ALGORITHMS", ERR_LIB_SSL, SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS}, + #else + {"NO_SHARED_SIGNATURE_ALGORITHMS", 20, 376}, + #endif + #ifdef SSL_R_NO_SRTP_PROFILES + {"NO_SRTP_PROFILES", ERR_LIB_SSL, SSL_R_NO_SRTP_PROFILES}, + #else + {"NO_SRTP_PROFILES", 20, 359}, + #endif + #ifdef SSL_R_NO_SUITABLE_KEY_SHARE + {"NO_SUITABLE_KEY_SHARE", ERR_LIB_SSL, SSL_R_NO_SUITABLE_KEY_SHARE}, + #else + {"NO_SUITABLE_KEY_SHARE", 20, 101}, + #endif + #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM + {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, + #else + {"NO_SUITABLE_SIGNATURE_ALGORITHM", 20, 118}, + #endif + #ifdef SSL_R_NO_VALID_SCTS + {"NO_VALID_SCTS", ERR_LIB_SSL, SSL_R_NO_VALID_SCTS}, + #else + {"NO_VALID_SCTS", 20, 216}, + #endif + #ifdef SSL_R_NO_VERIFY_COOKIE_CALLBACK + {"NO_VERIFY_COOKIE_CALLBACK", ERR_LIB_SSL, SSL_R_NO_VERIFY_COOKIE_CALLBACK}, + #else + {"NO_VERIFY_COOKIE_CALLBACK", 20, 403}, + #endif + #ifdef SSL_R_NULL_SSL_CTX + {"NULL_SSL_CTX", ERR_LIB_SSL, SSL_R_NULL_SSL_CTX}, + #else + {"NULL_SSL_CTX", 20, 195}, + #endif + #ifdef SSL_R_NULL_SSL_METHOD_PASSED + {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED}, + #else + {"NULL_SSL_METHOD_PASSED", 20, 196}, + #endif + #ifdef SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED + {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED}, + #else + {"OLD_SESSION_CIPHER_NOT_RETURNED", 20, 197}, + #endif + #ifdef SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED}, + #else + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", 20, 344}, + #endif + #ifdef SSL_R_OVERFLOW_ERROR + {"OVERFLOW_ERROR", ERR_LIB_SSL, SSL_R_OVERFLOW_ERROR}, + #else + {"OVERFLOW_ERROR", 20, 237}, + #endif + #ifdef SSL_R_PACKET_LENGTH_TOO_LONG + {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PACKET_LENGTH_TOO_LONG}, + #else + {"PACKET_LENGTH_TOO_LONG", 20, 198}, + #endif + #ifdef SSL_R_PARSE_TLSEXT + {"PARSE_TLSEXT", ERR_LIB_SSL, SSL_R_PARSE_TLSEXT}, + #else + {"PARSE_TLSEXT", 20, 227}, + #endif + #ifdef SSL_R_PATH_TOO_LONG + {"PATH_TOO_LONG", ERR_LIB_SSL, SSL_R_PATH_TOO_LONG}, + #else + {"PATH_TOO_LONG", 20, 270}, + #endif + #ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE}, + #else + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", 20, 199}, + #endif + #ifdef SSL_R_PEM_NAME_BAD_PREFIX + {"PEM_NAME_BAD_PREFIX", ERR_LIB_SSL, SSL_R_PEM_NAME_BAD_PREFIX}, + #else + {"PEM_NAME_BAD_PREFIX", 20, 391}, + #endif + #ifdef SSL_R_PEM_NAME_TOO_SHORT + {"PEM_NAME_TOO_SHORT", ERR_LIB_SSL, SSL_R_PEM_NAME_TOO_SHORT}, + #else + {"PEM_NAME_TOO_SHORT", 20, 392}, + #endif + #ifdef SSL_R_PIPELINE_FAILURE + {"PIPELINE_FAILURE", ERR_LIB_SSL, SSL_R_PIPELINE_FAILURE}, + #else + {"PIPELINE_FAILURE", 20, 406}, + #endif + #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, + #else + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", 20, 278}, + #endif + #ifdef SSL_R_PRIVATE_KEY_MISMATCH + {"PRIVATE_KEY_MISMATCH", ERR_LIB_SSL, SSL_R_PRIVATE_KEY_MISMATCH}, + #else + {"PRIVATE_KEY_MISMATCH", 20, 288}, + #endif + #ifdef SSL_R_PROTOCOL_IS_SHUTDOWN + {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN}, + #else + {"PROTOCOL_IS_SHUTDOWN", 20, 207}, + #endif + #ifdef SSL_R_PSK_IDENTITY_NOT_FOUND + {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, SSL_R_PSK_IDENTITY_NOT_FOUND}, + #else + {"PSK_IDENTITY_NOT_FOUND", 20, 223}, + #endif + #ifdef SSL_R_PSK_NO_CLIENT_CB + {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, SSL_R_PSK_NO_CLIENT_CB}, + #else + {"PSK_NO_CLIENT_CB", 20, 224}, + #endif + #ifdef SSL_R_PSK_NO_SERVER_CB + {"PSK_NO_SERVER_CB", ERR_LIB_SSL, SSL_R_PSK_NO_SERVER_CB}, + #else + {"PSK_NO_SERVER_CB", 20, 225}, + #endif + #ifdef SSL_R_READ_BIO_NOT_SET + {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, + #else + {"READ_BIO_NOT_SET", 20, 211}, + #endif + #ifdef SSL_R_READ_TIMEOUT_EXPIRED + {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, SSL_R_READ_TIMEOUT_EXPIRED}, + #else + {"READ_TIMEOUT_EXPIRED", 20, 312}, + #endif + #ifdef SSL_R_RECORD_LENGTH_MISMATCH + {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, + #else + {"RECORD_LENGTH_MISMATCH", 20, 213}, + #endif + #ifdef SSL_R_RECORD_TOO_SMALL + {"RECORD_TOO_SMALL", ERR_LIB_SSL, SSL_R_RECORD_TOO_SMALL}, + #else + {"RECORD_TOO_SMALL", 20, 298}, + #endif + #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG + {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, + #else + {"RENEGOTIATE_EXT_TOO_LONG", 20, 335}, + #endif + #ifdef SSL_R_RENEGOTIATION_ENCODING_ERR + {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, SSL_R_RENEGOTIATION_ENCODING_ERR}, + #else + {"RENEGOTIATION_ENCODING_ERR", 20, 336}, + #endif + #ifdef SSL_R_RENEGOTIATION_MISMATCH + {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, SSL_R_RENEGOTIATION_MISMATCH}, + #else + {"RENEGOTIATION_MISMATCH", 20, 337}, + #endif + #ifdef SSL_R_REQUEST_PENDING + {"REQUEST_PENDING", ERR_LIB_SSL, SSL_R_REQUEST_PENDING}, + #else + {"REQUEST_PENDING", 20, 285}, + #endif + #ifdef SSL_R_REQUEST_SENT + {"REQUEST_SENT", ERR_LIB_SSL, SSL_R_REQUEST_SENT}, + #else + {"REQUEST_SENT", 20, 286}, + #endif + #ifdef SSL_R_REQUIRED_CIPHER_MISSING + {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_CIPHER_MISSING}, + #else + {"REQUIRED_CIPHER_MISSING", 20, 215}, + #endif + #ifdef SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING}, + #else + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", 20, 342}, + #endif + #ifdef SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING}, + #else + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", 20, 345}, + #endif + #ifdef SSL_R_SCT_VERIFICATION_FAILED + {"SCT_VERIFICATION_FAILED", ERR_LIB_SSL, SSL_R_SCT_VERIFICATION_FAILED}, + #else + {"SCT_VERIFICATION_FAILED", 20, 208}, + #endif + #ifdef SSL_R_SERVERHELLO_TLSEXT + {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, + #else + {"SERVERHELLO_TLSEXT", 20, 275}, + #endif + #ifdef SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED + {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED}, + #else + {"SESSION_ID_CONTEXT_UNINITIALIZED", 20, 277}, + #endif + #ifdef SSL_R_SHUTDOWN_WHILE_IN_INIT + {"SHUTDOWN_WHILE_IN_INIT", ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT}, + #else + {"SHUTDOWN_WHILE_IN_INIT", 20, 407}, + #endif + #ifdef SSL_R_SIGNATURE_ALGORITHMS_ERROR + {"SIGNATURE_ALGORITHMS_ERROR", ERR_LIB_SSL, SSL_R_SIGNATURE_ALGORITHMS_ERROR}, + #else + {"SIGNATURE_ALGORITHMS_ERROR", 20, 360}, + #endif + #ifdef SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE}, + #else + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", 20, 220}, + #endif + #ifdef SSL_R_SRP_A_CALC + {"SRP_A_CALC", ERR_LIB_SSL, SSL_R_SRP_A_CALC}, + #else + {"SRP_A_CALC", 20, 361}, + #endif + #ifdef SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", ERR_LIB_SSL, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES}, + #else + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", 20, 362}, + #endif + #ifdef SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", ERR_LIB_SSL, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG}, + #else + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", 20, 363}, + #endif + #ifdef SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE + {"SRTP_UNKNOWN_PROTECTION_PROFILE", ERR_LIB_SSL, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE}, + #else + {"SRTP_UNKNOWN_PROTECTION_PROFILE", 20, 364}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH}, + #else + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", 20, 232}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME + {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME}, + #else + {"SSL3_EXT_INVALID_SERVERNAME", 20, 319}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE}, + #else + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", 20, 320}, + #endif + #ifdef SSL_R_SSL3_SESSION_ID_TOO_LONG + {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_LONG}, + #else + {"SSL3_SESSION_ID_TOO_LONG", 20, 300}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE + {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, + #else + {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC + {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, + #else + {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, + #else + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED + {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, + #else + {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, + #else + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, + #endif + #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, + #else + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, + #endif + #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE + {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, + #else + {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, + #endif + #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER + {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, + #else + {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, + #endif + #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE + {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, + #else + {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, + #else + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, + #else + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 20, 117}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 20, 125}, + #endif + #ifdef SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION}, + #else + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", 20, 228}, + #endif + #ifdef SSL_R_SSL_HANDSHAKE_FAILURE + {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE}, + #else + {"SSL_HANDSHAKE_FAILURE", 20, 229}, + #endif + #ifdef SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS + {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS}, + #else + {"SSL_LIBRARY_HAS_NO_CIPHERS", 20, 230}, + #endif + #ifdef SSL_R_SSL_NEGATIVE_LENGTH + {"SSL_NEGATIVE_LENGTH", ERR_LIB_SSL, SSL_R_SSL_NEGATIVE_LENGTH}, + #else + {"SSL_NEGATIVE_LENGTH", 20, 372}, + #endif + #ifdef SSL_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 20, 126}, + #endif + #ifdef SSL_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 20, 136}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CALLBACK_FAILED + {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED}, + #else + {"SSL_SESSION_ID_CALLBACK_FAILED", 20, 301}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONFLICT + {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONFLICT}, + #else + {"SSL_SESSION_ID_CONFLICT", 20, 302}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG}, + #else + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", 20, 273}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH + {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH}, + #else + {"SSL_SESSION_ID_HAS_BAD_LENGTH", 20, 303}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_TOO_LONG + {"SSL_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_TOO_LONG}, + #else + {"SSL_SESSION_ID_TOO_LONG", 20, 408}, + #endif + #ifdef SSL_R_SSL_SESSION_VERSION_MISMATCH + {"SSL_SESSION_VERSION_MISMATCH", ERR_LIB_SSL, SSL_R_SSL_SESSION_VERSION_MISMATCH}, + #else + {"SSL_SESSION_VERSION_MISMATCH", 20, 210}, + #endif + #ifdef SSL_R_STILL_IN_INIT + {"STILL_IN_INIT", ERR_LIB_SSL, SSL_R_STILL_IN_INIT}, + #else + {"STILL_IN_INIT", 20, 121}, + #endif + #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, + #else + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, + #endif + #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION + {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, + #else + {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, + #endif + #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED + {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, + #else + {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR + {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, + #else + {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED + {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, + #else + {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR + {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, + #else + {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, + #endif + #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION + {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, + #else + {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, + #else + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, + #else + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR + {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, + #else + {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, + #endif + #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION + {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, + #else + {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, + #endif + #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION + {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, + #else + {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, + #endif + #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW + {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, + #else + {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, + #endif + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA + {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, + #else + {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, + #endif + #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED + {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, + #else + {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, + #else + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, + #else + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, + #endif + #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE + {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, + #else + {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, + #endif + #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME + {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, + #else + {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, + #endif + #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION + {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, + #else + {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, + #endif + #ifdef SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT + {"TLS_HEARTBEAT_PEER_DOESNT_ACCEPT", ERR_LIB_SSL, SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT}, + #else + {"TLS_HEARTBEAT_PEER_DOESNT_ACCEPT", 20, 365}, + #endif + #ifdef SSL_R_TLS_HEARTBEAT_PENDING + {"TLS_HEARTBEAT_PENDING", ERR_LIB_SSL, SSL_R_TLS_HEARTBEAT_PENDING}, + #else + {"TLS_HEARTBEAT_PENDING", 20, 366}, + #endif + #ifdef SSL_R_TLS_ILLEGAL_EXPORTER_LABEL + {"TLS_ILLEGAL_EXPORTER_LABEL", ERR_LIB_SSL, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL}, + #else + {"TLS_ILLEGAL_EXPORTER_LABEL", 20, 367}, + #endif + #ifdef SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST + {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST}, + #else + {"TLS_INVALID_ECPOINTFORMAT_LIST", 20, 157}, + #endif + #ifdef SSL_R_TOO_MANY_KEY_UPDATES + {"TOO_MANY_KEY_UPDATES", ERR_LIB_SSL, SSL_R_TOO_MANY_KEY_UPDATES}, + #else + {"TOO_MANY_KEY_UPDATES", 20, 132}, + #endif + #ifdef SSL_R_TOO_MANY_WARN_ALERTS + {"TOO_MANY_WARN_ALERTS", ERR_LIB_SSL, SSL_R_TOO_MANY_WARN_ALERTS}, + #else + {"TOO_MANY_WARN_ALERTS", 20, 409}, + #endif + #ifdef SSL_R_TOO_MUCH_EARLY_DATA + {"TOO_MUCH_EARLY_DATA", ERR_LIB_SSL, SSL_R_TOO_MUCH_EARLY_DATA}, + #else + {"TOO_MUCH_EARLY_DATA", 20, 164}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS + {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS}, + #else + {"UNABLE_TO_FIND_ECDH_PARAMETERS", 20, 314}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS}, + #else + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", 20, 239}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", 20, 242}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", 20, 243}, + #endif + #ifdef SSL_R_UNEXPECTED_CCS_MESSAGE + {"UNEXPECTED_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_CCS_MESSAGE}, + #else + {"UNEXPECTED_CCS_MESSAGE", 20, 262}, + #endif + #ifdef SSL_R_UNEXPECTED_END_OF_EARLY_DATA + {"UNEXPECTED_END_OF_EARLY_DATA", ERR_LIB_SSL, SSL_R_UNEXPECTED_END_OF_EARLY_DATA}, + #else + {"UNEXPECTED_END_OF_EARLY_DATA", 20, 178}, + #endif + #ifdef SSL_R_UNEXPECTED_MESSAGE + {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_MESSAGE}, + #else + {"UNEXPECTED_MESSAGE", 20, 244}, + #endif + #ifdef SSL_R_UNEXPECTED_RECORD + {"UNEXPECTED_RECORD", ERR_LIB_SSL, SSL_R_UNEXPECTED_RECORD}, + #else + {"UNEXPECTED_RECORD", 20, 245}, + #endif + #ifdef SSL_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_SSL, SSL_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 20, 276}, + #endif + #ifdef SSL_R_UNKNOWN_ALERT_TYPE + {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_ALERT_TYPE}, + #else + {"UNKNOWN_ALERT_TYPE", 20, 246}, + #endif + #ifdef SSL_R_UNKNOWN_CERTIFICATE_TYPE + {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE}, + #else + {"UNKNOWN_CERTIFICATE_TYPE", 20, 247}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_RETURNED + {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_RETURNED}, + #else + {"UNKNOWN_CIPHER_RETURNED", 20, 248}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_TYPE + {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_TYPE}, + #else + {"UNKNOWN_CIPHER_TYPE", 20, 249}, + #endif + #ifdef SSL_R_UNKNOWN_CMD_NAME + {"UNKNOWN_CMD_NAME", ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME}, + #else + {"UNKNOWN_CMD_NAME", 20, 386}, + #endif + #ifdef SSL_R_UNKNOWN_COMMAND + {"UNKNOWN_COMMAND", ERR_LIB_SSL, SSL_R_UNKNOWN_COMMAND}, + #else + {"UNKNOWN_COMMAND", 20, 139}, + #endif + #ifdef SSL_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_SSL, SSL_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 20, 368}, + #endif + #ifdef SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE + {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE}, + #else + {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, + #endif + #ifdef SSL_R_UNKNOWN_PKEY_TYPE + {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, + #else + {"UNKNOWN_PKEY_TYPE", 20, 251}, + #endif + #ifdef SSL_R_UNKNOWN_PROTOCOL + {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, SSL_R_UNKNOWN_PROTOCOL}, + #else + {"UNKNOWN_PROTOCOL", 20, 252}, + #endif + #ifdef SSL_R_UNKNOWN_SSL_VERSION + {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNKNOWN_SSL_VERSION}, + #else + {"UNKNOWN_SSL_VERSION", 20, 254}, + #endif + #ifdef SSL_R_UNKNOWN_STATE + {"UNKNOWN_STATE", ERR_LIB_SSL, SSL_R_UNKNOWN_STATE}, + #else + {"UNKNOWN_STATE", 20, 255}, + #endif + #ifdef SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED}, + #else + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", 20, 338}, + #endif + #ifdef SSL_R_UNSOLICITED_EXTENSION + {"UNSOLICITED_EXTENSION", ERR_LIB_SSL, SSL_R_UNSOLICITED_EXTENSION}, + #else + {"UNSOLICITED_EXTENSION", 20, 217}, + #endif + #ifdef SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, + #endif + #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE + {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, + #else + {"UNSUPPORTED_ELLIPTIC_CURVE", 20, 315}, + #endif + #ifdef SSL_R_UNSUPPORTED_PROTOCOL + {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL}, + #else + {"UNSUPPORTED_PROTOCOL", 20, 258}, + #endif + #ifdef SSL_R_UNSUPPORTED_SSL_VERSION + {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNSUPPORTED_SSL_VERSION}, + #else + {"UNSUPPORTED_SSL_VERSION", 20, 259}, + #endif + #ifdef SSL_R_UNSUPPORTED_STATUS_TYPE + {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_STATUS_TYPE}, + #else + {"UNSUPPORTED_STATUS_TYPE", 20, 329}, + #endif + #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED + {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, + #else + {"USE_SRTP_NOT_NEGOTIATED", 20, 369}, + #endif + #ifdef SSL_R_VERSION_TOO_HIGH + {"VERSION_TOO_HIGH", ERR_LIB_SSL, SSL_R_VERSION_TOO_HIGH}, + #else + {"VERSION_TOO_HIGH", 20, 166}, + #endif + #ifdef SSL_R_VERSION_TOO_LOW + {"VERSION_TOO_LOW", ERR_LIB_SSL, SSL_R_VERSION_TOO_LOW}, + #else + {"VERSION_TOO_LOW", 20, 396}, + #endif + #ifdef SSL_R_WRONG_CERTIFICATE_TYPE + {"WRONG_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_CERTIFICATE_TYPE}, + #else + {"WRONG_CERTIFICATE_TYPE", 20, 383}, + #endif + #ifdef SSL_R_WRONG_CIPHER_RETURNED + {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_WRONG_CIPHER_RETURNED}, + #else + {"WRONG_CIPHER_RETURNED", 20, 261}, + #endif + #ifdef SSL_R_WRONG_CURVE + {"WRONG_CURVE", ERR_LIB_SSL, SSL_R_WRONG_CURVE}, + #else + {"WRONG_CURVE", 20, 378}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 20, 264}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_SIZE + {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_SIZE}, + #else + {"WRONG_SIGNATURE_SIZE", 20, 265}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_TYPE + {"WRONG_SIGNATURE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_TYPE}, + #else + {"WRONG_SIGNATURE_TYPE", 20, 370}, + #endif + #ifdef SSL_R_WRONG_SSL_VERSION + {"WRONG_SSL_VERSION", ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION}, + #else + {"WRONG_SSL_VERSION", 20, 266}, + #endif + #ifdef SSL_R_WRONG_VERSION_NUMBER + {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_WRONG_VERSION_NUMBER}, + #else + {"WRONG_VERSION_NUMBER", 20, 267}, + #endif + #ifdef SSL_R_X509_LIB + {"X509_LIB", ERR_LIB_SSL, SSL_R_X509_LIB}, + #else + {"X509_LIB", 20, 268}, + #endif + #ifdef SSL_R_X509_VERIFICATION_SETUP_PROBLEMS + {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS}, + #else + {"X509_VERIFICATION_SETUP_PROBLEMS", 20, 269}, + #endif + #ifdef TS_R_BAD_PKCS7_TYPE + {"BAD_PKCS7_TYPE", ERR_LIB_TS, TS_R_BAD_PKCS7_TYPE}, + #else + {"BAD_PKCS7_TYPE", 47, 132}, + #endif + #ifdef TS_R_BAD_TYPE + {"BAD_TYPE", ERR_LIB_TS, TS_R_BAD_TYPE}, + #else + {"BAD_TYPE", 47, 133}, + #endif + #ifdef TS_R_CANNOT_LOAD_CERT + {"CANNOT_LOAD_CERT", ERR_LIB_TS, TS_R_CANNOT_LOAD_CERT}, + #else + {"CANNOT_LOAD_CERT", 47, 137}, + #endif + #ifdef TS_R_CANNOT_LOAD_KEY + {"CANNOT_LOAD_KEY", ERR_LIB_TS, TS_R_CANNOT_LOAD_KEY}, + #else + {"CANNOT_LOAD_KEY", 47, 138}, + #endif + #ifdef TS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_TS, TS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 47, 100}, + #endif + #ifdef TS_R_COULD_NOT_SET_ENGINE + {"COULD_NOT_SET_ENGINE", ERR_LIB_TS, TS_R_COULD_NOT_SET_ENGINE}, + #else + {"COULD_NOT_SET_ENGINE", 47, 127}, + #endif + #ifdef TS_R_COULD_NOT_SET_TIME + {"COULD_NOT_SET_TIME", ERR_LIB_TS, TS_R_COULD_NOT_SET_TIME}, + #else + {"COULD_NOT_SET_TIME", 47, 115}, + #endif + #ifdef TS_R_DETACHED_CONTENT + {"DETACHED_CONTENT", ERR_LIB_TS, TS_R_DETACHED_CONTENT}, + #else + {"DETACHED_CONTENT", 47, 134}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_ERROR + {"ESS_ADD_SIGNING_CERT_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_ERROR", 47, 116}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR + {"ESS_ADD_SIGNING_CERT_V2_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_V2_ERROR", 47, 139}, + #endif + #ifdef TS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_TS, TS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 47, 101}, + #endif + #ifdef TS_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_TS, TS_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 47, 102}, + #endif + #ifdef TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", ERR_LIB_TS, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE}, + #else + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", 47, 117}, + #endif + #ifdef TS_R_MESSAGE_IMPRINT_MISMATCH + {"MESSAGE_IMPRINT_MISMATCH", ERR_LIB_TS, TS_R_MESSAGE_IMPRINT_MISMATCH}, + #else + {"MESSAGE_IMPRINT_MISMATCH", 47, 103}, + #endif + #ifdef TS_R_NONCE_MISMATCH + {"NONCE_MISMATCH", ERR_LIB_TS, TS_R_NONCE_MISMATCH}, + #else + {"NONCE_MISMATCH", 47, 104}, + #endif + #ifdef TS_R_NONCE_NOT_RETURNED + {"NONCE_NOT_RETURNED", ERR_LIB_TS, TS_R_NONCE_NOT_RETURNED}, + #else + {"NONCE_NOT_RETURNED", 47, 105}, + #endif + #ifdef TS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_TS, TS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 47, 106}, + #endif + #ifdef TS_R_NO_TIME_STAMP_TOKEN + {"NO_TIME_STAMP_TOKEN", ERR_LIB_TS, TS_R_NO_TIME_STAMP_TOKEN}, + #else + {"NO_TIME_STAMP_TOKEN", 47, 107}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 47, 118}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR + {"PKCS7_ADD_SIGNED_ATTR_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR}, + #else + {"PKCS7_ADD_SIGNED_ATTR_ERROR", 47, 119}, + #endif + #ifdef TS_R_PKCS7_TO_TS_TST_INFO_FAILED + {"PKCS7_TO_TS_TST_INFO_FAILED", ERR_LIB_TS, TS_R_PKCS7_TO_TS_TST_INFO_FAILED}, + #else + {"PKCS7_TO_TS_TST_INFO_FAILED", 47, 129}, + #endif + #ifdef TS_R_POLICY_MISMATCH + {"POLICY_MISMATCH", ERR_LIB_TS, TS_R_POLICY_MISMATCH}, + #else + {"POLICY_MISMATCH", 47, 108}, + #endif + #ifdef TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_TS, TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 47, 120}, + #endif + #ifdef TS_R_RESPONSE_SETUP_ERROR + {"RESPONSE_SETUP_ERROR", ERR_LIB_TS, TS_R_RESPONSE_SETUP_ERROR}, + #else + {"RESPONSE_SETUP_ERROR", 47, 121}, + #endif + #ifdef TS_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_TS, TS_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 47, 109}, + #endif + #ifdef TS_R_THERE_MUST_BE_ONE_SIGNER + {"THERE_MUST_BE_ONE_SIGNER", ERR_LIB_TS, TS_R_THERE_MUST_BE_ONE_SIGNER}, + #else + {"THERE_MUST_BE_ONE_SIGNER", 47, 110}, + #endif + #ifdef TS_R_TIME_SYSCALL_ERROR + {"TIME_SYSCALL_ERROR", ERR_LIB_TS, TS_R_TIME_SYSCALL_ERROR}, + #else + {"TIME_SYSCALL_ERROR", 47, 122}, + #endif + #ifdef TS_R_TOKEN_NOT_PRESENT + {"TOKEN_NOT_PRESENT", ERR_LIB_TS, TS_R_TOKEN_NOT_PRESENT}, + #else + {"TOKEN_NOT_PRESENT", 47, 130}, + #endif + #ifdef TS_R_TOKEN_PRESENT + {"TOKEN_PRESENT", ERR_LIB_TS, TS_R_TOKEN_PRESENT}, + #else + {"TOKEN_PRESENT", 47, 131}, + #endif + #ifdef TS_R_TSA_NAME_MISMATCH + {"TSA_NAME_MISMATCH", ERR_LIB_TS, TS_R_TSA_NAME_MISMATCH}, + #else + {"TSA_NAME_MISMATCH", 47, 111}, + #endif + #ifdef TS_R_TSA_UNTRUSTED + {"TSA_UNTRUSTED", ERR_LIB_TS, TS_R_TSA_UNTRUSTED}, + #else + {"TSA_UNTRUSTED", 47, 112}, + #endif + #ifdef TS_R_TST_INFO_SETUP_ERROR + {"TST_INFO_SETUP_ERROR", ERR_LIB_TS, TS_R_TST_INFO_SETUP_ERROR}, + #else + {"TST_INFO_SETUP_ERROR", 47, 123}, + #endif + #ifdef TS_R_TS_DATASIGN + {"TS_DATASIGN", ERR_LIB_TS, TS_R_TS_DATASIGN}, + #else + {"TS_DATASIGN", 47, 124}, + #endif + #ifdef TS_R_UNACCEPTABLE_POLICY + {"UNACCEPTABLE_POLICY", ERR_LIB_TS, TS_R_UNACCEPTABLE_POLICY}, + #else + {"UNACCEPTABLE_POLICY", 47, 125}, + #endif + #ifdef TS_R_UNSUPPORTED_MD_ALGORITHM + {"UNSUPPORTED_MD_ALGORITHM", ERR_LIB_TS, TS_R_UNSUPPORTED_MD_ALGORITHM}, + #else + {"UNSUPPORTED_MD_ALGORITHM", 47, 126}, + #endif + #ifdef TS_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_TS, TS_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 47, 113}, + #endif + #ifdef TS_R_VAR_BAD_VALUE + {"VAR_BAD_VALUE", ERR_LIB_TS, TS_R_VAR_BAD_VALUE}, + #else + {"VAR_BAD_VALUE", 47, 135}, + #endif + #ifdef TS_R_VAR_LOOKUP_FAILURE + {"VAR_LOOKUP_FAILURE", ERR_LIB_TS, TS_R_VAR_LOOKUP_FAILURE}, + #else + {"VAR_LOOKUP_FAILURE", 47, 136}, + #endif + #ifdef TS_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_TS, TS_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 47, 114}, + #endif + #ifdef UI_R_COMMON_OK_AND_CANCEL_CHARACTERS + {"COMMON_OK_AND_CANCEL_CHARACTERS", ERR_LIB_UI, UI_R_COMMON_OK_AND_CANCEL_CHARACTERS}, + #else + {"COMMON_OK_AND_CANCEL_CHARACTERS", 40, 104}, + #endif + #ifdef UI_R_INDEX_TOO_LARGE + {"INDEX_TOO_LARGE", ERR_LIB_UI, UI_R_INDEX_TOO_LARGE}, + #else + {"INDEX_TOO_LARGE", 40, 102}, + #endif + #ifdef UI_R_INDEX_TOO_SMALL + {"INDEX_TOO_SMALL", ERR_LIB_UI, UI_R_INDEX_TOO_SMALL}, + #else + {"INDEX_TOO_SMALL", 40, 103}, + #endif + #ifdef UI_R_NO_RESULT_BUFFER + {"NO_RESULT_BUFFER", ERR_LIB_UI, UI_R_NO_RESULT_BUFFER}, + #else + {"NO_RESULT_BUFFER", 40, 105}, + #endif + #ifdef UI_R_PROCESSING_ERROR + {"PROCESSING_ERROR", ERR_LIB_UI, UI_R_PROCESSING_ERROR}, + #else + {"PROCESSING_ERROR", 40, 107}, + #endif + #ifdef UI_R_RESULT_TOO_LARGE + {"RESULT_TOO_LARGE", ERR_LIB_UI, UI_R_RESULT_TOO_LARGE}, + #else + {"RESULT_TOO_LARGE", 40, 100}, + #endif + #ifdef UI_R_RESULT_TOO_SMALL + {"RESULT_TOO_SMALL", ERR_LIB_UI, UI_R_RESULT_TOO_SMALL}, + #else + {"RESULT_TOO_SMALL", 40, 101}, + #endif + #ifdef UI_R_SYSASSIGN_ERROR + {"SYSASSIGN_ERROR", ERR_LIB_UI, UI_R_SYSASSIGN_ERROR}, + #else + {"SYSASSIGN_ERROR", 40, 109}, + #endif + #ifdef UI_R_SYSDASSGN_ERROR + {"SYSDASSGN_ERROR", ERR_LIB_UI, UI_R_SYSDASSGN_ERROR}, + #else + {"SYSDASSGN_ERROR", 40, 110}, + #endif + #ifdef UI_R_SYSQIOW_ERROR + {"SYSQIOW_ERROR", ERR_LIB_UI, UI_R_SYSQIOW_ERROR}, + #else + {"SYSQIOW_ERROR", 40, 111}, + #endif + #ifdef UI_R_UNKNOWN_CONTROL_COMMAND + {"UNKNOWN_CONTROL_COMMAND", ERR_LIB_UI, UI_R_UNKNOWN_CONTROL_COMMAND}, + #else + {"UNKNOWN_CONTROL_COMMAND", 40, 106}, + #endif + #ifdef UI_R_UNKNOWN_TTYGET_ERRNO_VALUE + {"UNKNOWN_TTYGET_ERRNO_VALUE", ERR_LIB_UI, UI_R_UNKNOWN_TTYGET_ERRNO_VALUE}, + #else + {"UNKNOWN_TTYGET_ERRNO_VALUE", 40, 108}, + #endif + #ifdef UI_R_USER_DATA_DUPLICATION_UNSUPPORTED + {"USER_DATA_DUPLICATION_UNSUPPORTED", ERR_LIB_UI, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED}, + #else + {"USER_DATA_DUPLICATION_UNSUPPORTED", 40, 112}, + #endif + #ifdef X509V3_R_BAD_IP_ADDRESS + {"BAD_IP_ADDRESS", ERR_LIB_X509V3, X509V3_R_BAD_IP_ADDRESS}, + #else + {"BAD_IP_ADDRESS", 34, 118}, + #endif + #ifdef X509V3_R_BAD_OBJECT + {"BAD_OBJECT", ERR_LIB_X509V3, X509V3_R_BAD_OBJECT}, + #else + {"BAD_OBJECT", 34, 119}, + #endif + #ifdef X509V3_R_BN_DEC2BN_ERROR + {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, + #else + {"BN_DEC2BN_ERROR", 34, 100}, + #endif + #ifdef X509V3_R_BN_TO_ASN1_INTEGER_ERROR + {"BN_TO_ASN1_INTEGER_ERROR", ERR_LIB_X509V3, X509V3_R_BN_TO_ASN1_INTEGER_ERROR}, + #else + {"BN_TO_ASN1_INTEGER_ERROR", 34, 101}, + #endif + #ifdef X509V3_R_DIRNAME_ERROR + {"DIRNAME_ERROR", ERR_LIB_X509V3, X509V3_R_DIRNAME_ERROR}, + #else + {"DIRNAME_ERROR", 34, 149}, + #endif + #ifdef X509V3_R_DISTPOINT_ALREADY_SET + {"DISTPOINT_ALREADY_SET", ERR_LIB_X509V3, X509V3_R_DISTPOINT_ALREADY_SET}, + #else + {"DISTPOINT_ALREADY_SET", 34, 160}, + #endif + #ifdef X509V3_R_DUPLICATE_ZONE_ID + {"DUPLICATE_ZONE_ID", ERR_LIB_X509V3, X509V3_R_DUPLICATE_ZONE_ID}, + #else + {"DUPLICATE_ZONE_ID", 34, 133}, + #endif + #ifdef X509V3_R_ERROR_CONVERTING_ZONE + {"ERROR_CONVERTING_ZONE", ERR_LIB_X509V3, X509V3_R_ERROR_CONVERTING_ZONE}, + #else + {"ERROR_CONVERTING_ZONE", 34, 131}, + #endif + #ifdef X509V3_R_ERROR_CREATING_EXTENSION + {"ERROR_CREATING_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_CREATING_EXTENSION}, + #else + {"ERROR_CREATING_EXTENSION", 34, 144}, + #endif + #ifdef X509V3_R_ERROR_IN_EXTENSION + {"ERROR_IN_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_IN_EXTENSION}, + #else + {"ERROR_IN_EXTENSION", 34, 128}, + #endif + #ifdef X509V3_R_EXPECTED_A_SECTION_NAME + {"EXPECTED_A_SECTION_NAME", ERR_LIB_X509V3, X509V3_R_EXPECTED_A_SECTION_NAME}, + #else + {"EXPECTED_A_SECTION_NAME", 34, 137}, + #endif + #ifdef X509V3_R_EXTENSION_EXISTS + {"EXTENSION_EXISTS", ERR_LIB_X509V3, X509V3_R_EXTENSION_EXISTS}, + #else + {"EXTENSION_EXISTS", 34, 145}, + #endif + #ifdef X509V3_R_EXTENSION_NAME_ERROR + {"EXTENSION_NAME_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_NAME_ERROR}, + #else + {"EXTENSION_NAME_ERROR", 34, 115}, + #endif + #ifdef X509V3_R_EXTENSION_NOT_FOUND + {"EXTENSION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_EXTENSION_NOT_FOUND}, + #else + {"EXTENSION_NOT_FOUND", 34, 102}, + #endif + #ifdef X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED + {"EXTENSION_SETTING_NOT_SUPPORTED", ERR_LIB_X509V3, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED}, + #else + {"EXTENSION_SETTING_NOT_SUPPORTED", 34, 103}, + #endif + #ifdef X509V3_R_EXTENSION_VALUE_ERROR + {"EXTENSION_VALUE_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_VALUE_ERROR}, + #else + {"EXTENSION_VALUE_ERROR", 34, 116}, + #endif + #ifdef X509V3_R_ILLEGAL_EMPTY_EXTENSION + {"ILLEGAL_EMPTY_EXTENSION", ERR_LIB_X509V3, X509V3_R_ILLEGAL_EMPTY_EXTENSION}, + #else + {"ILLEGAL_EMPTY_EXTENSION", 34, 151}, + #endif + #ifdef X509V3_R_INCORRECT_POLICY_SYNTAX_TAG + {"INCORRECT_POLICY_SYNTAX_TAG", ERR_LIB_X509V3, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG}, + #else + {"INCORRECT_POLICY_SYNTAX_TAG", 34, 152}, + #endif + #ifdef X509V3_R_INVALID_ASNUMBER + {"INVALID_ASNUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_ASNUMBER}, + #else + {"INVALID_ASNUMBER", 34, 162}, + #endif + #ifdef X509V3_R_INVALID_ASRANGE + {"INVALID_ASRANGE", ERR_LIB_X509V3, X509V3_R_INVALID_ASRANGE}, + #else + {"INVALID_ASRANGE", 34, 163}, + #endif + #ifdef X509V3_R_INVALID_BOOLEAN_STRING + {"INVALID_BOOLEAN_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_BOOLEAN_STRING}, + #else + {"INVALID_BOOLEAN_STRING", 34, 104}, + #endif + #ifdef X509V3_R_INVALID_EXTENSION_STRING + {"INVALID_EXTENSION_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_EXTENSION_STRING}, + #else + {"INVALID_EXTENSION_STRING", 34, 105}, + #endif + #ifdef X509V3_R_INVALID_INHERITANCE + {"INVALID_INHERITANCE", ERR_LIB_X509V3, X509V3_R_INVALID_INHERITANCE}, + #else + {"INVALID_INHERITANCE", 34, 165}, + #endif + #ifdef X509V3_R_INVALID_IPADDRESS + {"INVALID_IPADDRESS", ERR_LIB_X509V3, X509V3_R_INVALID_IPADDRESS}, + #else + {"INVALID_IPADDRESS", 34, 166}, + #endif + #ifdef X509V3_R_INVALID_MULTIPLE_RDNS + {"INVALID_MULTIPLE_RDNS", ERR_LIB_X509V3, X509V3_R_INVALID_MULTIPLE_RDNS}, + #else + {"INVALID_MULTIPLE_RDNS", 34, 161}, + #endif + #ifdef X509V3_R_INVALID_NAME + {"INVALID_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NAME}, + #else + {"INVALID_NAME", 34, 106}, + #endif + #ifdef X509V3_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 34, 107}, + #endif + #ifdef X509V3_R_INVALID_NULL_NAME + {"INVALID_NULL_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_NAME}, + #else + {"INVALID_NULL_NAME", 34, 108}, + #endif + #ifdef X509V3_R_INVALID_NULL_VALUE + {"INVALID_NULL_VALUE", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_VALUE}, + #else + {"INVALID_NULL_VALUE", 34, 109}, + #endif + #ifdef X509V3_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 34, 140}, + #endif + #ifdef X509V3_R_INVALID_NUMBERS + {"INVALID_NUMBERS", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBERS}, + #else + {"INVALID_NUMBERS", 34, 141}, + #endif + #ifdef X509V3_R_INVALID_OBJECT_IDENTIFIER + {"INVALID_OBJECT_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER}, + #else + {"INVALID_OBJECT_IDENTIFIER", 34, 110}, + #endif + #ifdef X509V3_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_X509V3, X509V3_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 34, 138}, + #endif + #ifdef X509V3_R_INVALID_POLICY_IDENTIFIER + {"INVALID_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_POLICY_IDENTIFIER}, + #else + {"INVALID_POLICY_IDENTIFIER", 34, 134}, + #endif + #ifdef X509V3_R_INVALID_PROXY_POLICY_SETTING + {"INVALID_PROXY_POLICY_SETTING", ERR_LIB_X509V3, X509V3_R_INVALID_PROXY_POLICY_SETTING}, + #else + {"INVALID_PROXY_POLICY_SETTING", 34, 153}, + #endif + #ifdef X509V3_R_INVALID_PURPOSE + {"INVALID_PURPOSE", ERR_LIB_X509V3, X509V3_R_INVALID_PURPOSE}, + #else + {"INVALID_PURPOSE", 34, 146}, + #endif + #ifdef X509V3_R_INVALID_SAFI + {"INVALID_SAFI", ERR_LIB_X509V3, X509V3_R_INVALID_SAFI}, + #else + {"INVALID_SAFI", 34, 164}, + #endif + #ifdef X509V3_R_INVALID_SECTION + {"INVALID_SECTION", ERR_LIB_X509V3, X509V3_R_INVALID_SECTION}, + #else + {"INVALID_SECTION", 34, 135}, + #endif + #ifdef X509V3_R_INVALID_SYNTAX + {"INVALID_SYNTAX", ERR_LIB_X509V3, X509V3_R_INVALID_SYNTAX}, + #else + {"INVALID_SYNTAX", 34, 143}, + #endif + #ifdef X509V3_R_ISSUER_DECODE_ERROR + {"ISSUER_DECODE_ERROR", ERR_LIB_X509V3, X509V3_R_ISSUER_DECODE_ERROR}, + #else + {"ISSUER_DECODE_ERROR", 34, 126}, + #endif + #ifdef X509V3_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_X509V3, X509V3_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 34, 124}, + #endif + #ifdef X509V3_R_NEED_ORGANIZATION_AND_NUMBERS + {"NEED_ORGANIZATION_AND_NUMBERS", ERR_LIB_X509V3, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS}, + #else + {"NEED_ORGANIZATION_AND_NUMBERS", 34, 142}, + #endif + #ifdef X509V3_R_NO_CONFIG_DATABASE + {"NO_CONFIG_DATABASE", ERR_LIB_X509V3, X509V3_R_NO_CONFIG_DATABASE}, + #else + {"NO_CONFIG_DATABASE", 34, 136}, + #endif + #ifdef X509V3_R_NO_ISSUER_CERTIFICATE + {"NO_ISSUER_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_CERTIFICATE}, + #else + {"NO_ISSUER_CERTIFICATE", 34, 121}, + #endif + #ifdef X509V3_R_NO_ISSUER_DETAILS + {"NO_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_DETAILS}, + #else + {"NO_ISSUER_DETAILS", 34, 127}, + #endif + #ifdef X509V3_R_NO_POLICY_IDENTIFIER + {"NO_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_NO_POLICY_IDENTIFIER}, + #else + {"NO_POLICY_IDENTIFIER", 34, 139}, + #endif + #ifdef X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", ERR_LIB_X509V3, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED}, + #else + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", 34, 154}, + #endif + #ifdef X509V3_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_X509V3, X509V3_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 34, 114}, + #endif + #ifdef X509V3_R_NO_SUBJECT_DETAILS + {"NO_SUBJECT_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_SUBJECT_DETAILS}, + #else + {"NO_SUBJECT_DETAILS", 34, 125}, + #endif + #ifdef X509V3_R_OPERATION_NOT_DEFINED + {"OPERATION_NOT_DEFINED", ERR_LIB_X509V3, X509V3_R_OPERATION_NOT_DEFINED}, + #else + {"OPERATION_NOT_DEFINED", 34, 148}, + #endif + #ifdef X509V3_R_OTHERNAME_ERROR + {"OTHERNAME_ERROR", ERR_LIB_X509V3, X509V3_R_OTHERNAME_ERROR}, + #else + {"OTHERNAME_ERROR", 34, 147}, + #endif + #ifdef X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED + {"POLICY_LANGUAGE_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED}, + #else + {"POLICY_LANGUAGE_ALREADY_DEFINED", 34, 155}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH + {"POLICY_PATH_LENGTH", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH}, + #else + {"POLICY_PATH_LENGTH", 34, 156}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED}, + #else + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", 34, 157}, + #endif + #ifdef X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", ERR_LIB_X509V3, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY}, + #else + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", 34, 159}, + #endif + #ifdef X509V3_R_SECTION_NOT_FOUND + {"SECTION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_SECTION_NOT_FOUND}, + #else + {"SECTION_NOT_FOUND", 34, 150}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS + {"UNABLE_TO_GET_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS}, + #else + {"UNABLE_TO_GET_ISSUER_DETAILS", 34, 122}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_KEYID + {"UNABLE_TO_GET_ISSUER_KEYID", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID}, + #else + {"UNABLE_TO_GET_ISSUER_KEYID", 34, 123}, + #endif + #ifdef X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT + {"UNKNOWN_BIT_STRING_ARGUMENT", ERR_LIB_X509V3, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT}, + #else + {"UNKNOWN_BIT_STRING_ARGUMENT", 34, 111}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION + {"UNKNOWN_EXTENSION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION}, + #else + {"UNKNOWN_EXTENSION", 34, 129}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION_NAME + {"UNKNOWN_EXTENSION_NAME", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION_NAME}, + #else + {"UNKNOWN_EXTENSION_NAME", 34, 130}, + #endif + #ifdef X509V3_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 34, 120}, + #endif + #ifdef X509V3_R_UNSUPPORTED_OPTION + {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, + #else + {"UNSUPPORTED_OPTION", 34, 117}, + #endif + #ifdef X509V3_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 34, 167}, + #endif + #ifdef X509V3_R_USER_TOO_LONG + {"USER_TOO_LONG", ERR_LIB_X509V3, X509V3_R_USER_TOO_LONG}, + #else + {"USER_TOO_LONG", 34, 132}, + #endif + #ifdef X509_R_AKID_MISMATCH + {"AKID_MISMATCH", ERR_LIB_X509, X509_R_AKID_MISMATCH}, + #else + {"AKID_MISMATCH", 11, 110}, + #endif + #ifdef X509_R_BAD_SELECTOR + {"BAD_SELECTOR", ERR_LIB_X509, X509_R_BAD_SELECTOR}, + #else + {"BAD_SELECTOR", 11, 133}, + #endif + #ifdef X509_R_BAD_X509_FILETYPE + {"BAD_X509_FILETYPE", ERR_LIB_X509, X509_R_BAD_X509_FILETYPE}, + #else + {"BAD_X509_FILETYPE", 11, 100}, + #endif + #ifdef X509_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_X509, X509_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 11, 118}, + #endif + #ifdef X509_R_CANT_CHECK_DH_KEY + {"CANT_CHECK_DH_KEY", ERR_LIB_X509, X509_R_CANT_CHECK_DH_KEY}, + #else + {"CANT_CHECK_DH_KEY", 11, 114}, + #endif + #ifdef X509_R_CERT_ALREADY_IN_HASH_TABLE + {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, X509_R_CERT_ALREADY_IN_HASH_TABLE}, + #else + {"CERT_ALREADY_IN_HASH_TABLE", 11, 101}, + #endif + #ifdef X509_R_CRL_ALREADY_DELTA + {"CRL_ALREADY_DELTA", ERR_LIB_X509, X509_R_CRL_ALREADY_DELTA}, + #else + {"CRL_ALREADY_DELTA", 11, 127}, + #endif + #ifdef X509_R_CRL_VERIFY_FAILURE + {"CRL_VERIFY_FAILURE", ERR_LIB_X509, X509_R_CRL_VERIFY_FAILURE}, + #else + {"CRL_VERIFY_FAILURE", 11, 131}, + #endif + #ifdef X509_R_IDP_MISMATCH + {"IDP_MISMATCH", ERR_LIB_X509, X509_R_IDP_MISMATCH}, + #else + {"IDP_MISMATCH", 11, 128}, + #endif + #ifdef X509_R_INVALID_ATTRIBUTES + {"INVALID_ATTRIBUTES", ERR_LIB_X509, X509_R_INVALID_ATTRIBUTES}, + #else + {"INVALID_ATTRIBUTES", 11, 138}, + #endif + #ifdef X509_R_INVALID_DIRECTORY + {"INVALID_DIRECTORY", ERR_LIB_X509, X509_R_INVALID_DIRECTORY}, + #else + {"INVALID_DIRECTORY", 11, 113}, + #endif + #ifdef X509_R_INVALID_FIELD_NAME + {"INVALID_FIELD_NAME", ERR_LIB_X509, X509_R_INVALID_FIELD_NAME}, + #else + {"INVALID_FIELD_NAME", 11, 119}, + #endif + #ifdef X509_R_INVALID_TRUST + {"INVALID_TRUST", ERR_LIB_X509, X509_R_INVALID_TRUST}, + #else + {"INVALID_TRUST", 11, 123}, + #endif + #ifdef X509_R_ISSUER_MISMATCH + {"ISSUER_MISMATCH", ERR_LIB_X509, X509_R_ISSUER_MISMATCH}, + #else + {"ISSUER_MISMATCH", 11, 129}, + #endif + #ifdef X509_R_KEY_TYPE_MISMATCH + {"KEY_TYPE_MISMATCH", ERR_LIB_X509, X509_R_KEY_TYPE_MISMATCH}, + #else + {"KEY_TYPE_MISMATCH", 11, 115}, + #endif + #ifdef X509_R_KEY_VALUES_MISMATCH + {"KEY_VALUES_MISMATCH", ERR_LIB_X509, X509_R_KEY_VALUES_MISMATCH}, + #else + {"KEY_VALUES_MISMATCH", 11, 116}, + #endif + #ifdef X509_R_LOADING_CERT_DIR + {"LOADING_CERT_DIR", ERR_LIB_X509, X509_R_LOADING_CERT_DIR}, + #else + {"LOADING_CERT_DIR", 11, 103}, + #endif + #ifdef X509_R_LOADING_DEFAULTS + {"LOADING_DEFAULTS", ERR_LIB_X509, X509_R_LOADING_DEFAULTS}, + #else + {"LOADING_DEFAULTS", 11, 104}, + #endif + #ifdef X509_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, X509_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 11, 124}, + #endif + #ifdef X509_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_X509, X509_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 11, 134}, + #endif + #ifdef X509_R_NEWER_CRL_NOT_NEWER + {"NEWER_CRL_NOT_NEWER", ERR_LIB_X509, X509_R_NEWER_CRL_NOT_NEWER}, + #else + {"NEWER_CRL_NOT_NEWER", 11, 132}, + #endif + #ifdef X509_R_NO_CERTIFICATE_FOUND + {"NO_CERTIFICATE_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_FOUND}, + #else + {"NO_CERTIFICATE_FOUND", 11, 135}, + #endif + #ifdef X509_R_NO_CERTIFICATE_OR_CRL_FOUND + {"NO_CERTIFICATE_OR_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_OR_CRL_FOUND}, + #else + {"NO_CERTIFICATE_OR_CRL_FOUND", 11, 136}, + #endif + #ifdef X509_R_NO_CERT_SET_FOR_US_TO_VERIFY + {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY}, + #else + {"NO_CERT_SET_FOR_US_TO_VERIFY", 11, 105}, + #endif + #ifdef X509_R_NO_CRL_FOUND + {"NO_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CRL_FOUND}, + #else + {"NO_CRL_FOUND", 11, 137}, + #endif + #ifdef X509_R_NO_CRL_NUMBER + {"NO_CRL_NUMBER", ERR_LIB_X509, X509_R_NO_CRL_NUMBER}, + #else + {"NO_CRL_NUMBER", 11, 130}, + #endif + #ifdef X509_R_PUBLIC_KEY_DECODE_ERROR + {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_DECODE_ERROR}, + #else + {"PUBLIC_KEY_DECODE_ERROR", 11, 125}, + #endif + #ifdef X509_R_PUBLIC_KEY_ENCODE_ERROR + {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_ENCODE_ERROR}, + #else + {"PUBLIC_KEY_ENCODE_ERROR", 11, 126}, + #endif + #ifdef X509_R_SHOULD_RETRY + {"SHOULD_RETRY", ERR_LIB_X509, X509_R_SHOULD_RETRY}, + #else + {"SHOULD_RETRY", 11, 106}, + #endif + #ifdef X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN}, + #else + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", 11, 107}, + #endif + #ifdef X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY}, + #else + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", 11, 108}, + #endif + #ifdef X509_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, X509_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 11, 117}, + #endif + #ifdef X509_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_X509, X509_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 11, 109}, + #endif + #ifdef X509_R_UNKNOWN_PURPOSE_ID + {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID}, + #else + {"UNKNOWN_PURPOSE_ID", 11, 121}, + #endif + #ifdef X509_R_UNKNOWN_TRUST_ID + {"UNKNOWN_TRUST_ID", ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID}, + #else + {"UNKNOWN_TRUST_ID", 11, 120}, + #endif + #ifdef X509_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, X509_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 11, 111}, + #endif + #ifdef X509_R_WRONG_LOOKUP_TYPE + {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, + #else + {"WRONG_LOOKUP_TYPE", 11, 112}, + #endif + #ifdef X509_R_WRONG_TYPE + {"WRONG_TYPE", ERR_LIB_X509, X509_R_WRONG_TYPE}, + #else + {"WRONG_TYPE", 11, 122}, + #endif + { NULL } +}; + diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h new file mode 100644 index 0000000000000..6be8b24ee1a02 --- /dev/null +++ b/Modules/_ssl_data_300.h @@ -0,0 +1,8435 @@ +/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2021-04-09T09:44:43.288448 */ +static struct py_ssl_library_code library_codes[] = { +#ifdef ERR_LIB_ASN1 + {"ASN1", ERR_LIB_ASN1}, +#endif +#ifdef ERR_LIB_ASYNC + {"ASYNC", ERR_LIB_ASYNC}, +#endif +#ifdef ERR_LIB_BIO + {"BIO", ERR_LIB_BIO}, +#endif +#ifdef ERR_LIB_BN + {"BN", ERR_LIB_BN}, +#endif +#ifdef ERR_LIB_BUF + {"BUF", ERR_LIB_BUF}, +#endif +#ifdef ERR_LIB_CMP + {"CMP", ERR_LIB_CMP}, +#endif +#ifdef ERR_LIB_CMS + {"CMS", ERR_LIB_CMS}, +#endif +#ifdef ERR_LIB_COMP + {"COMP", ERR_LIB_COMP}, +#endif +#ifdef ERR_LIB_CONF + {"CONF", ERR_LIB_CONF}, +#endif +#ifdef ERR_LIB_CRMF + {"CRMF", ERR_LIB_CRMF}, +#endif +#ifdef ERR_LIB_CRYPTO + {"CRYPTO", ERR_LIB_CRYPTO}, +#endif +#ifdef ERR_LIB_CT + {"CT", ERR_LIB_CT}, +#endif +#ifdef ERR_LIB_DH + {"DH", ERR_LIB_DH}, +#endif +#ifdef ERR_LIB_DSA + {"DSA", ERR_LIB_DSA}, +#endif +#ifdef ERR_LIB_DSO + {"DSO", ERR_LIB_DSO}, +#endif +#ifdef ERR_LIB_EC + {"EC", ERR_LIB_EC}, +#endif +#ifdef ERR_LIB_ECDH + {"ECDH", ERR_LIB_ECDH}, +#endif +#ifdef ERR_LIB_ECDSA + {"ECDSA", ERR_LIB_ECDSA}, +#endif +#ifdef ERR_LIB_ENGINE + {"ENGINE", ERR_LIB_ENGINE}, +#endif +#ifdef ERR_LIB_ESS + {"ESS", ERR_LIB_ESS}, +#endif +#ifdef ERR_LIB_EVP + {"EVP", ERR_LIB_EVP}, +#endif +#ifdef ERR_LIB_FIPS + {"FIPS", ERR_LIB_FIPS}, +#endif +#ifdef ERR_LIB_HMAC + {"HMAC", ERR_LIB_HMAC}, +#endif +#ifdef ERR_LIB_HTTP + {"HTTP", ERR_LIB_HTTP}, +#endif +#ifdef ERR_LIB_JPAKE + {"JPAKE", ERR_LIB_JPAKE}, +#endif +#ifdef ERR_LIB_KDF + {"KDF", ERR_LIB_KDF}, +#endif +#ifdef ERR_LIB_MASK + {"MASK", ERR_LIB_MASK}, +#endif +#ifdef ERR_LIB_METH + {"METH", ERR_LIB_METH}, +#endif +#ifdef ERR_LIB_NONE + {"NONE", ERR_LIB_NONE}, +#endif +#ifdef ERR_LIB_OBJ + {"OBJ", ERR_LIB_OBJ}, +#endif +#ifdef ERR_LIB_OCSP + {"OCSP", ERR_LIB_OCSP}, +#endif +#ifdef ERR_LIB_OFFSET + {"OFFSET", ERR_LIB_OFFSET}, +#endif +#ifdef ERR_LIB_OSSL_DECODER + {"OSSL_DECODER", ERR_LIB_OSSL_DECODER}, +#endif +#ifdef ERR_LIB_OSSL_ENCODER + {"OSSL_ENCODER", ERR_LIB_OSSL_ENCODER}, +#endif +#ifdef ERR_LIB_OSSL_STORE + {"OSSL_STORE", ERR_LIB_OSSL_STORE}, +#endif +#ifdef ERR_LIB_PEM + {"PEM", ERR_LIB_PEM}, +#endif +#ifdef ERR_LIB_PKCS12 + {"PKCS12", ERR_LIB_PKCS12}, +#endif +#ifdef ERR_LIB_PKCS7 + {"PKCS7", ERR_LIB_PKCS7}, +#endif +#ifdef ERR_LIB_PROP + {"PROP", ERR_LIB_PROP}, +#endif +#ifdef ERR_LIB_PROV + {"PROV", ERR_LIB_PROV}, +#endif +#ifdef ERR_LIB_PROXY + {"PROXY", ERR_LIB_PROXY}, +#endif +#ifdef ERR_LIB_RAND + {"RAND", ERR_LIB_RAND}, +#endif +#ifdef ERR_LIB_RSA + {"RSA", ERR_LIB_RSA}, +#endif +#ifdef ERR_LIB_RSAREF + {"RSAREF", ERR_LIB_RSAREF}, +#endif +#ifdef ERR_LIB_SM2 + {"SM2", ERR_LIB_SM2}, +#endif +#ifdef ERR_LIB_SSL + {"SSL", ERR_LIB_SSL}, +#endif +#ifdef ERR_LIB_SSL2 + {"SSL2", ERR_LIB_SSL2}, +#endif +#ifdef ERR_LIB_SSL23 + {"SSL23", ERR_LIB_SSL23}, +#endif +#ifdef ERR_LIB_SSL3 + {"SSL3", ERR_LIB_SSL3}, +#endif +#ifdef ERR_LIB_SYS + {"SYS", ERR_LIB_SYS}, +#endif +#ifdef ERR_LIB_TS + {"TS", ERR_LIB_TS}, +#endif +#ifdef ERR_LIB_UI + {"UI", ERR_LIB_UI}, +#endif +#ifdef ERR_LIB_USER + {"USER", ERR_LIB_USER}, +#endif +#ifdef ERR_LIB_X509 + {"X509", ERR_LIB_X509}, +#endif +#ifdef ERR_LIB_X509V3 + {"X509V3", ERR_LIB_X509V3}, +#endif + { NULL } +}; + + +static struct py_ssl_error_code error_codes[] = { + #ifdef ASN1_R_ADDING_OBJECT + {"ADDING_OBJECT", ERR_LIB_ASN1, ASN1_R_ADDING_OBJECT}, + #else + {"ADDING_OBJECT", 13, 171}, + #endif + #ifdef ASN1_R_ASN1_PARSE_ERROR + {"ASN1_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_PARSE_ERROR}, + #else + {"ASN1_PARSE_ERROR", 13, 203}, + #endif + #ifdef ASN1_R_ASN1_SIG_PARSE_ERROR + {"ASN1_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_SIG_PARSE_ERROR}, + #else + {"ASN1_SIG_PARSE_ERROR", 13, 204}, + #endif + #ifdef ASN1_R_AUX_ERROR + {"AUX_ERROR", ERR_LIB_ASN1, ASN1_R_AUX_ERROR}, + #else + {"AUX_ERROR", 13, 100}, + #endif + #ifdef ASN1_R_BAD_OBJECT_HEADER + {"BAD_OBJECT_HEADER", ERR_LIB_ASN1, ASN1_R_BAD_OBJECT_HEADER}, + #else + {"BAD_OBJECT_HEADER", 13, 102}, + #endif + #ifdef ASN1_R_BAD_TEMPLATE + {"BAD_TEMPLATE", ERR_LIB_ASN1, ASN1_R_BAD_TEMPLATE}, + #else + {"BAD_TEMPLATE", 13, 230}, + #endif + #ifdef ASN1_R_BMPSTRING_IS_WRONG_LENGTH + {"BMPSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BMPSTRING_IS_WRONG_LENGTH}, + #else + {"BMPSTRING_IS_WRONG_LENGTH", 13, 214}, + #endif + #ifdef ASN1_R_BN_LIB + {"BN_LIB", ERR_LIB_ASN1, ASN1_R_BN_LIB}, + #else + {"BN_LIB", 13, 105}, + #endif + #ifdef ASN1_R_BOOLEAN_IS_WRONG_LENGTH + {"BOOLEAN_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH}, + #else + {"BOOLEAN_IS_WRONG_LENGTH", 13, 106}, + #endif + #ifdef ASN1_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_ASN1, ASN1_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 13, 107}, + #endif + #ifdef ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_ASN1, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 13, 108}, + #endif + #ifdef ASN1_R_CONTEXT_NOT_INITIALISED + {"CONTEXT_NOT_INITIALISED", ERR_LIB_ASN1, ASN1_R_CONTEXT_NOT_INITIALISED}, + #else + {"CONTEXT_NOT_INITIALISED", 13, 217}, + #endif + #ifdef ASN1_R_DATA_IS_WRONG + {"DATA_IS_WRONG", ERR_LIB_ASN1, ASN1_R_DATA_IS_WRONG}, + #else + {"DATA_IS_WRONG", 13, 109}, + #endif + #ifdef ASN1_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_ASN1, ASN1_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 13, 110}, + #endif + #ifdef ASN1_R_DEPTH_EXCEEDED + {"DEPTH_EXCEEDED", ERR_LIB_ASN1, ASN1_R_DEPTH_EXCEEDED}, + #else + {"DEPTH_EXCEEDED", 13, 174}, + #endif + #ifdef ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED}, + #else + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", 13, 198}, + #endif + #ifdef ASN1_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_ASN1, ASN1_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 13, 112}, + #endif + #ifdef ASN1_R_ERROR_GETTING_TIME + {"ERROR_GETTING_TIME", ERR_LIB_ASN1, ASN1_R_ERROR_GETTING_TIME}, + #else + {"ERROR_GETTING_TIME", 13, 173}, + #endif + #ifdef ASN1_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_ASN1, ASN1_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 13, 172}, + #endif + #ifdef ASN1_R_ERROR_SETTING_CIPHER_PARAMS + {"ERROR_SETTING_CIPHER_PARAMS", ERR_LIB_ASN1, ASN1_R_ERROR_SETTING_CIPHER_PARAMS}, + #else + {"ERROR_SETTING_CIPHER_PARAMS", 13, 114}, + #endif + #ifdef ASN1_R_EXPECTING_AN_INTEGER + {"EXPECTING_AN_INTEGER", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_INTEGER}, + #else + {"EXPECTING_AN_INTEGER", 13, 115}, + #endif + #ifdef ASN1_R_EXPECTING_AN_OBJECT + {"EXPECTING_AN_OBJECT", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_OBJECT}, + #else + {"EXPECTING_AN_OBJECT", 13, 116}, + #endif + #ifdef ASN1_R_EXPLICIT_LENGTH_MISMATCH + {"EXPLICIT_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH}, + #else + {"EXPLICIT_LENGTH_MISMATCH", 13, 119}, + #endif + #ifdef ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED + {"EXPLICIT_TAG_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED}, + #else + {"EXPLICIT_TAG_NOT_CONSTRUCTED", 13, 120}, + #endif + #ifdef ASN1_R_FIELD_MISSING + {"FIELD_MISSING", ERR_LIB_ASN1, ASN1_R_FIELD_MISSING}, + #else + {"FIELD_MISSING", 13, 121}, + #endif + #ifdef ASN1_R_FIRST_NUM_TOO_LARGE + {"FIRST_NUM_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_FIRST_NUM_TOO_LARGE}, + #else + {"FIRST_NUM_TOO_LARGE", 13, 122}, + #endif + #ifdef ASN1_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 13, 123}, + #endif + #ifdef ASN1_R_ILLEGAL_BITSTRING_FORMAT + {"ILLEGAL_BITSTRING_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT}, + #else + {"ILLEGAL_BITSTRING_FORMAT", 13, 175}, + #endif + #ifdef ASN1_R_ILLEGAL_BOOLEAN + {"ILLEGAL_BOOLEAN", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BOOLEAN}, + #else + {"ILLEGAL_BOOLEAN", 13, 176}, + #endif + #ifdef ASN1_R_ILLEGAL_CHARACTERS + {"ILLEGAL_CHARACTERS", ERR_LIB_ASN1, ASN1_R_ILLEGAL_CHARACTERS}, + #else + {"ILLEGAL_CHARACTERS", 13, 124}, + #endif + #ifdef ASN1_R_ILLEGAL_FORMAT + {"ILLEGAL_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_FORMAT}, + #else + {"ILLEGAL_FORMAT", 13, 177}, + #endif + #ifdef ASN1_R_ILLEGAL_HEX + {"ILLEGAL_HEX", ERR_LIB_ASN1, ASN1_R_ILLEGAL_HEX}, + #else + {"ILLEGAL_HEX", 13, 178}, + #endif + #ifdef ASN1_R_ILLEGAL_IMPLICIT_TAG + {"ILLEGAL_IMPLICIT_TAG", ERR_LIB_ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG}, + #else + {"ILLEGAL_IMPLICIT_TAG", 13, 179}, + #endif + #ifdef ASN1_R_ILLEGAL_INTEGER + {"ILLEGAL_INTEGER", ERR_LIB_ASN1, ASN1_R_ILLEGAL_INTEGER}, + #else + {"ILLEGAL_INTEGER", 13, 180}, + #endif + #ifdef ASN1_R_ILLEGAL_NEGATIVE_VALUE + {"ILLEGAL_NEGATIVE_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NEGATIVE_VALUE}, + #else + {"ILLEGAL_NEGATIVE_VALUE", 13, 226}, + #endif + #ifdef ASN1_R_ILLEGAL_NESTED_TAGGING + {"ILLEGAL_NESTED_TAGGING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING}, + #else + {"ILLEGAL_NESTED_TAGGING", 13, 181}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL + {"ILLEGAL_NULL", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL}, + #else + {"ILLEGAL_NULL", 13, 125}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL_VALUE + {"ILLEGAL_NULL_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL_VALUE}, + #else + {"ILLEGAL_NULL_VALUE", 13, 182}, + #endif + #ifdef ASN1_R_ILLEGAL_OBJECT + {"ILLEGAL_OBJECT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OBJECT}, + #else + {"ILLEGAL_OBJECT", 13, 183}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONAL_ANY + {"ILLEGAL_OPTIONAL_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY}, + #else + {"ILLEGAL_OPTIONAL_ANY", 13, 126}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE}, + #else + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", 13, 170}, + #endif + #ifdef ASN1_R_ILLEGAL_PADDING + {"ILLEGAL_PADDING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_PADDING}, + #else + {"ILLEGAL_PADDING", 13, 221}, + #endif + #ifdef ASN1_R_ILLEGAL_TAGGED_ANY + {"ILLEGAL_TAGGED_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TAGGED_ANY}, + #else + {"ILLEGAL_TAGGED_ANY", 13, 127}, + #endif + #ifdef ASN1_R_ILLEGAL_TIME_VALUE + {"ILLEGAL_TIME_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TIME_VALUE}, + #else + {"ILLEGAL_TIME_VALUE", 13, 184}, + #endif + #ifdef ASN1_R_ILLEGAL_ZERO_CONTENT + {"ILLEGAL_ZERO_CONTENT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_ZERO_CONTENT}, + #else + {"ILLEGAL_ZERO_CONTENT", 13, 222}, + #endif + #ifdef ASN1_R_INTEGER_NOT_ASCII_FORMAT + {"INTEGER_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT}, + #else + {"INTEGER_NOT_ASCII_FORMAT", 13, 185}, + #endif + #ifdef ASN1_R_INTEGER_TOO_LARGE_FOR_LONG + {"INTEGER_TOO_LARGE_FOR_LONG", ERR_LIB_ASN1, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG}, + #else + {"INTEGER_TOO_LARGE_FOR_LONG", 13, 128}, + #endif + #ifdef ASN1_R_INVALID_BIT_STRING_BITS_LEFT + {"INVALID_BIT_STRING_BITS_LEFT", ERR_LIB_ASN1, ASN1_R_INVALID_BIT_STRING_BITS_LEFT}, + #else + {"INVALID_BIT_STRING_BITS_LEFT", 13, 220}, + #endif + #ifdef ASN1_R_INVALID_BMPSTRING_LENGTH + {"INVALID_BMPSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH}, + #else + {"INVALID_BMPSTRING_LENGTH", 13, 129}, + #endif + #ifdef ASN1_R_INVALID_DIGIT + {"INVALID_DIGIT", ERR_LIB_ASN1, ASN1_R_INVALID_DIGIT}, + #else + {"INVALID_DIGIT", 13, 130}, + #endif + #ifdef ASN1_R_INVALID_MIME_TYPE + {"INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_INVALID_MIME_TYPE}, + #else + {"INVALID_MIME_TYPE", 13, 205}, + #endif + #ifdef ASN1_R_INVALID_MODIFIER + {"INVALID_MODIFIER", ERR_LIB_ASN1, ASN1_R_INVALID_MODIFIER}, + #else + {"INVALID_MODIFIER", 13, 186}, + #endif + #ifdef ASN1_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_ASN1, ASN1_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 13, 187}, + #endif + #ifdef ASN1_R_INVALID_OBJECT_ENCODING + {"INVALID_OBJECT_ENCODING", ERR_LIB_ASN1, ASN1_R_INVALID_OBJECT_ENCODING}, + #else + {"INVALID_OBJECT_ENCODING", 13, 216}, + #endif + #ifdef ASN1_R_INVALID_SCRYPT_PARAMETERS + {"INVALID_SCRYPT_PARAMETERS", ERR_LIB_ASN1, ASN1_R_INVALID_SCRYPT_PARAMETERS}, + #else + {"INVALID_SCRYPT_PARAMETERS", 13, 227}, + #endif + #ifdef ASN1_R_INVALID_SEPARATOR + {"INVALID_SEPARATOR", ERR_LIB_ASN1, ASN1_R_INVALID_SEPARATOR}, + #else + {"INVALID_SEPARATOR", 13, 131}, + #endif + #ifdef ASN1_R_INVALID_STRING_TABLE_VALUE + {"INVALID_STRING_TABLE_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE}, + #else + {"INVALID_STRING_TABLE_VALUE", 13, 218}, + #endif + #ifdef ASN1_R_INVALID_UNIVERSALSTRING_LENGTH + {"INVALID_UNIVERSALSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH}, + #else + {"INVALID_UNIVERSALSTRING_LENGTH", 13, 133}, + #endif + #ifdef ASN1_R_INVALID_UTF8STRING + {"INVALID_UTF8STRING", ERR_LIB_ASN1, ASN1_R_INVALID_UTF8STRING}, + #else + {"INVALID_UTF8STRING", 13, 134}, + #endif + #ifdef ASN1_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 13, 219}, + #endif + #ifdef ASN1_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_ASN1, ASN1_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 13, 231}, + #endif + #ifdef ASN1_R_LIST_ERROR + {"LIST_ERROR", ERR_LIB_ASN1, ASN1_R_LIST_ERROR}, + #else + {"LIST_ERROR", 13, 188}, + #endif + #ifdef ASN1_R_MIME_NO_CONTENT_TYPE + {"MIME_NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_MIME_NO_CONTENT_TYPE}, + #else + {"MIME_NO_CONTENT_TYPE", 13, 206}, + #endif + #ifdef ASN1_R_MIME_PARSE_ERROR + {"MIME_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_PARSE_ERROR}, + #else + {"MIME_PARSE_ERROR", 13, 207}, + #endif + #ifdef ASN1_R_MIME_SIG_PARSE_ERROR + {"MIME_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_SIG_PARSE_ERROR}, + #else + {"MIME_SIG_PARSE_ERROR", 13, 208}, + #endif + #ifdef ASN1_R_MISSING_EOC + {"MISSING_EOC", ERR_LIB_ASN1, ASN1_R_MISSING_EOC}, + #else + {"MISSING_EOC", 13, 137}, + #endif + #ifdef ASN1_R_MISSING_SECOND_NUMBER + {"MISSING_SECOND_NUMBER", ERR_LIB_ASN1, ASN1_R_MISSING_SECOND_NUMBER}, + #else + {"MISSING_SECOND_NUMBER", 13, 138}, + #endif + #ifdef ASN1_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_ASN1, ASN1_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 13, 189}, + #endif + #ifdef ASN1_R_MSTRING_NOT_UNIVERSAL + {"MSTRING_NOT_UNIVERSAL", ERR_LIB_ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL}, + #else + {"MSTRING_NOT_UNIVERSAL", 13, 139}, + #endif + #ifdef ASN1_R_MSTRING_WRONG_TAG + {"MSTRING_WRONG_TAG", ERR_LIB_ASN1, ASN1_R_MSTRING_WRONG_TAG}, + #else + {"MSTRING_WRONG_TAG", 13, 140}, + #endif + #ifdef ASN1_R_NESTED_ASN1_STRING + {"NESTED_ASN1_STRING", ERR_LIB_ASN1, ASN1_R_NESTED_ASN1_STRING}, + #else + {"NESTED_ASN1_STRING", 13, 197}, + #endif + #ifdef ASN1_R_NESTED_TOO_DEEP + {"NESTED_TOO_DEEP", ERR_LIB_ASN1, ASN1_R_NESTED_TOO_DEEP}, + #else + {"NESTED_TOO_DEEP", 13, 201}, + #endif + #ifdef ASN1_R_NON_HEX_CHARACTERS + {"NON_HEX_CHARACTERS", ERR_LIB_ASN1, ASN1_R_NON_HEX_CHARACTERS}, + #else + {"NON_HEX_CHARACTERS", 13, 141}, + #endif + #ifdef ASN1_R_NOT_ASCII_FORMAT + {"NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_NOT_ASCII_FORMAT}, + #else + {"NOT_ASCII_FORMAT", 13, 190}, + #endif + #ifdef ASN1_R_NOT_ENOUGH_DATA + {"NOT_ENOUGH_DATA", ERR_LIB_ASN1, ASN1_R_NOT_ENOUGH_DATA}, + #else + {"NOT_ENOUGH_DATA", 13, 142}, + #endif + #ifdef ASN1_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 13, 209}, + #endif + #ifdef ASN1_R_NO_MATCHING_CHOICE_TYPE + {"NO_MATCHING_CHOICE_TYPE", ERR_LIB_ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE}, + #else + {"NO_MATCHING_CHOICE_TYPE", 13, 143}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BODY_FAILURE + {"NO_MULTIPART_BODY_FAILURE", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BODY_FAILURE}, + #else + {"NO_MULTIPART_BODY_FAILURE", 13, 210}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BOUNDARY + {"NO_MULTIPART_BOUNDARY", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BOUNDARY}, + #else + {"NO_MULTIPART_BOUNDARY", 13, 211}, + #endif + #ifdef ASN1_R_NO_SIG_CONTENT_TYPE + {"NO_SIG_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_SIG_CONTENT_TYPE}, + #else + {"NO_SIG_CONTENT_TYPE", 13, 212}, + #endif + #ifdef ASN1_R_NULL_IS_WRONG_LENGTH + {"NULL_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_NULL_IS_WRONG_LENGTH}, + #else + {"NULL_IS_WRONG_LENGTH", 13, 144}, + #endif + #ifdef ASN1_R_OBJECT_NOT_ASCII_FORMAT + {"OBJECT_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT}, + #else + {"OBJECT_NOT_ASCII_FORMAT", 13, 191}, + #endif + #ifdef ASN1_R_ODD_NUMBER_OF_CHARS + {"ODD_NUMBER_OF_CHARS", ERR_LIB_ASN1, ASN1_R_ODD_NUMBER_OF_CHARS}, + #else + {"ODD_NUMBER_OF_CHARS", 13, 145}, + #endif + #ifdef ASN1_R_SECOND_NUMBER_TOO_LARGE + {"SECOND_NUMBER_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_SECOND_NUMBER_TOO_LARGE}, + #else + {"SECOND_NUMBER_TOO_LARGE", 13, 147}, + #endif + #ifdef ASN1_R_SEQUENCE_LENGTH_MISMATCH + {"SEQUENCE_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH}, + #else + {"SEQUENCE_LENGTH_MISMATCH", 13, 148}, + #endif + #ifdef ASN1_R_SEQUENCE_NOT_CONSTRUCTED + {"SEQUENCE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED}, + #else + {"SEQUENCE_NOT_CONSTRUCTED", 13, 149}, + #endif + #ifdef ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG + {"SEQUENCE_OR_SET_NEEDS_CONFIG", ERR_LIB_ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG}, + #else + {"SEQUENCE_OR_SET_NEEDS_CONFIG", 13, 192}, + #endif + #ifdef ASN1_R_SHORT_LINE + {"SHORT_LINE", ERR_LIB_ASN1, ASN1_R_SHORT_LINE}, + #else + {"SHORT_LINE", 13, 150}, + #endif + #ifdef ASN1_R_SIG_INVALID_MIME_TYPE + {"SIG_INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_SIG_INVALID_MIME_TYPE}, + #else + {"SIG_INVALID_MIME_TYPE", 13, 213}, + #endif + #ifdef ASN1_R_STREAMING_NOT_SUPPORTED + {"STREAMING_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_STREAMING_NOT_SUPPORTED}, + #else + {"STREAMING_NOT_SUPPORTED", 13, 202}, + #endif + #ifdef ASN1_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_ASN1, ASN1_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 13, 151}, + #endif + #ifdef ASN1_R_STRING_TOO_SHORT + {"STRING_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_STRING_TOO_SHORT}, + #else + {"STRING_TOO_SHORT", 13, 152}, + #endif + #ifdef ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_ASN1, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 13, 154}, + #endif + #ifdef ASN1_R_TIME_NOT_ASCII_FORMAT + {"TIME_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT}, + #else + {"TIME_NOT_ASCII_FORMAT", 13, 193}, + #endif + #ifdef ASN1_R_TOO_LARGE + {"TOO_LARGE", ERR_LIB_ASN1, ASN1_R_TOO_LARGE}, + #else + {"TOO_LARGE", 13, 223}, + #endif + #ifdef ASN1_R_TOO_LONG + {"TOO_LONG", ERR_LIB_ASN1, ASN1_R_TOO_LONG}, + #else + {"TOO_LONG", 13, 155}, + #endif + #ifdef ASN1_R_TOO_SMALL + {"TOO_SMALL", ERR_LIB_ASN1, ASN1_R_TOO_SMALL}, + #else + {"TOO_SMALL", 13, 224}, + #endif + #ifdef ASN1_R_TYPE_NOT_CONSTRUCTED + {"TYPE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED}, + #else + {"TYPE_NOT_CONSTRUCTED", 13, 156}, + #endif + #ifdef ASN1_R_TYPE_NOT_PRIMITIVE + {"TYPE_NOT_PRIMITIVE", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_PRIMITIVE}, + #else + {"TYPE_NOT_PRIMITIVE", 13, 195}, + #endif + #ifdef ASN1_R_UNEXPECTED_EOC + {"UNEXPECTED_EOC", ERR_LIB_ASN1, ASN1_R_UNEXPECTED_EOC}, + #else + {"UNEXPECTED_EOC", 13, 159}, + #endif + #ifdef ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH + {"UNIVERSALSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH}, + #else + {"UNIVERSALSTRING_IS_WRONG_LENGTH", 13, 215}, + #endif + #ifdef ASN1_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_ASN1, ASN1_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 13, 229}, + #endif + #ifdef ASN1_R_UNKNOWN_FORMAT + {"UNKNOWN_FORMAT", ERR_LIB_ASN1, ASN1_R_UNKNOWN_FORMAT}, + #else + {"UNKNOWN_FORMAT", 13, 160}, + #endif + #ifdef ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", 13, 161}, + #endif + #ifdef ASN1_R_UNKNOWN_OBJECT_TYPE + {"UNKNOWN_OBJECT_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_OBJECT_TYPE}, + #else + {"UNKNOWN_OBJECT_TYPE", 13, 162}, + #endif + #ifdef ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE + {"UNKNOWN_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE}, + #else + {"UNKNOWN_PUBLIC_KEY_TYPE", 13, 163}, + #endif + #ifdef ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM + {"UNKNOWN_SIGNATURE_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM}, + #else + {"UNKNOWN_SIGNATURE_ALGORITHM", 13, 199}, + #endif + #ifdef ASN1_R_UNKNOWN_TAG + {"UNKNOWN_TAG", ERR_LIB_ASN1, ASN1_R_UNKNOWN_TAG}, + #else + {"UNKNOWN_TAG", 13, 194}, + #endif + #ifdef ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE}, + #else + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", 13, 164}, + #endif + #ifdef ASN1_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 13, 228}, + #endif + #ifdef ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 13, 167}, + #endif + #ifdef ASN1_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 13, 196}, + #endif + #ifdef ASN1_R_WRONG_INTEGER_TYPE + {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, + #else + {"WRONG_INTEGER_TYPE", 13, 225}, + #endif + #ifdef ASN1_R_WRONG_PUBLIC_KEY_TYPE + {"WRONG_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_PUBLIC_KEY_TYPE}, + #else + {"WRONG_PUBLIC_KEY_TYPE", 13, 200}, + #endif + #ifdef ASN1_R_WRONG_TAG + {"WRONG_TAG", ERR_LIB_ASN1, ASN1_R_WRONG_TAG}, + #else + {"WRONG_TAG", 13, 168}, + #endif + #ifdef ASYNC_R_FAILED_TO_SET_POOL + {"FAILED_TO_SET_POOL", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SET_POOL}, + #else + {"FAILED_TO_SET_POOL", 51, 101}, + #endif + #ifdef ASYNC_R_FAILED_TO_SWAP_CONTEXT + {"FAILED_TO_SWAP_CONTEXT", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SWAP_CONTEXT}, + #else + {"FAILED_TO_SWAP_CONTEXT", 51, 102}, + #endif + #ifdef ASYNC_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ASYNC, ASYNC_R_INIT_FAILED}, + #else + {"INIT_FAILED", 51, 105}, + #endif + #ifdef ASYNC_R_INVALID_POOL_SIZE + {"INVALID_POOL_SIZE", ERR_LIB_ASYNC, ASYNC_R_INVALID_POOL_SIZE}, + #else + {"INVALID_POOL_SIZE", 51, 103}, + #endif + #ifdef BIO_R_ACCEPT_ERROR + {"ACCEPT_ERROR", ERR_LIB_BIO, BIO_R_ACCEPT_ERROR}, + #else + {"ACCEPT_ERROR", 32, 100}, + #endif + #ifdef BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET + {"ADDRINFO_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET}, + #else + {"ADDRINFO_ADDR_IS_NOT_AF_INET", 32, 141}, + #endif + #ifdef BIO_R_AMBIGUOUS_HOST_OR_SERVICE + {"AMBIGUOUS_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_AMBIGUOUS_HOST_OR_SERVICE}, + #else + {"AMBIGUOUS_HOST_OR_SERVICE", 32, 129}, + #endif + #ifdef BIO_R_BAD_FOPEN_MODE + {"BAD_FOPEN_MODE", ERR_LIB_BIO, BIO_R_BAD_FOPEN_MODE}, + #else + {"BAD_FOPEN_MODE", 32, 101}, + #endif + #ifdef BIO_R_BROKEN_PIPE + {"BROKEN_PIPE", ERR_LIB_BIO, BIO_R_BROKEN_PIPE}, + #else + {"BROKEN_PIPE", 32, 124}, + #endif + #ifdef BIO_R_CONNECT_ERROR + {"CONNECT_ERROR", ERR_LIB_BIO, BIO_R_CONNECT_ERROR}, + #else + {"CONNECT_ERROR", 32, 103}, + #endif + #ifdef BIO_R_CONNECT_TIMEOUT + {"CONNECT_TIMEOUT", ERR_LIB_BIO, BIO_R_CONNECT_TIMEOUT}, + #else + {"CONNECT_TIMEOUT", 32, 147}, + #endif + #ifdef BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET}, + #else + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", 32, 107}, + #endif + #ifdef BIO_R_GETSOCKNAME_ERROR + {"GETSOCKNAME_ERROR", ERR_LIB_BIO, BIO_R_GETSOCKNAME_ERROR}, + #else + {"GETSOCKNAME_ERROR", 32, 132}, + #endif + #ifdef BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS + {"GETSOCKNAME_TRUNCATED_ADDRESS", ERR_LIB_BIO, BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS}, + #else + {"GETSOCKNAME_TRUNCATED_ADDRESS", 32, 133}, + #endif + #ifdef BIO_R_GETTING_SOCKTYPE + {"GETTING_SOCKTYPE", ERR_LIB_BIO, BIO_R_GETTING_SOCKTYPE}, + #else + {"GETTING_SOCKTYPE", 32, 134}, + #endif + #ifdef BIO_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_BIO, BIO_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 32, 125}, + #endif + #ifdef BIO_R_INVALID_SOCKET + {"INVALID_SOCKET", ERR_LIB_BIO, BIO_R_INVALID_SOCKET}, + #else + {"INVALID_SOCKET", 32, 135}, + #endif + #ifdef BIO_R_IN_USE + {"IN_USE", ERR_LIB_BIO, BIO_R_IN_USE}, + #else + {"IN_USE", 32, 123}, + #endif + #ifdef BIO_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_BIO, BIO_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 32, 102}, + #endif + #ifdef BIO_R_LISTEN_V6_ONLY + {"LISTEN_V6_ONLY", ERR_LIB_BIO, BIO_R_LISTEN_V6_ONLY}, + #else + {"LISTEN_V6_ONLY", 32, 136}, + #endif + #ifdef BIO_R_LOOKUP_RETURNED_NOTHING + {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, + #else + {"LOOKUP_RETURNED_NOTHING", 32, 142}, + #endif + #ifdef BIO_R_MALFORMED_HOST_OR_SERVICE + {"MALFORMED_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_MALFORMED_HOST_OR_SERVICE}, + #else + {"MALFORMED_HOST_OR_SERVICE", 32, 130}, + #endif + #ifdef BIO_R_NBIO_CONNECT_ERROR + {"NBIO_CONNECT_ERROR", ERR_LIB_BIO, BIO_R_NBIO_CONNECT_ERROR}, + #else + {"NBIO_CONNECT_ERROR", 32, 110}, + #endif + #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, + #else + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", 32, 143}, + #endif + #ifdef BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED}, + #else + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", 32, 144}, + #endif + #ifdef BIO_R_NO_PORT_DEFINED + {"NO_PORT_DEFINED", ERR_LIB_BIO, BIO_R_NO_PORT_DEFINED}, + #else + {"NO_PORT_DEFINED", 32, 113}, + #endif + #ifdef BIO_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_BIO, BIO_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 32, 128}, + #endif + #ifdef BIO_R_TRANSFER_ERROR + {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR}, + #else + {"TRANSFER_ERROR", 32, 104}, + #endif + #ifdef BIO_R_TRANSFER_TIMEOUT + {"TRANSFER_TIMEOUT", ERR_LIB_BIO, BIO_R_TRANSFER_TIMEOUT}, + #else + {"TRANSFER_TIMEOUT", 32, 105}, + #endif + #ifdef BIO_R_UNABLE_TO_BIND_SOCKET + {"UNABLE_TO_BIND_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_BIND_SOCKET}, + #else + {"UNABLE_TO_BIND_SOCKET", 32, 117}, + #endif + #ifdef BIO_R_UNABLE_TO_CREATE_SOCKET + {"UNABLE_TO_CREATE_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_CREATE_SOCKET}, + #else + {"UNABLE_TO_CREATE_SOCKET", 32, 118}, + #endif + #ifdef BIO_R_UNABLE_TO_KEEPALIVE + {"UNABLE_TO_KEEPALIVE", ERR_LIB_BIO, BIO_R_UNABLE_TO_KEEPALIVE}, + #else + {"UNABLE_TO_KEEPALIVE", 32, 137}, + #endif + #ifdef BIO_R_UNABLE_TO_LISTEN_SOCKET + {"UNABLE_TO_LISTEN_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_LISTEN_SOCKET}, + #else + {"UNABLE_TO_LISTEN_SOCKET", 32, 119}, + #endif + #ifdef BIO_R_UNABLE_TO_NODELAY + {"UNABLE_TO_NODELAY", ERR_LIB_BIO, BIO_R_UNABLE_TO_NODELAY}, + #else + {"UNABLE_TO_NODELAY", 32, 138}, + #endif + #ifdef BIO_R_UNABLE_TO_REUSEADDR + {"UNABLE_TO_REUSEADDR", ERR_LIB_BIO, BIO_R_UNABLE_TO_REUSEADDR}, + #else + {"UNABLE_TO_REUSEADDR", 32, 139}, + #endif + #ifdef BIO_R_UNAVAILABLE_IP_FAMILY + {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, + #else + {"UNAVAILABLE_IP_FAMILY", 32, 145}, + #endif + #ifdef BIO_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_BIO, BIO_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 32, 120}, + #endif + #ifdef BIO_R_UNKNOWN_INFO_TYPE + {"UNKNOWN_INFO_TYPE", ERR_LIB_BIO, BIO_R_UNKNOWN_INFO_TYPE}, + #else + {"UNKNOWN_INFO_TYPE", 32, 140}, + #endif + #ifdef BIO_R_UNSUPPORTED_IP_FAMILY + {"UNSUPPORTED_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_IP_FAMILY}, + #else + {"UNSUPPORTED_IP_FAMILY", 32, 146}, + #endif + #ifdef BIO_R_UNSUPPORTED_METHOD + {"UNSUPPORTED_METHOD", ERR_LIB_BIO, BIO_R_UNSUPPORTED_METHOD}, + #else + {"UNSUPPORTED_METHOD", 32, 121}, + #endif + #ifdef BIO_R_UNSUPPORTED_PROTOCOL_FAMILY + {"UNSUPPORTED_PROTOCOL_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY}, + #else + {"UNSUPPORTED_PROTOCOL_FAMILY", 32, 131}, + #endif + #ifdef BIO_R_WRITE_TO_READ_ONLY_BIO + {"WRITE_TO_READ_ONLY_BIO", ERR_LIB_BIO, BIO_R_WRITE_TO_READ_ONLY_BIO}, + #else + {"WRITE_TO_READ_ONLY_BIO", 32, 126}, + #endif + #ifdef BIO_R_WSASTARTUP + {"WSASTARTUP", ERR_LIB_BIO, BIO_R_WSASTARTUP}, + #else + {"WSASTARTUP", 32, 122}, + #endif + #ifdef BN_R_ARG2_LT_ARG3 + {"ARG2_LT_ARG3", ERR_LIB_BN, BN_R_ARG2_LT_ARG3}, + #else + {"ARG2_LT_ARG3", 3, 100}, + #endif + #ifdef BN_R_BAD_RECIPROCAL + {"BAD_RECIPROCAL", ERR_LIB_BN, BN_R_BAD_RECIPROCAL}, + #else + {"BAD_RECIPROCAL", 3, 101}, + #endif + #ifdef BN_R_BIGNUM_TOO_LONG + {"BIGNUM_TOO_LONG", ERR_LIB_BN, BN_R_BIGNUM_TOO_LONG}, + #else + {"BIGNUM_TOO_LONG", 3, 114}, + #endif + #ifdef BN_R_BITS_TOO_SMALL + {"BITS_TOO_SMALL", ERR_LIB_BN, BN_R_BITS_TOO_SMALL}, + #else + {"BITS_TOO_SMALL", 3, 118}, + #endif + #ifdef BN_R_CALLED_WITH_EVEN_MODULUS + {"CALLED_WITH_EVEN_MODULUS", ERR_LIB_BN, BN_R_CALLED_WITH_EVEN_MODULUS}, + #else + {"CALLED_WITH_EVEN_MODULUS", 3, 102}, + #endif + #ifdef BN_R_DIV_BY_ZERO + {"DIV_BY_ZERO", ERR_LIB_BN, BN_R_DIV_BY_ZERO}, + #else + {"DIV_BY_ZERO", 3, 103}, + #endif + #ifdef BN_R_ENCODING_ERROR + {"ENCODING_ERROR", ERR_LIB_BN, BN_R_ENCODING_ERROR}, + #else + {"ENCODING_ERROR", 3, 104}, + #endif + #ifdef BN_R_EXPAND_ON_STATIC_BIGNUM_DATA + {"EXPAND_ON_STATIC_BIGNUM_DATA", ERR_LIB_BN, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA}, + #else + {"EXPAND_ON_STATIC_BIGNUM_DATA", 3, 105}, + #endif + #ifdef BN_R_INPUT_NOT_REDUCED + {"INPUT_NOT_REDUCED", ERR_LIB_BN, BN_R_INPUT_NOT_REDUCED}, + #else + {"INPUT_NOT_REDUCED", 3, 110}, + #endif + #ifdef BN_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_BN, BN_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 3, 106}, + #endif + #ifdef BN_R_INVALID_RANGE + {"INVALID_RANGE", ERR_LIB_BN, BN_R_INVALID_RANGE}, + #else + {"INVALID_RANGE", 3, 115}, + #endif + #ifdef BN_R_INVALID_SHIFT + {"INVALID_SHIFT", ERR_LIB_BN, BN_R_INVALID_SHIFT}, + #else + {"INVALID_SHIFT", 3, 119}, + #endif + #ifdef BN_R_NOT_A_SQUARE + {"NOT_A_SQUARE", ERR_LIB_BN, BN_R_NOT_A_SQUARE}, + #else + {"NOT_A_SQUARE", 3, 111}, + #endif + #ifdef BN_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_BN, BN_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 3, 107}, + #endif + #ifdef BN_R_NO_INVERSE + {"NO_INVERSE", ERR_LIB_BN, BN_R_NO_INVERSE}, + #else + {"NO_INVERSE", 3, 108}, + #endif + #ifdef BN_R_NO_SOLUTION + {"NO_SOLUTION", ERR_LIB_BN, BN_R_NO_SOLUTION}, + #else + {"NO_SOLUTION", 3, 116}, + #endif + #ifdef BN_R_NO_SUITABLE_DIGEST + {"NO_SUITABLE_DIGEST", ERR_LIB_BN, BN_R_NO_SUITABLE_DIGEST}, + #else + {"NO_SUITABLE_DIGEST", 3, 120}, + #endif + #ifdef BN_R_PRIVATE_KEY_TOO_LARGE + {"PRIVATE_KEY_TOO_LARGE", ERR_LIB_BN, BN_R_PRIVATE_KEY_TOO_LARGE}, + #else + {"PRIVATE_KEY_TOO_LARGE", 3, 117}, + #endif + #ifdef BN_R_P_IS_NOT_PRIME + {"P_IS_NOT_PRIME", ERR_LIB_BN, BN_R_P_IS_NOT_PRIME}, + #else + {"P_IS_NOT_PRIME", 3, 112}, + #endif + #ifdef BN_R_TOO_MANY_ITERATIONS + {"TOO_MANY_ITERATIONS", ERR_LIB_BN, BN_R_TOO_MANY_ITERATIONS}, + #else + {"TOO_MANY_ITERATIONS", 3, 113}, + #endif + #ifdef BN_R_TOO_MANY_TEMPORARY_VARIABLES + {"TOO_MANY_TEMPORARY_VARIABLES", ERR_LIB_BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES}, + #else + {"TOO_MANY_TEMPORARY_VARIABLES", 3, 109}, + #endif + #ifdef CMP_R_ALGORITHM_NOT_SUPPORTED + {"ALGORITHM_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_ALGORITHM_NOT_SUPPORTED}, + #else + {"ALGORITHM_NOT_SUPPORTED", 58, 139}, + #endif + #ifdef CMP_R_BAD_CHECKAFTER_IN_POLLREP + {"BAD_CHECKAFTER_IN_POLLREP", ERR_LIB_CMP, CMP_R_BAD_CHECKAFTER_IN_POLLREP}, + #else + {"BAD_CHECKAFTER_IN_POLLREP", 58, 167}, + #endif + #ifdef CMP_R_BAD_REQUEST_ID + {"BAD_REQUEST_ID", ERR_LIB_CMP, CMP_R_BAD_REQUEST_ID}, + #else + {"BAD_REQUEST_ID", 58, 108}, + #endif + #ifdef CMP_R_CERTHASH_UNMATCHED + {"CERTHASH_UNMATCHED", ERR_LIB_CMP, CMP_R_CERTHASH_UNMATCHED}, + #else + {"CERTHASH_UNMATCHED", 58, 156}, + #endif + #ifdef CMP_R_CERTID_NOT_FOUND + {"CERTID_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTID_NOT_FOUND}, + #else + {"CERTID_NOT_FOUND", 58, 109}, + #endif + #ifdef CMP_R_CERTIFICATE_NOT_ACCEPTED + {"CERTIFICATE_NOT_ACCEPTED", ERR_LIB_CMP, CMP_R_CERTIFICATE_NOT_ACCEPTED}, + #else + {"CERTIFICATE_NOT_ACCEPTED", 58, 169}, + #endif + #ifdef CMP_R_CERTIFICATE_NOT_FOUND + {"CERTIFICATE_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTIFICATE_NOT_FOUND}, + #else + {"CERTIFICATE_NOT_FOUND", 58, 112}, + #endif + #ifdef CMP_R_CERTREQMSG_NOT_FOUND + {"CERTREQMSG_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTREQMSG_NOT_FOUND}, + #else + {"CERTREQMSG_NOT_FOUND", 58, 157}, + #endif + #ifdef CMP_R_CERTRESPONSE_NOT_FOUND + {"CERTRESPONSE_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTRESPONSE_NOT_FOUND}, + #else + {"CERTRESPONSE_NOT_FOUND", 58, 113}, + #endif + #ifdef CMP_R_CERT_AND_KEY_DO_NOT_MATCH + {"CERT_AND_KEY_DO_NOT_MATCH", ERR_LIB_CMP, CMP_R_CERT_AND_KEY_DO_NOT_MATCH}, + #else + {"CERT_AND_KEY_DO_NOT_MATCH", 58, 114}, + #endif + #ifdef CMP_R_CHECKAFTER_OUT_OF_RANGE + {"CHECKAFTER_OUT_OF_RANGE", ERR_LIB_CMP, CMP_R_CHECKAFTER_OUT_OF_RANGE}, + #else + {"CHECKAFTER_OUT_OF_RANGE", 58, 181}, + #endif + #ifdef CMP_R_ENCOUNTERED_KEYUPDATEWARNING + {"ENCOUNTERED_KEYUPDATEWARNING", ERR_LIB_CMP, CMP_R_ENCOUNTERED_KEYUPDATEWARNING}, + #else + {"ENCOUNTERED_KEYUPDATEWARNING", 58, 176}, + #endif + #ifdef CMP_R_ENCOUNTERED_WAITING + {"ENCOUNTERED_WAITING", ERR_LIB_CMP, CMP_R_ENCOUNTERED_WAITING}, + #else + {"ENCOUNTERED_WAITING", 58, 162}, + #endif + #ifdef CMP_R_ERROR_CALCULATING_PROTECTION + {"ERROR_CALCULATING_PROTECTION", ERR_LIB_CMP, CMP_R_ERROR_CALCULATING_PROTECTION}, + #else + {"ERROR_CALCULATING_PROTECTION", 58, 115}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTCONF + {"ERROR_CREATING_CERTCONF", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTCONF}, + #else + {"ERROR_CREATING_CERTCONF", 58, 116}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTREP + {"ERROR_CREATING_CERTREP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTREP}, + #else + {"ERROR_CREATING_CERTREP", 58, 117}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTREQ + {"ERROR_CREATING_CERTREQ", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTREQ}, + #else + {"ERROR_CREATING_CERTREQ", 58, 163}, + #endif + #ifdef CMP_R_ERROR_CREATING_ERROR + {"ERROR_CREATING_ERROR", ERR_LIB_CMP, CMP_R_ERROR_CREATING_ERROR}, + #else + {"ERROR_CREATING_ERROR", 58, 118}, + #endif + #ifdef CMP_R_ERROR_CREATING_GENM + {"ERROR_CREATING_GENM", ERR_LIB_CMP, CMP_R_ERROR_CREATING_GENM}, + #else + {"ERROR_CREATING_GENM", 58, 119}, + #endif + #ifdef CMP_R_ERROR_CREATING_GENP + {"ERROR_CREATING_GENP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_GENP}, + #else + {"ERROR_CREATING_GENP", 58, 120}, + #endif + #ifdef CMP_R_ERROR_CREATING_PKICONF + {"ERROR_CREATING_PKICONF", ERR_LIB_CMP, CMP_R_ERROR_CREATING_PKICONF}, + #else + {"ERROR_CREATING_PKICONF", 58, 122}, + #endif + #ifdef CMP_R_ERROR_CREATING_POLLREP + {"ERROR_CREATING_POLLREP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_POLLREP}, + #else + {"ERROR_CREATING_POLLREP", 58, 123}, + #endif + #ifdef CMP_R_ERROR_CREATING_POLLREQ + {"ERROR_CREATING_POLLREQ", ERR_LIB_CMP, CMP_R_ERROR_CREATING_POLLREQ}, + #else + {"ERROR_CREATING_POLLREQ", 58, 124}, + #endif + #ifdef CMP_R_ERROR_CREATING_RP + {"ERROR_CREATING_RP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_RP}, + #else + {"ERROR_CREATING_RP", 58, 125}, + #endif + #ifdef CMP_R_ERROR_CREATING_RR + {"ERROR_CREATING_RR", ERR_LIB_CMP, CMP_R_ERROR_CREATING_RR}, + #else + {"ERROR_CREATING_RR", 58, 126}, + #endif + #ifdef CMP_R_ERROR_PARSING_PKISTATUS + {"ERROR_PARSING_PKISTATUS", ERR_LIB_CMP, CMP_R_ERROR_PARSING_PKISTATUS}, + #else + {"ERROR_PARSING_PKISTATUS", 58, 107}, + #endif + #ifdef CMP_R_ERROR_PROCESSING_MESSAGE + {"ERROR_PROCESSING_MESSAGE", ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE}, + #else + {"ERROR_PROCESSING_MESSAGE", 58, 158}, + #endif + #ifdef CMP_R_ERROR_PROTECTING_MESSAGE + {"ERROR_PROTECTING_MESSAGE", ERR_LIB_CMP, CMP_R_ERROR_PROTECTING_MESSAGE}, + #else + {"ERROR_PROTECTING_MESSAGE", 58, 127}, + #endif + #ifdef CMP_R_ERROR_SETTING_CERTHASH + {"ERROR_SETTING_CERTHASH", ERR_LIB_CMP, CMP_R_ERROR_SETTING_CERTHASH}, + #else + {"ERROR_SETTING_CERTHASH", 58, 128}, + #endif + #ifdef CMP_R_ERROR_UNEXPECTED_CERTCONF + {"ERROR_UNEXPECTED_CERTCONF", ERR_LIB_CMP, CMP_R_ERROR_UNEXPECTED_CERTCONF}, + #else + {"ERROR_UNEXPECTED_CERTCONF", 58, 160}, + #endif + #ifdef CMP_R_ERROR_VALIDATING_PROTECTION + {"ERROR_VALIDATING_PROTECTION", ERR_LIB_CMP, CMP_R_ERROR_VALIDATING_PROTECTION}, + #else + {"ERROR_VALIDATING_PROTECTION", 58, 140}, + #endif + #ifdef CMP_R_ERROR_VALIDATING_SIGNATURE + {"ERROR_VALIDATING_SIGNATURE", ERR_LIB_CMP, CMP_R_ERROR_VALIDATING_SIGNATURE}, + #else + {"ERROR_VALIDATING_SIGNATURE", 58, 171}, + #endif + #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN + {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN}, + #else + {"FAILED_BUILDING_OWN_CHAIN", 58, 164}, + #endif + #ifdef CMP_R_FAILED_EXTRACTING_PUBKEY + {"FAILED_EXTRACTING_PUBKEY", ERR_LIB_CMP, CMP_R_FAILED_EXTRACTING_PUBKEY}, + #else + {"FAILED_EXTRACTING_PUBKEY", 58, 141}, + #endif + #ifdef CMP_R_FAILURE_OBTAINING_RANDOM + {"FAILURE_OBTAINING_RANDOM", ERR_LIB_CMP, CMP_R_FAILURE_OBTAINING_RANDOM}, + #else + {"FAILURE_OBTAINING_RANDOM", 58, 110}, + #endif + #ifdef CMP_R_FAIL_INFO_OUT_OF_RANGE + {"FAIL_INFO_OUT_OF_RANGE", ERR_LIB_CMP, CMP_R_FAIL_INFO_OUT_OF_RANGE}, + #else + {"FAIL_INFO_OUT_OF_RANGE", 58, 129}, + #endif + #ifdef CMP_R_INVALID_ARGS + {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS}, + #else + {"INVALID_ARGS", 58, 100}, + #endif + #ifdef CMP_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 58, 174}, + #endif + #ifdef CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION + {"MISSING_KEY_INPUT_FOR_CREATING_PROTECTION", ERR_LIB_CMP, CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION}, + #else + {"MISSING_KEY_INPUT_FOR_CREATING_PROTECTION", 58, 130}, + #endif + #ifdef CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE + {"MISSING_KEY_USAGE_DIGITALSIGNATURE", ERR_LIB_CMP, CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE}, + #else + {"MISSING_KEY_USAGE_DIGITALSIGNATURE", 58, 142}, + #endif + #ifdef CMP_R_MISSING_P10CSR + {"MISSING_P10CSR", ERR_LIB_CMP, CMP_R_MISSING_P10CSR}, + #else + {"MISSING_P10CSR", 58, 121}, + #endif + #ifdef CMP_R_MISSING_PBM_SECRET + {"MISSING_PBM_SECRET", ERR_LIB_CMP, CMP_R_MISSING_PBM_SECRET}, + #else + {"MISSING_PBM_SECRET", 58, 166}, + #endif + #ifdef CMP_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_CMP, CMP_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 58, 131}, + #endif + #ifdef CMP_R_MISSING_PROTECTION + {"MISSING_PROTECTION", ERR_LIB_CMP, CMP_R_MISSING_PROTECTION}, + #else + {"MISSING_PROTECTION", 58, 143}, + #endif + #ifdef CMP_R_MISSING_REFERENCE_CERT + {"MISSING_REFERENCE_CERT", ERR_LIB_CMP, CMP_R_MISSING_REFERENCE_CERT}, + #else + {"MISSING_REFERENCE_CERT", 58, 168}, + #endif + #ifdef CMP_R_MISSING_SENDER_IDENTIFICATION + {"MISSING_SENDER_IDENTIFICATION", ERR_LIB_CMP, CMP_R_MISSING_SENDER_IDENTIFICATION}, + #else + {"MISSING_SENDER_IDENTIFICATION", 58, 111}, + #endif + #ifdef CMP_R_MISSING_TRUST_STORE + {"MISSING_TRUST_STORE", ERR_LIB_CMP, CMP_R_MISSING_TRUST_STORE}, + #else + {"MISSING_TRUST_STORE", 58, 144}, + #endif + #ifdef CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED + {"MULTIPLE_REQUESTS_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED}, + #else + {"MULTIPLE_REQUESTS_NOT_SUPPORTED", 58, 161}, + #endif + #ifdef CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED + {"MULTIPLE_RESPONSES_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED}, + #else + {"MULTIPLE_RESPONSES_NOT_SUPPORTED", 58, 170}, + #endif + #ifdef CMP_R_MULTIPLE_SAN_SOURCES + {"MULTIPLE_SAN_SOURCES", ERR_LIB_CMP, CMP_R_MULTIPLE_SAN_SOURCES}, + #else + {"MULTIPLE_SAN_SOURCES", 58, 102}, + #endif + #ifdef CMP_R_NO_STDIO + {"NO_STDIO", ERR_LIB_CMP, CMP_R_NO_STDIO}, + #else + {"NO_STDIO", 58, 194}, + #endif + #ifdef CMP_R_NO_SUITABLE_SENDER_CERT + {"NO_SUITABLE_SENDER_CERT", ERR_LIB_CMP, CMP_R_NO_SUITABLE_SENDER_CERT}, + #else + {"NO_SUITABLE_SENDER_CERT", 58, 145}, + #endif + #ifdef CMP_R_NULL_ARGUMENT + {"NULL_ARGUMENT", ERR_LIB_CMP, CMP_R_NULL_ARGUMENT}, + #else + {"NULL_ARGUMENT", 58, 103}, + #endif + #ifdef CMP_R_PKIBODY_ERROR + {"PKIBODY_ERROR", ERR_LIB_CMP, CMP_R_PKIBODY_ERROR}, + #else + {"PKIBODY_ERROR", 58, 146}, + #endif + #ifdef CMP_R_PKISTATUSINFO_NOT_FOUND + {"PKISTATUSINFO_NOT_FOUND", ERR_LIB_CMP, CMP_R_PKISTATUSINFO_NOT_FOUND}, + #else + {"PKISTATUSINFO_NOT_FOUND", 58, 132}, + #endif + #ifdef CMP_R_POLLING_FAILED + {"POLLING_FAILED", ERR_LIB_CMP, CMP_R_POLLING_FAILED}, + #else + {"POLLING_FAILED", 58, 172}, + #endif + #ifdef CMP_R_POTENTIALLY_INVALID_CERTIFICATE + {"POTENTIALLY_INVALID_CERTIFICATE", ERR_LIB_CMP, CMP_R_POTENTIALLY_INVALID_CERTIFICATE}, + #else + {"POTENTIALLY_INVALID_CERTIFICATE", 58, 147}, + #endif + #ifdef CMP_R_RECEIVED_ERROR + {"RECEIVED_ERROR", ERR_LIB_CMP, CMP_R_RECEIVED_ERROR}, + #else + {"RECEIVED_ERROR", 58, 180}, + #endif + #ifdef CMP_R_RECIPNONCE_UNMATCHED + {"RECIPNONCE_UNMATCHED", ERR_LIB_CMP, CMP_R_RECIPNONCE_UNMATCHED}, + #else + {"RECIPNONCE_UNMATCHED", 58, 148}, + #endif + #ifdef CMP_R_REQUEST_NOT_ACCEPTED + {"REQUEST_NOT_ACCEPTED", ERR_LIB_CMP, CMP_R_REQUEST_NOT_ACCEPTED}, + #else + {"REQUEST_NOT_ACCEPTED", 58, 149}, + #endif + #ifdef CMP_R_REQUEST_REJECTED_BY_SERVER + {"REQUEST_REJECTED_BY_SERVER", ERR_LIB_CMP, CMP_R_REQUEST_REJECTED_BY_SERVER}, + #else + {"REQUEST_REJECTED_BY_SERVER", 58, 182}, + #endif + #ifdef CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED + {"SENDER_GENERALNAME_TYPE_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED}, + #else + {"SENDER_GENERALNAME_TYPE_NOT_SUPPORTED", 58, 150}, + #endif + #ifdef CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG + {"SRVCERT_DOES_NOT_VALIDATE_MSG", ERR_LIB_CMP, CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG}, + #else + {"SRVCERT_DOES_NOT_VALIDATE_MSG", 58, 151}, + #endif + #ifdef CMP_R_TOTAL_TIMEOUT + {"TOTAL_TIMEOUT", ERR_LIB_CMP, CMP_R_TOTAL_TIMEOUT}, + #else + {"TOTAL_TIMEOUT", 58, 184}, + #endif + #ifdef CMP_R_TRANSACTIONID_UNMATCHED + {"TRANSACTIONID_UNMATCHED", ERR_LIB_CMP, CMP_R_TRANSACTIONID_UNMATCHED}, + #else + {"TRANSACTIONID_UNMATCHED", 58, 152}, + #endif + #ifdef CMP_R_TRANSFER_ERROR + {"TRANSFER_ERROR", ERR_LIB_CMP, CMP_R_TRANSFER_ERROR}, + #else + {"TRANSFER_ERROR", 58, 159}, + #endif + #ifdef CMP_R_UNEXPECTED_PKIBODY + {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY}, + #else + {"UNEXPECTED_PKIBODY", 58, 133}, + #endif + #ifdef CMP_R_UNEXPECTED_PKISTATUS + {"UNEXPECTED_PKISTATUS", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKISTATUS}, + #else + {"UNEXPECTED_PKISTATUS", 58, 185}, + #endif + #ifdef CMP_R_UNEXPECTED_PVNO + {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO}, + #else + {"UNEXPECTED_PVNO", 58, 153}, + #endif + #ifdef CMP_R_UNKNOWN_ALGORITHM_ID + {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID}, + #else + {"UNKNOWN_ALGORITHM_ID", 58, 134}, + #endif + #ifdef CMP_R_UNKNOWN_CERT_TYPE + {"UNKNOWN_CERT_TYPE", ERR_LIB_CMP, CMP_R_UNKNOWN_CERT_TYPE}, + #else + {"UNKNOWN_CERT_TYPE", 58, 135}, + #endif + #ifdef CMP_R_UNKNOWN_PKISTATUS + {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS}, + #else + {"UNKNOWN_PKISTATUS", 58, 186}, + #endif + #ifdef CMP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_CMP, CMP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 58, 136}, + #endif + #ifdef CMP_R_UNSUPPORTED_KEY_TYPE + {"UNSUPPORTED_KEY_TYPE", ERR_LIB_CMP, CMP_R_UNSUPPORTED_KEY_TYPE}, + #else + {"UNSUPPORTED_KEY_TYPE", 58, 137}, + #endif + #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC + {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC}, + #else + {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", 58, 154}, + #endif + #ifdef CMP_R_VALUE_TOO_LARGE + {"VALUE_TOO_LARGE", ERR_LIB_CMP, CMP_R_VALUE_TOO_LARGE}, + #else + {"VALUE_TOO_LARGE", 58, 175}, + #endif + #ifdef CMP_R_VALUE_TOO_SMALL + {"VALUE_TOO_SMALL", ERR_LIB_CMP, CMP_R_VALUE_TOO_SMALL}, + #else + {"VALUE_TOO_SMALL", 58, 177}, + #endif + #ifdef CMP_R_WRONG_ALGORITHM_OID + {"WRONG_ALGORITHM_OID", ERR_LIB_CMP, CMP_R_WRONG_ALGORITHM_OID}, + #else + {"WRONG_ALGORITHM_OID", 58, 138}, + #endif + #ifdef CMP_R_WRONG_CERTID_IN_RP + {"WRONG_CERTID_IN_RP", ERR_LIB_CMP, CMP_R_WRONG_CERTID_IN_RP}, + #else + {"WRONG_CERTID_IN_RP", 58, 187}, + #endif + #ifdef CMP_R_WRONG_PBM_VALUE + {"WRONG_PBM_VALUE", ERR_LIB_CMP, CMP_R_WRONG_PBM_VALUE}, + #else + {"WRONG_PBM_VALUE", 58, 155}, + #endif + #ifdef CMP_R_WRONG_RP_COMPONENT_COUNT + {"WRONG_RP_COMPONENT_COUNT", ERR_LIB_CMP, CMP_R_WRONG_RP_COMPONENT_COUNT}, + #else + {"WRONG_RP_COMPONENT_COUNT", 58, 188}, + #endif + #ifdef CMP_R_WRONG_SERIAL_IN_RP + {"WRONG_SERIAL_IN_RP", ERR_LIB_CMP, CMP_R_WRONG_SERIAL_IN_RP}, + #else + {"WRONG_SERIAL_IN_RP", 58, 173}, + #endif + #ifdef CMS_R_ADD_SIGNER_ERROR + {"ADD_SIGNER_ERROR", ERR_LIB_CMS, CMS_R_ADD_SIGNER_ERROR}, + #else + {"ADD_SIGNER_ERROR", 46, 99}, + #endif + #ifdef CMS_R_ATTRIBUTE_ERROR + {"ATTRIBUTE_ERROR", ERR_LIB_CMS, CMS_R_ATTRIBUTE_ERROR}, + #else + {"ATTRIBUTE_ERROR", 46, 161}, + #endif + #ifdef CMS_R_CERTIFICATE_ALREADY_PRESENT + {"CERTIFICATE_ALREADY_PRESENT", ERR_LIB_CMS, CMS_R_CERTIFICATE_ALREADY_PRESENT}, + #else + {"CERTIFICATE_ALREADY_PRESENT", 46, 175}, + #endif + #ifdef CMS_R_CERTIFICATE_HAS_NO_KEYID + {"CERTIFICATE_HAS_NO_KEYID", ERR_LIB_CMS, CMS_R_CERTIFICATE_HAS_NO_KEYID}, + #else + {"CERTIFICATE_HAS_NO_KEYID", 46, 160}, + #endif + #ifdef CMS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 46, 100}, + #endif + #ifdef CMS_R_CIPHER_AEAD_SET_TAG_ERROR + {"CIPHER_AEAD_SET_TAG_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_AEAD_SET_TAG_ERROR}, + #else + {"CIPHER_AEAD_SET_TAG_ERROR", 46, 184}, + #endif + #ifdef CMS_R_CIPHER_GET_TAG + {"CIPHER_GET_TAG", ERR_LIB_CMS, CMS_R_CIPHER_GET_TAG}, + #else + {"CIPHER_GET_TAG", 46, 185}, + #endif + #ifdef CMS_R_CIPHER_INITIALISATION_ERROR + {"CIPHER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_INITIALISATION_ERROR}, + #else + {"CIPHER_INITIALISATION_ERROR", 46, 101}, + #endif + #ifdef CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR + {"CIPHER_PARAMETER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR}, + #else + {"CIPHER_PARAMETER_INITIALISATION_ERROR", 46, 102}, + #endif + #ifdef CMS_R_CMS_DATAFINAL_ERROR + {"CMS_DATAFINAL_ERROR", ERR_LIB_CMS, CMS_R_CMS_DATAFINAL_ERROR}, + #else + {"CMS_DATAFINAL_ERROR", 46, 103}, + #endif + #ifdef CMS_R_CMS_LIB + {"CMS_LIB", ERR_LIB_CMS, CMS_R_CMS_LIB}, + #else + {"CMS_LIB", 46, 104}, + #endif + #ifdef CMS_R_CONTENTIDENTIFIER_MISMATCH + {"CONTENTIDENTIFIER_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENTIDENTIFIER_MISMATCH}, + #else + {"CONTENTIDENTIFIER_MISMATCH", 46, 170}, + #endif + #ifdef CMS_R_CONTENT_NOT_FOUND + {"CONTENT_NOT_FOUND", ERR_LIB_CMS, CMS_R_CONTENT_NOT_FOUND}, + #else + {"CONTENT_NOT_FOUND", 46, 105}, + #endif + #ifdef CMS_R_CONTENT_TYPE_MISMATCH + {"CONTENT_TYPE_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_MISMATCH}, + #else + {"CONTENT_TYPE_MISMATCH", 46, 171}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA}, + #else + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", 46, 106}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA}, + #else + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", 46, 107}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA + {"CONTENT_TYPE_NOT_SIGNED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA}, + #else + {"CONTENT_TYPE_NOT_SIGNED_DATA", 46, 108}, + #endif + #ifdef CMS_R_CONTENT_VERIFY_ERROR + {"CONTENT_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CONTENT_VERIFY_ERROR}, + #else + {"CONTENT_VERIFY_ERROR", 46, 109}, + #endif + #ifdef CMS_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_CMS, CMS_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 46, 110}, + #endif + #ifdef CMS_R_CTRL_FAILURE + {"CTRL_FAILURE", ERR_LIB_CMS, CMS_R_CTRL_FAILURE}, + #else + {"CTRL_FAILURE", 46, 111}, + #endif + #ifdef CMS_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_CMS, CMS_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 46, 187}, + #endif + #ifdef CMS_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_CMS, CMS_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 46, 112}, + #endif + #ifdef CMS_R_ERROR_GETTING_PUBLIC_KEY + {"ERROR_GETTING_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_ERROR_GETTING_PUBLIC_KEY}, + #else + {"ERROR_GETTING_PUBLIC_KEY", 46, 113}, + #endif + #ifdef CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", ERR_LIB_CMS, CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE}, + #else + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", 46, 114}, + #endif + #ifdef CMS_R_ERROR_SETTING_KEY + {"ERROR_SETTING_KEY", ERR_LIB_CMS, CMS_R_ERROR_SETTING_KEY}, + #else + {"ERROR_SETTING_KEY", 46, 115}, + #endif + #ifdef CMS_R_ERROR_SETTING_RECIPIENTINFO + {"ERROR_SETTING_RECIPIENTINFO", ERR_LIB_CMS, CMS_R_ERROR_SETTING_RECIPIENTINFO}, + #else + {"ERROR_SETTING_RECIPIENTINFO", 46, 116}, + #endif + #ifdef CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR + {"ESS_SIGNING_CERTID_MISMATCH_ERROR", ERR_LIB_CMS, CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR}, + #else + {"ESS_SIGNING_CERTID_MISMATCH_ERROR", 46, 183}, + #endif + #ifdef CMS_R_INVALID_ENCRYPTED_KEY_LENGTH + {"INVALID_ENCRYPTED_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_ENCRYPTED_KEY_LENGTH}, + #else + {"INVALID_ENCRYPTED_KEY_LENGTH", 46, 117}, + #endif + #ifdef CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER + {"INVALID_KEY_ENCRYPTION_PARAMETER", ERR_LIB_CMS, CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER}, + #else + {"INVALID_KEY_ENCRYPTION_PARAMETER", 46, 176}, + #endif + #ifdef CMS_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 46, 118}, + #endif + #ifdef CMS_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_CMS, CMS_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 46, 190}, + #endif + #ifdef CMS_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_CMS, CMS_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 46, 191}, + #endif + #ifdef CMS_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_CMS, CMS_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 46, 186}, + #endif + #ifdef CMS_R_MD_BIO_INIT_ERROR + {"MD_BIO_INIT_ERROR", ERR_LIB_CMS, CMS_R_MD_BIO_INIT_ERROR}, + #else + {"MD_BIO_INIT_ERROR", 46, 119}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", 46, 120}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_WRONG_LENGTH + {"MESSAGEDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_WRONG_LENGTH", 46, 121}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_ERROR + {"MSGSIGDIGEST_ERROR", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_ERROR}, + #else + {"MSGSIGDIGEST_ERROR", 46, 172}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE + {"MSGSIGDIGEST_VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE}, + #else + {"MSGSIGDIGEST_VERIFICATION_FAILURE", 46, 162}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_WRONG_LENGTH + {"MSGSIGDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_WRONG_LENGTH}, + #else + {"MSGSIGDIGEST_WRONG_LENGTH", 46, 163}, + #endif + #ifdef CMS_R_NEED_ONE_SIGNER + {"NEED_ONE_SIGNER", ERR_LIB_CMS, CMS_R_NEED_ONE_SIGNER}, + #else + {"NEED_ONE_SIGNER", 46, 164}, + #endif + #ifdef CMS_R_NOT_A_SIGNED_RECEIPT + {"NOT_A_SIGNED_RECEIPT", ERR_LIB_CMS, CMS_R_NOT_A_SIGNED_RECEIPT}, + #else + {"NOT_A_SIGNED_RECEIPT", 46, 165}, + #endif + #ifdef CMS_R_NOT_ENCRYPTED_DATA + {"NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_NOT_ENCRYPTED_DATA}, + #else + {"NOT_ENCRYPTED_DATA", 46, 122}, + #endif + #ifdef CMS_R_NOT_KEK + {"NOT_KEK", ERR_LIB_CMS, CMS_R_NOT_KEK}, + #else + {"NOT_KEK", 46, 123}, + #endif + #ifdef CMS_R_NOT_KEY_AGREEMENT + {"NOT_KEY_AGREEMENT", ERR_LIB_CMS, CMS_R_NOT_KEY_AGREEMENT}, + #else + {"NOT_KEY_AGREEMENT", 46, 181}, + #endif + #ifdef CMS_R_NOT_KEY_TRANSPORT + {"NOT_KEY_TRANSPORT", ERR_LIB_CMS, CMS_R_NOT_KEY_TRANSPORT}, + #else + {"NOT_KEY_TRANSPORT", 46, 124}, + #endif + #ifdef CMS_R_NOT_PWRI + {"NOT_PWRI", ERR_LIB_CMS, CMS_R_NOT_PWRI}, + #else + {"NOT_PWRI", 46, 177}, + #endif + #ifdef CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_CMS, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 46, 125}, + #endif + #ifdef CMS_R_NO_CIPHER + {"NO_CIPHER", ERR_LIB_CMS, CMS_R_NO_CIPHER}, + #else + {"NO_CIPHER", 46, 126}, + #endif + #ifdef CMS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_CMS, CMS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 46, 127}, + #endif + #ifdef CMS_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 46, 173}, + #endif + #ifdef CMS_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_CMS, CMS_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 46, 128}, + #endif + #ifdef CMS_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_CMS, CMS_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 46, 129}, + #endif + #ifdef CMS_R_NO_KEY + {"NO_KEY", ERR_LIB_CMS, CMS_R_NO_KEY}, + #else + {"NO_KEY", 46, 130}, + #endif + #ifdef CMS_R_NO_KEY_OR_CERT + {"NO_KEY_OR_CERT", ERR_LIB_CMS, CMS_R_NO_KEY_OR_CERT}, + #else + {"NO_KEY_OR_CERT", 46, 174}, + #endif + #ifdef CMS_R_NO_MATCHING_DIGEST + {"NO_MATCHING_DIGEST", ERR_LIB_CMS, CMS_R_NO_MATCHING_DIGEST}, + #else + {"NO_MATCHING_DIGEST", 46, 131}, + #endif + #ifdef CMS_R_NO_MATCHING_RECIPIENT + {"NO_MATCHING_RECIPIENT", ERR_LIB_CMS, CMS_R_NO_MATCHING_RECIPIENT}, + #else + {"NO_MATCHING_RECIPIENT", 46, 132}, + #endif + #ifdef CMS_R_NO_MATCHING_SIGNATURE + {"NO_MATCHING_SIGNATURE", ERR_LIB_CMS, CMS_R_NO_MATCHING_SIGNATURE}, + #else + {"NO_MATCHING_SIGNATURE", 46, 166}, + #endif + #ifdef CMS_R_NO_MSGSIGDIGEST + {"NO_MSGSIGDIGEST", ERR_LIB_CMS, CMS_R_NO_MSGSIGDIGEST}, + #else + {"NO_MSGSIGDIGEST", 46, 167}, + #endif + #ifdef CMS_R_NO_PASSWORD + {"NO_PASSWORD", ERR_LIB_CMS, CMS_R_NO_PASSWORD}, + #else + {"NO_PASSWORD", 46, 178}, + #endif + #ifdef CMS_R_NO_PRIVATE_KEY + {"NO_PRIVATE_KEY", ERR_LIB_CMS, CMS_R_NO_PRIVATE_KEY}, + #else + {"NO_PRIVATE_KEY", 46, 133}, + #endif + #ifdef CMS_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 46, 134}, + #endif + #ifdef CMS_R_NO_RECEIPT_REQUEST + {"NO_RECEIPT_REQUEST", ERR_LIB_CMS, CMS_R_NO_RECEIPT_REQUEST}, + #else + {"NO_RECEIPT_REQUEST", 46, 168}, + #endif + #ifdef CMS_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_CMS, CMS_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 46, 135}, + #endif + #ifdef CMS_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 46, 188}, + #endif + #ifdef CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_CMS, CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 46, 136}, + #endif + #ifdef CMS_R_RECEIPT_DECODE_ERROR + {"RECEIPT_DECODE_ERROR", ERR_LIB_CMS, CMS_R_RECEIPT_DECODE_ERROR}, + #else + {"RECEIPT_DECODE_ERROR", 46, 169}, + #endif + #ifdef CMS_R_RECIPIENT_ERROR + {"RECIPIENT_ERROR", ERR_LIB_CMS, CMS_R_RECIPIENT_ERROR}, + #else + {"RECIPIENT_ERROR", 46, 137}, + #endif + #ifdef CMS_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_CMS, CMS_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 46, 189}, + #endif + #ifdef CMS_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_CMS, CMS_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 46, 138}, + #endif + #ifdef CMS_R_SIGNFINAL_ERROR + {"SIGNFINAL_ERROR", ERR_LIB_CMS, CMS_R_SIGNFINAL_ERROR}, + #else + {"SIGNFINAL_ERROR", 46, 139}, + #endif + #ifdef CMS_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_CMS, CMS_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 46, 140}, + #endif + #ifdef CMS_R_STORE_INIT_ERROR + {"STORE_INIT_ERROR", ERR_LIB_CMS, CMS_R_STORE_INIT_ERROR}, + #else + {"STORE_INIT_ERROR", 46, 141}, + #endif + #ifdef CMS_R_TYPE_NOT_COMPRESSED_DATA + {"TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_COMPRESSED_DATA}, + #else + {"TYPE_NOT_COMPRESSED_DATA", 46, 142}, + #endif + #ifdef CMS_R_TYPE_NOT_DATA + {"TYPE_NOT_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DATA}, + #else + {"TYPE_NOT_DATA", 46, 143}, + #endif + #ifdef CMS_R_TYPE_NOT_DIGESTED_DATA + {"TYPE_NOT_DIGESTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DIGESTED_DATA}, + #else + {"TYPE_NOT_DIGESTED_DATA", 46, 144}, + #endif + #ifdef CMS_R_TYPE_NOT_ENCRYPTED_DATA + {"TYPE_NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENCRYPTED_DATA}, + #else + {"TYPE_NOT_ENCRYPTED_DATA", 46, 145}, + #endif + #ifdef CMS_R_TYPE_NOT_ENVELOPED_DATA + {"TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENVELOPED_DATA}, + #else + {"TYPE_NOT_ENVELOPED_DATA", 46, 146}, + #endif + #ifdef CMS_R_UNABLE_TO_FINALIZE_CONTEXT + {"UNABLE_TO_FINALIZE_CONTEXT", ERR_LIB_CMS, CMS_R_UNABLE_TO_FINALIZE_CONTEXT}, + #else + {"UNABLE_TO_FINALIZE_CONTEXT", 46, 147}, + #endif + #ifdef CMS_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_CMS, CMS_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 46, 148}, + #endif + #ifdef CMS_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_CMS, CMS_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 46, 149}, + #endif + #ifdef CMS_R_UNKNOWN_ID + {"UNKNOWN_ID", ERR_LIB_CMS, CMS_R_UNKNOWN_ID}, + #else + {"UNKNOWN_ID", 46, 150}, + #endif + #ifdef CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 46, 151}, + #endif + #ifdef CMS_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 46, 152}, + #endif + #ifdef CMS_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 46, 192}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEK_ALGORITHM + {"UNSUPPORTED_KEK_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEK_ALGORITHM}, + #else + {"UNSUPPORTED_KEK_ALGORITHM", 46, 153}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM}, + #else + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", 46, 179}, + #endif + #ifdef CMS_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 46, 193}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + {"UNSUPPORTED_RECIPIENTINFO_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE}, + #else + {"UNSUPPORTED_RECIPIENTINFO_TYPE", 46, 155}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENT_TYPE + {"UNSUPPORTED_RECIPIENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENT_TYPE}, + #else + {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, + #endif + #ifdef CMS_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 46, 156}, + #endif + #ifdef CMS_R_UNWRAP_ERROR + {"UNWRAP_ERROR", ERR_LIB_CMS, CMS_R_UNWRAP_ERROR}, + #else + {"UNWRAP_ERROR", 46, 157}, + #endif + #ifdef CMS_R_UNWRAP_FAILURE + {"UNWRAP_FAILURE", ERR_LIB_CMS, CMS_R_UNWRAP_FAILURE}, + #else + {"UNWRAP_FAILURE", 46, 180}, + #endif + #ifdef CMS_R_VERIFICATION_FAILURE + {"VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_VERIFICATION_FAILURE}, + #else + {"VERIFICATION_FAILURE", 46, 158}, + #endif + #ifdef CMS_R_WRAP_ERROR + {"WRAP_ERROR", ERR_LIB_CMS, CMS_R_WRAP_ERROR}, + #else + {"WRAP_ERROR", 46, 159}, + #endif + #ifdef COMP_R_ZLIB_DEFLATE_ERROR + {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, + #else + {"ZLIB_DEFLATE_ERROR", 41, 99}, + #endif + #ifdef COMP_R_ZLIB_INFLATE_ERROR + {"ZLIB_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_INFLATE_ERROR}, + #else + {"ZLIB_INFLATE_ERROR", 41, 100}, + #endif + #ifdef COMP_R_ZLIB_NOT_SUPPORTED + {"ZLIB_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZLIB_NOT_SUPPORTED}, + #else + {"ZLIB_NOT_SUPPORTED", 41, 101}, + #endif + #ifdef CONF_R_ERROR_LOADING_DSO + {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, + #else + {"ERROR_LOADING_DSO", 14, 110}, + #endif + #ifdef CONF_R_INVALID_PRAGMA + {"INVALID_PRAGMA", ERR_LIB_CONF, CONF_R_INVALID_PRAGMA}, + #else + {"INVALID_PRAGMA", 14, 122}, + #endif + #ifdef CONF_R_LIST_CANNOT_BE_NULL + {"LIST_CANNOT_BE_NULL", ERR_LIB_CONF, CONF_R_LIST_CANNOT_BE_NULL}, + #else + {"LIST_CANNOT_BE_NULL", 14, 115}, + #endif + #ifdef CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION + {"MANDATORY_BRACES_IN_VARIABLE_EXPANSION", ERR_LIB_CONF, CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION}, + #else + {"MANDATORY_BRACES_IN_VARIABLE_EXPANSION", 14, 123}, + #endif + #ifdef CONF_R_MISSING_CLOSE_SQUARE_BRACKET + {"MISSING_CLOSE_SQUARE_BRACKET", ERR_LIB_CONF, CONF_R_MISSING_CLOSE_SQUARE_BRACKET}, + #else + {"MISSING_CLOSE_SQUARE_BRACKET", 14, 100}, + #endif + #ifdef CONF_R_MISSING_EQUAL_SIGN + {"MISSING_EQUAL_SIGN", ERR_LIB_CONF, CONF_R_MISSING_EQUAL_SIGN}, + #else + {"MISSING_EQUAL_SIGN", 14, 101}, + #endif + #ifdef CONF_R_MISSING_INIT_FUNCTION + {"MISSING_INIT_FUNCTION", ERR_LIB_CONF, CONF_R_MISSING_INIT_FUNCTION}, + #else + {"MISSING_INIT_FUNCTION", 14, 112}, + #endif + #ifdef CONF_R_MODULE_INITIALIZATION_ERROR + {"MODULE_INITIALIZATION_ERROR", ERR_LIB_CONF, CONF_R_MODULE_INITIALIZATION_ERROR}, + #else + {"MODULE_INITIALIZATION_ERROR", 14, 109}, + #endif + #ifdef CONF_R_NO_CLOSE_BRACE + {"NO_CLOSE_BRACE", ERR_LIB_CONF, CONF_R_NO_CLOSE_BRACE}, + #else + {"NO_CLOSE_BRACE", 14, 102}, + #endif + #ifdef CONF_R_NO_CONF + {"NO_CONF", ERR_LIB_CONF, CONF_R_NO_CONF}, + #else + {"NO_CONF", 14, 105}, + #endif + #ifdef CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", ERR_LIB_CONF, CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE}, + #else + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", 14, 106}, + #endif + #ifdef CONF_R_NO_SECTION + {"NO_SECTION", ERR_LIB_CONF, CONF_R_NO_SECTION}, + #else + {"NO_SECTION", 14, 107}, + #endif + #ifdef CONF_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_CONF, CONF_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 14, 114}, + #endif + #ifdef CONF_R_NO_VALUE + {"NO_VALUE", ERR_LIB_CONF, CONF_R_NO_VALUE}, + #else + {"NO_VALUE", 14, 108}, + #endif + #ifdef CONF_R_NUMBER_TOO_LARGE + {"NUMBER_TOO_LARGE", ERR_LIB_CONF, CONF_R_NUMBER_TOO_LARGE}, + #else + {"NUMBER_TOO_LARGE", 14, 121}, + #endif + #ifdef CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION + {"OPENSSL_CONF_REFERENCES_MISSING_SECTION", ERR_LIB_CONF, CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION}, + #else + {"OPENSSL_CONF_REFERENCES_MISSING_SECTION", 14, 124}, + #endif + #ifdef CONF_R_RECURSIVE_DIRECTORY_INCLUDE + {"RECURSIVE_DIRECTORY_INCLUDE", ERR_LIB_CONF, CONF_R_RECURSIVE_DIRECTORY_INCLUDE}, + #else + {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 14, 117}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 14, 118}, + #endif + #ifdef CONF_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 14, 119}, + #endif + #ifdef CONF_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 14, 120}, + #endif + #ifdef CONF_R_UNABLE_TO_CREATE_NEW_SECTION + {"UNABLE_TO_CREATE_NEW_SECTION", ERR_LIB_CONF, CONF_R_UNABLE_TO_CREATE_NEW_SECTION}, + #else + {"UNABLE_TO_CREATE_NEW_SECTION", 14, 103}, + #endif + #ifdef CONF_R_UNKNOWN_MODULE_NAME + {"UNKNOWN_MODULE_NAME", ERR_LIB_CONF, CONF_R_UNKNOWN_MODULE_NAME}, + #else + {"UNKNOWN_MODULE_NAME", 14, 113}, + #endif + #ifdef CONF_R_VARIABLE_EXPANSION_TOO_LONG + {"VARIABLE_EXPANSION_TOO_LONG", ERR_LIB_CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG}, + #else + {"VARIABLE_EXPANSION_TOO_LONG", 14, 116}, + #endif + #ifdef CONF_R_VARIABLE_HAS_NO_VALUE + {"VARIABLE_HAS_NO_VALUE", ERR_LIB_CONF, CONF_R_VARIABLE_HAS_NO_VALUE}, + #else + {"VARIABLE_HAS_NO_VALUE", 14, 104}, + #endif + #ifdef CRMF_R_BAD_PBM_ITERATIONCOUNT + {"BAD_PBM_ITERATIONCOUNT", ERR_LIB_CRMF, CRMF_R_BAD_PBM_ITERATIONCOUNT}, + #else + {"BAD_PBM_ITERATIONCOUNT", 56, 100}, + #endif + #ifdef CRMF_R_CRMFERROR + {"CRMFERROR", ERR_LIB_CRMF, CRMF_R_CRMFERROR}, + #else + {"CRMFERROR", 56, 102}, + #endif + #ifdef CRMF_R_ERROR + {"ERROR", ERR_LIB_CRMF, CRMF_R_ERROR}, + #else + {"ERROR", 56, 103}, + #endif + #ifdef CRMF_R_ERROR_DECODING_CERTIFICATE + {"ERROR_DECODING_CERTIFICATE", ERR_LIB_CRMF, CRMF_R_ERROR_DECODING_CERTIFICATE}, + #else + {"ERROR_DECODING_CERTIFICATE", 56, 104}, + #endif + #ifdef CRMF_R_ERROR_DECRYPTING_CERTIFICATE + {"ERROR_DECRYPTING_CERTIFICATE", ERR_LIB_CRMF, CRMF_R_ERROR_DECRYPTING_CERTIFICATE}, + #else + {"ERROR_DECRYPTING_CERTIFICATE", 56, 105}, + #endif + #ifdef CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY + {"ERROR_DECRYPTING_SYMMETRIC_KEY", ERR_LIB_CRMF, CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY}, + #else + {"ERROR_DECRYPTING_SYMMETRIC_KEY", 56, 106}, + #endif + #ifdef CRMF_R_FAILURE_OBTAINING_RANDOM + {"FAILURE_OBTAINING_RANDOM", ERR_LIB_CRMF, CRMF_R_FAILURE_OBTAINING_RANDOM}, + #else + {"FAILURE_OBTAINING_RANDOM", 56, 107}, + #endif + #ifdef CRMF_R_ITERATIONCOUNT_BELOW_100 + {"ITERATIONCOUNT_BELOW_100", ERR_LIB_CRMF, CRMF_R_ITERATIONCOUNT_BELOW_100}, + #else + {"ITERATIONCOUNT_BELOW_100", 56, 108}, + #endif + #ifdef CRMF_R_MALFORMED_IV + {"MALFORMED_IV", ERR_LIB_CRMF, CRMF_R_MALFORMED_IV}, + #else + {"MALFORMED_IV", 56, 101}, + #endif + #ifdef CRMF_R_NULL_ARGUMENT + {"NULL_ARGUMENT", ERR_LIB_CRMF, CRMF_R_NULL_ARGUMENT}, + #else + {"NULL_ARGUMENT", 56, 109}, + #endif + #ifdef CRMF_R_POPOSKINPUT_NOT_SUPPORTED + {"POPOSKINPUT_NOT_SUPPORTED", ERR_LIB_CRMF, CRMF_R_POPOSKINPUT_NOT_SUPPORTED}, + #else + {"POPOSKINPUT_NOT_SUPPORTED", 56, 113}, + #endif + #ifdef CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY + {"POPO_INCONSISTENT_PUBLIC_KEY", ERR_LIB_CRMF, CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY}, + #else + {"POPO_INCONSISTENT_PUBLIC_KEY", 56, 117}, + #endif + #ifdef CRMF_R_POPO_MISSING + {"POPO_MISSING", ERR_LIB_CRMF, CRMF_R_POPO_MISSING}, + #else + {"POPO_MISSING", 56, 121}, + #endif + #ifdef CRMF_R_POPO_MISSING_PUBLIC_KEY + {"POPO_MISSING_PUBLIC_KEY", ERR_LIB_CRMF, CRMF_R_POPO_MISSING_PUBLIC_KEY}, + #else + {"POPO_MISSING_PUBLIC_KEY", 56, 118}, + #endif + #ifdef CRMF_R_POPO_MISSING_SUBJECT + {"POPO_MISSING_SUBJECT", ERR_LIB_CRMF, CRMF_R_POPO_MISSING_SUBJECT}, + #else + {"POPO_MISSING_SUBJECT", 56, 119}, + #endif + #ifdef CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED + {"POPO_RAVERIFIED_NOT_ACCEPTED", ERR_LIB_CRMF, CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED}, + #else + {"POPO_RAVERIFIED_NOT_ACCEPTED", 56, 120}, + #endif + #ifdef CRMF_R_SETTING_MAC_ALGOR_FAILURE + {"SETTING_MAC_ALGOR_FAILURE", ERR_LIB_CRMF, CRMF_R_SETTING_MAC_ALGOR_FAILURE}, + #else + {"SETTING_MAC_ALGOR_FAILURE", 56, 110}, + #endif + #ifdef CRMF_R_SETTING_OWF_ALGOR_FAILURE + {"SETTING_OWF_ALGOR_FAILURE", ERR_LIB_CRMF, CRMF_R_SETTING_OWF_ALGOR_FAILURE}, + #else + {"SETTING_OWF_ALGOR_FAILURE", 56, 111}, + #endif + #ifdef CRMF_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 56, 112}, + #endif + #ifdef CRMF_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 56, 114}, + #endif + #ifdef CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO + {"UNSUPPORTED_METHOD_FOR_CREATING_POPO", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO}, + #else + {"UNSUPPORTED_METHOD_FOR_CREATING_POPO", 56, 115}, + #endif + #ifdef CRMF_R_UNSUPPORTED_POPO_METHOD + {"UNSUPPORTED_POPO_METHOD", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_POPO_METHOD}, + #else + {"UNSUPPORTED_POPO_METHOD", 56, 116}, + #endif + #ifdef CRYPTO_R_BAD_ALGORITHM_NAME + {"BAD_ALGORITHM_NAME", ERR_LIB_CRYPTO, CRYPTO_R_BAD_ALGORITHM_NAME}, + #else + {"BAD_ALGORITHM_NAME", 15, 117}, + #endif + #ifdef CRYPTO_R_CONFLICTING_NAMES + {"CONFLICTING_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_CONFLICTING_NAMES}, + #else + {"CONFLICTING_NAMES", 15, 118}, + #endif + #ifdef CRYPTO_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_CRYPTO, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 15, 101}, + #endif + #ifdef CRYPTO_R_HEX_STRING_TOO_SHORT + {"HEX_STRING_TOO_SHORT", ERR_LIB_CRYPTO, CRYPTO_R_HEX_STRING_TOO_SHORT}, + #else + {"HEX_STRING_TOO_SHORT", 15, 121}, + #endif + #ifdef CRYPTO_R_ILLEGAL_HEX_DIGIT + {"ILLEGAL_HEX_DIGIT", ERR_LIB_CRYPTO, CRYPTO_R_ILLEGAL_HEX_DIGIT}, + #else + {"ILLEGAL_HEX_DIGIT", 15, 102}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_DATA_SPACE + {"INSUFFICIENT_DATA_SPACE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_DATA_SPACE}, + #else + {"INSUFFICIENT_DATA_SPACE", 15, 106}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_PARAM_SIZE + {"INSUFFICIENT_PARAM_SIZE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_PARAM_SIZE}, + #else + {"INSUFFICIENT_PARAM_SIZE", 15, 107}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE + {"INSUFFICIENT_SECURE_DATA_SPACE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE}, + #else + {"INSUFFICIENT_SECURE_DATA_SPACE", 15, 108}, + #endif + #ifdef CRYPTO_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_CRYPTO, CRYPTO_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 15, 109}, + #endif + #ifdef CRYPTO_R_INVALID_OSSL_PARAM_TYPE + {"INVALID_OSSL_PARAM_TYPE", ERR_LIB_CRYPTO, CRYPTO_R_INVALID_OSSL_PARAM_TYPE}, + #else + {"INVALID_OSSL_PARAM_TYPE", 15, 110}, + #endif + #ifdef CRYPTO_R_ODD_NUMBER_OF_DIGITS + {"ODD_NUMBER_OF_DIGITS", ERR_LIB_CRYPTO, CRYPTO_R_ODD_NUMBER_OF_DIGITS}, + #else + {"ODD_NUMBER_OF_DIGITS", 15, 103}, + #endif + #ifdef CRYPTO_R_PROVIDER_ALREADY_EXISTS + {"PROVIDER_ALREADY_EXISTS", ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_ALREADY_EXISTS}, + #else + {"PROVIDER_ALREADY_EXISTS", 15, 104}, + #endif + #ifdef CRYPTO_R_PROVIDER_SECTION_ERROR + {"PROVIDER_SECTION_ERROR", ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR}, + #else + {"PROVIDER_SECTION_ERROR", 15, 105}, + #endif + #ifdef CRYPTO_R_RANDOM_SECTION_ERROR + {"RANDOM_SECTION_ERROR", ERR_LIB_CRYPTO, CRYPTO_R_RANDOM_SECTION_ERROR}, + #else + {"RANDOM_SECTION_ERROR", 15, 119}, + #endif + #ifdef CRYPTO_R_SECURE_MALLOC_FAILURE + {"SECURE_MALLOC_FAILURE", ERR_LIB_CRYPTO, CRYPTO_R_SECURE_MALLOC_FAILURE}, + #else + {"SECURE_MALLOC_FAILURE", 15, 111}, + #endif + #ifdef CRYPTO_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_CRYPTO, CRYPTO_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 15, 112}, + #endif + #ifdef CRYPTO_R_TOO_MANY_BYTES + {"TOO_MANY_BYTES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_BYTES}, + #else + {"TOO_MANY_BYTES", 15, 113}, + #endif + #ifdef CRYPTO_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 15, 114}, + #endif + #ifdef CRYPTO_R_TOO_SMALL_BUFFER + {"TOO_SMALL_BUFFER", ERR_LIB_CRYPTO, CRYPTO_R_TOO_SMALL_BUFFER}, + #else + {"TOO_SMALL_BUFFER", 15, 116}, + #endif + #ifdef CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION + {"UNKNOWN_NAME_IN_RANDOM_SECTION", ERR_LIB_CRYPTO, CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION}, + #else + {"UNKNOWN_NAME_IN_RANDOM_SECTION", 15, 120}, + #endif + #ifdef CRYPTO_R_ZERO_LENGTH_NUMBER + {"ZERO_LENGTH_NUMBER", ERR_LIB_CRYPTO, CRYPTO_R_ZERO_LENGTH_NUMBER}, + #else + {"ZERO_LENGTH_NUMBER", 15, 115}, + #endif + #ifdef CT_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_CT, CT_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 50, 108}, + #endif + #ifdef CT_R_INVALID_LOG_ID_LENGTH + {"INVALID_LOG_ID_LENGTH", ERR_LIB_CT, CT_R_INVALID_LOG_ID_LENGTH}, + #else + {"INVALID_LOG_ID_LENGTH", 50, 100}, + #endif + #ifdef CT_R_LOG_CONF_INVALID + {"LOG_CONF_INVALID", ERR_LIB_CT, CT_R_LOG_CONF_INVALID}, + #else + {"LOG_CONF_INVALID", 50, 109}, + #endif + #ifdef CT_R_LOG_CONF_INVALID_KEY + {"LOG_CONF_INVALID_KEY", ERR_LIB_CT, CT_R_LOG_CONF_INVALID_KEY}, + #else + {"LOG_CONF_INVALID_KEY", 50, 110}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_DESCRIPTION + {"LOG_CONF_MISSING_DESCRIPTION", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_DESCRIPTION}, + #else + {"LOG_CONF_MISSING_DESCRIPTION", 50, 111}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_KEY + {"LOG_CONF_MISSING_KEY", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_KEY}, + #else + {"LOG_CONF_MISSING_KEY", 50, 112}, + #endif + #ifdef CT_R_LOG_KEY_INVALID + {"LOG_KEY_INVALID", ERR_LIB_CT, CT_R_LOG_KEY_INVALID}, + #else + {"LOG_KEY_INVALID", 50, 113}, + #endif + #ifdef CT_R_SCT_FUTURE_TIMESTAMP + {"SCT_FUTURE_TIMESTAMP", ERR_LIB_CT, CT_R_SCT_FUTURE_TIMESTAMP}, + #else + {"SCT_FUTURE_TIMESTAMP", 50, 116}, + #endif + #ifdef CT_R_SCT_INVALID + {"SCT_INVALID", ERR_LIB_CT, CT_R_SCT_INVALID}, + #else + {"SCT_INVALID", 50, 104}, + #endif + #ifdef CT_R_SCT_INVALID_SIGNATURE + {"SCT_INVALID_SIGNATURE", ERR_LIB_CT, CT_R_SCT_INVALID_SIGNATURE}, + #else + {"SCT_INVALID_SIGNATURE", 50, 107}, + #endif + #ifdef CT_R_SCT_LIST_INVALID + {"SCT_LIST_INVALID", ERR_LIB_CT, CT_R_SCT_LIST_INVALID}, + #else + {"SCT_LIST_INVALID", 50, 105}, + #endif + #ifdef CT_R_SCT_LOG_ID_MISMATCH + {"SCT_LOG_ID_MISMATCH", ERR_LIB_CT, CT_R_SCT_LOG_ID_MISMATCH}, + #else + {"SCT_LOG_ID_MISMATCH", 50, 114}, + #endif + #ifdef CT_R_SCT_NOT_SET + {"SCT_NOT_SET", ERR_LIB_CT, CT_R_SCT_NOT_SET}, + #else + {"SCT_NOT_SET", 50, 106}, + #endif + #ifdef CT_R_SCT_UNSUPPORTED_VERSION + {"SCT_UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_SCT_UNSUPPORTED_VERSION}, + #else + {"SCT_UNSUPPORTED_VERSION", 50, 115}, + #endif + #ifdef CT_R_UNRECOGNIZED_SIGNATURE_NID + {"UNRECOGNIZED_SIGNATURE_NID", ERR_LIB_CT, CT_R_UNRECOGNIZED_SIGNATURE_NID}, + #else + {"UNRECOGNIZED_SIGNATURE_NID", 50, 101}, + #endif + #ifdef CT_R_UNSUPPORTED_ENTRY_TYPE + {"UNSUPPORTED_ENTRY_TYPE", ERR_LIB_CT, CT_R_UNSUPPORTED_ENTRY_TYPE}, + #else + {"UNSUPPORTED_ENTRY_TYPE", 50, 102}, + #endif + #ifdef CT_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 50, 103}, + #endif + #ifdef DH_R_BAD_FFC_PARAMETERS + {"BAD_FFC_PARAMETERS", ERR_LIB_DH, DH_R_BAD_FFC_PARAMETERS}, + #else + {"BAD_FFC_PARAMETERS", 5, 127}, + #endif + #ifdef DH_R_BAD_GENERATOR + {"BAD_GENERATOR", ERR_LIB_DH, DH_R_BAD_GENERATOR}, + #else + {"BAD_GENERATOR", 5, 101}, + #endif + #ifdef DH_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DH, DH_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 5, 109}, + #endif + #ifdef DH_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DH, DH_R_BN_ERROR}, + #else + {"BN_ERROR", 5, 106}, + #endif + #ifdef DH_R_CHECK_INVALID_J_VALUE + {"CHECK_INVALID_J_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_J_VALUE}, + #else + {"CHECK_INVALID_J_VALUE", 5, 115}, + #endif + #ifdef DH_R_CHECK_INVALID_Q_VALUE + {"CHECK_INVALID_Q_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_Q_VALUE}, + #else + {"CHECK_INVALID_Q_VALUE", 5, 116}, + #endif + #ifdef DH_R_CHECK_PUBKEY_INVALID + {"CHECK_PUBKEY_INVALID", ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID}, + #else + {"CHECK_PUBKEY_INVALID", 5, 122}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_LARGE + {"CHECK_PUBKEY_TOO_LARGE", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_LARGE}, + #else + {"CHECK_PUBKEY_TOO_LARGE", 5, 123}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_SMALL + {"CHECK_PUBKEY_TOO_SMALL", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_SMALL}, + #else + {"CHECK_PUBKEY_TOO_SMALL", 5, 124}, + #endif + #ifdef DH_R_CHECK_P_NOT_PRIME + {"CHECK_P_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_PRIME}, + #else + {"CHECK_P_NOT_PRIME", 5, 117}, + #endif + #ifdef DH_R_CHECK_P_NOT_SAFE_PRIME + {"CHECK_P_NOT_SAFE_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_SAFE_PRIME}, + #else + {"CHECK_P_NOT_SAFE_PRIME", 5, 118}, + #endif + #ifdef DH_R_CHECK_Q_NOT_PRIME + {"CHECK_Q_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_Q_NOT_PRIME}, + #else + {"CHECK_Q_NOT_PRIME", 5, 119}, + #endif + #ifdef DH_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DH, DH_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 5, 104}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NAME + {"INVALID_PARAMETER_NAME", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NAME}, + #else + {"INVALID_PARAMETER_NAME", 5, 110}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NID + {"INVALID_PARAMETER_NID", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NID}, + #else + {"INVALID_PARAMETER_NID", 5, 114}, + #endif + #ifdef DH_R_INVALID_PUBKEY + {"INVALID_PUBKEY", ERR_LIB_DH, DH_R_INVALID_PUBKEY}, + #else + {"INVALID_PUBKEY", 5, 102}, + #endif + #ifdef DH_R_INVALID_SECRET + {"INVALID_SECRET", ERR_LIB_DH, DH_R_INVALID_SECRET}, + #else + {"INVALID_SECRET", 5, 128}, + #endif + #ifdef DH_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 5, 112}, + #endif + #ifdef DH_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_DH, DH_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 5, 108}, + #endif + #ifdef DH_R_MISSING_PUBKEY + {"MISSING_PUBKEY", ERR_LIB_DH, DH_R_MISSING_PUBKEY}, + #else + {"MISSING_PUBKEY", 5, 125}, + #endif + #ifdef DH_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 5, 103}, + #endif + #ifdef DH_R_MODULUS_TOO_SMALL + {"MODULUS_TOO_SMALL", ERR_LIB_DH, DH_R_MODULUS_TOO_SMALL}, + #else + {"MODULUS_TOO_SMALL", 5, 126}, + #endif + #ifdef DH_R_NOT_SUITABLE_GENERATOR + {"NOT_SUITABLE_GENERATOR", ERR_LIB_DH, DH_R_NOT_SUITABLE_GENERATOR}, + #else + {"NOT_SUITABLE_GENERATOR", 5, 120}, + #endif + #ifdef DH_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DH, DH_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 5, 107}, + #endif + #ifdef DH_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_DH, DH_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 5, 100}, + #endif + #ifdef DH_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DH, DH_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 5, 105}, + #endif + #ifdef DH_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_DH, DH_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 5, 111}, + #endif + #ifdef DH_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 5, 113}, + #endif + #ifdef DH_R_UNABLE_TO_CHECK_GENERATOR + {"UNABLE_TO_CHECK_GENERATOR", ERR_LIB_DH, DH_R_UNABLE_TO_CHECK_GENERATOR}, + #else + {"UNABLE_TO_CHECK_GENERATOR", 5, 121}, + #endif + #ifdef DSA_R_BAD_FFC_PARAMETERS + {"BAD_FFC_PARAMETERS", ERR_LIB_DSA, DSA_R_BAD_FFC_PARAMETERS}, + #else + {"BAD_FFC_PARAMETERS", 10, 114}, + #endif + #ifdef DSA_R_BAD_Q_VALUE + {"BAD_Q_VALUE", ERR_LIB_DSA, DSA_R_BAD_Q_VALUE}, + #else + {"BAD_Q_VALUE", 10, 102}, + #endif + #ifdef DSA_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DSA, DSA_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 10, 108}, + #endif + #ifdef DSA_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DSA, DSA_R_BN_ERROR}, + #else + {"BN_ERROR", 10, 109}, + #endif + #ifdef DSA_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DSA, DSA_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 10, 104}, + #endif + #ifdef DSA_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_DSA, DSA_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 10, 106}, + #endif + #ifdef DSA_R_INVALID_PARAMETERS + {"INVALID_PARAMETERS", ERR_LIB_DSA, DSA_R_INVALID_PARAMETERS}, + #else + {"INVALID_PARAMETERS", 10, 112}, + #endif + #ifdef DSA_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_DSA, DSA_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 10, 101}, + #endif + #ifdef DSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_DSA, DSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 10, 111}, + #endif + #ifdef DSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DSA, DSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 10, 103}, + #endif + #ifdef DSA_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DSA, DSA_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 10, 107}, + #endif + #ifdef DSA_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DSA, DSA_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 10, 105}, + #endif + #ifdef DSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_DSA, DSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 10, 115}, + #endif + #ifdef DSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_DSA, DSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 10, 113}, + #endif + #ifdef DSA_R_SEED_LEN_SMALL + {"SEED_LEN_SMALL", ERR_LIB_DSA, DSA_R_SEED_LEN_SMALL}, + #else + {"SEED_LEN_SMALL", 10, 110}, + #endif + #ifdef DSO_R_CTRL_FAILED + {"CTRL_FAILED", ERR_LIB_DSO, DSO_R_CTRL_FAILED}, + #else + {"CTRL_FAILED", 37, 100}, + #endif + #ifdef DSO_R_DSO_ALREADY_LOADED + {"DSO_ALREADY_LOADED", ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED}, + #else + {"DSO_ALREADY_LOADED", 37, 110}, + #endif + #ifdef DSO_R_EMPTY_FILE_STRUCTURE + {"EMPTY_FILE_STRUCTURE", ERR_LIB_DSO, DSO_R_EMPTY_FILE_STRUCTURE}, + #else + {"EMPTY_FILE_STRUCTURE", 37, 113}, + #endif + #ifdef DSO_R_FAILURE + {"FAILURE", ERR_LIB_DSO, DSO_R_FAILURE}, + #else + {"FAILURE", 37, 114}, + #endif + #ifdef DSO_R_FILENAME_TOO_BIG + {"FILENAME_TOO_BIG", ERR_LIB_DSO, DSO_R_FILENAME_TOO_BIG}, + #else + {"FILENAME_TOO_BIG", 37, 101}, + #endif + #ifdef DSO_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_DSO, DSO_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 37, 102}, + #endif + #ifdef DSO_R_INCORRECT_FILE_SYNTAX + {"INCORRECT_FILE_SYNTAX", ERR_LIB_DSO, DSO_R_INCORRECT_FILE_SYNTAX}, + #else + {"INCORRECT_FILE_SYNTAX", 37, 115}, + #endif + #ifdef DSO_R_LOAD_FAILED + {"LOAD_FAILED", ERR_LIB_DSO, DSO_R_LOAD_FAILED}, + #else + {"LOAD_FAILED", 37, 103}, + #endif + #ifdef DSO_R_NAME_TRANSLATION_FAILED + {"NAME_TRANSLATION_FAILED", ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED}, + #else + {"NAME_TRANSLATION_FAILED", 37, 109}, + #endif + #ifdef DSO_R_NO_FILENAME + {"NO_FILENAME", ERR_LIB_DSO, DSO_R_NO_FILENAME}, + #else + {"NO_FILENAME", 37, 111}, + #endif + #ifdef DSO_R_NULL_HANDLE + {"NULL_HANDLE", ERR_LIB_DSO, DSO_R_NULL_HANDLE}, + #else + {"NULL_HANDLE", 37, 104}, + #endif + #ifdef DSO_R_SET_FILENAME_FAILED + {"SET_FILENAME_FAILED", ERR_LIB_DSO, DSO_R_SET_FILENAME_FAILED}, + #else + {"SET_FILENAME_FAILED", 37, 112}, + #endif + #ifdef DSO_R_STACK_ERROR + {"STACK_ERROR", ERR_LIB_DSO, DSO_R_STACK_ERROR}, + #else + {"STACK_ERROR", 37, 105}, + #endif + #ifdef DSO_R_SYM_FAILURE + {"SYM_FAILURE", ERR_LIB_DSO, DSO_R_SYM_FAILURE}, + #else + {"SYM_FAILURE", 37, 106}, + #endif + #ifdef DSO_R_UNLOAD_FAILED + {"UNLOAD_FAILED", ERR_LIB_DSO, DSO_R_UNLOAD_FAILED}, + #else + {"UNLOAD_FAILED", 37, 107}, + #endif + #ifdef DSO_R_UNSUPPORTED + {"UNSUPPORTED", ERR_LIB_DSO, DSO_R_UNSUPPORTED}, + #else + {"UNSUPPORTED", 37, 108}, + #endif + #ifdef EC_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_EC, EC_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 16, 115}, + #endif + #ifdef EC_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_EC, EC_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 16, 156}, + #endif + #ifdef EC_R_BIGNUM_OUT_OF_RANGE + {"BIGNUM_OUT_OF_RANGE", ERR_LIB_EC, EC_R_BIGNUM_OUT_OF_RANGE}, + #else + {"BIGNUM_OUT_OF_RANGE", 16, 144}, + #endif + #ifdef EC_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EC, EC_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 16, 100}, + #endif + #ifdef EC_R_CANNOT_INVERT + {"CANNOT_INVERT", ERR_LIB_EC, EC_R_CANNOT_INVERT}, + #else + {"CANNOT_INVERT", 16, 165}, + #endif + #ifdef EC_R_COORDINATES_OUT_OF_RANGE + {"COORDINATES_OUT_OF_RANGE", ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE}, + #else + {"COORDINATES_OUT_OF_RANGE", 16, 146}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDH + {"CURVE_DOES_NOT_SUPPORT_ECDH", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDH", 16, 160}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA + {"CURVE_DOES_NOT_SUPPORT_ECDSA", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDSA", 16, 170}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING + {"CURVE_DOES_NOT_SUPPORT_SIGNING", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING}, + #else + {"CURVE_DOES_NOT_SUPPORT_SIGNING", 16, 159}, + #endif + #ifdef EC_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EC, EC_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 16, 142}, + #endif + #ifdef EC_R_DISCRIMINANT_IS_ZERO + {"DISCRIMINANT_IS_ZERO", ERR_LIB_EC, EC_R_DISCRIMINANT_IS_ZERO}, + #else + {"DISCRIMINANT_IS_ZERO", 16, 118}, + #endif + #ifdef EC_R_EC_GROUP_NEW_BY_NAME_FAILURE + {"EC_GROUP_NEW_BY_NAME_FAILURE", ERR_LIB_EC, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE}, + #else + {"EC_GROUP_NEW_BY_NAME_FAILURE", 16, 119}, + #endif + #ifdef EC_R_FAILED_MAKING_PUBLIC_KEY + {"FAILED_MAKING_PUBLIC_KEY", ERR_LIB_EC, EC_R_FAILED_MAKING_PUBLIC_KEY}, + #else + {"FAILED_MAKING_PUBLIC_KEY", 16, 166}, + #endif + #ifdef EC_R_FIELD_TOO_LARGE + {"FIELD_TOO_LARGE", ERR_LIB_EC, EC_R_FIELD_TOO_LARGE}, + #else + {"FIELD_TOO_LARGE", 16, 143}, + #endif + #ifdef EC_R_GF2M_NOT_SUPPORTED + {"GF2M_NOT_SUPPORTED", ERR_LIB_EC, EC_R_GF2M_NOT_SUPPORTED}, + #else + {"GF2M_NOT_SUPPORTED", 16, 147}, + #endif + #ifdef EC_R_GROUP2PKPARAMETERS_FAILURE + {"GROUP2PKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_GROUP2PKPARAMETERS_FAILURE}, + #else + {"GROUP2PKPARAMETERS_FAILURE", 16, 120}, + #endif + #ifdef EC_R_I2D_ECPKPARAMETERS_FAILURE + {"I2D_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_I2D_ECPKPARAMETERS_FAILURE}, + #else + {"I2D_ECPKPARAMETERS_FAILURE", 16, 121}, + #endif + #ifdef EC_R_INCOMPATIBLE_OBJECTS + {"INCOMPATIBLE_OBJECTS", ERR_LIB_EC, EC_R_INCOMPATIBLE_OBJECTS}, + #else + {"INCOMPATIBLE_OBJECTS", 16, 101}, + #endif + #ifdef EC_R_INVALID_A + {"INVALID_A", ERR_LIB_EC, EC_R_INVALID_A}, + #else + {"INVALID_A", 16, 168}, + #endif + #ifdef EC_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_EC, EC_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 16, 112}, + #endif + #ifdef EC_R_INVALID_B + {"INVALID_B", ERR_LIB_EC, EC_R_INVALID_B}, + #else + {"INVALID_B", 16, 169}, + #endif + #ifdef EC_R_INVALID_COFACTOR + {"INVALID_COFACTOR", ERR_LIB_EC, EC_R_INVALID_COFACTOR}, + #else + {"INVALID_COFACTOR", 16, 171}, + #endif + #ifdef EC_R_INVALID_COMPRESSED_POINT + {"INVALID_COMPRESSED_POINT", ERR_LIB_EC, EC_R_INVALID_COMPRESSED_POINT}, + #else + {"INVALID_COMPRESSED_POINT", 16, 110}, + #endif + #ifdef EC_R_INVALID_COMPRESSION_BIT + {"INVALID_COMPRESSION_BIT", ERR_LIB_EC, EC_R_INVALID_COMPRESSION_BIT}, + #else + {"INVALID_COMPRESSION_BIT", 16, 109}, + #endif + #ifdef EC_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_EC, EC_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 16, 141}, + #endif + #ifdef EC_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EC, EC_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 16, 151}, + #endif + #ifdef EC_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_EC, EC_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 16, 138}, + #endif + #ifdef EC_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_EC, EC_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 16, 102}, + #endif + #ifdef EC_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_EC, EC_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 16, 103}, + #endif + #ifdef EC_R_INVALID_FORM + {"INVALID_FORM", ERR_LIB_EC, EC_R_INVALID_FORM}, + #else + {"INVALID_FORM", 16, 104}, + #endif + #ifdef EC_R_INVALID_GENERATOR + {"INVALID_GENERATOR", ERR_LIB_EC, EC_R_INVALID_GENERATOR}, + #else + {"INVALID_GENERATOR", 16, 173}, + #endif + #ifdef EC_R_INVALID_GROUP_ORDER + {"INVALID_GROUP_ORDER", ERR_LIB_EC, EC_R_INVALID_GROUP_ORDER}, + #else + {"INVALID_GROUP_ORDER", 16, 122}, + #endif + #ifdef EC_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EC, EC_R_INVALID_KEY}, + #else + {"INVALID_KEY", 16, 116}, + #endif + #ifdef EC_R_INVALID_NAMED_GROUP_CONVERSION + {"INVALID_NAMED_GROUP_CONVERSION", ERR_LIB_EC, EC_R_INVALID_NAMED_GROUP_CONVERSION}, + #else + {"INVALID_NAMED_GROUP_CONVERSION", 16, 174}, + #endif + #ifdef EC_R_INVALID_OUTPUT_LENGTH + {"INVALID_OUTPUT_LENGTH", ERR_LIB_EC, EC_R_INVALID_OUTPUT_LENGTH}, + #else + {"INVALID_OUTPUT_LENGTH", 16, 161}, + #endif + #ifdef EC_R_INVALID_P + {"INVALID_P", ERR_LIB_EC, EC_R_INVALID_P}, + #else + {"INVALID_P", 16, 172}, + #endif + #ifdef EC_R_INVALID_PEER_KEY + {"INVALID_PEER_KEY", ERR_LIB_EC, EC_R_INVALID_PEER_KEY}, + #else + {"INVALID_PEER_KEY", 16, 133}, + #endif + #ifdef EC_R_INVALID_PENTANOMIAL_BASIS + {"INVALID_PENTANOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_PENTANOMIAL_BASIS}, + #else + {"INVALID_PENTANOMIAL_BASIS", 16, 132}, + #endif + #ifdef EC_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_EC, EC_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 16, 123}, + #endif + #ifdef EC_R_INVALID_SEED + {"INVALID_SEED", ERR_LIB_EC, EC_R_INVALID_SEED}, + #else + {"INVALID_SEED", 16, 175}, + #endif + #ifdef EC_R_INVALID_TRINOMIAL_BASIS + {"INVALID_TRINOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_TRINOMIAL_BASIS}, + #else + {"INVALID_TRINOMIAL_BASIS", 16, 137}, + #endif + #ifdef EC_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_EC, EC_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 16, 148}, + #endif + #ifdef EC_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_EC, EC_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 16, 140}, + #endif + #ifdef EC_R_LADDER_POST_FAILURE + {"LADDER_POST_FAILURE", ERR_LIB_EC, EC_R_LADDER_POST_FAILURE}, + #else + {"LADDER_POST_FAILURE", 16, 136}, + #endif + #ifdef EC_R_LADDER_PRE_FAILURE + {"LADDER_PRE_FAILURE", ERR_LIB_EC, EC_R_LADDER_PRE_FAILURE}, + #else + {"LADDER_PRE_FAILURE", 16, 153}, + #endif + #ifdef EC_R_LADDER_STEP_FAILURE + {"LADDER_STEP_FAILURE", ERR_LIB_EC, EC_R_LADDER_STEP_FAILURE}, + #else + {"LADDER_STEP_FAILURE", 16, 162}, + #endif + #ifdef EC_R_MISSING_OID + {"MISSING_OID", ERR_LIB_EC, EC_R_MISSING_OID}, + #else + {"MISSING_OID", 16, 167}, + #endif + #ifdef EC_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EC, EC_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 16, 124}, + #endif + #ifdef EC_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_EC, EC_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 16, 125}, + #endif + #ifdef EC_R_NEED_NEW_SETUP_VALUES + {"NEED_NEW_SETUP_VALUES", ERR_LIB_EC, EC_R_NEED_NEW_SETUP_VALUES}, + #else + {"NEED_NEW_SETUP_VALUES", 16, 157}, + #endif + #ifdef EC_R_NOT_A_NIST_PRIME + {"NOT_A_NIST_PRIME", ERR_LIB_EC, EC_R_NOT_A_NIST_PRIME}, + #else + {"NOT_A_NIST_PRIME", 16, 135}, + #endif + #ifdef EC_R_NOT_IMPLEMENTED + {"NOT_IMPLEMENTED", ERR_LIB_EC, EC_R_NOT_IMPLEMENTED}, + #else + {"NOT_IMPLEMENTED", 16, 126}, + #endif + #ifdef EC_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_EC, EC_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 16, 111}, + #endif + #ifdef EC_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_EC, EC_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 16, 139}, + #endif + #ifdef EC_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_EC, EC_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 16, 154}, + #endif + #ifdef EC_R_OPERATION_NOT_SUPPORTED + {"OPERATION_NOT_SUPPORTED", ERR_LIB_EC, EC_R_OPERATION_NOT_SUPPORTED}, + #else + {"OPERATION_NOT_SUPPORTED", 16, 152}, + #endif + #ifdef EC_R_PASSED_NULL_PARAMETER + {"PASSED_NULL_PARAMETER", ERR_LIB_EC, EC_R_PASSED_NULL_PARAMETER}, + #else + {"PASSED_NULL_PARAMETER", 16, 134}, + #endif + #ifdef EC_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_EC, EC_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 16, 149}, + #endif + #ifdef EC_R_POINT_ARITHMETIC_FAILURE + {"POINT_ARITHMETIC_FAILURE", ERR_LIB_EC, EC_R_POINT_ARITHMETIC_FAILURE}, + #else + {"POINT_ARITHMETIC_FAILURE", 16, 155}, + #endif + #ifdef EC_R_POINT_AT_INFINITY + {"POINT_AT_INFINITY", ERR_LIB_EC, EC_R_POINT_AT_INFINITY}, + #else + {"POINT_AT_INFINITY", 16, 106}, + #endif + #ifdef EC_R_POINT_COORDINATES_BLIND_FAILURE + {"POINT_COORDINATES_BLIND_FAILURE", ERR_LIB_EC, EC_R_POINT_COORDINATES_BLIND_FAILURE}, + #else + {"POINT_COORDINATES_BLIND_FAILURE", 16, 163}, + #endif + #ifdef EC_R_POINT_IS_NOT_ON_CURVE + {"POINT_IS_NOT_ON_CURVE", ERR_LIB_EC, EC_R_POINT_IS_NOT_ON_CURVE}, + #else + {"POINT_IS_NOT_ON_CURVE", 16, 107}, + #endif + #ifdef EC_R_RANDOM_NUMBER_GENERATION_FAILED + {"RANDOM_NUMBER_GENERATION_FAILED", ERR_LIB_EC, EC_R_RANDOM_NUMBER_GENERATION_FAILED}, + #else + {"RANDOM_NUMBER_GENERATION_FAILED", 16, 158}, + #endif + #ifdef EC_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_EC, EC_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 16, 150}, + #endif + #ifdef EC_R_SLOT_FULL + {"SLOT_FULL", ERR_LIB_EC, EC_R_SLOT_FULL}, + #else + {"SLOT_FULL", 16, 108}, + #endif + #ifdef EC_R_UNDEFINED_GENERATOR + {"UNDEFINED_GENERATOR", ERR_LIB_EC, EC_R_UNDEFINED_GENERATOR}, + #else + {"UNDEFINED_GENERATOR", 16, 113}, + #endif + #ifdef EC_R_UNDEFINED_ORDER + {"UNDEFINED_ORDER", ERR_LIB_EC, EC_R_UNDEFINED_ORDER}, + #else + {"UNDEFINED_ORDER", 16, 128}, + #endif + #ifdef EC_R_UNKNOWN_COFACTOR + {"UNKNOWN_COFACTOR", ERR_LIB_EC, EC_R_UNKNOWN_COFACTOR}, + #else + {"UNKNOWN_COFACTOR", 16, 164}, + #endif + #ifdef EC_R_UNKNOWN_GROUP + {"UNKNOWN_GROUP", ERR_LIB_EC, EC_R_UNKNOWN_GROUP}, + #else + {"UNKNOWN_GROUP", 16, 129}, + #endif + #ifdef EC_R_UNKNOWN_ORDER + {"UNKNOWN_ORDER", ERR_LIB_EC, EC_R_UNKNOWN_ORDER}, + #else + {"UNKNOWN_ORDER", 16, 114}, + #endif + #ifdef EC_R_UNSUPPORTED_FIELD + {"UNSUPPORTED_FIELD", ERR_LIB_EC, EC_R_UNSUPPORTED_FIELD}, + #else + {"UNSUPPORTED_FIELD", 16, 131}, + #endif + #ifdef EC_R_WRONG_CURVE_PARAMETERS + {"WRONG_CURVE_PARAMETERS", ERR_LIB_EC, EC_R_WRONG_CURVE_PARAMETERS}, + #else + {"WRONG_CURVE_PARAMETERS", 16, 145}, + #endif + #ifdef EC_R_WRONG_ORDER + {"WRONG_ORDER", ERR_LIB_EC, EC_R_WRONG_ORDER}, + #else + {"WRONG_ORDER", 16, 130}, + #endif + #ifdef ENGINE_R_ALREADY_LOADED + {"ALREADY_LOADED", ERR_LIB_ENGINE, ENGINE_R_ALREADY_LOADED}, + #else + {"ALREADY_LOADED", 38, 100}, + #endif + #ifdef ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER + {"ARGUMENT_IS_NOT_A_NUMBER", ERR_LIB_ENGINE, ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER}, + #else + {"ARGUMENT_IS_NOT_A_NUMBER", 38, 133}, + #endif + #ifdef ENGINE_R_CMD_NOT_EXECUTABLE + {"CMD_NOT_EXECUTABLE", ERR_LIB_ENGINE, ENGINE_R_CMD_NOT_EXECUTABLE}, + #else + {"CMD_NOT_EXECUTABLE", 38, 134}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_INPUT + {"COMMAND_TAKES_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_INPUT}, + #else + {"COMMAND_TAKES_INPUT", 38, 135}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_NO_INPUT + {"COMMAND_TAKES_NO_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_NO_INPUT}, + #else + {"COMMAND_TAKES_NO_INPUT", 38, 136}, + #endif + #ifdef ENGINE_R_CONFLICTING_ENGINE_ID + {"CONFLICTING_ENGINE_ID", ERR_LIB_ENGINE, ENGINE_R_CONFLICTING_ENGINE_ID}, + #else + {"CONFLICTING_ENGINE_ID", 38, 103}, + #endif + #ifdef ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED + {"CTRL_COMMAND_NOT_IMPLEMENTED", ERR_LIB_ENGINE, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED}, + #else + {"CTRL_COMMAND_NOT_IMPLEMENTED", 38, 119}, + #endif + #ifdef ENGINE_R_DSO_FAILURE + {"DSO_FAILURE", ERR_LIB_ENGINE, ENGINE_R_DSO_FAILURE}, + #else + {"DSO_FAILURE", 38, 104}, + #endif + #ifdef ENGINE_R_DSO_NOT_FOUND + {"DSO_NOT_FOUND", ERR_LIB_ENGINE, ENGINE_R_DSO_NOT_FOUND}, + #else + {"DSO_NOT_FOUND", 38, 132}, + #endif + #ifdef ENGINE_R_ENGINES_SECTION_ERROR + {"ENGINES_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINES_SECTION_ERROR}, + #else + {"ENGINES_SECTION_ERROR", 38, 148}, + #endif + #ifdef ENGINE_R_ENGINE_CONFIGURATION_ERROR + {"ENGINE_CONFIGURATION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_CONFIGURATION_ERROR}, + #else + {"ENGINE_CONFIGURATION_ERROR", 38, 102}, + #endif + #ifdef ENGINE_R_ENGINE_IS_NOT_IN_LIST + {"ENGINE_IS_NOT_IN_LIST", ERR_LIB_ENGINE, ENGINE_R_ENGINE_IS_NOT_IN_LIST}, + #else + {"ENGINE_IS_NOT_IN_LIST", 38, 105}, + #endif + #ifdef ENGINE_R_ENGINE_SECTION_ERROR + {"ENGINE_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_SECTION_ERROR}, + #else + {"ENGINE_SECTION_ERROR", 38, 149}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PRIVATE_KEY + {"FAILED_LOADING_PRIVATE_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PRIVATE_KEY}, + #else + {"FAILED_LOADING_PRIVATE_KEY", 38, 128}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PUBLIC_KEY + {"FAILED_LOADING_PUBLIC_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PUBLIC_KEY}, + #else + {"FAILED_LOADING_PUBLIC_KEY", 38, 129}, + #endif + #ifdef ENGINE_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_ENGINE, ENGINE_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 38, 106}, + #endif + #ifdef ENGINE_R_ID_OR_NAME_MISSING + {"ID_OR_NAME_MISSING", ERR_LIB_ENGINE, ENGINE_R_ID_OR_NAME_MISSING}, + #else + {"ID_OR_NAME_MISSING", 38, 108}, + #endif + #ifdef ENGINE_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ENGINE, ENGINE_R_INIT_FAILED}, + #else + {"INIT_FAILED", 38, 109}, + #endif + #ifdef ENGINE_R_INTERNAL_LIST_ERROR + {"INTERNAL_LIST_ERROR", ERR_LIB_ENGINE, ENGINE_R_INTERNAL_LIST_ERROR}, + #else + {"INTERNAL_LIST_ERROR", 38, 110}, + #endif + #ifdef ENGINE_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_ENGINE, ENGINE_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 38, 143}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NAME + {"INVALID_CMD_NAME", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NAME}, + #else + {"INVALID_CMD_NAME", 38, 137}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NUMBER + {"INVALID_CMD_NUMBER", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NUMBER}, + #else + {"INVALID_CMD_NUMBER", 38, 138}, + #endif + #ifdef ENGINE_R_INVALID_INIT_VALUE + {"INVALID_INIT_VALUE", ERR_LIB_ENGINE, ENGINE_R_INVALID_INIT_VALUE}, + #else + {"INVALID_INIT_VALUE", 38, 151}, + #endif + #ifdef ENGINE_R_INVALID_STRING + {"INVALID_STRING", ERR_LIB_ENGINE, ENGINE_R_INVALID_STRING}, + #else + {"INVALID_STRING", 38, 150}, + #endif + #ifdef ENGINE_R_NOT_INITIALISED + {"NOT_INITIALISED", ERR_LIB_ENGINE, ENGINE_R_NOT_INITIALISED}, + #else + {"NOT_INITIALISED", 38, 117}, + #endif + #ifdef ENGINE_R_NOT_LOADED + {"NOT_LOADED", ERR_LIB_ENGINE, ENGINE_R_NOT_LOADED}, + #else + {"NOT_LOADED", 38, 112}, + #endif + #ifdef ENGINE_R_NO_CONTROL_FUNCTION + {"NO_CONTROL_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_CONTROL_FUNCTION}, + #else + {"NO_CONTROL_FUNCTION", 38, 120}, + #endif + #ifdef ENGINE_R_NO_INDEX + {"NO_INDEX", ERR_LIB_ENGINE, ENGINE_R_NO_INDEX}, + #else + {"NO_INDEX", 38, 144}, + #endif + #ifdef ENGINE_R_NO_LOAD_FUNCTION + {"NO_LOAD_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_LOAD_FUNCTION}, + #else + {"NO_LOAD_FUNCTION", 38, 125}, + #endif + #ifdef ENGINE_R_NO_REFERENCE + {"NO_REFERENCE", ERR_LIB_ENGINE, ENGINE_R_NO_REFERENCE}, + #else + {"NO_REFERENCE", 38, 130}, + #endif + #ifdef ENGINE_R_NO_SUCH_ENGINE + {"NO_SUCH_ENGINE", ERR_LIB_ENGINE, ENGINE_R_NO_SUCH_ENGINE}, + #else + {"NO_SUCH_ENGINE", 38, 116}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_CIPHER + {"UNIMPLEMENTED_CIPHER", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_CIPHER}, + #else + {"UNIMPLEMENTED_CIPHER", 38, 146}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_DIGEST + {"UNIMPLEMENTED_DIGEST", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_DIGEST}, + #else + {"UNIMPLEMENTED_DIGEST", 38, 147}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD}, + #else + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", 38, 101}, + #endif + #ifdef ENGINE_R_VERSION_INCOMPATIBILITY + {"VERSION_INCOMPATIBILITY", ERR_LIB_ENGINE, ENGINE_R_VERSION_INCOMPATIBILITY}, + #else + {"VERSION_INCOMPATIBILITY", 38, 145}, + #endif + #ifdef ESS_R_EMPTY_ESS_CERT_ID_LIST + {"EMPTY_ESS_CERT_ID_LIST", ERR_LIB_ESS, ESS_R_EMPTY_ESS_CERT_ID_LIST}, + #else + {"EMPTY_ESS_CERT_ID_LIST", 54, 107}, + #endif + #ifdef ESS_R_ESS_CERT_DIGEST_ERROR + {"ESS_CERT_DIGEST_ERROR", ERR_LIB_ESS, ESS_R_ESS_CERT_DIGEST_ERROR}, + #else + {"ESS_CERT_DIGEST_ERROR", 54, 103}, + #endif + #ifdef ESS_R_ESS_CERT_ID_NOT_FOUND + {"ESS_CERT_ID_NOT_FOUND", ERR_LIB_ESS, ESS_R_ESS_CERT_ID_NOT_FOUND}, + #else + {"ESS_CERT_ID_NOT_FOUND", 54, 104}, + #endif + #ifdef ESS_R_ESS_CERT_ID_WRONG_ORDER + {"ESS_CERT_ID_WRONG_ORDER", ERR_LIB_ESS, ESS_R_ESS_CERT_ID_WRONG_ORDER}, + #else + {"ESS_CERT_ID_WRONG_ORDER", 54, 105}, + #endif + #ifdef ESS_R_ESS_DIGEST_ALG_UNKNOWN + {"ESS_DIGEST_ALG_UNKNOWN", ERR_LIB_ESS, ESS_R_ESS_DIGEST_ALG_UNKNOWN}, + #else + {"ESS_DIGEST_ALG_UNKNOWN", 54, 106}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 54, 102}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERT_ADD_ERROR + {"ESS_SIGNING_CERT_ADD_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERT_ADD_ERROR}, + #else + {"ESS_SIGNING_CERT_ADD_ERROR", 54, 100}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR + {"ESS_SIGNING_CERT_V2_ADD_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR}, + #else + {"ESS_SIGNING_CERT_V2_ADD_ERROR", 54, 101}, + #endif + #ifdef ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE + {"MISSING_SIGNING_CERTIFICATE_ATTRIBUTE", ERR_LIB_ESS, ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE}, + #else + {"MISSING_SIGNING_CERTIFICATE_ATTRIBUTE", 54, 108}, + #endif + #ifdef EVP_R_AES_KEY_SETUP_FAILED + {"AES_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED}, + #else + {"AES_KEY_SETUP_FAILED", 6, 143}, + #endif + #ifdef EVP_R_ARIA_KEY_SETUP_FAILED + {"ARIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_ARIA_KEY_SETUP_FAILED}, + #else + {"ARIA_KEY_SETUP_FAILED", 6, 176}, + #endif + #ifdef EVP_R_BAD_ALGORITHM_NAME + {"BAD_ALGORITHM_NAME", ERR_LIB_EVP, EVP_R_BAD_ALGORITHM_NAME}, + #else + {"BAD_ALGORITHM_NAME", 6, 200}, + #endif + #ifdef EVP_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_EVP, EVP_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 6, 100}, + #endif + #ifdef EVP_R_BAD_KEY_LENGTH + {"BAD_KEY_LENGTH", ERR_LIB_EVP, EVP_R_BAD_KEY_LENGTH}, + #else + {"BAD_KEY_LENGTH", 6, 195}, + #endif + #ifdef EVP_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EVP, EVP_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 6, 155}, + #endif + #ifdef EVP_R_CACHE_CONSTANTS_FAILED + {"CACHE_CONSTANTS_FAILED", ERR_LIB_EVP, EVP_R_CACHE_CONSTANTS_FAILED}, + #else + {"CACHE_CONSTANTS_FAILED", 6, 225}, + #endif + #ifdef EVP_R_CAMELLIA_KEY_SETUP_FAILED + {"CAMELLIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_CAMELLIA_KEY_SETUP_FAILED}, + #else + {"CAMELLIA_KEY_SETUP_FAILED", 6, 157}, + #endif + #ifdef EVP_R_CANNOT_GET_PARAMETERS + {"CANNOT_GET_PARAMETERS", ERR_LIB_EVP, EVP_R_CANNOT_GET_PARAMETERS}, + #else + {"CANNOT_GET_PARAMETERS", 6, 197}, + #endif + #ifdef EVP_R_CANNOT_SET_PARAMETERS + {"CANNOT_SET_PARAMETERS", ERR_LIB_EVP, EVP_R_CANNOT_SET_PARAMETERS}, + #else + {"CANNOT_SET_PARAMETERS", 6, 198}, + #endif + #ifdef EVP_R_CIPHER_NOT_GCM_MODE + {"CIPHER_NOT_GCM_MODE", ERR_LIB_EVP, EVP_R_CIPHER_NOT_GCM_MODE}, + #else + {"CIPHER_NOT_GCM_MODE", 6, 184}, + #endif + #ifdef EVP_R_CIPHER_PARAMETER_ERROR + {"CIPHER_PARAMETER_ERROR", ERR_LIB_EVP, EVP_R_CIPHER_PARAMETER_ERROR}, + #else + {"CIPHER_PARAMETER_ERROR", 6, 122}, + #endif + #ifdef EVP_R_COMMAND_NOT_SUPPORTED + {"COMMAND_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_COMMAND_NOT_SUPPORTED}, + #else + {"COMMAND_NOT_SUPPORTED", 6, 147}, + #endif + #ifdef EVP_R_CONFLICTING_ALGORITHM_NAME + {"CONFLICTING_ALGORITHM_NAME", ERR_LIB_EVP, EVP_R_CONFLICTING_ALGORITHM_NAME}, + #else + {"CONFLICTING_ALGORITHM_NAME", 6, 201}, + #endif + #ifdef EVP_R_COPY_ERROR + {"COPY_ERROR", ERR_LIB_EVP, EVP_R_COPY_ERROR}, + #else + {"COPY_ERROR", 6, 173}, + #endif + #ifdef EVP_R_CTRL_NOT_IMPLEMENTED + {"CTRL_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_NOT_IMPLEMENTED}, + #else + {"CTRL_NOT_IMPLEMENTED", 6, 132}, + #endif + #ifdef EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED + {"CTRL_OPERATION_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED}, + #else + {"CTRL_OPERATION_NOT_IMPLEMENTED", 6, 133}, + #endif + #ifdef EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH}, + #else + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", 6, 138}, + #endif + #ifdef EVP_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EVP, EVP_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 6, 114}, + #endif + #ifdef EVP_R_DEFAULT_QUERY_PARSE_ERROR + {"DEFAULT_QUERY_PARSE_ERROR", ERR_LIB_EVP, EVP_R_DEFAULT_QUERY_PARSE_ERROR}, + #else + {"DEFAULT_QUERY_PARSE_ERROR", 6, 210}, + #endif + #ifdef EVP_R_DIFFERENT_KEY_TYPES + {"DIFFERENT_KEY_TYPES", ERR_LIB_EVP, EVP_R_DIFFERENT_KEY_TYPES}, + #else + {"DIFFERENT_KEY_TYPES", 6, 101}, + #endif + #ifdef EVP_R_DIFFERENT_PARAMETERS + {"DIFFERENT_PARAMETERS", ERR_LIB_EVP, EVP_R_DIFFERENT_PARAMETERS}, + #else + {"DIFFERENT_PARAMETERS", 6, 153}, + #endif + #ifdef EVP_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_EVP, EVP_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 6, 165}, + #endif + #ifdef EVP_R_ERROR_SETTING_FIPS_MODE + {"ERROR_SETTING_FIPS_MODE", ERR_LIB_EVP, EVP_R_ERROR_SETTING_FIPS_MODE}, + #else + {"ERROR_SETTING_FIPS_MODE", 6, 166}, + #endif + #ifdef EVP_R_EXPECTING_AN_HMAC_KEY + {"EXPECTING_AN_HMAC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY}, + #else + {"EXPECTING_AN_HMAC_KEY", 6, 174}, + #endif + #ifdef EVP_R_EXPECTING_AN_RSA_KEY + {"EXPECTING_AN_RSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY}, + #else + {"EXPECTING_AN_RSA_KEY", 6, 127}, + #endif + #ifdef EVP_R_EXPECTING_A_DH_KEY + {"EXPECTING_A_DH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DH_KEY}, + #else + {"EXPECTING_A_DH_KEY", 6, 128}, + #endif + #ifdef EVP_R_EXPECTING_A_DSA_KEY + {"EXPECTING_A_DSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DSA_KEY}, + #else + {"EXPECTING_A_DSA_KEY", 6, 129}, + #endif + #ifdef EVP_R_EXPECTING_A_ECX_KEY + {"EXPECTING_A_ECX_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_ECX_KEY}, + #else + {"EXPECTING_A_ECX_KEY", 6, 219}, + #endif + #ifdef EVP_R_EXPECTING_A_EC_KEY + {"EXPECTING_A_EC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_EC_KEY}, + #else + {"EXPECTING_A_EC_KEY", 6, 142}, + #endif + #ifdef EVP_R_EXPECTING_A_POLY1305_KEY + {"EXPECTING_A_POLY1305_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY}, + #else + {"EXPECTING_A_POLY1305_KEY", 6, 164}, + #endif + #ifdef EVP_R_EXPECTING_A_SIPHASH_KEY + {"EXPECTING_A_SIPHASH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY}, + #else + {"EXPECTING_A_SIPHASH_KEY", 6, 175}, + #endif + #ifdef EVP_R_FINAL_ERROR + {"FINAL_ERROR", ERR_LIB_EVP, EVP_R_FINAL_ERROR}, + #else + {"FINAL_ERROR", 6, 188}, + #endif + #ifdef EVP_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 6, 167}, + #endif + #ifdef EVP_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_EVP, EVP_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 6, 214}, + #endif + #ifdef EVP_R_GET_RAW_KEY_FAILED + {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, + #else + {"GET_RAW_KEY_FAILED", 6, 182}, + #endif + #ifdef EVP_R_ILLEGAL_SCRYPT_PARAMETERS + {"ILLEGAL_SCRYPT_PARAMETERS", ERR_LIB_EVP, EVP_R_ILLEGAL_SCRYPT_PARAMETERS}, + #else + {"ILLEGAL_SCRYPT_PARAMETERS", 6, 171}, + #endif + #ifdef EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS + {"INACCESSIBLE_DOMAIN_PARAMETERS", ERR_LIB_EVP, EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS}, + #else + {"INACCESSIBLE_DOMAIN_PARAMETERS", 6, 204}, + #endif + #ifdef EVP_R_INACCESSIBLE_KEY + {"INACCESSIBLE_KEY", ERR_LIB_EVP, EVP_R_INACCESSIBLE_KEY}, + #else + {"INACCESSIBLE_KEY", 6, 203}, + #endif + #ifdef EVP_R_INITIALIZATION_ERROR + {"INITIALIZATION_ERROR", ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR}, + #else + {"INITIALIZATION_ERROR", 6, 134}, + #endif + #ifdef EVP_R_INPUT_NOT_INITIALIZED + {"INPUT_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_INPUT_NOT_INITIALIZED}, + #else + {"INPUT_NOT_INITIALIZED", 6, 111}, + #endif + #ifdef EVP_R_INVALID_CUSTOM_LENGTH + {"INVALID_CUSTOM_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_CUSTOM_LENGTH}, + #else + {"INVALID_CUSTOM_LENGTH", 6, 185}, + #endif + #ifdef EVP_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EVP, EVP_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 6, 152}, + #endif + #ifdef EVP_R_INVALID_FIPS_MODE + {"INVALID_FIPS_MODE", ERR_LIB_EVP, EVP_R_INVALID_FIPS_MODE}, + #else + {"INVALID_FIPS_MODE", 6, 168}, + #endif + #ifdef EVP_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 6, 194}, + #endif + #ifdef EVP_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EVP, EVP_R_INVALID_KEY}, + #else + {"INVALID_KEY", 6, 163}, + #endif + #ifdef EVP_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 6, 130}, + #endif + #ifdef EVP_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 6, 221}, + #endif + #ifdef EVP_R_INVALID_NULL_ALGORITHM + {"INVALID_NULL_ALGORITHM", ERR_LIB_EVP, EVP_R_INVALID_NULL_ALGORITHM}, + #else + {"INVALID_NULL_ALGORITHM", 6, 218}, + #endif + #ifdef EVP_R_INVALID_OPERATION + {"INVALID_OPERATION", ERR_LIB_EVP, EVP_R_INVALID_OPERATION}, + #else + {"INVALID_OPERATION", 6, 148}, + #endif + #ifdef EVP_R_INVALID_PROVIDER_FUNCTIONS + {"INVALID_PROVIDER_FUNCTIONS", ERR_LIB_EVP, EVP_R_INVALID_PROVIDER_FUNCTIONS}, + #else + {"INVALID_PROVIDER_FUNCTIONS", 6, 193}, + #endif + #ifdef EVP_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 6, 186}, + #endif + #ifdef EVP_R_INVALID_SECRET_LENGTH + {"INVALID_SECRET_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SECRET_LENGTH}, + #else + {"INVALID_SECRET_LENGTH", 6, 223}, + #endif + #ifdef EVP_R_INVALID_SEED_LENGTH + {"INVALID_SEED_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SEED_LENGTH}, + #else + {"INVALID_SEED_LENGTH", 6, 220}, + #endif + #ifdef EVP_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_EVP, EVP_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 6, 222}, + #endif + #ifdef EVP_R_KEYMGMT_EXPORT_FAILURE + {"KEYMGMT_EXPORT_FAILURE", ERR_LIB_EVP, EVP_R_KEYMGMT_EXPORT_FAILURE}, + #else + {"KEYMGMT_EXPORT_FAILURE", 6, 205}, + #endif + #ifdef EVP_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 6, 180}, + #endif + #ifdef EVP_R_LOCKING_NOT_SUPPORTED + {"LOCKING_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_LOCKING_NOT_SUPPORTED}, + #else + {"LOCKING_NOT_SUPPORTED", 6, 213}, + #endif + #ifdef EVP_R_MEMORY_LIMIT_EXCEEDED + {"MEMORY_LIMIT_EXCEEDED", ERR_LIB_EVP, EVP_R_MEMORY_LIMIT_EXCEEDED}, + #else + {"MEMORY_LIMIT_EXCEEDED", 6, 172}, + #endif + #ifdef EVP_R_MESSAGE_DIGEST_IS_NULL + {"MESSAGE_DIGEST_IS_NULL", ERR_LIB_EVP, EVP_R_MESSAGE_DIGEST_IS_NULL}, + #else + {"MESSAGE_DIGEST_IS_NULL", 6, 159}, + #endif + #ifdef EVP_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 6, 144}, + #endif + #ifdef EVP_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EVP, EVP_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 6, 103}, + #endif + #ifdef EVP_R_NOT_ABLE_TO_COPY_CTX + {"NOT_ABLE_TO_COPY_CTX", ERR_LIB_EVP, EVP_R_NOT_ABLE_TO_COPY_CTX}, + #else + {"NOT_ABLE_TO_COPY_CTX", 6, 190}, + #endif + #ifdef EVP_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_EVP, EVP_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 6, 178}, + #endif + #ifdef EVP_R_NO_CIPHER_SET + {"NO_CIPHER_SET", ERR_LIB_EVP, EVP_R_NO_CIPHER_SET}, + #else + {"NO_CIPHER_SET", 6, 131}, + #endif + #ifdef EVP_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_EVP, EVP_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 6, 158}, + #endif + #ifdef EVP_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_EVP, EVP_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 6, 139}, + #endif + #ifdef EVP_R_NO_IMPORT_FUNCTION + {"NO_IMPORT_FUNCTION", ERR_LIB_EVP, EVP_R_NO_IMPORT_FUNCTION}, + #else + {"NO_IMPORT_FUNCTION", 6, 206}, + #endif + #ifdef EVP_R_NO_KEYMGMT_AVAILABLE + {"NO_KEYMGMT_AVAILABLE", ERR_LIB_EVP, EVP_R_NO_KEYMGMT_AVAILABLE}, + #else + {"NO_KEYMGMT_AVAILABLE", 6, 199}, + #endif + #ifdef EVP_R_NO_KEYMGMT_PRESENT + {"NO_KEYMGMT_PRESENT", ERR_LIB_EVP, EVP_R_NO_KEYMGMT_PRESENT}, + #else + {"NO_KEYMGMT_PRESENT", 6, 196}, + #endif + #ifdef EVP_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_EVP, EVP_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 6, 154}, + #endif + #ifdef EVP_R_NO_OPERATION_SET + {"NO_OPERATION_SET", ERR_LIB_EVP, EVP_R_NO_OPERATION_SET}, + #else + {"NO_OPERATION_SET", 6, 149}, + #endif + #ifdef EVP_R_NULL_MAC_PKEY_CTX + {"NULL_MAC_PKEY_CTX", ERR_LIB_EVP, EVP_R_NULL_MAC_PKEY_CTX}, + #else + {"NULL_MAC_PKEY_CTX", 6, 208}, + #endif + #ifdef EVP_R_ONLY_ONESHOT_SUPPORTED + {"ONLY_ONESHOT_SUPPORTED", ERR_LIB_EVP, EVP_R_ONLY_ONESHOT_SUPPORTED}, + #else + {"ONLY_ONESHOT_SUPPORTED", 6, 177}, + #endif + #ifdef EVP_R_OPERATION_NOT_INITIALIZED + {"OPERATION_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_OPERATION_NOT_INITIALIZED}, + #else + {"OPERATION_NOT_INITIALIZED", 6, 151}, + #endif + #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, + #endif + #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW + {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, + #else + {"OUTPUT_WOULD_OVERFLOW", 6, 202}, + #endif + #ifdef EVP_R_PARAMETER_TOO_LARGE + {"PARAMETER_TOO_LARGE", ERR_LIB_EVP, EVP_R_PARAMETER_TOO_LARGE}, + #else + {"PARAMETER_TOO_LARGE", 6, 187}, + #endif + #ifdef EVP_R_PARTIALLY_OVERLAPPING + {"PARTIALLY_OVERLAPPING", ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING}, + #else + {"PARTIALLY_OVERLAPPING", 6, 162}, + #endif + #ifdef EVP_R_PBKDF2_ERROR + {"PBKDF2_ERROR", ERR_LIB_EVP, EVP_R_PBKDF2_ERROR}, + #else + {"PBKDF2_ERROR", 6, 181}, + #endif + #ifdef EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", ERR_LIB_EVP, EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED}, + #else + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", 6, 179}, + #endif + #ifdef EVP_R_PRIVATE_KEY_DECODE_ERROR + {"PRIVATE_KEY_DECODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_DECODE_ERROR}, + #else + {"PRIVATE_KEY_DECODE_ERROR", 6, 145}, + #endif + #ifdef EVP_R_PRIVATE_KEY_ENCODE_ERROR + {"PRIVATE_KEY_ENCODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_ENCODE_ERROR}, + #else + {"PRIVATE_KEY_ENCODE_ERROR", 6, 146}, + #endif + #ifdef EVP_R_PUBLIC_KEY_NOT_RSA + {"PUBLIC_KEY_NOT_RSA", ERR_LIB_EVP, EVP_R_PUBLIC_KEY_NOT_RSA}, + #else + {"PUBLIC_KEY_NOT_RSA", 6, 106}, + #endif + #ifdef EVP_R_SET_DEFAULT_PROPERTY_FAILURE + {"SET_DEFAULT_PROPERTY_FAILURE", ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE}, + #else + {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209}, + #endif + #ifdef EVP_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 6, 183}, + #endif + #ifdef EVP_R_UNABLE_TO_ENABLE_LOCKING + {"UNABLE_TO_ENABLE_LOCKING", ERR_LIB_EVP, EVP_R_UNABLE_TO_ENABLE_LOCKING}, + #else + {"UNABLE_TO_ENABLE_LOCKING", 6, 212}, + #endif + #ifdef EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE + {"UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE", ERR_LIB_EVP, EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE}, + #else + {"UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE", 6, 215}, + #endif + #ifdef EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH + {"UNABLE_TO_GET_RANDOM_STRENGTH", ERR_LIB_EVP, EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH}, + #else + {"UNABLE_TO_GET_RANDOM_STRENGTH", 6, 216}, + #endif + #ifdef EVP_R_UNABLE_TO_LOCK_CONTEXT + {"UNABLE_TO_LOCK_CONTEXT", ERR_LIB_EVP, EVP_R_UNABLE_TO_LOCK_CONTEXT}, + #else + {"UNABLE_TO_LOCK_CONTEXT", 6, 211}, + #endif + #ifdef EVP_R_UNABLE_TO_SET_CALLBACKS + {"UNABLE_TO_SET_CALLBACKS", ERR_LIB_EVP, EVP_R_UNABLE_TO_SET_CALLBACKS}, + #else + {"UNABLE_TO_SET_CALLBACKS", 6, 217}, + #endif + #ifdef EVP_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 6, 160}, + #endif + #ifdef EVP_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_EVP, EVP_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 6, 161}, + #endif + #ifdef EVP_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_EVP, EVP_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 6, 207}, + #endif + #ifdef EVP_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 6, 169}, + #endif + #ifdef EVP_R_UNKNOWN_PBE_ALGORITHM + {"UNKNOWN_PBE_ALGORITHM", ERR_LIB_EVP, EVP_R_UNKNOWN_PBE_ALGORITHM}, + #else + {"UNKNOWN_PBE_ALGORITHM", 6, 121}, + #endif + #ifdef EVP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 6, 156}, + #endif + #ifdef EVP_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_EVP, EVP_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 6, 107}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEYLENGTH + {"UNSUPPORTED_KEYLENGTH", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEYLENGTH}, + #else + {"UNSUPPORTED_KEYLENGTH", 6, 123}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION}, + #else + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", 6, 124}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 6, 108}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_TYPE + {"UNSUPPORTED_KEY_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_TYPE}, + #else + {"UNSUPPORTED_KEY_TYPE", 6, 224}, + #endif + #ifdef EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_EVP, EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 6, 135}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRF + {"UNSUPPORTED_PRF", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRF}, + #else + {"UNSUPPORTED_PRF", 6, 125}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM}, + #else + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", 6, 118}, + #endif + #ifdef EVP_R_UNSUPPORTED_SALT_TYPE + {"UNSUPPORTED_SALT_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_SALT_TYPE}, + #else + {"UNSUPPORTED_SALT_TYPE", 6, 126}, + #endif + #ifdef EVP_R_UPDATE_ERROR + {"UPDATE_ERROR", ERR_LIB_EVP, EVP_R_UPDATE_ERROR}, + #else + {"UPDATE_ERROR", 6, 189}, + #endif + #ifdef EVP_R_WRAP_MODE_NOT_ALLOWED + {"WRAP_MODE_NOT_ALLOWED", ERR_LIB_EVP, EVP_R_WRAP_MODE_NOT_ALLOWED}, + #else + {"WRAP_MODE_NOT_ALLOWED", 6, 170}, + #endif + #ifdef EVP_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 6, 109}, + #endif + #ifdef EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE + {"XTS_DATA_UNIT_IS_TOO_LARGE", ERR_LIB_EVP, EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE}, + #else + {"XTS_DATA_UNIT_IS_TOO_LARGE", 6, 191}, + #endif + #ifdef EVP_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 6, 192}, + #endif + #ifdef HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN + {"ASN1_LEN_EXCEEDS_MAX_RESP_LEN", ERR_LIB_HTTP, HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN}, + #else + {"ASN1_LEN_EXCEEDS_MAX_RESP_LEN", 61, 108}, + #endif + #ifdef HTTP_R_CONNECT_FAILURE + {"CONNECT_FAILURE", ERR_LIB_HTTP, HTTP_R_CONNECT_FAILURE}, + #else + {"CONNECT_FAILURE", 61, 100}, + #endif + #ifdef HTTP_R_ERROR_PARSING_ASN1_LENGTH + {"ERROR_PARSING_ASN1_LENGTH", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_ASN1_LENGTH}, + #else + {"ERROR_PARSING_ASN1_LENGTH", 61, 109}, + #endif + #ifdef HTTP_R_ERROR_PARSING_CONTENT_LENGTH + {"ERROR_PARSING_CONTENT_LENGTH", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_CONTENT_LENGTH}, + #else + {"ERROR_PARSING_CONTENT_LENGTH", 61, 119}, + #endif + #ifdef HTTP_R_ERROR_PARSING_URL + {"ERROR_PARSING_URL", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_URL}, + #else + {"ERROR_PARSING_URL", 61, 101}, + #endif + #ifdef HTTP_R_ERROR_RECEIVING + {"ERROR_RECEIVING", ERR_LIB_HTTP, HTTP_R_ERROR_RECEIVING}, + #else + {"ERROR_RECEIVING", 61, 103}, + #endif + #ifdef HTTP_R_ERROR_SENDING + {"ERROR_SENDING", ERR_LIB_HTTP, HTTP_R_ERROR_SENDING}, + #else + {"ERROR_SENDING", 61, 102}, + #endif + #ifdef HTTP_R_FAILED_READING_DATA + {"FAILED_READING_DATA", ERR_LIB_HTTP, HTTP_R_FAILED_READING_DATA}, + #else + {"FAILED_READING_DATA", 61, 128}, + #endif + #ifdef HTTP_R_INCONSISTENT_CONTENT_LENGTH + {"INCONSISTENT_CONTENT_LENGTH", ERR_LIB_HTTP, HTTP_R_INCONSISTENT_CONTENT_LENGTH}, + #else + {"INCONSISTENT_CONTENT_LENGTH", 61, 120}, + #endif + #ifdef HTTP_R_INVALID_PORT_NUMBER + {"INVALID_PORT_NUMBER", ERR_LIB_HTTP, HTTP_R_INVALID_PORT_NUMBER}, + #else + {"INVALID_PORT_NUMBER", 61, 123}, + #endif + #ifdef HTTP_R_INVALID_URL_PATH + {"INVALID_URL_PATH", ERR_LIB_HTTP, HTTP_R_INVALID_URL_PATH}, + #else + {"INVALID_URL_PATH", 61, 125}, + #endif + #ifdef HTTP_R_INVALID_URL_SCHEME + {"INVALID_URL_SCHEME", ERR_LIB_HTTP, HTTP_R_INVALID_URL_SCHEME}, + #else + {"INVALID_URL_SCHEME", 61, 124}, + #endif + #ifdef HTTP_R_MAX_RESP_LEN_EXCEEDED + {"MAX_RESP_LEN_EXCEEDED", ERR_LIB_HTTP, HTTP_R_MAX_RESP_LEN_EXCEEDED}, + #else + {"MAX_RESP_LEN_EXCEEDED", 61, 117}, + #endif + #ifdef HTTP_R_MISSING_ASN1_ENCODING + {"MISSING_ASN1_ENCODING", ERR_LIB_HTTP, HTTP_R_MISSING_ASN1_ENCODING}, + #else + {"MISSING_ASN1_ENCODING", 61, 110}, + #endif + #ifdef HTTP_R_MISSING_CONTENT_TYPE + {"MISSING_CONTENT_TYPE", ERR_LIB_HTTP, HTTP_R_MISSING_CONTENT_TYPE}, + #else + {"MISSING_CONTENT_TYPE", 61, 121}, + #endif + #ifdef HTTP_R_MISSING_REDIRECT_LOCATION + {"MISSING_REDIRECT_LOCATION", ERR_LIB_HTTP, HTTP_R_MISSING_REDIRECT_LOCATION}, + #else + {"MISSING_REDIRECT_LOCATION", 61, 111}, + #endif + #ifdef HTTP_R_RECEIVED_ERROR + {"RECEIVED_ERROR", ERR_LIB_HTTP, HTTP_R_RECEIVED_ERROR}, + #else + {"RECEIVED_ERROR", 61, 105}, + #endif + #ifdef HTTP_R_RECEIVED_WRONG_HTTP_VERSION + {"RECEIVED_WRONG_HTTP_VERSION", ERR_LIB_HTTP, HTTP_R_RECEIVED_WRONG_HTTP_VERSION}, + #else + {"RECEIVED_WRONG_HTTP_VERSION", 61, 106}, + #endif + #ifdef HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP + {"REDIRECTION_FROM_HTTPS_TO_HTTP", ERR_LIB_HTTP, HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP}, + #else + {"REDIRECTION_FROM_HTTPS_TO_HTTP", 61, 112}, + #endif + #ifdef HTTP_R_REDIRECTION_NOT_ENABLED + {"REDIRECTION_NOT_ENABLED", ERR_LIB_HTTP, HTTP_R_REDIRECTION_NOT_ENABLED}, + #else + {"REDIRECTION_NOT_ENABLED", 61, 116}, + #endif + #ifdef HTTP_R_RESPONSE_LINE_TOO_LONG + {"RESPONSE_LINE_TOO_LONG", ERR_LIB_HTTP, HTTP_R_RESPONSE_LINE_TOO_LONG}, + #else + {"RESPONSE_LINE_TOO_LONG", 61, 113}, + #endif + #ifdef HTTP_R_RESPONSE_PARSE_ERROR + {"RESPONSE_PARSE_ERROR", ERR_LIB_HTTP, HTTP_R_RESPONSE_PARSE_ERROR}, + #else + {"RESPONSE_PARSE_ERROR", 61, 104}, + #endif + #ifdef HTTP_R_SOCK_NOT_SUPPORTED + {"SOCK_NOT_SUPPORTED", ERR_LIB_HTTP, HTTP_R_SOCK_NOT_SUPPORTED}, + #else + {"SOCK_NOT_SUPPORTED", 61, 122}, + #endif + #ifdef HTTP_R_STATUS_CODE_UNSUPPORTED + {"STATUS_CODE_UNSUPPORTED", ERR_LIB_HTTP, HTTP_R_STATUS_CODE_UNSUPPORTED}, + #else + {"STATUS_CODE_UNSUPPORTED", 61, 114}, + #endif + #ifdef HTTP_R_TLS_NOT_ENABLED + {"TLS_NOT_ENABLED", ERR_LIB_HTTP, HTTP_R_TLS_NOT_ENABLED}, + #else + {"TLS_NOT_ENABLED", 61, 107}, + #endif + #ifdef HTTP_R_TOO_MANY_REDIRECTIONS + {"TOO_MANY_REDIRECTIONS", ERR_LIB_HTTP, HTTP_R_TOO_MANY_REDIRECTIONS}, + #else + {"TOO_MANY_REDIRECTIONS", 61, 115}, + #endif + #ifdef HTTP_R_UNEXPECTED_CONTENT_TYPE + {"UNEXPECTED_CONTENT_TYPE", ERR_LIB_HTTP, HTTP_R_UNEXPECTED_CONTENT_TYPE}, + #else + {"UNEXPECTED_CONTENT_TYPE", 61, 118}, + #endif + #ifdef OBJ_R_OID_EXISTS + {"OID_EXISTS", ERR_LIB_OBJ, OBJ_R_OID_EXISTS}, + #else + {"OID_EXISTS", 8, 102}, + #endif + #ifdef OBJ_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 8, 101}, + #endif + #ifdef OBJ_R_UNKNOWN_OBJECT_NAME + {"UNKNOWN_OBJECT_NAME", ERR_LIB_OBJ, OBJ_R_UNKNOWN_OBJECT_NAME}, + #else + {"UNKNOWN_OBJECT_NAME", 8, 103}, + #endif + #ifdef OCSP_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_OCSP, OCSP_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 39, 101}, + #endif + #ifdef OCSP_R_DIGEST_ERR + {"DIGEST_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_ERR}, + #else + {"DIGEST_ERR", 39, 102}, + #endif + #ifdef OCSP_R_DIGEST_NAME_ERR + {"DIGEST_NAME_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_NAME_ERR}, + #else + {"DIGEST_NAME_ERR", 39, 106}, + #endif + #ifdef OCSP_R_DIGEST_SIZE_ERR + {"DIGEST_SIZE_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_SIZE_ERR}, + #else + {"DIGEST_SIZE_ERR", 39, 107}, + #endif + #ifdef OCSP_R_ERROR_IN_NEXTUPDATE_FIELD + {"ERROR_IN_NEXTUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD}, + #else + {"ERROR_IN_NEXTUPDATE_FIELD", 39, 122}, + #endif + #ifdef OCSP_R_ERROR_IN_THISUPDATE_FIELD + {"ERROR_IN_THISUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_THISUPDATE_FIELD}, + #else + {"ERROR_IN_THISUPDATE_FIELD", 39, 123}, + #endif + #ifdef OCSP_R_MISSING_OCSPSIGNING_USAGE + {"MISSING_OCSPSIGNING_USAGE", ERR_LIB_OCSP, OCSP_R_MISSING_OCSPSIGNING_USAGE}, + #else + {"MISSING_OCSPSIGNING_USAGE", 39, 103}, + #endif + #ifdef OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE + {"NEXTUPDATE_BEFORE_THISUPDATE", ERR_LIB_OCSP, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE}, + #else + {"NEXTUPDATE_BEFORE_THISUPDATE", 39, 124}, + #endif + #ifdef OCSP_R_NOT_BASIC_RESPONSE + {"NOT_BASIC_RESPONSE", ERR_LIB_OCSP, OCSP_R_NOT_BASIC_RESPONSE}, + #else + {"NOT_BASIC_RESPONSE", 39, 104}, + #endif + #ifdef OCSP_R_NO_CERTIFICATES_IN_CHAIN + {"NO_CERTIFICATES_IN_CHAIN", ERR_LIB_OCSP, OCSP_R_NO_CERTIFICATES_IN_CHAIN}, + #else + {"NO_CERTIFICATES_IN_CHAIN", 39, 105}, + #endif + #ifdef OCSP_R_NO_RESPONSE_DATA + {"NO_RESPONSE_DATA", ERR_LIB_OCSP, OCSP_R_NO_RESPONSE_DATA}, + #else + {"NO_RESPONSE_DATA", 39, 108}, + #endif + #ifdef OCSP_R_NO_REVOKED_TIME + {"NO_REVOKED_TIME", ERR_LIB_OCSP, OCSP_R_NO_REVOKED_TIME}, + #else + {"NO_REVOKED_TIME", 39, 109}, + #endif + #ifdef OCSP_R_NO_SIGNER_KEY + {"NO_SIGNER_KEY", ERR_LIB_OCSP, OCSP_R_NO_SIGNER_KEY}, + #else + {"NO_SIGNER_KEY", 39, 130}, + #endif + #ifdef OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_OCSP, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 39, 110}, + #endif + #ifdef OCSP_R_REQUEST_NOT_SIGNED + {"REQUEST_NOT_SIGNED", ERR_LIB_OCSP, OCSP_R_REQUEST_NOT_SIGNED}, + #else + {"REQUEST_NOT_SIGNED", 39, 128}, + #endif + #ifdef OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", ERR_LIB_OCSP, OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA}, + #else + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", 39, 111}, + #endif + #ifdef OCSP_R_ROOT_CA_NOT_TRUSTED + {"ROOT_CA_NOT_TRUSTED", ERR_LIB_OCSP, OCSP_R_ROOT_CA_NOT_TRUSTED}, + #else + {"ROOT_CA_NOT_TRUSTED", 39, 112}, + #endif + #ifdef OCSP_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_OCSP, OCSP_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 39, 117}, + #endif + #ifdef OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_OCSP, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 39, 118}, + #endif + #ifdef OCSP_R_STATUS_EXPIRED + {"STATUS_EXPIRED", ERR_LIB_OCSP, OCSP_R_STATUS_EXPIRED}, + #else + {"STATUS_EXPIRED", 39, 125}, + #endif + #ifdef OCSP_R_STATUS_NOT_YET_VALID + {"STATUS_NOT_YET_VALID", ERR_LIB_OCSP, OCSP_R_STATUS_NOT_YET_VALID}, + #else + {"STATUS_NOT_YET_VALID", 39, 126}, + #endif + #ifdef OCSP_R_STATUS_TOO_OLD + {"STATUS_TOO_OLD", ERR_LIB_OCSP, OCSP_R_STATUS_TOO_OLD}, + #else + {"STATUS_TOO_OLD", 39, 127}, + #endif + #ifdef OCSP_R_UNKNOWN_MESSAGE_DIGEST + {"UNKNOWN_MESSAGE_DIGEST", ERR_LIB_OCSP, OCSP_R_UNKNOWN_MESSAGE_DIGEST}, + #else + {"UNKNOWN_MESSAGE_DIGEST", 39, 119}, + #endif + #ifdef OCSP_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OCSP, OCSP_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 39, 120}, + #endif + #ifdef OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE + {"UNSUPPORTED_REQUESTORNAME_TYPE", ERR_LIB_OCSP, OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE}, + #else + {"UNSUPPORTED_REQUESTORNAME_TYPE", 39, 129}, + #endif + #ifdef OSSL_DECODER_R_MISSING_GET_PARAMS + {"MISSING_GET_PARAMS", ERR_LIB_OSSL_DECODER, OSSL_DECODER_R_MISSING_GET_PARAMS}, + #else + {"MISSING_GET_PARAMS", 60, 100}, + #endif + #ifdef OSSL_ENCODER_R_ENCODER_NOT_FOUND + {"ENCODER_NOT_FOUND", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_ENCODER_NOT_FOUND}, + #else + {"ENCODER_NOT_FOUND", 59, 101}, + #endif + #ifdef OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY + {"INCORRECT_PROPERTY_QUERY", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY}, + #else + {"INCORRECT_PROPERTY_QUERY", 59, 100}, + #endif + #ifdef OSSL_ENCODER_R_MISSING_GET_PARAMS + {"MISSING_GET_PARAMS", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_MISSING_GET_PARAMS}, + #else + {"MISSING_GET_PARAMS", 59, 102}, + #endif + #ifdef OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE + {"AMBIGUOUS_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE}, + #else + {"AMBIGUOUS_CONTENT_TYPE", 44, 107}, + #endif + #ifdef OSSL_STORE_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_OSSL_STORE, OSSL_STORE_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 44, 115}, + #endif + #ifdef OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC + {"ERROR_VERIFYING_PKCS12_MAC", ERR_LIB_OSSL_STORE, OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC}, + #else + {"ERROR_VERIFYING_PKCS12_MAC", 44, 113}, + #endif + #ifdef OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", ERR_LIB_OSSL_STORE, OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST}, + #else + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", 44, 121}, + #endif + #ifdef OSSL_STORE_R_INVALID_SCHEME + {"INVALID_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_INVALID_SCHEME}, + #else + {"INVALID_SCHEME", 44, 106}, + #endif + #ifdef OSSL_STORE_R_IS_NOT_A + {"IS_NOT_A", ERR_LIB_OSSL_STORE, OSSL_STORE_R_IS_NOT_A}, + #else + {"IS_NOT_A", 44, 112}, + #endif + #ifdef OSSL_STORE_R_LOADER_INCOMPLETE + {"LOADER_INCOMPLETE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADER_INCOMPLETE}, + #else + {"LOADER_INCOMPLETE", 44, 116}, + #endif + #ifdef OSSL_STORE_R_LOADING_STARTED + {"LOADING_STARTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADING_STARTED}, + #else + {"LOADING_STARTED", 44, 117}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CERTIFICATE + {"NOT_A_CERTIFICATE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CERTIFICATE}, + #else + {"NOT_A_CERTIFICATE", 44, 100}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CRL + {"NOT_A_CRL", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CRL}, + #else + {"NOT_A_CRL", 44, 101}, + #endif + #ifdef OSSL_STORE_R_NOT_A_NAME + {"NOT_A_NAME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_NAME}, + #else + {"NOT_A_NAME", 44, 103}, + #endif + #ifdef OSSL_STORE_R_NOT_A_PRIVATE_KEY + {"NOT_A_PRIVATE_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_PRIVATE_KEY}, + #else + {"NOT_A_PRIVATE_KEY", 44, 102}, + #endif + #ifdef OSSL_STORE_R_NOT_A_PUBLIC_KEY + {"NOT_A_PUBLIC_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_PUBLIC_KEY}, + #else + {"NOT_A_PUBLIC_KEY", 44, 122}, + #endif + #ifdef OSSL_STORE_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 44, 104}, + #endif + #ifdef OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR + {"PASSPHRASE_CALLBACK_ERROR", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR}, + #else + {"PASSPHRASE_CALLBACK_ERROR", 44, 114}, + #endif + #ifdef OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 44, 108}, + #endif + #ifdef OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_OSSL_STORE, OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 44, 119}, + #endif + #ifdef OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED}, + #else + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", 44, 109}, + #endif + #ifdef OSSL_STORE_R_UNREGISTERED_SCHEME + {"UNREGISTERED_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNREGISTERED_SCHEME}, + #else + {"UNREGISTERED_SCHEME", 44, 105}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 44, 110}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_OPERATION + {"UNSUPPORTED_OPERATION", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_OPERATION}, + #else + {"UNSUPPORTED_OPERATION", 44, 118}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE + {"UNSUPPORTED_SEARCH_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE}, + #else + {"UNSUPPORTED_SEARCH_TYPE", 44, 120}, + #endif + #ifdef OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 44, 111}, + #endif + #ifdef PEM_R_BAD_BASE64_DECODE + {"BAD_BASE64_DECODE", ERR_LIB_PEM, PEM_R_BAD_BASE64_DECODE}, + #else + {"BAD_BASE64_DECODE", 9, 100}, + #endif + #ifdef PEM_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PEM, PEM_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 9, 101}, + #endif + #ifdef PEM_R_BAD_END_LINE + {"BAD_END_LINE", ERR_LIB_PEM, PEM_R_BAD_END_LINE}, + #else + {"BAD_END_LINE", 9, 102}, + #endif + #ifdef PEM_R_BAD_IV_CHARS + {"BAD_IV_CHARS", ERR_LIB_PEM, PEM_R_BAD_IV_CHARS}, + #else + {"BAD_IV_CHARS", 9, 103}, + #endif + #ifdef PEM_R_BAD_MAGIC_NUMBER + {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, PEM_R_BAD_MAGIC_NUMBER}, + #else + {"BAD_MAGIC_NUMBER", 9, 116}, + #endif + #ifdef PEM_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_PEM, PEM_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 9, 104}, + #endif + #ifdef PEM_R_BAD_VERSION_NUMBER + {"BAD_VERSION_NUMBER", ERR_LIB_PEM, PEM_R_BAD_VERSION_NUMBER}, + #else + {"BAD_VERSION_NUMBER", 9, 117}, + #endif + #ifdef PEM_R_BIO_WRITE_FAILURE + {"BIO_WRITE_FAILURE", ERR_LIB_PEM, PEM_R_BIO_WRITE_FAILURE}, + #else + {"BIO_WRITE_FAILURE", 9, 118}, + #endif + #ifdef PEM_R_CIPHER_IS_NULL + {"CIPHER_IS_NULL", ERR_LIB_PEM, PEM_R_CIPHER_IS_NULL}, + #else + {"CIPHER_IS_NULL", 9, 127}, + #endif + #ifdef PEM_R_ERROR_CONVERTING_PRIVATE_KEY + {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, PEM_R_ERROR_CONVERTING_PRIVATE_KEY}, + #else + {"ERROR_CONVERTING_PRIVATE_KEY", 9, 115}, + #endif + #ifdef PEM_R_EXPECTING_DSS_KEY_BLOB + {"EXPECTING_DSS_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_DSS_KEY_BLOB}, + #else + {"EXPECTING_DSS_KEY_BLOB", 9, 131}, + #endif + #ifdef PEM_R_EXPECTING_PRIVATE_KEY_BLOB + {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PRIVATE_KEY_BLOB}, + #else + {"EXPECTING_PRIVATE_KEY_BLOB", 9, 119}, + #endif + #ifdef PEM_R_EXPECTING_PUBLIC_KEY_BLOB + {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PUBLIC_KEY_BLOB}, + #else + {"EXPECTING_PUBLIC_KEY_BLOB", 9, 120}, + #endif + #ifdef PEM_R_EXPECTING_RSA_KEY_BLOB + {"EXPECTING_RSA_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_RSA_KEY_BLOB}, + #else + {"EXPECTING_RSA_KEY_BLOB", 9, 132}, + #endif + #ifdef PEM_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_PEM, PEM_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 9, 128}, + #endif + #ifdef PEM_R_INCONSISTENT_HEADER + {"INCONSISTENT_HEADER", ERR_LIB_PEM, PEM_R_INCONSISTENT_HEADER}, + #else + {"INCONSISTENT_HEADER", 9, 121}, + #endif + #ifdef PEM_R_KEYBLOB_HEADER_PARSE_ERROR + {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, PEM_R_KEYBLOB_HEADER_PARSE_ERROR}, + #else + {"KEYBLOB_HEADER_PARSE_ERROR", 9, 122}, + #endif + #ifdef PEM_R_KEYBLOB_TOO_SHORT + {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, PEM_R_KEYBLOB_TOO_SHORT}, + #else + {"KEYBLOB_TOO_SHORT", 9, 123}, + #endif + #ifdef PEM_R_MISSING_DEK_IV + {"MISSING_DEK_IV", ERR_LIB_PEM, PEM_R_MISSING_DEK_IV}, + #else + {"MISSING_DEK_IV", 9, 129}, + #endif + #ifdef PEM_R_NOT_DEK_INFO + {"NOT_DEK_INFO", ERR_LIB_PEM, PEM_R_NOT_DEK_INFO}, + #else + {"NOT_DEK_INFO", 9, 105}, + #endif + #ifdef PEM_R_NOT_ENCRYPTED + {"NOT_ENCRYPTED", ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED}, + #else + {"NOT_ENCRYPTED", 9, 106}, + #endif + #ifdef PEM_R_NOT_PROC_TYPE + {"NOT_PROC_TYPE", ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE}, + #else + {"NOT_PROC_TYPE", 9, 107}, + #endif + #ifdef PEM_R_NO_START_LINE + {"NO_START_LINE", ERR_LIB_PEM, PEM_R_NO_START_LINE}, + #else + {"NO_START_LINE", 9, 108}, + #endif + #ifdef PEM_R_PROBLEMS_GETTING_PASSWORD + {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, PEM_R_PROBLEMS_GETTING_PASSWORD}, + #else + {"PROBLEMS_GETTING_PASSWORD", 9, 109}, + #endif + #ifdef PEM_R_PVK_DATA_TOO_SHORT + {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_DATA_TOO_SHORT}, + #else + {"PVK_DATA_TOO_SHORT", 9, 124}, + #endif + #ifdef PEM_R_PVK_TOO_SHORT + {"PVK_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_TOO_SHORT}, + #else + {"PVK_TOO_SHORT", 9, 125}, + #endif + #ifdef PEM_R_READ_KEY + {"READ_KEY", ERR_LIB_PEM, PEM_R_READ_KEY}, + #else + {"READ_KEY", 9, 111}, + #endif + #ifdef PEM_R_SHORT_HEADER + {"SHORT_HEADER", ERR_LIB_PEM, PEM_R_SHORT_HEADER}, + #else + {"SHORT_HEADER", 9, 112}, + #endif + #ifdef PEM_R_UNEXPECTED_DEK_IV + {"UNEXPECTED_DEK_IV", ERR_LIB_PEM, PEM_R_UNEXPECTED_DEK_IV}, + #else + {"UNEXPECTED_DEK_IV", 9, 130}, + #endif + #ifdef PEM_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, PEM_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 9, 113}, + #endif + #ifdef PEM_R_UNSUPPORTED_ENCRYPTION + {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION}, + #else + {"UNSUPPORTED_ENCRYPTION", 9, 114}, + #endif + #ifdef PEM_R_UNSUPPORTED_KEY_COMPONENTS + {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, PEM_R_UNSUPPORTED_KEY_COMPONENTS}, + #else + {"UNSUPPORTED_KEY_COMPONENTS", 9, 126}, + #endif + #ifdef PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_PEM, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, + #endif + #ifdef PKCS12_R_CANT_PACK_STRUCTURE + {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, + #else + {"CANT_PACK_STRUCTURE", 35, 100}, + #endif + #ifdef PKCS12_R_CONTENT_TYPE_NOT_DATA + {"CONTENT_TYPE_NOT_DATA", ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA}, + #else + {"CONTENT_TYPE_NOT_DATA", 35, 121}, + #endif + #ifdef PKCS12_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 35, 101}, + #endif + #ifdef PKCS12_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 35, 102}, + #endif + #ifdef PKCS12_R_ENCRYPT_ERROR + {"ENCRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCRYPT_ERROR}, + #else + {"ENCRYPT_ERROR", 35, 103}, + #endif + #ifdef PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", ERR_LIB_PKCS12, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE}, + #else + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", 35, 120}, + #endif + #ifdef PKCS12_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 35, 104}, + #endif + #ifdef PKCS12_R_INVALID_NULL_PKCS12_POINTER + {"INVALID_NULL_PKCS12_POINTER", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_PKCS12_POINTER}, + #else + {"INVALID_NULL_PKCS12_POINTER", 35, 105}, + #endif + #ifdef PKCS12_R_INVALID_TYPE + {"INVALID_TYPE", ERR_LIB_PKCS12, PKCS12_R_INVALID_TYPE}, + #else + {"INVALID_TYPE", 35, 112}, + #endif + #ifdef PKCS12_R_IV_GEN_ERROR + {"IV_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_IV_GEN_ERROR}, + #else + {"IV_GEN_ERROR", 35, 106}, + #endif + #ifdef PKCS12_R_KEY_GEN_ERROR + {"KEY_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_KEY_GEN_ERROR}, + #else + {"KEY_GEN_ERROR", 35, 107}, + #endif + #ifdef PKCS12_R_MAC_ABSENT + {"MAC_ABSENT", ERR_LIB_PKCS12, PKCS12_R_MAC_ABSENT}, + #else + {"MAC_ABSENT", 35, 108}, + #endif + #ifdef PKCS12_R_MAC_GENERATION_ERROR + {"MAC_GENERATION_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_GENERATION_ERROR}, + #else + {"MAC_GENERATION_ERROR", 35, 109}, + #endif + #ifdef PKCS12_R_MAC_SETUP_ERROR + {"MAC_SETUP_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_SETUP_ERROR}, + #else + {"MAC_SETUP_ERROR", 35, 110}, + #endif + #ifdef PKCS12_R_MAC_STRING_SET_ERROR + {"MAC_STRING_SET_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_STRING_SET_ERROR}, + #else + {"MAC_STRING_SET_ERROR", 35, 111}, + #endif + #ifdef PKCS12_R_MAC_VERIFY_FAILURE + {"MAC_VERIFY_FAILURE", ERR_LIB_PKCS12, PKCS12_R_MAC_VERIFY_FAILURE}, + #else + {"MAC_VERIFY_FAILURE", 35, 113}, + #endif + #ifdef PKCS12_R_PARSE_ERROR + {"PARSE_ERROR", ERR_LIB_PKCS12, PKCS12_R_PARSE_ERROR}, + #else + {"PARSE_ERROR", 35, 114}, + #endif + #ifdef PKCS12_R_PKCS12_CIPHERFINAL_ERROR + {"PKCS12_CIPHERFINAL_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_CIPHERFINAL_ERROR}, + #else + {"PKCS12_CIPHERFINAL_ERROR", 35, 116}, + #endif + #ifdef PKCS12_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_PKCS12, PKCS12_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 35, 118}, + #endif + #ifdef PKCS12_R_UNSUPPORTED_PKCS12_MODE + {"UNSUPPORTED_PKCS12_MODE", ERR_LIB_PKCS12, PKCS12_R_UNSUPPORTED_PKCS12_MODE}, + #else + {"UNSUPPORTED_PKCS12_MODE", 35, 119}, + #endif + #ifdef PKCS7_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_PKCS7, PKCS7_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 33, 117}, + #endif + #ifdef PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_PKCS7, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 33, 144}, + #endif + #ifdef PKCS7_R_CIPHER_NOT_INITIALIZED + {"CIPHER_NOT_INITIALIZED", ERR_LIB_PKCS7, PKCS7_R_CIPHER_NOT_INITIALIZED}, + #else + {"CIPHER_NOT_INITIALIZED", 33, 116}, + #endif + #ifdef PKCS7_R_CONTENT_AND_DATA_PRESENT + {"CONTENT_AND_DATA_PRESENT", ERR_LIB_PKCS7, PKCS7_R_CONTENT_AND_DATA_PRESENT}, + #else + {"CONTENT_AND_DATA_PRESENT", 33, 118}, + #endif + #ifdef PKCS7_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_PKCS7, PKCS7_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 33, 152}, + #endif + #ifdef PKCS7_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_PKCS7, PKCS7_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 33, 119}, + #endif + #ifdef PKCS7_R_DIGEST_FAILURE + {"DIGEST_FAILURE", ERR_LIB_PKCS7, PKCS7_R_DIGEST_FAILURE}, + #else + {"DIGEST_FAILURE", 33, 101}, + #endif + #ifdef PKCS7_R_ENCRYPTION_CTRL_FAILURE + {"ENCRYPTION_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_CTRL_FAILURE}, + #else + {"ENCRYPTION_CTRL_FAILURE", 33, 149}, + #endif + #ifdef PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 150}, + #endif + #ifdef PKCS7_R_ERROR_ADDING_RECIPIENT + {"ERROR_ADDING_RECIPIENT", ERR_LIB_PKCS7, PKCS7_R_ERROR_ADDING_RECIPIENT}, + #else + {"ERROR_ADDING_RECIPIENT", 33, 120}, + #endif + #ifdef PKCS7_R_ERROR_SETTING_CIPHER + {"ERROR_SETTING_CIPHER", ERR_LIB_PKCS7, PKCS7_R_ERROR_SETTING_CIPHER}, + #else + {"ERROR_SETTING_CIPHER", 33, 121}, + #endif + #ifdef PKCS7_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_PKCS7, PKCS7_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 33, 143}, + #endif + #ifdef PKCS7_R_INVALID_SIGNED_DATA_TYPE + {"INVALID_SIGNED_DATA_TYPE", ERR_LIB_PKCS7, PKCS7_R_INVALID_SIGNED_DATA_TYPE}, + #else + {"INVALID_SIGNED_DATA_TYPE", 33, 155}, + #endif + #ifdef PKCS7_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_PKCS7, PKCS7_R_NO_CONTENT}, + #else + {"NO_CONTENT", 33, 122}, + #endif + #ifdef PKCS7_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_PKCS7, PKCS7_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 33, 151}, + #endif + #ifdef PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND + {"NO_MATCHING_DIGEST_TYPE_FOUND", ERR_LIB_PKCS7, PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND}, + #else + {"NO_MATCHING_DIGEST_TYPE_FOUND", 33, 154}, + #endif + #ifdef PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE + {"NO_RECIPIENT_MATCHES_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE}, + #else + {"NO_RECIPIENT_MATCHES_CERTIFICATE", 33, 115}, + #endif + #ifdef PKCS7_R_NO_SIGNATURES_ON_DATA + {"NO_SIGNATURES_ON_DATA", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNATURES_ON_DATA}, + #else + {"NO_SIGNATURES_ON_DATA", 33, 123}, + #endif + #ifdef PKCS7_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 33, 142}, + #endif + #ifdef PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", ERR_LIB_PKCS7, PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE}, + #else + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", 33, 104}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 33, 124}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNER_ERROR + {"PKCS7_ADD_SIGNER_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNER_ERROR}, + #else + {"PKCS7_ADD_SIGNER_ERROR", 33, 153}, + #endif + #ifdef PKCS7_R_PKCS7_DATASIGN + {"PKCS7_DATASIGN", ERR_LIB_PKCS7, PKCS7_R_PKCS7_DATASIGN}, + #else + {"PKCS7_DATASIGN", 33, 145}, + #endif + #ifdef PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 33, 127}, + #endif + #ifdef PKCS7_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 33, 105}, + #endif + #ifdef PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_PKCS7, PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 33, 128}, + #endif + #ifdef PKCS7_R_SIGNING_CTRL_FAILURE + {"SIGNING_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_CTRL_FAILURE}, + #else + {"SIGNING_CTRL_FAILURE", 33, 147}, + #endif + #ifdef PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 148}, + #endif + #ifdef PKCS7_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_PKCS7, PKCS7_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 33, 129}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_CERTIFICATE + {"UNABLE_TO_FIND_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_CERTIFICATE}, + #else + {"UNABLE_TO_FIND_CERTIFICATE", 33, 106}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MEM_BIO + {"UNABLE_TO_FIND_MEM_BIO", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MEM_BIO}, + #else + {"UNABLE_TO_FIND_MEM_BIO", 33, 107}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST + {"UNABLE_TO_FIND_MESSAGE_DIGEST", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST}, + #else + {"UNABLE_TO_FIND_MESSAGE_DIGEST", 33, 108}, + #endif + #ifdef PKCS7_R_UNKNOWN_DIGEST_TYPE + {"UNKNOWN_DIGEST_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_DIGEST_TYPE}, + #else + {"UNKNOWN_DIGEST_TYPE", 33, 109}, + #endif + #ifdef PKCS7_R_UNKNOWN_OPERATION + {"UNKNOWN_OPERATION", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_OPERATION}, + #else + {"UNKNOWN_OPERATION", 33, 110}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CIPHER_TYPE + {"UNSUPPORTED_CIPHER_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CIPHER_TYPE}, + #else + {"UNSUPPORTED_CIPHER_TYPE", 33, 111}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 33, 112}, + #endif + #ifdef PKCS7_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 33, 113}, + #endif + #ifdef PKCS7_R_WRONG_PKCS7_TYPE + {"WRONG_PKCS7_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_PKCS7_TYPE}, + #else + {"WRONG_PKCS7_TYPE", 33, 114}, + #endif + #ifdef PROP_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_PROP, PROP_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 55, 100}, + #endif + #ifdef PROP_R_NOT_AN_ASCII_CHARACTER + {"NOT_AN_ASCII_CHARACTER", ERR_LIB_PROP, PROP_R_NOT_AN_ASCII_CHARACTER}, + #else + {"NOT_AN_ASCII_CHARACTER", 55, 101}, + #endif + #ifdef PROP_R_NOT_AN_HEXADECIMAL_DIGIT + {"NOT_AN_HEXADECIMAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_AN_HEXADECIMAL_DIGIT}, + #else + {"NOT_AN_HEXADECIMAL_DIGIT", 55, 102}, + #endif + #ifdef PROP_R_NOT_AN_IDENTIFIER + {"NOT_AN_IDENTIFIER", ERR_LIB_PROP, PROP_R_NOT_AN_IDENTIFIER}, + #else + {"NOT_AN_IDENTIFIER", 55, 103}, + #endif + #ifdef PROP_R_NOT_AN_OCTAL_DIGIT + {"NOT_AN_OCTAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_AN_OCTAL_DIGIT}, + #else + {"NOT_AN_OCTAL_DIGIT", 55, 104}, + #endif + #ifdef PROP_R_NOT_A_DECIMAL_DIGIT + {"NOT_A_DECIMAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_A_DECIMAL_DIGIT}, + #else + {"NOT_A_DECIMAL_DIGIT", 55, 105}, + #endif + #ifdef PROP_R_NO_MATCHING_STRING_DELIMITER + {"NO_MATCHING_STRING_DELIMITER", ERR_LIB_PROP, PROP_R_NO_MATCHING_STRING_DELIMITER}, + #else + {"NO_MATCHING_STRING_DELIMITER", 55, 106}, + #endif + #ifdef PROP_R_NO_VALUE + {"NO_VALUE", ERR_LIB_PROP, PROP_R_NO_VALUE}, + #else + {"NO_VALUE", 55, 107}, + #endif + #ifdef PROP_R_PARSE_FAILED + {"PARSE_FAILED", ERR_LIB_PROP, PROP_R_PARSE_FAILED}, + #else + {"PARSE_FAILED", 55, 108}, + #endif + #ifdef PROP_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_PROP, PROP_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 55, 109}, + #endif + #ifdef PROP_R_TRAILING_CHARACTERS + {"TRAILING_CHARACTERS", ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS}, + #else + {"TRAILING_CHARACTERS", 55, 110}, + #endif + #ifdef PROV_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_PROV, PROV_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 57, 184}, + #endif + #ifdef PROV_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_PROV, PROV_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 57, 173}, + #endif + #ifdef PROV_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_PROV, PROV_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 57, 185}, + #endif + #ifdef PROV_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PROV, PROV_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 57, 100}, + #endif + #ifdef PROV_R_BAD_ENCODING + {"BAD_ENCODING", ERR_LIB_PROV, PROV_R_BAD_ENCODING}, + #else + {"BAD_ENCODING", 57, 141}, + #endif + #ifdef PROV_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_PROV, PROV_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 57, 142}, + #endif + #ifdef PROV_R_BAD_TLS_CLIENT_VERSION + {"BAD_TLS_CLIENT_VERSION", ERR_LIB_PROV, PROV_R_BAD_TLS_CLIENT_VERSION}, + #else + {"BAD_TLS_CLIENT_VERSION", 57, 161}, + #endif + #ifdef PROV_R_BN_ERROR + {"BN_ERROR", ERR_LIB_PROV, PROV_R_BN_ERROR}, + #else + {"BN_ERROR", 57, 160}, + #endif + #ifdef PROV_R_CIPHER_OPERATION_FAILED + {"CIPHER_OPERATION_FAILED", ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED}, + #else + {"CIPHER_OPERATION_FAILED", 57, 102}, + #endif + #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED + {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED}, + #else + {"DERIVATION_FUNCTION_INIT_FAILED", 57, 205}, + #endif + #ifdef PROV_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 57, 174}, + #endif + #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK + {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK}, + #else + {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", 57, 186}, + #endif + #ifdef PROV_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_PROV, PROV_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 57, 188}, + #endif + #ifdef PROV_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 57, 189}, + #endif + #ifdef PROV_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 57, 190}, + #endif + #ifdef PROV_R_FAILED_DURING_DERIVATION + {"FAILED_DURING_DERIVATION", ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION}, + #else + {"FAILED_DURING_DERIVATION", 57, 164}, + #endif + #ifdef PROV_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_PROV, PROV_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 57, 180}, + #endif + #ifdef PROV_R_FAILED_TO_DECRYPT + {"FAILED_TO_DECRYPT", ERR_LIB_PROV, PROV_R_FAILED_TO_DECRYPT}, + #else + {"FAILED_TO_DECRYPT", 57, 162}, + #endif + #ifdef PROV_R_FAILED_TO_GENERATE_KEY + {"FAILED_TO_GENERATE_KEY", ERR_LIB_PROV, PROV_R_FAILED_TO_GENERATE_KEY}, + #else + {"FAILED_TO_GENERATE_KEY", 57, 121}, + #endif + #ifdef PROV_R_FAILED_TO_GET_PARAMETER + {"FAILED_TO_GET_PARAMETER", ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER}, + #else + {"FAILED_TO_GET_PARAMETER", 57, 103}, + #endif + #ifdef PROV_R_FAILED_TO_SET_PARAMETER + {"FAILED_TO_SET_PARAMETER", ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER}, + #else + {"FAILED_TO_SET_PARAMETER", 57, 104}, + #endif + #ifdef PROV_R_FAILED_TO_SIGN + {"FAILED_TO_SIGN", ERR_LIB_PROV, PROV_R_FAILED_TO_SIGN}, + #else + {"FAILED_TO_SIGN", 57, 175}, + #endif + #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR + {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR}, + #else + {"FIPS_MODULE_CONDITIONAL_ERROR", 57, 227}, + #endif + #ifdef PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE + {"FIPS_MODULE_ENTERING_ERROR_STATE", ERR_LIB_PROV, PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE}, + #else + {"FIPS_MODULE_ENTERING_ERROR_STATE", 57, 224}, + #endif + #ifdef PROV_R_FIPS_MODULE_IN_ERROR_STATE + {"FIPS_MODULE_IN_ERROR_STATE", ERR_LIB_PROV, PROV_R_FIPS_MODULE_IN_ERROR_STATE}, + #else + {"FIPS_MODULE_IN_ERROR_STATE", 57, 225}, + #endif + #ifdef PROV_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_PROV, PROV_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 57, 191}, + #endif + #ifdef PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_PROV, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 57, 165}, + #endif + #ifdef PROV_R_INDICATOR_INTEGRITY_FAILURE + {"INDICATOR_INTEGRITY_FAILURE", ERR_LIB_PROV, PROV_R_INDICATOR_INTEGRITY_FAILURE}, + #else + {"INDICATOR_INTEGRITY_FAILURE", 57, 210}, + #endif + #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH + {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH}, + #else + {"INSUFFICIENT_DRBG_STRENGTH", 57, 181}, + #endif + #ifdef PROV_R_INVALID_AAD + {"INVALID_AAD", ERR_LIB_PROV, PROV_R_INVALID_AAD}, + #else + {"INVALID_AAD", 57, 108}, + #endif + #ifdef PROV_R_INVALID_CONFIG_DATA + {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA}, + #else + {"INVALID_CONFIG_DATA", 57, 211}, + #endif + #ifdef PROV_R_INVALID_CONSTANT_LENGTH + {"INVALID_CONSTANT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_CONSTANT_LENGTH}, + #else + {"INVALID_CONSTANT_LENGTH", 57, 157}, + #endif + #ifdef PROV_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_PROV, PROV_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 57, 176}, + #endif + #ifdef PROV_R_INVALID_CUSTOM_LENGTH + {"INVALID_CUSTOM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_CUSTOM_LENGTH}, + #else + {"INVALID_CUSTOM_LENGTH", 57, 111}, + #endif + #ifdef PROV_R_INVALID_DATA + {"INVALID_DATA", ERR_LIB_PROV, PROV_R_INVALID_DATA}, + #else + {"INVALID_DATA", 57, 115}, + #endif + #ifdef PROV_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_PROV, PROV_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 57, 122}, + #endif + #ifdef PROV_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 57, 166}, + #endif + #ifdef PROV_R_INVALID_DIGEST_SIZE + {"INVALID_DIGEST_SIZE", ERR_LIB_PROV, PROV_R_INVALID_DIGEST_SIZE}, + #else + {"INVALID_DIGEST_SIZE", 57, 218}, + #endif + #ifdef PROV_R_INVALID_ITERATION_COUNT + {"INVALID_ITERATION_COUNT", ERR_LIB_PROV, PROV_R_INVALID_ITERATION_COUNT}, + #else + {"INVALID_ITERATION_COUNT", 57, 123}, + #endif + #ifdef PROV_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 57, 109}, + #endif + #ifdef PROV_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY}, + #else + {"INVALID_KEY", 57, 158}, + #endif + #ifdef PROV_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 57, 105}, + #endif + #ifdef PROV_R_INVALID_MAC + {"INVALID_MAC", ERR_LIB_PROV, PROV_R_INVALID_MAC}, + #else + {"INVALID_MAC", 57, 151}, + #endif + #ifdef PROV_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 57, 167}, + #endif + #ifdef PROV_R_INVALID_MODE + {"INVALID_MODE", ERR_LIB_PROV, PROV_R_INVALID_MODE}, + #else + {"INVALID_MODE", 57, 125}, + #endif + #ifdef PROV_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 57, 168}, + #endif + #ifdef PROV_R_INVALID_PUBINFO + {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO}, + #else + {"INVALID_PUBINFO", 57, 198}, + #endif + #ifdef PROV_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 57, 112}, + #endif + #ifdef PROV_R_INVALID_SEED_LENGTH + {"INVALID_SEED_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_SEED_LENGTH}, + #else + {"INVALID_SEED_LENGTH", 57, 154}, + #endif + #ifdef PROV_R_INVALID_SIGNATURE_SIZE + {"INVALID_SIGNATURE_SIZE", ERR_LIB_PROV, PROV_R_INVALID_SIGNATURE_SIZE}, + #else + {"INVALID_SIGNATURE_SIZE", 57, 179}, + #endif + #ifdef PROV_R_INVALID_STATE + {"INVALID_STATE", ERR_LIB_PROV, PROV_R_INVALID_STATE}, + #else + {"INVALID_STATE", 57, 212}, + #endif + #ifdef PROV_R_INVALID_TAG + {"INVALID_TAG", ERR_LIB_PROV, PROV_R_INVALID_TAG}, + #else + {"INVALID_TAG", 57, 110}, + #endif + #ifdef PROV_R_INVALID_TAG_LENGTH + {"INVALID_TAG_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_TAG_LENGTH}, + #else + {"INVALID_TAG_LENGTH", 57, 118}, + #endif + #ifdef PROV_R_INVALID_UKM_LENGTH + {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH}, + #else + {"INVALID_UKM_LENGTH", 57, 200}, + #endif + #ifdef PROV_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_PROV, PROV_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 57, 170}, + #endif + #ifdef PROV_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_PROV, PROV_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 57, 192}, + #endif + #ifdef PROV_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 57, 101}, + #endif + #ifdef PROV_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_PROV, PROV_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 57, 171}, + #endif + #ifdef PROV_R_MISSING_CEK_ALG + {"MISSING_CEK_ALG", ERR_LIB_PROV, PROV_R_MISSING_CEK_ALG}, + #else + {"MISSING_CEK_ALG", 57, 144}, + #endif + #ifdef PROV_R_MISSING_CIPHER + {"MISSING_CIPHER", ERR_LIB_PROV, PROV_R_MISSING_CIPHER}, + #else + {"MISSING_CIPHER", 57, 155}, + #endif + #ifdef PROV_R_MISSING_CONFIG_DATA + {"MISSING_CONFIG_DATA", ERR_LIB_PROV, PROV_R_MISSING_CONFIG_DATA}, + #else + {"MISSING_CONFIG_DATA", 57, 213}, + #endif + #ifdef PROV_R_MISSING_CONSTANT + {"MISSING_CONSTANT", ERR_LIB_PROV, PROV_R_MISSING_CONSTANT}, + #else + {"MISSING_CONSTANT", 57, 156}, + #endif + #ifdef PROV_R_MISSING_KEY + {"MISSING_KEY", ERR_LIB_PROV, PROV_R_MISSING_KEY}, + #else + {"MISSING_KEY", 57, 128}, + #endif + #ifdef PROV_R_MISSING_MAC + {"MISSING_MAC", ERR_LIB_PROV, PROV_R_MISSING_MAC}, + #else + {"MISSING_MAC", 57, 150}, + #endif + #ifdef PROV_R_MISSING_MESSAGE_DIGEST + {"MISSING_MESSAGE_DIGEST", ERR_LIB_PROV, PROV_R_MISSING_MESSAGE_DIGEST}, + #else + {"MISSING_MESSAGE_DIGEST", 57, 129}, + #endif + #ifdef PROV_R_MISSING_OID + {"MISSING_OID", ERR_LIB_PROV, PROV_R_MISSING_OID}, + #else + {"MISSING_OID", 57, 209}, + #endif + #ifdef PROV_R_MISSING_PASS + {"MISSING_PASS", ERR_LIB_PROV, PROV_R_MISSING_PASS}, + #else + {"MISSING_PASS", 57, 130}, + #endif + #ifdef PROV_R_MISSING_SALT + {"MISSING_SALT", ERR_LIB_PROV, PROV_R_MISSING_SALT}, + #else + {"MISSING_SALT", 57, 131}, + #endif + #ifdef PROV_R_MISSING_SECRET + {"MISSING_SECRET", ERR_LIB_PROV, PROV_R_MISSING_SECRET}, + #else + {"MISSING_SECRET", 57, 132}, + #endif + #ifdef PROV_R_MISSING_SEED + {"MISSING_SEED", ERR_LIB_PROV, PROV_R_MISSING_SEED}, + #else + {"MISSING_SEED", 57, 140}, + #endif + #ifdef PROV_R_MISSING_SESSION_ID + {"MISSING_SESSION_ID", ERR_LIB_PROV, PROV_R_MISSING_SESSION_ID}, + #else + {"MISSING_SESSION_ID", 57, 133}, + #endif + #ifdef PROV_R_MISSING_TYPE + {"MISSING_TYPE", ERR_LIB_PROV, PROV_R_MISSING_TYPE}, + #else + {"MISSING_TYPE", 57, 134}, + #endif + #ifdef PROV_R_MISSING_XCGHASH + {"MISSING_XCGHASH", ERR_LIB_PROV, PROV_R_MISSING_XCGHASH}, + #else + {"MISSING_XCGHASH", 57, 135}, + #endif + #ifdef PROV_R_MODULE_INTEGRITY_FAILURE + {"MODULE_INTEGRITY_FAILURE", ERR_LIB_PROV, PROV_R_MODULE_INTEGRITY_FAILURE}, + #else + {"MODULE_INTEGRITY_FAILURE", 57, 214}, + #endif + #ifdef PROV_R_NOT_A_PRIVATE_KEY + {"NOT_A_PRIVATE_KEY", ERR_LIB_PROV, PROV_R_NOT_A_PRIVATE_KEY}, + #else + {"NOT_A_PRIVATE_KEY", 57, 221}, + #endif + #ifdef PROV_R_NOT_A_PUBLIC_KEY + {"NOT_A_PUBLIC_KEY", ERR_LIB_PROV, PROV_R_NOT_A_PUBLIC_KEY}, + #else + {"NOT_A_PUBLIC_KEY", 57, 220}, + #endif + #ifdef PROV_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_PROV, PROV_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 57, 193}, + #endif + #ifdef PROV_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_PROV, PROV_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 57, 226}, + #endif + #ifdef PROV_R_NOT_SUPPORTED + {"NOT_SUPPORTED", ERR_LIB_PROV, PROV_R_NOT_SUPPORTED}, + #else + {"NOT_SUPPORTED", 57, 136}, + #endif + #ifdef PROV_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_PROV, PROV_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 57, 113}, + #endif + #ifdef PROV_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 57, 114}, + #endif + #ifdef PROV_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_PROV, PROV_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 57, 177}, + #endif + #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 57, 178}, + #endif + #ifdef PROV_R_OUTPUT_BUFFER_TOO_SMALL + {"OUTPUT_BUFFER_TOO_SMALL", ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL}, + #else + {"OUTPUT_BUFFER_TOO_SMALL", 57, 106}, + #endif + #ifdef PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS + {"PARENT_CANNOT_GENERATE_RANDOM_NUMBERS", ERR_LIB_PROV, PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS}, + #else + {"PARENT_CANNOT_GENERATE_RANDOM_NUMBERS", 57, 228}, + #endif + #ifdef PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED + {"PARENT_CANNOT_SUPPLY_ENTROPY_SEED", ERR_LIB_PROV, PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED}, + #else + {"PARENT_CANNOT_SUPPLY_ENTROPY_SEED", 57, 187}, + #endif + #ifdef PROV_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 57, 182}, + #endif + #ifdef PROV_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 57, 194}, + #endif + #ifdef PROV_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_PROV, PROV_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 57, 219}, + #endif + #ifdef PROV_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_PROV, PROV_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 57, 195}, + #endif + #ifdef PROV_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_PROV, PROV_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 57, 172}, + #endif + #ifdef PROV_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_PROV, PROV_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 57, 196}, + #endif + #ifdef PROV_R_REQUIRE_CTR_MODE_CIPHER + {"REQUIRE_CTR_MODE_CIPHER", ERR_LIB_PROV, PROV_R_REQUIRE_CTR_MODE_CIPHER}, + #else + {"REQUIRE_CTR_MODE_CIPHER", 57, 206}, + #endif + #ifdef PROV_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_PROV, PROV_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 57, 197}, + #endif + #ifdef PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_PROV, PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 57, 222}, + #endif + #ifdef PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT + {"SEED_SOURCES_MUST_NOT_HAVE_A_PARENT", ERR_LIB_PROV, PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT}, + #else + {"SEED_SOURCES_MUST_NOT_HAVE_A_PARENT", 57, 229}, + #endif + #ifdef PROV_R_SELF_TEST_KAT_FAILURE + {"SELF_TEST_KAT_FAILURE", ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE}, + #else + {"SELF_TEST_KAT_FAILURE", 57, 215}, + #endif + #ifdef PROV_R_SELF_TEST_POST_FAILURE + {"SELF_TEST_POST_FAILURE", ERR_LIB_PROV, PROV_R_SELF_TEST_POST_FAILURE}, + #else + {"SELF_TEST_POST_FAILURE", 57, 216}, + #endif + #ifdef PROV_R_TAG_NOT_NEEDED + {"TAG_NOT_NEEDED", ERR_LIB_PROV, PROV_R_TAG_NOT_NEEDED}, + #else + {"TAG_NOT_NEEDED", 57, 120}, + #endif + #ifdef PROV_R_TAG_NOT_SET + {"TAG_NOT_SET", ERR_LIB_PROV, PROV_R_TAG_NOT_SET}, + #else + {"TAG_NOT_SET", 57, 119}, + #endif + #ifdef PROV_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 57, 126}, + #endif + #ifdef PROV_R_UNABLE_TO_FIND_CIPHERS + {"UNABLE_TO_FIND_CIPHERS", ERR_LIB_PROV, PROV_R_UNABLE_TO_FIND_CIPHERS}, + #else + {"UNABLE_TO_FIND_CIPHERS", 57, 207}, + #endif + #ifdef PROV_R_UNABLE_TO_GET_PARENT_STRENGTH + {"UNABLE_TO_GET_PARENT_STRENGTH", ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH}, + #else + {"UNABLE_TO_GET_PARENT_STRENGTH", 57, 199}, + #endif + #ifdef PROV_R_UNABLE_TO_GET_PASSPHRASE + {"UNABLE_TO_GET_PASSPHRASE", ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PASSPHRASE}, + #else + {"UNABLE_TO_GET_PASSPHRASE", 57, 159}, + #endif + #ifdef PROV_R_UNABLE_TO_INITIALISE_CIPHERS + {"UNABLE_TO_INITIALISE_CIPHERS", ERR_LIB_PROV, PROV_R_UNABLE_TO_INITIALISE_CIPHERS}, + #else + {"UNABLE_TO_INITIALISE_CIPHERS", 57, 208}, + #endif + #ifdef PROV_R_UNABLE_TO_LOAD_SHA256 + {"UNABLE_TO_LOAD_SHA256", ERR_LIB_PROV, PROV_R_UNABLE_TO_LOAD_SHA256}, + #else + {"UNABLE_TO_LOAD_SHA256", 57, 147}, + #endif + #ifdef PROV_R_UNABLE_TO_LOCK_PARENT + {"UNABLE_TO_LOCK_PARENT", ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT}, + #else + {"UNABLE_TO_LOCK_PARENT", 57, 201}, + #endif + #ifdef PROV_R_UNABLE_TO_RESEED + {"UNABLE_TO_RESEED", ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED}, + #else + {"UNABLE_TO_RESEED", 57, 204}, + #endif + #ifdef PROV_R_UNSUPPORTED_CEK_ALG + {"UNSUPPORTED_CEK_ALG", ERR_LIB_PROV, PROV_R_UNSUPPORTED_CEK_ALG}, + #else + {"UNSUPPORTED_CEK_ALG", 57, 145}, + #endif + #ifdef PROV_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_PROV, PROV_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 57, 153}, + #endif + #ifdef PROV_R_UNSUPPORTED_MAC_TYPE + {"UNSUPPORTED_MAC_TYPE", ERR_LIB_PROV, PROV_R_UNSUPPORTED_MAC_TYPE}, + #else + {"UNSUPPORTED_MAC_TYPE", 57, 137}, + #endif + #ifdef PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_PROV, PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152}, + #endif + #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 57, 223}, + #endif + #ifdef PROV_R_VALUE_ERROR + {"VALUE_ERROR", ERR_LIB_PROV, PROV_R_VALUE_ERROR}, + #else + {"VALUE_ERROR", 57, 138}, + #endif + #ifdef PROV_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_PROV, PROV_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 57, 107}, + #endif + #ifdef PROV_R_WRONG_OUTPUT_BUFFER_SIZE + {"WRONG_OUTPUT_BUFFER_SIZE", ERR_LIB_PROV, PROV_R_WRONG_OUTPUT_BUFFER_SIZE}, + #else + {"WRONG_OUTPUT_BUFFER_SIZE", 57, 139}, + #endif + #ifdef PROV_R_XOF_DIGESTS_NOT_ALLOWED + {"XOF_DIGESTS_NOT_ALLOWED", ERR_LIB_PROV, PROV_R_XOF_DIGESTS_NOT_ALLOWED}, + #else + {"XOF_DIGESTS_NOT_ALLOWED", 57, 183}, + #endif + #ifdef PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE + {"XTS_DATA_UNIT_IS_TOO_LARGE", ERR_LIB_PROV, PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE}, + #else + {"XTS_DATA_UNIT_IS_TOO_LARGE", 57, 148}, + #endif + #ifdef PROV_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_PROV, PROV_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 57, 149}, + #endif + #ifdef RAND_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 36, 102}, + #endif + #ifdef RAND_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_RAND, RAND_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 36, 103}, + #endif + #ifdef RAND_R_ARGUMENT_OUT_OF_RANGE + {"ARGUMENT_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE}, + #else + {"ARGUMENT_OUT_OF_RANGE", 36, 105}, + #endif + #ifdef RAND_R_CANNOT_OPEN_FILE + {"CANNOT_OPEN_FILE", ERR_LIB_RAND, RAND_R_CANNOT_OPEN_FILE}, + #else + {"CANNOT_OPEN_FILE", 36, 121}, + #endif + #ifdef RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS + {"DERIVATION_FUNCTION_MANDATORY_FOR_FIPS", ERR_LIB_RAND, RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS}, + #else + {"DERIVATION_FUNCTION_MANDATORY_FOR_FIPS", 36, 137}, + #endif + #ifdef RAND_R_DRBG_ALREADY_INITIALIZED + {"DRBG_ALREADY_INITIALIZED", ERR_LIB_RAND, RAND_R_DRBG_ALREADY_INITIALIZED}, + #else + {"DRBG_ALREADY_INITIALIZED", 36, 129}, + #endif + #ifdef RAND_R_DRBG_NOT_INITIALISED + {"DRBG_NOT_INITIALISED", ERR_LIB_RAND, RAND_R_DRBG_NOT_INITIALISED}, + #else + {"DRBG_NOT_INITIALISED", 36, 104}, + #endif + #ifdef RAND_R_ENTROPY_INPUT_TOO_LONG + {"ENTROPY_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ENTROPY_INPUT_TOO_LONG}, + #else + {"ENTROPY_INPUT_TOO_LONG", 36, 106}, + #endif + #ifdef RAND_R_ENTROPY_OUT_OF_RANGE + {"ENTROPY_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ENTROPY_OUT_OF_RANGE}, + #else + {"ENTROPY_OUT_OF_RANGE", 36, 124}, + #endif + #ifdef RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED + {"ERROR_ENTROPY_POOL_WAS_IGNORED", ERR_LIB_RAND, RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED}, + #else + {"ERROR_ENTROPY_POOL_WAS_IGNORED", 36, 127}, + #endif + #ifdef RAND_R_ERROR_INITIALISING_DRBG + {"ERROR_INITIALISING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INITIALISING_DRBG}, + #else + {"ERROR_INITIALISING_DRBG", 36, 107}, + #endif + #ifdef RAND_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 36, 108}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT}, + #else + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", 36, 109}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 36, 110}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 36, 111}, + #endif + #ifdef RAND_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_RAND, RAND_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 36, 126}, + #endif + #ifdef RAND_R_FUNC_NOT_IMPLEMENTED + {"FUNC_NOT_IMPLEMENTED", ERR_LIB_RAND, RAND_R_FUNC_NOT_IMPLEMENTED}, + #else + {"FUNC_NOT_IMPLEMENTED", 36, 101}, + #endif + #ifdef RAND_R_FWRITE_ERROR + {"FWRITE_ERROR", ERR_LIB_RAND, RAND_R_FWRITE_ERROR}, + #else + {"FWRITE_ERROR", 36, 123}, + #endif + #ifdef RAND_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_RAND, RAND_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 36, 112}, + #endif + #ifdef RAND_R_INSUFFICIENT_DRBG_STRENGTH + {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_RAND, RAND_R_INSUFFICIENT_DRBG_STRENGTH}, + #else + {"INSUFFICIENT_DRBG_STRENGTH", 36, 139}, + #endif + #ifdef RAND_R_INTERNAL_ERROR + {"INTERNAL_ERROR", ERR_LIB_RAND, RAND_R_INTERNAL_ERROR}, + #else + {"INTERNAL_ERROR", 36, 113}, + #endif + #ifdef RAND_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 36, 114}, + #endif + #ifdef RAND_R_NOT_A_REGULAR_FILE + {"NOT_A_REGULAR_FILE", ERR_LIB_RAND, RAND_R_NOT_A_REGULAR_FILE}, + #else + {"NOT_A_REGULAR_FILE", 36, 122}, + #endif + #ifdef RAND_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_RAND, RAND_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 36, 115}, + #endif + #ifdef RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED + {"NO_DRBG_IMPLEMENTATION_SELECTED", ERR_LIB_RAND, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED}, + #else + {"NO_DRBG_IMPLEMENTATION_SELECTED", 36, 128}, + #endif + #ifdef RAND_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_RAND, RAND_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 36, 130}, + #endif + #ifdef RAND_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_RAND, RAND_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 36, 131}, + #endif + #ifdef RAND_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_RAND, RAND_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 36, 116}, + #endif + #ifdef RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", ERR_LIB_RAND, RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED}, + #else + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", 36, 133}, + #endif + #ifdef RAND_R_PRNG_NOT_SEEDED + {"PRNG_NOT_SEEDED", ERR_LIB_RAND, RAND_R_PRNG_NOT_SEEDED}, + #else + {"PRNG_NOT_SEEDED", 36, 100}, + #endif + #ifdef RAND_R_RANDOM_POOL_OVERFLOW + {"RANDOM_POOL_OVERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW}, + #else + {"RANDOM_POOL_OVERFLOW", 36, 125}, + #endif + #ifdef RAND_R_RANDOM_POOL_UNDERFLOW + {"RANDOM_POOL_UNDERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_UNDERFLOW}, + #else + {"RANDOM_POOL_UNDERFLOW", 36, 134}, + #endif + #ifdef RAND_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_RAND, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 36, 117}, + #endif + #ifdef RAND_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_RAND, RAND_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 36, 118}, + #endif + #ifdef RAND_R_SELFTEST_FAILURE + {"SELFTEST_FAILURE", ERR_LIB_RAND, RAND_R_SELFTEST_FAILURE}, + #else + {"SELFTEST_FAILURE", 36, 119}, + #endif + #ifdef RAND_R_TOO_LITTLE_NONCE_REQUESTED + {"TOO_LITTLE_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_LITTLE_NONCE_REQUESTED}, + #else + {"TOO_LITTLE_NONCE_REQUESTED", 36, 135}, + #endif + #ifdef RAND_R_TOO_MUCH_NONCE_REQUESTED + {"TOO_MUCH_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_MUCH_NONCE_REQUESTED}, + #else + {"TOO_MUCH_NONCE_REQUESTED", 36, 136}, + #endif + #ifdef RAND_R_UNABLE_TO_CREATE_DRBG + {"UNABLE_TO_CREATE_DRBG", ERR_LIB_RAND, RAND_R_UNABLE_TO_CREATE_DRBG}, + #else + {"UNABLE_TO_CREATE_DRBG", 36, 143}, + #endif + #ifdef RAND_R_UNABLE_TO_FETCH_DRBG + {"UNABLE_TO_FETCH_DRBG", ERR_LIB_RAND, RAND_R_UNABLE_TO_FETCH_DRBG}, + #else + {"UNABLE_TO_FETCH_DRBG", 36, 144}, + #endif + #ifdef RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER + {"UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER", ERR_LIB_RAND, RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER}, + #else + {"UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER", 36, 141}, + #endif + #ifdef RAND_R_UNABLE_TO_GET_PARENT_STRENGTH + {"UNABLE_TO_GET_PARENT_STRENGTH", ERR_LIB_RAND, RAND_R_UNABLE_TO_GET_PARENT_STRENGTH}, + #else + {"UNABLE_TO_GET_PARENT_STRENGTH", 36, 138}, + #endif + #ifdef RAND_R_UNABLE_TO_LOCK_PARENT + {"UNABLE_TO_LOCK_PARENT", ERR_LIB_RAND, RAND_R_UNABLE_TO_LOCK_PARENT}, + #else + {"UNABLE_TO_LOCK_PARENT", 36, 140}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_FLAGS + {"UNSUPPORTED_DRBG_FLAGS", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_FLAGS}, + #else + {"UNSUPPORTED_DRBG_FLAGS", 36, 132}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_TYPE + {"UNSUPPORTED_DRBG_TYPE", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_TYPE}, + #else + {"UNSUPPORTED_DRBG_TYPE", 36, 120}, + #endif + #ifdef RSA_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_RSA, RSA_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 4, 100}, + #endif + #ifdef RSA_R_BAD_E_VALUE + {"BAD_E_VALUE", ERR_LIB_RSA, RSA_R_BAD_E_VALUE}, + #else + {"BAD_E_VALUE", 4, 101}, + #endif + #ifdef RSA_R_BAD_FIXED_HEADER_DECRYPT + {"BAD_FIXED_HEADER_DECRYPT", ERR_LIB_RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT}, + #else + {"BAD_FIXED_HEADER_DECRYPT", 4, 102}, + #endif + #ifdef RSA_R_BAD_PAD_BYTE_COUNT + {"BAD_PAD_BYTE_COUNT", ERR_LIB_RSA, RSA_R_BAD_PAD_BYTE_COUNT}, + #else + {"BAD_PAD_BYTE_COUNT", 4, 103}, + #endif + #ifdef RSA_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_RSA, RSA_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 4, 104}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_01 + {"BLOCK_TYPE_IS_NOT_01", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_01}, + #else + {"BLOCK_TYPE_IS_NOT_01", 4, 106}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_02 + {"BLOCK_TYPE_IS_NOT_02", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_02}, + #else + {"BLOCK_TYPE_IS_NOT_02", 4, 107}, + #endif + #ifdef RSA_R_DATA_GREATER_THAN_MOD_LEN + {"DATA_GREATER_THAN_MOD_LEN", ERR_LIB_RSA, RSA_R_DATA_GREATER_THAN_MOD_LEN}, + #else + {"DATA_GREATER_THAN_MOD_LEN", 4, 108}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE + {"DATA_TOO_LARGE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE}, + #else + {"DATA_TOO_LARGE", 4, 109}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + {"DATA_TOO_LARGE_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE}, + #else + {"DATA_TOO_LARGE_FOR_KEY_SIZE", 4, 110}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_MODULUS + {"DATA_TOO_LARGE_FOR_MODULUS", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS}, + #else + {"DATA_TOO_LARGE_FOR_MODULUS", 4, 132}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL + {"DATA_TOO_SMALL", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL}, + #else + {"DATA_TOO_SMALL", 4, 111}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE + {"DATA_TOO_SMALL_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE}, + #else + {"DATA_TOO_SMALL_FOR_KEY_SIZE", 4, 122}, + #endif + #ifdef RSA_R_DIGEST_DOES_NOT_MATCH + {"DIGEST_DOES_NOT_MATCH", ERR_LIB_RSA, RSA_R_DIGEST_DOES_NOT_MATCH}, + #else + {"DIGEST_DOES_NOT_MATCH", 4, 158}, + #endif + #ifdef RSA_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 4, 145}, + #endif + #ifdef RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + {"DIGEST_TOO_BIG_FOR_RSA_KEY", ERR_LIB_RSA, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY}, + #else + {"DIGEST_TOO_BIG_FOR_RSA_KEY", 4, 112}, + #endif + #ifdef RSA_R_DMP1_NOT_CONGRUENT_TO_D + {"DMP1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMP1_NOT_CONGRUENT_TO_D}, + #else + {"DMP1_NOT_CONGRUENT_TO_D", 4, 124}, + #endif + #ifdef RSA_R_DMQ1_NOT_CONGRUENT_TO_D + {"DMQ1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMQ1_NOT_CONGRUENT_TO_D}, + #else + {"DMQ1_NOT_CONGRUENT_TO_D", 4, 125}, + #endif + #ifdef RSA_R_D_E_NOT_CONGRUENT_TO_1 + {"D_E_NOT_CONGRUENT_TO_1", ERR_LIB_RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1}, + #else + {"D_E_NOT_CONGRUENT_TO_1", 4, 123}, + #endif + #ifdef RSA_R_FIRST_OCTET_INVALID + {"FIRST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_FIRST_OCTET_INVALID}, + #else + {"FIRST_OCTET_INVALID", 4, 133}, + #endif + #ifdef RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_RSA, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 4, 144}, + #endif + #ifdef RSA_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 4, 157}, + #endif + #ifdef RSA_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 4, 143}, + #endif + #ifdef RSA_R_INVALID_HEADER + {"INVALID_HEADER", ERR_LIB_RSA, RSA_R_INVALID_HEADER}, + #else + {"INVALID_HEADER", 4, 137}, + #endif + #ifdef RSA_R_INVALID_KEYPAIR + {"INVALID_KEYPAIR", ERR_LIB_RSA, RSA_R_INVALID_KEYPAIR}, + #else + {"INVALID_KEYPAIR", 4, 171}, + #endif + #ifdef RSA_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 4, 173}, + #endif + #ifdef RSA_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_RSA, RSA_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 4, 160}, + #endif + #ifdef RSA_R_INVALID_MESSAGE_LENGTH + {"INVALID_MESSAGE_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_MESSAGE_LENGTH}, + #else + {"INVALID_MESSAGE_LENGTH", 4, 131}, + #endif + #ifdef RSA_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_RSA, RSA_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 4, 156}, + #endif + #ifdef RSA_R_INVALID_MODULUS + {"INVALID_MODULUS", ERR_LIB_RSA, RSA_R_INVALID_MODULUS}, + #else + {"INVALID_MODULUS", 4, 174}, + #endif + #ifdef RSA_R_INVALID_MULTI_PRIME_KEY + {"INVALID_MULTI_PRIME_KEY", ERR_LIB_RSA, RSA_R_INVALID_MULTI_PRIME_KEY}, + #else + {"INVALID_MULTI_PRIME_KEY", 4, 167}, + #endif + #ifdef RSA_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 4, 161}, + #endif + #ifdef RSA_R_INVALID_PADDING + {"INVALID_PADDING", ERR_LIB_RSA, RSA_R_INVALID_PADDING}, + #else + {"INVALID_PADDING", 4, 138}, + #endif + #ifdef RSA_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_RSA, RSA_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 4, 141}, + #endif + #ifdef RSA_R_INVALID_PSS_PARAMETERS + {"INVALID_PSS_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_PSS_PARAMETERS}, + #else + {"INVALID_PSS_PARAMETERS", 4, 149}, + #endif + #ifdef RSA_R_INVALID_PSS_SALTLEN + {"INVALID_PSS_SALTLEN", ERR_LIB_RSA, RSA_R_INVALID_PSS_SALTLEN}, + #else + {"INVALID_PSS_SALTLEN", 4, 146}, + #endif + #ifdef RSA_R_INVALID_REQUEST + {"INVALID_REQUEST", ERR_LIB_RSA, RSA_R_INVALID_REQUEST}, + #else + {"INVALID_REQUEST", 4, 175}, + #endif + #ifdef RSA_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 4, 150}, + #endif + #ifdef RSA_R_INVALID_STRENGTH + {"INVALID_STRENGTH", ERR_LIB_RSA, RSA_R_INVALID_STRENGTH}, + #else + {"INVALID_STRENGTH", 4, 176}, + #endif + #ifdef RSA_R_INVALID_TRAILER + {"INVALID_TRAILER", ERR_LIB_RSA, RSA_R_INVALID_TRAILER}, + #else + {"INVALID_TRAILER", 4, 139}, + #endif + #ifdef RSA_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 4, 142}, + #endif + #ifdef RSA_R_IQMP_NOT_INVERSE_OF_Q + {"IQMP_NOT_INVERSE_OF_Q", ERR_LIB_RSA, RSA_R_IQMP_NOT_INVERSE_OF_Q}, + #else + {"IQMP_NOT_INVERSE_OF_Q", 4, 126}, + #endif + #ifdef RSA_R_KEY_PRIME_NUM_INVALID + {"KEY_PRIME_NUM_INVALID", ERR_LIB_RSA, RSA_R_KEY_PRIME_NUM_INVALID}, + #else + {"KEY_PRIME_NUM_INVALID", 4, 165}, + #endif + #ifdef RSA_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_RSA, RSA_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 4, 120}, + #endif + #ifdef RSA_R_LAST_OCTET_INVALID + {"LAST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_LAST_OCTET_INVALID}, + #else + {"LAST_OCTET_INVALID", 4, 134}, + #endif + #ifdef RSA_R_MGF1_DIGEST_NOT_ALLOWED + {"MGF1_DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED}, + #else + {"MGF1_DIGEST_NOT_ALLOWED", 4, 152}, + #endif + #ifdef RSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_RSA, RSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 4, 179}, + #endif + #ifdef RSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_RSA, RSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 4, 105}, + #endif + #ifdef RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", ERR_LIB_RSA, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R}, + #else + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", 4, 168}, + #endif + #ifdef RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D}, + #else + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", 4, 169}, + #endif + #ifdef RSA_R_MP_R_NOT_PRIME + {"MP_R_NOT_PRIME", ERR_LIB_RSA, RSA_R_MP_R_NOT_PRIME}, + #else + {"MP_R_NOT_PRIME", 4, 170}, + #endif + #ifdef RSA_R_NO_PUBLIC_EXPONENT + {"NO_PUBLIC_EXPONENT", ERR_LIB_RSA, RSA_R_NO_PUBLIC_EXPONENT}, + #else + {"NO_PUBLIC_EXPONENT", 4, 140}, + #endif + #ifdef RSA_R_NULL_BEFORE_BLOCK_MISSING + {"NULL_BEFORE_BLOCK_MISSING", ERR_LIB_RSA, RSA_R_NULL_BEFORE_BLOCK_MISSING}, + #else + {"NULL_BEFORE_BLOCK_MISSING", 4, 113}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES}, + #else + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", 4, 172}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_P_Q + {"N_DOES_NOT_EQUAL_P_Q", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_P_Q}, + #else + {"N_DOES_NOT_EQUAL_P_Q", 4, 127}, + #endif + #ifdef RSA_R_OAEP_DECODING_ERROR + {"OAEP_DECODING_ERROR", ERR_LIB_RSA, RSA_R_OAEP_DECODING_ERROR}, + #else + {"OAEP_DECODING_ERROR", 4, 121}, + #endif + #ifdef RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_RSA, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 4, 148}, + #endif + #ifdef RSA_R_PADDING_CHECK_FAILED + {"PADDING_CHECK_FAILED", ERR_LIB_RSA, RSA_R_PADDING_CHECK_FAILED}, + #else + {"PADDING_CHECK_FAILED", 4, 114}, + #endif + #ifdef RSA_R_PAIRWISE_TEST_FAILURE + {"PAIRWISE_TEST_FAILURE", ERR_LIB_RSA, RSA_R_PAIRWISE_TEST_FAILURE}, + #else + {"PAIRWISE_TEST_FAILURE", 4, 177}, + #endif + #ifdef RSA_R_PKCS_DECODING_ERROR + {"PKCS_DECODING_ERROR", ERR_LIB_RSA, RSA_R_PKCS_DECODING_ERROR}, + #else + {"PKCS_DECODING_ERROR", 4, 159}, + #endif + #ifdef RSA_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_RSA, RSA_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 4, 164}, + #endif + #ifdef RSA_R_PUB_EXPONENT_OUT_OF_RANGE + {"PUB_EXPONENT_OUT_OF_RANGE", ERR_LIB_RSA, RSA_R_PUB_EXPONENT_OUT_OF_RANGE}, + #else + {"PUB_EXPONENT_OUT_OF_RANGE", 4, 178}, + #endif + #ifdef RSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_RSA, RSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 4, 128}, + #endif + #ifdef RSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_RSA, RSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 4, 129}, + #endif + #ifdef RSA_R_RSA_OPERATIONS_NOT_SUPPORTED + {"RSA_OPERATIONS_NOT_SUPPORTED", ERR_LIB_RSA, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED}, + #else + {"RSA_OPERATIONS_NOT_SUPPORTED", 4, 130}, + #endif + #ifdef RSA_R_SLEN_CHECK_FAILED + {"SLEN_CHECK_FAILED", ERR_LIB_RSA, RSA_R_SLEN_CHECK_FAILED}, + #else + {"SLEN_CHECK_FAILED", 4, 136}, + #endif + #ifdef RSA_R_SLEN_RECOVERY_FAILED + {"SLEN_RECOVERY_FAILED", ERR_LIB_RSA, RSA_R_SLEN_RECOVERY_FAILED}, + #else + {"SLEN_RECOVERY_FAILED", 4, 135}, + #endif + #ifdef RSA_R_SSLV3_ROLLBACK_ATTACK + {"SSLV3_ROLLBACK_ATTACK", ERR_LIB_RSA, RSA_R_SSLV3_ROLLBACK_ATTACK}, + #else + {"SSLV3_ROLLBACK_ATTACK", 4, 115}, + #endif + #ifdef RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_RSA, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 4, 116}, + #endif + #ifdef RSA_R_UNKNOWN_ALGORITHM_TYPE + {"UNKNOWN_ALGORITHM_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_ALGORITHM_TYPE}, + #else + {"UNKNOWN_ALGORITHM_TYPE", 4, 117}, + #endif + #ifdef RSA_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 4, 166}, + #endif + #ifdef RSA_R_UNKNOWN_MASK_DIGEST + {"UNKNOWN_MASK_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_MASK_DIGEST}, + #else + {"UNKNOWN_MASK_DIGEST", 4, 151}, + #endif + #ifdef RSA_R_UNKNOWN_PADDING_TYPE + {"UNKNOWN_PADDING_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_PADDING_TYPE}, + #else + {"UNKNOWN_PADDING_TYPE", 4, 118}, + #endif + #ifdef RSA_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 4, 162}, + #endif + #ifdef RSA_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 4, 163}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_ALGORITHM + {"UNSUPPORTED_MASK_ALGORITHM", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_ALGORITHM}, + #else + {"UNSUPPORTED_MASK_ALGORITHM", 4, 153}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_PARAMETER + {"UNSUPPORTED_MASK_PARAMETER", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_PARAMETER}, + #else + {"UNSUPPORTED_MASK_PARAMETER", 4, 154}, + #endif + #ifdef RSA_R_UNSUPPORTED_SIGNATURE_TYPE + {"UNSUPPORTED_SIGNATURE_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_SIGNATURE_TYPE}, + #else + {"UNSUPPORTED_SIGNATURE_TYPE", 4, 155}, + #endif + #ifdef RSA_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_RSA, RSA_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 4, 147}, + #endif + #ifdef RSA_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_RSA, RSA_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 4, 119}, + #endif + #ifdef SM2_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_SM2, SM2_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 53, 100}, + #endif + #ifdef SM2_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SM2, SM2_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 53, 101}, + #endif + #ifdef SM2_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_SM2, SM2_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 53, 107}, + #endif + #ifdef SM2_R_DIST_ID_TOO_LARGE + {"DIST_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_DIST_ID_TOO_LARGE}, + #else + {"DIST_ID_TOO_LARGE", 53, 110}, + #endif + #ifdef SM2_R_ID_NOT_SET + {"ID_NOT_SET", ERR_LIB_SM2, SM2_R_ID_NOT_SET}, + #else + {"ID_NOT_SET", 53, 112}, + #endif + #ifdef SM2_R_ID_TOO_LARGE + {"ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_ID_TOO_LARGE}, + #else + {"ID_TOO_LARGE", 53, 111}, + #endif + #ifdef SM2_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_SM2, SM2_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 53, 108}, + #endif + #ifdef SM2_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_SM2, SM2_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 53, 102}, + #endif + #ifdef SM2_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_SM2, SM2_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 53, 103}, + #endif + #ifdef SM2_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_SM2, SM2_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 53, 104}, + #endif + #ifdef SM2_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_SM2, SM2_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 53, 105}, + #endif + #ifdef SM2_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_SM2, SM2_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 53, 113}, + #endif + #ifdef SM2_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_SM2, SM2_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 53, 109}, + #endif + #ifdef SM2_R_USER_ID_TOO_LARGE + {"USER_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_USER_ID_TOO_LARGE}, + #else + {"USER_ID_TOO_LARGE", 53, 106}, + #endif + #ifdef SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", ERR_LIB_SSL, SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY}, + #else + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", 20, 291}, + #endif + #ifdef SSL_R_APP_DATA_IN_HANDSHAKE + {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, SSL_R_APP_DATA_IN_HANDSHAKE}, + #else + {"APP_DATA_IN_HANDSHAKE", 20, 100}, + #endif + #ifdef SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT}, + #else + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", 20, 272}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE}, + #else + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", 20, 143}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE}, + #else + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, + #endif + #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC + {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, + #else + {"BAD_CHANGE_CIPHER_SPEC", 20, 103}, + #endif + #ifdef SSL_R_BAD_CIPHER + {"BAD_CIPHER", ERR_LIB_SSL, SSL_R_BAD_CIPHER}, + #else + {"BAD_CIPHER", 20, 186}, + #endif + #ifdef SSL_R_BAD_DATA + {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, + #else + {"BAD_DATA", 20, 390}, + #endif + #ifdef SSL_R_BAD_DATA_RETURNED_BY_CALLBACK + {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK}, + #else + {"BAD_DATA_RETURNED_BY_CALLBACK", 20, 106}, + #endif + #ifdef SSL_R_BAD_DECOMPRESSION + {"BAD_DECOMPRESSION", ERR_LIB_SSL, SSL_R_BAD_DECOMPRESSION}, + #else + {"BAD_DECOMPRESSION", 20, 107}, + #endif + #ifdef SSL_R_BAD_DH_VALUE + {"BAD_DH_VALUE", ERR_LIB_SSL, SSL_R_BAD_DH_VALUE}, + #else + {"BAD_DH_VALUE", 20, 102}, + #endif + #ifdef SSL_R_BAD_DIGEST_LENGTH + {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DIGEST_LENGTH}, + #else + {"BAD_DIGEST_LENGTH", 20, 111}, + #endif + #ifdef SSL_R_BAD_EARLY_DATA + {"BAD_EARLY_DATA", ERR_LIB_SSL, SSL_R_BAD_EARLY_DATA}, + #else + {"BAD_EARLY_DATA", 20, 233}, + #endif + #ifdef SSL_R_BAD_ECC_CERT + {"BAD_ECC_CERT", ERR_LIB_SSL, SSL_R_BAD_ECC_CERT}, + #else + {"BAD_ECC_CERT", 20, 304}, + #endif + #ifdef SSL_R_BAD_ECPOINT + {"BAD_ECPOINT", ERR_LIB_SSL, SSL_R_BAD_ECPOINT}, + #else + {"BAD_ECPOINT", 20, 306}, + #endif + #ifdef SSL_R_BAD_EXTENSION + {"BAD_EXTENSION", ERR_LIB_SSL, SSL_R_BAD_EXTENSION}, + #else + {"BAD_EXTENSION", 20, 110}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_LENGTH + {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_LENGTH}, + #else + {"BAD_HANDSHAKE_LENGTH", 20, 332}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_STATE + {"BAD_HANDSHAKE_STATE", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_STATE}, + #else + {"BAD_HANDSHAKE_STATE", 20, 236}, + #endif + #ifdef SSL_R_BAD_HELLO_REQUEST + {"BAD_HELLO_REQUEST", ERR_LIB_SSL, SSL_R_BAD_HELLO_REQUEST}, + #else + {"BAD_HELLO_REQUEST", 20, 105}, + #endif + #ifdef SSL_R_BAD_HRR_VERSION + {"BAD_HRR_VERSION", ERR_LIB_SSL, SSL_R_BAD_HRR_VERSION}, + #else + {"BAD_HRR_VERSION", 20, 263}, + #endif + #ifdef SSL_R_BAD_KEY_SHARE + {"BAD_KEY_SHARE", ERR_LIB_SSL, SSL_R_BAD_KEY_SHARE}, + #else + {"BAD_KEY_SHARE", 20, 108}, + #endif + #ifdef SSL_R_BAD_KEY_UPDATE + {"BAD_KEY_UPDATE", ERR_LIB_SSL, SSL_R_BAD_KEY_UPDATE}, + #else + {"BAD_KEY_UPDATE", 20, 122}, + #endif + #ifdef SSL_R_BAD_LEGACY_VERSION + {"BAD_LEGACY_VERSION", ERR_LIB_SSL, SSL_R_BAD_LEGACY_VERSION}, + #else + {"BAD_LEGACY_VERSION", 20, 292}, + #endif + #ifdef SSL_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_SSL, SSL_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 20, 271}, + #endif + #ifdef SSL_R_BAD_PACKET + {"BAD_PACKET", ERR_LIB_SSL, SSL_R_BAD_PACKET}, + #else + {"BAD_PACKET", 20, 240}, + #endif + #ifdef SSL_R_BAD_PACKET_LENGTH + {"BAD_PACKET_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PACKET_LENGTH}, + #else + {"BAD_PACKET_LENGTH", 20, 115}, + #endif + #ifdef SSL_R_BAD_PROTOCOL_VERSION_NUMBER + {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_BAD_PROTOCOL_VERSION_NUMBER}, + #else + {"BAD_PROTOCOL_VERSION_NUMBER", 20, 116}, + #endif + #ifdef SSL_R_BAD_PSK + {"BAD_PSK", ERR_LIB_SSL, SSL_R_BAD_PSK}, + #else + {"BAD_PSK", 20, 219}, + #endif + #ifdef SSL_R_BAD_PSK_IDENTITY + {"BAD_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_BAD_PSK_IDENTITY}, + #else + {"BAD_PSK_IDENTITY", 20, 114}, + #endif + #ifdef SSL_R_BAD_RECORD_TYPE + {"BAD_RECORD_TYPE", ERR_LIB_SSL, SSL_R_BAD_RECORD_TYPE}, + #else + {"BAD_RECORD_TYPE", 20, 443}, + #endif + #ifdef SSL_R_BAD_RSA_ENCRYPT + {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_ENCRYPT}, + #else + {"BAD_RSA_ENCRYPT", 20, 119}, + #endif + #ifdef SSL_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 20, 123}, + #endif + #ifdef SSL_R_BAD_SRP_A_LENGTH + {"BAD_SRP_A_LENGTH", ERR_LIB_SSL, SSL_R_BAD_SRP_A_LENGTH}, + #else + {"BAD_SRP_A_LENGTH", 20, 347}, + #endif + #ifdef SSL_R_BAD_SRP_PARAMETERS + {"BAD_SRP_PARAMETERS", ERR_LIB_SSL, SSL_R_BAD_SRP_PARAMETERS}, + #else + {"BAD_SRP_PARAMETERS", 20, 371}, + #endif + #ifdef SSL_R_BAD_SRTP_MKI_VALUE + {"BAD_SRTP_MKI_VALUE", ERR_LIB_SSL, SSL_R_BAD_SRTP_MKI_VALUE}, + #else + {"BAD_SRTP_MKI_VALUE", 20, 352}, + #endif + #ifdef SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST + {"BAD_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"BAD_SRTP_PROTECTION_PROFILE_LIST", 20, 353}, + #endif + #ifdef SSL_R_BAD_SSL_FILETYPE + {"BAD_SSL_FILETYPE", ERR_LIB_SSL, SSL_R_BAD_SSL_FILETYPE}, + #else + {"BAD_SSL_FILETYPE", 20, 124}, + #endif + #ifdef SSL_R_BAD_VALUE + {"BAD_VALUE", ERR_LIB_SSL, SSL_R_BAD_VALUE}, + #else + {"BAD_VALUE", 20, 384}, + #endif + #ifdef SSL_R_BAD_WRITE_RETRY + {"BAD_WRITE_RETRY", ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY}, + #else + {"BAD_WRITE_RETRY", 20, 127}, + #endif + #ifdef SSL_R_BINDER_DOES_NOT_VERIFY + {"BINDER_DOES_NOT_VERIFY", ERR_LIB_SSL, SSL_R_BINDER_DOES_NOT_VERIFY}, + #else + {"BINDER_DOES_NOT_VERIFY", 20, 253}, + #endif + #ifdef SSL_R_BIO_NOT_SET + {"BIO_NOT_SET", ERR_LIB_SSL, SSL_R_BIO_NOT_SET}, + #else + {"BIO_NOT_SET", 20, 128}, + #endif + #ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG + {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG}, + #else + {"BLOCK_CIPHER_PAD_IS_WRONG", 20, 129}, + #endif + #ifdef SSL_R_BN_LIB + {"BN_LIB", ERR_LIB_SSL, SSL_R_BN_LIB}, + #else + {"BN_LIB", 20, 130}, + #endif + #ifdef SSL_R_CALLBACK_FAILED + {"CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_CALLBACK_FAILED}, + #else + {"CALLBACK_FAILED", 20, 234}, + #endif + #ifdef SSL_R_CANNOT_CHANGE_CIPHER + {"CANNOT_CHANGE_CIPHER", ERR_LIB_SSL, SSL_R_CANNOT_CHANGE_CIPHER}, + #else + {"CANNOT_CHANGE_CIPHER", 20, 109}, + #endif + #ifdef SSL_R_CANNOT_GET_GROUP_NAME + {"CANNOT_GET_GROUP_NAME", ERR_LIB_SSL, SSL_R_CANNOT_GET_GROUP_NAME}, + #else + {"CANNOT_GET_GROUP_NAME", 20, 299}, + #endif + #ifdef SSL_R_CA_DN_LENGTH_MISMATCH + {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CA_DN_LENGTH_MISMATCH}, + #else + {"CA_DN_LENGTH_MISMATCH", 20, 131}, + #endif + #ifdef SSL_R_CA_KEY_TOO_SMALL + {"CA_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_CA_KEY_TOO_SMALL}, + #else + {"CA_KEY_TOO_SMALL", 20, 397}, + #endif + #ifdef SSL_R_CA_MD_TOO_WEAK + {"CA_MD_TOO_WEAK", ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK}, + #else + {"CA_MD_TOO_WEAK", 20, 398}, + #endif + #ifdef SSL_R_CCS_RECEIVED_EARLY + {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, SSL_R_CCS_RECEIVED_EARLY}, + #else + {"CCS_RECEIVED_EARLY", 20, 133}, + #endif + #ifdef SSL_R_CERTIFICATE_VERIFY_FAILED + {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED}, + #else + {"CERTIFICATE_VERIFY_FAILED", 20, 134}, + #endif + #ifdef SSL_R_CERT_CB_ERROR + {"CERT_CB_ERROR", ERR_LIB_SSL, SSL_R_CERT_CB_ERROR}, + #else + {"CERT_CB_ERROR", 20, 377}, + #endif + #ifdef SSL_R_CERT_LENGTH_MISMATCH + {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CERT_LENGTH_MISMATCH}, + #else + {"CERT_LENGTH_MISMATCH", 20, 135}, + #endif + #ifdef SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED + {"CIPHERSUITE_DIGEST_HAS_CHANGED", ERR_LIB_SSL, SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED}, + #else + {"CIPHERSUITE_DIGEST_HAS_CHANGED", 20, 218}, + #endif + #ifdef SSL_R_CIPHER_CODE_WRONG_LENGTH + {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, SSL_R_CIPHER_CODE_WRONG_LENGTH}, + #else + {"CIPHER_CODE_WRONG_LENGTH", 20, 137}, + #endif + #ifdef SSL_R_CLIENTHELLO_TLSEXT + {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_CLIENTHELLO_TLSEXT}, + #else + {"CLIENTHELLO_TLSEXT", 20, 226}, + #endif + #ifdef SSL_R_COMPRESSED_LENGTH_TOO_LONG + {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_COMPRESSED_LENGTH_TOO_LONG}, + #else + {"COMPRESSED_LENGTH_TOO_LONG", 20, 140}, + #endif + #ifdef SSL_R_COMPRESSION_DISABLED + {"COMPRESSION_DISABLED", ERR_LIB_SSL, SSL_R_COMPRESSION_DISABLED}, + #else + {"COMPRESSION_DISABLED", 20, 343}, + #endif + #ifdef SSL_R_COMPRESSION_FAILURE + {"COMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_COMPRESSION_FAILURE}, + #else + {"COMPRESSION_FAILURE", 20, 141}, + #endif + #ifdef SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE}, + #else + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", 20, 307}, + #endif + #ifdef SSL_R_COMPRESSION_LIBRARY_ERROR + {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, SSL_R_COMPRESSION_LIBRARY_ERROR}, + #else + {"COMPRESSION_LIBRARY_ERROR", 20, 142}, + #endif + #ifdef SSL_R_CONNECTION_TYPE_NOT_SET + {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET}, + #else + {"CONNECTION_TYPE_NOT_SET", 20, 144}, + #endif + #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED + {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, + #else + {"CONTEXT_NOT_DANE_ENABLED", 20, 167}, + #endif + #ifdef SSL_R_COOKIE_GEN_CALLBACK_FAILURE + {"COOKIE_GEN_CALLBACK_FAILURE", ERR_LIB_SSL, SSL_R_COOKIE_GEN_CALLBACK_FAILURE}, + #else + {"COOKIE_GEN_CALLBACK_FAILURE", 20, 400}, + #endif + #ifdef SSL_R_COOKIE_MISMATCH + {"COOKIE_MISMATCH", ERR_LIB_SSL, SSL_R_COOKIE_MISMATCH}, + #else + {"COOKIE_MISMATCH", 20, 308}, + #endif + #ifdef SSL_R_COPY_PARAMETERS_FAILED + {"COPY_PARAMETERS_FAILED", ERR_LIB_SSL, SSL_R_COPY_PARAMETERS_FAILED}, + #else + {"COPY_PARAMETERS_FAILED", 20, 296}, + #endif + #ifdef SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED}, + #else + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", 20, 206}, + #endif + #ifdef SSL_R_DANE_ALREADY_ENABLED + {"DANE_ALREADY_ENABLED", ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED}, + #else + {"DANE_ALREADY_ENABLED", 20, 172}, + #endif + #ifdef SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL}, + #else + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", 20, 173}, + #endif + #ifdef SSL_R_DANE_NOT_ENABLED + {"DANE_NOT_ENABLED", ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED}, + #else + {"DANE_NOT_ENABLED", 20, 175}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE + {"DANE_TLSA_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE", 20, 180}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", 20, 184}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DATA_LENGTH + {"DANE_TLSA_BAD_DATA_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH}, + #else + {"DANE_TLSA_BAD_DATA_LENGTH", 20, 189}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH + {"DANE_TLSA_BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH}, + #else + {"DANE_TLSA_BAD_DIGEST_LENGTH", 20, 192}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_MATCHING_TYPE + {"DANE_TLSA_BAD_MATCHING_TYPE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE}, + #else + {"DANE_TLSA_BAD_MATCHING_TYPE", 20, 200}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_PUBLIC_KEY + {"DANE_TLSA_BAD_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY}, + #else + {"DANE_TLSA_BAD_PUBLIC_KEY", 20, 201}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_SELECTOR + {"DANE_TLSA_BAD_SELECTOR", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR}, + #else + {"DANE_TLSA_BAD_SELECTOR", 20, 202}, + #endif + #ifdef SSL_R_DANE_TLSA_NULL_DATA + {"DANE_TLSA_NULL_DATA", ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA}, + #else + {"DANE_TLSA_NULL_DATA", 20, 203}, + #endif + #ifdef SSL_R_DATA_BETWEEN_CCS_AND_FINISHED + {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED}, + #else + {"DATA_BETWEEN_CCS_AND_FINISHED", 20, 145}, + #endif + #ifdef SSL_R_DATA_LENGTH_TOO_LONG + {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG}, + #else + {"DATA_LENGTH_TOO_LONG", 20, 146}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED + {"DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED}, + #else + {"DECRYPTION_FAILED", 20, 147}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC}, + #else + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", 20, 281}, + #endif + #ifdef SSL_R_DH_KEY_TOO_SMALL + {"DH_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL}, + #else + {"DH_KEY_TOO_SMALL", 20, 394}, + #endif + #ifdef SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG}, + #else + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", 20, 148}, + #endif + #ifdef SSL_R_DIGEST_CHECK_FAILED + {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, SSL_R_DIGEST_CHECK_FAILED}, + #else + {"DIGEST_CHECK_FAILED", 20, 149}, + #endif + #ifdef SSL_R_DTLS_MESSAGE_TOO_BIG + {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, SSL_R_DTLS_MESSAGE_TOO_BIG}, + #else + {"DTLS_MESSAGE_TOO_BIG", 20, 334}, + #endif + #ifdef SSL_R_DUPLICATE_COMPRESSION_ID + {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, SSL_R_DUPLICATE_COMPRESSION_ID}, + #else + {"DUPLICATE_COMPRESSION_ID", 20, 309}, + #endif + #ifdef SSL_R_ECC_CERT_NOT_FOR_SIGNING + {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING}, + #else + {"ECC_CERT_NOT_FOR_SIGNING", 20, 318}, + #endif + #ifdef SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE + {"ECDH_REQUIRED_FOR_SUITEB_MODE", ERR_LIB_SSL, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE}, + #else + {"ECDH_REQUIRED_FOR_SUITEB_MODE", 20, 374}, + #endif + #ifdef SSL_R_EE_KEY_TOO_SMALL + {"EE_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_EE_KEY_TOO_SMALL}, + #else + {"EE_KEY_TOO_SMALL", 20, 399}, + #endif + #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", 20, 354}, + #endif + #ifdef SSL_R_ENCRYPTED_LENGTH_TOO_LONG + {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_ENCRYPTED_LENGTH_TOO_LONG}, + #else + {"ENCRYPTED_LENGTH_TOO_LONG", 20, 150}, + #endif + #ifdef SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST + {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST}, + #else + {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, + #endif + #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN + {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, + #else + {"ERROR_SETTING_TLSA_BASE_DOMAIN", 20, 204}, + #endif + #ifdef SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE + {"EXCEEDS_MAX_FRAGMENT_SIZE", ERR_LIB_SSL, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE}, + #else + {"EXCEEDS_MAX_FRAGMENT_SIZE", 20, 194}, + #endif + #ifdef SSL_R_EXCESSIVE_MESSAGE_SIZE + {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, SSL_R_EXCESSIVE_MESSAGE_SIZE}, + #else + {"EXCESSIVE_MESSAGE_SIZE", 20, 152}, + #endif + #ifdef SSL_R_EXTENSION_NOT_RECEIVED + {"EXTENSION_NOT_RECEIVED", ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED}, + #else + {"EXTENSION_NOT_RECEIVED", 20, 279}, + #endif + #ifdef SSL_R_EXTRA_DATA_IN_MESSAGE + {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, SSL_R_EXTRA_DATA_IN_MESSAGE}, + #else + {"EXTRA_DATA_IN_MESSAGE", 20, 153}, + #endif + #ifdef SSL_R_EXT_LENGTH_MISMATCH + {"EXT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_EXT_LENGTH_MISMATCH}, + #else + {"EXT_LENGTH_MISMATCH", 20, 163}, + #endif + #ifdef SSL_R_FAILED_TO_INIT_ASYNC + {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, + #else + {"FAILED_TO_INIT_ASYNC", 20, 405}, + #endif + #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO + {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, + #else + {"FRAGMENTED_CLIENT_HELLO", 20, 401}, + #endif + #ifdef SSL_R_GOT_A_FIN_BEFORE_A_CCS + {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, SSL_R_GOT_A_FIN_BEFORE_A_CCS}, + #else + {"GOT_A_FIN_BEFORE_A_CCS", 20, 154}, + #endif + #ifdef SSL_R_HTTPS_PROXY_REQUEST + {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, SSL_R_HTTPS_PROXY_REQUEST}, + #else + {"HTTPS_PROXY_REQUEST", 20, 155}, + #endif + #ifdef SSL_R_HTTP_REQUEST + {"HTTP_REQUEST", ERR_LIB_SSL, SSL_R_HTTP_REQUEST}, + #else + {"HTTP_REQUEST", 20, 156}, + #endif + #ifdef SSL_R_ILLEGAL_POINT_COMPRESSION + {"ILLEGAL_POINT_COMPRESSION", ERR_LIB_SSL, SSL_R_ILLEGAL_POINT_COMPRESSION}, + #else + {"ILLEGAL_POINT_COMPRESSION", 20, 162}, + #endif + #ifdef SSL_R_ILLEGAL_SUITEB_DIGEST + {"ILLEGAL_SUITEB_DIGEST", ERR_LIB_SSL, SSL_R_ILLEGAL_SUITEB_DIGEST}, + #else + {"ILLEGAL_SUITEB_DIGEST", 20, 380}, + #endif + #ifdef SSL_R_INAPPROPRIATE_FALLBACK + {"INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_INAPPROPRIATE_FALLBACK}, + #else + {"INAPPROPRIATE_FALLBACK", 20, 373}, + #endif + #ifdef SSL_R_INCONSISTENT_COMPRESSION + {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, SSL_R_INCONSISTENT_COMPRESSION}, + #else + {"INCONSISTENT_COMPRESSION", 20, 340}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_ALPN + {"INCONSISTENT_EARLY_DATA_ALPN", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_ALPN}, + #else + {"INCONSISTENT_EARLY_DATA_ALPN", 20, 222}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_SNI + {"INCONSISTENT_EARLY_DATA_SNI", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_SNI}, + #else + {"INCONSISTENT_EARLY_DATA_SNI", 20, 231}, + #endif + #ifdef SSL_R_INCONSISTENT_EXTMS + {"INCONSISTENT_EXTMS", ERR_LIB_SSL, SSL_R_INCONSISTENT_EXTMS}, + #else + {"INCONSISTENT_EXTMS", 20, 104}, + #endif + #ifdef SSL_R_INSUFFICIENT_SECURITY + {"INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_INSUFFICIENT_SECURITY}, + #else + {"INSUFFICIENT_SECURITY", 20, 241}, + #endif + #ifdef SSL_R_INVALID_ALERT + {"INVALID_ALERT", ERR_LIB_SSL, SSL_R_INVALID_ALERT}, + #else + {"INVALID_ALERT", 20, 205}, + #endif + #ifdef SSL_R_INVALID_CCS_MESSAGE + {"INVALID_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_INVALID_CCS_MESSAGE}, + #else + {"INVALID_CCS_MESSAGE", 20, 260}, + #endif + #ifdef SSL_R_INVALID_CERTIFICATE_OR_ALG + {"INVALID_CERTIFICATE_OR_ALG", ERR_LIB_SSL, SSL_R_INVALID_CERTIFICATE_OR_ALG}, + #else + {"INVALID_CERTIFICATE_OR_ALG", 20, 238}, + #endif + #ifdef SSL_R_INVALID_COMMAND + {"INVALID_COMMAND", ERR_LIB_SSL, SSL_R_INVALID_COMMAND}, + #else + {"INVALID_COMMAND", 20, 280}, + #endif + #ifdef SSL_R_INVALID_COMPRESSION_ALGORITHM + {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_INVALID_COMPRESSION_ALGORITHM}, + #else + {"INVALID_COMPRESSION_ALGORITHM", 20, 341}, + #endif + #ifdef SSL_R_INVALID_CONFIG + {"INVALID_CONFIG", ERR_LIB_SSL, SSL_R_INVALID_CONFIG}, + #else + {"INVALID_CONFIG", 20, 283}, + #endif + #ifdef SSL_R_INVALID_CONFIGURATION_NAME + {"INVALID_CONFIGURATION_NAME", ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME}, + #else + {"INVALID_CONFIGURATION_NAME", 20, 113}, + #endif + #ifdef SSL_R_INVALID_CONTEXT + {"INVALID_CONTEXT", ERR_LIB_SSL, SSL_R_INVALID_CONTEXT}, + #else + {"INVALID_CONTEXT", 20, 282}, + #endif + #ifdef SSL_R_INVALID_CT_VALIDATION_TYPE + {"INVALID_CT_VALIDATION_TYPE", ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE}, + #else + {"INVALID_CT_VALIDATION_TYPE", 20, 212}, + #endif + #ifdef SSL_R_INVALID_KEY_UPDATE_TYPE + {"INVALID_KEY_UPDATE_TYPE", ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE}, + #else + {"INVALID_KEY_UPDATE_TYPE", 20, 120}, + #endif + #ifdef SSL_R_INVALID_MAX_EARLY_DATA + {"INVALID_MAX_EARLY_DATA", ERR_LIB_SSL, SSL_R_INVALID_MAX_EARLY_DATA}, + #else + {"INVALID_MAX_EARLY_DATA", 20, 174}, + #endif + #ifdef SSL_R_INVALID_NULL_CMD_NAME + {"INVALID_NULL_CMD_NAME", ERR_LIB_SSL, SSL_R_INVALID_NULL_CMD_NAME}, + #else + {"INVALID_NULL_CMD_NAME", 20, 385}, + #endif + #ifdef SSL_R_INVALID_SEQUENCE_NUMBER + {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, + #else + {"INVALID_SEQUENCE_NUMBER", 20, 402}, + #endif + #ifdef SSL_R_INVALID_SERVERINFO_DATA + {"INVALID_SERVERINFO_DATA", ERR_LIB_SSL, SSL_R_INVALID_SERVERINFO_DATA}, + #else + {"INVALID_SERVERINFO_DATA", 20, 388}, + #endif + #ifdef SSL_R_INVALID_SESSION_ID + {"INVALID_SESSION_ID", ERR_LIB_SSL, SSL_R_INVALID_SESSION_ID}, + #else + {"INVALID_SESSION_ID", 20, 999}, + #endif + #ifdef SSL_R_INVALID_SRP_USERNAME + {"INVALID_SRP_USERNAME", ERR_LIB_SSL, SSL_R_INVALID_SRP_USERNAME}, + #else + {"INVALID_SRP_USERNAME", 20, 357}, + #endif + #ifdef SSL_R_INVALID_STATUS_RESPONSE + {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_INVALID_STATUS_RESPONSE}, + #else + {"INVALID_STATUS_RESPONSE", 20, 328}, + #endif + #ifdef SSL_R_INVALID_TICKET_KEYS_LENGTH + {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH}, + #else + {"INVALID_TICKET_KEYS_LENGTH", 20, 325}, + #endif + #ifdef SSL_R_LENGTH_MISMATCH + {"LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_LENGTH_MISMATCH}, + #else + {"LENGTH_MISMATCH", 20, 159}, + #endif + #ifdef SSL_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 20, 404}, + #endif + #ifdef SSL_R_LENGTH_TOO_SHORT + {"LENGTH_TOO_SHORT", ERR_LIB_SSL, SSL_R_LENGTH_TOO_SHORT}, + #else + {"LENGTH_TOO_SHORT", 20, 160}, + #endif + #ifdef SSL_R_LIBRARY_BUG + {"LIBRARY_BUG", ERR_LIB_SSL, SSL_R_LIBRARY_BUG}, + #else + {"LIBRARY_BUG", 20, 274}, + #endif + #ifdef SSL_R_LIBRARY_HAS_NO_CIPHERS + {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS}, + #else + {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, + #endif + #ifdef SSL_R_MISSING_DSA_SIGNING_CERT + {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, + #else + {"MISSING_DSA_SIGNING_CERT", 20, 165}, + #endif + #ifdef SSL_R_MISSING_ECDSA_SIGNING_CERT + {"MISSING_ECDSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_ECDSA_SIGNING_CERT}, + #else + {"MISSING_ECDSA_SIGNING_CERT", 20, 381}, + #endif + #ifdef SSL_R_MISSING_FATAL + {"MISSING_FATAL", ERR_LIB_SSL, SSL_R_MISSING_FATAL}, + #else + {"MISSING_FATAL", 20, 256}, + #endif + #ifdef SSL_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_SSL, SSL_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 20, 290}, + #endif + #ifdef SSL_R_MISSING_RSA_CERTIFICATE + {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, SSL_R_MISSING_RSA_CERTIFICATE}, + #else + {"MISSING_RSA_CERTIFICATE", 20, 168}, + #endif + #ifdef SSL_R_MISSING_RSA_ENCRYPTING_CERT + {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_ENCRYPTING_CERT}, + #else + {"MISSING_RSA_ENCRYPTING_CERT", 20, 169}, + #endif + #ifdef SSL_R_MISSING_RSA_SIGNING_CERT + {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_SIGNING_CERT}, + #else + {"MISSING_RSA_SIGNING_CERT", 20, 170}, + #endif + #ifdef SSL_R_MISSING_SIGALGS_EXTENSION + {"MISSING_SIGALGS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SIGALGS_EXTENSION}, + #else + {"MISSING_SIGALGS_EXTENSION", 20, 112}, + #endif + #ifdef SSL_R_MISSING_SIGNING_CERT + {"MISSING_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_SIGNING_CERT}, + #else + {"MISSING_SIGNING_CERT", 20, 221}, + #endif + #ifdef SSL_R_MISSING_SRP_PARAM + {"MISSING_SRP_PARAM", ERR_LIB_SSL, SSL_R_MISSING_SRP_PARAM}, + #else + {"MISSING_SRP_PARAM", 20, 358}, + #endif + #ifdef SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION + {"MISSING_SUPPORTED_GROUPS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION}, + #else + {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, + #endif + #ifdef SSL_R_MISSING_TMP_DH_KEY + {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, + #else + {"MISSING_TMP_DH_KEY", 20, 171}, + #endif + #ifdef SSL_R_MISSING_TMP_ECDH_KEY + {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_ECDH_KEY}, + #else + {"MISSING_TMP_ECDH_KEY", 20, 311}, + #endif + #ifdef SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", ERR_LIB_SSL, SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA}, + #else + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", 20, 293}, + #endif + #ifdef SSL_R_NOT_ON_RECORD_BOUNDARY + {"NOT_ON_RECORD_BOUNDARY", ERR_LIB_SSL, SSL_R_NOT_ON_RECORD_BOUNDARY}, + #else + {"NOT_ON_RECORD_BOUNDARY", 20, 182}, + #endif + #ifdef SSL_R_NOT_REPLACING_CERTIFICATE + {"NOT_REPLACING_CERTIFICATE", ERR_LIB_SSL, SSL_R_NOT_REPLACING_CERTIFICATE}, + #else + {"NOT_REPLACING_CERTIFICATE", 20, 289}, + #endif + #ifdef SSL_R_NOT_SERVER + {"NOT_SERVER", ERR_LIB_SSL, SSL_R_NOT_SERVER}, + #else + {"NOT_SERVER", 20, 284}, + #endif + #ifdef SSL_R_NO_APPLICATION_PROTOCOL + {"NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_NO_APPLICATION_PROTOCOL}, + #else + {"NO_APPLICATION_PROTOCOL", 20, 235}, + #endif + #ifdef SSL_R_NO_CERTIFICATES_RETURNED + {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATES_RETURNED}, + #else + {"NO_CERTIFICATES_RETURNED", 20, 176}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_ASSIGNED + {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED}, + #else + {"NO_CERTIFICATE_ASSIGNED", 20, 177}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_SET + {"NO_CERTIFICATE_SET", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SET}, + #else + {"NO_CERTIFICATE_SET", 20, 179}, + #endif + #ifdef SSL_R_NO_CHANGE_FOLLOWING_HRR + {"NO_CHANGE_FOLLOWING_HRR", ERR_LIB_SSL, SSL_R_NO_CHANGE_FOLLOWING_HRR}, + #else + {"NO_CHANGE_FOLLOWING_HRR", 20, 214}, + #endif + #ifdef SSL_R_NO_CIPHERS_AVAILABLE + {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_CIPHERS_AVAILABLE}, + #else + {"NO_CIPHERS_AVAILABLE", 20, 181}, + #endif + #ifdef SSL_R_NO_CIPHERS_SPECIFIED + {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED}, + #else + {"NO_CIPHERS_SPECIFIED", 20, 183}, + #endif + #ifdef SSL_R_NO_CIPHER_MATCH + {"NO_CIPHER_MATCH", ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH}, + #else + {"NO_CIPHER_MATCH", 20, 185}, + #endif + #ifdef SSL_R_NO_CLIENT_CERT_METHOD + {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD}, + #else + {"NO_CLIENT_CERT_METHOD", 20, 331}, + #endif + #ifdef SSL_R_NO_COMPRESSION_SPECIFIED + {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_COMPRESSION_SPECIFIED}, + #else + {"NO_COMPRESSION_SPECIFIED", 20, 187}, + #endif + #ifdef SSL_R_NO_COOKIE_CALLBACK_SET + {"NO_COOKIE_CALLBACK_SET", ERR_LIB_SSL, SSL_R_NO_COOKIE_CALLBACK_SET}, + #else + {"NO_COOKIE_CALLBACK_SET", 20, 287}, + #endif + #ifdef SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER}, + #else + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", 20, 330}, + #endif + #ifdef SSL_R_NO_METHOD_SPECIFIED + {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED}, + #else + {"NO_METHOD_SPECIFIED", 20, 188}, + #endif + #ifdef SSL_R_NO_PEM_EXTENSIONS + {"NO_PEM_EXTENSIONS", ERR_LIB_SSL, SSL_R_NO_PEM_EXTENSIONS}, + #else + {"NO_PEM_EXTENSIONS", 20, 389}, + #endif + #ifdef SSL_R_NO_PRIVATE_KEY_ASSIGNED + {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED}, + #else + {"NO_PRIVATE_KEY_ASSIGNED", 20, 190}, + #endif + #ifdef SSL_R_NO_PROTOCOLS_AVAILABLE + {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_PROTOCOLS_AVAILABLE}, + #else + {"NO_PROTOCOLS_AVAILABLE", 20, 191}, + #endif + #ifdef SSL_R_NO_RENEGOTIATION + {"NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION}, + #else + {"NO_RENEGOTIATION", 20, 339}, + #endif + #ifdef SSL_R_NO_REQUIRED_DIGEST + {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, SSL_R_NO_REQUIRED_DIGEST}, + #else + {"NO_REQUIRED_DIGEST", 20, 324}, + #endif + #ifdef SSL_R_NO_SHARED_CIPHER + {"NO_SHARED_CIPHER", ERR_LIB_SSL, SSL_R_NO_SHARED_CIPHER}, + #else + {"NO_SHARED_CIPHER", 20, 193}, + #endif + #ifdef SSL_R_NO_SHARED_GROUPS + {"NO_SHARED_GROUPS", ERR_LIB_SSL, SSL_R_NO_SHARED_GROUPS}, + #else + {"NO_SHARED_GROUPS", 20, 410}, + #endif + #ifdef SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS + {"NO_SHARED_SIGNATURE_ALGORITHMS", ERR_LIB_SSL, SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS}, + #else + {"NO_SHARED_SIGNATURE_ALGORITHMS", 20, 376}, + #endif + #ifdef SSL_R_NO_SRTP_PROFILES + {"NO_SRTP_PROFILES", ERR_LIB_SSL, SSL_R_NO_SRTP_PROFILES}, + #else + {"NO_SRTP_PROFILES", 20, 359}, + #endif + #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM + {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM}, + #else + {"NO_SUITABLE_DIGEST_ALGORITHM", 20, 297}, + #endif + #ifdef SSL_R_NO_SUITABLE_GROUPS + {"NO_SUITABLE_GROUPS", ERR_LIB_SSL, SSL_R_NO_SUITABLE_GROUPS}, + #else + {"NO_SUITABLE_GROUPS", 20, 295}, + #endif + #ifdef SSL_R_NO_SUITABLE_KEY_SHARE + {"NO_SUITABLE_KEY_SHARE", ERR_LIB_SSL, SSL_R_NO_SUITABLE_KEY_SHARE}, + #else + {"NO_SUITABLE_KEY_SHARE", 20, 101}, + #endif + #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM + {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, + #else + {"NO_SUITABLE_SIGNATURE_ALGORITHM", 20, 118}, + #endif + #ifdef SSL_R_NO_VALID_SCTS + {"NO_VALID_SCTS", ERR_LIB_SSL, SSL_R_NO_VALID_SCTS}, + #else + {"NO_VALID_SCTS", 20, 216}, + #endif + #ifdef SSL_R_NO_VERIFY_COOKIE_CALLBACK + {"NO_VERIFY_COOKIE_CALLBACK", ERR_LIB_SSL, SSL_R_NO_VERIFY_COOKIE_CALLBACK}, + #else + {"NO_VERIFY_COOKIE_CALLBACK", 20, 403}, + #endif + #ifdef SSL_R_NULL_SSL_CTX + {"NULL_SSL_CTX", ERR_LIB_SSL, SSL_R_NULL_SSL_CTX}, + #else + {"NULL_SSL_CTX", 20, 195}, + #endif + #ifdef SSL_R_NULL_SSL_METHOD_PASSED + {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED}, + #else + {"NULL_SSL_METHOD_PASSED", 20, 196}, + #endif + #ifdef SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED + {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED}, + #else + {"OLD_SESSION_CIPHER_NOT_RETURNED", 20, 197}, + #endif + #ifdef SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED}, + #else + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", 20, 344}, + #endif + #ifdef SSL_R_OVERFLOW_ERROR + {"OVERFLOW_ERROR", ERR_LIB_SSL, SSL_R_OVERFLOW_ERROR}, + #else + {"OVERFLOW_ERROR", 20, 237}, + #endif + #ifdef SSL_R_PACKET_LENGTH_TOO_LONG + {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PACKET_LENGTH_TOO_LONG}, + #else + {"PACKET_LENGTH_TOO_LONG", 20, 198}, + #endif + #ifdef SSL_R_PARSE_TLSEXT + {"PARSE_TLSEXT", ERR_LIB_SSL, SSL_R_PARSE_TLSEXT}, + #else + {"PARSE_TLSEXT", 20, 227}, + #endif + #ifdef SSL_R_PATH_TOO_LONG + {"PATH_TOO_LONG", ERR_LIB_SSL, SSL_R_PATH_TOO_LONG}, + #else + {"PATH_TOO_LONG", 20, 270}, + #endif + #ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE}, + #else + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", 20, 199}, + #endif + #ifdef SSL_R_PEM_NAME_BAD_PREFIX + {"PEM_NAME_BAD_PREFIX", ERR_LIB_SSL, SSL_R_PEM_NAME_BAD_PREFIX}, + #else + {"PEM_NAME_BAD_PREFIX", 20, 391}, + #endif + #ifdef SSL_R_PEM_NAME_TOO_SHORT + {"PEM_NAME_TOO_SHORT", ERR_LIB_SSL, SSL_R_PEM_NAME_TOO_SHORT}, + #else + {"PEM_NAME_TOO_SHORT", 20, 392}, + #endif + #ifdef SSL_R_PIPELINE_FAILURE + {"PIPELINE_FAILURE", ERR_LIB_SSL, SSL_R_PIPELINE_FAILURE}, + #else + {"PIPELINE_FAILURE", 20, 406}, + #endif + #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, + #else + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", 20, 278}, + #endif + #ifdef SSL_R_PRIVATE_KEY_MISMATCH + {"PRIVATE_KEY_MISMATCH", ERR_LIB_SSL, SSL_R_PRIVATE_KEY_MISMATCH}, + #else + {"PRIVATE_KEY_MISMATCH", 20, 288}, + #endif + #ifdef SSL_R_PROTOCOL_IS_SHUTDOWN + {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN}, + #else + {"PROTOCOL_IS_SHUTDOWN", 20, 207}, + #endif + #ifdef SSL_R_PSK_IDENTITY_NOT_FOUND + {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, SSL_R_PSK_IDENTITY_NOT_FOUND}, + #else + {"PSK_IDENTITY_NOT_FOUND", 20, 223}, + #endif + #ifdef SSL_R_PSK_NO_CLIENT_CB + {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, SSL_R_PSK_NO_CLIENT_CB}, + #else + {"PSK_NO_CLIENT_CB", 20, 224}, + #endif + #ifdef SSL_R_PSK_NO_SERVER_CB + {"PSK_NO_SERVER_CB", ERR_LIB_SSL, SSL_R_PSK_NO_SERVER_CB}, + #else + {"PSK_NO_SERVER_CB", 20, 225}, + #endif + #ifdef SSL_R_READ_BIO_NOT_SET + {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, + #else + {"READ_BIO_NOT_SET", 20, 211}, + #endif + #ifdef SSL_R_READ_TIMEOUT_EXPIRED + {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, SSL_R_READ_TIMEOUT_EXPIRED}, + #else + {"READ_TIMEOUT_EXPIRED", 20, 312}, + #endif + #ifdef SSL_R_RECORD_LENGTH_MISMATCH + {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, + #else + {"RECORD_LENGTH_MISMATCH", 20, 213}, + #endif + #ifdef SSL_R_RECORD_TOO_SMALL + {"RECORD_TOO_SMALL", ERR_LIB_SSL, SSL_R_RECORD_TOO_SMALL}, + #else + {"RECORD_TOO_SMALL", 20, 298}, + #endif + #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG + {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, + #else + {"RENEGOTIATE_EXT_TOO_LONG", 20, 335}, + #endif + #ifdef SSL_R_RENEGOTIATION_ENCODING_ERR + {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, SSL_R_RENEGOTIATION_ENCODING_ERR}, + #else + {"RENEGOTIATION_ENCODING_ERR", 20, 336}, + #endif + #ifdef SSL_R_RENEGOTIATION_MISMATCH + {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, SSL_R_RENEGOTIATION_MISMATCH}, + #else + {"RENEGOTIATION_MISMATCH", 20, 337}, + #endif + #ifdef SSL_R_REQUEST_PENDING + {"REQUEST_PENDING", ERR_LIB_SSL, SSL_R_REQUEST_PENDING}, + #else + {"REQUEST_PENDING", 20, 285}, + #endif + #ifdef SSL_R_REQUEST_SENT + {"REQUEST_SENT", ERR_LIB_SSL, SSL_R_REQUEST_SENT}, + #else + {"REQUEST_SENT", 20, 286}, + #endif + #ifdef SSL_R_REQUIRED_CIPHER_MISSING + {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_CIPHER_MISSING}, + #else + {"REQUIRED_CIPHER_MISSING", 20, 215}, + #endif + #ifdef SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING}, + #else + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", 20, 342}, + #endif + #ifdef SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING}, + #else + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", 20, 345}, + #endif + #ifdef SSL_R_SCT_VERIFICATION_FAILED + {"SCT_VERIFICATION_FAILED", ERR_LIB_SSL, SSL_R_SCT_VERIFICATION_FAILED}, + #else + {"SCT_VERIFICATION_FAILED", 20, 208}, + #endif + #ifdef SSL_R_SERVERHELLO_TLSEXT + {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, + #else + {"SERVERHELLO_TLSEXT", 20, 275}, + #endif + #ifdef SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED + {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED}, + #else + {"SESSION_ID_CONTEXT_UNINITIALIZED", 20, 277}, + #endif + #ifdef SSL_R_SHUTDOWN_WHILE_IN_INIT + {"SHUTDOWN_WHILE_IN_INIT", ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT}, + #else + {"SHUTDOWN_WHILE_IN_INIT", 20, 407}, + #endif + #ifdef SSL_R_SIGNATURE_ALGORITHMS_ERROR + {"SIGNATURE_ALGORITHMS_ERROR", ERR_LIB_SSL, SSL_R_SIGNATURE_ALGORITHMS_ERROR}, + #else + {"SIGNATURE_ALGORITHMS_ERROR", 20, 360}, + #endif + #ifdef SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE}, + #else + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", 20, 220}, + #endif + #ifdef SSL_R_SRP_A_CALC + {"SRP_A_CALC", ERR_LIB_SSL, SSL_R_SRP_A_CALC}, + #else + {"SRP_A_CALC", 20, 361}, + #endif + #ifdef SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", ERR_LIB_SSL, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES}, + #else + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", 20, 362}, + #endif + #ifdef SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", ERR_LIB_SSL, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG}, + #else + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", 20, 363}, + #endif + #ifdef SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE + {"SRTP_UNKNOWN_PROTECTION_PROFILE", ERR_LIB_SSL, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE}, + #else + {"SRTP_UNKNOWN_PROTECTION_PROFILE", 20, 364}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH}, + #else + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", 20, 232}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME + {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME}, + #else + {"SSL3_EXT_INVALID_SERVERNAME", 20, 319}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE}, + #else + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", 20, 320}, + #endif + #ifdef SSL_R_SSL3_SESSION_ID_TOO_LONG + {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_LONG}, + #else + {"SSL3_SESSION_ID_TOO_LONG", 20, 300}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE + {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, + #else + {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC + {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, + #else + {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, + #else + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED + {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, + #else + {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, + #else + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, + #endif + #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, + #else + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, + #endif + #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE + {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, + #else + {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, + #endif + #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER + {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, + #else + {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, + #endif + #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE + {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, + #else + {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, + #else + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, + #else + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 20, 117}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 20, 125}, + #endif + #ifdef SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION}, + #else + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", 20, 228}, + #endif + #ifdef SSL_R_SSL_HANDSHAKE_FAILURE + {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE}, + #else + {"SSL_HANDSHAKE_FAILURE", 20, 229}, + #endif + #ifdef SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS + {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS}, + #else + {"SSL_LIBRARY_HAS_NO_CIPHERS", 20, 230}, + #endif + #ifdef SSL_R_SSL_NEGATIVE_LENGTH + {"SSL_NEGATIVE_LENGTH", ERR_LIB_SSL, SSL_R_SSL_NEGATIVE_LENGTH}, + #else + {"SSL_NEGATIVE_LENGTH", 20, 372}, + #endif + #ifdef SSL_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 20, 126}, + #endif + #ifdef SSL_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 20, 136}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CALLBACK_FAILED + {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED}, + #else + {"SSL_SESSION_ID_CALLBACK_FAILED", 20, 301}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONFLICT + {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONFLICT}, + #else + {"SSL_SESSION_ID_CONFLICT", 20, 302}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG}, + #else + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", 20, 273}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH + {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH}, + #else + {"SSL_SESSION_ID_HAS_BAD_LENGTH", 20, 303}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_TOO_LONG + {"SSL_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_TOO_LONG}, + #else + {"SSL_SESSION_ID_TOO_LONG", 20, 408}, + #endif + #ifdef SSL_R_SSL_SESSION_VERSION_MISMATCH + {"SSL_SESSION_VERSION_MISMATCH", ERR_LIB_SSL, SSL_R_SSL_SESSION_VERSION_MISMATCH}, + #else + {"SSL_SESSION_VERSION_MISMATCH", 20, 210}, + #endif + #ifdef SSL_R_STILL_IN_INIT + {"STILL_IN_INIT", ERR_LIB_SSL, SSL_R_STILL_IN_INIT}, + #else + {"STILL_IN_INIT", 20, 121}, + #endif + #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, + #else + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, + #endif + #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION + {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, + #else + {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, + #endif + #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED + {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, + #else + {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR + {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, + #else + {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED + {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, + #else + {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR + {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, + #else + {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, + #endif + #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION + {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, + #else + {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, + #else + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, + #else + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR + {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, + #else + {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, + #endif + #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION + {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, + #else + {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, + #endif + #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION + {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, + #else + {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, + #endif + #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW + {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, + #else + {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, + #endif + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA + {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, + #else + {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, + #endif + #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED + {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, + #else + {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, + #else + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, + #else + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, + #endif + #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE + {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, + #else + {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, + #endif + #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME + {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, + #else + {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, + #endif + #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION + {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, + #else + {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, + #endif + #ifdef SSL_R_TLS_ILLEGAL_EXPORTER_LABEL + {"TLS_ILLEGAL_EXPORTER_LABEL", ERR_LIB_SSL, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL}, + #else + {"TLS_ILLEGAL_EXPORTER_LABEL", 20, 367}, + #endif + #ifdef SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST + {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST}, + #else + {"TLS_INVALID_ECPOINTFORMAT_LIST", 20, 157}, + #endif + #ifdef SSL_R_TOO_MANY_KEY_UPDATES + {"TOO_MANY_KEY_UPDATES", ERR_LIB_SSL, SSL_R_TOO_MANY_KEY_UPDATES}, + #else + {"TOO_MANY_KEY_UPDATES", 20, 132}, + #endif + #ifdef SSL_R_TOO_MANY_WARN_ALERTS + {"TOO_MANY_WARN_ALERTS", ERR_LIB_SSL, SSL_R_TOO_MANY_WARN_ALERTS}, + #else + {"TOO_MANY_WARN_ALERTS", 20, 409}, + #endif + #ifdef SSL_R_TOO_MUCH_EARLY_DATA + {"TOO_MUCH_EARLY_DATA", ERR_LIB_SSL, SSL_R_TOO_MUCH_EARLY_DATA}, + #else + {"TOO_MUCH_EARLY_DATA", 20, 164}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS + {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS}, + #else + {"UNABLE_TO_FIND_ECDH_PARAMETERS", 20, 314}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS}, + #else + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", 20, 239}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", 20, 242}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", 20, 243}, + #endif + #ifdef SSL_R_UNEXPECTED_CCS_MESSAGE + {"UNEXPECTED_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_CCS_MESSAGE}, + #else + {"UNEXPECTED_CCS_MESSAGE", 20, 262}, + #endif + #ifdef SSL_R_UNEXPECTED_END_OF_EARLY_DATA + {"UNEXPECTED_END_OF_EARLY_DATA", ERR_LIB_SSL, SSL_R_UNEXPECTED_END_OF_EARLY_DATA}, + #else + {"UNEXPECTED_END_OF_EARLY_DATA", 20, 178}, + #endif + #ifdef SSL_R_UNEXPECTED_EOF_WHILE_READING + {"UNEXPECTED_EOF_WHILE_READING", ERR_LIB_SSL, SSL_R_UNEXPECTED_EOF_WHILE_READING}, + #else + {"UNEXPECTED_EOF_WHILE_READING", 20, 294}, + #endif + #ifdef SSL_R_UNEXPECTED_MESSAGE + {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_MESSAGE}, + #else + {"UNEXPECTED_MESSAGE", 20, 244}, + #endif + #ifdef SSL_R_UNEXPECTED_RECORD + {"UNEXPECTED_RECORD", ERR_LIB_SSL, SSL_R_UNEXPECTED_RECORD}, + #else + {"UNEXPECTED_RECORD", 20, 245}, + #endif + #ifdef SSL_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_SSL, SSL_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 20, 276}, + #endif + #ifdef SSL_R_UNKNOWN_ALERT_TYPE + {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_ALERT_TYPE}, + #else + {"UNKNOWN_ALERT_TYPE", 20, 246}, + #endif + #ifdef SSL_R_UNKNOWN_CERTIFICATE_TYPE + {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE}, + #else + {"UNKNOWN_CERTIFICATE_TYPE", 20, 247}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_RETURNED + {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_RETURNED}, + #else + {"UNKNOWN_CIPHER_RETURNED", 20, 248}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_TYPE + {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_TYPE}, + #else + {"UNKNOWN_CIPHER_TYPE", 20, 249}, + #endif + #ifdef SSL_R_UNKNOWN_CMD_NAME + {"UNKNOWN_CMD_NAME", ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME}, + #else + {"UNKNOWN_CMD_NAME", 20, 386}, + #endif + #ifdef SSL_R_UNKNOWN_COMMAND + {"UNKNOWN_COMMAND", ERR_LIB_SSL, SSL_R_UNKNOWN_COMMAND}, + #else + {"UNKNOWN_COMMAND", 20, 139}, + #endif + #ifdef SSL_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_SSL, SSL_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 20, 368}, + #endif + #ifdef SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE + {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE}, + #else + {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, + #endif + #ifdef SSL_R_UNKNOWN_PKEY_TYPE + {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, + #else + {"UNKNOWN_PKEY_TYPE", 20, 251}, + #endif + #ifdef SSL_R_UNKNOWN_PROTOCOL + {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, SSL_R_UNKNOWN_PROTOCOL}, + #else + {"UNKNOWN_PROTOCOL", 20, 252}, + #endif + #ifdef SSL_R_UNKNOWN_SSL_VERSION + {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNKNOWN_SSL_VERSION}, + #else + {"UNKNOWN_SSL_VERSION", 20, 254}, + #endif + #ifdef SSL_R_UNKNOWN_STATE + {"UNKNOWN_STATE", ERR_LIB_SSL, SSL_R_UNKNOWN_STATE}, + #else + {"UNKNOWN_STATE", 20, 255}, + #endif + #ifdef SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED}, + #else + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", 20, 338}, + #endif + #ifdef SSL_R_UNSOLICITED_EXTENSION + {"UNSOLICITED_EXTENSION", ERR_LIB_SSL, SSL_R_UNSOLICITED_EXTENSION}, + #else + {"UNSOLICITED_EXTENSION", 20, 217}, + #endif + #ifdef SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, + #endif + #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE + {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, + #else + {"UNSUPPORTED_ELLIPTIC_CURVE", 20, 315}, + #endif + #ifdef SSL_R_UNSUPPORTED_PROTOCOL + {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL}, + #else + {"UNSUPPORTED_PROTOCOL", 20, 258}, + #endif + #ifdef SSL_R_UNSUPPORTED_SSL_VERSION + {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNSUPPORTED_SSL_VERSION}, + #else + {"UNSUPPORTED_SSL_VERSION", 20, 259}, + #endif + #ifdef SSL_R_UNSUPPORTED_STATUS_TYPE + {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_STATUS_TYPE}, + #else + {"UNSUPPORTED_STATUS_TYPE", 20, 329}, + #endif + #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED + {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, + #else + {"USE_SRTP_NOT_NEGOTIATED", 20, 369}, + #endif + #ifdef SSL_R_VERSION_TOO_HIGH + {"VERSION_TOO_HIGH", ERR_LIB_SSL, SSL_R_VERSION_TOO_HIGH}, + #else + {"VERSION_TOO_HIGH", 20, 166}, + #endif + #ifdef SSL_R_VERSION_TOO_LOW + {"VERSION_TOO_LOW", ERR_LIB_SSL, SSL_R_VERSION_TOO_LOW}, + #else + {"VERSION_TOO_LOW", 20, 396}, + #endif + #ifdef SSL_R_WRONG_CERTIFICATE_TYPE + {"WRONG_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_CERTIFICATE_TYPE}, + #else + {"WRONG_CERTIFICATE_TYPE", 20, 383}, + #endif + #ifdef SSL_R_WRONG_CIPHER_RETURNED + {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_WRONG_CIPHER_RETURNED}, + #else + {"WRONG_CIPHER_RETURNED", 20, 261}, + #endif + #ifdef SSL_R_WRONG_CURVE + {"WRONG_CURVE", ERR_LIB_SSL, SSL_R_WRONG_CURVE}, + #else + {"WRONG_CURVE", 20, 378}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 20, 264}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_SIZE + {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_SIZE}, + #else + {"WRONG_SIGNATURE_SIZE", 20, 265}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_TYPE + {"WRONG_SIGNATURE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_TYPE}, + #else + {"WRONG_SIGNATURE_TYPE", 20, 370}, + #endif + #ifdef SSL_R_WRONG_SSL_VERSION + {"WRONG_SSL_VERSION", ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION}, + #else + {"WRONG_SSL_VERSION", 20, 266}, + #endif + #ifdef SSL_R_WRONG_VERSION_NUMBER + {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_WRONG_VERSION_NUMBER}, + #else + {"WRONG_VERSION_NUMBER", 20, 267}, + #endif + #ifdef SSL_R_X509_LIB + {"X509_LIB", ERR_LIB_SSL, SSL_R_X509_LIB}, + #else + {"X509_LIB", 20, 268}, + #endif + #ifdef SSL_R_X509_VERIFICATION_SETUP_PROBLEMS + {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS}, + #else + {"X509_VERIFICATION_SETUP_PROBLEMS", 20, 269}, + #endif + #ifdef TS_R_BAD_PKCS7_TYPE + {"BAD_PKCS7_TYPE", ERR_LIB_TS, TS_R_BAD_PKCS7_TYPE}, + #else + {"BAD_PKCS7_TYPE", 47, 132}, + #endif + #ifdef TS_R_BAD_TYPE + {"BAD_TYPE", ERR_LIB_TS, TS_R_BAD_TYPE}, + #else + {"BAD_TYPE", 47, 133}, + #endif + #ifdef TS_R_CANNOT_LOAD_CERT + {"CANNOT_LOAD_CERT", ERR_LIB_TS, TS_R_CANNOT_LOAD_CERT}, + #else + {"CANNOT_LOAD_CERT", 47, 137}, + #endif + #ifdef TS_R_CANNOT_LOAD_KEY + {"CANNOT_LOAD_KEY", ERR_LIB_TS, TS_R_CANNOT_LOAD_KEY}, + #else + {"CANNOT_LOAD_KEY", 47, 138}, + #endif + #ifdef TS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_TS, TS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 47, 100}, + #endif + #ifdef TS_R_COULD_NOT_SET_ENGINE + {"COULD_NOT_SET_ENGINE", ERR_LIB_TS, TS_R_COULD_NOT_SET_ENGINE}, + #else + {"COULD_NOT_SET_ENGINE", 47, 127}, + #endif + #ifdef TS_R_COULD_NOT_SET_TIME + {"COULD_NOT_SET_TIME", ERR_LIB_TS, TS_R_COULD_NOT_SET_TIME}, + #else + {"COULD_NOT_SET_TIME", 47, 115}, + #endif + #ifdef TS_R_DETACHED_CONTENT + {"DETACHED_CONTENT", ERR_LIB_TS, TS_R_DETACHED_CONTENT}, + #else + {"DETACHED_CONTENT", 47, 134}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_ERROR + {"ESS_ADD_SIGNING_CERT_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_ERROR", 47, 116}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR + {"ESS_ADD_SIGNING_CERT_V2_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_V2_ERROR", 47, 139}, + #endif + #ifdef TS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_TS, TS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 47, 101}, + #endif + #ifdef TS_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_TS, TS_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 47, 102}, + #endif + #ifdef TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", ERR_LIB_TS, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE}, + #else + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", 47, 117}, + #endif + #ifdef TS_R_MESSAGE_IMPRINT_MISMATCH + {"MESSAGE_IMPRINT_MISMATCH", ERR_LIB_TS, TS_R_MESSAGE_IMPRINT_MISMATCH}, + #else + {"MESSAGE_IMPRINT_MISMATCH", 47, 103}, + #endif + #ifdef TS_R_NONCE_MISMATCH + {"NONCE_MISMATCH", ERR_LIB_TS, TS_R_NONCE_MISMATCH}, + #else + {"NONCE_MISMATCH", 47, 104}, + #endif + #ifdef TS_R_NONCE_NOT_RETURNED + {"NONCE_NOT_RETURNED", ERR_LIB_TS, TS_R_NONCE_NOT_RETURNED}, + #else + {"NONCE_NOT_RETURNED", 47, 105}, + #endif + #ifdef TS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_TS, TS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 47, 106}, + #endif + #ifdef TS_R_NO_TIME_STAMP_TOKEN + {"NO_TIME_STAMP_TOKEN", ERR_LIB_TS, TS_R_NO_TIME_STAMP_TOKEN}, + #else + {"NO_TIME_STAMP_TOKEN", 47, 107}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 47, 118}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR + {"PKCS7_ADD_SIGNED_ATTR_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR}, + #else + {"PKCS7_ADD_SIGNED_ATTR_ERROR", 47, 119}, + #endif + #ifdef TS_R_PKCS7_TO_TS_TST_INFO_FAILED + {"PKCS7_TO_TS_TST_INFO_FAILED", ERR_LIB_TS, TS_R_PKCS7_TO_TS_TST_INFO_FAILED}, + #else + {"PKCS7_TO_TS_TST_INFO_FAILED", 47, 129}, + #endif + #ifdef TS_R_POLICY_MISMATCH + {"POLICY_MISMATCH", ERR_LIB_TS, TS_R_POLICY_MISMATCH}, + #else + {"POLICY_MISMATCH", 47, 108}, + #endif + #ifdef TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_TS, TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 47, 120}, + #endif + #ifdef TS_R_RESPONSE_SETUP_ERROR + {"RESPONSE_SETUP_ERROR", ERR_LIB_TS, TS_R_RESPONSE_SETUP_ERROR}, + #else + {"RESPONSE_SETUP_ERROR", 47, 121}, + #endif + #ifdef TS_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_TS, TS_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 47, 109}, + #endif + #ifdef TS_R_THERE_MUST_BE_ONE_SIGNER + {"THERE_MUST_BE_ONE_SIGNER", ERR_LIB_TS, TS_R_THERE_MUST_BE_ONE_SIGNER}, + #else + {"THERE_MUST_BE_ONE_SIGNER", 47, 110}, + #endif + #ifdef TS_R_TIME_SYSCALL_ERROR + {"TIME_SYSCALL_ERROR", ERR_LIB_TS, TS_R_TIME_SYSCALL_ERROR}, + #else + {"TIME_SYSCALL_ERROR", 47, 122}, + #endif + #ifdef TS_R_TOKEN_NOT_PRESENT + {"TOKEN_NOT_PRESENT", ERR_LIB_TS, TS_R_TOKEN_NOT_PRESENT}, + #else + {"TOKEN_NOT_PRESENT", 47, 130}, + #endif + #ifdef TS_R_TOKEN_PRESENT + {"TOKEN_PRESENT", ERR_LIB_TS, TS_R_TOKEN_PRESENT}, + #else + {"TOKEN_PRESENT", 47, 131}, + #endif + #ifdef TS_R_TSA_NAME_MISMATCH + {"TSA_NAME_MISMATCH", ERR_LIB_TS, TS_R_TSA_NAME_MISMATCH}, + #else + {"TSA_NAME_MISMATCH", 47, 111}, + #endif + #ifdef TS_R_TSA_UNTRUSTED + {"TSA_UNTRUSTED", ERR_LIB_TS, TS_R_TSA_UNTRUSTED}, + #else + {"TSA_UNTRUSTED", 47, 112}, + #endif + #ifdef TS_R_TST_INFO_SETUP_ERROR + {"TST_INFO_SETUP_ERROR", ERR_LIB_TS, TS_R_TST_INFO_SETUP_ERROR}, + #else + {"TST_INFO_SETUP_ERROR", 47, 123}, + #endif + #ifdef TS_R_TS_DATASIGN + {"TS_DATASIGN", ERR_LIB_TS, TS_R_TS_DATASIGN}, + #else + {"TS_DATASIGN", 47, 124}, + #endif + #ifdef TS_R_UNACCEPTABLE_POLICY + {"UNACCEPTABLE_POLICY", ERR_LIB_TS, TS_R_UNACCEPTABLE_POLICY}, + #else + {"UNACCEPTABLE_POLICY", 47, 125}, + #endif + #ifdef TS_R_UNSUPPORTED_MD_ALGORITHM + {"UNSUPPORTED_MD_ALGORITHM", ERR_LIB_TS, TS_R_UNSUPPORTED_MD_ALGORITHM}, + #else + {"UNSUPPORTED_MD_ALGORITHM", 47, 126}, + #endif + #ifdef TS_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_TS, TS_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 47, 113}, + #endif + #ifdef TS_R_VAR_BAD_VALUE + {"VAR_BAD_VALUE", ERR_LIB_TS, TS_R_VAR_BAD_VALUE}, + #else + {"VAR_BAD_VALUE", 47, 135}, + #endif + #ifdef TS_R_VAR_LOOKUP_FAILURE + {"VAR_LOOKUP_FAILURE", ERR_LIB_TS, TS_R_VAR_LOOKUP_FAILURE}, + #else + {"VAR_LOOKUP_FAILURE", 47, 136}, + #endif + #ifdef TS_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_TS, TS_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 47, 114}, + #endif + #ifdef UI_R_COMMON_OK_AND_CANCEL_CHARACTERS + {"COMMON_OK_AND_CANCEL_CHARACTERS", ERR_LIB_UI, UI_R_COMMON_OK_AND_CANCEL_CHARACTERS}, + #else + {"COMMON_OK_AND_CANCEL_CHARACTERS", 40, 104}, + #endif + #ifdef UI_R_INDEX_TOO_LARGE + {"INDEX_TOO_LARGE", ERR_LIB_UI, UI_R_INDEX_TOO_LARGE}, + #else + {"INDEX_TOO_LARGE", 40, 102}, + #endif + #ifdef UI_R_INDEX_TOO_SMALL + {"INDEX_TOO_SMALL", ERR_LIB_UI, UI_R_INDEX_TOO_SMALL}, + #else + {"INDEX_TOO_SMALL", 40, 103}, + #endif + #ifdef UI_R_NO_RESULT_BUFFER + {"NO_RESULT_BUFFER", ERR_LIB_UI, UI_R_NO_RESULT_BUFFER}, + #else + {"NO_RESULT_BUFFER", 40, 105}, + #endif + #ifdef UI_R_PROCESSING_ERROR + {"PROCESSING_ERROR", ERR_LIB_UI, UI_R_PROCESSING_ERROR}, + #else + {"PROCESSING_ERROR", 40, 107}, + #endif + #ifdef UI_R_RESULT_TOO_LARGE + {"RESULT_TOO_LARGE", ERR_LIB_UI, UI_R_RESULT_TOO_LARGE}, + #else + {"RESULT_TOO_LARGE", 40, 100}, + #endif + #ifdef UI_R_RESULT_TOO_SMALL + {"RESULT_TOO_SMALL", ERR_LIB_UI, UI_R_RESULT_TOO_SMALL}, + #else + {"RESULT_TOO_SMALL", 40, 101}, + #endif + #ifdef UI_R_SYSASSIGN_ERROR + {"SYSASSIGN_ERROR", ERR_LIB_UI, UI_R_SYSASSIGN_ERROR}, + #else + {"SYSASSIGN_ERROR", 40, 109}, + #endif + #ifdef UI_R_SYSDASSGN_ERROR + {"SYSDASSGN_ERROR", ERR_LIB_UI, UI_R_SYSDASSGN_ERROR}, + #else + {"SYSDASSGN_ERROR", 40, 110}, + #endif + #ifdef UI_R_SYSQIOW_ERROR + {"SYSQIOW_ERROR", ERR_LIB_UI, UI_R_SYSQIOW_ERROR}, + #else + {"SYSQIOW_ERROR", 40, 111}, + #endif + #ifdef UI_R_UNKNOWN_CONTROL_COMMAND + {"UNKNOWN_CONTROL_COMMAND", ERR_LIB_UI, UI_R_UNKNOWN_CONTROL_COMMAND}, + #else + {"UNKNOWN_CONTROL_COMMAND", 40, 106}, + #endif + #ifdef UI_R_UNKNOWN_TTYGET_ERRNO_VALUE + {"UNKNOWN_TTYGET_ERRNO_VALUE", ERR_LIB_UI, UI_R_UNKNOWN_TTYGET_ERRNO_VALUE}, + #else + {"UNKNOWN_TTYGET_ERRNO_VALUE", 40, 108}, + #endif + #ifdef UI_R_USER_DATA_DUPLICATION_UNSUPPORTED + {"USER_DATA_DUPLICATION_UNSUPPORTED", ERR_LIB_UI, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED}, + #else + {"USER_DATA_DUPLICATION_UNSUPPORTED", 40, 112}, + #endif + #ifdef X509V3_R_BAD_IP_ADDRESS + {"BAD_IP_ADDRESS", ERR_LIB_X509V3, X509V3_R_BAD_IP_ADDRESS}, + #else + {"BAD_IP_ADDRESS", 34, 118}, + #endif + #ifdef X509V3_R_BAD_OBJECT + {"BAD_OBJECT", ERR_LIB_X509V3, X509V3_R_BAD_OBJECT}, + #else + {"BAD_OBJECT", 34, 119}, + #endif + #ifdef X509V3_R_BN_DEC2BN_ERROR + {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, + #else + {"BN_DEC2BN_ERROR", 34, 100}, + #endif + #ifdef X509V3_R_BN_TO_ASN1_INTEGER_ERROR + {"BN_TO_ASN1_INTEGER_ERROR", ERR_LIB_X509V3, X509V3_R_BN_TO_ASN1_INTEGER_ERROR}, + #else + {"BN_TO_ASN1_INTEGER_ERROR", 34, 101}, + #endif + #ifdef X509V3_R_DIRNAME_ERROR + {"DIRNAME_ERROR", ERR_LIB_X509V3, X509V3_R_DIRNAME_ERROR}, + #else + {"DIRNAME_ERROR", 34, 149}, + #endif + #ifdef X509V3_R_DISTPOINT_ALREADY_SET + {"DISTPOINT_ALREADY_SET", ERR_LIB_X509V3, X509V3_R_DISTPOINT_ALREADY_SET}, + #else + {"DISTPOINT_ALREADY_SET", 34, 160}, + #endif + #ifdef X509V3_R_DUPLICATE_ZONE_ID + {"DUPLICATE_ZONE_ID", ERR_LIB_X509V3, X509V3_R_DUPLICATE_ZONE_ID}, + #else + {"DUPLICATE_ZONE_ID", 34, 133}, + #endif + #ifdef X509V3_R_EMPTY_KEY_USAGE + {"EMPTY_KEY_USAGE", ERR_LIB_X509V3, X509V3_R_EMPTY_KEY_USAGE}, + #else + {"EMPTY_KEY_USAGE", 34, 169}, + #endif + #ifdef X509V3_R_ERROR_CONVERTING_ZONE + {"ERROR_CONVERTING_ZONE", ERR_LIB_X509V3, X509V3_R_ERROR_CONVERTING_ZONE}, + #else + {"ERROR_CONVERTING_ZONE", 34, 131}, + #endif + #ifdef X509V3_R_ERROR_CREATING_EXTENSION + {"ERROR_CREATING_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_CREATING_EXTENSION}, + #else + {"ERROR_CREATING_EXTENSION", 34, 144}, + #endif + #ifdef X509V3_R_ERROR_IN_EXTENSION + {"ERROR_IN_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_IN_EXTENSION}, + #else + {"ERROR_IN_EXTENSION", 34, 128}, + #endif + #ifdef X509V3_R_EXPECTED_A_SECTION_NAME + {"EXPECTED_A_SECTION_NAME", ERR_LIB_X509V3, X509V3_R_EXPECTED_A_SECTION_NAME}, + #else + {"EXPECTED_A_SECTION_NAME", 34, 137}, + #endif + #ifdef X509V3_R_EXTENSION_EXISTS + {"EXTENSION_EXISTS", ERR_LIB_X509V3, X509V3_R_EXTENSION_EXISTS}, + #else + {"EXTENSION_EXISTS", 34, 145}, + #endif + #ifdef X509V3_R_EXTENSION_NAME_ERROR + {"EXTENSION_NAME_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_NAME_ERROR}, + #else + {"EXTENSION_NAME_ERROR", 34, 115}, + #endif + #ifdef X509V3_R_EXTENSION_NOT_FOUND + {"EXTENSION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_EXTENSION_NOT_FOUND}, + #else + {"EXTENSION_NOT_FOUND", 34, 102}, + #endif + #ifdef X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED + {"EXTENSION_SETTING_NOT_SUPPORTED", ERR_LIB_X509V3, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED}, + #else + {"EXTENSION_SETTING_NOT_SUPPORTED", 34, 103}, + #endif + #ifdef X509V3_R_EXTENSION_VALUE_ERROR + {"EXTENSION_VALUE_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_VALUE_ERROR}, + #else + {"EXTENSION_VALUE_ERROR", 34, 116}, + #endif + #ifdef X509V3_R_ILLEGAL_EMPTY_EXTENSION + {"ILLEGAL_EMPTY_EXTENSION", ERR_LIB_X509V3, X509V3_R_ILLEGAL_EMPTY_EXTENSION}, + #else + {"ILLEGAL_EMPTY_EXTENSION", 34, 151}, + #endif + #ifdef X509V3_R_INCORRECT_POLICY_SYNTAX_TAG + {"INCORRECT_POLICY_SYNTAX_TAG", ERR_LIB_X509V3, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG}, + #else + {"INCORRECT_POLICY_SYNTAX_TAG", 34, 152}, + #endif + #ifdef X509V3_R_INVALID_ASNUMBER + {"INVALID_ASNUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_ASNUMBER}, + #else + {"INVALID_ASNUMBER", 34, 162}, + #endif + #ifdef X509V3_R_INVALID_ASRANGE + {"INVALID_ASRANGE", ERR_LIB_X509V3, X509V3_R_INVALID_ASRANGE}, + #else + {"INVALID_ASRANGE", 34, 163}, + #endif + #ifdef X509V3_R_INVALID_BOOLEAN_STRING + {"INVALID_BOOLEAN_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_BOOLEAN_STRING}, + #else + {"INVALID_BOOLEAN_STRING", 34, 104}, + #endif + #ifdef X509V3_R_INVALID_CERTIFICATE + {"INVALID_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_INVALID_CERTIFICATE}, + #else + {"INVALID_CERTIFICATE", 34, 158}, + #endif + #ifdef X509V3_R_INVALID_EMPTY_NAME + {"INVALID_EMPTY_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_EMPTY_NAME}, + #else + {"INVALID_EMPTY_NAME", 34, 108}, + #endif + #ifdef X509V3_R_INVALID_EXTENSION_STRING + {"INVALID_EXTENSION_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_EXTENSION_STRING}, + #else + {"INVALID_EXTENSION_STRING", 34, 105}, + #endif + #ifdef X509V3_R_INVALID_INHERITANCE + {"INVALID_INHERITANCE", ERR_LIB_X509V3, X509V3_R_INVALID_INHERITANCE}, + #else + {"INVALID_INHERITANCE", 34, 165}, + #endif + #ifdef X509V3_R_INVALID_IPADDRESS + {"INVALID_IPADDRESS", ERR_LIB_X509V3, X509V3_R_INVALID_IPADDRESS}, + #else + {"INVALID_IPADDRESS", 34, 166}, + #endif + #ifdef X509V3_R_INVALID_MULTIPLE_RDNS + {"INVALID_MULTIPLE_RDNS", ERR_LIB_X509V3, X509V3_R_INVALID_MULTIPLE_RDNS}, + #else + {"INVALID_MULTIPLE_RDNS", 34, 161}, + #endif + #ifdef X509V3_R_INVALID_NAME + {"INVALID_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NAME}, + #else + {"INVALID_NAME", 34, 106}, + #endif + #ifdef X509V3_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 34, 107}, + #endif + #ifdef X509V3_R_INVALID_NULL_VALUE + {"INVALID_NULL_VALUE", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_VALUE}, + #else + {"INVALID_NULL_VALUE", 34, 109}, + #endif + #ifdef X509V3_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 34, 140}, + #endif + #ifdef X509V3_R_INVALID_NUMBERS + {"INVALID_NUMBERS", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBERS}, + #else + {"INVALID_NUMBERS", 34, 141}, + #endif + #ifdef X509V3_R_INVALID_OBJECT_IDENTIFIER + {"INVALID_OBJECT_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER}, + #else + {"INVALID_OBJECT_IDENTIFIER", 34, 110}, + #endif + #ifdef X509V3_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_X509V3, X509V3_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 34, 138}, + #endif + #ifdef X509V3_R_INVALID_POLICY_IDENTIFIER + {"INVALID_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_POLICY_IDENTIFIER}, + #else + {"INVALID_POLICY_IDENTIFIER", 34, 134}, + #endif + #ifdef X509V3_R_INVALID_PROXY_POLICY_SETTING + {"INVALID_PROXY_POLICY_SETTING", ERR_LIB_X509V3, X509V3_R_INVALID_PROXY_POLICY_SETTING}, + #else + {"INVALID_PROXY_POLICY_SETTING", 34, 153}, + #endif + #ifdef X509V3_R_INVALID_PURPOSE + {"INVALID_PURPOSE", ERR_LIB_X509V3, X509V3_R_INVALID_PURPOSE}, + #else + {"INVALID_PURPOSE", 34, 146}, + #endif + #ifdef X509V3_R_INVALID_SAFI + {"INVALID_SAFI", ERR_LIB_X509V3, X509V3_R_INVALID_SAFI}, + #else + {"INVALID_SAFI", 34, 164}, + #endif + #ifdef X509V3_R_INVALID_SECTION + {"INVALID_SECTION", ERR_LIB_X509V3, X509V3_R_INVALID_SECTION}, + #else + {"INVALID_SECTION", 34, 135}, + #endif + #ifdef X509V3_R_INVALID_SYNTAX + {"INVALID_SYNTAX", ERR_LIB_X509V3, X509V3_R_INVALID_SYNTAX}, + #else + {"INVALID_SYNTAX", 34, 143}, + #endif + #ifdef X509V3_R_ISSUER_DECODE_ERROR + {"ISSUER_DECODE_ERROR", ERR_LIB_X509V3, X509V3_R_ISSUER_DECODE_ERROR}, + #else + {"ISSUER_DECODE_ERROR", 34, 126}, + #endif + #ifdef X509V3_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_X509V3, X509V3_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 34, 124}, + #endif + #ifdef X509V3_R_NEED_ORGANIZATION_AND_NUMBERS + {"NEED_ORGANIZATION_AND_NUMBERS", ERR_LIB_X509V3, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS}, + #else + {"NEED_ORGANIZATION_AND_NUMBERS", 34, 142}, + #endif + #ifdef X509V3_R_NEGATIVE_PATHLEN + {"NEGATIVE_PATHLEN", ERR_LIB_X509V3, X509V3_R_NEGATIVE_PATHLEN}, + #else + {"NEGATIVE_PATHLEN", 34, 168}, + #endif + #ifdef X509V3_R_NO_CONFIG_DATABASE + {"NO_CONFIG_DATABASE", ERR_LIB_X509V3, X509V3_R_NO_CONFIG_DATABASE}, + #else + {"NO_CONFIG_DATABASE", 34, 136}, + #endif + #ifdef X509V3_R_NO_ISSUER_CERTIFICATE + {"NO_ISSUER_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_CERTIFICATE}, + #else + {"NO_ISSUER_CERTIFICATE", 34, 121}, + #endif + #ifdef X509V3_R_NO_ISSUER_DETAILS + {"NO_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_DETAILS}, + #else + {"NO_ISSUER_DETAILS", 34, 127}, + #endif + #ifdef X509V3_R_NO_POLICY_IDENTIFIER + {"NO_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_NO_POLICY_IDENTIFIER}, + #else + {"NO_POLICY_IDENTIFIER", 34, 139}, + #endif + #ifdef X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", ERR_LIB_X509V3, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED}, + #else + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", 34, 154}, + #endif + #ifdef X509V3_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_X509V3, X509V3_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 34, 114}, + #endif + #ifdef X509V3_R_NO_SUBJECT_DETAILS + {"NO_SUBJECT_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_SUBJECT_DETAILS}, + #else + {"NO_SUBJECT_DETAILS", 34, 125}, + #endif + #ifdef X509V3_R_OPERATION_NOT_DEFINED + {"OPERATION_NOT_DEFINED", ERR_LIB_X509V3, X509V3_R_OPERATION_NOT_DEFINED}, + #else + {"OPERATION_NOT_DEFINED", 34, 148}, + #endif + #ifdef X509V3_R_OTHERNAME_ERROR + {"OTHERNAME_ERROR", ERR_LIB_X509V3, X509V3_R_OTHERNAME_ERROR}, + #else + {"OTHERNAME_ERROR", 34, 147}, + #endif + #ifdef X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED + {"POLICY_LANGUAGE_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED}, + #else + {"POLICY_LANGUAGE_ALREADY_DEFINED", 34, 155}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH + {"POLICY_PATH_LENGTH", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH}, + #else + {"POLICY_PATH_LENGTH", 34, 156}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED}, + #else + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", 34, 157}, + #endif + #ifdef X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", ERR_LIB_X509V3, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY}, + #else + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", 34, 159}, + #endif + #ifdef X509V3_R_SECTION_NOT_FOUND + {"SECTION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_SECTION_NOT_FOUND}, + #else + {"SECTION_NOT_FOUND", 34, 150}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS + {"UNABLE_TO_GET_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS}, + #else + {"UNABLE_TO_GET_ISSUER_DETAILS", 34, 122}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_KEYID + {"UNABLE_TO_GET_ISSUER_KEYID", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID}, + #else + {"UNABLE_TO_GET_ISSUER_KEYID", 34, 123}, + #endif + #ifdef X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT + {"UNKNOWN_BIT_STRING_ARGUMENT", ERR_LIB_X509V3, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT}, + #else + {"UNKNOWN_BIT_STRING_ARGUMENT", 34, 111}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION + {"UNKNOWN_EXTENSION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION}, + #else + {"UNKNOWN_EXTENSION", 34, 129}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION_NAME + {"UNKNOWN_EXTENSION_NAME", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION_NAME}, + #else + {"UNKNOWN_EXTENSION_NAME", 34, 130}, + #endif + #ifdef X509V3_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 34, 120}, + #endif + #ifdef X509V3_R_UNSUPPORTED_OPTION + {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, + #else + {"UNSUPPORTED_OPTION", 34, 117}, + #endif + #ifdef X509V3_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 34, 167}, + #endif + #ifdef X509V3_R_USER_TOO_LONG + {"USER_TOO_LONG", ERR_LIB_X509V3, X509V3_R_USER_TOO_LONG}, + #else + {"USER_TOO_LONG", 34, 132}, + #endif + #ifdef X509_R_AKID_MISMATCH + {"AKID_MISMATCH", ERR_LIB_X509, X509_R_AKID_MISMATCH}, + #else + {"AKID_MISMATCH", 11, 110}, + #endif + #ifdef X509_R_BAD_SELECTOR + {"BAD_SELECTOR", ERR_LIB_X509, X509_R_BAD_SELECTOR}, + #else + {"BAD_SELECTOR", 11, 133}, + #endif + #ifdef X509_R_BAD_X509_FILETYPE + {"BAD_X509_FILETYPE", ERR_LIB_X509, X509_R_BAD_X509_FILETYPE}, + #else + {"BAD_X509_FILETYPE", 11, 100}, + #endif + #ifdef X509_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_X509, X509_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 11, 118}, + #endif + #ifdef X509_R_CANT_CHECK_DH_KEY + {"CANT_CHECK_DH_KEY", ERR_LIB_X509, X509_R_CANT_CHECK_DH_KEY}, + #else + {"CANT_CHECK_DH_KEY", 11, 114}, + #endif + #ifdef X509_R_CERTIFICATE_VERIFICATION_FAILED + {"CERTIFICATE_VERIFICATION_FAILED", ERR_LIB_X509, X509_R_CERTIFICATE_VERIFICATION_FAILED}, + #else + {"CERTIFICATE_VERIFICATION_FAILED", 11, 139}, + #endif + #ifdef X509_R_CERT_ALREADY_IN_HASH_TABLE + {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, X509_R_CERT_ALREADY_IN_HASH_TABLE}, + #else + {"CERT_ALREADY_IN_HASH_TABLE", 11, 101}, + #endif + #ifdef X509_R_CRL_ALREADY_DELTA + {"CRL_ALREADY_DELTA", ERR_LIB_X509, X509_R_CRL_ALREADY_DELTA}, + #else + {"CRL_ALREADY_DELTA", 11, 127}, + #endif + #ifdef X509_R_CRL_VERIFY_FAILURE + {"CRL_VERIFY_FAILURE", ERR_LIB_X509, X509_R_CRL_VERIFY_FAILURE}, + #else + {"CRL_VERIFY_FAILURE", 11, 131}, + #endif + #ifdef X509_R_ERROR_GETTING_MD_BY_NID + {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID}, + #else + {"ERROR_GETTING_MD_BY_NID", 11, 141}, + #endif + #ifdef X509_R_ERROR_USING_SIGINF_SET + {"ERROR_USING_SIGINF_SET", ERR_LIB_X509, X509_R_ERROR_USING_SIGINF_SET}, + #else + {"ERROR_USING_SIGINF_SET", 11, 142}, + #endif + #ifdef X509_R_IDP_MISMATCH + {"IDP_MISMATCH", ERR_LIB_X509, X509_R_IDP_MISMATCH}, + #else + {"IDP_MISMATCH", 11, 128}, + #endif + #ifdef X509_R_INVALID_ATTRIBUTES + {"INVALID_ATTRIBUTES", ERR_LIB_X509, X509_R_INVALID_ATTRIBUTES}, + #else + {"INVALID_ATTRIBUTES", 11, 138}, + #endif + #ifdef X509_R_INVALID_DIRECTORY + {"INVALID_DIRECTORY", ERR_LIB_X509, X509_R_INVALID_DIRECTORY}, + #else + {"INVALID_DIRECTORY", 11, 113}, + #endif + #ifdef X509_R_INVALID_DISTPOINT + {"INVALID_DISTPOINT", ERR_LIB_X509, X509_R_INVALID_DISTPOINT}, + #else + {"INVALID_DISTPOINT", 11, 143}, + #endif + #ifdef X509_R_INVALID_FIELD_NAME + {"INVALID_FIELD_NAME", ERR_LIB_X509, X509_R_INVALID_FIELD_NAME}, + #else + {"INVALID_FIELD_NAME", 11, 119}, + #endif + #ifdef X509_R_INVALID_TRUST + {"INVALID_TRUST", ERR_LIB_X509, X509_R_INVALID_TRUST}, + #else + {"INVALID_TRUST", 11, 123}, + #endif + #ifdef X509_R_ISSUER_MISMATCH + {"ISSUER_MISMATCH", ERR_LIB_X509, X509_R_ISSUER_MISMATCH}, + #else + {"ISSUER_MISMATCH", 11, 129}, + #endif + #ifdef X509_R_KEY_TYPE_MISMATCH + {"KEY_TYPE_MISMATCH", ERR_LIB_X509, X509_R_KEY_TYPE_MISMATCH}, + #else + {"KEY_TYPE_MISMATCH", 11, 115}, + #endif + #ifdef X509_R_KEY_VALUES_MISMATCH + {"KEY_VALUES_MISMATCH", ERR_LIB_X509, X509_R_KEY_VALUES_MISMATCH}, + #else + {"KEY_VALUES_MISMATCH", 11, 116}, + #endif + #ifdef X509_R_LOADING_CERT_DIR + {"LOADING_CERT_DIR", ERR_LIB_X509, X509_R_LOADING_CERT_DIR}, + #else + {"LOADING_CERT_DIR", 11, 103}, + #endif + #ifdef X509_R_LOADING_DEFAULTS + {"LOADING_DEFAULTS", ERR_LIB_X509, X509_R_LOADING_DEFAULTS}, + #else + {"LOADING_DEFAULTS", 11, 104}, + #endif + #ifdef X509_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, X509_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 11, 124}, + #endif + #ifdef X509_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_X509, X509_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 11, 134}, + #endif + #ifdef X509_R_NEWER_CRL_NOT_NEWER + {"NEWER_CRL_NOT_NEWER", ERR_LIB_X509, X509_R_NEWER_CRL_NOT_NEWER}, + #else + {"NEWER_CRL_NOT_NEWER", 11, 132}, + #endif + #ifdef X509_R_NO_CERTIFICATE_FOUND + {"NO_CERTIFICATE_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_FOUND}, + #else + {"NO_CERTIFICATE_FOUND", 11, 135}, + #endif + #ifdef X509_R_NO_CERTIFICATE_OR_CRL_FOUND + {"NO_CERTIFICATE_OR_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_OR_CRL_FOUND}, + #else + {"NO_CERTIFICATE_OR_CRL_FOUND", 11, 136}, + #endif + #ifdef X509_R_NO_CERT_SET_FOR_US_TO_VERIFY + {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY}, + #else + {"NO_CERT_SET_FOR_US_TO_VERIFY", 11, 105}, + #endif + #ifdef X509_R_NO_CRL_FOUND + {"NO_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CRL_FOUND}, + #else + {"NO_CRL_FOUND", 11, 137}, + #endif + #ifdef X509_R_NO_CRL_NUMBER + {"NO_CRL_NUMBER", ERR_LIB_X509, X509_R_NO_CRL_NUMBER}, + #else + {"NO_CRL_NUMBER", 11, 130}, + #endif + #ifdef X509_R_PUBLIC_KEY_DECODE_ERROR + {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_DECODE_ERROR}, + #else + {"PUBLIC_KEY_DECODE_ERROR", 11, 125}, + #endif + #ifdef X509_R_PUBLIC_KEY_ENCODE_ERROR + {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_ENCODE_ERROR}, + #else + {"PUBLIC_KEY_ENCODE_ERROR", 11, 126}, + #endif + #ifdef X509_R_SHOULD_RETRY + {"SHOULD_RETRY", ERR_LIB_X509, X509_R_SHOULD_RETRY}, + #else + {"SHOULD_RETRY", 11, 106}, + #endif + #ifdef X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN}, + #else + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", 11, 107}, + #endif + #ifdef X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY}, + #else + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", 11, 108}, + #endif + #ifdef X509_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, X509_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 11, 117}, + #endif + #ifdef X509_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_X509, X509_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 11, 109}, + #endif + #ifdef X509_R_UNKNOWN_PURPOSE_ID + {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID}, + #else + {"UNKNOWN_PURPOSE_ID", 11, 121}, + #endif + #ifdef X509_R_UNKNOWN_SIGID_ALGS + {"UNKNOWN_SIGID_ALGS", ERR_LIB_X509, X509_R_UNKNOWN_SIGID_ALGS}, + #else + {"UNKNOWN_SIGID_ALGS", 11, 144}, + #endif + #ifdef X509_R_UNKNOWN_TRUST_ID + {"UNKNOWN_TRUST_ID", ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID}, + #else + {"UNKNOWN_TRUST_ID", 11, 120}, + #endif + #ifdef X509_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, X509_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 11, 111}, + #endif + #ifdef X509_R_WRONG_LOOKUP_TYPE + {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, + #else + {"WRONG_LOOKUP_TYPE", 11, 112}, + #endif + #ifdef X509_R_WRONG_TYPE + {"WRONG_TYPE", ERR_LIB_X509, X509_R_WRONG_TYPE}, + #else + {"WRONG_TYPE", 11, 122}, + #endif + { NULL } +}; + diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py index 1dc234f5232b1..ab1134ed8c4f7 100755 --- a/Tools/ssl/make_ssl_data.py +++ b/Tools/ssl/make_ssl_data.py @@ -6,95 +6,129 @@ It takes two arguments: - the path to the OpenSSL source tree (e.g. git checkout) -- the path to the C file to be generated - (probably Modules/_ssl_data.h) +- the path to the header file to be generated Modules/_ssl_data_{version}.h +- error codes are version specific """ +import argparse import datetime -import glob +import operator import os import re import sys -import _ssl -def parse_error_codes(h_file, prefix, libcode): - pat = re.compile(r"#\s*define\W+(%s([\w]+))\W+(\d+)\b" % re.escape(prefix)) - codes = [] - with open(h_file, "r", encoding="latin1") as f: +parser = argparse.ArgumentParser( + description="Generate ssl_data.h from OpenSSL sources" +) +parser.add_argument("srcdir", help="OpenSSL source directory") +parser.add_argument( + "output", nargs="?", type=argparse.FileType("w"), default=sys.stdout +) + + +def _file_search(fname, pat): + with open(fname, encoding="utf-8") as f: for line in f: match = pat.search(line) - if match: - code, name, num = match.groups() - num = int(num) - # e.g. ("SSL_R_BAD_DATA", ("ERR_LIB_SSL", "BAD_DATA", 390)) - codes.append((code, (libcode, name, num))) - assert codes, f"no codes found in {h_file}" - return codes + if match is not None: + yield match -if __name__ == "__main__": - openssl_inc = sys.argv[1] - outfile = sys.argv[2] - use_stdout = outfile == '-' - f = sys.stdout if use_stdout else open(outfile, "w") - # mnemonic -> (library code, error prefix, header file) - error_libraries = {} - for error_header in glob.glob(os.path.join(glob.escape(openssl_inc), 'include/openssl/*err.h')): - base = os.path.basename(error_header) - if base in ('buffererr.h', 'objectserr.h', 'storeerr.h'): - # Deprecated in 3.0. + +def parse_err_h(args): + """Parse err codes, e.g. ERR_LIB_X509: 11""" + pat = re.compile(r"#\s*define\W+ERR_LIB_(\w+)\s+(\d+)") + lib2errnum = {} + for match in _file_search(args.err_h, pat): + libname, num = match.groups() + lib2errnum[libname] = int(num) + + return lib2errnum + + +def parse_openssl_error_text(args): + """Parse error reasons, X509_R_AKID_MISMATCH""" + # ignore backslash line continuation for now + pat = re.compile(r"^((\w+?)_R_(\w+)):(\d+):") + for match in _file_search(args.errtxt, pat): + reason, libname, errname, num = match.groups() + if "_F_" in reason: + # ignore function codes continue - mnemonic = base[:-5].upper() - if mnemonic == "": - # err.h - lib_codes = { - code: num - for (code, (_, _, num)) in parse_error_codes(error_header, 'ERR_LIB_', None) - } - else: - error_libraries[mnemonic] = (f'ERR_LIB_{mnemonic}', f'{mnemonic}_R_', error_header) - - # Read codes from libraries - new_codes = [] - for libcode, prefix, h_file in sorted(error_libraries.values()): - new_codes += parse_error_codes(h_file, prefix, libcode) - new_code_nums = set((libcode, num) - for (code, (libcode, name, num)) in new_codes) - - # Merge with existing codes (in case some old codes disappeared). - codes = {} - for errname, (libnum, errnum) in _ssl.err_names_to_codes.items(): - lib = error_libraries[_ssl.lib_codes_to_names[libnum]] - libcode = lib[0] # e.g. ERR_LIB_PEM - errcode = lib[1] + errname # e.g. SSL_R_BAD_SSL_SESSION_ID_LENGTH - # Only keep it if the numeric codes weren't reused - if (libcode, errnum) not in new_code_nums: - codes[errcode] = libcode, errname, errnum - codes.update(dict(new_codes)) - - def w(l): - f.write(l + "\n") - w("/* File generated by Tools/ssl/make_ssl_data.py */") - w("/* Generated on %s */" % datetime.datetime.now().isoformat()) - w("") - - w("static struct py_ssl_library_code library_codes[] = {") - for mnemo, (libcode, _, _) in sorted(error_libraries.items()): - w(f'#ifdef {libcode}') - w(' {"%s", %s},' % (mnemo, libcode)) - w('#endif') - w(' { NULL }') - w('};') - w("") - - w("static struct py_ssl_error_code error_codes[] = {") - for errcode, (libcode, name, num) in sorted(codes.items()): - w(' #ifdef %s' % (errcode)) - w(' {"%s", %s, %s},' % (name, libcode, errcode)) - w(' #else') - w(' {"%s", %s, %d},' % (name, lib_codes[libcode], num)) - w(' #endif') - w(' { NULL }') - w('};') - if not use_stdout: - f.close() + num = int(num) + yield reason, libname, errname, num + + +def parse_extra_reasons(args): + """Parse extra reasons from openssl.ec""" + pat = re.compile(r"^R\s+((\w+)_R_(\w+))\s+(\d+)") + for match in _file_search(args.errcodes, pat): + reason, libname, errname, num = match.groups() + num = int(num) + yield reason, libname, errname, num + + +def gen_library_codes(args): + """Generate table short libname to numeric code""" + yield "static struct py_ssl_library_code library_codes[] = {" + for libname in sorted(args.lib2errnum): + yield f"#ifdef ERR_LIB_{libname}" + yield f' {{"{libname}", ERR_LIB_{libname}}},' + yield "#endif" + yield " { NULL }" + yield "};" + yield "" + + +def gen_error_codes(args): + """Generate error code table for error reasons""" + yield "static struct py_ssl_error_code error_codes[] = {" + for reason, libname, errname, num in args.reasons: + yield f" #ifdef {reason}" + yield f' {{"{errname}", ERR_LIB_{libname}, {reason}}},' + yield " #else" + yield f' {{"{errname}", {args.lib2errnum[libname]}, {num}}},' + yield " #endif" + + yield " { NULL }" + yield "};" + yield "" + + +def main(): + args = parser.parse_args() + + args.err_h = os.path.join(args.srcdir, "include", "openssl", "err.h") + if not os.path.isfile(args.err_h): + # Fall back to infile for OpenSSL 3.0.0 + args.err_h += ".in" + args.errcodes = os.path.join(args.srcdir, "crypto", "err", "openssl.ec") + args.errtxt = os.path.join(args.srcdir, "crypto", "err", "openssl.txt") + + if not os.path.isfile(args.errtxt): + parser.error(f"File {args.errtxt} not found in srcdir\n.") + + # {X509: 11, ...} + args.lib2errnum = parse_err_h(args) + + # [('X509_R_AKID_MISMATCH', 'X509', 'AKID_MISMATCH', 110), ...] + reasons = [] + reasons.extend(parse_openssl_error_text(args)) + reasons.extend(parse_extra_reasons(args)) + # sort by libname, numeric error code + args.reasons = sorted(reasons, key=operator.itemgetter(0, 3)) + + lines = [ + "/* File generated by Tools/ssl/make_ssl_data.py */" + f"/* Generated on {datetime.datetime.utcnow().isoformat()} */" + ] + lines.extend(gen_library_codes(args)) + lines.append("") + lines.extend(gen_error_codes(args)) + + for line in lines: + args.output.write(line + "\n") + + +if __name__ == "__main__": + main() diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 0db1b35804d41..64afd6733f4e8 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -49,7 +49,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - # "3.0.0-alpha12" + # "3.0.0-alpha14" ] LIBRESSL_OLD_VERSIONS = [ diff --git a/setup.py b/setup.py index d42eb9d1174ec..d8941790b35d0 100644 --- a/setup.py +++ b/setup.py @@ -2351,8 +2351,13 @@ def split_var(name, sep): include_dirs=openssl_includes, library_dirs=openssl_libdirs, libraries=openssl_libs, - depends=['socketmodule.h', '_ssl/debughelpers.c']) - ) + depends=[ + 'socketmodule.h', + '_ssl/debughelpers.c', + '_ssl_data.h', + '_ssl_data_111.h', + '_ssl_data_300.h', + ])) else: self.missing.append('_ssl') From webhook-mailer at python.org Fri Apr 9 12:35:00 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 16:35:00 -0000 Subject: [Python-checkins] [3.8] bpo-43788: Generate version specific _ssl_data.h (GH-25300) (GH-25311) Message-ID: https://github.com/python/cpython/commit/70f2ca7ea46ac15d05c7b422a10b18aa3fe4a140 commit: 70f2ca7ea46ac15d05c7b422a10b18aa3fe4a140 branch: 3.8 author: Christian Heimes committer: tiran date: 2021-04-09T18:34:54+02:00 summary: [3.8] bpo-43788: Generate version specific _ssl_data.h (GH-25300) (GH-25311) (cherry picked from commit 150af7543214e1541fa582374502ac1cd70e8eb4) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst A Modules/_ssl_data_111.h A Modules/_ssl_data_300.h M Modules/_ssl.c M Tools/ssl/make_ssl_data.py M Tools/ssl/multissltests.py M setup.py diff --git a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst new file mode 100644 index 0000000000000..ff76256472c6e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst @@ -0,0 +1,4 @@ +The header files for :mod:`ssl` error codes are now OpenSSL +version-specific. Exceptions will now show correct reason and library +codes. The ``make_ssl_data.py`` script has been rewritten to use OpenSSL's +text file with error codes. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index bb6cf63ee7fab..0475e26751ea6 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -137,7 +137,13 @@ static void _PySSLFixErrno(void) { #endif /* Include generated data (error codes) */ +#if (OPENSSL_VERSION_NUMBER >= 0x30000000L) +#include "_ssl_data_300.h" +#elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) +#include "_ssl_data_111.h" +#else #include "_ssl_data.h" +#endif #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) # define OPENSSL_VERSION_1_1 1 diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h new file mode 100644 index 0000000000000..85a2f7ec1561e --- /dev/null +++ b/Modules/_ssl_data_111.h @@ -0,0 +1,6525 @@ +/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2021-04-09T09:36:21.493286 */ +static struct py_ssl_library_code library_codes[] = { +#ifdef ERR_LIB_ASN1 + {"ASN1", ERR_LIB_ASN1}, +#endif +#ifdef ERR_LIB_ASYNC + {"ASYNC", ERR_LIB_ASYNC}, +#endif +#ifdef ERR_LIB_BIO + {"BIO", ERR_LIB_BIO}, +#endif +#ifdef ERR_LIB_BN + {"BN", ERR_LIB_BN}, +#endif +#ifdef ERR_LIB_BUF + {"BUF", ERR_LIB_BUF}, +#endif +#ifdef ERR_LIB_CMS + {"CMS", ERR_LIB_CMS}, +#endif +#ifdef ERR_LIB_COMP + {"COMP", ERR_LIB_COMP}, +#endif +#ifdef ERR_LIB_CONF + {"CONF", ERR_LIB_CONF}, +#endif +#ifdef ERR_LIB_CRYPTO + {"CRYPTO", ERR_LIB_CRYPTO}, +#endif +#ifdef ERR_LIB_CT + {"CT", ERR_LIB_CT}, +#endif +#ifdef ERR_LIB_DH + {"DH", ERR_LIB_DH}, +#endif +#ifdef ERR_LIB_DSA + {"DSA", ERR_LIB_DSA}, +#endif +#ifdef ERR_LIB_DSO + {"DSO", ERR_LIB_DSO}, +#endif +#ifdef ERR_LIB_EC + {"EC", ERR_LIB_EC}, +#endif +#ifdef ERR_LIB_ECDH + {"ECDH", ERR_LIB_ECDH}, +#endif +#ifdef ERR_LIB_ECDSA + {"ECDSA", ERR_LIB_ECDSA}, +#endif +#ifdef ERR_LIB_ENGINE + {"ENGINE", ERR_LIB_ENGINE}, +#endif +#ifdef ERR_LIB_EVP + {"EVP", ERR_LIB_EVP}, +#endif +#ifdef ERR_LIB_FIPS + {"FIPS", ERR_LIB_FIPS}, +#endif +#ifdef ERR_LIB_HMAC + {"HMAC", ERR_LIB_HMAC}, +#endif +#ifdef ERR_LIB_JPAKE + {"JPAKE", ERR_LIB_JPAKE}, +#endif +#ifdef ERR_LIB_KDF + {"KDF", ERR_LIB_KDF}, +#endif +#ifdef ERR_LIB_METH + {"METH", ERR_LIB_METH}, +#endif +#ifdef ERR_LIB_NONE + {"NONE", ERR_LIB_NONE}, +#endif +#ifdef ERR_LIB_OBJ + {"OBJ", ERR_LIB_OBJ}, +#endif +#ifdef ERR_LIB_OCSP + {"OCSP", ERR_LIB_OCSP}, +#endif +#ifdef ERR_LIB_OSSL_STORE + {"OSSL_STORE", ERR_LIB_OSSL_STORE}, +#endif +#ifdef ERR_LIB_PEM + {"PEM", ERR_LIB_PEM}, +#endif +#ifdef ERR_LIB_PKCS12 + {"PKCS12", ERR_LIB_PKCS12}, +#endif +#ifdef ERR_LIB_PKCS7 + {"PKCS7", ERR_LIB_PKCS7}, +#endif +#ifdef ERR_LIB_PROXY + {"PROXY", ERR_LIB_PROXY}, +#endif +#ifdef ERR_LIB_RAND + {"RAND", ERR_LIB_RAND}, +#endif +#ifdef ERR_LIB_RSA + {"RSA", ERR_LIB_RSA}, +#endif +#ifdef ERR_LIB_RSAREF + {"RSAREF", ERR_LIB_RSAREF}, +#endif +#ifdef ERR_LIB_SM2 + {"SM2", ERR_LIB_SM2}, +#endif +#ifdef ERR_LIB_SSL + {"SSL", ERR_LIB_SSL}, +#endif +#ifdef ERR_LIB_SSL2 + {"SSL2", ERR_LIB_SSL2}, +#endif +#ifdef ERR_LIB_SSL23 + {"SSL23", ERR_LIB_SSL23}, +#endif +#ifdef ERR_LIB_SSL3 + {"SSL3", ERR_LIB_SSL3}, +#endif +#ifdef ERR_LIB_SYS + {"SYS", ERR_LIB_SYS}, +#endif +#ifdef ERR_LIB_TS + {"TS", ERR_LIB_TS}, +#endif +#ifdef ERR_LIB_UI + {"UI", ERR_LIB_UI}, +#endif +#ifdef ERR_LIB_USER + {"USER", ERR_LIB_USER}, +#endif +#ifdef ERR_LIB_X509 + {"X509", ERR_LIB_X509}, +#endif +#ifdef ERR_LIB_X509V3 + {"X509V3", ERR_LIB_X509V3}, +#endif + { NULL } +}; + + +static struct py_ssl_error_code error_codes[] = { + #ifdef ASN1_R_ADDING_OBJECT + {"ADDING_OBJECT", ERR_LIB_ASN1, ASN1_R_ADDING_OBJECT}, + #else + {"ADDING_OBJECT", 13, 171}, + #endif + #ifdef ASN1_R_ASN1_PARSE_ERROR + {"ASN1_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_PARSE_ERROR}, + #else + {"ASN1_PARSE_ERROR", 13, 203}, + #endif + #ifdef ASN1_R_ASN1_SIG_PARSE_ERROR + {"ASN1_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_SIG_PARSE_ERROR}, + #else + {"ASN1_SIG_PARSE_ERROR", 13, 204}, + #endif + #ifdef ASN1_R_AUX_ERROR + {"AUX_ERROR", ERR_LIB_ASN1, ASN1_R_AUX_ERROR}, + #else + {"AUX_ERROR", 13, 100}, + #endif + #ifdef ASN1_R_BAD_OBJECT_HEADER + {"BAD_OBJECT_HEADER", ERR_LIB_ASN1, ASN1_R_BAD_OBJECT_HEADER}, + #else + {"BAD_OBJECT_HEADER", 13, 102}, + #endif + #ifdef ASN1_R_BAD_TEMPLATE + {"BAD_TEMPLATE", ERR_LIB_ASN1, ASN1_R_BAD_TEMPLATE}, + #else + {"BAD_TEMPLATE", 13, 230}, + #endif + #ifdef ASN1_R_BMPSTRING_IS_WRONG_LENGTH + {"BMPSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BMPSTRING_IS_WRONG_LENGTH}, + #else + {"BMPSTRING_IS_WRONG_LENGTH", 13, 214}, + #endif + #ifdef ASN1_R_BN_LIB + {"BN_LIB", ERR_LIB_ASN1, ASN1_R_BN_LIB}, + #else + {"BN_LIB", 13, 105}, + #endif + #ifdef ASN1_R_BOOLEAN_IS_WRONG_LENGTH + {"BOOLEAN_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH}, + #else + {"BOOLEAN_IS_WRONG_LENGTH", 13, 106}, + #endif + #ifdef ASN1_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_ASN1, ASN1_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 13, 107}, + #endif + #ifdef ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_ASN1, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 13, 108}, + #endif + #ifdef ASN1_R_CONTEXT_NOT_INITIALISED + {"CONTEXT_NOT_INITIALISED", ERR_LIB_ASN1, ASN1_R_CONTEXT_NOT_INITIALISED}, + #else + {"CONTEXT_NOT_INITIALISED", 13, 217}, + #endif + #ifdef ASN1_R_DATA_IS_WRONG + {"DATA_IS_WRONG", ERR_LIB_ASN1, ASN1_R_DATA_IS_WRONG}, + #else + {"DATA_IS_WRONG", 13, 109}, + #endif + #ifdef ASN1_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_ASN1, ASN1_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 13, 110}, + #endif + #ifdef ASN1_R_DEPTH_EXCEEDED + {"DEPTH_EXCEEDED", ERR_LIB_ASN1, ASN1_R_DEPTH_EXCEEDED}, + #else + {"DEPTH_EXCEEDED", 13, 174}, + #endif + #ifdef ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED}, + #else + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", 13, 198}, + #endif + #ifdef ASN1_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_ASN1, ASN1_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 13, 112}, + #endif + #ifdef ASN1_R_ERROR_GETTING_TIME + {"ERROR_GETTING_TIME", ERR_LIB_ASN1, ASN1_R_ERROR_GETTING_TIME}, + #else + {"ERROR_GETTING_TIME", 13, 173}, + #endif + #ifdef ASN1_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_ASN1, ASN1_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 13, 172}, + #endif + #ifdef ASN1_R_ERROR_SETTING_CIPHER_PARAMS + {"ERROR_SETTING_CIPHER_PARAMS", ERR_LIB_ASN1, ASN1_R_ERROR_SETTING_CIPHER_PARAMS}, + #else + {"ERROR_SETTING_CIPHER_PARAMS", 13, 114}, + #endif + #ifdef ASN1_R_EXPECTING_AN_INTEGER + {"EXPECTING_AN_INTEGER", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_INTEGER}, + #else + {"EXPECTING_AN_INTEGER", 13, 115}, + #endif + #ifdef ASN1_R_EXPECTING_AN_OBJECT + {"EXPECTING_AN_OBJECT", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_OBJECT}, + #else + {"EXPECTING_AN_OBJECT", 13, 116}, + #endif + #ifdef ASN1_R_EXPLICIT_LENGTH_MISMATCH + {"EXPLICIT_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH}, + #else + {"EXPLICIT_LENGTH_MISMATCH", 13, 119}, + #endif + #ifdef ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED + {"EXPLICIT_TAG_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED}, + #else + {"EXPLICIT_TAG_NOT_CONSTRUCTED", 13, 120}, + #endif + #ifdef ASN1_R_FIELD_MISSING + {"FIELD_MISSING", ERR_LIB_ASN1, ASN1_R_FIELD_MISSING}, + #else + {"FIELD_MISSING", 13, 121}, + #endif + #ifdef ASN1_R_FIRST_NUM_TOO_LARGE + {"FIRST_NUM_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_FIRST_NUM_TOO_LARGE}, + #else + {"FIRST_NUM_TOO_LARGE", 13, 122}, + #endif + #ifdef ASN1_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 13, 123}, + #endif + #ifdef ASN1_R_ILLEGAL_BITSTRING_FORMAT + {"ILLEGAL_BITSTRING_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT}, + #else + {"ILLEGAL_BITSTRING_FORMAT", 13, 175}, + #endif + #ifdef ASN1_R_ILLEGAL_BOOLEAN + {"ILLEGAL_BOOLEAN", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BOOLEAN}, + #else + {"ILLEGAL_BOOLEAN", 13, 176}, + #endif + #ifdef ASN1_R_ILLEGAL_CHARACTERS + {"ILLEGAL_CHARACTERS", ERR_LIB_ASN1, ASN1_R_ILLEGAL_CHARACTERS}, + #else + {"ILLEGAL_CHARACTERS", 13, 124}, + #endif + #ifdef ASN1_R_ILLEGAL_FORMAT + {"ILLEGAL_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_FORMAT}, + #else + {"ILLEGAL_FORMAT", 13, 177}, + #endif + #ifdef ASN1_R_ILLEGAL_HEX + {"ILLEGAL_HEX", ERR_LIB_ASN1, ASN1_R_ILLEGAL_HEX}, + #else + {"ILLEGAL_HEX", 13, 178}, + #endif + #ifdef ASN1_R_ILLEGAL_IMPLICIT_TAG + {"ILLEGAL_IMPLICIT_TAG", ERR_LIB_ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG}, + #else + {"ILLEGAL_IMPLICIT_TAG", 13, 179}, + #endif + #ifdef ASN1_R_ILLEGAL_INTEGER + {"ILLEGAL_INTEGER", ERR_LIB_ASN1, ASN1_R_ILLEGAL_INTEGER}, + #else + {"ILLEGAL_INTEGER", 13, 180}, + #endif + #ifdef ASN1_R_ILLEGAL_NEGATIVE_VALUE + {"ILLEGAL_NEGATIVE_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NEGATIVE_VALUE}, + #else + {"ILLEGAL_NEGATIVE_VALUE", 13, 226}, + #endif + #ifdef ASN1_R_ILLEGAL_NESTED_TAGGING + {"ILLEGAL_NESTED_TAGGING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING}, + #else + {"ILLEGAL_NESTED_TAGGING", 13, 181}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL + {"ILLEGAL_NULL", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL}, + #else + {"ILLEGAL_NULL", 13, 125}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL_VALUE + {"ILLEGAL_NULL_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL_VALUE}, + #else + {"ILLEGAL_NULL_VALUE", 13, 182}, + #endif + #ifdef ASN1_R_ILLEGAL_OBJECT + {"ILLEGAL_OBJECT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OBJECT}, + #else + {"ILLEGAL_OBJECT", 13, 183}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONAL_ANY + {"ILLEGAL_OPTIONAL_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY}, + #else + {"ILLEGAL_OPTIONAL_ANY", 13, 126}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE}, + #else + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", 13, 170}, + #endif + #ifdef ASN1_R_ILLEGAL_PADDING + {"ILLEGAL_PADDING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_PADDING}, + #else + {"ILLEGAL_PADDING", 13, 221}, + #endif + #ifdef ASN1_R_ILLEGAL_TAGGED_ANY + {"ILLEGAL_TAGGED_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TAGGED_ANY}, + #else + {"ILLEGAL_TAGGED_ANY", 13, 127}, + #endif + #ifdef ASN1_R_ILLEGAL_TIME_VALUE + {"ILLEGAL_TIME_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TIME_VALUE}, + #else + {"ILLEGAL_TIME_VALUE", 13, 184}, + #endif + #ifdef ASN1_R_ILLEGAL_ZERO_CONTENT + {"ILLEGAL_ZERO_CONTENT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_ZERO_CONTENT}, + #else + {"ILLEGAL_ZERO_CONTENT", 13, 222}, + #endif + #ifdef ASN1_R_INTEGER_NOT_ASCII_FORMAT + {"INTEGER_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT}, + #else + {"INTEGER_NOT_ASCII_FORMAT", 13, 185}, + #endif + #ifdef ASN1_R_INTEGER_TOO_LARGE_FOR_LONG + {"INTEGER_TOO_LARGE_FOR_LONG", ERR_LIB_ASN1, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG}, + #else + {"INTEGER_TOO_LARGE_FOR_LONG", 13, 128}, + #endif + #ifdef ASN1_R_INVALID_BIT_STRING_BITS_LEFT + {"INVALID_BIT_STRING_BITS_LEFT", ERR_LIB_ASN1, ASN1_R_INVALID_BIT_STRING_BITS_LEFT}, + #else + {"INVALID_BIT_STRING_BITS_LEFT", 13, 220}, + #endif + #ifdef ASN1_R_INVALID_BMPSTRING_LENGTH + {"INVALID_BMPSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH}, + #else + {"INVALID_BMPSTRING_LENGTH", 13, 129}, + #endif + #ifdef ASN1_R_INVALID_DIGIT + {"INVALID_DIGIT", ERR_LIB_ASN1, ASN1_R_INVALID_DIGIT}, + #else + {"INVALID_DIGIT", 13, 130}, + #endif + #ifdef ASN1_R_INVALID_MIME_TYPE + {"INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_INVALID_MIME_TYPE}, + #else + {"INVALID_MIME_TYPE", 13, 205}, + #endif + #ifdef ASN1_R_INVALID_MODIFIER + {"INVALID_MODIFIER", ERR_LIB_ASN1, ASN1_R_INVALID_MODIFIER}, + #else + {"INVALID_MODIFIER", 13, 186}, + #endif + #ifdef ASN1_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_ASN1, ASN1_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 13, 187}, + #endif + #ifdef ASN1_R_INVALID_OBJECT_ENCODING + {"INVALID_OBJECT_ENCODING", ERR_LIB_ASN1, ASN1_R_INVALID_OBJECT_ENCODING}, + #else + {"INVALID_OBJECT_ENCODING", 13, 216}, + #endif + #ifdef ASN1_R_INVALID_SCRYPT_PARAMETERS + {"INVALID_SCRYPT_PARAMETERS", ERR_LIB_ASN1, ASN1_R_INVALID_SCRYPT_PARAMETERS}, + #else + {"INVALID_SCRYPT_PARAMETERS", 13, 227}, + #endif + #ifdef ASN1_R_INVALID_SEPARATOR + {"INVALID_SEPARATOR", ERR_LIB_ASN1, ASN1_R_INVALID_SEPARATOR}, + #else + {"INVALID_SEPARATOR", 13, 131}, + #endif + #ifdef ASN1_R_INVALID_STRING_TABLE_VALUE + {"INVALID_STRING_TABLE_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE}, + #else + {"INVALID_STRING_TABLE_VALUE", 13, 218}, + #endif + #ifdef ASN1_R_INVALID_UNIVERSALSTRING_LENGTH + {"INVALID_UNIVERSALSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH}, + #else + {"INVALID_UNIVERSALSTRING_LENGTH", 13, 133}, + #endif + #ifdef ASN1_R_INVALID_UTF8STRING + {"INVALID_UTF8STRING", ERR_LIB_ASN1, ASN1_R_INVALID_UTF8STRING}, + #else + {"INVALID_UTF8STRING", 13, 134}, + #endif + #ifdef ASN1_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 13, 219}, + #endif + #ifdef ASN1_R_LIST_ERROR + {"LIST_ERROR", ERR_LIB_ASN1, ASN1_R_LIST_ERROR}, + #else + {"LIST_ERROR", 13, 188}, + #endif + #ifdef ASN1_R_MIME_NO_CONTENT_TYPE + {"MIME_NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_MIME_NO_CONTENT_TYPE}, + #else + {"MIME_NO_CONTENT_TYPE", 13, 206}, + #endif + #ifdef ASN1_R_MIME_PARSE_ERROR + {"MIME_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_PARSE_ERROR}, + #else + {"MIME_PARSE_ERROR", 13, 207}, + #endif + #ifdef ASN1_R_MIME_SIG_PARSE_ERROR + {"MIME_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_SIG_PARSE_ERROR}, + #else + {"MIME_SIG_PARSE_ERROR", 13, 208}, + #endif + #ifdef ASN1_R_MISSING_EOC + {"MISSING_EOC", ERR_LIB_ASN1, ASN1_R_MISSING_EOC}, + #else + {"MISSING_EOC", 13, 137}, + #endif + #ifdef ASN1_R_MISSING_SECOND_NUMBER + {"MISSING_SECOND_NUMBER", ERR_LIB_ASN1, ASN1_R_MISSING_SECOND_NUMBER}, + #else + {"MISSING_SECOND_NUMBER", 13, 138}, + #endif + #ifdef ASN1_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_ASN1, ASN1_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 13, 189}, + #endif + #ifdef ASN1_R_MSTRING_NOT_UNIVERSAL + {"MSTRING_NOT_UNIVERSAL", ERR_LIB_ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL}, + #else + {"MSTRING_NOT_UNIVERSAL", 13, 139}, + #endif + #ifdef ASN1_R_MSTRING_WRONG_TAG + {"MSTRING_WRONG_TAG", ERR_LIB_ASN1, ASN1_R_MSTRING_WRONG_TAG}, + #else + {"MSTRING_WRONG_TAG", 13, 140}, + #endif + #ifdef ASN1_R_NESTED_ASN1_STRING + {"NESTED_ASN1_STRING", ERR_LIB_ASN1, ASN1_R_NESTED_ASN1_STRING}, + #else + {"NESTED_ASN1_STRING", 13, 197}, + #endif + #ifdef ASN1_R_NESTED_TOO_DEEP + {"NESTED_TOO_DEEP", ERR_LIB_ASN1, ASN1_R_NESTED_TOO_DEEP}, + #else + {"NESTED_TOO_DEEP", 13, 201}, + #endif + #ifdef ASN1_R_NON_HEX_CHARACTERS + {"NON_HEX_CHARACTERS", ERR_LIB_ASN1, ASN1_R_NON_HEX_CHARACTERS}, + #else + {"NON_HEX_CHARACTERS", 13, 141}, + #endif + #ifdef ASN1_R_NOT_ASCII_FORMAT + {"NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_NOT_ASCII_FORMAT}, + #else + {"NOT_ASCII_FORMAT", 13, 190}, + #endif + #ifdef ASN1_R_NOT_ENOUGH_DATA + {"NOT_ENOUGH_DATA", ERR_LIB_ASN1, ASN1_R_NOT_ENOUGH_DATA}, + #else + {"NOT_ENOUGH_DATA", 13, 142}, + #endif + #ifdef ASN1_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 13, 209}, + #endif + #ifdef ASN1_R_NO_MATCHING_CHOICE_TYPE + {"NO_MATCHING_CHOICE_TYPE", ERR_LIB_ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE}, + #else + {"NO_MATCHING_CHOICE_TYPE", 13, 143}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BODY_FAILURE + {"NO_MULTIPART_BODY_FAILURE", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BODY_FAILURE}, + #else + {"NO_MULTIPART_BODY_FAILURE", 13, 210}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BOUNDARY + {"NO_MULTIPART_BOUNDARY", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BOUNDARY}, + #else + {"NO_MULTIPART_BOUNDARY", 13, 211}, + #endif + #ifdef ASN1_R_NO_SIG_CONTENT_TYPE + {"NO_SIG_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_SIG_CONTENT_TYPE}, + #else + {"NO_SIG_CONTENT_TYPE", 13, 212}, + #endif + #ifdef ASN1_R_NULL_IS_WRONG_LENGTH + {"NULL_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_NULL_IS_WRONG_LENGTH}, + #else + {"NULL_IS_WRONG_LENGTH", 13, 144}, + #endif + #ifdef ASN1_R_OBJECT_NOT_ASCII_FORMAT + {"OBJECT_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT}, + #else + {"OBJECT_NOT_ASCII_FORMAT", 13, 191}, + #endif + #ifdef ASN1_R_ODD_NUMBER_OF_CHARS + {"ODD_NUMBER_OF_CHARS", ERR_LIB_ASN1, ASN1_R_ODD_NUMBER_OF_CHARS}, + #else + {"ODD_NUMBER_OF_CHARS", 13, 145}, + #endif + #ifdef ASN1_R_SECOND_NUMBER_TOO_LARGE + {"SECOND_NUMBER_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_SECOND_NUMBER_TOO_LARGE}, + #else + {"SECOND_NUMBER_TOO_LARGE", 13, 147}, + #endif + #ifdef ASN1_R_SEQUENCE_LENGTH_MISMATCH + {"SEQUENCE_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH}, + #else + {"SEQUENCE_LENGTH_MISMATCH", 13, 148}, + #endif + #ifdef ASN1_R_SEQUENCE_NOT_CONSTRUCTED + {"SEQUENCE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED}, + #else + {"SEQUENCE_NOT_CONSTRUCTED", 13, 149}, + #endif + #ifdef ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG + {"SEQUENCE_OR_SET_NEEDS_CONFIG", ERR_LIB_ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG}, + #else + {"SEQUENCE_OR_SET_NEEDS_CONFIG", 13, 192}, + #endif + #ifdef ASN1_R_SHORT_LINE + {"SHORT_LINE", ERR_LIB_ASN1, ASN1_R_SHORT_LINE}, + #else + {"SHORT_LINE", 13, 150}, + #endif + #ifdef ASN1_R_SIG_INVALID_MIME_TYPE + {"SIG_INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_SIG_INVALID_MIME_TYPE}, + #else + {"SIG_INVALID_MIME_TYPE", 13, 213}, + #endif + #ifdef ASN1_R_STREAMING_NOT_SUPPORTED + {"STREAMING_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_STREAMING_NOT_SUPPORTED}, + #else + {"STREAMING_NOT_SUPPORTED", 13, 202}, + #endif + #ifdef ASN1_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_ASN1, ASN1_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 13, 151}, + #endif + #ifdef ASN1_R_STRING_TOO_SHORT + {"STRING_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_STRING_TOO_SHORT}, + #else + {"STRING_TOO_SHORT", 13, 152}, + #endif + #ifdef ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_ASN1, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 13, 154}, + #endif + #ifdef ASN1_R_TIME_NOT_ASCII_FORMAT + {"TIME_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT}, + #else + {"TIME_NOT_ASCII_FORMAT", 13, 193}, + #endif + #ifdef ASN1_R_TOO_LARGE + {"TOO_LARGE", ERR_LIB_ASN1, ASN1_R_TOO_LARGE}, + #else + {"TOO_LARGE", 13, 223}, + #endif + #ifdef ASN1_R_TOO_LONG + {"TOO_LONG", ERR_LIB_ASN1, ASN1_R_TOO_LONG}, + #else + {"TOO_LONG", 13, 155}, + #endif + #ifdef ASN1_R_TOO_SMALL + {"TOO_SMALL", ERR_LIB_ASN1, ASN1_R_TOO_SMALL}, + #else + {"TOO_SMALL", 13, 224}, + #endif + #ifdef ASN1_R_TYPE_NOT_CONSTRUCTED + {"TYPE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED}, + #else + {"TYPE_NOT_CONSTRUCTED", 13, 156}, + #endif + #ifdef ASN1_R_TYPE_NOT_PRIMITIVE + {"TYPE_NOT_PRIMITIVE", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_PRIMITIVE}, + #else + {"TYPE_NOT_PRIMITIVE", 13, 195}, + #endif + #ifdef ASN1_R_UNEXPECTED_EOC + {"UNEXPECTED_EOC", ERR_LIB_ASN1, ASN1_R_UNEXPECTED_EOC}, + #else + {"UNEXPECTED_EOC", 13, 159}, + #endif + #ifdef ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH + {"UNIVERSALSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH}, + #else + {"UNIVERSALSTRING_IS_WRONG_LENGTH", 13, 215}, + #endif + #ifdef ASN1_R_UNKNOWN_FORMAT + {"UNKNOWN_FORMAT", ERR_LIB_ASN1, ASN1_R_UNKNOWN_FORMAT}, + #else + {"UNKNOWN_FORMAT", 13, 160}, + #endif + #ifdef ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", 13, 161}, + #endif + #ifdef ASN1_R_UNKNOWN_OBJECT_TYPE + {"UNKNOWN_OBJECT_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_OBJECT_TYPE}, + #else + {"UNKNOWN_OBJECT_TYPE", 13, 162}, + #endif + #ifdef ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE + {"UNKNOWN_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE}, + #else + {"UNKNOWN_PUBLIC_KEY_TYPE", 13, 163}, + #endif + #ifdef ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM + {"UNKNOWN_SIGNATURE_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM}, + #else + {"UNKNOWN_SIGNATURE_ALGORITHM", 13, 199}, + #endif + #ifdef ASN1_R_UNKNOWN_TAG + {"UNKNOWN_TAG", ERR_LIB_ASN1, ASN1_R_UNKNOWN_TAG}, + #else + {"UNKNOWN_TAG", 13, 194}, + #endif + #ifdef ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE}, + #else + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", 13, 164}, + #endif + #ifdef ASN1_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 13, 228}, + #endif + #ifdef ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 13, 167}, + #endif + #ifdef ASN1_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 13, 196}, + #endif + #ifdef ASN1_R_WRONG_INTEGER_TYPE + {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, + #else + {"WRONG_INTEGER_TYPE", 13, 225}, + #endif + #ifdef ASN1_R_WRONG_PUBLIC_KEY_TYPE + {"WRONG_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_PUBLIC_KEY_TYPE}, + #else + {"WRONG_PUBLIC_KEY_TYPE", 13, 200}, + #endif + #ifdef ASN1_R_WRONG_TAG + {"WRONG_TAG", ERR_LIB_ASN1, ASN1_R_WRONG_TAG}, + #else + {"WRONG_TAG", 13, 168}, + #endif + #ifdef ASYNC_R_FAILED_TO_SET_POOL + {"FAILED_TO_SET_POOL", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SET_POOL}, + #else + {"FAILED_TO_SET_POOL", 51, 101}, + #endif + #ifdef ASYNC_R_FAILED_TO_SWAP_CONTEXT + {"FAILED_TO_SWAP_CONTEXT", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SWAP_CONTEXT}, + #else + {"FAILED_TO_SWAP_CONTEXT", 51, 102}, + #endif + #ifdef ASYNC_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ASYNC, ASYNC_R_INIT_FAILED}, + #else + {"INIT_FAILED", 51, 105}, + #endif + #ifdef ASYNC_R_INVALID_POOL_SIZE + {"INVALID_POOL_SIZE", ERR_LIB_ASYNC, ASYNC_R_INVALID_POOL_SIZE}, + #else + {"INVALID_POOL_SIZE", 51, 103}, + #endif + #ifdef BIO_R_ACCEPT_ERROR + {"ACCEPT_ERROR", ERR_LIB_BIO, BIO_R_ACCEPT_ERROR}, + #else + {"ACCEPT_ERROR", 32, 100}, + #endif + #ifdef BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET + {"ADDRINFO_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET}, + #else + {"ADDRINFO_ADDR_IS_NOT_AF_INET", 32, 141}, + #endif + #ifdef BIO_R_AMBIGUOUS_HOST_OR_SERVICE + {"AMBIGUOUS_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_AMBIGUOUS_HOST_OR_SERVICE}, + #else + {"AMBIGUOUS_HOST_OR_SERVICE", 32, 129}, + #endif + #ifdef BIO_R_BAD_FOPEN_MODE + {"BAD_FOPEN_MODE", ERR_LIB_BIO, BIO_R_BAD_FOPEN_MODE}, + #else + {"BAD_FOPEN_MODE", 32, 101}, + #endif + #ifdef BIO_R_BROKEN_PIPE + {"BROKEN_PIPE", ERR_LIB_BIO, BIO_R_BROKEN_PIPE}, + #else + {"BROKEN_PIPE", 32, 124}, + #endif + #ifdef BIO_R_CONNECT_ERROR + {"CONNECT_ERROR", ERR_LIB_BIO, BIO_R_CONNECT_ERROR}, + #else + {"CONNECT_ERROR", 32, 103}, + #endif + #ifdef BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET}, + #else + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", 32, 107}, + #endif + #ifdef BIO_R_GETSOCKNAME_ERROR + {"GETSOCKNAME_ERROR", ERR_LIB_BIO, BIO_R_GETSOCKNAME_ERROR}, + #else + {"GETSOCKNAME_ERROR", 32, 132}, + #endif + #ifdef BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS + {"GETSOCKNAME_TRUNCATED_ADDRESS", ERR_LIB_BIO, BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS}, + #else + {"GETSOCKNAME_TRUNCATED_ADDRESS", 32, 133}, + #endif + #ifdef BIO_R_GETTING_SOCKTYPE + {"GETTING_SOCKTYPE", ERR_LIB_BIO, BIO_R_GETTING_SOCKTYPE}, + #else + {"GETTING_SOCKTYPE", 32, 134}, + #endif + #ifdef BIO_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_BIO, BIO_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 32, 125}, + #endif + #ifdef BIO_R_INVALID_SOCKET + {"INVALID_SOCKET", ERR_LIB_BIO, BIO_R_INVALID_SOCKET}, + #else + {"INVALID_SOCKET", 32, 135}, + #endif + #ifdef BIO_R_IN_USE + {"IN_USE", ERR_LIB_BIO, BIO_R_IN_USE}, + #else + {"IN_USE", 32, 123}, + #endif + #ifdef BIO_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_BIO, BIO_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 32, 102}, + #endif + #ifdef BIO_R_LISTEN_V6_ONLY + {"LISTEN_V6_ONLY", ERR_LIB_BIO, BIO_R_LISTEN_V6_ONLY}, + #else + {"LISTEN_V6_ONLY", 32, 136}, + #endif + #ifdef BIO_R_LOOKUP_RETURNED_NOTHING + {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, + #else + {"LOOKUP_RETURNED_NOTHING", 32, 142}, + #endif + #ifdef BIO_R_MALFORMED_HOST_OR_SERVICE + {"MALFORMED_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_MALFORMED_HOST_OR_SERVICE}, + #else + {"MALFORMED_HOST_OR_SERVICE", 32, 130}, + #endif + #ifdef BIO_R_NBIO_CONNECT_ERROR + {"NBIO_CONNECT_ERROR", ERR_LIB_BIO, BIO_R_NBIO_CONNECT_ERROR}, + #else + {"NBIO_CONNECT_ERROR", 32, 110}, + #endif + #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, + #else + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", 32, 143}, + #endif + #ifdef BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED}, + #else + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", 32, 144}, + #endif + #ifdef BIO_R_NO_PORT_DEFINED + {"NO_PORT_DEFINED", ERR_LIB_BIO, BIO_R_NO_PORT_DEFINED}, + #else + {"NO_PORT_DEFINED", 32, 113}, + #endif + #ifdef BIO_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_BIO, BIO_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 32, 128}, + #endif + #ifdef BIO_R_NULL_PARAMETER + {"NULL_PARAMETER", ERR_LIB_BIO, BIO_R_NULL_PARAMETER}, + #else + {"NULL_PARAMETER", 32, 115}, + #endif + #ifdef BIO_R_UNABLE_TO_BIND_SOCKET + {"UNABLE_TO_BIND_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_BIND_SOCKET}, + #else + {"UNABLE_TO_BIND_SOCKET", 32, 117}, + #endif + #ifdef BIO_R_UNABLE_TO_CREATE_SOCKET + {"UNABLE_TO_CREATE_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_CREATE_SOCKET}, + #else + {"UNABLE_TO_CREATE_SOCKET", 32, 118}, + #endif + #ifdef BIO_R_UNABLE_TO_KEEPALIVE + {"UNABLE_TO_KEEPALIVE", ERR_LIB_BIO, BIO_R_UNABLE_TO_KEEPALIVE}, + #else + {"UNABLE_TO_KEEPALIVE", 32, 137}, + #endif + #ifdef BIO_R_UNABLE_TO_LISTEN_SOCKET + {"UNABLE_TO_LISTEN_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_LISTEN_SOCKET}, + #else + {"UNABLE_TO_LISTEN_SOCKET", 32, 119}, + #endif + #ifdef BIO_R_UNABLE_TO_NODELAY + {"UNABLE_TO_NODELAY", ERR_LIB_BIO, BIO_R_UNABLE_TO_NODELAY}, + #else + {"UNABLE_TO_NODELAY", 32, 138}, + #endif + #ifdef BIO_R_UNABLE_TO_REUSEADDR + {"UNABLE_TO_REUSEADDR", ERR_LIB_BIO, BIO_R_UNABLE_TO_REUSEADDR}, + #else + {"UNABLE_TO_REUSEADDR", 32, 139}, + #endif + #ifdef BIO_R_UNAVAILABLE_IP_FAMILY + {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, + #else + {"UNAVAILABLE_IP_FAMILY", 32, 145}, + #endif + #ifdef BIO_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_BIO, BIO_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 32, 120}, + #endif + #ifdef BIO_R_UNKNOWN_INFO_TYPE + {"UNKNOWN_INFO_TYPE", ERR_LIB_BIO, BIO_R_UNKNOWN_INFO_TYPE}, + #else + {"UNKNOWN_INFO_TYPE", 32, 140}, + #endif + #ifdef BIO_R_UNSUPPORTED_IP_FAMILY + {"UNSUPPORTED_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_IP_FAMILY}, + #else + {"UNSUPPORTED_IP_FAMILY", 32, 146}, + #endif + #ifdef BIO_R_UNSUPPORTED_METHOD + {"UNSUPPORTED_METHOD", ERR_LIB_BIO, BIO_R_UNSUPPORTED_METHOD}, + #else + {"UNSUPPORTED_METHOD", 32, 121}, + #endif + #ifdef BIO_R_UNSUPPORTED_PROTOCOL_FAMILY + {"UNSUPPORTED_PROTOCOL_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY}, + #else + {"UNSUPPORTED_PROTOCOL_FAMILY", 32, 131}, + #endif + #ifdef BIO_R_WRITE_TO_READ_ONLY_BIO + {"WRITE_TO_READ_ONLY_BIO", ERR_LIB_BIO, BIO_R_WRITE_TO_READ_ONLY_BIO}, + #else + {"WRITE_TO_READ_ONLY_BIO", 32, 126}, + #endif + #ifdef BIO_R_WSASTARTUP + {"WSASTARTUP", ERR_LIB_BIO, BIO_R_WSASTARTUP}, + #else + {"WSASTARTUP", 32, 122}, + #endif + #ifdef BN_R_ARG2_LT_ARG3 + {"ARG2_LT_ARG3", ERR_LIB_BN, BN_R_ARG2_LT_ARG3}, + #else + {"ARG2_LT_ARG3", 3, 100}, + #endif + #ifdef BN_R_BAD_RECIPROCAL + {"BAD_RECIPROCAL", ERR_LIB_BN, BN_R_BAD_RECIPROCAL}, + #else + {"BAD_RECIPROCAL", 3, 101}, + #endif + #ifdef BN_R_BIGNUM_TOO_LONG + {"BIGNUM_TOO_LONG", ERR_LIB_BN, BN_R_BIGNUM_TOO_LONG}, + #else + {"BIGNUM_TOO_LONG", 3, 114}, + #endif + #ifdef BN_R_BITS_TOO_SMALL + {"BITS_TOO_SMALL", ERR_LIB_BN, BN_R_BITS_TOO_SMALL}, + #else + {"BITS_TOO_SMALL", 3, 118}, + #endif + #ifdef BN_R_CALLED_WITH_EVEN_MODULUS + {"CALLED_WITH_EVEN_MODULUS", ERR_LIB_BN, BN_R_CALLED_WITH_EVEN_MODULUS}, + #else + {"CALLED_WITH_EVEN_MODULUS", 3, 102}, + #endif + #ifdef BN_R_DIV_BY_ZERO + {"DIV_BY_ZERO", ERR_LIB_BN, BN_R_DIV_BY_ZERO}, + #else + {"DIV_BY_ZERO", 3, 103}, + #endif + #ifdef BN_R_ENCODING_ERROR + {"ENCODING_ERROR", ERR_LIB_BN, BN_R_ENCODING_ERROR}, + #else + {"ENCODING_ERROR", 3, 104}, + #endif + #ifdef BN_R_EXPAND_ON_STATIC_BIGNUM_DATA + {"EXPAND_ON_STATIC_BIGNUM_DATA", ERR_LIB_BN, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA}, + #else + {"EXPAND_ON_STATIC_BIGNUM_DATA", 3, 105}, + #endif + #ifdef BN_R_INPUT_NOT_REDUCED + {"INPUT_NOT_REDUCED", ERR_LIB_BN, BN_R_INPUT_NOT_REDUCED}, + #else + {"INPUT_NOT_REDUCED", 3, 110}, + #endif + #ifdef BN_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_BN, BN_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 3, 106}, + #endif + #ifdef BN_R_INVALID_RANGE + {"INVALID_RANGE", ERR_LIB_BN, BN_R_INVALID_RANGE}, + #else + {"INVALID_RANGE", 3, 115}, + #endif + #ifdef BN_R_INVALID_SHIFT + {"INVALID_SHIFT", ERR_LIB_BN, BN_R_INVALID_SHIFT}, + #else + {"INVALID_SHIFT", 3, 119}, + #endif + #ifdef BN_R_NOT_A_SQUARE + {"NOT_A_SQUARE", ERR_LIB_BN, BN_R_NOT_A_SQUARE}, + #else + {"NOT_A_SQUARE", 3, 111}, + #endif + #ifdef BN_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_BN, BN_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 3, 107}, + #endif + #ifdef BN_R_NO_INVERSE + {"NO_INVERSE", ERR_LIB_BN, BN_R_NO_INVERSE}, + #else + {"NO_INVERSE", 3, 108}, + #endif + #ifdef BN_R_NO_SOLUTION + {"NO_SOLUTION", ERR_LIB_BN, BN_R_NO_SOLUTION}, + #else + {"NO_SOLUTION", 3, 116}, + #endif + #ifdef BN_R_PRIVATE_KEY_TOO_LARGE + {"PRIVATE_KEY_TOO_LARGE", ERR_LIB_BN, BN_R_PRIVATE_KEY_TOO_LARGE}, + #else + {"PRIVATE_KEY_TOO_LARGE", 3, 117}, + #endif + #ifdef BN_R_P_IS_NOT_PRIME + {"P_IS_NOT_PRIME", ERR_LIB_BN, BN_R_P_IS_NOT_PRIME}, + #else + {"P_IS_NOT_PRIME", 3, 112}, + #endif + #ifdef BN_R_TOO_MANY_ITERATIONS + {"TOO_MANY_ITERATIONS", ERR_LIB_BN, BN_R_TOO_MANY_ITERATIONS}, + #else + {"TOO_MANY_ITERATIONS", 3, 113}, + #endif + #ifdef BN_R_TOO_MANY_TEMPORARY_VARIABLES + {"TOO_MANY_TEMPORARY_VARIABLES", ERR_LIB_BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES}, + #else + {"TOO_MANY_TEMPORARY_VARIABLES", 3, 109}, + #endif + #ifdef CMS_R_ADD_SIGNER_ERROR + {"ADD_SIGNER_ERROR", ERR_LIB_CMS, CMS_R_ADD_SIGNER_ERROR}, + #else + {"ADD_SIGNER_ERROR", 46, 99}, + #endif + #ifdef CMS_R_ATTRIBUTE_ERROR + {"ATTRIBUTE_ERROR", ERR_LIB_CMS, CMS_R_ATTRIBUTE_ERROR}, + #else + {"ATTRIBUTE_ERROR", 46, 161}, + #endif + #ifdef CMS_R_CERTIFICATE_ALREADY_PRESENT + {"CERTIFICATE_ALREADY_PRESENT", ERR_LIB_CMS, CMS_R_CERTIFICATE_ALREADY_PRESENT}, + #else + {"CERTIFICATE_ALREADY_PRESENT", 46, 175}, + #endif + #ifdef CMS_R_CERTIFICATE_HAS_NO_KEYID + {"CERTIFICATE_HAS_NO_KEYID", ERR_LIB_CMS, CMS_R_CERTIFICATE_HAS_NO_KEYID}, + #else + {"CERTIFICATE_HAS_NO_KEYID", 46, 160}, + #endif + #ifdef CMS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 46, 100}, + #endif + #ifdef CMS_R_CIPHER_INITIALISATION_ERROR + {"CIPHER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_INITIALISATION_ERROR}, + #else + {"CIPHER_INITIALISATION_ERROR", 46, 101}, + #endif + #ifdef CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR + {"CIPHER_PARAMETER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR}, + #else + {"CIPHER_PARAMETER_INITIALISATION_ERROR", 46, 102}, + #endif + #ifdef CMS_R_CMS_DATAFINAL_ERROR + {"CMS_DATAFINAL_ERROR", ERR_LIB_CMS, CMS_R_CMS_DATAFINAL_ERROR}, + #else + {"CMS_DATAFINAL_ERROR", 46, 103}, + #endif + #ifdef CMS_R_CMS_LIB + {"CMS_LIB", ERR_LIB_CMS, CMS_R_CMS_LIB}, + #else + {"CMS_LIB", 46, 104}, + #endif + #ifdef CMS_R_CONTENTIDENTIFIER_MISMATCH + {"CONTENTIDENTIFIER_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENTIDENTIFIER_MISMATCH}, + #else + {"CONTENTIDENTIFIER_MISMATCH", 46, 170}, + #endif + #ifdef CMS_R_CONTENT_NOT_FOUND + {"CONTENT_NOT_FOUND", ERR_LIB_CMS, CMS_R_CONTENT_NOT_FOUND}, + #else + {"CONTENT_NOT_FOUND", 46, 105}, + #endif + #ifdef CMS_R_CONTENT_TYPE_MISMATCH + {"CONTENT_TYPE_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_MISMATCH}, + #else + {"CONTENT_TYPE_MISMATCH", 46, 171}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA}, + #else + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", 46, 106}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA}, + #else + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", 46, 107}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA + {"CONTENT_TYPE_NOT_SIGNED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA}, + #else + {"CONTENT_TYPE_NOT_SIGNED_DATA", 46, 108}, + #endif + #ifdef CMS_R_CONTENT_VERIFY_ERROR + {"CONTENT_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CONTENT_VERIFY_ERROR}, + #else + {"CONTENT_VERIFY_ERROR", 46, 109}, + #endif + #ifdef CMS_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_CMS, CMS_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 46, 110}, + #endif + #ifdef CMS_R_CTRL_FAILURE + {"CTRL_FAILURE", ERR_LIB_CMS, CMS_R_CTRL_FAILURE}, + #else + {"CTRL_FAILURE", 46, 111}, + #endif + #ifdef CMS_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_CMS, CMS_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 46, 112}, + #endif + #ifdef CMS_R_ERROR_GETTING_PUBLIC_KEY + {"ERROR_GETTING_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_ERROR_GETTING_PUBLIC_KEY}, + #else + {"ERROR_GETTING_PUBLIC_KEY", 46, 113}, + #endif + #ifdef CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", ERR_LIB_CMS, CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE}, + #else + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", 46, 114}, + #endif + #ifdef CMS_R_ERROR_SETTING_KEY + {"ERROR_SETTING_KEY", ERR_LIB_CMS, CMS_R_ERROR_SETTING_KEY}, + #else + {"ERROR_SETTING_KEY", 46, 115}, + #endif + #ifdef CMS_R_ERROR_SETTING_RECIPIENTINFO + {"ERROR_SETTING_RECIPIENTINFO", ERR_LIB_CMS, CMS_R_ERROR_SETTING_RECIPIENTINFO}, + #else + {"ERROR_SETTING_RECIPIENTINFO", 46, 116}, + #endif + #ifdef CMS_R_INVALID_ENCRYPTED_KEY_LENGTH + {"INVALID_ENCRYPTED_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_ENCRYPTED_KEY_LENGTH}, + #else + {"INVALID_ENCRYPTED_KEY_LENGTH", 46, 117}, + #endif + #ifdef CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER + {"INVALID_KEY_ENCRYPTION_PARAMETER", ERR_LIB_CMS, CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER}, + #else + {"INVALID_KEY_ENCRYPTION_PARAMETER", 46, 176}, + #endif + #ifdef CMS_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 46, 118}, + #endif + #ifdef CMS_R_MD_BIO_INIT_ERROR + {"MD_BIO_INIT_ERROR", ERR_LIB_CMS, CMS_R_MD_BIO_INIT_ERROR}, + #else + {"MD_BIO_INIT_ERROR", 46, 119}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", 46, 120}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_WRONG_LENGTH + {"MESSAGEDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_WRONG_LENGTH", 46, 121}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_ERROR + {"MSGSIGDIGEST_ERROR", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_ERROR}, + #else + {"MSGSIGDIGEST_ERROR", 46, 172}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE + {"MSGSIGDIGEST_VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE}, + #else + {"MSGSIGDIGEST_VERIFICATION_FAILURE", 46, 162}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_WRONG_LENGTH + {"MSGSIGDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_WRONG_LENGTH}, + #else + {"MSGSIGDIGEST_WRONG_LENGTH", 46, 163}, + #endif + #ifdef CMS_R_NEED_ONE_SIGNER + {"NEED_ONE_SIGNER", ERR_LIB_CMS, CMS_R_NEED_ONE_SIGNER}, + #else + {"NEED_ONE_SIGNER", 46, 164}, + #endif + #ifdef CMS_R_NOT_A_SIGNED_RECEIPT + {"NOT_A_SIGNED_RECEIPT", ERR_LIB_CMS, CMS_R_NOT_A_SIGNED_RECEIPT}, + #else + {"NOT_A_SIGNED_RECEIPT", 46, 165}, + #endif + #ifdef CMS_R_NOT_ENCRYPTED_DATA + {"NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_NOT_ENCRYPTED_DATA}, + #else + {"NOT_ENCRYPTED_DATA", 46, 122}, + #endif + #ifdef CMS_R_NOT_KEK + {"NOT_KEK", ERR_LIB_CMS, CMS_R_NOT_KEK}, + #else + {"NOT_KEK", 46, 123}, + #endif + #ifdef CMS_R_NOT_KEY_AGREEMENT + {"NOT_KEY_AGREEMENT", ERR_LIB_CMS, CMS_R_NOT_KEY_AGREEMENT}, + #else + {"NOT_KEY_AGREEMENT", 46, 181}, + #endif + #ifdef CMS_R_NOT_KEY_TRANSPORT + {"NOT_KEY_TRANSPORT", ERR_LIB_CMS, CMS_R_NOT_KEY_TRANSPORT}, + #else + {"NOT_KEY_TRANSPORT", 46, 124}, + #endif + #ifdef CMS_R_NOT_PWRI + {"NOT_PWRI", ERR_LIB_CMS, CMS_R_NOT_PWRI}, + #else + {"NOT_PWRI", 46, 177}, + #endif + #ifdef CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_CMS, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 46, 125}, + #endif + #ifdef CMS_R_NO_CIPHER + {"NO_CIPHER", ERR_LIB_CMS, CMS_R_NO_CIPHER}, + #else + {"NO_CIPHER", 46, 126}, + #endif + #ifdef CMS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_CMS, CMS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 46, 127}, + #endif + #ifdef CMS_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 46, 173}, + #endif + #ifdef CMS_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_CMS, CMS_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 46, 128}, + #endif + #ifdef CMS_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_CMS, CMS_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 46, 129}, + #endif + #ifdef CMS_R_NO_KEY + {"NO_KEY", ERR_LIB_CMS, CMS_R_NO_KEY}, + #else + {"NO_KEY", 46, 130}, + #endif + #ifdef CMS_R_NO_KEY_OR_CERT + {"NO_KEY_OR_CERT", ERR_LIB_CMS, CMS_R_NO_KEY_OR_CERT}, + #else + {"NO_KEY_OR_CERT", 46, 174}, + #endif + #ifdef CMS_R_NO_MATCHING_DIGEST + {"NO_MATCHING_DIGEST", ERR_LIB_CMS, CMS_R_NO_MATCHING_DIGEST}, + #else + {"NO_MATCHING_DIGEST", 46, 131}, + #endif + #ifdef CMS_R_NO_MATCHING_RECIPIENT + {"NO_MATCHING_RECIPIENT", ERR_LIB_CMS, CMS_R_NO_MATCHING_RECIPIENT}, + #else + {"NO_MATCHING_RECIPIENT", 46, 132}, + #endif + #ifdef CMS_R_NO_MATCHING_SIGNATURE + {"NO_MATCHING_SIGNATURE", ERR_LIB_CMS, CMS_R_NO_MATCHING_SIGNATURE}, + #else + {"NO_MATCHING_SIGNATURE", 46, 166}, + #endif + #ifdef CMS_R_NO_MSGSIGDIGEST + {"NO_MSGSIGDIGEST", ERR_LIB_CMS, CMS_R_NO_MSGSIGDIGEST}, + #else + {"NO_MSGSIGDIGEST", 46, 167}, + #endif + #ifdef CMS_R_NO_PASSWORD + {"NO_PASSWORD", ERR_LIB_CMS, CMS_R_NO_PASSWORD}, + #else + {"NO_PASSWORD", 46, 178}, + #endif + #ifdef CMS_R_NO_PRIVATE_KEY + {"NO_PRIVATE_KEY", ERR_LIB_CMS, CMS_R_NO_PRIVATE_KEY}, + #else + {"NO_PRIVATE_KEY", 46, 133}, + #endif + #ifdef CMS_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 46, 134}, + #endif + #ifdef CMS_R_NO_RECEIPT_REQUEST + {"NO_RECEIPT_REQUEST", ERR_LIB_CMS, CMS_R_NO_RECEIPT_REQUEST}, + #else + {"NO_RECEIPT_REQUEST", 46, 168}, + #endif + #ifdef CMS_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_CMS, CMS_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 46, 135}, + #endif + #ifdef CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_CMS, CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 46, 136}, + #endif + #ifdef CMS_R_RECEIPT_DECODE_ERROR + {"RECEIPT_DECODE_ERROR", ERR_LIB_CMS, CMS_R_RECEIPT_DECODE_ERROR}, + #else + {"RECEIPT_DECODE_ERROR", 46, 169}, + #endif + #ifdef CMS_R_RECIPIENT_ERROR + {"RECIPIENT_ERROR", ERR_LIB_CMS, CMS_R_RECIPIENT_ERROR}, + #else + {"RECIPIENT_ERROR", 46, 137}, + #endif + #ifdef CMS_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_CMS, CMS_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 46, 138}, + #endif + #ifdef CMS_R_SIGNFINAL_ERROR + {"SIGNFINAL_ERROR", ERR_LIB_CMS, CMS_R_SIGNFINAL_ERROR}, + #else + {"SIGNFINAL_ERROR", 46, 139}, + #endif + #ifdef CMS_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_CMS, CMS_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 46, 140}, + #endif + #ifdef CMS_R_STORE_INIT_ERROR + {"STORE_INIT_ERROR", ERR_LIB_CMS, CMS_R_STORE_INIT_ERROR}, + #else + {"STORE_INIT_ERROR", 46, 141}, + #endif + #ifdef CMS_R_TYPE_NOT_COMPRESSED_DATA + {"TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_COMPRESSED_DATA}, + #else + {"TYPE_NOT_COMPRESSED_DATA", 46, 142}, + #endif + #ifdef CMS_R_TYPE_NOT_DATA + {"TYPE_NOT_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DATA}, + #else + {"TYPE_NOT_DATA", 46, 143}, + #endif + #ifdef CMS_R_TYPE_NOT_DIGESTED_DATA + {"TYPE_NOT_DIGESTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DIGESTED_DATA}, + #else + {"TYPE_NOT_DIGESTED_DATA", 46, 144}, + #endif + #ifdef CMS_R_TYPE_NOT_ENCRYPTED_DATA + {"TYPE_NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENCRYPTED_DATA}, + #else + {"TYPE_NOT_ENCRYPTED_DATA", 46, 145}, + #endif + #ifdef CMS_R_TYPE_NOT_ENVELOPED_DATA + {"TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENVELOPED_DATA}, + #else + {"TYPE_NOT_ENVELOPED_DATA", 46, 146}, + #endif + #ifdef CMS_R_UNABLE_TO_FINALIZE_CONTEXT + {"UNABLE_TO_FINALIZE_CONTEXT", ERR_LIB_CMS, CMS_R_UNABLE_TO_FINALIZE_CONTEXT}, + #else + {"UNABLE_TO_FINALIZE_CONTEXT", 46, 147}, + #endif + #ifdef CMS_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_CMS, CMS_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 46, 148}, + #endif + #ifdef CMS_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_CMS, CMS_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 46, 149}, + #endif + #ifdef CMS_R_UNKNOWN_ID + {"UNKNOWN_ID", ERR_LIB_CMS, CMS_R_UNKNOWN_ID}, + #else + {"UNKNOWN_ID", 46, 150}, + #endif + #ifdef CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 46, 151}, + #endif + #ifdef CMS_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 46, 152}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEK_ALGORITHM + {"UNSUPPORTED_KEK_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEK_ALGORITHM}, + #else + {"UNSUPPORTED_KEK_ALGORITHM", 46, 153}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM}, + #else + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", 46, 179}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + {"UNSUPPORTED_RECIPIENTINFO_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE}, + #else + {"UNSUPPORTED_RECIPIENTINFO_TYPE", 46, 155}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENT_TYPE + {"UNSUPPORTED_RECIPIENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENT_TYPE}, + #else + {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, + #endif + #ifdef CMS_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 46, 156}, + #endif + #ifdef CMS_R_UNWRAP_ERROR + {"UNWRAP_ERROR", ERR_LIB_CMS, CMS_R_UNWRAP_ERROR}, + #else + {"UNWRAP_ERROR", 46, 157}, + #endif + #ifdef CMS_R_UNWRAP_FAILURE + {"UNWRAP_FAILURE", ERR_LIB_CMS, CMS_R_UNWRAP_FAILURE}, + #else + {"UNWRAP_FAILURE", 46, 180}, + #endif + #ifdef CMS_R_VERIFICATION_FAILURE + {"VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_VERIFICATION_FAILURE}, + #else + {"VERIFICATION_FAILURE", 46, 158}, + #endif + #ifdef CMS_R_WRAP_ERROR + {"WRAP_ERROR", ERR_LIB_CMS, CMS_R_WRAP_ERROR}, + #else + {"WRAP_ERROR", 46, 159}, + #endif + #ifdef COMP_R_ZLIB_DEFLATE_ERROR + {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, + #else + {"ZLIB_DEFLATE_ERROR", 41, 99}, + #endif + #ifdef COMP_R_ZLIB_INFLATE_ERROR + {"ZLIB_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_INFLATE_ERROR}, + #else + {"ZLIB_INFLATE_ERROR", 41, 100}, + #endif + #ifdef COMP_R_ZLIB_NOT_SUPPORTED + {"ZLIB_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZLIB_NOT_SUPPORTED}, + #else + {"ZLIB_NOT_SUPPORTED", 41, 101}, + #endif + #ifdef CONF_R_ERROR_LOADING_DSO + {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, + #else + {"ERROR_LOADING_DSO", 14, 110}, + #endif + #ifdef CONF_R_LIST_CANNOT_BE_NULL + {"LIST_CANNOT_BE_NULL", ERR_LIB_CONF, CONF_R_LIST_CANNOT_BE_NULL}, + #else + {"LIST_CANNOT_BE_NULL", 14, 115}, + #endif + #ifdef CONF_R_MISSING_CLOSE_SQUARE_BRACKET + {"MISSING_CLOSE_SQUARE_BRACKET", ERR_LIB_CONF, CONF_R_MISSING_CLOSE_SQUARE_BRACKET}, + #else + {"MISSING_CLOSE_SQUARE_BRACKET", 14, 100}, + #endif + #ifdef CONF_R_MISSING_EQUAL_SIGN + {"MISSING_EQUAL_SIGN", ERR_LIB_CONF, CONF_R_MISSING_EQUAL_SIGN}, + #else + {"MISSING_EQUAL_SIGN", 14, 101}, + #endif + #ifdef CONF_R_MISSING_INIT_FUNCTION + {"MISSING_INIT_FUNCTION", ERR_LIB_CONF, CONF_R_MISSING_INIT_FUNCTION}, + #else + {"MISSING_INIT_FUNCTION", 14, 112}, + #endif + #ifdef CONF_R_MODULE_INITIALIZATION_ERROR + {"MODULE_INITIALIZATION_ERROR", ERR_LIB_CONF, CONF_R_MODULE_INITIALIZATION_ERROR}, + #else + {"MODULE_INITIALIZATION_ERROR", 14, 109}, + #endif + #ifdef CONF_R_NO_CLOSE_BRACE + {"NO_CLOSE_BRACE", ERR_LIB_CONF, CONF_R_NO_CLOSE_BRACE}, + #else + {"NO_CLOSE_BRACE", 14, 102}, + #endif + #ifdef CONF_R_NO_CONF + {"NO_CONF", ERR_LIB_CONF, CONF_R_NO_CONF}, + #else + {"NO_CONF", 14, 105}, + #endif + #ifdef CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", ERR_LIB_CONF, CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE}, + #else + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", 14, 106}, + #endif + #ifdef CONF_R_NO_SECTION + {"NO_SECTION", ERR_LIB_CONF, CONF_R_NO_SECTION}, + #else + {"NO_SECTION", 14, 107}, + #endif + #ifdef CONF_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_CONF, CONF_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 14, 114}, + #endif + #ifdef CONF_R_NO_VALUE + {"NO_VALUE", ERR_LIB_CONF, CONF_R_NO_VALUE}, + #else + {"NO_VALUE", 14, 108}, + #endif + #ifdef CONF_R_NUMBER_TOO_LARGE + {"NUMBER_TOO_LARGE", ERR_LIB_CONF, CONF_R_NUMBER_TOO_LARGE}, + #else + {"NUMBER_TOO_LARGE", 14, 121}, + #endif + #ifdef CONF_R_RECURSIVE_DIRECTORY_INCLUDE + {"RECURSIVE_DIRECTORY_INCLUDE", ERR_LIB_CONF, CONF_R_RECURSIVE_DIRECTORY_INCLUDE}, + #else + {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 14, 117}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 14, 118}, + #endif + #ifdef CONF_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 14, 119}, + #endif + #ifdef CONF_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 14, 120}, + #endif + #ifdef CONF_R_UNABLE_TO_CREATE_NEW_SECTION + {"UNABLE_TO_CREATE_NEW_SECTION", ERR_LIB_CONF, CONF_R_UNABLE_TO_CREATE_NEW_SECTION}, + #else + {"UNABLE_TO_CREATE_NEW_SECTION", 14, 103}, + #endif + #ifdef CONF_R_UNKNOWN_MODULE_NAME + {"UNKNOWN_MODULE_NAME", ERR_LIB_CONF, CONF_R_UNKNOWN_MODULE_NAME}, + #else + {"UNKNOWN_MODULE_NAME", 14, 113}, + #endif + #ifdef CONF_R_VARIABLE_EXPANSION_TOO_LONG + {"VARIABLE_EXPANSION_TOO_LONG", ERR_LIB_CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG}, + #else + {"VARIABLE_EXPANSION_TOO_LONG", 14, 116}, + #endif + #ifdef CONF_R_VARIABLE_HAS_NO_VALUE + {"VARIABLE_HAS_NO_VALUE", ERR_LIB_CONF, CONF_R_VARIABLE_HAS_NO_VALUE}, + #else + {"VARIABLE_HAS_NO_VALUE", 14, 104}, + #endif + #ifdef CRYPTO_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_CRYPTO, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 15, 101}, + #endif + #ifdef CRYPTO_R_ILLEGAL_HEX_DIGIT + {"ILLEGAL_HEX_DIGIT", ERR_LIB_CRYPTO, CRYPTO_R_ILLEGAL_HEX_DIGIT}, + #else + {"ILLEGAL_HEX_DIGIT", 15, 102}, + #endif + #ifdef CRYPTO_R_ODD_NUMBER_OF_DIGITS + {"ODD_NUMBER_OF_DIGITS", ERR_LIB_CRYPTO, CRYPTO_R_ODD_NUMBER_OF_DIGITS}, + #else + {"ODD_NUMBER_OF_DIGITS", 15, 103}, + #endif + #ifdef CT_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_CT, CT_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 50, 108}, + #endif + #ifdef CT_R_INVALID_LOG_ID_LENGTH + {"INVALID_LOG_ID_LENGTH", ERR_LIB_CT, CT_R_INVALID_LOG_ID_LENGTH}, + #else + {"INVALID_LOG_ID_LENGTH", 50, 100}, + #endif + #ifdef CT_R_LOG_CONF_INVALID + {"LOG_CONF_INVALID", ERR_LIB_CT, CT_R_LOG_CONF_INVALID}, + #else + {"LOG_CONF_INVALID", 50, 109}, + #endif + #ifdef CT_R_LOG_CONF_INVALID_KEY + {"LOG_CONF_INVALID_KEY", ERR_LIB_CT, CT_R_LOG_CONF_INVALID_KEY}, + #else + {"LOG_CONF_INVALID_KEY", 50, 110}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_DESCRIPTION + {"LOG_CONF_MISSING_DESCRIPTION", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_DESCRIPTION}, + #else + {"LOG_CONF_MISSING_DESCRIPTION", 50, 111}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_KEY + {"LOG_CONF_MISSING_KEY", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_KEY}, + #else + {"LOG_CONF_MISSING_KEY", 50, 112}, + #endif + #ifdef CT_R_LOG_KEY_INVALID + {"LOG_KEY_INVALID", ERR_LIB_CT, CT_R_LOG_KEY_INVALID}, + #else + {"LOG_KEY_INVALID", 50, 113}, + #endif + #ifdef CT_R_SCT_FUTURE_TIMESTAMP + {"SCT_FUTURE_TIMESTAMP", ERR_LIB_CT, CT_R_SCT_FUTURE_TIMESTAMP}, + #else + {"SCT_FUTURE_TIMESTAMP", 50, 116}, + #endif + #ifdef CT_R_SCT_INVALID + {"SCT_INVALID", ERR_LIB_CT, CT_R_SCT_INVALID}, + #else + {"SCT_INVALID", 50, 104}, + #endif + #ifdef CT_R_SCT_INVALID_SIGNATURE + {"SCT_INVALID_SIGNATURE", ERR_LIB_CT, CT_R_SCT_INVALID_SIGNATURE}, + #else + {"SCT_INVALID_SIGNATURE", 50, 107}, + #endif + #ifdef CT_R_SCT_LIST_INVALID + {"SCT_LIST_INVALID", ERR_LIB_CT, CT_R_SCT_LIST_INVALID}, + #else + {"SCT_LIST_INVALID", 50, 105}, + #endif + #ifdef CT_R_SCT_LOG_ID_MISMATCH + {"SCT_LOG_ID_MISMATCH", ERR_LIB_CT, CT_R_SCT_LOG_ID_MISMATCH}, + #else + {"SCT_LOG_ID_MISMATCH", 50, 114}, + #endif + #ifdef CT_R_SCT_NOT_SET + {"SCT_NOT_SET", ERR_LIB_CT, CT_R_SCT_NOT_SET}, + #else + {"SCT_NOT_SET", 50, 106}, + #endif + #ifdef CT_R_SCT_UNSUPPORTED_VERSION + {"SCT_UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_SCT_UNSUPPORTED_VERSION}, + #else + {"SCT_UNSUPPORTED_VERSION", 50, 115}, + #endif + #ifdef CT_R_UNRECOGNIZED_SIGNATURE_NID + {"UNRECOGNIZED_SIGNATURE_NID", ERR_LIB_CT, CT_R_UNRECOGNIZED_SIGNATURE_NID}, + #else + {"UNRECOGNIZED_SIGNATURE_NID", 50, 101}, + #endif + #ifdef CT_R_UNSUPPORTED_ENTRY_TYPE + {"UNSUPPORTED_ENTRY_TYPE", ERR_LIB_CT, CT_R_UNSUPPORTED_ENTRY_TYPE}, + #else + {"UNSUPPORTED_ENTRY_TYPE", 50, 102}, + #endif + #ifdef CT_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 50, 103}, + #endif + #ifdef DH_R_BAD_GENERATOR + {"BAD_GENERATOR", ERR_LIB_DH, DH_R_BAD_GENERATOR}, + #else + {"BAD_GENERATOR", 5, 101}, + #endif + #ifdef DH_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DH, DH_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 5, 109}, + #endif + #ifdef DH_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DH, DH_R_BN_ERROR}, + #else + {"BN_ERROR", 5, 106}, + #endif + #ifdef DH_R_CHECK_INVALID_J_VALUE + {"CHECK_INVALID_J_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_J_VALUE}, + #else + {"CHECK_INVALID_J_VALUE", 5, 115}, + #endif + #ifdef DH_R_CHECK_INVALID_Q_VALUE + {"CHECK_INVALID_Q_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_Q_VALUE}, + #else + {"CHECK_INVALID_Q_VALUE", 5, 116}, + #endif + #ifdef DH_R_CHECK_PUBKEY_INVALID + {"CHECK_PUBKEY_INVALID", ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID}, + #else + {"CHECK_PUBKEY_INVALID", 5, 122}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_LARGE + {"CHECK_PUBKEY_TOO_LARGE", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_LARGE}, + #else + {"CHECK_PUBKEY_TOO_LARGE", 5, 123}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_SMALL + {"CHECK_PUBKEY_TOO_SMALL", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_SMALL}, + #else + {"CHECK_PUBKEY_TOO_SMALL", 5, 124}, + #endif + #ifdef DH_R_CHECK_P_NOT_PRIME + {"CHECK_P_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_PRIME}, + #else + {"CHECK_P_NOT_PRIME", 5, 117}, + #endif + #ifdef DH_R_CHECK_P_NOT_SAFE_PRIME + {"CHECK_P_NOT_SAFE_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_SAFE_PRIME}, + #else + {"CHECK_P_NOT_SAFE_PRIME", 5, 118}, + #endif + #ifdef DH_R_CHECK_Q_NOT_PRIME + {"CHECK_Q_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_Q_NOT_PRIME}, + #else + {"CHECK_Q_NOT_PRIME", 5, 119}, + #endif + #ifdef DH_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DH, DH_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 5, 104}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NAME + {"INVALID_PARAMETER_NAME", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NAME}, + #else + {"INVALID_PARAMETER_NAME", 5, 110}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NID + {"INVALID_PARAMETER_NID", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NID}, + #else + {"INVALID_PARAMETER_NID", 5, 114}, + #endif + #ifdef DH_R_INVALID_PUBKEY + {"INVALID_PUBKEY", ERR_LIB_DH, DH_R_INVALID_PUBKEY}, + #else + {"INVALID_PUBKEY", 5, 102}, + #endif + #ifdef DH_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 5, 112}, + #endif + #ifdef DH_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_DH, DH_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 5, 108}, + #endif + #ifdef DH_R_MISSING_PUBKEY + {"MISSING_PUBKEY", ERR_LIB_DH, DH_R_MISSING_PUBKEY}, + #else + {"MISSING_PUBKEY", 5, 125}, + #endif + #ifdef DH_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 5, 103}, + #endif + #ifdef DH_R_NOT_SUITABLE_GENERATOR + {"NOT_SUITABLE_GENERATOR", ERR_LIB_DH, DH_R_NOT_SUITABLE_GENERATOR}, + #else + {"NOT_SUITABLE_GENERATOR", 5, 120}, + #endif + #ifdef DH_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DH, DH_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 5, 107}, + #endif + #ifdef DH_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_DH, DH_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 5, 100}, + #endif + #ifdef DH_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DH, DH_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 5, 105}, + #endif + #ifdef DH_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_DH, DH_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 5, 111}, + #endif + #ifdef DH_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 5, 113}, + #endif + #ifdef DH_R_UNABLE_TO_CHECK_GENERATOR + {"UNABLE_TO_CHECK_GENERATOR", ERR_LIB_DH, DH_R_UNABLE_TO_CHECK_GENERATOR}, + #else + {"UNABLE_TO_CHECK_GENERATOR", 5, 121}, + #endif + #ifdef DSA_R_BAD_Q_VALUE + {"BAD_Q_VALUE", ERR_LIB_DSA, DSA_R_BAD_Q_VALUE}, + #else + {"BAD_Q_VALUE", 10, 102}, + #endif + #ifdef DSA_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DSA, DSA_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 10, 108}, + #endif + #ifdef DSA_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DSA, DSA_R_BN_ERROR}, + #else + {"BN_ERROR", 10, 109}, + #endif + #ifdef DSA_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DSA, DSA_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 10, 104}, + #endif + #ifdef DSA_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_DSA, DSA_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 10, 106}, + #endif + #ifdef DSA_R_INVALID_PARAMETERS + {"INVALID_PARAMETERS", ERR_LIB_DSA, DSA_R_INVALID_PARAMETERS}, + #else + {"INVALID_PARAMETERS", 10, 112}, + #endif + #ifdef DSA_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_DSA, DSA_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 10, 101}, + #endif + #ifdef DSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_DSA, DSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 10, 111}, + #endif + #ifdef DSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DSA, DSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 10, 103}, + #endif + #ifdef DSA_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DSA, DSA_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 10, 107}, + #endif + #ifdef DSA_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DSA, DSA_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 10, 105}, + #endif + #ifdef DSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_DSA, DSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 10, 113}, + #endif + #ifdef DSA_R_SEED_LEN_SMALL + {"SEED_LEN_SMALL", ERR_LIB_DSA, DSA_R_SEED_LEN_SMALL}, + #else + {"SEED_LEN_SMALL", 10, 110}, + #endif + #ifdef DSO_R_CTRL_FAILED + {"CTRL_FAILED", ERR_LIB_DSO, DSO_R_CTRL_FAILED}, + #else + {"CTRL_FAILED", 37, 100}, + #endif + #ifdef DSO_R_DSO_ALREADY_LOADED + {"DSO_ALREADY_LOADED", ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED}, + #else + {"DSO_ALREADY_LOADED", 37, 110}, + #endif + #ifdef DSO_R_EMPTY_FILE_STRUCTURE + {"EMPTY_FILE_STRUCTURE", ERR_LIB_DSO, DSO_R_EMPTY_FILE_STRUCTURE}, + #else + {"EMPTY_FILE_STRUCTURE", 37, 113}, + #endif + #ifdef DSO_R_FAILURE + {"FAILURE", ERR_LIB_DSO, DSO_R_FAILURE}, + #else + {"FAILURE", 37, 114}, + #endif + #ifdef DSO_R_FILENAME_TOO_BIG + {"FILENAME_TOO_BIG", ERR_LIB_DSO, DSO_R_FILENAME_TOO_BIG}, + #else + {"FILENAME_TOO_BIG", 37, 101}, + #endif + #ifdef DSO_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_DSO, DSO_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 37, 102}, + #endif + #ifdef DSO_R_INCORRECT_FILE_SYNTAX + {"INCORRECT_FILE_SYNTAX", ERR_LIB_DSO, DSO_R_INCORRECT_FILE_SYNTAX}, + #else + {"INCORRECT_FILE_SYNTAX", 37, 115}, + #endif + #ifdef DSO_R_LOAD_FAILED + {"LOAD_FAILED", ERR_LIB_DSO, DSO_R_LOAD_FAILED}, + #else + {"LOAD_FAILED", 37, 103}, + #endif + #ifdef DSO_R_NAME_TRANSLATION_FAILED + {"NAME_TRANSLATION_FAILED", ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED}, + #else + {"NAME_TRANSLATION_FAILED", 37, 109}, + #endif + #ifdef DSO_R_NO_FILENAME + {"NO_FILENAME", ERR_LIB_DSO, DSO_R_NO_FILENAME}, + #else + {"NO_FILENAME", 37, 111}, + #endif + #ifdef DSO_R_NULL_HANDLE + {"NULL_HANDLE", ERR_LIB_DSO, DSO_R_NULL_HANDLE}, + #else + {"NULL_HANDLE", 37, 104}, + #endif + #ifdef DSO_R_SET_FILENAME_FAILED + {"SET_FILENAME_FAILED", ERR_LIB_DSO, DSO_R_SET_FILENAME_FAILED}, + #else + {"SET_FILENAME_FAILED", 37, 112}, + #endif + #ifdef DSO_R_STACK_ERROR + {"STACK_ERROR", ERR_LIB_DSO, DSO_R_STACK_ERROR}, + #else + {"STACK_ERROR", 37, 105}, + #endif + #ifdef DSO_R_SYM_FAILURE + {"SYM_FAILURE", ERR_LIB_DSO, DSO_R_SYM_FAILURE}, + #else + {"SYM_FAILURE", 37, 106}, + #endif + #ifdef DSO_R_UNLOAD_FAILED + {"UNLOAD_FAILED", ERR_LIB_DSO, DSO_R_UNLOAD_FAILED}, + #else + {"UNLOAD_FAILED", 37, 107}, + #endif + #ifdef DSO_R_UNSUPPORTED + {"UNSUPPORTED", ERR_LIB_DSO, DSO_R_UNSUPPORTED}, + #else + {"UNSUPPORTED", 37, 108}, + #endif + #ifdef EC_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_EC, EC_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 16, 115}, + #endif + #ifdef EC_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_EC, EC_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 16, 156}, + #endif + #ifdef EC_R_BIGNUM_OUT_OF_RANGE + {"BIGNUM_OUT_OF_RANGE", ERR_LIB_EC, EC_R_BIGNUM_OUT_OF_RANGE}, + #else + {"BIGNUM_OUT_OF_RANGE", 16, 144}, + #endif + #ifdef EC_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EC, EC_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 16, 100}, + #endif + #ifdef EC_R_CANNOT_INVERT + {"CANNOT_INVERT", ERR_LIB_EC, EC_R_CANNOT_INVERT}, + #else + {"CANNOT_INVERT", 16, 165}, + #endif + #ifdef EC_R_COORDINATES_OUT_OF_RANGE + {"COORDINATES_OUT_OF_RANGE", ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE}, + #else + {"COORDINATES_OUT_OF_RANGE", 16, 146}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDH + {"CURVE_DOES_NOT_SUPPORT_ECDH", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDH", 16, 160}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING + {"CURVE_DOES_NOT_SUPPORT_SIGNING", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING}, + #else + {"CURVE_DOES_NOT_SUPPORT_SIGNING", 16, 159}, + #endif + #ifdef EC_R_D2I_ECPKPARAMETERS_FAILURE + {"D2I_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_D2I_ECPKPARAMETERS_FAILURE}, + #else + {"D2I_ECPKPARAMETERS_FAILURE", 16, 117}, + #endif + #ifdef EC_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EC, EC_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 16, 142}, + #endif + #ifdef EC_R_DISCRIMINANT_IS_ZERO + {"DISCRIMINANT_IS_ZERO", ERR_LIB_EC, EC_R_DISCRIMINANT_IS_ZERO}, + #else + {"DISCRIMINANT_IS_ZERO", 16, 118}, + #endif + #ifdef EC_R_EC_GROUP_NEW_BY_NAME_FAILURE + {"EC_GROUP_NEW_BY_NAME_FAILURE", ERR_LIB_EC, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE}, + #else + {"EC_GROUP_NEW_BY_NAME_FAILURE", 16, 119}, + #endif + #ifdef EC_R_FIELD_TOO_LARGE + {"FIELD_TOO_LARGE", ERR_LIB_EC, EC_R_FIELD_TOO_LARGE}, + #else + {"FIELD_TOO_LARGE", 16, 143}, + #endif + #ifdef EC_R_GF2M_NOT_SUPPORTED + {"GF2M_NOT_SUPPORTED", ERR_LIB_EC, EC_R_GF2M_NOT_SUPPORTED}, + #else + {"GF2M_NOT_SUPPORTED", 16, 147}, + #endif + #ifdef EC_R_GROUP2PKPARAMETERS_FAILURE + {"GROUP2PKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_GROUP2PKPARAMETERS_FAILURE}, + #else + {"GROUP2PKPARAMETERS_FAILURE", 16, 120}, + #endif + #ifdef EC_R_I2D_ECPKPARAMETERS_FAILURE + {"I2D_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_I2D_ECPKPARAMETERS_FAILURE}, + #else + {"I2D_ECPKPARAMETERS_FAILURE", 16, 121}, + #endif + #ifdef EC_R_INCOMPATIBLE_OBJECTS + {"INCOMPATIBLE_OBJECTS", ERR_LIB_EC, EC_R_INCOMPATIBLE_OBJECTS}, + #else + {"INCOMPATIBLE_OBJECTS", 16, 101}, + #endif + #ifdef EC_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_EC, EC_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 16, 112}, + #endif + #ifdef EC_R_INVALID_COMPRESSED_POINT + {"INVALID_COMPRESSED_POINT", ERR_LIB_EC, EC_R_INVALID_COMPRESSED_POINT}, + #else + {"INVALID_COMPRESSED_POINT", 16, 110}, + #endif + #ifdef EC_R_INVALID_COMPRESSION_BIT + {"INVALID_COMPRESSION_BIT", ERR_LIB_EC, EC_R_INVALID_COMPRESSION_BIT}, + #else + {"INVALID_COMPRESSION_BIT", 16, 109}, + #endif + #ifdef EC_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_EC, EC_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 16, 141}, + #endif + #ifdef EC_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EC, EC_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 16, 151}, + #endif + #ifdef EC_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_EC, EC_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 16, 138}, + #endif + #ifdef EC_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_EC, EC_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 16, 102}, + #endif + #ifdef EC_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_EC, EC_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 16, 103}, + #endif + #ifdef EC_R_INVALID_FORM + {"INVALID_FORM", ERR_LIB_EC, EC_R_INVALID_FORM}, + #else + {"INVALID_FORM", 16, 104}, + #endif + #ifdef EC_R_INVALID_GROUP_ORDER + {"INVALID_GROUP_ORDER", ERR_LIB_EC, EC_R_INVALID_GROUP_ORDER}, + #else + {"INVALID_GROUP_ORDER", 16, 122}, + #endif + #ifdef EC_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EC, EC_R_INVALID_KEY}, + #else + {"INVALID_KEY", 16, 116}, + #endif + #ifdef EC_R_INVALID_OUTPUT_LENGTH + {"INVALID_OUTPUT_LENGTH", ERR_LIB_EC, EC_R_INVALID_OUTPUT_LENGTH}, + #else + {"INVALID_OUTPUT_LENGTH", 16, 161}, + #endif + #ifdef EC_R_INVALID_PEER_KEY + {"INVALID_PEER_KEY", ERR_LIB_EC, EC_R_INVALID_PEER_KEY}, + #else + {"INVALID_PEER_KEY", 16, 133}, + #endif + #ifdef EC_R_INVALID_PENTANOMIAL_BASIS + {"INVALID_PENTANOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_PENTANOMIAL_BASIS}, + #else + {"INVALID_PENTANOMIAL_BASIS", 16, 132}, + #endif + #ifdef EC_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_EC, EC_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 16, 123}, + #endif + #ifdef EC_R_INVALID_TRINOMIAL_BASIS + {"INVALID_TRINOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_TRINOMIAL_BASIS}, + #else + {"INVALID_TRINOMIAL_BASIS", 16, 137}, + #endif + #ifdef EC_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_EC, EC_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 16, 148}, + #endif + #ifdef EC_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_EC, EC_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 16, 140}, + #endif + #ifdef EC_R_LADDER_POST_FAILURE + {"LADDER_POST_FAILURE", ERR_LIB_EC, EC_R_LADDER_POST_FAILURE}, + #else + {"LADDER_POST_FAILURE", 16, 136}, + #endif + #ifdef EC_R_LADDER_PRE_FAILURE + {"LADDER_PRE_FAILURE", ERR_LIB_EC, EC_R_LADDER_PRE_FAILURE}, + #else + {"LADDER_PRE_FAILURE", 16, 153}, + #endif + #ifdef EC_R_LADDER_STEP_FAILURE + {"LADDER_STEP_FAILURE", ERR_LIB_EC, EC_R_LADDER_STEP_FAILURE}, + #else + {"LADDER_STEP_FAILURE", 16, 162}, + #endif + #ifdef EC_R_MISSING_OID + {"MISSING_OID", ERR_LIB_EC, EC_R_MISSING_OID}, + #else + {"MISSING_OID", 16, 167}, + #endif + #ifdef EC_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EC, EC_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 16, 124}, + #endif + #ifdef EC_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_EC, EC_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 16, 125}, + #endif + #ifdef EC_R_NEED_NEW_SETUP_VALUES + {"NEED_NEW_SETUP_VALUES", ERR_LIB_EC, EC_R_NEED_NEW_SETUP_VALUES}, + #else + {"NEED_NEW_SETUP_VALUES", 16, 157}, + #endif + #ifdef EC_R_NOT_A_NIST_PRIME + {"NOT_A_NIST_PRIME", ERR_LIB_EC, EC_R_NOT_A_NIST_PRIME}, + #else + {"NOT_A_NIST_PRIME", 16, 135}, + #endif + #ifdef EC_R_NOT_IMPLEMENTED + {"NOT_IMPLEMENTED", ERR_LIB_EC, EC_R_NOT_IMPLEMENTED}, + #else + {"NOT_IMPLEMENTED", 16, 126}, + #endif + #ifdef EC_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_EC, EC_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 16, 111}, + #endif + #ifdef EC_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_EC, EC_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 16, 139}, + #endif + #ifdef EC_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_EC, EC_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 16, 154}, + #endif + #ifdef EC_R_OPERATION_NOT_SUPPORTED + {"OPERATION_NOT_SUPPORTED", ERR_LIB_EC, EC_R_OPERATION_NOT_SUPPORTED}, + #else + {"OPERATION_NOT_SUPPORTED", 16, 152}, + #endif + #ifdef EC_R_PASSED_NULL_PARAMETER + {"PASSED_NULL_PARAMETER", ERR_LIB_EC, EC_R_PASSED_NULL_PARAMETER}, + #else + {"PASSED_NULL_PARAMETER", 16, 134}, + #endif + #ifdef EC_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_EC, EC_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 16, 149}, + #endif + #ifdef EC_R_PKPARAMETERS2GROUP_FAILURE + {"PKPARAMETERS2GROUP_FAILURE", ERR_LIB_EC, EC_R_PKPARAMETERS2GROUP_FAILURE}, + #else + {"PKPARAMETERS2GROUP_FAILURE", 16, 127}, + #endif + #ifdef EC_R_POINT_ARITHMETIC_FAILURE + {"POINT_ARITHMETIC_FAILURE", ERR_LIB_EC, EC_R_POINT_ARITHMETIC_FAILURE}, + #else + {"POINT_ARITHMETIC_FAILURE", 16, 155}, + #endif + #ifdef EC_R_POINT_AT_INFINITY + {"POINT_AT_INFINITY", ERR_LIB_EC, EC_R_POINT_AT_INFINITY}, + #else + {"POINT_AT_INFINITY", 16, 106}, + #endif + #ifdef EC_R_POINT_COORDINATES_BLIND_FAILURE + {"POINT_COORDINATES_BLIND_FAILURE", ERR_LIB_EC, EC_R_POINT_COORDINATES_BLIND_FAILURE}, + #else + {"POINT_COORDINATES_BLIND_FAILURE", 16, 163}, + #endif + #ifdef EC_R_POINT_IS_NOT_ON_CURVE + {"POINT_IS_NOT_ON_CURVE", ERR_LIB_EC, EC_R_POINT_IS_NOT_ON_CURVE}, + #else + {"POINT_IS_NOT_ON_CURVE", 16, 107}, + #endif + #ifdef EC_R_RANDOM_NUMBER_GENERATION_FAILED + {"RANDOM_NUMBER_GENERATION_FAILED", ERR_LIB_EC, EC_R_RANDOM_NUMBER_GENERATION_FAILED}, + #else + {"RANDOM_NUMBER_GENERATION_FAILED", 16, 158}, + #endif + #ifdef EC_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_EC, EC_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 16, 150}, + #endif + #ifdef EC_R_SLOT_FULL + {"SLOT_FULL", ERR_LIB_EC, EC_R_SLOT_FULL}, + #else + {"SLOT_FULL", 16, 108}, + #endif + #ifdef EC_R_UNDEFINED_GENERATOR + {"UNDEFINED_GENERATOR", ERR_LIB_EC, EC_R_UNDEFINED_GENERATOR}, + #else + {"UNDEFINED_GENERATOR", 16, 113}, + #endif + #ifdef EC_R_UNDEFINED_ORDER + {"UNDEFINED_ORDER", ERR_LIB_EC, EC_R_UNDEFINED_ORDER}, + #else + {"UNDEFINED_ORDER", 16, 128}, + #endif + #ifdef EC_R_UNKNOWN_COFACTOR + {"UNKNOWN_COFACTOR", ERR_LIB_EC, EC_R_UNKNOWN_COFACTOR}, + #else + {"UNKNOWN_COFACTOR", 16, 164}, + #endif + #ifdef EC_R_UNKNOWN_GROUP + {"UNKNOWN_GROUP", ERR_LIB_EC, EC_R_UNKNOWN_GROUP}, + #else + {"UNKNOWN_GROUP", 16, 129}, + #endif + #ifdef EC_R_UNKNOWN_ORDER + {"UNKNOWN_ORDER", ERR_LIB_EC, EC_R_UNKNOWN_ORDER}, + #else + {"UNKNOWN_ORDER", 16, 114}, + #endif + #ifdef EC_R_UNSUPPORTED_FIELD + {"UNSUPPORTED_FIELD", ERR_LIB_EC, EC_R_UNSUPPORTED_FIELD}, + #else + {"UNSUPPORTED_FIELD", 16, 131}, + #endif + #ifdef EC_R_WRONG_CURVE_PARAMETERS + {"WRONG_CURVE_PARAMETERS", ERR_LIB_EC, EC_R_WRONG_CURVE_PARAMETERS}, + #else + {"WRONG_CURVE_PARAMETERS", 16, 145}, + #endif + #ifdef EC_R_WRONG_ORDER + {"WRONG_ORDER", ERR_LIB_EC, EC_R_WRONG_ORDER}, + #else + {"WRONG_ORDER", 16, 130}, + #endif + #ifdef ENGINE_R_ALREADY_LOADED + {"ALREADY_LOADED", ERR_LIB_ENGINE, ENGINE_R_ALREADY_LOADED}, + #else + {"ALREADY_LOADED", 38, 100}, + #endif + #ifdef ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER + {"ARGUMENT_IS_NOT_A_NUMBER", ERR_LIB_ENGINE, ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER}, + #else + {"ARGUMENT_IS_NOT_A_NUMBER", 38, 133}, + #endif + #ifdef ENGINE_R_CMD_NOT_EXECUTABLE + {"CMD_NOT_EXECUTABLE", ERR_LIB_ENGINE, ENGINE_R_CMD_NOT_EXECUTABLE}, + #else + {"CMD_NOT_EXECUTABLE", 38, 134}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_INPUT + {"COMMAND_TAKES_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_INPUT}, + #else + {"COMMAND_TAKES_INPUT", 38, 135}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_NO_INPUT + {"COMMAND_TAKES_NO_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_NO_INPUT}, + #else + {"COMMAND_TAKES_NO_INPUT", 38, 136}, + #endif + #ifdef ENGINE_R_CONFLICTING_ENGINE_ID + {"CONFLICTING_ENGINE_ID", ERR_LIB_ENGINE, ENGINE_R_CONFLICTING_ENGINE_ID}, + #else + {"CONFLICTING_ENGINE_ID", 38, 103}, + #endif + #ifdef ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED + {"CTRL_COMMAND_NOT_IMPLEMENTED", ERR_LIB_ENGINE, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED}, + #else + {"CTRL_COMMAND_NOT_IMPLEMENTED", 38, 119}, + #endif + #ifdef ENGINE_R_DSO_FAILURE + {"DSO_FAILURE", ERR_LIB_ENGINE, ENGINE_R_DSO_FAILURE}, + #else + {"DSO_FAILURE", 38, 104}, + #endif + #ifdef ENGINE_R_DSO_NOT_FOUND + {"DSO_NOT_FOUND", ERR_LIB_ENGINE, ENGINE_R_DSO_NOT_FOUND}, + #else + {"DSO_NOT_FOUND", 38, 132}, + #endif + #ifdef ENGINE_R_ENGINES_SECTION_ERROR + {"ENGINES_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINES_SECTION_ERROR}, + #else + {"ENGINES_SECTION_ERROR", 38, 148}, + #endif + #ifdef ENGINE_R_ENGINE_CONFIGURATION_ERROR + {"ENGINE_CONFIGURATION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_CONFIGURATION_ERROR}, + #else + {"ENGINE_CONFIGURATION_ERROR", 38, 102}, + #endif + #ifdef ENGINE_R_ENGINE_IS_NOT_IN_LIST + {"ENGINE_IS_NOT_IN_LIST", ERR_LIB_ENGINE, ENGINE_R_ENGINE_IS_NOT_IN_LIST}, + #else + {"ENGINE_IS_NOT_IN_LIST", 38, 105}, + #endif + #ifdef ENGINE_R_ENGINE_SECTION_ERROR + {"ENGINE_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_SECTION_ERROR}, + #else + {"ENGINE_SECTION_ERROR", 38, 149}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PRIVATE_KEY + {"FAILED_LOADING_PRIVATE_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PRIVATE_KEY}, + #else + {"FAILED_LOADING_PRIVATE_KEY", 38, 128}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PUBLIC_KEY + {"FAILED_LOADING_PUBLIC_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PUBLIC_KEY}, + #else + {"FAILED_LOADING_PUBLIC_KEY", 38, 129}, + #endif + #ifdef ENGINE_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_ENGINE, ENGINE_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 38, 106}, + #endif + #ifdef ENGINE_R_ID_OR_NAME_MISSING + {"ID_OR_NAME_MISSING", ERR_LIB_ENGINE, ENGINE_R_ID_OR_NAME_MISSING}, + #else + {"ID_OR_NAME_MISSING", 38, 108}, + #endif + #ifdef ENGINE_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ENGINE, ENGINE_R_INIT_FAILED}, + #else + {"INIT_FAILED", 38, 109}, + #endif + #ifdef ENGINE_R_INTERNAL_LIST_ERROR + {"INTERNAL_LIST_ERROR", ERR_LIB_ENGINE, ENGINE_R_INTERNAL_LIST_ERROR}, + #else + {"INTERNAL_LIST_ERROR", 38, 110}, + #endif + #ifdef ENGINE_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_ENGINE, ENGINE_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 38, 143}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NAME + {"INVALID_CMD_NAME", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NAME}, + #else + {"INVALID_CMD_NAME", 38, 137}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NUMBER + {"INVALID_CMD_NUMBER", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NUMBER}, + #else + {"INVALID_CMD_NUMBER", 38, 138}, + #endif + #ifdef ENGINE_R_INVALID_INIT_VALUE + {"INVALID_INIT_VALUE", ERR_LIB_ENGINE, ENGINE_R_INVALID_INIT_VALUE}, + #else + {"INVALID_INIT_VALUE", 38, 151}, + #endif + #ifdef ENGINE_R_INVALID_STRING + {"INVALID_STRING", ERR_LIB_ENGINE, ENGINE_R_INVALID_STRING}, + #else + {"INVALID_STRING", 38, 150}, + #endif + #ifdef ENGINE_R_NOT_INITIALISED + {"NOT_INITIALISED", ERR_LIB_ENGINE, ENGINE_R_NOT_INITIALISED}, + #else + {"NOT_INITIALISED", 38, 117}, + #endif + #ifdef ENGINE_R_NOT_LOADED + {"NOT_LOADED", ERR_LIB_ENGINE, ENGINE_R_NOT_LOADED}, + #else + {"NOT_LOADED", 38, 112}, + #endif + #ifdef ENGINE_R_NO_CONTROL_FUNCTION + {"NO_CONTROL_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_CONTROL_FUNCTION}, + #else + {"NO_CONTROL_FUNCTION", 38, 120}, + #endif + #ifdef ENGINE_R_NO_INDEX + {"NO_INDEX", ERR_LIB_ENGINE, ENGINE_R_NO_INDEX}, + #else + {"NO_INDEX", 38, 144}, + #endif + #ifdef ENGINE_R_NO_LOAD_FUNCTION + {"NO_LOAD_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_LOAD_FUNCTION}, + #else + {"NO_LOAD_FUNCTION", 38, 125}, + #endif + #ifdef ENGINE_R_NO_REFERENCE + {"NO_REFERENCE", ERR_LIB_ENGINE, ENGINE_R_NO_REFERENCE}, + #else + {"NO_REFERENCE", 38, 130}, + #endif + #ifdef ENGINE_R_NO_SUCH_ENGINE + {"NO_SUCH_ENGINE", ERR_LIB_ENGINE, ENGINE_R_NO_SUCH_ENGINE}, + #else + {"NO_SUCH_ENGINE", 38, 116}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_CIPHER + {"UNIMPLEMENTED_CIPHER", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_CIPHER}, + #else + {"UNIMPLEMENTED_CIPHER", 38, 146}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_DIGEST + {"UNIMPLEMENTED_DIGEST", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_DIGEST}, + #else + {"UNIMPLEMENTED_DIGEST", 38, 147}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD}, + #else + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", 38, 101}, + #endif + #ifdef ENGINE_R_VERSION_INCOMPATIBILITY + {"VERSION_INCOMPATIBILITY", ERR_LIB_ENGINE, ENGINE_R_VERSION_INCOMPATIBILITY}, + #else + {"VERSION_INCOMPATIBILITY", 38, 145}, + #endif + #ifdef EVP_R_AES_KEY_SETUP_FAILED + {"AES_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED}, + #else + {"AES_KEY_SETUP_FAILED", 6, 143}, + #endif + #ifdef EVP_R_ARIA_KEY_SETUP_FAILED + {"ARIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_ARIA_KEY_SETUP_FAILED}, + #else + {"ARIA_KEY_SETUP_FAILED", 6, 176}, + #endif + #ifdef EVP_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_EVP, EVP_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 6, 100}, + #endif + #ifdef EVP_R_BAD_KEY_LENGTH + {"BAD_KEY_LENGTH", ERR_LIB_EVP, EVP_R_BAD_KEY_LENGTH}, + #else + {"BAD_KEY_LENGTH", 6, 195}, + #endif + #ifdef EVP_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EVP, EVP_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 6, 155}, + #endif + #ifdef EVP_R_CAMELLIA_KEY_SETUP_FAILED + {"CAMELLIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_CAMELLIA_KEY_SETUP_FAILED}, + #else + {"CAMELLIA_KEY_SETUP_FAILED", 6, 157}, + #endif + #ifdef EVP_R_CIPHER_PARAMETER_ERROR + {"CIPHER_PARAMETER_ERROR", ERR_LIB_EVP, EVP_R_CIPHER_PARAMETER_ERROR}, + #else + {"CIPHER_PARAMETER_ERROR", 6, 122}, + #endif + #ifdef EVP_R_COMMAND_NOT_SUPPORTED + {"COMMAND_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_COMMAND_NOT_SUPPORTED}, + #else + {"COMMAND_NOT_SUPPORTED", 6, 147}, + #endif + #ifdef EVP_R_COPY_ERROR + {"COPY_ERROR", ERR_LIB_EVP, EVP_R_COPY_ERROR}, + #else + {"COPY_ERROR", 6, 173}, + #endif + #ifdef EVP_R_CTRL_NOT_IMPLEMENTED + {"CTRL_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_NOT_IMPLEMENTED}, + #else + {"CTRL_NOT_IMPLEMENTED", 6, 132}, + #endif + #ifdef EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED + {"CTRL_OPERATION_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED}, + #else + {"CTRL_OPERATION_NOT_IMPLEMENTED", 6, 133}, + #endif + #ifdef EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH}, + #else + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", 6, 138}, + #endif + #ifdef EVP_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EVP, EVP_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 6, 114}, + #endif + #ifdef EVP_R_DIFFERENT_KEY_TYPES + {"DIFFERENT_KEY_TYPES", ERR_LIB_EVP, EVP_R_DIFFERENT_KEY_TYPES}, + #else + {"DIFFERENT_KEY_TYPES", 6, 101}, + #endif + #ifdef EVP_R_DIFFERENT_PARAMETERS + {"DIFFERENT_PARAMETERS", ERR_LIB_EVP, EVP_R_DIFFERENT_PARAMETERS}, + #else + {"DIFFERENT_PARAMETERS", 6, 153}, + #endif + #ifdef EVP_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_EVP, EVP_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 6, 165}, + #endif + #ifdef EVP_R_ERROR_SETTING_FIPS_MODE + {"ERROR_SETTING_FIPS_MODE", ERR_LIB_EVP, EVP_R_ERROR_SETTING_FIPS_MODE}, + #else + {"ERROR_SETTING_FIPS_MODE", 6, 166}, + #endif + #ifdef EVP_R_EXPECTING_AN_HMAC_KEY + {"EXPECTING_AN_HMAC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY}, + #else + {"EXPECTING_AN_HMAC_KEY", 6, 174}, + #endif + #ifdef EVP_R_EXPECTING_AN_RSA_KEY + {"EXPECTING_AN_RSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY}, + #else + {"EXPECTING_AN_RSA_KEY", 6, 127}, + #endif + #ifdef EVP_R_EXPECTING_A_DH_KEY + {"EXPECTING_A_DH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DH_KEY}, + #else + {"EXPECTING_A_DH_KEY", 6, 128}, + #endif + #ifdef EVP_R_EXPECTING_A_DSA_KEY + {"EXPECTING_A_DSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DSA_KEY}, + #else + {"EXPECTING_A_DSA_KEY", 6, 129}, + #endif + #ifdef EVP_R_EXPECTING_A_EC_KEY + {"EXPECTING_A_EC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_EC_KEY}, + #else + {"EXPECTING_A_EC_KEY", 6, 142}, + #endif + #ifdef EVP_R_EXPECTING_A_POLY1305_KEY + {"EXPECTING_A_POLY1305_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY}, + #else + {"EXPECTING_A_POLY1305_KEY", 6, 164}, + #endif + #ifdef EVP_R_EXPECTING_A_SIPHASH_KEY + {"EXPECTING_A_SIPHASH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY}, + #else + {"EXPECTING_A_SIPHASH_KEY", 6, 175}, + #endif + #ifdef EVP_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 6, 167}, + #endif + #ifdef EVP_R_GET_RAW_KEY_FAILED + {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, + #else + {"GET_RAW_KEY_FAILED", 6, 182}, + #endif + #ifdef EVP_R_ILLEGAL_SCRYPT_PARAMETERS + {"ILLEGAL_SCRYPT_PARAMETERS", ERR_LIB_EVP, EVP_R_ILLEGAL_SCRYPT_PARAMETERS}, + #else + {"ILLEGAL_SCRYPT_PARAMETERS", 6, 171}, + #endif + #ifdef EVP_R_INITIALIZATION_ERROR + {"INITIALIZATION_ERROR", ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR}, + #else + {"INITIALIZATION_ERROR", 6, 134}, + #endif + #ifdef EVP_R_INPUT_NOT_INITIALIZED + {"INPUT_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_INPUT_NOT_INITIALIZED}, + #else + {"INPUT_NOT_INITIALIZED", 6, 111}, + #endif + #ifdef EVP_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EVP, EVP_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 6, 152}, + #endif + #ifdef EVP_R_INVALID_FIPS_MODE + {"INVALID_FIPS_MODE", ERR_LIB_EVP, EVP_R_INVALID_FIPS_MODE}, + #else + {"INVALID_FIPS_MODE", 6, 168}, + #endif + #ifdef EVP_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 6, 194}, + #endif + #ifdef EVP_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EVP, EVP_R_INVALID_KEY}, + #else + {"INVALID_KEY", 6, 163}, + #endif + #ifdef EVP_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 6, 130}, + #endif + #ifdef EVP_R_INVALID_OPERATION + {"INVALID_OPERATION", ERR_LIB_EVP, EVP_R_INVALID_OPERATION}, + #else + {"INVALID_OPERATION", 6, 148}, + #endif + #ifdef EVP_R_KEYGEN_FAILURE + {"KEYGEN_FAILURE", ERR_LIB_EVP, EVP_R_KEYGEN_FAILURE}, + #else + {"KEYGEN_FAILURE", 6, 120}, + #endif + #ifdef EVP_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 6, 180}, + #endif + #ifdef EVP_R_MEMORY_LIMIT_EXCEEDED + {"MEMORY_LIMIT_EXCEEDED", ERR_LIB_EVP, EVP_R_MEMORY_LIMIT_EXCEEDED}, + #else + {"MEMORY_LIMIT_EXCEEDED", 6, 172}, + #endif + #ifdef EVP_R_MESSAGE_DIGEST_IS_NULL + {"MESSAGE_DIGEST_IS_NULL", ERR_LIB_EVP, EVP_R_MESSAGE_DIGEST_IS_NULL}, + #else + {"MESSAGE_DIGEST_IS_NULL", 6, 159}, + #endif + #ifdef EVP_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 6, 144}, + #endif + #ifdef EVP_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EVP, EVP_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 6, 103}, + #endif + #ifdef EVP_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_EVP, EVP_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 6, 178}, + #endif + #ifdef EVP_R_NO_CIPHER_SET + {"NO_CIPHER_SET", ERR_LIB_EVP, EVP_R_NO_CIPHER_SET}, + #else + {"NO_CIPHER_SET", 6, 131}, + #endif + #ifdef EVP_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_EVP, EVP_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 6, 158}, + #endif + #ifdef EVP_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_EVP, EVP_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 6, 139}, + #endif + #ifdef EVP_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_EVP, EVP_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 6, 154}, + #endif + #ifdef EVP_R_NO_OPERATION_SET + {"NO_OPERATION_SET", ERR_LIB_EVP, EVP_R_NO_OPERATION_SET}, + #else + {"NO_OPERATION_SET", 6, 149}, + #endif + #ifdef EVP_R_ONLY_ONESHOT_SUPPORTED + {"ONLY_ONESHOT_SUPPORTED", ERR_LIB_EVP, EVP_R_ONLY_ONESHOT_SUPPORTED}, + #else + {"ONLY_ONESHOT_SUPPORTED", 6, 177}, + #endif + #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, + #endif + #ifdef EVP_R_OPERATON_NOT_INITIALIZED + {"OPERATON_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_OPERATON_NOT_INITIALIZED}, + #else + {"OPERATON_NOT_INITIALIZED", 6, 151}, + #endif + #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW + {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, + #else + {"OUTPUT_WOULD_OVERFLOW", 6, 184}, + #endif + #ifdef EVP_R_PARTIALLY_OVERLAPPING + {"PARTIALLY_OVERLAPPING", ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING}, + #else + {"PARTIALLY_OVERLAPPING", 6, 162}, + #endif + #ifdef EVP_R_PBKDF2_ERROR + {"PBKDF2_ERROR", ERR_LIB_EVP, EVP_R_PBKDF2_ERROR}, + #else + {"PBKDF2_ERROR", 6, 181}, + #endif + #ifdef EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", ERR_LIB_EVP, EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED}, + #else + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", 6, 179}, + #endif + #ifdef EVP_R_PRIVATE_KEY_DECODE_ERROR + {"PRIVATE_KEY_DECODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_DECODE_ERROR}, + #else + {"PRIVATE_KEY_DECODE_ERROR", 6, 145}, + #endif + #ifdef EVP_R_PRIVATE_KEY_ENCODE_ERROR + {"PRIVATE_KEY_ENCODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_ENCODE_ERROR}, + #else + {"PRIVATE_KEY_ENCODE_ERROR", 6, 146}, + #endif + #ifdef EVP_R_PUBLIC_KEY_NOT_RSA + {"PUBLIC_KEY_NOT_RSA", ERR_LIB_EVP, EVP_R_PUBLIC_KEY_NOT_RSA}, + #else + {"PUBLIC_KEY_NOT_RSA", 6, 106}, + #endif + #ifdef EVP_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 6, 160}, + #endif + #ifdef EVP_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_EVP, EVP_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 6, 161}, + #endif + #ifdef EVP_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 6, 169}, + #endif + #ifdef EVP_R_UNKNOWN_PBE_ALGORITHM + {"UNKNOWN_PBE_ALGORITHM", ERR_LIB_EVP, EVP_R_UNKNOWN_PBE_ALGORITHM}, + #else + {"UNKNOWN_PBE_ALGORITHM", 6, 121}, + #endif + #ifdef EVP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 6, 156}, + #endif + #ifdef EVP_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_EVP, EVP_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 6, 107}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEYLENGTH + {"UNSUPPORTED_KEYLENGTH", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEYLENGTH}, + #else + {"UNSUPPORTED_KEYLENGTH", 6, 123}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION}, + #else + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", 6, 124}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 6, 108}, + #endif + #ifdef EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_EVP, EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 6, 135}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRF + {"UNSUPPORTED_PRF", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRF}, + #else + {"UNSUPPORTED_PRF", 6, 125}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM}, + #else + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", 6, 118}, + #endif + #ifdef EVP_R_UNSUPPORTED_SALT_TYPE + {"UNSUPPORTED_SALT_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_SALT_TYPE}, + #else + {"UNSUPPORTED_SALT_TYPE", 6, 126}, + #endif + #ifdef EVP_R_WRAP_MODE_NOT_ALLOWED + {"WRAP_MODE_NOT_ALLOWED", ERR_LIB_EVP, EVP_R_WRAP_MODE_NOT_ALLOWED}, + #else + {"WRAP_MODE_NOT_ALLOWED", 6, 170}, + #endif + #ifdef EVP_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 6, 109}, + #endif + #ifdef EVP_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 6, 183}, + #endif + #ifdef KDF_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_KDF, KDF_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 52, 100}, + #endif + #ifdef KDF_R_MISSING_ITERATION_COUNT + {"MISSING_ITERATION_COUNT", ERR_LIB_KDF, KDF_R_MISSING_ITERATION_COUNT}, + #else + {"MISSING_ITERATION_COUNT", 52, 109}, + #endif + #ifdef KDF_R_MISSING_KEY + {"MISSING_KEY", ERR_LIB_KDF, KDF_R_MISSING_KEY}, + #else + {"MISSING_KEY", 52, 104}, + #endif + #ifdef KDF_R_MISSING_MESSAGE_DIGEST + {"MISSING_MESSAGE_DIGEST", ERR_LIB_KDF, KDF_R_MISSING_MESSAGE_DIGEST}, + #else + {"MISSING_MESSAGE_DIGEST", 52, 105}, + #endif + #ifdef KDF_R_MISSING_PARAMETER + {"MISSING_PARAMETER", ERR_LIB_KDF, KDF_R_MISSING_PARAMETER}, + #else + {"MISSING_PARAMETER", 52, 101}, + #endif + #ifdef KDF_R_MISSING_PASS + {"MISSING_PASS", ERR_LIB_KDF, KDF_R_MISSING_PASS}, + #else + {"MISSING_PASS", 52, 110}, + #endif + #ifdef KDF_R_MISSING_SALT + {"MISSING_SALT", ERR_LIB_KDF, KDF_R_MISSING_SALT}, + #else + {"MISSING_SALT", 52, 111}, + #endif + #ifdef KDF_R_MISSING_SECRET + {"MISSING_SECRET", ERR_LIB_KDF, KDF_R_MISSING_SECRET}, + #else + {"MISSING_SECRET", 52, 107}, + #endif + #ifdef KDF_R_MISSING_SEED + {"MISSING_SEED", ERR_LIB_KDF, KDF_R_MISSING_SEED}, + #else + {"MISSING_SEED", 52, 106}, + #endif + #ifdef KDF_R_UNKNOWN_PARAMETER_TYPE + {"UNKNOWN_PARAMETER_TYPE", ERR_LIB_KDF, KDF_R_UNKNOWN_PARAMETER_TYPE}, + #else + {"UNKNOWN_PARAMETER_TYPE", 52, 103}, + #endif + #ifdef KDF_R_VALUE_ERROR + {"VALUE_ERROR", ERR_LIB_KDF, KDF_R_VALUE_ERROR}, + #else + {"VALUE_ERROR", 52, 108}, + #endif + #ifdef KDF_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_KDF, KDF_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 52, 102}, + #endif + #ifdef OBJ_R_OID_EXISTS + {"OID_EXISTS", ERR_LIB_OBJ, OBJ_R_OID_EXISTS}, + #else + {"OID_EXISTS", 8, 102}, + #endif + #ifdef OBJ_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 8, 101}, + #endif + #ifdef OCSP_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_OCSP, OCSP_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 39, 101}, + #endif + #ifdef OCSP_R_DIGEST_ERR + {"DIGEST_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_ERR}, + #else + {"DIGEST_ERR", 39, 102}, + #endif + #ifdef OCSP_R_ERROR_IN_NEXTUPDATE_FIELD + {"ERROR_IN_NEXTUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD}, + #else + {"ERROR_IN_NEXTUPDATE_FIELD", 39, 122}, + #endif + #ifdef OCSP_R_ERROR_IN_THISUPDATE_FIELD + {"ERROR_IN_THISUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_THISUPDATE_FIELD}, + #else + {"ERROR_IN_THISUPDATE_FIELD", 39, 123}, + #endif + #ifdef OCSP_R_ERROR_PARSING_URL + {"ERROR_PARSING_URL", ERR_LIB_OCSP, OCSP_R_ERROR_PARSING_URL}, + #else + {"ERROR_PARSING_URL", 39, 121}, + #endif + #ifdef OCSP_R_MISSING_OCSPSIGNING_USAGE + {"MISSING_OCSPSIGNING_USAGE", ERR_LIB_OCSP, OCSP_R_MISSING_OCSPSIGNING_USAGE}, + #else + {"MISSING_OCSPSIGNING_USAGE", 39, 103}, + #endif + #ifdef OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE + {"NEXTUPDATE_BEFORE_THISUPDATE", ERR_LIB_OCSP, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE}, + #else + {"NEXTUPDATE_BEFORE_THISUPDATE", 39, 124}, + #endif + #ifdef OCSP_R_NOT_BASIC_RESPONSE + {"NOT_BASIC_RESPONSE", ERR_LIB_OCSP, OCSP_R_NOT_BASIC_RESPONSE}, + #else + {"NOT_BASIC_RESPONSE", 39, 104}, + #endif + #ifdef OCSP_R_NO_CERTIFICATES_IN_CHAIN + {"NO_CERTIFICATES_IN_CHAIN", ERR_LIB_OCSP, OCSP_R_NO_CERTIFICATES_IN_CHAIN}, + #else + {"NO_CERTIFICATES_IN_CHAIN", 39, 105}, + #endif + #ifdef OCSP_R_NO_RESPONSE_DATA + {"NO_RESPONSE_DATA", ERR_LIB_OCSP, OCSP_R_NO_RESPONSE_DATA}, + #else + {"NO_RESPONSE_DATA", 39, 108}, + #endif + #ifdef OCSP_R_NO_REVOKED_TIME + {"NO_REVOKED_TIME", ERR_LIB_OCSP, OCSP_R_NO_REVOKED_TIME}, + #else + {"NO_REVOKED_TIME", 39, 109}, + #endif + #ifdef OCSP_R_NO_SIGNER_KEY + {"NO_SIGNER_KEY", ERR_LIB_OCSP, OCSP_R_NO_SIGNER_KEY}, + #else + {"NO_SIGNER_KEY", 39, 130}, + #endif + #ifdef OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_OCSP, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 39, 110}, + #endif + #ifdef OCSP_R_REQUEST_NOT_SIGNED + {"REQUEST_NOT_SIGNED", ERR_LIB_OCSP, OCSP_R_REQUEST_NOT_SIGNED}, + #else + {"REQUEST_NOT_SIGNED", 39, 128}, + #endif + #ifdef OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", ERR_LIB_OCSP, OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA}, + #else + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", 39, 111}, + #endif + #ifdef OCSP_R_ROOT_CA_NOT_TRUSTED + {"ROOT_CA_NOT_TRUSTED", ERR_LIB_OCSP, OCSP_R_ROOT_CA_NOT_TRUSTED}, + #else + {"ROOT_CA_NOT_TRUSTED", 39, 112}, + #endif + #ifdef OCSP_R_SERVER_RESPONSE_ERROR + {"SERVER_RESPONSE_ERROR", ERR_LIB_OCSP, OCSP_R_SERVER_RESPONSE_ERROR}, + #else + {"SERVER_RESPONSE_ERROR", 39, 114}, + #endif + #ifdef OCSP_R_SERVER_RESPONSE_PARSE_ERROR + {"SERVER_RESPONSE_PARSE_ERROR", ERR_LIB_OCSP, OCSP_R_SERVER_RESPONSE_PARSE_ERROR}, + #else + {"SERVER_RESPONSE_PARSE_ERROR", 39, 115}, + #endif + #ifdef OCSP_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_OCSP, OCSP_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 39, 117}, + #endif + #ifdef OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_OCSP, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 39, 118}, + #endif + #ifdef OCSP_R_STATUS_EXPIRED + {"STATUS_EXPIRED", ERR_LIB_OCSP, OCSP_R_STATUS_EXPIRED}, + #else + {"STATUS_EXPIRED", 39, 125}, + #endif + #ifdef OCSP_R_STATUS_NOT_YET_VALID + {"STATUS_NOT_YET_VALID", ERR_LIB_OCSP, OCSP_R_STATUS_NOT_YET_VALID}, + #else + {"STATUS_NOT_YET_VALID", 39, 126}, + #endif + #ifdef OCSP_R_STATUS_TOO_OLD + {"STATUS_TOO_OLD", ERR_LIB_OCSP, OCSP_R_STATUS_TOO_OLD}, + #else + {"STATUS_TOO_OLD", 39, 127}, + #endif + #ifdef OCSP_R_UNKNOWN_MESSAGE_DIGEST + {"UNKNOWN_MESSAGE_DIGEST", ERR_LIB_OCSP, OCSP_R_UNKNOWN_MESSAGE_DIGEST}, + #else + {"UNKNOWN_MESSAGE_DIGEST", 39, 119}, + #endif + #ifdef OCSP_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OCSP, OCSP_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 39, 120}, + #endif + #ifdef OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE + {"UNSUPPORTED_REQUESTORNAME_TYPE", ERR_LIB_OCSP, OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE}, + #else + {"UNSUPPORTED_REQUESTORNAME_TYPE", 39, 129}, + #endif + #ifdef OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE + {"AMBIGUOUS_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE}, + #else + {"AMBIGUOUS_CONTENT_TYPE", 44, 107}, + #endif + #ifdef OSSL_STORE_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_OSSL_STORE, OSSL_STORE_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 44, 115}, + #endif + #ifdef OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC + {"ERROR_VERIFYING_PKCS12_MAC", ERR_LIB_OSSL_STORE, OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC}, + #else + {"ERROR_VERIFYING_PKCS12_MAC", 44, 113}, + #endif + #ifdef OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", ERR_LIB_OSSL_STORE, OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST}, + #else + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", 44, 121}, + #endif + #ifdef OSSL_STORE_R_INVALID_SCHEME + {"INVALID_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_INVALID_SCHEME}, + #else + {"INVALID_SCHEME", 44, 106}, + #endif + #ifdef OSSL_STORE_R_IS_NOT_A + {"IS_NOT_A", ERR_LIB_OSSL_STORE, OSSL_STORE_R_IS_NOT_A}, + #else + {"IS_NOT_A", 44, 112}, + #endif + #ifdef OSSL_STORE_R_LOADER_INCOMPLETE + {"LOADER_INCOMPLETE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADER_INCOMPLETE}, + #else + {"LOADER_INCOMPLETE", 44, 116}, + #endif + #ifdef OSSL_STORE_R_LOADING_STARTED + {"LOADING_STARTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADING_STARTED}, + #else + {"LOADING_STARTED", 44, 117}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CERTIFICATE + {"NOT_A_CERTIFICATE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CERTIFICATE}, + #else + {"NOT_A_CERTIFICATE", 44, 100}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CRL + {"NOT_A_CRL", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CRL}, + #else + {"NOT_A_CRL", 44, 101}, + #endif + #ifdef OSSL_STORE_R_NOT_A_KEY + {"NOT_A_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_KEY}, + #else + {"NOT_A_KEY", 44, 102}, + #endif + #ifdef OSSL_STORE_R_NOT_A_NAME + {"NOT_A_NAME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_NAME}, + #else + {"NOT_A_NAME", 44, 103}, + #endif + #ifdef OSSL_STORE_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 44, 104}, + #endif + #ifdef OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR + {"PASSPHRASE_CALLBACK_ERROR", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR}, + #else + {"PASSPHRASE_CALLBACK_ERROR", 44, 114}, + #endif + #ifdef OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 44, 108}, + #endif + #ifdef OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_OSSL_STORE, OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 44, 119}, + #endif + #ifdef OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED}, + #else + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", 44, 109}, + #endif + #ifdef OSSL_STORE_R_UNREGISTERED_SCHEME + {"UNREGISTERED_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNREGISTERED_SCHEME}, + #else + {"UNREGISTERED_SCHEME", 44, 105}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 44, 110}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_OPERATION + {"UNSUPPORTED_OPERATION", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_OPERATION}, + #else + {"UNSUPPORTED_OPERATION", 44, 118}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE + {"UNSUPPORTED_SEARCH_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE}, + #else + {"UNSUPPORTED_SEARCH_TYPE", 44, 120}, + #endif + #ifdef OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 44, 111}, + #endif + #ifdef PEM_R_BAD_BASE64_DECODE + {"BAD_BASE64_DECODE", ERR_LIB_PEM, PEM_R_BAD_BASE64_DECODE}, + #else + {"BAD_BASE64_DECODE", 9, 100}, + #endif + #ifdef PEM_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PEM, PEM_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 9, 101}, + #endif + #ifdef PEM_R_BAD_END_LINE + {"BAD_END_LINE", ERR_LIB_PEM, PEM_R_BAD_END_LINE}, + #else + {"BAD_END_LINE", 9, 102}, + #endif + #ifdef PEM_R_BAD_IV_CHARS + {"BAD_IV_CHARS", ERR_LIB_PEM, PEM_R_BAD_IV_CHARS}, + #else + {"BAD_IV_CHARS", 9, 103}, + #endif + #ifdef PEM_R_BAD_MAGIC_NUMBER + {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, PEM_R_BAD_MAGIC_NUMBER}, + #else + {"BAD_MAGIC_NUMBER", 9, 116}, + #endif + #ifdef PEM_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_PEM, PEM_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 9, 104}, + #endif + #ifdef PEM_R_BAD_VERSION_NUMBER + {"BAD_VERSION_NUMBER", ERR_LIB_PEM, PEM_R_BAD_VERSION_NUMBER}, + #else + {"BAD_VERSION_NUMBER", 9, 117}, + #endif + #ifdef PEM_R_BIO_WRITE_FAILURE + {"BIO_WRITE_FAILURE", ERR_LIB_PEM, PEM_R_BIO_WRITE_FAILURE}, + #else + {"BIO_WRITE_FAILURE", 9, 118}, + #endif + #ifdef PEM_R_CIPHER_IS_NULL + {"CIPHER_IS_NULL", ERR_LIB_PEM, PEM_R_CIPHER_IS_NULL}, + #else + {"CIPHER_IS_NULL", 9, 127}, + #endif + #ifdef PEM_R_ERROR_CONVERTING_PRIVATE_KEY + {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, PEM_R_ERROR_CONVERTING_PRIVATE_KEY}, + #else + {"ERROR_CONVERTING_PRIVATE_KEY", 9, 115}, + #endif + #ifdef PEM_R_EXPECTING_PRIVATE_KEY_BLOB + {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PRIVATE_KEY_BLOB}, + #else + {"EXPECTING_PRIVATE_KEY_BLOB", 9, 119}, + #endif + #ifdef PEM_R_EXPECTING_PUBLIC_KEY_BLOB + {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PUBLIC_KEY_BLOB}, + #else + {"EXPECTING_PUBLIC_KEY_BLOB", 9, 120}, + #endif + #ifdef PEM_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_PEM, PEM_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 9, 128}, + #endif + #ifdef PEM_R_INCONSISTENT_HEADER + {"INCONSISTENT_HEADER", ERR_LIB_PEM, PEM_R_INCONSISTENT_HEADER}, + #else + {"INCONSISTENT_HEADER", 9, 121}, + #endif + #ifdef PEM_R_KEYBLOB_HEADER_PARSE_ERROR + {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, PEM_R_KEYBLOB_HEADER_PARSE_ERROR}, + #else + {"KEYBLOB_HEADER_PARSE_ERROR", 9, 122}, + #endif + #ifdef PEM_R_KEYBLOB_TOO_SHORT + {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, PEM_R_KEYBLOB_TOO_SHORT}, + #else + {"KEYBLOB_TOO_SHORT", 9, 123}, + #endif + #ifdef PEM_R_MISSING_DEK_IV + {"MISSING_DEK_IV", ERR_LIB_PEM, PEM_R_MISSING_DEK_IV}, + #else + {"MISSING_DEK_IV", 9, 129}, + #endif + #ifdef PEM_R_NOT_DEK_INFO + {"NOT_DEK_INFO", ERR_LIB_PEM, PEM_R_NOT_DEK_INFO}, + #else + {"NOT_DEK_INFO", 9, 105}, + #endif + #ifdef PEM_R_NOT_ENCRYPTED + {"NOT_ENCRYPTED", ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED}, + #else + {"NOT_ENCRYPTED", 9, 106}, + #endif + #ifdef PEM_R_NOT_PROC_TYPE + {"NOT_PROC_TYPE", ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE}, + #else + {"NOT_PROC_TYPE", 9, 107}, + #endif + #ifdef PEM_R_NO_START_LINE + {"NO_START_LINE", ERR_LIB_PEM, PEM_R_NO_START_LINE}, + #else + {"NO_START_LINE", 9, 108}, + #endif + #ifdef PEM_R_PROBLEMS_GETTING_PASSWORD + {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, PEM_R_PROBLEMS_GETTING_PASSWORD}, + #else + {"PROBLEMS_GETTING_PASSWORD", 9, 109}, + #endif + #ifdef PEM_R_PVK_DATA_TOO_SHORT + {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_DATA_TOO_SHORT}, + #else + {"PVK_DATA_TOO_SHORT", 9, 124}, + #endif + #ifdef PEM_R_PVK_TOO_SHORT + {"PVK_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_TOO_SHORT}, + #else + {"PVK_TOO_SHORT", 9, 125}, + #endif + #ifdef PEM_R_READ_KEY + {"READ_KEY", ERR_LIB_PEM, PEM_R_READ_KEY}, + #else + {"READ_KEY", 9, 111}, + #endif + #ifdef PEM_R_SHORT_HEADER + {"SHORT_HEADER", ERR_LIB_PEM, PEM_R_SHORT_HEADER}, + #else + {"SHORT_HEADER", 9, 112}, + #endif + #ifdef PEM_R_UNEXPECTED_DEK_IV + {"UNEXPECTED_DEK_IV", ERR_LIB_PEM, PEM_R_UNEXPECTED_DEK_IV}, + #else + {"UNEXPECTED_DEK_IV", 9, 130}, + #endif + #ifdef PEM_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, PEM_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 9, 113}, + #endif + #ifdef PEM_R_UNSUPPORTED_ENCRYPTION + {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION}, + #else + {"UNSUPPORTED_ENCRYPTION", 9, 114}, + #endif + #ifdef PEM_R_UNSUPPORTED_KEY_COMPONENTS + {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, PEM_R_UNSUPPORTED_KEY_COMPONENTS}, + #else + {"UNSUPPORTED_KEY_COMPONENTS", 9, 126}, + #endif + #ifdef PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_PEM, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, + #endif + #ifdef PKCS12_R_CANT_PACK_STRUCTURE + {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, + #else + {"CANT_PACK_STRUCTURE", 35, 100}, + #endif + #ifdef PKCS12_R_CONTENT_TYPE_NOT_DATA + {"CONTENT_TYPE_NOT_DATA", ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA}, + #else + {"CONTENT_TYPE_NOT_DATA", 35, 121}, + #endif + #ifdef PKCS12_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 35, 101}, + #endif + #ifdef PKCS12_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 35, 102}, + #endif + #ifdef PKCS12_R_ENCRYPT_ERROR + {"ENCRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCRYPT_ERROR}, + #else + {"ENCRYPT_ERROR", 35, 103}, + #endif + #ifdef PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", ERR_LIB_PKCS12, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE}, + #else + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", 35, 120}, + #endif + #ifdef PKCS12_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 35, 104}, + #endif + #ifdef PKCS12_R_INVALID_NULL_PKCS12_POINTER + {"INVALID_NULL_PKCS12_POINTER", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_PKCS12_POINTER}, + #else + {"INVALID_NULL_PKCS12_POINTER", 35, 105}, + #endif + #ifdef PKCS12_R_IV_GEN_ERROR + {"IV_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_IV_GEN_ERROR}, + #else + {"IV_GEN_ERROR", 35, 106}, + #endif + #ifdef PKCS12_R_KEY_GEN_ERROR + {"KEY_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_KEY_GEN_ERROR}, + #else + {"KEY_GEN_ERROR", 35, 107}, + #endif + #ifdef PKCS12_R_MAC_ABSENT + {"MAC_ABSENT", ERR_LIB_PKCS12, PKCS12_R_MAC_ABSENT}, + #else + {"MAC_ABSENT", 35, 108}, + #endif + #ifdef PKCS12_R_MAC_GENERATION_ERROR + {"MAC_GENERATION_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_GENERATION_ERROR}, + #else + {"MAC_GENERATION_ERROR", 35, 109}, + #endif + #ifdef PKCS12_R_MAC_SETUP_ERROR + {"MAC_SETUP_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_SETUP_ERROR}, + #else + {"MAC_SETUP_ERROR", 35, 110}, + #endif + #ifdef PKCS12_R_MAC_STRING_SET_ERROR + {"MAC_STRING_SET_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_STRING_SET_ERROR}, + #else + {"MAC_STRING_SET_ERROR", 35, 111}, + #endif + #ifdef PKCS12_R_MAC_VERIFY_FAILURE + {"MAC_VERIFY_FAILURE", ERR_LIB_PKCS12, PKCS12_R_MAC_VERIFY_FAILURE}, + #else + {"MAC_VERIFY_FAILURE", 35, 113}, + #endif + #ifdef PKCS12_R_PARSE_ERROR + {"PARSE_ERROR", ERR_LIB_PKCS12, PKCS12_R_PARSE_ERROR}, + #else + {"PARSE_ERROR", 35, 114}, + #endif + #ifdef PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR + {"PKCS12_ALGOR_CIPHERINIT_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR}, + #else + {"PKCS12_ALGOR_CIPHERINIT_ERROR", 35, 115}, + #endif + #ifdef PKCS12_R_PKCS12_CIPHERFINAL_ERROR + {"PKCS12_CIPHERFINAL_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_CIPHERFINAL_ERROR}, + #else + {"PKCS12_CIPHERFINAL_ERROR", 35, 116}, + #endif + #ifdef PKCS12_R_PKCS12_PBE_CRYPT_ERROR + {"PKCS12_PBE_CRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_PBE_CRYPT_ERROR}, + #else + {"PKCS12_PBE_CRYPT_ERROR", 35, 117}, + #endif + #ifdef PKCS12_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_PKCS12, PKCS12_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 35, 118}, + #endif + #ifdef PKCS12_R_UNSUPPORTED_PKCS12_MODE + {"UNSUPPORTED_PKCS12_MODE", ERR_LIB_PKCS12, PKCS12_R_UNSUPPORTED_PKCS12_MODE}, + #else + {"UNSUPPORTED_PKCS12_MODE", 35, 119}, + #endif + #ifdef PKCS7_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_PKCS7, PKCS7_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 33, 117}, + #endif + #ifdef PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_PKCS7, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 33, 144}, + #endif + #ifdef PKCS7_R_CIPHER_NOT_INITIALIZED + {"CIPHER_NOT_INITIALIZED", ERR_LIB_PKCS7, PKCS7_R_CIPHER_NOT_INITIALIZED}, + #else + {"CIPHER_NOT_INITIALIZED", 33, 116}, + #endif + #ifdef PKCS7_R_CONTENT_AND_DATA_PRESENT + {"CONTENT_AND_DATA_PRESENT", ERR_LIB_PKCS7, PKCS7_R_CONTENT_AND_DATA_PRESENT}, + #else + {"CONTENT_AND_DATA_PRESENT", 33, 118}, + #endif + #ifdef PKCS7_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_PKCS7, PKCS7_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 33, 152}, + #endif + #ifdef PKCS7_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_PKCS7, PKCS7_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 33, 119}, + #endif + #ifdef PKCS7_R_DIGEST_FAILURE + {"DIGEST_FAILURE", ERR_LIB_PKCS7, PKCS7_R_DIGEST_FAILURE}, + #else + {"DIGEST_FAILURE", 33, 101}, + #endif + #ifdef PKCS7_R_ENCRYPTION_CTRL_FAILURE + {"ENCRYPTION_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_CTRL_FAILURE}, + #else + {"ENCRYPTION_CTRL_FAILURE", 33, 149}, + #endif + #ifdef PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 150}, + #endif + #ifdef PKCS7_R_ERROR_ADDING_RECIPIENT + {"ERROR_ADDING_RECIPIENT", ERR_LIB_PKCS7, PKCS7_R_ERROR_ADDING_RECIPIENT}, + #else + {"ERROR_ADDING_RECIPIENT", 33, 120}, + #endif + #ifdef PKCS7_R_ERROR_SETTING_CIPHER + {"ERROR_SETTING_CIPHER", ERR_LIB_PKCS7, PKCS7_R_ERROR_SETTING_CIPHER}, + #else + {"ERROR_SETTING_CIPHER", 33, 121}, + #endif + #ifdef PKCS7_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_PKCS7, PKCS7_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 33, 143}, + #endif + #ifdef PKCS7_R_INVALID_SIGNED_DATA_TYPE + {"INVALID_SIGNED_DATA_TYPE", ERR_LIB_PKCS7, PKCS7_R_INVALID_SIGNED_DATA_TYPE}, + #else + {"INVALID_SIGNED_DATA_TYPE", 33, 155}, + #endif + #ifdef PKCS7_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_PKCS7, PKCS7_R_NO_CONTENT}, + #else + {"NO_CONTENT", 33, 122}, + #endif + #ifdef PKCS7_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_PKCS7, PKCS7_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 33, 151}, + #endif + #ifdef PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND + {"NO_MATCHING_DIGEST_TYPE_FOUND", ERR_LIB_PKCS7, PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND}, + #else + {"NO_MATCHING_DIGEST_TYPE_FOUND", 33, 154}, + #endif + #ifdef PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE + {"NO_RECIPIENT_MATCHES_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE}, + #else + {"NO_RECIPIENT_MATCHES_CERTIFICATE", 33, 115}, + #endif + #ifdef PKCS7_R_NO_SIGNATURES_ON_DATA + {"NO_SIGNATURES_ON_DATA", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNATURES_ON_DATA}, + #else + {"NO_SIGNATURES_ON_DATA", 33, 123}, + #endif + #ifdef PKCS7_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 33, 142}, + #endif + #ifdef PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", ERR_LIB_PKCS7, PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE}, + #else + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", 33, 104}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 33, 124}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNER_ERROR + {"PKCS7_ADD_SIGNER_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNER_ERROR}, + #else + {"PKCS7_ADD_SIGNER_ERROR", 33, 153}, + #endif + #ifdef PKCS7_R_PKCS7_DATASIGN + {"PKCS7_DATASIGN", ERR_LIB_PKCS7, PKCS7_R_PKCS7_DATASIGN}, + #else + {"PKCS7_DATASIGN", 33, 145}, + #endif + #ifdef PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 33, 127}, + #endif + #ifdef PKCS7_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 33, 105}, + #endif + #ifdef PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_PKCS7, PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 33, 128}, + #endif + #ifdef PKCS7_R_SIGNING_CTRL_FAILURE + {"SIGNING_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_CTRL_FAILURE}, + #else + {"SIGNING_CTRL_FAILURE", 33, 147}, + #endif + #ifdef PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 148}, + #endif + #ifdef PKCS7_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_PKCS7, PKCS7_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 33, 129}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_CERTIFICATE + {"UNABLE_TO_FIND_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_CERTIFICATE}, + #else + {"UNABLE_TO_FIND_CERTIFICATE", 33, 106}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MEM_BIO + {"UNABLE_TO_FIND_MEM_BIO", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MEM_BIO}, + #else + {"UNABLE_TO_FIND_MEM_BIO", 33, 107}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST + {"UNABLE_TO_FIND_MESSAGE_DIGEST", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST}, + #else + {"UNABLE_TO_FIND_MESSAGE_DIGEST", 33, 108}, + #endif + #ifdef PKCS7_R_UNKNOWN_DIGEST_TYPE + {"UNKNOWN_DIGEST_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_DIGEST_TYPE}, + #else + {"UNKNOWN_DIGEST_TYPE", 33, 109}, + #endif + #ifdef PKCS7_R_UNKNOWN_OPERATION + {"UNKNOWN_OPERATION", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_OPERATION}, + #else + {"UNKNOWN_OPERATION", 33, 110}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CIPHER_TYPE + {"UNSUPPORTED_CIPHER_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CIPHER_TYPE}, + #else + {"UNSUPPORTED_CIPHER_TYPE", 33, 111}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 33, 112}, + #endif + #ifdef PKCS7_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 33, 113}, + #endif + #ifdef PKCS7_R_WRONG_PKCS7_TYPE + {"WRONG_PKCS7_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_PKCS7_TYPE}, + #else + {"WRONG_PKCS7_TYPE", 33, 114}, + #endif + #ifdef RAND_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 36, 102}, + #endif + #ifdef RAND_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_RAND, RAND_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 36, 103}, + #endif + #ifdef RAND_R_ARGUMENT_OUT_OF_RANGE + {"ARGUMENT_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE}, + #else + {"ARGUMENT_OUT_OF_RANGE", 36, 105}, + #endif + #ifdef RAND_R_CANNOT_OPEN_FILE + {"CANNOT_OPEN_FILE", ERR_LIB_RAND, RAND_R_CANNOT_OPEN_FILE}, + #else + {"CANNOT_OPEN_FILE", 36, 121}, + #endif + #ifdef RAND_R_DRBG_ALREADY_INITIALIZED + {"DRBG_ALREADY_INITIALIZED", ERR_LIB_RAND, RAND_R_DRBG_ALREADY_INITIALIZED}, + #else + {"DRBG_ALREADY_INITIALIZED", 36, 129}, + #endif + #ifdef RAND_R_DRBG_NOT_INITIALISED + {"DRBG_NOT_INITIALISED", ERR_LIB_RAND, RAND_R_DRBG_NOT_INITIALISED}, + #else + {"DRBG_NOT_INITIALISED", 36, 104}, + #endif + #ifdef RAND_R_ENTROPY_INPUT_TOO_LONG + {"ENTROPY_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ENTROPY_INPUT_TOO_LONG}, + #else + {"ENTROPY_INPUT_TOO_LONG", 36, 106}, + #endif + #ifdef RAND_R_ENTROPY_OUT_OF_RANGE + {"ENTROPY_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ENTROPY_OUT_OF_RANGE}, + #else + {"ENTROPY_OUT_OF_RANGE", 36, 124}, + #endif + #ifdef RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED + {"ERROR_ENTROPY_POOL_WAS_IGNORED", ERR_LIB_RAND, RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED}, + #else + {"ERROR_ENTROPY_POOL_WAS_IGNORED", 36, 127}, + #endif + #ifdef RAND_R_ERROR_INITIALISING_DRBG + {"ERROR_INITIALISING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INITIALISING_DRBG}, + #else + {"ERROR_INITIALISING_DRBG", 36, 107}, + #endif + #ifdef RAND_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 36, 108}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT}, + #else + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", 36, 109}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 36, 110}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 36, 111}, + #endif + #ifdef RAND_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_RAND, RAND_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 36, 126}, + #endif + #ifdef RAND_R_FUNC_NOT_IMPLEMENTED + {"FUNC_NOT_IMPLEMENTED", ERR_LIB_RAND, RAND_R_FUNC_NOT_IMPLEMENTED}, + #else + {"FUNC_NOT_IMPLEMENTED", 36, 101}, + #endif + #ifdef RAND_R_FWRITE_ERROR + {"FWRITE_ERROR", ERR_LIB_RAND, RAND_R_FWRITE_ERROR}, + #else + {"FWRITE_ERROR", 36, 123}, + #endif + #ifdef RAND_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_RAND, RAND_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 36, 112}, + #endif + #ifdef RAND_R_INTERNAL_ERROR + {"INTERNAL_ERROR", ERR_LIB_RAND, RAND_R_INTERNAL_ERROR}, + #else + {"INTERNAL_ERROR", 36, 113}, + #endif + #ifdef RAND_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 36, 114}, + #endif + #ifdef RAND_R_NOT_A_REGULAR_FILE + {"NOT_A_REGULAR_FILE", ERR_LIB_RAND, RAND_R_NOT_A_REGULAR_FILE}, + #else + {"NOT_A_REGULAR_FILE", 36, 122}, + #endif + #ifdef RAND_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_RAND, RAND_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 36, 115}, + #endif + #ifdef RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED + {"NO_DRBG_IMPLEMENTATION_SELECTED", ERR_LIB_RAND, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED}, + #else + {"NO_DRBG_IMPLEMENTATION_SELECTED", 36, 128}, + #endif + #ifdef RAND_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_RAND, RAND_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 36, 130}, + #endif + #ifdef RAND_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_RAND, RAND_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 36, 131}, + #endif + #ifdef RAND_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_RAND, RAND_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 36, 116}, + #endif + #ifdef RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", ERR_LIB_RAND, RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED}, + #else + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", 36, 133}, + #endif + #ifdef RAND_R_PRNG_NOT_SEEDED + {"PRNG_NOT_SEEDED", ERR_LIB_RAND, RAND_R_PRNG_NOT_SEEDED}, + #else + {"PRNG_NOT_SEEDED", 36, 100}, + #endif + #ifdef RAND_R_RANDOM_POOL_OVERFLOW + {"RANDOM_POOL_OVERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW}, + #else + {"RANDOM_POOL_OVERFLOW", 36, 125}, + #endif + #ifdef RAND_R_RANDOM_POOL_UNDERFLOW + {"RANDOM_POOL_UNDERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_UNDERFLOW}, + #else + {"RANDOM_POOL_UNDERFLOW", 36, 134}, + #endif + #ifdef RAND_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_RAND, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 36, 117}, + #endif + #ifdef RAND_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_RAND, RAND_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 36, 118}, + #endif + #ifdef RAND_R_SELFTEST_FAILURE + {"SELFTEST_FAILURE", ERR_LIB_RAND, RAND_R_SELFTEST_FAILURE}, + #else + {"SELFTEST_FAILURE", 36, 119}, + #endif + #ifdef RAND_R_TOO_LITTLE_NONCE_REQUESTED + {"TOO_LITTLE_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_LITTLE_NONCE_REQUESTED}, + #else + {"TOO_LITTLE_NONCE_REQUESTED", 36, 135}, + #endif + #ifdef RAND_R_TOO_MUCH_NONCE_REQUESTED + {"TOO_MUCH_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_MUCH_NONCE_REQUESTED}, + #else + {"TOO_MUCH_NONCE_REQUESTED", 36, 136}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_FLAGS + {"UNSUPPORTED_DRBG_FLAGS", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_FLAGS}, + #else + {"UNSUPPORTED_DRBG_FLAGS", 36, 132}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_TYPE + {"UNSUPPORTED_DRBG_TYPE", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_TYPE}, + #else + {"UNSUPPORTED_DRBG_TYPE", 36, 120}, + #endif + #ifdef RSA_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_RSA, RSA_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 4, 100}, + #endif + #ifdef RSA_R_BAD_E_VALUE + {"BAD_E_VALUE", ERR_LIB_RSA, RSA_R_BAD_E_VALUE}, + #else + {"BAD_E_VALUE", 4, 101}, + #endif + #ifdef RSA_R_BAD_FIXED_HEADER_DECRYPT + {"BAD_FIXED_HEADER_DECRYPT", ERR_LIB_RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT}, + #else + {"BAD_FIXED_HEADER_DECRYPT", 4, 102}, + #endif + #ifdef RSA_R_BAD_PAD_BYTE_COUNT + {"BAD_PAD_BYTE_COUNT", ERR_LIB_RSA, RSA_R_BAD_PAD_BYTE_COUNT}, + #else + {"BAD_PAD_BYTE_COUNT", 4, 103}, + #endif + #ifdef RSA_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_RSA, RSA_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 4, 104}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_01 + {"BLOCK_TYPE_IS_NOT_01", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_01}, + #else + {"BLOCK_TYPE_IS_NOT_01", 4, 106}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_02 + {"BLOCK_TYPE_IS_NOT_02", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_02}, + #else + {"BLOCK_TYPE_IS_NOT_02", 4, 107}, + #endif + #ifdef RSA_R_DATA_GREATER_THAN_MOD_LEN + {"DATA_GREATER_THAN_MOD_LEN", ERR_LIB_RSA, RSA_R_DATA_GREATER_THAN_MOD_LEN}, + #else + {"DATA_GREATER_THAN_MOD_LEN", 4, 108}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE + {"DATA_TOO_LARGE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE}, + #else + {"DATA_TOO_LARGE", 4, 109}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + {"DATA_TOO_LARGE_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE}, + #else + {"DATA_TOO_LARGE_FOR_KEY_SIZE", 4, 110}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_MODULUS + {"DATA_TOO_LARGE_FOR_MODULUS", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS}, + #else + {"DATA_TOO_LARGE_FOR_MODULUS", 4, 132}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL + {"DATA_TOO_SMALL", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL}, + #else + {"DATA_TOO_SMALL", 4, 111}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE + {"DATA_TOO_SMALL_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE}, + #else + {"DATA_TOO_SMALL_FOR_KEY_SIZE", 4, 122}, + #endif + #ifdef RSA_R_DIGEST_DOES_NOT_MATCH + {"DIGEST_DOES_NOT_MATCH", ERR_LIB_RSA, RSA_R_DIGEST_DOES_NOT_MATCH}, + #else + {"DIGEST_DOES_NOT_MATCH", 4, 158}, + #endif + #ifdef RSA_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 4, 145}, + #endif + #ifdef RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + {"DIGEST_TOO_BIG_FOR_RSA_KEY", ERR_LIB_RSA, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY}, + #else + {"DIGEST_TOO_BIG_FOR_RSA_KEY", 4, 112}, + #endif + #ifdef RSA_R_DMP1_NOT_CONGRUENT_TO_D + {"DMP1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMP1_NOT_CONGRUENT_TO_D}, + #else + {"DMP1_NOT_CONGRUENT_TO_D", 4, 124}, + #endif + #ifdef RSA_R_DMQ1_NOT_CONGRUENT_TO_D + {"DMQ1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMQ1_NOT_CONGRUENT_TO_D}, + #else + {"DMQ1_NOT_CONGRUENT_TO_D", 4, 125}, + #endif + #ifdef RSA_R_D_E_NOT_CONGRUENT_TO_1 + {"D_E_NOT_CONGRUENT_TO_1", ERR_LIB_RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1}, + #else + {"D_E_NOT_CONGRUENT_TO_1", 4, 123}, + #endif + #ifdef RSA_R_FIRST_OCTET_INVALID + {"FIRST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_FIRST_OCTET_INVALID}, + #else + {"FIRST_OCTET_INVALID", 4, 133}, + #endif + #ifdef RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_RSA, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 4, 144}, + #endif + #ifdef RSA_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 4, 157}, + #endif + #ifdef RSA_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 4, 143}, + #endif + #ifdef RSA_R_INVALID_HEADER + {"INVALID_HEADER", ERR_LIB_RSA, RSA_R_INVALID_HEADER}, + #else + {"INVALID_HEADER", 4, 137}, + #endif + #ifdef RSA_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_RSA, RSA_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 4, 160}, + #endif + #ifdef RSA_R_INVALID_MESSAGE_LENGTH + {"INVALID_MESSAGE_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_MESSAGE_LENGTH}, + #else + {"INVALID_MESSAGE_LENGTH", 4, 131}, + #endif + #ifdef RSA_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_RSA, RSA_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 4, 156}, + #endif + #ifdef RSA_R_INVALID_MULTI_PRIME_KEY + {"INVALID_MULTI_PRIME_KEY", ERR_LIB_RSA, RSA_R_INVALID_MULTI_PRIME_KEY}, + #else + {"INVALID_MULTI_PRIME_KEY", 4, 167}, + #endif + #ifdef RSA_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 4, 161}, + #endif + #ifdef RSA_R_INVALID_PADDING + {"INVALID_PADDING", ERR_LIB_RSA, RSA_R_INVALID_PADDING}, + #else + {"INVALID_PADDING", 4, 138}, + #endif + #ifdef RSA_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_RSA, RSA_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 4, 141}, + #endif + #ifdef RSA_R_INVALID_PSS_PARAMETERS + {"INVALID_PSS_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_PSS_PARAMETERS}, + #else + {"INVALID_PSS_PARAMETERS", 4, 149}, + #endif + #ifdef RSA_R_INVALID_PSS_SALTLEN + {"INVALID_PSS_SALTLEN", ERR_LIB_RSA, RSA_R_INVALID_PSS_SALTLEN}, + #else + {"INVALID_PSS_SALTLEN", 4, 146}, + #endif + #ifdef RSA_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 4, 150}, + #endif + #ifdef RSA_R_INVALID_TRAILER + {"INVALID_TRAILER", ERR_LIB_RSA, RSA_R_INVALID_TRAILER}, + #else + {"INVALID_TRAILER", 4, 139}, + #endif + #ifdef RSA_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 4, 142}, + #endif + #ifdef RSA_R_IQMP_NOT_INVERSE_OF_Q + {"IQMP_NOT_INVERSE_OF_Q", ERR_LIB_RSA, RSA_R_IQMP_NOT_INVERSE_OF_Q}, + #else + {"IQMP_NOT_INVERSE_OF_Q", 4, 126}, + #endif + #ifdef RSA_R_KEY_PRIME_NUM_INVALID + {"KEY_PRIME_NUM_INVALID", ERR_LIB_RSA, RSA_R_KEY_PRIME_NUM_INVALID}, + #else + {"KEY_PRIME_NUM_INVALID", 4, 165}, + #endif + #ifdef RSA_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_RSA, RSA_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 4, 120}, + #endif + #ifdef RSA_R_LAST_OCTET_INVALID + {"LAST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_LAST_OCTET_INVALID}, + #else + {"LAST_OCTET_INVALID", 4, 134}, + #endif + #ifdef RSA_R_MGF1_DIGEST_NOT_ALLOWED + {"MGF1_DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED}, + #else + {"MGF1_DIGEST_NOT_ALLOWED", 4, 152}, + #endif + #ifdef RSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_RSA, RSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 4, 179}, + #endif + #ifdef RSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_RSA, RSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 4, 105}, + #endif + #ifdef RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", ERR_LIB_RSA, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R}, + #else + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", 4, 168}, + #endif + #ifdef RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D}, + #else + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", 4, 169}, + #endif + #ifdef RSA_R_MP_R_NOT_PRIME + {"MP_R_NOT_PRIME", ERR_LIB_RSA, RSA_R_MP_R_NOT_PRIME}, + #else + {"MP_R_NOT_PRIME", 4, 170}, + #endif + #ifdef RSA_R_NO_PUBLIC_EXPONENT + {"NO_PUBLIC_EXPONENT", ERR_LIB_RSA, RSA_R_NO_PUBLIC_EXPONENT}, + #else + {"NO_PUBLIC_EXPONENT", 4, 140}, + #endif + #ifdef RSA_R_NULL_BEFORE_BLOCK_MISSING + {"NULL_BEFORE_BLOCK_MISSING", ERR_LIB_RSA, RSA_R_NULL_BEFORE_BLOCK_MISSING}, + #else + {"NULL_BEFORE_BLOCK_MISSING", 4, 113}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES}, + #else + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", 4, 172}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_P_Q + {"N_DOES_NOT_EQUAL_P_Q", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_P_Q}, + #else + {"N_DOES_NOT_EQUAL_P_Q", 4, 127}, + #endif + #ifdef RSA_R_OAEP_DECODING_ERROR + {"OAEP_DECODING_ERROR", ERR_LIB_RSA, RSA_R_OAEP_DECODING_ERROR}, + #else + {"OAEP_DECODING_ERROR", 4, 121}, + #endif + #ifdef RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_RSA, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 4, 148}, + #endif + #ifdef RSA_R_PADDING_CHECK_FAILED + {"PADDING_CHECK_FAILED", ERR_LIB_RSA, RSA_R_PADDING_CHECK_FAILED}, + #else + {"PADDING_CHECK_FAILED", 4, 114}, + #endif + #ifdef RSA_R_PKCS_DECODING_ERROR + {"PKCS_DECODING_ERROR", ERR_LIB_RSA, RSA_R_PKCS_DECODING_ERROR}, + #else + {"PKCS_DECODING_ERROR", 4, 159}, + #endif + #ifdef RSA_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_RSA, RSA_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 4, 164}, + #endif + #ifdef RSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_RSA, RSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 4, 128}, + #endif + #ifdef RSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_RSA, RSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 4, 129}, + #endif + #ifdef RSA_R_RSA_OPERATIONS_NOT_SUPPORTED + {"RSA_OPERATIONS_NOT_SUPPORTED", ERR_LIB_RSA, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED}, + #else + {"RSA_OPERATIONS_NOT_SUPPORTED", 4, 130}, + #endif + #ifdef RSA_R_SLEN_CHECK_FAILED + {"SLEN_CHECK_FAILED", ERR_LIB_RSA, RSA_R_SLEN_CHECK_FAILED}, + #else + {"SLEN_CHECK_FAILED", 4, 136}, + #endif + #ifdef RSA_R_SLEN_RECOVERY_FAILED + {"SLEN_RECOVERY_FAILED", ERR_LIB_RSA, RSA_R_SLEN_RECOVERY_FAILED}, + #else + {"SLEN_RECOVERY_FAILED", 4, 135}, + #endif + #ifdef RSA_R_SSLV3_ROLLBACK_ATTACK + {"SSLV3_ROLLBACK_ATTACK", ERR_LIB_RSA, RSA_R_SSLV3_ROLLBACK_ATTACK}, + #else + {"SSLV3_ROLLBACK_ATTACK", 4, 115}, + #endif + #ifdef RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_RSA, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 4, 116}, + #endif + #ifdef RSA_R_UNKNOWN_ALGORITHM_TYPE + {"UNKNOWN_ALGORITHM_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_ALGORITHM_TYPE}, + #else + {"UNKNOWN_ALGORITHM_TYPE", 4, 117}, + #endif + #ifdef RSA_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 4, 166}, + #endif + #ifdef RSA_R_UNKNOWN_MASK_DIGEST + {"UNKNOWN_MASK_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_MASK_DIGEST}, + #else + {"UNKNOWN_MASK_DIGEST", 4, 151}, + #endif + #ifdef RSA_R_UNKNOWN_PADDING_TYPE + {"UNKNOWN_PADDING_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_PADDING_TYPE}, + #else + {"UNKNOWN_PADDING_TYPE", 4, 118}, + #endif + #ifdef RSA_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 4, 162}, + #endif + #ifdef RSA_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 4, 163}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_ALGORITHM + {"UNSUPPORTED_MASK_ALGORITHM", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_ALGORITHM}, + #else + {"UNSUPPORTED_MASK_ALGORITHM", 4, 153}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_PARAMETER + {"UNSUPPORTED_MASK_PARAMETER", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_PARAMETER}, + #else + {"UNSUPPORTED_MASK_PARAMETER", 4, 154}, + #endif + #ifdef RSA_R_UNSUPPORTED_SIGNATURE_TYPE + {"UNSUPPORTED_SIGNATURE_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_SIGNATURE_TYPE}, + #else + {"UNSUPPORTED_SIGNATURE_TYPE", 4, 155}, + #endif + #ifdef RSA_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_RSA, RSA_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 4, 147}, + #endif + #ifdef RSA_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_RSA, RSA_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 4, 119}, + #endif + #ifdef SM2_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_SM2, SM2_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 53, 100}, + #endif + #ifdef SM2_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SM2, SM2_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 53, 101}, + #endif + #ifdef SM2_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_SM2, SM2_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 53, 107}, + #endif + #ifdef SM2_R_DIST_ID_TOO_LARGE + {"DIST_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_DIST_ID_TOO_LARGE}, + #else + {"DIST_ID_TOO_LARGE", 53, 110}, + #endif + #ifdef SM2_R_ID_NOT_SET + {"ID_NOT_SET", ERR_LIB_SM2, SM2_R_ID_NOT_SET}, + #else + {"ID_NOT_SET", 53, 112}, + #endif + #ifdef SM2_R_ID_TOO_LARGE + {"ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_ID_TOO_LARGE}, + #else + {"ID_TOO_LARGE", 53, 111}, + #endif + #ifdef SM2_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_SM2, SM2_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 53, 108}, + #endif + #ifdef SM2_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_SM2, SM2_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 53, 102}, + #endif + #ifdef SM2_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_SM2, SM2_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 53, 103}, + #endif + #ifdef SM2_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_SM2, SM2_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 53, 104}, + #endif + #ifdef SM2_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_SM2, SM2_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 53, 105}, + #endif + #ifdef SM2_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_SM2, SM2_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 53, 109}, + #endif + #ifdef SM2_R_USER_ID_TOO_LARGE + {"USER_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_USER_ID_TOO_LARGE}, + #else + {"USER_ID_TOO_LARGE", 53, 106}, + #endif + #ifdef SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", ERR_LIB_SSL, SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY}, + #else + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", 20, 291}, + #endif + #ifdef SSL_R_APP_DATA_IN_HANDSHAKE + {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, SSL_R_APP_DATA_IN_HANDSHAKE}, + #else + {"APP_DATA_IN_HANDSHAKE", 20, 100}, + #endif + #ifdef SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT}, + #else + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", 20, 272}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE}, + #else + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", 20, 143}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE}, + #else + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, + #endif + #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC + {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, + #else + {"BAD_CHANGE_CIPHER_SPEC", 20, 103}, + #endif + #ifdef SSL_R_BAD_CIPHER + {"BAD_CIPHER", ERR_LIB_SSL, SSL_R_BAD_CIPHER}, + #else + {"BAD_CIPHER", 20, 186}, + #endif + #ifdef SSL_R_BAD_DATA + {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, + #else + {"BAD_DATA", 20, 390}, + #endif + #ifdef SSL_R_BAD_DATA_RETURNED_BY_CALLBACK + {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK}, + #else + {"BAD_DATA_RETURNED_BY_CALLBACK", 20, 106}, + #endif + #ifdef SSL_R_BAD_DECOMPRESSION + {"BAD_DECOMPRESSION", ERR_LIB_SSL, SSL_R_BAD_DECOMPRESSION}, + #else + {"BAD_DECOMPRESSION", 20, 107}, + #endif + #ifdef SSL_R_BAD_DH_VALUE + {"BAD_DH_VALUE", ERR_LIB_SSL, SSL_R_BAD_DH_VALUE}, + #else + {"BAD_DH_VALUE", 20, 102}, + #endif + #ifdef SSL_R_BAD_DIGEST_LENGTH + {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DIGEST_LENGTH}, + #else + {"BAD_DIGEST_LENGTH", 20, 111}, + #endif + #ifdef SSL_R_BAD_EARLY_DATA + {"BAD_EARLY_DATA", ERR_LIB_SSL, SSL_R_BAD_EARLY_DATA}, + #else + {"BAD_EARLY_DATA", 20, 233}, + #endif + #ifdef SSL_R_BAD_ECC_CERT + {"BAD_ECC_CERT", ERR_LIB_SSL, SSL_R_BAD_ECC_CERT}, + #else + {"BAD_ECC_CERT", 20, 304}, + #endif + #ifdef SSL_R_BAD_ECPOINT + {"BAD_ECPOINT", ERR_LIB_SSL, SSL_R_BAD_ECPOINT}, + #else + {"BAD_ECPOINT", 20, 306}, + #endif + #ifdef SSL_R_BAD_EXTENSION + {"BAD_EXTENSION", ERR_LIB_SSL, SSL_R_BAD_EXTENSION}, + #else + {"BAD_EXTENSION", 20, 110}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_LENGTH + {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_LENGTH}, + #else + {"BAD_HANDSHAKE_LENGTH", 20, 332}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_STATE + {"BAD_HANDSHAKE_STATE", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_STATE}, + #else + {"BAD_HANDSHAKE_STATE", 20, 236}, + #endif + #ifdef SSL_R_BAD_HELLO_REQUEST + {"BAD_HELLO_REQUEST", ERR_LIB_SSL, SSL_R_BAD_HELLO_REQUEST}, + #else + {"BAD_HELLO_REQUEST", 20, 105}, + #endif + #ifdef SSL_R_BAD_HRR_VERSION + {"BAD_HRR_VERSION", ERR_LIB_SSL, SSL_R_BAD_HRR_VERSION}, + #else + {"BAD_HRR_VERSION", 20, 263}, + #endif + #ifdef SSL_R_BAD_KEY_SHARE + {"BAD_KEY_SHARE", ERR_LIB_SSL, SSL_R_BAD_KEY_SHARE}, + #else + {"BAD_KEY_SHARE", 20, 108}, + #endif + #ifdef SSL_R_BAD_KEY_UPDATE + {"BAD_KEY_UPDATE", ERR_LIB_SSL, SSL_R_BAD_KEY_UPDATE}, + #else + {"BAD_KEY_UPDATE", 20, 122}, + #endif + #ifdef SSL_R_BAD_LEGACY_VERSION + {"BAD_LEGACY_VERSION", ERR_LIB_SSL, SSL_R_BAD_LEGACY_VERSION}, + #else + {"BAD_LEGACY_VERSION", 20, 292}, + #endif + #ifdef SSL_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_SSL, SSL_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 20, 271}, + #endif + #ifdef SSL_R_BAD_PACKET + {"BAD_PACKET", ERR_LIB_SSL, SSL_R_BAD_PACKET}, + #else + {"BAD_PACKET", 20, 240}, + #endif + #ifdef SSL_R_BAD_PACKET_LENGTH + {"BAD_PACKET_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PACKET_LENGTH}, + #else + {"BAD_PACKET_LENGTH", 20, 115}, + #endif + #ifdef SSL_R_BAD_PROTOCOL_VERSION_NUMBER + {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_BAD_PROTOCOL_VERSION_NUMBER}, + #else + {"BAD_PROTOCOL_VERSION_NUMBER", 20, 116}, + #endif + #ifdef SSL_R_BAD_PSK + {"BAD_PSK", ERR_LIB_SSL, SSL_R_BAD_PSK}, + #else + {"BAD_PSK", 20, 219}, + #endif + #ifdef SSL_R_BAD_PSK_IDENTITY + {"BAD_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_BAD_PSK_IDENTITY}, + #else + {"BAD_PSK_IDENTITY", 20, 114}, + #endif + #ifdef SSL_R_BAD_RECORD_TYPE + {"BAD_RECORD_TYPE", ERR_LIB_SSL, SSL_R_BAD_RECORD_TYPE}, + #else + {"BAD_RECORD_TYPE", 20, 443}, + #endif + #ifdef SSL_R_BAD_RSA_ENCRYPT + {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_ENCRYPT}, + #else + {"BAD_RSA_ENCRYPT", 20, 119}, + #endif + #ifdef SSL_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 20, 123}, + #endif + #ifdef SSL_R_BAD_SRP_A_LENGTH + {"BAD_SRP_A_LENGTH", ERR_LIB_SSL, SSL_R_BAD_SRP_A_LENGTH}, + #else + {"BAD_SRP_A_LENGTH", 20, 347}, + #endif + #ifdef SSL_R_BAD_SRP_PARAMETERS + {"BAD_SRP_PARAMETERS", ERR_LIB_SSL, SSL_R_BAD_SRP_PARAMETERS}, + #else + {"BAD_SRP_PARAMETERS", 20, 371}, + #endif + #ifdef SSL_R_BAD_SRTP_MKI_VALUE + {"BAD_SRTP_MKI_VALUE", ERR_LIB_SSL, SSL_R_BAD_SRTP_MKI_VALUE}, + #else + {"BAD_SRTP_MKI_VALUE", 20, 352}, + #endif + #ifdef SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST + {"BAD_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"BAD_SRTP_PROTECTION_PROFILE_LIST", 20, 353}, + #endif + #ifdef SSL_R_BAD_SSL_FILETYPE + {"BAD_SSL_FILETYPE", ERR_LIB_SSL, SSL_R_BAD_SSL_FILETYPE}, + #else + {"BAD_SSL_FILETYPE", 20, 124}, + #endif + #ifdef SSL_R_BAD_VALUE + {"BAD_VALUE", ERR_LIB_SSL, SSL_R_BAD_VALUE}, + #else + {"BAD_VALUE", 20, 384}, + #endif + #ifdef SSL_R_BAD_WRITE_RETRY + {"BAD_WRITE_RETRY", ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY}, + #else + {"BAD_WRITE_RETRY", 20, 127}, + #endif + #ifdef SSL_R_BINDER_DOES_NOT_VERIFY + {"BINDER_DOES_NOT_VERIFY", ERR_LIB_SSL, SSL_R_BINDER_DOES_NOT_VERIFY}, + #else + {"BINDER_DOES_NOT_VERIFY", 20, 253}, + #endif + #ifdef SSL_R_BIO_NOT_SET + {"BIO_NOT_SET", ERR_LIB_SSL, SSL_R_BIO_NOT_SET}, + #else + {"BIO_NOT_SET", 20, 128}, + #endif + #ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG + {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG}, + #else + {"BLOCK_CIPHER_PAD_IS_WRONG", 20, 129}, + #endif + #ifdef SSL_R_BN_LIB + {"BN_LIB", ERR_LIB_SSL, SSL_R_BN_LIB}, + #else + {"BN_LIB", 20, 130}, + #endif + #ifdef SSL_R_CALLBACK_FAILED + {"CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_CALLBACK_FAILED}, + #else + {"CALLBACK_FAILED", 20, 234}, + #endif + #ifdef SSL_R_CANNOT_CHANGE_CIPHER + {"CANNOT_CHANGE_CIPHER", ERR_LIB_SSL, SSL_R_CANNOT_CHANGE_CIPHER}, + #else + {"CANNOT_CHANGE_CIPHER", 20, 109}, + #endif + #ifdef SSL_R_CA_DN_LENGTH_MISMATCH + {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CA_DN_LENGTH_MISMATCH}, + #else + {"CA_DN_LENGTH_MISMATCH", 20, 131}, + #endif + #ifdef SSL_R_CA_KEY_TOO_SMALL + {"CA_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_CA_KEY_TOO_SMALL}, + #else + {"CA_KEY_TOO_SMALL", 20, 397}, + #endif + #ifdef SSL_R_CA_MD_TOO_WEAK + {"CA_MD_TOO_WEAK", ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK}, + #else + {"CA_MD_TOO_WEAK", 20, 398}, + #endif + #ifdef SSL_R_CCS_RECEIVED_EARLY + {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, SSL_R_CCS_RECEIVED_EARLY}, + #else + {"CCS_RECEIVED_EARLY", 20, 133}, + #endif + #ifdef SSL_R_CERTIFICATE_VERIFY_FAILED + {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED}, + #else + {"CERTIFICATE_VERIFY_FAILED", 20, 134}, + #endif + #ifdef SSL_R_CERT_CB_ERROR + {"CERT_CB_ERROR", ERR_LIB_SSL, SSL_R_CERT_CB_ERROR}, + #else + {"CERT_CB_ERROR", 20, 377}, + #endif + #ifdef SSL_R_CERT_LENGTH_MISMATCH + {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CERT_LENGTH_MISMATCH}, + #else + {"CERT_LENGTH_MISMATCH", 20, 135}, + #endif + #ifdef SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED + {"CIPHERSUITE_DIGEST_HAS_CHANGED", ERR_LIB_SSL, SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED}, + #else + {"CIPHERSUITE_DIGEST_HAS_CHANGED", 20, 218}, + #endif + #ifdef SSL_R_CIPHER_CODE_WRONG_LENGTH + {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, SSL_R_CIPHER_CODE_WRONG_LENGTH}, + #else + {"CIPHER_CODE_WRONG_LENGTH", 20, 137}, + #endif + #ifdef SSL_R_CIPHER_OR_HASH_UNAVAILABLE + {"CIPHER_OR_HASH_UNAVAILABLE", ERR_LIB_SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE}, + #else + {"CIPHER_OR_HASH_UNAVAILABLE", 20, 138}, + #endif + #ifdef SSL_R_CLIENTHELLO_TLSEXT + {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_CLIENTHELLO_TLSEXT}, + #else + {"CLIENTHELLO_TLSEXT", 20, 226}, + #endif + #ifdef SSL_R_COMPRESSED_LENGTH_TOO_LONG + {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_COMPRESSED_LENGTH_TOO_LONG}, + #else + {"COMPRESSED_LENGTH_TOO_LONG", 20, 140}, + #endif + #ifdef SSL_R_COMPRESSION_DISABLED + {"COMPRESSION_DISABLED", ERR_LIB_SSL, SSL_R_COMPRESSION_DISABLED}, + #else + {"COMPRESSION_DISABLED", 20, 343}, + #endif + #ifdef SSL_R_COMPRESSION_FAILURE + {"COMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_COMPRESSION_FAILURE}, + #else + {"COMPRESSION_FAILURE", 20, 141}, + #endif + #ifdef SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE}, + #else + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", 20, 307}, + #endif + #ifdef SSL_R_COMPRESSION_LIBRARY_ERROR + {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, SSL_R_COMPRESSION_LIBRARY_ERROR}, + #else + {"COMPRESSION_LIBRARY_ERROR", 20, 142}, + #endif + #ifdef SSL_R_CONNECTION_TYPE_NOT_SET + {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET}, + #else + {"CONNECTION_TYPE_NOT_SET", 20, 144}, + #endif + #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED + {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, + #else + {"CONTEXT_NOT_DANE_ENABLED", 20, 167}, + #endif + #ifdef SSL_R_COOKIE_GEN_CALLBACK_FAILURE + {"COOKIE_GEN_CALLBACK_FAILURE", ERR_LIB_SSL, SSL_R_COOKIE_GEN_CALLBACK_FAILURE}, + #else + {"COOKIE_GEN_CALLBACK_FAILURE", 20, 400}, + #endif + #ifdef SSL_R_COOKIE_MISMATCH + {"COOKIE_MISMATCH", ERR_LIB_SSL, SSL_R_COOKIE_MISMATCH}, + #else + {"COOKIE_MISMATCH", 20, 308}, + #endif + #ifdef SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED}, + #else + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", 20, 206}, + #endif + #ifdef SSL_R_DANE_ALREADY_ENABLED + {"DANE_ALREADY_ENABLED", ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED}, + #else + {"DANE_ALREADY_ENABLED", 20, 172}, + #endif + #ifdef SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL}, + #else + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", 20, 173}, + #endif + #ifdef SSL_R_DANE_NOT_ENABLED + {"DANE_NOT_ENABLED", ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED}, + #else + {"DANE_NOT_ENABLED", 20, 175}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE + {"DANE_TLSA_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE", 20, 180}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", 20, 184}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DATA_LENGTH + {"DANE_TLSA_BAD_DATA_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH}, + #else + {"DANE_TLSA_BAD_DATA_LENGTH", 20, 189}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH + {"DANE_TLSA_BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH}, + #else + {"DANE_TLSA_BAD_DIGEST_LENGTH", 20, 192}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_MATCHING_TYPE + {"DANE_TLSA_BAD_MATCHING_TYPE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE}, + #else + {"DANE_TLSA_BAD_MATCHING_TYPE", 20, 200}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_PUBLIC_KEY + {"DANE_TLSA_BAD_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY}, + #else + {"DANE_TLSA_BAD_PUBLIC_KEY", 20, 201}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_SELECTOR + {"DANE_TLSA_BAD_SELECTOR", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR}, + #else + {"DANE_TLSA_BAD_SELECTOR", 20, 202}, + #endif + #ifdef SSL_R_DANE_TLSA_NULL_DATA + {"DANE_TLSA_NULL_DATA", ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA}, + #else + {"DANE_TLSA_NULL_DATA", 20, 203}, + #endif + #ifdef SSL_R_DATA_BETWEEN_CCS_AND_FINISHED + {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED}, + #else + {"DATA_BETWEEN_CCS_AND_FINISHED", 20, 145}, + #endif + #ifdef SSL_R_DATA_LENGTH_TOO_LONG + {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG}, + #else + {"DATA_LENGTH_TOO_LONG", 20, 146}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED + {"DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED}, + #else + {"DECRYPTION_FAILED", 20, 147}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC}, + #else + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", 20, 281}, + #endif + #ifdef SSL_R_DH_KEY_TOO_SMALL + {"DH_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL}, + #else + {"DH_KEY_TOO_SMALL", 20, 394}, + #endif + #ifdef SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG}, + #else + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", 20, 148}, + #endif + #ifdef SSL_R_DIGEST_CHECK_FAILED + {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, SSL_R_DIGEST_CHECK_FAILED}, + #else + {"DIGEST_CHECK_FAILED", 20, 149}, + #endif + #ifdef SSL_R_DTLS_MESSAGE_TOO_BIG + {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, SSL_R_DTLS_MESSAGE_TOO_BIG}, + #else + {"DTLS_MESSAGE_TOO_BIG", 20, 334}, + #endif + #ifdef SSL_R_DUPLICATE_COMPRESSION_ID + {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, SSL_R_DUPLICATE_COMPRESSION_ID}, + #else + {"DUPLICATE_COMPRESSION_ID", 20, 309}, + #endif + #ifdef SSL_R_ECC_CERT_NOT_FOR_SIGNING + {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING}, + #else + {"ECC_CERT_NOT_FOR_SIGNING", 20, 318}, + #endif + #ifdef SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE + {"ECDH_REQUIRED_FOR_SUITEB_MODE", ERR_LIB_SSL, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE}, + #else + {"ECDH_REQUIRED_FOR_SUITEB_MODE", 20, 374}, + #endif + #ifdef SSL_R_EE_KEY_TOO_SMALL + {"EE_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_EE_KEY_TOO_SMALL}, + #else + {"EE_KEY_TOO_SMALL", 20, 399}, + #endif + #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", 20, 354}, + #endif + #ifdef SSL_R_ENCRYPTED_LENGTH_TOO_LONG + {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_ENCRYPTED_LENGTH_TOO_LONG}, + #else + {"ENCRYPTED_LENGTH_TOO_LONG", 20, 150}, + #endif + #ifdef SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST + {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST}, + #else + {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, + #endif + #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN + {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, + #else + {"ERROR_SETTING_TLSA_BASE_DOMAIN", 20, 204}, + #endif + #ifdef SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE + {"EXCEEDS_MAX_FRAGMENT_SIZE", ERR_LIB_SSL, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE}, + #else + {"EXCEEDS_MAX_FRAGMENT_SIZE", 20, 194}, + #endif + #ifdef SSL_R_EXCESSIVE_MESSAGE_SIZE + {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, SSL_R_EXCESSIVE_MESSAGE_SIZE}, + #else + {"EXCESSIVE_MESSAGE_SIZE", 20, 152}, + #endif + #ifdef SSL_R_EXTENSION_NOT_RECEIVED + {"EXTENSION_NOT_RECEIVED", ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED}, + #else + {"EXTENSION_NOT_RECEIVED", 20, 279}, + #endif + #ifdef SSL_R_EXTRA_DATA_IN_MESSAGE + {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, SSL_R_EXTRA_DATA_IN_MESSAGE}, + #else + {"EXTRA_DATA_IN_MESSAGE", 20, 153}, + #endif + #ifdef SSL_R_EXT_LENGTH_MISMATCH + {"EXT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_EXT_LENGTH_MISMATCH}, + #else + {"EXT_LENGTH_MISMATCH", 20, 163}, + #endif + #ifdef SSL_R_FAILED_TO_INIT_ASYNC + {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, + #else + {"FAILED_TO_INIT_ASYNC", 20, 405}, + #endif + #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO + {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, + #else + {"FRAGMENTED_CLIENT_HELLO", 20, 401}, + #endif + #ifdef SSL_R_GOT_A_FIN_BEFORE_A_CCS + {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, SSL_R_GOT_A_FIN_BEFORE_A_CCS}, + #else + {"GOT_A_FIN_BEFORE_A_CCS", 20, 154}, + #endif + #ifdef SSL_R_HTTPS_PROXY_REQUEST + {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, SSL_R_HTTPS_PROXY_REQUEST}, + #else + {"HTTPS_PROXY_REQUEST", 20, 155}, + #endif + #ifdef SSL_R_HTTP_REQUEST + {"HTTP_REQUEST", ERR_LIB_SSL, SSL_R_HTTP_REQUEST}, + #else + {"HTTP_REQUEST", 20, 156}, + #endif + #ifdef SSL_R_ILLEGAL_POINT_COMPRESSION + {"ILLEGAL_POINT_COMPRESSION", ERR_LIB_SSL, SSL_R_ILLEGAL_POINT_COMPRESSION}, + #else + {"ILLEGAL_POINT_COMPRESSION", 20, 162}, + #endif + #ifdef SSL_R_ILLEGAL_SUITEB_DIGEST + {"ILLEGAL_SUITEB_DIGEST", ERR_LIB_SSL, SSL_R_ILLEGAL_SUITEB_DIGEST}, + #else + {"ILLEGAL_SUITEB_DIGEST", 20, 380}, + #endif + #ifdef SSL_R_INAPPROPRIATE_FALLBACK + {"INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_INAPPROPRIATE_FALLBACK}, + #else + {"INAPPROPRIATE_FALLBACK", 20, 373}, + #endif + #ifdef SSL_R_INCONSISTENT_COMPRESSION + {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, SSL_R_INCONSISTENT_COMPRESSION}, + #else + {"INCONSISTENT_COMPRESSION", 20, 340}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_ALPN + {"INCONSISTENT_EARLY_DATA_ALPN", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_ALPN}, + #else + {"INCONSISTENT_EARLY_DATA_ALPN", 20, 222}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_SNI + {"INCONSISTENT_EARLY_DATA_SNI", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_SNI}, + #else + {"INCONSISTENT_EARLY_DATA_SNI", 20, 231}, + #endif + #ifdef SSL_R_INCONSISTENT_EXTMS + {"INCONSISTENT_EXTMS", ERR_LIB_SSL, SSL_R_INCONSISTENT_EXTMS}, + #else + {"INCONSISTENT_EXTMS", 20, 104}, + #endif + #ifdef SSL_R_INSUFFICIENT_SECURITY + {"INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_INSUFFICIENT_SECURITY}, + #else + {"INSUFFICIENT_SECURITY", 20, 241}, + #endif + #ifdef SSL_R_INVALID_ALERT + {"INVALID_ALERT", ERR_LIB_SSL, SSL_R_INVALID_ALERT}, + #else + {"INVALID_ALERT", 20, 205}, + #endif + #ifdef SSL_R_INVALID_CCS_MESSAGE + {"INVALID_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_INVALID_CCS_MESSAGE}, + #else + {"INVALID_CCS_MESSAGE", 20, 260}, + #endif + #ifdef SSL_R_INVALID_CERTIFICATE_OR_ALG + {"INVALID_CERTIFICATE_OR_ALG", ERR_LIB_SSL, SSL_R_INVALID_CERTIFICATE_OR_ALG}, + #else + {"INVALID_CERTIFICATE_OR_ALG", 20, 238}, + #endif + #ifdef SSL_R_INVALID_COMMAND + {"INVALID_COMMAND", ERR_LIB_SSL, SSL_R_INVALID_COMMAND}, + #else + {"INVALID_COMMAND", 20, 280}, + #endif + #ifdef SSL_R_INVALID_COMPRESSION_ALGORITHM + {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_INVALID_COMPRESSION_ALGORITHM}, + #else + {"INVALID_COMPRESSION_ALGORITHM", 20, 341}, + #endif + #ifdef SSL_R_INVALID_CONFIG + {"INVALID_CONFIG", ERR_LIB_SSL, SSL_R_INVALID_CONFIG}, + #else + {"INVALID_CONFIG", 20, 283}, + #endif + #ifdef SSL_R_INVALID_CONFIGURATION_NAME + {"INVALID_CONFIGURATION_NAME", ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME}, + #else + {"INVALID_CONFIGURATION_NAME", 20, 113}, + #endif + #ifdef SSL_R_INVALID_CONTEXT + {"INVALID_CONTEXT", ERR_LIB_SSL, SSL_R_INVALID_CONTEXT}, + #else + {"INVALID_CONTEXT", 20, 282}, + #endif + #ifdef SSL_R_INVALID_CT_VALIDATION_TYPE + {"INVALID_CT_VALIDATION_TYPE", ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE}, + #else + {"INVALID_CT_VALIDATION_TYPE", 20, 212}, + #endif + #ifdef SSL_R_INVALID_KEY_UPDATE_TYPE + {"INVALID_KEY_UPDATE_TYPE", ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE}, + #else + {"INVALID_KEY_UPDATE_TYPE", 20, 120}, + #endif + #ifdef SSL_R_INVALID_MAX_EARLY_DATA + {"INVALID_MAX_EARLY_DATA", ERR_LIB_SSL, SSL_R_INVALID_MAX_EARLY_DATA}, + #else + {"INVALID_MAX_EARLY_DATA", 20, 174}, + #endif + #ifdef SSL_R_INVALID_NULL_CMD_NAME + {"INVALID_NULL_CMD_NAME", ERR_LIB_SSL, SSL_R_INVALID_NULL_CMD_NAME}, + #else + {"INVALID_NULL_CMD_NAME", 20, 385}, + #endif + #ifdef SSL_R_INVALID_SEQUENCE_NUMBER + {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, + #else + {"INVALID_SEQUENCE_NUMBER", 20, 402}, + #endif + #ifdef SSL_R_INVALID_SERVERINFO_DATA + {"INVALID_SERVERINFO_DATA", ERR_LIB_SSL, SSL_R_INVALID_SERVERINFO_DATA}, + #else + {"INVALID_SERVERINFO_DATA", 20, 388}, + #endif + #ifdef SSL_R_INVALID_SESSION_ID + {"INVALID_SESSION_ID", ERR_LIB_SSL, SSL_R_INVALID_SESSION_ID}, + #else + {"INVALID_SESSION_ID", 20, 999}, + #endif + #ifdef SSL_R_INVALID_SRP_USERNAME + {"INVALID_SRP_USERNAME", ERR_LIB_SSL, SSL_R_INVALID_SRP_USERNAME}, + #else + {"INVALID_SRP_USERNAME", 20, 357}, + #endif + #ifdef SSL_R_INVALID_STATUS_RESPONSE + {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_INVALID_STATUS_RESPONSE}, + #else + {"INVALID_STATUS_RESPONSE", 20, 328}, + #endif + #ifdef SSL_R_INVALID_TICKET_KEYS_LENGTH + {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH}, + #else + {"INVALID_TICKET_KEYS_LENGTH", 20, 325}, + #endif + #ifdef SSL_R_LENGTH_MISMATCH + {"LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_LENGTH_MISMATCH}, + #else + {"LENGTH_MISMATCH", 20, 159}, + #endif + #ifdef SSL_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 20, 404}, + #endif + #ifdef SSL_R_LENGTH_TOO_SHORT + {"LENGTH_TOO_SHORT", ERR_LIB_SSL, SSL_R_LENGTH_TOO_SHORT}, + #else + {"LENGTH_TOO_SHORT", 20, 160}, + #endif + #ifdef SSL_R_LIBRARY_BUG + {"LIBRARY_BUG", ERR_LIB_SSL, SSL_R_LIBRARY_BUG}, + #else + {"LIBRARY_BUG", 20, 274}, + #endif + #ifdef SSL_R_LIBRARY_HAS_NO_CIPHERS + {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS}, + #else + {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, + #endif + #ifdef SSL_R_MISSING_DSA_SIGNING_CERT + {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, + #else + {"MISSING_DSA_SIGNING_CERT", 20, 165}, + #endif + #ifdef SSL_R_MISSING_ECDSA_SIGNING_CERT + {"MISSING_ECDSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_ECDSA_SIGNING_CERT}, + #else + {"MISSING_ECDSA_SIGNING_CERT", 20, 381}, + #endif + #ifdef SSL_R_MISSING_FATAL + {"MISSING_FATAL", ERR_LIB_SSL, SSL_R_MISSING_FATAL}, + #else + {"MISSING_FATAL", 20, 256}, + #endif + #ifdef SSL_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_SSL, SSL_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 20, 290}, + #endif + #ifdef SSL_R_MISSING_RSA_CERTIFICATE + {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, SSL_R_MISSING_RSA_CERTIFICATE}, + #else + {"MISSING_RSA_CERTIFICATE", 20, 168}, + #endif + #ifdef SSL_R_MISSING_RSA_ENCRYPTING_CERT + {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_ENCRYPTING_CERT}, + #else + {"MISSING_RSA_ENCRYPTING_CERT", 20, 169}, + #endif + #ifdef SSL_R_MISSING_RSA_SIGNING_CERT + {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_SIGNING_CERT}, + #else + {"MISSING_RSA_SIGNING_CERT", 20, 170}, + #endif + #ifdef SSL_R_MISSING_SIGALGS_EXTENSION + {"MISSING_SIGALGS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SIGALGS_EXTENSION}, + #else + {"MISSING_SIGALGS_EXTENSION", 20, 112}, + #endif + #ifdef SSL_R_MISSING_SIGNING_CERT + {"MISSING_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_SIGNING_CERT}, + #else + {"MISSING_SIGNING_CERT", 20, 221}, + #endif + #ifdef SSL_R_MISSING_SRP_PARAM + {"MISSING_SRP_PARAM", ERR_LIB_SSL, SSL_R_MISSING_SRP_PARAM}, + #else + {"MISSING_SRP_PARAM", 20, 358}, + #endif + #ifdef SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION + {"MISSING_SUPPORTED_GROUPS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION}, + #else + {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, + #endif + #ifdef SSL_R_MISSING_TMP_DH_KEY + {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, + #else + {"MISSING_TMP_DH_KEY", 20, 171}, + #endif + #ifdef SSL_R_MISSING_TMP_ECDH_KEY + {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_ECDH_KEY}, + #else + {"MISSING_TMP_ECDH_KEY", 20, 311}, + #endif + #ifdef SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", ERR_LIB_SSL, SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA}, + #else + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", 20, 293}, + #endif + #ifdef SSL_R_NOT_ON_RECORD_BOUNDARY + {"NOT_ON_RECORD_BOUNDARY", ERR_LIB_SSL, SSL_R_NOT_ON_RECORD_BOUNDARY}, + #else + {"NOT_ON_RECORD_BOUNDARY", 20, 182}, + #endif + #ifdef SSL_R_NOT_REPLACING_CERTIFICATE + {"NOT_REPLACING_CERTIFICATE", ERR_LIB_SSL, SSL_R_NOT_REPLACING_CERTIFICATE}, + #else + {"NOT_REPLACING_CERTIFICATE", 20, 289}, + #endif + #ifdef SSL_R_NOT_SERVER + {"NOT_SERVER", ERR_LIB_SSL, SSL_R_NOT_SERVER}, + #else + {"NOT_SERVER", 20, 284}, + #endif + #ifdef SSL_R_NO_APPLICATION_PROTOCOL + {"NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_NO_APPLICATION_PROTOCOL}, + #else + {"NO_APPLICATION_PROTOCOL", 20, 235}, + #endif + #ifdef SSL_R_NO_CERTIFICATES_RETURNED + {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATES_RETURNED}, + #else + {"NO_CERTIFICATES_RETURNED", 20, 176}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_ASSIGNED + {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED}, + #else + {"NO_CERTIFICATE_ASSIGNED", 20, 177}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_SET + {"NO_CERTIFICATE_SET", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SET}, + #else + {"NO_CERTIFICATE_SET", 20, 179}, + #endif + #ifdef SSL_R_NO_CHANGE_FOLLOWING_HRR + {"NO_CHANGE_FOLLOWING_HRR", ERR_LIB_SSL, SSL_R_NO_CHANGE_FOLLOWING_HRR}, + #else + {"NO_CHANGE_FOLLOWING_HRR", 20, 214}, + #endif + #ifdef SSL_R_NO_CIPHERS_AVAILABLE + {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_CIPHERS_AVAILABLE}, + #else + {"NO_CIPHERS_AVAILABLE", 20, 181}, + #endif + #ifdef SSL_R_NO_CIPHERS_SPECIFIED + {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED}, + #else + {"NO_CIPHERS_SPECIFIED", 20, 183}, + #endif + #ifdef SSL_R_NO_CIPHER_MATCH + {"NO_CIPHER_MATCH", ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH}, + #else + {"NO_CIPHER_MATCH", 20, 185}, + #endif + #ifdef SSL_R_NO_CLIENT_CERT_METHOD + {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD}, + #else + {"NO_CLIENT_CERT_METHOD", 20, 331}, + #endif + #ifdef SSL_R_NO_COMPRESSION_SPECIFIED + {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_COMPRESSION_SPECIFIED}, + #else + {"NO_COMPRESSION_SPECIFIED", 20, 187}, + #endif + #ifdef SSL_R_NO_COOKIE_CALLBACK_SET + {"NO_COOKIE_CALLBACK_SET", ERR_LIB_SSL, SSL_R_NO_COOKIE_CALLBACK_SET}, + #else + {"NO_COOKIE_CALLBACK_SET", 20, 287}, + #endif + #ifdef SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER}, + #else + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", 20, 330}, + #endif + #ifdef SSL_R_NO_METHOD_SPECIFIED + {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED}, + #else + {"NO_METHOD_SPECIFIED", 20, 188}, + #endif + #ifdef SSL_R_NO_PEM_EXTENSIONS + {"NO_PEM_EXTENSIONS", ERR_LIB_SSL, SSL_R_NO_PEM_EXTENSIONS}, + #else + {"NO_PEM_EXTENSIONS", 20, 389}, + #endif + #ifdef SSL_R_NO_PRIVATE_KEY_ASSIGNED + {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED}, + #else + {"NO_PRIVATE_KEY_ASSIGNED", 20, 190}, + #endif + #ifdef SSL_R_NO_PROTOCOLS_AVAILABLE + {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_PROTOCOLS_AVAILABLE}, + #else + {"NO_PROTOCOLS_AVAILABLE", 20, 191}, + #endif + #ifdef SSL_R_NO_RENEGOTIATION + {"NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION}, + #else + {"NO_RENEGOTIATION", 20, 339}, + #endif + #ifdef SSL_R_NO_REQUIRED_DIGEST + {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, SSL_R_NO_REQUIRED_DIGEST}, + #else + {"NO_REQUIRED_DIGEST", 20, 324}, + #endif + #ifdef SSL_R_NO_SHARED_CIPHER + {"NO_SHARED_CIPHER", ERR_LIB_SSL, SSL_R_NO_SHARED_CIPHER}, + #else + {"NO_SHARED_CIPHER", 20, 193}, + #endif + #ifdef SSL_R_NO_SHARED_GROUPS + {"NO_SHARED_GROUPS", ERR_LIB_SSL, SSL_R_NO_SHARED_GROUPS}, + #else + {"NO_SHARED_GROUPS", 20, 410}, + #endif + #ifdef SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS + {"NO_SHARED_SIGNATURE_ALGORITHMS", ERR_LIB_SSL, SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS}, + #else + {"NO_SHARED_SIGNATURE_ALGORITHMS", 20, 376}, + #endif + #ifdef SSL_R_NO_SRTP_PROFILES + {"NO_SRTP_PROFILES", ERR_LIB_SSL, SSL_R_NO_SRTP_PROFILES}, + #else + {"NO_SRTP_PROFILES", 20, 359}, + #endif + #ifdef SSL_R_NO_SUITABLE_KEY_SHARE + {"NO_SUITABLE_KEY_SHARE", ERR_LIB_SSL, SSL_R_NO_SUITABLE_KEY_SHARE}, + #else + {"NO_SUITABLE_KEY_SHARE", 20, 101}, + #endif + #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM + {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, + #else + {"NO_SUITABLE_SIGNATURE_ALGORITHM", 20, 118}, + #endif + #ifdef SSL_R_NO_VALID_SCTS + {"NO_VALID_SCTS", ERR_LIB_SSL, SSL_R_NO_VALID_SCTS}, + #else + {"NO_VALID_SCTS", 20, 216}, + #endif + #ifdef SSL_R_NO_VERIFY_COOKIE_CALLBACK + {"NO_VERIFY_COOKIE_CALLBACK", ERR_LIB_SSL, SSL_R_NO_VERIFY_COOKIE_CALLBACK}, + #else + {"NO_VERIFY_COOKIE_CALLBACK", 20, 403}, + #endif + #ifdef SSL_R_NULL_SSL_CTX + {"NULL_SSL_CTX", ERR_LIB_SSL, SSL_R_NULL_SSL_CTX}, + #else + {"NULL_SSL_CTX", 20, 195}, + #endif + #ifdef SSL_R_NULL_SSL_METHOD_PASSED + {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED}, + #else + {"NULL_SSL_METHOD_PASSED", 20, 196}, + #endif + #ifdef SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED + {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED}, + #else + {"OLD_SESSION_CIPHER_NOT_RETURNED", 20, 197}, + #endif + #ifdef SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED}, + #else + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", 20, 344}, + #endif + #ifdef SSL_R_OVERFLOW_ERROR + {"OVERFLOW_ERROR", ERR_LIB_SSL, SSL_R_OVERFLOW_ERROR}, + #else + {"OVERFLOW_ERROR", 20, 237}, + #endif + #ifdef SSL_R_PACKET_LENGTH_TOO_LONG + {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PACKET_LENGTH_TOO_LONG}, + #else + {"PACKET_LENGTH_TOO_LONG", 20, 198}, + #endif + #ifdef SSL_R_PARSE_TLSEXT + {"PARSE_TLSEXT", ERR_LIB_SSL, SSL_R_PARSE_TLSEXT}, + #else + {"PARSE_TLSEXT", 20, 227}, + #endif + #ifdef SSL_R_PATH_TOO_LONG + {"PATH_TOO_LONG", ERR_LIB_SSL, SSL_R_PATH_TOO_LONG}, + #else + {"PATH_TOO_LONG", 20, 270}, + #endif + #ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE}, + #else + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", 20, 199}, + #endif + #ifdef SSL_R_PEM_NAME_BAD_PREFIX + {"PEM_NAME_BAD_PREFIX", ERR_LIB_SSL, SSL_R_PEM_NAME_BAD_PREFIX}, + #else + {"PEM_NAME_BAD_PREFIX", 20, 391}, + #endif + #ifdef SSL_R_PEM_NAME_TOO_SHORT + {"PEM_NAME_TOO_SHORT", ERR_LIB_SSL, SSL_R_PEM_NAME_TOO_SHORT}, + #else + {"PEM_NAME_TOO_SHORT", 20, 392}, + #endif + #ifdef SSL_R_PIPELINE_FAILURE + {"PIPELINE_FAILURE", ERR_LIB_SSL, SSL_R_PIPELINE_FAILURE}, + #else + {"PIPELINE_FAILURE", 20, 406}, + #endif + #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, + #else + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", 20, 278}, + #endif + #ifdef SSL_R_PRIVATE_KEY_MISMATCH + {"PRIVATE_KEY_MISMATCH", ERR_LIB_SSL, SSL_R_PRIVATE_KEY_MISMATCH}, + #else + {"PRIVATE_KEY_MISMATCH", 20, 288}, + #endif + #ifdef SSL_R_PROTOCOL_IS_SHUTDOWN + {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN}, + #else + {"PROTOCOL_IS_SHUTDOWN", 20, 207}, + #endif + #ifdef SSL_R_PSK_IDENTITY_NOT_FOUND + {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, SSL_R_PSK_IDENTITY_NOT_FOUND}, + #else + {"PSK_IDENTITY_NOT_FOUND", 20, 223}, + #endif + #ifdef SSL_R_PSK_NO_CLIENT_CB + {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, SSL_R_PSK_NO_CLIENT_CB}, + #else + {"PSK_NO_CLIENT_CB", 20, 224}, + #endif + #ifdef SSL_R_PSK_NO_SERVER_CB + {"PSK_NO_SERVER_CB", ERR_LIB_SSL, SSL_R_PSK_NO_SERVER_CB}, + #else + {"PSK_NO_SERVER_CB", 20, 225}, + #endif + #ifdef SSL_R_READ_BIO_NOT_SET + {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, + #else + {"READ_BIO_NOT_SET", 20, 211}, + #endif + #ifdef SSL_R_READ_TIMEOUT_EXPIRED + {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, SSL_R_READ_TIMEOUT_EXPIRED}, + #else + {"READ_TIMEOUT_EXPIRED", 20, 312}, + #endif + #ifdef SSL_R_RECORD_LENGTH_MISMATCH + {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, + #else + {"RECORD_LENGTH_MISMATCH", 20, 213}, + #endif + #ifdef SSL_R_RECORD_TOO_SMALL + {"RECORD_TOO_SMALL", ERR_LIB_SSL, SSL_R_RECORD_TOO_SMALL}, + #else + {"RECORD_TOO_SMALL", 20, 298}, + #endif + #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG + {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, + #else + {"RENEGOTIATE_EXT_TOO_LONG", 20, 335}, + #endif + #ifdef SSL_R_RENEGOTIATION_ENCODING_ERR + {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, SSL_R_RENEGOTIATION_ENCODING_ERR}, + #else + {"RENEGOTIATION_ENCODING_ERR", 20, 336}, + #endif + #ifdef SSL_R_RENEGOTIATION_MISMATCH + {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, SSL_R_RENEGOTIATION_MISMATCH}, + #else + {"RENEGOTIATION_MISMATCH", 20, 337}, + #endif + #ifdef SSL_R_REQUEST_PENDING + {"REQUEST_PENDING", ERR_LIB_SSL, SSL_R_REQUEST_PENDING}, + #else + {"REQUEST_PENDING", 20, 285}, + #endif + #ifdef SSL_R_REQUEST_SENT + {"REQUEST_SENT", ERR_LIB_SSL, SSL_R_REQUEST_SENT}, + #else + {"REQUEST_SENT", 20, 286}, + #endif + #ifdef SSL_R_REQUIRED_CIPHER_MISSING + {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_CIPHER_MISSING}, + #else + {"REQUIRED_CIPHER_MISSING", 20, 215}, + #endif + #ifdef SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING}, + #else + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", 20, 342}, + #endif + #ifdef SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING}, + #else + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", 20, 345}, + #endif + #ifdef SSL_R_SCT_VERIFICATION_FAILED + {"SCT_VERIFICATION_FAILED", ERR_LIB_SSL, SSL_R_SCT_VERIFICATION_FAILED}, + #else + {"SCT_VERIFICATION_FAILED", 20, 208}, + #endif + #ifdef SSL_R_SERVERHELLO_TLSEXT + {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, + #else + {"SERVERHELLO_TLSEXT", 20, 275}, + #endif + #ifdef SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED + {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED}, + #else + {"SESSION_ID_CONTEXT_UNINITIALIZED", 20, 277}, + #endif + #ifdef SSL_R_SHUTDOWN_WHILE_IN_INIT + {"SHUTDOWN_WHILE_IN_INIT", ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT}, + #else + {"SHUTDOWN_WHILE_IN_INIT", 20, 407}, + #endif + #ifdef SSL_R_SIGNATURE_ALGORITHMS_ERROR + {"SIGNATURE_ALGORITHMS_ERROR", ERR_LIB_SSL, SSL_R_SIGNATURE_ALGORITHMS_ERROR}, + #else + {"SIGNATURE_ALGORITHMS_ERROR", 20, 360}, + #endif + #ifdef SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE}, + #else + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", 20, 220}, + #endif + #ifdef SSL_R_SRP_A_CALC + {"SRP_A_CALC", ERR_LIB_SSL, SSL_R_SRP_A_CALC}, + #else + {"SRP_A_CALC", 20, 361}, + #endif + #ifdef SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", ERR_LIB_SSL, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES}, + #else + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", 20, 362}, + #endif + #ifdef SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", ERR_LIB_SSL, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG}, + #else + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", 20, 363}, + #endif + #ifdef SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE + {"SRTP_UNKNOWN_PROTECTION_PROFILE", ERR_LIB_SSL, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE}, + #else + {"SRTP_UNKNOWN_PROTECTION_PROFILE", 20, 364}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH}, + #else + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", 20, 232}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME + {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME}, + #else + {"SSL3_EXT_INVALID_SERVERNAME", 20, 319}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE}, + #else + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", 20, 320}, + #endif + #ifdef SSL_R_SSL3_SESSION_ID_TOO_LONG + {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_LONG}, + #else + {"SSL3_SESSION_ID_TOO_LONG", 20, 300}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE + {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, + #else + {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC + {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, + #else + {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, + #else + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED + {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, + #else + {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, + #else + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, + #endif + #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, + #else + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, + #endif + #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE + {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, + #else + {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, + #endif + #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER + {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, + #else + {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, + #endif + #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE + {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, + #else + {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, + #else + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, + #else + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 20, 117}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 20, 125}, + #endif + #ifdef SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION}, + #else + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", 20, 228}, + #endif + #ifdef SSL_R_SSL_HANDSHAKE_FAILURE + {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE}, + #else + {"SSL_HANDSHAKE_FAILURE", 20, 229}, + #endif + #ifdef SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS + {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS}, + #else + {"SSL_LIBRARY_HAS_NO_CIPHERS", 20, 230}, + #endif + #ifdef SSL_R_SSL_NEGATIVE_LENGTH + {"SSL_NEGATIVE_LENGTH", ERR_LIB_SSL, SSL_R_SSL_NEGATIVE_LENGTH}, + #else + {"SSL_NEGATIVE_LENGTH", 20, 372}, + #endif + #ifdef SSL_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 20, 126}, + #endif + #ifdef SSL_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 20, 136}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CALLBACK_FAILED + {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED}, + #else + {"SSL_SESSION_ID_CALLBACK_FAILED", 20, 301}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONFLICT + {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONFLICT}, + #else + {"SSL_SESSION_ID_CONFLICT", 20, 302}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG}, + #else + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", 20, 273}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH + {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH}, + #else + {"SSL_SESSION_ID_HAS_BAD_LENGTH", 20, 303}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_TOO_LONG + {"SSL_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_TOO_LONG}, + #else + {"SSL_SESSION_ID_TOO_LONG", 20, 408}, + #endif + #ifdef SSL_R_SSL_SESSION_VERSION_MISMATCH + {"SSL_SESSION_VERSION_MISMATCH", ERR_LIB_SSL, SSL_R_SSL_SESSION_VERSION_MISMATCH}, + #else + {"SSL_SESSION_VERSION_MISMATCH", 20, 210}, + #endif + #ifdef SSL_R_STILL_IN_INIT + {"STILL_IN_INIT", ERR_LIB_SSL, SSL_R_STILL_IN_INIT}, + #else + {"STILL_IN_INIT", 20, 121}, + #endif + #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, + #else + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, + #endif + #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION + {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, + #else + {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, + #endif + #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED + {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, + #else + {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR + {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, + #else + {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED + {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, + #else + {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR + {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, + #else + {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, + #endif + #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION + {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, + #else + {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, + #else + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, + #else + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR + {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, + #else + {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, + #endif + #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION + {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, + #else + {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, + #endif + #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION + {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, + #else + {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, + #endif + #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW + {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, + #else + {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, + #endif + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA + {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, + #else + {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, + #endif + #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED + {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, + #else + {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, + #else + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, + #else + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, + #endif + #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE + {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, + #else + {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, + #endif + #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME + {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, + #else + {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, + #endif + #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION + {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, + #else + {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, + #endif + #ifdef SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT + {"TLS_HEARTBEAT_PEER_DOESNT_ACCEPT", ERR_LIB_SSL, SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT}, + #else + {"TLS_HEARTBEAT_PEER_DOESNT_ACCEPT", 20, 365}, + #endif + #ifdef SSL_R_TLS_HEARTBEAT_PENDING + {"TLS_HEARTBEAT_PENDING", ERR_LIB_SSL, SSL_R_TLS_HEARTBEAT_PENDING}, + #else + {"TLS_HEARTBEAT_PENDING", 20, 366}, + #endif + #ifdef SSL_R_TLS_ILLEGAL_EXPORTER_LABEL + {"TLS_ILLEGAL_EXPORTER_LABEL", ERR_LIB_SSL, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL}, + #else + {"TLS_ILLEGAL_EXPORTER_LABEL", 20, 367}, + #endif + #ifdef SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST + {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST}, + #else + {"TLS_INVALID_ECPOINTFORMAT_LIST", 20, 157}, + #endif + #ifdef SSL_R_TOO_MANY_KEY_UPDATES + {"TOO_MANY_KEY_UPDATES", ERR_LIB_SSL, SSL_R_TOO_MANY_KEY_UPDATES}, + #else + {"TOO_MANY_KEY_UPDATES", 20, 132}, + #endif + #ifdef SSL_R_TOO_MANY_WARN_ALERTS + {"TOO_MANY_WARN_ALERTS", ERR_LIB_SSL, SSL_R_TOO_MANY_WARN_ALERTS}, + #else + {"TOO_MANY_WARN_ALERTS", 20, 409}, + #endif + #ifdef SSL_R_TOO_MUCH_EARLY_DATA + {"TOO_MUCH_EARLY_DATA", ERR_LIB_SSL, SSL_R_TOO_MUCH_EARLY_DATA}, + #else + {"TOO_MUCH_EARLY_DATA", 20, 164}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS + {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS}, + #else + {"UNABLE_TO_FIND_ECDH_PARAMETERS", 20, 314}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS}, + #else + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", 20, 239}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", 20, 242}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", 20, 243}, + #endif + #ifdef SSL_R_UNEXPECTED_CCS_MESSAGE + {"UNEXPECTED_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_CCS_MESSAGE}, + #else + {"UNEXPECTED_CCS_MESSAGE", 20, 262}, + #endif + #ifdef SSL_R_UNEXPECTED_END_OF_EARLY_DATA + {"UNEXPECTED_END_OF_EARLY_DATA", ERR_LIB_SSL, SSL_R_UNEXPECTED_END_OF_EARLY_DATA}, + #else + {"UNEXPECTED_END_OF_EARLY_DATA", 20, 178}, + #endif + #ifdef SSL_R_UNEXPECTED_MESSAGE + {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_MESSAGE}, + #else + {"UNEXPECTED_MESSAGE", 20, 244}, + #endif + #ifdef SSL_R_UNEXPECTED_RECORD + {"UNEXPECTED_RECORD", ERR_LIB_SSL, SSL_R_UNEXPECTED_RECORD}, + #else + {"UNEXPECTED_RECORD", 20, 245}, + #endif + #ifdef SSL_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_SSL, SSL_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 20, 276}, + #endif + #ifdef SSL_R_UNKNOWN_ALERT_TYPE + {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_ALERT_TYPE}, + #else + {"UNKNOWN_ALERT_TYPE", 20, 246}, + #endif + #ifdef SSL_R_UNKNOWN_CERTIFICATE_TYPE + {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE}, + #else + {"UNKNOWN_CERTIFICATE_TYPE", 20, 247}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_RETURNED + {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_RETURNED}, + #else + {"UNKNOWN_CIPHER_RETURNED", 20, 248}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_TYPE + {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_TYPE}, + #else + {"UNKNOWN_CIPHER_TYPE", 20, 249}, + #endif + #ifdef SSL_R_UNKNOWN_CMD_NAME + {"UNKNOWN_CMD_NAME", ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME}, + #else + {"UNKNOWN_CMD_NAME", 20, 386}, + #endif + #ifdef SSL_R_UNKNOWN_COMMAND + {"UNKNOWN_COMMAND", ERR_LIB_SSL, SSL_R_UNKNOWN_COMMAND}, + #else + {"UNKNOWN_COMMAND", 20, 139}, + #endif + #ifdef SSL_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_SSL, SSL_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 20, 368}, + #endif + #ifdef SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE + {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE}, + #else + {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, + #endif + #ifdef SSL_R_UNKNOWN_PKEY_TYPE + {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, + #else + {"UNKNOWN_PKEY_TYPE", 20, 251}, + #endif + #ifdef SSL_R_UNKNOWN_PROTOCOL + {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, SSL_R_UNKNOWN_PROTOCOL}, + #else + {"UNKNOWN_PROTOCOL", 20, 252}, + #endif + #ifdef SSL_R_UNKNOWN_SSL_VERSION + {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNKNOWN_SSL_VERSION}, + #else + {"UNKNOWN_SSL_VERSION", 20, 254}, + #endif + #ifdef SSL_R_UNKNOWN_STATE + {"UNKNOWN_STATE", ERR_LIB_SSL, SSL_R_UNKNOWN_STATE}, + #else + {"UNKNOWN_STATE", 20, 255}, + #endif + #ifdef SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED}, + #else + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", 20, 338}, + #endif + #ifdef SSL_R_UNSOLICITED_EXTENSION + {"UNSOLICITED_EXTENSION", ERR_LIB_SSL, SSL_R_UNSOLICITED_EXTENSION}, + #else + {"UNSOLICITED_EXTENSION", 20, 217}, + #endif + #ifdef SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, + #endif + #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE + {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, + #else + {"UNSUPPORTED_ELLIPTIC_CURVE", 20, 315}, + #endif + #ifdef SSL_R_UNSUPPORTED_PROTOCOL + {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL}, + #else + {"UNSUPPORTED_PROTOCOL", 20, 258}, + #endif + #ifdef SSL_R_UNSUPPORTED_SSL_VERSION + {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNSUPPORTED_SSL_VERSION}, + #else + {"UNSUPPORTED_SSL_VERSION", 20, 259}, + #endif + #ifdef SSL_R_UNSUPPORTED_STATUS_TYPE + {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_STATUS_TYPE}, + #else + {"UNSUPPORTED_STATUS_TYPE", 20, 329}, + #endif + #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED + {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, + #else + {"USE_SRTP_NOT_NEGOTIATED", 20, 369}, + #endif + #ifdef SSL_R_VERSION_TOO_HIGH + {"VERSION_TOO_HIGH", ERR_LIB_SSL, SSL_R_VERSION_TOO_HIGH}, + #else + {"VERSION_TOO_HIGH", 20, 166}, + #endif + #ifdef SSL_R_VERSION_TOO_LOW + {"VERSION_TOO_LOW", ERR_LIB_SSL, SSL_R_VERSION_TOO_LOW}, + #else + {"VERSION_TOO_LOW", 20, 396}, + #endif + #ifdef SSL_R_WRONG_CERTIFICATE_TYPE + {"WRONG_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_CERTIFICATE_TYPE}, + #else + {"WRONG_CERTIFICATE_TYPE", 20, 383}, + #endif + #ifdef SSL_R_WRONG_CIPHER_RETURNED + {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_WRONG_CIPHER_RETURNED}, + #else + {"WRONG_CIPHER_RETURNED", 20, 261}, + #endif + #ifdef SSL_R_WRONG_CURVE + {"WRONG_CURVE", ERR_LIB_SSL, SSL_R_WRONG_CURVE}, + #else + {"WRONG_CURVE", 20, 378}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 20, 264}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_SIZE + {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_SIZE}, + #else + {"WRONG_SIGNATURE_SIZE", 20, 265}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_TYPE + {"WRONG_SIGNATURE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_TYPE}, + #else + {"WRONG_SIGNATURE_TYPE", 20, 370}, + #endif + #ifdef SSL_R_WRONG_SSL_VERSION + {"WRONG_SSL_VERSION", ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION}, + #else + {"WRONG_SSL_VERSION", 20, 266}, + #endif + #ifdef SSL_R_WRONG_VERSION_NUMBER + {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_WRONG_VERSION_NUMBER}, + #else + {"WRONG_VERSION_NUMBER", 20, 267}, + #endif + #ifdef SSL_R_X509_LIB + {"X509_LIB", ERR_LIB_SSL, SSL_R_X509_LIB}, + #else + {"X509_LIB", 20, 268}, + #endif + #ifdef SSL_R_X509_VERIFICATION_SETUP_PROBLEMS + {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS}, + #else + {"X509_VERIFICATION_SETUP_PROBLEMS", 20, 269}, + #endif + #ifdef TS_R_BAD_PKCS7_TYPE + {"BAD_PKCS7_TYPE", ERR_LIB_TS, TS_R_BAD_PKCS7_TYPE}, + #else + {"BAD_PKCS7_TYPE", 47, 132}, + #endif + #ifdef TS_R_BAD_TYPE + {"BAD_TYPE", ERR_LIB_TS, TS_R_BAD_TYPE}, + #else + {"BAD_TYPE", 47, 133}, + #endif + #ifdef TS_R_CANNOT_LOAD_CERT + {"CANNOT_LOAD_CERT", ERR_LIB_TS, TS_R_CANNOT_LOAD_CERT}, + #else + {"CANNOT_LOAD_CERT", 47, 137}, + #endif + #ifdef TS_R_CANNOT_LOAD_KEY + {"CANNOT_LOAD_KEY", ERR_LIB_TS, TS_R_CANNOT_LOAD_KEY}, + #else + {"CANNOT_LOAD_KEY", 47, 138}, + #endif + #ifdef TS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_TS, TS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 47, 100}, + #endif + #ifdef TS_R_COULD_NOT_SET_ENGINE + {"COULD_NOT_SET_ENGINE", ERR_LIB_TS, TS_R_COULD_NOT_SET_ENGINE}, + #else + {"COULD_NOT_SET_ENGINE", 47, 127}, + #endif + #ifdef TS_R_COULD_NOT_SET_TIME + {"COULD_NOT_SET_TIME", ERR_LIB_TS, TS_R_COULD_NOT_SET_TIME}, + #else + {"COULD_NOT_SET_TIME", 47, 115}, + #endif + #ifdef TS_R_DETACHED_CONTENT + {"DETACHED_CONTENT", ERR_LIB_TS, TS_R_DETACHED_CONTENT}, + #else + {"DETACHED_CONTENT", 47, 134}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_ERROR + {"ESS_ADD_SIGNING_CERT_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_ERROR", 47, 116}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR + {"ESS_ADD_SIGNING_CERT_V2_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_V2_ERROR", 47, 139}, + #endif + #ifdef TS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_TS, TS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 47, 101}, + #endif + #ifdef TS_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_TS, TS_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 47, 102}, + #endif + #ifdef TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", ERR_LIB_TS, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE}, + #else + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", 47, 117}, + #endif + #ifdef TS_R_MESSAGE_IMPRINT_MISMATCH + {"MESSAGE_IMPRINT_MISMATCH", ERR_LIB_TS, TS_R_MESSAGE_IMPRINT_MISMATCH}, + #else + {"MESSAGE_IMPRINT_MISMATCH", 47, 103}, + #endif + #ifdef TS_R_NONCE_MISMATCH + {"NONCE_MISMATCH", ERR_LIB_TS, TS_R_NONCE_MISMATCH}, + #else + {"NONCE_MISMATCH", 47, 104}, + #endif + #ifdef TS_R_NONCE_NOT_RETURNED + {"NONCE_NOT_RETURNED", ERR_LIB_TS, TS_R_NONCE_NOT_RETURNED}, + #else + {"NONCE_NOT_RETURNED", 47, 105}, + #endif + #ifdef TS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_TS, TS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 47, 106}, + #endif + #ifdef TS_R_NO_TIME_STAMP_TOKEN + {"NO_TIME_STAMP_TOKEN", ERR_LIB_TS, TS_R_NO_TIME_STAMP_TOKEN}, + #else + {"NO_TIME_STAMP_TOKEN", 47, 107}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 47, 118}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR + {"PKCS7_ADD_SIGNED_ATTR_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR}, + #else + {"PKCS7_ADD_SIGNED_ATTR_ERROR", 47, 119}, + #endif + #ifdef TS_R_PKCS7_TO_TS_TST_INFO_FAILED + {"PKCS7_TO_TS_TST_INFO_FAILED", ERR_LIB_TS, TS_R_PKCS7_TO_TS_TST_INFO_FAILED}, + #else + {"PKCS7_TO_TS_TST_INFO_FAILED", 47, 129}, + #endif + #ifdef TS_R_POLICY_MISMATCH + {"POLICY_MISMATCH", ERR_LIB_TS, TS_R_POLICY_MISMATCH}, + #else + {"POLICY_MISMATCH", 47, 108}, + #endif + #ifdef TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_TS, TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 47, 120}, + #endif + #ifdef TS_R_RESPONSE_SETUP_ERROR + {"RESPONSE_SETUP_ERROR", ERR_LIB_TS, TS_R_RESPONSE_SETUP_ERROR}, + #else + {"RESPONSE_SETUP_ERROR", 47, 121}, + #endif + #ifdef TS_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_TS, TS_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 47, 109}, + #endif + #ifdef TS_R_THERE_MUST_BE_ONE_SIGNER + {"THERE_MUST_BE_ONE_SIGNER", ERR_LIB_TS, TS_R_THERE_MUST_BE_ONE_SIGNER}, + #else + {"THERE_MUST_BE_ONE_SIGNER", 47, 110}, + #endif + #ifdef TS_R_TIME_SYSCALL_ERROR + {"TIME_SYSCALL_ERROR", ERR_LIB_TS, TS_R_TIME_SYSCALL_ERROR}, + #else + {"TIME_SYSCALL_ERROR", 47, 122}, + #endif + #ifdef TS_R_TOKEN_NOT_PRESENT + {"TOKEN_NOT_PRESENT", ERR_LIB_TS, TS_R_TOKEN_NOT_PRESENT}, + #else + {"TOKEN_NOT_PRESENT", 47, 130}, + #endif + #ifdef TS_R_TOKEN_PRESENT + {"TOKEN_PRESENT", ERR_LIB_TS, TS_R_TOKEN_PRESENT}, + #else + {"TOKEN_PRESENT", 47, 131}, + #endif + #ifdef TS_R_TSA_NAME_MISMATCH + {"TSA_NAME_MISMATCH", ERR_LIB_TS, TS_R_TSA_NAME_MISMATCH}, + #else + {"TSA_NAME_MISMATCH", 47, 111}, + #endif + #ifdef TS_R_TSA_UNTRUSTED + {"TSA_UNTRUSTED", ERR_LIB_TS, TS_R_TSA_UNTRUSTED}, + #else + {"TSA_UNTRUSTED", 47, 112}, + #endif + #ifdef TS_R_TST_INFO_SETUP_ERROR + {"TST_INFO_SETUP_ERROR", ERR_LIB_TS, TS_R_TST_INFO_SETUP_ERROR}, + #else + {"TST_INFO_SETUP_ERROR", 47, 123}, + #endif + #ifdef TS_R_TS_DATASIGN + {"TS_DATASIGN", ERR_LIB_TS, TS_R_TS_DATASIGN}, + #else + {"TS_DATASIGN", 47, 124}, + #endif + #ifdef TS_R_UNACCEPTABLE_POLICY + {"UNACCEPTABLE_POLICY", ERR_LIB_TS, TS_R_UNACCEPTABLE_POLICY}, + #else + {"UNACCEPTABLE_POLICY", 47, 125}, + #endif + #ifdef TS_R_UNSUPPORTED_MD_ALGORITHM + {"UNSUPPORTED_MD_ALGORITHM", ERR_LIB_TS, TS_R_UNSUPPORTED_MD_ALGORITHM}, + #else + {"UNSUPPORTED_MD_ALGORITHM", 47, 126}, + #endif + #ifdef TS_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_TS, TS_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 47, 113}, + #endif + #ifdef TS_R_VAR_BAD_VALUE + {"VAR_BAD_VALUE", ERR_LIB_TS, TS_R_VAR_BAD_VALUE}, + #else + {"VAR_BAD_VALUE", 47, 135}, + #endif + #ifdef TS_R_VAR_LOOKUP_FAILURE + {"VAR_LOOKUP_FAILURE", ERR_LIB_TS, TS_R_VAR_LOOKUP_FAILURE}, + #else + {"VAR_LOOKUP_FAILURE", 47, 136}, + #endif + #ifdef TS_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_TS, TS_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 47, 114}, + #endif + #ifdef UI_R_COMMON_OK_AND_CANCEL_CHARACTERS + {"COMMON_OK_AND_CANCEL_CHARACTERS", ERR_LIB_UI, UI_R_COMMON_OK_AND_CANCEL_CHARACTERS}, + #else + {"COMMON_OK_AND_CANCEL_CHARACTERS", 40, 104}, + #endif + #ifdef UI_R_INDEX_TOO_LARGE + {"INDEX_TOO_LARGE", ERR_LIB_UI, UI_R_INDEX_TOO_LARGE}, + #else + {"INDEX_TOO_LARGE", 40, 102}, + #endif + #ifdef UI_R_INDEX_TOO_SMALL + {"INDEX_TOO_SMALL", ERR_LIB_UI, UI_R_INDEX_TOO_SMALL}, + #else + {"INDEX_TOO_SMALL", 40, 103}, + #endif + #ifdef UI_R_NO_RESULT_BUFFER + {"NO_RESULT_BUFFER", ERR_LIB_UI, UI_R_NO_RESULT_BUFFER}, + #else + {"NO_RESULT_BUFFER", 40, 105}, + #endif + #ifdef UI_R_PROCESSING_ERROR + {"PROCESSING_ERROR", ERR_LIB_UI, UI_R_PROCESSING_ERROR}, + #else + {"PROCESSING_ERROR", 40, 107}, + #endif + #ifdef UI_R_RESULT_TOO_LARGE + {"RESULT_TOO_LARGE", ERR_LIB_UI, UI_R_RESULT_TOO_LARGE}, + #else + {"RESULT_TOO_LARGE", 40, 100}, + #endif + #ifdef UI_R_RESULT_TOO_SMALL + {"RESULT_TOO_SMALL", ERR_LIB_UI, UI_R_RESULT_TOO_SMALL}, + #else + {"RESULT_TOO_SMALL", 40, 101}, + #endif + #ifdef UI_R_SYSASSIGN_ERROR + {"SYSASSIGN_ERROR", ERR_LIB_UI, UI_R_SYSASSIGN_ERROR}, + #else + {"SYSASSIGN_ERROR", 40, 109}, + #endif + #ifdef UI_R_SYSDASSGN_ERROR + {"SYSDASSGN_ERROR", ERR_LIB_UI, UI_R_SYSDASSGN_ERROR}, + #else + {"SYSDASSGN_ERROR", 40, 110}, + #endif + #ifdef UI_R_SYSQIOW_ERROR + {"SYSQIOW_ERROR", ERR_LIB_UI, UI_R_SYSQIOW_ERROR}, + #else + {"SYSQIOW_ERROR", 40, 111}, + #endif + #ifdef UI_R_UNKNOWN_CONTROL_COMMAND + {"UNKNOWN_CONTROL_COMMAND", ERR_LIB_UI, UI_R_UNKNOWN_CONTROL_COMMAND}, + #else + {"UNKNOWN_CONTROL_COMMAND", 40, 106}, + #endif + #ifdef UI_R_UNKNOWN_TTYGET_ERRNO_VALUE + {"UNKNOWN_TTYGET_ERRNO_VALUE", ERR_LIB_UI, UI_R_UNKNOWN_TTYGET_ERRNO_VALUE}, + #else + {"UNKNOWN_TTYGET_ERRNO_VALUE", 40, 108}, + #endif + #ifdef UI_R_USER_DATA_DUPLICATION_UNSUPPORTED + {"USER_DATA_DUPLICATION_UNSUPPORTED", ERR_LIB_UI, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED}, + #else + {"USER_DATA_DUPLICATION_UNSUPPORTED", 40, 112}, + #endif + #ifdef X509V3_R_BAD_IP_ADDRESS + {"BAD_IP_ADDRESS", ERR_LIB_X509V3, X509V3_R_BAD_IP_ADDRESS}, + #else + {"BAD_IP_ADDRESS", 34, 118}, + #endif + #ifdef X509V3_R_BAD_OBJECT + {"BAD_OBJECT", ERR_LIB_X509V3, X509V3_R_BAD_OBJECT}, + #else + {"BAD_OBJECT", 34, 119}, + #endif + #ifdef X509V3_R_BN_DEC2BN_ERROR + {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, + #else + {"BN_DEC2BN_ERROR", 34, 100}, + #endif + #ifdef X509V3_R_BN_TO_ASN1_INTEGER_ERROR + {"BN_TO_ASN1_INTEGER_ERROR", ERR_LIB_X509V3, X509V3_R_BN_TO_ASN1_INTEGER_ERROR}, + #else + {"BN_TO_ASN1_INTEGER_ERROR", 34, 101}, + #endif + #ifdef X509V3_R_DIRNAME_ERROR + {"DIRNAME_ERROR", ERR_LIB_X509V3, X509V3_R_DIRNAME_ERROR}, + #else + {"DIRNAME_ERROR", 34, 149}, + #endif + #ifdef X509V3_R_DISTPOINT_ALREADY_SET + {"DISTPOINT_ALREADY_SET", ERR_LIB_X509V3, X509V3_R_DISTPOINT_ALREADY_SET}, + #else + {"DISTPOINT_ALREADY_SET", 34, 160}, + #endif + #ifdef X509V3_R_DUPLICATE_ZONE_ID + {"DUPLICATE_ZONE_ID", ERR_LIB_X509V3, X509V3_R_DUPLICATE_ZONE_ID}, + #else + {"DUPLICATE_ZONE_ID", 34, 133}, + #endif + #ifdef X509V3_R_ERROR_CONVERTING_ZONE + {"ERROR_CONVERTING_ZONE", ERR_LIB_X509V3, X509V3_R_ERROR_CONVERTING_ZONE}, + #else + {"ERROR_CONVERTING_ZONE", 34, 131}, + #endif + #ifdef X509V3_R_ERROR_CREATING_EXTENSION + {"ERROR_CREATING_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_CREATING_EXTENSION}, + #else + {"ERROR_CREATING_EXTENSION", 34, 144}, + #endif + #ifdef X509V3_R_ERROR_IN_EXTENSION + {"ERROR_IN_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_IN_EXTENSION}, + #else + {"ERROR_IN_EXTENSION", 34, 128}, + #endif + #ifdef X509V3_R_EXPECTED_A_SECTION_NAME + {"EXPECTED_A_SECTION_NAME", ERR_LIB_X509V3, X509V3_R_EXPECTED_A_SECTION_NAME}, + #else + {"EXPECTED_A_SECTION_NAME", 34, 137}, + #endif + #ifdef X509V3_R_EXTENSION_EXISTS + {"EXTENSION_EXISTS", ERR_LIB_X509V3, X509V3_R_EXTENSION_EXISTS}, + #else + {"EXTENSION_EXISTS", 34, 145}, + #endif + #ifdef X509V3_R_EXTENSION_NAME_ERROR + {"EXTENSION_NAME_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_NAME_ERROR}, + #else + {"EXTENSION_NAME_ERROR", 34, 115}, + #endif + #ifdef X509V3_R_EXTENSION_NOT_FOUND + {"EXTENSION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_EXTENSION_NOT_FOUND}, + #else + {"EXTENSION_NOT_FOUND", 34, 102}, + #endif + #ifdef X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED + {"EXTENSION_SETTING_NOT_SUPPORTED", ERR_LIB_X509V3, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED}, + #else + {"EXTENSION_SETTING_NOT_SUPPORTED", 34, 103}, + #endif + #ifdef X509V3_R_EXTENSION_VALUE_ERROR + {"EXTENSION_VALUE_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_VALUE_ERROR}, + #else + {"EXTENSION_VALUE_ERROR", 34, 116}, + #endif + #ifdef X509V3_R_ILLEGAL_EMPTY_EXTENSION + {"ILLEGAL_EMPTY_EXTENSION", ERR_LIB_X509V3, X509V3_R_ILLEGAL_EMPTY_EXTENSION}, + #else + {"ILLEGAL_EMPTY_EXTENSION", 34, 151}, + #endif + #ifdef X509V3_R_INCORRECT_POLICY_SYNTAX_TAG + {"INCORRECT_POLICY_SYNTAX_TAG", ERR_LIB_X509V3, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG}, + #else + {"INCORRECT_POLICY_SYNTAX_TAG", 34, 152}, + #endif + #ifdef X509V3_R_INVALID_ASNUMBER + {"INVALID_ASNUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_ASNUMBER}, + #else + {"INVALID_ASNUMBER", 34, 162}, + #endif + #ifdef X509V3_R_INVALID_ASRANGE + {"INVALID_ASRANGE", ERR_LIB_X509V3, X509V3_R_INVALID_ASRANGE}, + #else + {"INVALID_ASRANGE", 34, 163}, + #endif + #ifdef X509V3_R_INVALID_BOOLEAN_STRING + {"INVALID_BOOLEAN_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_BOOLEAN_STRING}, + #else + {"INVALID_BOOLEAN_STRING", 34, 104}, + #endif + #ifdef X509V3_R_INVALID_EXTENSION_STRING + {"INVALID_EXTENSION_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_EXTENSION_STRING}, + #else + {"INVALID_EXTENSION_STRING", 34, 105}, + #endif + #ifdef X509V3_R_INVALID_INHERITANCE + {"INVALID_INHERITANCE", ERR_LIB_X509V3, X509V3_R_INVALID_INHERITANCE}, + #else + {"INVALID_INHERITANCE", 34, 165}, + #endif + #ifdef X509V3_R_INVALID_IPADDRESS + {"INVALID_IPADDRESS", ERR_LIB_X509V3, X509V3_R_INVALID_IPADDRESS}, + #else + {"INVALID_IPADDRESS", 34, 166}, + #endif + #ifdef X509V3_R_INVALID_MULTIPLE_RDNS + {"INVALID_MULTIPLE_RDNS", ERR_LIB_X509V3, X509V3_R_INVALID_MULTIPLE_RDNS}, + #else + {"INVALID_MULTIPLE_RDNS", 34, 161}, + #endif + #ifdef X509V3_R_INVALID_NAME + {"INVALID_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NAME}, + #else + {"INVALID_NAME", 34, 106}, + #endif + #ifdef X509V3_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 34, 107}, + #endif + #ifdef X509V3_R_INVALID_NULL_NAME + {"INVALID_NULL_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_NAME}, + #else + {"INVALID_NULL_NAME", 34, 108}, + #endif + #ifdef X509V3_R_INVALID_NULL_VALUE + {"INVALID_NULL_VALUE", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_VALUE}, + #else + {"INVALID_NULL_VALUE", 34, 109}, + #endif + #ifdef X509V3_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 34, 140}, + #endif + #ifdef X509V3_R_INVALID_NUMBERS + {"INVALID_NUMBERS", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBERS}, + #else + {"INVALID_NUMBERS", 34, 141}, + #endif + #ifdef X509V3_R_INVALID_OBJECT_IDENTIFIER + {"INVALID_OBJECT_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER}, + #else + {"INVALID_OBJECT_IDENTIFIER", 34, 110}, + #endif + #ifdef X509V3_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_X509V3, X509V3_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 34, 138}, + #endif + #ifdef X509V3_R_INVALID_POLICY_IDENTIFIER + {"INVALID_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_POLICY_IDENTIFIER}, + #else + {"INVALID_POLICY_IDENTIFIER", 34, 134}, + #endif + #ifdef X509V3_R_INVALID_PROXY_POLICY_SETTING + {"INVALID_PROXY_POLICY_SETTING", ERR_LIB_X509V3, X509V3_R_INVALID_PROXY_POLICY_SETTING}, + #else + {"INVALID_PROXY_POLICY_SETTING", 34, 153}, + #endif + #ifdef X509V3_R_INVALID_PURPOSE + {"INVALID_PURPOSE", ERR_LIB_X509V3, X509V3_R_INVALID_PURPOSE}, + #else + {"INVALID_PURPOSE", 34, 146}, + #endif + #ifdef X509V3_R_INVALID_SAFI + {"INVALID_SAFI", ERR_LIB_X509V3, X509V3_R_INVALID_SAFI}, + #else + {"INVALID_SAFI", 34, 164}, + #endif + #ifdef X509V3_R_INVALID_SECTION + {"INVALID_SECTION", ERR_LIB_X509V3, X509V3_R_INVALID_SECTION}, + #else + {"INVALID_SECTION", 34, 135}, + #endif + #ifdef X509V3_R_INVALID_SYNTAX + {"INVALID_SYNTAX", ERR_LIB_X509V3, X509V3_R_INVALID_SYNTAX}, + #else + {"INVALID_SYNTAX", 34, 143}, + #endif + #ifdef X509V3_R_ISSUER_DECODE_ERROR + {"ISSUER_DECODE_ERROR", ERR_LIB_X509V3, X509V3_R_ISSUER_DECODE_ERROR}, + #else + {"ISSUER_DECODE_ERROR", 34, 126}, + #endif + #ifdef X509V3_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_X509V3, X509V3_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 34, 124}, + #endif + #ifdef X509V3_R_NEED_ORGANIZATION_AND_NUMBERS + {"NEED_ORGANIZATION_AND_NUMBERS", ERR_LIB_X509V3, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS}, + #else + {"NEED_ORGANIZATION_AND_NUMBERS", 34, 142}, + #endif + #ifdef X509V3_R_NO_CONFIG_DATABASE + {"NO_CONFIG_DATABASE", ERR_LIB_X509V3, X509V3_R_NO_CONFIG_DATABASE}, + #else + {"NO_CONFIG_DATABASE", 34, 136}, + #endif + #ifdef X509V3_R_NO_ISSUER_CERTIFICATE + {"NO_ISSUER_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_CERTIFICATE}, + #else + {"NO_ISSUER_CERTIFICATE", 34, 121}, + #endif + #ifdef X509V3_R_NO_ISSUER_DETAILS + {"NO_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_DETAILS}, + #else + {"NO_ISSUER_DETAILS", 34, 127}, + #endif + #ifdef X509V3_R_NO_POLICY_IDENTIFIER + {"NO_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_NO_POLICY_IDENTIFIER}, + #else + {"NO_POLICY_IDENTIFIER", 34, 139}, + #endif + #ifdef X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", ERR_LIB_X509V3, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED}, + #else + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", 34, 154}, + #endif + #ifdef X509V3_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_X509V3, X509V3_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 34, 114}, + #endif + #ifdef X509V3_R_NO_SUBJECT_DETAILS + {"NO_SUBJECT_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_SUBJECT_DETAILS}, + #else + {"NO_SUBJECT_DETAILS", 34, 125}, + #endif + #ifdef X509V3_R_OPERATION_NOT_DEFINED + {"OPERATION_NOT_DEFINED", ERR_LIB_X509V3, X509V3_R_OPERATION_NOT_DEFINED}, + #else + {"OPERATION_NOT_DEFINED", 34, 148}, + #endif + #ifdef X509V3_R_OTHERNAME_ERROR + {"OTHERNAME_ERROR", ERR_LIB_X509V3, X509V3_R_OTHERNAME_ERROR}, + #else + {"OTHERNAME_ERROR", 34, 147}, + #endif + #ifdef X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED + {"POLICY_LANGUAGE_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED}, + #else + {"POLICY_LANGUAGE_ALREADY_DEFINED", 34, 155}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH + {"POLICY_PATH_LENGTH", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH}, + #else + {"POLICY_PATH_LENGTH", 34, 156}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED}, + #else + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", 34, 157}, + #endif + #ifdef X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", ERR_LIB_X509V3, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY}, + #else + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", 34, 159}, + #endif + #ifdef X509V3_R_SECTION_NOT_FOUND + {"SECTION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_SECTION_NOT_FOUND}, + #else + {"SECTION_NOT_FOUND", 34, 150}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS + {"UNABLE_TO_GET_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS}, + #else + {"UNABLE_TO_GET_ISSUER_DETAILS", 34, 122}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_KEYID + {"UNABLE_TO_GET_ISSUER_KEYID", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID}, + #else + {"UNABLE_TO_GET_ISSUER_KEYID", 34, 123}, + #endif + #ifdef X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT + {"UNKNOWN_BIT_STRING_ARGUMENT", ERR_LIB_X509V3, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT}, + #else + {"UNKNOWN_BIT_STRING_ARGUMENT", 34, 111}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION + {"UNKNOWN_EXTENSION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION}, + #else + {"UNKNOWN_EXTENSION", 34, 129}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION_NAME + {"UNKNOWN_EXTENSION_NAME", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION_NAME}, + #else + {"UNKNOWN_EXTENSION_NAME", 34, 130}, + #endif + #ifdef X509V3_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 34, 120}, + #endif + #ifdef X509V3_R_UNSUPPORTED_OPTION + {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, + #else + {"UNSUPPORTED_OPTION", 34, 117}, + #endif + #ifdef X509V3_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 34, 167}, + #endif + #ifdef X509V3_R_USER_TOO_LONG + {"USER_TOO_LONG", ERR_LIB_X509V3, X509V3_R_USER_TOO_LONG}, + #else + {"USER_TOO_LONG", 34, 132}, + #endif + #ifdef X509_R_AKID_MISMATCH + {"AKID_MISMATCH", ERR_LIB_X509, X509_R_AKID_MISMATCH}, + #else + {"AKID_MISMATCH", 11, 110}, + #endif + #ifdef X509_R_BAD_SELECTOR + {"BAD_SELECTOR", ERR_LIB_X509, X509_R_BAD_SELECTOR}, + #else + {"BAD_SELECTOR", 11, 133}, + #endif + #ifdef X509_R_BAD_X509_FILETYPE + {"BAD_X509_FILETYPE", ERR_LIB_X509, X509_R_BAD_X509_FILETYPE}, + #else + {"BAD_X509_FILETYPE", 11, 100}, + #endif + #ifdef X509_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_X509, X509_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 11, 118}, + #endif + #ifdef X509_R_CANT_CHECK_DH_KEY + {"CANT_CHECK_DH_KEY", ERR_LIB_X509, X509_R_CANT_CHECK_DH_KEY}, + #else + {"CANT_CHECK_DH_KEY", 11, 114}, + #endif + #ifdef X509_R_CERT_ALREADY_IN_HASH_TABLE + {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, X509_R_CERT_ALREADY_IN_HASH_TABLE}, + #else + {"CERT_ALREADY_IN_HASH_TABLE", 11, 101}, + #endif + #ifdef X509_R_CRL_ALREADY_DELTA + {"CRL_ALREADY_DELTA", ERR_LIB_X509, X509_R_CRL_ALREADY_DELTA}, + #else + {"CRL_ALREADY_DELTA", 11, 127}, + #endif + #ifdef X509_R_CRL_VERIFY_FAILURE + {"CRL_VERIFY_FAILURE", ERR_LIB_X509, X509_R_CRL_VERIFY_FAILURE}, + #else + {"CRL_VERIFY_FAILURE", 11, 131}, + #endif + #ifdef X509_R_IDP_MISMATCH + {"IDP_MISMATCH", ERR_LIB_X509, X509_R_IDP_MISMATCH}, + #else + {"IDP_MISMATCH", 11, 128}, + #endif + #ifdef X509_R_INVALID_ATTRIBUTES + {"INVALID_ATTRIBUTES", ERR_LIB_X509, X509_R_INVALID_ATTRIBUTES}, + #else + {"INVALID_ATTRIBUTES", 11, 138}, + #endif + #ifdef X509_R_INVALID_DIRECTORY + {"INVALID_DIRECTORY", ERR_LIB_X509, X509_R_INVALID_DIRECTORY}, + #else + {"INVALID_DIRECTORY", 11, 113}, + #endif + #ifdef X509_R_INVALID_FIELD_NAME + {"INVALID_FIELD_NAME", ERR_LIB_X509, X509_R_INVALID_FIELD_NAME}, + #else + {"INVALID_FIELD_NAME", 11, 119}, + #endif + #ifdef X509_R_INVALID_TRUST + {"INVALID_TRUST", ERR_LIB_X509, X509_R_INVALID_TRUST}, + #else + {"INVALID_TRUST", 11, 123}, + #endif + #ifdef X509_R_ISSUER_MISMATCH + {"ISSUER_MISMATCH", ERR_LIB_X509, X509_R_ISSUER_MISMATCH}, + #else + {"ISSUER_MISMATCH", 11, 129}, + #endif + #ifdef X509_R_KEY_TYPE_MISMATCH + {"KEY_TYPE_MISMATCH", ERR_LIB_X509, X509_R_KEY_TYPE_MISMATCH}, + #else + {"KEY_TYPE_MISMATCH", 11, 115}, + #endif + #ifdef X509_R_KEY_VALUES_MISMATCH + {"KEY_VALUES_MISMATCH", ERR_LIB_X509, X509_R_KEY_VALUES_MISMATCH}, + #else + {"KEY_VALUES_MISMATCH", 11, 116}, + #endif + #ifdef X509_R_LOADING_CERT_DIR + {"LOADING_CERT_DIR", ERR_LIB_X509, X509_R_LOADING_CERT_DIR}, + #else + {"LOADING_CERT_DIR", 11, 103}, + #endif + #ifdef X509_R_LOADING_DEFAULTS + {"LOADING_DEFAULTS", ERR_LIB_X509, X509_R_LOADING_DEFAULTS}, + #else + {"LOADING_DEFAULTS", 11, 104}, + #endif + #ifdef X509_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, X509_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 11, 124}, + #endif + #ifdef X509_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_X509, X509_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 11, 134}, + #endif + #ifdef X509_R_NEWER_CRL_NOT_NEWER + {"NEWER_CRL_NOT_NEWER", ERR_LIB_X509, X509_R_NEWER_CRL_NOT_NEWER}, + #else + {"NEWER_CRL_NOT_NEWER", 11, 132}, + #endif + #ifdef X509_R_NO_CERTIFICATE_FOUND + {"NO_CERTIFICATE_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_FOUND}, + #else + {"NO_CERTIFICATE_FOUND", 11, 135}, + #endif + #ifdef X509_R_NO_CERTIFICATE_OR_CRL_FOUND + {"NO_CERTIFICATE_OR_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_OR_CRL_FOUND}, + #else + {"NO_CERTIFICATE_OR_CRL_FOUND", 11, 136}, + #endif + #ifdef X509_R_NO_CERT_SET_FOR_US_TO_VERIFY + {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY}, + #else + {"NO_CERT_SET_FOR_US_TO_VERIFY", 11, 105}, + #endif + #ifdef X509_R_NO_CRL_FOUND + {"NO_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CRL_FOUND}, + #else + {"NO_CRL_FOUND", 11, 137}, + #endif + #ifdef X509_R_NO_CRL_NUMBER + {"NO_CRL_NUMBER", ERR_LIB_X509, X509_R_NO_CRL_NUMBER}, + #else + {"NO_CRL_NUMBER", 11, 130}, + #endif + #ifdef X509_R_PUBLIC_KEY_DECODE_ERROR + {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_DECODE_ERROR}, + #else + {"PUBLIC_KEY_DECODE_ERROR", 11, 125}, + #endif + #ifdef X509_R_PUBLIC_KEY_ENCODE_ERROR + {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_ENCODE_ERROR}, + #else + {"PUBLIC_KEY_ENCODE_ERROR", 11, 126}, + #endif + #ifdef X509_R_SHOULD_RETRY + {"SHOULD_RETRY", ERR_LIB_X509, X509_R_SHOULD_RETRY}, + #else + {"SHOULD_RETRY", 11, 106}, + #endif + #ifdef X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN}, + #else + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", 11, 107}, + #endif + #ifdef X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY}, + #else + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", 11, 108}, + #endif + #ifdef X509_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, X509_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 11, 117}, + #endif + #ifdef X509_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_X509, X509_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 11, 109}, + #endif + #ifdef X509_R_UNKNOWN_PURPOSE_ID + {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID}, + #else + {"UNKNOWN_PURPOSE_ID", 11, 121}, + #endif + #ifdef X509_R_UNKNOWN_TRUST_ID + {"UNKNOWN_TRUST_ID", ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID}, + #else + {"UNKNOWN_TRUST_ID", 11, 120}, + #endif + #ifdef X509_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, X509_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 11, 111}, + #endif + #ifdef X509_R_WRONG_LOOKUP_TYPE + {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, + #else + {"WRONG_LOOKUP_TYPE", 11, 112}, + #endif + #ifdef X509_R_WRONG_TYPE + {"WRONG_TYPE", ERR_LIB_X509, X509_R_WRONG_TYPE}, + #else + {"WRONG_TYPE", 11, 122}, + #endif + { NULL } +}; + diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h new file mode 100644 index 0000000000000..6be8b24ee1a02 --- /dev/null +++ b/Modules/_ssl_data_300.h @@ -0,0 +1,8435 @@ +/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2021-04-09T09:44:43.288448 */ +static struct py_ssl_library_code library_codes[] = { +#ifdef ERR_LIB_ASN1 + {"ASN1", ERR_LIB_ASN1}, +#endif +#ifdef ERR_LIB_ASYNC + {"ASYNC", ERR_LIB_ASYNC}, +#endif +#ifdef ERR_LIB_BIO + {"BIO", ERR_LIB_BIO}, +#endif +#ifdef ERR_LIB_BN + {"BN", ERR_LIB_BN}, +#endif +#ifdef ERR_LIB_BUF + {"BUF", ERR_LIB_BUF}, +#endif +#ifdef ERR_LIB_CMP + {"CMP", ERR_LIB_CMP}, +#endif +#ifdef ERR_LIB_CMS + {"CMS", ERR_LIB_CMS}, +#endif +#ifdef ERR_LIB_COMP + {"COMP", ERR_LIB_COMP}, +#endif +#ifdef ERR_LIB_CONF + {"CONF", ERR_LIB_CONF}, +#endif +#ifdef ERR_LIB_CRMF + {"CRMF", ERR_LIB_CRMF}, +#endif +#ifdef ERR_LIB_CRYPTO + {"CRYPTO", ERR_LIB_CRYPTO}, +#endif +#ifdef ERR_LIB_CT + {"CT", ERR_LIB_CT}, +#endif +#ifdef ERR_LIB_DH + {"DH", ERR_LIB_DH}, +#endif +#ifdef ERR_LIB_DSA + {"DSA", ERR_LIB_DSA}, +#endif +#ifdef ERR_LIB_DSO + {"DSO", ERR_LIB_DSO}, +#endif +#ifdef ERR_LIB_EC + {"EC", ERR_LIB_EC}, +#endif +#ifdef ERR_LIB_ECDH + {"ECDH", ERR_LIB_ECDH}, +#endif +#ifdef ERR_LIB_ECDSA + {"ECDSA", ERR_LIB_ECDSA}, +#endif +#ifdef ERR_LIB_ENGINE + {"ENGINE", ERR_LIB_ENGINE}, +#endif +#ifdef ERR_LIB_ESS + {"ESS", ERR_LIB_ESS}, +#endif +#ifdef ERR_LIB_EVP + {"EVP", ERR_LIB_EVP}, +#endif +#ifdef ERR_LIB_FIPS + {"FIPS", ERR_LIB_FIPS}, +#endif +#ifdef ERR_LIB_HMAC + {"HMAC", ERR_LIB_HMAC}, +#endif +#ifdef ERR_LIB_HTTP + {"HTTP", ERR_LIB_HTTP}, +#endif +#ifdef ERR_LIB_JPAKE + {"JPAKE", ERR_LIB_JPAKE}, +#endif +#ifdef ERR_LIB_KDF + {"KDF", ERR_LIB_KDF}, +#endif +#ifdef ERR_LIB_MASK + {"MASK", ERR_LIB_MASK}, +#endif +#ifdef ERR_LIB_METH + {"METH", ERR_LIB_METH}, +#endif +#ifdef ERR_LIB_NONE + {"NONE", ERR_LIB_NONE}, +#endif +#ifdef ERR_LIB_OBJ + {"OBJ", ERR_LIB_OBJ}, +#endif +#ifdef ERR_LIB_OCSP + {"OCSP", ERR_LIB_OCSP}, +#endif +#ifdef ERR_LIB_OFFSET + {"OFFSET", ERR_LIB_OFFSET}, +#endif +#ifdef ERR_LIB_OSSL_DECODER + {"OSSL_DECODER", ERR_LIB_OSSL_DECODER}, +#endif +#ifdef ERR_LIB_OSSL_ENCODER + {"OSSL_ENCODER", ERR_LIB_OSSL_ENCODER}, +#endif +#ifdef ERR_LIB_OSSL_STORE + {"OSSL_STORE", ERR_LIB_OSSL_STORE}, +#endif +#ifdef ERR_LIB_PEM + {"PEM", ERR_LIB_PEM}, +#endif +#ifdef ERR_LIB_PKCS12 + {"PKCS12", ERR_LIB_PKCS12}, +#endif +#ifdef ERR_LIB_PKCS7 + {"PKCS7", ERR_LIB_PKCS7}, +#endif +#ifdef ERR_LIB_PROP + {"PROP", ERR_LIB_PROP}, +#endif +#ifdef ERR_LIB_PROV + {"PROV", ERR_LIB_PROV}, +#endif +#ifdef ERR_LIB_PROXY + {"PROXY", ERR_LIB_PROXY}, +#endif +#ifdef ERR_LIB_RAND + {"RAND", ERR_LIB_RAND}, +#endif +#ifdef ERR_LIB_RSA + {"RSA", ERR_LIB_RSA}, +#endif +#ifdef ERR_LIB_RSAREF + {"RSAREF", ERR_LIB_RSAREF}, +#endif +#ifdef ERR_LIB_SM2 + {"SM2", ERR_LIB_SM2}, +#endif +#ifdef ERR_LIB_SSL + {"SSL", ERR_LIB_SSL}, +#endif +#ifdef ERR_LIB_SSL2 + {"SSL2", ERR_LIB_SSL2}, +#endif +#ifdef ERR_LIB_SSL23 + {"SSL23", ERR_LIB_SSL23}, +#endif +#ifdef ERR_LIB_SSL3 + {"SSL3", ERR_LIB_SSL3}, +#endif +#ifdef ERR_LIB_SYS + {"SYS", ERR_LIB_SYS}, +#endif +#ifdef ERR_LIB_TS + {"TS", ERR_LIB_TS}, +#endif +#ifdef ERR_LIB_UI + {"UI", ERR_LIB_UI}, +#endif +#ifdef ERR_LIB_USER + {"USER", ERR_LIB_USER}, +#endif +#ifdef ERR_LIB_X509 + {"X509", ERR_LIB_X509}, +#endif +#ifdef ERR_LIB_X509V3 + {"X509V3", ERR_LIB_X509V3}, +#endif + { NULL } +}; + + +static struct py_ssl_error_code error_codes[] = { + #ifdef ASN1_R_ADDING_OBJECT + {"ADDING_OBJECT", ERR_LIB_ASN1, ASN1_R_ADDING_OBJECT}, + #else + {"ADDING_OBJECT", 13, 171}, + #endif + #ifdef ASN1_R_ASN1_PARSE_ERROR + {"ASN1_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_PARSE_ERROR}, + #else + {"ASN1_PARSE_ERROR", 13, 203}, + #endif + #ifdef ASN1_R_ASN1_SIG_PARSE_ERROR + {"ASN1_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_ASN1_SIG_PARSE_ERROR}, + #else + {"ASN1_SIG_PARSE_ERROR", 13, 204}, + #endif + #ifdef ASN1_R_AUX_ERROR + {"AUX_ERROR", ERR_LIB_ASN1, ASN1_R_AUX_ERROR}, + #else + {"AUX_ERROR", 13, 100}, + #endif + #ifdef ASN1_R_BAD_OBJECT_HEADER + {"BAD_OBJECT_HEADER", ERR_LIB_ASN1, ASN1_R_BAD_OBJECT_HEADER}, + #else + {"BAD_OBJECT_HEADER", 13, 102}, + #endif + #ifdef ASN1_R_BAD_TEMPLATE + {"BAD_TEMPLATE", ERR_LIB_ASN1, ASN1_R_BAD_TEMPLATE}, + #else + {"BAD_TEMPLATE", 13, 230}, + #endif + #ifdef ASN1_R_BMPSTRING_IS_WRONG_LENGTH + {"BMPSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BMPSTRING_IS_WRONG_LENGTH}, + #else + {"BMPSTRING_IS_WRONG_LENGTH", 13, 214}, + #endif + #ifdef ASN1_R_BN_LIB + {"BN_LIB", ERR_LIB_ASN1, ASN1_R_BN_LIB}, + #else + {"BN_LIB", 13, 105}, + #endif + #ifdef ASN1_R_BOOLEAN_IS_WRONG_LENGTH + {"BOOLEAN_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH}, + #else + {"BOOLEAN_IS_WRONG_LENGTH", 13, 106}, + #endif + #ifdef ASN1_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_ASN1, ASN1_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 13, 107}, + #endif + #ifdef ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_ASN1, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 13, 108}, + #endif + #ifdef ASN1_R_CONTEXT_NOT_INITIALISED + {"CONTEXT_NOT_INITIALISED", ERR_LIB_ASN1, ASN1_R_CONTEXT_NOT_INITIALISED}, + #else + {"CONTEXT_NOT_INITIALISED", 13, 217}, + #endif + #ifdef ASN1_R_DATA_IS_WRONG + {"DATA_IS_WRONG", ERR_LIB_ASN1, ASN1_R_DATA_IS_WRONG}, + #else + {"DATA_IS_WRONG", 13, 109}, + #endif + #ifdef ASN1_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_ASN1, ASN1_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 13, 110}, + #endif + #ifdef ASN1_R_DEPTH_EXCEEDED + {"DEPTH_EXCEEDED", ERR_LIB_ASN1, ASN1_R_DEPTH_EXCEEDED}, + #else + {"DEPTH_EXCEEDED", 13, 174}, + #endif + #ifdef ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED}, + #else + {"DIGEST_AND_KEY_TYPE_NOT_SUPPORTED", 13, 198}, + #endif + #ifdef ASN1_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_ASN1, ASN1_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 13, 112}, + #endif + #ifdef ASN1_R_ERROR_GETTING_TIME + {"ERROR_GETTING_TIME", ERR_LIB_ASN1, ASN1_R_ERROR_GETTING_TIME}, + #else + {"ERROR_GETTING_TIME", 13, 173}, + #endif + #ifdef ASN1_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_ASN1, ASN1_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 13, 172}, + #endif + #ifdef ASN1_R_ERROR_SETTING_CIPHER_PARAMS + {"ERROR_SETTING_CIPHER_PARAMS", ERR_LIB_ASN1, ASN1_R_ERROR_SETTING_CIPHER_PARAMS}, + #else + {"ERROR_SETTING_CIPHER_PARAMS", 13, 114}, + #endif + #ifdef ASN1_R_EXPECTING_AN_INTEGER + {"EXPECTING_AN_INTEGER", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_INTEGER}, + #else + {"EXPECTING_AN_INTEGER", 13, 115}, + #endif + #ifdef ASN1_R_EXPECTING_AN_OBJECT + {"EXPECTING_AN_OBJECT", ERR_LIB_ASN1, ASN1_R_EXPECTING_AN_OBJECT}, + #else + {"EXPECTING_AN_OBJECT", 13, 116}, + #endif + #ifdef ASN1_R_EXPLICIT_LENGTH_MISMATCH + {"EXPLICIT_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH}, + #else + {"EXPLICIT_LENGTH_MISMATCH", 13, 119}, + #endif + #ifdef ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED + {"EXPLICIT_TAG_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED}, + #else + {"EXPLICIT_TAG_NOT_CONSTRUCTED", 13, 120}, + #endif + #ifdef ASN1_R_FIELD_MISSING + {"FIELD_MISSING", ERR_LIB_ASN1, ASN1_R_FIELD_MISSING}, + #else + {"FIELD_MISSING", 13, 121}, + #endif + #ifdef ASN1_R_FIRST_NUM_TOO_LARGE + {"FIRST_NUM_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_FIRST_NUM_TOO_LARGE}, + #else + {"FIRST_NUM_TOO_LARGE", 13, 122}, + #endif + #ifdef ASN1_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 13, 123}, + #endif + #ifdef ASN1_R_ILLEGAL_BITSTRING_FORMAT + {"ILLEGAL_BITSTRING_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT}, + #else + {"ILLEGAL_BITSTRING_FORMAT", 13, 175}, + #endif + #ifdef ASN1_R_ILLEGAL_BOOLEAN + {"ILLEGAL_BOOLEAN", ERR_LIB_ASN1, ASN1_R_ILLEGAL_BOOLEAN}, + #else + {"ILLEGAL_BOOLEAN", 13, 176}, + #endif + #ifdef ASN1_R_ILLEGAL_CHARACTERS + {"ILLEGAL_CHARACTERS", ERR_LIB_ASN1, ASN1_R_ILLEGAL_CHARACTERS}, + #else + {"ILLEGAL_CHARACTERS", 13, 124}, + #endif + #ifdef ASN1_R_ILLEGAL_FORMAT + {"ILLEGAL_FORMAT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_FORMAT}, + #else + {"ILLEGAL_FORMAT", 13, 177}, + #endif + #ifdef ASN1_R_ILLEGAL_HEX + {"ILLEGAL_HEX", ERR_LIB_ASN1, ASN1_R_ILLEGAL_HEX}, + #else + {"ILLEGAL_HEX", 13, 178}, + #endif + #ifdef ASN1_R_ILLEGAL_IMPLICIT_TAG + {"ILLEGAL_IMPLICIT_TAG", ERR_LIB_ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG}, + #else + {"ILLEGAL_IMPLICIT_TAG", 13, 179}, + #endif + #ifdef ASN1_R_ILLEGAL_INTEGER + {"ILLEGAL_INTEGER", ERR_LIB_ASN1, ASN1_R_ILLEGAL_INTEGER}, + #else + {"ILLEGAL_INTEGER", 13, 180}, + #endif + #ifdef ASN1_R_ILLEGAL_NEGATIVE_VALUE + {"ILLEGAL_NEGATIVE_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NEGATIVE_VALUE}, + #else + {"ILLEGAL_NEGATIVE_VALUE", 13, 226}, + #endif + #ifdef ASN1_R_ILLEGAL_NESTED_TAGGING + {"ILLEGAL_NESTED_TAGGING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING}, + #else + {"ILLEGAL_NESTED_TAGGING", 13, 181}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL + {"ILLEGAL_NULL", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL}, + #else + {"ILLEGAL_NULL", 13, 125}, + #endif + #ifdef ASN1_R_ILLEGAL_NULL_VALUE + {"ILLEGAL_NULL_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_NULL_VALUE}, + #else + {"ILLEGAL_NULL_VALUE", 13, 182}, + #endif + #ifdef ASN1_R_ILLEGAL_OBJECT + {"ILLEGAL_OBJECT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OBJECT}, + #else + {"ILLEGAL_OBJECT", 13, 183}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONAL_ANY + {"ILLEGAL_OPTIONAL_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY}, + #else + {"ILLEGAL_OPTIONAL_ANY", 13, 126}, + #endif + #ifdef ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE}, + #else + {"ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE", 13, 170}, + #endif + #ifdef ASN1_R_ILLEGAL_PADDING + {"ILLEGAL_PADDING", ERR_LIB_ASN1, ASN1_R_ILLEGAL_PADDING}, + #else + {"ILLEGAL_PADDING", 13, 221}, + #endif + #ifdef ASN1_R_ILLEGAL_TAGGED_ANY + {"ILLEGAL_TAGGED_ANY", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TAGGED_ANY}, + #else + {"ILLEGAL_TAGGED_ANY", 13, 127}, + #endif + #ifdef ASN1_R_ILLEGAL_TIME_VALUE + {"ILLEGAL_TIME_VALUE", ERR_LIB_ASN1, ASN1_R_ILLEGAL_TIME_VALUE}, + #else + {"ILLEGAL_TIME_VALUE", 13, 184}, + #endif + #ifdef ASN1_R_ILLEGAL_ZERO_CONTENT + {"ILLEGAL_ZERO_CONTENT", ERR_LIB_ASN1, ASN1_R_ILLEGAL_ZERO_CONTENT}, + #else + {"ILLEGAL_ZERO_CONTENT", 13, 222}, + #endif + #ifdef ASN1_R_INTEGER_NOT_ASCII_FORMAT + {"INTEGER_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT}, + #else + {"INTEGER_NOT_ASCII_FORMAT", 13, 185}, + #endif + #ifdef ASN1_R_INTEGER_TOO_LARGE_FOR_LONG + {"INTEGER_TOO_LARGE_FOR_LONG", ERR_LIB_ASN1, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG}, + #else + {"INTEGER_TOO_LARGE_FOR_LONG", 13, 128}, + #endif + #ifdef ASN1_R_INVALID_BIT_STRING_BITS_LEFT + {"INVALID_BIT_STRING_BITS_LEFT", ERR_LIB_ASN1, ASN1_R_INVALID_BIT_STRING_BITS_LEFT}, + #else + {"INVALID_BIT_STRING_BITS_LEFT", 13, 220}, + #endif + #ifdef ASN1_R_INVALID_BMPSTRING_LENGTH + {"INVALID_BMPSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH}, + #else + {"INVALID_BMPSTRING_LENGTH", 13, 129}, + #endif + #ifdef ASN1_R_INVALID_DIGIT + {"INVALID_DIGIT", ERR_LIB_ASN1, ASN1_R_INVALID_DIGIT}, + #else + {"INVALID_DIGIT", 13, 130}, + #endif + #ifdef ASN1_R_INVALID_MIME_TYPE + {"INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_INVALID_MIME_TYPE}, + #else + {"INVALID_MIME_TYPE", 13, 205}, + #endif + #ifdef ASN1_R_INVALID_MODIFIER + {"INVALID_MODIFIER", ERR_LIB_ASN1, ASN1_R_INVALID_MODIFIER}, + #else + {"INVALID_MODIFIER", 13, 186}, + #endif + #ifdef ASN1_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_ASN1, ASN1_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 13, 187}, + #endif + #ifdef ASN1_R_INVALID_OBJECT_ENCODING + {"INVALID_OBJECT_ENCODING", ERR_LIB_ASN1, ASN1_R_INVALID_OBJECT_ENCODING}, + #else + {"INVALID_OBJECT_ENCODING", 13, 216}, + #endif + #ifdef ASN1_R_INVALID_SCRYPT_PARAMETERS + {"INVALID_SCRYPT_PARAMETERS", ERR_LIB_ASN1, ASN1_R_INVALID_SCRYPT_PARAMETERS}, + #else + {"INVALID_SCRYPT_PARAMETERS", 13, 227}, + #endif + #ifdef ASN1_R_INVALID_SEPARATOR + {"INVALID_SEPARATOR", ERR_LIB_ASN1, ASN1_R_INVALID_SEPARATOR}, + #else + {"INVALID_SEPARATOR", 13, 131}, + #endif + #ifdef ASN1_R_INVALID_STRING_TABLE_VALUE + {"INVALID_STRING_TABLE_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE}, + #else + {"INVALID_STRING_TABLE_VALUE", 13, 218}, + #endif + #ifdef ASN1_R_INVALID_UNIVERSALSTRING_LENGTH + {"INVALID_UNIVERSALSTRING_LENGTH", ERR_LIB_ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH}, + #else + {"INVALID_UNIVERSALSTRING_LENGTH", 13, 133}, + #endif + #ifdef ASN1_R_INVALID_UTF8STRING + {"INVALID_UTF8STRING", ERR_LIB_ASN1, ASN1_R_INVALID_UTF8STRING}, + #else + {"INVALID_UTF8STRING", 13, 134}, + #endif + #ifdef ASN1_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_ASN1, ASN1_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 13, 219}, + #endif + #ifdef ASN1_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_ASN1, ASN1_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 13, 231}, + #endif + #ifdef ASN1_R_LIST_ERROR + {"LIST_ERROR", ERR_LIB_ASN1, ASN1_R_LIST_ERROR}, + #else + {"LIST_ERROR", 13, 188}, + #endif + #ifdef ASN1_R_MIME_NO_CONTENT_TYPE + {"MIME_NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_MIME_NO_CONTENT_TYPE}, + #else + {"MIME_NO_CONTENT_TYPE", 13, 206}, + #endif + #ifdef ASN1_R_MIME_PARSE_ERROR + {"MIME_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_PARSE_ERROR}, + #else + {"MIME_PARSE_ERROR", 13, 207}, + #endif + #ifdef ASN1_R_MIME_SIG_PARSE_ERROR + {"MIME_SIG_PARSE_ERROR", ERR_LIB_ASN1, ASN1_R_MIME_SIG_PARSE_ERROR}, + #else + {"MIME_SIG_PARSE_ERROR", 13, 208}, + #endif + #ifdef ASN1_R_MISSING_EOC + {"MISSING_EOC", ERR_LIB_ASN1, ASN1_R_MISSING_EOC}, + #else + {"MISSING_EOC", 13, 137}, + #endif + #ifdef ASN1_R_MISSING_SECOND_NUMBER + {"MISSING_SECOND_NUMBER", ERR_LIB_ASN1, ASN1_R_MISSING_SECOND_NUMBER}, + #else + {"MISSING_SECOND_NUMBER", 13, 138}, + #endif + #ifdef ASN1_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_ASN1, ASN1_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 13, 189}, + #endif + #ifdef ASN1_R_MSTRING_NOT_UNIVERSAL + {"MSTRING_NOT_UNIVERSAL", ERR_LIB_ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL}, + #else + {"MSTRING_NOT_UNIVERSAL", 13, 139}, + #endif + #ifdef ASN1_R_MSTRING_WRONG_TAG + {"MSTRING_WRONG_TAG", ERR_LIB_ASN1, ASN1_R_MSTRING_WRONG_TAG}, + #else + {"MSTRING_WRONG_TAG", 13, 140}, + #endif + #ifdef ASN1_R_NESTED_ASN1_STRING + {"NESTED_ASN1_STRING", ERR_LIB_ASN1, ASN1_R_NESTED_ASN1_STRING}, + #else + {"NESTED_ASN1_STRING", 13, 197}, + #endif + #ifdef ASN1_R_NESTED_TOO_DEEP + {"NESTED_TOO_DEEP", ERR_LIB_ASN1, ASN1_R_NESTED_TOO_DEEP}, + #else + {"NESTED_TOO_DEEP", 13, 201}, + #endif + #ifdef ASN1_R_NON_HEX_CHARACTERS + {"NON_HEX_CHARACTERS", ERR_LIB_ASN1, ASN1_R_NON_HEX_CHARACTERS}, + #else + {"NON_HEX_CHARACTERS", 13, 141}, + #endif + #ifdef ASN1_R_NOT_ASCII_FORMAT + {"NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_NOT_ASCII_FORMAT}, + #else + {"NOT_ASCII_FORMAT", 13, 190}, + #endif + #ifdef ASN1_R_NOT_ENOUGH_DATA + {"NOT_ENOUGH_DATA", ERR_LIB_ASN1, ASN1_R_NOT_ENOUGH_DATA}, + #else + {"NOT_ENOUGH_DATA", 13, 142}, + #endif + #ifdef ASN1_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 13, 209}, + #endif + #ifdef ASN1_R_NO_MATCHING_CHOICE_TYPE + {"NO_MATCHING_CHOICE_TYPE", ERR_LIB_ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE}, + #else + {"NO_MATCHING_CHOICE_TYPE", 13, 143}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BODY_FAILURE + {"NO_MULTIPART_BODY_FAILURE", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BODY_FAILURE}, + #else + {"NO_MULTIPART_BODY_FAILURE", 13, 210}, + #endif + #ifdef ASN1_R_NO_MULTIPART_BOUNDARY + {"NO_MULTIPART_BOUNDARY", ERR_LIB_ASN1, ASN1_R_NO_MULTIPART_BOUNDARY}, + #else + {"NO_MULTIPART_BOUNDARY", 13, 211}, + #endif + #ifdef ASN1_R_NO_SIG_CONTENT_TYPE + {"NO_SIG_CONTENT_TYPE", ERR_LIB_ASN1, ASN1_R_NO_SIG_CONTENT_TYPE}, + #else + {"NO_SIG_CONTENT_TYPE", 13, 212}, + #endif + #ifdef ASN1_R_NULL_IS_WRONG_LENGTH + {"NULL_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_NULL_IS_WRONG_LENGTH}, + #else + {"NULL_IS_WRONG_LENGTH", 13, 144}, + #endif + #ifdef ASN1_R_OBJECT_NOT_ASCII_FORMAT + {"OBJECT_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT}, + #else + {"OBJECT_NOT_ASCII_FORMAT", 13, 191}, + #endif + #ifdef ASN1_R_ODD_NUMBER_OF_CHARS + {"ODD_NUMBER_OF_CHARS", ERR_LIB_ASN1, ASN1_R_ODD_NUMBER_OF_CHARS}, + #else + {"ODD_NUMBER_OF_CHARS", 13, 145}, + #endif + #ifdef ASN1_R_SECOND_NUMBER_TOO_LARGE + {"SECOND_NUMBER_TOO_LARGE", ERR_LIB_ASN1, ASN1_R_SECOND_NUMBER_TOO_LARGE}, + #else + {"SECOND_NUMBER_TOO_LARGE", 13, 147}, + #endif + #ifdef ASN1_R_SEQUENCE_LENGTH_MISMATCH + {"SEQUENCE_LENGTH_MISMATCH", ERR_LIB_ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH}, + #else + {"SEQUENCE_LENGTH_MISMATCH", 13, 148}, + #endif + #ifdef ASN1_R_SEQUENCE_NOT_CONSTRUCTED + {"SEQUENCE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED}, + #else + {"SEQUENCE_NOT_CONSTRUCTED", 13, 149}, + #endif + #ifdef ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG + {"SEQUENCE_OR_SET_NEEDS_CONFIG", ERR_LIB_ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG}, + #else + {"SEQUENCE_OR_SET_NEEDS_CONFIG", 13, 192}, + #endif + #ifdef ASN1_R_SHORT_LINE + {"SHORT_LINE", ERR_LIB_ASN1, ASN1_R_SHORT_LINE}, + #else + {"SHORT_LINE", 13, 150}, + #endif + #ifdef ASN1_R_SIG_INVALID_MIME_TYPE + {"SIG_INVALID_MIME_TYPE", ERR_LIB_ASN1, ASN1_R_SIG_INVALID_MIME_TYPE}, + #else + {"SIG_INVALID_MIME_TYPE", 13, 213}, + #endif + #ifdef ASN1_R_STREAMING_NOT_SUPPORTED + {"STREAMING_NOT_SUPPORTED", ERR_LIB_ASN1, ASN1_R_STREAMING_NOT_SUPPORTED}, + #else + {"STREAMING_NOT_SUPPORTED", 13, 202}, + #endif + #ifdef ASN1_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_ASN1, ASN1_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 13, 151}, + #endif + #ifdef ASN1_R_STRING_TOO_SHORT + {"STRING_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_STRING_TOO_SHORT}, + #else + {"STRING_TOO_SHORT", 13, 152}, + #endif + #ifdef ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_ASN1, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 13, 154}, + #endif + #ifdef ASN1_R_TIME_NOT_ASCII_FORMAT + {"TIME_NOT_ASCII_FORMAT", ERR_LIB_ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT}, + #else + {"TIME_NOT_ASCII_FORMAT", 13, 193}, + #endif + #ifdef ASN1_R_TOO_LARGE + {"TOO_LARGE", ERR_LIB_ASN1, ASN1_R_TOO_LARGE}, + #else + {"TOO_LARGE", 13, 223}, + #endif + #ifdef ASN1_R_TOO_LONG + {"TOO_LONG", ERR_LIB_ASN1, ASN1_R_TOO_LONG}, + #else + {"TOO_LONG", 13, 155}, + #endif + #ifdef ASN1_R_TOO_SMALL + {"TOO_SMALL", ERR_LIB_ASN1, ASN1_R_TOO_SMALL}, + #else + {"TOO_SMALL", 13, 224}, + #endif + #ifdef ASN1_R_TYPE_NOT_CONSTRUCTED + {"TYPE_NOT_CONSTRUCTED", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED}, + #else + {"TYPE_NOT_CONSTRUCTED", 13, 156}, + #endif + #ifdef ASN1_R_TYPE_NOT_PRIMITIVE + {"TYPE_NOT_PRIMITIVE", ERR_LIB_ASN1, ASN1_R_TYPE_NOT_PRIMITIVE}, + #else + {"TYPE_NOT_PRIMITIVE", 13, 195}, + #endif + #ifdef ASN1_R_UNEXPECTED_EOC + {"UNEXPECTED_EOC", ERR_LIB_ASN1, ASN1_R_UNEXPECTED_EOC}, + #else + {"UNEXPECTED_EOC", 13, 159}, + #endif + #ifdef ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH + {"UNIVERSALSTRING_IS_WRONG_LENGTH", ERR_LIB_ASN1, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH}, + #else + {"UNIVERSALSTRING_IS_WRONG_LENGTH", 13, 215}, + #endif + #ifdef ASN1_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_ASN1, ASN1_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 13, 229}, + #endif + #ifdef ASN1_R_UNKNOWN_FORMAT + {"UNKNOWN_FORMAT", ERR_LIB_ASN1, ASN1_R_UNKNOWN_FORMAT}, + #else + {"UNKNOWN_FORMAT", 13, 160}, + #endif + #ifdef ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_MESSAGE_DIGEST_ALGORITHM", 13, 161}, + #endif + #ifdef ASN1_R_UNKNOWN_OBJECT_TYPE + {"UNKNOWN_OBJECT_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_OBJECT_TYPE}, + #else + {"UNKNOWN_OBJECT_TYPE", 13, 162}, + #endif + #ifdef ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE + {"UNKNOWN_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE}, + #else + {"UNKNOWN_PUBLIC_KEY_TYPE", 13, 163}, + #endif + #ifdef ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM + {"UNKNOWN_SIGNATURE_ALGORITHM", ERR_LIB_ASN1, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM}, + #else + {"UNKNOWN_SIGNATURE_ALGORITHM", 13, 199}, + #endif + #ifdef ASN1_R_UNKNOWN_TAG + {"UNKNOWN_TAG", ERR_LIB_ASN1, ASN1_R_UNKNOWN_TAG}, + #else + {"UNKNOWN_TAG", 13, 194}, + #endif + #ifdef ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE}, + #else + {"UNSUPPORTED_ANY_DEFINED_BY_TYPE", 13, 164}, + #endif + #ifdef ASN1_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 13, 228}, + #endif + #ifdef ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 13, 167}, + #endif + #ifdef ASN1_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_ASN1, ASN1_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 13, 196}, + #endif + #ifdef ASN1_R_WRONG_INTEGER_TYPE + {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE}, + #else + {"WRONG_INTEGER_TYPE", 13, 225}, + #endif + #ifdef ASN1_R_WRONG_PUBLIC_KEY_TYPE + {"WRONG_PUBLIC_KEY_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_PUBLIC_KEY_TYPE}, + #else + {"WRONG_PUBLIC_KEY_TYPE", 13, 200}, + #endif + #ifdef ASN1_R_WRONG_TAG + {"WRONG_TAG", ERR_LIB_ASN1, ASN1_R_WRONG_TAG}, + #else + {"WRONG_TAG", 13, 168}, + #endif + #ifdef ASYNC_R_FAILED_TO_SET_POOL + {"FAILED_TO_SET_POOL", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SET_POOL}, + #else + {"FAILED_TO_SET_POOL", 51, 101}, + #endif + #ifdef ASYNC_R_FAILED_TO_SWAP_CONTEXT + {"FAILED_TO_SWAP_CONTEXT", ERR_LIB_ASYNC, ASYNC_R_FAILED_TO_SWAP_CONTEXT}, + #else + {"FAILED_TO_SWAP_CONTEXT", 51, 102}, + #endif + #ifdef ASYNC_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ASYNC, ASYNC_R_INIT_FAILED}, + #else + {"INIT_FAILED", 51, 105}, + #endif + #ifdef ASYNC_R_INVALID_POOL_SIZE + {"INVALID_POOL_SIZE", ERR_LIB_ASYNC, ASYNC_R_INVALID_POOL_SIZE}, + #else + {"INVALID_POOL_SIZE", 51, 103}, + #endif + #ifdef BIO_R_ACCEPT_ERROR + {"ACCEPT_ERROR", ERR_LIB_BIO, BIO_R_ACCEPT_ERROR}, + #else + {"ACCEPT_ERROR", 32, 100}, + #endif + #ifdef BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET + {"ADDRINFO_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET}, + #else + {"ADDRINFO_ADDR_IS_NOT_AF_INET", 32, 141}, + #endif + #ifdef BIO_R_AMBIGUOUS_HOST_OR_SERVICE + {"AMBIGUOUS_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_AMBIGUOUS_HOST_OR_SERVICE}, + #else + {"AMBIGUOUS_HOST_OR_SERVICE", 32, 129}, + #endif + #ifdef BIO_R_BAD_FOPEN_MODE + {"BAD_FOPEN_MODE", ERR_LIB_BIO, BIO_R_BAD_FOPEN_MODE}, + #else + {"BAD_FOPEN_MODE", 32, 101}, + #endif + #ifdef BIO_R_BROKEN_PIPE + {"BROKEN_PIPE", ERR_LIB_BIO, BIO_R_BROKEN_PIPE}, + #else + {"BROKEN_PIPE", 32, 124}, + #endif + #ifdef BIO_R_CONNECT_ERROR + {"CONNECT_ERROR", ERR_LIB_BIO, BIO_R_CONNECT_ERROR}, + #else + {"CONNECT_ERROR", 32, 103}, + #endif + #ifdef BIO_R_CONNECT_TIMEOUT + {"CONNECT_TIMEOUT", ERR_LIB_BIO, BIO_R_CONNECT_TIMEOUT}, + #else + {"CONNECT_TIMEOUT", 32, 147}, + #endif + #ifdef BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", ERR_LIB_BIO, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET}, + #else + {"GETHOSTBYNAME_ADDR_IS_NOT_AF_INET", 32, 107}, + #endif + #ifdef BIO_R_GETSOCKNAME_ERROR + {"GETSOCKNAME_ERROR", ERR_LIB_BIO, BIO_R_GETSOCKNAME_ERROR}, + #else + {"GETSOCKNAME_ERROR", 32, 132}, + #endif + #ifdef BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS + {"GETSOCKNAME_TRUNCATED_ADDRESS", ERR_LIB_BIO, BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS}, + #else + {"GETSOCKNAME_TRUNCATED_ADDRESS", 32, 133}, + #endif + #ifdef BIO_R_GETTING_SOCKTYPE + {"GETTING_SOCKTYPE", ERR_LIB_BIO, BIO_R_GETTING_SOCKTYPE}, + #else + {"GETTING_SOCKTYPE", 32, 134}, + #endif + #ifdef BIO_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_BIO, BIO_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 32, 125}, + #endif + #ifdef BIO_R_INVALID_SOCKET + {"INVALID_SOCKET", ERR_LIB_BIO, BIO_R_INVALID_SOCKET}, + #else + {"INVALID_SOCKET", 32, 135}, + #endif + #ifdef BIO_R_IN_USE + {"IN_USE", ERR_LIB_BIO, BIO_R_IN_USE}, + #else + {"IN_USE", 32, 123}, + #endif + #ifdef BIO_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_BIO, BIO_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 32, 102}, + #endif + #ifdef BIO_R_LISTEN_V6_ONLY + {"LISTEN_V6_ONLY", ERR_LIB_BIO, BIO_R_LISTEN_V6_ONLY}, + #else + {"LISTEN_V6_ONLY", 32, 136}, + #endif + #ifdef BIO_R_LOOKUP_RETURNED_NOTHING + {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING}, + #else + {"LOOKUP_RETURNED_NOTHING", 32, 142}, + #endif + #ifdef BIO_R_MALFORMED_HOST_OR_SERVICE + {"MALFORMED_HOST_OR_SERVICE", ERR_LIB_BIO, BIO_R_MALFORMED_HOST_OR_SERVICE}, + #else + {"MALFORMED_HOST_OR_SERVICE", 32, 130}, + #endif + #ifdef BIO_R_NBIO_CONNECT_ERROR + {"NBIO_CONNECT_ERROR", ERR_LIB_BIO, BIO_R_NBIO_CONNECT_ERROR}, + #else + {"NBIO_CONNECT_ERROR", 32, 110}, + #endif + #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED}, + #else + {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", 32, 143}, + #endif + #ifdef BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED}, + #else + {"NO_HOSTNAME_OR_SERVICE_SPECIFIED", 32, 144}, + #endif + #ifdef BIO_R_NO_PORT_DEFINED + {"NO_PORT_DEFINED", ERR_LIB_BIO, BIO_R_NO_PORT_DEFINED}, + #else + {"NO_PORT_DEFINED", 32, 113}, + #endif + #ifdef BIO_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_BIO, BIO_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 32, 128}, + #endif + #ifdef BIO_R_TRANSFER_ERROR + {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR}, + #else + {"TRANSFER_ERROR", 32, 104}, + #endif + #ifdef BIO_R_TRANSFER_TIMEOUT + {"TRANSFER_TIMEOUT", ERR_LIB_BIO, BIO_R_TRANSFER_TIMEOUT}, + #else + {"TRANSFER_TIMEOUT", 32, 105}, + #endif + #ifdef BIO_R_UNABLE_TO_BIND_SOCKET + {"UNABLE_TO_BIND_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_BIND_SOCKET}, + #else + {"UNABLE_TO_BIND_SOCKET", 32, 117}, + #endif + #ifdef BIO_R_UNABLE_TO_CREATE_SOCKET + {"UNABLE_TO_CREATE_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_CREATE_SOCKET}, + #else + {"UNABLE_TO_CREATE_SOCKET", 32, 118}, + #endif + #ifdef BIO_R_UNABLE_TO_KEEPALIVE + {"UNABLE_TO_KEEPALIVE", ERR_LIB_BIO, BIO_R_UNABLE_TO_KEEPALIVE}, + #else + {"UNABLE_TO_KEEPALIVE", 32, 137}, + #endif + #ifdef BIO_R_UNABLE_TO_LISTEN_SOCKET + {"UNABLE_TO_LISTEN_SOCKET", ERR_LIB_BIO, BIO_R_UNABLE_TO_LISTEN_SOCKET}, + #else + {"UNABLE_TO_LISTEN_SOCKET", 32, 119}, + #endif + #ifdef BIO_R_UNABLE_TO_NODELAY + {"UNABLE_TO_NODELAY", ERR_LIB_BIO, BIO_R_UNABLE_TO_NODELAY}, + #else + {"UNABLE_TO_NODELAY", 32, 138}, + #endif + #ifdef BIO_R_UNABLE_TO_REUSEADDR + {"UNABLE_TO_REUSEADDR", ERR_LIB_BIO, BIO_R_UNABLE_TO_REUSEADDR}, + #else + {"UNABLE_TO_REUSEADDR", 32, 139}, + #endif + #ifdef BIO_R_UNAVAILABLE_IP_FAMILY + {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY}, + #else + {"UNAVAILABLE_IP_FAMILY", 32, 145}, + #endif + #ifdef BIO_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_BIO, BIO_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 32, 120}, + #endif + #ifdef BIO_R_UNKNOWN_INFO_TYPE + {"UNKNOWN_INFO_TYPE", ERR_LIB_BIO, BIO_R_UNKNOWN_INFO_TYPE}, + #else + {"UNKNOWN_INFO_TYPE", 32, 140}, + #endif + #ifdef BIO_R_UNSUPPORTED_IP_FAMILY + {"UNSUPPORTED_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_IP_FAMILY}, + #else + {"UNSUPPORTED_IP_FAMILY", 32, 146}, + #endif + #ifdef BIO_R_UNSUPPORTED_METHOD + {"UNSUPPORTED_METHOD", ERR_LIB_BIO, BIO_R_UNSUPPORTED_METHOD}, + #else + {"UNSUPPORTED_METHOD", 32, 121}, + #endif + #ifdef BIO_R_UNSUPPORTED_PROTOCOL_FAMILY + {"UNSUPPORTED_PROTOCOL_FAMILY", ERR_LIB_BIO, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY}, + #else + {"UNSUPPORTED_PROTOCOL_FAMILY", 32, 131}, + #endif + #ifdef BIO_R_WRITE_TO_READ_ONLY_BIO + {"WRITE_TO_READ_ONLY_BIO", ERR_LIB_BIO, BIO_R_WRITE_TO_READ_ONLY_BIO}, + #else + {"WRITE_TO_READ_ONLY_BIO", 32, 126}, + #endif + #ifdef BIO_R_WSASTARTUP + {"WSASTARTUP", ERR_LIB_BIO, BIO_R_WSASTARTUP}, + #else + {"WSASTARTUP", 32, 122}, + #endif + #ifdef BN_R_ARG2_LT_ARG3 + {"ARG2_LT_ARG3", ERR_LIB_BN, BN_R_ARG2_LT_ARG3}, + #else + {"ARG2_LT_ARG3", 3, 100}, + #endif + #ifdef BN_R_BAD_RECIPROCAL + {"BAD_RECIPROCAL", ERR_LIB_BN, BN_R_BAD_RECIPROCAL}, + #else + {"BAD_RECIPROCAL", 3, 101}, + #endif + #ifdef BN_R_BIGNUM_TOO_LONG + {"BIGNUM_TOO_LONG", ERR_LIB_BN, BN_R_BIGNUM_TOO_LONG}, + #else + {"BIGNUM_TOO_LONG", 3, 114}, + #endif + #ifdef BN_R_BITS_TOO_SMALL + {"BITS_TOO_SMALL", ERR_LIB_BN, BN_R_BITS_TOO_SMALL}, + #else + {"BITS_TOO_SMALL", 3, 118}, + #endif + #ifdef BN_R_CALLED_WITH_EVEN_MODULUS + {"CALLED_WITH_EVEN_MODULUS", ERR_LIB_BN, BN_R_CALLED_WITH_EVEN_MODULUS}, + #else + {"CALLED_WITH_EVEN_MODULUS", 3, 102}, + #endif + #ifdef BN_R_DIV_BY_ZERO + {"DIV_BY_ZERO", ERR_LIB_BN, BN_R_DIV_BY_ZERO}, + #else + {"DIV_BY_ZERO", 3, 103}, + #endif + #ifdef BN_R_ENCODING_ERROR + {"ENCODING_ERROR", ERR_LIB_BN, BN_R_ENCODING_ERROR}, + #else + {"ENCODING_ERROR", 3, 104}, + #endif + #ifdef BN_R_EXPAND_ON_STATIC_BIGNUM_DATA + {"EXPAND_ON_STATIC_BIGNUM_DATA", ERR_LIB_BN, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA}, + #else + {"EXPAND_ON_STATIC_BIGNUM_DATA", 3, 105}, + #endif + #ifdef BN_R_INPUT_NOT_REDUCED + {"INPUT_NOT_REDUCED", ERR_LIB_BN, BN_R_INPUT_NOT_REDUCED}, + #else + {"INPUT_NOT_REDUCED", 3, 110}, + #endif + #ifdef BN_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_BN, BN_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 3, 106}, + #endif + #ifdef BN_R_INVALID_RANGE + {"INVALID_RANGE", ERR_LIB_BN, BN_R_INVALID_RANGE}, + #else + {"INVALID_RANGE", 3, 115}, + #endif + #ifdef BN_R_INVALID_SHIFT + {"INVALID_SHIFT", ERR_LIB_BN, BN_R_INVALID_SHIFT}, + #else + {"INVALID_SHIFT", 3, 119}, + #endif + #ifdef BN_R_NOT_A_SQUARE + {"NOT_A_SQUARE", ERR_LIB_BN, BN_R_NOT_A_SQUARE}, + #else + {"NOT_A_SQUARE", 3, 111}, + #endif + #ifdef BN_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_BN, BN_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 3, 107}, + #endif + #ifdef BN_R_NO_INVERSE + {"NO_INVERSE", ERR_LIB_BN, BN_R_NO_INVERSE}, + #else + {"NO_INVERSE", 3, 108}, + #endif + #ifdef BN_R_NO_SOLUTION + {"NO_SOLUTION", ERR_LIB_BN, BN_R_NO_SOLUTION}, + #else + {"NO_SOLUTION", 3, 116}, + #endif + #ifdef BN_R_NO_SUITABLE_DIGEST + {"NO_SUITABLE_DIGEST", ERR_LIB_BN, BN_R_NO_SUITABLE_DIGEST}, + #else + {"NO_SUITABLE_DIGEST", 3, 120}, + #endif + #ifdef BN_R_PRIVATE_KEY_TOO_LARGE + {"PRIVATE_KEY_TOO_LARGE", ERR_LIB_BN, BN_R_PRIVATE_KEY_TOO_LARGE}, + #else + {"PRIVATE_KEY_TOO_LARGE", 3, 117}, + #endif + #ifdef BN_R_P_IS_NOT_PRIME + {"P_IS_NOT_PRIME", ERR_LIB_BN, BN_R_P_IS_NOT_PRIME}, + #else + {"P_IS_NOT_PRIME", 3, 112}, + #endif + #ifdef BN_R_TOO_MANY_ITERATIONS + {"TOO_MANY_ITERATIONS", ERR_LIB_BN, BN_R_TOO_MANY_ITERATIONS}, + #else + {"TOO_MANY_ITERATIONS", 3, 113}, + #endif + #ifdef BN_R_TOO_MANY_TEMPORARY_VARIABLES + {"TOO_MANY_TEMPORARY_VARIABLES", ERR_LIB_BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES}, + #else + {"TOO_MANY_TEMPORARY_VARIABLES", 3, 109}, + #endif + #ifdef CMP_R_ALGORITHM_NOT_SUPPORTED + {"ALGORITHM_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_ALGORITHM_NOT_SUPPORTED}, + #else + {"ALGORITHM_NOT_SUPPORTED", 58, 139}, + #endif + #ifdef CMP_R_BAD_CHECKAFTER_IN_POLLREP + {"BAD_CHECKAFTER_IN_POLLREP", ERR_LIB_CMP, CMP_R_BAD_CHECKAFTER_IN_POLLREP}, + #else + {"BAD_CHECKAFTER_IN_POLLREP", 58, 167}, + #endif + #ifdef CMP_R_BAD_REQUEST_ID + {"BAD_REQUEST_ID", ERR_LIB_CMP, CMP_R_BAD_REQUEST_ID}, + #else + {"BAD_REQUEST_ID", 58, 108}, + #endif + #ifdef CMP_R_CERTHASH_UNMATCHED + {"CERTHASH_UNMATCHED", ERR_LIB_CMP, CMP_R_CERTHASH_UNMATCHED}, + #else + {"CERTHASH_UNMATCHED", 58, 156}, + #endif + #ifdef CMP_R_CERTID_NOT_FOUND + {"CERTID_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTID_NOT_FOUND}, + #else + {"CERTID_NOT_FOUND", 58, 109}, + #endif + #ifdef CMP_R_CERTIFICATE_NOT_ACCEPTED + {"CERTIFICATE_NOT_ACCEPTED", ERR_LIB_CMP, CMP_R_CERTIFICATE_NOT_ACCEPTED}, + #else + {"CERTIFICATE_NOT_ACCEPTED", 58, 169}, + #endif + #ifdef CMP_R_CERTIFICATE_NOT_FOUND + {"CERTIFICATE_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTIFICATE_NOT_FOUND}, + #else + {"CERTIFICATE_NOT_FOUND", 58, 112}, + #endif + #ifdef CMP_R_CERTREQMSG_NOT_FOUND + {"CERTREQMSG_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTREQMSG_NOT_FOUND}, + #else + {"CERTREQMSG_NOT_FOUND", 58, 157}, + #endif + #ifdef CMP_R_CERTRESPONSE_NOT_FOUND + {"CERTRESPONSE_NOT_FOUND", ERR_LIB_CMP, CMP_R_CERTRESPONSE_NOT_FOUND}, + #else + {"CERTRESPONSE_NOT_FOUND", 58, 113}, + #endif + #ifdef CMP_R_CERT_AND_KEY_DO_NOT_MATCH + {"CERT_AND_KEY_DO_NOT_MATCH", ERR_LIB_CMP, CMP_R_CERT_AND_KEY_DO_NOT_MATCH}, + #else + {"CERT_AND_KEY_DO_NOT_MATCH", 58, 114}, + #endif + #ifdef CMP_R_CHECKAFTER_OUT_OF_RANGE + {"CHECKAFTER_OUT_OF_RANGE", ERR_LIB_CMP, CMP_R_CHECKAFTER_OUT_OF_RANGE}, + #else + {"CHECKAFTER_OUT_OF_RANGE", 58, 181}, + #endif + #ifdef CMP_R_ENCOUNTERED_KEYUPDATEWARNING + {"ENCOUNTERED_KEYUPDATEWARNING", ERR_LIB_CMP, CMP_R_ENCOUNTERED_KEYUPDATEWARNING}, + #else + {"ENCOUNTERED_KEYUPDATEWARNING", 58, 176}, + #endif + #ifdef CMP_R_ENCOUNTERED_WAITING + {"ENCOUNTERED_WAITING", ERR_LIB_CMP, CMP_R_ENCOUNTERED_WAITING}, + #else + {"ENCOUNTERED_WAITING", 58, 162}, + #endif + #ifdef CMP_R_ERROR_CALCULATING_PROTECTION + {"ERROR_CALCULATING_PROTECTION", ERR_LIB_CMP, CMP_R_ERROR_CALCULATING_PROTECTION}, + #else + {"ERROR_CALCULATING_PROTECTION", 58, 115}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTCONF + {"ERROR_CREATING_CERTCONF", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTCONF}, + #else + {"ERROR_CREATING_CERTCONF", 58, 116}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTREP + {"ERROR_CREATING_CERTREP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTREP}, + #else + {"ERROR_CREATING_CERTREP", 58, 117}, + #endif + #ifdef CMP_R_ERROR_CREATING_CERTREQ + {"ERROR_CREATING_CERTREQ", ERR_LIB_CMP, CMP_R_ERROR_CREATING_CERTREQ}, + #else + {"ERROR_CREATING_CERTREQ", 58, 163}, + #endif + #ifdef CMP_R_ERROR_CREATING_ERROR + {"ERROR_CREATING_ERROR", ERR_LIB_CMP, CMP_R_ERROR_CREATING_ERROR}, + #else + {"ERROR_CREATING_ERROR", 58, 118}, + #endif + #ifdef CMP_R_ERROR_CREATING_GENM + {"ERROR_CREATING_GENM", ERR_LIB_CMP, CMP_R_ERROR_CREATING_GENM}, + #else + {"ERROR_CREATING_GENM", 58, 119}, + #endif + #ifdef CMP_R_ERROR_CREATING_GENP + {"ERROR_CREATING_GENP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_GENP}, + #else + {"ERROR_CREATING_GENP", 58, 120}, + #endif + #ifdef CMP_R_ERROR_CREATING_PKICONF + {"ERROR_CREATING_PKICONF", ERR_LIB_CMP, CMP_R_ERROR_CREATING_PKICONF}, + #else + {"ERROR_CREATING_PKICONF", 58, 122}, + #endif + #ifdef CMP_R_ERROR_CREATING_POLLREP + {"ERROR_CREATING_POLLREP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_POLLREP}, + #else + {"ERROR_CREATING_POLLREP", 58, 123}, + #endif + #ifdef CMP_R_ERROR_CREATING_POLLREQ + {"ERROR_CREATING_POLLREQ", ERR_LIB_CMP, CMP_R_ERROR_CREATING_POLLREQ}, + #else + {"ERROR_CREATING_POLLREQ", 58, 124}, + #endif + #ifdef CMP_R_ERROR_CREATING_RP + {"ERROR_CREATING_RP", ERR_LIB_CMP, CMP_R_ERROR_CREATING_RP}, + #else + {"ERROR_CREATING_RP", 58, 125}, + #endif + #ifdef CMP_R_ERROR_CREATING_RR + {"ERROR_CREATING_RR", ERR_LIB_CMP, CMP_R_ERROR_CREATING_RR}, + #else + {"ERROR_CREATING_RR", 58, 126}, + #endif + #ifdef CMP_R_ERROR_PARSING_PKISTATUS + {"ERROR_PARSING_PKISTATUS", ERR_LIB_CMP, CMP_R_ERROR_PARSING_PKISTATUS}, + #else + {"ERROR_PARSING_PKISTATUS", 58, 107}, + #endif + #ifdef CMP_R_ERROR_PROCESSING_MESSAGE + {"ERROR_PROCESSING_MESSAGE", ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE}, + #else + {"ERROR_PROCESSING_MESSAGE", 58, 158}, + #endif + #ifdef CMP_R_ERROR_PROTECTING_MESSAGE + {"ERROR_PROTECTING_MESSAGE", ERR_LIB_CMP, CMP_R_ERROR_PROTECTING_MESSAGE}, + #else + {"ERROR_PROTECTING_MESSAGE", 58, 127}, + #endif + #ifdef CMP_R_ERROR_SETTING_CERTHASH + {"ERROR_SETTING_CERTHASH", ERR_LIB_CMP, CMP_R_ERROR_SETTING_CERTHASH}, + #else + {"ERROR_SETTING_CERTHASH", 58, 128}, + #endif + #ifdef CMP_R_ERROR_UNEXPECTED_CERTCONF + {"ERROR_UNEXPECTED_CERTCONF", ERR_LIB_CMP, CMP_R_ERROR_UNEXPECTED_CERTCONF}, + #else + {"ERROR_UNEXPECTED_CERTCONF", 58, 160}, + #endif + #ifdef CMP_R_ERROR_VALIDATING_PROTECTION + {"ERROR_VALIDATING_PROTECTION", ERR_LIB_CMP, CMP_R_ERROR_VALIDATING_PROTECTION}, + #else + {"ERROR_VALIDATING_PROTECTION", 58, 140}, + #endif + #ifdef CMP_R_ERROR_VALIDATING_SIGNATURE + {"ERROR_VALIDATING_SIGNATURE", ERR_LIB_CMP, CMP_R_ERROR_VALIDATING_SIGNATURE}, + #else + {"ERROR_VALIDATING_SIGNATURE", 58, 171}, + #endif + #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN + {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN}, + #else + {"FAILED_BUILDING_OWN_CHAIN", 58, 164}, + #endif + #ifdef CMP_R_FAILED_EXTRACTING_PUBKEY + {"FAILED_EXTRACTING_PUBKEY", ERR_LIB_CMP, CMP_R_FAILED_EXTRACTING_PUBKEY}, + #else + {"FAILED_EXTRACTING_PUBKEY", 58, 141}, + #endif + #ifdef CMP_R_FAILURE_OBTAINING_RANDOM + {"FAILURE_OBTAINING_RANDOM", ERR_LIB_CMP, CMP_R_FAILURE_OBTAINING_RANDOM}, + #else + {"FAILURE_OBTAINING_RANDOM", 58, 110}, + #endif + #ifdef CMP_R_FAIL_INFO_OUT_OF_RANGE + {"FAIL_INFO_OUT_OF_RANGE", ERR_LIB_CMP, CMP_R_FAIL_INFO_OUT_OF_RANGE}, + #else + {"FAIL_INFO_OUT_OF_RANGE", 58, 129}, + #endif + #ifdef CMP_R_INVALID_ARGS + {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS}, + #else + {"INVALID_ARGS", 58, 100}, + #endif + #ifdef CMP_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 58, 174}, + #endif + #ifdef CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION + {"MISSING_KEY_INPUT_FOR_CREATING_PROTECTION", ERR_LIB_CMP, CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION}, + #else + {"MISSING_KEY_INPUT_FOR_CREATING_PROTECTION", 58, 130}, + #endif + #ifdef CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE + {"MISSING_KEY_USAGE_DIGITALSIGNATURE", ERR_LIB_CMP, CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE}, + #else + {"MISSING_KEY_USAGE_DIGITALSIGNATURE", 58, 142}, + #endif + #ifdef CMP_R_MISSING_P10CSR + {"MISSING_P10CSR", ERR_LIB_CMP, CMP_R_MISSING_P10CSR}, + #else + {"MISSING_P10CSR", 58, 121}, + #endif + #ifdef CMP_R_MISSING_PBM_SECRET + {"MISSING_PBM_SECRET", ERR_LIB_CMP, CMP_R_MISSING_PBM_SECRET}, + #else + {"MISSING_PBM_SECRET", 58, 166}, + #endif + #ifdef CMP_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_CMP, CMP_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 58, 131}, + #endif + #ifdef CMP_R_MISSING_PROTECTION + {"MISSING_PROTECTION", ERR_LIB_CMP, CMP_R_MISSING_PROTECTION}, + #else + {"MISSING_PROTECTION", 58, 143}, + #endif + #ifdef CMP_R_MISSING_REFERENCE_CERT + {"MISSING_REFERENCE_CERT", ERR_LIB_CMP, CMP_R_MISSING_REFERENCE_CERT}, + #else + {"MISSING_REFERENCE_CERT", 58, 168}, + #endif + #ifdef CMP_R_MISSING_SENDER_IDENTIFICATION + {"MISSING_SENDER_IDENTIFICATION", ERR_LIB_CMP, CMP_R_MISSING_SENDER_IDENTIFICATION}, + #else + {"MISSING_SENDER_IDENTIFICATION", 58, 111}, + #endif + #ifdef CMP_R_MISSING_TRUST_STORE + {"MISSING_TRUST_STORE", ERR_LIB_CMP, CMP_R_MISSING_TRUST_STORE}, + #else + {"MISSING_TRUST_STORE", 58, 144}, + #endif + #ifdef CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED + {"MULTIPLE_REQUESTS_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED}, + #else + {"MULTIPLE_REQUESTS_NOT_SUPPORTED", 58, 161}, + #endif + #ifdef CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED + {"MULTIPLE_RESPONSES_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED}, + #else + {"MULTIPLE_RESPONSES_NOT_SUPPORTED", 58, 170}, + #endif + #ifdef CMP_R_MULTIPLE_SAN_SOURCES + {"MULTIPLE_SAN_SOURCES", ERR_LIB_CMP, CMP_R_MULTIPLE_SAN_SOURCES}, + #else + {"MULTIPLE_SAN_SOURCES", 58, 102}, + #endif + #ifdef CMP_R_NO_STDIO + {"NO_STDIO", ERR_LIB_CMP, CMP_R_NO_STDIO}, + #else + {"NO_STDIO", 58, 194}, + #endif + #ifdef CMP_R_NO_SUITABLE_SENDER_CERT + {"NO_SUITABLE_SENDER_CERT", ERR_LIB_CMP, CMP_R_NO_SUITABLE_SENDER_CERT}, + #else + {"NO_SUITABLE_SENDER_CERT", 58, 145}, + #endif + #ifdef CMP_R_NULL_ARGUMENT + {"NULL_ARGUMENT", ERR_LIB_CMP, CMP_R_NULL_ARGUMENT}, + #else + {"NULL_ARGUMENT", 58, 103}, + #endif + #ifdef CMP_R_PKIBODY_ERROR + {"PKIBODY_ERROR", ERR_LIB_CMP, CMP_R_PKIBODY_ERROR}, + #else + {"PKIBODY_ERROR", 58, 146}, + #endif + #ifdef CMP_R_PKISTATUSINFO_NOT_FOUND + {"PKISTATUSINFO_NOT_FOUND", ERR_LIB_CMP, CMP_R_PKISTATUSINFO_NOT_FOUND}, + #else + {"PKISTATUSINFO_NOT_FOUND", 58, 132}, + #endif + #ifdef CMP_R_POLLING_FAILED + {"POLLING_FAILED", ERR_LIB_CMP, CMP_R_POLLING_FAILED}, + #else + {"POLLING_FAILED", 58, 172}, + #endif + #ifdef CMP_R_POTENTIALLY_INVALID_CERTIFICATE + {"POTENTIALLY_INVALID_CERTIFICATE", ERR_LIB_CMP, CMP_R_POTENTIALLY_INVALID_CERTIFICATE}, + #else + {"POTENTIALLY_INVALID_CERTIFICATE", 58, 147}, + #endif + #ifdef CMP_R_RECEIVED_ERROR + {"RECEIVED_ERROR", ERR_LIB_CMP, CMP_R_RECEIVED_ERROR}, + #else + {"RECEIVED_ERROR", 58, 180}, + #endif + #ifdef CMP_R_RECIPNONCE_UNMATCHED + {"RECIPNONCE_UNMATCHED", ERR_LIB_CMP, CMP_R_RECIPNONCE_UNMATCHED}, + #else + {"RECIPNONCE_UNMATCHED", 58, 148}, + #endif + #ifdef CMP_R_REQUEST_NOT_ACCEPTED + {"REQUEST_NOT_ACCEPTED", ERR_LIB_CMP, CMP_R_REQUEST_NOT_ACCEPTED}, + #else + {"REQUEST_NOT_ACCEPTED", 58, 149}, + #endif + #ifdef CMP_R_REQUEST_REJECTED_BY_SERVER + {"REQUEST_REJECTED_BY_SERVER", ERR_LIB_CMP, CMP_R_REQUEST_REJECTED_BY_SERVER}, + #else + {"REQUEST_REJECTED_BY_SERVER", 58, 182}, + #endif + #ifdef CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED + {"SENDER_GENERALNAME_TYPE_NOT_SUPPORTED", ERR_LIB_CMP, CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED}, + #else + {"SENDER_GENERALNAME_TYPE_NOT_SUPPORTED", 58, 150}, + #endif + #ifdef CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG + {"SRVCERT_DOES_NOT_VALIDATE_MSG", ERR_LIB_CMP, CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG}, + #else + {"SRVCERT_DOES_NOT_VALIDATE_MSG", 58, 151}, + #endif + #ifdef CMP_R_TOTAL_TIMEOUT + {"TOTAL_TIMEOUT", ERR_LIB_CMP, CMP_R_TOTAL_TIMEOUT}, + #else + {"TOTAL_TIMEOUT", 58, 184}, + #endif + #ifdef CMP_R_TRANSACTIONID_UNMATCHED + {"TRANSACTIONID_UNMATCHED", ERR_LIB_CMP, CMP_R_TRANSACTIONID_UNMATCHED}, + #else + {"TRANSACTIONID_UNMATCHED", 58, 152}, + #endif + #ifdef CMP_R_TRANSFER_ERROR + {"TRANSFER_ERROR", ERR_LIB_CMP, CMP_R_TRANSFER_ERROR}, + #else + {"TRANSFER_ERROR", 58, 159}, + #endif + #ifdef CMP_R_UNEXPECTED_PKIBODY + {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY}, + #else + {"UNEXPECTED_PKIBODY", 58, 133}, + #endif + #ifdef CMP_R_UNEXPECTED_PKISTATUS + {"UNEXPECTED_PKISTATUS", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKISTATUS}, + #else + {"UNEXPECTED_PKISTATUS", 58, 185}, + #endif + #ifdef CMP_R_UNEXPECTED_PVNO + {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO}, + #else + {"UNEXPECTED_PVNO", 58, 153}, + #endif + #ifdef CMP_R_UNKNOWN_ALGORITHM_ID + {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID}, + #else + {"UNKNOWN_ALGORITHM_ID", 58, 134}, + #endif + #ifdef CMP_R_UNKNOWN_CERT_TYPE + {"UNKNOWN_CERT_TYPE", ERR_LIB_CMP, CMP_R_UNKNOWN_CERT_TYPE}, + #else + {"UNKNOWN_CERT_TYPE", 58, 135}, + #endif + #ifdef CMP_R_UNKNOWN_PKISTATUS + {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS}, + #else + {"UNKNOWN_PKISTATUS", 58, 186}, + #endif + #ifdef CMP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_CMP, CMP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 58, 136}, + #endif + #ifdef CMP_R_UNSUPPORTED_KEY_TYPE + {"UNSUPPORTED_KEY_TYPE", ERR_LIB_CMP, CMP_R_UNSUPPORTED_KEY_TYPE}, + #else + {"UNSUPPORTED_KEY_TYPE", 58, 137}, + #endif + #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC + {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC}, + #else + {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", 58, 154}, + #endif + #ifdef CMP_R_VALUE_TOO_LARGE + {"VALUE_TOO_LARGE", ERR_LIB_CMP, CMP_R_VALUE_TOO_LARGE}, + #else + {"VALUE_TOO_LARGE", 58, 175}, + #endif + #ifdef CMP_R_VALUE_TOO_SMALL + {"VALUE_TOO_SMALL", ERR_LIB_CMP, CMP_R_VALUE_TOO_SMALL}, + #else + {"VALUE_TOO_SMALL", 58, 177}, + #endif + #ifdef CMP_R_WRONG_ALGORITHM_OID + {"WRONG_ALGORITHM_OID", ERR_LIB_CMP, CMP_R_WRONG_ALGORITHM_OID}, + #else + {"WRONG_ALGORITHM_OID", 58, 138}, + #endif + #ifdef CMP_R_WRONG_CERTID_IN_RP + {"WRONG_CERTID_IN_RP", ERR_LIB_CMP, CMP_R_WRONG_CERTID_IN_RP}, + #else + {"WRONG_CERTID_IN_RP", 58, 187}, + #endif + #ifdef CMP_R_WRONG_PBM_VALUE + {"WRONG_PBM_VALUE", ERR_LIB_CMP, CMP_R_WRONG_PBM_VALUE}, + #else + {"WRONG_PBM_VALUE", 58, 155}, + #endif + #ifdef CMP_R_WRONG_RP_COMPONENT_COUNT + {"WRONG_RP_COMPONENT_COUNT", ERR_LIB_CMP, CMP_R_WRONG_RP_COMPONENT_COUNT}, + #else + {"WRONG_RP_COMPONENT_COUNT", 58, 188}, + #endif + #ifdef CMP_R_WRONG_SERIAL_IN_RP + {"WRONG_SERIAL_IN_RP", ERR_LIB_CMP, CMP_R_WRONG_SERIAL_IN_RP}, + #else + {"WRONG_SERIAL_IN_RP", 58, 173}, + #endif + #ifdef CMS_R_ADD_SIGNER_ERROR + {"ADD_SIGNER_ERROR", ERR_LIB_CMS, CMS_R_ADD_SIGNER_ERROR}, + #else + {"ADD_SIGNER_ERROR", 46, 99}, + #endif + #ifdef CMS_R_ATTRIBUTE_ERROR + {"ATTRIBUTE_ERROR", ERR_LIB_CMS, CMS_R_ATTRIBUTE_ERROR}, + #else + {"ATTRIBUTE_ERROR", 46, 161}, + #endif + #ifdef CMS_R_CERTIFICATE_ALREADY_PRESENT + {"CERTIFICATE_ALREADY_PRESENT", ERR_LIB_CMS, CMS_R_CERTIFICATE_ALREADY_PRESENT}, + #else + {"CERTIFICATE_ALREADY_PRESENT", 46, 175}, + #endif + #ifdef CMS_R_CERTIFICATE_HAS_NO_KEYID + {"CERTIFICATE_HAS_NO_KEYID", ERR_LIB_CMS, CMS_R_CERTIFICATE_HAS_NO_KEYID}, + #else + {"CERTIFICATE_HAS_NO_KEYID", 46, 160}, + #endif + #ifdef CMS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 46, 100}, + #endif + #ifdef CMS_R_CIPHER_AEAD_SET_TAG_ERROR + {"CIPHER_AEAD_SET_TAG_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_AEAD_SET_TAG_ERROR}, + #else + {"CIPHER_AEAD_SET_TAG_ERROR", 46, 184}, + #endif + #ifdef CMS_R_CIPHER_GET_TAG + {"CIPHER_GET_TAG", ERR_LIB_CMS, CMS_R_CIPHER_GET_TAG}, + #else + {"CIPHER_GET_TAG", 46, 185}, + #endif + #ifdef CMS_R_CIPHER_INITIALISATION_ERROR + {"CIPHER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_INITIALISATION_ERROR}, + #else + {"CIPHER_INITIALISATION_ERROR", 46, 101}, + #endif + #ifdef CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR + {"CIPHER_PARAMETER_INITIALISATION_ERROR", ERR_LIB_CMS, CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR}, + #else + {"CIPHER_PARAMETER_INITIALISATION_ERROR", 46, 102}, + #endif + #ifdef CMS_R_CMS_DATAFINAL_ERROR + {"CMS_DATAFINAL_ERROR", ERR_LIB_CMS, CMS_R_CMS_DATAFINAL_ERROR}, + #else + {"CMS_DATAFINAL_ERROR", 46, 103}, + #endif + #ifdef CMS_R_CMS_LIB + {"CMS_LIB", ERR_LIB_CMS, CMS_R_CMS_LIB}, + #else + {"CMS_LIB", 46, 104}, + #endif + #ifdef CMS_R_CONTENTIDENTIFIER_MISMATCH + {"CONTENTIDENTIFIER_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENTIDENTIFIER_MISMATCH}, + #else + {"CONTENTIDENTIFIER_MISMATCH", 46, 170}, + #endif + #ifdef CMS_R_CONTENT_NOT_FOUND + {"CONTENT_NOT_FOUND", ERR_LIB_CMS, CMS_R_CONTENT_NOT_FOUND}, + #else + {"CONTENT_NOT_FOUND", 46, 105}, + #endif + #ifdef CMS_R_CONTENT_TYPE_MISMATCH + {"CONTENT_TYPE_MISMATCH", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_MISMATCH}, + #else + {"CONTENT_TYPE_MISMATCH", 46, 171}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA}, + #else + {"CONTENT_TYPE_NOT_COMPRESSED_DATA", 46, 106}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA}, + #else + {"CONTENT_TYPE_NOT_ENVELOPED_DATA", 46, 107}, + #endif + #ifdef CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA + {"CONTENT_TYPE_NOT_SIGNED_DATA", ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA}, + #else + {"CONTENT_TYPE_NOT_SIGNED_DATA", 46, 108}, + #endif + #ifdef CMS_R_CONTENT_VERIFY_ERROR + {"CONTENT_VERIFY_ERROR", ERR_LIB_CMS, CMS_R_CONTENT_VERIFY_ERROR}, + #else + {"CONTENT_VERIFY_ERROR", 46, 109}, + #endif + #ifdef CMS_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_CMS, CMS_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 46, 110}, + #endif + #ifdef CMS_R_CTRL_FAILURE + {"CTRL_FAILURE", ERR_LIB_CMS, CMS_R_CTRL_FAILURE}, + #else + {"CTRL_FAILURE", 46, 111}, + #endif + #ifdef CMS_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_CMS, CMS_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 46, 187}, + #endif + #ifdef CMS_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_CMS, CMS_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 46, 112}, + #endif + #ifdef CMS_R_ERROR_GETTING_PUBLIC_KEY + {"ERROR_GETTING_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_ERROR_GETTING_PUBLIC_KEY}, + #else + {"ERROR_GETTING_PUBLIC_KEY", 46, 113}, + #endif + #ifdef CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", ERR_LIB_CMS, CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE}, + #else + {"ERROR_READING_MESSAGEDIGEST_ATTRIBUTE", 46, 114}, + #endif + #ifdef CMS_R_ERROR_SETTING_KEY + {"ERROR_SETTING_KEY", ERR_LIB_CMS, CMS_R_ERROR_SETTING_KEY}, + #else + {"ERROR_SETTING_KEY", 46, 115}, + #endif + #ifdef CMS_R_ERROR_SETTING_RECIPIENTINFO + {"ERROR_SETTING_RECIPIENTINFO", ERR_LIB_CMS, CMS_R_ERROR_SETTING_RECIPIENTINFO}, + #else + {"ERROR_SETTING_RECIPIENTINFO", 46, 116}, + #endif + #ifdef CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR + {"ESS_SIGNING_CERTID_MISMATCH_ERROR", ERR_LIB_CMS, CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR}, + #else + {"ESS_SIGNING_CERTID_MISMATCH_ERROR", 46, 183}, + #endif + #ifdef CMS_R_INVALID_ENCRYPTED_KEY_LENGTH + {"INVALID_ENCRYPTED_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_ENCRYPTED_KEY_LENGTH}, + #else + {"INVALID_ENCRYPTED_KEY_LENGTH", 46, 117}, + #endif + #ifdef CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER + {"INVALID_KEY_ENCRYPTION_PARAMETER", ERR_LIB_CMS, CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER}, + #else + {"INVALID_KEY_ENCRYPTION_PARAMETER", 46, 176}, + #endif + #ifdef CMS_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_CMS, CMS_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 46, 118}, + #endif + #ifdef CMS_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_CMS, CMS_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 46, 190}, + #endif + #ifdef CMS_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_CMS, CMS_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 46, 191}, + #endif + #ifdef CMS_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_CMS, CMS_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 46, 186}, + #endif + #ifdef CMS_R_MD_BIO_INIT_ERROR + {"MD_BIO_INIT_ERROR", ERR_LIB_CMS, CMS_R_MD_BIO_INIT_ERROR}, + #else + {"MD_BIO_INIT_ERROR", 46, 119}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH", 46, 120}, + #endif + #ifdef CMS_R_MESSAGEDIGEST_WRONG_LENGTH + {"MESSAGEDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MESSAGEDIGEST_WRONG_LENGTH}, + #else + {"MESSAGEDIGEST_WRONG_LENGTH", 46, 121}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_ERROR + {"MSGSIGDIGEST_ERROR", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_ERROR}, + #else + {"MSGSIGDIGEST_ERROR", 46, 172}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE + {"MSGSIGDIGEST_VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE}, + #else + {"MSGSIGDIGEST_VERIFICATION_FAILURE", 46, 162}, + #endif + #ifdef CMS_R_MSGSIGDIGEST_WRONG_LENGTH + {"MSGSIGDIGEST_WRONG_LENGTH", ERR_LIB_CMS, CMS_R_MSGSIGDIGEST_WRONG_LENGTH}, + #else + {"MSGSIGDIGEST_WRONG_LENGTH", 46, 163}, + #endif + #ifdef CMS_R_NEED_ONE_SIGNER + {"NEED_ONE_SIGNER", ERR_LIB_CMS, CMS_R_NEED_ONE_SIGNER}, + #else + {"NEED_ONE_SIGNER", 46, 164}, + #endif + #ifdef CMS_R_NOT_A_SIGNED_RECEIPT + {"NOT_A_SIGNED_RECEIPT", ERR_LIB_CMS, CMS_R_NOT_A_SIGNED_RECEIPT}, + #else + {"NOT_A_SIGNED_RECEIPT", 46, 165}, + #endif + #ifdef CMS_R_NOT_ENCRYPTED_DATA + {"NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_NOT_ENCRYPTED_DATA}, + #else + {"NOT_ENCRYPTED_DATA", 46, 122}, + #endif + #ifdef CMS_R_NOT_KEK + {"NOT_KEK", ERR_LIB_CMS, CMS_R_NOT_KEK}, + #else + {"NOT_KEK", 46, 123}, + #endif + #ifdef CMS_R_NOT_KEY_AGREEMENT + {"NOT_KEY_AGREEMENT", ERR_LIB_CMS, CMS_R_NOT_KEY_AGREEMENT}, + #else + {"NOT_KEY_AGREEMENT", 46, 181}, + #endif + #ifdef CMS_R_NOT_KEY_TRANSPORT + {"NOT_KEY_TRANSPORT", ERR_LIB_CMS, CMS_R_NOT_KEY_TRANSPORT}, + #else + {"NOT_KEY_TRANSPORT", 46, 124}, + #endif + #ifdef CMS_R_NOT_PWRI + {"NOT_PWRI", ERR_LIB_CMS, CMS_R_NOT_PWRI}, + #else + {"NOT_PWRI", 46, 177}, + #endif + #ifdef CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_CMS, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 46, 125}, + #endif + #ifdef CMS_R_NO_CIPHER + {"NO_CIPHER", ERR_LIB_CMS, CMS_R_NO_CIPHER}, + #else + {"NO_CIPHER", 46, 126}, + #endif + #ifdef CMS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_CMS, CMS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 46, 127}, + #endif + #ifdef CMS_R_NO_CONTENT_TYPE + {"NO_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_NO_CONTENT_TYPE}, + #else + {"NO_CONTENT_TYPE", 46, 173}, + #endif + #ifdef CMS_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_CMS, CMS_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 46, 128}, + #endif + #ifdef CMS_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_CMS, CMS_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 46, 129}, + #endif + #ifdef CMS_R_NO_KEY + {"NO_KEY", ERR_LIB_CMS, CMS_R_NO_KEY}, + #else + {"NO_KEY", 46, 130}, + #endif + #ifdef CMS_R_NO_KEY_OR_CERT + {"NO_KEY_OR_CERT", ERR_LIB_CMS, CMS_R_NO_KEY_OR_CERT}, + #else + {"NO_KEY_OR_CERT", 46, 174}, + #endif + #ifdef CMS_R_NO_MATCHING_DIGEST + {"NO_MATCHING_DIGEST", ERR_LIB_CMS, CMS_R_NO_MATCHING_DIGEST}, + #else + {"NO_MATCHING_DIGEST", 46, 131}, + #endif + #ifdef CMS_R_NO_MATCHING_RECIPIENT + {"NO_MATCHING_RECIPIENT", ERR_LIB_CMS, CMS_R_NO_MATCHING_RECIPIENT}, + #else + {"NO_MATCHING_RECIPIENT", 46, 132}, + #endif + #ifdef CMS_R_NO_MATCHING_SIGNATURE + {"NO_MATCHING_SIGNATURE", ERR_LIB_CMS, CMS_R_NO_MATCHING_SIGNATURE}, + #else + {"NO_MATCHING_SIGNATURE", 46, 166}, + #endif + #ifdef CMS_R_NO_MSGSIGDIGEST + {"NO_MSGSIGDIGEST", ERR_LIB_CMS, CMS_R_NO_MSGSIGDIGEST}, + #else + {"NO_MSGSIGDIGEST", 46, 167}, + #endif + #ifdef CMS_R_NO_PASSWORD + {"NO_PASSWORD", ERR_LIB_CMS, CMS_R_NO_PASSWORD}, + #else + {"NO_PASSWORD", 46, 178}, + #endif + #ifdef CMS_R_NO_PRIVATE_KEY + {"NO_PRIVATE_KEY", ERR_LIB_CMS, CMS_R_NO_PRIVATE_KEY}, + #else + {"NO_PRIVATE_KEY", 46, 133}, + #endif + #ifdef CMS_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_CMS, CMS_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 46, 134}, + #endif + #ifdef CMS_R_NO_RECEIPT_REQUEST + {"NO_RECEIPT_REQUEST", ERR_LIB_CMS, CMS_R_NO_RECEIPT_REQUEST}, + #else + {"NO_RECEIPT_REQUEST", 46, 168}, + #endif + #ifdef CMS_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_CMS, CMS_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 46, 135}, + #endif + #ifdef CMS_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 46, 188}, + #endif + #ifdef CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_CMS, CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 46, 136}, + #endif + #ifdef CMS_R_RECEIPT_DECODE_ERROR + {"RECEIPT_DECODE_ERROR", ERR_LIB_CMS, CMS_R_RECEIPT_DECODE_ERROR}, + #else + {"RECEIPT_DECODE_ERROR", 46, 169}, + #endif + #ifdef CMS_R_RECIPIENT_ERROR + {"RECIPIENT_ERROR", ERR_LIB_CMS, CMS_R_RECIPIENT_ERROR}, + #else + {"RECIPIENT_ERROR", 46, 137}, + #endif + #ifdef CMS_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_CMS, CMS_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 46, 189}, + #endif + #ifdef CMS_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_CMS, CMS_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 46, 138}, + #endif + #ifdef CMS_R_SIGNFINAL_ERROR + {"SIGNFINAL_ERROR", ERR_LIB_CMS, CMS_R_SIGNFINAL_ERROR}, + #else + {"SIGNFINAL_ERROR", 46, 139}, + #endif + #ifdef CMS_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_CMS, CMS_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 46, 140}, + #endif + #ifdef CMS_R_STORE_INIT_ERROR + {"STORE_INIT_ERROR", ERR_LIB_CMS, CMS_R_STORE_INIT_ERROR}, + #else + {"STORE_INIT_ERROR", 46, 141}, + #endif + #ifdef CMS_R_TYPE_NOT_COMPRESSED_DATA + {"TYPE_NOT_COMPRESSED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_COMPRESSED_DATA}, + #else + {"TYPE_NOT_COMPRESSED_DATA", 46, 142}, + #endif + #ifdef CMS_R_TYPE_NOT_DATA + {"TYPE_NOT_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DATA}, + #else + {"TYPE_NOT_DATA", 46, 143}, + #endif + #ifdef CMS_R_TYPE_NOT_DIGESTED_DATA + {"TYPE_NOT_DIGESTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_DIGESTED_DATA}, + #else + {"TYPE_NOT_DIGESTED_DATA", 46, 144}, + #endif + #ifdef CMS_R_TYPE_NOT_ENCRYPTED_DATA + {"TYPE_NOT_ENCRYPTED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENCRYPTED_DATA}, + #else + {"TYPE_NOT_ENCRYPTED_DATA", 46, 145}, + #endif + #ifdef CMS_R_TYPE_NOT_ENVELOPED_DATA + {"TYPE_NOT_ENVELOPED_DATA", ERR_LIB_CMS, CMS_R_TYPE_NOT_ENVELOPED_DATA}, + #else + {"TYPE_NOT_ENVELOPED_DATA", 46, 146}, + #endif + #ifdef CMS_R_UNABLE_TO_FINALIZE_CONTEXT + {"UNABLE_TO_FINALIZE_CONTEXT", ERR_LIB_CMS, CMS_R_UNABLE_TO_FINALIZE_CONTEXT}, + #else + {"UNABLE_TO_FINALIZE_CONTEXT", 46, 147}, + #endif + #ifdef CMS_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_CMS, CMS_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 46, 148}, + #endif + #ifdef CMS_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_CMS, CMS_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 46, 149}, + #endif + #ifdef CMS_R_UNKNOWN_ID + {"UNKNOWN_ID", ERR_LIB_CMS, CMS_R_UNKNOWN_ID}, + #else + {"UNKNOWN_ID", 46, 150}, + #endif + #ifdef CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 46, 151}, + #endif + #ifdef CMS_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 46, 152}, + #endif + #ifdef CMS_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 46, 192}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEK_ALGORITHM + {"UNSUPPORTED_KEK_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEK_ALGORITHM}, + #else + {"UNSUPPORTED_KEK_ALGORITHM", 46, 153}, + #endif + #ifdef CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM}, + #else + {"UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM", 46, 179}, + #endif + #ifdef CMS_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 46, 193}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + {"UNSUPPORTED_RECIPIENTINFO_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE}, + #else + {"UNSUPPORTED_RECIPIENTINFO_TYPE", 46, 155}, + #endif + #ifdef CMS_R_UNSUPPORTED_RECIPIENT_TYPE + {"UNSUPPORTED_RECIPIENT_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_RECIPIENT_TYPE}, + #else + {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154}, + #endif + #ifdef CMS_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 46, 156}, + #endif + #ifdef CMS_R_UNWRAP_ERROR + {"UNWRAP_ERROR", ERR_LIB_CMS, CMS_R_UNWRAP_ERROR}, + #else + {"UNWRAP_ERROR", 46, 157}, + #endif + #ifdef CMS_R_UNWRAP_FAILURE + {"UNWRAP_FAILURE", ERR_LIB_CMS, CMS_R_UNWRAP_FAILURE}, + #else + {"UNWRAP_FAILURE", 46, 180}, + #endif + #ifdef CMS_R_VERIFICATION_FAILURE + {"VERIFICATION_FAILURE", ERR_LIB_CMS, CMS_R_VERIFICATION_FAILURE}, + #else + {"VERIFICATION_FAILURE", 46, 158}, + #endif + #ifdef CMS_R_WRAP_ERROR + {"WRAP_ERROR", ERR_LIB_CMS, CMS_R_WRAP_ERROR}, + #else + {"WRAP_ERROR", 46, 159}, + #endif + #ifdef COMP_R_ZLIB_DEFLATE_ERROR + {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR}, + #else + {"ZLIB_DEFLATE_ERROR", 41, 99}, + #endif + #ifdef COMP_R_ZLIB_INFLATE_ERROR + {"ZLIB_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_INFLATE_ERROR}, + #else + {"ZLIB_INFLATE_ERROR", 41, 100}, + #endif + #ifdef COMP_R_ZLIB_NOT_SUPPORTED + {"ZLIB_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZLIB_NOT_SUPPORTED}, + #else + {"ZLIB_NOT_SUPPORTED", 41, 101}, + #endif + #ifdef CONF_R_ERROR_LOADING_DSO + {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO}, + #else + {"ERROR_LOADING_DSO", 14, 110}, + #endif + #ifdef CONF_R_INVALID_PRAGMA + {"INVALID_PRAGMA", ERR_LIB_CONF, CONF_R_INVALID_PRAGMA}, + #else + {"INVALID_PRAGMA", 14, 122}, + #endif + #ifdef CONF_R_LIST_CANNOT_BE_NULL + {"LIST_CANNOT_BE_NULL", ERR_LIB_CONF, CONF_R_LIST_CANNOT_BE_NULL}, + #else + {"LIST_CANNOT_BE_NULL", 14, 115}, + #endif + #ifdef CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION + {"MANDATORY_BRACES_IN_VARIABLE_EXPANSION", ERR_LIB_CONF, CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION}, + #else + {"MANDATORY_BRACES_IN_VARIABLE_EXPANSION", 14, 123}, + #endif + #ifdef CONF_R_MISSING_CLOSE_SQUARE_BRACKET + {"MISSING_CLOSE_SQUARE_BRACKET", ERR_LIB_CONF, CONF_R_MISSING_CLOSE_SQUARE_BRACKET}, + #else + {"MISSING_CLOSE_SQUARE_BRACKET", 14, 100}, + #endif + #ifdef CONF_R_MISSING_EQUAL_SIGN + {"MISSING_EQUAL_SIGN", ERR_LIB_CONF, CONF_R_MISSING_EQUAL_SIGN}, + #else + {"MISSING_EQUAL_SIGN", 14, 101}, + #endif + #ifdef CONF_R_MISSING_INIT_FUNCTION + {"MISSING_INIT_FUNCTION", ERR_LIB_CONF, CONF_R_MISSING_INIT_FUNCTION}, + #else + {"MISSING_INIT_FUNCTION", 14, 112}, + #endif + #ifdef CONF_R_MODULE_INITIALIZATION_ERROR + {"MODULE_INITIALIZATION_ERROR", ERR_LIB_CONF, CONF_R_MODULE_INITIALIZATION_ERROR}, + #else + {"MODULE_INITIALIZATION_ERROR", 14, 109}, + #endif + #ifdef CONF_R_NO_CLOSE_BRACE + {"NO_CLOSE_BRACE", ERR_LIB_CONF, CONF_R_NO_CLOSE_BRACE}, + #else + {"NO_CLOSE_BRACE", 14, 102}, + #endif + #ifdef CONF_R_NO_CONF + {"NO_CONF", ERR_LIB_CONF, CONF_R_NO_CONF}, + #else + {"NO_CONF", 14, 105}, + #endif + #ifdef CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", ERR_LIB_CONF, CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE}, + #else + {"NO_CONF_OR_ENVIRONMENT_VARIABLE", 14, 106}, + #endif + #ifdef CONF_R_NO_SECTION + {"NO_SECTION", ERR_LIB_CONF, CONF_R_NO_SECTION}, + #else + {"NO_SECTION", 14, 107}, + #endif + #ifdef CONF_R_NO_SUCH_FILE + {"NO_SUCH_FILE", ERR_LIB_CONF, CONF_R_NO_SUCH_FILE}, + #else + {"NO_SUCH_FILE", 14, 114}, + #endif + #ifdef CONF_R_NO_VALUE + {"NO_VALUE", ERR_LIB_CONF, CONF_R_NO_VALUE}, + #else + {"NO_VALUE", 14, 108}, + #endif + #ifdef CONF_R_NUMBER_TOO_LARGE + {"NUMBER_TOO_LARGE", ERR_LIB_CONF, CONF_R_NUMBER_TOO_LARGE}, + #else + {"NUMBER_TOO_LARGE", 14, 121}, + #endif + #ifdef CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION + {"OPENSSL_CONF_REFERENCES_MISSING_SECTION", ERR_LIB_CONF, CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION}, + #else + {"OPENSSL_CONF_REFERENCES_MISSING_SECTION", 14, 124}, + #endif + #ifdef CONF_R_RECURSIVE_DIRECTORY_INCLUDE + {"RECURSIVE_DIRECTORY_INCLUDE", ERR_LIB_CONF, CONF_R_RECURSIVE_DIRECTORY_INCLUDE}, + #else + {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 14, 117}, + #endif + #ifdef CONF_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 14, 118}, + #endif + #ifdef CONF_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_CONF, CONF_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 14, 119}, + #endif + #ifdef CONF_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_CONF, CONF_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 14, 120}, + #endif + #ifdef CONF_R_UNABLE_TO_CREATE_NEW_SECTION + {"UNABLE_TO_CREATE_NEW_SECTION", ERR_LIB_CONF, CONF_R_UNABLE_TO_CREATE_NEW_SECTION}, + #else + {"UNABLE_TO_CREATE_NEW_SECTION", 14, 103}, + #endif + #ifdef CONF_R_UNKNOWN_MODULE_NAME + {"UNKNOWN_MODULE_NAME", ERR_LIB_CONF, CONF_R_UNKNOWN_MODULE_NAME}, + #else + {"UNKNOWN_MODULE_NAME", 14, 113}, + #endif + #ifdef CONF_R_VARIABLE_EXPANSION_TOO_LONG + {"VARIABLE_EXPANSION_TOO_LONG", ERR_LIB_CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG}, + #else + {"VARIABLE_EXPANSION_TOO_LONG", 14, 116}, + #endif + #ifdef CONF_R_VARIABLE_HAS_NO_VALUE + {"VARIABLE_HAS_NO_VALUE", ERR_LIB_CONF, CONF_R_VARIABLE_HAS_NO_VALUE}, + #else + {"VARIABLE_HAS_NO_VALUE", 14, 104}, + #endif + #ifdef CRMF_R_BAD_PBM_ITERATIONCOUNT + {"BAD_PBM_ITERATIONCOUNT", ERR_LIB_CRMF, CRMF_R_BAD_PBM_ITERATIONCOUNT}, + #else + {"BAD_PBM_ITERATIONCOUNT", 56, 100}, + #endif + #ifdef CRMF_R_CRMFERROR + {"CRMFERROR", ERR_LIB_CRMF, CRMF_R_CRMFERROR}, + #else + {"CRMFERROR", 56, 102}, + #endif + #ifdef CRMF_R_ERROR + {"ERROR", ERR_LIB_CRMF, CRMF_R_ERROR}, + #else + {"ERROR", 56, 103}, + #endif + #ifdef CRMF_R_ERROR_DECODING_CERTIFICATE + {"ERROR_DECODING_CERTIFICATE", ERR_LIB_CRMF, CRMF_R_ERROR_DECODING_CERTIFICATE}, + #else + {"ERROR_DECODING_CERTIFICATE", 56, 104}, + #endif + #ifdef CRMF_R_ERROR_DECRYPTING_CERTIFICATE + {"ERROR_DECRYPTING_CERTIFICATE", ERR_LIB_CRMF, CRMF_R_ERROR_DECRYPTING_CERTIFICATE}, + #else + {"ERROR_DECRYPTING_CERTIFICATE", 56, 105}, + #endif + #ifdef CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY + {"ERROR_DECRYPTING_SYMMETRIC_KEY", ERR_LIB_CRMF, CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY}, + #else + {"ERROR_DECRYPTING_SYMMETRIC_KEY", 56, 106}, + #endif + #ifdef CRMF_R_FAILURE_OBTAINING_RANDOM + {"FAILURE_OBTAINING_RANDOM", ERR_LIB_CRMF, CRMF_R_FAILURE_OBTAINING_RANDOM}, + #else + {"FAILURE_OBTAINING_RANDOM", 56, 107}, + #endif + #ifdef CRMF_R_ITERATIONCOUNT_BELOW_100 + {"ITERATIONCOUNT_BELOW_100", ERR_LIB_CRMF, CRMF_R_ITERATIONCOUNT_BELOW_100}, + #else + {"ITERATIONCOUNT_BELOW_100", 56, 108}, + #endif + #ifdef CRMF_R_MALFORMED_IV + {"MALFORMED_IV", ERR_LIB_CRMF, CRMF_R_MALFORMED_IV}, + #else + {"MALFORMED_IV", 56, 101}, + #endif + #ifdef CRMF_R_NULL_ARGUMENT + {"NULL_ARGUMENT", ERR_LIB_CRMF, CRMF_R_NULL_ARGUMENT}, + #else + {"NULL_ARGUMENT", 56, 109}, + #endif + #ifdef CRMF_R_POPOSKINPUT_NOT_SUPPORTED + {"POPOSKINPUT_NOT_SUPPORTED", ERR_LIB_CRMF, CRMF_R_POPOSKINPUT_NOT_SUPPORTED}, + #else + {"POPOSKINPUT_NOT_SUPPORTED", 56, 113}, + #endif + #ifdef CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY + {"POPO_INCONSISTENT_PUBLIC_KEY", ERR_LIB_CRMF, CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY}, + #else + {"POPO_INCONSISTENT_PUBLIC_KEY", 56, 117}, + #endif + #ifdef CRMF_R_POPO_MISSING + {"POPO_MISSING", ERR_LIB_CRMF, CRMF_R_POPO_MISSING}, + #else + {"POPO_MISSING", 56, 121}, + #endif + #ifdef CRMF_R_POPO_MISSING_PUBLIC_KEY + {"POPO_MISSING_PUBLIC_KEY", ERR_LIB_CRMF, CRMF_R_POPO_MISSING_PUBLIC_KEY}, + #else + {"POPO_MISSING_PUBLIC_KEY", 56, 118}, + #endif + #ifdef CRMF_R_POPO_MISSING_SUBJECT + {"POPO_MISSING_SUBJECT", ERR_LIB_CRMF, CRMF_R_POPO_MISSING_SUBJECT}, + #else + {"POPO_MISSING_SUBJECT", 56, 119}, + #endif + #ifdef CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED + {"POPO_RAVERIFIED_NOT_ACCEPTED", ERR_LIB_CRMF, CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED}, + #else + {"POPO_RAVERIFIED_NOT_ACCEPTED", 56, 120}, + #endif + #ifdef CRMF_R_SETTING_MAC_ALGOR_FAILURE + {"SETTING_MAC_ALGOR_FAILURE", ERR_LIB_CRMF, CRMF_R_SETTING_MAC_ALGOR_FAILURE}, + #else + {"SETTING_MAC_ALGOR_FAILURE", 56, 110}, + #endif + #ifdef CRMF_R_SETTING_OWF_ALGOR_FAILURE + {"SETTING_OWF_ALGOR_FAILURE", ERR_LIB_CRMF, CRMF_R_SETTING_OWF_ALGOR_FAILURE}, + #else + {"SETTING_OWF_ALGOR_FAILURE", 56, 111}, + #endif + #ifdef CRMF_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 56, 112}, + #endif + #ifdef CRMF_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 56, 114}, + #endif + #ifdef CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO + {"UNSUPPORTED_METHOD_FOR_CREATING_POPO", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO}, + #else + {"UNSUPPORTED_METHOD_FOR_CREATING_POPO", 56, 115}, + #endif + #ifdef CRMF_R_UNSUPPORTED_POPO_METHOD + {"UNSUPPORTED_POPO_METHOD", ERR_LIB_CRMF, CRMF_R_UNSUPPORTED_POPO_METHOD}, + #else + {"UNSUPPORTED_POPO_METHOD", 56, 116}, + #endif + #ifdef CRYPTO_R_BAD_ALGORITHM_NAME + {"BAD_ALGORITHM_NAME", ERR_LIB_CRYPTO, CRYPTO_R_BAD_ALGORITHM_NAME}, + #else + {"BAD_ALGORITHM_NAME", 15, 117}, + #endif + #ifdef CRYPTO_R_CONFLICTING_NAMES + {"CONFLICTING_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_CONFLICTING_NAMES}, + #else + {"CONFLICTING_NAMES", 15, 118}, + #endif + #ifdef CRYPTO_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_CRYPTO, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 15, 101}, + #endif + #ifdef CRYPTO_R_HEX_STRING_TOO_SHORT + {"HEX_STRING_TOO_SHORT", ERR_LIB_CRYPTO, CRYPTO_R_HEX_STRING_TOO_SHORT}, + #else + {"HEX_STRING_TOO_SHORT", 15, 121}, + #endif + #ifdef CRYPTO_R_ILLEGAL_HEX_DIGIT + {"ILLEGAL_HEX_DIGIT", ERR_LIB_CRYPTO, CRYPTO_R_ILLEGAL_HEX_DIGIT}, + #else + {"ILLEGAL_HEX_DIGIT", 15, 102}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_DATA_SPACE + {"INSUFFICIENT_DATA_SPACE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_DATA_SPACE}, + #else + {"INSUFFICIENT_DATA_SPACE", 15, 106}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_PARAM_SIZE + {"INSUFFICIENT_PARAM_SIZE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_PARAM_SIZE}, + #else + {"INSUFFICIENT_PARAM_SIZE", 15, 107}, + #endif + #ifdef CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE + {"INSUFFICIENT_SECURE_DATA_SPACE", ERR_LIB_CRYPTO, CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE}, + #else + {"INSUFFICIENT_SECURE_DATA_SPACE", 15, 108}, + #endif + #ifdef CRYPTO_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_CRYPTO, CRYPTO_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 15, 109}, + #endif + #ifdef CRYPTO_R_INVALID_OSSL_PARAM_TYPE + {"INVALID_OSSL_PARAM_TYPE", ERR_LIB_CRYPTO, CRYPTO_R_INVALID_OSSL_PARAM_TYPE}, + #else + {"INVALID_OSSL_PARAM_TYPE", 15, 110}, + #endif + #ifdef CRYPTO_R_ODD_NUMBER_OF_DIGITS + {"ODD_NUMBER_OF_DIGITS", ERR_LIB_CRYPTO, CRYPTO_R_ODD_NUMBER_OF_DIGITS}, + #else + {"ODD_NUMBER_OF_DIGITS", 15, 103}, + #endif + #ifdef CRYPTO_R_PROVIDER_ALREADY_EXISTS + {"PROVIDER_ALREADY_EXISTS", ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_ALREADY_EXISTS}, + #else + {"PROVIDER_ALREADY_EXISTS", 15, 104}, + #endif + #ifdef CRYPTO_R_PROVIDER_SECTION_ERROR + {"PROVIDER_SECTION_ERROR", ERR_LIB_CRYPTO, CRYPTO_R_PROVIDER_SECTION_ERROR}, + #else + {"PROVIDER_SECTION_ERROR", 15, 105}, + #endif + #ifdef CRYPTO_R_RANDOM_SECTION_ERROR + {"RANDOM_SECTION_ERROR", ERR_LIB_CRYPTO, CRYPTO_R_RANDOM_SECTION_ERROR}, + #else + {"RANDOM_SECTION_ERROR", 15, 119}, + #endif + #ifdef CRYPTO_R_SECURE_MALLOC_FAILURE + {"SECURE_MALLOC_FAILURE", ERR_LIB_CRYPTO, CRYPTO_R_SECURE_MALLOC_FAILURE}, + #else + {"SECURE_MALLOC_FAILURE", 15, 111}, + #endif + #ifdef CRYPTO_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_CRYPTO, CRYPTO_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 15, 112}, + #endif + #ifdef CRYPTO_R_TOO_MANY_BYTES + {"TOO_MANY_BYTES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_BYTES}, + #else + {"TOO_MANY_BYTES", 15, 113}, + #endif + #ifdef CRYPTO_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 15, 114}, + #endif + #ifdef CRYPTO_R_TOO_SMALL_BUFFER + {"TOO_SMALL_BUFFER", ERR_LIB_CRYPTO, CRYPTO_R_TOO_SMALL_BUFFER}, + #else + {"TOO_SMALL_BUFFER", 15, 116}, + #endif + #ifdef CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION + {"UNKNOWN_NAME_IN_RANDOM_SECTION", ERR_LIB_CRYPTO, CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION}, + #else + {"UNKNOWN_NAME_IN_RANDOM_SECTION", 15, 120}, + #endif + #ifdef CRYPTO_R_ZERO_LENGTH_NUMBER + {"ZERO_LENGTH_NUMBER", ERR_LIB_CRYPTO, CRYPTO_R_ZERO_LENGTH_NUMBER}, + #else + {"ZERO_LENGTH_NUMBER", 15, 115}, + #endif + #ifdef CT_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_CT, CT_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 50, 108}, + #endif + #ifdef CT_R_INVALID_LOG_ID_LENGTH + {"INVALID_LOG_ID_LENGTH", ERR_LIB_CT, CT_R_INVALID_LOG_ID_LENGTH}, + #else + {"INVALID_LOG_ID_LENGTH", 50, 100}, + #endif + #ifdef CT_R_LOG_CONF_INVALID + {"LOG_CONF_INVALID", ERR_LIB_CT, CT_R_LOG_CONF_INVALID}, + #else + {"LOG_CONF_INVALID", 50, 109}, + #endif + #ifdef CT_R_LOG_CONF_INVALID_KEY + {"LOG_CONF_INVALID_KEY", ERR_LIB_CT, CT_R_LOG_CONF_INVALID_KEY}, + #else + {"LOG_CONF_INVALID_KEY", 50, 110}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_DESCRIPTION + {"LOG_CONF_MISSING_DESCRIPTION", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_DESCRIPTION}, + #else + {"LOG_CONF_MISSING_DESCRIPTION", 50, 111}, + #endif + #ifdef CT_R_LOG_CONF_MISSING_KEY + {"LOG_CONF_MISSING_KEY", ERR_LIB_CT, CT_R_LOG_CONF_MISSING_KEY}, + #else + {"LOG_CONF_MISSING_KEY", 50, 112}, + #endif + #ifdef CT_R_LOG_KEY_INVALID + {"LOG_KEY_INVALID", ERR_LIB_CT, CT_R_LOG_KEY_INVALID}, + #else + {"LOG_KEY_INVALID", 50, 113}, + #endif + #ifdef CT_R_SCT_FUTURE_TIMESTAMP + {"SCT_FUTURE_TIMESTAMP", ERR_LIB_CT, CT_R_SCT_FUTURE_TIMESTAMP}, + #else + {"SCT_FUTURE_TIMESTAMP", 50, 116}, + #endif + #ifdef CT_R_SCT_INVALID + {"SCT_INVALID", ERR_LIB_CT, CT_R_SCT_INVALID}, + #else + {"SCT_INVALID", 50, 104}, + #endif + #ifdef CT_R_SCT_INVALID_SIGNATURE + {"SCT_INVALID_SIGNATURE", ERR_LIB_CT, CT_R_SCT_INVALID_SIGNATURE}, + #else + {"SCT_INVALID_SIGNATURE", 50, 107}, + #endif + #ifdef CT_R_SCT_LIST_INVALID + {"SCT_LIST_INVALID", ERR_LIB_CT, CT_R_SCT_LIST_INVALID}, + #else + {"SCT_LIST_INVALID", 50, 105}, + #endif + #ifdef CT_R_SCT_LOG_ID_MISMATCH + {"SCT_LOG_ID_MISMATCH", ERR_LIB_CT, CT_R_SCT_LOG_ID_MISMATCH}, + #else + {"SCT_LOG_ID_MISMATCH", 50, 114}, + #endif + #ifdef CT_R_SCT_NOT_SET + {"SCT_NOT_SET", ERR_LIB_CT, CT_R_SCT_NOT_SET}, + #else + {"SCT_NOT_SET", 50, 106}, + #endif + #ifdef CT_R_SCT_UNSUPPORTED_VERSION + {"SCT_UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_SCT_UNSUPPORTED_VERSION}, + #else + {"SCT_UNSUPPORTED_VERSION", 50, 115}, + #endif + #ifdef CT_R_UNRECOGNIZED_SIGNATURE_NID + {"UNRECOGNIZED_SIGNATURE_NID", ERR_LIB_CT, CT_R_UNRECOGNIZED_SIGNATURE_NID}, + #else + {"UNRECOGNIZED_SIGNATURE_NID", 50, 101}, + #endif + #ifdef CT_R_UNSUPPORTED_ENTRY_TYPE + {"UNSUPPORTED_ENTRY_TYPE", ERR_LIB_CT, CT_R_UNSUPPORTED_ENTRY_TYPE}, + #else + {"UNSUPPORTED_ENTRY_TYPE", 50, 102}, + #endif + #ifdef CT_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_CT, CT_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 50, 103}, + #endif + #ifdef DH_R_BAD_FFC_PARAMETERS + {"BAD_FFC_PARAMETERS", ERR_LIB_DH, DH_R_BAD_FFC_PARAMETERS}, + #else + {"BAD_FFC_PARAMETERS", 5, 127}, + #endif + #ifdef DH_R_BAD_GENERATOR + {"BAD_GENERATOR", ERR_LIB_DH, DH_R_BAD_GENERATOR}, + #else + {"BAD_GENERATOR", 5, 101}, + #endif + #ifdef DH_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DH, DH_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 5, 109}, + #endif + #ifdef DH_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DH, DH_R_BN_ERROR}, + #else + {"BN_ERROR", 5, 106}, + #endif + #ifdef DH_R_CHECK_INVALID_J_VALUE + {"CHECK_INVALID_J_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_J_VALUE}, + #else + {"CHECK_INVALID_J_VALUE", 5, 115}, + #endif + #ifdef DH_R_CHECK_INVALID_Q_VALUE + {"CHECK_INVALID_Q_VALUE", ERR_LIB_DH, DH_R_CHECK_INVALID_Q_VALUE}, + #else + {"CHECK_INVALID_Q_VALUE", 5, 116}, + #endif + #ifdef DH_R_CHECK_PUBKEY_INVALID + {"CHECK_PUBKEY_INVALID", ERR_LIB_DH, DH_R_CHECK_PUBKEY_INVALID}, + #else + {"CHECK_PUBKEY_INVALID", 5, 122}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_LARGE + {"CHECK_PUBKEY_TOO_LARGE", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_LARGE}, + #else + {"CHECK_PUBKEY_TOO_LARGE", 5, 123}, + #endif + #ifdef DH_R_CHECK_PUBKEY_TOO_SMALL + {"CHECK_PUBKEY_TOO_SMALL", ERR_LIB_DH, DH_R_CHECK_PUBKEY_TOO_SMALL}, + #else + {"CHECK_PUBKEY_TOO_SMALL", 5, 124}, + #endif + #ifdef DH_R_CHECK_P_NOT_PRIME + {"CHECK_P_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_PRIME}, + #else + {"CHECK_P_NOT_PRIME", 5, 117}, + #endif + #ifdef DH_R_CHECK_P_NOT_SAFE_PRIME + {"CHECK_P_NOT_SAFE_PRIME", ERR_LIB_DH, DH_R_CHECK_P_NOT_SAFE_PRIME}, + #else + {"CHECK_P_NOT_SAFE_PRIME", 5, 118}, + #endif + #ifdef DH_R_CHECK_Q_NOT_PRIME + {"CHECK_Q_NOT_PRIME", ERR_LIB_DH, DH_R_CHECK_Q_NOT_PRIME}, + #else + {"CHECK_Q_NOT_PRIME", 5, 119}, + #endif + #ifdef DH_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DH, DH_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 5, 104}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NAME + {"INVALID_PARAMETER_NAME", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NAME}, + #else + {"INVALID_PARAMETER_NAME", 5, 110}, + #endif + #ifdef DH_R_INVALID_PARAMETER_NID + {"INVALID_PARAMETER_NID", ERR_LIB_DH, DH_R_INVALID_PARAMETER_NID}, + #else + {"INVALID_PARAMETER_NID", 5, 114}, + #endif + #ifdef DH_R_INVALID_PUBKEY + {"INVALID_PUBKEY", ERR_LIB_DH, DH_R_INVALID_PUBKEY}, + #else + {"INVALID_PUBKEY", 5, 102}, + #endif + #ifdef DH_R_INVALID_SECRET + {"INVALID_SECRET", ERR_LIB_DH, DH_R_INVALID_SECRET}, + #else + {"INVALID_SECRET", 5, 128}, + #endif + #ifdef DH_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 5, 112}, + #endif + #ifdef DH_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_DH, DH_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 5, 108}, + #endif + #ifdef DH_R_MISSING_PUBKEY + {"MISSING_PUBKEY", ERR_LIB_DH, DH_R_MISSING_PUBKEY}, + #else + {"MISSING_PUBKEY", 5, 125}, + #endif + #ifdef DH_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 5, 103}, + #endif + #ifdef DH_R_MODULUS_TOO_SMALL + {"MODULUS_TOO_SMALL", ERR_LIB_DH, DH_R_MODULUS_TOO_SMALL}, + #else + {"MODULUS_TOO_SMALL", 5, 126}, + #endif + #ifdef DH_R_NOT_SUITABLE_GENERATOR + {"NOT_SUITABLE_GENERATOR", ERR_LIB_DH, DH_R_NOT_SUITABLE_GENERATOR}, + #else + {"NOT_SUITABLE_GENERATOR", 5, 120}, + #endif + #ifdef DH_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DH, DH_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 5, 107}, + #endif + #ifdef DH_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_DH, DH_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 5, 100}, + #endif + #ifdef DH_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DH, DH_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 5, 105}, + #endif + #ifdef DH_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_DH, DH_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 5, 111}, + #endif + #ifdef DH_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 5, 113}, + #endif + #ifdef DH_R_UNABLE_TO_CHECK_GENERATOR + {"UNABLE_TO_CHECK_GENERATOR", ERR_LIB_DH, DH_R_UNABLE_TO_CHECK_GENERATOR}, + #else + {"UNABLE_TO_CHECK_GENERATOR", 5, 121}, + #endif + #ifdef DSA_R_BAD_FFC_PARAMETERS + {"BAD_FFC_PARAMETERS", ERR_LIB_DSA, DSA_R_BAD_FFC_PARAMETERS}, + #else + {"BAD_FFC_PARAMETERS", 10, 114}, + #endif + #ifdef DSA_R_BAD_Q_VALUE + {"BAD_Q_VALUE", ERR_LIB_DSA, DSA_R_BAD_Q_VALUE}, + #else + {"BAD_Q_VALUE", 10, 102}, + #endif + #ifdef DSA_R_BN_DECODE_ERROR + {"BN_DECODE_ERROR", ERR_LIB_DSA, DSA_R_BN_DECODE_ERROR}, + #else + {"BN_DECODE_ERROR", 10, 108}, + #endif + #ifdef DSA_R_BN_ERROR + {"BN_ERROR", ERR_LIB_DSA, DSA_R_BN_ERROR}, + #else + {"BN_ERROR", 10, 109}, + #endif + #ifdef DSA_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_DSA, DSA_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 10, 104}, + #endif + #ifdef DSA_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_DSA, DSA_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 10, 106}, + #endif + #ifdef DSA_R_INVALID_PARAMETERS + {"INVALID_PARAMETERS", ERR_LIB_DSA, DSA_R_INVALID_PARAMETERS}, + #else + {"INVALID_PARAMETERS", 10, 112}, + #endif + #ifdef DSA_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_DSA, DSA_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 10, 101}, + #endif + #ifdef DSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_DSA, DSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 10, 111}, + #endif + #ifdef DSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_DSA, DSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 10, 103}, + #endif + #ifdef DSA_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_DSA, DSA_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 10, 107}, + #endif + #ifdef DSA_R_PARAMETER_ENCODING_ERROR + {"PARAMETER_ENCODING_ERROR", ERR_LIB_DSA, DSA_R_PARAMETER_ENCODING_ERROR}, + #else + {"PARAMETER_ENCODING_ERROR", 10, 105}, + #endif + #ifdef DSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_DSA, DSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 10, 115}, + #endif + #ifdef DSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_DSA, DSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 10, 113}, + #endif + #ifdef DSA_R_SEED_LEN_SMALL + {"SEED_LEN_SMALL", ERR_LIB_DSA, DSA_R_SEED_LEN_SMALL}, + #else + {"SEED_LEN_SMALL", 10, 110}, + #endif + #ifdef DSO_R_CTRL_FAILED + {"CTRL_FAILED", ERR_LIB_DSO, DSO_R_CTRL_FAILED}, + #else + {"CTRL_FAILED", 37, 100}, + #endif + #ifdef DSO_R_DSO_ALREADY_LOADED + {"DSO_ALREADY_LOADED", ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED}, + #else + {"DSO_ALREADY_LOADED", 37, 110}, + #endif + #ifdef DSO_R_EMPTY_FILE_STRUCTURE + {"EMPTY_FILE_STRUCTURE", ERR_LIB_DSO, DSO_R_EMPTY_FILE_STRUCTURE}, + #else + {"EMPTY_FILE_STRUCTURE", 37, 113}, + #endif + #ifdef DSO_R_FAILURE + {"FAILURE", ERR_LIB_DSO, DSO_R_FAILURE}, + #else + {"FAILURE", 37, 114}, + #endif + #ifdef DSO_R_FILENAME_TOO_BIG + {"FILENAME_TOO_BIG", ERR_LIB_DSO, DSO_R_FILENAME_TOO_BIG}, + #else + {"FILENAME_TOO_BIG", 37, 101}, + #endif + #ifdef DSO_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_DSO, DSO_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 37, 102}, + #endif + #ifdef DSO_R_INCORRECT_FILE_SYNTAX + {"INCORRECT_FILE_SYNTAX", ERR_LIB_DSO, DSO_R_INCORRECT_FILE_SYNTAX}, + #else + {"INCORRECT_FILE_SYNTAX", 37, 115}, + #endif + #ifdef DSO_R_LOAD_FAILED + {"LOAD_FAILED", ERR_LIB_DSO, DSO_R_LOAD_FAILED}, + #else + {"LOAD_FAILED", 37, 103}, + #endif + #ifdef DSO_R_NAME_TRANSLATION_FAILED + {"NAME_TRANSLATION_FAILED", ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED}, + #else + {"NAME_TRANSLATION_FAILED", 37, 109}, + #endif + #ifdef DSO_R_NO_FILENAME + {"NO_FILENAME", ERR_LIB_DSO, DSO_R_NO_FILENAME}, + #else + {"NO_FILENAME", 37, 111}, + #endif + #ifdef DSO_R_NULL_HANDLE + {"NULL_HANDLE", ERR_LIB_DSO, DSO_R_NULL_HANDLE}, + #else + {"NULL_HANDLE", 37, 104}, + #endif + #ifdef DSO_R_SET_FILENAME_FAILED + {"SET_FILENAME_FAILED", ERR_LIB_DSO, DSO_R_SET_FILENAME_FAILED}, + #else + {"SET_FILENAME_FAILED", 37, 112}, + #endif + #ifdef DSO_R_STACK_ERROR + {"STACK_ERROR", ERR_LIB_DSO, DSO_R_STACK_ERROR}, + #else + {"STACK_ERROR", 37, 105}, + #endif + #ifdef DSO_R_SYM_FAILURE + {"SYM_FAILURE", ERR_LIB_DSO, DSO_R_SYM_FAILURE}, + #else + {"SYM_FAILURE", 37, 106}, + #endif + #ifdef DSO_R_UNLOAD_FAILED + {"UNLOAD_FAILED", ERR_LIB_DSO, DSO_R_UNLOAD_FAILED}, + #else + {"UNLOAD_FAILED", 37, 107}, + #endif + #ifdef DSO_R_UNSUPPORTED + {"UNSUPPORTED", ERR_LIB_DSO, DSO_R_UNSUPPORTED}, + #else + {"UNSUPPORTED", 37, 108}, + #endif + #ifdef EC_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_EC, EC_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 16, 115}, + #endif + #ifdef EC_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_EC, EC_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 16, 156}, + #endif + #ifdef EC_R_BIGNUM_OUT_OF_RANGE + {"BIGNUM_OUT_OF_RANGE", ERR_LIB_EC, EC_R_BIGNUM_OUT_OF_RANGE}, + #else + {"BIGNUM_OUT_OF_RANGE", 16, 144}, + #endif + #ifdef EC_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EC, EC_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 16, 100}, + #endif + #ifdef EC_R_CANNOT_INVERT + {"CANNOT_INVERT", ERR_LIB_EC, EC_R_CANNOT_INVERT}, + #else + {"CANNOT_INVERT", 16, 165}, + #endif + #ifdef EC_R_COORDINATES_OUT_OF_RANGE + {"COORDINATES_OUT_OF_RANGE", ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE}, + #else + {"COORDINATES_OUT_OF_RANGE", 16, 146}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDH + {"CURVE_DOES_NOT_SUPPORT_ECDH", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDH", 16, 160}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA + {"CURVE_DOES_NOT_SUPPORT_ECDSA", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA}, + #else + {"CURVE_DOES_NOT_SUPPORT_ECDSA", 16, 170}, + #endif + #ifdef EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING + {"CURVE_DOES_NOT_SUPPORT_SIGNING", ERR_LIB_EC, EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING}, + #else + {"CURVE_DOES_NOT_SUPPORT_SIGNING", 16, 159}, + #endif + #ifdef EC_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EC, EC_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 16, 142}, + #endif + #ifdef EC_R_DISCRIMINANT_IS_ZERO + {"DISCRIMINANT_IS_ZERO", ERR_LIB_EC, EC_R_DISCRIMINANT_IS_ZERO}, + #else + {"DISCRIMINANT_IS_ZERO", 16, 118}, + #endif + #ifdef EC_R_EC_GROUP_NEW_BY_NAME_FAILURE + {"EC_GROUP_NEW_BY_NAME_FAILURE", ERR_LIB_EC, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE}, + #else + {"EC_GROUP_NEW_BY_NAME_FAILURE", 16, 119}, + #endif + #ifdef EC_R_FAILED_MAKING_PUBLIC_KEY + {"FAILED_MAKING_PUBLIC_KEY", ERR_LIB_EC, EC_R_FAILED_MAKING_PUBLIC_KEY}, + #else + {"FAILED_MAKING_PUBLIC_KEY", 16, 166}, + #endif + #ifdef EC_R_FIELD_TOO_LARGE + {"FIELD_TOO_LARGE", ERR_LIB_EC, EC_R_FIELD_TOO_LARGE}, + #else + {"FIELD_TOO_LARGE", 16, 143}, + #endif + #ifdef EC_R_GF2M_NOT_SUPPORTED + {"GF2M_NOT_SUPPORTED", ERR_LIB_EC, EC_R_GF2M_NOT_SUPPORTED}, + #else + {"GF2M_NOT_SUPPORTED", 16, 147}, + #endif + #ifdef EC_R_GROUP2PKPARAMETERS_FAILURE + {"GROUP2PKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_GROUP2PKPARAMETERS_FAILURE}, + #else + {"GROUP2PKPARAMETERS_FAILURE", 16, 120}, + #endif + #ifdef EC_R_I2D_ECPKPARAMETERS_FAILURE + {"I2D_ECPKPARAMETERS_FAILURE", ERR_LIB_EC, EC_R_I2D_ECPKPARAMETERS_FAILURE}, + #else + {"I2D_ECPKPARAMETERS_FAILURE", 16, 121}, + #endif + #ifdef EC_R_INCOMPATIBLE_OBJECTS + {"INCOMPATIBLE_OBJECTS", ERR_LIB_EC, EC_R_INCOMPATIBLE_OBJECTS}, + #else + {"INCOMPATIBLE_OBJECTS", 16, 101}, + #endif + #ifdef EC_R_INVALID_A + {"INVALID_A", ERR_LIB_EC, EC_R_INVALID_A}, + #else + {"INVALID_A", 16, 168}, + #endif + #ifdef EC_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_EC, EC_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 16, 112}, + #endif + #ifdef EC_R_INVALID_B + {"INVALID_B", ERR_LIB_EC, EC_R_INVALID_B}, + #else + {"INVALID_B", 16, 169}, + #endif + #ifdef EC_R_INVALID_COFACTOR + {"INVALID_COFACTOR", ERR_LIB_EC, EC_R_INVALID_COFACTOR}, + #else + {"INVALID_COFACTOR", 16, 171}, + #endif + #ifdef EC_R_INVALID_COMPRESSED_POINT + {"INVALID_COMPRESSED_POINT", ERR_LIB_EC, EC_R_INVALID_COMPRESSED_POINT}, + #else + {"INVALID_COMPRESSED_POINT", 16, 110}, + #endif + #ifdef EC_R_INVALID_COMPRESSION_BIT + {"INVALID_COMPRESSION_BIT", ERR_LIB_EC, EC_R_INVALID_COMPRESSION_BIT}, + #else + {"INVALID_COMPRESSION_BIT", 16, 109}, + #endif + #ifdef EC_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_EC, EC_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 16, 141}, + #endif + #ifdef EC_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EC, EC_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 16, 151}, + #endif + #ifdef EC_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_EC, EC_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 16, 138}, + #endif + #ifdef EC_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_EC, EC_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 16, 102}, + #endif + #ifdef EC_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_EC, EC_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 16, 103}, + #endif + #ifdef EC_R_INVALID_FORM + {"INVALID_FORM", ERR_LIB_EC, EC_R_INVALID_FORM}, + #else + {"INVALID_FORM", 16, 104}, + #endif + #ifdef EC_R_INVALID_GENERATOR + {"INVALID_GENERATOR", ERR_LIB_EC, EC_R_INVALID_GENERATOR}, + #else + {"INVALID_GENERATOR", 16, 173}, + #endif + #ifdef EC_R_INVALID_GROUP_ORDER + {"INVALID_GROUP_ORDER", ERR_LIB_EC, EC_R_INVALID_GROUP_ORDER}, + #else + {"INVALID_GROUP_ORDER", 16, 122}, + #endif + #ifdef EC_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EC, EC_R_INVALID_KEY}, + #else + {"INVALID_KEY", 16, 116}, + #endif + #ifdef EC_R_INVALID_NAMED_GROUP_CONVERSION + {"INVALID_NAMED_GROUP_CONVERSION", ERR_LIB_EC, EC_R_INVALID_NAMED_GROUP_CONVERSION}, + #else + {"INVALID_NAMED_GROUP_CONVERSION", 16, 174}, + #endif + #ifdef EC_R_INVALID_OUTPUT_LENGTH + {"INVALID_OUTPUT_LENGTH", ERR_LIB_EC, EC_R_INVALID_OUTPUT_LENGTH}, + #else + {"INVALID_OUTPUT_LENGTH", 16, 161}, + #endif + #ifdef EC_R_INVALID_P + {"INVALID_P", ERR_LIB_EC, EC_R_INVALID_P}, + #else + {"INVALID_P", 16, 172}, + #endif + #ifdef EC_R_INVALID_PEER_KEY + {"INVALID_PEER_KEY", ERR_LIB_EC, EC_R_INVALID_PEER_KEY}, + #else + {"INVALID_PEER_KEY", 16, 133}, + #endif + #ifdef EC_R_INVALID_PENTANOMIAL_BASIS + {"INVALID_PENTANOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_PENTANOMIAL_BASIS}, + #else + {"INVALID_PENTANOMIAL_BASIS", 16, 132}, + #endif + #ifdef EC_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_EC, EC_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 16, 123}, + #endif + #ifdef EC_R_INVALID_SEED + {"INVALID_SEED", ERR_LIB_EC, EC_R_INVALID_SEED}, + #else + {"INVALID_SEED", 16, 175}, + #endif + #ifdef EC_R_INVALID_TRINOMIAL_BASIS + {"INVALID_TRINOMIAL_BASIS", ERR_LIB_EC, EC_R_INVALID_TRINOMIAL_BASIS}, + #else + {"INVALID_TRINOMIAL_BASIS", 16, 137}, + #endif + #ifdef EC_R_KDF_PARAMETER_ERROR + {"KDF_PARAMETER_ERROR", ERR_LIB_EC, EC_R_KDF_PARAMETER_ERROR}, + #else + {"KDF_PARAMETER_ERROR", 16, 148}, + #endif + #ifdef EC_R_KEYS_NOT_SET + {"KEYS_NOT_SET", ERR_LIB_EC, EC_R_KEYS_NOT_SET}, + #else + {"KEYS_NOT_SET", 16, 140}, + #endif + #ifdef EC_R_LADDER_POST_FAILURE + {"LADDER_POST_FAILURE", ERR_LIB_EC, EC_R_LADDER_POST_FAILURE}, + #else + {"LADDER_POST_FAILURE", 16, 136}, + #endif + #ifdef EC_R_LADDER_PRE_FAILURE + {"LADDER_PRE_FAILURE", ERR_LIB_EC, EC_R_LADDER_PRE_FAILURE}, + #else + {"LADDER_PRE_FAILURE", 16, 153}, + #endif + #ifdef EC_R_LADDER_STEP_FAILURE + {"LADDER_STEP_FAILURE", ERR_LIB_EC, EC_R_LADDER_STEP_FAILURE}, + #else + {"LADDER_STEP_FAILURE", 16, 162}, + #endif + #ifdef EC_R_MISSING_OID + {"MISSING_OID", ERR_LIB_EC, EC_R_MISSING_OID}, + #else + {"MISSING_OID", 16, 167}, + #endif + #ifdef EC_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EC, EC_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 16, 124}, + #endif + #ifdef EC_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_EC, EC_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 16, 125}, + #endif + #ifdef EC_R_NEED_NEW_SETUP_VALUES + {"NEED_NEW_SETUP_VALUES", ERR_LIB_EC, EC_R_NEED_NEW_SETUP_VALUES}, + #else + {"NEED_NEW_SETUP_VALUES", 16, 157}, + #endif + #ifdef EC_R_NOT_A_NIST_PRIME + {"NOT_A_NIST_PRIME", ERR_LIB_EC, EC_R_NOT_A_NIST_PRIME}, + #else + {"NOT_A_NIST_PRIME", 16, 135}, + #endif + #ifdef EC_R_NOT_IMPLEMENTED + {"NOT_IMPLEMENTED", ERR_LIB_EC, EC_R_NOT_IMPLEMENTED}, + #else + {"NOT_IMPLEMENTED", 16, 126}, + #endif + #ifdef EC_R_NOT_INITIALIZED + {"NOT_INITIALIZED", ERR_LIB_EC, EC_R_NOT_INITIALIZED}, + #else + {"NOT_INITIALIZED", 16, 111}, + #endif + #ifdef EC_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_EC, EC_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 16, 139}, + #endif + #ifdef EC_R_NO_PRIVATE_VALUE + {"NO_PRIVATE_VALUE", ERR_LIB_EC, EC_R_NO_PRIVATE_VALUE}, + #else + {"NO_PRIVATE_VALUE", 16, 154}, + #endif + #ifdef EC_R_OPERATION_NOT_SUPPORTED + {"OPERATION_NOT_SUPPORTED", ERR_LIB_EC, EC_R_OPERATION_NOT_SUPPORTED}, + #else + {"OPERATION_NOT_SUPPORTED", 16, 152}, + #endif + #ifdef EC_R_PASSED_NULL_PARAMETER + {"PASSED_NULL_PARAMETER", ERR_LIB_EC, EC_R_PASSED_NULL_PARAMETER}, + #else + {"PASSED_NULL_PARAMETER", 16, 134}, + #endif + #ifdef EC_R_PEER_KEY_ERROR + {"PEER_KEY_ERROR", ERR_LIB_EC, EC_R_PEER_KEY_ERROR}, + #else + {"PEER_KEY_ERROR", 16, 149}, + #endif + #ifdef EC_R_POINT_ARITHMETIC_FAILURE + {"POINT_ARITHMETIC_FAILURE", ERR_LIB_EC, EC_R_POINT_ARITHMETIC_FAILURE}, + #else + {"POINT_ARITHMETIC_FAILURE", 16, 155}, + #endif + #ifdef EC_R_POINT_AT_INFINITY + {"POINT_AT_INFINITY", ERR_LIB_EC, EC_R_POINT_AT_INFINITY}, + #else + {"POINT_AT_INFINITY", 16, 106}, + #endif + #ifdef EC_R_POINT_COORDINATES_BLIND_FAILURE + {"POINT_COORDINATES_BLIND_FAILURE", ERR_LIB_EC, EC_R_POINT_COORDINATES_BLIND_FAILURE}, + #else + {"POINT_COORDINATES_BLIND_FAILURE", 16, 163}, + #endif + #ifdef EC_R_POINT_IS_NOT_ON_CURVE + {"POINT_IS_NOT_ON_CURVE", ERR_LIB_EC, EC_R_POINT_IS_NOT_ON_CURVE}, + #else + {"POINT_IS_NOT_ON_CURVE", 16, 107}, + #endif + #ifdef EC_R_RANDOM_NUMBER_GENERATION_FAILED + {"RANDOM_NUMBER_GENERATION_FAILED", ERR_LIB_EC, EC_R_RANDOM_NUMBER_GENERATION_FAILED}, + #else + {"RANDOM_NUMBER_GENERATION_FAILED", 16, 158}, + #endif + #ifdef EC_R_SHARED_INFO_ERROR + {"SHARED_INFO_ERROR", ERR_LIB_EC, EC_R_SHARED_INFO_ERROR}, + #else + {"SHARED_INFO_ERROR", 16, 150}, + #endif + #ifdef EC_R_SLOT_FULL + {"SLOT_FULL", ERR_LIB_EC, EC_R_SLOT_FULL}, + #else + {"SLOT_FULL", 16, 108}, + #endif + #ifdef EC_R_UNDEFINED_GENERATOR + {"UNDEFINED_GENERATOR", ERR_LIB_EC, EC_R_UNDEFINED_GENERATOR}, + #else + {"UNDEFINED_GENERATOR", 16, 113}, + #endif + #ifdef EC_R_UNDEFINED_ORDER + {"UNDEFINED_ORDER", ERR_LIB_EC, EC_R_UNDEFINED_ORDER}, + #else + {"UNDEFINED_ORDER", 16, 128}, + #endif + #ifdef EC_R_UNKNOWN_COFACTOR + {"UNKNOWN_COFACTOR", ERR_LIB_EC, EC_R_UNKNOWN_COFACTOR}, + #else + {"UNKNOWN_COFACTOR", 16, 164}, + #endif + #ifdef EC_R_UNKNOWN_GROUP + {"UNKNOWN_GROUP", ERR_LIB_EC, EC_R_UNKNOWN_GROUP}, + #else + {"UNKNOWN_GROUP", 16, 129}, + #endif + #ifdef EC_R_UNKNOWN_ORDER + {"UNKNOWN_ORDER", ERR_LIB_EC, EC_R_UNKNOWN_ORDER}, + #else + {"UNKNOWN_ORDER", 16, 114}, + #endif + #ifdef EC_R_UNSUPPORTED_FIELD + {"UNSUPPORTED_FIELD", ERR_LIB_EC, EC_R_UNSUPPORTED_FIELD}, + #else + {"UNSUPPORTED_FIELD", 16, 131}, + #endif + #ifdef EC_R_WRONG_CURVE_PARAMETERS + {"WRONG_CURVE_PARAMETERS", ERR_LIB_EC, EC_R_WRONG_CURVE_PARAMETERS}, + #else + {"WRONG_CURVE_PARAMETERS", 16, 145}, + #endif + #ifdef EC_R_WRONG_ORDER + {"WRONG_ORDER", ERR_LIB_EC, EC_R_WRONG_ORDER}, + #else + {"WRONG_ORDER", 16, 130}, + #endif + #ifdef ENGINE_R_ALREADY_LOADED + {"ALREADY_LOADED", ERR_LIB_ENGINE, ENGINE_R_ALREADY_LOADED}, + #else + {"ALREADY_LOADED", 38, 100}, + #endif + #ifdef ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER + {"ARGUMENT_IS_NOT_A_NUMBER", ERR_LIB_ENGINE, ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER}, + #else + {"ARGUMENT_IS_NOT_A_NUMBER", 38, 133}, + #endif + #ifdef ENGINE_R_CMD_NOT_EXECUTABLE + {"CMD_NOT_EXECUTABLE", ERR_LIB_ENGINE, ENGINE_R_CMD_NOT_EXECUTABLE}, + #else + {"CMD_NOT_EXECUTABLE", 38, 134}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_INPUT + {"COMMAND_TAKES_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_INPUT}, + #else + {"COMMAND_TAKES_INPUT", 38, 135}, + #endif + #ifdef ENGINE_R_COMMAND_TAKES_NO_INPUT + {"COMMAND_TAKES_NO_INPUT", ERR_LIB_ENGINE, ENGINE_R_COMMAND_TAKES_NO_INPUT}, + #else + {"COMMAND_TAKES_NO_INPUT", 38, 136}, + #endif + #ifdef ENGINE_R_CONFLICTING_ENGINE_ID + {"CONFLICTING_ENGINE_ID", ERR_LIB_ENGINE, ENGINE_R_CONFLICTING_ENGINE_ID}, + #else + {"CONFLICTING_ENGINE_ID", 38, 103}, + #endif + #ifdef ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED + {"CTRL_COMMAND_NOT_IMPLEMENTED", ERR_LIB_ENGINE, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED}, + #else + {"CTRL_COMMAND_NOT_IMPLEMENTED", 38, 119}, + #endif + #ifdef ENGINE_R_DSO_FAILURE + {"DSO_FAILURE", ERR_LIB_ENGINE, ENGINE_R_DSO_FAILURE}, + #else + {"DSO_FAILURE", 38, 104}, + #endif + #ifdef ENGINE_R_DSO_NOT_FOUND + {"DSO_NOT_FOUND", ERR_LIB_ENGINE, ENGINE_R_DSO_NOT_FOUND}, + #else + {"DSO_NOT_FOUND", 38, 132}, + #endif + #ifdef ENGINE_R_ENGINES_SECTION_ERROR + {"ENGINES_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINES_SECTION_ERROR}, + #else + {"ENGINES_SECTION_ERROR", 38, 148}, + #endif + #ifdef ENGINE_R_ENGINE_CONFIGURATION_ERROR + {"ENGINE_CONFIGURATION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_CONFIGURATION_ERROR}, + #else + {"ENGINE_CONFIGURATION_ERROR", 38, 102}, + #endif + #ifdef ENGINE_R_ENGINE_IS_NOT_IN_LIST + {"ENGINE_IS_NOT_IN_LIST", ERR_LIB_ENGINE, ENGINE_R_ENGINE_IS_NOT_IN_LIST}, + #else + {"ENGINE_IS_NOT_IN_LIST", 38, 105}, + #endif + #ifdef ENGINE_R_ENGINE_SECTION_ERROR + {"ENGINE_SECTION_ERROR", ERR_LIB_ENGINE, ENGINE_R_ENGINE_SECTION_ERROR}, + #else + {"ENGINE_SECTION_ERROR", 38, 149}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PRIVATE_KEY + {"FAILED_LOADING_PRIVATE_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PRIVATE_KEY}, + #else + {"FAILED_LOADING_PRIVATE_KEY", 38, 128}, + #endif + #ifdef ENGINE_R_FAILED_LOADING_PUBLIC_KEY + {"FAILED_LOADING_PUBLIC_KEY", ERR_LIB_ENGINE, ENGINE_R_FAILED_LOADING_PUBLIC_KEY}, + #else + {"FAILED_LOADING_PUBLIC_KEY", 38, 129}, + #endif + #ifdef ENGINE_R_FINISH_FAILED + {"FINISH_FAILED", ERR_LIB_ENGINE, ENGINE_R_FINISH_FAILED}, + #else + {"FINISH_FAILED", 38, 106}, + #endif + #ifdef ENGINE_R_ID_OR_NAME_MISSING + {"ID_OR_NAME_MISSING", ERR_LIB_ENGINE, ENGINE_R_ID_OR_NAME_MISSING}, + #else + {"ID_OR_NAME_MISSING", 38, 108}, + #endif + #ifdef ENGINE_R_INIT_FAILED + {"INIT_FAILED", ERR_LIB_ENGINE, ENGINE_R_INIT_FAILED}, + #else + {"INIT_FAILED", 38, 109}, + #endif + #ifdef ENGINE_R_INTERNAL_LIST_ERROR + {"INTERNAL_LIST_ERROR", ERR_LIB_ENGINE, ENGINE_R_INTERNAL_LIST_ERROR}, + #else + {"INTERNAL_LIST_ERROR", 38, 110}, + #endif + #ifdef ENGINE_R_INVALID_ARGUMENT + {"INVALID_ARGUMENT", ERR_LIB_ENGINE, ENGINE_R_INVALID_ARGUMENT}, + #else + {"INVALID_ARGUMENT", 38, 143}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NAME + {"INVALID_CMD_NAME", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NAME}, + #else + {"INVALID_CMD_NAME", 38, 137}, + #endif + #ifdef ENGINE_R_INVALID_CMD_NUMBER + {"INVALID_CMD_NUMBER", ERR_LIB_ENGINE, ENGINE_R_INVALID_CMD_NUMBER}, + #else + {"INVALID_CMD_NUMBER", 38, 138}, + #endif + #ifdef ENGINE_R_INVALID_INIT_VALUE + {"INVALID_INIT_VALUE", ERR_LIB_ENGINE, ENGINE_R_INVALID_INIT_VALUE}, + #else + {"INVALID_INIT_VALUE", 38, 151}, + #endif + #ifdef ENGINE_R_INVALID_STRING + {"INVALID_STRING", ERR_LIB_ENGINE, ENGINE_R_INVALID_STRING}, + #else + {"INVALID_STRING", 38, 150}, + #endif + #ifdef ENGINE_R_NOT_INITIALISED + {"NOT_INITIALISED", ERR_LIB_ENGINE, ENGINE_R_NOT_INITIALISED}, + #else + {"NOT_INITIALISED", 38, 117}, + #endif + #ifdef ENGINE_R_NOT_LOADED + {"NOT_LOADED", ERR_LIB_ENGINE, ENGINE_R_NOT_LOADED}, + #else + {"NOT_LOADED", 38, 112}, + #endif + #ifdef ENGINE_R_NO_CONTROL_FUNCTION + {"NO_CONTROL_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_CONTROL_FUNCTION}, + #else + {"NO_CONTROL_FUNCTION", 38, 120}, + #endif + #ifdef ENGINE_R_NO_INDEX + {"NO_INDEX", ERR_LIB_ENGINE, ENGINE_R_NO_INDEX}, + #else + {"NO_INDEX", 38, 144}, + #endif + #ifdef ENGINE_R_NO_LOAD_FUNCTION + {"NO_LOAD_FUNCTION", ERR_LIB_ENGINE, ENGINE_R_NO_LOAD_FUNCTION}, + #else + {"NO_LOAD_FUNCTION", 38, 125}, + #endif + #ifdef ENGINE_R_NO_REFERENCE + {"NO_REFERENCE", ERR_LIB_ENGINE, ENGINE_R_NO_REFERENCE}, + #else + {"NO_REFERENCE", 38, 130}, + #endif + #ifdef ENGINE_R_NO_SUCH_ENGINE + {"NO_SUCH_ENGINE", ERR_LIB_ENGINE, ENGINE_R_NO_SUCH_ENGINE}, + #else + {"NO_SUCH_ENGINE", 38, 116}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_CIPHER + {"UNIMPLEMENTED_CIPHER", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_CIPHER}, + #else + {"UNIMPLEMENTED_CIPHER", 38, 146}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_DIGEST + {"UNIMPLEMENTED_DIGEST", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_DIGEST}, + #else + {"UNIMPLEMENTED_DIGEST", 38, 147}, + #endif + #ifdef ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", ERR_LIB_ENGINE, ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD}, + #else + {"UNIMPLEMENTED_PUBLIC_KEY_METHOD", 38, 101}, + #endif + #ifdef ENGINE_R_VERSION_INCOMPATIBILITY + {"VERSION_INCOMPATIBILITY", ERR_LIB_ENGINE, ENGINE_R_VERSION_INCOMPATIBILITY}, + #else + {"VERSION_INCOMPATIBILITY", 38, 145}, + #endif + #ifdef ESS_R_EMPTY_ESS_CERT_ID_LIST + {"EMPTY_ESS_CERT_ID_LIST", ERR_LIB_ESS, ESS_R_EMPTY_ESS_CERT_ID_LIST}, + #else + {"EMPTY_ESS_CERT_ID_LIST", 54, 107}, + #endif + #ifdef ESS_R_ESS_CERT_DIGEST_ERROR + {"ESS_CERT_DIGEST_ERROR", ERR_LIB_ESS, ESS_R_ESS_CERT_DIGEST_ERROR}, + #else + {"ESS_CERT_DIGEST_ERROR", 54, 103}, + #endif + #ifdef ESS_R_ESS_CERT_ID_NOT_FOUND + {"ESS_CERT_ID_NOT_FOUND", ERR_LIB_ESS, ESS_R_ESS_CERT_ID_NOT_FOUND}, + #else + {"ESS_CERT_ID_NOT_FOUND", 54, 104}, + #endif + #ifdef ESS_R_ESS_CERT_ID_WRONG_ORDER + {"ESS_CERT_ID_WRONG_ORDER", ERR_LIB_ESS, ESS_R_ESS_CERT_ID_WRONG_ORDER}, + #else + {"ESS_CERT_ID_WRONG_ORDER", 54, 105}, + #endif + #ifdef ESS_R_ESS_DIGEST_ALG_UNKNOWN + {"ESS_DIGEST_ALG_UNKNOWN", ERR_LIB_ESS, ESS_R_ESS_DIGEST_ALG_UNKNOWN}, + #else + {"ESS_DIGEST_ALG_UNKNOWN", 54, 106}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 54, 102}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERT_ADD_ERROR + {"ESS_SIGNING_CERT_ADD_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERT_ADD_ERROR}, + #else + {"ESS_SIGNING_CERT_ADD_ERROR", 54, 100}, + #endif + #ifdef ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR + {"ESS_SIGNING_CERT_V2_ADD_ERROR", ERR_LIB_ESS, ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR}, + #else + {"ESS_SIGNING_CERT_V2_ADD_ERROR", 54, 101}, + #endif + #ifdef ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE + {"MISSING_SIGNING_CERTIFICATE_ATTRIBUTE", ERR_LIB_ESS, ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE}, + #else + {"MISSING_SIGNING_CERTIFICATE_ATTRIBUTE", 54, 108}, + #endif + #ifdef EVP_R_AES_KEY_SETUP_FAILED + {"AES_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED}, + #else + {"AES_KEY_SETUP_FAILED", 6, 143}, + #endif + #ifdef EVP_R_ARIA_KEY_SETUP_FAILED + {"ARIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_ARIA_KEY_SETUP_FAILED}, + #else + {"ARIA_KEY_SETUP_FAILED", 6, 176}, + #endif + #ifdef EVP_R_BAD_ALGORITHM_NAME + {"BAD_ALGORITHM_NAME", ERR_LIB_EVP, EVP_R_BAD_ALGORITHM_NAME}, + #else + {"BAD_ALGORITHM_NAME", 6, 200}, + #endif + #ifdef EVP_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_EVP, EVP_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 6, 100}, + #endif + #ifdef EVP_R_BAD_KEY_LENGTH + {"BAD_KEY_LENGTH", ERR_LIB_EVP, EVP_R_BAD_KEY_LENGTH}, + #else + {"BAD_KEY_LENGTH", 6, 195}, + #endif + #ifdef EVP_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_EVP, EVP_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 6, 155}, + #endif + #ifdef EVP_R_CACHE_CONSTANTS_FAILED + {"CACHE_CONSTANTS_FAILED", ERR_LIB_EVP, EVP_R_CACHE_CONSTANTS_FAILED}, + #else + {"CACHE_CONSTANTS_FAILED", 6, 225}, + #endif + #ifdef EVP_R_CAMELLIA_KEY_SETUP_FAILED + {"CAMELLIA_KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_CAMELLIA_KEY_SETUP_FAILED}, + #else + {"CAMELLIA_KEY_SETUP_FAILED", 6, 157}, + #endif + #ifdef EVP_R_CANNOT_GET_PARAMETERS + {"CANNOT_GET_PARAMETERS", ERR_LIB_EVP, EVP_R_CANNOT_GET_PARAMETERS}, + #else + {"CANNOT_GET_PARAMETERS", 6, 197}, + #endif + #ifdef EVP_R_CANNOT_SET_PARAMETERS + {"CANNOT_SET_PARAMETERS", ERR_LIB_EVP, EVP_R_CANNOT_SET_PARAMETERS}, + #else + {"CANNOT_SET_PARAMETERS", 6, 198}, + #endif + #ifdef EVP_R_CIPHER_NOT_GCM_MODE + {"CIPHER_NOT_GCM_MODE", ERR_LIB_EVP, EVP_R_CIPHER_NOT_GCM_MODE}, + #else + {"CIPHER_NOT_GCM_MODE", 6, 184}, + #endif + #ifdef EVP_R_CIPHER_PARAMETER_ERROR + {"CIPHER_PARAMETER_ERROR", ERR_LIB_EVP, EVP_R_CIPHER_PARAMETER_ERROR}, + #else + {"CIPHER_PARAMETER_ERROR", 6, 122}, + #endif + #ifdef EVP_R_COMMAND_NOT_SUPPORTED + {"COMMAND_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_COMMAND_NOT_SUPPORTED}, + #else + {"COMMAND_NOT_SUPPORTED", 6, 147}, + #endif + #ifdef EVP_R_CONFLICTING_ALGORITHM_NAME + {"CONFLICTING_ALGORITHM_NAME", ERR_LIB_EVP, EVP_R_CONFLICTING_ALGORITHM_NAME}, + #else + {"CONFLICTING_ALGORITHM_NAME", 6, 201}, + #endif + #ifdef EVP_R_COPY_ERROR + {"COPY_ERROR", ERR_LIB_EVP, EVP_R_COPY_ERROR}, + #else + {"COPY_ERROR", 6, 173}, + #endif + #ifdef EVP_R_CTRL_NOT_IMPLEMENTED + {"CTRL_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_NOT_IMPLEMENTED}, + #else + {"CTRL_NOT_IMPLEMENTED", 6, 132}, + #endif + #ifdef EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED + {"CTRL_OPERATION_NOT_IMPLEMENTED", ERR_LIB_EVP, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED}, + #else + {"CTRL_OPERATION_NOT_IMPLEMENTED", 6, 133}, + #endif + #ifdef EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH}, + #else + {"DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH", 6, 138}, + #endif + #ifdef EVP_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_EVP, EVP_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 6, 114}, + #endif + #ifdef EVP_R_DEFAULT_QUERY_PARSE_ERROR + {"DEFAULT_QUERY_PARSE_ERROR", ERR_LIB_EVP, EVP_R_DEFAULT_QUERY_PARSE_ERROR}, + #else + {"DEFAULT_QUERY_PARSE_ERROR", 6, 210}, + #endif + #ifdef EVP_R_DIFFERENT_KEY_TYPES + {"DIFFERENT_KEY_TYPES", ERR_LIB_EVP, EVP_R_DIFFERENT_KEY_TYPES}, + #else + {"DIFFERENT_KEY_TYPES", 6, 101}, + #endif + #ifdef EVP_R_DIFFERENT_PARAMETERS + {"DIFFERENT_PARAMETERS", ERR_LIB_EVP, EVP_R_DIFFERENT_PARAMETERS}, + #else + {"DIFFERENT_PARAMETERS", 6, 153}, + #endif + #ifdef EVP_R_ERROR_LOADING_SECTION + {"ERROR_LOADING_SECTION", ERR_LIB_EVP, EVP_R_ERROR_LOADING_SECTION}, + #else + {"ERROR_LOADING_SECTION", 6, 165}, + #endif + #ifdef EVP_R_ERROR_SETTING_FIPS_MODE + {"ERROR_SETTING_FIPS_MODE", ERR_LIB_EVP, EVP_R_ERROR_SETTING_FIPS_MODE}, + #else + {"ERROR_SETTING_FIPS_MODE", 6, 166}, + #endif + #ifdef EVP_R_EXPECTING_AN_HMAC_KEY + {"EXPECTING_AN_HMAC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY}, + #else + {"EXPECTING_AN_HMAC_KEY", 6, 174}, + #endif + #ifdef EVP_R_EXPECTING_AN_RSA_KEY + {"EXPECTING_AN_RSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY}, + #else + {"EXPECTING_AN_RSA_KEY", 6, 127}, + #endif + #ifdef EVP_R_EXPECTING_A_DH_KEY + {"EXPECTING_A_DH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DH_KEY}, + #else + {"EXPECTING_A_DH_KEY", 6, 128}, + #endif + #ifdef EVP_R_EXPECTING_A_DSA_KEY + {"EXPECTING_A_DSA_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_DSA_KEY}, + #else + {"EXPECTING_A_DSA_KEY", 6, 129}, + #endif + #ifdef EVP_R_EXPECTING_A_ECX_KEY + {"EXPECTING_A_ECX_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_ECX_KEY}, + #else + {"EXPECTING_A_ECX_KEY", 6, 219}, + #endif + #ifdef EVP_R_EXPECTING_A_EC_KEY + {"EXPECTING_A_EC_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_EC_KEY}, + #else + {"EXPECTING_A_EC_KEY", 6, 142}, + #endif + #ifdef EVP_R_EXPECTING_A_POLY1305_KEY + {"EXPECTING_A_POLY1305_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY}, + #else + {"EXPECTING_A_POLY1305_KEY", 6, 164}, + #endif + #ifdef EVP_R_EXPECTING_A_SIPHASH_KEY + {"EXPECTING_A_SIPHASH_KEY", ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY}, + #else + {"EXPECTING_A_SIPHASH_KEY", 6, 175}, + #endif + #ifdef EVP_R_FINAL_ERROR + {"FINAL_ERROR", ERR_LIB_EVP, EVP_R_FINAL_ERROR}, + #else + {"FINAL_ERROR", 6, 188}, + #endif + #ifdef EVP_R_FIPS_MODE_NOT_SUPPORTED + {"FIPS_MODE_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_FIPS_MODE_NOT_SUPPORTED}, + #else + {"FIPS_MODE_NOT_SUPPORTED", 6, 167}, + #endif + #ifdef EVP_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_EVP, EVP_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 6, 214}, + #endif + #ifdef EVP_R_GET_RAW_KEY_FAILED + {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED}, + #else + {"GET_RAW_KEY_FAILED", 6, 182}, + #endif + #ifdef EVP_R_ILLEGAL_SCRYPT_PARAMETERS + {"ILLEGAL_SCRYPT_PARAMETERS", ERR_LIB_EVP, EVP_R_ILLEGAL_SCRYPT_PARAMETERS}, + #else + {"ILLEGAL_SCRYPT_PARAMETERS", 6, 171}, + #endif + #ifdef EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS + {"INACCESSIBLE_DOMAIN_PARAMETERS", ERR_LIB_EVP, EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS}, + #else + {"INACCESSIBLE_DOMAIN_PARAMETERS", 6, 204}, + #endif + #ifdef EVP_R_INACCESSIBLE_KEY + {"INACCESSIBLE_KEY", ERR_LIB_EVP, EVP_R_INACCESSIBLE_KEY}, + #else + {"INACCESSIBLE_KEY", 6, 203}, + #endif + #ifdef EVP_R_INITIALIZATION_ERROR + {"INITIALIZATION_ERROR", ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR}, + #else + {"INITIALIZATION_ERROR", 6, 134}, + #endif + #ifdef EVP_R_INPUT_NOT_INITIALIZED + {"INPUT_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_INPUT_NOT_INITIALIZED}, + #else + {"INPUT_NOT_INITIALIZED", 6, 111}, + #endif + #ifdef EVP_R_INVALID_CUSTOM_LENGTH + {"INVALID_CUSTOM_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_CUSTOM_LENGTH}, + #else + {"INVALID_CUSTOM_LENGTH", 6, 185}, + #endif + #ifdef EVP_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_EVP, EVP_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 6, 152}, + #endif + #ifdef EVP_R_INVALID_FIPS_MODE + {"INVALID_FIPS_MODE", ERR_LIB_EVP, EVP_R_INVALID_FIPS_MODE}, + #else + {"INVALID_FIPS_MODE", 6, 168}, + #endif + #ifdef EVP_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 6, 194}, + #endif + #ifdef EVP_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_EVP, EVP_R_INVALID_KEY}, + #else + {"INVALID_KEY", 6, 163}, + #endif + #ifdef EVP_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 6, 130}, + #endif + #ifdef EVP_R_INVALID_LENGTH + {"INVALID_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_LENGTH}, + #else + {"INVALID_LENGTH", 6, 221}, + #endif + #ifdef EVP_R_INVALID_NULL_ALGORITHM + {"INVALID_NULL_ALGORITHM", ERR_LIB_EVP, EVP_R_INVALID_NULL_ALGORITHM}, + #else + {"INVALID_NULL_ALGORITHM", 6, 218}, + #endif + #ifdef EVP_R_INVALID_OPERATION + {"INVALID_OPERATION", ERR_LIB_EVP, EVP_R_INVALID_OPERATION}, + #else + {"INVALID_OPERATION", 6, 148}, + #endif + #ifdef EVP_R_INVALID_PROVIDER_FUNCTIONS + {"INVALID_PROVIDER_FUNCTIONS", ERR_LIB_EVP, EVP_R_INVALID_PROVIDER_FUNCTIONS}, + #else + {"INVALID_PROVIDER_FUNCTIONS", 6, 193}, + #endif + #ifdef EVP_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 6, 186}, + #endif + #ifdef EVP_R_INVALID_SECRET_LENGTH + {"INVALID_SECRET_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SECRET_LENGTH}, + #else + {"INVALID_SECRET_LENGTH", 6, 223}, + #endif + #ifdef EVP_R_INVALID_SEED_LENGTH + {"INVALID_SEED_LENGTH", ERR_LIB_EVP, EVP_R_INVALID_SEED_LENGTH}, + #else + {"INVALID_SEED_LENGTH", 6, 220}, + #endif + #ifdef EVP_R_INVALID_VALUE + {"INVALID_VALUE", ERR_LIB_EVP, EVP_R_INVALID_VALUE}, + #else + {"INVALID_VALUE", 6, 222}, + #endif + #ifdef EVP_R_KEYMGMT_EXPORT_FAILURE + {"KEYMGMT_EXPORT_FAILURE", ERR_LIB_EVP, EVP_R_KEYMGMT_EXPORT_FAILURE}, + #else + {"KEYMGMT_EXPORT_FAILURE", 6, 205}, + #endif + #ifdef EVP_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_EVP, EVP_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 6, 180}, + #endif + #ifdef EVP_R_LOCKING_NOT_SUPPORTED + {"LOCKING_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_LOCKING_NOT_SUPPORTED}, + #else + {"LOCKING_NOT_SUPPORTED", 6, 213}, + #endif + #ifdef EVP_R_MEMORY_LIMIT_EXCEEDED + {"MEMORY_LIMIT_EXCEEDED", ERR_LIB_EVP, EVP_R_MEMORY_LIMIT_EXCEEDED}, + #else + {"MEMORY_LIMIT_EXCEEDED", 6, 172}, + #endif + #ifdef EVP_R_MESSAGE_DIGEST_IS_NULL + {"MESSAGE_DIGEST_IS_NULL", ERR_LIB_EVP, EVP_R_MESSAGE_DIGEST_IS_NULL}, + #else + {"MESSAGE_DIGEST_IS_NULL", 6, 159}, + #endif + #ifdef EVP_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 6, 144}, + #endif + #ifdef EVP_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_EVP, EVP_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 6, 103}, + #endif + #ifdef EVP_R_NOT_ABLE_TO_COPY_CTX + {"NOT_ABLE_TO_COPY_CTX", ERR_LIB_EVP, EVP_R_NOT_ABLE_TO_COPY_CTX}, + #else + {"NOT_ABLE_TO_COPY_CTX", 6, 190}, + #endif + #ifdef EVP_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_EVP, EVP_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 6, 178}, + #endif + #ifdef EVP_R_NO_CIPHER_SET + {"NO_CIPHER_SET", ERR_LIB_EVP, EVP_R_NO_CIPHER_SET}, + #else + {"NO_CIPHER_SET", 6, 131}, + #endif + #ifdef EVP_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_EVP, EVP_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 6, 158}, + #endif + #ifdef EVP_R_NO_DIGEST_SET + {"NO_DIGEST_SET", ERR_LIB_EVP, EVP_R_NO_DIGEST_SET}, + #else + {"NO_DIGEST_SET", 6, 139}, + #endif + #ifdef EVP_R_NO_IMPORT_FUNCTION + {"NO_IMPORT_FUNCTION", ERR_LIB_EVP, EVP_R_NO_IMPORT_FUNCTION}, + #else + {"NO_IMPORT_FUNCTION", 6, 206}, + #endif + #ifdef EVP_R_NO_KEYMGMT_AVAILABLE + {"NO_KEYMGMT_AVAILABLE", ERR_LIB_EVP, EVP_R_NO_KEYMGMT_AVAILABLE}, + #else + {"NO_KEYMGMT_AVAILABLE", 6, 199}, + #endif + #ifdef EVP_R_NO_KEYMGMT_PRESENT + {"NO_KEYMGMT_PRESENT", ERR_LIB_EVP, EVP_R_NO_KEYMGMT_PRESENT}, + #else + {"NO_KEYMGMT_PRESENT", 6, 196}, + #endif + #ifdef EVP_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_EVP, EVP_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 6, 154}, + #endif + #ifdef EVP_R_NO_OPERATION_SET + {"NO_OPERATION_SET", ERR_LIB_EVP, EVP_R_NO_OPERATION_SET}, + #else + {"NO_OPERATION_SET", 6, 149}, + #endif + #ifdef EVP_R_NULL_MAC_PKEY_CTX + {"NULL_MAC_PKEY_CTX", ERR_LIB_EVP, EVP_R_NULL_MAC_PKEY_CTX}, + #else + {"NULL_MAC_PKEY_CTX", 6, 208}, + #endif + #ifdef EVP_R_ONLY_ONESHOT_SUPPORTED + {"ONLY_ONESHOT_SUPPORTED", ERR_LIB_EVP, EVP_R_ONLY_ONESHOT_SUPPORTED}, + #else + {"ONLY_ONESHOT_SUPPORTED", 6, 177}, + #endif + #ifdef EVP_R_OPERATION_NOT_INITIALIZED + {"OPERATION_NOT_INITIALIZED", ERR_LIB_EVP, EVP_R_OPERATION_NOT_INITIALIZED}, + #else + {"OPERATION_NOT_INITIALIZED", 6, 151}, + #endif + #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150}, + #endif + #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW + {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW}, + #else + {"OUTPUT_WOULD_OVERFLOW", 6, 202}, + #endif + #ifdef EVP_R_PARAMETER_TOO_LARGE + {"PARAMETER_TOO_LARGE", ERR_LIB_EVP, EVP_R_PARAMETER_TOO_LARGE}, + #else + {"PARAMETER_TOO_LARGE", 6, 187}, + #endif + #ifdef EVP_R_PARTIALLY_OVERLAPPING + {"PARTIALLY_OVERLAPPING", ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING}, + #else + {"PARTIALLY_OVERLAPPING", 6, 162}, + #endif + #ifdef EVP_R_PBKDF2_ERROR + {"PBKDF2_ERROR", ERR_LIB_EVP, EVP_R_PBKDF2_ERROR}, + #else + {"PBKDF2_ERROR", 6, 181}, + #endif + #ifdef EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", ERR_LIB_EVP, EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED}, + #else + {"PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED", 6, 179}, + #endif + #ifdef EVP_R_PRIVATE_KEY_DECODE_ERROR + {"PRIVATE_KEY_DECODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_DECODE_ERROR}, + #else + {"PRIVATE_KEY_DECODE_ERROR", 6, 145}, + #endif + #ifdef EVP_R_PRIVATE_KEY_ENCODE_ERROR + {"PRIVATE_KEY_ENCODE_ERROR", ERR_LIB_EVP, EVP_R_PRIVATE_KEY_ENCODE_ERROR}, + #else + {"PRIVATE_KEY_ENCODE_ERROR", 6, 146}, + #endif + #ifdef EVP_R_PUBLIC_KEY_NOT_RSA + {"PUBLIC_KEY_NOT_RSA", ERR_LIB_EVP, EVP_R_PUBLIC_KEY_NOT_RSA}, + #else + {"PUBLIC_KEY_NOT_RSA", 6, 106}, + #endif + #ifdef EVP_R_SET_DEFAULT_PROPERTY_FAILURE + {"SET_DEFAULT_PROPERTY_FAILURE", ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE}, + #else + {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209}, + #endif + #ifdef EVP_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 6, 183}, + #endif + #ifdef EVP_R_UNABLE_TO_ENABLE_LOCKING + {"UNABLE_TO_ENABLE_LOCKING", ERR_LIB_EVP, EVP_R_UNABLE_TO_ENABLE_LOCKING}, + #else + {"UNABLE_TO_ENABLE_LOCKING", 6, 212}, + #endif + #ifdef EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE + {"UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE", ERR_LIB_EVP, EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE}, + #else + {"UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE", 6, 215}, + #endif + #ifdef EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH + {"UNABLE_TO_GET_RANDOM_STRENGTH", ERR_LIB_EVP, EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH}, + #else + {"UNABLE_TO_GET_RANDOM_STRENGTH", 6, 216}, + #endif + #ifdef EVP_R_UNABLE_TO_LOCK_CONTEXT + {"UNABLE_TO_LOCK_CONTEXT", ERR_LIB_EVP, EVP_R_UNABLE_TO_LOCK_CONTEXT}, + #else + {"UNABLE_TO_LOCK_CONTEXT", 6, 211}, + #endif + #ifdef EVP_R_UNABLE_TO_SET_CALLBACKS + {"UNABLE_TO_SET_CALLBACKS", ERR_LIB_EVP, EVP_R_UNABLE_TO_SET_CALLBACKS}, + #else + {"UNABLE_TO_SET_CALLBACKS", 6, 217}, + #endif + #ifdef EVP_R_UNKNOWN_CIPHER + {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER}, + #else + {"UNKNOWN_CIPHER", 6, 160}, + #endif + #ifdef EVP_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_EVP, EVP_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 6, 161}, + #endif + #ifdef EVP_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_EVP, EVP_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 6, 207}, + #endif + #ifdef EVP_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 6, 169}, + #endif + #ifdef EVP_R_UNKNOWN_PBE_ALGORITHM + {"UNKNOWN_PBE_ALGORITHM", ERR_LIB_EVP, EVP_R_UNKNOWN_PBE_ALGORITHM}, + #else + {"UNKNOWN_PBE_ALGORITHM", 6, 121}, + #endif + #ifdef EVP_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 6, 156}, + #endif + #ifdef EVP_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_EVP, EVP_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 6, 107}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEYLENGTH + {"UNSUPPORTED_KEYLENGTH", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEYLENGTH}, + #else + {"UNSUPPORTED_KEYLENGTH", 6, 123}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION}, + #else + {"UNSUPPORTED_KEY_DERIVATION_FUNCTION", 6, 124}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 6, 108}, + #endif + #ifdef EVP_R_UNSUPPORTED_KEY_TYPE + {"UNSUPPORTED_KEY_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_KEY_TYPE}, + #else + {"UNSUPPORTED_KEY_TYPE", 6, 224}, + #endif + #ifdef EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_EVP, EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 6, 135}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRF + {"UNSUPPORTED_PRF", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRF}, + #else + {"UNSUPPORTED_PRF", 6, 125}, + #endif + #ifdef EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM}, + #else + {"UNSUPPORTED_PRIVATE_KEY_ALGORITHM", 6, 118}, + #endif + #ifdef EVP_R_UNSUPPORTED_SALT_TYPE + {"UNSUPPORTED_SALT_TYPE", ERR_LIB_EVP, EVP_R_UNSUPPORTED_SALT_TYPE}, + #else + {"UNSUPPORTED_SALT_TYPE", 6, 126}, + #endif + #ifdef EVP_R_UPDATE_ERROR + {"UPDATE_ERROR", ERR_LIB_EVP, EVP_R_UPDATE_ERROR}, + #else + {"UPDATE_ERROR", 6, 189}, + #endif + #ifdef EVP_R_WRAP_MODE_NOT_ALLOWED + {"WRAP_MODE_NOT_ALLOWED", ERR_LIB_EVP, EVP_R_WRAP_MODE_NOT_ALLOWED}, + #else + {"WRAP_MODE_NOT_ALLOWED", 6, 170}, + #endif + #ifdef EVP_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_EVP, EVP_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 6, 109}, + #endif + #ifdef EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE + {"XTS_DATA_UNIT_IS_TOO_LARGE", ERR_LIB_EVP, EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE}, + #else + {"XTS_DATA_UNIT_IS_TOO_LARGE", 6, 191}, + #endif + #ifdef EVP_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 6, 192}, + #endif + #ifdef HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN + {"ASN1_LEN_EXCEEDS_MAX_RESP_LEN", ERR_LIB_HTTP, HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN}, + #else + {"ASN1_LEN_EXCEEDS_MAX_RESP_LEN", 61, 108}, + #endif + #ifdef HTTP_R_CONNECT_FAILURE + {"CONNECT_FAILURE", ERR_LIB_HTTP, HTTP_R_CONNECT_FAILURE}, + #else + {"CONNECT_FAILURE", 61, 100}, + #endif + #ifdef HTTP_R_ERROR_PARSING_ASN1_LENGTH + {"ERROR_PARSING_ASN1_LENGTH", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_ASN1_LENGTH}, + #else + {"ERROR_PARSING_ASN1_LENGTH", 61, 109}, + #endif + #ifdef HTTP_R_ERROR_PARSING_CONTENT_LENGTH + {"ERROR_PARSING_CONTENT_LENGTH", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_CONTENT_LENGTH}, + #else + {"ERROR_PARSING_CONTENT_LENGTH", 61, 119}, + #endif + #ifdef HTTP_R_ERROR_PARSING_URL + {"ERROR_PARSING_URL", ERR_LIB_HTTP, HTTP_R_ERROR_PARSING_URL}, + #else + {"ERROR_PARSING_URL", 61, 101}, + #endif + #ifdef HTTP_R_ERROR_RECEIVING + {"ERROR_RECEIVING", ERR_LIB_HTTP, HTTP_R_ERROR_RECEIVING}, + #else + {"ERROR_RECEIVING", 61, 103}, + #endif + #ifdef HTTP_R_ERROR_SENDING + {"ERROR_SENDING", ERR_LIB_HTTP, HTTP_R_ERROR_SENDING}, + #else + {"ERROR_SENDING", 61, 102}, + #endif + #ifdef HTTP_R_FAILED_READING_DATA + {"FAILED_READING_DATA", ERR_LIB_HTTP, HTTP_R_FAILED_READING_DATA}, + #else + {"FAILED_READING_DATA", 61, 128}, + #endif + #ifdef HTTP_R_INCONSISTENT_CONTENT_LENGTH + {"INCONSISTENT_CONTENT_LENGTH", ERR_LIB_HTTP, HTTP_R_INCONSISTENT_CONTENT_LENGTH}, + #else + {"INCONSISTENT_CONTENT_LENGTH", 61, 120}, + #endif + #ifdef HTTP_R_INVALID_PORT_NUMBER + {"INVALID_PORT_NUMBER", ERR_LIB_HTTP, HTTP_R_INVALID_PORT_NUMBER}, + #else + {"INVALID_PORT_NUMBER", 61, 123}, + #endif + #ifdef HTTP_R_INVALID_URL_PATH + {"INVALID_URL_PATH", ERR_LIB_HTTP, HTTP_R_INVALID_URL_PATH}, + #else + {"INVALID_URL_PATH", 61, 125}, + #endif + #ifdef HTTP_R_INVALID_URL_SCHEME + {"INVALID_URL_SCHEME", ERR_LIB_HTTP, HTTP_R_INVALID_URL_SCHEME}, + #else + {"INVALID_URL_SCHEME", 61, 124}, + #endif + #ifdef HTTP_R_MAX_RESP_LEN_EXCEEDED + {"MAX_RESP_LEN_EXCEEDED", ERR_LIB_HTTP, HTTP_R_MAX_RESP_LEN_EXCEEDED}, + #else + {"MAX_RESP_LEN_EXCEEDED", 61, 117}, + #endif + #ifdef HTTP_R_MISSING_ASN1_ENCODING + {"MISSING_ASN1_ENCODING", ERR_LIB_HTTP, HTTP_R_MISSING_ASN1_ENCODING}, + #else + {"MISSING_ASN1_ENCODING", 61, 110}, + #endif + #ifdef HTTP_R_MISSING_CONTENT_TYPE + {"MISSING_CONTENT_TYPE", ERR_LIB_HTTP, HTTP_R_MISSING_CONTENT_TYPE}, + #else + {"MISSING_CONTENT_TYPE", 61, 121}, + #endif + #ifdef HTTP_R_MISSING_REDIRECT_LOCATION + {"MISSING_REDIRECT_LOCATION", ERR_LIB_HTTP, HTTP_R_MISSING_REDIRECT_LOCATION}, + #else + {"MISSING_REDIRECT_LOCATION", 61, 111}, + #endif + #ifdef HTTP_R_RECEIVED_ERROR + {"RECEIVED_ERROR", ERR_LIB_HTTP, HTTP_R_RECEIVED_ERROR}, + #else + {"RECEIVED_ERROR", 61, 105}, + #endif + #ifdef HTTP_R_RECEIVED_WRONG_HTTP_VERSION + {"RECEIVED_WRONG_HTTP_VERSION", ERR_LIB_HTTP, HTTP_R_RECEIVED_WRONG_HTTP_VERSION}, + #else + {"RECEIVED_WRONG_HTTP_VERSION", 61, 106}, + #endif + #ifdef HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP + {"REDIRECTION_FROM_HTTPS_TO_HTTP", ERR_LIB_HTTP, HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP}, + #else + {"REDIRECTION_FROM_HTTPS_TO_HTTP", 61, 112}, + #endif + #ifdef HTTP_R_REDIRECTION_NOT_ENABLED + {"REDIRECTION_NOT_ENABLED", ERR_LIB_HTTP, HTTP_R_REDIRECTION_NOT_ENABLED}, + #else + {"REDIRECTION_NOT_ENABLED", 61, 116}, + #endif + #ifdef HTTP_R_RESPONSE_LINE_TOO_LONG + {"RESPONSE_LINE_TOO_LONG", ERR_LIB_HTTP, HTTP_R_RESPONSE_LINE_TOO_LONG}, + #else + {"RESPONSE_LINE_TOO_LONG", 61, 113}, + #endif + #ifdef HTTP_R_RESPONSE_PARSE_ERROR + {"RESPONSE_PARSE_ERROR", ERR_LIB_HTTP, HTTP_R_RESPONSE_PARSE_ERROR}, + #else + {"RESPONSE_PARSE_ERROR", 61, 104}, + #endif + #ifdef HTTP_R_SOCK_NOT_SUPPORTED + {"SOCK_NOT_SUPPORTED", ERR_LIB_HTTP, HTTP_R_SOCK_NOT_SUPPORTED}, + #else + {"SOCK_NOT_SUPPORTED", 61, 122}, + #endif + #ifdef HTTP_R_STATUS_CODE_UNSUPPORTED + {"STATUS_CODE_UNSUPPORTED", ERR_LIB_HTTP, HTTP_R_STATUS_CODE_UNSUPPORTED}, + #else + {"STATUS_CODE_UNSUPPORTED", 61, 114}, + #endif + #ifdef HTTP_R_TLS_NOT_ENABLED + {"TLS_NOT_ENABLED", ERR_LIB_HTTP, HTTP_R_TLS_NOT_ENABLED}, + #else + {"TLS_NOT_ENABLED", 61, 107}, + #endif + #ifdef HTTP_R_TOO_MANY_REDIRECTIONS + {"TOO_MANY_REDIRECTIONS", ERR_LIB_HTTP, HTTP_R_TOO_MANY_REDIRECTIONS}, + #else + {"TOO_MANY_REDIRECTIONS", 61, 115}, + #endif + #ifdef HTTP_R_UNEXPECTED_CONTENT_TYPE + {"UNEXPECTED_CONTENT_TYPE", ERR_LIB_HTTP, HTTP_R_UNEXPECTED_CONTENT_TYPE}, + #else + {"UNEXPECTED_CONTENT_TYPE", 61, 118}, + #endif + #ifdef OBJ_R_OID_EXISTS + {"OID_EXISTS", ERR_LIB_OBJ, OBJ_R_OID_EXISTS}, + #else + {"OID_EXISTS", 8, 102}, + #endif + #ifdef OBJ_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 8, 101}, + #endif + #ifdef OBJ_R_UNKNOWN_OBJECT_NAME + {"UNKNOWN_OBJECT_NAME", ERR_LIB_OBJ, OBJ_R_UNKNOWN_OBJECT_NAME}, + #else + {"UNKNOWN_OBJECT_NAME", 8, 103}, + #endif + #ifdef OCSP_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_OCSP, OCSP_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 39, 101}, + #endif + #ifdef OCSP_R_DIGEST_ERR + {"DIGEST_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_ERR}, + #else + {"DIGEST_ERR", 39, 102}, + #endif + #ifdef OCSP_R_DIGEST_NAME_ERR + {"DIGEST_NAME_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_NAME_ERR}, + #else + {"DIGEST_NAME_ERR", 39, 106}, + #endif + #ifdef OCSP_R_DIGEST_SIZE_ERR + {"DIGEST_SIZE_ERR", ERR_LIB_OCSP, OCSP_R_DIGEST_SIZE_ERR}, + #else + {"DIGEST_SIZE_ERR", 39, 107}, + #endif + #ifdef OCSP_R_ERROR_IN_NEXTUPDATE_FIELD + {"ERROR_IN_NEXTUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD}, + #else + {"ERROR_IN_NEXTUPDATE_FIELD", 39, 122}, + #endif + #ifdef OCSP_R_ERROR_IN_THISUPDATE_FIELD + {"ERROR_IN_THISUPDATE_FIELD", ERR_LIB_OCSP, OCSP_R_ERROR_IN_THISUPDATE_FIELD}, + #else + {"ERROR_IN_THISUPDATE_FIELD", 39, 123}, + #endif + #ifdef OCSP_R_MISSING_OCSPSIGNING_USAGE + {"MISSING_OCSPSIGNING_USAGE", ERR_LIB_OCSP, OCSP_R_MISSING_OCSPSIGNING_USAGE}, + #else + {"MISSING_OCSPSIGNING_USAGE", 39, 103}, + #endif + #ifdef OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE + {"NEXTUPDATE_BEFORE_THISUPDATE", ERR_LIB_OCSP, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE}, + #else + {"NEXTUPDATE_BEFORE_THISUPDATE", 39, 124}, + #endif + #ifdef OCSP_R_NOT_BASIC_RESPONSE + {"NOT_BASIC_RESPONSE", ERR_LIB_OCSP, OCSP_R_NOT_BASIC_RESPONSE}, + #else + {"NOT_BASIC_RESPONSE", 39, 104}, + #endif + #ifdef OCSP_R_NO_CERTIFICATES_IN_CHAIN + {"NO_CERTIFICATES_IN_CHAIN", ERR_LIB_OCSP, OCSP_R_NO_CERTIFICATES_IN_CHAIN}, + #else + {"NO_CERTIFICATES_IN_CHAIN", 39, 105}, + #endif + #ifdef OCSP_R_NO_RESPONSE_DATA + {"NO_RESPONSE_DATA", ERR_LIB_OCSP, OCSP_R_NO_RESPONSE_DATA}, + #else + {"NO_RESPONSE_DATA", 39, 108}, + #endif + #ifdef OCSP_R_NO_REVOKED_TIME + {"NO_REVOKED_TIME", ERR_LIB_OCSP, OCSP_R_NO_REVOKED_TIME}, + #else + {"NO_REVOKED_TIME", 39, 109}, + #endif + #ifdef OCSP_R_NO_SIGNER_KEY + {"NO_SIGNER_KEY", ERR_LIB_OCSP, OCSP_R_NO_SIGNER_KEY}, + #else + {"NO_SIGNER_KEY", 39, 130}, + #endif + #ifdef OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_OCSP, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 39, 110}, + #endif + #ifdef OCSP_R_REQUEST_NOT_SIGNED + {"REQUEST_NOT_SIGNED", ERR_LIB_OCSP, OCSP_R_REQUEST_NOT_SIGNED}, + #else + {"REQUEST_NOT_SIGNED", 39, 128}, + #endif + #ifdef OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", ERR_LIB_OCSP, OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA}, + #else + {"RESPONSE_CONTAINS_NO_REVOCATION_DATA", 39, 111}, + #endif + #ifdef OCSP_R_ROOT_CA_NOT_TRUSTED + {"ROOT_CA_NOT_TRUSTED", ERR_LIB_OCSP, OCSP_R_ROOT_CA_NOT_TRUSTED}, + #else + {"ROOT_CA_NOT_TRUSTED", 39, 112}, + #endif + #ifdef OCSP_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_OCSP, OCSP_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 39, 117}, + #endif + #ifdef OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_OCSP, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 39, 118}, + #endif + #ifdef OCSP_R_STATUS_EXPIRED + {"STATUS_EXPIRED", ERR_LIB_OCSP, OCSP_R_STATUS_EXPIRED}, + #else + {"STATUS_EXPIRED", 39, 125}, + #endif + #ifdef OCSP_R_STATUS_NOT_YET_VALID + {"STATUS_NOT_YET_VALID", ERR_LIB_OCSP, OCSP_R_STATUS_NOT_YET_VALID}, + #else + {"STATUS_NOT_YET_VALID", 39, 126}, + #endif + #ifdef OCSP_R_STATUS_TOO_OLD + {"STATUS_TOO_OLD", ERR_LIB_OCSP, OCSP_R_STATUS_TOO_OLD}, + #else + {"STATUS_TOO_OLD", 39, 127}, + #endif + #ifdef OCSP_R_UNKNOWN_MESSAGE_DIGEST + {"UNKNOWN_MESSAGE_DIGEST", ERR_LIB_OCSP, OCSP_R_UNKNOWN_MESSAGE_DIGEST}, + #else + {"UNKNOWN_MESSAGE_DIGEST", 39, 119}, + #endif + #ifdef OCSP_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_OCSP, OCSP_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 39, 120}, + #endif + #ifdef OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE + {"UNSUPPORTED_REQUESTORNAME_TYPE", ERR_LIB_OCSP, OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE}, + #else + {"UNSUPPORTED_REQUESTORNAME_TYPE", 39, 129}, + #endif + #ifdef OSSL_DECODER_R_MISSING_GET_PARAMS + {"MISSING_GET_PARAMS", ERR_LIB_OSSL_DECODER, OSSL_DECODER_R_MISSING_GET_PARAMS}, + #else + {"MISSING_GET_PARAMS", 60, 100}, + #endif + #ifdef OSSL_ENCODER_R_ENCODER_NOT_FOUND + {"ENCODER_NOT_FOUND", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_ENCODER_NOT_FOUND}, + #else + {"ENCODER_NOT_FOUND", 59, 101}, + #endif + #ifdef OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY + {"INCORRECT_PROPERTY_QUERY", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY}, + #else + {"INCORRECT_PROPERTY_QUERY", 59, 100}, + #endif + #ifdef OSSL_ENCODER_R_MISSING_GET_PARAMS + {"MISSING_GET_PARAMS", ERR_LIB_OSSL_ENCODER, OSSL_ENCODER_R_MISSING_GET_PARAMS}, + #else + {"MISSING_GET_PARAMS", 59, 102}, + #endif + #ifdef OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE + {"AMBIGUOUS_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE}, + #else + {"AMBIGUOUS_CONTENT_TYPE", 44, 107}, + #endif + #ifdef OSSL_STORE_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_OSSL_STORE, OSSL_STORE_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 44, 115}, + #endif + #ifdef OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC + {"ERROR_VERIFYING_PKCS12_MAC", ERR_LIB_OSSL_STORE, OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC}, + #else + {"ERROR_VERIFYING_PKCS12_MAC", 44, 113}, + #endif + #ifdef OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", ERR_LIB_OSSL_STORE, OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST}, + #else + {"FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST", 44, 121}, + #endif + #ifdef OSSL_STORE_R_INVALID_SCHEME + {"INVALID_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_INVALID_SCHEME}, + #else + {"INVALID_SCHEME", 44, 106}, + #endif + #ifdef OSSL_STORE_R_IS_NOT_A + {"IS_NOT_A", ERR_LIB_OSSL_STORE, OSSL_STORE_R_IS_NOT_A}, + #else + {"IS_NOT_A", 44, 112}, + #endif + #ifdef OSSL_STORE_R_LOADER_INCOMPLETE + {"LOADER_INCOMPLETE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADER_INCOMPLETE}, + #else + {"LOADER_INCOMPLETE", 44, 116}, + #endif + #ifdef OSSL_STORE_R_LOADING_STARTED + {"LOADING_STARTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_LOADING_STARTED}, + #else + {"LOADING_STARTED", 44, 117}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CERTIFICATE + {"NOT_A_CERTIFICATE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CERTIFICATE}, + #else + {"NOT_A_CERTIFICATE", 44, 100}, + #endif + #ifdef OSSL_STORE_R_NOT_A_CRL + {"NOT_A_CRL", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_CRL}, + #else + {"NOT_A_CRL", 44, 101}, + #endif + #ifdef OSSL_STORE_R_NOT_A_NAME + {"NOT_A_NAME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_NAME}, + #else + {"NOT_A_NAME", 44, 103}, + #endif + #ifdef OSSL_STORE_R_NOT_A_PRIVATE_KEY + {"NOT_A_PRIVATE_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_PRIVATE_KEY}, + #else + {"NOT_A_PRIVATE_KEY", 44, 102}, + #endif + #ifdef OSSL_STORE_R_NOT_A_PUBLIC_KEY + {"NOT_A_PUBLIC_KEY", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_A_PUBLIC_KEY}, + #else + {"NOT_A_PUBLIC_KEY", 44, 122}, + #endif + #ifdef OSSL_STORE_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_OSSL_STORE, OSSL_STORE_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 44, 104}, + #endif + #ifdef OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR + {"PASSPHRASE_CALLBACK_ERROR", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR}, + #else + {"PASSPHRASE_CALLBACK_ERROR", 44, 114}, + #endif + #ifdef OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 44, 108}, + #endif + #ifdef OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_OSSL_STORE, OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 44, 119}, + #endif + #ifdef OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED}, + #else + {"UI_PROCESS_INTERRUPTED_OR_CANCELLED", 44, 109}, + #endif + #ifdef OSSL_STORE_R_UNREGISTERED_SCHEME + {"UNREGISTERED_SCHEME", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNREGISTERED_SCHEME}, + #else + {"UNREGISTERED_SCHEME", 44, 105}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 44, 110}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_OPERATION + {"UNSUPPORTED_OPERATION", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_OPERATION}, + #else + {"UNSUPPORTED_OPERATION", 44, 118}, + #endif + #ifdef OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE + {"UNSUPPORTED_SEARCH_TYPE", ERR_LIB_OSSL_STORE, OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE}, + #else + {"UNSUPPORTED_SEARCH_TYPE", 44, 120}, + #endif + #ifdef OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_OSSL_STORE, OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 44, 111}, + #endif + #ifdef PEM_R_BAD_BASE64_DECODE + {"BAD_BASE64_DECODE", ERR_LIB_PEM, PEM_R_BAD_BASE64_DECODE}, + #else + {"BAD_BASE64_DECODE", 9, 100}, + #endif + #ifdef PEM_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PEM, PEM_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 9, 101}, + #endif + #ifdef PEM_R_BAD_END_LINE + {"BAD_END_LINE", ERR_LIB_PEM, PEM_R_BAD_END_LINE}, + #else + {"BAD_END_LINE", 9, 102}, + #endif + #ifdef PEM_R_BAD_IV_CHARS + {"BAD_IV_CHARS", ERR_LIB_PEM, PEM_R_BAD_IV_CHARS}, + #else + {"BAD_IV_CHARS", 9, 103}, + #endif + #ifdef PEM_R_BAD_MAGIC_NUMBER + {"BAD_MAGIC_NUMBER", ERR_LIB_PEM, PEM_R_BAD_MAGIC_NUMBER}, + #else + {"BAD_MAGIC_NUMBER", 9, 116}, + #endif + #ifdef PEM_R_BAD_PASSWORD_READ + {"BAD_PASSWORD_READ", ERR_LIB_PEM, PEM_R_BAD_PASSWORD_READ}, + #else + {"BAD_PASSWORD_READ", 9, 104}, + #endif + #ifdef PEM_R_BAD_VERSION_NUMBER + {"BAD_VERSION_NUMBER", ERR_LIB_PEM, PEM_R_BAD_VERSION_NUMBER}, + #else + {"BAD_VERSION_NUMBER", 9, 117}, + #endif + #ifdef PEM_R_BIO_WRITE_FAILURE + {"BIO_WRITE_FAILURE", ERR_LIB_PEM, PEM_R_BIO_WRITE_FAILURE}, + #else + {"BIO_WRITE_FAILURE", 9, 118}, + #endif + #ifdef PEM_R_CIPHER_IS_NULL + {"CIPHER_IS_NULL", ERR_LIB_PEM, PEM_R_CIPHER_IS_NULL}, + #else + {"CIPHER_IS_NULL", 9, 127}, + #endif + #ifdef PEM_R_ERROR_CONVERTING_PRIVATE_KEY + {"ERROR_CONVERTING_PRIVATE_KEY", ERR_LIB_PEM, PEM_R_ERROR_CONVERTING_PRIVATE_KEY}, + #else + {"ERROR_CONVERTING_PRIVATE_KEY", 9, 115}, + #endif + #ifdef PEM_R_EXPECTING_DSS_KEY_BLOB + {"EXPECTING_DSS_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_DSS_KEY_BLOB}, + #else + {"EXPECTING_DSS_KEY_BLOB", 9, 131}, + #endif + #ifdef PEM_R_EXPECTING_PRIVATE_KEY_BLOB + {"EXPECTING_PRIVATE_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PRIVATE_KEY_BLOB}, + #else + {"EXPECTING_PRIVATE_KEY_BLOB", 9, 119}, + #endif + #ifdef PEM_R_EXPECTING_PUBLIC_KEY_BLOB + {"EXPECTING_PUBLIC_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_PUBLIC_KEY_BLOB}, + #else + {"EXPECTING_PUBLIC_KEY_BLOB", 9, 120}, + #endif + #ifdef PEM_R_EXPECTING_RSA_KEY_BLOB + {"EXPECTING_RSA_KEY_BLOB", ERR_LIB_PEM, PEM_R_EXPECTING_RSA_KEY_BLOB}, + #else + {"EXPECTING_RSA_KEY_BLOB", 9, 132}, + #endif + #ifdef PEM_R_HEADER_TOO_LONG + {"HEADER_TOO_LONG", ERR_LIB_PEM, PEM_R_HEADER_TOO_LONG}, + #else + {"HEADER_TOO_LONG", 9, 128}, + #endif + #ifdef PEM_R_INCONSISTENT_HEADER + {"INCONSISTENT_HEADER", ERR_LIB_PEM, PEM_R_INCONSISTENT_HEADER}, + #else + {"INCONSISTENT_HEADER", 9, 121}, + #endif + #ifdef PEM_R_KEYBLOB_HEADER_PARSE_ERROR + {"KEYBLOB_HEADER_PARSE_ERROR", ERR_LIB_PEM, PEM_R_KEYBLOB_HEADER_PARSE_ERROR}, + #else + {"KEYBLOB_HEADER_PARSE_ERROR", 9, 122}, + #endif + #ifdef PEM_R_KEYBLOB_TOO_SHORT + {"KEYBLOB_TOO_SHORT", ERR_LIB_PEM, PEM_R_KEYBLOB_TOO_SHORT}, + #else + {"KEYBLOB_TOO_SHORT", 9, 123}, + #endif + #ifdef PEM_R_MISSING_DEK_IV + {"MISSING_DEK_IV", ERR_LIB_PEM, PEM_R_MISSING_DEK_IV}, + #else + {"MISSING_DEK_IV", 9, 129}, + #endif + #ifdef PEM_R_NOT_DEK_INFO + {"NOT_DEK_INFO", ERR_LIB_PEM, PEM_R_NOT_DEK_INFO}, + #else + {"NOT_DEK_INFO", 9, 105}, + #endif + #ifdef PEM_R_NOT_ENCRYPTED + {"NOT_ENCRYPTED", ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED}, + #else + {"NOT_ENCRYPTED", 9, 106}, + #endif + #ifdef PEM_R_NOT_PROC_TYPE + {"NOT_PROC_TYPE", ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE}, + #else + {"NOT_PROC_TYPE", 9, 107}, + #endif + #ifdef PEM_R_NO_START_LINE + {"NO_START_LINE", ERR_LIB_PEM, PEM_R_NO_START_LINE}, + #else + {"NO_START_LINE", 9, 108}, + #endif + #ifdef PEM_R_PROBLEMS_GETTING_PASSWORD + {"PROBLEMS_GETTING_PASSWORD", ERR_LIB_PEM, PEM_R_PROBLEMS_GETTING_PASSWORD}, + #else + {"PROBLEMS_GETTING_PASSWORD", 9, 109}, + #endif + #ifdef PEM_R_PVK_DATA_TOO_SHORT + {"PVK_DATA_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_DATA_TOO_SHORT}, + #else + {"PVK_DATA_TOO_SHORT", 9, 124}, + #endif + #ifdef PEM_R_PVK_TOO_SHORT + {"PVK_TOO_SHORT", ERR_LIB_PEM, PEM_R_PVK_TOO_SHORT}, + #else + {"PVK_TOO_SHORT", 9, 125}, + #endif + #ifdef PEM_R_READ_KEY + {"READ_KEY", ERR_LIB_PEM, PEM_R_READ_KEY}, + #else + {"READ_KEY", 9, 111}, + #endif + #ifdef PEM_R_SHORT_HEADER + {"SHORT_HEADER", ERR_LIB_PEM, PEM_R_SHORT_HEADER}, + #else + {"SHORT_HEADER", 9, 112}, + #endif + #ifdef PEM_R_UNEXPECTED_DEK_IV + {"UNEXPECTED_DEK_IV", ERR_LIB_PEM, PEM_R_UNEXPECTED_DEK_IV}, + #else + {"UNEXPECTED_DEK_IV", 9, 130}, + #endif + #ifdef PEM_R_UNSUPPORTED_CIPHER + {"UNSUPPORTED_CIPHER", ERR_LIB_PEM, PEM_R_UNSUPPORTED_CIPHER}, + #else + {"UNSUPPORTED_CIPHER", 9, 113}, + #endif + #ifdef PEM_R_UNSUPPORTED_ENCRYPTION + {"UNSUPPORTED_ENCRYPTION", ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION}, + #else + {"UNSUPPORTED_ENCRYPTION", 9, 114}, + #endif + #ifdef PEM_R_UNSUPPORTED_KEY_COMPONENTS + {"UNSUPPORTED_KEY_COMPONENTS", ERR_LIB_PEM, PEM_R_UNSUPPORTED_KEY_COMPONENTS}, + #else + {"UNSUPPORTED_KEY_COMPONENTS", 9, 126}, + #endif + #ifdef PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE + {"UNSUPPORTED_PUBLIC_KEY_TYPE", ERR_LIB_PEM, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE}, + #else + {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110}, + #endif + #ifdef PKCS12_R_CANT_PACK_STRUCTURE + {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE}, + #else + {"CANT_PACK_STRUCTURE", 35, 100}, + #endif + #ifdef PKCS12_R_CONTENT_TYPE_NOT_DATA + {"CONTENT_TYPE_NOT_DATA", ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA}, + #else + {"CONTENT_TYPE_NOT_DATA", 35, 121}, + #endif + #ifdef PKCS12_R_DECODE_ERROR + {"DECODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR}, + #else + {"DECODE_ERROR", 35, 101}, + #endif + #ifdef PKCS12_R_ENCODE_ERROR + {"ENCODE_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCODE_ERROR}, + #else + {"ENCODE_ERROR", 35, 102}, + #endif + #ifdef PKCS12_R_ENCRYPT_ERROR + {"ENCRYPT_ERROR", ERR_LIB_PKCS12, PKCS12_R_ENCRYPT_ERROR}, + #else + {"ENCRYPT_ERROR", 35, 103}, + #endif + #ifdef PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", ERR_LIB_PKCS12, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE}, + #else + {"ERROR_SETTING_ENCRYPTED_DATA_TYPE", 35, 120}, + #endif + #ifdef PKCS12_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 35, 104}, + #endif + #ifdef PKCS12_R_INVALID_NULL_PKCS12_POINTER + {"INVALID_NULL_PKCS12_POINTER", ERR_LIB_PKCS12, PKCS12_R_INVALID_NULL_PKCS12_POINTER}, + #else + {"INVALID_NULL_PKCS12_POINTER", 35, 105}, + #endif + #ifdef PKCS12_R_INVALID_TYPE + {"INVALID_TYPE", ERR_LIB_PKCS12, PKCS12_R_INVALID_TYPE}, + #else + {"INVALID_TYPE", 35, 112}, + #endif + #ifdef PKCS12_R_IV_GEN_ERROR + {"IV_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_IV_GEN_ERROR}, + #else + {"IV_GEN_ERROR", 35, 106}, + #endif + #ifdef PKCS12_R_KEY_GEN_ERROR + {"KEY_GEN_ERROR", ERR_LIB_PKCS12, PKCS12_R_KEY_GEN_ERROR}, + #else + {"KEY_GEN_ERROR", 35, 107}, + #endif + #ifdef PKCS12_R_MAC_ABSENT + {"MAC_ABSENT", ERR_LIB_PKCS12, PKCS12_R_MAC_ABSENT}, + #else + {"MAC_ABSENT", 35, 108}, + #endif + #ifdef PKCS12_R_MAC_GENERATION_ERROR + {"MAC_GENERATION_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_GENERATION_ERROR}, + #else + {"MAC_GENERATION_ERROR", 35, 109}, + #endif + #ifdef PKCS12_R_MAC_SETUP_ERROR + {"MAC_SETUP_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_SETUP_ERROR}, + #else + {"MAC_SETUP_ERROR", 35, 110}, + #endif + #ifdef PKCS12_R_MAC_STRING_SET_ERROR + {"MAC_STRING_SET_ERROR", ERR_LIB_PKCS12, PKCS12_R_MAC_STRING_SET_ERROR}, + #else + {"MAC_STRING_SET_ERROR", 35, 111}, + #endif + #ifdef PKCS12_R_MAC_VERIFY_FAILURE + {"MAC_VERIFY_FAILURE", ERR_LIB_PKCS12, PKCS12_R_MAC_VERIFY_FAILURE}, + #else + {"MAC_VERIFY_FAILURE", 35, 113}, + #endif + #ifdef PKCS12_R_PARSE_ERROR + {"PARSE_ERROR", ERR_LIB_PKCS12, PKCS12_R_PARSE_ERROR}, + #else + {"PARSE_ERROR", 35, 114}, + #endif + #ifdef PKCS12_R_PKCS12_CIPHERFINAL_ERROR + {"PKCS12_CIPHERFINAL_ERROR", ERR_LIB_PKCS12, PKCS12_R_PKCS12_CIPHERFINAL_ERROR}, + #else + {"PKCS12_CIPHERFINAL_ERROR", 35, 116}, + #endif + #ifdef PKCS12_R_UNKNOWN_DIGEST_ALGORITHM + {"UNKNOWN_DIGEST_ALGORITHM", ERR_LIB_PKCS12, PKCS12_R_UNKNOWN_DIGEST_ALGORITHM}, + #else + {"UNKNOWN_DIGEST_ALGORITHM", 35, 118}, + #endif + #ifdef PKCS12_R_UNSUPPORTED_PKCS12_MODE + {"UNSUPPORTED_PKCS12_MODE", ERR_LIB_PKCS12, PKCS12_R_UNSUPPORTED_PKCS12_MODE}, + #else + {"UNSUPPORTED_PKCS12_MODE", 35, 119}, + #endif + #ifdef PKCS7_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_PKCS7, PKCS7_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 33, 117}, + #endif + #ifdef PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", ERR_LIB_PKCS7, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER}, + #else + {"CIPHER_HAS_NO_OBJECT_IDENTIFIER", 33, 144}, + #endif + #ifdef PKCS7_R_CIPHER_NOT_INITIALIZED + {"CIPHER_NOT_INITIALIZED", ERR_LIB_PKCS7, PKCS7_R_CIPHER_NOT_INITIALIZED}, + #else + {"CIPHER_NOT_INITIALIZED", 33, 116}, + #endif + #ifdef PKCS7_R_CONTENT_AND_DATA_PRESENT + {"CONTENT_AND_DATA_PRESENT", ERR_LIB_PKCS7, PKCS7_R_CONTENT_AND_DATA_PRESENT}, + #else + {"CONTENT_AND_DATA_PRESENT", 33, 118}, + #endif + #ifdef PKCS7_R_CTRL_ERROR + {"CTRL_ERROR", ERR_LIB_PKCS7, PKCS7_R_CTRL_ERROR}, + #else + {"CTRL_ERROR", 33, 152}, + #endif + #ifdef PKCS7_R_DECRYPT_ERROR + {"DECRYPT_ERROR", ERR_LIB_PKCS7, PKCS7_R_DECRYPT_ERROR}, + #else + {"DECRYPT_ERROR", 33, 119}, + #endif + #ifdef PKCS7_R_DIGEST_FAILURE + {"DIGEST_FAILURE", ERR_LIB_PKCS7, PKCS7_R_DIGEST_FAILURE}, + #else + {"DIGEST_FAILURE", 33, 101}, + #endif + #ifdef PKCS7_R_ENCRYPTION_CTRL_FAILURE + {"ENCRYPTION_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_CTRL_FAILURE}, + #else + {"ENCRYPTION_CTRL_FAILURE", 33, 149}, + #endif + #ifdef PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 150}, + #endif + #ifdef PKCS7_R_ERROR_ADDING_RECIPIENT + {"ERROR_ADDING_RECIPIENT", ERR_LIB_PKCS7, PKCS7_R_ERROR_ADDING_RECIPIENT}, + #else + {"ERROR_ADDING_RECIPIENT", 33, 120}, + #endif + #ifdef PKCS7_R_ERROR_SETTING_CIPHER + {"ERROR_SETTING_CIPHER", ERR_LIB_PKCS7, PKCS7_R_ERROR_SETTING_CIPHER}, + #else + {"ERROR_SETTING_CIPHER", 33, 121}, + #endif + #ifdef PKCS7_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_PKCS7, PKCS7_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 33, 143}, + #endif + #ifdef PKCS7_R_INVALID_SIGNED_DATA_TYPE + {"INVALID_SIGNED_DATA_TYPE", ERR_LIB_PKCS7, PKCS7_R_INVALID_SIGNED_DATA_TYPE}, + #else + {"INVALID_SIGNED_DATA_TYPE", 33, 155}, + #endif + #ifdef PKCS7_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_PKCS7, PKCS7_R_NO_CONTENT}, + #else + {"NO_CONTENT", 33, 122}, + #endif + #ifdef PKCS7_R_NO_DEFAULT_DIGEST + {"NO_DEFAULT_DIGEST", ERR_LIB_PKCS7, PKCS7_R_NO_DEFAULT_DIGEST}, + #else + {"NO_DEFAULT_DIGEST", 33, 151}, + #endif + #ifdef PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND + {"NO_MATCHING_DIGEST_TYPE_FOUND", ERR_LIB_PKCS7, PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND}, + #else + {"NO_MATCHING_DIGEST_TYPE_FOUND", 33, 154}, + #endif + #ifdef PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE + {"NO_RECIPIENT_MATCHES_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE}, + #else + {"NO_RECIPIENT_MATCHES_CERTIFICATE", 33, 115}, + #endif + #ifdef PKCS7_R_NO_SIGNATURES_ON_DATA + {"NO_SIGNATURES_ON_DATA", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNATURES_ON_DATA}, + #else + {"NO_SIGNATURES_ON_DATA", 33, 123}, + #endif + #ifdef PKCS7_R_NO_SIGNERS + {"NO_SIGNERS", ERR_LIB_PKCS7, PKCS7_R_NO_SIGNERS}, + #else + {"NO_SIGNERS", 33, 142}, + #endif + #ifdef PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", ERR_LIB_PKCS7, PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE}, + #else + {"OPERATION_NOT_SUPPORTED_ON_THIS_TYPE", 33, 104}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 33, 124}, + #endif + #ifdef PKCS7_R_PKCS7_ADD_SIGNER_ERROR + {"PKCS7_ADD_SIGNER_ERROR", ERR_LIB_PKCS7, PKCS7_R_PKCS7_ADD_SIGNER_ERROR}, + #else + {"PKCS7_ADD_SIGNER_ERROR", 33, 153}, + #endif + #ifdef PKCS7_R_PKCS7_DATASIGN + {"PKCS7_DATASIGN", ERR_LIB_PKCS7, PKCS7_R_PKCS7_DATASIGN}, + #else + {"PKCS7_DATASIGN", 33, 145}, + #endif + #ifdef PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 33, 127}, + #endif + #ifdef PKCS7_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 33, 105}, + #endif + #ifdef PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND + {"SIGNER_CERTIFICATE_NOT_FOUND", ERR_LIB_PKCS7, PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND}, + #else + {"SIGNER_CERTIFICATE_NOT_FOUND", 33, 128}, + #endif + #ifdef PKCS7_R_SIGNING_CTRL_FAILURE + {"SIGNING_CTRL_FAILURE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_CTRL_FAILURE}, + #else + {"SIGNING_CTRL_FAILURE", 33, 147}, + #endif + #ifdef PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", ERR_LIB_PKCS7, PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE}, + #else + {"SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE", 33, 148}, + #endif + #ifdef PKCS7_R_SMIME_TEXT_ERROR + {"SMIME_TEXT_ERROR", ERR_LIB_PKCS7, PKCS7_R_SMIME_TEXT_ERROR}, + #else + {"SMIME_TEXT_ERROR", 33, 129}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_CERTIFICATE + {"UNABLE_TO_FIND_CERTIFICATE", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_CERTIFICATE}, + #else + {"UNABLE_TO_FIND_CERTIFICATE", 33, 106}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MEM_BIO + {"UNABLE_TO_FIND_MEM_BIO", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MEM_BIO}, + #else + {"UNABLE_TO_FIND_MEM_BIO", 33, 107}, + #endif + #ifdef PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST + {"UNABLE_TO_FIND_MESSAGE_DIGEST", ERR_LIB_PKCS7, PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST}, + #else + {"UNABLE_TO_FIND_MESSAGE_DIGEST", 33, 108}, + #endif + #ifdef PKCS7_R_UNKNOWN_DIGEST_TYPE + {"UNKNOWN_DIGEST_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_DIGEST_TYPE}, + #else + {"UNKNOWN_DIGEST_TYPE", 33, 109}, + #endif + #ifdef PKCS7_R_UNKNOWN_OPERATION + {"UNKNOWN_OPERATION", ERR_LIB_PKCS7, PKCS7_R_UNKNOWN_OPERATION}, + #else + {"UNKNOWN_OPERATION", 33, 110}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CIPHER_TYPE + {"UNSUPPORTED_CIPHER_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CIPHER_TYPE}, + #else + {"UNSUPPORTED_CIPHER_TYPE", 33, 111}, + #endif + #ifdef PKCS7_R_UNSUPPORTED_CONTENT_TYPE + {"UNSUPPORTED_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_UNSUPPORTED_CONTENT_TYPE}, + #else + {"UNSUPPORTED_CONTENT_TYPE", 33, 112}, + #endif + #ifdef PKCS7_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 33, 113}, + #endif + #ifdef PKCS7_R_WRONG_PKCS7_TYPE + {"WRONG_PKCS7_TYPE", ERR_LIB_PKCS7, PKCS7_R_WRONG_PKCS7_TYPE}, + #else + {"WRONG_PKCS7_TYPE", 33, 114}, + #endif + #ifdef PROP_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_PROP, PROP_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 55, 100}, + #endif + #ifdef PROP_R_NOT_AN_ASCII_CHARACTER + {"NOT_AN_ASCII_CHARACTER", ERR_LIB_PROP, PROP_R_NOT_AN_ASCII_CHARACTER}, + #else + {"NOT_AN_ASCII_CHARACTER", 55, 101}, + #endif + #ifdef PROP_R_NOT_AN_HEXADECIMAL_DIGIT + {"NOT_AN_HEXADECIMAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_AN_HEXADECIMAL_DIGIT}, + #else + {"NOT_AN_HEXADECIMAL_DIGIT", 55, 102}, + #endif + #ifdef PROP_R_NOT_AN_IDENTIFIER + {"NOT_AN_IDENTIFIER", ERR_LIB_PROP, PROP_R_NOT_AN_IDENTIFIER}, + #else + {"NOT_AN_IDENTIFIER", 55, 103}, + #endif + #ifdef PROP_R_NOT_AN_OCTAL_DIGIT + {"NOT_AN_OCTAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_AN_OCTAL_DIGIT}, + #else + {"NOT_AN_OCTAL_DIGIT", 55, 104}, + #endif + #ifdef PROP_R_NOT_A_DECIMAL_DIGIT + {"NOT_A_DECIMAL_DIGIT", ERR_LIB_PROP, PROP_R_NOT_A_DECIMAL_DIGIT}, + #else + {"NOT_A_DECIMAL_DIGIT", 55, 105}, + #endif + #ifdef PROP_R_NO_MATCHING_STRING_DELIMITER + {"NO_MATCHING_STRING_DELIMITER", ERR_LIB_PROP, PROP_R_NO_MATCHING_STRING_DELIMITER}, + #else + {"NO_MATCHING_STRING_DELIMITER", 55, 106}, + #endif + #ifdef PROP_R_NO_VALUE + {"NO_VALUE", ERR_LIB_PROP, PROP_R_NO_VALUE}, + #else + {"NO_VALUE", 55, 107}, + #endif + #ifdef PROP_R_PARSE_FAILED + {"PARSE_FAILED", ERR_LIB_PROP, PROP_R_PARSE_FAILED}, + #else + {"PARSE_FAILED", 55, 108}, + #endif + #ifdef PROP_R_STRING_TOO_LONG + {"STRING_TOO_LONG", ERR_LIB_PROP, PROP_R_STRING_TOO_LONG}, + #else + {"STRING_TOO_LONG", 55, 109}, + #endif + #ifdef PROP_R_TRAILING_CHARACTERS + {"TRAILING_CHARACTERS", ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS}, + #else + {"TRAILING_CHARACTERS", 55, 110}, + #endif + #ifdef PROV_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_PROV, PROV_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 57, 184}, + #endif + #ifdef PROV_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_PROV, PROV_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 57, 173}, + #endif + #ifdef PROV_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_PROV, PROV_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 57, 185}, + #endif + #ifdef PROV_R_BAD_DECRYPT + {"BAD_DECRYPT", ERR_LIB_PROV, PROV_R_BAD_DECRYPT}, + #else + {"BAD_DECRYPT", 57, 100}, + #endif + #ifdef PROV_R_BAD_ENCODING + {"BAD_ENCODING", ERR_LIB_PROV, PROV_R_BAD_ENCODING}, + #else + {"BAD_ENCODING", 57, 141}, + #endif + #ifdef PROV_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_PROV, PROV_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 57, 142}, + #endif + #ifdef PROV_R_BAD_TLS_CLIENT_VERSION + {"BAD_TLS_CLIENT_VERSION", ERR_LIB_PROV, PROV_R_BAD_TLS_CLIENT_VERSION}, + #else + {"BAD_TLS_CLIENT_VERSION", 57, 161}, + #endif + #ifdef PROV_R_BN_ERROR + {"BN_ERROR", ERR_LIB_PROV, PROV_R_BN_ERROR}, + #else + {"BN_ERROR", 57, 160}, + #endif + #ifdef PROV_R_CIPHER_OPERATION_FAILED + {"CIPHER_OPERATION_FAILED", ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED}, + #else + {"CIPHER_OPERATION_FAILED", 57, 102}, + #endif + #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED + {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED}, + #else + {"DERIVATION_FUNCTION_INIT_FAILED", 57, 205}, + #endif + #ifdef PROV_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_PROV, PROV_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 57, 174}, + #endif + #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK + {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK}, + #else + {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", 57, 186}, + #endif + #ifdef PROV_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_PROV, PROV_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 57, 188}, + #endif + #ifdef PROV_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 57, 189}, + #endif + #ifdef PROV_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 57, 190}, + #endif + #ifdef PROV_R_FAILED_DURING_DERIVATION + {"FAILED_DURING_DERIVATION", ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION}, + #else + {"FAILED_DURING_DERIVATION", 57, 164}, + #endif + #ifdef PROV_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_PROV, PROV_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 57, 180}, + #endif + #ifdef PROV_R_FAILED_TO_DECRYPT + {"FAILED_TO_DECRYPT", ERR_LIB_PROV, PROV_R_FAILED_TO_DECRYPT}, + #else + {"FAILED_TO_DECRYPT", 57, 162}, + #endif + #ifdef PROV_R_FAILED_TO_GENERATE_KEY + {"FAILED_TO_GENERATE_KEY", ERR_LIB_PROV, PROV_R_FAILED_TO_GENERATE_KEY}, + #else + {"FAILED_TO_GENERATE_KEY", 57, 121}, + #endif + #ifdef PROV_R_FAILED_TO_GET_PARAMETER + {"FAILED_TO_GET_PARAMETER", ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER}, + #else + {"FAILED_TO_GET_PARAMETER", 57, 103}, + #endif + #ifdef PROV_R_FAILED_TO_SET_PARAMETER + {"FAILED_TO_SET_PARAMETER", ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER}, + #else + {"FAILED_TO_SET_PARAMETER", 57, 104}, + #endif + #ifdef PROV_R_FAILED_TO_SIGN + {"FAILED_TO_SIGN", ERR_LIB_PROV, PROV_R_FAILED_TO_SIGN}, + #else + {"FAILED_TO_SIGN", 57, 175}, + #endif + #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR + {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR}, + #else + {"FIPS_MODULE_CONDITIONAL_ERROR", 57, 227}, + #endif + #ifdef PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE + {"FIPS_MODULE_ENTERING_ERROR_STATE", ERR_LIB_PROV, PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE}, + #else + {"FIPS_MODULE_ENTERING_ERROR_STATE", 57, 224}, + #endif + #ifdef PROV_R_FIPS_MODULE_IN_ERROR_STATE + {"FIPS_MODULE_IN_ERROR_STATE", ERR_LIB_PROV, PROV_R_FIPS_MODULE_IN_ERROR_STATE}, + #else + {"FIPS_MODULE_IN_ERROR_STATE", 57, 225}, + #endif + #ifdef PROV_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_PROV, PROV_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 57, 191}, + #endif + #ifdef PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_PROV, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 57, 165}, + #endif + #ifdef PROV_R_INDICATOR_INTEGRITY_FAILURE + {"INDICATOR_INTEGRITY_FAILURE", ERR_LIB_PROV, PROV_R_INDICATOR_INTEGRITY_FAILURE}, + #else + {"INDICATOR_INTEGRITY_FAILURE", 57, 210}, + #endif + #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH + {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH}, + #else + {"INSUFFICIENT_DRBG_STRENGTH", 57, 181}, + #endif + #ifdef PROV_R_INVALID_AAD + {"INVALID_AAD", ERR_LIB_PROV, PROV_R_INVALID_AAD}, + #else + {"INVALID_AAD", 57, 108}, + #endif + #ifdef PROV_R_INVALID_CONFIG_DATA + {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA}, + #else + {"INVALID_CONFIG_DATA", 57, 211}, + #endif + #ifdef PROV_R_INVALID_CONSTANT_LENGTH + {"INVALID_CONSTANT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_CONSTANT_LENGTH}, + #else + {"INVALID_CONSTANT_LENGTH", 57, 157}, + #endif + #ifdef PROV_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_PROV, PROV_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 57, 176}, + #endif + #ifdef PROV_R_INVALID_CUSTOM_LENGTH + {"INVALID_CUSTOM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_CUSTOM_LENGTH}, + #else + {"INVALID_CUSTOM_LENGTH", 57, 111}, + #endif + #ifdef PROV_R_INVALID_DATA + {"INVALID_DATA", ERR_LIB_PROV, PROV_R_INVALID_DATA}, + #else + {"INVALID_DATA", 57, 115}, + #endif + #ifdef PROV_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_PROV, PROV_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 57, 122}, + #endif + #ifdef PROV_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 57, 166}, + #endif + #ifdef PROV_R_INVALID_DIGEST_SIZE + {"INVALID_DIGEST_SIZE", ERR_LIB_PROV, PROV_R_INVALID_DIGEST_SIZE}, + #else + {"INVALID_DIGEST_SIZE", 57, 218}, + #endif + #ifdef PROV_R_INVALID_ITERATION_COUNT + {"INVALID_ITERATION_COUNT", ERR_LIB_PROV, PROV_R_INVALID_ITERATION_COUNT}, + #else + {"INVALID_ITERATION_COUNT", 57, 123}, + #endif + #ifdef PROV_R_INVALID_IV_LENGTH + {"INVALID_IV_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH}, + #else + {"INVALID_IV_LENGTH", 57, 109}, + #endif + #ifdef PROV_R_INVALID_KEY + {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY}, + #else + {"INVALID_KEY", 57, 158}, + #endif + #ifdef PROV_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 57, 105}, + #endif + #ifdef PROV_R_INVALID_MAC + {"INVALID_MAC", ERR_LIB_PROV, PROV_R_INVALID_MAC}, + #else + {"INVALID_MAC", 57, 151}, + #endif + #ifdef PROV_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 57, 167}, + #endif + #ifdef PROV_R_INVALID_MODE + {"INVALID_MODE", ERR_LIB_PROV, PROV_R_INVALID_MODE}, + #else + {"INVALID_MODE", 57, 125}, + #endif + #ifdef PROV_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 57, 168}, + #endif + #ifdef PROV_R_INVALID_PUBINFO + {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO}, + #else + {"INVALID_PUBINFO", 57, 198}, + #endif + #ifdef PROV_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 57, 112}, + #endif + #ifdef PROV_R_INVALID_SEED_LENGTH + {"INVALID_SEED_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_SEED_LENGTH}, + #else + {"INVALID_SEED_LENGTH", 57, 154}, + #endif + #ifdef PROV_R_INVALID_SIGNATURE_SIZE + {"INVALID_SIGNATURE_SIZE", ERR_LIB_PROV, PROV_R_INVALID_SIGNATURE_SIZE}, + #else + {"INVALID_SIGNATURE_SIZE", 57, 179}, + #endif + #ifdef PROV_R_INVALID_STATE + {"INVALID_STATE", ERR_LIB_PROV, PROV_R_INVALID_STATE}, + #else + {"INVALID_STATE", 57, 212}, + #endif + #ifdef PROV_R_INVALID_TAG + {"INVALID_TAG", ERR_LIB_PROV, PROV_R_INVALID_TAG}, + #else + {"INVALID_TAG", 57, 110}, + #endif + #ifdef PROV_R_INVALID_TAG_LENGTH + {"INVALID_TAG_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_TAG_LENGTH}, + #else + {"INVALID_TAG_LENGTH", 57, 118}, + #endif + #ifdef PROV_R_INVALID_UKM_LENGTH + {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH}, + #else + {"INVALID_UKM_LENGTH", 57, 200}, + #endif + #ifdef PROV_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_PROV, PROV_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 57, 170}, + #endif + #ifdef PROV_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_PROV, PROV_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 57, 192}, + #endif + #ifdef PROV_R_KEY_SETUP_FAILED + {"KEY_SETUP_FAILED", ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED}, + #else + {"KEY_SETUP_FAILED", 57, 101}, + #endif + #ifdef PROV_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_PROV, PROV_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 57, 171}, + #endif + #ifdef PROV_R_MISSING_CEK_ALG + {"MISSING_CEK_ALG", ERR_LIB_PROV, PROV_R_MISSING_CEK_ALG}, + #else + {"MISSING_CEK_ALG", 57, 144}, + #endif + #ifdef PROV_R_MISSING_CIPHER + {"MISSING_CIPHER", ERR_LIB_PROV, PROV_R_MISSING_CIPHER}, + #else + {"MISSING_CIPHER", 57, 155}, + #endif + #ifdef PROV_R_MISSING_CONFIG_DATA + {"MISSING_CONFIG_DATA", ERR_LIB_PROV, PROV_R_MISSING_CONFIG_DATA}, + #else + {"MISSING_CONFIG_DATA", 57, 213}, + #endif + #ifdef PROV_R_MISSING_CONSTANT + {"MISSING_CONSTANT", ERR_LIB_PROV, PROV_R_MISSING_CONSTANT}, + #else + {"MISSING_CONSTANT", 57, 156}, + #endif + #ifdef PROV_R_MISSING_KEY + {"MISSING_KEY", ERR_LIB_PROV, PROV_R_MISSING_KEY}, + #else + {"MISSING_KEY", 57, 128}, + #endif + #ifdef PROV_R_MISSING_MAC + {"MISSING_MAC", ERR_LIB_PROV, PROV_R_MISSING_MAC}, + #else + {"MISSING_MAC", 57, 150}, + #endif + #ifdef PROV_R_MISSING_MESSAGE_DIGEST + {"MISSING_MESSAGE_DIGEST", ERR_LIB_PROV, PROV_R_MISSING_MESSAGE_DIGEST}, + #else + {"MISSING_MESSAGE_DIGEST", 57, 129}, + #endif + #ifdef PROV_R_MISSING_OID + {"MISSING_OID", ERR_LIB_PROV, PROV_R_MISSING_OID}, + #else + {"MISSING_OID", 57, 209}, + #endif + #ifdef PROV_R_MISSING_PASS + {"MISSING_PASS", ERR_LIB_PROV, PROV_R_MISSING_PASS}, + #else + {"MISSING_PASS", 57, 130}, + #endif + #ifdef PROV_R_MISSING_SALT + {"MISSING_SALT", ERR_LIB_PROV, PROV_R_MISSING_SALT}, + #else + {"MISSING_SALT", 57, 131}, + #endif + #ifdef PROV_R_MISSING_SECRET + {"MISSING_SECRET", ERR_LIB_PROV, PROV_R_MISSING_SECRET}, + #else + {"MISSING_SECRET", 57, 132}, + #endif + #ifdef PROV_R_MISSING_SEED + {"MISSING_SEED", ERR_LIB_PROV, PROV_R_MISSING_SEED}, + #else + {"MISSING_SEED", 57, 140}, + #endif + #ifdef PROV_R_MISSING_SESSION_ID + {"MISSING_SESSION_ID", ERR_LIB_PROV, PROV_R_MISSING_SESSION_ID}, + #else + {"MISSING_SESSION_ID", 57, 133}, + #endif + #ifdef PROV_R_MISSING_TYPE + {"MISSING_TYPE", ERR_LIB_PROV, PROV_R_MISSING_TYPE}, + #else + {"MISSING_TYPE", 57, 134}, + #endif + #ifdef PROV_R_MISSING_XCGHASH + {"MISSING_XCGHASH", ERR_LIB_PROV, PROV_R_MISSING_XCGHASH}, + #else + {"MISSING_XCGHASH", 57, 135}, + #endif + #ifdef PROV_R_MODULE_INTEGRITY_FAILURE + {"MODULE_INTEGRITY_FAILURE", ERR_LIB_PROV, PROV_R_MODULE_INTEGRITY_FAILURE}, + #else + {"MODULE_INTEGRITY_FAILURE", 57, 214}, + #endif + #ifdef PROV_R_NOT_A_PRIVATE_KEY + {"NOT_A_PRIVATE_KEY", ERR_LIB_PROV, PROV_R_NOT_A_PRIVATE_KEY}, + #else + {"NOT_A_PRIVATE_KEY", 57, 221}, + #endif + #ifdef PROV_R_NOT_A_PUBLIC_KEY + {"NOT_A_PUBLIC_KEY", ERR_LIB_PROV, PROV_R_NOT_A_PUBLIC_KEY}, + #else + {"NOT_A_PUBLIC_KEY", 57, 220}, + #endif + #ifdef PROV_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_PROV, PROV_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 57, 193}, + #endif + #ifdef PROV_R_NOT_PARAMETERS + {"NOT_PARAMETERS", ERR_LIB_PROV, PROV_R_NOT_PARAMETERS}, + #else + {"NOT_PARAMETERS", 57, 226}, + #endif + #ifdef PROV_R_NOT_SUPPORTED + {"NOT_SUPPORTED", ERR_LIB_PROV, PROV_R_NOT_SUPPORTED}, + #else + {"NOT_SUPPORTED", 57, 136}, + #endif + #ifdef PROV_R_NOT_XOF_OR_INVALID_LENGTH + {"NOT_XOF_OR_INVALID_LENGTH", ERR_LIB_PROV, PROV_R_NOT_XOF_OR_INVALID_LENGTH}, + #else + {"NOT_XOF_OR_INVALID_LENGTH", 57, 113}, + #endif + #ifdef PROV_R_NO_KEY_SET + {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET}, + #else + {"NO_KEY_SET", 57, 114}, + #endif + #ifdef PROV_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_PROV, PROV_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 57, 177}, + #endif + #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 57, 178}, + #endif + #ifdef PROV_R_OUTPUT_BUFFER_TOO_SMALL + {"OUTPUT_BUFFER_TOO_SMALL", ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL}, + #else + {"OUTPUT_BUFFER_TOO_SMALL", 57, 106}, + #endif + #ifdef PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS + {"PARENT_CANNOT_GENERATE_RANDOM_NUMBERS", ERR_LIB_PROV, PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS}, + #else + {"PARENT_CANNOT_GENERATE_RANDOM_NUMBERS", 57, 228}, + #endif + #ifdef PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED + {"PARENT_CANNOT_SUPPLY_ENTROPY_SEED", ERR_LIB_PROV, PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED}, + #else + {"PARENT_CANNOT_SUPPLY_ENTROPY_SEED", 57, 187}, + #endif + #ifdef PROV_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 57, 182}, + #endif + #ifdef PROV_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 57, 194}, + #endif + #ifdef PROV_R_PATH_MUST_BE_ABSOLUTE + {"PATH_MUST_BE_ABSOLUTE", ERR_LIB_PROV, PROV_R_PATH_MUST_BE_ABSOLUTE}, + #else + {"PATH_MUST_BE_ABSOLUTE", 57, 219}, + #endif + #ifdef PROV_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_PROV, PROV_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 57, 195}, + #endif + #ifdef PROV_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_PROV, PROV_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 57, 172}, + #endif + #ifdef PROV_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_PROV, PROV_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 57, 196}, + #endif + #ifdef PROV_R_REQUIRE_CTR_MODE_CIPHER + {"REQUIRE_CTR_MODE_CIPHER", ERR_LIB_PROV, PROV_R_REQUIRE_CTR_MODE_CIPHER}, + #else + {"REQUIRE_CTR_MODE_CIPHER", 57, 206}, + #endif + #ifdef PROV_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_PROV, PROV_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 57, 197}, + #endif + #ifdef PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", ERR_LIB_PROV, PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES}, + #else + {"SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES", 57, 222}, + #endif + #ifdef PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT + {"SEED_SOURCES_MUST_NOT_HAVE_A_PARENT", ERR_LIB_PROV, PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT}, + #else + {"SEED_SOURCES_MUST_NOT_HAVE_A_PARENT", 57, 229}, + #endif + #ifdef PROV_R_SELF_TEST_KAT_FAILURE + {"SELF_TEST_KAT_FAILURE", ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE}, + #else + {"SELF_TEST_KAT_FAILURE", 57, 215}, + #endif + #ifdef PROV_R_SELF_TEST_POST_FAILURE + {"SELF_TEST_POST_FAILURE", ERR_LIB_PROV, PROV_R_SELF_TEST_POST_FAILURE}, + #else + {"SELF_TEST_POST_FAILURE", 57, 216}, + #endif + #ifdef PROV_R_TAG_NOT_NEEDED + {"TAG_NOT_NEEDED", ERR_LIB_PROV, PROV_R_TAG_NOT_NEEDED}, + #else + {"TAG_NOT_NEEDED", 57, 120}, + #endif + #ifdef PROV_R_TAG_NOT_SET + {"TAG_NOT_SET", ERR_LIB_PROV, PROV_R_TAG_NOT_SET}, + #else + {"TAG_NOT_SET", 57, 119}, + #endif + #ifdef PROV_R_TOO_MANY_RECORDS + {"TOO_MANY_RECORDS", ERR_LIB_PROV, PROV_R_TOO_MANY_RECORDS}, + #else + {"TOO_MANY_RECORDS", 57, 126}, + #endif + #ifdef PROV_R_UNABLE_TO_FIND_CIPHERS + {"UNABLE_TO_FIND_CIPHERS", ERR_LIB_PROV, PROV_R_UNABLE_TO_FIND_CIPHERS}, + #else + {"UNABLE_TO_FIND_CIPHERS", 57, 207}, + #endif + #ifdef PROV_R_UNABLE_TO_GET_PARENT_STRENGTH + {"UNABLE_TO_GET_PARENT_STRENGTH", ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH}, + #else + {"UNABLE_TO_GET_PARENT_STRENGTH", 57, 199}, + #endif + #ifdef PROV_R_UNABLE_TO_GET_PASSPHRASE + {"UNABLE_TO_GET_PASSPHRASE", ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PASSPHRASE}, + #else + {"UNABLE_TO_GET_PASSPHRASE", 57, 159}, + #endif + #ifdef PROV_R_UNABLE_TO_INITIALISE_CIPHERS + {"UNABLE_TO_INITIALISE_CIPHERS", ERR_LIB_PROV, PROV_R_UNABLE_TO_INITIALISE_CIPHERS}, + #else + {"UNABLE_TO_INITIALISE_CIPHERS", 57, 208}, + #endif + #ifdef PROV_R_UNABLE_TO_LOAD_SHA256 + {"UNABLE_TO_LOAD_SHA256", ERR_LIB_PROV, PROV_R_UNABLE_TO_LOAD_SHA256}, + #else + {"UNABLE_TO_LOAD_SHA256", 57, 147}, + #endif + #ifdef PROV_R_UNABLE_TO_LOCK_PARENT + {"UNABLE_TO_LOCK_PARENT", ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT}, + #else + {"UNABLE_TO_LOCK_PARENT", 57, 201}, + #endif + #ifdef PROV_R_UNABLE_TO_RESEED + {"UNABLE_TO_RESEED", ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED}, + #else + {"UNABLE_TO_RESEED", 57, 204}, + #endif + #ifdef PROV_R_UNSUPPORTED_CEK_ALG + {"UNSUPPORTED_CEK_ALG", ERR_LIB_PROV, PROV_R_UNSUPPORTED_CEK_ALG}, + #else + {"UNSUPPORTED_CEK_ALG", 57, 145}, + #endif + #ifdef PROV_R_UNSUPPORTED_KEY_SIZE + {"UNSUPPORTED_KEY_SIZE", ERR_LIB_PROV, PROV_R_UNSUPPORTED_KEY_SIZE}, + #else + {"UNSUPPORTED_KEY_SIZE", 57, 153}, + #endif + #ifdef PROV_R_UNSUPPORTED_MAC_TYPE + {"UNSUPPORTED_MAC_TYPE", ERR_LIB_PROV, PROV_R_UNSUPPORTED_MAC_TYPE}, + #else + {"UNSUPPORTED_MAC_TYPE", 57, 137}, + #endif + #ifdef PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS + {"UNSUPPORTED_NUMBER_OF_ROUNDS", ERR_LIB_PROV, PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS}, + #else + {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152}, + #endif + #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED + {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED}, + #else + {"URI_AUTHORITY_UNSUPPORTED", 57, 223}, + #endif + #ifdef PROV_R_VALUE_ERROR + {"VALUE_ERROR", ERR_LIB_PROV, PROV_R_VALUE_ERROR}, + #else + {"VALUE_ERROR", 57, 138}, + #endif + #ifdef PROV_R_WRONG_FINAL_BLOCK_LENGTH + {"WRONG_FINAL_BLOCK_LENGTH", ERR_LIB_PROV, PROV_R_WRONG_FINAL_BLOCK_LENGTH}, + #else + {"WRONG_FINAL_BLOCK_LENGTH", 57, 107}, + #endif + #ifdef PROV_R_WRONG_OUTPUT_BUFFER_SIZE + {"WRONG_OUTPUT_BUFFER_SIZE", ERR_LIB_PROV, PROV_R_WRONG_OUTPUT_BUFFER_SIZE}, + #else + {"WRONG_OUTPUT_BUFFER_SIZE", 57, 139}, + #endif + #ifdef PROV_R_XOF_DIGESTS_NOT_ALLOWED + {"XOF_DIGESTS_NOT_ALLOWED", ERR_LIB_PROV, PROV_R_XOF_DIGESTS_NOT_ALLOWED}, + #else + {"XOF_DIGESTS_NOT_ALLOWED", 57, 183}, + #endif + #ifdef PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE + {"XTS_DATA_UNIT_IS_TOO_LARGE", ERR_LIB_PROV, PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE}, + #else + {"XTS_DATA_UNIT_IS_TOO_LARGE", 57, 148}, + #endif + #ifdef PROV_R_XTS_DUPLICATED_KEYS + {"XTS_DUPLICATED_KEYS", ERR_LIB_PROV, PROV_R_XTS_DUPLICATED_KEYS}, + #else + {"XTS_DUPLICATED_KEYS", 57, 149}, + #endif + #ifdef RAND_R_ADDITIONAL_INPUT_TOO_LONG + {"ADDITIONAL_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ADDITIONAL_INPUT_TOO_LONG}, + #else + {"ADDITIONAL_INPUT_TOO_LONG", 36, 102}, + #endif + #ifdef RAND_R_ALREADY_INSTANTIATED + {"ALREADY_INSTANTIATED", ERR_LIB_RAND, RAND_R_ALREADY_INSTANTIATED}, + #else + {"ALREADY_INSTANTIATED", 36, 103}, + #endif + #ifdef RAND_R_ARGUMENT_OUT_OF_RANGE + {"ARGUMENT_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE}, + #else + {"ARGUMENT_OUT_OF_RANGE", 36, 105}, + #endif + #ifdef RAND_R_CANNOT_OPEN_FILE + {"CANNOT_OPEN_FILE", ERR_LIB_RAND, RAND_R_CANNOT_OPEN_FILE}, + #else + {"CANNOT_OPEN_FILE", 36, 121}, + #endif + #ifdef RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS + {"DERIVATION_FUNCTION_MANDATORY_FOR_FIPS", ERR_LIB_RAND, RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS}, + #else + {"DERIVATION_FUNCTION_MANDATORY_FOR_FIPS", 36, 137}, + #endif + #ifdef RAND_R_DRBG_ALREADY_INITIALIZED + {"DRBG_ALREADY_INITIALIZED", ERR_LIB_RAND, RAND_R_DRBG_ALREADY_INITIALIZED}, + #else + {"DRBG_ALREADY_INITIALIZED", 36, 129}, + #endif + #ifdef RAND_R_DRBG_NOT_INITIALISED + {"DRBG_NOT_INITIALISED", ERR_LIB_RAND, RAND_R_DRBG_NOT_INITIALISED}, + #else + {"DRBG_NOT_INITIALISED", 36, 104}, + #endif + #ifdef RAND_R_ENTROPY_INPUT_TOO_LONG + {"ENTROPY_INPUT_TOO_LONG", ERR_LIB_RAND, RAND_R_ENTROPY_INPUT_TOO_LONG}, + #else + {"ENTROPY_INPUT_TOO_LONG", 36, 106}, + #endif + #ifdef RAND_R_ENTROPY_OUT_OF_RANGE + {"ENTROPY_OUT_OF_RANGE", ERR_LIB_RAND, RAND_R_ENTROPY_OUT_OF_RANGE}, + #else + {"ENTROPY_OUT_OF_RANGE", 36, 124}, + #endif + #ifdef RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED + {"ERROR_ENTROPY_POOL_WAS_IGNORED", ERR_LIB_RAND, RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED}, + #else + {"ERROR_ENTROPY_POOL_WAS_IGNORED", 36, 127}, + #endif + #ifdef RAND_R_ERROR_INITIALISING_DRBG + {"ERROR_INITIALISING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INITIALISING_DRBG}, + #else + {"ERROR_INITIALISING_DRBG", 36, 107}, + #endif + #ifdef RAND_R_ERROR_INSTANTIATING_DRBG + {"ERROR_INSTANTIATING_DRBG", ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG}, + #else + {"ERROR_INSTANTIATING_DRBG", 36, 108}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT}, + #else + {"ERROR_RETRIEVING_ADDITIONAL_INPUT", 36, 109}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_ENTROPY + {"ERROR_RETRIEVING_ENTROPY", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_ENTROPY}, + #else + {"ERROR_RETRIEVING_ENTROPY", 36, 110}, + #endif + #ifdef RAND_R_ERROR_RETRIEVING_NONCE + {"ERROR_RETRIEVING_NONCE", ERR_LIB_RAND, RAND_R_ERROR_RETRIEVING_NONCE}, + #else + {"ERROR_RETRIEVING_NONCE", 36, 111}, + #endif + #ifdef RAND_R_FAILED_TO_CREATE_LOCK + {"FAILED_TO_CREATE_LOCK", ERR_LIB_RAND, RAND_R_FAILED_TO_CREATE_LOCK}, + #else + {"FAILED_TO_CREATE_LOCK", 36, 126}, + #endif + #ifdef RAND_R_FUNC_NOT_IMPLEMENTED + {"FUNC_NOT_IMPLEMENTED", ERR_LIB_RAND, RAND_R_FUNC_NOT_IMPLEMENTED}, + #else + {"FUNC_NOT_IMPLEMENTED", 36, 101}, + #endif + #ifdef RAND_R_FWRITE_ERROR + {"FWRITE_ERROR", ERR_LIB_RAND, RAND_R_FWRITE_ERROR}, + #else + {"FWRITE_ERROR", 36, 123}, + #endif + #ifdef RAND_R_GENERATE_ERROR + {"GENERATE_ERROR", ERR_LIB_RAND, RAND_R_GENERATE_ERROR}, + #else + {"GENERATE_ERROR", 36, 112}, + #endif + #ifdef RAND_R_INSUFFICIENT_DRBG_STRENGTH + {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_RAND, RAND_R_INSUFFICIENT_DRBG_STRENGTH}, + #else + {"INSUFFICIENT_DRBG_STRENGTH", 36, 139}, + #endif + #ifdef RAND_R_INTERNAL_ERROR + {"INTERNAL_ERROR", ERR_LIB_RAND, RAND_R_INTERNAL_ERROR}, + #else + {"INTERNAL_ERROR", 36, 113}, + #endif + #ifdef RAND_R_IN_ERROR_STATE + {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE}, + #else + {"IN_ERROR_STATE", 36, 114}, + #endif + #ifdef RAND_R_NOT_A_REGULAR_FILE + {"NOT_A_REGULAR_FILE", ERR_LIB_RAND, RAND_R_NOT_A_REGULAR_FILE}, + #else + {"NOT_A_REGULAR_FILE", 36, 122}, + #endif + #ifdef RAND_R_NOT_INSTANTIATED + {"NOT_INSTANTIATED", ERR_LIB_RAND, RAND_R_NOT_INSTANTIATED}, + #else + {"NOT_INSTANTIATED", 36, 115}, + #endif + #ifdef RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED + {"NO_DRBG_IMPLEMENTATION_SELECTED", ERR_LIB_RAND, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED}, + #else + {"NO_DRBG_IMPLEMENTATION_SELECTED", 36, 128}, + #endif + #ifdef RAND_R_PARENT_LOCKING_NOT_ENABLED + {"PARENT_LOCKING_NOT_ENABLED", ERR_LIB_RAND, RAND_R_PARENT_LOCKING_NOT_ENABLED}, + #else + {"PARENT_LOCKING_NOT_ENABLED", 36, 130}, + #endif + #ifdef RAND_R_PARENT_STRENGTH_TOO_WEAK + {"PARENT_STRENGTH_TOO_WEAK", ERR_LIB_RAND, RAND_R_PARENT_STRENGTH_TOO_WEAK}, + #else + {"PARENT_STRENGTH_TOO_WEAK", 36, 131}, + #endif + #ifdef RAND_R_PERSONALISATION_STRING_TOO_LONG + {"PERSONALISATION_STRING_TOO_LONG", ERR_LIB_RAND, RAND_R_PERSONALISATION_STRING_TOO_LONG}, + #else + {"PERSONALISATION_STRING_TOO_LONG", 36, 116}, + #endif + #ifdef RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", ERR_LIB_RAND, RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED}, + #else + {"PREDICTION_RESISTANCE_NOT_SUPPORTED", 36, 133}, + #endif + #ifdef RAND_R_PRNG_NOT_SEEDED + {"PRNG_NOT_SEEDED", ERR_LIB_RAND, RAND_R_PRNG_NOT_SEEDED}, + #else + {"PRNG_NOT_SEEDED", 36, 100}, + #endif + #ifdef RAND_R_RANDOM_POOL_OVERFLOW + {"RANDOM_POOL_OVERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW}, + #else + {"RANDOM_POOL_OVERFLOW", 36, 125}, + #endif + #ifdef RAND_R_RANDOM_POOL_UNDERFLOW + {"RANDOM_POOL_UNDERFLOW", ERR_LIB_RAND, RAND_R_RANDOM_POOL_UNDERFLOW}, + #else + {"RANDOM_POOL_UNDERFLOW", 36, 134}, + #endif + #ifdef RAND_R_REQUEST_TOO_LARGE_FOR_DRBG + {"REQUEST_TOO_LARGE_FOR_DRBG", ERR_LIB_RAND, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG}, + #else + {"REQUEST_TOO_LARGE_FOR_DRBG", 36, 117}, + #endif + #ifdef RAND_R_RESEED_ERROR + {"RESEED_ERROR", ERR_LIB_RAND, RAND_R_RESEED_ERROR}, + #else + {"RESEED_ERROR", 36, 118}, + #endif + #ifdef RAND_R_SELFTEST_FAILURE + {"SELFTEST_FAILURE", ERR_LIB_RAND, RAND_R_SELFTEST_FAILURE}, + #else + {"SELFTEST_FAILURE", 36, 119}, + #endif + #ifdef RAND_R_TOO_LITTLE_NONCE_REQUESTED + {"TOO_LITTLE_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_LITTLE_NONCE_REQUESTED}, + #else + {"TOO_LITTLE_NONCE_REQUESTED", 36, 135}, + #endif + #ifdef RAND_R_TOO_MUCH_NONCE_REQUESTED + {"TOO_MUCH_NONCE_REQUESTED", ERR_LIB_RAND, RAND_R_TOO_MUCH_NONCE_REQUESTED}, + #else + {"TOO_MUCH_NONCE_REQUESTED", 36, 136}, + #endif + #ifdef RAND_R_UNABLE_TO_CREATE_DRBG + {"UNABLE_TO_CREATE_DRBG", ERR_LIB_RAND, RAND_R_UNABLE_TO_CREATE_DRBG}, + #else + {"UNABLE_TO_CREATE_DRBG", 36, 143}, + #endif + #ifdef RAND_R_UNABLE_TO_FETCH_DRBG + {"UNABLE_TO_FETCH_DRBG", ERR_LIB_RAND, RAND_R_UNABLE_TO_FETCH_DRBG}, + #else + {"UNABLE_TO_FETCH_DRBG", 36, 144}, + #endif + #ifdef RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER + {"UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER", ERR_LIB_RAND, RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER}, + #else + {"UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER", 36, 141}, + #endif + #ifdef RAND_R_UNABLE_TO_GET_PARENT_STRENGTH + {"UNABLE_TO_GET_PARENT_STRENGTH", ERR_LIB_RAND, RAND_R_UNABLE_TO_GET_PARENT_STRENGTH}, + #else + {"UNABLE_TO_GET_PARENT_STRENGTH", 36, 138}, + #endif + #ifdef RAND_R_UNABLE_TO_LOCK_PARENT + {"UNABLE_TO_LOCK_PARENT", ERR_LIB_RAND, RAND_R_UNABLE_TO_LOCK_PARENT}, + #else + {"UNABLE_TO_LOCK_PARENT", 36, 140}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_FLAGS + {"UNSUPPORTED_DRBG_FLAGS", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_FLAGS}, + #else + {"UNSUPPORTED_DRBG_FLAGS", 36, 132}, + #endif + #ifdef RAND_R_UNSUPPORTED_DRBG_TYPE + {"UNSUPPORTED_DRBG_TYPE", ERR_LIB_RAND, RAND_R_UNSUPPORTED_DRBG_TYPE}, + #else + {"UNSUPPORTED_DRBG_TYPE", 36, 120}, + #endif + #ifdef RSA_R_ALGORITHM_MISMATCH + {"ALGORITHM_MISMATCH", ERR_LIB_RSA, RSA_R_ALGORITHM_MISMATCH}, + #else + {"ALGORITHM_MISMATCH", 4, 100}, + #endif + #ifdef RSA_R_BAD_E_VALUE + {"BAD_E_VALUE", ERR_LIB_RSA, RSA_R_BAD_E_VALUE}, + #else + {"BAD_E_VALUE", 4, 101}, + #endif + #ifdef RSA_R_BAD_FIXED_HEADER_DECRYPT + {"BAD_FIXED_HEADER_DECRYPT", ERR_LIB_RSA, RSA_R_BAD_FIXED_HEADER_DECRYPT}, + #else + {"BAD_FIXED_HEADER_DECRYPT", 4, 102}, + #endif + #ifdef RSA_R_BAD_PAD_BYTE_COUNT + {"BAD_PAD_BYTE_COUNT", ERR_LIB_RSA, RSA_R_BAD_PAD_BYTE_COUNT}, + #else + {"BAD_PAD_BYTE_COUNT", 4, 103}, + #endif + #ifdef RSA_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_RSA, RSA_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 4, 104}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_01 + {"BLOCK_TYPE_IS_NOT_01", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_01}, + #else + {"BLOCK_TYPE_IS_NOT_01", 4, 106}, + #endif + #ifdef RSA_R_BLOCK_TYPE_IS_NOT_02 + {"BLOCK_TYPE_IS_NOT_02", ERR_LIB_RSA, RSA_R_BLOCK_TYPE_IS_NOT_02}, + #else + {"BLOCK_TYPE_IS_NOT_02", 4, 107}, + #endif + #ifdef RSA_R_DATA_GREATER_THAN_MOD_LEN + {"DATA_GREATER_THAN_MOD_LEN", ERR_LIB_RSA, RSA_R_DATA_GREATER_THAN_MOD_LEN}, + #else + {"DATA_GREATER_THAN_MOD_LEN", 4, 108}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE + {"DATA_TOO_LARGE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE}, + #else + {"DATA_TOO_LARGE", 4, 109}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE + {"DATA_TOO_LARGE_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE}, + #else + {"DATA_TOO_LARGE_FOR_KEY_SIZE", 4, 110}, + #endif + #ifdef RSA_R_DATA_TOO_LARGE_FOR_MODULUS + {"DATA_TOO_LARGE_FOR_MODULUS", ERR_LIB_RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS}, + #else + {"DATA_TOO_LARGE_FOR_MODULUS", 4, 132}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL + {"DATA_TOO_SMALL", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL}, + #else + {"DATA_TOO_SMALL", 4, 111}, + #endif + #ifdef RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE + {"DATA_TOO_SMALL_FOR_KEY_SIZE", ERR_LIB_RSA, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE}, + #else + {"DATA_TOO_SMALL_FOR_KEY_SIZE", 4, 122}, + #endif + #ifdef RSA_R_DIGEST_DOES_NOT_MATCH + {"DIGEST_DOES_NOT_MATCH", ERR_LIB_RSA, RSA_R_DIGEST_DOES_NOT_MATCH}, + #else + {"DIGEST_DOES_NOT_MATCH", 4, 158}, + #endif + #ifdef RSA_R_DIGEST_NOT_ALLOWED + {"DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED}, + #else + {"DIGEST_NOT_ALLOWED", 4, 145}, + #endif + #ifdef RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY + {"DIGEST_TOO_BIG_FOR_RSA_KEY", ERR_LIB_RSA, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY}, + #else + {"DIGEST_TOO_BIG_FOR_RSA_KEY", 4, 112}, + #endif + #ifdef RSA_R_DMP1_NOT_CONGRUENT_TO_D + {"DMP1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMP1_NOT_CONGRUENT_TO_D}, + #else + {"DMP1_NOT_CONGRUENT_TO_D", 4, 124}, + #endif + #ifdef RSA_R_DMQ1_NOT_CONGRUENT_TO_D + {"DMQ1_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_DMQ1_NOT_CONGRUENT_TO_D}, + #else + {"DMQ1_NOT_CONGRUENT_TO_D", 4, 125}, + #endif + #ifdef RSA_R_D_E_NOT_CONGRUENT_TO_1 + {"D_E_NOT_CONGRUENT_TO_1", ERR_LIB_RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1}, + #else + {"D_E_NOT_CONGRUENT_TO_1", 4, 123}, + #endif + #ifdef RSA_R_FIRST_OCTET_INVALID + {"FIRST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_FIRST_OCTET_INVALID}, + #else + {"FIRST_OCTET_INVALID", 4, 133}, + #endif + #ifdef RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", ERR_LIB_RSA, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE}, + #else + {"ILLEGAL_OR_UNSUPPORTED_PADDING_MODE", 4, 144}, + #endif + #ifdef RSA_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 4, 157}, + #endif + #ifdef RSA_R_INVALID_DIGEST_LENGTH + {"INVALID_DIGEST_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_DIGEST_LENGTH}, + #else + {"INVALID_DIGEST_LENGTH", 4, 143}, + #endif + #ifdef RSA_R_INVALID_HEADER + {"INVALID_HEADER", ERR_LIB_RSA, RSA_R_INVALID_HEADER}, + #else + {"INVALID_HEADER", 4, 137}, + #endif + #ifdef RSA_R_INVALID_KEYPAIR + {"INVALID_KEYPAIR", ERR_LIB_RSA, RSA_R_INVALID_KEYPAIR}, + #else + {"INVALID_KEYPAIR", 4, 171}, + #endif + #ifdef RSA_R_INVALID_KEY_LENGTH + {"INVALID_KEY_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_KEY_LENGTH}, + #else + {"INVALID_KEY_LENGTH", 4, 173}, + #endif + #ifdef RSA_R_INVALID_LABEL + {"INVALID_LABEL", ERR_LIB_RSA, RSA_R_INVALID_LABEL}, + #else + {"INVALID_LABEL", 4, 160}, + #endif + #ifdef RSA_R_INVALID_MESSAGE_LENGTH + {"INVALID_MESSAGE_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_MESSAGE_LENGTH}, + #else + {"INVALID_MESSAGE_LENGTH", 4, 131}, + #endif + #ifdef RSA_R_INVALID_MGF1_MD + {"INVALID_MGF1_MD", ERR_LIB_RSA, RSA_R_INVALID_MGF1_MD}, + #else + {"INVALID_MGF1_MD", 4, 156}, + #endif + #ifdef RSA_R_INVALID_MODULUS + {"INVALID_MODULUS", ERR_LIB_RSA, RSA_R_INVALID_MODULUS}, + #else + {"INVALID_MODULUS", 4, 174}, + #endif + #ifdef RSA_R_INVALID_MULTI_PRIME_KEY + {"INVALID_MULTI_PRIME_KEY", ERR_LIB_RSA, RSA_R_INVALID_MULTI_PRIME_KEY}, + #else + {"INVALID_MULTI_PRIME_KEY", 4, 167}, + #endif + #ifdef RSA_R_INVALID_OAEP_PARAMETERS + {"INVALID_OAEP_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_OAEP_PARAMETERS}, + #else + {"INVALID_OAEP_PARAMETERS", 4, 161}, + #endif + #ifdef RSA_R_INVALID_PADDING + {"INVALID_PADDING", ERR_LIB_RSA, RSA_R_INVALID_PADDING}, + #else + {"INVALID_PADDING", 4, 138}, + #endif + #ifdef RSA_R_INVALID_PADDING_MODE + {"INVALID_PADDING_MODE", ERR_LIB_RSA, RSA_R_INVALID_PADDING_MODE}, + #else + {"INVALID_PADDING_MODE", 4, 141}, + #endif + #ifdef RSA_R_INVALID_PSS_PARAMETERS + {"INVALID_PSS_PARAMETERS", ERR_LIB_RSA, RSA_R_INVALID_PSS_PARAMETERS}, + #else + {"INVALID_PSS_PARAMETERS", 4, 149}, + #endif + #ifdef RSA_R_INVALID_PSS_SALTLEN + {"INVALID_PSS_SALTLEN", ERR_LIB_RSA, RSA_R_INVALID_PSS_SALTLEN}, + #else + {"INVALID_PSS_SALTLEN", 4, 146}, + #endif + #ifdef RSA_R_INVALID_REQUEST + {"INVALID_REQUEST", ERR_LIB_RSA, RSA_R_INVALID_REQUEST}, + #else + {"INVALID_REQUEST", 4, 175}, + #endif + #ifdef RSA_R_INVALID_SALT_LENGTH + {"INVALID_SALT_LENGTH", ERR_LIB_RSA, RSA_R_INVALID_SALT_LENGTH}, + #else + {"INVALID_SALT_LENGTH", 4, 150}, + #endif + #ifdef RSA_R_INVALID_STRENGTH + {"INVALID_STRENGTH", ERR_LIB_RSA, RSA_R_INVALID_STRENGTH}, + #else + {"INVALID_STRENGTH", 4, 176}, + #endif + #ifdef RSA_R_INVALID_TRAILER + {"INVALID_TRAILER", ERR_LIB_RSA, RSA_R_INVALID_TRAILER}, + #else + {"INVALID_TRAILER", 4, 139}, + #endif + #ifdef RSA_R_INVALID_X931_DIGEST + {"INVALID_X931_DIGEST", ERR_LIB_RSA, RSA_R_INVALID_X931_DIGEST}, + #else + {"INVALID_X931_DIGEST", 4, 142}, + #endif + #ifdef RSA_R_IQMP_NOT_INVERSE_OF_Q + {"IQMP_NOT_INVERSE_OF_Q", ERR_LIB_RSA, RSA_R_IQMP_NOT_INVERSE_OF_Q}, + #else + {"IQMP_NOT_INVERSE_OF_Q", 4, 126}, + #endif + #ifdef RSA_R_KEY_PRIME_NUM_INVALID + {"KEY_PRIME_NUM_INVALID", ERR_LIB_RSA, RSA_R_KEY_PRIME_NUM_INVALID}, + #else + {"KEY_PRIME_NUM_INVALID", 4, 165}, + #endif + #ifdef RSA_R_KEY_SIZE_TOO_SMALL + {"KEY_SIZE_TOO_SMALL", ERR_LIB_RSA, RSA_R_KEY_SIZE_TOO_SMALL}, + #else + {"KEY_SIZE_TOO_SMALL", 4, 120}, + #endif + #ifdef RSA_R_LAST_OCTET_INVALID + {"LAST_OCTET_INVALID", ERR_LIB_RSA, RSA_R_LAST_OCTET_INVALID}, + #else + {"LAST_OCTET_INVALID", 4, 134}, + #endif + #ifdef RSA_R_MGF1_DIGEST_NOT_ALLOWED + {"MGF1_DIGEST_NOT_ALLOWED", ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED}, + #else + {"MGF1_DIGEST_NOT_ALLOWED", 4, 152}, + #endif + #ifdef RSA_R_MISSING_PRIVATE_KEY + {"MISSING_PRIVATE_KEY", ERR_LIB_RSA, RSA_R_MISSING_PRIVATE_KEY}, + #else + {"MISSING_PRIVATE_KEY", 4, 179}, + #endif + #ifdef RSA_R_MODULUS_TOO_LARGE + {"MODULUS_TOO_LARGE", ERR_LIB_RSA, RSA_R_MODULUS_TOO_LARGE}, + #else + {"MODULUS_TOO_LARGE", 4, 105}, + #endif + #ifdef RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", ERR_LIB_RSA, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R}, + #else + {"MP_COEFFICIENT_NOT_INVERSE_OF_R", 4, 168}, + #endif + #ifdef RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", ERR_LIB_RSA, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D}, + #else + {"MP_EXPONENT_NOT_CONGRUENT_TO_D", 4, 169}, + #endif + #ifdef RSA_R_MP_R_NOT_PRIME + {"MP_R_NOT_PRIME", ERR_LIB_RSA, RSA_R_MP_R_NOT_PRIME}, + #else + {"MP_R_NOT_PRIME", 4, 170}, + #endif + #ifdef RSA_R_NO_PUBLIC_EXPONENT + {"NO_PUBLIC_EXPONENT", ERR_LIB_RSA, RSA_R_NO_PUBLIC_EXPONENT}, + #else + {"NO_PUBLIC_EXPONENT", 4, 140}, + #endif + #ifdef RSA_R_NULL_BEFORE_BLOCK_MISSING + {"NULL_BEFORE_BLOCK_MISSING", ERR_LIB_RSA, RSA_R_NULL_BEFORE_BLOCK_MISSING}, + #else + {"NULL_BEFORE_BLOCK_MISSING", 4, 113}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES}, + #else + {"N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES", 4, 172}, + #endif + #ifdef RSA_R_N_DOES_NOT_EQUAL_P_Q + {"N_DOES_NOT_EQUAL_P_Q", ERR_LIB_RSA, RSA_R_N_DOES_NOT_EQUAL_P_Q}, + #else + {"N_DOES_NOT_EQUAL_P_Q", 4, 127}, + #endif + #ifdef RSA_R_OAEP_DECODING_ERROR + {"OAEP_DECODING_ERROR", ERR_LIB_RSA, RSA_R_OAEP_DECODING_ERROR}, + #else + {"OAEP_DECODING_ERROR", 4, 121}, + #endif + #ifdef RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_RSA, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE}, + #else + {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 4, 148}, + #endif + #ifdef RSA_R_PADDING_CHECK_FAILED + {"PADDING_CHECK_FAILED", ERR_LIB_RSA, RSA_R_PADDING_CHECK_FAILED}, + #else + {"PADDING_CHECK_FAILED", 4, 114}, + #endif + #ifdef RSA_R_PAIRWISE_TEST_FAILURE + {"PAIRWISE_TEST_FAILURE", ERR_LIB_RSA, RSA_R_PAIRWISE_TEST_FAILURE}, + #else + {"PAIRWISE_TEST_FAILURE", 4, 177}, + #endif + #ifdef RSA_R_PKCS_DECODING_ERROR + {"PKCS_DECODING_ERROR", ERR_LIB_RSA, RSA_R_PKCS_DECODING_ERROR}, + #else + {"PKCS_DECODING_ERROR", 4, 159}, + #endif + #ifdef RSA_R_PSS_SALTLEN_TOO_SMALL + {"PSS_SALTLEN_TOO_SMALL", ERR_LIB_RSA, RSA_R_PSS_SALTLEN_TOO_SMALL}, + #else + {"PSS_SALTLEN_TOO_SMALL", 4, 164}, + #endif + #ifdef RSA_R_PUB_EXPONENT_OUT_OF_RANGE + {"PUB_EXPONENT_OUT_OF_RANGE", ERR_LIB_RSA, RSA_R_PUB_EXPONENT_OUT_OF_RANGE}, + #else + {"PUB_EXPONENT_OUT_OF_RANGE", 4, 178}, + #endif + #ifdef RSA_R_P_NOT_PRIME + {"P_NOT_PRIME", ERR_LIB_RSA, RSA_R_P_NOT_PRIME}, + #else + {"P_NOT_PRIME", 4, 128}, + #endif + #ifdef RSA_R_Q_NOT_PRIME + {"Q_NOT_PRIME", ERR_LIB_RSA, RSA_R_Q_NOT_PRIME}, + #else + {"Q_NOT_PRIME", 4, 129}, + #endif + #ifdef RSA_R_RSA_OPERATIONS_NOT_SUPPORTED + {"RSA_OPERATIONS_NOT_SUPPORTED", ERR_LIB_RSA, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED}, + #else + {"RSA_OPERATIONS_NOT_SUPPORTED", 4, 130}, + #endif + #ifdef RSA_R_SLEN_CHECK_FAILED + {"SLEN_CHECK_FAILED", ERR_LIB_RSA, RSA_R_SLEN_CHECK_FAILED}, + #else + {"SLEN_CHECK_FAILED", 4, 136}, + #endif + #ifdef RSA_R_SLEN_RECOVERY_FAILED + {"SLEN_RECOVERY_FAILED", ERR_LIB_RSA, RSA_R_SLEN_RECOVERY_FAILED}, + #else + {"SLEN_RECOVERY_FAILED", 4, 135}, + #endif + #ifdef RSA_R_SSLV3_ROLLBACK_ATTACK + {"SSLV3_ROLLBACK_ATTACK", ERR_LIB_RSA, RSA_R_SSLV3_ROLLBACK_ATTACK}, + #else + {"SSLV3_ROLLBACK_ATTACK", 4, 115}, + #endif + #ifdef RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", ERR_LIB_RSA, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD}, + #else + {"THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD", 4, 116}, + #endif + #ifdef RSA_R_UNKNOWN_ALGORITHM_TYPE + {"UNKNOWN_ALGORITHM_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_ALGORITHM_TYPE}, + #else + {"UNKNOWN_ALGORITHM_TYPE", 4, 117}, + #endif + #ifdef RSA_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 4, 166}, + #endif + #ifdef RSA_R_UNKNOWN_MASK_DIGEST + {"UNKNOWN_MASK_DIGEST", ERR_LIB_RSA, RSA_R_UNKNOWN_MASK_DIGEST}, + #else + {"UNKNOWN_MASK_DIGEST", 4, 151}, + #endif + #ifdef RSA_R_UNKNOWN_PADDING_TYPE + {"UNKNOWN_PADDING_TYPE", ERR_LIB_RSA, RSA_R_UNKNOWN_PADDING_TYPE}, + #else + {"UNKNOWN_PADDING_TYPE", 4, 118}, + #endif + #ifdef RSA_R_UNSUPPORTED_ENCRYPTION_TYPE + {"UNSUPPORTED_ENCRYPTION_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE}, + #else + {"UNSUPPORTED_ENCRYPTION_TYPE", 4, 162}, + #endif + #ifdef RSA_R_UNSUPPORTED_LABEL_SOURCE + {"UNSUPPORTED_LABEL_SOURCE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_LABEL_SOURCE}, + #else + {"UNSUPPORTED_LABEL_SOURCE", 4, 163}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_ALGORITHM + {"UNSUPPORTED_MASK_ALGORITHM", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_ALGORITHM}, + #else + {"UNSUPPORTED_MASK_ALGORITHM", 4, 153}, + #endif + #ifdef RSA_R_UNSUPPORTED_MASK_PARAMETER + {"UNSUPPORTED_MASK_PARAMETER", ERR_LIB_RSA, RSA_R_UNSUPPORTED_MASK_PARAMETER}, + #else + {"UNSUPPORTED_MASK_PARAMETER", 4, 154}, + #endif + #ifdef RSA_R_UNSUPPORTED_SIGNATURE_TYPE + {"UNSUPPORTED_SIGNATURE_TYPE", ERR_LIB_RSA, RSA_R_UNSUPPORTED_SIGNATURE_TYPE}, + #else + {"UNSUPPORTED_SIGNATURE_TYPE", 4, 155}, + #endif + #ifdef RSA_R_VALUE_MISSING + {"VALUE_MISSING", ERR_LIB_RSA, RSA_R_VALUE_MISSING}, + #else + {"VALUE_MISSING", 4, 147}, + #endif + #ifdef RSA_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_RSA, RSA_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 4, 119}, + #endif + #ifdef SM2_R_ASN1_ERROR + {"ASN1_ERROR", ERR_LIB_SM2, SM2_R_ASN1_ERROR}, + #else + {"ASN1_ERROR", 53, 100}, + #endif + #ifdef SM2_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SM2, SM2_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 53, 101}, + #endif + #ifdef SM2_R_BUFFER_TOO_SMALL + {"BUFFER_TOO_SMALL", ERR_LIB_SM2, SM2_R_BUFFER_TOO_SMALL}, + #else + {"BUFFER_TOO_SMALL", 53, 107}, + #endif + #ifdef SM2_R_DIST_ID_TOO_LARGE + {"DIST_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_DIST_ID_TOO_LARGE}, + #else + {"DIST_ID_TOO_LARGE", 53, 110}, + #endif + #ifdef SM2_R_ID_NOT_SET + {"ID_NOT_SET", ERR_LIB_SM2, SM2_R_ID_NOT_SET}, + #else + {"ID_NOT_SET", 53, 112}, + #endif + #ifdef SM2_R_ID_TOO_LARGE + {"ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_ID_TOO_LARGE}, + #else + {"ID_TOO_LARGE", 53, 111}, + #endif + #ifdef SM2_R_INVALID_CURVE + {"INVALID_CURVE", ERR_LIB_SM2, SM2_R_INVALID_CURVE}, + #else + {"INVALID_CURVE", 53, 108}, + #endif + #ifdef SM2_R_INVALID_DIGEST + {"INVALID_DIGEST", ERR_LIB_SM2, SM2_R_INVALID_DIGEST}, + #else + {"INVALID_DIGEST", 53, 102}, + #endif + #ifdef SM2_R_INVALID_DIGEST_TYPE + {"INVALID_DIGEST_TYPE", ERR_LIB_SM2, SM2_R_INVALID_DIGEST_TYPE}, + #else + {"INVALID_DIGEST_TYPE", 53, 103}, + #endif + #ifdef SM2_R_INVALID_ENCODING + {"INVALID_ENCODING", ERR_LIB_SM2, SM2_R_INVALID_ENCODING}, + #else + {"INVALID_ENCODING", 53, 104}, + #endif + #ifdef SM2_R_INVALID_FIELD + {"INVALID_FIELD", ERR_LIB_SM2, SM2_R_INVALID_FIELD}, + #else + {"INVALID_FIELD", 53, 105}, + #endif + #ifdef SM2_R_INVALID_PRIVATE_KEY + {"INVALID_PRIVATE_KEY", ERR_LIB_SM2, SM2_R_INVALID_PRIVATE_KEY}, + #else + {"INVALID_PRIVATE_KEY", 53, 113}, + #endif + #ifdef SM2_R_NO_PARAMETERS_SET + {"NO_PARAMETERS_SET", ERR_LIB_SM2, SM2_R_NO_PARAMETERS_SET}, + #else + {"NO_PARAMETERS_SET", 53, 109}, + #endif + #ifdef SM2_R_USER_ID_TOO_LARGE + {"USER_ID_TOO_LARGE", ERR_LIB_SM2, SM2_R_USER_ID_TOO_LARGE}, + #else + {"USER_ID_TOO_LARGE", 53, 106}, + #endif + #ifdef SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", ERR_LIB_SSL, SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY}, + #else + {"APPLICATION_DATA_AFTER_CLOSE_NOTIFY", 20, 291}, + #endif + #ifdef SSL_R_APP_DATA_IN_HANDSHAKE + {"APP_DATA_IN_HANDSHAKE", ERR_LIB_SSL, SSL_R_APP_DATA_IN_HANDSHAKE}, + #else + {"APP_DATA_IN_HANDSHAKE", 20, 100}, + #endif + #ifdef SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", ERR_LIB_SSL, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT}, + #else + {"ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT", 20, 272}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE}, + #else + {"AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE", 20, 143}, + #endif + #ifdef SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", ERR_LIB_SSL, SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE}, + #else + {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158}, + #endif + #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC + {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC}, + #else + {"BAD_CHANGE_CIPHER_SPEC", 20, 103}, + #endif + #ifdef SSL_R_BAD_CIPHER + {"BAD_CIPHER", ERR_LIB_SSL, SSL_R_BAD_CIPHER}, + #else + {"BAD_CIPHER", 20, 186}, + #endif + #ifdef SSL_R_BAD_DATA + {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA}, + #else + {"BAD_DATA", 20, 390}, + #endif + #ifdef SSL_R_BAD_DATA_RETURNED_BY_CALLBACK + {"BAD_DATA_RETURNED_BY_CALLBACK", ERR_LIB_SSL, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK}, + #else + {"BAD_DATA_RETURNED_BY_CALLBACK", 20, 106}, + #endif + #ifdef SSL_R_BAD_DECOMPRESSION + {"BAD_DECOMPRESSION", ERR_LIB_SSL, SSL_R_BAD_DECOMPRESSION}, + #else + {"BAD_DECOMPRESSION", 20, 107}, + #endif + #ifdef SSL_R_BAD_DH_VALUE + {"BAD_DH_VALUE", ERR_LIB_SSL, SSL_R_BAD_DH_VALUE}, + #else + {"BAD_DH_VALUE", 20, 102}, + #endif + #ifdef SSL_R_BAD_DIGEST_LENGTH + {"BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_BAD_DIGEST_LENGTH}, + #else + {"BAD_DIGEST_LENGTH", 20, 111}, + #endif + #ifdef SSL_R_BAD_EARLY_DATA + {"BAD_EARLY_DATA", ERR_LIB_SSL, SSL_R_BAD_EARLY_DATA}, + #else + {"BAD_EARLY_DATA", 20, 233}, + #endif + #ifdef SSL_R_BAD_ECC_CERT + {"BAD_ECC_CERT", ERR_LIB_SSL, SSL_R_BAD_ECC_CERT}, + #else + {"BAD_ECC_CERT", 20, 304}, + #endif + #ifdef SSL_R_BAD_ECPOINT + {"BAD_ECPOINT", ERR_LIB_SSL, SSL_R_BAD_ECPOINT}, + #else + {"BAD_ECPOINT", 20, 306}, + #endif + #ifdef SSL_R_BAD_EXTENSION + {"BAD_EXTENSION", ERR_LIB_SSL, SSL_R_BAD_EXTENSION}, + #else + {"BAD_EXTENSION", 20, 110}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_LENGTH + {"BAD_HANDSHAKE_LENGTH", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_LENGTH}, + #else + {"BAD_HANDSHAKE_LENGTH", 20, 332}, + #endif + #ifdef SSL_R_BAD_HANDSHAKE_STATE + {"BAD_HANDSHAKE_STATE", ERR_LIB_SSL, SSL_R_BAD_HANDSHAKE_STATE}, + #else + {"BAD_HANDSHAKE_STATE", 20, 236}, + #endif + #ifdef SSL_R_BAD_HELLO_REQUEST + {"BAD_HELLO_REQUEST", ERR_LIB_SSL, SSL_R_BAD_HELLO_REQUEST}, + #else + {"BAD_HELLO_REQUEST", 20, 105}, + #endif + #ifdef SSL_R_BAD_HRR_VERSION + {"BAD_HRR_VERSION", ERR_LIB_SSL, SSL_R_BAD_HRR_VERSION}, + #else + {"BAD_HRR_VERSION", 20, 263}, + #endif + #ifdef SSL_R_BAD_KEY_SHARE + {"BAD_KEY_SHARE", ERR_LIB_SSL, SSL_R_BAD_KEY_SHARE}, + #else + {"BAD_KEY_SHARE", 20, 108}, + #endif + #ifdef SSL_R_BAD_KEY_UPDATE + {"BAD_KEY_UPDATE", ERR_LIB_SSL, SSL_R_BAD_KEY_UPDATE}, + #else + {"BAD_KEY_UPDATE", 20, 122}, + #endif + #ifdef SSL_R_BAD_LEGACY_VERSION + {"BAD_LEGACY_VERSION", ERR_LIB_SSL, SSL_R_BAD_LEGACY_VERSION}, + #else + {"BAD_LEGACY_VERSION", 20, 292}, + #endif + #ifdef SSL_R_BAD_LENGTH + {"BAD_LENGTH", ERR_LIB_SSL, SSL_R_BAD_LENGTH}, + #else + {"BAD_LENGTH", 20, 271}, + #endif + #ifdef SSL_R_BAD_PACKET + {"BAD_PACKET", ERR_LIB_SSL, SSL_R_BAD_PACKET}, + #else + {"BAD_PACKET", 20, 240}, + #endif + #ifdef SSL_R_BAD_PACKET_LENGTH + {"BAD_PACKET_LENGTH", ERR_LIB_SSL, SSL_R_BAD_PACKET_LENGTH}, + #else + {"BAD_PACKET_LENGTH", 20, 115}, + #endif + #ifdef SSL_R_BAD_PROTOCOL_VERSION_NUMBER + {"BAD_PROTOCOL_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_BAD_PROTOCOL_VERSION_NUMBER}, + #else + {"BAD_PROTOCOL_VERSION_NUMBER", 20, 116}, + #endif + #ifdef SSL_R_BAD_PSK + {"BAD_PSK", ERR_LIB_SSL, SSL_R_BAD_PSK}, + #else + {"BAD_PSK", 20, 219}, + #endif + #ifdef SSL_R_BAD_PSK_IDENTITY + {"BAD_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_BAD_PSK_IDENTITY}, + #else + {"BAD_PSK_IDENTITY", 20, 114}, + #endif + #ifdef SSL_R_BAD_RECORD_TYPE + {"BAD_RECORD_TYPE", ERR_LIB_SSL, SSL_R_BAD_RECORD_TYPE}, + #else + {"BAD_RECORD_TYPE", 20, 443}, + #endif + #ifdef SSL_R_BAD_RSA_ENCRYPT + {"BAD_RSA_ENCRYPT", ERR_LIB_SSL, SSL_R_BAD_RSA_ENCRYPT}, + #else + {"BAD_RSA_ENCRYPT", 20, 119}, + #endif + #ifdef SSL_R_BAD_SIGNATURE + {"BAD_SIGNATURE", ERR_LIB_SSL, SSL_R_BAD_SIGNATURE}, + #else + {"BAD_SIGNATURE", 20, 123}, + #endif + #ifdef SSL_R_BAD_SRP_A_LENGTH + {"BAD_SRP_A_LENGTH", ERR_LIB_SSL, SSL_R_BAD_SRP_A_LENGTH}, + #else + {"BAD_SRP_A_LENGTH", 20, 347}, + #endif + #ifdef SSL_R_BAD_SRP_PARAMETERS + {"BAD_SRP_PARAMETERS", ERR_LIB_SSL, SSL_R_BAD_SRP_PARAMETERS}, + #else + {"BAD_SRP_PARAMETERS", 20, 371}, + #endif + #ifdef SSL_R_BAD_SRTP_MKI_VALUE + {"BAD_SRTP_MKI_VALUE", ERR_LIB_SSL, SSL_R_BAD_SRTP_MKI_VALUE}, + #else + {"BAD_SRTP_MKI_VALUE", 20, 352}, + #endif + #ifdef SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST + {"BAD_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"BAD_SRTP_PROTECTION_PROFILE_LIST", 20, 353}, + #endif + #ifdef SSL_R_BAD_SSL_FILETYPE + {"BAD_SSL_FILETYPE", ERR_LIB_SSL, SSL_R_BAD_SSL_FILETYPE}, + #else + {"BAD_SSL_FILETYPE", 20, 124}, + #endif + #ifdef SSL_R_BAD_VALUE + {"BAD_VALUE", ERR_LIB_SSL, SSL_R_BAD_VALUE}, + #else + {"BAD_VALUE", 20, 384}, + #endif + #ifdef SSL_R_BAD_WRITE_RETRY + {"BAD_WRITE_RETRY", ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY}, + #else + {"BAD_WRITE_RETRY", 20, 127}, + #endif + #ifdef SSL_R_BINDER_DOES_NOT_VERIFY + {"BINDER_DOES_NOT_VERIFY", ERR_LIB_SSL, SSL_R_BINDER_DOES_NOT_VERIFY}, + #else + {"BINDER_DOES_NOT_VERIFY", 20, 253}, + #endif + #ifdef SSL_R_BIO_NOT_SET + {"BIO_NOT_SET", ERR_LIB_SSL, SSL_R_BIO_NOT_SET}, + #else + {"BIO_NOT_SET", 20, 128}, + #endif + #ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG + {"BLOCK_CIPHER_PAD_IS_WRONG", ERR_LIB_SSL, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG}, + #else + {"BLOCK_CIPHER_PAD_IS_WRONG", 20, 129}, + #endif + #ifdef SSL_R_BN_LIB + {"BN_LIB", ERR_LIB_SSL, SSL_R_BN_LIB}, + #else + {"BN_LIB", 20, 130}, + #endif + #ifdef SSL_R_CALLBACK_FAILED + {"CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_CALLBACK_FAILED}, + #else + {"CALLBACK_FAILED", 20, 234}, + #endif + #ifdef SSL_R_CANNOT_CHANGE_CIPHER + {"CANNOT_CHANGE_CIPHER", ERR_LIB_SSL, SSL_R_CANNOT_CHANGE_CIPHER}, + #else + {"CANNOT_CHANGE_CIPHER", 20, 109}, + #endif + #ifdef SSL_R_CANNOT_GET_GROUP_NAME + {"CANNOT_GET_GROUP_NAME", ERR_LIB_SSL, SSL_R_CANNOT_GET_GROUP_NAME}, + #else + {"CANNOT_GET_GROUP_NAME", 20, 299}, + #endif + #ifdef SSL_R_CA_DN_LENGTH_MISMATCH + {"CA_DN_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CA_DN_LENGTH_MISMATCH}, + #else + {"CA_DN_LENGTH_MISMATCH", 20, 131}, + #endif + #ifdef SSL_R_CA_KEY_TOO_SMALL + {"CA_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_CA_KEY_TOO_SMALL}, + #else + {"CA_KEY_TOO_SMALL", 20, 397}, + #endif + #ifdef SSL_R_CA_MD_TOO_WEAK + {"CA_MD_TOO_WEAK", ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK}, + #else + {"CA_MD_TOO_WEAK", 20, 398}, + #endif + #ifdef SSL_R_CCS_RECEIVED_EARLY + {"CCS_RECEIVED_EARLY", ERR_LIB_SSL, SSL_R_CCS_RECEIVED_EARLY}, + #else + {"CCS_RECEIVED_EARLY", 20, 133}, + #endif + #ifdef SSL_R_CERTIFICATE_VERIFY_FAILED + {"CERTIFICATE_VERIFY_FAILED", ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED}, + #else + {"CERTIFICATE_VERIFY_FAILED", 20, 134}, + #endif + #ifdef SSL_R_CERT_CB_ERROR + {"CERT_CB_ERROR", ERR_LIB_SSL, SSL_R_CERT_CB_ERROR}, + #else + {"CERT_CB_ERROR", 20, 377}, + #endif + #ifdef SSL_R_CERT_LENGTH_MISMATCH + {"CERT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_CERT_LENGTH_MISMATCH}, + #else + {"CERT_LENGTH_MISMATCH", 20, 135}, + #endif + #ifdef SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED + {"CIPHERSUITE_DIGEST_HAS_CHANGED", ERR_LIB_SSL, SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED}, + #else + {"CIPHERSUITE_DIGEST_HAS_CHANGED", 20, 218}, + #endif + #ifdef SSL_R_CIPHER_CODE_WRONG_LENGTH + {"CIPHER_CODE_WRONG_LENGTH", ERR_LIB_SSL, SSL_R_CIPHER_CODE_WRONG_LENGTH}, + #else + {"CIPHER_CODE_WRONG_LENGTH", 20, 137}, + #endif + #ifdef SSL_R_CLIENTHELLO_TLSEXT + {"CLIENTHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_CLIENTHELLO_TLSEXT}, + #else + {"CLIENTHELLO_TLSEXT", 20, 226}, + #endif + #ifdef SSL_R_COMPRESSED_LENGTH_TOO_LONG + {"COMPRESSED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_COMPRESSED_LENGTH_TOO_LONG}, + #else + {"COMPRESSED_LENGTH_TOO_LONG", 20, 140}, + #endif + #ifdef SSL_R_COMPRESSION_DISABLED + {"COMPRESSION_DISABLED", ERR_LIB_SSL, SSL_R_COMPRESSION_DISABLED}, + #else + {"COMPRESSION_DISABLED", 20, 343}, + #endif + #ifdef SSL_R_COMPRESSION_FAILURE + {"COMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_COMPRESSION_FAILURE}, + #else + {"COMPRESSION_FAILURE", 20, 141}, + #endif + #ifdef SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", ERR_LIB_SSL, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE}, + #else + {"COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE", 20, 307}, + #endif + #ifdef SSL_R_COMPRESSION_LIBRARY_ERROR + {"COMPRESSION_LIBRARY_ERROR", ERR_LIB_SSL, SSL_R_COMPRESSION_LIBRARY_ERROR}, + #else + {"COMPRESSION_LIBRARY_ERROR", 20, 142}, + #endif + #ifdef SSL_R_CONNECTION_TYPE_NOT_SET + {"CONNECTION_TYPE_NOT_SET", ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET}, + #else + {"CONNECTION_TYPE_NOT_SET", 20, 144}, + #endif + #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED + {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED}, + #else + {"CONTEXT_NOT_DANE_ENABLED", 20, 167}, + #endif + #ifdef SSL_R_COOKIE_GEN_CALLBACK_FAILURE + {"COOKIE_GEN_CALLBACK_FAILURE", ERR_LIB_SSL, SSL_R_COOKIE_GEN_CALLBACK_FAILURE}, + #else + {"COOKIE_GEN_CALLBACK_FAILURE", 20, 400}, + #endif + #ifdef SSL_R_COOKIE_MISMATCH + {"COOKIE_MISMATCH", ERR_LIB_SSL, SSL_R_COOKIE_MISMATCH}, + #else + {"COOKIE_MISMATCH", 20, 308}, + #endif + #ifdef SSL_R_COPY_PARAMETERS_FAILED + {"COPY_PARAMETERS_FAILED", ERR_LIB_SSL, SSL_R_COPY_PARAMETERS_FAILED}, + #else + {"COPY_PARAMETERS_FAILED", 20, 296}, + #endif + #ifdef SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED}, + #else + {"CUSTOM_EXT_HANDLER_ALREADY_INSTALLED", 20, 206}, + #endif + #ifdef SSL_R_DANE_ALREADY_ENABLED + {"DANE_ALREADY_ENABLED", ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED}, + #else + {"DANE_ALREADY_ENABLED", 20, 172}, + #endif + #ifdef SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL}, + #else + {"DANE_CANNOT_OVERRIDE_MTYPE_FULL", 20, 173}, + #endif + #ifdef SSL_R_DANE_NOT_ENABLED + {"DANE_NOT_ENABLED", ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED}, + #else + {"DANE_NOT_ENABLED", 20, 175}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE + {"DANE_TLSA_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE", 20, 180}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE}, + #else + {"DANE_TLSA_BAD_CERTIFICATE_USAGE", 20, 184}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DATA_LENGTH + {"DANE_TLSA_BAD_DATA_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH}, + #else + {"DANE_TLSA_BAD_DATA_LENGTH", 20, 189}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH + {"DANE_TLSA_BAD_DIGEST_LENGTH", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH}, + #else + {"DANE_TLSA_BAD_DIGEST_LENGTH", 20, 192}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_MATCHING_TYPE + {"DANE_TLSA_BAD_MATCHING_TYPE", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE}, + #else + {"DANE_TLSA_BAD_MATCHING_TYPE", 20, 200}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_PUBLIC_KEY + {"DANE_TLSA_BAD_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY}, + #else + {"DANE_TLSA_BAD_PUBLIC_KEY", 20, 201}, + #endif + #ifdef SSL_R_DANE_TLSA_BAD_SELECTOR + {"DANE_TLSA_BAD_SELECTOR", ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR}, + #else + {"DANE_TLSA_BAD_SELECTOR", 20, 202}, + #endif + #ifdef SSL_R_DANE_TLSA_NULL_DATA + {"DANE_TLSA_NULL_DATA", ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA}, + #else + {"DANE_TLSA_NULL_DATA", 20, 203}, + #endif + #ifdef SSL_R_DATA_BETWEEN_CCS_AND_FINISHED + {"DATA_BETWEEN_CCS_AND_FINISHED", ERR_LIB_SSL, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED}, + #else + {"DATA_BETWEEN_CCS_AND_FINISHED", 20, 145}, + #endif + #ifdef SSL_R_DATA_LENGTH_TOO_LONG + {"DATA_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG}, + #else + {"DATA_LENGTH_TOO_LONG", 20, 146}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED + {"DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED}, + #else + {"DECRYPTION_FAILED", 20, 147}, + #endif + #ifdef SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC}, + #else + {"DECRYPTION_FAILED_OR_BAD_RECORD_MAC", 20, 281}, + #endif + #ifdef SSL_R_DH_KEY_TOO_SMALL + {"DH_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL}, + #else + {"DH_KEY_TOO_SMALL", 20, 394}, + #endif + #ifdef SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", ERR_LIB_SSL, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG}, + #else + {"DH_PUBLIC_VALUE_LENGTH_IS_WRONG", 20, 148}, + #endif + #ifdef SSL_R_DIGEST_CHECK_FAILED + {"DIGEST_CHECK_FAILED", ERR_LIB_SSL, SSL_R_DIGEST_CHECK_FAILED}, + #else + {"DIGEST_CHECK_FAILED", 20, 149}, + #endif + #ifdef SSL_R_DTLS_MESSAGE_TOO_BIG + {"DTLS_MESSAGE_TOO_BIG", ERR_LIB_SSL, SSL_R_DTLS_MESSAGE_TOO_BIG}, + #else + {"DTLS_MESSAGE_TOO_BIG", 20, 334}, + #endif + #ifdef SSL_R_DUPLICATE_COMPRESSION_ID + {"DUPLICATE_COMPRESSION_ID", ERR_LIB_SSL, SSL_R_DUPLICATE_COMPRESSION_ID}, + #else + {"DUPLICATE_COMPRESSION_ID", 20, 309}, + #endif + #ifdef SSL_R_ECC_CERT_NOT_FOR_SIGNING + {"ECC_CERT_NOT_FOR_SIGNING", ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING}, + #else + {"ECC_CERT_NOT_FOR_SIGNING", 20, 318}, + #endif + #ifdef SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE + {"ECDH_REQUIRED_FOR_SUITEB_MODE", ERR_LIB_SSL, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE}, + #else + {"ECDH_REQUIRED_FOR_SUITEB_MODE", 20, 374}, + #endif + #ifdef SSL_R_EE_KEY_TOO_SMALL + {"EE_KEY_TOO_SMALL", ERR_LIB_SSL, SSL_R_EE_KEY_TOO_SMALL}, + #else + {"EE_KEY_TOO_SMALL", 20, 399}, + #endif + #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST}, + #else + {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", 20, 354}, + #endif + #ifdef SSL_R_ENCRYPTED_LENGTH_TOO_LONG + {"ENCRYPTED_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_ENCRYPTED_LENGTH_TOO_LONG}, + #else + {"ENCRYPTED_LENGTH_TOO_LONG", 20, 150}, + #endif + #ifdef SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST + {"ERROR_IN_RECEIVED_CIPHER_LIST", ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST}, + #else + {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151}, + #endif + #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN + {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN}, + #else + {"ERROR_SETTING_TLSA_BASE_DOMAIN", 20, 204}, + #endif + #ifdef SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE + {"EXCEEDS_MAX_FRAGMENT_SIZE", ERR_LIB_SSL, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE}, + #else + {"EXCEEDS_MAX_FRAGMENT_SIZE", 20, 194}, + #endif + #ifdef SSL_R_EXCESSIVE_MESSAGE_SIZE + {"EXCESSIVE_MESSAGE_SIZE", ERR_LIB_SSL, SSL_R_EXCESSIVE_MESSAGE_SIZE}, + #else + {"EXCESSIVE_MESSAGE_SIZE", 20, 152}, + #endif + #ifdef SSL_R_EXTENSION_NOT_RECEIVED + {"EXTENSION_NOT_RECEIVED", ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED}, + #else + {"EXTENSION_NOT_RECEIVED", 20, 279}, + #endif + #ifdef SSL_R_EXTRA_DATA_IN_MESSAGE + {"EXTRA_DATA_IN_MESSAGE", ERR_LIB_SSL, SSL_R_EXTRA_DATA_IN_MESSAGE}, + #else + {"EXTRA_DATA_IN_MESSAGE", 20, 153}, + #endif + #ifdef SSL_R_EXT_LENGTH_MISMATCH + {"EXT_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_EXT_LENGTH_MISMATCH}, + #else + {"EXT_LENGTH_MISMATCH", 20, 163}, + #endif + #ifdef SSL_R_FAILED_TO_INIT_ASYNC + {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC}, + #else + {"FAILED_TO_INIT_ASYNC", 20, 405}, + #endif + #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO + {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO}, + #else + {"FRAGMENTED_CLIENT_HELLO", 20, 401}, + #endif + #ifdef SSL_R_GOT_A_FIN_BEFORE_A_CCS + {"GOT_A_FIN_BEFORE_A_CCS", ERR_LIB_SSL, SSL_R_GOT_A_FIN_BEFORE_A_CCS}, + #else + {"GOT_A_FIN_BEFORE_A_CCS", 20, 154}, + #endif + #ifdef SSL_R_HTTPS_PROXY_REQUEST + {"HTTPS_PROXY_REQUEST", ERR_LIB_SSL, SSL_R_HTTPS_PROXY_REQUEST}, + #else + {"HTTPS_PROXY_REQUEST", 20, 155}, + #endif + #ifdef SSL_R_HTTP_REQUEST + {"HTTP_REQUEST", ERR_LIB_SSL, SSL_R_HTTP_REQUEST}, + #else + {"HTTP_REQUEST", 20, 156}, + #endif + #ifdef SSL_R_ILLEGAL_POINT_COMPRESSION + {"ILLEGAL_POINT_COMPRESSION", ERR_LIB_SSL, SSL_R_ILLEGAL_POINT_COMPRESSION}, + #else + {"ILLEGAL_POINT_COMPRESSION", 20, 162}, + #endif + #ifdef SSL_R_ILLEGAL_SUITEB_DIGEST + {"ILLEGAL_SUITEB_DIGEST", ERR_LIB_SSL, SSL_R_ILLEGAL_SUITEB_DIGEST}, + #else + {"ILLEGAL_SUITEB_DIGEST", 20, 380}, + #endif + #ifdef SSL_R_INAPPROPRIATE_FALLBACK + {"INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_INAPPROPRIATE_FALLBACK}, + #else + {"INAPPROPRIATE_FALLBACK", 20, 373}, + #endif + #ifdef SSL_R_INCONSISTENT_COMPRESSION + {"INCONSISTENT_COMPRESSION", ERR_LIB_SSL, SSL_R_INCONSISTENT_COMPRESSION}, + #else + {"INCONSISTENT_COMPRESSION", 20, 340}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_ALPN + {"INCONSISTENT_EARLY_DATA_ALPN", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_ALPN}, + #else + {"INCONSISTENT_EARLY_DATA_ALPN", 20, 222}, + #endif + #ifdef SSL_R_INCONSISTENT_EARLY_DATA_SNI + {"INCONSISTENT_EARLY_DATA_SNI", ERR_LIB_SSL, SSL_R_INCONSISTENT_EARLY_DATA_SNI}, + #else + {"INCONSISTENT_EARLY_DATA_SNI", 20, 231}, + #endif + #ifdef SSL_R_INCONSISTENT_EXTMS + {"INCONSISTENT_EXTMS", ERR_LIB_SSL, SSL_R_INCONSISTENT_EXTMS}, + #else + {"INCONSISTENT_EXTMS", 20, 104}, + #endif + #ifdef SSL_R_INSUFFICIENT_SECURITY + {"INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_INSUFFICIENT_SECURITY}, + #else + {"INSUFFICIENT_SECURITY", 20, 241}, + #endif + #ifdef SSL_R_INVALID_ALERT + {"INVALID_ALERT", ERR_LIB_SSL, SSL_R_INVALID_ALERT}, + #else + {"INVALID_ALERT", 20, 205}, + #endif + #ifdef SSL_R_INVALID_CCS_MESSAGE + {"INVALID_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_INVALID_CCS_MESSAGE}, + #else + {"INVALID_CCS_MESSAGE", 20, 260}, + #endif + #ifdef SSL_R_INVALID_CERTIFICATE_OR_ALG + {"INVALID_CERTIFICATE_OR_ALG", ERR_LIB_SSL, SSL_R_INVALID_CERTIFICATE_OR_ALG}, + #else + {"INVALID_CERTIFICATE_OR_ALG", 20, 238}, + #endif + #ifdef SSL_R_INVALID_COMMAND + {"INVALID_COMMAND", ERR_LIB_SSL, SSL_R_INVALID_COMMAND}, + #else + {"INVALID_COMMAND", 20, 280}, + #endif + #ifdef SSL_R_INVALID_COMPRESSION_ALGORITHM + {"INVALID_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_INVALID_COMPRESSION_ALGORITHM}, + #else + {"INVALID_COMPRESSION_ALGORITHM", 20, 341}, + #endif + #ifdef SSL_R_INVALID_CONFIG + {"INVALID_CONFIG", ERR_LIB_SSL, SSL_R_INVALID_CONFIG}, + #else + {"INVALID_CONFIG", 20, 283}, + #endif + #ifdef SSL_R_INVALID_CONFIGURATION_NAME + {"INVALID_CONFIGURATION_NAME", ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME}, + #else + {"INVALID_CONFIGURATION_NAME", 20, 113}, + #endif + #ifdef SSL_R_INVALID_CONTEXT + {"INVALID_CONTEXT", ERR_LIB_SSL, SSL_R_INVALID_CONTEXT}, + #else + {"INVALID_CONTEXT", 20, 282}, + #endif + #ifdef SSL_R_INVALID_CT_VALIDATION_TYPE + {"INVALID_CT_VALIDATION_TYPE", ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE}, + #else + {"INVALID_CT_VALIDATION_TYPE", 20, 212}, + #endif + #ifdef SSL_R_INVALID_KEY_UPDATE_TYPE + {"INVALID_KEY_UPDATE_TYPE", ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE}, + #else + {"INVALID_KEY_UPDATE_TYPE", 20, 120}, + #endif + #ifdef SSL_R_INVALID_MAX_EARLY_DATA + {"INVALID_MAX_EARLY_DATA", ERR_LIB_SSL, SSL_R_INVALID_MAX_EARLY_DATA}, + #else + {"INVALID_MAX_EARLY_DATA", 20, 174}, + #endif + #ifdef SSL_R_INVALID_NULL_CMD_NAME + {"INVALID_NULL_CMD_NAME", ERR_LIB_SSL, SSL_R_INVALID_NULL_CMD_NAME}, + #else + {"INVALID_NULL_CMD_NAME", 20, 385}, + #endif + #ifdef SSL_R_INVALID_SEQUENCE_NUMBER + {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER}, + #else + {"INVALID_SEQUENCE_NUMBER", 20, 402}, + #endif + #ifdef SSL_R_INVALID_SERVERINFO_DATA + {"INVALID_SERVERINFO_DATA", ERR_LIB_SSL, SSL_R_INVALID_SERVERINFO_DATA}, + #else + {"INVALID_SERVERINFO_DATA", 20, 388}, + #endif + #ifdef SSL_R_INVALID_SESSION_ID + {"INVALID_SESSION_ID", ERR_LIB_SSL, SSL_R_INVALID_SESSION_ID}, + #else + {"INVALID_SESSION_ID", 20, 999}, + #endif + #ifdef SSL_R_INVALID_SRP_USERNAME + {"INVALID_SRP_USERNAME", ERR_LIB_SSL, SSL_R_INVALID_SRP_USERNAME}, + #else + {"INVALID_SRP_USERNAME", 20, 357}, + #endif + #ifdef SSL_R_INVALID_STATUS_RESPONSE + {"INVALID_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_INVALID_STATUS_RESPONSE}, + #else + {"INVALID_STATUS_RESPONSE", 20, 328}, + #endif + #ifdef SSL_R_INVALID_TICKET_KEYS_LENGTH + {"INVALID_TICKET_KEYS_LENGTH", ERR_LIB_SSL, SSL_R_INVALID_TICKET_KEYS_LENGTH}, + #else + {"INVALID_TICKET_KEYS_LENGTH", 20, 325}, + #endif + #ifdef SSL_R_LENGTH_MISMATCH + {"LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_LENGTH_MISMATCH}, + #else + {"LENGTH_MISMATCH", 20, 159}, + #endif + #ifdef SSL_R_LENGTH_TOO_LONG + {"LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_LENGTH_TOO_LONG}, + #else + {"LENGTH_TOO_LONG", 20, 404}, + #endif + #ifdef SSL_R_LENGTH_TOO_SHORT + {"LENGTH_TOO_SHORT", ERR_LIB_SSL, SSL_R_LENGTH_TOO_SHORT}, + #else + {"LENGTH_TOO_SHORT", 20, 160}, + #endif + #ifdef SSL_R_LIBRARY_BUG + {"LIBRARY_BUG", ERR_LIB_SSL, SSL_R_LIBRARY_BUG}, + #else + {"LIBRARY_BUG", 20, 274}, + #endif + #ifdef SSL_R_LIBRARY_HAS_NO_CIPHERS + {"LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS}, + #else + {"LIBRARY_HAS_NO_CIPHERS", 20, 161}, + #endif + #ifdef SSL_R_MISSING_DSA_SIGNING_CERT + {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT}, + #else + {"MISSING_DSA_SIGNING_CERT", 20, 165}, + #endif + #ifdef SSL_R_MISSING_ECDSA_SIGNING_CERT + {"MISSING_ECDSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_ECDSA_SIGNING_CERT}, + #else + {"MISSING_ECDSA_SIGNING_CERT", 20, 381}, + #endif + #ifdef SSL_R_MISSING_FATAL + {"MISSING_FATAL", ERR_LIB_SSL, SSL_R_MISSING_FATAL}, + #else + {"MISSING_FATAL", 20, 256}, + #endif + #ifdef SSL_R_MISSING_PARAMETERS + {"MISSING_PARAMETERS", ERR_LIB_SSL, SSL_R_MISSING_PARAMETERS}, + #else + {"MISSING_PARAMETERS", 20, 290}, + #endif + #ifdef SSL_R_MISSING_RSA_CERTIFICATE + {"MISSING_RSA_CERTIFICATE", ERR_LIB_SSL, SSL_R_MISSING_RSA_CERTIFICATE}, + #else + {"MISSING_RSA_CERTIFICATE", 20, 168}, + #endif + #ifdef SSL_R_MISSING_RSA_ENCRYPTING_CERT + {"MISSING_RSA_ENCRYPTING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_ENCRYPTING_CERT}, + #else + {"MISSING_RSA_ENCRYPTING_CERT", 20, 169}, + #endif + #ifdef SSL_R_MISSING_RSA_SIGNING_CERT + {"MISSING_RSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_RSA_SIGNING_CERT}, + #else + {"MISSING_RSA_SIGNING_CERT", 20, 170}, + #endif + #ifdef SSL_R_MISSING_SIGALGS_EXTENSION + {"MISSING_SIGALGS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SIGALGS_EXTENSION}, + #else + {"MISSING_SIGALGS_EXTENSION", 20, 112}, + #endif + #ifdef SSL_R_MISSING_SIGNING_CERT + {"MISSING_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_SIGNING_CERT}, + #else + {"MISSING_SIGNING_CERT", 20, 221}, + #endif + #ifdef SSL_R_MISSING_SRP_PARAM + {"MISSING_SRP_PARAM", ERR_LIB_SSL, SSL_R_MISSING_SRP_PARAM}, + #else + {"MISSING_SRP_PARAM", 20, 358}, + #endif + #ifdef SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION + {"MISSING_SUPPORTED_GROUPS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION}, + #else + {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209}, + #endif + #ifdef SSL_R_MISSING_TMP_DH_KEY + {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY}, + #else + {"MISSING_TMP_DH_KEY", 20, 171}, + #endif + #ifdef SSL_R_MISSING_TMP_ECDH_KEY + {"MISSING_TMP_ECDH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_ECDH_KEY}, + #else + {"MISSING_TMP_ECDH_KEY", 20, 311}, + #endif + #ifdef SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", ERR_LIB_SSL, SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA}, + #else + {"MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA", 20, 293}, + #endif + #ifdef SSL_R_NOT_ON_RECORD_BOUNDARY + {"NOT_ON_RECORD_BOUNDARY", ERR_LIB_SSL, SSL_R_NOT_ON_RECORD_BOUNDARY}, + #else + {"NOT_ON_RECORD_BOUNDARY", 20, 182}, + #endif + #ifdef SSL_R_NOT_REPLACING_CERTIFICATE + {"NOT_REPLACING_CERTIFICATE", ERR_LIB_SSL, SSL_R_NOT_REPLACING_CERTIFICATE}, + #else + {"NOT_REPLACING_CERTIFICATE", 20, 289}, + #endif + #ifdef SSL_R_NOT_SERVER + {"NOT_SERVER", ERR_LIB_SSL, SSL_R_NOT_SERVER}, + #else + {"NOT_SERVER", 20, 284}, + #endif + #ifdef SSL_R_NO_APPLICATION_PROTOCOL + {"NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_NO_APPLICATION_PROTOCOL}, + #else + {"NO_APPLICATION_PROTOCOL", 20, 235}, + #endif + #ifdef SSL_R_NO_CERTIFICATES_RETURNED + {"NO_CERTIFICATES_RETURNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATES_RETURNED}, + #else + {"NO_CERTIFICATES_RETURNED", 20, 176}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_ASSIGNED + {"NO_CERTIFICATE_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED}, + #else + {"NO_CERTIFICATE_ASSIGNED", 20, 177}, + #endif + #ifdef SSL_R_NO_CERTIFICATE_SET + {"NO_CERTIFICATE_SET", ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_SET}, + #else + {"NO_CERTIFICATE_SET", 20, 179}, + #endif + #ifdef SSL_R_NO_CHANGE_FOLLOWING_HRR + {"NO_CHANGE_FOLLOWING_HRR", ERR_LIB_SSL, SSL_R_NO_CHANGE_FOLLOWING_HRR}, + #else + {"NO_CHANGE_FOLLOWING_HRR", 20, 214}, + #endif + #ifdef SSL_R_NO_CIPHERS_AVAILABLE + {"NO_CIPHERS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_CIPHERS_AVAILABLE}, + #else + {"NO_CIPHERS_AVAILABLE", 20, 181}, + #endif + #ifdef SSL_R_NO_CIPHERS_SPECIFIED + {"NO_CIPHERS_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED}, + #else + {"NO_CIPHERS_SPECIFIED", 20, 183}, + #endif + #ifdef SSL_R_NO_CIPHER_MATCH + {"NO_CIPHER_MATCH", ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH}, + #else + {"NO_CIPHER_MATCH", 20, 185}, + #endif + #ifdef SSL_R_NO_CLIENT_CERT_METHOD + {"NO_CLIENT_CERT_METHOD", ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD}, + #else + {"NO_CLIENT_CERT_METHOD", 20, 331}, + #endif + #ifdef SSL_R_NO_COMPRESSION_SPECIFIED + {"NO_COMPRESSION_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_COMPRESSION_SPECIFIED}, + #else + {"NO_COMPRESSION_SPECIFIED", 20, 187}, + #endif + #ifdef SSL_R_NO_COOKIE_CALLBACK_SET + {"NO_COOKIE_CALLBACK_SET", ERR_LIB_SSL, SSL_R_NO_COOKIE_CALLBACK_SET}, + #else + {"NO_COOKIE_CALLBACK_SET", 20, 287}, + #endif + #ifdef SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", ERR_LIB_SSL, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER}, + #else + {"NO_GOST_CERTIFICATE_SENT_BY_PEER", 20, 330}, + #endif + #ifdef SSL_R_NO_METHOD_SPECIFIED + {"NO_METHOD_SPECIFIED", ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED}, + #else + {"NO_METHOD_SPECIFIED", 20, 188}, + #endif + #ifdef SSL_R_NO_PEM_EXTENSIONS + {"NO_PEM_EXTENSIONS", ERR_LIB_SSL, SSL_R_NO_PEM_EXTENSIONS}, + #else + {"NO_PEM_EXTENSIONS", 20, 389}, + #endif + #ifdef SSL_R_NO_PRIVATE_KEY_ASSIGNED + {"NO_PRIVATE_KEY_ASSIGNED", ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED}, + #else + {"NO_PRIVATE_KEY_ASSIGNED", 20, 190}, + #endif + #ifdef SSL_R_NO_PROTOCOLS_AVAILABLE + {"NO_PROTOCOLS_AVAILABLE", ERR_LIB_SSL, SSL_R_NO_PROTOCOLS_AVAILABLE}, + #else + {"NO_PROTOCOLS_AVAILABLE", 20, 191}, + #endif + #ifdef SSL_R_NO_RENEGOTIATION + {"NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION}, + #else + {"NO_RENEGOTIATION", 20, 339}, + #endif + #ifdef SSL_R_NO_REQUIRED_DIGEST + {"NO_REQUIRED_DIGEST", ERR_LIB_SSL, SSL_R_NO_REQUIRED_DIGEST}, + #else + {"NO_REQUIRED_DIGEST", 20, 324}, + #endif + #ifdef SSL_R_NO_SHARED_CIPHER + {"NO_SHARED_CIPHER", ERR_LIB_SSL, SSL_R_NO_SHARED_CIPHER}, + #else + {"NO_SHARED_CIPHER", 20, 193}, + #endif + #ifdef SSL_R_NO_SHARED_GROUPS + {"NO_SHARED_GROUPS", ERR_LIB_SSL, SSL_R_NO_SHARED_GROUPS}, + #else + {"NO_SHARED_GROUPS", 20, 410}, + #endif + #ifdef SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS + {"NO_SHARED_SIGNATURE_ALGORITHMS", ERR_LIB_SSL, SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS}, + #else + {"NO_SHARED_SIGNATURE_ALGORITHMS", 20, 376}, + #endif + #ifdef SSL_R_NO_SRTP_PROFILES + {"NO_SRTP_PROFILES", ERR_LIB_SSL, SSL_R_NO_SRTP_PROFILES}, + #else + {"NO_SRTP_PROFILES", 20, 359}, + #endif + #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM + {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM}, + #else + {"NO_SUITABLE_DIGEST_ALGORITHM", 20, 297}, + #endif + #ifdef SSL_R_NO_SUITABLE_GROUPS + {"NO_SUITABLE_GROUPS", ERR_LIB_SSL, SSL_R_NO_SUITABLE_GROUPS}, + #else + {"NO_SUITABLE_GROUPS", 20, 295}, + #endif + #ifdef SSL_R_NO_SUITABLE_KEY_SHARE + {"NO_SUITABLE_KEY_SHARE", ERR_LIB_SSL, SSL_R_NO_SUITABLE_KEY_SHARE}, + #else + {"NO_SUITABLE_KEY_SHARE", 20, 101}, + #endif + #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM + {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM}, + #else + {"NO_SUITABLE_SIGNATURE_ALGORITHM", 20, 118}, + #endif + #ifdef SSL_R_NO_VALID_SCTS + {"NO_VALID_SCTS", ERR_LIB_SSL, SSL_R_NO_VALID_SCTS}, + #else + {"NO_VALID_SCTS", 20, 216}, + #endif + #ifdef SSL_R_NO_VERIFY_COOKIE_CALLBACK + {"NO_VERIFY_COOKIE_CALLBACK", ERR_LIB_SSL, SSL_R_NO_VERIFY_COOKIE_CALLBACK}, + #else + {"NO_VERIFY_COOKIE_CALLBACK", 20, 403}, + #endif + #ifdef SSL_R_NULL_SSL_CTX + {"NULL_SSL_CTX", ERR_LIB_SSL, SSL_R_NULL_SSL_CTX}, + #else + {"NULL_SSL_CTX", 20, 195}, + #endif + #ifdef SSL_R_NULL_SSL_METHOD_PASSED + {"NULL_SSL_METHOD_PASSED", ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED}, + #else + {"NULL_SSL_METHOD_PASSED", 20, 196}, + #endif + #ifdef SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED + {"OLD_SESSION_CIPHER_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED}, + #else + {"OLD_SESSION_CIPHER_NOT_RETURNED", 20, 197}, + #endif + #ifdef SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", ERR_LIB_SSL, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED}, + #else + {"OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED", 20, 344}, + #endif + #ifdef SSL_R_OVERFLOW_ERROR + {"OVERFLOW_ERROR", ERR_LIB_SSL, SSL_R_OVERFLOW_ERROR}, + #else + {"OVERFLOW_ERROR", 20, 237}, + #endif + #ifdef SSL_R_PACKET_LENGTH_TOO_LONG + {"PACKET_LENGTH_TOO_LONG", ERR_LIB_SSL, SSL_R_PACKET_LENGTH_TOO_LONG}, + #else + {"PACKET_LENGTH_TOO_LONG", 20, 198}, + #endif + #ifdef SSL_R_PARSE_TLSEXT + {"PARSE_TLSEXT", ERR_LIB_SSL, SSL_R_PARSE_TLSEXT}, + #else + {"PARSE_TLSEXT", 20, 227}, + #endif + #ifdef SSL_R_PATH_TOO_LONG + {"PATH_TOO_LONG", ERR_LIB_SSL, SSL_R_PATH_TOO_LONG}, + #else + {"PATH_TOO_LONG", 20, 270}, + #endif + #ifdef SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", ERR_LIB_SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE}, + #else + {"PEER_DID_NOT_RETURN_A_CERTIFICATE", 20, 199}, + #endif + #ifdef SSL_R_PEM_NAME_BAD_PREFIX + {"PEM_NAME_BAD_PREFIX", ERR_LIB_SSL, SSL_R_PEM_NAME_BAD_PREFIX}, + #else + {"PEM_NAME_BAD_PREFIX", 20, 391}, + #endif + #ifdef SSL_R_PEM_NAME_TOO_SHORT + {"PEM_NAME_TOO_SHORT", ERR_LIB_SSL, SSL_R_PEM_NAME_TOO_SHORT}, + #else + {"PEM_NAME_TOO_SHORT", 20, 392}, + #endif + #ifdef SSL_R_PIPELINE_FAILURE + {"PIPELINE_FAILURE", ERR_LIB_SSL, SSL_R_PIPELINE_FAILURE}, + #else + {"PIPELINE_FAILURE", 20, 406}, + #endif + #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR}, + #else + {"POST_HANDSHAKE_AUTH_ENCODING_ERR", 20, 278}, + #endif + #ifdef SSL_R_PRIVATE_KEY_MISMATCH + {"PRIVATE_KEY_MISMATCH", ERR_LIB_SSL, SSL_R_PRIVATE_KEY_MISMATCH}, + #else + {"PRIVATE_KEY_MISMATCH", 20, 288}, + #endif + #ifdef SSL_R_PROTOCOL_IS_SHUTDOWN + {"PROTOCOL_IS_SHUTDOWN", ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN}, + #else + {"PROTOCOL_IS_SHUTDOWN", 20, 207}, + #endif + #ifdef SSL_R_PSK_IDENTITY_NOT_FOUND + {"PSK_IDENTITY_NOT_FOUND", ERR_LIB_SSL, SSL_R_PSK_IDENTITY_NOT_FOUND}, + #else + {"PSK_IDENTITY_NOT_FOUND", 20, 223}, + #endif + #ifdef SSL_R_PSK_NO_CLIENT_CB + {"PSK_NO_CLIENT_CB", ERR_LIB_SSL, SSL_R_PSK_NO_CLIENT_CB}, + #else + {"PSK_NO_CLIENT_CB", 20, 224}, + #endif + #ifdef SSL_R_PSK_NO_SERVER_CB + {"PSK_NO_SERVER_CB", ERR_LIB_SSL, SSL_R_PSK_NO_SERVER_CB}, + #else + {"PSK_NO_SERVER_CB", 20, 225}, + #endif + #ifdef SSL_R_READ_BIO_NOT_SET + {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET}, + #else + {"READ_BIO_NOT_SET", 20, 211}, + #endif + #ifdef SSL_R_READ_TIMEOUT_EXPIRED + {"READ_TIMEOUT_EXPIRED", ERR_LIB_SSL, SSL_R_READ_TIMEOUT_EXPIRED}, + #else + {"READ_TIMEOUT_EXPIRED", 20, 312}, + #endif + #ifdef SSL_R_RECORD_LENGTH_MISMATCH + {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH}, + #else + {"RECORD_LENGTH_MISMATCH", 20, 213}, + #endif + #ifdef SSL_R_RECORD_TOO_SMALL + {"RECORD_TOO_SMALL", ERR_LIB_SSL, SSL_R_RECORD_TOO_SMALL}, + #else + {"RECORD_TOO_SMALL", 20, 298}, + #endif + #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG + {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG}, + #else + {"RENEGOTIATE_EXT_TOO_LONG", 20, 335}, + #endif + #ifdef SSL_R_RENEGOTIATION_ENCODING_ERR + {"RENEGOTIATION_ENCODING_ERR", ERR_LIB_SSL, SSL_R_RENEGOTIATION_ENCODING_ERR}, + #else + {"RENEGOTIATION_ENCODING_ERR", 20, 336}, + #endif + #ifdef SSL_R_RENEGOTIATION_MISMATCH + {"RENEGOTIATION_MISMATCH", ERR_LIB_SSL, SSL_R_RENEGOTIATION_MISMATCH}, + #else + {"RENEGOTIATION_MISMATCH", 20, 337}, + #endif + #ifdef SSL_R_REQUEST_PENDING + {"REQUEST_PENDING", ERR_LIB_SSL, SSL_R_REQUEST_PENDING}, + #else + {"REQUEST_PENDING", 20, 285}, + #endif + #ifdef SSL_R_REQUEST_SENT + {"REQUEST_SENT", ERR_LIB_SSL, SSL_R_REQUEST_SENT}, + #else + {"REQUEST_SENT", 20, 286}, + #endif + #ifdef SSL_R_REQUIRED_CIPHER_MISSING + {"REQUIRED_CIPHER_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_CIPHER_MISSING}, + #else + {"REQUIRED_CIPHER_MISSING", 20, 215}, + #endif + #ifdef SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", ERR_LIB_SSL, SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING}, + #else + {"REQUIRED_COMPRESSION_ALGORITHM_MISSING", 20, 342}, + #endif + #ifdef SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", ERR_LIB_SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING}, + #else + {"SCSV_RECEIVED_WHEN_RENEGOTIATING", 20, 345}, + #endif + #ifdef SSL_R_SCT_VERIFICATION_FAILED + {"SCT_VERIFICATION_FAILED", ERR_LIB_SSL, SSL_R_SCT_VERIFICATION_FAILED}, + #else + {"SCT_VERIFICATION_FAILED", 20, 208}, + #endif + #ifdef SSL_R_SERVERHELLO_TLSEXT + {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT}, + #else + {"SERVERHELLO_TLSEXT", 20, 275}, + #endif + #ifdef SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED + {"SESSION_ID_CONTEXT_UNINITIALIZED", ERR_LIB_SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED}, + #else + {"SESSION_ID_CONTEXT_UNINITIALIZED", 20, 277}, + #endif + #ifdef SSL_R_SHUTDOWN_WHILE_IN_INIT + {"SHUTDOWN_WHILE_IN_INIT", ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT}, + #else + {"SHUTDOWN_WHILE_IN_INIT", 20, 407}, + #endif + #ifdef SSL_R_SIGNATURE_ALGORITHMS_ERROR + {"SIGNATURE_ALGORITHMS_ERROR", ERR_LIB_SSL, SSL_R_SIGNATURE_ALGORITHMS_ERROR}, + #else + {"SIGNATURE_ALGORITHMS_ERROR", 20, 360}, + #endif + #ifdef SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", ERR_LIB_SSL, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE}, + #else + {"SIGNATURE_FOR_NON_SIGNING_CERTIFICATE", 20, 220}, + #endif + #ifdef SSL_R_SRP_A_CALC + {"SRP_A_CALC", ERR_LIB_SSL, SSL_R_SRP_A_CALC}, + #else + {"SRP_A_CALC", 20, 361}, + #endif + #ifdef SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", ERR_LIB_SSL, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES}, + #else + {"SRTP_COULD_NOT_ALLOCATE_PROFILES", 20, 362}, + #endif + #ifdef SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", ERR_LIB_SSL, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG}, + #else + {"SRTP_PROTECTION_PROFILE_LIST_TOO_LONG", 20, 363}, + #endif + #ifdef SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE + {"SRTP_UNKNOWN_PROTECTION_PROFILE", ERR_LIB_SSL, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE}, + #else + {"SRTP_UNKNOWN_PROTECTION_PROFILE", 20, 364}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH}, + #else + {"SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH", 20, 232}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME + {"SSL3_EXT_INVALID_SERVERNAME", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME}, + #else + {"SSL3_EXT_INVALID_SERVERNAME", 20, 319}, + #endif + #ifdef SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", ERR_LIB_SSL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE}, + #else + {"SSL3_EXT_INVALID_SERVERNAME_TYPE", 20, 320}, + #endif + #ifdef SSL_R_SSL3_SESSION_ID_TOO_LONG + {"SSL3_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL3_SESSION_ID_TOO_LONG}, + #else + {"SSL3_SESSION_ID_TOO_LONG", 20, 300}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE + {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE}, + #else + {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042}, + #endif + #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC + {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC}, + #else + {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED}, + #else + {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED + {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED}, + #else + {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044}, + #endif + #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN}, + #else + {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046}, + #endif + #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE}, + #else + {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030}, + #endif + #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE + {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE}, + #else + {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040}, + #endif + #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER + {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER}, + #else + {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047}, + #endif + #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE + {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE}, + #else + {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE}, + #else + {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010}, + #endif + #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE}, + #else + {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY + {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY}, + #else + {"SSL_COMMAND_SECTION_EMPTY", 20, 117}, + #endif + #ifdef SSL_R_SSL_COMMAND_SECTION_NOT_FOUND + {"SSL_COMMAND_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_NOT_FOUND}, + #else + {"SSL_COMMAND_SECTION_NOT_FOUND", 20, 125}, + #endif + #ifdef SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION}, + #else + {"SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION", 20, 228}, + #endif + #ifdef SSL_R_SSL_HANDSHAKE_FAILURE + {"SSL_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE}, + #else + {"SSL_HANDSHAKE_FAILURE", 20, 229}, + #endif + #ifdef SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS + {"SSL_LIBRARY_HAS_NO_CIPHERS", ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS}, + #else + {"SSL_LIBRARY_HAS_NO_CIPHERS", 20, 230}, + #endif + #ifdef SSL_R_SSL_NEGATIVE_LENGTH + {"SSL_NEGATIVE_LENGTH", ERR_LIB_SSL, SSL_R_SSL_NEGATIVE_LENGTH}, + #else + {"SSL_NEGATIVE_LENGTH", 20, 372}, + #endif + #ifdef SSL_R_SSL_SECTION_EMPTY + {"SSL_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_SECTION_EMPTY}, + #else + {"SSL_SECTION_EMPTY", 20, 126}, + #endif + #ifdef SSL_R_SSL_SECTION_NOT_FOUND + {"SSL_SECTION_NOT_FOUND", ERR_LIB_SSL, SSL_R_SSL_SECTION_NOT_FOUND}, + #else + {"SSL_SECTION_NOT_FOUND", 20, 136}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CALLBACK_FAILED + {"SSL_SESSION_ID_CALLBACK_FAILED", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED}, + #else + {"SSL_SESSION_ID_CALLBACK_FAILED", 20, 301}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONFLICT + {"SSL_SESSION_ID_CONFLICT", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONFLICT}, + #else + {"SSL_SESSION_ID_CONFLICT", 20, 302}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG}, + #else + {"SSL_SESSION_ID_CONTEXT_TOO_LONG", 20, 273}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH + {"SSL_SESSION_ID_HAS_BAD_LENGTH", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH}, + #else + {"SSL_SESSION_ID_HAS_BAD_LENGTH", 20, 303}, + #endif + #ifdef SSL_R_SSL_SESSION_ID_TOO_LONG + {"SSL_SESSION_ID_TOO_LONG", ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_TOO_LONG}, + #else + {"SSL_SESSION_ID_TOO_LONG", 20, 408}, + #endif + #ifdef SSL_R_SSL_SESSION_VERSION_MISMATCH + {"SSL_SESSION_VERSION_MISMATCH", ERR_LIB_SSL, SSL_R_SSL_SESSION_VERSION_MISMATCH}, + #else + {"SSL_SESSION_VERSION_MISMATCH", 20, 210}, + #endif + #ifdef SSL_R_STILL_IN_INIT + {"STILL_IN_INIT", ERR_LIB_SSL, SSL_R_STILL_IN_INIT}, + #else + {"STILL_IN_INIT", 20, 121}, + #endif + #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED}, + #else + {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116}, + #endif + #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION + {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION}, + #else + {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109}, + #endif + #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED + {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED}, + #else + {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR + {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR}, + #else + {"TLSV1_ALERT_DECODE_ERROR", 20, 1050}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED + {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED}, + #else + {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021}, + #endif + #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR + {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR}, + #else + {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051}, + #endif + #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION + {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION}, + #else + {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK}, + #else + {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY}, + #else + {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071}, + #endif + #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR + {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR}, + #else + {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080}, + #endif + #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION + {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION}, + #else + {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100}, + #endif + #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION + {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION}, + #else + {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070}, + #endif + #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW + {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW}, + #else + {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022}, + #endif + #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA + {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA}, + #else + {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048}, + #endif + #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED + {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED}, + #else + {"TLSV1_ALERT_USER_CANCELLED", 20, 1090}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE}, + #else + {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114}, + #endif + #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE}, + #else + {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113}, + #endif + #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE + {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE}, + #else + {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111}, + #endif + #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME + {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME}, + #else + {"TLSV1_UNRECOGNIZED_NAME", 20, 1112}, + #endif + #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION + {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION}, + #else + {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110}, + #endif + #ifdef SSL_R_TLS_ILLEGAL_EXPORTER_LABEL + {"TLS_ILLEGAL_EXPORTER_LABEL", ERR_LIB_SSL, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL}, + #else + {"TLS_ILLEGAL_EXPORTER_LABEL", 20, 367}, + #endif + #ifdef SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST + {"TLS_INVALID_ECPOINTFORMAT_LIST", ERR_LIB_SSL, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST}, + #else + {"TLS_INVALID_ECPOINTFORMAT_LIST", 20, 157}, + #endif + #ifdef SSL_R_TOO_MANY_KEY_UPDATES + {"TOO_MANY_KEY_UPDATES", ERR_LIB_SSL, SSL_R_TOO_MANY_KEY_UPDATES}, + #else + {"TOO_MANY_KEY_UPDATES", 20, 132}, + #endif + #ifdef SSL_R_TOO_MANY_WARN_ALERTS + {"TOO_MANY_WARN_ALERTS", ERR_LIB_SSL, SSL_R_TOO_MANY_WARN_ALERTS}, + #else + {"TOO_MANY_WARN_ALERTS", 20, 409}, + #endif + #ifdef SSL_R_TOO_MUCH_EARLY_DATA + {"TOO_MUCH_EARLY_DATA", ERR_LIB_SSL, SSL_R_TOO_MUCH_EARLY_DATA}, + #else + {"TOO_MUCH_EARLY_DATA", 20, 164}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS + {"UNABLE_TO_FIND_ECDH_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS}, + #else + {"UNABLE_TO_FIND_ECDH_PARAMETERS", 20, 314}, + #endif + #ifdef SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", ERR_LIB_SSL, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS}, + #else + {"UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS", 20, 239}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_MD5_ROUTINES", 20, 242}, + #endif + #ifdef SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", ERR_LIB_SSL, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES}, + #else + {"UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES", 20, 243}, + #endif + #ifdef SSL_R_UNEXPECTED_CCS_MESSAGE + {"UNEXPECTED_CCS_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_CCS_MESSAGE}, + #else + {"UNEXPECTED_CCS_MESSAGE", 20, 262}, + #endif + #ifdef SSL_R_UNEXPECTED_END_OF_EARLY_DATA + {"UNEXPECTED_END_OF_EARLY_DATA", ERR_LIB_SSL, SSL_R_UNEXPECTED_END_OF_EARLY_DATA}, + #else + {"UNEXPECTED_END_OF_EARLY_DATA", 20, 178}, + #endif + #ifdef SSL_R_UNEXPECTED_EOF_WHILE_READING + {"UNEXPECTED_EOF_WHILE_READING", ERR_LIB_SSL, SSL_R_UNEXPECTED_EOF_WHILE_READING}, + #else + {"UNEXPECTED_EOF_WHILE_READING", 20, 294}, + #endif + #ifdef SSL_R_UNEXPECTED_MESSAGE + {"UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_UNEXPECTED_MESSAGE}, + #else + {"UNEXPECTED_MESSAGE", 20, 244}, + #endif + #ifdef SSL_R_UNEXPECTED_RECORD + {"UNEXPECTED_RECORD", ERR_LIB_SSL, SSL_R_UNEXPECTED_RECORD}, + #else + {"UNEXPECTED_RECORD", 20, 245}, + #endif + #ifdef SSL_R_UNINITIALIZED + {"UNINITIALIZED", ERR_LIB_SSL, SSL_R_UNINITIALIZED}, + #else + {"UNINITIALIZED", 20, 276}, + #endif + #ifdef SSL_R_UNKNOWN_ALERT_TYPE + {"UNKNOWN_ALERT_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_ALERT_TYPE}, + #else + {"UNKNOWN_ALERT_TYPE", 20, 246}, + #endif + #ifdef SSL_R_UNKNOWN_CERTIFICATE_TYPE + {"UNKNOWN_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE}, + #else + {"UNKNOWN_CERTIFICATE_TYPE", 20, 247}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_RETURNED + {"UNKNOWN_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_RETURNED}, + #else + {"UNKNOWN_CIPHER_RETURNED", 20, 248}, + #endif + #ifdef SSL_R_UNKNOWN_CIPHER_TYPE + {"UNKNOWN_CIPHER_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_CIPHER_TYPE}, + #else + {"UNKNOWN_CIPHER_TYPE", 20, 249}, + #endif + #ifdef SSL_R_UNKNOWN_CMD_NAME + {"UNKNOWN_CMD_NAME", ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME}, + #else + {"UNKNOWN_CMD_NAME", 20, 386}, + #endif + #ifdef SSL_R_UNKNOWN_COMMAND + {"UNKNOWN_COMMAND", ERR_LIB_SSL, SSL_R_UNKNOWN_COMMAND}, + #else + {"UNKNOWN_COMMAND", 20, 139}, + #endif + #ifdef SSL_R_UNKNOWN_DIGEST + {"UNKNOWN_DIGEST", ERR_LIB_SSL, SSL_R_UNKNOWN_DIGEST}, + #else + {"UNKNOWN_DIGEST", 20, 368}, + #endif + #ifdef SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE + {"UNKNOWN_KEY_EXCHANGE_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE}, + #else + {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250}, + #endif + #ifdef SSL_R_UNKNOWN_PKEY_TYPE + {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE}, + #else + {"UNKNOWN_PKEY_TYPE", 20, 251}, + #endif + #ifdef SSL_R_UNKNOWN_PROTOCOL + {"UNKNOWN_PROTOCOL", ERR_LIB_SSL, SSL_R_UNKNOWN_PROTOCOL}, + #else + {"UNKNOWN_PROTOCOL", 20, 252}, + #endif + #ifdef SSL_R_UNKNOWN_SSL_VERSION + {"UNKNOWN_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNKNOWN_SSL_VERSION}, + #else + {"UNKNOWN_SSL_VERSION", 20, 254}, + #endif + #ifdef SSL_R_UNKNOWN_STATE + {"UNKNOWN_STATE", ERR_LIB_SSL, SSL_R_UNKNOWN_STATE}, + #else + {"UNKNOWN_STATE", 20, 255}, + #endif + #ifdef SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", ERR_LIB_SSL, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED}, + #else + {"UNSAFE_LEGACY_RENEGOTIATION_DISABLED", 20, 338}, + #endif + #ifdef SSL_R_UNSOLICITED_EXTENSION + {"UNSOLICITED_EXTENSION", ERR_LIB_SSL, SSL_R_UNSOLICITED_EXTENSION}, + #else + {"UNSOLICITED_EXTENSION", 20, 217}, + #endif + #ifdef SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM + {"UNSUPPORTED_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM}, + #else + {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257}, + #endif + #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE + {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE}, + #else + {"UNSUPPORTED_ELLIPTIC_CURVE", 20, 315}, + #endif + #ifdef SSL_R_UNSUPPORTED_PROTOCOL + {"UNSUPPORTED_PROTOCOL", ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL}, + #else + {"UNSUPPORTED_PROTOCOL", 20, 258}, + #endif + #ifdef SSL_R_UNSUPPORTED_SSL_VERSION + {"UNSUPPORTED_SSL_VERSION", ERR_LIB_SSL, SSL_R_UNSUPPORTED_SSL_VERSION}, + #else + {"UNSUPPORTED_SSL_VERSION", 20, 259}, + #endif + #ifdef SSL_R_UNSUPPORTED_STATUS_TYPE + {"UNSUPPORTED_STATUS_TYPE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_STATUS_TYPE}, + #else + {"UNSUPPORTED_STATUS_TYPE", 20, 329}, + #endif + #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED + {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED}, + #else + {"USE_SRTP_NOT_NEGOTIATED", 20, 369}, + #endif + #ifdef SSL_R_VERSION_TOO_HIGH + {"VERSION_TOO_HIGH", ERR_LIB_SSL, SSL_R_VERSION_TOO_HIGH}, + #else + {"VERSION_TOO_HIGH", 20, 166}, + #endif + #ifdef SSL_R_VERSION_TOO_LOW + {"VERSION_TOO_LOW", ERR_LIB_SSL, SSL_R_VERSION_TOO_LOW}, + #else + {"VERSION_TOO_LOW", 20, 396}, + #endif + #ifdef SSL_R_WRONG_CERTIFICATE_TYPE + {"WRONG_CERTIFICATE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_CERTIFICATE_TYPE}, + #else + {"WRONG_CERTIFICATE_TYPE", 20, 383}, + #endif + #ifdef SSL_R_WRONG_CIPHER_RETURNED + {"WRONG_CIPHER_RETURNED", ERR_LIB_SSL, SSL_R_WRONG_CIPHER_RETURNED}, + #else + {"WRONG_CIPHER_RETURNED", 20, 261}, + #endif + #ifdef SSL_R_WRONG_CURVE + {"WRONG_CURVE", ERR_LIB_SSL, SSL_R_WRONG_CURVE}, + #else + {"WRONG_CURVE", 20, 378}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_LENGTH + {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH}, + #else + {"WRONG_SIGNATURE_LENGTH", 20, 264}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_SIZE + {"WRONG_SIGNATURE_SIZE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_SIZE}, + #else + {"WRONG_SIGNATURE_SIZE", 20, 265}, + #endif + #ifdef SSL_R_WRONG_SIGNATURE_TYPE + {"WRONG_SIGNATURE_TYPE", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_TYPE}, + #else + {"WRONG_SIGNATURE_TYPE", 20, 370}, + #endif + #ifdef SSL_R_WRONG_SSL_VERSION + {"WRONG_SSL_VERSION", ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION}, + #else + {"WRONG_SSL_VERSION", 20, 266}, + #endif + #ifdef SSL_R_WRONG_VERSION_NUMBER + {"WRONG_VERSION_NUMBER", ERR_LIB_SSL, SSL_R_WRONG_VERSION_NUMBER}, + #else + {"WRONG_VERSION_NUMBER", 20, 267}, + #endif + #ifdef SSL_R_X509_LIB + {"X509_LIB", ERR_LIB_SSL, SSL_R_X509_LIB}, + #else + {"X509_LIB", 20, 268}, + #endif + #ifdef SSL_R_X509_VERIFICATION_SETUP_PROBLEMS + {"X509_VERIFICATION_SETUP_PROBLEMS", ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS}, + #else + {"X509_VERIFICATION_SETUP_PROBLEMS", 20, 269}, + #endif + #ifdef TS_R_BAD_PKCS7_TYPE + {"BAD_PKCS7_TYPE", ERR_LIB_TS, TS_R_BAD_PKCS7_TYPE}, + #else + {"BAD_PKCS7_TYPE", 47, 132}, + #endif + #ifdef TS_R_BAD_TYPE + {"BAD_TYPE", ERR_LIB_TS, TS_R_BAD_TYPE}, + #else + {"BAD_TYPE", 47, 133}, + #endif + #ifdef TS_R_CANNOT_LOAD_CERT + {"CANNOT_LOAD_CERT", ERR_LIB_TS, TS_R_CANNOT_LOAD_CERT}, + #else + {"CANNOT_LOAD_CERT", 47, 137}, + #endif + #ifdef TS_R_CANNOT_LOAD_KEY + {"CANNOT_LOAD_KEY", ERR_LIB_TS, TS_R_CANNOT_LOAD_KEY}, + #else + {"CANNOT_LOAD_KEY", 47, 138}, + #endif + #ifdef TS_R_CERTIFICATE_VERIFY_ERROR + {"CERTIFICATE_VERIFY_ERROR", ERR_LIB_TS, TS_R_CERTIFICATE_VERIFY_ERROR}, + #else + {"CERTIFICATE_VERIFY_ERROR", 47, 100}, + #endif + #ifdef TS_R_COULD_NOT_SET_ENGINE + {"COULD_NOT_SET_ENGINE", ERR_LIB_TS, TS_R_COULD_NOT_SET_ENGINE}, + #else + {"COULD_NOT_SET_ENGINE", 47, 127}, + #endif + #ifdef TS_R_COULD_NOT_SET_TIME + {"COULD_NOT_SET_TIME", ERR_LIB_TS, TS_R_COULD_NOT_SET_TIME}, + #else + {"COULD_NOT_SET_TIME", 47, 115}, + #endif + #ifdef TS_R_DETACHED_CONTENT + {"DETACHED_CONTENT", ERR_LIB_TS, TS_R_DETACHED_CONTENT}, + #else + {"DETACHED_CONTENT", 47, 134}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_ERROR + {"ESS_ADD_SIGNING_CERT_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_ERROR", 47, 116}, + #endif + #ifdef TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR + {"ESS_ADD_SIGNING_CERT_V2_ERROR", ERR_LIB_TS, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR}, + #else + {"ESS_ADD_SIGNING_CERT_V2_ERROR", 47, 139}, + #endif + #ifdef TS_R_ESS_SIGNING_CERTIFICATE_ERROR + {"ESS_SIGNING_CERTIFICATE_ERROR", ERR_LIB_TS, TS_R_ESS_SIGNING_CERTIFICATE_ERROR}, + #else + {"ESS_SIGNING_CERTIFICATE_ERROR", 47, 101}, + #endif + #ifdef TS_R_INVALID_NULL_POINTER + {"INVALID_NULL_POINTER", ERR_LIB_TS, TS_R_INVALID_NULL_POINTER}, + #else + {"INVALID_NULL_POINTER", 47, 102}, + #endif + #ifdef TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", ERR_LIB_TS, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE}, + #else + {"INVALID_SIGNER_CERTIFICATE_PURPOSE", 47, 117}, + #endif + #ifdef TS_R_MESSAGE_IMPRINT_MISMATCH + {"MESSAGE_IMPRINT_MISMATCH", ERR_LIB_TS, TS_R_MESSAGE_IMPRINT_MISMATCH}, + #else + {"MESSAGE_IMPRINT_MISMATCH", 47, 103}, + #endif + #ifdef TS_R_NONCE_MISMATCH + {"NONCE_MISMATCH", ERR_LIB_TS, TS_R_NONCE_MISMATCH}, + #else + {"NONCE_MISMATCH", 47, 104}, + #endif + #ifdef TS_R_NONCE_NOT_RETURNED + {"NONCE_NOT_RETURNED", ERR_LIB_TS, TS_R_NONCE_NOT_RETURNED}, + #else + {"NONCE_NOT_RETURNED", 47, 105}, + #endif + #ifdef TS_R_NO_CONTENT + {"NO_CONTENT", ERR_LIB_TS, TS_R_NO_CONTENT}, + #else + {"NO_CONTENT", 47, 106}, + #endif + #ifdef TS_R_NO_TIME_STAMP_TOKEN + {"NO_TIME_STAMP_TOKEN", ERR_LIB_TS, TS_R_NO_TIME_STAMP_TOKEN}, + #else + {"NO_TIME_STAMP_TOKEN", 47, 107}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNATURE_ERROR + {"PKCS7_ADD_SIGNATURE_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNATURE_ERROR}, + #else + {"PKCS7_ADD_SIGNATURE_ERROR", 47, 118}, + #endif + #ifdef TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR + {"PKCS7_ADD_SIGNED_ATTR_ERROR", ERR_LIB_TS, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR}, + #else + {"PKCS7_ADD_SIGNED_ATTR_ERROR", 47, 119}, + #endif + #ifdef TS_R_PKCS7_TO_TS_TST_INFO_FAILED + {"PKCS7_TO_TS_TST_INFO_FAILED", ERR_LIB_TS, TS_R_PKCS7_TO_TS_TST_INFO_FAILED}, + #else + {"PKCS7_TO_TS_TST_INFO_FAILED", 47, 129}, + #endif + #ifdef TS_R_POLICY_MISMATCH + {"POLICY_MISMATCH", ERR_LIB_TS, TS_R_POLICY_MISMATCH}, + #else + {"POLICY_MISMATCH", 47, 108}, + #endif + #ifdef TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", ERR_LIB_TS, TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE}, + #else + {"PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE", 47, 120}, + #endif + #ifdef TS_R_RESPONSE_SETUP_ERROR + {"RESPONSE_SETUP_ERROR", ERR_LIB_TS, TS_R_RESPONSE_SETUP_ERROR}, + #else + {"RESPONSE_SETUP_ERROR", 47, 121}, + #endif + #ifdef TS_R_SIGNATURE_FAILURE + {"SIGNATURE_FAILURE", ERR_LIB_TS, TS_R_SIGNATURE_FAILURE}, + #else + {"SIGNATURE_FAILURE", 47, 109}, + #endif + #ifdef TS_R_THERE_MUST_BE_ONE_SIGNER + {"THERE_MUST_BE_ONE_SIGNER", ERR_LIB_TS, TS_R_THERE_MUST_BE_ONE_SIGNER}, + #else + {"THERE_MUST_BE_ONE_SIGNER", 47, 110}, + #endif + #ifdef TS_R_TIME_SYSCALL_ERROR + {"TIME_SYSCALL_ERROR", ERR_LIB_TS, TS_R_TIME_SYSCALL_ERROR}, + #else + {"TIME_SYSCALL_ERROR", 47, 122}, + #endif + #ifdef TS_R_TOKEN_NOT_PRESENT + {"TOKEN_NOT_PRESENT", ERR_LIB_TS, TS_R_TOKEN_NOT_PRESENT}, + #else + {"TOKEN_NOT_PRESENT", 47, 130}, + #endif + #ifdef TS_R_TOKEN_PRESENT + {"TOKEN_PRESENT", ERR_LIB_TS, TS_R_TOKEN_PRESENT}, + #else + {"TOKEN_PRESENT", 47, 131}, + #endif + #ifdef TS_R_TSA_NAME_MISMATCH + {"TSA_NAME_MISMATCH", ERR_LIB_TS, TS_R_TSA_NAME_MISMATCH}, + #else + {"TSA_NAME_MISMATCH", 47, 111}, + #endif + #ifdef TS_R_TSA_UNTRUSTED + {"TSA_UNTRUSTED", ERR_LIB_TS, TS_R_TSA_UNTRUSTED}, + #else + {"TSA_UNTRUSTED", 47, 112}, + #endif + #ifdef TS_R_TST_INFO_SETUP_ERROR + {"TST_INFO_SETUP_ERROR", ERR_LIB_TS, TS_R_TST_INFO_SETUP_ERROR}, + #else + {"TST_INFO_SETUP_ERROR", 47, 123}, + #endif + #ifdef TS_R_TS_DATASIGN + {"TS_DATASIGN", ERR_LIB_TS, TS_R_TS_DATASIGN}, + #else + {"TS_DATASIGN", 47, 124}, + #endif + #ifdef TS_R_UNACCEPTABLE_POLICY + {"UNACCEPTABLE_POLICY", ERR_LIB_TS, TS_R_UNACCEPTABLE_POLICY}, + #else + {"UNACCEPTABLE_POLICY", 47, 125}, + #endif + #ifdef TS_R_UNSUPPORTED_MD_ALGORITHM + {"UNSUPPORTED_MD_ALGORITHM", ERR_LIB_TS, TS_R_UNSUPPORTED_MD_ALGORITHM}, + #else + {"UNSUPPORTED_MD_ALGORITHM", 47, 126}, + #endif + #ifdef TS_R_UNSUPPORTED_VERSION + {"UNSUPPORTED_VERSION", ERR_LIB_TS, TS_R_UNSUPPORTED_VERSION}, + #else + {"UNSUPPORTED_VERSION", 47, 113}, + #endif + #ifdef TS_R_VAR_BAD_VALUE + {"VAR_BAD_VALUE", ERR_LIB_TS, TS_R_VAR_BAD_VALUE}, + #else + {"VAR_BAD_VALUE", 47, 135}, + #endif + #ifdef TS_R_VAR_LOOKUP_FAILURE + {"VAR_LOOKUP_FAILURE", ERR_LIB_TS, TS_R_VAR_LOOKUP_FAILURE}, + #else + {"VAR_LOOKUP_FAILURE", 47, 136}, + #endif + #ifdef TS_R_WRONG_CONTENT_TYPE + {"WRONG_CONTENT_TYPE", ERR_LIB_TS, TS_R_WRONG_CONTENT_TYPE}, + #else + {"WRONG_CONTENT_TYPE", 47, 114}, + #endif + #ifdef UI_R_COMMON_OK_AND_CANCEL_CHARACTERS + {"COMMON_OK_AND_CANCEL_CHARACTERS", ERR_LIB_UI, UI_R_COMMON_OK_AND_CANCEL_CHARACTERS}, + #else + {"COMMON_OK_AND_CANCEL_CHARACTERS", 40, 104}, + #endif + #ifdef UI_R_INDEX_TOO_LARGE + {"INDEX_TOO_LARGE", ERR_LIB_UI, UI_R_INDEX_TOO_LARGE}, + #else + {"INDEX_TOO_LARGE", 40, 102}, + #endif + #ifdef UI_R_INDEX_TOO_SMALL + {"INDEX_TOO_SMALL", ERR_LIB_UI, UI_R_INDEX_TOO_SMALL}, + #else + {"INDEX_TOO_SMALL", 40, 103}, + #endif + #ifdef UI_R_NO_RESULT_BUFFER + {"NO_RESULT_BUFFER", ERR_LIB_UI, UI_R_NO_RESULT_BUFFER}, + #else + {"NO_RESULT_BUFFER", 40, 105}, + #endif + #ifdef UI_R_PROCESSING_ERROR + {"PROCESSING_ERROR", ERR_LIB_UI, UI_R_PROCESSING_ERROR}, + #else + {"PROCESSING_ERROR", 40, 107}, + #endif + #ifdef UI_R_RESULT_TOO_LARGE + {"RESULT_TOO_LARGE", ERR_LIB_UI, UI_R_RESULT_TOO_LARGE}, + #else + {"RESULT_TOO_LARGE", 40, 100}, + #endif + #ifdef UI_R_RESULT_TOO_SMALL + {"RESULT_TOO_SMALL", ERR_LIB_UI, UI_R_RESULT_TOO_SMALL}, + #else + {"RESULT_TOO_SMALL", 40, 101}, + #endif + #ifdef UI_R_SYSASSIGN_ERROR + {"SYSASSIGN_ERROR", ERR_LIB_UI, UI_R_SYSASSIGN_ERROR}, + #else + {"SYSASSIGN_ERROR", 40, 109}, + #endif + #ifdef UI_R_SYSDASSGN_ERROR + {"SYSDASSGN_ERROR", ERR_LIB_UI, UI_R_SYSDASSGN_ERROR}, + #else + {"SYSDASSGN_ERROR", 40, 110}, + #endif + #ifdef UI_R_SYSQIOW_ERROR + {"SYSQIOW_ERROR", ERR_LIB_UI, UI_R_SYSQIOW_ERROR}, + #else + {"SYSQIOW_ERROR", 40, 111}, + #endif + #ifdef UI_R_UNKNOWN_CONTROL_COMMAND + {"UNKNOWN_CONTROL_COMMAND", ERR_LIB_UI, UI_R_UNKNOWN_CONTROL_COMMAND}, + #else + {"UNKNOWN_CONTROL_COMMAND", 40, 106}, + #endif + #ifdef UI_R_UNKNOWN_TTYGET_ERRNO_VALUE + {"UNKNOWN_TTYGET_ERRNO_VALUE", ERR_LIB_UI, UI_R_UNKNOWN_TTYGET_ERRNO_VALUE}, + #else + {"UNKNOWN_TTYGET_ERRNO_VALUE", 40, 108}, + #endif + #ifdef UI_R_USER_DATA_DUPLICATION_UNSUPPORTED + {"USER_DATA_DUPLICATION_UNSUPPORTED", ERR_LIB_UI, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED}, + #else + {"USER_DATA_DUPLICATION_UNSUPPORTED", 40, 112}, + #endif + #ifdef X509V3_R_BAD_IP_ADDRESS + {"BAD_IP_ADDRESS", ERR_LIB_X509V3, X509V3_R_BAD_IP_ADDRESS}, + #else + {"BAD_IP_ADDRESS", 34, 118}, + #endif + #ifdef X509V3_R_BAD_OBJECT + {"BAD_OBJECT", ERR_LIB_X509V3, X509V3_R_BAD_OBJECT}, + #else + {"BAD_OBJECT", 34, 119}, + #endif + #ifdef X509V3_R_BN_DEC2BN_ERROR + {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR}, + #else + {"BN_DEC2BN_ERROR", 34, 100}, + #endif + #ifdef X509V3_R_BN_TO_ASN1_INTEGER_ERROR + {"BN_TO_ASN1_INTEGER_ERROR", ERR_LIB_X509V3, X509V3_R_BN_TO_ASN1_INTEGER_ERROR}, + #else + {"BN_TO_ASN1_INTEGER_ERROR", 34, 101}, + #endif + #ifdef X509V3_R_DIRNAME_ERROR + {"DIRNAME_ERROR", ERR_LIB_X509V3, X509V3_R_DIRNAME_ERROR}, + #else + {"DIRNAME_ERROR", 34, 149}, + #endif + #ifdef X509V3_R_DISTPOINT_ALREADY_SET + {"DISTPOINT_ALREADY_SET", ERR_LIB_X509V3, X509V3_R_DISTPOINT_ALREADY_SET}, + #else + {"DISTPOINT_ALREADY_SET", 34, 160}, + #endif + #ifdef X509V3_R_DUPLICATE_ZONE_ID + {"DUPLICATE_ZONE_ID", ERR_LIB_X509V3, X509V3_R_DUPLICATE_ZONE_ID}, + #else + {"DUPLICATE_ZONE_ID", 34, 133}, + #endif + #ifdef X509V3_R_EMPTY_KEY_USAGE + {"EMPTY_KEY_USAGE", ERR_LIB_X509V3, X509V3_R_EMPTY_KEY_USAGE}, + #else + {"EMPTY_KEY_USAGE", 34, 169}, + #endif + #ifdef X509V3_R_ERROR_CONVERTING_ZONE + {"ERROR_CONVERTING_ZONE", ERR_LIB_X509V3, X509V3_R_ERROR_CONVERTING_ZONE}, + #else + {"ERROR_CONVERTING_ZONE", 34, 131}, + #endif + #ifdef X509V3_R_ERROR_CREATING_EXTENSION + {"ERROR_CREATING_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_CREATING_EXTENSION}, + #else + {"ERROR_CREATING_EXTENSION", 34, 144}, + #endif + #ifdef X509V3_R_ERROR_IN_EXTENSION + {"ERROR_IN_EXTENSION", ERR_LIB_X509V3, X509V3_R_ERROR_IN_EXTENSION}, + #else + {"ERROR_IN_EXTENSION", 34, 128}, + #endif + #ifdef X509V3_R_EXPECTED_A_SECTION_NAME + {"EXPECTED_A_SECTION_NAME", ERR_LIB_X509V3, X509V3_R_EXPECTED_A_SECTION_NAME}, + #else + {"EXPECTED_A_SECTION_NAME", 34, 137}, + #endif + #ifdef X509V3_R_EXTENSION_EXISTS + {"EXTENSION_EXISTS", ERR_LIB_X509V3, X509V3_R_EXTENSION_EXISTS}, + #else + {"EXTENSION_EXISTS", 34, 145}, + #endif + #ifdef X509V3_R_EXTENSION_NAME_ERROR + {"EXTENSION_NAME_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_NAME_ERROR}, + #else + {"EXTENSION_NAME_ERROR", 34, 115}, + #endif + #ifdef X509V3_R_EXTENSION_NOT_FOUND + {"EXTENSION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_EXTENSION_NOT_FOUND}, + #else + {"EXTENSION_NOT_FOUND", 34, 102}, + #endif + #ifdef X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED + {"EXTENSION_SETTING_NOT_SUPPORTED", ERR_LIB_X509V3, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED}, + #else + {"EXTENSION_SETTING_NOT_SUPPORTED", 34, 103}, + #endif + #ifdef X509V3_R_EXTENSION_VALUE_ERROR + {"EXTENSION_VALUE_ERROR", ERR_LIB_X509V3, X509V3_R_EXTENSION_VALUE_ERROR}, + #else + {"EXTENSION_VALUE_ERROR", 34, 116}, + #endif + #ifdef X509V3_R_ILLEGAL_EMPTY_EXTENSION + {"ILLEGAL_EMPTY_EXTENSION", ERR_LIB_X509V3, X509V3_R_ILLEGAL_EMPTY_EXTENSION}, + #else + {"ILLEGAL_EMPTY_EXTENSION", 34, 151}, + #endif + #ifdef X509V3_R_INCORRECT_POLICY_SYNTAX_TAG + {"INCORRECT_POLICY_SYNTAX_TAG", ERR_LIB_X509V3, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG}, + #else + {"INCORRECT_POLICY_SYNTAX_TAG", 34, 152}, + #endif + #ifdef X509V3_R_INVALID_ASNUMBER + {"INVALID_ASNUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_ASNUMBER}, + #else + {"INVALID_ASNUMBER", 34, 162}, + #endif + #ifdef X509V3_R_INVALID_ASRANGE + {"INVALID_ASRANGE", ERR_LIB_X509V3, X509V3_R_INVALID_ASRANGE}, + #else + {"INVALID_ASRANGE", 34, 163}, + #endif + #ifdef X509V3_R_INVALID_BOOLEAN_STRING + {"INVALID_BOOLEAN_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_BOOLEAN_STRING}, + #else + {"INVALID_BOOLEAN_STRING", 34, 104}, + #endif + #ifdef X509V3_R_INVALID_CERTIFICATE + {"INVALID_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_INVALID_CERTIFICATE}, + #else + {"INVALID_CERTIFICATE", 34, 158}, + #endif + #ifdef X509V3_R_INVALID_EMPTY_NAME + {"INVALID_EMPTY_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_EMPTY_NAME}, + #else + {"INVALID_EMPTY_NAME", 34, 108}, + #endif + #ifdef X509V3_R_INVALID_EXTENSION_STRING + {"INVALID_EXTENSION_STRING", ERR_LIB_X509V3, X509V3_R_INVALID_EXTENSION_STRING}, + #else + {"INVALID_EXTENSION_STRING", 34, 105}, + #endif + #ifdef X509V3_R_INVALID_INHERITANCE + {"INVALID_INHERITANCE", ERR_LIB_X509V3, X509V3_R_INVALID_INHERITANCE}, + #else + {"INVALID_INHERITANCE", 34, 165}, + #endif + #ifdef X509V3_R_INVALID_IPADDRESS + {"INVALID_IPADDRESS", ERR_LIB_X509V3, X509V3_R_INVALID_IPADDRESS}, + #else + {"INVALID_IPADDRESS", 34, 166}, + #endif + #ifdef X509V3_R_INVALID_MULTIPLE_RDNS + {"INVALID_MULTIPLE_RDNS", ERR_LIB_X509V3, X509V3_R_INVALID_MULTIPLE_RDNS}, + #else + {"INVALID_MULTIPLE_RDNS", 34, 161}, + #endif + #ifdef X509V3_R_INVALID_NAME + {"INVALID_NAME", ERR_LIB_X509V3, X509V3_R_INVALID_NAME}, + #else + {"INVALID_NAME", 34, 106}, + #endif + #ifdef X509V3_R_INVALID_NULL_ARGUMENT + {"INVALID_NULL_ARGUMENT", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_ARGUMENT}, + #else + {"INVALID_NULL_ARGUMENT", 34, 107}, + #endif + #ifdef X509V3_R_INVALID_NULL_VALUE + {"INVALID_NULL_VALUE", ERR_LIB_X509V3, X509V3_R_INVALID_NULL_VALUE}, + #else + {"INVALID_NULL_VALUE", 34, 109}, + #endif + #ifdef X509V3_R_INVALID_NUMBER + {"INVALID_NUMBER", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBER}, + #else + {"INVALID_NUMBER", 34, 140}, + #endif + #ifdef X509V3_R_INVALID_NUMBERS + {"INVALID_NUMBERS", ERR_LIB_X509V3, X509V3_R_INVALID_NUMBERS}, + #else + {"INVALID_NUMBERS", 34, 141}, + #endif + #ifdef X509V3_R_INVALID_OBJECT_IDENTIFIER + {"INVALID_OBJECT_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_OBJECT_IDENTIFIER}, + #else + {"INVALID_OBJECT_IDENTIFIER", 34, 110}, + #endif + #ifdef X509V3_R_INVALID_OPTION + {"INVALID_OPTION", ERR_LIB_X509V3, X509V3_R_INVALID_OPTION}, + #else + {"INVALID_OPTION", 34, 138}, + #endif + #ifdef X509V3_R_INVALID_POLICY_IDENTIFIER + {"INVALID_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_INVALID_POLICY_IDENTIFIER}, + #else + {"INVALID_POLICY_IDENTIFIER", 34, 134}, + #endif + #ifdef X509V3_R_INVALID_PROXY_POLICY_SETTING + {"INVALID_PROXY_POLICY_SETTING", ERR_LIB_X509V3, X509V3_R_INVALID_PROXY_POLICY_SETTING}, + #else + {"INVALID_PROXY_POLICY_SETTING", 34, 153}, + #endif + #ifdef X509V3_R_INVALID_PURPOSE + {"INVALID_PURPOSE", ERR_LIB_X509V3, X509V3_R_INVALID_PURPOSE}, + #else + {"INVALID_PURPOSE", 34, 146}, + #endif + #ifdef X509V3_R_INVALID_SAFI + {"INVALID_SAFI", ERR_LIB_X509V3, X509V3_R_INVALID_SAFI}, + #else + {"INVALID_SAFI", 34, 164}, + #endif + #ifdef X509V3_R_INVALID_SECTION + {"INVALID_SECTION", ERR_LIB_X509V3, X509V3_R_INVALID_SECTION}, + #else + {"INVALID_SECTION", 34, 135}, + #endif + #ifdef X509V3_R_INVALID_SYNTAX + {"INVALID_SYNTAX", ERR_LIB_X509V3, X509V3_R_INVALID_SYNTAX}, + #else + {"INVALID_SYNTAX", 34, 143}, + #endif + #ifdef X509V3_R_ISSUER_DECODE_ERROR + {"ISSUER_DECODE_ERROR", ERR_LIB_X509V3, X509V3_R_ISSUER_DECODE_ERROR}, + #else + {"ISSUER_DECODE_ERROR", 34, 126}, + #endif + #ifdef X509V3_R_MISSING_VALUE + {"MISSING_VALUE", ERR_LIB_X509V3, X509V3_R_MISSING_VALUE}, + #else + {"MISSING_VALUE", 34, 124}, + #endif + #ifdef X509V3_R_NEED_ORGANIZATION_AND_NUMBERS + {"NEED_ORGANIZATION_AND_NUMBERS", ERR_LIB_X509V3, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS}, + #else + {"NEED_ORGANIZATION_AND_NUMBERS", 34, 142}, + #endif + #ifdef X509V3_R_NEGATIVE_PATHLEN + {"NEGATIVE_PATHLEN", ERR_LIB_X509V3, X509V3_R_NEGATIVE_PATHLEN}, + #else + {"NEGATIVE_PATHLEN", 34, 168}, + #endif + #ifdef X509V3_R_NO_CONFIG_DATABASE + {"NO_CONFIG_DATABASE", ERR_LIB_X509V3, X509V3_R_NO_CONFIG_DATABASE}, + #else + {"NO_CONFIG_DATABASE", 34, 136}, + #endif + #ifdef X509V3_R_NO_ISSUER_CERTIFICATE + {"NO_ISSUER_CERTIFICATE", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_CERTIFICATE}, + #else + {"NO_ISSUER_CERTIFICATE", 34, 121}, + #endif + #ifdef X509V3_R_NO_ISSUER_DETAILS + {"NO_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_ISSUER_DETAILS}, + #else + {"NO_ISSUER_DETAILS", 34, 127}, + #endif + #ifdef X509V3_R_NO_POLICY_IDENTIFIER + {"NO_POLICY_IDENTIFIER", ERR_LIB_X509V3, X509V3_R_NO_POLICY_IDENTIFIER}, + #else + {"NO_POLICY_IDENTIFIER", 34, 139}, + #endif + #ifdef X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", ERR_LIB_X509V3, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED}, + #else + {"NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED", 34, 154}, + #endif + #ifdef X509V3_R_NO_PUBLIC_KEY + {"NO_PUBLIC_KEY", ERR_LIB_X509V3, X509V3_R_NO_PUBLIC_KEY}, + #else + {"NO_PUBLIC_KEY", 34, 114}, + #endif + #ifdef X509V3_R_NO_SUBJECT_DETAILS + {"NO_SUBJECT_DETAILS", ERR_LIB_X509V3, X509V3_R_NO_SUBJECT_DETAILS}, + #else + {"NO_SUBJECT_DETAILS", 34, 125}, + #endif + #ifdef X509V3_R_OPERATION_NOT_DEFINED + {"OPERATION_NOT_DEFINED", ERR_LIB_X509V3, X509V3_R_OPERATION_NOT_DEFINED}, + #else + {"OPERATION_NOT_DEFINED", 34, 148}, + #endif + #ifdef X509V3_R_OTHERNAME_ERROR + {"OTHERNAME_ERROR", ERR_LIB_X509V3, X509V3_R_OTHERNAME_ERROR}, + #else + {"OTHERNAME_ERROR", 34, 147}, + #endif + #ifdef X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED + {"POLICY_LANGUAGE_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED}, + #else + {"POLICY_LANGUAGE_ALREADY_DEFINED", 34, 155}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH + {"POLICY_PATH_LENGTH", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH}, + #else + {"POLICY_PATH_LENGTH", 34, 156}, + #endif + #ifdef X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", ERR_LIB_X509V3, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED}, + #else + {"POLICY_PATH_LENGTH_ALREADY_DEFINED", 34, 157}, + #endif + #ifdef X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", ERR_LIB_X509V3, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY}, + #else + {"POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY", 34, 159}, + #endif + #ifdef X509V3_R_SECTION_NOT_FOUND + {"SECTION_NOT_FOUND", ERR_LIB_X509V3, X509V3_R_SECTION_NOT_FOUND}, + #else + {"SECTION_NOT_FOUND", 34, 150}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS + {"UNABLE_TO_GET_ISSUER_DETAILS", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS}, + #else + {"UNABLE_TO_GET_ISSUER_DETAILS", 34, 122}, + #endif + #ifdef X509V3_R_UNABLE_TO_GET_ISSUER_KEYID + {"UNABLE_TO_GET_ISSUER_KEYID", ERR_LIB_X509V3, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID}, + #else + {"UNABLE_TO_GET_ISSUER_KEYID", 34, 123}, + #endif + #ifdef X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT + {"UNKNOWN_BIT_STRING_ARGUMENT", ERR_LIB_X509V3, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT}, + #else + {"UNKNOWN_BIT_STRING_ARGUMENT", 34, 111}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION + {"UNKNOWN_EXTENSION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION}, + #else + {"UNKNOWN_EXTENSION", 34, 129}, + #endif + #ifdef X509V3_R_UNKNOWN_EXTENSION_NAME + {"UNKNOWN_EXTENSION_NAME", ERR_LIB_X509V3, X509V3_R_UNKNOWN_EXTENSION_NAME}, + #else + {"UNKNOWN_EXTENSION_NAME", 34, 130}, + #endif + #ifdef X509V3_R_UNKNOWN_OPTION + {"UNKNOWN_OPTION", ERR_LIB_X509V3, X509V3_R_UNKNOWN_OPTION}, + #else + {"UNKNOWN_OPTION", 34, 120}, + #endif + #ifdef X509V3_R_UNSUPPORTED_OPTION + {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION}, + #else + {"UNSUPPORTED_OPTION", 34, 117}, + #endif + #ifdef X509V3_R_UNSUPPORTED_TYPE + {"UNSUPPORTED_TYPE", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_TYPE}, + #else + {"UNSUPPORTED_TYPE", 34, 167}, + #endif + #ifdef X509V3_R_USER_TOO_LONG + {"USER_TOO_LONG", ERR_LIB_X509V3, X509V3_R_USER_TOO_LONG}, + #else + {"USER_TOO_LONG", 34, 132}, + #endif + #ifdef X509_R_AKID_MISMATCH + {"AKID_MISMATCH", ERR_LIB_X509, X509_R_AKID_MISMATCH}, + #else + {"AKID_MISMATCH", 11, 110}, + #endif + #ifdef X509_R_BAD_SELECTOR + {"BAD_SELECTOR", ERR_LIB_X509, X509_R_BAD_SELECTOR}, + #else + {"BAD_SELECTOR", 11, 133}, + #endif + #ifdef X509_R_BAD_X509_FILETYPE + {"BAD_X509_FILETYPE", ERR_LIB_X509, X509_R_BAD_X509_FILETYPE}, + #else + {"BAD_X509_FILETYPE", 11, 100}, + #endif + #ifdef X509_R_BASE64_DECODE_ERROR + {"BASE64_DECODE_ERROR", ERR_LIB_X509, X509_R_BASE64_DECODE_ERROR}, + #else + {"BASE64_DECODE_ERROR", 11, 118}, + #endif + #ifdef X509_R_CANT_CHECK_DH_KEY + {"CANT_CHECK_DH_KEY", ERR_LIB_X509, X509_R_CANT_CHECK_DH_KEY}, + #else + {"CANT_CHECK_DH_KEY", 11, 114}, + #endif + #ifdef X509_R_CERTIFICATE_VERIFICATION_FAILED + {"CERTIFICATE_VERIFICATION_FAILED", ERR_LIB_X509, X509_R_CERTIFICATE_VERIFICATION_FAILED}, + #else + {"CERTIFICATE_VERIFICATION_FAILED", 11, 139}, + #endif + #ifdef X509_R_CERT_ALREADY_IN_HASH_TABLE + {"CERT_ALREADY_IN_HASH_TABLE", ERR_LIB_X509, X509_R_CERT_ALREADY_IN_HASH_TABLE}, + #else + {"CERT_ALREADY_IN_HASH_TABLE", 11, 101}, + #endif + #ifdef X509_R_CRL_ALREADY_DELTA + {"CRL_ALREADY_DELTA", ERR_LIB_X509, X509_R_CRL_ALREADY_DELTA}, + #else + {"CRL_ALREADY_DELTA", 11, 127}, + #endif + #ifdef X509_R_CRL_VERIFY_FAILURE + {"CRL_VERIFY_FAILURE", ERR_LIB_X509, X509_R_CRL_VERIFY_FAILURE}, + #else + {"CRL_VERIFY_FAILURE", 11, 131}, + #endif + #ifdef X509_R_ERROR_GETTING_MD_BY_NID + {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID}, + #else + {"ERROR_GETTING_MD_BY_NID", 11, 141}, + #endif + #ifdef X509_R_ERROR_USING_SIGINF_SET + {"ERROR_USING_SIGINF_SET", ERR_LIB_X509, X509_R_ERROR_USING_SIGINF_SET}, + #else + {"ERROR_USING_SIGINF_SET", 11, 142}, + #endif + #ifdef X509_R_IDP_MISMATCH + {"IDP_MISMATCH", ERR_LIB_X509, X509_R_IDP_MISMATCH}, + #else + {"IDP_MISMATCH", 11, 128}, + #endif + #ifdef X509_R_INVALID_ATTRIBUTES + {"INVALID_ATTRIBUTES", ERR_LIB_X509, X509_R_INVALID_ATTRIBUTES}, + #else + {"INVALID_ATTRIBUTES", 11, 138}, + #endif + #ifdef X509_R_INVALID_DIRECTORY + {"INVALID_DIRECTORY", ERR_LIB_X509, X509_R_INVALID_DIRECTORY}, + #else + {"INVALID_DIRECTORY", 11, 113}, + #endif + #ifdef X509_R_INVALID_DISTPOINT + {"INVALID_DISTPOINT", ERR_LIB_X509, X509_R_INVALID_DISTPOINT}, + #else + {"INVALID_DISTPOINT", 11, 143}, + #endif + #ifdef X509_R_INVALID_FIELD_NAME + {"INVALID_FIELD_NAME", ERR_LIB_X509, X509_R_INVALID_FIELD_NAME}, + #else + {"INVALID_FIELD_NAME", 11, 119}, + #endif + #ifdef X509_R_INVALID_TRUST + {"INVALID_TRUST", ERR_LIB_X509, X509_R_INVALID_TRUST}, + #else + {"INVALID_TRUST", 11, 123}, + #endif + #ifdef X509_R_ISSUER_MISMATCH + {"ISSUER_MISMATCH", ERR_LIB_X509, X509_R_ISSUER_MISMATCH}, + #else + {"ISSUER_MISMATCH", 11, 129}, + #endif + #ifdef X509_R_KEY_TYPE_MISMATCH + {"KEY_TYPE_MISMATCH", ERR_LIB_X509, X509_R_KEY_TYPE_MISMATCH}, + #else + {"KEY_TYPE_MISMATCH", 11, 115}, + #endif + #ifdef X509_R_KEY_VALUES_MISMATCH + {"KEY_VALUES_MISMATCH", ERR_LIB_X509, X509_R_KEY_VALUES_MISMATCH}, + #else + {"KEY_VALUES_MISMATCH", 11, 116}, + #endif + #ifdef X509_R_LOADING_CERT_DIR + {"LOADING_CERT_DIR", ERR_LIB_X509, X509_R_LOADING_CERT_DIR}, + #else + {"LOADING_CERT_DIR", 11, 103}, + #endif + #ifdef X509_R_LOADING_DEFAULTS + {"LOADING_DEFAULTS", ERR_LIB_X509, X509_R_LOADING_DEFAULTS}, + #else + {"LOADING_DEFAULTS", 11, 104}, + #endif + #ifdef X509_R_METHOD_NOT_SUPPORTED + {"METHOD_NOT_SUPPORTED", ERR_LIB_X509, X509_R_METHOD_NOT_SUPPORTED}, + #else + {"METHOD_NOT_SUPPORTED", 11, 124}, + #endif + #ifdef X509_R_NAME_TOO_LONG + {"NAME_TOO_LONG", ERR_LIB_X509, X509_R_NAME_TOO_LONG}, + #else + {"NAME_TOO_LONG", 11, 134}, + #endif + #ifdef X509_R_NEWER_CRL_NOT_NEWER + {"NEWER_CRL_NOT_NEWER", ERR_LIB_X509, X509_R_NEWER_CRL_NOT_NEWER}, + #else + {"NEWER_CRL_NOT_NEWER", 11, 132}, + #endif + #ifdef X509_R_NO_CERTIFICATE_FOUND + {"NO_CERTIFICATE_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_FOUND}, + #else + {"NO_CERTIFICATE_FOUND", 11, 135}, + #endif + #ifdef X509_R_NO_CERTIFICATE_OR_CRL_FOUND + {"NO_CERTIFICATE_OR_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CERTIFICATE_OR_CRL_FOUND}, + #else + {"NO_CERTIFICATE_OR_CRL_FOUND", 11, 136}, + #endif + #ifdef X509_R_NO_CERT_SET_FOR_US_TO_VERIFY + {"NO_CERT_SET_FOR_US_TO_VERIFY", ERR_LIB_X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY}, + #else + {"NO_CERT_SET_FOR_US_TO_VERIFY", 11, 105}, + #endif + #ifdef X509_R_NO_CRL_FOUND + {"NO_CRL_FOUND", ERR_LIB_X509, X509_R_NO_CRL_FOUND}, + #else + {"NO_CRL_FOUND", 11, 137}, + #endif + #ifdef X509_R_NO_CRL_NUMBER + {"NO_CRL_NUMBER", ERR_LIB_X509, X509_R_NO_CRL_NUMBER}, + #else + {"NO_CRL_NUMBER", 11, 130}, + #endif + #ifdef X509_R_PUBLIC_KEY_DECODE_ERROR + {"PUBLIC_KEY_DECODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_DECODE_ERROR}, + #else + {"PUBLIC_KEY_DECODE_ERROR", 11, 125}, + #endif + #ifdef X509_R_PUBLIC_KEY_ENCODE_ERROR + {"PUBLIC_KEY_ENCODE_ERROR", ERR_LIB_X509, X509_R_PUBLIC_KEY_ENCODE_ERROR}, + #else + {"PUBLIC_KEY_ENCODE_ERROR", 11, 126}, + #endif + #ifdef X509_R_SHOULD_RETRY + {"SHOULD_RETRY", ERR_LIB_X509, X509_R_SHOULD_RETRY}, + #else + {"SHOULD_RETRY", 11, 106}, + #endif + #ifdef X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", ERR_LIB_X509, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN}, + #else + {"UNABLE_TO_FIND_PARAMETERS_IN_CHAIN", 11, 107}, + #endif + #ifdef X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", ERR_LIB_X509, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY}, + #else + {"UNABLE_TO_GET_CERTS_PUBLIC_KEY", 11, 108}, + #endif + #ifdef X509_R_UNKNOWN_KEY_TYPE + {"UNKNOWN_KEY_TYPE", ERR_LIB_X509, X509_R_UNKNOWN_KEY_TYPE}, + #else + {"UNKNOWN_KEY_TYPE", 11, 117}, + #endif + #ifdef X509_R_UNKNOWN_NID + {"UNKNOWN_NID", ERR_LIB_X509, X509_R_UNKNOWN_NID}, + #else + {"UNKNOWN_NID", 11, 109}, + #endif + #ifdef X509_R_UNKNOWN_PURPOSE_ID + {"UNKNOWN_PURPOSE_ID", ERR_LIB_X509, X509_R_UNKNOWN_PURPOSE_ID}, + #else + {"UNKNOWN_PURPOSE_ID", 11, 121}, + #endif + #ifdef X509_R_UNKNOWN_SIGID_ALGS + {"UNKNOWN_SIGID_ALGS", ERR_LIB_X509, X509_R_UNKNOWN_SIGID_ALGS}, + #else + {"UNKNOWN_SIGID_ALGS", 11, 144}, + #endif + #ifdef X509_R_UNKNOWN_TRUST_ID + {"UNKNOWN_TRUST_ID", ERR_LIB_X509, X509_R_UNKNOWN_TRUST_ID}, + #else + {"UNKNOWN_TRUST_ID", 11, 120}, + #endif + #ifdef X509_R_UNSUPPORTED_ALGORITHM + {"UNSUPPORTED_ALGORITHM", ERR_LIB_X509, X509_R_UNSUPPORTED_ALGORITHM}, + #else + {"UNSUPPORTED_ALGORITHM", 11, 111}, + #endif + #ifdef X509_R_WRONG_LOOKUP_TYPE + {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE}, + #else + {"WRONG_LOOKUP_TYPE", 11, 112}, + #endif + #ifdef X509_R_WRONG_TYPE + {"WRONG_TYPE", ERR_LIB_X509, X509_R_WRONG_TYPE}, + #else + {"WRONG_TYPE", 11, 122}, + #endif + { NULL } +}; + diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py index c39e38c5069d5..ca8ecfb260edf 100755 --- a/Tools/ssl/make_ssl_data.py +++ b/Tools/ssl/make_ssl_data.py @@ -6,95 +6,129 @@ It takes two arguments: - the path to the OpenSSL source tree (e.g. git checkout) -- the path to the C file to be generated - (probably Modules/_ssl_data.h) +- the path to the header file to be generated Modules/_ssl_data_{version}.h +- error codes are version specific """ +import argparse import datetime -import glob +import operator import os import re import sys -import _ssl -def parse_error_codes(h_file, prefix, libcode): - pat = re.compile(r"#\s*define\W+(%s([\w]+))\W+(\d+)\b" % re.escape(prefix)) - codes = [] - with open(h_file, "r", encoding="latin1") as f: +parser = argparse.ArgumentParser( + description="Generate ssl_data.h from OpenSSL sources" +) +parser.add_argument("srcdir", help="OpenSSL source directory") +parser.add_argument( + "output", nargs="?", type=argparse.FileType("w"), default=sys.stdout +) + + +def _file_search(fname, pat): + with open(fname, encoding="utf-8") as f: for line in f: match = pat.search(line) - if match: - code, name, num = match.groups() - num = int(num) - # e.g. ("SSL_R_BAD_DATA", ("ERR_LIB_SSL", "BAD_DATA", 390)) - codes.append((code, (libcode, name, num))) - assert codes, f"no codes found in {h_file}" - return codes + if match is not None: + yield match -if __name__ == "__main__": - openssl_inc = sys.argv[1] - outfile = sys.argv[2] - use_stdout = outfile == '-' - f = sys.stdout if use_stdout else open(outfile, "w") - # mnemonic -> (library code, error prefix, header file) - error_libraries = {} - for error_header in glob.glob(os.path.join(glob.escape(openssl_inc), 'include/openssl/*err.h')): - base = os.path.basename(error_header) - if base in ('buffererr.h', 'objectserr.h', 'storeerr.h'): - # Deprecated in 3.0. + +def parse_err_h(args): + """Parse err codes, e.g. ERR_LIB_X509: 11""" + pat = re.compile(r"#\s*define\W+ERR_LIB_(\w+)\s+(\d+)") + lib2errnum = {} + for match in _file_search(args.err_h, pat): + libname, num = match.groups() + lib2errnum[libname] = int(num) + + return lib2errnum + + +def parse_openssl_error_text(args): + """Parse error reasons, X509_R_AKID_MISMATCH""" + # ignore backslash line continuation for now + pat = re.compile(r"^((\w+?)_R_(\w+)):(\d+):") + for match in _file_search(args.errtxt, pat): + reason, libname, errname, num = match.groups() + if "_F_" in reason: + # ignore function codes continue - mnemonic = base[:-5].upper() - if mnemonic == "": - # err.h - lib_codes = { - code: num - for (code, (_, _, num)) in parse_error_codes(error_header, 'ERR_LIB_', None) - } - else: - error_libraries[mnemonic] = (f'ERR_LIB_{mnemonic}', f'{mnemonic}_R_', error_header) - - # Read codes from libraries - new_codes = [] - for libcode, prefix, h_file in sorted(error_libraries.values()): - new_codes += parse_error_codes(h_file, prefix, libcode) - new_code_nums = set((libcode, num) - for (code, (libcode, name, num)) in new_codes) - - # Merge with existing codes (in case some old codes disappeared). - codes = {} - for errname, (libnum, errnum) in _ssl.err_names_to_codes.items(): - lib = error_libraries[_ssl.lib_codes_to_names[libnum]] - libcode = lib[0] # e.g. ERR_LIB_PEM - errcode = lib[1] + errname # e.g. SSL_R_BAD_SSL_SESSION_ID_LENGTH - # Only keep it if the numeric codes weren't reused - if (libcode, errnum) not in new_code_nums: - codes[errcode] = libcode, errname, errnum - codes.update(dict(new_codes)) - - def w(l): - f.write(l + "\n") - w("/* File generated by Tools/ssl/make_ssl_data.py */") - w("/* Generated on %s */" % datetime.datetime.now().isoformat()) - w("") - - w("static struct py_ssl_library_code library_codes[] = {") - for mnemo, (libcode, _, _) in sorted(error_libraries.items()): - w(f'#ifdef {libcode}') - w(' {"%s", %s},' % (mnemo, libcode)) - w('#endif') - w(' { NULL }') - w('};') - w("") - - w("static struct py_ssl_error_code error_codes[] = {") - for errcode, (libcode, name, num) in sorted(codes.items()): - w(' #ifdef %s' % (errcode)) - w(' {"%s", %s, %s},' % (name, libcode, errcode)) - w(' #else') - w(' {"%s", %s, %d},' % (name, lib_codes[libcode], num)) - w(' #endif') - w(' { NULL }') - w('};') - if not use_stdout: - f.close() + num = int(num) + yield reason, libname, errname, num + + +def parse_extra_reasons(args): + """Parse extra reasons from openssl.ec""" + pat = re.compile(r"^R\s+((\w+)_R_(\w+))\s+(\d+)") + for match in _file_search(args.errcodes, pat): + reason, libname, errname, num = match.groups() + num = int(num) + yield reason, libname, errname, num + + +def gen_library_codes(args): + """Generate table short libname to numeric code""" + yield "static struct py_ssl_library_code library_codes[] = {" + for libname in sorted(args.lib2errnum): + yield f"#ifdef ERR_LIB_{libname}" + yield f' {{"{libname}", ERR_LIB_{libname}}},' + yield "#endif" + yield " { NULL }" + yield "};" + yield "" + + +def gen_error_codes(args): + """Generate error code table for error reasons""" + yield "static struct py_ssl_error_code error_codes[] = {" + for reason, libname, errname, num in args.reasons: + yield f" #ifdef {reason}" + yield f' {{"{errname}", ERR_LIB_{libname}, {reason}}},' + yield " #else" + yield f' {{"{errname}", {args.lib2errnum[libname]}, {num}}},' + yield " #endif" + + yield " { NULL }" + yield "};" + yield "" + + +def main(): + args = parser.parse_args() + + args.err_h = os.path.join(args.srcdir, "include", "openssl", "err.h") + if not os.path.isfile(args.err_h): + # Fall back to infile for OpenSSL 3.0.0 + args.err_h += ".in" + args.errcodes = os.path.join(args.srcdir, "crypto", "err", "openssl.ec") + args.errtxt = os.path.join(args.srcdir, "crypto", "err", "openssl.txt") + + if not os.path.isfile(args.errtxt): + parser.error(f"File {args.errtxt} not found in srcdir\n.") + + # {X509: 11, ...} + args.lib2errnum = parse_err_h(args) + + # [('X509_R_AKID_MISMATCH', 'X509', 'AKID_MISMATCH', 110), ...] + reasons = [] + reasons.extend(parse_openssl_error_text(args)) + reasons.extend(parse_extra_reasons(args)) + # sort by libname, numeric error code + args.reasons = sorted(reasons, key=operator.itemgetter(0, 3)) + + lines = [ + "/* File generated by Tools/ssl/make_ssl_data.py */" + f"/* Generated on {datetime.datetime.utcnow().isoformat()} */" + ] + lines.extend(gen_library_codes(args)) + lines.append("") + lines.extend(gen_error_codes(args)) + + for line in lines: + args.output.write(line + "\n") + + +if __name__ == "__main__": + main() diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 0db1b35804d41..64afd6733f4e8 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -49,7 +49,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - # "3.0.0-alpha12" + # "3.0.0-alpha14" ] LIBRESSL_OLD_VERSIONS = [ diff --git a/setup.py b/setup.py index 6340669fffdff..3c76f14b25c54 100644 --- a/setup.py +++ b/setup.py @@ -2232,8 +2232,13 @@ def split_var(name, sep): include_dirs=openssl_includes, library_dirs=openssl_libdirs, libraries=openssl_libs, - depends=['socketmodule.h', '_ssl/debughelpers.c']) - ) + depends=[ + 'socketmodule.h', + '_ssl/debughelpers.c', + '_ssl_data.h', + '_ssl_data_111.h', + '_ssl_data_300.h', + ])) else: self.missing.append('_ssl') From webhook-mailer at python.org Fri Apr 9 13:46:41 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 17:46:41 -0000 Subject: [Python-checkins] [3.9] bpo-43779: Fix possible refleak involving _PyArena_AddPyObject (GH-25289). (GH-25294) Message-ID: https://github.com/python/cpython/commit/76d270ec2b776cc5331935cc58c2d63622f1c0e9 commit: 76d270ec2b776cc5331935cc58c2d63622f1c0e9 branch: 3.9 author: Erlend Egeberg Aasland committer: pablogsal date: 2021-04-09T18:46:32+01:00 summary: [3.9] bpo-43779: Fix possible refleak involving _PyArena_AddPyObject (GH-25289). (GH-25294) * [3.9] Fix possible refleak involving _PyArena_AddPyObject (GH-25289). (cherry picked from commit c0e11a3ceb9427e09db4224f394c7789bf6deec5) Co-authored-by: Erlend Egeberg Aasland * Update Parser/pegen/pegen.c Co-authored-by: Pablo Galindo files: M Parser/pegen/pegen.c diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c index 0a26275b23e0d..111009af63e22 100644 --- a/Parser/pegen/pegen.c +++ b/Parser/pegen/pegen.c @@ -639,7 +639,10 @@ _PyPegen_fill_token(Parser *p) if (t->bytes == NULL) { return -1; } - PyArena_AddPyObject(p->arena, t->bytes); + if (PyArena_AddPyObject(p->arena, t->bytes) < 0) { + Py_DECREF(t->bytes); + return -1; + } int lineno = type == STRING ? p->tok->first_lineno : p->tok->lineno; const char *line_start = type == STRING ? p->tok->multi_line_start : p->tok->line_start; From webhook-mailer at python.org Fri Apr 9 16:23:20 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 09 Apr 2021 20:23:20 -0000 Subject: [Python-checkins] bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) Message-ID: https://github.com/python/cpython/commit/2d7fdc90731e132f9d6b43852ee112f25831394b commit: 2d7fdc90731e132f9d6b43852ee112f25831394b branch: master author: Christian Heimes committer: tiran date: 2021-04-09T22:23:10+02:00 summary: bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) ripemd160 is not available in OpenSSL 3.0.0's default crypto provider. It's only present in legacy provider. Signed-off-by: Christian Heimes files: M Doc/library/hashlib.rst diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 7bb030bd08f9d..6f92152a77827 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -118,10 +118,10 @@ More condensed: Using :func:`new` with an algorithm provided by OpenSSL: - >>> h = hashlib.new('ripemd160') + >>> h = hashlib.new('sha512_256') >>> h.update(b"Nobody inspects the spammish repetition") >>> h.hexdigest() - 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' + '19197dc4d03829df858011c6c87600f994a858103bbc19005f20987aa19a97e2' Hashlib provides the following constant attributes: From webhook-mailer at python.org Fri Apr 9 16:33:37 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 20:33:37 -0000 Subject: [Python-checkins] bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) Message-ID: https://github.com/python/cpython/commit/ffb05bbb30fa82dbe887981bdabd65af7daffcd1 commit: ffb05bbb30fa82dbe887981bdabd65af7daffcd1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T13:33:29-07:00 summary: bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) ripemd160 is not available in OpenSSL 3.0.0's default crypto provider. It's only present in legacy provider. Signed-off-by: Christian Heimes (cherry picked from commit 2d7fdc90731e132f9d6b43852ee112f25831394b) Co-authored-by: Christian Heimes files: M Doc/library/hashlib.rst diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index a16c7cd4d7cd6..f5da6ecac2dcf 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -109,10 +109,10 @@ More condensed: Using :func:`new` with an algorithm provided by OpenSSL: - >>> h = hashlib.new('ripemd160') + >>> h = hashlib.new('sha512_256') >>> h.update(b"Nobody inspects the spammish repetition") >>> h.hexdigest() - 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' + '19197dc4d03829df858011c6c87600f994a858103bbc19005f20987aa19a97e2' Hashlib provides the following constant attributes: From webhook-mailer at python.org Fri Apr 9 16:46:25 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 09 Apr 2021 20:46:25 -0000 Subject: [Python-checkins] bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) Message-ID: https://github.com/python/cpython/commit/7c8796a750fb108be99e0bc50ca3dba000d77e54 commit: 7c8796a750fb108be99e0bc50ca3dba000d77e54 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-09T13:46:17-07:00 summary: bpo-38820: OpenSSL 3.0.0: Use supported hashing algos in doc test (GH-25319) ripemd160 is not available in OpenSSL 3.0.0's default crypto provider. It's only present in legacy provider. Signed-off-by: Christian Heimes (cherry picked from commit 2d7fdc90731e132f9d6b43852ee112f25831394b) Co-authored-by: Christian Heimes files: M Doc/library/hashlib.rst diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index d644974e66098..5a507c12d7f12 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -118,10 +118,10 @@ More condensed: Using :func:`new` with an algorithm provided by OpenSSL: - >>> h = hashlib.new('ripemd160') + >>> h = hashlib.new('sha512_256') >>> h.update(b"Nobody inspects the spammish repetition") >>> h.hexdigest() - 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' + '19197dc4d03829df858011c6c87600f994a858103bbc19005f20987aa19a97e2' Hashlib provides the following constant attributes: From webhook-mailer at python.org Fri Apr 9 16:52:56 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 09 Apr 2021 20:52:56 -0000 Subject: [Python-checkins] bpo-40107: Switch to using io.open() for pathlib.Path.open() (GH-25240) Message-ID: https://github.com/python/cpython/commit/11c3bd3f6d06649484b81a659c7bf02d6632e607 commit: 11c3bd3f6d06649484b81a659c7bf02d6632e607 branch: master author: Barney Gale committer: zooba date: 2021-04-09T21:52:49+01:00 summary: bpo-40107: Switch to using io.open() for pathlib.Path.open() (GH-25240) Previously we had identical behaviour but only allowed accessors to override os.open(). This change allows the override to also construct the IO wrapper as well. files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 19d45a3d2ba78..1518d49f2212b 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -350,7 +350,7 @@ class _NormalAccessor(_Accessor): stat = os.stat - open = os.open + open = io.open listdir = os.listdir @@ -1046,10 +1046,6 @@ def __exit__(self, t, v, tb): # removed in the future. pass - def _opener(self, name, flags, mode=0o666): - # A stub for the opener argument to built-in open() - return self._accessor.open(self, flags, mode) - # Public API @classmethod @@ -1171,8 +1167,8 @@ def open(self, mode='r', buffering=-1, encoding=None, """ if "b" not in mode: encoding = io.text_encoding(encoding) - return io.open(self, mode, buffering, encoding, errors, newline, - opener=self._opener) + return self._accessor.open(self, mode, buffering, encoding, errors, + newline) def read_bytes(self): """ From webhook-mailer at python.org Fri Apr 9 17:28:25 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 09 Apr 2021 21:28:25 -0000 Subject: [Python-checkins] bpo-39899: Don't double-check directory name if we're requesting the current user's home directory in ntpath.expanduser() (GH-25277) Message-ID: https://github.com/python/cpython/commit/ba1db571987c65672d9c06789e9852313ed2412a commit: ba1db571987c65672d9c06789e9852313ed2412a branch: master author: Barney Gale committer: zooba date: 2021-04-09T22:28:15+01:00 summary: bpo-39899: Don't double-check directory name if we're requesting the current user's home directory in ntpath.expanduser() (GH-25277) files: M Lib/ntpath.py diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 421db50a3b7f5..5ae8079074cd9 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -313,18 +313,19 @@ def expanduser(path): userhome = join(drive, os.environ['HOMEPATH']) if i != 1: #~user - # Try to guess user home directory. By default all users directories - # are located in the same place and are named by corresponding - # usernames. If current user home directory points to nonstandard - # place, this guess is likely wrong, and so we bail out. - current_user = os.environ.get('USERNAME') - if current_user != basename(userhome): - return path - target_user = path[1:i] if isinstance(target_user, bytes): target_user = os.fsdecode(target_user) + current_user = os.environ.get('USERNAME') + if target_user != current_user: + # Try to guess user home directory. By default all user + # profile directories are located in the same place and are + # named by corresponding usernames. If userhome isn't a + # normal profile directory, this guess is likely wrong, + # so we bail out. + if current_user != basename(userhome): + return path userhome = join(dirname(userhome), target_user) if isinstance(path, bytes): From webhook-mailer at python.org Fri Apr 9 18:06:31 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 09 Apr 2021 22:06:31 -0000 Subject: [Python-checkins] bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) Message-ID: https://github.com/python/cpython/commit/eed7686e9fe22a3eb5e1a1fc7d27c27fca070bd1 commit: eed7686e9fe22a3eb5e1a1fc7d27c27fca070bd1 branch: 3.8 author: Steve Dower committer: zooba date: 2021-04-09T23:06:17+01:00 summary: bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations (GH-25121) files: A Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_import/__init__.py M Lib/test/test_importlib/test_spec.py M Lib/test/test_importlib/test_windows.py M Lib/test/test_site.py M Modules/clinic/posixmodule.c.h M Modules/posixmodule.c M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index b8ac4829949a7..a00f35cdce9d0 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -19,6 +19,34 @@ # reference any injected objects! This includes not only global code but also # anything specified at the class level. +# Import builtin modules +import _imp +import _io +import sys +import _warnings +import marshal + + +_MS_WINDOWS = (sys.platform == 'win32') +if _MS_WINDOWS: + import nt as _os + import winreg +else: + import posix as _os + + +if _MS_WINDOWS: + path_separators = ['\\', '/'] +else: + path_separators = ['/'] +# Assumption made in _path_join() +assert all(len(sep) == 1 for sep in path_separators) +path_sep = path_separators[0] +path_sep_tuple = tuple(path_separators) +path_separators = ''.join(path_separators) +_pathseps_with_colon = {f':{s}' for s in path_separators} + + # Bootstrap-related code ###################################################### _CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', _CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' @@ -59,22 +87,49 @@ def _unpack_uint16(data): return int.from_bytes(data, 'little') -def _path_join(*path_parts): - """Replacement for os.path.join().""" - return path_sep.join([part.rstrip(path_separators) - for part in path_parts if part]) +if _MS_WINDOWS: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + if not path_parts: + return "" + if len(path_parts) == 1: + return path_parts[0] + root = "" + path = [] + for new_root, tail in map(_os._path_splitroot, path_parts): + if new_root.startswith(path_sep_tuple) or new_root.endswith(path_sep_tuple): + root = new_root.rstrip(path_separators) or root + path = [path_sep + tail] + elif new_root.endswith(':'): + if root.casefold() != new_root.casefold(): + # Drive relative paths have to be resolved by the OS, so we reset the + # tail but do not add a path_sep prefix. + root = new_root + path = [tail] + else: + path.append(tail) + else: + root = new_root or root + path.append(tail) + path = [p.rstrip(path_separators) for p in path if p] + if len(path) == 1 and not path[0]: + # Avoid losing the root's trailing separator when joining with nothing + return root + path_sep + return root + path_sep.join(path) + +else: + def _path_join(*path_parts): + """Replacement for os.path.join().""" + return path_sep.join([part.rstrip(path_separators) + for part in path_parts if part]) def _path_split(path): """Replacement for os.path.split().""" - if len(path_separators) == 1: - front, _, tail = path.rpartition(path_sep) - return front, tail - for x in reversed(path): - if x in path_separators: - front, tail = path.rsplit(x, maxsplit=1) - return front, tail - return '', path + i = max(path.rfind(p) for p in path_separators) + if i < 0: + return '', path + return path[:i], path[i + 1:] def _path_stat(path): @@ -108,13 +163,18 @@ def _path_isdir(path): return _path_is_mode_type(path, 0o040000) -def _path_isabs(path): - """Replacement for os.path.isabs. +if _MS_WINDOWS: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + if not path: + return False + root = _os._path_splitroot(path)[0].replace('/', '\\') + return len(root) > 1 and (root.startswith('\\\\') or root.endswith('\\')) - Considers a Windows drive-relative path (no drive, but starts with slash) to - still be "absolute". - """ - return path.startswith(path_separators) or path[1:3] in _pathseps_with_colon +else: + def _path_isabs(path): + """Replacement for os.path.isabs.""" + return path.startswith(path_separators) def _write_atomic(path, data, mode=0o666): @@ -651,6 +711,11 @@ def spec_from_file_location(name, location=None, *, loader=None, pass else: location = _os.fspath(location) + if not _path_isabs(location): + try: + location = _path_join(_os.getcwd(), location) + except OSError: + pass # If the location is on the filesystem, but doesn't actually exist, # we could return None here, indicating that the location is not @@ -1401,6 +1466,8 @@ def __init__(self, path, *loader_details): self._loaders = loaders # Base (directory) path self.path = path or '.' + if not _path_isabs(self.path): + self.path = _path_join(_os.getcwd(), self.path) self._path_mtime = -1 self._path_cache = set() self._relaxed_path_cache = set() @@ -1463,7 +1530,10 @@ def find_spec(self, fullname, target=None): is_namespace = _path_isdir(base_path) # Check for a file w/ a proper suffix exists. for suffix, loader_class in self._loaders: - full_path = _path_join(self.path, tail_module + suffix) + try: + full_path = _path_join(self.path, tail_module + suffix) + except ValueError: + return None _bootstrap._verbose_message('trying {}', full_path, verbosity=2) if cache_module + suffix in cache: if _path_isfile(full_path): diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 52f0491679f35..a3e22a077bed1 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -897,7 +897,7 @@ def test_missing_source_legacy(self): m = __import__(TESTFN) try: self.assertEqual(m.__file__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) finally: os.remove(pyc_file) @@ -905,7 +905,7 @@ def test___cached__(self): # Modules now also have an __cached__ that points to the pyc file. m = __import__(TESTFN) pyc_file = importlib.util.cache_from_source(TESTFN + '.py') - self.assertEqual(m.__cached__, os.path.join(os.curdir, pyc_file)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, pyc_file)) @skip_if_dont_write_bytecode def test___cached___legacy_pyc(self): @@ -921,7 +921,7 @@ def test___cached___legacy_pyc(self): importlib.invalidate_caches() m = __import__(TESTFN) self.assertEqual(m.__cached__, - os.path.join(os.curdir, os.path.relpath(pyc_file))) + os.path.join(os.getcwd(), os.curdir, os.path.relpath(pyc_file))) @skip_if_dont_write_bytecode def test_package___cached__(self): @@ -941,10 +941,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_package___cached___from_pyc(self): # Like test___cached__ but ensuring __cached__ when imported from a @@ -968,10 +968,10 @@ def cleanup(): m = __import__('pep3147.foo') init_pyc = importlib.util.cache_from_source( os.path.join('pep3147', '__init__.py')) - self.assertEqual(m.__cached__, os.path.join(os.curdir, init_pyc)) + self.assertEqual(m.__cached__, os.path.join(os.getcwd(), os.curdir, init_pyc)) foo_pyc = importlib.util.cache_from_source(os.path.join('pep3147', 'foo.py')) self.assertEqual(sys.modules['pep3147.foo'].__cached__, - os.path.join(os.curdir, foo_pyc)) + os.path.join(os.getcwd(), os.curdir, foo_pyc)) def test_recompute_pyc_same_second(self): # Even when the source file doesn't change timestamp, a change in diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index 5a16a03de60fa..14aec09d97c90 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -498,7 +498,7 @@ class FactoryTests: def setUp(self): self.name = 'spam' - self.path = 'spam.py' + self.path = os.path.abspath('spam.py') self.cached = self.util.cache_from_source(self.path) self.loader = TestLoader() self.fileloader = TestLoader(self.path) @@ -637,7 +637,7 @@ def test_spec_from_loader_is_package_true_with_fileloader(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -736,7 +736,7 @@ def test_spec_from_file_location_smsl_empty(self): self.assertEqual(spec.loader, self.fileloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -761,7 +761,7 @@ def test_spec_from_file_location_smsl_default(self): self.assertEqual(spec.loader, self.pkgloader) self.assertEqual(spec.origin, self.path) self.assertIs(spec.loader_state, None) - self.assertEqual(spec.submodule_search_locations, ['']) + self.assertEqual(spec.submodule_search_locations, [os.getcwd()]) self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) @@ -809,6 +809,17 @@ def is_package(self, name): self.assertEqual(spec.cached, self.cached) self.assertTrue(spec.has_location) + def test_spec_from_file_location_relative_path(self): + spec = self.util.spec_from_file_location(self.name, + os.path.basename(self.path), loader=self.fileloader) + + self.assertEqual(spec.name, self.name) + self.assertEqual(spec.loader, self.fileloader) + self.assertEqual(spec.origin, self.path) + self.assertIs(spec.loader_state, None) + self.assertIs(spec.submodule_search_locations, None) + self.assertEqual(spec.cached, self.cached) + self.assertTrue(spec.has_location) (Frozen_FactoryTests, Source_FactoryTests diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index 005b685cc03cd..9a53e8dbee56f 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -107,3 +107,48 @@ def test_tagged_suffix(self): (Frozen_WindowsExtensionSuffixTests, Source_WindowsExtensionSuffixTests ) = test_util.test_both(WindowsExtensionSuffixTests, machinery=machinery) + + + at unittest.skipUnless(sys.platform.startswith('win'), 'requires Windows') +class WindowsBootstrapPathTests(unittest.TestCase): + def check_join(self, expected, *inputs): + from importlib._bootstrap_external import _path_join + actual = _path_join(*inputs) + if expected.casefold() == actual.casefold(): + return + self.assertEqual(expected, actual) + + def test_path_join(self): + self.check_join(r"C:\A\B", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "D:\\", "D", "C:\\", "A", "B") + self.check_join(r"C:\A\B", "C:\\", "A", "C:B") + self.check_join(r"C:\A\B", "C:\\", "A\\B") + self.check_join(r"C:\A\B", r"C:\A\B") + + self.check_join("D:A", r"D:", "A") + self.check_join("D:A", r"C:\B\C", "D:", "A") + self.check_join("D:A", r"C:\B\C", r"D:A") + + self.check_join(r"A\B\C", "A", "B", "C") + self.check_join(r"A\B\C", "A", r"B\C") + self.check_join(r"A\B/C", "A", "B/C") + self.check_join(r"A\B\C", "A/", "B\\", "C") + + # Dots are not normalised by this function + self.check_join(r"A\../C", "A", "../C") + self.check_join(r"A.\.\B", "A.", ".", "B") + + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server\Share", "D", r"\A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server2\Share2", "D", + r"\\Server\Share", "A", "B", "C") + self.check_join(r"\\Server\Share\A\B\C", r"\\Server", r"\Share", "A", "B", "C") + self.check_join(r"\\Server\Share", r"\\Server\Share") + self.check_join(r"\\Server\Share\\", r"\\Server\Share\\") + + # Handle edge cases with empty segments + self.check_join("C:\\A", "C:/A", "") + self.check_join("C:\\", "C:/", "") + self.check_join("C:", "C:", "") + self.check_join("//Server/Share\\", "//Server/Share/", "") + self.check_join("//Server/Share\\", "//Server/Share", "") diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 6b3dba0f0a290..9b2df6bfc39ee 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -163,6 +163,7 @@ def test_addpackage_import_bad_pth_file(self): pth_dir, pth_fn = self.make_pth("abc\x00def\n") with captured_stderr() as err_out: self.assertFalse(site.addpackage(pth_dir, pth_fn, set())) + self.maxDiff = None self.assertEqual(err_out.getvalue(), "") for path in sys.path: if isinstance(path, str): @@ -379,55 +380,6 @@ def tearDown(self): """Restore sys.path""" sys.path[:] = self.sys_path - def test_abs_paths(self): - # Make sure all imported modules have their __file__ and __cached__ - # attributes as absolute paths. Arranging to put the Lib directory on - # PYTHONPATH would cause the os module to have a relative path for - # __file__ if abs_paths() does not get run. sys and builtins (the - # only other modules imported before site.py runs) do not have - # __file__ or __cached__ because they are built-in. - try: - parent = os.path.relpath(os.path.dirname(os.__file__)) - cwd = os.getcwd() - except ValueError: - # Failure to get relpath probably means we need to chdir - # to the same drive. - cwd, parent = os.path.split(os.path.dirname(os.__file__)) - with change_cwd(cwd): - env = os.environ.copy() - env['PYTHONPATH'] = parent - code = ('import os, sys', - # use ASCII to avoid locale issues with non-ASCII directories - 'os_file = os.__file__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_file + b"\n")', - 'os_cached = os.__cached__.encode("ascii", "backslashreplace")', - r'sys.stdout.buffer.write(os_cached + b"\n")') - command = '\n'.join(code) - # First, prove that with -S (no 'import site'), the paths are - # relative. - proc = subprocess.Popen([sys.executable, '-S', '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertFalse(os.path.isabs(os__file__)) - self.assertFalse(os.path.isabs(os__cached__)) - # Now, with 'import site', it works. - proc = subprocess.Popen([sys.executable, '-c', command], - env=env, - stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - self.assertEqual(proc.returncode, 0) - os__file__, os__cached__ = stdout.splitlines()[:2] - self.assertTrue(os.path.isabs(os__file__), - "expected absolute path, got {}" - .format(os__file__.decode('ascii'))) - self.assertTrue(os.path.isabs(os__cached__), - "expected absolute path, got {}" - .format(os__cached__.decode('ascii'))) - def test_abs_paths_cached_None(self): """Test for __cached__ is None. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst new file mode 100644 index 0000000000000..dd4c18661ec0b --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst @@ -0,0 +1,2 @@ +Importlib now resolves relative paths when creating module spec objects from +file locations. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 09ecdb358e27d..042eb4bd3f241 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -1311,6 +1311,47 @@ os__getvolumepathname(PyObject *module, PyObject *const *args, Py_ssize_t nargs, #endif /* defined(MS_WINDOWS) */ +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(os__path_splitroot__doc__, +"_path_splitroot($module, /, path)\n" +"--\n" +"\n" +"Removes everything after the root on Win32."); + +#define OS__PATH_SPLITROOT_METHODDEF \ + {"_path_splitroot", (PyCFunction)(void(*)(void))os__path_splitroot, METH_FASTCALL|METH_KEYWORDS, os__path_splitroot__doc__}, + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path); + +static PyObject * +os__path_splitroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "_path_splitroot", 0}; + PyObject *argsbuf[1]; + path_t path = PATH_T_INITIALIZE("_path_splitroot", "path", 0, 0); + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!path_converter(args[0], &path)) { + goto exit; + } + return_value = os__path_splitroot_impl(module, &path); + +exit: + /* Cleanup for path */ + path_cleanup(&path); + + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + PyDoc_STRVAR(os_mkdir__doc__, "mkdir($module, /, path, mode=511, *, dir_fd=None)\n" "--\n" @@ -8264,6 +8305,10 @@ os__remove_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nar #define OS__GETVOLUMEPATHNAME_METHODDEF #endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */ +#ifndef OS__PATH_SPLITROOT_METHODDEF + #define OS__PATH_SPLITROOT_METHODDEF +#endif /* !defined(OS__PATH_SPLITROOT_METHODDEF) */ + #ifndef OS_NICE_METHODDEF #define OS_NICE_METHODDEF #endif /* !defined(OS_NICE_METHODDEF) */ @@ -8723,4 +8768,4 @@ os__remove_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nar #ifndef OS__REMOVE_DLL_DIRECTORY_METHODDEF #define OS__REMOVE_DLL_DIRECTORY_METHODDEF #endif /* !defined(OS__REMOVE_DLL_DIRECTORY_METHODDEF) */ -/*[clinic end generated code: output=edb5a840b51fcaa8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=579785e080461faa input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3b33186c59521..0ef75fa4486ff 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -33,6 +33,7 @@ FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */ # include +# include #endif #include "pycore_ceval.h" /* _PyEval_ReInitThreads() */ @@ -4046,6 +4047,60 @@ os__getvolumepathname_impl(PyObject *module, path_t *path) return result; } + +/*[clinic input] +os._path_splitroot + + path: path_t + +Removes everything after the root on Win32. +[clinic start generated code]*/ + +static PyObject * +os__path_splitroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=ab7f1a88b654581c input=dc93b1d3984cffb6]*/ +{ + wchar_t *buffer; + wchar_t *end; + PyObject *result = NULL; + + buffer = (wchar_t*)PyMem_Malloc(sizeof(wchar_t) * (wcslen(path->wide) + 1)); + if (!buffer) { + return NULL; + } + wcscpy(buffer, path->wide); + for (wchar_t *p = wcschr(buffer, L'/'); p; p = wcschr(p, L'/')) { + *p = L'\\'; + } + + Py_BEGIN_ALLOW_THREADS + if (buffer[0] && buffer[1] == L':') { + if (buffer[2] == L'\\') { + end = &buffer[3]; + } else { + end = &buffer[2]; + } + } else { + end = PathSkipRootW(buffer); + } + Py_END_ALLOW_THREADS + if (!end || end == buffer) { + result = Py_BuildValue("sO", "", path->object); + } else if (!*end) { + result = Py_BuildValue("Os", path->object, ""); + } else { + size_t rootLen = (size_t)(end - buffer); + result = Py_BuildValue("NN", + PyUnicode_FromWideChar(path->wide, rootLen), + PyUnicode_FromWideChar(path->wide + rootLen, -1) + ); + } + PyMem_Free(buffer); + + return result; +} + + #endif /* MS_WINDOWS */ @@ -13887,6 +13942,7 @@ static PyMethodDef posix_methods[] = { OS__GETDISKUSAGE_METHODDEF OS__GETFINALPATHNAME_METHODDEF OS__GETVOLUMEPATHNAME_METHODDEF + OS__PATH_SPLITROOT_METHODDEF OS_GETLOADAVG_METHODDEF OS_URANDOM_METHODDEF OS_SETRESUID_METHODDEF diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 74d98bdebab5e..3327c3328236a 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,41 +1,53 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,64,0,0,0,115,32,2,0,0,100,0, - 90,0,100,1,90,1,100,2,90,2,101,2,101,1,23,0, - 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, - 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, - 90,7,100,11,100,12,132,0,90,8,100,13,100,14,132,0, - 90,9,100,15,100,16,132,0,90,10,100,17,100,18,132,0, - 90,11,100,19,100,20,132,0,90,12,100,21,100,22,132,0, - 90,13,100,23,100,24,132,0,90,14,100,101,100,26,100,27, - 132,1,90,15,101,16,101,15,106,17,131,1,90,18,100,28, - 160,19,100,29,100,30,161,2,100,31,23,0,90,20,101,21, - 160,22,101,20,100,30,161,2,90,23,100,32,90,24,100,33, - 90,25,100,34,103,1,90,26,100,35,103,1,90,27,101,27, - 4,0,90,28,90,29,100,102,100,36,100,37,156,1,100,38, - 100,39,132,3,90,30,100,40,100,41,132,0,90,31,100,42, - 100,43,132,0,90,32,100,44,100,45,132,0,90,33,100,46, - 100,47,132,0,90,34,100,48,100,49,132,0,90,35,100,50, - 100,51,132,0,90,36,100,52,100,53,132,0,90,37,100,54, - 100,55,132,0,90,38,100,56,100,57,132,0,90,39,100,103, - 100,58,100,59,132,1,90,40,100,104,100,61,100,62,132,1, - 90,41,100,105,100,64,100,65,132,1,90,42,100,66,100,67, - 132,0,90,43,101,44,131,0,90,45,100,106,100,36,101,45, - 100,68,156,2,100,69,100,70,132,3,90,46,71,0,100,71, - 100,72,132,0,100,72,131,2,90,47,71,0,100,73,100,74, - 132,0,100,74,131,2,90,48,71,0,100,75,100,76,132,0, - 100,76,101,48,131,3,90,49,71,0,100,77,100,78,132,0, - 100,78,131,2,90,50,71,0,100,79,100,80,132,0,100,80, - 101,50,101,49,131,4,90,51,71,0,100,81,100,82,132,0, - 100,82,101,50,101,48,131,4,90,52,103,0,90,53,71,0, - 100,83,100,84,132,0,100,84,101,50,101,48,131,4,90,54, - 71,0,100,85,100,86,132,0,100,86,131,2,90,55,71,0, - 100,87,100,88,132,0,100,88,131,2,90,56,71,0,100,89, - 100,90,132,0,100,90,131,2,90,57,71,0,100,91,100,92, - 132,0,100,92,131,2,90,58,100,107,100,93,100,94,132,1, - 90,59,100,95,100,96,132,0,90,60,100,97,100,98,132,0, - 90,61,100,99,100,100,132,0,90,62,100,36,83,0,41,108, + 0,5,0,0,0,64,0,0,0,115,224,2,0,0,100,0, + 90,0,100,1,100,2,108,1,97,1,100,1,100,2,108,2, + 90,2,100,1,100,2,108,3,97,3,100,1,100,2,108,4, + 90,4,100,1,100,2,108,5,90,5,116,3,106,6,100,3, + 107,2,90,7,101,7,114,76,100,1,100,2,108,8,90,9, + 100,1,100,2,108,10,90,10,110,8,100,1,100,2,108,11, + 90,9,101,7,114,98,100,4,100,5,103,2,90,12,110,6, + 100,5,103,1,90,12,101,13,100,6,100,7,132,0,101,12, + 68,0,131,1,131,1,115,126,116,14,130,1,101,12,100,1, + 25,0,90,15,101,16,101,12,131,1,90,17,100,8,160,18, + 101,12,161,1,90,12,100,9,100,10,132,0,101,12,68,0, + 131,1,90,19,100,11,90,20,100,12,90,21,101,21,101,20, + 23,0,90,22,100,13,100,14,132,0,90,23,100,15,100,16, + 132,0,90,24,100,17,100,18,132,0,90,25,100,19,100,20, + 132,0,90,26,101,7,114,228,100,21,100,22,132,0,90,27, + 110,8,100,23,100,22,132,0,90,27,100,24,100,25,132,0, + 90,28,100,26,100,27,132,0,90,29,100,28,100,29,132,0, + 90,30,100,30,100,31,132,0,90,31,100,32,100,33,132,0, + 90,32,101,7,144,1,114,36,100,34,100,35,132,0,90,33, + 110,8,100,36,100,35,132,0,90,33,100,111,100,38,100,39, + 132,1,90,34,101,35,101,34,106,36,131,1,90,37,100,40, + 160,38,100,41,100,42,161,2,100,43,23,0,90,39,101,40, + 160,41,101,39,100,42,161,2,90,42,100,44,90,43,100,45, + 90,44,100,46,103,1,90,45,100,47,103,1,90,46,101,46, + 4,0,90,47,90,48,100,112,100,2,100,48,156,1,100,49, + 100,50,132,3,90,49,100,51,100,52,132,0,90,50,100,53, + 100,54,132,0,90,51,100,55,100,56,132,0,90,52,100,57, + 100,58,132,0,90,53,100,59,100,60,132,0,90,54,100,61, + 100,62,132,0,90,55,100,63,100,64,132,0,90,56,100,65, + 100,66,132,0,90,57,100,67,100,68,132,0,90,58,100,113, + 100,69,100,70,132,1,90,59,100,114,100,71,100,72,132,1, + 90,60,100,115,100,74,100,75,132,1,90,61,100,76,100,77, + 132,0,90,62,101,63,131,0,90,64,100,116,100,2,101,64, + 100,78,156,2,100,79,100,80,132,3,90,65,71,0,100,81, + 100,82,132,0,100,82,131,2,90,66,71,0,100,83,100,84, + 132,0,100,84,131,2,90,67,71,0,100,85,100,86,132,0, + 100,86,101,67,131,3,90,68,71,0,100,87,100,88,132,0, + 100,88,131,2,90,69,71,0,100,89,100,90,132,0,100,90, + 101,69,101,68,131,4,90,70,71,0,100,91,100,92,132,0, + 100,92,101,69,101,67,131,4,90,71,103,0,90,72,71,0, + 100,93,100,94,132,0,100,94,101,69,101,67,131,4,90,73, + 71,0,100,95,100,96,132,0,100,96,131,2,90,74,71,0, + 100,97,100,98,132,0,100,98,131,2,90,75,71,0,100,99, + 100,100,132,0,100,100,131,2,90,76,71,0,100,101,100,102, + 132,0,100,102,131,2,90,77,100,117,100,103,100,104,132,1, + 90,78,100,105,100,106,132,0,90,79,100,107,100,108,132,0, + 90,80,100,109,100,110,132,0,90,81,100,2,83,0,41,118, 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, @@ -58,607 +70,734 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108, 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, - 46,10,10,41,1,218,3,119,105,110,41,2,90,6,99,121, - 103,119,105,110,90,6,100,97,114,119,105,110,99,0,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,3,0,0,0,115,60,0,0,0,116,0,106,1,160,2, - 116,3,161,1,114,48,116,0,106,1,160,2,116,4,161,1, - 114,30,100,1,137,0,110,4,100,2,137,0,135,0,102,1, - 100,3,100,4,132,8,125,0,110,8,100,5,100,4,132,0, - 125,0,124,0,83,0,41,6,78,90,12,80,89,84,72,79, - 78,67,65,83,69,79,75,115,12,0,0,0,80,89,84,72, - 79,78,67,65,83,69,79,75,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, - 0,115,10,0,0,0,136,0,116,0,106,1,107,6,83,0, - 41,1,250,53,84,114,117,101,32,105,102,32,102,105,108,101, - 110,97,109,101,115,32,109,117,115,116,32,98,101,32,99,104, - 101,99,107,101,100,32,99,97,115,101,45,105,110,115,101,110, - 115,105,116,105,118,101,108,121,46,41,2,218,3,95,111,115, - 90,7,101,110,118,105,114,111,110,169,0,169,1,218,3,107, - 101,121,114,3,0,0,0,250,38,60,102,114,111,122,101,110, - 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, - 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218, - 11,95,114,101,108,97,120,95,99,97,115,101,36,0,0,0, - 115,2,0,0,0,0,2,122,37,95,109,97,107,101,95,114, - 101,108,97,120,95,99,97,115,101,46,60,108,111,99,97,108, - 115,62,46,95,114,101,108,97,120,95,99,97,115,101,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,83,0,0,0,115,4,0,0,0,100,1,83,0, - 41,2,114,1,0,0,0,70,114,3,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,7,0,0,0,40,0,0,0,115,2,0,0,0,0, - 2,41,5,218,3,115,121,115,218,8,112,108,97,116,102,111, - 114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27, - 95,67,65,83,69,95,73,78,83,69,78,83,73,84,73,86, - 69,95,80,76,65,84,70,79,82,77,83,218,35,95,67,65, - 83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80, - 76,65,84,70,79,82,77,83,95,83,84,82,95,75,69,89, - 41,1,114,7,0,0,0,114,3,0,0,0,114,4,0,0, - 0,114,6,0,0,0,218,16,95,109,97,107,101,95,114,101, - 108,97,120,95,99,97,115,101,29,0,0,0,115,14,0,0, - 0,0,1,12,1,12,1,6,2,4,2,14,4,8,3,114, - 13,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,67,0,0,0,115,20,0, - 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2, - 100,3,161,2,83,0,41,4,122,42,67,111,110,118,101,114, - 116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103, - 101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100, - 105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233, - 4,0,0,0,218,6,108,105,116,116,108,101,41,2,218,3, - 105,110,116,218,8,116,111,95,98,121,116,101,115,41,1,218, - 1,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,46, - 0,0,0,115,2,0,0,0,0,2,114,20,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,124, - 0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160, - 3,124,0,100,2,161,2,83,0,41,3,122,47,67,111,110, - 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, - 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, - 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0, - 0,114,16,0,0,0,169,4,218,3,108,101,110,218,14,65, - 115,115,101,114,116,105,111,110,69,114,114,111,114,114,17,0, - 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1, - 218,4,100,97,116,97,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,14,95,117,110,112,97,99,107,95,117, - 105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2, - 16,1,114,27,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, - 115,28,0,0,0,116,0,124,0,131,1,100,1,107,2,115, - 16,116,1,130,1,116,2,160,3,124,0,100,2,161,2,83, - 0,41,3,122,47,67,111,110,118,101,114,116,32,50,32,98, - 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, - 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, - 103,101,114,46,233,2,0,0,0,114,16,0,0,0,114,21, - 0,0,0,114,25,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,14,95,117,110,112,97,99,107, - 95,117,105,110,116,49,54,56,0,0,0,115,4,0,0,0, - 0,2,16,1,114,29,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,71,0, - 0,0,115,20,0,0,0,116,0,160,1,100,1,100,2,132, - 0,124,0,68,0,131,1,161,1,83,0,41,3,122,31,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,106,111,105,110,40,41,46,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,5, - 0,0,0,83,0,0,0,115,26,0,0,0,103,0,124,0, - 93,18,125,1,124,1,114,4,124,1,160,0,116,1,161,1, - 145,2,113,4,83,0,114,3,0,0,0,41,2,218,6,114, - 115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,97, - 114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,97, - 114,116,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,10,60,108,105,115,116,99,111,109,112,62,64,0,0, - 0,115,6,0,0,0,6,1,2,0,4,255,122,30,95,112, - 97,116,104,95,106,111,105,110,46,60,108,111,99,97,108,115, - 62,46,60,108,105,115,116,99,111,109,112,62,41,2,218,8, - 112,97,116,104,95,115,101,112,218,4,106,111,105,110,41,1, - 218,10,112,97,116,104,95,112,97,114,116,115,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,97, - 116,104,95,106,111,105,110,62,0,0,0,115,6,0,0,0, - 0,2,10,1,2,255,114,38,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, - 67,0,0,0,115,96,0,0,0,116,0,116,1,131,1,100, - 1,107,2,114,36,124,0,160,2,116,3,161,1,92,3,125, - 1,125,2,125,3,124,1,124,3,102,2,83,0,116,4,124, - 0,131,1,68,0,93,42,125,4,124,4,116,1,107,6,114, - 44,124,0,106,5,124,4,100,1,100,2,141,2,92,2,125, - 1,125,3,124,1,124,3,102,2,2,0,1,0,83,0,113, - 44,100,3,124,0,102,2,83,0,41,4,122,32,82,101,112, - 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,115,112,108,105,116,40,41,46,233,1,0, - 0,0,41,1,90,8,109,97,120,115,112,108,105,116,218,0, - 41,6,114,22,0,0,0,114,31,0,0,0,218,10,114,112, - 97,114,116,105,116,105,111,110,114,35,0,0,0,218,8,114, - 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, - 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, - 95,218,4,116,97,105,108,114,19,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97, - 116,104,95,115,112,108,105,116,68,0,0,0,115,16,0,0, - 0,0,2,12,1,16,1,8,1,12,1,8,1,18,1,14, - 1,114,47,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,1, - 122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,46, - 10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,112, - 97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,116, - 111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114, - 32,116,111,32,111,118,101,114,114,105,100,101,32,105,110,32, - 101,120,112,101,114,105,109,101,110,116,115,10,32,32,32,32, - 40,101,46,103,46,32,99,97,99,104,101,32,115,116,97,116, - 32,114,101,115,117,108,116,115,41,46,10,10,32,32,32,32, - 41,2,114,2,0,0,0,90,4,115,116,97,116,169,1,114, - 44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,80, - 0,0,0,115,2,0,0,0,0,7,114,49,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 8,0,0,0,67,0,0,0,115,50,0,0,0,122,12,116, - 0,124,0,131,1,125,2,87,0,110,22,4,0,116,1,107, - 10,114,34,1,0,1,0,1,0,89,0,100,1,83,0,88, - 0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,41, - 3,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32, - 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116, - 121,112,101,46,70,105,0,240,0,0,41,3,114,49,0,0, - 0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109, - 111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,101, - 90,9,115,116,97,116,95,105,110,102,111,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,18,95,112,97,116, - 104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,0, - 0,0,115,10,0,0,0,0,2,2,1,12,1,14,1,8, - 1,114,53,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 10,0,0,0,116,0,124,0,100,1,131,2,83,0,41,2, - 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111, - 114,32,111,115,46,112,97,116,104,46,105,115,102,105,108,101, - 46,105,0,128,0,0,41,1,114,53,0,0,0,114,48,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,99, - 0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,99, + 46,10,10,233,0,0,0,0,78,90,5,119,105,110,51,50, + 250,1,92,250,1,47,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,99,0,0,0,115, + 26,0,0,0,124,0,93,18,125,1,116,0,124,1,131,1, + 100,0,107,2,86,0,1,0,113,2,100,1,83,0,169,2, + 233,1,0,0,0,78,169,1,218,3,108,101,110,169,2,218, + 2,46,48,218,3,115,101,112,169,0,114,10,0,0,0,250, + 38,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, + 105,98,46,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,62,218,9,60,103,101,110,101,120,112, + 114,62,43,0,0,0,115,4,0,0,0,4,0,2,0,114, + 12,0,0,0,218,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 22,0,0,0,104,0,124,0,93,14,125,1,100,0,124,1, + 155,0,157,2,146,2,113,4,83,0,169,1,250,1,58,114, + 10,0,0,0,169,2,114,8,0,0,0,218,1,115,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,9,60, + 115,101,116,99,111,109,112,62,47,0,0,0,115,4,0,0, + 0,6,0,2,0,114,18,0,0,0,41,1,218,3,119,105, + 110,41,2,90,6,99,121,103,119,105,110,90,6,100,97,114, + 119,105,110,99,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,3,0,0,0,115,60,0,0, + 0,116,0,106,1,160,2,116,3,161,1,114,48,116,0,106, + 1,160,2,116,4,161,1,114,30,100,1,137,0,110,4,100, + 2,137,0,135,0,102,1,100,3,100,4,132,8,125,0,110, + 8,100,5,100,4,132,0,125,0,124,0,83,0,41,6,78, + 90,12,80,89,84,72,79,78,67,65,83,69,79,75,115,12, + 0,0,0,80,89,84,72,79,78,67,65,83,69,79,75,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,19,0,0,0,115,10,0,0,0,136,0,116, + 0,106,1,107,6,83,0,41,1,250,53,84,114,117,101,32, + 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, + 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, + 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, + 41,2,218,3,95,111,115,90,7,101,110,118,105,114,111,110, + 114,10,0,0,0,169,1,218,3,107,101,121,114,10,0,0, + 0,114,11,0,0,0,218,11,95,114,101,108,97,120,95,99, + 97,115,101,64,0,0,0,115,2,0,0,0,0,2,122,37, + 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, + 46,60,108,111,99,97,108,115,62,46,95,114,101,108,97,120, + 95,99,97,115,101,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,83,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,114,20,0,0,0,70,114, + 10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,24,0,0,0,68,0,0, + 0,115,2,0,0,0,0,2,41,5,218,3,115,121,115,218, + 8,112,108,97,116,102,111,114,109,218,10,115,116,97,114,116, + 115,119,105,116,104,218,27,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,218,35,95,67,65,83,69,95,73,78,83,69,78,83, + 73,84,73,86,69,95,80,76,65,84,70,79,82,77,83,95, + 83,84,82,95,75,69,89,41,1,114,24,0,0,0,114,10, + 0,0,0,114,22,0,0,0,114,11,0,0,0,218,16,95, + 109,97,107,101,95,114,101,108,97,120,95,99,97,115,101,57, + 0,0,0,115,14,0,0,0,0,1,12,1,12,1,6,2, + 4,2,14,4,8,3,114,30,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,20,0,0,0,116,0,124,0,131,1,100, + 1,64,0,160,1,100,2,100,3,161,2,83,0,41,4,122, + 42,67,111,110,118,101,114,116,32,97,32,51,50,45,98,105, + 116,32,105,110,116,101,103,101,114,32,116,111,32,108,105,116, + 116,108,101,45,101,110,100,105,97,110,46,236,3,0,0,0, + 255,127,255,127,3,0,233,4,0,0,0,218,6,108,105,116, + 116,108,101,41,2,218,3,105,110,116,218,8,116,111,95,98, + 121,116,101,115,41,1,218,1,120,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,12,95,112,97,99,107,95, + 117,105,110,116,51,50,74,0,0,0,115,2,0,0,0,0, + 2,114,37,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, + 28,0,0,0,116,0,124,0,131,1,100,1,107,2,115,16, + 116,1,130,1,116,2,160,3,124,0,100,2,161,2,83,0, + 41,3,122,47,67,111,110,118,101,114,116,32,52,32,98,121, + 116,101,115,32,105,110,32,108,105,116,116,108,101,45,101,110, + 100,105,97,110,32,116,111,32,97,110,32,105,110,116,101,103, + 101,114,46,114,32,0,0,0,114,33,0,0,0,169,4,114, + 6,0,0,0,218,14,65,115,115,101,114,116,105,111,110,69, + 114,114,111,114,114,34,0,0,0,218,10,102,114,111,109,95, + 98,121,116,101,115,169,1,218,4,100,97,116,97,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,14,95,117, + 110,112,97,99,107,95,117,105,110,116,51,50,79,0,0,0, + 115,4,0,0,0,0,2,16,1,114,43,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,67,0,0,0,115,28,0,0,0,116,0,124,0, + 131,1,100,1,107,2,115,16,116,1,130,1,116,2,160,3, + 124,0,100,2,161,2,83,0,41,3,122,47,67,111,110,118, + 101,114,116,32,50,32,98,121,116,101,115,32,105,110,32,108, + 105,116,116,108,101,45,101,110,100,105,97,110,32,116,111,32, + 97,110,32,105,110,116,101,103,101,114,46,233,2,0,0,0, + 114,33,0,0,0,114,38,0,0,0,114,41,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,14, + 95,117,110,112,97,99,107,95,117,105,110,116,49,54,84,0, + 0,0,115,4,0,0,0,0,2,16,1,114,45,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,4,0,0,0,71,0,0,0,115,228,0,0,0,124,0, + 115,8,100,1,83,0,116,0,124,0,131,1,100,2,107,2, + 114,28,124,0,100,3,25,0,83,0,100,1,125,1,103,0, + 125,2,116,1,116,2,106,3,124,0,131,2,68,0,93,122, + 92,2,125,3,125,4,124,3,160,4,116,5,161,1,115,76, + 124,3,160,6,116,5,161,1,114,102,124,3,160,7,116,8, + 161,1,112,88,124,1,125,1,116,9,124,4,23,0,103,1, + 125,2,113,48,124,3,160,6,100,4,161,1,114,152,124,1, + 160,10,161,0,124,3,160,10,161,0,107,3,114,140,124,3, + 125,1,124,4,103,1,125,2,113,170,124,2,160,11,124,4, + 161,1,1,0,113,48,124,3,112,158,124,1,125,1,124,2, + 160,11,124,4,161,1,1,0,113,48,100,5,100,6,132,0, + 124,2,68,0,131,1,125,2,116,0,124,2,131,1,100,2, + 107,2,114,214,124,2,100,3,25,0,115,214,124,1,116,9, + 23,0,83,0,124,1,116,9,160,12,124,2,161,1,23,0, + 83,0,41,7,250,31,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,106,111, + 105,110,40,41,46,114,13,0,0,0,114,4,0,0,0,114, + 0,0,0,0,114,15,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,5,0,0,0,83,0, + 0,0,115,26,0,0,0,103,0,124,0,93,18,125,1,124, + 1,114,4,124,1,160,0,116,1,161,1,145,2,113,4,83, + 0,114,10,0,0,0,169,2,218,6,114,115,116,114,105,112, + 218,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, + 115,169,2,114,8,0,0,0,218,1,112,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,10,60,108,105,115, + 116,99,111,109,112,62,114,0,0,0,115,6,0,0,0,6, + 0,2,0,4,0,250,30,95,112,97,116,104,95,106,111,105, + 110,46,60,108,111,99,97,108,115,62,46,60,108,105,115,116, + 99,111,109,112,62,41,13,114,6,0,0,0,218,3,109,97, + 112,114,21,0,0,0,218,15,95,112,97,116,104,95,115,112, + 108,105,116,114,111,111,116,114,27,0,0,0,218,14,112,97, + 116,104,95,115,101,112,95,116,117,112,108,101,218,8,101,110, + 100,115,119,105,116,104,114,48,0,0,0,114,49,0,0,0, + 218,8,112,97,116,104,95,115,101,112,218,8,99,97,115,101, + 102,111,108,100,218,6,97,112,112,101,110,100,218,4,106,111, + 105,110,41,5,218,10,112,97,116,104,95,112,97,114,116,115, + 218,4,114,111,111,116,218,4,112,97,116,104,90,8,110,101, + 119,95,114,111,111,116,218,4,116,97,105,108,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,10,95,112,97, + 116,104,95,106,111,105,110,91,0,0,0,115,42,0,0,0, + 0,2,4,1,4,1,12,1,8,1,4,1,4,1,20,1, + 20,1,14,1,12,1,10,1,16,3,4,1,8,2,12,2, + 8,1,12,1,14,1,20,2,8,1,114,66,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,71,0,0,0,115,20,0,0,0,116,0,160, + 1,100,1,100,2,132,0,124,0,68,0,131,1,161,1,83, + 0,41,3,114,46,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,5,0,0,0,83,0,0, + 0,115,26,0,0,0,103,0,124,0,93,18,125,1,124,1, + 114,4,124,1,160,0,116,1,161,1,145,2,113,4,83,0, + 114,10,0,0,0,114,47,0,0,0,41,2,114,8,0,0, + 0,218,4,112,97,114,116,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,52,0,0,0,123,0,0,0,115, + 6,0,0,0,6,1,2,0,4,255,114,53,0,0,0,41, + 2,114,58,0,0,0,114,61,0,0,0,41,1,114,62,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,66,0,0,0,121,0,0,0,115,6,0,0,0,0, + 2,10,1,2,255,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,66, + 0,0,0,116,0,135,0,102,1,100,1,100,2,132,8,116, + 1,68,0,131,1,131,1,125,1,124,1,100,3,107,0,114, + 38,100,4,136,0,102,2,83,0,136,0,100,5,124,1,133, + 2,25,0,136,0,124,1,100,6,23,0,100,5,133,2,25, + 0,102,2,83,0,41,7,122,32,82,101,112,108,97,99,101, + 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, + 46,115,112,108,105,116,40,41,46,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, + 0,0,115,24,0,0,0,124,0,93,16,125,1,136,0,160, + 0,124,1,161,1,86,0,1,0,113,2,100,0,83,0,169, + 1,78,41,1,218,5,114,102,105,110,100,114,50,0,0,0, + 169,1,114,64,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,12,0,0,0,129,0,0,0,115,4,0,0,0,4, + 0,2,0,122,30,95,112,97,116,104,95,115,112,108,105,116, + 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, + 112,114,62,114,0,0,0,0,114,13,0,0,0,78,114,4, + 0,0,0,41,2,218,3,109,97,120,114,49,0,0,0,41, + 2,114,64,0,0,0,218,1,105,114,10,0,0,0,114,70, + 0,0,0,114,11,0,0,0,218,11,95,112,97,116,104,95, + 115,112,108,105,116,127,0,0,0,115,8,0,0,0,0,2, + 22,1,8,1,8,1,114,73,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,10,0,0,0,116,0,160,1,124,0,161, + 1,83,0,41,1,122,126,83,116,97,116,32,116,104,101,32, + 112,97,116,104,46,10,10,32,32,32,32,77,97,100,101,32, + 97,32,115,101,112,97,114,97,116,101,32,102,117,110,99,116, + 105,111,110,32,116,111,32,109,97,107,101,32,105,116,32,101, + 97,115,105,101,114,32,116,111,32,111,118,101,114,114,105,100, + 101,32,105,110,32,101,120,112,101,114,105,109,101,110,116,115, + 10,32,32,32,32,40,101,46,103,46,32,99,97,99,104,101, + 32,115,116,97,116,32,114,101,115,117,108,116,115,41,46,10, + 10,32,32,32,32,41,2,114,21,0,0,0,90,4,115,116, + 97,116,114,70,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,10,95,112,97,116,104,95,115,116, + 97,116,135,0,0,0,115,2,0,0,0,0,7,114,74,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,8,0,0,0,67,0,0,0,115,50,0,0,0, + 122,12,116,0,124,0,131,1,125,2,87,0,110,22,4,0, + 116,1,107,10,114,34,1,0,1,0,1,0,89,0,100,1, + 83,0,88,0,124,2,106,2,100,2,64,0,124,1,107,2, + 83,0,41,3,122,49,84,101,115,116,32,119,104,101,116,104, + 101,114,32,116,104,101,32,112,97,116,104,32,105,115,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,114, + 74,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, + 116,95,109,111,100,101,41,3,114,64,0,0,0,218,4,109, + 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,18,95, + 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, + 101,145,0,0,0,115,10,0,0,0,0,2,2,1,12,1, + 14,1,8,1,114,78,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,115,10,0,0,0,116,0,124,0,100,1,131,2,83, + 0,41,2,122,31,82,101,112,108,97,99,101,109,101,110,116, + 32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,102, + 105,108,101,46,105,0,128,0,0,41,1,114,78,0,0,0, + 114,70,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, + 108,101,154,0,0,0,115,2,0,0,0,0,2,114,79,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,22,0,0,0, + 124,0,115,12,116,0,160,1,161,0,125,0,116,2,124,0, + 100,1,131,2,83,0,41,2,122,30,82,101,112,108,97,99, + 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, + 104,46,105,115,100,105,114,46,105,0,64,0,0,41,3,114, + 21,0,0,0,218,6,103,101,116,99,119,100,114,78,0,0, + 0,114,70,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,11,95,112,97,116,104,95,105,115,100, + 105,114,159,0,0,0,115,6,0,0,0,0,2,4,1,8, + 1,114,81,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 62,0,0,0,124,0,115,8,100,1,83,0,116,0,160,1, + 124,0,161,1,100,2,25,0,160,2,100,3,100,4,161,2, + 125,1,116,3,124,1,131,1,100,5,107,4,111,60,124,1, + 160,4,100,6,161,1,112,60,124,1,160,5,100,4,161,1, + 83,0,41,7,250,30,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115, + 97,98,115,46,70,114,0,0,0,0,114,2,0,0,0,114, + 1,0,0,0,114,4,0,0,0,122,2,92,92,41,6,114, + 21,0,0,0,114,55,0,0,0,218,7,114,101,112,108,97, + 99,101,114,6,0,0,0,114,27,0,0,0,114,57,0,0, + 0,41,2,114,64,0,0,0,114,63,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,11,95,112, + 97,116,104,95,105,115,97,98,115,167,0,0,0,115,8,0, + 0,0,0,2,4,1,4,1,22,1,114,84,0,0,0,99, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115, - 12,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131, - 2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,100,105,114,46,105,0,64,0,0,41,3,114,2,0,0, - 0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,48, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,104, - 0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,56, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, - 0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,100, - 2,133,2,25,0,116,2,107,6,83,0,41,3,122,142,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,97,98,115,46,10,10,32, - 32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,87, - 105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,108, - 97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,100, - 114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,115, - 32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,10, - 32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,98, - 115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,0, - 0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,31, - 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119, - 105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95, - 112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2, - 0,0,0,0,6,114,59,0,0,0,233,182,1,0,0,99, - 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 11,0,0,0,67,0,0,0,115,162,0,0,0,100,1,160, - 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160, - 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, - 6,66,0,124,2,100,2,64,0,161,3,125,4,122,50,116, - 7,160,8,124,4,100,3,161,2,143,16,125,5,124,5,160, - 9,124,1,161,1,1,0,87,0,53,0,81,0,82,0,88, - 0,116,2,160,10,124,3,124,0,161,2,1,0,87,0,110, - 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,122, - 14,116,2,160,12,124,3,161,1,1,0,87,0,110,20,4, - 0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110, - 2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41, - 5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102, - 117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101, - 32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32, - 97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32, - 66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104, - 97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115, - 116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117, - 114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102, - 32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97, - 114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109, - 112,116,101,100,46,250,5,123,125,46,123,125,114,60,0,0, - 0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116, - 218,2,105,100,114,2,0,0,0,90,4,111,112,101,110,90, - 6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,84, - 90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,218, - 6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,7, - 114,101,112,108,97,99,101,114,50,0,0,0,90,6,117,110, - 108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,0, - 114,52,0,0,0,90,8,112,97,116,104,95,116,109,112,90, - 2,102,100,218,4,102,105,108,101,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,95,119,114,105,116,101, - 95,97,116,111,109,105,99,120,0,0,0,115,30,0,0,0, + 3,0,0,0,67,0,0,0,115,10,0,0,0,124,0,160, + 0,116,1,161,1,83,0,41,1,114,82,0,0,0,41,2, + 114,27,0,0,0,114,49,0,0,0,114,70,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,84, + 0,0,0,175,0,0,0,115,2,0,0,0,0,2,233,182, + 1,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,11,0,0,0,67,0,0,0,115,162,0,0, + 0,100,1,160,0,124,0,116,1,124,0,131,1,161,2,125, + 3,116,2,160,3,124,3,116,2,106,4,116,2,106,5,66, + 0,116,2,106,6,66,0,124,2,100,2,64,0,161,3,125, + 4,122,50,116,7,160,8,124,4,100,3,161,2,143,16,125, + 5,124,5,160,9,124,1,161,1,1,0,87,0,53,0,81, + 0,82,0,88,0,116,2,160,10,124,3,124,0,161,2,1, + 0,87,0,110,58,4,0,116,11,107,10,114,156,1,0,1, + 0,1,0,122,14,116,2,160,12,124,3,161,1,1,0,87, + 0,110,20,4,0,116,11,107,10,114,148,1,0,1,0,1, + 0,89,0,110,2,88,0,130,0,89,0,110,2,88,0,100, + 4,83,0,41,5,122,162,66,101,115,116,45,101,102,102,111, + 114,116,32,102,117,110,99,116,105,111,110,32,116,111,32,119, + 114,105,116,101,32,100,97,116,97,32,116,111,32,97,32,112, + 97,116,104,32,97,116,111,109,105,99,97,108,108,121,46,10, + 32,32,32,32,66,101,32,112,114,101,112,97,114,101,100,32, + 116,111,32,104,97,110,100,108,101,32,97,32,70,105,108,101, + 69,120,105,115,116,115,69,114,114,111,114,32,105,102,32,99, + 111,110,99,117,114,114,101,110,116,32,119,114,105,116,105,110, + 103,32,111,102,32,116,104,101,10,32,32,32,32,116,101,109, + 112,111,114,97,114,121,32,102,105,108,101,32,105,115,32,97, + 116,116,101,109,112,116,101,100,46,250,5,123,125,46,123,125, + 114,85,0,0,0,90,2,119,98,78,41,13,218,6,102,111, + 114,109,97,116,218,2,105,100,114,21,0,0,0,90,4,111, + 112,101,110,90,6,79,95,69,88,67,76,90,7,79,95,67, + 82,69,65,84,90,8,79,95,87,82,79,78,76,89,218,3, + 95,105,111,218,6,70,105,108,101,73,79,218,5,119,114,105, + 116,101,114,83,0,0,0,114,75,0,0,0,90,6,117,110, + 108,105,110,107,41,6,114,64,0,0,0,114,42,0,0,0, + 114,77,0,0,0,90,8,112,97,116,104,95,116,109,112,90, + 2,102,100,218,4,102,105,108,101,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,13,95,119,114,105,116,101, + 95,97,116,111,109,105,99,180,0,0,0,115,30,0,0,0, 0,5,16,1,6,1,16,0,6,255,4,2,2,3,14,1, - 20,1,16,1,14,1,2,1,14,1,14,1,6,1,114,69, - 0,0,0,105,85,13,0,0,114,28,0,0,0,114,16,0, + 20,1,16,1,14,1,2,1,14,1,14,1,6,1,114,93, + 0,0,0,105,85,13,0,0,114,44,0,0,0,114,33,0, 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, 97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112, - 121,122,4,46,112,121,99,78,41,1,218,12,111,112,116,105, - 109,105,122,97,116,105,111,110,99,2,0,0,0,0,0,0, - 0,1,0,0,0,12,0,0,0,5,0,0,0,67,0,0, - 0,115,88,1,0,0,124,1,100,1,107,9,114,52,116,0, - 160,1,100,2,116,2,161,2,1,0,124,2,100,1,107,9, - 114,40,100,3,125,3,116,3,124,3,131,1,130,1,124,1, - 114,48,100,4,110,2,100,5,125,2,116,4,160,5,124,0, - 161,1,125,0,116,6,124,0,131,1,92,2,125,4,125,5, - 124,5,160,7,100,6,161,1,92,3,125,6,125,7,125,8, - 116,8,106,9,106,10,125,9,124,9,100,1,107,8,114,114, - 116,11,100,7,131,1,130,1,100,4,160,12,124,6,114,126, - 124,6,110,2,124,8,124,7,124,9,103,3,161,1,125,10, - 124,2,100,1,107,8,114,172,116,8,106,13,106,14,100,8, - 107,2,114,164,100,4,125,2,110,8,116,8,106,13,106,14, - 125,2,116,15,124,2,131,1,125,2,124,2,100,4,107,3, - 114,224,124,2,160,16,161,0,115,210,116,17,100,9,160,18, - 124,2,161,1,131,1,130,1,100,10,160,18,124,10,116,19, - 124,2,161,3,125,10,124,10,116,20,100,8,25,0,23,0, - 125,11,116,8,106,21,100,1,107,9,144,1,114,76,116,22, - 124,4,131,1,144,1,115,16,116,23,116,4,160,24,161,0, - 124,4,131,2,125,4,124,4,100,5,25,0,100,11,107,2, - 144,1,114,56,124,4,100,8,25,0,116,25,107,7,144,1, - 114,56,124,4,100,12,100,1,133,2,25,0,125,4,116,23, - 116,8,106,21,124,4,160,26,116,25,161,1,124,11,131,3, - 83,0,116,23,124,4,116,27,124,11,131,3,83,0,41,13, - 97,254,2,0,0,71,105,118,101,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,97,32,46,112,121,32,102,105,108, - 101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,105,116,115,32,46,112,121,99,32,102, - 105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112, - 121,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32, - 110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116, - 104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114, - 110,115,32,116,104,101,32,112,97,116,104,32,116,111,32,116, - 104,101,10,32,32,32,32,46,112,121,99,32,102,105,108,101, - 32,99,97,108,99,117,108,97,116,101,100,32,97,115,32,105, - 102,32,116,104,101,32,46,112,121,32,102,105,108,101,32,119, - 101,114,101,32,105,109,112,111,114,116,101,100,46,10,10,32, - 32,32,32,84,104,101,32,39,111,112,116,105,109,105,122,97, - 116,105,111,110,39,32,112,97,114,97,109,101,116,101,114,32, - 99,111,110,116,114,111,108,115,32,116,104,101,32,112,114,101, - 115,117,109,101,100,32,111,112,116,105,109,105,122,97,116,105, - 111,110,32,108,101,118,101,108,32,111,102,10,32,32,32,32, - 116,104,101,32,98,121,116,101,99,111,100,101,32,102,105,108, - 101,46,32,73,102,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,105,115,32,110,111,116,32,78,111,110,101, - 44,32,116,104,101,32,115,116,114,105,110,103,32,114,101,112, - 114,101,115,101,110,116,97,116,105,111,110,10,32,32,32,32, - 111,102,32,116,104,101,32,97,114,103,117,109,101,110,116,32, - 105,115,32,116,97,107,101,110,32,97,110,100,32,118,101,114, - 105,102,105,101,100,32,116,111,32,98,101,32,97,108,112,104, - 97,110,117,109,101,114,105,99,32,40,101,108,115,101,32,86, - 97,108,117,101,69,114,114,111,114,10,32,32,32,32,105,115, - 32,114,97,105,115,101,100,41,46,10,10,32,32,32,32,84, - 104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,73,102,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,105,115,32, - 110,111,116,32,78,111,110,101,44,10,32,32,32,32,97,32, - 84,114,117,101,32,118,97,108,117,101,32,105,115,32,116,104, - 101,32,115,97,109,101,32,97,115,32,115,101,116,116,105,110, - 103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, - 32,116,111,32,116,104,101,32,101,109,112,116,121,32,115,116, - 114,105,110,103,10,32,32,32,32,119,104,105,108,101,32,97, - 32,70,97,108,115,101,32,118,97,108,117,101,32,105,115,32, - 101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,101, - 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,39,49,39,46,10,10,32,32, - 32,32,73,102,32,115,121,115,46,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, - 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, - 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,78,122,70,116,104,101,32,100,101,98,117,103,95, - 111,118,101,114,114,105,100,101,32,112,97,114,97,109,101,116, - 101,114,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 59,32,117,115,101,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,105,110,115,116,101,97,100,122,50,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,111,114,32, - 111,112,116,105,109,105,122,97,116,105,111,110,32,109,117,115, - 116,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101, - 114,40,0,0,0,114,39,0,0,0,218,1,46,250,36,115, - 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78, - 111,110,101,233,0,0,0,0,122,24,123,33,114,125,32,105, - 115,32,110,111,116,32,97,108,112,104,97,110,117,109,101,114, - 105,99,122,7,123,125,46,123,125,123,125,250,1,58,114,28, - 0,0,0,41,28,218,9,95,119,97,114,110,105,110,103,115, - 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, - 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, - 69,114,114,111,114,114,2,0,0,0,218,6,102,115,112,97, - 116,104,114,47,0,0,0,114,41,0,0,0,114,8,0,0, - 0,218,14,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,218,9,99,97,99,104,101,95,116,97,103,218,19,78,111, + 121,122,4,46,112,121,99,41,1,218,12,111,112,116,105,109, + 105,122,97,116,105,111,110,99,2,0,0,0,0,0,0,0, + 1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,0, + 115,88,1,0,0,124,1,100,1,107,9,114,52,116,0,160, + 1,100,2,116,2,161,2,1,0,124,2,100,1,107,9,114, + 40,100,3,125,3,116,3,124,3,131,1,130,1,124,1,114, + 48,100,4,110,2,100,5,125,2,116,4,160,5,124,0,161, + 1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,124, + 5,160,7,100,6,161,1,92,3,125,6,125,7,125,8,116, + 8,106,9,106,10,125,9,124,9,100,1,107,8,114,114,116, + 11,100,7,131,1,130,1,100,4,160,12,124,6,114,126,124, + 6,110,2,124,8,124,7,124,9,103,3,161,1,125,10,124, + 2,100,1,107,8,114,172,116,8,106,13,106,14,100,8,107, + 2,114,164,100,4,125,2,110,8,116,8,106,13,106,14,125, + 2,116,15,124,2,131,1,125,2,124,2,100,4,107,3,114, + 224,124,2,160,16,161,0,115,210,116,17,100,9,160,18,124, + 2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,124, + 2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,125, + 11,116,8,106,21,100,1,107,9,144,1,114,76,116,22,124, + 4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,124, + 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,144, + 1,114,56,124,4,100,8,25,0,116,25,107,7,144,1,114, + 56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116, + 8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83, + 0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,97, + 254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,101, + 44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,105, + 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, + 32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,110, + 101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,104, + 105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,110, + 115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,32, + 99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,102, + 32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,101, + 114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,32, + 32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,116, + 105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,99, + 111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,115, + 117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,111, + 110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,116, + 104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,44, + 32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,114, + 101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,111, + 102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105, + 115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,105, + 102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,97, + 110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,97, + 108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,32, + 114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,104, + 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110, + 111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,84, + 114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,101, + 32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,103, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,114, + 105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,32, + 70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,101, + 113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116, + 116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,32, + 32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, + 32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111, 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, - 114,114,36,0,0,0,218,5,102,108,97,103,115,218,8,111, - 112,116,105,109,105,122,101,218,3,115,116,114,218,7,105,115, - 97,108,110,117,109,218,10,86,97,108,117,101,69,114,114,111, - 114,114,62,0,0,0,218,4,95,79,80,84,218,17,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,218, - 14,112,121,99,97,99,104,101,95,112,114,101,102,105,120,114, - 59,0,0,0,114,38,0,0,0,114,55,0,0,0,114,31, - 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89, - 67,65,67,72,69,41,12,114,44,0,0,0,90,14,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,114,70,0,0, - 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100, - 114,46,0,0,0,90,4,98,97,115,101,218,3,115,101,112, - 218,4,114,101,115,116,90,3,116,97,103,90,15,97,108,109, - 111,115,116,95,102,105,108,101,110,97,109,101,218,8,102,105, - 108,101,110,97,109,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,17,99,97,99,104,101,95,102,114,111, - 109,95,115,111,117,114,99,101,38,1,0,0,115,72,0,0, - 0,0,18,8,1,6,1,2,255,4,2,8,1,4,1,8, - 1,12,1,10,1,12,1,16,1,8,1,8,1,8,1,24, - 1,8,1,12,1,6,2,8,1,8,1,8,1,8,1,14, - 1,14,1,12,1,12,9,10,1,14,5,28,1,12,4,2, - 1,4,1,8,1,2,253,4,5,114,98,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,5, - 0,0,0,67,0,0,0,115,46,1,0,0,116,0,106,1, - 106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1, - 116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1, - 92,2,125,1,125,2,100,3,125,3,116,0,106,7,100,1, - 107,9,114,102,116,0,106,7,160,8,116,9,161,1,125,4, - 124,1,160,10,124,4,116,11,23,0,161,1,114,102,124,1, - 116,12,124,4,131,1,100,1,133,2,25,0,125,1,100,4, - 125,3,124,3,115,144,116,6,124,1,131,1,92,2,125,1, - 125,5,124,5,116,13,107,3,114,144,116,14,116,13,155,0, - 100,5,124,0,155,2,157,3,131,1,130,1,124,2,160,15, - 100,6,161,1,125,6,124,6,100,7,107,7,114,178,116,14, - 100,8,124,2,155,2,157,2,131,1,130,1,110,92,124,6, - 100,9,107,2,144,1,114,14,124,2,160,16,100,6,100,10, - 161,2,100,11,25,0,125,7,124,7,160,10,116,17,161,1, - 115,228,116,14,100,12,116,17,155,2,157,2,131,1,130,1, - 124,7,116,12,116,17,131,1,100,1,133,2,25,0,125,8, - 124,8,160,18,161,0,144,1,115,14,116,14,100,13,124,7, - 155,2,100,14,157,3,131,1,130,1,124,2,160,19,100,6, - 161,1,100,15,25,0,125,9,116,20,124,1,124,9,116,21, - 100,15,25,0,23,0,131,2,83,0,41,16,97,110,1,0, - 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, - 116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44, - 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, - 32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101, - 46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32, - 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, - 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, - 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, - 32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32, - 32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97, - 108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114, - 101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112, - 121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116, - 104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99, - 111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49, - 52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86, - 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, - 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, - 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 114,72,0,0,0,70,84,122,31,32,110,111,116,32,98,111, - 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, - 116,111,114,121,32,105,110,32,114,71,0,0,0,62,2,0, - 0,0,114,28,0,0,0,114,57,0,0,0,122,29,101,120, - 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, - 32,51,32,100,111,116,115,32,105,110,32,114,57,0,0,0, - 114,28,0,0,0,233,254,255,255,255,122,53,111,112,116,105, - 109,105,122,97,116,105,111,110,32,112,111,114,116,105,111,110, - 32,111,102,32,102,105,108,101,110,97,109,101,32,100,111,101, - 115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104, - 32,122,19,111,112,116,105,109,105,122,97,116,105,111,110,32, - 108,101,118,101,108,32,122,29,32,105,115,32,110,111,116,32, - 97,110,32,97,108,112,104,97,110,117,109,101,114,105,99,32, - 118,97,108,117,101,114,73,0,0,0,41,22,114,8,0,0, - 0,114,80,0,0,0,114,81,0,0,0,114,82,0,0,0, - 114,2,0,0,0,114,79,0,0,0,114,47,0,0,0,114, - 90,0,0,0,114,30,0,0,0,114,31,0,0,0,114,10, - 0,0,0,114,35,0,0,0,114,22,0,0,0,114,92,0, - 0,0,114,87,0,0,0,218,5,99,111,117,110,116,114,43, - 0,0,0,114,88,0,0,0,114,86,0,0,0,218,9,112, - 97,114,116,105,116,105,111,110,114,38,0,0,0,218,15,83, - 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10, - 114,44,0,0,0,114,94,0,0,0,90,16,112,121,99,97, - 99,104,101,95,102,105,108,101,110,97,109,101,90,23,102,111, - 117,110,100,95,105,110,95,112,121,99,97,99,104,101,95,112, - 114,101,102,105,120,90,13,115,116,114,105,112,112,101,100,95, - 112,97,116,104,90,7,112,121,99,97,99,104,101,90,9,100, - 111,116,95,99,111,117,110,116,114,70,0,0,0,90,9,111, - 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102, - 105,108,101,110,97,109,101,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,17,115,111,117,114,99,101,95,102, - 114,111,109,95,99,97,99,104,101,109,1,0,0,115,52,0, - 0,0,0,9,12,1,8,1,10,1,12,1,4,1,10,1, - 12,1,14,1,16,1,4,1,4,1,12,1,8,1,18,2, - 10,1,8,1,16,1,10,1,16,1,10,1,14,2,16,1, - 10,1,16,2,14,1,114,103,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,9,0,0,0, - 67,0,0,0,115,126,0,0,0,116,0,124,0,131,1,100, - 1,107,2,114,16,100,2,83,0,124,0,160,1,100,3,161, - 1,92,3,125,1,125,2,125,3,124,1,114,56,124,3,160, - 2,161,0,100,4,100,5,133,2,25,0,100,6,107,3,114, - 60,124,0,83,0,122,12,116,3,124,0,131,1,125,4,87, - 0,110,36,4,0,116,4,116,5,102,2,107,10,114,108,1, - 0,1,0,1,0,124,0,100,2,100,5,133,2,25,0,125, - 4,89,0,110,2,88,0,116,6,124,4,131,1,114,122,124, - 4,83,0,124,0,83,0,41,7,122,188,67,111,110,118,101, - 114,116,32,97,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,32,112,97,116,104,32,116,111,32,97,32,115,111,117, - 114,99,101,32,112,97,116,104,32,40,105,102,32,112,111,115, - 115,105,98,108,101,41,46,10,10,32,32,32,32,84,104,105, - 115,32,102,117,110,99,116,105,111,110,32,101,120,105,115,116, - 115,32,112,117,114,101,108,121,32,102,111,114,32,98,97,99, - 107,119,97,114,100,115,45,99,111,109,112,97,116,105,98,105, - 108,105,116,121,32,102,111,114,10,32,32,32,32,80,121,73, - 109,112,111,114,116,95,69,120,101,99,67,111,100,101,77,111, - 100,117,108,101,87,105,116,104,70,105,108,101,110,97,109,101, - 115,40,41,32,105,110,32,116,104,101,32,67,32,65,80,73, - 46,10,10,32,32,32,32,114,73,0,0,0,78,114,71,0, - 0,0,233,253,255,255,255,233,255,255,255,255,90,2,112,121, - 41,7,114,22,0,0,0,114,41,0,0,0,218,5,108,111, - 119,101,114,114,103,0,0,0,114,82,0,0,0,114,87,0, - 0,0,114,54,0,0,0,41,5,218,13,98,121,116,101,99, - 111,100,101,95,112,97,116,104,114,96,0,0,0,114,45,0, - 0,0,90,9,101,120,116,101,110,115,105,111,110,218,11,115, - 111,117,114,99,101,95,112,97,116,104,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,15,95,103,101,116,95, - 115,111,117,114,99,101,102,105,108,101,149,1,0,0,115,20, - 0,0,0,0,7,12,1,4,1,16,1,24,1,4,1,2, - 1,12,1,18,1,18,1,114,109,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0, - 0,67,0,0,0,115,74,0,0,0,124,0,160,0,116,1, - 116,2,131,1,161,1,114,48,122,10,116,3,124,0,131,1, - 87,0,83,0,4,0,116,4,107,10,114,44,1,0,1,0, - 1,0,89,0,113,70,88,0,110,22,124,0,160,0,116,1, - 116,5,131,1,161,1,114,66,124,0,83,0,100,0,83,0, - 100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,119, - 105,116,104,218,5,116,117,112,108,101,114,102,0,0,0,114, - 98,0,0,0,114,82,0,0,0,114,89,0,0,0,41,1, - 114,97,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101, - 100,168,1,0,0,115,16,0,0,0,0,1,14,1,2,1, - 10,1,14,1,8,1,14,1,4,2,114,113,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 8,0,0,0,67,0,0,0,115,52,0,0,0,122,14,116, - 0,124,0,131,1,106,1,125,1,87,0,110,24,4,0,116, - 2,107,10,114,38,1,0,1,0,1,0,100,1,125,1,89, - 0,110,2,88,0,124,1,100,2,79,0,125,1,124,1,83, - 0,41,3,122,51,67,97,108,99,117,108,97,116,101,32,116, - 104,101,32,109,111,100,101,32,112,101,114,109,105,115,115,105, - 111,110,115,32,102,111,114,32,97,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,46,114,60,0,0,0,233,128,0, - 0,0,41,3,114,49,0,0,0,114,51,0,0,0,114,50, - 0,0,0,41,2,114,44,0,0,0,114,52,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,10, - 95,99,97,108,99,95,109,111,100,101,180,1,0,0,115,12, - 0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114, - 115,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,8,0,0,0,3,0,0,0,115,68,0, - 0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1, - 122,10,116,0,106,1,125,2,87,0,110,28,4,0,116,2, - 107,10,114,52,1,0,1,0,1,0,100,4,100,5,132,0, - 125,2,89,0,110,2,88,0,124,2,124,1,136,0,131,2, - 1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97, - 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, - 97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101, - 105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97, - 116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104, - 101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110, - 32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104, - 101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116, - 32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102, - 105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32, - 116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109, - 101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97, - 114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32, - 116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102, - 97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,31,0,0,0, - 115,66,0,0,0,124,1,100,0,107,8,114,16,124,0,106, - 0,125,1,110,32,124,0,106,0,124,1,107,3,114,48,116, - 1,100,1,124,0,106,0,124,1,102,2,22,0,124,1,100, - 2,141,2,130,1,136,0,124,0,124,1,102,2,124,2,158, - 2,124,3,142,1,83,0,41,3,78,122,30,108,111,97,100, - 101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116, - 32,104,97,110,100,108,101,32,37,115,169,1,218,4,110,97, - 109,101,41,2,114,117,0,0,0,218,11,73,109,112,111,114, - 116,69,114,114,111,114,41,4,218,4,115,101,108,102,114,117, - 0,0,0,218,4,97,114,103,115,218,6,107,119,97,114,103, - 115,169,1,218,6,109,101,116,104,111,100,114,3,0,0,0, - 114,6,0,0,0,218,19,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,200,1,0,0,115,18, - 0,0,0,0,1,8,1,8,1,10,1,4,1,8,255,2, - 1,2,255,6,2,122,40,95,99,104,101,99,107,95,110,97, - 109,101,46,60,108,111,99,97,108,115,62,46,95,99,104,101, - 99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 7,0,0,0,83,0,0,0,115,56,0,0,0,100,1,68, - 0,93,32,125,2,116,0,124,1,124,2,131,2,114,4,116, - 1,124,0,124,2,116,2,124,1,124,2,131,2,131,3,1, - 0,113,4,124,0,106,3,160,4,124,1,106,3,161,1,1, - 0,100,0,83,0,41,2,78,41,4,218,10,95,95,109,111, - 100,117,108,101,95,95,218,8,95,95,110,97,109,101,95,95, - 218,12,95,95,113,117,97,108,110,97,109,101,95,95,218,7, - 95,95,100,111,99,95,95,41,5,218,7,104,97,115,97,116, - 116,114,218,7,115,101,116,97,116,116,114,218,7,103,101,116, - 97,116,116,114,218,8,95,95,100,105,99,116,95,95,218,6, - 117,112,100,97,116,101,41,3,90,3,110,101,119,90,3,111, - 108,100,114,67,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,5,95,119,114,97,112,211,1,0, - 0,115,8,0,0,0,0,1,8,1,10,1,20,1,122,26, - 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, - 97,108,115,62,46,95,119,114,97,112,41,1,78,41,3,218, - 10,95,98,111,111,116,115,116,114,97,112,114,134,0,0,0, - 218,9,78,97,109,101,69,114,114,111,114,41,3,114,123,0, - 0,0,114,124,0,0,0,114,134,0,0,0,114,3,0,0, - 0,114,122,0,0,0,114,6,0,0,0,218,11,95,99,104, - 101,99,107,95,110,97,109,101,192,1,0,0,115,14,0,0, - 0,0,8,14,7,2,1,10,1,14,2,14,5,10,1,114, - 137,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,6,0,0,0,67,0,0,0,115,60,0, - 0,0,124,0,160,0,124,1,161,1,92,2,125,2,125,3, - 124,2,100,1,107,8,114,56,116,1,124,3,131,1,114,56, - 100,2,125,4,116,2,160,3,124,4,160,4,124,3,100,3, - 25,0,161,1,116,5,161,2,1,0,124,2,83,0,41,4, - 122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32, - 98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111, - 10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108, - 111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114, - 32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95, - 115,112,101,99,40,41,46,10,10,32,32,32,32,78,122,44, - 78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105, - 114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115, - 105,110,103,32,95,95,105,110,105,116,95,95,114,73,0,0, - 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114, - 114,22,0,0,0,114,75,0,0,0,114,76,0,0,0,114, - 62,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110, - 105,110,103,41,5,114,119,0,0,0,218,8,102,117,108,108, - 110,97,109,101,218,6,108,111,97,100,101,114,218,8,112,111, - 114,116,105,111,110,115,218,3,109,115,103,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,17,95,102,105,110, - 100,95,109,111,100,117,108,101,95,115,104,105,109,220,1,0, - 0,115,10,0,0,0,0,10,14,1,16,1,4,1,22,1, - 114,144,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,158, - 0,0,0,124,0,100,1,100,2,133,2,25,0,125,3,124, - 3,116,0,107,3,114,60,100,3,124,1,155,2,100,4,124, - 3,155,2,157,4,125,4,116,1,160,2,100,5,124,4,161, - 2,1,0,116,3,124,4,102,1,124,2,142,1,130,1,116, - 4,124,0,131,1,100,6,107,0,114,102,100,7,124,1,155, - 2,157,2,125,4,116,1,160,2,100,5,124,4,161,2,1, - 0,116,5,124,4,131,1,130,1,116,6,124,0,100,2,100, - 8,133,2,25,0,131,1,125,5,124,5,100,9,64,0,114, - 154,100,10,124,5,155,2,100,11,124,1,155,2,157,4,125, - 4,116,3,124,4,102,1,124,2,142,1,130,1,124,5,83, - 0,41,12,97,84,2,0,0,80,101,114,102,111,114,109,32, - 98,97,115,105,99,32,118,97,108,105,100,105,116,121,32,99, - 104,101,99,107,105,110,103,32,111,102,32,97,32,112,121,99, - 32,104,101,97,100,101,114,32,97,110,100,32,114,101,116,117, - 114,110,32,116,104,101,32,102,108,97,103,115,32,102,105,101, - 108,100,44,10,32,32,32,32,119,104,105,99,104,32,100,101, - 116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101, - 32,112,121,99,32,115,104,111,117,108,100,32,98,101,32,102, - 117,114,116,104,101,114,32,118,97,108,105,100,97,116,101,100, - 32,97,103,97,105,110,115,116,32,116,104,101,32,115,111,117, - 114,99,101,46,10,10,32,32,32,32,42,100,97,116,97,42, - 32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115, - 32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101, - 46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115, - 116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32, - 32,32,32,114,101,113,117,105,114,101,100,44,32,116,104,111, - 117,103,104,46,41,10,10,32,32,32,32,42,110,97,109,101, + 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, + 32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101, + 114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59, + 32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,111, + 112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,116, + 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,114, + 13,0,0,0,114,4,0,0,0,218,1,46,250,36,115,121, + 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, + 110,101,114,0,0,0,0,122,24,123,33,114,125,32,105,115, + 32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,105, + 99,122,7,123,125,46,123,125,123,125,114,15,0,0,0,114, + 44,0,0,0,41,28,218,9,95,119,97,114,110,105,110,103, + 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, + 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, + 101,69,114,114,111,114,114,21,0,0,0,218,6,102,115,112, + 97,116,104,114,73,0,0,0,218,10,114,112,97,114,116,105, + 116,105,111,110,114,25,0,0,0,218,14,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,218,9,99,97,99,104,101, + 95,116,97,103,218,19,78,111,116,73,109,112,108,101,109,101, + 110,116,101,100,69,114,114,111,114,114,61,0,0,0,218,5, + 102,108,97,103,115,218,8,111,112,116,105,109,105,122,101,218, + 3,115,116,114,218,7,105,115,97,108,110,117,109,218,10,86, + 97,108,117,101,69,114,114,111,114,114,87,0,0,0,218,4, + 95,79,80,84,218,17,66,89,84,69,67,79,68,69,95,83, + 85,70,70,73,88,69,83,218,14,112,121,99,97,99,104,101, + 95,112,114,101,102,105,120,114,84,0,0,0,114,66,0,0, + 0,114,80,0,0,0,114,49,0,0,0,218,6,108,115,116, + 114,105,112,218,8,95,80,89,67,65,67,72,69,41,12,114, + 64,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,114,94,0,0,0,218,7,109,101,115,115,97, + 103,101,218,4,104,101,97,100,114,65,0,0,0,90,4,98, + 97,115,101,114,9,0,0,0,218,4,114,101,115,116,90,3, + 116,97,103,90,15,97,108,109,111,115,116,95,102,105,108,101, + 110,97,109,101,218,8,102,105,108,101,110,97,109,101,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,17,99, + 97,99,104,101,95,102,114,111,109,95,115,111,117,114,99,101, + 98,1,0,0,115,72,0,0,0,0,18,8,1,6,1,2, + 255,4,2,8,1,4,1,8,1,12,1,10,1,12,1,16, + 1,8,1,8,1,8,1,24,1,8,1,12,1,6,2,8, + 1,8,1,8,1,8,1,14,1,14,1,12,1,12,9,10, + 1,14,5,28,1,12,4,2,1,4,1,8,1,2,253,4, + 5,114,120,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,10,0,0,0,5,0,0,0,67,0,0,0,115, + 46,1,0,0,116,0,106,1,106,2,100,1,107,8,114,20, + 116,3,100,2,131,1,130,1,116,4,160,5,124,0,161,1, + 125,0,116,6,124,0,131,1,92,2,125,1,125,2,100,3, + 125,3,116,0,106,7,100,1,107,9,114,102,116,0,106,7, + 160,8,116,9,161,1,125,4,124,1,160,10,124,4,116,11, + 23,0,161,1,114,102,124,1,116,12,124,4,131,1,100,1, + 133,2,25,0,125,1,100,4,125,3,124,3,115,144,116,6, + 124,1,131,1,92,2,125,1,125,5,124,5,116,13,107,3, + 114,144,116,14,116,13,155,0,100,5,124,0,155,2,157,3, + 131,1,130,1,124,2,160,15,100,6,161,1,125,6,124,6, + 100,7,107,7,114,178,116,14,100,8,124,2,155,2,157,2, + 131,1,130,1,110,92,124,6,100,9,107,2,144,1,114,14, + 124,2,160,16,100,6,100,10,161,2,100,11,25,0,125,7, + 124,7,160,10,116,17,161,1,115,228,116,14,100,12,116,17, + 155,2,157,2,131,1,130,1,124,7,116,12,116,17,131,1, + 100,1,133,2,25,0,125,8,124,8,160,18,161,0,144,1, + 115,14,116,14,100,13,124,7,155,2,100,14,157,3,131,1, + 130,1,124,2,160,19,100,6,161,1,100,15,25,0,125,9, + 116,20,124,1,124,9,116,21,100,15,25,0,23,0,131,2, + 83,0,41,16,97,110,1,0,0,71,105,118,101,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, + 99,46,32,102,105,108,101,44,32,114,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,105,116,115,32, + 46,112,121,32,102,105,108,101,46,10,10,32,32,32,32,84, + 104,101,32,46,112,121,99,32,102,105,108,101,32,100,111,101, + 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, + 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, + 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, + 104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,121, + 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, + 32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,116, + 111,32,116,104,101,32,46,112,121,99,32,102,105,108,101,46, + 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, + 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, + 111,32,80,69,80,32,51,49,52,55,47,52,56,56,32,102, + 111,114,109,97,116,44,32,86,97,108,117,101,69,114,114,111, + 114,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100, + 46,32,73,102,10,32,32,32,32,115,121,115,46,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, + 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, + 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,78,114,96,0,0,0,70,84,122, + 31,32,110,111,116,32,98,111,116,116,111,109,45,108,101,118, + 101,108,32,100,105,114,101,99,116,111,114,121,32,105,110,32, + 114,95,0,0,0,62,2,0,0,0,114,44,0,0,0,233, + 3,0,0,0,122,29,101,120,112,101,99,116,101,100,32,111, + 110,108,121,32,50,32,111,114,32,51,32,100,111,116,115,32, + 105,110,32,114,121,0,0,0,114,44,0,0,0,233,254,255, + 255,255,122,53,111,112,116,105,109,105,122,97,116,105,111,110, + 32,112,111,114,116,105,111,110,32,111,102,32,102,105,108,101, + 110,97,109,101,32,100,111,101,115,32,110,111,116,32,115,116, + 97,114,116,32,119,105,116,104,32,122,19,111,112,116,105,109, + 105,122,97,116,105,111,110,32,108,101,118,101,108,32,122,29, + 32,105,115,32,110,111,116,32,97,110,32,97,108,112,104,97, + 110,117,109,101,114,105,99,32,118,97,108,117,101,114,0,0, + 0,0,41,22,114,25,0,0,0,114,103,0,0,0,114,104, + 0,0,0,114,105,0,0,0,114,21,0,0,0,114,101,0, + 0,0,114,73,0,0,0,114,113,0,0,0,114,48,0,0, + 0,114,49,0,0,0,114,27,0,0,0,114,58,0,0,0, + 114,6,0,0,0,114,115,0,0,0,114,110,0,0,0,218, + 5,99,111,117,110,116,218,6,114,115,112,108,105,116,114,111, + 0,0,0,114,109,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,66,0,0,0,218,15,83,79,85,82,67,69, + 95,83,85,70,70,73,88,69,83,41,10,114,64,0,0,0, + 114,117,0,0,0,90,16,112,121,99,97,99,104,101,95,102, + 105,108,101,110,97,109,101,90,23,102,111,117,110,100,95,105, + 110,95,112,121,99,97,99,104,101,95,112,114,101,102,105,120, + 90,13,115,116,114,105,112,112,101,100,95,112,97,116,104,90, + 7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,111, + 117,110,116,114,94,0,0,0,90,9,111,112,116,95,108,101, + 118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,97, + 109,101,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,99, + 97,99,104,101,169,1,0,0,115,52,0,0,0,0,9,12, + 1,8,1,10,1,12,1,4,1,10,1,12,1,14,1,16, + 1,4,1,4,1,12,1,8,1,18,2,10,1,8,1,16, + 1,10,1,16,1,10,1,14,2,16,1,10,1,16,2,14, + 1,114,127,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,9,0,0,0,67,0,0,0,115, + 126,0,0,0,116,0,124,0,131,1,100,1,107,2,114,16, + 100,2,83,0,124,0,160,1,100,3,161,1,92,3,125,1, + 125,2,125,3,124,1,114,56,124,3,160,2,161,0,100,4, + 100,5,133,2,25,0,100,6,107,3,114,60,124,0,83,0, + 122,12,116,3,124,0,131,1,125,4,87,0,110,36,4,0, + 116,4,116,5,102,2,107,10,114,108,1,0,1,0,1,0, + 124,0,100,2,100,5,133,2,25,0,125,4,89,0,110,2, + 88,0,116,6,124,4,131,1,114,122,124,4,83,0,124,0, + 83,0,41,7,122,188,67,111,110,118,101,114,116,32,97,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,97, + 116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,112, + 97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,101, + 41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, + 99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,114, + 101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,100, + 115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,32, + 102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,116, + 95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,87, + 105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,105, + 110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,32, + 32,32,114,0,0,0,0,78,114,95,0,0,0,233,253,255, + 255,255,233,255,255,255,255,90,2,112,121,41,7,114,6,0, + 0,0,114,102,0,0,0,218,5,108,111,119,101,114,114,127, + 0,0,0,114,105,0,0,0,114,110,0,0,0,114,79,0, + 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, + 97,116,104,114,118,0,0,0,218,1,95,90,9,101,120,116, + 101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,112, + 97,116,104,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,15,95,103,101,116,95,115,111,117,114,99,101,102, + 105,108,101,209,1,0,0,115,20,0,0,0,0,7,12,1, + 4,1,16,1,24,1,4,1,2,1,12,1,18,1,18,1, + 114,134,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,8,0,0,0,67,0,0,0,115,74, + 0,0,0,124,0,160,0,116,1,116,2,131,1,161,1,114, + 48,122,10,116,3,124,0,131,1,87,0,83,0,4,0,116, + 4,107,10,114,44,1,0,1,0,1,0,89,0,113,70,88, + 0,110,22,124,0,160,0,116,1,116,5,131,1,161,1,114, + 66,124,0,83,0,100,0,83,0,100,0,83,0,114,68,0, + 0,0,41,6,114,57,0,0,0,218,5,116,117,112,108,101, + 114,126,0,0,0,114,120,0,0,0,114,105,0,0,0,114, + 112,0,0,0,41,1,114,119,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,11,95,103,101,116, + 95,99,97,99,104,101,100,228,1,0,0,115,16,0,0,0, + 0,1,14,1,2,1,10,1,14,1,8,1,14,1,4,2, + 114,136,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,52, + 0,0,0,122,14,116,0,124,0,131,1,106,1,125,1,87, + 0,110,24,4,0,116,2,107,10,114,38,1,0,1,0,1, + 0,100,1,125,1,89,0,110,2,88,0,124,1,100,2,79, + 0,125,1,124,1,83,0,41,3,122,51,67,97,108,99,117, + 108,97,116,101,32,116,104,101,32,109,111,100,101,32,112,101, + 114,109,105,115,115,105,111,110,115,32,102,111,114,32,97,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,46,114,85, + 0,0,0,233,128,0,0,0,41,3,114,74,0,0,0,114, + 76,0,0,0,114,75,0,0,0,41,2,114,64,0,0,0, + 114,77,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, + 240,1,0,0,115,12,0,0,0,0,2,2,1,14,1,14, + 1,10,3,8,1,114,138,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,3, + 0,0,0,115,68,0,0,0,100,6,135,0,102,1,100,2, + 100,3,132,9,125,1,122,10,116,0,106,1,125,2,87,0, + 110,28,4,0,116,2,107,10,114,52,1,0,1,0,1,0, + 100,4,100,5,132,0,125,2,89,0,110,2,88,0,124,2, + 124,1,136,0,131,2,1,0,124,1,83,0,41,7,122,252, + 68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114, + 105,102,121,32,116,104,97,116,32,116,104,101,32,109,111,100, + 117,108,101,32,98,101,105,110,103,32,114,101,113,117,101,115, + 116,101,100,32,109,97,116,99,104,101,115,32,116,104,101,32, + 111,110,101,32,116,104,101,10,32,32,32,32,108,111,97,100, + 101,114,32,99,97,110,32,104,97,110,100,108,101,46,10,10, + 32,32,32,32,84,104,101,32,102,105,114,115,116,32,97,114, + 103,117,109,101,110,116,32,40,115,101,108,102,41,32,109,117, + 115,116,32,100,101,102,105,110,101,32,95,110,97,109,101,32, + 119,104,105,99,104,32,116,104,101,32,115,101,99,111,110,100, + 32,97,114,103,117,109,101,110,116,32,105,115,10,32,32,32, + 32,99,111,109,112,97,114,101,100,32,97,103,97,105,110,115, + 116,46,32,73,102,32,116,104,101,32,99,111,109,112,97,114, + 105,115,111,110,32,102,97,105,108,115,32,116,104,101,110,32, + 73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,78,99,2,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,31,0,0,0,115,66,0,0,0,124,1,100,0,107, + 8,114,16,124,0,106,0,125,1,110,32,124,0,106,0,124, + 1,107,3,114,48,116,1,100,1,124,0,106,0,124,1,102, + 2,22,0,124,1,100,2,141,2,130,1,136,0,124,0,124, + 1,102,2,124,2,158,2,124,3,142,1,83,0,41,3,78, + 122,30,108,111,97,100,101,114,32,102,111,114,32,37,115,32, + 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, + 169,1,218,4,110,97,109,101,41,2,114,140,0,0,0,218, + 11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,4, + 115,101,108,102,114,140,0,0,0,218,4,97,114,103,115,218, + 6,107,119,97,114,103,115,169,1,218,6,109,101,116,104,111, + 100,114,10,0,0,0,114,11,0,0,0,218,19,95,99,104, + 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, + 4,2,0,0,115,18,0,0,0,0,1,8,1,8,1,10, + 1,4,1,8,255,2,1,2,255,6,2,122,40,95,99,104, + 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, + 62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114, + 97,112,112,101,114,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,7,0,0,0,83,0,0,0,115,56, + 0,0,0,100,1,68,0,93,32,125,2,116,0,124,1,124, + 2,131,2,114,4,116,1,124,0,124,2,116,2,124,1,124, + 2,131,2,131,3,1,0,113,4,124,0,106,3,160,4,124, + 1,106,3,161,1,1,0,100,0,83,0,41,2,78,41,4, + 218,10,95,95,109,111,100,117,108,101,95,95,218,8,95,95, + 110,97,109,101,95,95,218,12,95,95,113,117,97,108,110,97, + 109,101,95,95,218,7,95,95,100,111,99,95,95,41,5,218, + 7,104,97,115,97,116,116,114,218,7,115,101,116,97,116,116, + 114,218,7,103,101,116,97,116,116,114,218,8,95,95,100,105, + 99,116,95,95,218,6,117,112,100,97,116,101,41,3,90,3, + 110,101,119,90,3,111,108,100,114,83,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,5,95,119, + 114,97,112,15,2,0,0,115,8,0,0,0,0,1,8,1, + 10,1,20,1,122,26,95,99,104,101,99,107,95,110,97,109, + 101,46,60,108,111,99,97,108,115,62,46,95,119,114,97,112, + 41,1,78,41,3,218,10,95,98,111,111,116,115,116,114,97, + 112,114,157,0,0,0,218,9,78,97,109,101,69,114,114,111, + 114,41,3,114,146,0,0,0,114,147,0,0,0,114,157,0, + 0,0,114,10,0,0,0,114,145,0,0,0,114,11,0,0, + 0,218,11,95,99,104,101,99,107,95,110,97,109,101,252,1, + 0,0,115,14,0,0,0,0,8,14,7,2,1,10,1,14, + 2,14,5,10,1,114,160,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, + 0,0,0,115,60,0,0,0,124,0,160,0,124,1,161,1, + 92,2,125,2,125,3,124,2,100,1,107,8,114,56,116,1, + 124,3,131,1,114,56,100,2,125,4,116,2,160,3,124,4, + 160,4,124,3,100,3,25,0,161,1,116,5,161,2,1,0, + 124,2,83,0,41,4,122,155,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, + 111,100,117,108,101,32,98,121,32,100,101,108,101,103,97,116, + 105,110,103,32,116,111,10,32,32,32,32,115,101,108,102,46, + 102,105,110,100,95,108,111,97,100,101,114,40,41,46,10,10, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,105,110, + 32,102,97,118,111,114,32,111,102,32,102,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,40,41,46,10,10,32, + 32,32,32,78,122,44,78,111,116,32,105,109,112,111,114,116, + 105,110,103,32,100,105,114,101,99,116,111,114,121,32,123,125, + 58,32,109,105,115,115,105,110,103,32,95,95,105,110,105,116, + 95,95,114,0,0,0,0,41,6,218,11,102,105,110,100,95, + 108,111,97,100,101,114,114,6,0,0,0,114,97,0,0,0, + 114,98,0,0,0,114,87,0,0,0,218,13,73,109,112,111, + 114,116,87,97,114,110,105,110,103,41,5,114,142,0,0,0, + 218,8,102,117,108,108,110,97,109,101,218,6,108,111,97,100, + 101,114,218,8,112,111,114,116,105,111,110,115,218,3,109,115, + 103,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,17,95,102,105,110,100,95,109,111,100,117,108,101,95,115, + 104,105,109,24,2,0,0,115,10,0,0,0,0,10,14,1, + 16,1,4,1,22,1,114,167,0,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0, + 67,0,0,0,115,158,0,0,0,124,0,100,1,100,2,133, + 2,25,0,125,3,124,3,116,0,107,3,114,60,100,3,124, + 1,155,2,100,4,124,3,155,2,157,4,125,4,116,1,160, + 2,100,5,124,4,161,2,1,0,116,3,124,4,102,1,124, + 2,142,1,130,1,116,4,124,0,131,1,100,6,107,0,114, + 102,100,7,124,1,155,2,157,2,125,4,116,1,160,2,100, + 5,124,4,161,2,1,0,116,5,124,4,131,1,130,1,116, + 6,124,0,100,2,100,8,133,2,25,0,131,1,125,5,124, + 5,100,9,64,0,114,154,100,10,124,5,155,2,100,11,124, + 1,155,2,157,4,125,4,116,3,124,4,102,1,124,2,142, + 1,130,1,124,5,83,0,41,12,97,84,2,0,0,80,101, + 114,102,111,114,109,32,98,97,115,105,99,32,118,97,108,105, + 100,105,116,121,32,99,104,101,99,107,105,110,103,32,111,102, + 32,97,32,112,121,99,32,104,101,97,100,101,114,32,97,110, + 100,32,114,101,116,117,114,110,32,116,104,101,32,102,108,97, + 103,115,32,102,105,101,108,100,44,10,32,32,32,32,119,104, + 105,99,104,32,100,101,116,101,114,109,105,110,101,115,32,104, + 111,119,32,116,104,101,32,112,121,99,32,115,104,111,117,108, + 100,32,98,101,32,102,117,114,116,104,101,114,32,118,97,108, + 105,100,97,116,101,100,32,97,103,97,105,110,115,116,32,116, + 104,101,32,115,111,117,114,99,101,46,10,10,32,32,32,32, + 42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,111, + 110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,121, + 99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,104, + 101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,115, + 32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,101, + 100,44,32,116,104,111,117,103,104,46,41,10,10,32,32,32, + 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, + 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, + 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114, + 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42, + 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32, + 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115, + 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32, + 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100, + 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, + 109,97,103,105,99,32,110,117,109,98,101,114,32,105,115,32, + 105,110,99,111,114,114,101,99,116,32,111,114,32,119,104,101, + 110,32,116,104,101,32,102,108,97,103,115,10,32,32,32,32, + 102,105,101,108,100,32,105,115,32,105,110,118,97,108,105,100, + 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, + 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, + 101,32,116,114,117,110,99,97,116,101,100,46,10,10,32,32, + 32,32,78,114,32,0,0,0,122,20,98,97,100,32,109,97, + 103,105,99,32,110,117,109,98,101,114,32,105,110,32,122,2, + 58,32,250,2,123,125,233,16,0,0,0,122,40,114,101,97, + 99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114, + 101,97,100,105,110,103,32,112,121,99,32,104,101,97,100,101, + 114,32,111,102,32,233,8,0,0,0,233,252,255,255,255,122, + 14,105,110,118,97,108,105,100,32,102,108,97,103,115,32,122, + 4,32,105,110,32,41,7,218,12,77,65,71,73,67,95,78, + 85,77,66,69,82,114,158,0,0,0,218,16,95,118,101,114, + 98,111,115,101,95,109,101,115,115,97,103,101,114,141,0,0, + 0,114,6,0,0,0,218,8,69,79,70,69,114,114,111,114, + 114,43,0,0,0,41,6,114,42,0,0,0,114,140,0,0, + 0,218,11,101,120,99,95,100,101,116,97,105,108,115,90,5, + 109,97,103,105,99,114,116,0,0,0,114,106,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,13, + 95,99,108,97,115,115,105,102,121,95,112,121,99,41,2,0, + 0,115,28,0,0,0,0,16,12,1,8,1,16,1,12,1, + 12,1,12,1,10,1,12,1,8,1,16,2,8,1,16,1, + 12,1,114,176,0,0,0,99,5,0,0,0,0,0,0,0, + 0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,0, + 115,112,0,0,0,116,0,124,0,100,1,100,2,133,2,25, + 0,131,1,124,1,100,3,64,0,107,3,114,58,100,4,124, + 3,155,2,157,2,125,5,116,1,160,2,100,5,124,5,161, + 2,1,0,116,3,124,5,102,1,124,4,142,1,130,1,124, + 2,100,6,107,9,114,108,116,0,124,0,100,2,100,7,133, + 2,25,0,131,1,124,2,100,3,64,0,107,3,114,108,116, + 3,100,4,124,3,155,2,157,2,102,1,124,4,142,1,130, + 1,100,6,83,0,41,8,97,7,2,0,0,86,97,108,105, + 100,97,116,101,32,97,32,112,121,99,32,97,103,97,105,110, + 115,116,32,116,104,101,32,115,111,117,114,99,101,32,108,97, + 115,116,45,109,111,100,105,102,105,101,100,32,116,105,109,101, + 46,10,10,32,32,32,32,42,100,97,116,97,42,32,105,115, + 32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102, + 32,116,104,101,32,112,121,99,32,102,105,108,101,46,32,40, + 79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,49, + 54,32,98,121,116,101,115,32,97,114,101,10,32,32,32,32, + 114,101,113,117,105,114,101,100,46,41,10,10,32,32,32,32, + 42,115,111,117,114,99,101,95,109,116,105,109,101,42,32,105, + 115,32,116,104,101,32,108,97,115,116,32,109,111,100,105,102, + 105,101,100,32,116,105,109,101,115,116,97,109,112,32,111,102, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 46,10,10,32,32,32,32,42,115,111,117,114,99,101,95,115, + 105,122,101,42,32,105,115,32,78,111,110,101,32,111,114,32, + 116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32, + 115,111,117,114,99,101,32,102,105,108,101,32,105,110,32,98, + 121,116,101,115,46,10,10,32,32,32,32,42,110,97,109,101, 42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102, 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, 103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105, @@ -669,548 +808,510 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, 105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32, 32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103, - 103,105,110,103,46,10,10,32,32,32,32,73,109,112,111,114, + 103,105,110,103,46,10,10,32,32,32,32,65,110,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,32,105,102,32,116,104,101,32,98,121,116,101,99, + 111,100,101,32,105,115,32,115,116,97,108,101,46,10,10,32, + 32,32,32,114,170,0,0,0,233,12,0,0,0,114,31,0, + 0,0,122,22,98,121,116,101,99,111,100,101,32,105,115,32, + 115,116,97,108,101,32,102,111,114,32,114,168,0,0,0,78, + 114,169,0,0,0,41,4,114,43,0,0,0,114,158,0,0, + 0,114,173,0,0,0,114,141,0,0,0,41,6,114,42,0, + 0,0,218,12,115,111,117,114,99,101,95,109,116,105,109,101, + 218,11,115,111,117,114,99,101,95,115,105,122,101,114,140,0, + 0,0,114,175,0,0,0,114,116,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,23,95,118,97, + 108,105,100,97,116,101,95,116,105,109,101,115,116,97,109,112, + 95,112,121,99,74,2,0,0,115,16,0,0,0,0,19,24, + 1,10,1,12,1,12,1,8,1,22,255,2,2,114,180,0, + 0,0,99,4,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, + 124,0,100,1,100,2,133,2,25,0,124,1,107,3,114,34, + 116,0,100,3,124,2,155,2,157,2,102,1,124,3,142,1, + 130,1,100,4,83,0,41,5,97,243,1,0,0,86,97,108, + 105,100,97,116,101,32,97,32,104,97,115,104,45,98,97,115, + 101,100,32,112,121,99,32,98,121,32,99,104,101,99,107,105, + 110,103,32,116,104,101,32,114,101,97,108,32,115,111,117,114, + 99,101,32,104,97,115,104,32,97,103,97,105,110,115,116,32, + 116,104,101,32,111,110,101,32,105,110,10,32,32,32,32,116, + 104,101,32,112,121,99,32,104,101,97,100,101,114,46,10,10, + 32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,104, + 101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104, + 101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,108, + 121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,98, + 121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,113, + 117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,111, + 117,114,99,101,95,104,97,115,104,42,32,105,115,32,116,104, + 101,32,105,109,112,111,114,116,108,105,98,46,117,116,105,108, + 46,115,111,117,114,99,101,95,104,97,115,104,40,41,32,111, + 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,46,10,10,32,32,32,32,42,110,97,109,101,42,32,105, + 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104, + 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,105, + 109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,117, + 115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,46, + 10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,105, + 108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,110, + 97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,32, + 114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,105, + 109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,110, + 103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,114, 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 32,119,104,101,110,32,116,104,101,32,109,97,103,105,99,32, - 110,117,109,98,101,114,32,105,115,32,105,110,99,111,114,114, - 101,99,116,32,111,114,32,119,104,101,110,32,116,104,101,32, - 102,108,97,103,115,10,32,32,32,32,102,105,101,108,100,32, - 105,115,32,105,110,118,97,108,105,100,46,32,69,79,70,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, - 104,101,110,32,116,104,101,32,100,97,116,97,32,105,115,32, - 102,111,117,110,100,32,116,111,32,98,101,32,116,114,117,110, - 99,97,116,101,100,46,10,10,32,32,32,32,78,114,15,0, - 0,0,122,20,98,97,100,32,109,97,103,105,99,32,110,117, - 109,98,101,114,32,105,110,32,122,2,58,32,250,2,123,125, - 233,16,0,0,0,122,40,114,101,97,99,104,101,100,32,69, - 79,70,32,119,104,105,108,101,32,114,101,97,100,105,110,103, - 32,112,121,99,32,104,101,97,100,101,114,32,111,102,32,233, - 8,0,0,0,233,252,255,255,255,122,14,105,110,118,97,108, - 105,100,32,102,108,97,103,115,32,122,4,32,105,110,32,41, - 7,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, - 135,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109, - 101,115,115,97,103,101,114,118,0,0,0,114,22,0,0,0, - 218,8,69,79,70,69,114,114,111,114,114,27,0,0,0,41, - 6,114,26,0,0,0,114,117,0,0,0,218,11,101,120,99, - 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114, - 93,0,0,0,114,83,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,95,99,108,97,115,115, - 105,102,121,95,112,121,99,237,1,0,0,115,28,0,0,0, - 0,16,12,1,8,1,16,1,12,1,12,1,12,1,10,1, - 12,1,8,1,16,2,8,1,16,1,12,1,114,153,0,0, - 0,99,5,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,4,0,0,0,67,0,0,0,115,112,0,0,0,116, - 0,124,0,100,1,100,2,133,2,25,0,131,1,124,1,100, - 3,64,0,107,3,114,58,100,4,124,3,155,2,157,2,125, - 5,116,1,160,2,100,5,124,5,161,2,1,0,116,3,124, - 5,102,1,124,4,142,1,130,1,124,2,100,6,107,9,114, - 108,116,0,124,0,100,2,100,7,133,2,25,0,131,1,124, - 2,100,3,64,0,107,3,114,108,116,3,100,4,124,3,155, - 2,157,2,102,1,124,4,142,1,130,1,100,6,83,0,41, - 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, - 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, - 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, - 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, - 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, - 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, - 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, - 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, - 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, - 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, - 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, - 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, - 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, - 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, - 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, - 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, - 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, - 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, - 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, - 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, - 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, - 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, - 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, - 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, - 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, - 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, - 32,115,116,97,108,101,46,10,10,32,32,32,32,114,147,0, - 0,0,233,12,0,0,0,114,14,0,0,0,122,22,98,121, - 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, - 102,111,114,32,114,145,0,0,0,78,114,146,0,0,0,41, - 4,114,27,0,0,0,114,135,0,0,0,114,150,0,0,0, - 114,118,0,0,0,41,6,114,26,0,0,0,218,12,115,111, - 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, - 99,101,95,115,105,122,101,114,117,0,0,0,114,152,0,0, - 0,114,93,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,23,95,118,97,108,105,100,97,116,101, - 95,116,105,109,101,115,116,97,109,112,95,112,121,99,14,2, - 0,0,115,16,0,0,0,0,19,24,1,10,1,12,1,12, - 1,8,1,22,255,2,2,114,157,0,0,0,99,4,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,67,0,0,0,115,38,0,0,0,124,0,100,1,100,2, - 133,2,25,0,124,1,107,3,114,34,116,0,100,3,124,2, - 155,2,157,2,102,1,124,3,142,1,130,1,100,4,83,0, - 41,5,97,243,1,0,0,86,97,108,105,100,97,116,101,32, - 97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99, - 32,98,121,32,99,104,101,99,107,105,110,103,32,116,104,101, - 32,114,101,97,108,32,115,111,117,114,99,101,32,104,97,115, - 104,32,97,103,97,105,110,115,116,32,116,104,101,32,111,110, - 101,32,105,110,10,32,32,32,32,116,104,101,32,112,121,99, - 32,104,101,97,100,101,114,46,10,10,32,32,32,32,42,100, - 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116, - 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32, - 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32, - 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97, - 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46, - 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,104, - 97,115,104,42,32,105,115,32,116,104,101,32,105,109,112,111, - 114,116,108,105,98,46,117,116,105,108,46,115,111,117,114,99, - 101,95,104,97,115,104,40,41,32,111,102,32,116,104,101,32, - 115,111,117,114,99,101,32,102,105,108,101,46,10,10,32,32, - 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, - 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, - 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, - 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, - 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, - 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, - 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, - 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, - 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104, - 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116, - 97,108,101,46,10,10,32,32,32,32,114,147,0,0,0,114, - 146,0,0,0,122,46,104,97,115,104,32,105,110,32,98,121, - 116,101,99,111,100,101,32,100,111,101,115,110,39,116,32,109, - 97,116,99,104,32,104,97,115,104,32,111,102,32,115,111,117, - 114,99,101,32,78,41,1,114,118,0,0,0,41,4,114,26, - 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104, - 114,117,0,0,0,114,152,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,18,95,118,97,108,105, - 100,97,116,101,95,104,97,115,104,95,112,121,99,42,2,0, - 0,115,12,0,0,0,0,17,16,1,2,1,8,255,2,2, - 2,254,114,159,0,0,0,99,4,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, - 115,80,0,0,0,116,0,160,1,124,0,161,1,125,4,116, - 2,124,4,116,3,131,2,114,56,116,4,160,5,100,1,124, - 2,161,2,1,0,124,3,100,2,107,9,114,52,116,6,160, - 7,124,4,124,3,161,2,1,0,124,4,83,0,116,8,100, - 3,160,9,124,2,161,1,124,1,124,2,100,4,141,3,130, - 1,100,2,83,0,41,5,122,35,67,111,109,112,105,108,101, - 32,98,121,116,101,99,111,100,101,32,97,115,32,102,111,117, - 110,100,32,105,110,32,97,32,112,121,99,46,122,21,99,111, - 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, - 33,114,125,78,122,23,78,111,110,45,99,111,100,101,32,111, - 98,106,101,99,116,32,105,110,32,123,33,114,125,169,2,114, - 117,0,0,0,114,44,0,0,0,41,10,218,7,109,97,114, - 115,104,97,108,90,5,108,111,97,100,115,218,10,105,115,105, - 110,115,116,97,110,99,101,218,10,95,99,111,100,101,95,116, - 121,112,101,114,135,0,0,0,114,150,0,0,0,218,4,95, - 105,109,112,90,16,95,102,105,120,95,99,111,95,102,105,108, - 101,110,97,109,101,114,118,0,0,0,114,62,0,0,0,41, - 5,114,26,0,0,0,114,117,0,0,0,114,107,0,0,0, - 114,108,0,0,0,218,4,99,111,100,101,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,109, - 112,105,108,101,95,98,121,116,101,99,111,100,101,66,2,0, - 0,115,20,0,0,0,0,2,10,1,10,1,12,1,8,1, - 12,1,4,2,10,1,2,0,2,255,114,166,0,0,0,114, - 73,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0, - 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, - 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, - 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, - 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, - 161,1,1,0,124,3,83,0,41,2,122,43,80,114,111,100, - 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114, - 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115, - 101,100,32,112,121,99,46,114,73,0,0,0,41,6,218,9, - 98,121,116,101,97,114,114,97,121,114,149,0,0,0,218,6, - 101,120,116,101,110,100,114,20,0,0,0,114,161,0,0,0, - 218,5,100,117,109,112,115,41,4,114,165,0,0,0,218,5, - 109,116,105,109,101,114,156,0,0,0,114,26,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,22, - 95,99,111,100,101,95,116,111,95,116,105,109,101,115,116,97, - 109,112,95,112,121,99,79,2,0,0,115,12,0,0,0,0, - 2,8,1,14,1,14,1,14,1,16,1,114,171,0,0,0, - 84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,5,0,0,0,67,0,0,0,115,80,0,0,0,116, - 0,116,1,131,1,125,3,100,1,124,2,100,1,62,0,66, - 0,125,4,124,3,160,2,116,3,124,4,131,1,161,1,1, - 0,116,4,124,1,131,1,100,2,107,2,115,50,116,5,130, - 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116, - 6,160,7,124,0,161,1,161,1,1,0,124,3,83,0,41, - 3,122,38,80,114,111,100,117,99,101,32,116,104,101,32,100, - 97,116,97,32,102,111,114,32,97,32,104,97,115,104,45,98, - 97,115,101,100,32,112,121,99,46,114,39,0,0,0,114,147, - 0,0,0,41,8,114,167,0,0,0,114,149,0,0,0,114, - 168,0,0,0,114,20,0,0,0,114,22,0,0,0,114,23, - 0,0,0,114,161,0,0,0,114,169,0,0,0,41,5,114, - 165,0,0,0,114,158,0,0,0,90,7,99,104,101,99,107, - 101,100,114,26,0,0,0,114,83,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,17,95,99,111, - 100,101,95,116,111,95,104,97,115,104,95,112,121,99,89,2, - 0,0,115,14,0,0,0,0,2,8,1,12,1,14,1,16, - 1,10,1,16,1,114,172,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, - 0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1, - 116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4, - 124,2,161,1,125,3,116,1,160,5,100,2,100,3,161,2, - 125,4,124,4,160,6,124,0,160,6,124,3,100,1,25,0, - 161,1,161,1,83,0,41,4,122,121,68,101,99,111,100,101, - 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, - 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, - 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,85,110,105,118, - 101,114,115,97,108,32,110,101,119,108,105,110,101,32,115,117, - 112,112,111,114,116,32,105,115,32,117,115,101,100,32,105,110, - 32,116,104,101,32,100,101,99,111,100,105,110,103,46,10,32, - 32,32,32,114,73,0,0,0,78,84,41,7,218,8,116,111, - 107,101,110,105,122,101,114,64,0,0,0,90,7,66,121,116, - 101,115,73,79,90,8,114,101,97,100,108,105,110,101,90,15, - 100,101,116,101,99,116,95,101,110,99,111,100,105,110,103,90, - 25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, - 105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111, - 100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116, - 101,115,114,173,0,0,0,90,21,115,111,117,114,99,101,95, - 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, - 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, - 101,95,100,101,99,111,100,101,114,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101, - 95,115,111,117,114,99,101,100,2,0,0,115,10,0,0,0, - 0,5,8,1,12,1,10,1,12,1,114,177,0,0,0,169, - 2,114,141,0,0,0,218,26,115,117,98,109,111,100,117,108, - 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, - 110,115,99,2,0,0,0,0,0,0,0,2,0,0,0,9, - 0,0,0,8,0,0,0,67,0,0,0,115,16,1,0,0, - 124,1,100,1,107,8,114,60,100,2,125,1,116,0,124,2, - 100,3,131,2,114,70,122,14,124,2,160,1,124,0,161,1, - 125,1,87,0,113,70,4,0,116,2,107,10,114,56,1,0, - 1,0,1,0,89,0,113,70,88,0,110,10,116,3,160,4, - 124,1,161,1,125,1,116,5,106,6,124,0,124,2,124,1, - 100,4,141,3,125,4,100,5,124,4,95,7,124,2,100,1, - 107,8,114,154,116,8,131,0,68,0,93,42,92,2,125,5, - 125,6,124,1,160,9,116,10,124,6,131,1,161,1,114,106, - 124,5,124,0,124,1,131,2,125,2,124,2,124,4,95,11, - 1,0,113,154,113,106,100,1,83,0,124,3,116,12,107,8, - 114,220,116,0,124,2,100,6,131,2,114,226,122,14,124,2, - 160,13,124,0,161,1,125,7,87,0,110,20,4,0,116,2, - 107,10,114,206,1,0,1,0,1,0,89,0,113,226,88,0, - 124,7,114,226,103,0,124,4,95,14,110,6,124,3,124,4, - 95,14,124,4,106,14,103,0,107,2,144,1,114,12,124,1, - 144,1,114,12,116,15,124,1,131,1,100,7,25,0,125,8, - 124,4,106,14,160,16,124,8,161,1,1,0,124,4,83,0, - 41,8,97,61,1,0,0,82,101,116,117,114,110,32,97,32, - 109,111,100,117,108,101,32,115,112,101,99,32,98,97,115,101, - 100,32,111,110,32,97,32,102,105,108,101,32,108,111,99,97, - 116,105,111,110,46,10,10,32,32,32,32,84,111,32,105,110, - 100,105,99,97,116,101,32,116,104,97,116,32,116,104,101,32, - 109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107, - 97,103,101,44,32,115,101,116,10,32,32,32,32,115,117,98, - 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, - 99,97,116,105,111,110,115,32,116,111,32,97,32,108,105,115, - 116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,112, - 97,116,104,115,46,32,32,65,110,10,32,32,32,32,101,109, - 112,116,121,32,108,105,115,116,32,105,115,32,115,117,102,102, - 105,99,105,101,110,116,44,32,116,104,111,117,103,104,32,105, - 116,115,32,110,111,116,32,111,116,104,101,114,119,105,115,101, - 32,117,115,101,102,117,108,32,116,111,32,116,104,101,10,32, - 32,32,32,105,109,112,111,114,116,32,115,121,115,116,101,109, - 46,10,10,32,32,32,32,84,104,101,32,108,111,97,100,101, - 114,32,109,117,115,116,32,116,97,107,101,32,97,32,115,112, - 101,99,32,97,115,32,105,116,115,32,111,110,108,121,32,95, - 95,105,110,105,116,95,95,40,41,32,97,114,103,46,10,10, - 32,32,32,32,78,122,9,60,117,110,107,110,111,119,110,62, - 218,12,103,101,116,95,102,105,108,101,110,97,109,101,169,1, - 218,6,111,114,105,103,105,110,84,218,10,105,115,95,112,97, - 99,107,97,103,101,114,73,0,0,0,41,17,114,129,0,0, - 0,114,180,0,0,0,114,118,0,0,0,114,2,0,0,0, - 114,79,0,0,0,114,135,0,0,0,218,10,77,111,100,117, - 108,101,83,112,101,99,90,13,95,115,101,116,95,102,105,108, - 101,97,116,116,114,218,27,95,103,101,116,95,115,117,112,112, - 111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101, - 114,115,114,111,0,0,0,114,112,0,0,0,114,141,0,0, - 0,218,9,95,80,79,80,85,76,65,84,69,114,183,0,0, - 0,114,179,0,0,0,114,47,0,0,0,218,6,97,112,112, - 101,110,100,41,9,114,117,0,0,0,90,8,108,111,99,97, - 116,105,111,110,114,141,0,0,0,114,179,0,0,0,218,4, - 115,112,101,99,218,12,108,111,97,100,101,114,95,99,108,97, - 115,115,218,8,115,117,102,102,105,120,101,115,114,183,0,0, - 0,90,7,100,105,114,110,97,109,101,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,23,115,112,101,99,95, - 102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105, - 111,110,117,2,0,0,115,62,0,0,0,0,12,8,4,4, - 1,10,2,2,1,14,1,14,1,8,2,10,8,16,1,6, - 3,8,1,14,1,14,1,10,1,6,1,6,2,4,3,8, - 2,10,1,2,1,14,1,14,1,6,2,4,1,8,2,6, - 1,12,1,6,1,12,1,12,2,114,191,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,64,0,0,0,115,80,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,90,4,100,3,90,5, - 100,4,90,6,101,7,100,5,100,6,132,0,131,1,90,8, - 101,7,100,7,100,8,132,0,131,1,90,9,101,7,100,14, - 100,10,100,11,132,1,131,1,90,10,101,7,100,15,100,12, - 100,13,132,1,131,1,90,11,100,9,83,0,41,16,218,21, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, - 32,102,105,110,100,101,114,32,102,111,114,32,109,111,100,117, - 108,101,115,32,100,101,99,108,97,114,101,100,32,105,110,32, - 116,104,101,32,87,105,110,100,111,119,115,32,114,101,103,105, - 115,116,114,121,46,122,59,83,111,102,116,119,97,114,101,92, - 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, - 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, - 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, - 101,125,122,65,83,111,102,116,119,97,114,101,92,80,121,116, - 104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123, - 115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100, - 117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,92, - 68,101,98,117,103,70,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115, - 56,0,0,0,122,16,116,0,160,1,116,0,106,2,124,1, - 161,2,87,0,83,0,4,0,116,3,107,10,114,50,1,0, - 1,0,1,0,116,0,160,1,116,0,106,4,124,1,161,2, - 6,0,89,0,83,0,88,0,100,0,83,0,114,110,0,0, - 0,41,5,218,7,95,119,105,110,114,101,103,90,7,79,112, - 101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82, - 69,78,84,95,85,83,69,82,114,50,0,0,0,90,18,72, - 75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78, - 69,41,2,218,3,99,108,115,114,5,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,14,95,111, - 112,101,110,95,114,101,103,105,115,116,114,121,197,2,0,0, - 115,8,0,0,0,0,2,2,1,16,1,14,1,122,36,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,115, - 116,114,121,99,2,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,9,0,0,0,67,0,0,0,115,114,0,0, - 0,124,0,106,0,114,14,124,0,106,1,125,2,110,6,124, - 0,106,2,125,2,124,2,106,3,124,1,100,1,116,4,106, - 5,100,0,100,2,133,2,25,0,22,0,100,3,141,2,125, - 3,122,38,124,0,160,6,124,3,161,1,143,18,125,4,116, - 7,160,8,124,4,100,4,161,2,125,5,87,0,53,0,81, - 0,82,0,88,0,87,0,110,22,4,0,116,9,107,10,114, - 108,1,0,1,0,1,0,89,0,100,0,83,0,88,0,124, - 5,83,0,41,5,78,122,5,37,100,46,37,100,114,28,0, - 0,0,41,2,114,140,0,0,0,90,11,115,121,115,95,118, - 101,114,115,105,111,110,114,40,0,0,0,41,10,218,11,68, - 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, - 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, - 82,69,71,73,83,84,82,89,95,75,69,89,114,62,0,0, - 0,114,8,0,0,0,218,12,118,101,114,115,105,111,110,95, - 105,110,102,111,114,195,0,0,0,114,193,0,0,0,90,10, - 81,117,101,114,121,86,97,108,117,101,114,50,0,0,0,41, - 6,114,194,0,0,0,114,140,0,0,0,90,12,114,101,103, - 105,115,116,114,121,95,107,101,121,114,5,0,0,0,90,4, - 104,107,101,121,218,8,102,105,108,101,112,97,116,104,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,218,16,95, - 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,204, - 2,0,0,115,24,0,0,0,0,2,6,1,8,2,6,1, - 6,1,16,255,6,2,2,1,12,1,26,1,14,1,8,1, - 122,38,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,46,95,115,101,97,114,99,104,95, - 114,101,103,105,115,116,114,121,78,99,4,0,0,0,0,0, - 0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,0, - 0,0,115,122,0,0,0,124,0,160,0,124,1,161,1,125, - 4,124,4,100,0,107,8,114,22,100,0,83,0,122,12,116, - 1,124,4,131,1,1,0,87,0,110,22,4,0,116,2,107, - 10,114,56,1,0,1,0,1,0,89,0,100,0,83,0,88, - 0,116,3,131,0,68,0,93,52,92,2,125,5,125,6,124, - 4,160,4,116,5,124,6,131,1,161,1,114,64,116,6,106, - 7,124,1,124,5,124,1,124,4,131,2,124,4,100,1,141, - 3,125,7,124,7,2,0,1,0,83,0,113,64,100,0,83, - 0,41,2,78,114,181,0,0,0,41,8,114,201,0,0,0, - 114,49,0,0,0,114,50,0,0,0,114,185,0,0,0,114, - 111,0,0,0,114,112,0,0,0,114,135,0,0,0,218,16, - 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114, - 41,8,114,194,0,0,0,114,140,0,0,0,114,44,0,0, - 0,218,6,116,97,114,103,101,116,114,200,0,0,0,114,141, - 0,0,0,114,190,0,0,0,114,188,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,9,102,105, - 110,100,95,115,112,101,99,219,2,0,0,115,28,0,0,0, - 0,2,10,1,8,1,4,1,2,1,12,1,14,1,8,1, - 14,1,14,1,6,1,8,1,2,254,6,3,122,31,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, - 0,0,67,0,0,0,115,34,0,0,0,124,0,160,0,124, - 1,124,2,161,2,125,3,124,3,100,1,107,9,114,26,124, - 3,106,1,83,0,100,1,83,0,100,1,83,0,41,2,122, - 108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,109, - 101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,116, - 114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,169,2, - 114,204,0,0,0,114,141,0,0,0,169,4,114,194,0,0, - 0,114,140,0,0,0,114,44,0,0,0,114,188,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,235,2,0,0, - 115,8,0,0,0,0,7,12,1,8,1,6,2,122,33,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, - 41,2,78,78,41,1,78,41,12,114,126,0,0,0,114,125, - 0,0,0,114,127,0,0,0,114,128,0,0,0,114,198,0, - 0,0,114,197,0,0,0,114,196,0,0,0,218,11,99,108, - 97,115,115,109,101,116,104,111,100,114,195,0,0,0,114,201, - 0,0,0,114,204,0,0,0,114,207,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,192,0,0,0,185,2,0,0,115,28,0,0,0,8, - 2,4,3,2,255,2,4,2,255,2,3,4,2,2,1,10, - 6,2,1,10,14,2,1,12,15,2,1,114,192,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,64,0,0,0,115,48,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, - 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, - 90,6,100,8,100,9,132,0,90,7,100,10,83,0,41,11, - 218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,122, - 83,66,97,115,101,32,99,108,97,115,115,32,111,102,32,99, - 111,109,109,111,110,32,99,111,100,101,32,110,101,101,100,101, - 100,32,98,121,32,98,111,116,104,32,83,111,117,114,99,101, - 76,111,97,100,101,114,32,97,110,100,10,32,32,32,32,83, - 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, - 100,101,114,46,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,4,0,0,0,67,0,0,0,115,64,0, - 0,0,116,0,124,0,160,1,124,1,161,1,131,1,100,1, - 25,0,125,2,124,2,160,2,100,2,100,1,161,2,100,3, - 25,0,125,3,124,1,160,3,100,2,161,1,100,4,25,0, - 125,4,124,3,100,5,107,2,111,62,124,4,100,5,107,3, - 83,0,41,6,122,141,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101, - 99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32, - 32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110, - 101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97, - 109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109, - 101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112, - 121,39,46,114,39,0,0,0,114,71,0,0,0,114,73,0, - 0,0,114,28,0,0,0,218,8,95,95,105,110,105,116,95, - 95,41,4,114,47,0,0,0,114,180,0,0,0,114,43,0, - 0,0,114,41,0,0,0,41,5,114,119,0,0,0,114,140, - 0,0,0,114,97,0,0,0,90,13,102,105,108,101,110,97, - 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, - 109,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,183,0,0,0,254,2,0,0,115,8,0,0,0,0, - 3,18,1,16,1,14,1,122,24,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, - 1,83,0,169,2,122,42,85,115,101,32,100,101,102,97,117, - 108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114, - 32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110, - 46,78,114,3,0,0,0,169,2,114,119,0,0,0,114,188, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108, - 101,6,3,0,0,115,2,0,0,0,0,1,122,27,95,76, - 111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97, - 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0, - 0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161, - 1,125,2,124,2,100,1,107,8,114,36,116,2,100,2,160, - 3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116, - 6,124,2,124,1,106,7,161,3,1,0,100,1,83,0,41, - 3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109, - 111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32, - 108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125, - 32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41, - 32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218, - 8,103,101,116,95,99,111,100,101,114,126,0,0,0,114,118, - 0,0,0,114,62,0,0,0,114,135,0,0,0,218,25,95, - 99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115, - 95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,132, - 0,0,0,41,3,114,119,0,0,0,218,6,109,111,100,117, - 108,101,114,165,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,11,101,120,101,99,95,109,111,100, - 117,108,101,9,3,0,0,115,12,0,0,0,0,2,12,1, - 8,1,6,1,4,255,6,2,122,25,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0, - 0,116,0,160,1,124,0,124,1,161,2,83,0,41,1,122, - 26,84,104,105,115,32,109,111,100,117,108,101,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,41,2,114,135,0, - 0,0,218,17,95,108,111,97,100,95,109,111,100,117,108,101, - 95,115,104,105,109,169,2,114,119,0,0,0,114,140,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,11,108,111,97,100,95,109,111,100,117,108,101,17,3,0, - 0,115,2,0,0,0,0,2,122,25,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,108,111,97,100,95,109,111,100, - 117,108,101,78,41,8,114,126,0,0,0,114,125,0,0,0, - 114,127,0,0,0,114,128,0,0,0,114,183,0,0,0,114, - 213,0,0,0,114,218,0,0,0,114,221,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,209,0,0,0,249,2,0,0,115,10,0,0,0, - 8,2,4,3,8,8,8,3,8,8,114,209,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,64,0,0,0,115,74,0,0,0,101,0,90, - 1,100,0,90,2,100,1,100,2,132,0,90,3,100,3,100, - 4,132,0,90,4,100,5,100,6,132,0,90,5,100,7,100, - 8,132,0,90,6,100,9,100,10,132,0,90,7,100,11,100, - 12,156,1,100,13,100,14,132,2,90,8,100,15,100,16,132, - 0,90,9,100,17,83,0,41,18,218,12,83,111,117,114,99, - 101,76,111,97,100,101,114,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,8,0,0,0,116,0,130,1,100,1,83,0,41,2,122, - 165,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,116,104,97,116,32,114,101,116,117,114,110,115,32,116,104, - 101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116, - 105,109,101,32,40,97,110,32,105,110,116,41,32,102,111,114, - 32,116,104,101,10,32,32,32,32,32,32,32,32,115,112,101, - 99,105,102,105,101,100,32,112,97,116,104,32,40,97,32,115, - 116,114,41,46,10,10,32,32,32,32,32,32,32,32,82,97, - 105,115,101,115,32,79,83,69,114,114,111,114,32,119,104,101, - 110,32,116,104,101,32,112,97,116,104,32,99,97,110,110,111, - 116,32,98,101,32,104,97,110,100,108,101,100,46,10,32,32, - 32,32,32,32,32,32,78,41,1,114,50,0,0,0,169,2, - 114,119,0,0,0,114,44,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95, - 109,116,105,109,101,24,3,0,0,115,2,0,0,0,0,6, - 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, - 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,14,0,0,0,100,1,124,0,160,0,124,1,161, - 1,105,1,83,0,41,2,97,158,1,0,0,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,114,101,116,117, - 114,110,105,110,103,32,97,32,109,101,116,97,100,97,116,97, - 32,100,105,99,116,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,10,32,32,32,32,32,32,32,32, - 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, - 32,32,32,32,32,32,32,80,111,115,115,105,98,108,101,32, - 107,101,121,115,58,10,32,32,32,32,32,32,32,32,45,32, - 39,109,116,105,109,101,39,32,40,109,97,110,100,97,116,111, - 114,121,41,32,105,115,32,116,104,101,32,110,117,109,101,114, - 105,99,32,116,105,109,101,115,116,97,109,112,32,111,102,32, - 108,97,115,116,32,115,111,117,114,99,101,10,32,32,32,32, - 32,32,32,32,32,32,99,111,100,101,32,109,111,100,105,102, - 105,99,97,116,105,111,110,59,10,32,32,32,32,32,32,32, - 32,45,32,39,115,105,122,101,39,32,40,111,112,116,105,111, - 110,97,108,41,32,105,115,32,116,104,101,32,115,105,122,101, - 32,105,110,32,98,121,116,101,115,32,111,102,32,116,104,101, - 32,115,111,117,114,99,101,32,99,111,100,101,46,10,10,32, - 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, - 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, - 97,108,108,111,119,115,32,116,104,101,32,108,111,97,100,101, - 114,32,116,111,32,114,101,97,100,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32, + 32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,101, + 32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,32, + 114,170,0,0,0,114,169,0,0,0,122,46,104,97,115,104, + 32,105,110,32,98,121,116,101,99,111,100,101,32,100,111,101, + 115,110,39,116,32,109,97,116,99,104,32,104,97,115,104,32, + 111,102,32,115,111,117,114,99,101,32,78,41,1,114,141,0, + 0,0,41,4,114,42,0,0,0,218,11,115,111,117,114,99, + 101,95,104,97,115,104,114,140,0,0,0,114,175,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 18,95,118,97,108,105,100,97,116,101,95,104,97,115,104,95, + 112,121,99,102,2,0,0,115,12,0,0,0,0,17,16,1, + 2,1,8,255,2,2,2,254,114,182,0,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0, + 0,0,67,0,0,0,115,80,0,0,0,116,0,160,1,124, + 0,161,1,125,4,116,2,124,4,116,3,131,2,114,56,116, + 4,160,5,100,1,124,2,161,2,1,0,124,3,100,2,107, + 9,114,52,116,6,160,7,124,4,124,3,161,2,1,0,124, + 4,83,0,116,8,100,3,160,9,124,2,161,1,124,1,124, + 2,100,4,141,3,130,1,100,2,83,0,41,5,122,35,67, + 111,109,112,105,108,101,32,98,121,116,101,99,111,100,101,32, + 97,115,32,102,111,117,110,100,32,105,110,32,97,32,112,121, + 99,46,122,21,99,111,100,101,32,111,98,106,101,99,116,32, + 102,114,111,109,32,123,33,114,125,78,122,23,78,111,110,45, + 99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,123, + 33,114,125,169,2,114,140,0,0,0,114,64,0,0,0,41, + 10,218,7,109,97,114,115,104,97,108,90,5,108,111,97,100, + 115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,95, + 99,111,100,101,95,116,121,112,101,114,158,0,0,0,114,173, + 0,0,0,218,4,95,105,109,112,90,16,95,102,105,120,95, + 99,111,95,102,105,108,101,110,97,109,101,114,141,0,0,0, + 114,87,0,0,0,41,5,114,42,0,0,0,114,140,0,0, + 0,114,131,0,0,0,114,133,0,0,0,218,4,99,111,100, + 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,99, + 111,100,101,126,2,0,0,115,20,0,0,0,0,2,10,1, + 10,1,12,1,8,1,12,1,4,2,10,1,2,0,2,255, + 114,189,0,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,70, + 0,0,0,116,0,116,1,131,1,125,3,124,3,160,2,116, + 3,100,1,131,1,161,1,1,0,124,3,160,2,116,3,124, + 1,131,1,161,1,1,0,124,3,160,2,116,3,124,2,131, + 1,161,1,1,0,124,3,160,2,116,4,160,5,124,0,161, + 1,161,1,1,0,124,3,83,0,41,2,122,43,80,114,111, + 100,117,99,101,32,116,104,101,32,100,97,116,97,32,102,111, + 114,32,97,32,116,105,109,101,115,116,97,109,112,45,98,97, + 115,101,100,32,112,121,99,46,114,0,0,0,0,41,6,218, + 9,98,121,116,101,97,114,114,97,121,114,172,0,0,0,218, + 6,101,120,116,101,110,100,114,37,0,0,0,114,184,0,0, + 0,218,5,100,117,109,112,115,41,4,114,188,0,0,0,218, + 5,109,116,105,109,101,114,179,0,0,0,114,42,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 22,95,99,111,100,101,95,116,111,95,116,105,109,101,115,116, + 97,109,112,95,112,121,99,139,2,0,0,115,12,0,0,0, + 0,2,8,1,14,1,14,1,14,1,16,1,114,194,0,0, + 0,84,99,3,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,5,0,0,0,67,0,0,0,115,80,0,0,0, + 116,0,116,1,131,1,125,3,100,1,124,2,100,1,62,0, + 66,0,125,4,124,3,160,2,116,3,124,4,131,1,161,1, + 1,0,116,4,124,1,131,1,100,2,107,2,115,50,116,5, + 130,1,124,3,160,2,124,1,161,1,1,0,124,3,160,2, + 116,6,160,7,124,0,161,1,161,1,1,0,124,3,83,0, + 41,3,122,38,80,114,111,100,117,99,101,32,116,104,101,32, + 100,97,116,97,32,102,111,114,32,97,32,104,97,115,104,45, + 98,97,115,101,100,32,112,121,99,46,114,4,0,0,0,114, + 170,0,0,0,41,8,114,190,0,0,0,114,172,0,0,0, + 114,191,0,0,0,114,37,0,0,0,114,6,0,0,0,114, + 39,0,0,0,114,184,0,0,0,114,192,0,0,0,41,5, + 114,188,0,0,0,114,181,0,0,0,90,7,99,104,101,99, + 107,101,100,114,42,0,0,0,114,106,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,17,95,99, + 111,100,101,95,116,111,95,104,97,115,104,95,112,121,99,149, + 2,0,0,115,14,0,0,0,0,2,8,1,12,1,14,1, + 16,1,10,1,16,1,114,195,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0, + 67,0,0,0,115,62,0,0,0,100,1,100,2,108,0,125, + 1,116,1,160,2,124,0,161,1,106,3,125,2,124,1,160, + 4,124,2,161,1,125,3,116,1,160,5,100,2,100,3,161, + 2,125,4,124,4,160,6,124,0,160,6,124,3,100,1,25, + 0,161,1,161,1,83,0,41,4,122,121,68,101,99,111,100, + 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, + 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, + 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, + 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, + 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, + 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, + 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, + 32,32,32,32,114,0,0,0,0,78,84,41,7,218,8,116, + 111,107,101,110,105,122,101,114,89,0,0,0,90,7,66,121, + 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, + 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, + 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, + 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, + 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, + 116,101,115,114,196,0,0,0,90,21,115,111,117,114,99,101, + 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, + 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, + 110,101,95,100,101,99,111,100,101,114,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,13,100,101,99,111,100, + 101,95,115,111,117,114,99,101,160,2,0,0,115,10,0,0, + 0,0,5,8,1,12,1,10,1,12,1,114,200,0,0,0, + 169,2,114,164,0,0,0,218,26,115,117,98,109,111,100,117, + 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, + 111,110,115,99,2,0,0,0,0,0,0,0,2,0,0,0, + 9,0,0,0,8,0,0,0,67,0,0,0,115,72,1,0, + 0,124,1,100,1,107,8,114,60,100,2,125,1,116,0,124, + 2,100,3,131,2,114,118,122,14,124,2,160,1,124,0,161, + 1,125,1,87,0,113,118,4,0,116,2,107,10,114,56,1, + 0,1,0,1,0,89,0,113,118,88,0,110,58,116,3,160, + 4,124,1,161,1,125,1,116,5,124,1,131,1,115,118,122, + 18,116,6,116,3,160,7,161,0,124,1,131,2,125,1,87, + 0,110,20,4,0,116,8,107,10,114,116,1,0,1,0,1, + 0,89,0,110,2,88,0,116,9,106,10,124,0,124,2,124, + 1,100,4,141,3,125,4,100,5,124,4,95,11,124,2,100, + 1,107,8,114,202,116,12,131,0,68,0,93,42,92,2,125, + 5,125,6,124,1,160,13,116,14,124,6,131,1,161,1,114, + 154,124,5,124,0,124,1,131,2,125,2,124,2,124,4,95, + 15,1,0,113,202,113,154,100,1,83,0,124,3,116,16,107, + 8,144,1,114,20,116,0,124,2,100,6,131,2,144,1,114, + 26,122,14,124,2,160,17,124,0,161,1,125,7,87,0,110, + 22,4,0,116,2,107,10,144,1,114,4,1,0,1,0,1, + 0,89,0,110,14,88,0,124,7,144,1,114,26,103,0,124, + 4,95,18,110,6,124,3,124,4,95,18,124,4,106,18,103, + 0,107,2,144,1,114,68,124,1,144,1,114,68,116,19,124, + 1,131,1,100,7,25,0,125,8,124,4,106,18,160,20,124, + 8,161,1,1,0,124,4,83,0,41,8,97,61,1,0,0, + 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, + 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, + 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, + 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, + 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, + 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, + 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, + 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, + 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, + 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, + 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, + 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, + 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, + 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, + 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, + 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, + 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, + 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, + 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, + 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, + 60,117,110,107,110,111,119,110,62,218,12,103,101,116,95,102, + 105,108,101,110,97,109,101,169,1,218,6,111,114,105,103,105, + 110,84,218,10,105,115,95,112,97,99,107,97,103,101,114,0, + 0,0,0,41,21,114,152,0,0,0,114,203,0,0,0,114, + 141,0,0,0,114,21,0,0,0,114,101,0,0,0,114,84, + 0,0,0,114,66,0,0,0,114,80,0,0,0,114,75,0, + 0,0,114,158,0,0,0,218,10,77,111,100,117,108,101,83, + 112,101,99,90,13,95,115,101,116,95,102,105,108,101,97,116, + 116,114,218,27,95,103,101,116,95,115,117,112,112,111,114,116, + 101,100,95,102,105,108,101,95,108,111,97,100,101,114,115,114, + 57,0,0,0,114,135,0,0,0,114,164,0,0,0,218,9, + 95,80,79,80,85,76,65,84,69,114,206,0,0,0,114,202, + 0,0,0,114,73,0,0,0,114,60,0,0,0,41,9,114, + 140,0,0,0,90,8,108,111,99,97,116,105,111,110,114,164, + 0,0,0,114,202,0,0,0,218,4,115,112,101,99,218,12, + 108,111,97,100,101,114,95,99,108,97,115,115,218,8,115,117, + 102,102,105,120,101,115,114,206,0,0,0,90,7,100,105,114, + 110,97,109,101,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, + 105,108,101,95,108,111,99,97,116,105,111,110,177,2,0,0, + 115,72,0,0,0,0,12,8,4,4,1,10,2,2,1,14, + 1,14,1,8,2,10,1,8,1,2,1,18,1,14,1,6, + 8,16,1,6,3,8,1,14,1,14,1,10,1,6,1,6, + 2,4,3,10,2,12,1,2,1,14,1,16,1,6,2,6, + 1,8,2,6,1,12,1,6,1,12,1,12,2,114,213,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,64,0,0,0,115,80,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,90,4, + 100,3,90,5,100,4,90,6,101,7,100,5,100,6,132,0, + 131,1,90,8,101,7,100,7,100,8,132,0,131,1,90,9, + 101,7,100,14,100,10,100,11,132,1,131,1,90,10,101,7, + 100,15,100,12,100,13,132,1,131,1,90,11,100,9,83,0, + 41,16,218,21,87,105,110,100,111,119,115,82,101,103,105,115, + 116,114,121,70,105,110,100,101,114,122,62,77,101,116,97,32, + 112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,32, + 109,111,100,117,108,101,115,32,100,101,99,108,97,114,101,100, + 32,105,110,32,116,104,101,32,87,105,110,100,111,119,115,32, + 114,101,103,105,115,116,114,121,46,122,59,83,111,102,116,119, + 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, + 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, + 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, + 108,110,97,109,101,125,122,65,83,111,102,116,119,97,114,101, + 92,80,121,116,104,111,110,92,80,121,116,104,111,110,67,111, + 114,101,92,123,115,121,115,95,118,101,114,115,105,111,110,125, + 92,77,111,100,117,108,101,115,92,123,102,117,108,108,110,97, + 109,101,125,92,68,101,98,117,103,70,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,67, + 0,0,0,115,56,0,0,0,122,16,116,0,160,1,116,0, + 106,2,124,1,161,2,87,0,83,0,4,0,116,3,107,10, + 114,50,1,0,1,0,1,0,116,0,160,1,116,0,106,4, + 124,1,161,2,6,0,89,0,83,0,88,0,100,0,83,0, + 114,68,0,0,0,41,5,218,7,95,119,105,110,114,101,103, + 90,7,79,112,101,110,75,101,121,90,17,72,75,69,89,95, + 67,85,82,82,69,78,84,95,85,83,69,82,114,75,0,0, + 0,90,18,72,75,69,89,95,76,79,67,65,76,95,77,65, + 67,72,73,78,69,41,2,218,3,99,108,115,114,23,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,121, + 6,3,0,0,115,8,0,0,0,0,2,2,1,16,1,14, + 1,122,36,87,105,110,100,111,119,115,82,101,103,105,115,116, + 114,121,70,105,110,100,101,114,46,95,111,112,101,110,95,114, + 101,103,105,115,116,114,121,99,2,0,0,0,0,0,0,0, + 0,0,0,0,6,0,0,0,9,0,0,0,67,0,0,0, + 115,114,0,0,0,124,0,106,0,114,14,124,0,106,1,125, + 2,110,6,124,0,106,2,125,2,124,2,106,3,124,1,100, + 1,116,4,106,5,100,0,100,2,133,2,25,0,22,0,100, + 3,141,2,125,3,122,38,124,0,160,6,124,3,161,1,143, + 18,125,4,116,7,160,8,124,4,100,4,161,2,125,5,87, + 0,53,0,81,0,82,0,88,0,87,0,110,22,4,0,116, + 9,107,10,114,108,1,0,1,0,1,0,89,0,100,0,83, + 0,88,0,124,5,83,0,41,5,78,122,5,37,100,46,37, + 100,114,44,0,0,0,41,2,114,163,0,0,0,90,11,115, + 121,115,95,118,101,114,115,105,111,110,114,13,0,0,0,41, + 10,218,11,68,69,66,85,71,95,66,85,73,76,68,218,18, + 82,69,71,73,83,84,82,89,95,75,69,89,95,68,69,66, + 85,71,218,12,82,69,71,73,83,84,82,89,95,75,69,89, + 114,87,0,0,0,114,25,0,0,0,218,12,118,101,114,115, + 105,111,110,95,105,110,102,111,114,217,0,0,0,114,215,0, + 0,0,90,10,81,117,101,114,121,86,97,108,117,101,114,75, + 0,0,0,41,6,114,216,0,0,0,114,163,0,0,0,90, + 12,114,101,103,105,115,116,114,121,95,107,101,121,114,23,0, + 0,0,90,4,104,107,101,121,218,8,102,105,108,101,112,97, + 116,104,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,218,16,95,115,101,97,114,99,104,95,114,101,103,105,115, + 116,114,121,13,3,0,0,115,24,0,0,0,0,2,6,1, + 8,2,6,1,6,1,16,255,6,2,2,1,12,1,26,1, + 14,1,8,1,122,38,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, + 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, + 0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0, + 0,0,67,0,0,0,115,122,0,0,0,124,0,160,0,124, + 1,161,1,125,4,124,4,100,0,107,8,114,22,100,0,83, + 0,122,12,116,1,124,4,131,1,1,0,87,0,110,22,4, + 0,116,2,107,10,114,56,1,0,1,0,1,0,89,0,100, + 0,83,0,88,0,116,3,131,0,68,0,93,52,92,2,125, + 5,125,6,124,4,160,4,116,5,124,6,131,1,161,1,114, + 64,116,6,106,7,124,1,124,5,124,1,124,4,131,2,124, + 4,100,1,141,3,125,7,124,7,2,0,1,0,83,0,113, + 64,100,0,83,0,41,2,78,114,204,0,0,0,41,8,114, + 223,0,0,0,114,74,0,0,0,114,75,0,0,0,114,208, + 0,0,0,114,57,0,0,0,114,135,0,0,0,114,158,0, + 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, + 97,100,101,114,41,8,114,216,0,0,0,114,163,0,0,0, + 114,64,0,0,0,218,6,116,97,114,103,101,116,114,222,0, + 0,0,114,164,0,0,0,114,212,0,0,0,114,210,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,9,102,105,110,100,95,115,112,101,99,28,3,0,0,115, + 28,0,0,0,0,2,10,1,8,1,4,1,2,1,12,1, + 14,1,8,1,14,1,14,1,6,1,8,1,2,254,6,3, + 122,31,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,124, + 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,107, + 9,114,26,124,3,106,1,83,0,100,1,83,0,100,1,83, + 0,41,2,122,108,70,105,110,100,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,105,110,32,116,104,101,32,114,101, + 103,105,115,116,114,121,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,169,2,114,226,0,0,0,114,164,0,0,0,169,4, + 114,216,0,0,0,114,163,0,0,0,114,64,0,0,0,114, + 210,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, + 44,3,0,0,115,8,0,0,0,0,7,12,1,8,1,6, + 2,122,33,87,105,110,100,111,119,115,82,101,103,105,115,116, + 114,121,70,105,110,100,101,114,46,102,105,110,100,95,109,111, + 100,117,108,101,41,2,78,78,41,1,78,41,12,114,149,0, + 0,0,114,148,0,0,0,114,150,0,0,0,114,151,0,0, + 0,114,220,0,0,0,114,219,0,0,0,114,218,0,0,0, + 218,11,99,108,97,115,115,109,101,116,104,111,100,114,217,0, + 0,0,114,223,0,0,0,114,226,0,0,0,114,229,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,214,0,0,0,250,2,0,0,115,28, + 0,0,0,8,2,4,3,2,255,2,4,2,255,2,3,4, + 2,2,1,10,6,2,1,10,14,2,1,12,15,2,1,114, + 214,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,64,0,0,0,115,48,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,10, + 83,0,41,11,218,13,95,76,111,97,100,101,114,66,97,115, + 105,99,115,122,83,66,97,115,101,32,99,108,97,115,115,32, + 111,102,32,99,111,109,109,111,110,32,99,111,100,101,32,110, + 101,101,100,101,100,32,98,121,32,98,111,116,104,32,83,111, + 117,114,99,101,76,111,97,100,101,114,32,97,110,100,10,32, + 32,32,32,83,111,117,114,99,101,108,101,115,115,70,105,108, + 101,76,111,97,100,101,114,46,99,2,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,64,0,0,0,116,0,124,0,160,1,124,1,161,1, + 131,1,100,1,25,0,125,2,124,2,160,2,100,2,100,1, + 161,2,100,3,25,0,125,3,124,1,160,3,100,2,161,1, + 100,4,25,0,125,4,124,3,100,5,107,2,111,62,124,4, + 100,5,107,3,83,0,41,6,122,141,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,121, + 32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,32, + 32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,101, + 116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,105, + 108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,108, + 101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,116, + 95,95,46,112,121,39,46,114,4,0,0,0,114,95,0,0, + 0,114,0,0,0,0,114,44,0,0,0,218,8,95,95,105, + 110,105,116,95,95,41,4,114,73,0,0,0,114,203,0,0, + 0,114,124,0,0,0,114,102,0,0,0,41,5,114,142,0, + 0,0,114,163,0,0,0,114,119,0,0,0,90,13,102,105, + 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, + 108,95,110,97,109,101,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,206,0,0,0,63,3,0,0,115,8, + 0,0,0,0,3,18,1,16,1,14,1,122,24,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,169,2,122,42,85,115,101,32,100, + 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, + 116,105,111,110,46,78,114,10,0,0,0,169,2,114,142,0, + 0,0,114,210,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,13,99,114,101,97,116,101,95,109, + 111,100,117,108,101,71,3,0,0,115,2,0,0,0,0,1, + 122,27,95,76,111,97,100,101,114,66,97,115,105,99,115,46, + 99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,5,0, + 0,0,67,0,0,0,115,56,0,0,0,124,0,160,0,124, + 1,106,1,161,1,125,2,124,2,100,1,107,8,114,36,116, + 2,100,2,160,3,124,1,106,1,161,1,131,1,130,1,116, + 4,160,5,116,6,124,2,124,1,106,7,161,3,1,0,100, + 1,83,0,41,3,122,19,69,120,101,99,117,116,101,32,116, + 104,101,32,109,111,100,117,108,101,46,78,122,52,99,97,110, + 110,111,116,32,108,111,97,100,32,109,111,100,117,108,101,32, + 123,33,114,125,32,119,104,101,110,32,103,101,116,95,99,111, + 100,101,40,41,32,114,101,116,117,114,110,115,32,78,111,110, + 101,41,8,218,8,103,101,116,95,99,111,100,101,114,149,0, + 0,0,114,141,0,0,0,114,87,0,0,0,114,158,0,0, + 0,218,25,95,99,97,108,108,95,119,105,116,104,95,102,114, + 97,109,101,115,95,114,101,109,111,118,101,100,218,4,101,120, + 101,99,114,155,0,0,0,41,3,114,142,0,0,0,218,6, + 109,111,100,117,108,101,114,188,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,11,101,120,101,99, + 95,109,111,100,117,108,101,74,3,0,0,115,12,0,0,0, + 0,2,12,1,8,1,6,1,4,255,6,2,122,25,95,76, + 111,97,100,101,114,66,97,115,105,99,115,46,101,120,101,99, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,4,0,0,0,67,0,0,0, + 115,12,0,0,0,116,0,160,1,124,0,124,1,161,2,83, + 0,41,1,122,26,84,104,105,115,32,109,111,100,117,108,101, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,41, + 2,114,158,0,0,0,218,17,95,108,111,97,100,95,109,111, + 100,117,108,101,95,115,104,105,109,169,2,114,142,0,0,0, + 114,163,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108, + 101,82,3,0,0,115,2,0,0,0,0,2,122,25,95,76, + 111,97,100,101,114,66,97,115,105,99,115,46,108,111,97,100, + 95,109,111,100,117,108,101,78,41,8,114,149,0,0,0,114, + 148,0,0,0,114,150,0,0,0,114,151,0,0,0,114,206, + 0,0,0,114,235,0,0,0,114,240,0,0,0,114,243,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,231,0,0,0,58,3,0,0,115, + 10,0,0,0,8,2,4,3,8,8,8,3,8,8,114,231, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,74,0,0, + 0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,90, + 3,100,3,100,4,132,0,90,4,100,5,100,6,132,0,90, + 5,100,7,100,8,132,0,90,6,100,9,100,10,132,0,90, + 7,100,11,100,12,156,1,100,13,100,14,132,2,90,8,100, + 15,100,16,132,0,90,9,100,17,83,0,41,18,218,12,83, + 111,117,114,99,101,76,111,97,100,101,114,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,8,0,0,0,116,0,130,1,100,1,83, + 0,41,2,122,165,79,112,116,105,111,110,97,108,32,109,101, + 116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110, + 115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105, + 111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41, + 32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32, + 32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,32, + 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, 32,32,82,97,105,115,101,115,32,79,83,69,114,114,111,114, 32,119,104,101,110,32,116,104,101,32,112,97,116,104,32,99, 97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,100, - 46,10,32,32,32,32,32,32,32,32,114,170,0,0,0,41, - 1,114,224,0,0,0,114,223,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,10,112,97,116,104, - 95,115,116,97,116,115,32,3,0,0,115,2,0,0,0,0, - 12,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, - 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3, - 161,2,83,0,41,1,122,228,79,112,116,105,111,110,97,108, + 46,10,32,32,32,32,32,32,32,32,78,41,1,114,75,0, + 0,0,169,2,114,142,0,0,0,114,64,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,10,112, + 97,116,104,95,109,116,105,109,101,89,3,0,0,115,2,0, + 0,0,0,6,122,23,83,111,117,114,99,101,76,111,97,100, + 101,114,46,112,97,116,104,95,109,116,105,109,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,67,0,0,0,115,14,0,0,0,100,1,124,0,160, + 0,124,1,161,1,105,1,83,0,41,2,97,158,1,0,0, + 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, + 114,101,116,117,114,110,105,110,103,32,97,32,109,101,116,97, + 100,97,116,97,32,100,105,99,116,32,102,111,114,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,10,32,32,32,32, + 32,32,32,32,112,97,116,104,32,40,97,32,115,116,114,41, + 46,10,10,32,32,32,32,32,32,32,32,80,111,115,115,105, + 98,108,101,32,107,101,121,115,58,10,32,32,32,32,32,32, + 32,32,45,32,39,109,116,105,109,101,39,32,40,109,97,110, + 100,97,116,111,114,121,41,32,105,115,32,116,104,101,32,110, + 117,109,101,114,105,99,32,116,105,109,101,115,116,97,109,112, + 32,111,102,32,108,97,115,116,32,115,111,117,114,99,101,10, + 32,32,32,32,32,32,32,32,32,32,99,111,100,101,32,109, + 111,100,105,102,105,99,97,116,105,111,110,59,10,32,32,32, + 32,32,32,32,32,45,32,39,115,105,122,101,39,32,40,111, + 112,116,105,111,110,97,108,41,32,105,115,32,116,104,101,32, + 115,105,122,101,32,105,110,32,98,121,116,101,115,32,111,102, + 32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101, + 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, + 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, + 104,111,100,32,97,108,108,111,119,115,32,116,104,101,32,108, + 111,97,100,101,114,32,116,111,32,114,101,97,100,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, + 32,32,32,32,32,32,82,97,105,115,101,115,32,79,83,69, + 114,114,111,114,32,119,104,101,110,32,116,104,101,32,112,97, + 116,104,32,99,97,110,110,111,116,32,98,101,32,104,97,110, + 100,108,101,100,46,10,32,32,32,32,32,32,32,32,114,193, + 0,0,0,41,1,114,246,0,0,0,114,245,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,97,3,0,0,115,2, + 0,0,0,0,12,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, + 0,0,0,67,0,0,0,115,12,0,0,0,124,0,160,0, + 124,2,124,3,161,2,83,0,41,1,122,228,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, + 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, + 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, + 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, + 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, + 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, + 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, + 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, + 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, + 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, + 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,142, + 0,0,0,114,133,0,0,0,90,10,99,97,99,104,101,95, + 112,97,116,104,114,42,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,15,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,111,3,0,0,115,2,0, + 0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,99,3,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,1,83,0,41,2,122,150,79,112,116,105,111,110,97,108, 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, @@ -1219,1516 +1320,1507 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, - 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, - 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, - 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, - 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, - 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, - 115,101,116,95,100,97,116,97,41,4,114,119,0,0,0,114, - 108,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, - 114,26,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,46,3,0,0,115,2,0,0,0,0,8, - 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, - 41,2,122,150,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, - 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, - 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, - 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, - 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, - 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, - 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, - 46,10,32,32,32,32,32,32,32,32,78,114,3,0,0,0, - 41,3,114,119,0,0,0,114,44,0,0,0,114,26,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,226,0,0,0,56,3,0,0,115,2,0,0,0,0,1, - 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,115, - 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,10,0,0,0,67,0,0,0, - 115,82,0,0,0,124,0,160,0,124,1,161,1,125,2,122, - 14,124,0,160,1,124,2,161,1,125,3,87,0,110,48,4, - 0,116,2,107,10,114,72,1,0,125,4,1,0,122,18,116, - 3,100,1,124,1,100,2,141,2,124,4,130,2,87,0,53, - 0,100,3,125,4,126,4,88,0,89,0,110,2,88,0,116, - 4,124,3,131,1,83,0,41,4,122,52,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, - 100,101,114,46,103,101,116,95,115,111,117,114,99,101,46,122, - 39,115,111,117,114,99,101,32,110,111,116,32,97,118,97,105, - 108,97,98,108,101,32,116,104,114,111,117,103,104,32,103,101, - 116,95,100,97,116,97,40,41,114,116,0,0,0,78,41,5, - 114,180,0,0,0,218,8,103,101,116,95,100,97,116,97,114, - 50,0,0,0,114,118,0,0,0,114,177,0,0,0,41,5, - 114,119,0,0,0,114,140,0,0,0,114,44,0,0,0,114, - 175,0,0,0,218,3,101,120,99,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,10,103,101,116,95,115,111, - 117,114,99,101,63,3,0,0,115,20,0,0,0,0,2,10, - 1,2,1,14,1,16,1,4,1,2,255,4,1,2,255,20, - 2,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, - 103,101,116,95,115,111,117,114,99,101,114,105,0,0,0,41, - 1,218,9,95,111,112,116,105,109,105,122,101,99,3,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,8,0,0, - 0,67,0,0,0,115,22,0,0,0,116,0,106,1,116,2, - 124,1,124,2,100,1,100,2,124,3,100,3,141,6,83,0, - 41,4,122,130,82,101,116,117,114,110,32,116,104,101,32,99, - 111,100,101,32,111,98,106,101,99,116,32,99,111,109,112,105, - 108,101,100,32,102,114,111,109,32,115,111,117,114,99,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,101,32,39,100, - 97,116,97,39,32,97,114,103,117,109,101,110,116,32,99,97, - 110,32,98,101,32,97,110,121,32,111,98,106,101,99,116,32, - 116,121,112,101,32,116,104,97,116,32,99,111,109,112,105,108, - 101,40,41,32,115,117,112,112,111,114,116,115,46,10,32,32, - 32,32,32,32,32,32,114,216,0,0,0,84,41,2,218,12, - 100,111,110,116,95,105,110,104,101,114,105,116,114,84,0,0, - 0,41,3,114,135,0,0,0,114,215,0,0,0,218,7,99, - 111,109,112,105,108,101,41,4,114,119,0,0,0,114,26,0, - 0,0,114,44,0,0,0,114,231,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,14,115,111,117, - 114,99,101,95,116,111,95,99,111,100,101,73,3,0,0,115, - 8,0,0,0,0,5,12,1,2,0,2,255,122,27,83,111, - 117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,15,0,0,0,9,0,0,0,67,0, - 0,0,115,34,2,0,0,124,0,160,0,124,1,161,1,125, - 2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125, - 6,100,3,125,7,122,12,116,1,124,2,131,1,125,8,87, - 0,110,26,4,0,116,2,107,10,114,68,1,0,1,0,1, - 0,100,1,125,8,89,0,144,1,110,48,88,0,122,14,124, - 0,160,3,124,2,161,1,125,9,87,0,110,22,4,0,116, - 4,107,10,114,106,1,0,1,0,1,0,89,0,144,1,110, - 10,88,0,116,5,124,9,100,4,25,0,131,1,125,3,122, - 14,124,0,160,6,124,8,161,1,125,10,87,0,110,20,4, - 0,116,4,107,10,114,154,1,0,1,0,1,0,89,0,110, - 218,88,0,124,1,124,8,100,5,156,2,125,11,122,148,116, - 7,124,10,124,1,124,11,131,3,125,12,116,8,124,10,131, - 1,100,6,100,1,133,2,25,0,125,13,124,12,100,7,64, - 0,100,8,107,3,125,6,124,6,144,1,114,36,124,12,100, - 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107, - 3,144,1,114,56,124,7,115,254,116,9,106,10,100,11,107, - 2,144,1,114,56,124,0,160,6,124,2,161,1,125,4,116, - 9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124, - 5,124,1,124,11,131,4,1,0,110,20,116,14,124,10,124, - 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87, - 0,110,26,4,0,116,15,116,16,102,2,107,10,144,1,114, - 84,1,0,1,0,1,0,89,0,110,32,88,0,116,17,160, - 18,100,13,124,8,124,2,161,3,1,0,116,19,124,13,124, - 1,124,8,124,2,100,14,141,4,83,0,124,4,100,1,107, - 8,144,1,114,136,124,0,160,6,124,2,161,1,125,4,124, - 0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,100, - 15,124,2,161,2,1,0,116,21,106,22,144,2,115,30,124, - 8,100,1,107,9,144,2,114,30,124,3,100,1,107,9,144, - 2,114,30,124,6,144,1,114,228,124,5,100,1,107,8,144, - 1,114,214,116,9,160,11,124,4,161,1,125,5,116,23,124, - 14,124,5,124,7,131,3,125,10,110,16,116,24,124,14,124, - 3,116,25,124,4,131,1,131,3,125,10,122,18,124,0,160, - 26,124,2,124,8,124,10,161,3,1,0,87,0,110,22,4, - 0,116,2,107,10,144,2,114,28,1,0,1,0,1,0,89, - 0,110,2,88,0,124,14,83,0,41,16,122,190,67,111,110, - 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,46,10, - 10,32,32,32,32,32,32,32,32,82,101,97,100,105,110,103, - 32,111,102,32,98,121,116,101,99,111,100,101,32,114,101,113, - 117,105,114,101,115,32,112,97,116,104,95,115,116,97,116,115, - 32,116,111,32,98,101,32,105,109,112,108,101,109,101,110,116, - 101,100,46,32,84,111,32,119,114,105,116,101,10,32,32,32, - 32,32,32,32,32,98,121,116,101,99,111,100,101,44,32,115, - 101,116,95,100,97,116,97,32,109,117,115,116,32,97,108,115, - 111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,100, - 46,10,10,32,32,32,32,32,32,32,32,78,70,84,114,170, - 0,0,0,114,160,0,0,0,114,146,0,0,0,114,39,0, - 0,0,114,73,0,0,0,114,28,0,0,0,90,5,110,101, - 118,101,114,90,6,97,108,119,97,121,115,218,4,115,105,122, - 101,122,13,123,125,32,109,97,116,99,104,101,115,32,123,125, - 41,3,114,117,0,0,0,114,107,0,0,0,114,108,0,0, - 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102, - 114,111,109,32,123,125,41,27,114,180,0,0,0,114,98,0, - 0,0,114,82,0,0,0,114,225,0,0,0,114,50,0,0, - 0,114,17,0,0,0,114,228,0,0,0,114,153,0,0,0, - 218,10,109,101,109,111,114,121,118,105,101,119,114,164,0,0, - 0,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97, - 115,101,100,95,112,121,99,115,114,158,0,0,0,218,17,95, - 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, - 114,159,0,0,0,114,157,0,0,0,114,118,0,0,0,114, - 151,0,0,0,114,135,0,0,0,114,150,0,0,0,114,166, - 0,0,0,114,234,0,0,0,114,8,0,0,0,218,19,100, - 111,110,116,95,119,114,105,116,101,95,98,121,116,101,99,111, - 100,101,114,172,0,0,0,114,171,0,0,0,114,22,0,0, - 0,114,227,0,0,0,41,15,114,119,0,0,0,114,140,0, - 0,0,114,108,0,0,0,114,155,0,0,0,114,175,0,0, - 0,114,158,0,0,0,90,10,104,97,115,104,95,98,97,115, - 101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101, - 114,107,0,0,0,218,2,115,116,114,26,0,0,0,114,152, - 0,0,0,114,83,0,0,0,90,10,98,121,116,101,115,95, - 100,97,116,97,90,11,99,111,100,101,95,111,98,106,101,99, - 116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,214,0,0,0,81,3,0,0,115,152,0,0,0,0,7, - 10,1,4,1,4,1,4,1,4,1,4,1,2,1,12,1, - 14,1,12,2,2,1,14,1,14,1,8,2,12,1,2,1, - 14,1,14,1,6,3,2,1,2,254,6,4,2,1,12,1, - 16,1,12,1,6,1,12,1,12,1,2,255,2,2,8,254, - 4,3,10,1,4,1,2,1,2,254,4,4,8,1,2,255, - 6,3,2,1,2,1,2,1,6,1,2,1,2,251,8,7, - 20,1,6,2,8,1,2,255,4,2,6,1,2,1,2,254, - 6,3,10,1,10,1,12,1,12,1,18,1,6,255,4,2, - 6,1,10,1,10,1,14,2,6,1,6,255,4,2,2,1, - 18,1,16,1,6,1,122,21,83,111,117,114,99,101,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,78,41,10, - 114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114, - 224,0,0,0,114,225,0,0,0,114,227,0,0,0,114,226, - 0,0,0,114,230,0,0,0,114,234,0,0,0,114,214,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,222,0,0,0,22,3,0,0,115, - 14,0,0,0,8,2,8,8,8,14,8,10,8,7,8,10, - 14,8,114,222,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, - 115,124,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100, - 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, - 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, - 14,100,15,132,0,131,1,90,11,100,16,100,17,132,0,90, - 12,100,18,100,19,132,0,90,13,100,20,100,21,132,0,90, - 14,100,22,100,23,132,0,90,15,135,0,4,0,90,16,83, - 0,41,24,218,10,70,105,108,101,76,111,97,100,101,114,122, - 103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101, - 114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109, - 112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97, - 100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116, - 104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101, - 113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101, - 109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, - 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, - 95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32, - 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, - 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, - 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, - 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, - 110,100,101,114,46,78,114,160,0,0,0,41,3,114,119,0, - 0,0,114,140,0,0,0,114,44,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,210,0,0,0, - 171,3,0,0,115,4,0,0,0,0,3,6,1,122,19,70, - 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,24,0,0,0, - 124,0,106,0,124,1,106,0,107,2,111,22,124,0,106,1, - 124,1,106,1,107,2,83,0,114,110,0,0,0,169,2,218, - 9,95,95,99,108,97,115,115,95,95,114,132,0,0,0,169, - 2,114,119,0,0,0,90,5,111,116,104,101,114,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,6,95,95, - 101,113,95,95,177,3,0,0,115,6,0,0,0,0,1,12, - 1,10,255,122,17,70,105,108,101,76,111,97,100,101,114,46, - 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, - 106,2,131,1,65,0,83,0,114,110,0,0,0,169,3,218, - 4,104,97,115,104,114,117,0,0,0,114,44,0,0,0,169, - 1,114,119,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,8,95,95,104,97,115,104,95,95,181, - 3,0,0,115,2,0,0,0,0,1,122,19,70,105,108,101, - 76,111,97,100,101,114,46,95,95,104,97,115,104,95,95,99, + 105,108,101,115,46,10,32,32,32,32,32,32,32,32,78,114, + 10,0,0,0,41,3,114,142,0,0,0,114,64,0,0,0, + 114,42,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,248,0,0,0,121,3,0,0,115,2,0, + 0,0,0,1,122,21,83,111,117,114,99,101,76,111,97,100, + 101,114,46,115,101,116,95,100,97,116,97,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,10,0,0,0, + 67,0,0,0,115,82,0,0,0,124,0,160,0,124,1,161, + 1,125,2,122,14,124,0,160,1,124,2,161,1,125,3,87, + 0,110,48,4,0,116,2,107,10,114,72,1,0,125,4,1, + 0,122,18,116,3,100,1,124,1,100,2,141,2,124,4,130, + 2,87,0,53,0,100,3,125,4,126,4,88,0,89,0,110, + 2,88,0,116,4,124,3,131,1,83,0,41,4,122,52,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, + 116,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,46,122,39,115,111,117,114,99,101,32,110,111,116,32, + 97,118,97,105,108,97,98,108,101,32,116,104,114,111,117,103, + 104,32,103,101,116,95,100,97,116,97,40,41,114,139,0,0, + 0,78,41,5,114,203,0,0,0,218,8,103,101,116,95,100, + 97,116,97,114,75,0,0,0,114,141,0,0,0,114,200,0, + 0,0,41,5,114,142,0,0,0,114,163,0,0,0,114,64, + 0,0,0,114,198,0,0,0,218,3,101,120,99,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,10,103,101, + 116,95,115,111,117,114,99,101,128,3,0,0,115,20,0,0, + 0,0,2,10,1,2,1,14,1,16,1,4,1,2,255,4, + 1,2,255,20,2,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,103,101,116,95,115,111,117,114,99,101,114,129, + 0,0,0,41,1,218,9,95,111,112,116,105,109,105,122,101, + 99,3,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,8,0,0,0,67,0,0,0,115,22,0,0,0,116,0, + 106,1,116,2,124,1,124,2,100,1,100,2,124,3,100,3, + 141,6,83,0,41,4,122,130,82,101,116,117,114,110,32,116, + 104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,99, + 111,109,112,105,108,101,100,32,102,114,111,109,32,115,111,117, + 114,99,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,39,100,97,116,97,39,32,97,114,103,117,109,101,110, + 116,32,99,97,110,32,98,101,32,97,110,121,32,111,98,106, + 101,99,116,32,116,121,112,101,32,116,104,97,116,32,99,111, + 109,112,105,108,101,40,41,32,115,117,112,112,111,114,116,115, + 46,10,32,32,32,32,32,32,32,32,114,238,0,0,0,84, + 41,2,218,12,100,111,110,116,95,105,110,104,101,114,105,116, + 114,107,0,0,0,41,3,114,158,0,0,0,114,237,0,0, + 0,218,7,99,111,109,112,105,108,101,41,4,114,142,0,0, + 0,114,42,0,0,0,114,64,0,0,0,114,253,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,138, + 3,0,0,115,8,0,0,0,0,5,12,1,2,0,2,255, + 122,27,83,111,117,114,99,101,76,111,97,100,101,114,46,115, + 111,117,114,99,101,95,116,111,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,15,0,0,0,9,0, + 0,0,67,0,0,0,115,34,2,0,0,124,0,160,0,124, + 1,161,1,125,2,100,1,125,3,100,1,125,4,100,1,125, + 5,100,2,125,6,100,3,125,7,122,12,116,1,124,2,131, + 1,125,8,87,0,110,26,4,0,116,2,107,10,114,68,1, + 0,1,0,1,0,100,1,125,8,89,0,144,1,110,48,88, + 0,122,14,124,0,160,3,124,2,161,1,125,9,87,0,110, + 22,4,0,116,4,107,10,114,106,1,0,1,0,1,0,89, + 0,144,1,110,10,88,0,116,5,124,9,100,4,25,0,131, + 1,125,3,122,14,124,0,160,6,124,8,161,1,125,10,87, + 0,110,20,4,0,116,4,107,10,114,154,1,0,1,0,1, + 0,89,0,110,218,88,0,124,1,124,8,100,5,156,2,125, + 11,122,148,116,7,124,10,124,1,124,11,131,3,125,12,116, + 8,124,10,131,1,100,6,100,1,133,2,25,0,125,13,124, + 12,100,7,64,0,100,8,107,3,125,6,124,6,144,1,114, + 36,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, + 10,100,10,107,3,144,1,114,56,124,7,115,254,116,9,106, + 10,100,11,107,2,144,1,114,56,124,0,160,6,124,2,161, + 1,125,4,116,9,160,11,116,12,124,4,161,2,125,5,116, + 13,124,10,124,5,124,1,124,11,131,4,1,0,110,20,116, + 14,124,10,124,3,124,9,100,12,25,0,124,1,124,11,131, + 5,1,0,87,0,110,26,4,0,116,15,116,16,102,2,107, + 10,144,1,114,84,1,0,1,0,1,0,89,0,110,32,88, + 0,116,17,160,18,100,13,124,8,124,2,161,3,1,0,116, + 19,124,13,124,1,124,8,124,2,100,14,141,4,83,0,124, + 4,100,1,107,8,144,1,114,136,124,0,160,6,124,2,161, + 1,125,4,124,0,160,20,124,4,124,2,161,2,125,14,116, + 17,160,18,100,15,124,2,161,2,1,0,116,21,106,22,144, + 2,115,30,124,8,100,1,107,9,144,2,114,30,124,3,100, + 1,107,9,144,2,114,30,124,6,144,1,114,228,124,5,100, + 1,107,8,144,1,114,214,116,9,160,11,124,4,161,1,125, + 5,116,23,124,14,124,5,124,7,131,3,125,10,110,16,116, + 24,124,14,124,3,116,25,124,4,131,1,131,3,125,10,122, + 18,124,0,160,26,124,2,124,8,124,10,161,3,1,0,87, + 0,110,22,4,0,116,2,107,10,144,2,114,28,1,0,1, + 0,1,0,89,0,110,2,88,0,124,14,83,0,41,16,122, + 190,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, + 101,99,116,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,46,10,10,32,32,32,32,32,32,32,32,82,101,97, + 100,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, + 32,114,101,113,117,105,114,101,115,32,112,97,116,104,95,115, + 116,97,116,115,32,116,111,32,98,101,32,105,109,112,108,101, + 109,101,110,116,101,100,46,32,84,111,32,119,114,105,116,101, + 10,32,32,32,32,32,32,32,32,98,121,116,101,99,111,100, + 101,44,32,115,101,116,95,100,97,116,97,32,109,117,115,116, + 32,97,108,115,111,32,98,101,32,105,109,112,108,101,109,101, + 110,116,101,100,46,10,10,32,32,32,32,32,32,32,32,78, + 70,84,114,193,0,0,0,114,183,0,0,0,114,169,0,0, + 0,114,4,0,0,0,114,0,0,0,0,114,44,0,0,0, + 90,5,110,101,118,101,114,90,6,97,108,119,97,121,115,218, + 4,115,105,122,101,122,13,123,125,32,109,97,116,99,104,101, + 115,32,123,125,41,3,114,140,0,0,0,114,131,0,0,0, + 114,133,0,0,0,122,19,99,111,100,101,32,111,98,106,101, + 99,116,32,102,114,111,109,32,123,125,41,27,114,203,0,0, + 0,114,120,0,0,0,114,105,0,0,0,114,247,0,0,0, + 114,75,0,0,0,114,34,0,0,0,114,250,0,0,0,114, + 176,0,0,0,218,10,109,101,109,111,114,121,118,105,101,119, + 114,187,0,0,0,90,21,99,104,101,99,107,95,104,97,115, + 104,95,98,97,115,101,100,95,112,121,99,115,114,181,0,0, + 0,218,17,95,82,65,87,95,77,65,71,73,67,95,78,85, + 77,66,69,82,114,182,0,0,0,114,180,0,0,0,114,141, + 0,0,0,114,174,0,0,0,114,158,0,0,0,114,173,0, + 0,0,114,189,0,0,0,114,0,1,0,0,114,25,0,0, + 0,218,19,100,111,110,116,95,119,114,105,116,101,95,98,121, + 116,101,99,111,100,101,114,195,0,0,0,114,194,0,0,0, + 114,6,0,0,0,114,249,0,0,0,41,15,114,142,0,0, + 0,114,163,0,0,0,114,133,0,0,0,114,178,0,0,0, + 114,198,0,0,0,114,181,0,0,0,90,10,104,97,115,104, + 95,98,97,115,101,100,90,12,99,104,101,99,107,95,115,111, + 117,114,99,101,114,131,0,0,0,218,2,115,116,114,42,0, + 0,0,114,175,0,0,0,114,106,0,0,0,90,10,98,121, + 116,101,115,95,100,97,116,97,90,11,99,111,100,101,95,111, + 98,106,101,99,116,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,236,0,0,0,146,3,0,0,115,152,0, + 0,0,0,7,10,1,4,1,4,1,4,1,4,1,4,1, + 2,1,12,1,14,1,12,2,2,1,14,1,14,1,8,2, + 12,1,2,1,14,1,14,1,6,3,2,1,2,254,6,4, + 2,1,12,1,16,1,12,1,6,1,12,1,12,1,2,255, + 2,2,8,254,4,3,10,1,4,1,2,1,2,254,4,4, + 8,1,2,255,6,3,2,1,2,1,2,1,6,1,2,1, + 2,251,8,7,20,1,6,2,8,1,2,255,4,2,6,1, + 2,1,2,254,6,3,10,1,10,1,12,1,12,1,18,1, + 6,255,4,2,6,1,10,1,10,1,14,2,6,1,6,255, + 4,2,2,1,18,1,16,1,6,1,122,21,83,111,117,114, + 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, + 101,78,41,10,114,149,0,0,0,114,148,0,0,0,114,150, + 0,0,0,114,246,0,0,0,114,247,0,0,0,114,249,0, + 0,0,114,248,0,0,0,114,252,0,0,0,114,0,1,0, + 0,114,236,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,244,0,0,0,87, + 3,0,0,115,14,0,0,0,8,2,8,8,8,14,8,10, + 8,7,8,10,14,8,114,244,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 0,0,0,0,115,124,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,100,7,132,0,90,6,101,7,135, + 0,102,1,100,8,100,9,132,8,131,1,90,8,101,7,100, + 10,100,11,132,0,131,1,90,9,100,12,100,13,132,0,90, + 10,101,7,100,14,100,15,132,0,131,1,90,11,100,16,100, + 17,132,0,90,12,100,18,100,19,132,0,90,13,100,20,100, + 21,132,0,90,14,100,22,100,23,132,0,90,15,135,0,4, + 0,90,16,83,0,41,24,218,10,70,105,108,101,76,111,97, + 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, + 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, + 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, + 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, + 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, + 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, + 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0, + 0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,0, + 124,2,124,0,95,1,100,1,83,0,41,2,122,75,67,97, + 99,104,101,32,116,104,101,32,109,111,100,117,108,101,32,110, + 97,109,101,32,97,110,100,32,116,104,101,32,112,97,116,104, + 32,116,111,32,116,104,101,32,102,105,108,101,32,102,111,117, + 110,100,32,98,121,32,116,104,101,10,32,32,32,32,32,32, + 32,32,102,105,110,100,101,114,46,78,114,183,0,0,0,41, + 3,114,142,0,0,0,114,163,0,0,0,114,64,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 232,0,0,0,236,3,0,0,115,4,0,0,0,0,3,6, + 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, + 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, + 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,22, + 124,0,106,1,124,1,106,1,107,2,83,0,114,68,0,0, + 0,169,2,218,9,95,95,99,108,97,115,115,95,95,114,155, + 0,0,0,169,2,114,142,0,0,0,90,5,111,116,104,101, + 114,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,6,95,95,101,113,95,95,242,3,0,0,115,6,0,0, + 0,0,1,12,1,10,255,122,17,70,105,108,101,76,111,97, + 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,115,20,0,0,0,116,0,124,0,106,1,131,1, + 116,0,124,0,106,2,131,1,65,0,83,0,114,68,0,0, + 0,169,3,218,4,104,97,115,104,114,140,0,0,0,114,64, + 0,0,0,169,1,114,142,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,8,95,95,104,97,115, + 104,95,95,246,3,0,0,115,2,0,0,0,0,1,122,19, + 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, + 104,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,3,0,0,0,115,16,0,0, + 0,116,0,116,1,124,0,131,2,160,2,124,1,161,1,83, + 0,41,1,122,100,76,111,97,100,32,97,32,109,111,100,117, + 108,101,32,102,114,111,109,32,97,32,102,105,108,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, + 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,41,3,218,5,115,117,112, + 101,114,114,6,1,0,0,114,243,0,0,0,114,242,0,0, + 0,169,1,114,8,1,0,0,114,10,0,0,0,114,11,0, + 0,0,114,243,0,0,0,249,3,0,0,115,2,0,0,0, + 0,10,122,22,70,105,108,101,76,111,97,100,101,114,46,108, + 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,115,6,0,0,0,124,0,106,0,83,0,169,1, + 122,58,82,101,116,117,114,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,116,104,101,32,115,111,117,114,99,101,32, + 102,105,108,101,32,97,115,32,102,111,117,110,100,32,98,121, + 32,116,104,101,32,102,105,110,100,101,114,46,114,70,0,0, + 0,114,242,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,203,0,0,0,5,4,0,0,115,2, + 0,0,0,0,3,122,23,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,10, + 0,0,0,67,0,0,0,115,102,0,0,0,116,0,124,0, + 116,1,116,2,102,2,131,2,114,58,116,3,160,4,116,5, + 124,1,131,1,161,1,143,22,125,2,124,2,160,6,161,0, + 87,0,2,0,53,0,81,0,82,0,163,0,83,0,81,0, + 82,0,88,0,110,40,116,3,160,7,124,1,100,1,161,2, + 143,22,125,2,124,2,160,6,161,0,87,0,2,0,53,0, + 81,0,82,0,163,0,83,0,81,0,82,0,88,0,100,2, + 83,0,41,3,122,39,82,101,116,117,114,110,32,116,104,101, + 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, + 97,115,32,114,97,119,32,98,121,116,101,115,46,218,1,114, + 78,41,8,114,185,0,0,0,114,244,0,0,0,218,19,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,114,89,0,0,0,90,9,111,112,101,110,95,99,111, + 100,101,114,108,0,0,0,90,4,114,101,97,100,114,90,0, + 0,0,41,3,114,142,0,0,0,114,64,0,0,0,114,92, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,250,0,0,0,10,4,0,0,115,10,0,0,0, + 0,2,14,1,16,1,28,2,14,1,122,19,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116, - 1,124,0,131,2,160,2,124,1,161,1,83,0,41,1,122, - 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, - 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,240, - 0,0,0,114,221,0,0,0,114,220,0,0,0,169,1,114, - 242,0,0,0,114,3,0,0,0,114,6,0,0,0,114,221, - 0,0,0,184,3,0,0,115,2,0,0,0,0,10,122,22, - 70,105,108,101,76,111,97,100,101,114,46,108,111,97,100,95, - 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 6,0,0,0,124,0,106,0,83,0,169,1,122,58,82,101, - 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, - 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, - 32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101, - 32,102,105,110,100,101,114,46,114,48,0,0,0,114,220,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,180,0,0,0,196,3,0,0,115,2,0,0,0,0, - 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,10,0,0,0,67, - 0,0,0,115,102,0,0,0,116,0,124,0,116,1,116,2, - 102,2,131,2,114,58,116,3,160,4,116,5,124,1,131,1, - 161,1,143,22,125,2,124,2,160,6,161,0,87,0,2,0, - 53,0,81,0,82,0,163,0,83,0,81,0,82,0,88,0, - 110,40,116,3,160,7,124,1,100,1,161,2,143,22,125,2, - 124,2,160,6,161,0,87,0,2,0,53,0,81,0,82,0, - 163,0,83,0,81,0,82,0,88,0,100,2,83,0,41,3, - 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, - 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, - 97,119,32,98,121,116,101,115,46,218,1,114,78,41,8,114, - 162,0,0,0,114,222,0,0,0,218,19,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,114,64, - 0,0,0,90,9,111,112,101,110,95,99,111,100,101,114,85, - 0,0,0,90,4,114,101,97,100,114,65,0,0,0,41,3, - 114,119,0,0,0,114,44,0,0,0,114,68,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,228, - 0,0,0,201,3,0,0,115,10,0,0,0,0,2,14,1, - 16,1,28,2,14,1,122,19,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,100,97,116,97,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,18,0,0,0,124,0,160,0,124,1,161, - 1,114,14,124,0,83,0,100,0,83,0,114,110,0,0,0, - 41,1,114,183,0,0,0,169,2,114,119,0,0,0,114,217, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,218,19,103,101,116,95,114,101,115,111,117,114,99,101, - 95,114,101,97,100,101,114,212,3,0,0,115,6,0,0,0, - 0,2,10,1,4,1,122,30,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95, - 114,101,97,100,101,114,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, - 32,0,0,0,116,0,116,1,124,0,106,2,131,1,100,1, - 25,0,124,1,131,2,125,2,116,3,160,4,124,2,100,2, - 161,2,83,0,41,3,78,114,73,0,0,0,114,252,0,0, - 0,41,5,114,38,0,0,0,114,47,0,0,0,114,44,0, - 0,0,114,64,0,0,0,114,65,0,0,0,169,3,114,119, - 0,0,0,90,8,114,101,115,111,117,114,99,101,114,44,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,13,111,112,101,110,95,114,101,115,111,117,114,99,101, - 218,3,0,0,115,4,0,0,0,0,1,20,1,122,24,70, - 105,108,101,76,111,97,100,101,114,46,111,112,101,110,95,114, - 101,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, - 115,38,0,0,0,124,0,160,0,124,1,161,1,115,14,116, - 1,130,1,116,2,116,3,124,0,106,4,131,1,100,1,25, - 0,124,1,131,2,125,2,124,2,83,0,169,2,78,114,73, - 0,0,0,41,5,218,11,105,115,95,114,101,115,111,117,114, - 99,101,218,17,70,105,108,101,78,111,116,70,111,117,110,100, - 69,114,114,111,114,114,38,0,0,0,114,47,0,0,0,114, - 44,0,0,0,114,0,1,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,114,101,115,111,117,114, - 99,101,95,112,97,116,104,222,3,0,0,115,8,0,0,0, - 0,1,10,1,4,1,20,1,122,24,70,105,108,101,76,111, - 97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97, - 116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,40,0,0,0, - 116,0,124,1,107,6,114,12,100,1,83,0,116,1,116,2, - 124,0,106,3,131,1,100,2,25,0,124,1,131,2,125,2, - 116,4,124,2,131,1,83,0,41,3,78,70,114,73,0,0, - 0,41,5,114,35,0,0,0,114,38,0,0,0,114,47,0, - 0,0,114,44,0,0,0,114,54,0,0,0,169,3,114,119, - 0,0,0,114,117,0,0,0,114,44,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,3,1,0, - 0,228,3,0,0,115,8,0,0,0,0,1,8,1,4,1, - 20,1,122,22,70,105,108,101,76,111,97,100,101,114,46,105, - 115,95,114,101,115,111,117,114,99,101,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,67, - 0,0,0,115,24,0,0,0,116,0,116,1,160,2,116,3, - 124,0,106,4,131,1,100,1,25,0,161,1,131,1,83,0, - 114,2,1,0,0,41,5,218,4,105,116,101,114,114,2,0, - 0,0,218,7,108,105,115,116,100,105,114,114,47,0,0,0, - 114,44,0,0,0,114,247,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,8,99,111,110,116,101, - 110,116,115,234,3,0,0,115,2,0,0,0,0,1,122,19, - 70,105,108,101,76,111,97,100,101,114,46,99,111,110,116,101, - 110,116,115,41,17,114,126,0,0,0,114,125,0,0,0,114, - 127,0,0,0,114,128,0,0,0,114,210,0,0,0,114,244, - 0,0,0,114,248,0,0,0,114,137,0,0,0,114,221,0, - 0,0,114,180,0,0,0,114,228,0,0,0,114,255,0,0, - 0,114,1,1,0,0,114,5,1,0,0,114,3,1,0,0, - 114,9,1,0,0,90,13,95,95,99,108,97,115,115,99,101, - 108,108,95,95,114,3,0,0,0,114,3,0,0,0,114,250, - 0,0,0,114,6,0,0,0,114,240,0,0,0,166,3,0, - 0,115,30,0,0,0,8,2,4,3,8,6,8,4,8,3, - 2,1,14,11,2,1,10,4,8,11,2,1,10,5,8,4, - 8,6,8,6,114,240,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90, - 6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, - 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, - 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, - 2,106,1,124,2,106,2,100,1,156,2,83,0,41,2,122, - 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, - 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, - 104,46,41,2,114,170,0,0,0,114,235,0,0,0,41,3, - 114,49,0,0,0,218,8,115,116,95,109,116,105,109,101,90, - 7,115,116,95,115,105,122,101,41,3,114,119,0,0,0,114, - 44,0,0,0,114,239,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,225,0,0,0,242,3,0, - 0,115,4,0,0,0,0,2,8,1,122,27,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,46,112,97,116, - 104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, - 115,24,0,0,0,116,0,124,1,131,1,125,4,124,0,106, - 1,124,2,124,3,124,4,100,1,141,3,83,0,41,2,78, - 169,1,218,5,95,109,111,100,101,41,2,114,115,0,0,0, - 114,226,0,0,0,41,5,114,119,0,0,0,114,108,0,0, - 0,114,107,0,0,0,114,26,0,0,0,114,52,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 227,0,0,0,247,3,0,0,115,4,0,0,0,0,2,8, - 1,122,32,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, - 111,100,101,114,60,0,0,0,114,12,1,0,0,99,3,0, - 0,0,0,0,0,0,1,0,0,0,9,0,0,0,11,0, - 0,0,67,0,0,0,115,252,0,0,0,116,0,124,1,131, - 1,92,2,125,4,125,5,103,0,125,6,124,4,114,52,116, - 1,124,4,131,1,115,52,116,0,124,4,131,1,92,2,125, - 4,125,7,124,6,160,2,124,7,161,1,1,0,113,16,116, - 3,124,6,131,1,68,0,93,108,125,7,116,4,124,4,124, - 7,131,2,125,4,122,14,116,5,160,6,124,4,161,1,1, - 0,87,0,113,60,4,0,116,7,107,10,114,112,1,0,1, - 0,1,0,89,0,113,60,89,0,113,60,4,0,116,8,107, - 10,114,166,1,0,125,8,1,0,122,26,116,9,160,10,100, - 1,124,4,124,8,161,3,1,0,87,0,89,0,162,6,1, - 0,100,2,83,0,100,2,125,8,126,8,88,0,89,0,113, - 60,88,0,113,60,122,28,116,11,124,1,124,2,124,3,131, - 3,1,0,116,9,160,10,100,3,124,1,161,2,1,0,87, - 0,110,48,4,0,116,8,107,10,114,246,1,0,125,8,1, - 0,122,18,116,9,160,10,100,1,124,1,124,8,161,3,1, - 0,87,0,53,0,100,2,125,8,126,8,88,0,89,0,110, - 2,88,0,100,2,83,0,41,4,122,27,87,114,105,116,101, - 32,98,121,116,101,115,32,100,97,116,97,32,116,111,32,97, - 32,102,105,108,101,46,122,27,99,111,117,108,100,32,110,111, - 116,32,99,114,101,97,116,101,32,123,33,114,125,58,32,123, - 33,114,125,78,122,12,99,114,101,97,116,101,100,32,123,33, - 114,125,41,12,114,47,0,0,0,114,56,0,0,0,114,187, - 0,0,0,114,42,0,0,0,114,38,0,0,0,114,2,0, - 0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69, - 120,105,115,116,115,69,114,114,111,114,114,50,0,0,0,114, - 135,0,0,0,114,150,0,0,0,114,69,0,0,0,41,9, - 114,119,0,0,0,114,44,0,0,0,114,26,0,0,0,114, - 13,1,0,0,218,6,112,97,114,101,110,116,114,97,0,0, - 0,114,37,0,0,0,114,33,0,0,0,114,229,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 226,0,0,0,252,3,0,0,115,48,0,0,0,0,2,12, - 1,4,2,12,1,12,1,12,2,12,1,10,1,2,1,14, - 1,14,2,8,1,16,3,6,1,2,0,2,255,4,2,28, - 1,2,1,12,1,16,1,16,2,8,1,2,255,122,25,83, - 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, - 115,101,116,95,100,97,116,97,78,41,7,114,126,0,0,0, - 114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114, - 225,0,0,0,114,227,0,0,0,114,226,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,10,1,0,0,238,3,0,0,115,8,0,0,0, - 8,2,4,2,8,5,8,5,114,10,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,64,0,0,0,115,32,0,0,0,101,0,90,1,100, + 3,0,0,0,67,0,0,0,115,18,0,0,0,124,0,160, + 0,124,1,161,1,114,14,124,0,83,0,100,0,83,0,114, + 68,0,0,0,41,1,114,206,0,0,0,169,2,114,142,0, + 0,0,114,239,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,19,103,101,116,95,114,101,115,111, + 117,114,99,101,95,114,101,97,100,101,114,21,4,0,0,115, + 6,0,0,0,0,2,10,1,4,1,122,30,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,117, + 114,99,101,95,114,101,97,100,101,114,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67, + 0,0,0,115,32,0,0,0,116,0,116,1,124,0,106,2, + 131,1,100,1,25,0,124,1,131,2,125,2,116,3,160,4, + 124,2,100,2,161,2,83,0,41,3,78,114,0,0,0,0, + 114,18,1,0,0,41,5,114,66,0,0,0,114,73,0,0, + 0,114,64,0,0,0,114,89,0,0,0,114,90,0,0,0, + 169,3,114,142,0,0,0,90,8,114,101,115,111,117,114,99, + 101,114,64,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,13,111,112,101,110,95,114,101,115,111, + 117,114,99,101,27,4,0,0,115,4,0,0,0,0,1,20, + 1,122,24,70,105,108,101,76,111,97,100,101,114,46,111,112, + 101,110,95,114,101,115,111,117,114,99,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,38,0,0,0,124,0,160,0,124,1,161, + 1,115,14,116,1,130,1,116,2,116,3,124,0,106,4,131, + 1,100,1,25,0,124,1,131,2,125,2,124,2,83,0,169, + 2,78,114,0,0,0,0,41,5,218,11,105,115,95,114,101, + 115,111,117,114,99,101,218,17,70,105,108,101,78,111,116,70, + 111,117,110,100,69,114,114,111,114,114,66,0,0,0,114,73, + 0,0,0,114,64,0,0,0,114,22,1,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,13,114,101, + 115,111,117,114,99,101,95,112,97,116,104,31,4,0,0,115, + 8,0,0,0,0,1,10,1,4,1,20,1,122,24,70,105, + 108,101,76,111,97,100,101,114,46,114,101,115,111,117,114,99, + 101,95,112,97,116,104,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 40,0,0,0,116,0,124,1,107,6,114,12,100,1,83,0, + 116,1,116,2,124,0,106,3,131,1,100,2,25,0,124,1, + 131,2,125,2,116,4,124,2,131,1,83,0,41,3,78,70, + 114,0,0,0,0,41,5,114,58,0,0,0,114,66,0,0, + 0,114,73,0,0,0,114,64,0,0,0,114,79,0,0,0, + 169,3,114,142,0,0,0,114,140,0,0,0,114,64,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,25,1,0,0,37,4,0,0,115,8,0,0,0,0,1, + 8,1,4,1,20,1,122,22,70,105,108,101,76,111,97,100, + 101,114,46,105,115,95,114,101,115,111,117,114,99,101,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5, + 0,0,0,67,0,0,0,115,24,0,0,0,116,0,116,1, + 160,2,116,3,124,0,106,4,131,1,100,1,25,0,161,1, + 131,1,83,0,114,24,1,0,0,41,5,218,4,105,116,101, + 114,114,21,0,0,0,218,7,108,105,115,116,100,105,114,114, + 73,0,0,0,114,64,0,0,0,114,13,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,99, + 111,110,116,101,110,116,115,43,4,0,0,115,2,0,0,0, + 0,1,122,19,70,105,108,101,76,111,97,100,101,114,46,99, + 111,110,116,101,110,116,115,41,17,114,149,0,0,0,114,148, + 0,0,0,114,150,0,0,0,114,151,0,0,0,114,232,0, + 0,0,114,10,1,0,0,114,14,1,0,0,114,160,0,0, + 0,114,243,0,0,0,114,203,0,0,0,114,250,0,0,0, + 114,21,1,0,0,114,23,1,0,0,114,27,1,0,0,114, + 25,1,0,0,114,31,1,0,0,90,13,95,95,99,108,97, + 115,115,99,101,108,108,95,95,114,10,0,0,0,114,10,0, + 0,0,114,16,1,0,0,114,11,0,0,0,114,6,1,0, + 0,231,3,0,0,115,30,0,0,0,8,2,4,3,8,6, + 8,4,8,3,2,1,14,11,2,1,10,4,8,11,2,1, + 10,5,8,4,8,6,8,6,114,6,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,46,0,0,0,101,0,90,1,100, 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,100,6,83,0,41,7,218,20,83, - 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, - 100,101,114,122,45,76,111,97,100,101,114,32,119,104,105,99, - 104,32,104,97,110,100,108,101,115,32,115,111,117,114,99,101, - 108,101,115,115,32,102,105,108,101,32,105,109,112,111,114,116, - 115,46,99,2,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,67,0,0,0,115,68,0,0,0, - 124,0,160,0,124,1,161,1,125,2,124,0,160,1,124,2, - 161,1,125,3,124,1,124,2,100,1,156,2,125,4,116,2, - 124,3,124,1,124,4,131,3,1,0,116,3,116,4,124,3, - 131,1,100,2,100,0,133,2,25,0,124,1,124,2,100,3, - 141,3,83,0,41,4,78,114,160,0,0,0,114,146,0,0, - 0,41,2,114,117,0,0,0,114,107,0,0,0,41,5,114, - 180,0,0,0,114,228,0,0,0,114,153,0,0,0,114,166, - 0,0,0,114,236,0,0,0,41,5,114,119,0,0,0,114, - 140,0,0,0,114,44,0,0,0,114,26,0,0,0,114,152, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,214,0,0,0,31,4,0,0,115,22,0,0,0, - 0,1,10,1,10,4,2,1,2,254,6,4,12,1,2,1, - 14,1,2,1,2,253,122,29,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, - 0,0,0,100,1,83,0,41,2,122,39,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32, - 105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,3,0,0,0,114,220,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,230,0,0, - 0,47,4,0,0,115,2,0,0,0,0,2,122,31,83,111, - 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6, - 114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114, - 128,0,0,0,114,214,0,0,0,114,230,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,16,1,0,0,27,4,0,0,115,6,0,0,0, - 8,2,4,2,8,16,114,16,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 64,0,0,0,115,92,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, - 9,132,0,90,7,100,10,100,11,132,0,90,8,100,12,100, - 13,132,0,90,9,100,14,100,15,132,0,90,10,100,16,100, - 17,132,0,90,11,101,12,100,18,100,19,132,0,131,1,90, - 13,100,20,83,0,41,21,114,253,0,0,0,122,93,76,111, - 97,100,101,114,32,102,111,114,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, - 32,84,104,101,32,99,111,110,115,116,114,117,99,116,111,114, - 32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32, - 119,111,114,107,32,119,105,116,104,32,70,105,108,101,70,105, - 110,100,101,114,46,10,10,32,32,32,32,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, - 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,124, - 2,124,0,95,1,100,0,83,0,114,110,0,0,0,114,160, - 0,0,0,114,6,1,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,210,0,0,0,64,4,0,0, - 115,4,0,0,0,0,1,6,1,122,28,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, - 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,24,0,0,0,124,0,106,0,124,1,106,0,107,2,111, - 22,124,0,106,1,124,1,106,1,107,2,83,0,114,110,0, - 0,0,114,241,0,0,0,114,243,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,244,0,0,0, - 68,4,0,0,115,6,0,0,0,0,1,12,1,10,255,122, - 26,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,20,0,0,0,116,0,124,0,106,1,131, - 1,116,0,124,0,106,2,131,1,65,0,83,0,114,110,0, - 0,0,114,245,0,0,0,114,247,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,248,0,0,0, - 72,4,0,0,115,2,0,0,0,0,1,122,28,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0, + 4,100,5,132,0,90,5,100,6,100,7,156,1,100,8,100, + 9,132,2,90,6,100,10,83,0,41,11,218,16,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,101, + 76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,101, + 32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,22,0,0,0,116,0,124,1,131, + 1,125,2,124,2,106,1,124,2,106,2,100,1,156,2,83, + 0,41,2,122,33,82,101,116,117,114,110,32,116,104,101,32, + 109,101,116,97,100,97,116,97,32,102,111,114,32,116,104,101, + 32,112,97,116,104,46,41,2,114,193,0,0,0,114,1,1, + 0,0,41,3,114,74,0,0,0,218,8,115,116,95,109,116, + 105,109,101,90,7,115,116,95,115,105,122,101,41,3,114,142, + 0,0,0,114,64,0,0,0,114,5,1,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,247,0,0, + 0,51,4,0,0,115,4,0,0,0,0,2,8,1,122,27, + 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, + 46,112,97,116,104,95,115,116,97,116,115,99,4,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, + 67,0,0,0,115,24,0,0,0,116,0,124,1,131,1,125, + 4,124,0,106,1,124,2,124,3,124,4,100,1,141,3,83, + 0,41,2,78,169,1,218,5,95,109,111,100,101,41,2,114, + 138,0,0,0,114,248,0,0,0,41,5,114,142,0,0,0, + 114,133,0,0,0,114,131,0,0,0,114,42,0,0,0,114, + 77,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,249,0,0,0,56,4,0,0,115,4,0,0, + 0,0,2,8,1,122,32,83,111,117,114,99,101,70,105,108, + 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, + 121,116,101,99,111,100,101,114,85,0,0,0,114,34,1,0, + 0,99,3,0,0,0,0,0,0,0,1,0,0,0,9,0, + 0,0,11,0,0,0,67,0,0,0,115,252,0,0,0,116, + 0,124,1,131,1,92,2,125,4,125,5,103,0,125,6,124, + 4,114,52,116,1,124,4,131,1,115,52,116,0,124,4,131, + 1,92,2,125,4,125,7,124,6,160,2,124,7,161,1,1, + 0,113,16,116,3,124,6,131,1,68,0,93,108,125,7,116, + 4,124,4,124,7,131,2,125,4,122,14,116,5,160,6,124, + 4,161,1,1,0,87,0,113,60,4,0,116,7,107,10,114, + 112,1,0,1,0,1,0,89,0,113,60,89,0,113,60,4, + 0,116,8,107,10,114,166,1,0,125,8,1,0,122,26,116, + 9,160,10,100,1,124,4,124,8,161,3,1,0,87,0,89, + 0,162,6,1,0,100,2,83,0,100,2,125,8,126,8,88, + 0,89,0,113,60,88,0,113,60,122,28,116,11,124,1,124, + 2,124,3,131,3,1,0,116,9,160,10,100,3,124,1,161, + 2,1,0,87,0,110,48,4,0,116,8,107,10,114,246,1, + 0,125,8,1,0,122,18,116,9,160,10,100,1,124,1,124, + 8,161,3,1,0,87,0,53,0,100,2,125,8,126,8,88, + 0,89,0,110,2,88,0,100,2,83,0,41,4,122,27,87, + 114,105,116,101,32,98,121,116,101,115,32,100,97,116,97,32, + 116,111,32,97,32,102,105,108,101,46,122,27,99,111,117,108, + 100,32,110,111,116,32,99,114,101,97,116,101,32,123,33,114, + 125,58,32,123,33,114,125,78,122,12,99,114,101,97,116,101, + 100,32,123,33,114,125,41,12,114,73,0,0,0,114,81,0, + 0,0,114,60,0,0,0,218,8,114,101,118,101,114,115,101, + 100,114,66,0,0,0,114,21,0,0,0,90,5,109,107,100, + 105,114,218,15,70,105,108,101,69,120,105,115,116,115,69,114, + 114,111,114,114,75,0,0,0,114,158,0,0,0,114,173,0, + 0,0,114,93,0,0,0,41,9,114,142,0,0,0,114,64, + 0,0,0,114,42,0,0,0,114,35,1,0,0,218,6,112, + 97,114,101,110,116,114,119,0,0,0,114,62,0,0,0,114, + 67,0,0,0,114,251,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,248,0,0,0,61,4,0, + 0,115,48,0,0,0,0,2,12,1,4,2,12,1,12,1, + 12,2,12,1,10,1,2,1,14,1,14,2,8,1,16,3, + 6,1,2,0,2,255,4,2,28,1,2,1,12,1,16,1, + 16,2,8,1,2,255,122,25,83,111,117,114,99,101,70,105, + 108,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, + 97,78,41,7,114,149,0,0,0,114,148,0,0,0,114,150, + 0,0,0,114,151,0,0,0,114,247,0,0,0,114,249,0, + 0,0,114,248,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,32,1,0,0, + 47,4,0,0,115,8,0,0,0,8,2,4,2,8,5,8, + 5,114,32,1,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, + 32,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, + 100,6,83,0,41,7,218,20,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,122,45,76,111, + 97,100,101,114,32,119,104,105,99,104,32,104,97,110,100,108, + 101,115,32,115,111,117,114,99,101,108,101,115,115,32,102,105, + 108,101,32,105,109,112,111,114,116,115,46,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, + 67,0,0,0,115,68,0,0,0,124,0,160,0,124,1,161, + 1,125,2,124,0,160,1,124,2,161,1,125,3,124,1,124, + 2,100,1,156,2,125,4,116,2,124,3,124,1,124,4,131, + 3,1,0,116,3,116,4,124,3,131,1,100,2,100,0,133, + 2,25,0,124,1,124,2,100,3,141,3,83,0,41,4,78, + 114,183,0,0,0,114,169,0,0,0,41,2,114,140,0,0, + 0,114,131,0,0,0,41,5,114,203,0,0,0,114,250,0, + 0,0,114,176,0,0,0,114,189,0,0,0,114,2,1,0, + 0,41,5,114,142,0,0,0,114,163,0,0,0,114,64,0, + 0,0,114,42,0,0,0,114,175,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,236,0,0,0, + 96,4,0,0,115,22,0,0,0,0,1,10,1,10,4,2, + 1,2,254,6,4,12,1,2,1,14,1,2,1,2,253,122, + 29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, + 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, + 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, + 111,117,114,99,101,32,99,111,100,101,46,78,114,10,0,0, + 0,114,242,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,252,0,0,0,112,4,0,0,115,2, + 0,0,0,0,2,122,31,83,111,117,114,99,101,108,101,115, + 115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 115,111,117,114,99,101,78,41,6,114,149,0,0,0,114,148, + 0,0,0,114,150,0,0,0,114,151,0,0,0,114,236,0, + 0,0,114,252,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,39,1,0,0, + 92,4,0,0,115,6,0,0,0,8,2,4,2,8,16,114, + 39,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,64,0,0,0,115,92,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,10, + 100,11,132,0,90,8,100,12,100,13,132,0,90,9,100,14, + 100,15,132,0,90,10,100,16,100,17,132,0,90,11,101,12, + 100,18,100,19,132,0,131,1,90,13,100,20,83,0,41,21, + 114,19,1,0,0,122,93,76,111,97,100,101,114,32,102,111, + 114,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,46,10,10,32,32,32,32,84,104,101,32,99,111, + 110,115,116,114,117,99,116,111,114,32,105,115,32,100,101,115, + 105,103,110,101,100,32,116,111,32,119,111,114,107,32,119,105, + 116,104,32,70,105,108,101,70,105,110,100,101,114,46,10,10, + 32,32,32,32,99,3,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,0, + 83,0,114,68,0,0,0,114,183,0,0,0,114,28,1,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,232,0,0,0,129,4,0,0,115,4,0,0,0,0,1, + 6,1,122,28,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,24,0,0,0,124,0, + 106,0,124,1,106,0,107,2,111,22,124,0,106,1,124,1, + 106,1,107,2,83,0,114,68,0,0,0,114,7,1,0,0, + 114,9,1,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,10,1,0,0,133,4,0,0,115,6,0, + 0,0,0,1,12,1,10,255,122,26,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,95, + 101,113,95,95,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,20,0, + 0,0,116,0,124,0,106,1,131,1,116,0,124,0,106,2, + 131,1,65,0,83,0,114,68,0,0,0,114,11,1,0,0, + 114,13,1,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,14,1,0,0,137,4,0,0,115,2,0, + 0,0,0,1,122,28,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,95,95,104,97,115,104, + 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,5,0,0,0,67,0,0,0,115,36,0,0,0, + 116,0,160,1,116,2,106,3,124,1,161,2,125,2,116,0, + 160,4,100,1,124,1,106,5,124,0,106,6,161,3,1,0, + 124,2,83,0,41,2,122,38,67,114,101,97,116,101,32,97, + 110,32,117,110,105,116,105,97,108,105,122,101,100,32,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,122,38, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,123,33,114,125,32,108,111,97,100,101,100,32,102,114,111, + 109,32,123,33,114,125,41,7,114,158,0,0,0,114,237,0, + 0,0,114,187,0,0,0,90,14,99,114,101,97,116,101,95, + 100,121,110,97,109,105,99,114,173,0,0,0,114,140,0,0, + 0,114,64,0,0,0,41,3,114,142,0,0,0,114,210,0, + 0,0,114,239,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,235,0,0,0,140,4,0,0,115, + 18,0,0,0,0,2,4,1,4,0,2,255,4,2,6,1, + 4,0,4,255,4,2,122,33,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,5,0,0,0,67,0, 0,0,115,36,0,0,0,116,0,160,1,116,2,106,3,124, - 1,161,2,125,2,116,0,160,4,100,1,124,1,106,5,124, - 0,106,6,161,3,1,0,124,2,83,0,41,2,122,38,67, - 114,101,97,116,101,32,97,110,32,117,110,105,116,105,97,108, - 105,122,101,100,32,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,122,38,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,32,123,33,114,125,32,108,111,97, - 100,101,100,32,102,114,111,109,32,123,33,114,125,41,7,114, - 135,0,0,0,114,215,0,0,0,114,164,0,0,0,90,14, - 99,114,101,97,116,101,95,100,121,110,97,109,105,99,114,150, - 0,0,0,114,117,0,0,0,114,44,0,0,0,41,3,114, - 119,0,0,0,114,188,0,0,0,114,217,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,213,0, - 0,0,75,4,0,0,115,18,0,0,0,0,2,4,1,4, - 0,2,255,4,2,6,1,4,0,4,255,4,2,122,33,69, + 1,161,2,1,0,116,0,160,4,100,1,124,0,106,5,124, + 0,106,6,161,3,1,0,100,2,83,0,41,3,122,30,73, + 110,105,116,105,97,108,105,122,101,32,97,110,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,122,40,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, + 123,33,114,125,32,101,120,101,99,117,116,101,100,32,102,114, + 111,109,32,123,33,114,125,78,41,7,114,158,0,0,0,114, + 237,0,0,0,114,187,0,0,0,90,12,101,120,101,99,95, + 100,121,110,97,109,105,99,114,173,0,0,0,114,140,0,0, + 0,114,64,0,0,0,114,20,1,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,240,0,0,0,148, + 4,0,0,115,10,0,0,0,0,2,14,1,6,1,4,0, + 4,255,122,31,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,3,0,0,0,115,36,0,0, + 0,116,0,124,0,106,1,131,1,100,1,25,0,137,0,116, + 2,135,0,102,1,100,2,100,3,132,8,116,3,68,0,131, + 1,131,1,83,0,41,4,122,49,82,101,116,117,114,110,32, + 84,114,117,101,32,105,102,32,116,104,101,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,32,105,115,32, + 97,32,112,97,99,107,97,103,101,46,114,4,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,51,0,0,0,115,26,0,0,0,124,0,93, + 18,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1, + 0,113,2,100,1,83,0,41,2,114,232,0,0,0,78,114, + 10,0,0,0,169,2,114,8,0,0,0,218,6,115,117,102, + 102,105,120,169,1,90,9,102,105,108,101,95,110,97,109,101, + 114,10,0,0,0,114,11,0,0,0,114,12,0,0,0,157, + 4,0,0,115,4,0,0,0,4,1,2,255,122,49,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41, + 4,114,73,0,0,0,114,64,0,0,0,218,3,97,110,121, + 218,18,69,88,84,69,78,83,73,79,78,95,83,85,70,70, + 73,88,69,83,114,242,0,0,0,114,10,0,0,0,114,42, + 1,0,0,114,11,0,0,0,114,206,0,0,0,154,4,0, + 0,115,8,0,0,0,0,2,14,1,12,1,2,255,122,30, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, + 41,2,122,63,82,101,116,117,114,110,32,78,111,110,101,32, + 97,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,99,97,110,110,111,116,32,99,114, + 101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101, + 99,116,46,78,114,10,0,0,0,114,242,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,236,0, + 0,0,160,4,0,0,115,2,0,0,0,0,2,122,28,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,0, - 160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,4, - 100,1,124,0,106,5,124,0,106,6,161,3,1,0,100,2, - 83,0,41,3,122,30,73,110,105,116,105,97,108,105,122,101, - 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,122,40,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,32,123,33,114,125,32,101,120,101,99, - 117,116,101,100,32,102,114,111,109,32,123,33,114,125,78,41, - 7,114,135,0,0,0,114,215,0,0,0,114,164,0,0,0, - 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,150, - 0,0,0,114,117,0,0,0,114,44,0,0,0,114,254,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,218,0,0,0,83,4,0,0,115,10,0,0,0,0, - 2,14,1,6,1,4,0,4,255,122,31,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,3, - 0,0,0,115,36,0,0,0,116,0,124,0,106,1,131,1, - 100,1,25,0,137,0,116,2,135,0,102,1,100,2,100,3, - 132,8,116,3,68,0,131,1,131,1,83,0,41,4,122,49, - 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116, - 104,101,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, - 46,114,39,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,51,0,0,0,115, - 26,0,0,0,124,0,93,18,125,1,136,0,100,0,124,1, - 23,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2, - 114,210,0,0,0,78,114,3,0,0,0,169,2,114,32,0, - 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105, - 108,101,95,110,97,109,101,114,3,0,0,0,114,6,0,0, - 0,218,9,60,103,101,110,101,120,112,114,62,92,4,0,0, - 115,4,0,0,0,4,1,2,255,122,49,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,41,4,114,47, - 0,0,0,114,44,0,0,0,218,3,97,110,121,218,18,69, - 88,84,69,78,83,73,79,78,95,83,85,70,70,73,88,69, - 83,114,220,0,0,0,114,3,0,0,0,114,19,1,0,0, - 114,6,0,0,0,114,183,0,0,0,89,4,0,0,115,8, - 0,0,0,0,2,14,1,12,1,2,255,122,30,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, + 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122, - 63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116, - 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, - 78,114,3,0,0,0,114,220,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,214,0,0,0,95, - 4,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,1,83,0,41,2,122,53,82,101, - 116,117,114,110,32,78,111,110,101,32,97,115,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,115,32,104, - 97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111, - 100,101,46,78,114,3,0,0,0,114,220,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,230,0, - 0,0,99,4,0,0,115,2,0,0,0,0,2,122,30,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83, - 0,114,251,0,0,0,114,48,0,0,0,114,220,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 180,0,0,0,103,4,0,0,115,2,0,0,0,0,3,122, - 32,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109, - 101,78,41,14,114,126,0,0,0,114,125,0,0,0,114,127, - 0,0,0,114,128,0,0,0,114,210,0,0,0,114,244,0, - 0,0,114,248,0,0,0,114,213,0,0,0,114,218,0,0, - 0,114,183,0,0,0,114,214,0,0,0,114,230,0,0,0, - 114,137,0,0,0,114,180,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,253, - 0,0,0,56,4,0,0,115,22,0,0,0,8,2,4,6, - 8,4,8,4,8,3,8,8,8,6,8,6,8,4,8,4, - 2,1,114,253,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, - 115,104,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,90, - 7,100,10,100,11,132,0,90,8,100,12,100,13,132,0,90, - 9,100,14,100,15,132,0,90,10,100,16,100,17,132,0,90, - 11,100,18,100,19,132,0,90,12,100,20,100,21,132,0,90, - 13,100,22,100,23,132,0,90,14,100,24,83,0,41,25,218, - 14,95,78,97,109,101,115,112,97,99,101,80,97,116,104,97, - 38,1,0,0,82,101,112,114,101,115,101,110,116,115,32,97, - 32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,97, - 103,101,39,115,32,112,97,116,104,46,32,32,73,116,32,117, - 115,101,115,32,116,104,101,32,109,111,100,117,108,101,32,110, - 97,109,101,10,32,32,32,32,116,111,32,102,105,110,100,32, - 105,116,115,32,112,97,114,101,110,116,32,109,111,100,117,108, - 101,44,32,97,110,100,32,102,114,111,109,32,116,104,101,114, - 101,32,105,116,32,108,111,111,107,115,32,117,112,32,116,104, - 101,32,112,97,114,101,110,116,39,115,10,32,32,32,32,95, - 95,112,97,116,104,95,95,46,32,32,87,104,101,110,32,116, - 104,105,115,32,99,104,97,110,103,101,115,44,32,116,104,101, - 32,109,111,100,117,108,101,39,115,32,111,119,110,32,112,97, - 116,104,32,105,115,32,114,101,99,111,109,112,117,116,101,100, - 44,10,32,32,32,32,117,115,105,110,103,32,112,97,116,104, - 95,102,105,110,100,101,114,46,32,32,70,111,114,32,116,111, - 112,45,108,101,118,101,108,32,109,111,100,117,108,101,115,44, - 32,116,104,101,32,112,97,114,101,110,116,32,109,111,100,117, - 108,101,39,115,32,112,97,116,104,10,32,32,32,32,105,115, - 32,115,121,115,46,112,97,116,104,46,99,4,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,36,0,0,0,124,1,124,0,95,0,124,2, - 124,0,95,1,116,2,124,0,160,3,161,0,131,1,124,0, - 95,4,124,3,124,0,95,5,100,0,83,0,114,110,0,0, - 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116, - 104,114,112,0,0,0,218,16,95,103,101,116,95,112,97,114, - 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, - 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, - 116,104,95,102,105,110,100,101,114,169,4,114,119,0,0,0, - 114,117,0,0,0,114,44,0,0,0,90,11,112,97,116,104, - 95,102,105,110,100,101,114,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,210,0,0,0,116,4,0,0,115, - 8,0,0,0,0,1,6,1,6,1,14,1,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, - 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, - 0,0,0,124,0,106,0,160,1,100,1,161,1,92,3,125, - 1,125,2,125,3,124,2,100,2,107,2,114,30,100,3,83, - 0,124,1,100,4,102,2,83,0,41,5,122,62,82,101,116, - 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, - 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, - 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, - 45,97,116,116,114,45,110,97,109,101,41,114,71,0,0,0, - 114,40,0,0,0,41,2,114,8,0,0,0,114,44,0,0, - 0,90,8,95,95,112,97,116,104,95,95,41,2,114,24,1, - 0,0,114,41,0,0,0,41,4,114,119,0,0,0,114,15, - 1,0,0,218,3,100,111,116,90,2,109,101,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,23,95,102,105, - 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, - 97,109,101,115,122,4,0,0,115,8,0,0,0,0,2,18, - 1,8,2,4,3,122,38,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,102,105,110,100,95,112,97,114,101, - 110,116,95,112,97,116,104,95,110,97,109,101,115,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,28,0,0,0,124,0,160,0,161, - 0,92,2,125,1,125,2,116,1,116,2,106,3,124,1,25, - 0,124,2,131,2,83,0,114,110,0,0,0,41,4,114,31, - 1,0,0,114,131,0,0,0,114,8,0,0,0,218,7,109, - 111,100,117,108,101,115,41,3,114,119,0,0,0,90,18,112, - 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, - 101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109, - 101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,26,1,0,0,132,4,0,0,115,4,0,0,0,0,1, - 12,1,122,31,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0, - 0,116,0,124,0,160,1,161,0,131,1,125,1,124,1,124, - 0,106,2,107,3,114,74,124,0,160,3,124,0,106,4,124, - 1,161,2,125,2,124,2,100,0,107,9,114,68,124,2,106, - 5,100,0,107,8,114,68,124,2,106,6,114,68,124,2,106, - 6,124,0,95,7,124,1,124,0,95,2,124,0,106,7,83, - 0,114,110,0,0,0,41,8,114,112,0,0,0,114,26,1, - 0,0,114,27,1,0,0,114,28,1,0,0,114,24,1,0, - 0,114,141,0,0,0,114,179,0,0,0,114,25,1,0,0, - 41,3,114,119,0,0,0,90,11,112,97,114,101,110,116,95, - 112,97,116,104,114,188,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, - 99,117,108,97,116,101,136,4,0,0,115,16,0,0,0,0, - 2,12,1,10,1,14,3,18,1,6,1,8,1,6,1,122, - 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1, - 161,0,131,1,83,0,114,110,0,0,0,41,2,114,7,1, - 0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,8,95,95,105, - 116,101,114,95,95,149,4,0,0,115,2,0,0,0,0,1, - 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,105,116,101,114,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,12,0,0,0,124,0,160,0,161,0,124,1,25, - 0,83,0,114,110,0,0,0,169,1,114,33,1,0,0,41, - 2,114,119,0,0,0,218,5,105,110,100,101,120,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,95, - 103,101,116,105,116,101,109,95,95,152,4,0,0,115,2,0, - 0,0,0,1,122,26,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,103,101,116,105,116,101,109,95,95, - 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,14,0,0,0,124,2, - 124,0,106,0,124,1,60,0,100,0,83,0,114,110,0,0, - 0,41,1,114,25,1,0,0,41,3,114,119,0,0,0,114, - 36,1,0,0,114,44,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,11,95,95,115,101,116,105, - 116,101,109,95,95,155,4,0,0,115,2,0,0,0,0,1, - 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,115,101,116,105,116,101,109,95,95,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1, - 161,0,131,1,83,0,114,110,0,0,0,41,2,114,22,0, - 0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,7,95,95,108, - 101,110,95,95,158,4,0,0,115,2,0,0,0,0,1,122, - 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, - 0,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,40,123,33,114,125,41,41,2,114,62,0,0, - 0,114,25,1,0,0,114,247,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,8,95,95,114,101, - 112,114,95,95,161,4,0,0,115,2,0,0,0,0,1,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, - 0,115,12,0,0,0,124,1,124,0,160,0,161,0,107,6, - 83,0,114,110,0,0,0,114,35,1,0,0,169,2,114,119, - 0,0,0,218,4,105,116,101,109,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,12,95,95,99,111,110,116, - 97,105,110,115,95,95,164,4,0,0,115,2,0,0,0,0, - 1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0, - 160,1,124,1,161,1,1,0,100,0,83,0,114,110,0,0, - 0,41,2,114,25,1,0,0,114,187,0,0,0,114,41,1, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,187,0,0,0,167,4,0,0,115,2,0,0,0,0, - 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,97,112,112,101,110,100,78,41,15,114,126,0,0,0, - 114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114, - 210,0,0,0,114,31,1,0,0,114,26,1,0,0,114,33, - 1,0,0,114,34,1,0,0,114,37,1,0,0,114,38,1, - 0,0,114,39,1,0,0,114,40,1,0,0,114,43,1,0, - 0,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,23,1,0,0,109, - 4,0,0,115,24,0,0,0,8,1,4,6,8,6,8,10, - 8,4,8,13,8,3,8,3,8,3,8,3,8,3,8,3, - 114,23,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,80, - 0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132, - 0,90,3,101,4,100,3,100,4,132,0,131,1,90,5,100, - 5,100,6,132,0,90,6,100,7,100,8,132,0,90,7,100, - 9,100,10,132,0,90,8,100,11,100,12,132,0,90,9,100, - 13,100,14,132,0,90,10,100,15,100,16,132,0,90,11,100, - 17,83,0,41,18,218,16,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,18,0,0,0,116,0,124,1,124,2,124,3,131,3,124, - 0,95,1,100,0,83,0,114,110,0,0,0,41,2,114,23, - 1,0,0,114,25,1,0,0,114,29,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,210,0,0, - 0,173,4,0,0,115,2,0,0,0,0,1,122,25,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,95, - 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,100,1,160,0,124,1,106,1,161,1,83, - 0,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114, - 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, - 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, - 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, - 32,32,32,32,32,32,32,32,122,25,60,109,111,100,117,108, - 101,32,123,33,114,125,32,40,110,97,109,101,115,112,97,99, - 101,41,62,41,2,114,62,0,0,0,114,126,0,0,0,41, - 2,114,194,0,0,0,114,217,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,11,109,111,100,117, - 108,101,95,114,101,112,114,176,4,0,0,115,2,0,0,0, - 0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114, + 53,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 115,32,104,97,118,101,32,110,111,32,115,111,117,114,99,101, + 32,99,111,100,101,46,78,114,10,0,0,0,114,242,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,252,0,0,0,164,4,0,0,115,2,0,0,0,0,2, + 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 83,0,41,2,78,84,114,3,0,0,0,114,220,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 183,0,0,0,185,4,0,0,115,2,0,0,0,0,1,122, - 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, - 78,114,40,0,0,0,114,3,0,0,0,114,220,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 230,0,0,0,188,4,0,0,115,2,0,0,0,0,1,122, - 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,0, - 0,67,0,0,0,115,16,0,0,0,116,0,100,1,100,2, - 100,3,100,4,100,5,141,4,83,0,41,6,78,114,40,0, - 0,0,122,8,60,115,116,114,105,110,103,62,114,216,0,0, - 0,84,41,1,114,232,0,0,0,41,1,114,233,0,0,0, - 114,220,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,214,0,0,0,191,4,0,0,115,2,0, - 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, + 0,1,0,0,0,67,0,0,0,115,6,0,0,0,124,0, + 106,0,83,0,114,17,1,0,0,114,70,0,0,0,114,242, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,203,0,0,0,168,4,0,0,115,2,0,0,0, + 0,3,122,32,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,78,41,14,114,149,0,0,0,114,148,0,0, + 0,114,150,0,0,0,114,151,0,0,0,114,232,0,0,0, + 114,10,1,0,0,114,14,1,0,0,114,235,0,0,0,114, + 240,0,0,0,114,206,0,0,0,114,236,0,0,0,114,252, + 0,0,0,114,160,0,0,0,114,203,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,19,1,0,0,121,4,0,0,115,22,0,0,0,8, + 2,4,6,8,4,8,4,8,3,8,8,8,6,8,6,8, + 4,8,4,2,1,114,19,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, + 0,0,0,115,104,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, + 132,0,90,5,100,6,100,7,132,0,90,6,100,8,100,9, + 132,0,90,7,100,10,100,11,132,0,90,8,100,12,100,13, + 132,0,90,9,100,14,100,15,132,0,90,10,100,16,100,17, + 132,0,90,11,100,18,100,19,132,0,90,12,100,20,100,21, + 132,0,90,13,100,22,100,23,132,0,90,14,100,24,83,0, + 41,25,218,14,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,97,38,1,0,0,82,101,112,114,101,115,101,110,116, + 115,32,97,32,110,97,109,101,115,112,97,99,101,32,112,97, + 99,107,97,103,101,39,115,32,112,97,116,104,46,32,32,73, + 116,32,117,115,101,115,32,116,104,101,32,109,111,100,117,108, + 101,32,110,97,109,101,10,32,32,32,32,116,111,32,102,105, + 110,100,32,105,116,115,32,112,97,114,101,110,116,32,109,111, + 100,117,108,101,44,32,97,110,100,32,102,114,111,109,32,116, + 104,101,114,101,32,105,116,32,108,111,111,107,115,32,117,112, + 32,116,104,101,32,112,97,114,101,110,116,39,115,10,32,32, + 32,32,95,95,112,97,116,104,95,95,46,32,32,87,104,101, + 110,32,116,104,105,115,32,99,104,97,110,103,101,115,44,32, + 116,104,101,32,109,111,100,117,108,101,39,115,32,111,119,110, + 32,112,97,116,104,32,105,115,32,114,101,99,111,109,112,117, + 116,101,100,44,10,32,32,32,32,117,115,105,110,103,32,112, + 97,116,104,95,102,105,110,100,101,114,46,32,32,70,111,114, + 32,116,111,112,45,108,101,118,101,108,32,109,111,100,117,108, + 101,115,44,32,116,104,101,32,112,97,114,101,110,116,32,109, + 111,100,117,108,101,39,115,32,112,97,116,104,10,32,32,32, + 32,105,115,32,115,121,115,46,112,97,116,104,46,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,67,0,0,0,115,36,0,0,0,124,1,124,0,95, + 0,124,2,124,0,95,1,116,2,124,0,160,3,161,0,131, + 1,124,0,95,4,124,3,124,0,95,5,100,0,83,0,114, + 68,0,0,0,41,6,218,5,95,110,97,109,101,218,5,95, + 112,97,116,104,114,135,0,0,0,218,16,95,103,101,116,95, + 112,97,114,101,110,116,95,112,97,116,104,218,17,95,108,97, + 115,116,95,112,97,114,101,110,116,95,112,97,116,104,218,12, + 95,112,97,116,104,95,102,105,110,100,101,114,169,4,114,142, + 0,0,0,114,140,0,0,0,114,64,0,0,0,90,11,112, + 97,116,104,95,102,105,110,100,101,114,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,232,0,0,0,181,4, + 0,0,115,8,0,0,0,0,1,6,1,6,1,14,1,122, + 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,38,0,0,0,124,0,106,0,160,1,100,1,161,1, + 92,3,125,1,125,2,125,3,124,2,100,2,107,2,114,30, + 100,3,83,0,124,1,100,4,102,2,83,0,41,5,122,62, + 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, + 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, + 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, + 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,95, + 0,0,0,114,13,0,0,0,41,2,114,25,0,0,0,114, + 64,0,0,0,90,8,95,95,112,97,116,104,95,95,41,2, + 114,46,1,0,0,114,102,0,0,0,41,4,114,142,0,0, + 0,114,38,1,0,0,218,3,100,111,116,90,2,109,101,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,23, + 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, + 104,95,110,97,109,101,115,187,4,0,0,115,8,0,0,0, + 0,2,18,1,8,2,4,3,122,38,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, + 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,28,0,0,0,124,0, + 160,0,161,0,92,2,125,1,125,2,116,1,116,2,106,3, + 124,1,25,0,124,2,131,2,83,0,114,68,0,0,0,41, + 4,114,53,1,0,0,114,154,0,0,0,114,25,0,0,0, + 218,7,109,111,100,117,108,101,115,41,3,114,142,0,0,0, + 90,18,112,97,114,101,110,116,95,109,111,100,117,108,101,95, + 110,97,109,101,90,14,112,97,116,104,95,97,116,116,114,95, + 110,97,109,101,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,48,1,0,0,197,4,0,0,115,4,0,0, + 0,0,1,12,1,122,31,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,103,101,116,95,112,97,114,101,110, + 116,95,112,97,116,104,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, + 80,0,0,0,116,0,124,0,160,1,161,0,131,1,125,1, + 124,1,124,0,106,2,107,3,114,74,124,0,160,3,124,0, + 106,4,124,1,161,2,125,2,124,2,100,0,107,9,114,68, + 124,2,106,5,100,0,107,8,114,68,124,2,106,6,114,68, + 124,2,106,6,124,0,95,7,124,1,124,0,95,2,124,0, + 106,7,83,0,114,68,0,0,0,41,8,114,135,0,0,0, + 114,48,1,0,0,114,49,1,0,0,114,50,1,0,0,114, + 46,1,0,0,114,164,0,0,0,114,202,0,0,0,114,47, + 1,0,0,41,3,114,142,0,0,0,90,11,112,97,114,101, + 110,116,95,112,97,116,104,114,210,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,12,95,114,101, + 99,97,108,99,117,108,97,116,101,201,4,0,0,115,16,0, + 0,0,0,2,12,1,10,1,14,3,18,1,6,1,8,1, + 6,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,116,0,124, + 0,160,1,161,0,131,1,83,0,114,68,0,0,0,41,2, + 114,29,1,0,0,114,55,1,0,0,114,13,1,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, + 95,95,105,116,101,114,95,95,214,4,0,0,115,2,0,0, + 0,0,1,122,23,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,105,116,101,114,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,12,0,0,0,124,0,160,0,161,0, + 124,1,25,0,83,0,114,68,0,0,0,169,1,114,55,1, + 0,0,41,2,114,142,0,0,0,218,5,105,110,100,101,120, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 11,95,95,103,101,116,105,116,101,109,95,95,217,4,0,0, + 115,2,0,0,0,0,1,122,26,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,95,103,101,116,105,116,101, + 109,95,95,99,3,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,67,0,0,0,115,14,0,0, + 0,124,2,124,0,106,0,124,1,60,0,100,0,83,0,114, + 68,0,0,0,41,1,114,47,1,0,0,41,3,114,142,0, + 0,0,114,58,1,0,0,114,64,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,11,95,95,115, + 101,116,105,116,101,109,95,95,220,4,0,0,115,2,0,0, + 0,0,1,122,26,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,115,101,116,105,116,101,109,95,95,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,116,0,124, + 0,160,1,161,0,131,1,83,0,114,68,0,0,0,41,2, + 114,6,0,0,0,114,55,1,0,0,114,13,1,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,7, + 95,95,108,101,110,95,95,223,4,0,0,115,2,0,0,0, + 0,1,122,22,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,108,101,110,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,115,12,0,0,0,100,1,160,0,124,0,106,1, + 161,1,83,0,41,2,78,122,20,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,40,123,33,114,125,41,41,2,114, + 87,0,0,0,114,47,1,0,0,114,13,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,95, + 95,114,101,112,114,95,95,226,4,0,0,115,2,0,0,0, + 0,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 67,0,0,0,115,12,0,0,0,124,1,124,0,160,0,161, + 0,107,6,83,0,114,68,0,0,0,114,57,1,0,0,169, + 2,114,142,0,0,0,218,4,105,116,101,109,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,12,95,95,99, + 111,110,116,97,105,110,115,95,95,229,4,0,0,115,2,0, + 0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,99,111,110,116,97,105,110,115,95, + 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,16,0,0,0,124, + 0,106,0,160,1,124,1,161,1,1,0,100,0,83,0,114, + 68,0,0,0,41,2,114,47,1,0,0,114,60,0,0,0, + 114,63,1,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,60,0,0,0,232,4,0,0,115,2,0, + 0,0,0,1,122,21,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,97,112,112,101,110,100,78,41,15,114,149, + 0,0,0,114,148,0,0,0,114,150,0,0,0,114,151,0, + 0,0,114,232,0,0,0,114,53,1,0,0,114,48,1,0, + 0,114,55,1,0,0,114,56,1,0,0,114,59,1,0,0, + 114,60,1,0,0,114,61,1,0,0,114,62,1,0,0,114, + 65,1,0,0,114,60,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,45,1, + 0,0,174,4,0,0,115,24,0,0,0,8,1,4,6,8, + 6,8,10,8,4,8,13,8,3,8,3,8,3,8,3,8, + 3,8,3,114,45,1,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, + 0,115,80,0,0,0,101,0,90,1,100,0,90,2,100,1, + 100,2,132,0,90,3,101,4,100,3,100,4,132,0,131,1, + 90,5,100,5,100,6,132,0,90,6,100,7,100,8,132,0, + 90,7,100,9,100,10,132,0,90,8,100,11,100,12,132,0, + 90,9,100,13,100,14,132,0,90,10,100,15,100,16,132,0, + 90,11,100,17,83,0,41,18,218,16,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,99,4,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,18,0,0,0,116,0,124,1,124,2,124,3, + 131,3,124,0,95,1,100,0,83,0,114,68,0,0,0,41, + 2,114,45,1,0,0,114,47,1,0,0,114,51,1,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 232,0,0,0,238,4,0,0,115,2,0,0,0,0,1,122, + 25,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,12,0,0,0,100,1,160,0,124,1,106,1, + 161,1,83,0,41,2,122,115,82,101,116,117,114,110,32,114, + 101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,84,104,101,32,105,109,112,111, + 114,116,32,109,97,99,104,105,110,101,114,121,32,100,111,101, + 115,32,116,104,101,32,106,111,98,32,105,116,115,101,108,102, + 46,10,10,32,32,32,32,32,32,32,32,122,25,60,109,111, + 100,117,108,101,32,123,33,114,125,32,40,110,97,109,101,115, + 112,97,99,101,41,62,41,2,114,87,0,0,0,114,149,0, + 0,0,41,2,114,216,0,0,0,114,239,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,11,109, + 111,100,117,108,101,95,114,101,112,114,241,4,0,0,115,2, + 0,0,0,0,7,122,28,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114, + 101,112,114,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, + 0,100,1,83,0,41,2,78,84,114,10,0,0,0,114,242, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,206,0,0,0,250,4,0,0,115,2,0,0,0, + 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,114,211,0,0,0,114,3,0,0,0,114,212,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 213,0,0,0,194,4,0,0,115,2,0,0,0,0,1,122, - 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 0,41,2,78,114,13,0,0,0,114,10,0,0,0,114,242, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,252,0,0,0,253,4,0,0,115,2,0,0,0, + 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,0,83, - 0,114,110,0,0,0,114,3,0,0,0,114,254,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 218,0,0,0,197,4,0,0,115,2,0,0,0,0,1,122, - 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,67,0,0,0,115,26,0,0,0,116,0,160,1,100, - 1,124,0,106,2,161,2,1,0,116,0,160,3,124,0,124, - 1,161,2,83,0,41,2,122,98,76,111,97,100,32,97,32, + 6,0,0,0,67,0,0,0,115,16,0,0,0,116,0,100, + 1,100,2,100,3,100,4,100,5,141,4,83,0,41,6,78, + 114,13,0,0,0,122,8,60,115,116,114,105,110,103,62,114, + 238,0,0,0,84,41,1,114,254,0,0,0,41,1,114,255, + 0,0,0,114,242,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,236,0,0,0,0,5,0,0, + 115,2,0,0,0,0,1,122,25,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,1,83,0,114,233,0,0,0,114,10,0,0,0,114,234, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,235,0,0,0,3,5,0,0,115,2,0,0,0, + 0,1,122,30,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,99,114,101,97,116,101,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,0,83,0,114,68,0,0,0,114,10,0,0,0,114,20, + 1,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,240,0,0,0,6,5,0,0,115,2,0,0,0, + 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,26,0,0,0,116,0, + 160,1,100,1,124,0,106,2,161,2,1,0,116,0,160,3, + 124,0,124,1,161,2,83,0,41,2,122,98,76,111,97,100, + 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, + 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, - 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, - 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,122,38,110,97,109, - 101,115,112,97,99,101,32,109,111,100,117,108,101,32,108,111, - 97,100,101,100,32,119,105,116,104,32,112,97,116,104,32,123, - 33,114,125,41,4,114,135,0,0,0,114,150,0,0,0,114, - 25,1,0,0,114,219,0,0,0,114,220,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,0, - 0,0,200,4,0,0,115,8,0,0,0,0,7,6,1,4, - 255,4,2,122,28,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, - 101,78,41,12,114,126,0,0,0,114,125,0,0,0,114,127, - 0,0,0,114,210,0,0,0,114,208,0,0,0,114,45,1, - 0,0,114,183,0,0,0,114,230,0,0,0,114,214,0,0, - 0,114,213,0,0,0,114,218,0,0,0,114,221,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,44,1,0,0,172,4,0,0,115,18,0, - 0,0,8,1,8,3,2,1,10,8,8,3,8,3,8,3, - 8,3,8,3,114,44,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0, - 0,0,115,118,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,101,4,100,2,100,3,132,0,131,1,90,5,101, - 4,100,4,100,5,132,0,131,1,90,6,101,4,100,6,100, - 7,132,0,131,1,90,7,101,4,100,8,100,9,132,0,131, - 1,90,8,101,4,100,19,100,11,100,12,132,1,131,1,90, - 9,101,4,100,20,100,13,100,14,132,1,131,1,90,10,101, - 4,100,21,100,15,100,16,132,1,131,1,90,11,101,4,100, - 17,100,18,132,0,131,1,90,12,100,10,83,0,41,22,218, - 10,80,97,116,104,70,105,110,100,101,114,122,62,77,101,116, - 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, - 114,32,115,121,115,46,112,97,116,104,32,97,110,100,32,112, - 97,99,107,97,103,101,32,95,95,112,97,116,104,95,95,32, - 97,116,116,114,105,98,117,116,101,115,46,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 67,0,0,0,115,64,0,0,0,116,0,116,1,106,2,160, - 3,161,0,131,1,68,0,93,44,92,2,125,1,125,2,124, - 2,100,1,107,8,114,40,116,1,106,2,124,1,61,0,113, - 14,116,4,124,2,100,2,131,2,114,14,124,2,160,5,161, - 0,1,0,113,14,100,1,83,0,41,3,122,125,67,97,108, - 108,32,116,104,101,32,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,40,41,32,109,101,116,104,111,100, - 32,111,110,32,97,108,108,32,112,97,116,104,32,101,110,116, - 114,121,32,102,105,110,100,101,114,115,10,32,32,32,32,32, - 32,32,32,115,116,111,114,101,100,32,105,110,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,115,32,40,119,104,101,114,101,32,105,109,112, - 108,101,109,101,110,116,101,100,41,46,78,218,17,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,41,6, - 218,4,108,105,115,116,114,8,0,0,0,218,19,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 218,5,105,116,101,109,115,114,129,0,0,0,114,47,1,0, - 0,41,3,114,194,0,0,0,114,117,0,0,0,218,6,102, - 105,110,100,101,114,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,47,1,0,0,218,4,0,0,115,10,0, - 0,0,0,4,22,1,8,1,10,1,10,1,122,28,80,97, - 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, + 104,32,123,33,114,125,41,4,114,158,0,0,0,114,173,0, + 0,0,114,47,1,0,0,114,241,0,0,0,114,242,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,243,0,0,0,9,5,0,0,115,8,0,0,0,0,7, + 6,1,4,255,4,2,122,28,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111, + 100,117,108,101,78,41,12,114,149,0,0,0,114,148,0,0, + 0,114,150,0,0,0,114,232,0,0,0,114,230,0,0,0, + 114,67,1,0,0,114,206,0,0,0,114,252,0,0,0,114, + 236,0,0,0,114,235,0,0,0,114,240,0,0,0,114,243, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,66,1,0,0,237,4,0,0, + 115,18,0,0,0,8,1,8,3,2,1,10,8,8,3,8, + 3,8,3,8,3,8,3,114,66,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,118,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, + 90,5,101,4,100,4,100,5,132,0,131,1,90,6,101,4, + 100,6,100,7,132,0,131,1,90,7,101,4,100,8,100,9, + 132,0,131,1,90,8,101,4,100,19,100,11,100,12,132,1, + 131,1,90,9,101,4,100,20,100,13,100,14,132,1,131,1, + 90,10,101,4,100,21,100,15,100,16,132,1,131,1,90,11, + 101,4,100,17,100,18,132,0,131,1,90,12,100,10,83,0, + 41,22,218,10,80,97,116,104,70,105,110,100,101,114,122,62, + 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, + 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, + 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, + 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, + 0,0,0,67,0,0,0,115,64,0,0,0,116,0,116,1, + 106,2,160,3,161,0,131,1,68,0,93,44,92,2,125,1, + 125,2,124,2,100,1,107,8,114,40,116,1,106,2,124,1, + 61,0,113,14,116,4,124,2,100,2,131,2,114,14,124,2, + 160,5,161,0,1,0,113,14,100,1,83,0,41,3,122,125, + 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, + 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, + 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, + 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, + 105,109,112,108,101,109,101,110,116,101,100,41,46,78,218,17, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,41,6,218,4,108,105,115,116,114,25,0,0,0,218,19, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,218,5,105,116,101,109,115,114,152,0,0,0,114, + 69,1,0,0,41,3,114,216,0,0,0,114,140,0,0,0, + 218,6,102,105,110,100,101,114,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,69,1,0,0,27,5,0,0, + 115,10,0,0,0,0,4,22,1,8,1,10,1,10,1,122, + 28,80,97,116,104,70,105,110,100,101,114,46,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,9,0, + 0,0,67,0,0,0,115,84,0,0,0,116,0,106,1,100, + 1,107,9,114,28,116,0,106,1,115,28,116,2,160,3,100, + 2,116,4,161,2,1,0,116,0,106,1,68,0,93,44,125, + 2,122,14,124,2,124,1,131,1,87,0,2,0,1,0,83, + 0,4,0,116,5,107,10,114,76,1,0,1,0,1,0,89, + 0,113,34,89,0,113,34,88,0,113,34,100,1,83,0,41, + 3,122,46,83,101,97,114,99,104,32,115,121,115,46,112,97, + 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102, + 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, + 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,105,115,32,101,109,112,116,121,41,6,114,25,0, + 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,97, + 0,0,0,114,98,0,0,0,114,162,0,0,0,114,141,0, + 0,0,41,3,114,216,0,0,0,114,64,0,0,0,90,4, + 104,111,111,107,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,11,95,112,97,116,104,95,104,111,111,107,115, + 37,5,0,0,115,16,0,0,0,0,3,16,1,12,1,10, + 1,2,1,14,1,14,1,12,2,122,22,80,97,116,104,70, + 105,110,100,101,114,46,95,112,97,116,104,95,104,111,111,107, + 115,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,8,0,0,0,67,0,0,0,115,104,0,0,0,124, + 1,100,1,107,2,114,44,122,12,116,0,160,1,161,0,125, + 1,87,0,110,22,4,0,116,2,107,10,114,42,1,0,1, + 0,1,0,89,0,100,2,83,0,88,0,122,14,116,3,106, + 4,124,1,25,0,125,2,87,0,110,40,4,0,116,5,107, + 10,114,98,1,0,1,0,1,0,124,0,160,6,124,1,161, + 1,125,2,124,2,116,3,106,4,124,1,60,0,89,0,110, + 2,88,0,124,2,83,0,41,3,122,210,71,101,116,32,116, + 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, + 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, + 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, + 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, + 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, + 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, + 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, + 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, + 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, + 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, + 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, + 110,101,46,10,10,32,32,32,32,32,32,32,32,114,13,0, + 0,0,78,41,7,114,21,0,0,0,114,80,0,0,0,114, + 26,1,0,0,114,25,0,0,0,114,71,1,0,0,218,8, + 75,101,121,69,114,114,111,114,114,75,1,0,0,41,3,114, + 216,0,0,0,114,64,0,0,0,114,73,1,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,20,95, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,50,5,0,0,115,22,0,0,0,0,8,8,1, + 2,1,12,1,14,3,8,1,2,1,14,1,14,1,10,1, + 16,1,122,31,80,97,116,104,70,105,110,100,101,114,46,95, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,99,3,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,4,0,0,0,67,0,0,0,115,82,0,0, + 0,116,0,124,2,100,1,131,2,114,26,124,2,160,1,124, + 1,161,1,92,2,125,3,125,4,110,14,124,2,160,2,124, + 1,161,1,125,3,103,0,125,4,124,3,100,0,107,9,114, + 60,116,3,160,4,124,1,124,3,161,2,83,0,116,3,160, + 5,124,1,100,0,161,2,125,5,124,4,124,5,95,6,124, + 5,83,0,41,2,78,114,161,0,0,0,41,7,114,152,0, + 0,0,114,161,0,0,0,114,229,0,0,0,114,158,0,0, + 0,114,224,0,0,0,114,207,0,0,0,114,202,0,0,0, + 41,6,114,216,0,0,0,114,163,0,0,0,114,73,1,0, + 0,114,164,0,0,0,114,165,0,0,0,114,210,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, + 99,72,5,0,0,115,18,0,0,0,0,4,10,1,16,2, + 10,1,4,1,8,1,12,1,12,1,6,1,122,27,80,97, + 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, + 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, + 0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,67, + 0,0,0,115,166,0,0,0,103,0,125,4,124,2,68,0, + 93,134,125,5,116,0,124,5,116,1,116,2,102,2,131,2, + 115,28,113,8,124,0,160,3,124,5,161,1,125,6,124,6, + 100,1,107,9,114,8,116,4,124,6,100,2,131,2,114,70, + 124,6,160,5,124,1,124,3,161,2,125,7,110,12,124,0, + 160,6,124,1,124,6,161,2,125,7,124,7,100,1,107,8, + 114,92,113,8,124,7,106,7,100,1,107,9,114,110,124,7, + 2,0,1,0,83,0,124,7,106,8,125,8,124,8,100,1, + 107,8,114,132,116,9,100,3,131,1,130,1,124,4,160,10, + 124,8,161,1,1,0,113,8,116,11,160,12,124,1,100,1, + 161,2,125,7,124,4,124,7,95,8,124,7,83,0,41,4, + 122,63,70,105,110,100,32,116,104,101,32,108,111,97,100,101, + 114,32,111,114,32,110,97,109,101,115,112,97,99,101,95,112, + 97,116,104,32,102,111,114,32,116,104,105,115,32,109,111,100, + 117,108,101,47,112,97,99,107,97,103,101,32,110,97,109,101, + 46,78,114,226,0,0,0,122,19,115,112,101,99,32,109,105, + 115,115,105,110,103,32,108,111,97,100,101,114,41,13,114,185, + 0,0,0,114,108,0,0,0,218,5,98,121,116,101,115,114, + 77,1,0,0,114,152,0,0,0,114,226,0,0,0,114,78, + 1,0,0,114,164,0,0,0,114,202,0,0,0,114,141,0, + 0,0,114,191,0,0,0,114,158,0,0,0,114,207,0,0, + 0,41,9,114,216,0,0,0,114,163,0,0,0,114,64,0, + 0,0,114,225,0,0,0,218,14,110,97,109,101,115,112,97, + 99,101,95,112,97,116,104,90,5,101,110,116,114,121,114,73, + 1,0,0,114,210,0,0,0,114,165,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,9,95,103, + 101,116,95,115,112,101,99,87,5,0,0,115,40,0,0,0, + 0,5,4,1,8,1,14,1,2,1,10,1,8,1,10,1, + 14,2,12,1,8,1,2,1,10,1,8,1,6,1,8,1, + 8,5,12,2,12,1,6,1,122,20,80,97,116,104,70,105, + 110,100,101,114,46,95,103,101,116,95,115,112,101,99,99,4, + 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5, + 0,0,0,67,0,0,0,115,100,0,0,0,124,2,100,1, + 107,8,114,14,116,0,106,1,125,2,124,0,160,2,124,1, + 124,2,124,3,161,3,125,4,124,4,100,1,107,8,114,40, + 100,1,83,0,124,4,106,3,100,1,107,8,114,92,124,4, + 106,4,125,5,124,5,114,86,100,1,124,4,95,5,116,6, + 124,1,124,5,124,0,106,2,131,3,124,4,95,4,124,4, + 83,0,100,1,83,0,110,4,124,4,83,0,100,1,83,0, + 41,2,122,141,84,114,121,32,116,111,32,102,105,110,100,32, + 97,32,115,112,101,99,32,102,111,114,32,39,102,117,108,108, + 110,97,109,101,39,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,101,97,114,99,104, + 32,105,115,32,98,97,115,101,100,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,32,32,32,32,32,32,32, + 32,78,41,7,114,25,0,0,0,114,64,0,0,0,114,81, + 1,0,0,114,164,0,0,0,114,202,0,0,0,114,205,0, + 0,0,114,45,1,0,0,41,6,114,216,0,0,0,114,163, + 0,0,0,114,64,0,0,0,114,225,0,0,0,114,210,0, + 0,0,114,80,1,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,226,0,0,0,119,5,0,0,115, + 26,0,0,0,0,6,8,1,6,1,14,1,8,1,4,1, + 10,1,6,1,4,3,6,1,16,1,4,2,6,2,122,20, + 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,3,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,30,0, + 0,0,124,0,160,0,124,1,124,2,161,2,125,3,124,3, + 100,1,107,8,114,24,100,1,83,0,124,3,106,1,83,0, + 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, + 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, + 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,114, + 227,0,0,0,114,228,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,229,0,0,0,143,5,0, + 0,115,8,0,0,0,0,8,12,1,8,1,4,1,122,22, + 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, + 109,111,100,117,108,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,79,0,0,0,115, + 24,0,0,0,100,1,100,2,108,0,109,1,125,3,1,0, + 124,3,106,2,124,1,124,2,142,1,83,0,41,3,97,32, + 1,0,0,10,32,32,32,32,32,32,32,32,70,105,110,100, + 32,100,105,115,116,114,105,98,117,116,105,111,110,115,46,10, + 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,32, + 97,110,32,105,116,101,114,97,98,108,101,32,111,102,32,97, + 108,108,32,68,105,115,116,114,105,98,117,116,105,111,110,32, + 105,110,115,116,97,110,99,101,115,32,99,97,112,97,98,108, + 101,32,111,102,10,32,32,32,32,32,32,32,32,108,111,97, + 100,105,110,103,32,116,104,101,32,109,101,116,97,100,97,116, + 97,32,102,111,114,32,112,97,99,107,97,103,101,115,32,109, + 97,116,99,104,105,110,103,32,96,96,99,111,110,116,101,120, + 116,46,110,97,109,101,96,96,10,32,32,32,32,32,32,32, + 32,40,111,114,32,97,108,108,32,110,97,109,101,115,32,105, + 102,32,96,96,78,111,110,101,96,96,32,105,110,100,105,99, + 97,116,101,100,41,32,97,108,111,110,103,32,116,104,101,32, + 112,97,116,104,115,32,105,110,32,116,104,101,32,108,105,115, + 116,10,32,32,32,32,32,32,32,32,111,102,32,100,105,114, + 101,99,116,111,114,105,101,115,32,96,96,99,111,110,116,101, + 120,116,46,112,97,116,104,96,96,46,10,32,32,32,32,32, + 32,32,32,114,0,0,0,0,41,1,218,18,77,101,116,97, + 100,97,116,97,80,97,116,104,70,105,110,100,101,114,41,3, + 90,18,105,109,112,111,114,116,108,105,98,46,109,101,116,97, + 100,97,116,97,114,82,1,0,0,218,18,102,105,110,100,95, + 100,105,115,116,114,105,98,117,116,105,111,110,115,41,4,114, + 216,0,0,0,114,143,0,0,0,114,144,0,0,0,114,82, + 1,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,83,1,0,0,156,5,0,0,115,4,0,0,0, + 0,10,12,1,122,29,80,97,116,104,70,105,110,100,101,114, + 46,102,105,110,100,95,100,105,115,116,114,105,98,117,116,105, + 111,110,115,41,1,78,41,2,78,78,41,1,78,41,13,114, + 149,0,0,0,114,148,0,0,0,114,150,0,0,0,114,151, + 0,0,0,114,230,0,0,0,114,69,1,0,0,114,75,1, + 0,0,114,77,1,0,0,114,78,1,0,0,114,81,1,0, + 0,114,226,0,0,0,114,229,0,0,0,114,83,1,0,0, + 114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,68,1,0,0,23,5,0,0,115,34,0, + 0,0,8,2,4,2,2,1,10,9,2,1,10,12,2,1, + 10,21,2,1,10,14,2,1,12,31,2,1,12,23,2,1, + 12,12,2,1,114,68,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, + 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, + 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, + 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, + 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, + 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, + 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, + 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, + 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, + 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, + 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, + 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, + 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, + 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, + 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, + 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, + 0,0,7,0,0,0,115,112,0,0,0,103,0,125,3,124, + 2,68,0,93,32,92,2,137,0,125,4,124,3,160,0,135, + 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, + 1,1,0,113,8,124,3,124,0,95,1,124,1,112,54,100, + 3,124,0,95,2,116,3,124,0,106,2,131,1,115,86,116, + 4,116,5,160,6,161,0,124,0,106,2,131,2,124,0,95, + 2,100,4,124,0,95,7,116,8,131,0,124,0,95,9,116, + 8,131,0,124,0,95,10,100,5,83,0,41,6,122,154,73, + 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, + 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, + 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, + 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, + 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, + 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, + 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, + 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, + 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, + 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,0, + 0,0,115,22,0,0,0,124,0,93,14,125,1,124,1,136, + 0,102,2,86,0,1,0,113,2,100,0,83,0,114,68,0, + 0,0,114,10,0,0,0,114,40,1,0,0,169,1,114,164, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,12,0, + 0,0,185,5,0,0,115,4,0,0,0,4,0,2,0,122, + 38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, + 105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,114,95,0,0,0,114,129,0,0, + 0,78,41,11,114,191,0,0,0,218,8,95,108,111,97,100, + 101,114,115,114,64,0,0,0,114,84,0,0,0,114,66,0, + 0,0,114,21,0,0,0,114,80,0,0,0,218,11,95,112, + 97,116,104,95,109,116,105,109,101,218,3,115,101,116,218,11, + 95,112,97,116,104,95,99,97,99,104,101,218,19,95,114,101, + 108,97,120,101,100,95,112,97,116,104,95,99,97,99,104,101, + 41,5,114,142,0,0,0,114,64,0,0,0,218,14,108,111, + 97,100,101,114,95,100,101,116,97,105,108,115,90,7,108,111, + 97,100,101,114,115,114,212,0,0,0,114,10,0,0,0,114, + 85,1,0,0,114,11,0,0,0,114,232,0,0,0,179,5, + 0,0,115,20,0,0,0,0,4,4,1,12,1,26,1,6, + 2,10,1,10,1,18,1,6,1,8,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,67,0,0,0,115,10,0,0,0,100,1, + 124,0,95,0,100,2,83,0,41,3,122,31,73,110,118,97, + 108,105,100,97,116,101,32,116,104,101,32,100,105,114,101,99, + 116,111,114,121,32,109,116,105,109,101,46,114,129,0,0,0, + 78,41,1,114,87,1,0,0,114,13,1,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,69,1,0, + 0,195,5,0,0,115,2,0,0,0,0,2,122,28,70,105, + 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67, - 0,0,0,115,84,0,0,0,116,0,106,1,100,1,107,9, - 114,28,116,0,106,1,115,28,116,2,160,3,100,2,116,4, - 161,2,1,0,116,0,106,1,68,0,93,44,125,2,122,14, - 124,2,124,1,131,1,87,0,2,0,1,0,83,0,4,0, - 116,5,107,10,114,76,1,0,1,0,1,0,89,0,113,34, - 89,0,113,34,88,0,113,34,100,1,83,0,41,3,122,46, - 83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95, - 104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100, - 101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122, - 23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 105,115,32,101,109,112,116,121,41,6,114,8,0,0,0,218, - 10,112,97,116,104,95,104,111,111,107,115,114,75,0,0,0, - 114,76,0,0,0,114,139,0,0,0,114,118,0,0,0,41, - 3,114,194,0,0,0,114,44,0,0,0,90,4,104,111,111, - 107,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,11,95,112,97,116,104,95,104,111,111,107,115,228,4,0, - 0,115,16,0,0,0,0,3,16,1,12,1,10,1,2,1, - 14,1,14,1,12,2,122,22,80,97,116,104,70,105,110,100, - 101,114,46,95,112,97,116,104,95,104,111,111,107,115,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, - 0,0,0,67,0,0,0,115,104,0,0,0,124,1,100,1, - 107,2,114,44,122,12,116,0,160,1,161,0,125,1,87,0, - 110,22,4,0,116,2,107,10,114,42,1,0,1,0,1,0, - 89,0,100,2,83,0,88,0,122,14,116,3,106,4,124,1, - 25,0,125,2,87,0,110,40,4,0,116,5,107,10,114,98, - 1,0,1,0,1,0,124,0,160,6,124,1,161,1,125,2, - 124,2,116,3,106,4,124,1,60,0,89,0,110,2,88,0, - 124,2,83,0,41,3,122,210,71,101,116,32,116,104,101,32, - 102,105,110,100,101,114,32,102,111,114,32,116,104,101,32,112, - 97,116,104,32,101,110,116,114,121,32,102,114,111,109,32,115, - 121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114, - 95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,116,104,101,32,112,97,116,104,32,101,110,116, - 114,121,32,105,115,32,110,111,116,32,105,110,32,116,104,101, - 32,99,97,99,104,101,44,32,102,105,110,100,32,116,104,101, - 32,97,112,112,114,111,112,114,105,97,116,101,32,102,105,110, - 100,101,114,10,32,32,32,32,32,32,32,32,97,110,100,32, - 99,97,99,104,101,32,105,116,46,32,73,102,32,110,111,32, - 102,105,110,100,101,114,32,105,115,32,97,118,97,105,108,97, - 98,108,101,44,32,115,116,111,114,101,32,78,111,110,101,46, - 10,10,32,32,32,32,32,32,32,32,114,40,0,0,0,78, - 41,7,114,2,0,0,0,114,55,0,0,0,114,4,1,0, - 0,114,8,0,0,0,114,49,1,0,0,218,8,75,101,121, - 69,114,114,111,114,114,53,1,0,0,41,3,114,194,0,0, - 0,114,44,0,0,0,114,51,1,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,20,95,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 241,4,0,0,115,22,0,0,0,0,8,8,1,2,1,12, - 1,14,3,8,1,2,1,14,1,14,1,10,1,16,1,122, - 31,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,4,0,0,0,67,0,0,0,115,82,0,0,0,116,0, - 124,2,100,1,131,2,114,26,124,2,160,1,124,1,161,1, - 92,2,125,3,125,4,110,14,124,2,160,2,124,1,161,1, - 125,3,103,0,125,4,124,3,100,0,107,9,114,60,116,3, - 160,4,124,1,124,3,161,2,83,0,116,3,160,5,124,1, - 100,0,161,2,125,5,124,4,124,5,95,6,124,5,83,0, - 41,2,78,114,138,0,0,0,41,7,114,129,0,0,0,114, - 138,0,0,0,114,207,0,0,0,114,135,0,0,0,114,202, - 0,0,0,114,184,0,0,0,114,179,0,0,0,41,6,114, - 194,0,0,0,114,140,0,0,0,114,51,1,0,0,114,141, - 0,0,0,114,142,0,0,0,114,188,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,16,95,108, - 101,103,97,99,121,95,103,101,116,95,115,112,101,99,7,5, - 0,0,115,18,0,0,0,0,4,10,1,16,2,10,1,4, - 1,8,1,12,1,12,1,6,1,122,27,80,97,116,104,70, - 105,110,100,101,114,46,95,108,101,103,97,99,121,95,103,101, - 116,95,115,112,101,99,78,99,4,0,0,0,0,0,0,0, - 0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,0, - 115,166,0,0,0,103,0,125,4,124,2,68,0,93,134,125, - 5,116,0,124,5,116,1,116,2,102,2,131,2,115,28,113, - 8,124,0,160,3,124,5,161,1,125,6,124,6,100,1,107, - 9,114,8,116,4,124,6,100,2,131,2,114,70,124,6,160, - 5,124,1,124,3,161,2,125,7,110,12,124,0,160,6,124, - 1,124,6,161,2,125,7,124,7,100,1,107,8,114,92,113, - 8,124,7,106,7,100,1,107,9,114,110,124,7,2,0,1, - 0,83,0,124,7,106,8,125,8,124,8,100,1,107,8,114, - 132,116,9,100,3,131,1,130,1,124,4,160,10,124,8,161, - 1,1,0,113,8,116,11,160,12,124,1,100,1,161,2,125, - 7,124,4,124,7,95,8,124,7,83,0,41,4,122,63,70, - 105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111, - 114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104, - 32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101, - 47,112,97,99,107,97,103,101,32,110,97,109,101,46,78,114, - 204,0,0,0,122,19,115,112,101,99,32,109,105,115,115,105, - 110,103,32,108,111,97,100,101,114,41,13,114,162,0,0,0, - 114,85,0,0,0,218,5,98,121,116,101,115,114,55,1,0, - 0,114,129,0,0,0,114,204,0,0,0,114,56,1,0,0, - 114,141,0,0,0,114,179,0,0,0,114,118,0,0,0,114, - 168,0,0,0,114,135,0,0,0,114,184,0,0,0,41,9, - 114,194,0,0,0,114,140,0,0,0,114,44,0,0,0,114, - 203,0,0,0,218,14,110,97,109,101,115,112,97,99,101,95, - 112,97,116,104,90,5,101,110,116,114,121,114,51,1,0,0, - 114,188,0,0,0,114,142,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,9,95,103,101,116,95, - 115,112,101,99,22,5,0,0,115,40,0,0,0,0,5,4, - 1,8,1,14,1,2,1,10,1,8,1,10,1,14,2,12, - 1,8,1,2,1,10,1,8,1,6,1,8,1,8,5,12, - 2,12,1,6,1,122,20,80,97,116,104,70,105,110,100,101, - 114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0, - 0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0, - 67,0,0,0,115,100,0,0,0,124,2,100,1,107,8,114, - 14,116,0,106,1,125,2,124,0,160,2,124,1,124,2,124, - 3,161,3,125,4,124,4,100,1,107,8,114,40,100,1,83, - 0,124,4,106,3,100,1,107,8,114,92,124,4,106,4,125, - 5,124,5,114,86,100,1,124,4,95,5,116,6,124,1,124, - 5,124,0,106,2,131,3,124,4,95,4,124,4,83,0,100, - 1,83,0,110,4,124,4,83,0,100,1,83,0,41,2,122, - 141,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, - 112,101,99,32,102,111,114,32,39,102,117,108,108,110,97,109, - 101,39,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,46,10,10,32,32,32,32,32, - 32,32,32,84,104,101,32,115,101,97,114,99,104,32,105,115, - 32,98,97,115,101,100,32,111,110,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,97,110,100,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,32,32,32,32,32,32,32,32,78,41, - 7,114,8,0,0,0,114,44,0,0,0,114,59,1,0,0, - 114,141,0,0,0,114,179,0,0,0,114,182,0,0,0,114, - 23,1,0,0,41,6,114,194,0,0,0,114,140,0,0,0, - 114,44,0,0,0,114,203,0,0,0,114,188,0,0,0,114, - 58,1,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,204,0,0,0,54,5,0,0,115,26,0,0, - 0,0,6,8,1,6,1,14,1,8,1,4,1,10,1,6, - 1,4,3,6,1,16,1,4,2,6,2,122,20,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, - 99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124, - 0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,107, - 8,114,24,100,1,83,0,124,3,106,1,83,0,41,2,122, - 170,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, - 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, - 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, - 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, - 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,42,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,2,100,1,107,8,114,26,100,1,103,0,102,2, + 83,0,124,2,106,1,124,2,106,2,112,38,103,0,102,2, + 83,0,41,2,122,197,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, + 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, + 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, + 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, + 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, + 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,114,205,0,0, - 0,114,206,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,207,0,0,0,78,5,0,0,115,8, - 0,0,0,0,8,12,1,8,1,4,1,122,22,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, - 117,108,101,99,1,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,79,0,0,0,115,24,0,0, - 0,100,1,100,2,108,0,109,1,125,3,1,0,124,3,106, - 2,124,1,124,2,142,1,83,0,41,3,97,32,1,0,0, - 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105, - 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32, - 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32, - 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, - 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, - 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, - 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, - 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, - 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, - 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110, - 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111, - 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96, - 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101, - 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116, - 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32, - 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116, - 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46, - 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32, - 114,73,0,0,0,41,1,218,18,77,101,116,97,100,97,116, - 97,80,97,116,104,70,105,110,100,101,114,41,3,90,18,105, - 109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116, - 97,114,60,1,0,0,218,18,102,105,110,100,95,100,105,115, - 116,114,105,98,117,116,105,111,110,115,41,4,114,194,0,0, - 0,114,120,0,0,0,114,121,0,0,0,114,60,1,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 61,1,0,0,91,5,0,0,115,4,0,0,0,0,10,12, - 1,122,29,80,97,116,104,70,105,110,100,101,114,46,102,105, - 110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,115, - 41,1,78,41,2,78,78,41,1,78,41,13,114,126,0,0, - 0,114,125,0,0,0,114,127,0,0,0,114,128,0,0,0, - 114,208,0,0,0,114,47,1,0,0,114,53,1,0,0,114, - 55,1,0,0,114,56,1,0,0,114,59,1,0,0,114,204, - 0,0,0,114,207,0,0,0,114,61,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,46,1,0,0,214,4,0,0,115,34,0,0,0,8, - 2,4,2,2,1,10,9,2,1,10,12,2,1,10,21,2, - 1,10,14,2,1,12,31,2,1,12,23,2,1,12,12,2, - 1,114,46,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 90,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 101,6,90,7,100,6,100,7,132,0,90,8,100,8,100,9, - 132,0,90,9,100,19,100,11,100,12,132,1,90,10,100,13, - 100,14,132,0,90,11,101,12,100,15,100,16,132,0,131,1, - 90,13,100,17,100,18,132,0,90,14,100,10,83,0,41,20, - 218,10,70,105,108,101,70,105,110,100,101,114,122,172,70,105, - 108,101,45,98,97,115,101,100,32,102,105,110,100,101,114,46, - 10,10,32,32,32,32,73,110,116,101,114,97,99,116,105,111, - 110,115,32,119,105,116,104,32,116,104,101,32,102,105,108,101, - 32,115,121,115,116,101,109,32,97,114,101,32,99,97,99,104, - 101,100,32,102,111,114,32,112,101,114,102,111,114,109,97,110, - 99,101,44,32,98,101,105,110,103,10,32,32,32,32,114,101, - 102,114,101,115,104,101,100,32,119,104,101,110,32,116,104,101, - 32,100,105,114,101,99,116,111,114,121,32,116,104,101,32,102, - 105,110,100,101,114,32,105,115,32,104,97,110,100,108,105,110, - 103,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102, - 105,101,100,46,10,10,32,32,32,32,99,2,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,7, - 0,0,0,115,84,0,0,0,103,0,125,3,124,2,68,0, - 93,32,92,2,137,0,125,4,124,3,160,0,135,0,102,1, - 100,1,100,2,132,8,124,4,68,0,131,1,161,1,1,0, - 113,8,124,3,124,0,95,1,124,1,112,54,100,3,124,0, - 95,2,100,4,124,0,95,3,116,4,131,0,124,0,95,5, - 116,4,131,0,124,0,95,6,100,5,83,0,41,6,122,154, - 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, - 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, - 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, - 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, - 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, - 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, - 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, - 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, - 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, - 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,51, - 0,0,0,115,22,0,0,0,124,0,93,14,125,1,124,1, - 136,0,102,2,86,0,1,0,113,2,100,0,83,0,114,110, - 0,0,0,114,3,0,0,0,114,17,1,0,0,169,1,114, - 141,0,0,0,114,3,0,0,0,114,6,0,0,0,114,20, - 1,0,0,120,5,0,0,115,4,0,0,0,4,0,2,0, - 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, - 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, - 103,101,110,101,120,112,114,62,114,71,0,0,0,114,105,0, - 0,0,78,41,7,114,168,0,0,0,218,8,95,108,111,97, - 100,101,114,115,114,44,0,0,0,218,11,95,112,97,116,104, - 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, - 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, - 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, - 119,0,0,0,114,44,0,0,0,218,14,108,111,97,100,101, - 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, - 114,115,114,190,0,0,0,114,3,0,0,0,114,63,1,0, - 0,114,6,0,0,0,114,210,0,0,0,114,5,0,0,115, - 16,0,0,0,0,4,4,1,12,1,26,1,6,2,10,1, - 6,1,8,1,122,19,70,105,108,101,70,105,110,100,101,114, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, - 0,0,115,10,0,0,0,100,1,124,0,95,0,100,2,83, - 0,41,3,122,31,73,110,118,97,108,105,100,97,116,101,32, - 116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,116, - 105,109,101,46,114,105,0,0,0,78,41,1,114,65,1,0, - 0,114,247,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,47,1,0,0,128,5,0,0,115,2, - 0,0,0,0,2,122,28,70,105,108,101,70,105,110,100,101, - 114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99, - 104,101,115,99,2,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,67,0,0,0,115,42,0,0, - 0,124,0,160,0,124,1,161,1,125,2,124,2,100,1,107, - 8,114,26,100,1,103,0,102,2,83,0,124,2,106,1,124, - 2,106,2,112,38,103,0,102,2,83,0,41,2,122,197,84, - 114,121,32,116,111,32,102,105,110,100,32,97,32,108,111,97, - 100,101,114,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,44,32,111,114, - 32,116,104,101,32,110,97,109,101,115,112,97,99,101,10,32, - 32,32,32,32,32,32,32,112,97,99,107,97,103,101,32,112, - 111,114,116,105,111,110,115,46,32,82,101,116,117,114,110,115, - 32,40,108,111,97,100,101,114,44,32,108,105,115,116,45,111, - 102,45,112,111,114,116,105,111,110,115,41,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,78,41,3,114,204,0,0,0,114,141,0,0, - 0,114,179,0,0,0,41,3,114,119,0,0,0,114,140,0, - 0,0,114,188,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,138,0,0,0,134,5,0,0,115, - 8,0,0,0,0,7,10,1,8,1,8,1,122,22,70,105, - 108,101,70,105,110,100,101,114,46,102,105,110,100,95,108,111, - 97,100,101,114,99,6,0,0,0,0,0,0,0,0,0,0, - 0,7,0,0,0,6,0,0,0,67,0,0,0,115,26,0, - 0,0,124,1,124,2,124,3,131,2,125,6,116,0,124,2, - 124,3,124,6,124,4,100,1,141,4,83,0,41,2,78,114, - 178,0,0,0,41,1,114,191,0,0,0,41,7,114,119,0, - 0,0,114,189,0,0,0,114,140,0,0,0,114,44,0,0, - 0,90,4,115,109,115,108,114,203,0,0,0,114,141,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,59,1,0,0,146,5,0,0,115,8,0,0,0,0,1, - 10,1,8,1,2,255,122,20,70,105,108,101,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,78,99,3,0, - 0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,0, - 0,0,67,0,0,0,115,98,1,0,0,100,1,125,3,124, - 1,160,0,100,2,161,1,100,3,25,0,125,4,122,24,116, - 1,124,0,106,2,112,34,116,3,160,4,161,0,131,1,106, - 5,125,5,87,0,110,24,4,0,116,6,107,10,114,66,1, - 0,1,0,1,0,100,4,125,5,89,0,110,2,88,0,124, - 5,124,0,106,7,107,3,114,92,124,0,160,8,161,0,1, - 0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106, - 10,125,6,124,4,160,11,161,0,125,7,110,10,124,0,106, - 12,125,6,124,4,125,7,124,7,124,6,107,6,114,218,116, - 13,124,0,106,2,124,4,131,2,125,8,124,0,106,14,68, - 0,93,58,92,2,125,9,125,10,100,5,124,9,23,0,125, - 11,116,13,124,8,124,11,131,2,125,12,116,15,124,12,131, - 1,114,150,124,0,160,16,124,10,124,1,124,12,124,8,103, - 1,124,2,161,5,2,0,1,0,83,0,113,150,116,17,124, - 8,131,1,125,3,124,0,106,14,68,0,93,82,92,2,125, - 9,125,10,116,13,124,0,106,2,124,4,124,9,23,0,131, - 2,125,12,116,18,106,19,100,6,124,12,100,3,100,7,141, - 3,1,0,124,7,124,9,23,0,124,6,107,6,114,224,116, - 15,124,12,131,1,114,224,124,0,160,16,124,10,124,1,124, - 12,100,8,124,2,161,5,2,0,1,0,83,0,113,224,124, - 3,144,1,114,94,116,18,160,19,100,9,124,8,161,2,1, - 0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,103, - 1,124,13,95,21,124,13,83,0,100,8,83,0,41,10,122, - 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, - 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116, - 104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99, - 44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116, - 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, - 70,114,71,0,0,0,114,28,0,0,0,114,105,0,0,0, - 114,210,0,0,0,122,9,116,114,121,105,110,103,32,123,125, - 41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,25, - 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, - 99,101,32,102,111,114,32,123,125,41,22,114,41,0,0,0, - 114,49,0,0,0,114,44,0,0,0,114,2,0,0,0,114, - 55,0,0,0,114,11,1,0,0,114,50,0,0,0,114,65, - 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, - 114,7,0,0,0,114,68,1,0,0,114,106,0,0,0,114, - 67,1,0,0,114,38,0,0,0,114,64,1,0,0,114,54, - 0,0,0,114,59,1,0,0,114,56,0,0,0,114,135,0, - 0,0,114,150,0,0,0,114,184,0,0,0,114,179,0,0, - 0,41,14,114,119,0,0,0,114,140,0,0,0,114,203,0, - 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, - 90,11,116,97,105,108,95,109,111,100,117,108,101,114,170,0, - 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, - 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, - 116,104,114,18,1,0,0,114,189,0,0,0,90,13,105,110, - 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, - 108,95,112,97,116,104,114,188,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,204,0,0,0,151, - 5,0,0,115,74,0,0,0,0,5,4,1,14,1,2,1, - 24,1,14,1,10,1,10,1,8,1,6,2,6,1,6,1, - 10,2,6,1,4,2,8,1,12,1,14,1,8,1,10,1, - 8,1,26,4,8,2,14,1,16,1,16,1,12,1,8,1, - 10,1,2,0,2,255,10,2,6,1,12,1,12,1,8,1, - 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, - 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, - 0,115,190,0,0,0,124,0,106,0,125,1,122,22,116,1, - 160,2,124,1,112,22,116,1,160,3,161,0,161,1,125,2, - 87,0,110,30,4,0,116,4,116,5,116,6,102,3,107,10, - 114,58,1,0,1,0,1,0,103,0,125,2,89,0,110,2, - 88,0,116,7,106,8,160,9,100,1,161,1,115,84,116,10, - 124,2,131,1,124,0,95,11,110,74,116,10,131,0,125,3, - 124,2,68,0,93,56,125,4,124,4,160,12,100,2,161,1, - 92,3,125,5,125,6,125,7,124,6,114,136,100,3,160,13, - 124,5,124,7,160,14,161,0,161,2,125,8,110,4,124,5, - 125,8,124,3,160,15,124,8,161,1,1,0,113,94,124,3, - 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,186, - 100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17, - 100,6,83,0,41,7,122,68,70,105,108,108,32,116,104,101, - 32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116, - 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, - 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, - 115,32,100,105,114,101,99,116,111,114,121,46,114,0,0,0, - 0,114,71,0,0,0,114,61,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 83,0,0,0,115,20,0,0,0,104,0,124,0,93,12,125, - 1,124,1,160,0,161,0,146,2,113,4,83,0,114,3,0, - 0,0,41,1,114,106,0,0,0,41,2,114,32,0,0,0, - 90,2,102,110,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,9,60,115,101,116,99,111,109,112,62,228,5, - 0,0,115,4,0,0,0,6,0,2,0,122,41,70,105,108, - 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, - 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, - 116,99,111,109,112,62,78,41,18,114,44,0,0,0,114,2, - 0,0,0,114,8,1,0,0,114,55,0,0,0,114,4,1, - 0,0,218,15,80,101,114,109,105,115,115,105,111,110,69,114, - 114,111,114,218,18,78,111,116,65,68,105,114,101,99,116,111, - 114,121,69,114,114,111,114,114,8,0,0,0,114,9,0,0, - 0,114,10,0,0,0,114,66,1,0,0,114,67,1,0,0, - 114,101,0,0,0,114,62,0,0,0,114,106,0,0,0,218, - 3,97,100,100,114,11,0,0,0,114,68,1,0,0,41,9, - 114,119,0,0,0,114,44,0,0,0,114,9,1,0,0,90, - 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, - 110,116,101,110,116,115,114,42,1,0,0,114,117,0,0,0, - 114,30,1,0,0,114,18,1,0,0,90,8,110,101,119,95, - 110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,70,1,0,0,199,5,0,0,115,34,0,0, - 0,0,2,6,1,2,1,22,1,20,3,10,3,12,1,12, - 7,6,1,8,1,16,1,4,1,18,2,4,1,12,1,6, - 1,12,1,122,22,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 7,0,0,0,115,18,0,0,0,135,0,135,1,102,2,100, - 1,100,2,132,8,125,2,124,2,83,0,41,3,97,20,1, - 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, - 32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119, - 105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110, - 115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101, - 114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10, - 32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10, - 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, - 97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104, - 101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116, - 32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32, - 32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115, - 34,0,0,0,116,0,124,0,131,1,115,20,116,1,100,1, - 124,0,100,2,141,2,130,1,136,0,124,0,102,1,136,1, - 158,2,142,0,83,0,41,3,122,45,80,97,116,104,32,104, - 111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,105, - 98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,101, - 70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,105, - 114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117, - 112,112,111,114,116,101,100,114,48,0,0,0,41,2,114,56, - 0,0,0,114,118,0,0,0,114,48,0,0,0,169,2,114, - 194,0,0,0,114,69,1,0,0,114,3,0,0,0,114,6, - 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,240,5,0, - 0,115,6,0,0,0,0,2,8,1,12,1,122,54,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,114,3,0,0,0,41,3,114,194,0,0,0, - 114,69,1,0,0,114,76,1,0,0,114,3,0,0,0,114, - 75,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, - 104,111,111,107,230,5,0,0,115,4,0,0,0,0,10,14, - 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, - 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, - 0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, - 40,123,33,114,125,41,41,2,114,62,0,0,0,114,44,0, - 0,0,114,247,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,40,1,0,0,248,5,0,0,115, - 2,0,0,0,0,1,122,19,70,105,108,101,70,105,110,100, - 101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,15, - 114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114, - 128,0,0,0,114,210,0,0,0,114,47,1,0,0,114,144, - 0,0,0,114,207,0,0,0,114,138,0,0,0,114,59,1, - 0,0,114,204,0,0,0,114,70,1,0,0,114,208,0,0, - 0,114,77,1,0,0,114,40,1,0,0,114,3,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 62,1,0,0,105,5,0,0,115,22,0,0,0,8,2,4, - 7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,2, - 1,10,17,114,62,1,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,0, - 0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,4, - 124,0,160,0,100,2,161,1,125,5,124,4,115,66,124,5, - 114,36,124,5,106,1,125,4,110,30,124,2,124,3,107,2, - 114,56,116,2,124,1,124,2,131,2,125,4,110,10,116,3, - 124,1,124,2,131,2,125,4,124,5,115,84,116,4,124,1, - 124,2,124,4,100,3,141,3,125,5,122,36,124,5,124,0, - 100,2,60,0,124,4,124,0,100,1,60,0,124,2,124,0, - 100,4,60,0,124,3,124,0,100,5,60,0,87,0,110,20, - 4,0,116,5,107,10,114,140,1,0,1,0,1,0,89,0, - 110,2,88,0,100,0,83,0,41,6,78,218,10,95,95,108, - 111,97,100,101,114,95,95,218,8,95,95,115,112,101,99,95, - 95,114,63,1,0,0,90,8,95,95,102,105,108,101,95,95, - 90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3, - 103,101,116,114,141,0,0,0,114,16,1,0,0,114,10,1, - 0,0,114,191,0,0,0,218,9,69,120,99,101,112,116,105, - 111,110,41,6,90,2,110,115,114,117,0,0,0,90,8,112, - 97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97, - 109,101,114,141,0,0,0,114,188,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,14,95,102,105, - 120,95,117,112,95,109,111,100,117,108,101,254,5,0,0,115, - 34,0,0,0,0,2,10,1,10,1,4,1,4,1,8,1, - 8,1,12,2,10,1,4,1,14,1,2,1,8,1,8,1, - 8,1,12,1,14,2,114,82,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,38,0,0,0,116,0,116,1,160,2,161, - 0,102,2,125,0,116,3,116,4,102,2,125,1,116,5,116, - 6,102,2,125,2,124,0,124,1,124,2,103,3,83,0,41, - 1,122,95,82,101,116,117,114,110,115,32,97,32,108,105,115, - 116,32,111,102,32,102,105,108,101,45,98,97,115,101,100,32, - 109,111,100,117,108,101,32,108,111,97,100,101,114,115,46,10, - 10,32,32,32,32,69,97,99,104,32,105,116,101,109,32,105, - 115,32,97,32,116,117,112,108,101,32,40,108,111,97,100,101, - 114,44,32,115,117,102,102,105,120,101,115,41,46,10,32,32, - 32,32,41,7,114,253,0,0,0,114,164,0,0,0,218,18, - 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, - 101,115,114,10,1,0,0,114,102,0,0,0,114,16,1,0, - 0,114,89,0,0,0,41,3,90,10,101,120,116,101,110,115, - 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, - 116,101,99,111,100,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,185,0,0,0,21,6,0,0,115,8, - 0,0,0,0,5,12,1,8,1,8,1,114,185,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0, - 0,9,0,0,0,67,0,0,0,115,178,1,0,0,124,0, - 97,0,116,0,106,1,97,1,116,0,106,2,97,2,116,1, - 106,3,116,4,25,0,125,1,100,1,68,0,93,48,125,2, - 124,2,116,1,106,3,107,7,114,56,116,0,160,5,124,2, - 161,1,125,3,110,10,116,1,106,3,124,2,25,0,125,3, - 116,6,124,1,124,2,124,3,131,3,1,0,113,30,100,2, - 100,3,103,1,102,2,100,4,100,5,100,3,103,2,102,2, - 102,2,125,4,124,4,68,0,93,110,92,2,125,5,125,6, - 116,7,100,6,100,7,132,0,124,6,68,0,131,1,131,1, - 115,136,116,8,130,1,124,6,100,8,25,0,125,7,124,5, - 116,1,106,3,107,6,114,170,116,1,106,3,124,5,25,0, - 125,8,1,0,113,226,113,106,122,20,116,0,160,5,124,5, - 161,1,125,8,87,0,1,0,113,226,87,0,113,106,4,0, - 116,9,107,10,114,214,1,0,1,0,1,0,89,0,113,106, - 89,0,113,106,88,0,113,106,116,9,100,9,131,1,130,1, - 116,6,124,1,100,10,124,8,131,3,1,0,116,6,124,1, - 100,11,124,7,131,3,1,0,116,6,124,1,100,12,100,13, - 160,10,124,6,161,1,131,3,1,0,116,6,124,1,100,14, - 100,15,100,16,132,0,124,6,68,0,131,1,131,3,1,0, - 116,0,160,5,100,17,161,1,125,9,116,6,124,1,100,17, - 124,9,131,3,1,0,116,0,160,5,100,18,161,1,125,10, - 116,6,124,1,100,18,124,10,131,3,1,0,124,5,100,4, - 107,2,144,1,114,110,116,0,160,5,100,19,161,1,125,11, - 116,6,124,1,100,20,124,11,131,3,1,0,116,6,124,1, - 100,21,116,11,131,0,131,3,1,0,116,12,160,13,116,2, - 160,14,161,0,161,1,1,0,124,5,100,4,107,2,144,1, - 114,174,116,15,160,16,100,22,161,1,1,0,100,23,116,12, - 107,6,144,1,114,174,100,24,116,17,95,18,100,25,83,0, - 41,26,122,205,83,101,116,117,112,32,116,104,101,32,112,97, - 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,101, - 114,115,32,102,111,114,32,105,109,112,111,114,116,108,105,98, - 32,98,121,32,105,109,112,111,114,116,105,110,103,32,110,101, - 101,100,101,100,10,32,32,32,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, - 106,101,99,116,105,110,103,32,116,104,101,109,32,105,110,116, - 111,32,116,104,101,32,103,108,111,98,97,108,32,110,97,109, - 101,115,112,97,99,101,46,10,10,32,32,32,32,79,116,104, - 101,114,32,99,111,109,112,111,110,101,110,116,115,32,97,114, - 101,32,101,120,116,114,97,99,116,101,100,32,102,114,111,109, - 32,116,104,101,32,99,111,114,101,32,98,111,111,116,115,116, - 114,97,112,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,41,4,114,64,0,0,0,114,75,0,0,0,218,8,98, - 117,105,108,116,105,110,115,114,161,0,0,0,90,5,112,111, - 115,105,120,250,1,47,90,2,110,116,250,1,92,99,1,0, + 46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,226, + 0,0,0,114,164,0,0,0,114,202,0,0,0,41,3,114, + 142,0,0,0,114,163,0,0,0,114,210,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,161,0, + 0,0,201,5,0,0,115,8,0,0,0,0,7,10,1,8, + 1,8,1,122,22,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,108,111,97,100,101,114,99,6,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0, + 67,0,0,0,115,26,0,0,0,124,1,124,2,124,3,131, + 2,125,6,116,0,124,2,124,3,124,6,124,4,100,1,141, + 4,83,0,41,2,78,114,201,0,0,0,41,1,114,213,0, + 0,0,41,7,114,142,0,0,0,114,211,0,0,0,114,163, + 0,0,0,114,64,0,0,0,90,4,115,109,115,108,114,225, + 0,0,0,114,164,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,81,1,0,0,213,5,0,0, + 115,8,0,0,0,0,1,10,1,8,1,2,255,122,20,70, + 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, + 112,101,99,78,99,3,0,0,0,0,0,0,0,0,0,0, + 0,14,0,0,0,9,0,0,0,67,0,0,0,115,130,1, + 0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,3, + 25,0,125,4,122,24,116,1,124,0,106,2,112,34,116,3, + 160,4,161,0,131,1,106,5,125,5,87,0,110,24,4,0, + 116,6,107,10,114,66,1,0,1,0,1,0,100,4,125,5, + 89,0,110,2,88,0,124,5,124,0,106,7,107,3,114,92, + 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, + 131,0,114,114,124,0,106,10,125,6,124,4,160,11,161,0, + 125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7, + 124,6,107,6,114,218,116,13,124,0,106,2,124,4,131,2, + 125,8,124,0,106,14,68,0,93,58,92,2,125,9,125,10, + 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, + 125,12,116,15,124,12,131,1,114,150,124,0,160,16,124,10, + 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, + 83,0,113,150,116,17,124,8,131,1,125,3,124,0,106,14, + 68,0,93,114,92,2,125,9,125,10,122,20,116,13,124,0, + 106,2,124,4,124,9,23,0,131,2,125,12,87,0,110,26, + 4,0,116,18,107,10,144,1,114,22,1,0,1,0,1,0, + 89,0,1,0,100,6,83,0,88,0,116,19,106,20,100,7, + 124,12,100,3,100,8,141,3,1,0,124,7,124,9,23,0, + 124,6,107,6,114,224,116,15,124,12,131,1,114,224,124,0, + 160,16,124,10,124,1,124,12,100,6,124,2,161,5,2,0, + 1,0,83,0,113,224,124,3,144,1,114,126,116,19,160,20, + 100,9,124,8,161,2,1,0,116,19,160,21,124,1,100,6, + 161,2,125,13,124,8,103,1,124,13,95,22,124,13,83,0, + 100,6,83,0,41,10,122,111,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101, + 116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105, + 110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101, + 32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32, + 32,32,32,32,32,32,32,70,114,95,0,0,0,114,44,0, + 0,0,114,129,0,0,0,114,232,0,0,0,78,122,9,116, + 114,121,105,110,103,32,123,125,41,1,90,9,118,101,114,98, + 111,115,105,116,121,122,25,112,111,115,115,105,98,108,101,32, + 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, + 41,23,114,102,0,0,0,114,74,0,0,0,114,64,0,0, + 0,114,21,0,0,0,114,80,0,0,0,114,33,1,0,0, + 114,75,0,0,0,114,87,1,0,0,218,11,95,102,105,108, + 108,95,99,97,99,104,101,114,24,0,0,0,114,90,1,0, + 0,114,130,0,0,0,114,89,1,0,0,114,66,0,0,0, + 114,86,1,0,0,114,79,0,0,0,114,81,1,0,0,114, + 81,0,0,0,114,110,0,0,0,114,158,0,0,0,114,173, + 0,0,0,114,207,0,0,0,114,202,0,0,0,41,14,114, + 142,0,0,0,114,163,0,0,0,114,225,0,0,0,90,12, + 105,115,95,110,97,109,101,115,112,97,99,101,90,11,116,97, + 105,108,95,109,111,100,117,108,101,114,193,0,0,0,90,5, + 99,97,99,104,101,90,12,99,97,99,104,101,95,109,111,100, + 117,108,101,90,9,98,97,115,101,95,112,97,116,104,114,41, + 1,0,0,114,211,0,0,0,90,13,105,110,105,116,95,102, + 105,108,101,110,97,109,101,90,9,102,117,108,108,95,112,97, + 116,104,114,210,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,226,0,0,0,218,5,0,0,115, + 80,0,0,0,0,5,4,1,14,1,2,1,24,1,14,1, + 10,1,10,1,8,1,6,2,6,1,6,1,10,2,6,1, + 4,2,8,1,12,1,14,1,8,1,10,1,8,1,26,4, + 8,2,14,1,2,1,20,1,16,1,10,1,16,1,12,1, + 8,1,10,1,2,0,2,255,10,2,6,1,12,1,12,1, + 8,1,4,1,122,20,70,105,108,101,70,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,99,1,0,0,0,0, + 0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,67, + 0,0,0,115,190,0,0,0,124,0,106,0,125,1,122,22, + 116,1,160,2,124,1,112,22,116,1,160,3,161,0,161,1, + 125,2,87,0,110,30,4,0,116,4,116,5,116,6,102,3, + 107,10,114,58,1,0,1,0,1,0,103,0,125,2,89,0, + 110,2,88,0,116,7,106,8,160,9,100,1,161,1,115,84, + 116,10,124,2,131,1,124,0,95,11,110,74,116,10,131,0, + 125,3,124,2,68,0,93,56,125,4,124,4,160,12,100,2, + 161,1,92,3,125,5,125,6,125,7,124,6,114,136,100,3, + 160,13,124,5,124,7,160,14,161,0,161,2,125,8,110,4, + 124,5,125,8,124,3,160,15,124,8,161,1,1,0,113,94, + 124,3,124,0,95,11,116,7,106,8,160,9,116,16,161,1, + 114,186,100,4,100,5,132,0,124,2,68,0,131,1,124,0, + 95,17,100,6,83,0,41,7,122,68,70,105,108,108,32,116, + 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, + 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, + 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, + 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,19, + 0,0,0,114,95,0,0,0,114,86,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,83,0,0,0,115,20,0,0,0,104,0,124,0,93, + 12,125,1,124,1,160,0,161,0,146,2,113,4,83,0,114, + 10,0,0,0,41,1,114,130,0,0,0,41,2,114,8,0, + 0,0,90,2,102,110,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,18,0,0,0,42,6,0,0,115,4, + 0,0,0,6,0,2,0,122,41,70,105,108,101,70,105,110, + 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,46, + 60,108,111,99,97,108,115,62,46,60,115,101,116,99,111,109, + 112,62,78,41,18,114,64,0,0,0,114,21,0,0,0,114, + 30,1,0,0,114,80,0,0,0,114,26,1,0,0,218,15, + 80,101,114,109,105,115,115,105,111,110,69,114,114,111,114,218, + 18,78,111,116,65,68,105,114,101,99,116,111,114,121,69,114, + 114,111,114,114,25,0,0,0,114,26,0,0,0,114,27,0, + 0,0,114,88,1,0,0,114,89,1,0,0,114,125,0,0, + 0,114,87,0,0,0,114,130,0,0,0,218,3,97,100,100, + 114,28,0,0,0,114,90,1,0,0,41,9,114,142,0,0, + 0,114,64,0,0,0,114,31,1,0,0,90,21,108,111,119, + 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, + 116,115,114,64,1,0,0,114,140,0,0,0,114,52,1,0, + 0,114,41,1,0,0,90,8,110,101,119,95,110,97,109,101, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 92,1,0,0,13,6,0,0,115,34,0,0,0,0,2,6, + 1,2,1,22,1,20,3,10,3,12,1,12,7,6,1,8, + 1,16,1,4,1,18,2,4,1,12,1,6,1,12,1,122, + 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, + 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,7,0,0,0, + 115,18,0,0,0,135,0,135,1,102,2,100,1,100,2,132, + 8,125,2,124,2,83,0,41,3,97,20,1,0,0,65,32, + 99,108,97,115,115,32,109,101,116,104,111,100,32,119,104,105, + 99,104,32,114,101,116,117,114,110,115,32,97,32,99,108,111, + 115,117,114,101,32,116,111,32,117,115,101,32,111,110,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,10,32,32,32, + 32,32,32,32,32,119,104,105,99,104,32,119,105,108,108,32, + 114,101,116,117,114,110,32,97,110,32,105,110,115,116,97,110, + 99,101,32,117,115,105,110,103,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,108,111,97,100,101,114,115,32,97, + 110,100,32,116,104,101,32,112,97,116,104,10,32,32,32,32, + 32,32,32,32,99,97,108,108,101,100,32,111,110,32,116,104, + 101,32,99,108,111,115,117,114,101,46,10,10,32,32,32,32, + 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, + 99,97,108,108,101,100,32,111,110,32,116,104,101,32,99,108, + 111,115,117,114,101,32,105,115,32,110,111,116,32,97,32,100, + 105,114,101,99,116,111,114,121,44,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,10,32,32,32,32,32,32,32, + 32,114,97,105,115,101,100,46,10,10,32,32,32,32,32,32, + 32,32,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,19,0,0,0,115,34,0,0,0, + 116,0,124,0,131,1,115,20,116,1,100,1,124,0,100,2, + 141,2,130,1,136,0,124,0,102,1,136,1,158,2,142,0, + 83,0,41,3,122,45,80,97,116,104,32,104,111,111,107,32, + 102,111,114,32,105,109,112,111,114,116,108,105,98,46,109,97, + 99,104,105,110,101,114,121,46,70,105,108,101,70,105,110,100, + 101,114,46,122,30,111,110,108,121,32,100,105,114,101,99,116, + 111,114,105,101,115,32,97,114,101,32,115,117,112,112,111,114, + 116,101,100,114,70,0,0,0,41,2,114,81,0,0,0,114, + 141,0,0,0,114,70,0,0,0,169,2,114,216,0,0,0, + 114,91,1,0,0,114,10,0,0,0,114,11,0,0,0,218, + 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,54,6,0,0,115,6,0, + 0,0,0,2,8,1,12,1,122,54,70,105,108,101,70,105, + 110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,60, + 108,111,99,97,108,115,62,46,112,97,116,104,95,104,111,111, + 107,95,102,111,114,95,70,105,108,101,70,105,110,100,101,114, + 114,10,0,0,0,41,3,114,216,0,0,0,114,91,1,0, + 0,114,97,1,0,0,114,10,0,0,0,114,96,1,0,0, + 114,11,0,0,0,218,9,112,97,116,104,95,104,111,111,107, + 44,6,0,0,115,4,0,0,0,0,10,14,6,122,20,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, + 122,16,70,105,108,101,70,105,110,100,101,114,40,123,33,114, + 125,41,41,2,114,87,0,0,0,114,64,0,0,0,114,13, + 1,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,62,1,0,0,62,6,0,0,115,2,0,0,0, + 0,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, + 95,114,101,112,114,95,95,41,1,78,41,15,114,149,0,0, + 0,114,148,0,0,0,114,150,0,0,0,114,151,0,0,0, + 114,232,0,0,0,114,69,1,0,0,114,167,0,0,0,114, + 229,0,0,0,114,161,0,0,0,114,81,1,0,0,114,226, + 0,0,0,114,92,1,0,0,114,230,0,0,0,114,98,1, + 0,0,114,62,1,0,0,114,10,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,84,1,0,0, + 170,5,0,0,115,22,0,0,0,8,2,4,7,8,16,8, + 4,4,2,8,12,8,5,10,51,8,31,2,1,10,17,114, + 84,1,0,0,99,4,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,8,0,0,0,67,0,0,0,115,146,0, + 0,0,124,0,160,0,100,1,161,1,125,4,124,0,160,0, + 100,2,161,1,125,5,124,4,115,66,124,5,114,36,124,5, + 106,1,125,4,110,30,124,2,124,3,107,2,114,56,116,2, + 124,1,124,2,131,2,125,4,110,10,116,3,124,1,124,2, + 131,2,125,4,124,5,115,84,116,4,124,1,124,2,124,4, + 100,3,141,3,125,5,122,36,124,5,124,0,100,2,60,0, + 124,4,124,0,100,1,60,0,124,2,124,0,100,4,60,0, + 124,3,124,0,100,5,60,0,87,0,110,20,4,0,116,5, + 107,10,114,140,1,0,1,0,1,0,89,0,110,2,88,0, + 100,0,83,0,41,6,78,218,10,95,95,108,111,97,100,101, + 114,95,95,218,8,95,95,115,112,101,99,95,95,114,85,1, + 0,0,90,8,95,95,102,105,108,101,95,95,90,10,95,95, + 99,97,99,104,101,100,95,95,41,6,218,3,103,101,116,114, + 164,0,0,0,114,39,1,0,0,114,32,1,0,0,114,213, + 0,0,0,218,9,69,120,99,101,112,116,105,111,110,41,6, + 90,2,110,115,114,140,0,0,0,90,8,112,97,116,104,110, + 97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,164, + 0,0,0,114,210,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,14,95,102,105,120,95,117,112, + 95,109,111,100,117,108,101,68,6,0,0,115,34,0,0,0, + 0,2,10,1,10,1,4,1,4,1,8,1,8,1,12,2, + 10,1,4,1,14,1,2,1,8,1,8,1,8,1,12,1, + 14,2,114,103,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,38,0,0,0,116,0,116,1,160,2,161,0,102,2,125, + 0,116,3,116,4,102,2,125,1,116,5,116,6,102,2,125, + 2,124,0,124,1,124,2,103,3,83,0,41,1,122,95,82, + 101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102, + 32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,117, + 108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,32, + 32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,32, + 116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,115, + 117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,7, + 114,19,1,0,0,114,187,0,0,0,218,18,101,120,116,101, + 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,32, + 1,0,0,114,126,0,0,0,114,39,1,0,0,114,112,0, + 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, + 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, + 100,101,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,208,0,0,0,91,6,0,0,115,8,0,0,0,0, + 5,12,1,8,1,8,1,114,208,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,12,0,0,0,9,0,0, + 0,67,0,0,0,115,178,1,0,0,124,0,97,0,116,0, + 106,1,97,1,116,0,106,2,97,2,116,1,106,3,116,4, + 25,0,125,1,100,1,68,0,93,48,125,2,124,2,116,1, + 106,3,107,7,114,56,116,0,160,5,124,2,161,1,125,3, + 110,10,116,1,106,3,124,2,25,0,125,3,116,6,124,1, + 124,2,124,3,131,3,1,0,113,30,100,2,100,3,103,1, + 102,2,100,4,100,5,100,3,103,2,102,2,102,2,125,4, + 124,4,68,0,93,110,92,2,125,5,125,6,116,7,100,6, + 100,7,132,0,124,6,68,0,131,1,131,1,115,136,116,8, + 130,1,124,6,100,8,25,0,125,7,124,5,116,1,106,3, + 107,6,114,170,116,1,106,3,124,5,25,0,125,8,1,0, + 113,226,113,106,122,20,116,0,160,5,124,5,161,1,125,8, + 87,0,1,0,113,226,87,0,113,106,4,0,116,9,107,10, + 114,214,1,0,1,0,1,0,89,0,113,106,89,0,113,106, + 88,0,113,106,116,9,100,9,131,1,130,1,116,6,124,1, + 100,10,124,8,131,3,1,0,116,6,124,1,100,11,124,7, + 131,3,1,0,116,6,124,1,100,12,100,13,160,10,124,6, + 161,1,131,3,1,0,116,6,124,1,100,14,100,15,100,16, + 132,0,124,6,68,0,131,1,131,3,1,0,116,0,160,5, + 100,17,161,1,125,9,116,6,124,1,100,17,124,9,131,3, + 1,0,116,0,160,5,100,18,161,1,125,10,116,6,124,1, + 100,18,124,10,131,3,1,0,124,5,100,4,107,2,144,1, + 114,110,116,0,160,5,100,19,161,1,125,11,116,6,124,1, + 100,20,124,11,131,3,1,0,116,6,124,1,100,21,116,11, + 131,0,131,3,1,0,116,12,160,13,116,2,160,14,161,0, + 161,1,1,0,124,5,100,4,107,2,144,1,114,174,116,15, + 160,16,100,22,161,1,1,0,100,23,116,12,107,6,144,1, + 114,174,100,24,116,17,95,18,100,25,83,0,41,26,122,205, + 83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,98, + 97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,32, + 105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,100, + 10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,116, + 105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,104, + 101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,97, + 99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,99, + 111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,120, + 116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,101, + 32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,41,4,114, + 89,0,0,0,114,97,0,0,0,218,8,98,117,105,108,116, + 105,110,115,114,184,0,0,0,218,5,112,111,115,105,120,114, + 2,0,0,0,218,2,110,116,114,1,0,0,0,99,1,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, 0,0,115,0,0,0,115,26,0,0,0,124,0,93,18,125, 1,116,0,124,1,131,1,100,0,107,2,86,0,1,0,113, - 2,100,1,83,0,41,2,114,39,0,0,0,78,41,1,114, - 22,0,0,0,41,2,114,32,0,0,0,114,95,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 20,1,0,0,57,6,0,0,115,4,0,0,0,4,0,2, - 0,122,25,95,115,101,116,117,112,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,114,73,0,0, - 0,122,30,105,109,112,111,114,116,108,105,98,32,114,101,113, - 117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,110, - 116,114,2,0,0,0,114,35,0,0,0,114,31,0,0,0, - 114,40,0,0,0,114,58,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83, - 0,0,0,115,22,0,0,0,104,0,124,0,93,14,125,1, - 100,0,124,1,155,0,157,2,146,2,113,4,83,0,41,1, - 114,74,0,0,0,114,3,0,0,0,41,2,114,32,0,0, - 0,218,1,115,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,71,1,0,0,73,6,0,0,115,4,0,0, - 0,6,0,2,0,122,25,95,115,101,116,117,112,46,60,108, - 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, - 90,7,95,116,104,114,101,97,100,90,8,95,119,101,97,107, - 114,101,102,90,6,119,105,110,114,101,103,114,193,0,0,0, - 114,7,0,0,0,122,4,46,112,121,119,122,6,95,100,46, - 112,121,100,84,78,41,19,114,135,0,0,0,114,8,0,0, - 0,114,164,0,0,0,114,32,1,0,0,114,126,0,0,0, - 90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95, - 110,97,109,101,114,130,0,0,0,218,3,97,108,108,114,23, - 0,0,0,114,118,0,0,0,114,36,0,0,0,114,13,0, - 0,0,114,22,1,0,0,114,168,0,0,0,114,83,1,0, - 0,114,102,0,0,0,114,187,0,0,0,114,192,0,0,0, - 114,196,0,0,0,41,12,218,17,95,98,111,111,116,115,116, - 114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102, - 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, - 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, - 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, - 115,90,10,98,117,105,108,116,105,110,95,111,115,114,31,0, - 0,0,114,35,0,0,0,90,9,111,115,95,109,111,100,117, - 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, - 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, - 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, - 6,95,115,101,116,117,112,32,6,0,0,115,78,0,0,0, - 0,8,4,1,6,1,6,3,10,1,8,1,10,1,12,2, - 10,1,14,3,22,1,12,2,22,1,8,1,10,1,10,1, - 6,2,2,1,10,1,10,1,14,1,12,2,8,1,12,1, - 12,1,18,1,22,3,10,1,12,3,10,1,12,3,10,1, - 10,1,12,3,14,1,14,1,10,1,10,1,10,1,114,90, - 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0, - 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, - 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161, - 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100, - 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116, - 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, - 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46, - 78,41,10,114,90,1,0,0,114,185,0,0,0,114,8,0, - 0,0,114,52,1,0,0,114,168,0,0,0,114,62,1,0, - 0,114,77,1,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,187,0,0,0,114,46,1,0,0,41,2,114,89,1, - 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, - 97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,8,95,105,110,115,116,97,108,108,97,6, - 0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114, - 92,1,0,0,41,1,114,60,0,0,0,41,1,78,41,3, - 78,78,78,41,2,114,73,0,0,0,114,73,0,0,0,41, - 1,84,41,1,78,41,1,78,41,63,114,128,0,0,0,114, - 12,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69, - 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, - 83,95,66,89,84,69,83,95,75,69,89,114,11,0,0,0, - 114,13,0,0,0,114,20,0,0,0,114,27,0,0,0,114, - 29,0,0,0,114,38,0,0,0,114,47,0,0,0,114,49, - 0,0,0,114,53,0,0,0,114,54,0,0,0,114,56,0, - 0,0,114,59,0,0,0,114,69,0,0,0,218,4,116,121, - 112,101,218,8,95,95,99,111,100,101,95,95,114,163,0,0, - 0,114,18,0,0,0,114,149,0,0,0,114,17,0,0,0, - 114,24,0,0,0,114,237,0,0,0,114,92,0,0,0,114, - 88,0,0,0,114,102,0,0,0,114,89,0,0,0,90,23, - 68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83, - 85,70,70,73,88,69,83,90,27,79,80,84,73,77,73,90, - 69,68,95,66,89,84,69,67,79,68,69,95,83,85,70,70, - 73,88,69,83,114,98,0,0,0,114,103,0,0,0,114,109, - 0,0,0,114,113,0,0,0,114,115,0,0,0,114,137,0, - 0,0,114,144,0,0,0,114,153,0,0,0,114,157,0,0, - 0,114,159,0,0,0,114,166,0,0,0,114,171,0,0,0, - 114,172,0,0,0,114,177,0,0,0,218,6,111,98,106,101, - 99,116,114,186,0,0,0,114,191,0,0,0,114,192,0,0, - 0,114,209,0,0,0,114,222,0,0,0,114,240,0,0,0, - 114,10,1,0,0,114,16,1,0,0,114,22,1,0,0,114, - 253,0,0,0,114,23,1,0,0,114,44,1,0,0,114,46, - 1,0,0,114,62,1,0,0,114,82,1,0,0,114,185,0, - 0,0,114,90,1,0,0,114,92,1,0,0,114,3,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,126, - 0,0,0,4,22,4,1,4,1,2,1,2,255,4,4,8, - 17,8,5,8,5,8,6,8,6,8,12,8,10,8,9,8, - 5,8,7,8,9,10,22,10,127,0,13,16,1,12,2,4, - 1,4,2,6,2,6,2,8,2,16,71,8,40,8,19,8, - 12,8,12,8,28,8,17,8,33,8,28,8,24,10,13,10, - 10,10,11,8,14,6,3,4,1,2,255,12,68,14,64,14, - 29,16,127,0,17,14,72,18,45,18,26,4,3,18,53,14, - 63,14,42,14,127,0,20,14,127,0,22,10,23,8,11,8, - 65, + 2,100,1,83,0,114,3,0,0,0,114,5,0,0,0,114, + 7,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,12,0,0,0,127,6,0,0,115,4,0,0, + 0,4,0,2,0,122,25,95,115,101,116,117,112,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 114,0,0,0,0,122,30,105,109,112,111,114,116,108,105,98, + 32,114,101,113,117,105,114,101,115,32,112,111,115,105,120,32, + 111,114,32,110,116,114,21,0,0,0,114,58,0,0,0,114, + 49,0,0,0,114,13,0,0,0,218,20,95,112,97,116,104, + 115,101,112,115,95,119,105,116,104,95,99,111,108,111,110,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,83,0,0,0,115,22,0,0,0,104,0,124, + 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113, + 4,83,0,114,14,0,0,0,114,10,0,0,0,114,16,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,18,0,0,0,143,6,0,0,115,4,0,0,0,6, + 0,2,0,122,25,95,115,101,116,117,112,46,60,108,111,99, + 97,108,115,62,46,60,115,101,116,99,111,109,112,62,90,7, + 95,116,104,114,101,97,100,90,8,95,119,101,97,107,114,101, + 102,218,6,119,105,110,114,101,103,114,215,0,0,0,114,24, + 0,0,0,122,4,46,112,121,119,122,6,95,100,46,112,121, + 100,84,78,41,19,114,158,0,0,0,114,25,0,0,0,114, + 187,0,0,0,114,54,1,0,0,114,149,0,0,0,90,18, + 95,98,117,105,108,116,105,110,95,102,114,111,109,95,110,97, + 109,101,114,153,0,0,0,218,3,97,108,108,114,39,0,0, + 0,114,141,0,0,0,114,61,0,0,0,114,30,0,0,0, + 114,44,1,0,0,114,191,0,0,0,114,104,1,0,0,114, + 126,0,0,0,114,60,0,0,0,114,214,0,0,0,114,218, + 0,0,0,41,12,218,17,95,98,111,111,116,115,116,114,97, + 112,95,109,111,100,117,108,101,90,11,115,101,108,102,95,109, + 111,100,117,108,101,90,12,98,117,105,108,116,105,110,95,110, + 97,109,101,90,14,98,117,105,108,116,105,110,95,109,111,100, + 117,108,101,90,10,111,115,95,100,101,116,97,105,108,115,90, + 10,98,117,105,108,116,105,110,95,111,115,114,49,0,0,0, + 114,58,0,0,0,90,9,111,115,95,109,111,100,117,108,101, + 90,13,116,104,114,101,97,100,95,109,111,100,117,108,101,90, + 14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,90, + 13,119,105,110,114,101,103,95,109,111,100,117,108,101,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,6,95, + 115,101,116,117,112,102,6,0,0,115,78,0,0,0,0,8, + 4,1,6,1,6,3,10,1,8,1,10,1,12,2,10,1, + 14,3,22,1,12,2,22,1,8,1,10,1,10,1,6,2, + 2,1,10,1,10,1,14,1,12,2,8,1,12,1,12,1, + 18,1,22,3,10,1,12,3,10,1,12,3,10,1,10,1, + 12,3,14,1,14,1,10,1,10,1,10,1,114,112,1,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, + 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, + 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, + 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, + 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, + 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, + 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, + 10,114,112,1,0,0,114,208,0,0,0,114,25,0,0,0, + 114,74,1,0,0,114,191,0,0,0,114,84,1,0,0,114, + 98,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, + 60,0,0,0,114,68,1,0,0,41,2,114,111,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,8,95,105,110,115,116,97,108,108,167,6,0,0, + 115,8,0,0,0,0,2,8,1,6,1,20,1,114,114,1, + 0,0,41,1,114,85,0,0,0,41,1,78,41,3,78,78, + 78,41,2,114,0,0,0,0,114,0,0,0,0,41,1,84, + 41,1,78,41,1,78,41,82,114,151,0,0,0,114,187,0, + 0,0,114,89,0,0,0,114,25,0,0,0,114,97,0,0, + 0,114,184,0,0,0,114,26,0,0,0,90,11,95,77,83, + 95,87,73,78,68,79,87,83,114,107,1,0,0,114,21,0, + 0,0,114,109,1,0,0,114,106,1,0,0,114,49,0,0, + 0,114,110,1,0,0,114,39,0,0,0,114,58,0,0,0, + 114,135,0,0,0,114,56,0,0,0,114,61,0,0,0,114, + 108,1,0,0,114,29,0,0,0,90,37,95,67,65,83,69, + 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, + 84,70,79,82,77,83,95,66,89,84,69,83,95,75,69,89, + 114,28,0,0,0,114,30,0,0,0,114,37,0,0,0,114, + 43,0,0,0,114,45,0,0,0,114,66,0,0,0,114,73, + 0,0,0,114,74,0,0,0,114,78,0,0,0,114,79,0, + 0,0,114,81,0,0,0,114,84,0,0,0,114,93,0,0, + 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, + 95,114,186,0,0,0,114,35,0,0,0,114,172,0,0,0, + 114,34,0,0,0,114,40,0,0,0,114,3,1,0,0,114, + 115,0,0,0,114,111,0,0,0,114,126,0,0,0,114,112, + 0,0,0,90,23,68,69,66,85,71,95,66,89,84,69,67, + 79,68,69,95,83,85,70,70,73,88,69,83,90,27,79,80, + 84,73,77,73,90,69,68,95,66,89,84,69,67,79,68,69, + 95,83,85,70,70,73,88,69,83,114,120,0,0,0,114,127, + 0,0,0,114,134,0,0,0,114,136,0,0,0,114,138,0, + 0,0,114,160,0,0,0,114,167,0,0,0,114,176,0,0, + 0,114,180,0,0,0,114,182,0,0,0,114,189,0,0,0, + 114,194,0,0,0,114,195,0,0,0,114,200,0,0,0,218, + 6,111,98,106,101,99,116,114,209,0,0,0,114,213,0,0, + 0,114,214,0,0,0,114,231,0,0,0,114,244,0,0,0, + 114,6,1,0,0,114,32,1,0,0,114,39,1,0,0,114, + 44,1,0,0,114,19,1,0,0,114,45,1,0,0,114,66, + 1,0,0,114,68,1,0,0,114,84,1,0,0,114,103,1, + 0,0,114,208,0,0,0,114,112,1,0,0,114,114,1,0, + 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,8,60,109,111,100,117,108,101,62,1, + 0,0,0,115,170,0,0,0,4,22,8,1,8,1,8,1, + 8,1,8,3,10,1,4,1,8,1,10,2,8,3,4,1, + 10,2,6,2,22,1,8,1,8,1,10,1,14,4,4,1, + 4,1,2,1,2,255,4,4,8,17,8,5,8,5,8,6, + 4,1,10,30,8,6,8,8,8,10,8,9,8,5,8,7, + 6,1,10,8,8,5,10,22,10,127,0,13,16,1,12,2, + 4,1,4,2,6,2,6,2,8,2,16,71,8,40,8,19, + 8,12,8,12,8,28,8,17,8,33,8,28,8,24,10,13, + 10,10,10,11,8,14,6,3,4,1,2,255,12,73,14,64, + 14,29,16,127,0,17,14,72,18,45,18,26,4,3,18,53, + 14,63,14,42,14,127,0,20,14,127,0,27,10,23,8,11, + 8,65, }; From webhook-mailer at python.org Fri Apr 9 18:12:07 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 22:12:07 -0000 Subject: [Python-checkins] Add ignore file for the abidump check (GH-25322) Message-ID: https://github.com/python/cpython/commit/291d38d6e92ff6a665ea9b095f9d816ae42a1249 commit: 291d38d6e92ff6a665ea9b095f9d816ae42a1249 branch: 3.8 author: Pablo Galindo committer: pablogsal date: 2021-04-09T23:11:58+01:00 summary: Add ignore file for the abidump check (GH-25322) files: A Doc/data/python3.8.abi.ignorefile M Makefile.pre.in diff --git a/Doc/data/python3.8.abi.ignorefile b/Doc/data/python3.8.abi.ignorefile new file mode 100644 index 0000000000000..a9c89f0a746c8 --- /dev/null +++ b/Doc/data/python3.8.abi.ignorefile @@ -0,0 +1,8 @@ +[suppress_type] +name_regexp = _Py.* + +[suppress_variable] +name_regexp = _Py.* + +[suppress_function] +name_regexp = _Py.* diff --git a/Makefile.pre.in b/Makefile.pre.in index 30280782216cc..c328d35beb81d 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -731,7 +731,9 @@ regen-abidump: all @$(UPDATE_FILE) $(srcdir)/Doc/data/python$(LDVERSION).abi $(srcdir)/Doc/data/python$(LDVERSION).abi.new check-abidump: all - abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types --no-architecture --no-added-syms + abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types \ + --suppressions $(srcdir)/Doc/data/python$(LDVERSION).abi.ignorefile \ + --no-architecture --no-added-syms ############################################################################ # Regenerate all generated files From webhook-mailer at python.org Fri Apr 9 18:12:12 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 09 Apr 2021 22:12:12 -0000 Subject: [Python-checkins] Add ignore file for the abidump check (GH-25323) Message-ID: https://github.com/python/cpython/commit/b3fec753bb14e10066be908b93d3448c6b433ea6 commit: b3fec753bb14e10066be908b93d3448c6b433ea6 branch: 3.9 author: Pablo Galindo committer: pablogsal date: 2021-04-09T23:12:08+01:00 summary: Add ignore file for the abidump check (GH-25323) files: A Doc/data/python3.9.abi.ignorefile M Makefile.pre.in diff --git a/Doc/data/python3.9.abi.ignorefile b/Doc/data/python3.9.abi.ignorefile new file mode 100644 index 0000000000000..a9c89f0a746c8 --- /dev/null +++ b/Doc/data/python3.9.abi.ignorefile @@ -0,0 +1,8 @@ +[suppress_type] +name_regexp = _Py.* + +[suppress_variable] +name_regexp = _Py.* + +[suppress_function] +name_regexp = _Py.* diff --git a/Makefile.pre.in b/Makefile.pre.in index d088eb5768fc8..9aeeac5cca295 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -759,7 +759,9 @@ regen-abidump: all @$(UPDATE_FILE) $(srcdir)/Doc/data/python$(LDVERSION).abi $(srcdir)/Doc/data/python$(LDVERSION).abi.new check-abidump: all - abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types --no-architecture --no-added-syms + abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types \ + --suppressions $(srcdir)/Doc/data/python$(LDVERSION).abi.ignorefile \ + --no-architecture --no-added-syms ############################################################################ # Regenerate all generated files From webhook-mailer at python.org Fri Apr 9 23:45:58 2021 From: webhook-mailer at python.org (gpshead) Date: Sat, 10 Apr 2021 03:45:58 -0000 Subject: [Python-checkins] bpo-43478: Restrict use of Mock objects as specs (GH-25326) Message-ID: https://github.com/python/cpython/commit/dccdc500f9b5dab0a20407ae0178d393796a8828 commit: dccdc500f9b5dab0a20407ae0178d393796a8828 branch: master author: Matthew Suozzo committer: gpshead date: 2021-04-09T20:45:50-07:00 summary: bpo-43478: Restrict use of Mock objects as specs (GH-25326) * Restrict using Mock objects as specs as this is always a test bug where the resulting mock is misleadingly useless. * Skip a broken test that exposes a bug elsewhere in mock (noted in the original issue). files: A Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst M Lib/unittest/mock.py M Lib/unittest/test/testmock/testasync.py M Lib/unittest/test/testmock/testmock.py diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 720f682efbb54..c6067151de14f 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -36,6 +36,10 @@ from functools import wraps, partial +class InvalidSpecError(Exception): + """Indicates that an invalid value was used as a mock spec.""" + + _builtins = {name for name in dir(builtins) if not name.startswith('_')} FILTER_DIR = True @@ -653,10 +657,17 @@ def __getattr__(self, name): self._mock_children[name] = result elif isinstance(result, _SpecState): - result = create_autospec( - result.spec, result.spec_set, result.instance, - result.parent, result.name - ) + try: + result = create_autospec( + result.spec, result.spec_set, result.instance, + result.parent, result.name + ) + except InvalidSpecError: + target_name = self.__dict__['_mock_name'] or self + raise InvalidSpecError( + f'Cannot autospec attr {name!r} from target ' + f'{target_name!r} as it has already been mocked out. ' + f'[target={self!r}, attr={result.spec!r}]') self._mock_children[name] = result return result @@ -1273,6 +1284,14 @@ def __init__( ) if not unsafe: _check_spec_arg_typos(kwargs) + if _is_instance_mock(spec): + raise InvalidSpecError( + f'Cannot spec attr {attribute!r} as the spec ' + f'has already been mocked out. [spec={spec!r}]') + if _is_instance_mock(spec_set): + raise InvalidSpecError( + f'Cannot spec attr {attribute!r} as the spec_set ' + f'target has already been mocked out. [spec_set={spec_set!r}]') self.getter = getter self.attribute = attribute @@ -1500,6 +1519,18 @@ def __enter__(self): if autospec is True: autospec = original + if _is_instance_mock(self.target): + raise InvalidSpecError( + f'Cannot autospec attr {self.attribute!r} as the patch ' + f'target has already been mocked out. ' + f'[target={self.target!r}, attr={autospec!r}]') + if _is_instance_mock(autospec): + target_name = getattr(self.target, '__name__', self.target) + raise InvalidSpecError( + f'Cannot autospec attr {self.attribute!r} from target ' + f'{target_name!r} as it has already been mocked out. ' + f'[target={self.target!r}, attr={autospec!r}]') + new = create_autospec(autospec, spec_set=spec_set, _name=self.attribute, **kwargs) elif kwargs: @@ -2613,6 +2644,9 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None, spec = type(spec) is_type = isinstance(spec, type) + if _is_instance_mock(spec): + raise InvalidSpecError(f'Cannot autospec a Mock object. ' + f'[object={spec!r}]') is_async_func = _is_async_func(spec) _kwargs = {'spec': spec} if spec_set: diff --git a/Lib/unittest/test/testmock/testasync.py b/Lib/unittest/test/testmock/testasync.py index 690ca4f55f9e3..e1866a3492cb5 100644 --- a/Lib/unittest/test/testmock/testasync.py +++ b/Lib/unittest/test/testmock/testasync.py @@ -199,9 +199,9 @@ def test_create_autospec_instance(self): with self.assertRaises(RuntimeError): create_autospec(async_func, instance=True) + @unittest.skip('Broken test from https://bugs.python.org/issue37251') def test_create_autospec_awaitable_class(self): - awaitable_mock = create_autospec(spec=AwaitableClass()) - self.assertIsInstance(create_autospec(awaitable_mock), AsyncMock) + self.assertIsInstance(create_autospec(AwaitableClass), AsyncMock) def test_create_autospec(self): spec = create_autospec(async_func_args) diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py index e38f41e1d2152..fdba543b53511 100644 --- a/Lib/unittest/test/testmock/testmock.py +++ b/Lib/unittest/test/testmock/testmock.py @@ -11,7 +11,7 @@ call, DEFAULT, patch, sentinel, MagicMock, Mock, NonCallableMock, NonCallableMagicMock, AsyncMock, _Call, _CallList, - create_autospec + create_autospec, InvalidSpecError ) @@ -205,6 +205,28 @@ def f(): pass self.assertRaisesRegex(ValueError, 'Bazinga!', mock) + def test_autospec_mock(self): + class A(object): + class B(object): + C = None + + with mock.patch.object(A, 'B'): + with self.assertRaisesRegex(InvalidSpecError, + "Cannot autospec attr 'B' from target https://github.com/python/cpython/commit/ea9b2d631902238acf69e51af6e3d308567b5dfd commit: ea9b2d631902238acf69e51af6e3d308567b5dfd branch: master author: Shreyan Avigyan committer: rhettinger date: 2021-04-10T08:54:32-07:00 summary: bpo-43739: Add type declaration Doc/extending/extending.rst example files: A Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst M Doc/extending/extending.rst diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 25dc2934d29ef..bc85a05ff2f85 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -410,7 +410,7 @@ optionally followed by an import of the module:: /* Optionally import the module; alternatively, import can be deferred until the embedded script imports it. */ - pmodule = PyImport_ImportModule("spam"); + PyObject *pmodule = PyImport_ImportModule("spam"); if (!pmodule) { PyErr_Print(); fprintf(stderr, "Error: could not import module 'spam'\n"); diff --git a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst new file mode 100644 index 0000000000000..9f8d3625e7961 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst @@ -0,0 +1 @@ +Fixing the example code in Doc/extending/extending.rst to declare and initialize the pmodule variable to be of the right type. \ No newline at end of file From webhook-mailer at python.org Sat Apr 10 12:19:19 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 10 Apr 2021 16:19:19 -0000 Subject: [Python-checkins] bpo-43739: Add type declaration Doc/extending/extending.rst example (GH-25332) Message-ID: https://github.com/python/cpython/commit/3a3c0464bd719a8cac6e52b02a3479b2834b88a4 commit: 3a3c0464bd719a8cac6e52b02a3479b2834b88a4 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-10T09:19:11-07:00 summary: bpo-43739: Add type declaration Doc/extending/extending.rst example (GH-25332) files: A Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst M Doc/extending/extending.rst diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 25dc2934d29ef..bc85a05ff2f85 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -410,7 +410,7 @@ optionally followed by an import of the module:: /* Optionally import the module; alternatively, import can be deferred until the embedded script imports it. */ - pmodule = PyImport_ImportModule("spam"); + PyObject *pmodule = PyImport_ImportModule("spam"); if (!pmodule) { PyErr_Print(); fprintf(stderr, "Error: could not import module 'spam'\n"); diff --git a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst new file mode 100644 index 0000000000000..9f8d3625e7961 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst @@ -0,0 +1 @@ +Fixing the example code in Doc/extending/extending.rst to declare and initialize the pmodule variable to be of the right type. \ No newline at end of file From webhook-mailer at python.org Sat Apr 10 12:19:53 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 10 Apr 2021 16:19:53 -0000 Subject: [Python-checkins] bpo-43739: Add type declaration Doc/extending/extending.rst example (GH-25333) Message-ID: https://github.com/python/cpython/commit/28fb2d1c4dbf16b05acfb20d457b08e049a7c83f commit: 28fb2d1c4dbf16b05acfb20d457b08e049a7c83f branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-10T09:19:49-07:00 summary: bpo-43739: Add type declaration Doc/extending/extending.rst example (GH-25333) files: A Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst M Doc/extending/extending.rst diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 25dc2934d29ef..bc85a05ff2f85 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -410,7 +410,7 @@ optionally followed by an import of the module:: /* Optionally import the module; alternatively, import can be deferred until the embedded script imports it. */ - pmodule = PyImport_ImportModule("spam"); + PyObject *pmodule = PyImport_ImportModule("spam"); if (!pmodule) { PyErr_Print(); fprintf(stderr, "Error: could not import module 'spam'\n"); diff --git a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst new file mode 100644 index 0000000000000..9f8d3625e7961 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst @@ -0,0 +1 @@ +Fixing the example code in Doc/extending/extending.rst to declare and initialize the pmodule variable to be of the right type. \ No newline at end of file From webhook-mailer at python.org Sat Apr 10 13:55:21 2021 From: webhook-mailer at python.org (gpshead) Date: Sat, 10 Apr 2021 17:55:21 -0000 Subject: [Python-checkins] bpo-40701: doc typo historcal -> historical (GH-25334) Message-ID: https://github.com/python/cpython/commit/e05a703848473b0365886dcc593cbddc46609f29 commit: e05a703848473b0365886dcc593cbddc46609f29 branch: master author: Gregory P. Smith committer: gpshead date: 2021-04-10T10:55:14-07:00 summary: bpo-40701: doc typo historcal -> historical (GH-25334) files: M Doc/library/tempfile.rst diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst index f84319180830e..2970252036780 100644 --- a/Doc/library/tempfile.rst +++ b/Doc/library/tempfile.rst @@ -305,7 +305,7 @@ not surprise other unsuspecting code by changing global API behavior. explicit ``prefix``, ``suffix``, or ``dir`` arguments of type str are supplied. Please do not write code expecting or depending on this. This awkward behavior is maintained for - compatibility with the historcal implementation. + compatibility with the historical implementation. .. _tempfile-examples: From webhook-mailer at python.org Sat Apr 10 16:56:35 2021 From: webhook-mailer at python.org (lysnikolaou) Date: Sat, 10 Apr 2021 20:56:35 -0000 Subject: [Python-checkins] bpo-43798: Add source location attributes to alias (GH-25324) Message-ID: https://github.com/python/cpython/commit/75a06f067bd0a2687312e5f8e78f9075be76ad3a commit: 75a06f067bd0a2687312e5f8e78f9075be76ad3a branch: master author: Matthew Suozzo committer: lysnikolaou date: 2021-04-10T22:56:28+02:00 summary: bpo-43798: Add source location attributes to alias (GH-25324) * Add source location attributes to alias. * Move alias star construction to pegen helper. Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Pablo Galindo files: A Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst M Grammar/python.gram M Include/internal/pycore_ast.h M Lib/test/test_asdl_parser.py M Lib/test/test_ast.py M Lib/test/test_peg_generator/test_c_parser.py M Parser/Python.asdl M Parser/parser.c M Parser/pegen.c M Parser/pegen.h M Python/Python-ast.c diff --git a/Grammar/python.gram b/Grammar/python.gram index ebf028fa81900..eb10fc211051c 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -144,20 +144,20 @@ import_from[stmt_ty]: import_from_targets[asdl_alias_seq*]: | '(' a=import_from_as_names [','] ')' { a } | import_from_as_names !',' - | '*' { (asdl_alias_seq*)_PyPegen_singleton_seq(p, CHECK(alias_ty, _PyPegen_alias_for_star(p))) } + | '*' { (asdl_alias_seq*)_PyPegen_singleton_seq(p, CHECK(alias_ty, _PyPegen_alias_for_star(p, EXTRA))) } | invalid_import_from_targets import_from_as_names[asdl_alias_seq*]: | a[asdl_alias_seq*]=','.import_from_as_name+ { a } import_from_as_name[alias_ty]: | a=NAME b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id, (b) ? ((expr_ty) b)->v.Name.id : NULL, - p->arena) } + EXTRA) } dotted_as_names[asdl_alias_seq*]: | a[asdl_alias_seq*]=','.dotted_as_name+ { a } dotted_as_name[alias_ty]: | a=dotted_name b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id, (b) ? ((expr_ty) b)->v.Name.id : NULL, - p->arena) } + EXTRA) } dotted_name[expr_ty]: | a=dotted_name '.' b=NAME { _PyPegen_join_names_with_dot(p, a, b) } | NAME diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h index 38c8013d13413..64d68b2b32d90 100644 --- a/Include/internal/pycore_ast.h +++ b/Include/internal/pycore_ast.h @@ -543,6 +543,10 @@ struct _keyword { struct _alias { identifier name; identifier asname; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; }; struct _withitem { @@ -751,7 +755,9 @@ arg_ty _PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int keyword_ty _PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -alias_ty _PyAST_alias(identifier name, identifier asname, PyArena *arena); +alias_ty _PyAST_alias(identifier name, identifier asname, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); withitem_ty _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena); match_case_ty _PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * diff --git a/Lib/test/test_asdl_parser.py b/Lib/test/test_asdl_parser.py index d2c2b51334700..2c198a6b8b23e 100644 --- a/Lib/test/test_asdl_parser.py +++ b/Lib/test/test_asdl_parser.py @@ -62,7 +62,9 @@ def test_product(self): alias = self.types['alias'] self.assertEqual( str(alias), - 'Product([Field(identifier, name), Field(identifier, asname, opt=True)])') + 'Product([Field(identifier, name), Field(identifier, asname, opt=True)], ' + '[Field(int, lineno), Field(int, col_offset), ' + 'Field(int, end_lineno, opt=True), Field(int, end_col_offset, opt=True)])') def test_attributes(self): stmt = self.types['stmt'] diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index bddb3de2f090b..682495839966b 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -335,6 +335,26 @@ def test_non_interned_future_from_ast(self): mod.body[0].module = " __future__ ".strip() compile(mod, "", "exec") + def test_alias(self): + im = ast.parse("from bar import y").body[0] + self.assertEqual(len(im.names), 1) + alias = im.names[0] + self.assertEqual(alias.name, 'y') + self.assertIsNone(alias.asname) + self.assertEqual(alias.lineno, 1) + self.assertEqual(alias.end_lineno, 1) + self.assertEqual(alias.col_offset, 16) + self.assertEqual(alias.end_col_offset, 17) + + im = ast.parse("from bar import *").body[0] + alias = im.names[0] + self.assertEqual(alias.name, '*') + self.assertIsNone(alias.asname) + self.assertEqual(alias.lineno, 1) + self.assertEqual(alias.end_lineno, 1) + self.assertEqual(alias.col_offset, 16) + self.assertEqual(alias.end_col_offset, 17) + def test_base_classes(self): self.assertTrue(issubclass(ast.For, ast.stmt)) self.assertTrue(issubclass(ast.Name, ast.expr)) @@ -1037,7 +1057,8 @@ def test_bad_integer(self): def test_level_as_none(self): body = [ast.ImportFrom(module='time', - names=[ast.alias(name='sleep')], + names=[ast.alias(name='sleep', + lineno=0, col_offset=0)], level=None, lineno=0, col_offset=0)] mod = ast.Module(body, []) @@ -1735,6 +1756,7 @@ def test_import_from_multi_line(self): ''').strip() imp = ast.parse(s).body[0] self._check_end_pos(imp, 3, 1) + self._check_end_pos(imp.names[2], 2, 16) def test_slices(self): s1 = 'f()[1, 2] [0]' @@ -2095,8 +2117,8 @@ def main(): ('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [('ExceptHandler', (3, 0, 4, 6), ('Name', (3, 7, 3, 16), 'Exception', ('Load',)), None, [('Pass', (4, 2, 4, 6))])], [], [])], []), ('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [], [], [('Pass', (4, 2, 4, 6))])], []), ('Module', [('Assert', (1, 0, 1, 8), ('Name', (1, 7, 1, 8), 'v', ('Load',)), None)], []), -('Module', [('Import', (1, 0, 1, 10), [('alias', 'sys', None)])], []), -('Module', [('ImportFrom', (1, 0, 1, 17), 'sys', [('alias', 'v', None)], 0)], []), +('Module', [('Import', (1, 0, 1, 10), [('alias', (1, 7, 1, 10), 'sys', None)])], []), +('Module', [('ImportFrom', (1, 0, 1, 17), 'sys', [('alias', (1, 16, 1, 17), 'v', None)], 0)], []), ('Module', [('Global', (1, 0, 1, 8), ['v'])], []), ('Module', [('Expr', (1, 0, 1, 1), ('Constant', (1, 0, 1, 1), 1, None))], []), ('Module', [('Pass', (1, 0, 1, 4))], []), diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py index 5d8f54399e746..b7e80f0d351a2 100644 --- a/Lib/test/test_peg_generator/test_c_parser.py +++ b/Lib/test/test_peg_generator/test_c_parser.py @@ -314,7 +314,7 @@ def test_same_name_different_types(self) -> None: ) simple_name[expr_ty]: NAME import_as_names_from[asdl_alias_seq*]: a[asdl_alias_seq*]=','.import_as_name_from+ { a } - import_as_name_from[alias_ty]: a=NAME 'as' b=NAME { _PyAST_alias(((expr_ty) a)->v.Name.id, ((expr_ty) b)->v.Name.id, p->arena) } + import_as_name_from[alias_ty]: a=NAME 'as' b=NAME { _PyAST_alias(((expr_ty) a)->v.Name.id, ((expr_ty) b)->v.Name.id, EXTRA) } """ test_source = """ for stmt in ("from a import b as c", "from . import a as b"): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst new file mode 100644 index 0000000000000..f6ab5dd410f28 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst @@ -0,0 +1 @@ +:class:`ast.alias` nodes now include source location metadata attributes e.g. lineno, col_offset. diff --git a/Parser/Python.asdl b/Parser/Python.asdl index ddc019da48e8a..e224f5f4848dc 100644 --- a/Parser/Python.asdl +++ b/Parser/Python.asdl @@ -124,6 +124,7 @@ module Python -- import name with optional 'as' alias. alias = (identifier name, identifier? asname) + attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) withitem = (expr context_expr, expr? optional_vars) diff --git a/Parser/parser.c b/Parser/parser.c index cf8b624ce7dde..af0c088694c2c 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -3310,6 +3310,15 @@ import_from_targets_rule(Parser *p) } asdl_alias_seq* _res = NULL; int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro { // '(' import_from_as_names ','? ')' if (p->error_indicator) { D(p->level--); @@ -3377,7 +3386,16 @@ import_from_targets_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); - _res = ( asdl_alias_seq * ) _PyPegen_singleton_seq ( p , CHECK ( alias_ty , _PyPegen_alias_for_star ( p ) ) ); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = ( asdl_alias_seq * ) _PyPegen_singleton_seq ( p , CHECK ( alias_ty , _PyPegen_alias_for_star ( p , EXTRA ) ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3466,6 +3484,15 @@ import_from_as_name_rule(Parser *p) } alias_ty _res = NULL; int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro { // NAME ['as' NAME] if (p->error_indicator) { D(p->level--); @@ -3481,7 +3508,16 @@ import_from_as_name_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]")); - _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3551,6 +3587,15 @@ dotted_as_name_rule(Parser *p) } alias_ty _res = NULL; int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro { // dotted_name ['as' NAME] if (p->error_indicator) { D(p->level--); @@ -3566,7 +3611,16 @@ dotted_as_name_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]")); - _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena ); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); diff --git a/Parser/pegen.c b/Parser/pegen.c index 57759f7512573..f841ace28e717 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1555,8 +1555,8 @@ _PyPegen_seq_count_dots(asdl_seq *seq) /* Creates an alias with '*' as the identifier name */ alias_ty -_PyPegen_alias_for_star(Parser *p) -{ +_PyPegen_alias_for_star(Parser *p, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) { PyObject *str = PyUnicode_InternFromString("*"); if (!str) { return NULL; @@ -1565,7 +1565,7 @@ _PyPegen_alias_for_star(Parser *p) Py_DECREF(str); return NULL; } - return _PyAST_alias(str, NULL, p->arena); + return _PyAST_alias(str, NULL, lineno, col_offset, end_lineno, end_col_offset, arena); } /* Creates a new asdl_seq* with the identifiers of all the names in seq */ diff --git a/Parser/pegen.h b/Parser/pegen.h index 53d8e5221bfcf..f3e0876afba60 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -237,7 +237,7 @@ asdl_seq *_PyPegen_seq_append_to_end(Parser *, asdl_seq *, void *); asdl_seq *_PyPegen_seq_flatten(Parser *, asdl_seq *); expr_ty _PyPegen_join_names_with_dot(Parser *, expr_ty, expr_ty); int _PyPegen_seq_count_dots(asdl_seq *); -alias_ty _PyPegen_alias_for_star(Parser *); +alias_ty _PyPegen_alias_for_star(Parser *, int, int, int, int, PyArena *); asdl_identifier_seq *_PyPegen_map_names_to_ids(Parser *, asdl_expr_seq *); CmpopExprPair *_PyPegen_cmpop_expr_pair(Parser *, cmpop_ty, expr_ty); asdl_int_seq *_PyPegen_get_cmpops(Parser *p, asdl_seq *); diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 2105729ea3489..779ee3e48946d 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -675,6 +675,12 @@ static const char * const keyword_fields[]={ "value", }; static PyObject* ast2obj_alias(struct ast_state *state, void*); +static const char * const alias_attributes[] = { + "lineno", + "col_offset", + "end_lineno", + "end_col_offset", +}; static const char * const alias_fields[]={ "name", "asname", @@ -1707,9 +1713,15 @@ init_types(struct ast_state *state) alias_fields, 2, "alias(identifier name, identifier? asname)"); if (!state->alias_type) return 0; - if (!add_attributes(state, state->alias_type, NULL, 0)) return 0; + if (!add_attributes(state, state->alias_type, alias_attributes, 4)) return + 0; if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1) return 0; + if (PyObject_SetAttr(state->alias_type, state->end_lineno, Py_None) == -1) + return 0; + if (PyObject_SetAttr(state->alias_type, state->end_col_offset, Py_None) == + -1) + return 0; state->withitem_type = make_type(state, "withitem", state->AST_type, withitem_fields, 2, "withitem(expr context_expr, expr? optional_vars)"); @@ -3271,7 +3283,8 @@ _PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int } alias_ty -_PyAST_alias(identifier name, identifier asname, PyArena *arena) +_PyAST_alias(identifier name, identifier asname, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) { alias_ty p; if (!name) { @@ -3284,6 +3297,10 @@ _PyAST_alias(identifier name, identifier asname, PyArena *arena) return NULL; p->name = name; p->asname = asname; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; return p; } @@ -4850,6 +4867,26 @@ ast2obj_alias(struct ast_state *state, void* _o) if (PyObject_SetAttr(result, state->asname, value) == -1) goto failed; Py_DECREF(value); + value = ast2obj_int(state, o->lineno); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->col_offset); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->col_offset, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->end_lineno); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->end_lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->end_col_offset); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) + goto failed; + Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -9723,6 +9760,10 @@ obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena* PyObject* tmp = NULL; identifier name; identifier asname; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { return 1; @@ -9750,7 +9791,60 @@ obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena* if (res != 0) goto failed; Py_CLEAR(tmp); } - *out = _PyAST_alias(name, asname, arena); + if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from alias"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &lineno, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from alias"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &col_offset, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + end_lineno = 0; + } + else { + int res; + res = obj2ast_int(state, tmp, &end_lineno, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + end_col_offset = 0; + } + else { + int res; + res = obj2ast_int(state, tmp, &end_col_offset, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_alias(name, asname, lineno, col_offset, end_lineno, + end_col_offset, arena); return 0; failed: Py_XDECREF(tmp); From webhook-mailer at python.org Sat Apr 10 17:15:36 2021 From: webhook-mailer at python.org (vstinner) Date: Sat, 10 Apr 2021 21:15:36 -0000 Subject: [Python-checkins] bpo-43770: Refactor type_new() function (GH-25325) Message-ID: https://github.com/python/cpython/commit/ecf14e6557c6e4f7af9c0d6460d31fe121c22553 commit: ecf14e6557c6e4f7af9c0d6460d31fe121c22553 branch: master author: Victor Stinner committer: vstinner date: 2021-04-10T23:15:32+02:00 summary: bpo-43770: Refactor type_new() function (GH-25325) * Split type_new() into into many small functions. * Add type_new_ctx structure to pass variables between subfunctions. * Initialize some PyTypeObject and PyHeapTypeObject members earlier in type_new_alloc(). * Rename variables to more specific names. * Add "__weakref__" identifier for type_new_visit_slots(). * Factorize code to convert a method to a classmethod (__init_subclass__ and __class_getitem__). * Add braces to respect PEP 7. * Move variable declarations where the variables are initialized. files: M Objects/dictobject.c M Objects/typeobject.c diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 179cb3012bddf..44796a6066728 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4972,10 +4972,12 @@ PyDictKeysObject * _PyDict_NewKeysForClass(void) { PyDictKeysObject *keys = new_keys_object(PyDict_MINSIZE); - if (keys == NULL) + if (keys == NULL) { PyErr_Clear(); - else + } + else { keys->dk_lookup = lookdict_split; + } return keys; } diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 8dafbbf297733..6386b3b39144f 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -53,6 +53,7 @@ typedef struct PySlot_Offset { _Py_IDENTIFIER(__abstractmethods__); _Py_IDENTIFIER(__class__); _Py_IDENTIFIER(__class_getitem__); +_Py_IDENTIFIER(__classcell__); _Py_IDENTIFIER(__delitem__); _Py_IDENTIFIER(__dict__); _Py_IDENTIFIER(__doc__); @@ -64,8 +65,10 @@ _Py_IDENTIFIER(__len__); _Py_IDENTIFIER(__module__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__new__); +_Py_IDENTIFIER(__qualname__); _Py_IDENTIFIER(__set_name__); _Py_IDENTIFIER(__setitem__); +_Py_IDENTIFIER(__weakref__); _Py_IDENTIFIER(builtins); _Py_IDENTIFIER(mro); @@ -2158,8 +2161,8 @@ static void object_dealloc(PyObject *); static int object_init(PyObject *, PyObject *, PyObject *); static int update_slot(PyTypeObject *, PyObject *); static void fixup_slot_dispatchers(PyTypeObject *); -static int set_names(PyTypeObject *); -static int init_subclass(PyTypeObject *, PyObject *); +static int type_new_set_names(PyTypeObject *); +static int type_new_init_subclass(PyTypeObject *, PyObject *); /* * Helpers for __dict__ descriptor. We don't want to expose the dicts @@ -2404,400 +2407,460 @@ _PyType_CalculateMetaclass(PyTypeObject *metatype, PyObject *bases) return winner; } + +// Forward declaration static PyObject * -type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) -{ - PyObject *name, *bases = NULL, *orig_dict, *dict = NULL; - PyObject *qualname, *slots = NULL, *tmp, *newslots, *cell; - PyTypeObject *type = NULL, *base, *tmptype, *winner; - PyHeapTypeObject *et; - PyMemberDef *mp; - Py_ssize_t i, nbases, nslots, slotoffset, name_size; - int j, r, may_add_dict, may_add_weak, add_dict, add_weak; - _Py_IDENTIFIER(__qualname__); - _Py_IDENTIFIER(__slots__); - _Py_IDENTIFIER(__classcell__); +type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds); - assert(args != NULL && PyTuple_Check(args)); - assert(kwds == NULL || PyDict_Check(kwds)); +typedef struct { + PyTypeObject *metatype; + PyObject *args; + PyObject *kwds; + PyObject *orig_dict; + PyObject *name; + PyObject *bases; + PyTypeObject *base; + PyObject *slots; + Py_ssize_t nslot; + int add_dict; + int add_weak; + int may_add_dict; + int may_add_weak; +} type_new_ctx; - /* Check arguments: (name, bases, dict) */ - if (!PyArg_ParseTuple(args, "UO!O!:type.__new__", &name, &PyTuple_Type, - &bases, &PyDict_Type, &orig_dict)) - return NULL; - /* Adjust for empty tuple bases */ - nbases = PyTuple_GET_SIZE(bases); - if (nbases == 0) { - base = &PyBaseObject_Type; - bases = PyTuple_Pack(1, base); - if (bases == NULL) - return NULL; - nbases = 1; - } - else { - _Py_IDENTIFIER(__mro_entries__); - for (i = 0; i < nbases; i++) { - tmp = PyTuple_GET_ITEM(bases, i); - if (PyType_Check(tmp)) { - continue; - } - if (_PyObject_LookupAttrId(tmp, &PyId___mro_entries__, &tmp) < 0) { - return NULL; - } - if (tmp != NULL) { +static int +type_new_visit_slots(type_new_ctx *ctx) +{ + PyObject *slots = ctx->slots; + Py_ssize_t nslot = ctx->nslot; + for (Py_ssize_t i = 0; i < nslot; i++) { + PyObject *name = PyTuple_GET_ITEM(slots, i); + if (!valid_identifier(name)) { + return -1; + } + assert(PyUnicode_Check(name)); + if (_PyUnicode_EqualToASCIIId(name, &PyId___dict__)) { + if (!ctx->may_add_dict || ctx->add_dict != 0) { PyErr_SetString(PyExc_TypeError, - "type() doesn't support MRO entry resolution; " - "use types.new_class()"); - Py_DECREF(tmp); - return NULL; + "__dict__ slot disallowed: " + "we already got one"); + return -1; } + ctx->add_dict++; } - /* Search the bases for the proper metatype to deal with this: */ - winner = _PyType_CalculateMetaclass(metatype, bases); - if (winner == NULL) { - return NULL; + if (_PyUnicode_EqualToASCIIId(name, &PyId___weakref__)) { + if (!ctx->may_add_weak || ctx->add_weak != 0) { + PyErr_SetString(PyExc_TypeError, + "__weakref__ slot disallowed: " + "either we already got one, " + "or __itemsize__ != 0"); + return -1; + } + ctx->add_weak++; } + } + return 0; +} - if (winner != metatype) { - if (winner->tp_new != type_new) /* Pass it to the winner */ - return winner->tp_new(winner, args, kwds); - metatype = winner; - } - /* Calculate best base, and check that all bases are type objects */ - base = best_base(bases); - if (base == NULL) { - return NULL; - } +static PyObject* +type_new_copy_slots(type_new_ctx *ctx, PyObject *dict) +{ + PyObject *slots = ctx->slots; + Py_ssize_t nslot = ctx->nslot; - Py_INCREF(bases); + Py_ssize_t new_nslot = nslot - ctx->add_dict - ctx->add_weak; + PyObject *new_slots = PyList_New(new_nslot); + if (new_slots == NULL) { + return NULL; } - /* Use "goto error" from this point on as we now own the reference to "bases". */ - - dict = PyDict_Copy(orig_dict); - if (dict == NULL) - goto error; - - /* Check for a __slots__ sequence variable in dict, and count it */ - slots = _PyDict_GetItemIdWithError(dict, &PyId___slots__); - nslots = 0; - add_dict = 0; - add_weak = 0; - may_add_dict = base->tp_dictoffset == 0; - may_add_weak = base->tp_weaklistoffset == 0 && base->tp_itemsize == 0; - if (slots == NULL) { - if (PyErr_Occurred()) { - goto error; - } - if (may_add_dict) { - add_dict++; - } - if (may_add_weak) { - add_weak++; + Py_ssize_t j = 0; + for (Py_ssize_t i = 0; i < nslot; i++) { + PyObject *slot = PyTuple_GET_ITEM(slots, i); + if ((ctx->add_dict && + _PyUnicode_EqualToASCIIId(slot, &PyId___dict__)) || + (ctx->add_weak && + _PyUnicode_EqualToASCIIString(slot, "__weakref__"))) + { + continue; } - } - else { - /* Have slots */ - /* Make it into a tuple */ - if (PyUnicode_Check(slots)) - slots = PyTuple_Pack(1, slots); - else - slots = PySequence_Tuple(slots); - if (slots == NULL) + slot =_Py_Mangle(ctx->name, slot); + if (!slot) { goto error; - assert(PyTuple_Check(slots)); + } + PyList_SET_ITEM(new_slots, j, slot); - /* Are slots allowed? */ - nslots = PyTuple_GET_SIZE(slots); - if (nslots > 0 && base->tp_itemsize != 0) { - PyErr_Format(PyExc_TypeError, - "nonempty __slots__ " - "not supported for subtype of '%s'", - base->tp_name); + int r = PyDict_Contains(dict, slot); + if (r < 0) { goto error; } - - /* Check for valid slot names and two special cases */ - for (i = 0; i < nslots; i++) { - PyObject *tmp = PyTuple_GET_ITEM(slots, i); - if (!valid_identifier(tmp)) + if (r > 0) { + /* CPython inserts __qualname__ and __classcell__ (when needed) + into the namespace when creating a class. They will be deleted + below so won't act as class variables. */ + if (!_PyUnicode_EqualToASCIIId(slot, &PyId___qualname__) && + !_PyUnicode_EqualToASCIIId(slot, &PyId___classcell__)) + { + PyErr_Format(PyExc_ValueError, + "%R in __slots__ conflicts with class variable", + slot); goto error; - assert(PyUnicode_Check(tmp)); - if (_PyUnicode_EqualToASCIIId(tmp, &PyId___dict__)) { - if (!may_add_dict || add_dict) { - PyErr_SetString(PyExc_TypeError, - "__dict__ slot disallowed: " - "we already got one"); - goto error; - } - add_dict++; - } - if (_PyUnicode_EqualToASCIIString(tmp, "__weakref__")) { - if (!may_add_weak || add_weak) { - PyErr_SetString(PyExc_TypeError, - "__weakref__ slot disallowed: " - "either we already got one, " - "or __itemsize__ != 0"); - goto error; - } - add_weak++; } } - /* Copy slots into a list, mangle names and sort them. - Sorted names are needed for __class__ assignment. - Convert them back to tuple at the end. - */ - newslots = PyList_New(nslots - add_dict - add_weak); - if (newslots == NULL) - goto error; - for (i = j = 0; i < nslots; i++) { - tmp = PyTuple_GET_ITEM(slots, i); - if ((add_dict && - _PyUnicode_EqualToASCIIId(tmp, &PyId___dict__)) || - (add_weak && - _PyUnicode_EqualToASCIIString(tmp, "__weakref__"))) + j++; + } + assert(j == new_nslot); + + if (PyList_Sort(new_slots) == -1) { + goto error; + } + + PyObject *tuple = PyList_AsTuple(new_slots); + Py_DECREF(new_slots); + if (tuple == NULL) { + return NULL; + } + + assert(PyTuple_GET_SIZE(tuple) == new_nslot); + return tuple; + +error: + Py_DECREF(new_slots); + return NULL; +} + + +static void +type_new_slots_bases(type_new_ctx *ctx) +{ + Py_ssize_t nbases = PyTuple_GET_SIZE(ctx->bases); + if (nbases > 1 && + ((ctx->may_add_dict && ctx->add_dict == 0) || + (ctx->may_add_weak && ctx->add_weak == 0))) + { + for (Py_ssize_t i = 0; i < nbases; i++) { + PyObject *base = PyTuple_GET_ITEM(ctx->bases, i); + if (base == (PyObject *)ctx->base) { + /* Skip primary base */ continue; - tmp =_Py_Mangle(name, tmp); - if (!tmp) { - Py_DECREF(newslots); - goto error; } - PyList_SET_ITEM(newslots, j, tmp); - r = PyDict_Contains(dict, tmp); - if (r < 0) { - Py_DECREF(newslots); - goto error; + + assert(PyType_Check(base)); + PyTypeObject *type = (PyTypeObject *)base; + if (ctx->may_add_dict && ctx->add_dict == 0 && + type->tp_dictoffset != 0) + { + (ctx->add_dict)++; } - if (r > 0) { - /* CPython inserts __qualname__ and __classcell__ (when needed) - into the namespace when creating a class. They will be deleted - below so won't act as class variables. */ - if (!_PyUnicode_EqualToASCIIId(tmp, &PyId___qualname__) && - !_PyUnicode_EqualToASCIIId(tmp, &PyId___classcell__)) { - PyErr_Format(PyExc_ValueError, - "%R in __slots__ conflicts with class variable", - tmp); - Py_DECREF(newslots); - goto error; - } + if (ctx->may_add_weak && ctx->add_weak == 0 && + type->tp_weaklistoffset != 0) + { + ctx->add_weak++; } - j++; - } - assert(j == nslots - add_dict - add_weak); - nslots = j; - Py_CLEAR(slots); - if (PyList_Sort(newslots) == -1) { - Py_DECREF(newslots); - goto error; + if (ctx->may_add_dict && ctx->add_dict == 0) { + continue; + } + if (ctx->may_add_weak && ctx->add_weak == 0) { + continue; + } + /* Nothing more to check */ + break; } - slots = PyList_AsTuple(newslots); - Py_DECREF(newslots); - if (slots == NULL) - goto error; + } +} - /* Secondary bases may provide weakrefs or dict */ - if (nbases > 1 && - ((may_add_dict && !add_dict) || - (may_add_weak && !add_weak))) { - for (i = 0; i < nbases; i++) { - tmp = PyTuple_GET_ITEM(bases, i); - if (tmp == (PyObject *)base) - continue; /* Skip primary base */ - assert(PyType_Check(tmp)); - tmptype = (PyTypeObject *)tmp; - if (may_add_dict && !add_dict && - tmptype->tp_dictoffset != 0) - add_dict++; - if (may_add_weak && !add_weak && - tmptype->tp_weaklistoffset != 0) - add_weak++; - if (may_add_dict && !add_dict) - continue; - if (may_add_weak && !add_weak) - continue; - /* Nothing more to check */ - break; - } + +static int +type_new_slots_impl(type_new_ctx *ctx, PyObject *dict) +{ + /* Are slots allowed? */ + if (ctx->nslot > 0 && ctx->base->tp_itemsize != 0) { + PyErr_Format(PyExc_TypeError, + "nonempty __slots__ not supported for subtype of '%s'", + ctx->base->tp_name); + return -1; + } + + /* Check for valid slot names and two special cases */ + if (type_new_visit_slots(ctx) < 0) { + return -1; + } + + /* Copy slots into a list, mangle names and sort them. + Sorted names are needed for __class__ assignment. + Convert them back to tuple at the end. + */ + PyObject *new_slots = type_new_copy_slots(ctx, dict); + if (new_slots == NULL) { + return -1; + } + assert(PyTuple_CheckExact(new_slots)); + + Py_XSETREF(ctx->slots, new_slots); + ctx->nslot = PyTuple_GET_SIZE(new_slots); + + /* Secondary bases may provide weakrefs or dict */ + type_new_slots_bases(ctx); + return 0; +} + + +static Py_ssize_t +type_new_slots(type_new_ctx *ctx, PyObject *dict) +{ + // Check for a __slots__ sequence variable in dict, and count it + ctx->add_dict = 0; + ctx->add_weak = 0; + ctx->may_add_dict = (ctx->base->tp_dictoffset == 0); + ctx->may_add_weak = (ctx->base->tp_weaklistoffset == 0 + && ctx->base->tp_itemsize == 0); + + if (ctx->slots == NULL) { + if (ctx->may_add_dict) { + ctx->add_dict++; + } + if (ctx->may_add_weak) { + ctx->add_weak++; + } + } + else { + /* Have slots */ + if (type_new_slots_impl(ctx, dict) < 0) { + return -1; } } + return 0; +} - /* Allocate the type object */ - type = (PyTypeObject *)metatype->tp_alloc(metatype, nslots); - if (type == NULL) - goto error; - /* Keep name and slots alive in the extended type object */ - et = (PyHeapTypeObject *)type; - Py_INCREF(name); - et->ht_name = name; - et->ht_slots = slots; - slots = NULL; +static PyTypeObject* +type_new_alloc(type_new_ctx *ctx) +{ + PyTypeObject *metatype = ctx->metatype; + PyTypeObject *type; + + // Allocate the type object + type = (PyTypeObject *)metatype->tp_alloc(metatype, ctx->nslot); + if (type == NULL) { + return NULL; + } + PyHeapTypeObject *et = (PyHeapTypeObject *)type; - /* Initialize tp_flags */ + // Initialize tp_flags. // All heap types need GC, since we can create a reference cycle by storing - // an instance on one of its parents: - type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HEAPTYPE | - Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC; + // an instance on one of its parents. + type->tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HEAPTYPE | + Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC); - /* Initialize essential fields */ + // Initialize essential fields type->tp_as_async = &et->as_async; type->tp_as_number = &et->as_number; type->tp_as_sequence = &et->as_sequence; type->tp_as_mapping = &et->as_mapping; type->tp_as_buffer = &et->as_buffer; - type->tp_name = PyUnicode_AsUTF8AndSize(name, &name_size); - if (!type->tp_name) - goto error; + + type->tp_bases = Py_NewRef(ctx->bases); + type->tp_base = (PyTypeObject *)Py_NewRef(ctx->base); + + type->tp_dealloc = subtype_dealloc; + /* Always override allocation strategy to use regular heap */ + type->tp_alloc = PyType_GenericAlloc; + type->tp_free = PyObject_GC_Del; + + type->tp_traverse = subtype_traverse; + type->tp_clear = subtype_clear; + + et->ht_name = Py_NewRef(ctx->name); + et->ht_module = NULL; + + return type; +} + + +static int +type_new_set_name(const type_new_ctx *ctx, PyTypeObject *type) +{ + Py_ssize_t name_size; + type->tp_name = PyUnicode_AsUTF8AndSize(ctx->name, &name_size); + if (!type->tp_name) { + return -1; + } if (strlen(type->tp_name) != (size_t)name_size) { PyErr_SetString(PyExc_ValueError, "type name must not contain null characters"); - goto error; + return -1; } + return 0; +} - /* Set tp_base and tp_bases */ - type->tp_bases = bases; - bases = NULL; - Py_INCREF(base); - type->tp_base = base; - - /* Initialize tp_dict from passed-in dict */ - Py_INCREF(dict); - type->tp_dict = dict; - /* Set __module__ in the dict */ - r = _PyDict_ContainsId(dict, &PyId___module__); +static int +type_new_set_module(PyTypeObject *type) +{ + int r = _PyDict_ContainsId(type->tp_dict, &PyId___module__); if (r < 0) { - goto error; + return -1; } - if (r == 0) { - tmp = PyEval_GetGlobals(); - if (tmp != NULL) { - tmp = _PyDict_GetItemIdWithError(tmp, &PyId___name__); - if (tmp != NULL) { - if (_PyDict_SetItemId(dict, &PyId___module__, - tmp) < 0) - goto error; - } - else if (PyErr_Occurred()) { - goto error; - } + if (r > 0) { + return 0; + } + + PyObject *globals = PyEval_GetGlobals(); + if (globals == NULL) { + return 0; + } + + PyObject *module = _PyDict_GetItemIdWithError(globals, &PyId___name__); + if (module == NULL) { + if (PyErr_Occurred()) { + return -1; } + return 0; } - /* Set ht_qualname to dict['__qualname__'] if available, else to - __name__. The __qualname__ accessor will look for ht_qualname. - */ - qualname = _PyDict_GetItemIdWithError(dict, &PyId___qualname__); + if (_PyDict_SetItemId(type->tp_dict, &PyId___module__, module) < 0) { + return -1; + } + return 0; +} + + +static int +type_new_set_ht_name(PyTypeObject *type) +{ + PyHeapTypeObject *et = (PyHeapTypeObject *)type; + PyObject *qualname = _PyDict_GetItemIdWithError(type->tp_dict, + &PyId___qualname__); if (qualname != NULL) { if (!PyUnicode_Check(qualname)) { PyErr_Format(PyExc_TypeError, - "type __qualname__ must be a str, not %s", - Py_TYPE(qualname)->tp_name); - goto error; + "type __qualname__ must be a str, not %s", + Py_TYPE(qualname)->tp_name); + return -1; + } + et->ht_qualname = Py_NewRef(qualname); + if (_PyDict_DelItemId(type->tp_dict, &PyId___qualname__) < 0) { + return -1; } } - else if (PyErr_Occurred()) { - goto error; + else { + if (PyErr_Occurred()) { + return -1; + } + et->ht_qualname = Py_NewRef(et->ht_name); } - et->ht_qualname = qualname ? qualname : et->ht_name; - Py_INCREF(et->ht_qualname); - if (qualname != NULL && _PyDict_DelItemId(dict, &PyId___qualname__) < 0) - goto error; + return 0; +} - /* Set ht_module */ - et->ht_module = NULL; - /* Set tp_doc to a copy of dict['__doc__'], if the latter is there - and is a string. The __doc__ accessor will first look for tp_doc; - if that fails, it will still look into __dict__. - */ - { - PyObject *doc = _PyDict_GetItemIdWithError(dict, &PyId___doc__); - if (doc != NULL && PyUnicode_Check(doc)) { - Py_ssize_t len; - const char *doc_str; - char *tp_doc; - - doc_str = PyUnicode_AsUTF8(doc); - if (doc_str == NULL) - goto error; - /* Silently truncate the docstring if it contains null bytes. */ - len = strlen(doc_str); - tp_doc = (char *)PyObject_Malloc(len + 1); - if (tp_doc == NULL) { - PyErr_NoMemory(); - goto error; - } - memcpy(tp_doc, doc_str, len + 1); - type->tp_doc = tp_doc; +static int +type_new_set_doc(PyTypeObject *type) +{ + PyObject *doc = _PyDict_GetItemIdWithError(type->tp_dict, &PyId___doc__); + if (doc == NULL) { + if (PyErr_Occurred()) { + return -1; } - else if (doc == NULL && PyErr_Occurred()) { - goto error; + // no __doc__ key + return 0; + } + if (!PyUnicode_Check(doc)) { + // ignore non-string __doc__ + return 0; + } + + const char *doc_str = PyUnicode_AsUTF8(doc); + if (doc_str == NULL) { + return -1; + } + + // Silently truncate the docstring if it contains a null byte + Py_ssize_t size = strlen(doc_str) + 1; + char *tp_doc = (char *)PyObject_Malloc(size); + if (tp_doc == NULL) { + PyErr_NoMemory(); + return -1; + } + + memcpy(tp_doc, doc_str, size); + type->tp_doc = tp_doc; + return 0; +} + + +static int +type_new_staticmethod(PyTypeObject *type, _Py_Identifier *attr_id) +{ + PyObject *func = _PyDict_GetItemIdWithError(type->tp_dict, attr_id); + if (func == NULL) { + if (PyErr_Occurred()) { + return -1; } + return 0; + } + if (!PyFunction_Check(func)) { + return 0; } - /* Special-case __new__: if it's a plain function, - make it a static function */ - tmp = _PyDict_GetItemIdWithError(dict, &PyId___new__); - if (tmp != NULL && PyFunction_Check(tmp)) { - tmp = PyStaticMethod_New(tmp); - if (tmp == NULL) - goto error; - if (_PyDict_SetItemId(dict, &PyId___new__, tmp) < 0) { - Py_DECREF(tmp); - goto error; + PyObject *static_func = PyStaticMethod_New(func); + if (static_func == NULL) { + return -1; + } + if (_PyDict_SetItemId(type->tp_dict, attr_id, static_func) < 0) { + Py_DECREF(static_func); + return -1; + } + Py_DECREF(static_func); + return 0; +} + + +static int +type_new_classmethod(PyTypeObject *type, _Py_Identifier *attr_id) +{ + PyObject *func = _PyDict_GetItemIdWithError(type->tp_dict, attr_id); + if (func == NULL) { + if (PyErr_Occurred()) { + return -1; } - Py_DECREF(tmp); + return 0; } - else if (tmp == NULL && PyErr_Occurred()) { - goto error; + if (!PyFunction_Check(func)) { + return 0; } - /* Special-case __init_subclass__ and __class_getitem__: - if they are plain functions, make them classmethods */ - tmp = _PyDict_GetItemIdWithError(dict, &PyId___init_subclass__); - if (tmp != NULL && PyFunction_Check(tmp)) { - tmp = PyClassMethod_New(tmp); - if (tmp == NULL) - goto error; - if (_PyDict_SetItemId(dict, &PyId___init_subclass__, tmp) < 0) { - Py_DECREF(tmp); - goto error; - } - Py_DECREF(tmp); - } - else if (tmp == NULL && PyErr_Occurred()) { - goto error; + PyObject *method = PyClassMethod_New(func); + if (method == NULL) { + return -1; } - tmp = _PyDict_GetItemIdWithError(dict, &PyId___class_getitem__); - if (tmp != NULL && PyFunction_Check(tmp)) { - tmp = PyClassMethod_New(tmp); - if (tmp == NULL) - goto error; - if (_PyDict_SetItemId(dict, &PyId___class_getitem__, tmp) < 0) { - Py_DECREF(tmp); - goto error; - } - Py_DECREF(tmp); - } - else if (tmp == NULL && PyErr_Occurred()) { - goto error; + if (_PyDict_SetItemId(type->tp_dict, attr_id, method) < 0) { + Py_DECREF(method); + return -1; } + Py_DECREF(method); + return 0; +} - /* Add descriptors for custom slots from __slots__, or for __dict__ */ - mp = PyHeapType_GET_MEMBERS(et); - slotoffset = base->tp_basicsize; + +static int +type_new_descriptors(const type_new_ctx *ctx, PyTypeObject *type) +{ + PyHeapTypeObject *et = (PyHeapTypeObject *)type; + Py_ssize_t slotoffset = ctx->base->tp_basicsize; if (et->ht_slots != NULL) { - for (i = 0; i < nslots; i++, mp++) { + PyMemberDef *mp = PyHeapType_GET_MEMBERS(et); + Py_ssize_t nslot = PyTuple_GET_SIZE(et->ht_slots); + for (Py_ssize_t i = 0; i < nslot; i++, mp++) { mp->name = PyUnicode_AsUTF8( PyTuple_GET_ITEM(et->ht_slots, i)); - if (mp->name == NULL) - goto error; + if (mp->name == NULL) { + return -1; + } mp->type = T_OBJECT_EX; mp->offset = slotoffset; @@ -2808,93 +2871,363 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) slotoffset += sizeof(PyObject *); } } - if (add_dict) { - if (base->tp_itemsize) + + if (ctx->add_dict) { + if (ctx->base->tp_itemsize) { type->tp_dictoffset = -(long)sizeof(PyObject *); - else + } + else { type->tp_dictoffset = slotoffset; + } slotoffset += sizeof(PyObject *); } - if (add_weak) { - assert(!base->tp_itemsize); + + if (ctx->add_weak) { + assert(!ctx->base->tp_itemsize); type->tp_weaklistoffset = slotoffset; slotoffset += sizeof(PyObject *); } + type->tp_basicsize = slotoffset; - type->tp_itemsize = base->tp_itemsize; + type->tp_itemsize = ctx->base->tp_itemsize; type->tp_members = PyHeapType_GET_MEMBERS(et); + return 0; +} - if (type->tp_weaklistoffset && type->tp_dictoffset) + +static void +type_new_set_slots(const type_new_ctx *ctx, PyTypeObject *type) +{ + if (type->tp_weaklistoffset && type->tp_dictoffset) { type->tp_getset = subtype_getsets_full; - else if (type->tp_weaklistoffset && !type->tp_dictoffset) + } + else if (type->tp_weaklistoffset && !type->tp_dictoffset) { type->tp_getset = subtype_getsets_weakref_only; - else if (!type->tp_weaklistoffset && type->tp_dictoffset) + } + else if (!type->tp_weaklistoffset && type->tp_dictoffset) { type->tp_getset = subtype_getsets_dict_only; - else + } + else { type->tp_getset = NULL; + } /* Special case some slots */ - if (type->tp_dictoffset != 0 || nslots > 0) { - if (base->tp_getattr == NULL && base->tp_getattro == NULL) + if (type->tp_dictoffset != 0 || ctx->nslot > 0) { + PyTypeObject *base = ctx->base; + if (base->tp_getattr == NULL && base->tp_getattro == NULL) { type->tp_getattro = PyObject_GenericGetAttr; - if (base->tp_setattr == NULL && base->tp_setattro == NULL) + } + if (base->tp_setattr == NULL && base->tp_setattro == NULL) { type->tp_setattro = PyObject_GenericSetAttr; + } } - type->tp_dealloc = subtype_dealloc; +} - /* Always override allocation strategy to use regular heap */ - type->tp_alloc = PyType_GenericAlloc; - type->tp_free = PyObject_GC_Del; - type->tp_traverse = subtype_traverse; - type->tp_clear = subtype_clear; - /* store type in class' cell if one is supplied */ - cell = _PyDict_GetItemIdWithError(dict, &PyId___classcell__); - if (cell != NULL) { - /* At least one method requires a reference to its defining class */ - if (!PyCell_Check(cell)) { - PyErr_Format(PyExc_TypeError, - "__classcell__ must be a nonlocal cell, not %.200R", - Py_TYPE(cell)); - goto error; +static int +type_new_set_classcell(PyTypeObject *type) +{ + PyObject *cell = _PyDict_GetItemIdWithError(type->tp_dict, + &PyId___classcell__); + if (cell == NULL) { + if (PyErr_Occurred()) { + return -1; } - PyCell_Set(cell, (PyObject *) type); - if (_PyDict_DelItemId(dict, &PyId___classcell__) < 0) { - goto error; + return 0; + } + + /* At least one method requires a reference to its defining class */ + if (!PyCell_Check(cell)) { + PyErr_Format(PyExc_TypeError, + "__classcell__ must be a nonlocal cell, not %.200R", + Py_TYPE(cell)); + return -1; + } + + (void)PyCell_Set(cell, (PyObject *) type); + if (_PyDict_DelItemId(type->tp_dict, &PyId___classcell__) < 0) { + return -1; + } + return 0; +} + + +static int +type_new_set_attrs(const type_new_ctx *ctx, PyTypeObject *type) +{ + if (type_new_set_name(ctx, type) < 0) { + return -1; + } + + /* Set __module__ in the dict */ + if (type_new_set_module(type) < 0) { + return -1; + } + + /* Set ht_qualname to dict['__qualname__'] if available, else to + __name__. The __qualname__ accessor will look for ht_qualname. */ + if (type_new_set_ht_name(type) < 0) { + return -1; + } + + /* Set tp_doc to a copy of dict['__doc__'], if the latter is there + and is a string. The __doc__ accessor will first look for tp_doc; + if that fails, it will still look into __dict__. */ + if (type_new_set_doc(type) < 0) { + return -1; + } + + /* Special-case __new__: if it's a plain function, + make it a static function */ + if (type_new_staticmethod(type, &PyId___new__) < 0) { + return -1; + } + + /* Special-case __init_subclass__ and __class_getitem__: + if they are plain functions, make them classmethods */ + if (type_new_classmethod(type, &PyId___init_subclass__) < 0) { + return -1; + } + if (type_new_classmethod(type, &PyId___class_getitem__) < 0) { + return -1; + } + + /* Add descriptors for custom slots from __slots__, or for __dict__ */ + if (type_new_descriptors(ctx, type) < 0) { + return -1; + } + + type_new_set_slots(ctx, type); + + /* store type in class' cell if one is supplied */ + if (type_new_set_classcell(type) < 0) { + return -1; + } + return 0; +} + + +static int +type_new_get_slots(type_new_ctx *ctx, PyObject *dict) +{ + _Py_IDENTIFIER(__slots__); + PyObject *slots = _PyDict_GetItemIdWithError(dict, &PyId___slots__); + if (slots == NULL) { + if (PyErr_Occurred()) { + return -1; } + ctx->slots = NULL; + ctx->nslot = 0; + return 0; + } + + // Make it into a tuple + PyObject *new_slots; + if (PyUnicode_Check(slots)) { + new_slots = PyTuple_Pack(1, slots); + } + else { + new_slots = PySequence_Tuple(slots); } - else if (PyErr_Occurred()) { + if (new_slots == NULL) { + return -1; + } + assert(PyTuple_CheckExact(new_slots)); + ctx->slots = new_slots; + ctx->nslot = PyTuple_GET_SIZE(new_slots); + return 0; +} + + +static PyTypeObject* +type_new_init(type_new_ctx *ctx) +{ + PyObject *dict = PyDict_Copy(ctx->orig_dict); + if (dict == NULL) { + goto error; + } + + if (type_new_get_slots(ctx, dict) < 0) { + goto error; + } + assert(!PyErr_Occurred()); + + if (type_new_slots(ctx, dict) < 0) { + goto error; + } + + PyTypeObject *type = type_new_alloc(ctx); + if (type == NULL) { + goto error; + } + + type->tp_dict = dict; + + PyHeapTypeObject *et = (PyHeapTypeObject*)type; + et->ht_slots = ctx->slots; + ctx->slots = NULL; + + return type; + +error: + Py_CLEAR(ctx->slots); + Py_XDECREF(dict); + return NULL; +} + + +static PyObject* +type_new_impl(type_new_ctx *ctx) +{ + PyTypeObject *type = type_new_init(ctx); + if (type == NULL) { + return NULL; + } + + if (type_new_set_attrs(ctx, type) < 0) { goto error; } /* Initialize the rest */ - if (PyType_Ready(type) < 0) + if (PyType_Ready(type) < 0) { goto error; + } - /* Put the proper slots in place */ + // Put the proper slots in place fixup_slot_dispatchers(type); if (type->tp_dictoffset) { + PyHeapTypeObject *et = (PyHeapTypeObject*)type; et->ht_cached_keys = _PyDict_NewKeysForClass(); } - if (set_names(type) < 0) + if (type_new_set_names(type) < 0) { goto error; + } - if (init_subclass(type, kwds) < 0) + if (type_new_init_subclass(type, ctx->kwds) < 0) { goto error; - - Py_DECREF(dict); + } return (PyObject *)type; error: - Py_XDECREF(dict); - Py_XDECREF(bases); - Py_XDECREF(slots); - Py_XDECREF(type); + Py_DECREF(type); return NULL; } + +static int +type_new_get_bases(type_new_ctx *ctx, PyObject **type) +{ + Py_ssize_t nbases = PyTuple_GET_SIZE(ctx->bases); + if (nbases == 0) { + // Adjust for empty tuple bases + ctx->base = &PyBaseObject_Type; + PyObject *new_bases = PyTuple_Pack(1, ctx->base); + if (new_bases == NULL) { + return -1; + } + ctx->bases = new_bases; + return 0; + } + + _Py_IDENTIFIER(__mro_entries__); + for (Py_ssize_t i = 0; i < nbases; i++) { + PyObject *base = PyTuple_GET_ITEM(ctx->bases, i); + if (PyType_Check(base)) { + continue; + } + PyObject *mro_entries; + if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, + &mro_entries) < 0) { + return -1; + } + if (mro_entries != NULL) { + PyErr_SetString(PyExc_TypeError, + "type() doesn't support MRO entry resolution; " + "use types.new_class()"); + Py_DECREF(mro_entries); + return -1; + } + } + + // Search the bases for the proper metatype to deal with this + PyTypeObject *winner; + winner = _PyType_CalculateMetaclass(ctx->metatype, ctx->bases); + if (winner == NULL) { + return -1; + } + + if (winner != ctx->metatype) { + if (winner->tp_new != type_new) { + /* Pass it to the winner */ + *type = winner->tp_new(winner, ctx->args, ctx->kwds); + return 1; + } + + ctx->metatype = winner; + } + + /* Calculate best base, and check that all bases are type objects */ + PyTypeObject *base = best_base(ctx->bases); + if (base == NULL) { + return -1; + } + + ctx->base = base; + ctx->bases = Py_NewRef(ctx->bases); + return 0; +} + + +static PyObject * +type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) +{ + assert(args != NULL && PyTuple_Check(args)); + assert(kwds == NULL || PyDict_Check(kwds)); + + /* Parse arguments: (name, bases, dict) */ + PyObject *name, *bases, *orig_dict; + if (!PyArg_ParseTuple(args, "UO!O!:type.__new__", + &name, + &PyTuple_Type, &bases, + &PyDict_Type, &orig_dict)) + { + return NULL; + } + + type_new_ctx ctx = { + .metatype = metatype, + .args = args, + .kwds = kwds, + .orig_dict = orig_dict, + .name = name, + .bases = bases, + .base = NULL, + .slots = NULL, + .nslot = 0, + .add_dict = 0, + .add_weak = 0, + .may_add_dict = 0, + .may_add_weak = 0}; + PyObject *type = NULL; + int res = type_new_get_bases(&ctx, &type); + if (res < 0) { + return NULL; + } + if (res == 1) { + assert(type != NULL); + return type; + } + assert(ctx.base != NULL); + assert(ctx.bases != NULL); + + type = type_new_impl(&ctx); + Py_DECREF(ctx.bases); + return type; +} + + static PyObject * type_vectorcall(PyObject *metatype, PyObject *const *args, size_t nargsf, PyObject *kwnames) @@ -7762,11 +8095,11 @@ update_slot(PyTypeObject *type, PyObject *name) static void fixup_slot_dispatchers(PyTypeObject *type) { - slotdef *p; - + assert(!PyErr_Occurred()); assert(slotdefs_initialized); - for (p = slotdefs; p->name; ) + for (slotdef *p = slotdefs; p->name; ) { p = update_one_slot(type, p); + } } static void @@ -7784,63 +8117,66 @@ update_all_slots(PyTypeObject* type) } } + /* Call __set_name__ on all descriptors in a newly generated type */ static int -set_names(PyTypeObject *type) +type_new_set_names(PyTypeObject *type) { - PyObject *names_to_set, *key, *value, *set_name, *tmp; - Py_ssize_t i = 0; - - names_to_set = PyDict_Copy(type->tp_dict); - if (names_to_set == NULL) + PyObject *names_to_set = PyDict_Copy(type->tp_dict); + if (names_to_set == NULL) { return -1; + } + Py_ssize_t i = 0; + PyObject *key, *value; while (PyDict_Next(names_to_set, &i, &key, &value)) { - set_name = _PyObject_LookupSpecial(value, &PyId___set_name__); - if (set_name != NULL) { - tmp = PyObject_CallFunctionObjArgs(set_name, type, key, NULL); - Py_DECREF(set_name); - if (tmp == NULL) { - _PyErr_FormatFromCause(PyExc_RuntimeError, - "Error calling __set_name__ on '%.100s' instance %R " - "in '%.100s'", - Py_TYPE(value)->tp_name, key, type->tp_name); - Py_DECREF(names_to_set); - return -1; + PyObject *set_name = _PyObject_LookupSpecial(value, &PyId___set_name__); + if (set_name == NULL) { + if (PyErr_Occurred()) { + goto error; } - else - Py_DECREF(tmp); + continue; } - else if (PyErr_Occurred()) { - Py_DECREF(names_to_set); - return -1; + + PyObject *res = PyObject_CallFunctionObjArgs(set_name, type, key, NULL); + Py_DECREF(set_name); + + if (res == NULL) { + _PyErr_FormatFromCause(PyExc_RuntimeError, + "Error calling __set_name__ on '%.100s' instance %R " + "in '%.100s'", + Py_TYPE(value)->tp_name, key, type->tp_name); + goto error; } + Py_DECREF(res); } Py_DECREF(names_to_set); return 0; + +error: + Py_DECREF(names_to_set); + return -1; } + /* Call __init_subclass__ on the parent of a newly generated type */ static int -init_subclass(PyTypeObject *type, PyObject *kwds) +type_new_init_subclass(PyTypeObject *type, PyObject *kwds) { - PyObject *super, *func, *result; PyObject *args[2] = {(PyObject *)type, (PyObject *)type}; - - super = _PyObject_FastCall((PyObject *)&PySuper_Type, args, 2); + PyObject *super = _PyObject_FastCall((PyObject *)&PySuper_Type, args, 2); if (super == NULL) { return -1; } - func = _PyObject_GetAttrId(super, &PyId___init_subclass__); + PyObject *func = _PyObject_GetAttrId(super, &PyId___init_subclass__); Py_DECREF(super); if (func == NULL) { return -1; } - - result = PyObject_VectorcallDict(func, NULL, 0, kwds); + PyObject *result = PyObject_VectorcallDict(func, NULL, 0, kwds); Py_DECREF(func); if (result == NULL) { return -1; @@ -7850,6 +8186,7 @@ init_subclass(PyTypeObject *type, PyObject *kwds) return 0; } + /* recurse_down_subclasses() and update_subclasses() are mutually recursive functions to call a callback for all subclasses, but refraining from recursing into subclasses that define 'name'. */ From webhook-mailer at python.org Sat Apr 10 17:19:06 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 10 Apr 2021 21:19:06 -0000 Subject: [Python-checkins] bpo-43478: Fix formatting of NEWS entry (GH-25335) Message-ID: https://github.com/python/cpython/commit/6e468cb16bde483ad73c1eb13b20a08d74e30846 commit: 6e468cb16bde483ad73c1eb13b20a08d74e30846 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-10T22:19:02+01:00 summary: bpo-43478: Fix formatting of NEWS entry (GH-25335) files: M Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst diff --git a/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst b/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst index aaa1992f07fb4..12a03d79e72e0 100644 --- a/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst +++ b/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst @@ -1 +1,6 @@ -Mocks can no longer be used as the specs for other Mocks. As a result, an already-mocked object cannot have an attribute mocked using `autospec=True` or be the subject of a `create_autospec(...)` call. This can uncover bugs in tests since these Mock-derived Mocks will always pass certain tests (e.g. isinstance) and builtin assert functions (e.g. assert_called_once_with) will unconditionally pass. \ No newline at end of file +Mocks can no longer be used as the specs for other Mocks. As a result, an +already-mocked object cannot have an attribute mocked using ``autospec=True`` +or be the subject of a ``create_autospec(...)`` call. This can uncover bugs in +tests since these Mock-derived Mocks will always pass certain tests (e.g. +:func:`isinstance`) and builtin assert functions (e.g. assert_called_once_with) +will unconditionally pass. From webhook-mailer at python.org Sat Apr 10 18:17:47 2021 From: webhook-mailer at python.org (vstinner) Date: Sat, 10 Apr 2021 22:17:47 -0000 Subject: [Python-checkins] bpo-43753: Add Py_Is() and Py_IsNone() functions (GH-25227) Message-ID: https://github.com/python/cpython/commit/09bbebea163fe7303264cf4069c51d4d2f22fde4 commit: 09bbebea163fe7303264cf4069c51d4d2f22fde4 branch: master author: Victor Stinner committer: vstinner date: 2021-04-11T00:17:39+02:00 summary: bpo-43753: Add Py_Is() and Py_IsNone() functions (GH-25227) Add the Py_Is(x, y) function to test if the 'x' object is the 'y' object, the same as "x is y" in Python. Add also the Py_IsNone(), Py_IsTrue(), Py_IsFalse() functions to test if an object is, respectively, the None singleton, the True singleton or the False singleton. files: A Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst M Doc/c-api/structures.rst M Doc/data/stable_abi.dat M Doc/whatsnew/3.10.rst M Include/boolobject.h M Include/object.h M Modules/_testcapimodule.c M Objects/object.c M Python/ceval.c diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst index 37072d30d5715..20d5485d5544c 100644 --- a/Doc/c-api/structures.rst +++ b/Doc/c-api/structures.rst @@ -62,6 +62,37 @@ the definition of all other Python objects. See documentation of :c:type:`PyVarObject` above. +.. c:function:: int Py_Is(const PyObject *x, const PyObject *y) + + Test if the *x* object is the *y* object, the same as ``x is y`` in Python. + + .. versionadded:: 3.10 + + +.. c:function:: int Py_IsNone(const PyObject *x) + + Test if an object is the ``None`` singleton, + the same as ``x is None`` in Python. + + .. versionadded:: 3.10 + + +.. c:function:: int Py_IsTrue(const PyObject *x) + + Test if an object is the ``True`` singleton, + the same as ``x is True`` in Python. + + .. versionadded:: 3.10 + + +.. c:function:: int Py_IsFalse(const PyObject *x) + + Test if an object is the ``False`` singleton, + the same as ``x is False`` in Python. + + .. versionadded:: 3.10 + + .. c:function:: PyTypeObject* Py_TYPE(const PyObject *o) Get the type of the Python object *o*. diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index cd9e384eaea2b..b7e3ef4a676a8 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -767,7 +767,11 @@ Py_HasFileSystemDefaultEncoding Py_IncRef Py_Initialize Py_InitializeEx +Py_Is +Py_IsFalse Py_IsInitialized +Py_IsNone +Py_IsTrue Py_LeaveRecursiveCall Py_Main Py_MakePendingCalls diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 7cf5576765748..18d83b676295e 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1385,6 +1385,13 @@ New Features build (``Py_TRACE_REFS`` macro). (Contributed by Victor Stinner in :issue:`43688`.) +* Add the :c:func:`Py_Is(x, y) ` function to test if the *x* object is + the *y* object, the same as ``x is y`` in Python. Add also the + :c:func:`Py_IsNone`, :c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` functions to + test if an object is, respectively, the ``None`` singleton, the ``True`` + singleton or the ``False`` singleton. + (Contributed by Victor Stinner in :issue:`43753`.) + Porting to Python 3.10 ---------------------- diff --git a/Include/boolobject.h b/Include/boolobject.h index 6673d7206c0b3..e1c8699ee70fa 100644 --- a/Include/boolobject.h +++ b/Include/boolobject.h @@ -21,6 +21,14 @@ PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; #define Py_False ((PyObject *) &_Py_FalseStruct) #define Py_True ((PyObject *) &_Py_TrueStruct) +// Test if an object is the True singleton, the same as "x is True" in Python. +PyAPI_FUNC(int) Py_IsTrue(PyObject *x); +#define Py_IsTrue(x) Py_Is((x), Py_True) + +// Test if an object is the False singleton, the same as "x is False" in Python. +PyAPI_FUNC(int) Py_IsFalse(PyObject *x); +#define Py_IsFalse(x) Py_Is((x), Py_False) + /* Macros for returning Py_True or Py_False, respectively */ #define Py_RETURN_TRUE return Py_NewRef(Py_True) #define Py_RETURN_FALSE return Py_NewRef(Py_False) diff --git a/Include/object.h b/Include/object.h index 3138db0a0a3e4..695f01564282c 100644 --- a/Include/object.h +++ b/Include/object.h @@ -122,6 +122,11 @@ typedef struct { #define _PyVarObject_CAST_CONST(op) ((const PyVarObject*)(op)) +// Test if the 'x' object is the 'y' object, the same as "x is y" in Python. +PyAPI_FUNC(int) Py_Is(PyObject *x, PyObject *y); +#define Py_Is(x, y) ((x) == (y)) + + static inline Py_ssize_t _Py_REFCNT(const PyObject *ob) { return ob->ob_refcnt; } @@ -586,6 +591,10 @@ Don't forget to apply Py_INCREF() when returning this value!!! PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */ #define Py_None (&_Py_NoneStruct) +// Test if an object is the None singleton, the same as "x is None" in Python. +PyAPI_FUNC(int) Py_IsNone(PyObject *x); +#define Py_IsNone(x) Py_Is((x), Py_None) + /* Macro for returning Py_None from a function */ #define Py_RETURN_NONE return Py_NewRef(Py_None) diff --git a/Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst b/Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst new file mode 100644 index 0000000000000..f0eac4cf8e737 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst @@ -0,0 +1,6 @@ +Add the :c:func:`Py_Is(x, y) ` function to test if the *x* object is the +*y* object, the same as ``x is y`` in Python. Add also the :c:func:`Py_IsNone`, +:c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` functions to test if an object is, +respectively, the ``None`` singleton, the ``True`` singleton or the ``False`` +singleton. +Patch by Victor Stinner. diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 20107f225794a..db62aea421c80 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -5401,32 +5401,98 @@ test_set_type_size(PyObject *self, PyObject *Py_UNUSED(ignored)) } -// Test Py_NewRef() and Py_XNewRef() functions +#define TEST_REFCOUNT() \ + do { \ + PyObject *obj = PyList_New(0); \ + if (obj == NULL) { \ + return NULL; \ + } \ + assert(Py_REFCNT(obj) == 1); \ + \ + /* test Py_NewRef() */ \ + PyObject *ref = Py_NewRef(obj); \ + assert(ref == obj); \ + assert(Py_REFCNT(obj) == 2); \ + Py_DECREF(ref); \ + \ + /* test Py_XNewRef() */ \ + PyObject *xref = Py_XNewRef(obj); \ + assert(xref == obj); \ + assert(Py_REFCNT(obj) == 2); \ + Py_DECREF(xref); \ + \ + assert(Py_XNewRef(NULL) == NULL); \ + \ + Py_DECREF(obj); \ + Py_RETURN_NONE; \ + } while (0) \ + + +// Test Py_NewRef() and Py_XNewRef() macros static PyObject* -test_refcount(PyObject *self, PyObject *Py_UNUSED(ignored)) +test_refcount_macros(PyObject *self, PyObject *Py_UNUSED(ignored)) { - PyObject *obj = PyList_New(0); - if (obj == NULL) { - return NULL; - } - assert(Py_REFCNT(obj) == 1); + TEST_REFCOUNT(); +} + +#undef Py_NewRef +#undef Py_XNewRef + +// Test Py_NewRef() and Py_XNewRef() functions, after undefining macros. +static PyObject* +test_refcount_funcs(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + TEST_REFCOUNT(); +} - // Test Py_NewRef() - PyObject *ref = Py_NewRef(obj); - assert(ref == obj); - assert(Py_REFCNT(obj) == 2); - Py_DECREF(ref); - // Test Py_XNewRef() - PyObject *xref = Py_XNewRef(obj); - assert(xref == obj); - assert(Py_REFCNT(obj) == 2); - Py_DECREF(xref); +// Test Py_Is() function +#define TEST_PY_IS() \ + do { \ + PyObject *o_none = Py_None; \ + PyObject *o_true = Py_True; \ + PyObject *o_false = Py_False; \ + PyObject *obj = PyList_New(0); \ + if (obj == NULL) { \ + return NULL; \ + } \ + \ + /* test Py_Is() */ \ + assert(Py_Is(obj, obj)); \ + assert(!Py_Is(obj, o_none)); \ + \ + /* test Py_None */ \ + assert(Py_Is(o_none, o_none)); \ + assert(!Py_Is(obj, o_none)); \ + \ + /* test Py_True */ \ + assert(Py_Is(o_true, o_true)); \ + assert(!Py_Is(o_false, o_true)); \ + assert(!Py_Is(obj, o_true)); \ + \ + /* test Py_False */ \ + assert(Py_Is(o_false, o_false)); \ + assert(!Py_Is(o_true, o_false)); \ + assert(!Py_Is(obj, o_false)); \ + \ + Py_DECREF(obj); \ + Py_RETURN_NONE; \ + } while (0) + +// Test Py_Is() macro +static PyObject* +test_py_is_macros(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + TEST_PY_IS(); +} - assert(Py_XNewRef(NULL) == NULL); +#undef Py_Is - Py_DECREF(obj); - Py_RETURN_NONE; +// Test Py_Is() function, after undefining its macro. +static PyObject* +test_py_is_funcs(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + TEST_PY_IS(); } @@ -5716,7 +5782,10 @@ static PyMethodDef TestMethods[] = { {"pynumber_tobase", pynumber_tobase, METH_VARARGS}, {"without_gc", without_gc, METH_O}, {"test_set_type_size", test_set_type_size, METH_NOARGS}, - {"test_refcount", test_refcount, METH_NOARGS}, + {"test_refcount_macros", test_refcount_macros, METH_NOARGS}, + {"test_refcount_funcs", test_refcount_funcs, METH_NOARGS}, + {"test_py_is_macros", test_py_is_macros, METH_NOARGS}, + {"test_py_is_funcs", test_py_is_funcs, METH_NOARGS}, {"fatal_error", test_fatal_error, METH_VARARGS, PyDoc_STR("fatal_error(message, release_gil=False): call Py_FatalError(message)")}, {NULL, NULL} /* sentinel */ diff --git a/Objects/object.c b/Objects/object.c index 1224160dd50c4..4b678403c0761 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -2279,6 +2279,33 @@ Py_XNewRef(PyObject *obj) return _Py_XNewRef(obj); } +#undef Py_Is +#undef Py_IsNone +#undef Py_IsTrue +#undef Py_IsFalse + +// Export Py_Is(), Py_IsNone(), Py_IsTrue(), Py_IsFalse() as regular functions +// for the stable ABI. +int Py_Is(PyObject *x, PyObject *y) +{ + return (x == y); +} + +int Py_IsNone(PyObject *x) +{ + return Py_Is(x, Py_None); +} + +int Py_IsTrue(PyObject *x) +{ + return Py_Is(x, Py_True); +} + +int Py_IsFalse(PyObject *x) +{ + return Py_Is(x, Py_False); +} + #ifdef __cplusplus } #endif diff --git a/Python/ceval.c b/Python/ceval.c index ea31179f8629b..c12116044b54e 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1,4 +1,3 @@ - /* Execute compiled code */ /* XXX TO DO: @@ -2570,7 +2569,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) gen_status = PyIter_Send(receiver, v, &retval); } else { _Py_IDENTIFIER(send); - if (v == Py_None && PyIter_Check(receiver)) { + if (Py_IsNone(v) && PyIter_Check(receiver)) { retval = Py_TYPE(receiver)->tp_iternext(receiver); } else { @@ -2634,7 +2633,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(GEN_START): { PyObject *none = POP(); Py_DECREF(none); - if (none != Py_None) { + if (!Py_IsNone(none)) { if (oparg > 2) { _PyErr_SetString(tstate, PyExc_SystemError, "Illegal kind for GEN_START"); @@ -3615,7 +3614,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(IS_OP): { PyObject *right = POP(); PyObject *left = TOP(); - int res = (left == right)^oparg; + int res = Py_Is(left, right) ^ oparg; PyObject *b = res ? Py_True : Py_False; Py_INCREF(b); SET_TOP(b); @@ -3744,11 +3743,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) PREDICTED(POP_JUMP_IF_FALSE); PyObject *cond = POP(); int err; - if (cond == Py_True) { + if (Py_IsTrue(cond)) { Py_DECREF(cond); DISPATCH(); } - if (cond == Py_False) { + if (Py_IsFalse(cond)) { Py_DECREF(cond); JUMPTO(oparg); DISPATCH(); @@ -3768,11 +3767,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) PREDICTED(POP_JUMP_IF_TRUE); PyObject *cond = POP(); int err; - if (cond == Py_False) { + if (Py_IsFalse(cond)) { Py_DECREF(cond); DISPATCH(); } - if (cond == Py_True) { + if (Py_IsTrue(cond)) { Py_DECREF(cond); JUMPTO(oparg); DISPATCH(); @@ -3792,12 +3791,12 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(JUMP_IF_FALSE_OR_POP): { PyObject *cond = TOP(); int err; - if (cond == Py_True) { + if (Py_IsTrue(cond)) { STACK_SHRINK(1); Py_DECREF(cond); DISPATCH(); } - if (cond == Py_False) { + if (Py_IsFalse(cond)) { JUMPTO(oparg); DISPATCH(); } @@ -3816,12 +3815,12 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(JUMP_IF_TRUE_OR_POP): { PyObject *cond = TOP(); int err; - if (cond == Py_False) { + if (Py_IsFalse(cond)) { STACK_SHRINK(1); Py_DECREF(cond); DISPATCH(); } - if (cond == Py_True) { + if (Py_IsTrue(cond)) { JUMPTO(oparg); DISPATCH(); } @@ -3966,7 +3965,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) goto error; } PUSH(values_or_none); - if (values_or_none == Py_None) { + if (Py_IsNone(values_or_none)) { Py_INCREF(Py_False); PUSH(Py_False); DISPATCH(); @@ -4157,7 +4156,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) exc = TOP(); val = SECOND(); tb = THIRD(); - assert(exc != Py_None); + assert(!Py_IsNone(exc)); assert(!PyLong_Check(exc)); exit_func = PEEK(7); PyObject *stack[4] = {NULL, exc, val, tb}; @@ -5235,7 +5234,7 @@ do_raise(PyThreadState *tstate, PyObject *exc, PyObject *cause) type = exc_info->exc_type; value = exc_info->exc_value; tb = exc_info->exc_traceback; - if (type == Py_None || type == NULL) { + if (Py_IsNone(type) || type == NULL) { _PyErr_SetString(tstate, PyExc_RuntimeError, "No active exception to reraise"); return 0; @@ -5293,7 +5292,7 @@ do_raise(PyThreadState *tstate, PyObject *exc, PyObject *cause) else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; } - else if (cause == Py_None) { + else if (Py_IsNone(cause)) { Py_DECREF(cause); fixed_cause = NULL; } @@ -5987,7 +5986,7 @@ int _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi) { PyThreadState *tstate = _PyThreadState_GET(); - if (v != Py_None) { + if (!Py_IsNone(v)) { Py_ssize_t x; if (_PyIndex_Check(v)) { x = PyNumber_AsSsize_t(v, NULL); From webhook-mailer at python.org Sat Apr 10 18:36:47 2021 From: webhook-mailer at python.org (gvanrossum) Date: Sat, 10 Apr 2021 22:36:47 -0000 Subject: [Python-checkins] bpo-41974: Remove part of the note regarding complex.__float__ (GH-25197) Message-ID: https://github.com/python/cpython/commit/ac05f82ad4983e3d3653ae7494c1ff62c4a265fc commit: ac05f82ad4983e3d3653ae7494c1ff62c4a265fc branch: master author: DevilXD committer: gvanrossum date: 2021-04-10T15:36:40-07:00 summary: bpo-41974: Remove part of the note regarding complex.__float__ (GH-25197) (The deleted example no longer works and is thus irrelevant.) files: M Doc/library/typing.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index f6d1ccb1c5b3d..8af57f34a6d25 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1144,10 +1144,7 @@ These are not used in annotations. They are building blocks for creating generic .. note:: :func:`runtime_checkable` will check only the presence of the required methods, - not their type signatures! For example, :class:`builtins.complex ` - implements :func:`__float__`, therefore it passes an :func:`issubclass` check - against :class:`SupportsFloat`. However, the ``complex.__float__`` method - exists only to raise a :class:`TypeError` with a more informative message. + not their type signatures. .. versionadded:: 3.8 From webhook-mailer at python.org Sat Apr 10 20:20:48 2021 From: webhook-mailer at python.org (pablogsal) Date: Sun, 11 Apr 2021 00:20:48 -0000 Subject: [Python-checkins] Fix typo about line number in the 3.10 What's New document (GH-25328) Message-ID: https://github.com/python/cpython/commit/c3a478b7e56b92bcd980b7ded34005f8b339602e commit: c3a478b7e56b92bcd980b7ded34005f8b339602e branch: master author: Antti Haapala committer: pablogsal date: 2021-04-11T01:20:41+01:00 summary: Fix typo about line number in the 3.10 What's New document (GH-25328) This was a typo copied from PEP 626. files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 18d83b676295e..09064ec38e944 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -173,7 +173,7 @@ PEP 626: Precise line numbers for debugging and other tools PEP 626 brings more precise and reliable line numbers for debugging, profiling and coverage tools. Tracing events, with the correct line number, are generated for all lines of code executed and only for lines of code that are executed. -The ``f_lineo`` attribute of frame objects will always contain the expected line number. +The ``f_lineno`` attribute of frame objects will always contain the expected line number. The ``co_lnotab`` attribute of code objects is deprecated and will be removed in 3.12. Code that needs to convert from offset to line number should use the new ``co_lines()`` method instead. From webhook-mailer at python.org Sat Apr 10 21:28:46 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sun, 11 Apr 2021 01:28:46 -0000 Subject: [Python-checkins] bpo-43764: Add match_args=False parameter to dataclass decorator and to make_dataclasses function. (GH-25337) Message-ID: https://github.com/python/cpython/commit/750f484752763fe9ac1d6455780aabcb67f25508 commit: 750f484752763fe9ac1d6455780aabcb67f25508 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-10T21:28:42-04:00 summary: bpo-43764: Add match_args=False parameter to dataclass decorator and to make_dataclasses function. (GH-25337) Add match_args=False parameter to dataclass decorator and to make_dataclass function. files: A Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst M Doc/library/dataclasses.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 133cc0a065cac..0c0c7a8ddabfc 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -46,7 +46,7 @@ directly specified in the ``InventoryItem`` definition shown above. Module-level decorators, classes, and functions ----------------------------------------------- -.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False) +.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) This function is a :term:`decorator` that is used to add generated :term:`special method`\s to classes, as described below. @@ -79,7 +79,7 @@ Module-level decorators, classes, and functions class C: ... - @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False) + @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) class C: ... @@ -161,6 +161,14 @@ Module-level decorators, classes, and functions :meth:`__setattr__` or :meth:`__delattr__` is defined in the class, then :exc:`TypeError` is raised. See the discussion below. + - ``match_args``: If true (the default is ``True``), the + ``__match_args__`` tuple will be created from the list of + parameters to the generated :meth:`__init__` method (even if + :meth:`__init__` is not generated, see above). If false, or if + ``__match_args__`` is already defined in the class, then + ``__match_args__`` will not be generated. + + ``field``\s may optionally specify a default value, using normal Python syntax:: @@ -325,7 +333,7 @@ Module-level decorators, classes, and functions Raises :exc:`TypeError` if ``instance`` is not a dataclass instance. -.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False) +.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) Creates a new dataclass with name ``cls_name``, fields as defined in ``fields``, base classes as given in ``bases``, and initialized @@ -333,8 +341,9 @@ Module-level decorators, classes, and functions iterable whose elements are each either ``name``, ``(name, type)``, or ``(name, type, Field)``. If just ``name`` is supplied, ``typing.Any`` is used for ``type``. The values of ``init``, - ``repr``, ``eq``, ``order``, ``unsafe_hash``, and ``frozen`` have - the same meaning as they do in :func:`dataclass`. + ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``, and + ``match_args`` have the same meaning as they do in + :func:`dataclass`. This function is not strictly required, because any Python mechanism for creating a new class with ``__annotations__`` can diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index ceda8220f1f6c..e8eb2060f6df1 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -154,12 +154,17 @@ # __match_args__ # -# | no | yes | <--- class has __match_args__ in __dict__? -# +=======+=======+ -# | add | | <- the default -# +=======+=======+ -# __match_args__ is always added unless the class already defines it. It is a -# tuple of __init__ parameter names; non-init fields must be matched by keyword. +# +--- match_args= parameter +# | +# v | | | +# | no | yes | <--- class has __match_args__ in __dict__? +# +=======+=======+=======+ +# | False | | | +# +-------+-------+-------+ +# | True | add | | <- the default +# +=======+=======+=======+ +# __match_args__ is a tuple of __init__ parameter names; non-init fields must +# be matched by keyword. # Raised when an attempt is made to modify a frozen class. @@ -830,7 +835,8 @@ def _hash_exception(cls, fields, globals): # version of this table. -def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): +def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, + match_args): # Now that dicts retain insertion order, there's no reason to use # an ordered dict. I am leveraging that ordering here, because # derived class fields overwrite base class fields, but the order @@ -1016,8 +1022,9 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): cls.__doc__ = (cls.__name__ + str(inspect.signature(cls)).replace(' -> NoneType', '')) - if '__match_args__' not in cls.__dict__: - cls.__match_args__ = tuple(f.name for f in field_list if f.init) + if match_args: + _set_new_attribute(cls, '__match_args__', + tuple(f.name for f in field_list if f.init)) abc.update_abstractmethods(cls) @@ -1025,7 +1032,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): + unsafe_hash=False, frozen=False, match_args=True): """Returns the same class as was passed in, with dunder methods added based on the fields defined in the class. @@ -1035,11 +1042,13 @@ def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, repr is true, a __repr__() method is added. If order is true, rich comparison dunder methods are added. If unsafe_hash is true, a __hash__() method function is added. If frozen is true, fields may - not be assigned to after instance creation. + not be assigned to after instance creation. If match_args is true, + the __match_args__ tuple is added. """ def wrap(cls): - return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen) + return _process_class(cls, init, repr, eq, order, unsafe_hash, + frozen, match_args) # See if we're being called as @dataclass or @dataclass(). if cls is None: @@ -1198,7 +1207,7 @@ def _astuple_inner(obj, tuple_factory): def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, - frozen=False): + frozen=False, match_args=True): """Return a new dynamically created dataclass. The dataclass name will be 'cls_name'. 'fields' is an iterable @@ -1259,7 +1268,8 @@ class C(Base): # of generic dataclassses. cls = types.new_class(cls_name, bases, {}, lambda ns: ns.update(namespace)) return dataclass(cls, init=init, repr=repr, eq=eq, order=order, - unsafe_hash=unsafe_hash, frozen=frozen) + unsafe_hash=unsafe_hash, frozen=frozen, + match_args=match_args) def replace(obj, /, **changes): diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 29f29e1e6895e..4beed69e45bbb 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3440,6 +3440,47 @@ class X: c: int self.assertEqual(X.__match_args__, ("a", "b", "c")) + def test_match_args_argument(self): + @dataclass(match_args=False) + class X: + a: int + self.assertNotIn('__match_args__', X.__dict__) + + @dataclass(match_args=False) + class Y: + a: int + __match_args__ = ('b',) + self.assertEqual(Y.__match_args__, ('b',)) + + @dataclass(match_args=False) + class Z(Y): + z: int + self.assertEqual(Z.__match_args__, ('b',)) + + # Ensure parent dataclass __match_args__ is seen, if child class + # specifies match_args=False. + @dataclass + class A: + a: int + z: int + @dataclass(match_args=False) + class B(A): + b: int + self.assertEqual(B.__match_args__, ('a', 'z')) + + def test_make_dataclasses(self): + C = make_dataclass('C', [('x', int), ('y', int)]) + self.assertEqual(C.__match_args__, ('x', 'y')) + + C = make_dataclass('C', [('x', int), ('y', int)], match_args=True) + self.assertEqual(C.__match_args__, ('x', 'y')) + + C = make_dataclass('C', [('x', int), ('y', int)], match_args=False) + self.assertNotIn('__match__args__', C.__dict__) + + C = make_dataclass('C', [('x', int), ('y', int)], namespace={'__match_args__': ('z',)}) + self.assertEqual(C.__match_args__, ('z',)) + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst b/Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst new file mode 100644 index 0000000000000..555aad06e32ca --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst @@ -0,0 +1,2 @@ +Add match_args parameter to @dataclass decorator to allow suppression of +__match_args__ generation. From webhook-mailer at python.org Sat Apr 10 22:57:12 2021 From: webhook-mailer at python.org (gvanrossum) Date: Sun, 11 Apr 2021 02:57:12 -0000 Subject: [Python-checkins] bpo-43783: Add ParamSpecArgs/Kwargs (GH-25298) Message-ID: https://github.com/python/cpython/commit/522433601a5c64603dab3d733f41a5db39d237eb commit: 522433601a5c64603dab3d733f41a5db39d237eb branch: master author: Jelle Zijlstra committer: gvanrossum date: 2021-04-10T19:57:05-07:00 summary: bpo-43783: Add ParamSpecArgs/Kwargs (GH-25298) files: A Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst M Doc/library/typing.rst M Doc/whatsnew/3.10.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 8af57f34a6d25..c0c6cdde221b0 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1058,8 +1058,10 @@ These are not used in annotations. They are building blocks for creating generic components. ``P.args`` represents the tuple of positional parameters in a given call and should only be used to annotate ``*args``. ``P.kwargs`` represents the mapping of keyword parameters to their values in a given call, - and should be only be used to annotate ``**kwargs`` or ``**kwds``. Both - attributes require the annotated parameter to be in scope. + and should be only be used to annotate ``**kwargs``. Both + attributes require the annotated parameter to be in scope. At runtime, + ``P.args`` and ``P.kwargs`` are instances respectively of + :class:`ParamSpecArgs` and :class:`ParamSpecKwargs`. Parameter specification variables created with ``covariant=True`` or ``contravariant=True`` can be used to declare covariant or contravariant @@ -1078,6 +1080,24 @@ These are not used in annotations. They are building blocks for creating generic ``ParamSpec`` and ``Concatenate``). * :class:`Callable` and :class:`Concatenate`. +.. data:: ParamSpecArgs +.. data:: ParamSpecKwargs + + Arguments and keyword arguments attributes of a :class:`ParamSpec`. The + ``P.args`` attribute of a ``ParamSpec`` is an instance of ``ParamSpecArgs``, + and ``P.kwargs`` is an instance of ``ParamSpecKwargs``. They are intended + for runtime introspection and have no special meaning to static type checkers. + + Calling :func:`get_origin` on either of these objects will return the + original ``ParamSpec``:: + + P = ParamSpec("P") + get_origin(P.args) # returns P + get_origin(P.kwargs) # returns P + + .. versionadded:: 3.10 + + .. data:: AnyStr ``AnyStr`` is a type variable defined as diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 09064ec38e944..50c8d53e57d83 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -550,9 +550,11 @@ which adds or removes parameters of another callable. Examples of usage can be found in :class:`typing.Concatenate`. See :class:`typing.Callable`, :class:`typing.ParamSpec`, -:class:`typing.Concatenate` and :pep:`612` for more details. +:class:`typing.Concatenate`, :class:`typing.ParamSpecArgs`, +:class:`typing.ParamSpecKwargs`, and :pep:`612` for more details. -(Contributed by Ken Jin in :issue:`41559`.) +(Contributed by Ken Jin in :issue:`41559`, with minor enhancements by Jelle +Zijlstra in :issue:`43783`. PEP written by Mark Mendoza.) PEP 613: TypeAlias Annotation diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 3b8efe16c6e23..7183686a6dcde 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -25,7 +25,7 @@ from typing import Pattern, Match from typing import Annotated, ForwardRef from typing import TypeAlias -from typing import ParamSpec, Concatenate +from typing import ParamSpec, Concatenate, ParamSpecArgs, ParamSpecKwargs import abc import typing import weakref @@ -3004,6 +3004,7 @@ def __iand__(self, other: Const["MySet[T]"]) -> "MySet[T]": class GetUtilitiesTestCase(TestCase): def test_get_origin(self): T = TypeVar('T') + P = ParamSpec('P') class C(Generic[T]): pass self.assertIs(get_origin(C[int]), C) self.assertIs(get_origin(C[T]), C) @@ -3022,6 +3023,8 @@ class C(Generic[T]): pass self.assertIs(get_origin(list[int]), list) self.assertIs(get_origin(list), None) self.assertIs(get_origin(list | str), types.Union) + self.assertIs(get_origin(P.args), P) + self.assertIs(get_origin(P.kwargs), P) def test_get_args(self): T = TypeVar('T') @@ -4265,11 +4268,16 @@ def test_valid_uses(self): self.assertEqual(C4.__args__, (P, T)) self.assertEqual(C4.__parameters__, (P, T)) - # ParamSpec instances should also have args and kwargs attributes. + def test_args_kwargs(self): + P = ParamSpec('P') self.assertIn('args', dir(P)) self.assertIn('kwargs', dir(P)) - P.args - P.kwargs + self.assertIsInstance(P.args, ParamSpecArgs) + self.assertIsInstance(P.kwargs, ParamSpecKwargs) + self.assertIs(P.args.__origin__, P) + self.assertIs(P.kwargs.__origin__, P) + self.assertEqual(repr(P.args), "P.args") + self.assertEqual(repr(P.kwargs), "P.kwargs") def test_user_generics(self): T = TypeVar("T") diff --git a/Lib/typing.py b/Lib/typing.py index 6224930c3b027..6461ba23dd7e2 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -114,6 +114,8 @@ 'no_type_check_decorator', 'NoReturn', 'overload', + 'ParamSpecArgs', + 'ParamSpecKwargs', 'runtime_checkable', 'Text', 'TYPE_CHECKING', @@ -727,6 +729,44 @@ def __init__(self, name, *constraints, bound=None, self.__module__ = def_mod +class ParamSpecArgs(_Final, _Immutable, _root=True): + """The args for a ParamSpec object. + + Given a ParamSpec object P, P.args is an instance of ParamSpecArgs. + + ParamSpecArgs objects have a reference back to their ParamSpec: + + P.args.__origin__ is P + + This type is meant for runtime introspection and has no special meaning to + static type checkers. + """ + def __init__(self, origin): + self.__origin__ = origin + + def __repr__(self): + return f"{self.__origin__.__name__}.args" + + +class ParamSpecKwargs(_Final, _Immutable, _root=True): + """The kwargs for a ParamSpec object. + + Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs. + + ParamSpecKwargs objects have a reference back to their ParamSpec: + + P.kwargs.__origin__ is P + + This type is meant for runtime introspection and has no special meaning to + static type checkers. + """ + def __init__(self, origin): + self.__origin__ = origin + + def __repr__(self): + return f"{self.__origin__.__name__}.kwargs" + + class ParamSpec(_Final, _Immutable, _TypeVarLike, _root=True): """Parameter specification variable. @@ -776,8 +816,13 @@ def add_two(x: float, y: float) -> float: __slots__ = ('__name__', '__bound__', '__covariant__', '__contravariant__', '__dict__') - args = object() - kwargs = object() + @property + def args(self): + return ParamSpecArgs(self) + + @property + def kwargs(self): + return ParamSpecKwargs(self) def __init__(self, name, *, bound=None, covariant=False, contravariant=False): self.__name__ = name @@ -1662,10 +1707,12 @@ def get_origin(tp): get_origin(Generic[T]) is Generic get_origin(Union[T, int]) is Union get_origin(List[Tuple[T, T]][int]) == list + get_origin(P.args) is P """ if isinstance(tp, _AnnotatedAlias): return Annotated - if isinstance(tp, (_BaseGenericAlias, GenericAlias)): + if isinstance(tp, (_BaseGenericAlias, GenericAlias, + ParamSpecArgs, ParamSpecKwargs)): return tp.__origin__ if tp is Generic: return Generic diff --git a/Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst b/Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst new file mode 100644 index 0000000000000..8b680065ea7c3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst @@ -0,0 +1,3 @@ +The ``P.args`` and ``P.kwargs`` attributes of :class:`typing.ParamSpec` are +now instances of the new classes :class:`typing.ParamSpecArgs` and +:class:`typing.ParamSpecKwargs`, which enables a more useful ``repr()``. Patch by Jelle Zijlstra. From webhook-mailer at python.org Sat Apr 10 23:00:09 2021 From: webhook-mailer at python.org (gvanrossum) Date: Sun, 11 Apr 2021 03:00:09 -0000 Subject: [Python-checkins] bpo-43772: Fix TypeVar.__ror__ (GH-25339) Message-ID: https://github.com/python/cpython/commit/9045919bfa820379a66ea67219f79ef6d9ecab49 commit: 9045919bfa820379a66ea67219f79ef6d9ecab49 branch: master author: Jelle Zijlstra committer: gvanrossum date: 2021-04-10T20:00:05-07:00 summary: bpo-43772: Fix TypeVar.__ror__ (GH-25339) files: A Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 7183686a6dcde..82c517a4e6002 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -186,6 +186,16 @@ def test_union_unique(self): self.assertEqual(Union[X, int].__parameters__, (X,)) self.assertIs(Union[X, int].__origin__, Union) + def test_or(self): + X = TypeVar('X') + # use a string because str doesn't implement + # __or__/__ror__ itself + self.assertEqual(X | "x", Union[X, "x"]) + self.assertEqual("x" | X, Union["x", X]) + # make sure the order is correct + self.assertEqual(get_args(X | "x"), (X, ForwardRef("x"))) + self.assertEqual(get_args("x" | X), (ForwardRef("x"), X)) + def test_union_constrained(self): A = TypeVar('A', str, bytes) self.assertNotEqual(Union[A, str], Union[A]) diff --git a/Lib/typing.py b/Lib/typing.py index 6461ba23dd7e2..a24c01f0e3b9e 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -648,8 +648,8 @@ def __init__(self, bound, covariant, contravariant): def __or__(self, right): return Union[self, right] - def __ror__(self, right): - return Union[self, right] + def __ror__(self, left): + return Union[left, self] def __repr__(self): if self.__covariant__: diff --git a/Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst b/Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst new file mode 100644 index 0000000000000..648357b3faa74 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst @@ -0,0 +1 @@ +Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle Zijlstra. From webhook-mailer at python.org Sun Apr 11 00:51:42 2021 From: webhook-mailer at python.org (pablogsal) Date: Sun, 11 Apr 2021 04:51:42 -0000 Subject: [Python-checkins] bpo-43751: Fix anext() bug where it erroneously returned None (GH-25238) Message-ID: https://github.com/python/cpython/commit/dfb45323ce8a543ca844c311e32c994ec9554c1b commit: dfb45323ce8a543ca844c311e32c994ec9554c1b branch: master author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: pablogsal date: 2021-04-11T05:51:35+01:00 summary: bpo-43751: Fix anext() bug where it erroneously returned None (GH-25238) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst M Lib/test/test_asyncgen.py M Objects/iterobject.c diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py index 99464e3d0929f..77c15c02bc891 100644 --- a/Lib/test/test_asyncgen.py +++ b/Lib/test/test_asyncgen.py @@ -372,11 +372,8 @@ def tearDown(self): self.loop = None asyncio.set_event_loop_policy(None) - def test_async_gen_anext(self): - async def gen(): - yield 1 - yield 2 - g = gen() + def check_async_iterator_anext(self, ait_class): + g = ait_class() async def consume(): results = [] results.append(await anext(g)) @@ -388,6 +385,66 @@ async def consume(): with self.assertRaises(StopAsyncIteration): self.loop.run_until_complete(consume()) + async def test_2(): + g1 = ait_class() + self.assertEqual(await anext(g1), 1) + self.assertEqual(await anext(g1), 2) + with self.assertRaises(StopAsyncIteration): + await anext(g1) + with self.assertRaises(StopAsyncIteration): + await anext(g1) + + g2 = ait_class() + self.assertEqual(await anext(g2, "default"), 1) + self.assertEqual(await anext(g2, "default"), 2) + self.assertEqual(await anext(g2, "default"), "default") + self.assertEqual(await anext(g2, "default"), "default") + + return "completed" + + result = self.loop.run_until_complete(test_2()) + self.assertEqual(result, "completed") + + def test_async_generator_anext(self): + async def agen(): + yield 1 + yield 2 + self.check_async_iterator_anext(agen) + + def test_python_async_iterator_anext(self): + class MyAsyncIter: + """Asynchronously yield 1, then 2.""" + def __init__(self): + self.yielded = 0 + def __aiter__(self): + return self + async def __anext__(self): + if self.yielded >= 2: + raise StopAsyncIteration() + else: + self.yielded += 1 + return self.yielded + self.check_async_iterator_anext(MyAsyncIter) + + def test_python_async_iterator_types_coroutine_anext(self): + import types + class MyAsyncIterWithTypesCoro: + """Asynchronously yield 1, then 2.""" + def __init__(self): + self.yielded = 0 + def __aiter__(self): + return self + @types.coroutine + def __anext__(self): + if False: + yield "this is a generator-based coroutine" + if self.yielded >= 2: + raise StopAsyncIteration() + else: + self.yielded += 1 + return self.yielded + self.check_async_iterator_anext(MyAsyncIterWithTypesCoro) + def test_async_gen_aiter(self): async def gen(): yield 1 @@ -431,12 +488,85 @@ async def call_with_too_many_args(): await anext(gen(), 1, 3) async def call_with_wrong_type_args(): await anext(1, gen()) + async def call_with_kwarg(): + await anext(aiterator=gen()) with self.assertRaises(TypeError): self.loop.run_until_complete(call_with_too_few_args()) with self.assertRaises(TypeError): self.loop.run_until_complete(call_with_too_many_args()) with self.assertRaises(TypeError): self.loop.run_until_complete(call_with_wrong_type_args()) + with self.assertRaises(TypeError): + self.loop.run_until_complete(call_with_kwarg()) + + def test_anext_bad_await(self): + async def bad_awaitable(): + class BadAwaitable: + def __await__(self): + return 42 + class MyAsyncIter: + def __aiter__(self): + return self + def __anext__(self): + return BadAwaitable() + regex = r"__await__.*iterator" + awaitable = anext(MyAsyncIter(), "default") + with self.assertRaisesRegex(TypeError, regex): + await awaitable + awaitable = anext(MyAsyncIter()) + with self.assertRaisesRegex(TypeError, regex): + await awaitable + return "completed" + result = self.loop.run_until_complete(bad_awaitable()) + self.assertEqual(result, "completed") + + async def check_anext_returning_iterator(self, aiter_class): + awaitable = anext(aiter_class(), "default") + with self.assertRaises(TypeError): + await awaitable + awaitable = anext(aiter_class()) + with self.assertRaises(TypeError): + await awaitable + return "completed" + + def test_anext_return_iterator(self): + class WithIterAnext: + def __aiter__(self): + return self + def __anext__(self): + return iter("abc") + result = self.loop.run_until_complete(self.check_anext_returning_iterator(WithIterAnext)) + self.assertEqual(result, "completed") + + def test_anext_return_generator(self): + class WithGenAnext: + def __aiter__(self): + return self + def __anext__(self): + yield + result = self.loop.run_until_complete(self.check_anext_returning_iterator(WithGenAnext)) + self.assertEqual(result, "completed") + + def test_anext_await_raises(self): + class RaisingAwaitable: + def __await__(self): + raise ZeroDivisionError() + yield + class WithRaisingAwaitableAnext: + def __aiter__(self): + return self + def __anext__(self): + return RaisingAwaitable() + async def do_test(): + awaitable = anext(WithRaisingAwaitableAnext()) + with self.assertRaises(ZeroDivisionError): + await awaitable + awaitable = anext(WithRaisingAwaitableAnext(), "default") + with self.assertRaises(ZeroDivisionError): + await awaitable + return "completed" + result = self.loop.run_until_complete(do_test()) + self.assertEqual(result, "completed") def test_aiter_bad_args(self): async def gen(): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst new file mode 100644 index 0000000000000..75951ae794d10 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst @@ -0,0 +1 @@ +Fixed a bug where ``anext(ait, default)`` would erroneously return None. \ No newline at end of file diff --git a/Objects/iterobject.c b/Objects/iterobject.c index 65af18abf79de..6961fc3b4a949 100644 --- a/Objects/iterobject.c +++ b/Objects/iterobject.c @@ -316,7 +316,52 @@ anextawaitable_traverse(anextawaitableobject *obj, visitproc visit, void *arg) static PyObject * anextawaitable_iternext(anextawaitableobject *obj) { - PyObject *result = PyIter_Next(obj->wrapped); + /* Consider the following class: + * + * class A: + * async def __anext__(self): + * ... + * a = A() + * + * Then `await anext(a)` should call + * a.__anext__().__await__().__next__() + * + * On the other hand, given + * + * async def agen(): + * yield 1 + * yield 2 + * gen = agen() + * + * Then `await anext(gen)` can just call + * gen.__anext__().__next__() + */ + assert(obj->wrapped != NULL); + PyObject *awaitable = _PyCoro_GetAwaitableIter(obj->wrapped); + if (awaitable == NULL) { + return NULL; + } + if (Py_TYPE(awaitable)->tp_iternext == NULL) { + /* _PyCoro_GetAwaitableIter returns a Coroutine, a Generator, + * or an iterator. Of these, only coroutines lack tp_iternext. + */ + assert(PyCoro_CheckExact(awaitable)); + unaryfunc getter = Py_TYPE(awaitable)->tp_as_async->am_await; + PyObject *new_awaitable = getter(awaitable); + if (new_awaitable == NULL) { + Py_DECREF(awaitable); + return NULL; + } + Py_SETREF(awaitable, new_awaitable); + if (Py_TYPE(awaitable)->tp_iternext == NULL) { + PyErr_SetString(PyExc_TypeError, + "__await__ returned a non-iterable"); + Py_DECREF(awaitable); + return NULL; + } + } + PyObject *result = (*Py_TYPE(awaitable)->tp_iternext)(awaitable); + Py_DECREF(awaitable); if (result != NULL) { return result; } From webhook-mailer at python.org Sun Apr 11 04:34:25 2021 From: webhook-mailer at python.org (mdickinson) Date: Sun, 11 Apr 2021 08:34:25 -0000 Subject: [Python-checkins] Fix description of behaviour of an exception class in 'from' clause (GH-24303) Message-ID: https://github.com/python/cpython/commit/79650d0118b0a8861428b9dd063089de405cf137 commit: 79650d0118b0a8861428b9dd063089de405cf137 branch: master author: Mark Dickinson committer: mdickinson date: 2021-04-11T09:33:59+01:00 summary: Fix description of behaviour of an exception class in 'from' clause (GH-24303) files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 3fff8484856ab..941b3427d635e 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -591,10 +591,13 @@ instance, with its traceback set to its argument), like so:: __context__ (exception attribute) The ``from`` clause is used for exception chaining: if given, the second -*expression* must be another exception class or instance, which will then be -attached to the raised exception as the :attr:`__cause__` attribute (which is -writable). If the raised exception is not handled, both exceptions will be -printed:: +*expression* must be another exception class or instance. If the second +expression is an exception instance, it will be attached to the raised +exception as the :attr:`__cause__` attribute (which is writable). If the +expression is an exception class, the class will be instantiated and the +resulting exception instance will be attached to the raised exception as the +:attr:`__cause__` attribute. If the raised exception is not handled, both +exceptions will be printed:: >>> try: ... print(1 / 0) From webhook-mailer at python.org Sun Apr 11 04:50:46 2021 From: webhook-mailer at python.org (mdickinson) Date: Sun, 11 Apr 2021 08:50:46 -0000 Subject: [Python-checkins] Fix typo in 3.10.0a7.rst (GH-25340) Message-ID: https://github.com/python/cpython/commit/63bf1abfdc2db2798e477c38f41c486e702b7542 commit: 63bf1abfdc2db2798e477c38f41c486e702b7542 branch: master author: Sergey B Kirpichev <2155800+skirpichev at users.noreply.github.com> committer: mdickinson date: 2021-04-11T09:50:42+01:00 summary: Fix typo in 3.10.0a7.rst (GH-25340) files: M Misc/NEWS.d/3.10.0a7.rst diff --git a/Misc/NEWS.d/3.10.0a7.rst b/Misc/NEWS.d/3.10.0a7.rst index e53f6ba84e43d..a20072b7ae11e 100644 --- a/Misc/NEWS.d/3.10.0a7.rst +++ b/Misc/NEWS.d/3.10.0a7.rst @@ -534,7 +534,7 @@ during connection setup. .. nonce: cee_X5 .. section: Library -Improve performance of class:`fractions.Fraction` arithmetics for large +Improve performance of :class:`fractions.Fraction` arithmetics for large components. Contributed by Sergey B. Kirpichev. .. From webhook-mailer at python.org Sun Apr 11 04:53:20 2021 From: webhook-mailer at python.org (mdickinson) Date: Sun, 11 Apr 2021 08:53:20 -0000 Subject: [Python-checkins] Fix description of behaviour of an exception class in 'from' clause (GH-24303) (GH-25342) Message-ID: https://github.com/python/cpython/commit/328d66c0715341f17343281c7b3d3032684e3c0a commit: 328d66c0715341f17343281c7b3d3032684e3c0a branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: mdickinson date: 2021-04-11T09:53:16+01:00 summary: Fix description of behaviour of an exception class in 'from' clause (GH-24303) (GH-25342) (cherry picked from commit 79650d0118b0a8861428b9dd063089de405cf137) Co-authored-by: Mark Dickinson Co-authored-by: Mark Dickinson files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index f8ab2e918c6a1..8691cbd0a4786 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -591,10 +591,13 @@ instance, with its traceback set to its argument), like so:: __context__ (exception attribute) The ``from`` clause is used for exception chaining: if given, the second -*expression* must be another exception class or instance, which will then be -attached to the raised exception as the :attr:`__cause__` attribute (which is -writable). If the raised exception is not handled, both exceptions will be -printed:: +*expression* must be another exception class or instance. If the second +expression is an exception instance, it will be attached to the raised +exception as the :attr:`__cause__` attribute (which is writable). If the +expression is an exception class, the class will be instantiated and the +resulting exception instance will be attached to the raised exception as the +:attr:`__cause__` attribute. If the raised exception is not handled, both +exceptions will be printed:: >>> try: ... print(1 / 0) From webhook-mailer at python.org Sun Apr 11 05:27:57 2021 From: webhook-mailer at python.org (mdickinson) Date: Sun, 11 Apr 2021 09:27:57 -0000 Subject: [Python-checkins] Fix description of behaviour of an exception class in 'from' clause (GH-24303) (GH-25341) Message-ID: https://github.com/python/cpython/commit/dbc0e19a48c6f7229c06f0ae71fae0550c84c37c commit: dbc0e19a48c6f7229c06f0ae71fae0550c84c37c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: mdickinson date: 2021-04-11T10:27:51+01:00 summary: Fix description of behaviour of an exception class in 'from' clause (GH-24303) (GH-25341) (cherry picked from commit 79650d0118b0a8861428b9dd063089de405cf137) Co-authored-by: Mark Dickinson Co-authored-by: Mark Dickinson files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index f8ab2e918c6a1..8691cbd0a4786 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -591,10 +591,13 @@ instance, with its traceback set to its argument), like so:: __context__ (exception attribute) The ``from`` clause is used for exception chaining: if given, the second -*expression* must be another exception class or instance, which will then be -attached to the raised exception as the :attr:`__cause__` attribute (which is -writable). If the raised exception is not handled, both exceptions will be -printed:: +*expression* must be another exception class or instance. If the second +expression is an exception instance, it will be attached to the raised +exception as the :attr:`__cause__` attribute (which is writable). If the +expression is an exception class, the class will be instantiated and the +resulting exception instance will be attached to the raised exception as the +:attr:`__cause__` attribute. If the raised exception is not handled, both +exceptions will be printed:: >>> try: ... print(1 / 0) From webhook-mailer at python.org Sun Apr 11 09:26:16 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 11 Apr 2021 13:26:16 -0000 Subject: [Python-checkins] bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (#24818) Message-ID: https://github.com/python/cpython/commit/b38601d49675d90e1ee6faa47f7adaeca992d02d commit: b38601d49675d90e1ee6faa47f7adaeca992d02d branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: orsenthil date: 2021-04-11T06:26:09-07:00 summary: bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (#24818) * coerce bytes separator to string * Add news * Update Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst files: A Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst M Lib/test/test_urlparse.py M Lib/urllib/parse.py diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 3b1c360625b5a..c543ac9a4ba72 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -893,6 +893,8 @@ def test_parse_qs_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qs(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qs(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_parse_qsl_separator(self): @@ -912,6 +914,8 @@ def test_parse_qsl_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qsl(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qsl(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_urlencode_sequences(self): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 335e183498d8b..21cae47bf38a3 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -733,6 +733,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, Returns a list, as G-d intended. """ qs, _coerce_result = _coerce_args(qs) + separator, _ = _coerce_args(separator) if not separator or (not isinstance(separator, (str, bytes))): raise ValueError("Separator must be of type string or bytes.") diff --git a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst new file mode 100644 index 0000000000000..f8ad3eaaedd78 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst @@ -0,0 +1,3 @@ +Allow :class:`bytes` ``separator`` argument in ``urllib.parse.parse_qs`` and +``urllib.parse.parse_qsl`` when parsing :class:`str` query strings. Previously, +this raised a ``TypeError``. From webhook-mailer at python.org Sun Apr 11 09:49:43 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 11 Apr 2021 13:49:43 -0000 Subject: [Python-checkins] bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818) Message-ID: https://github.com/python/cpython/commit/6ec2fb42f93660810952388e5c4018c197c17c8c commit: 6ec2fb42f93660810952388e5c4018c197c17c8c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-11T06:49:35-07:00 summary: bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818) * coerce bytes separator to string * Add news * Update Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst (cherry picked from commit b38601d49675d90e1ee6faa47f7adaeca992d02d) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst M Lib/test/test_urlparse.py M Lib/urllib/parse.py diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 3b1c360625b5a..c543ac9a4ba72 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -893,6 +893,8 @@ def test_parse_qs_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qs(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qs(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_parse_qsl_separator(self): @@ -912,6 +914,8 @@ def test_parse_qsl_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qsl(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qsl(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_urlencode_sequences(self): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 335e183498d8b..21cae47bf38a3 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -733,6 +733,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, Returns a list, as G-d intended. """ qs, _coerce_result = _coerce_args(qs) + separator, _ = _coerce_args(separator) if not separator or (not isinstance(separator, (str, bytes))): raise ValueError("Separator must be of type string or bytes.") diff --git a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst new file mode 100644 index 0000000000000..f8ad3eaaedd78 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst @@ -0,0 +1,3 @@ +Allow :class:`bytes` ``separator`` argument in ``urllib.parse.parse_qs`` and +``urllib.parse.parse_qsl`` when parsing :class:`str` query strings. Previously, +this raised a ``TypeError``. From webhook-mailer at python.org Sun Apr 11 17:57:13 2021 From: webhook-mailer at python.org (vstinner) Date: Sun, 11 Apr 2021 21:57:13 -0000 Subject: [Python-checkins] bpo-43770: Refactor PyType_Ready() function (GH-25336) Message-ID: https://github.com/python/cpython/commit/53114ffef1d4facf9aa5545e711abbbda66f672a commit: 53114ffef1d4facf9aa5545e711abbbda66f672a branch: master author: Victor Stinner committer: vstinner date: 2021-04-11T23:57:09+02:00 summary: bpo-43770: Refactor PyType_Ready() function (GH-25336) * Split PyType_Ready() into sub-functions. * type_ready_mro() now checks if bases are static types earlier. * Check tp_name earlier, in type_ready_checks(). * Add _PyType_IsReady() macro to check if a type is ready. files: M Include/internal/pycore_object.h M Objects/typeobject.c diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index 79c1c44ae72d6..9dfc8c62babad 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -174,6 +174,10 @@ extern int _Py_CheckSlotResult( const char *slot_name, int success); +// PyType_Ready() must be called if _PyType_IsReady() is false. +// See also the Py_TPFLAGS_READY flag. +#define _PyType_IsReady(type) ((type)->tp_dict != NULL) + #ifdef __cplusplus } #endif diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 6386b3b39144f..75dd604d39c45 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1815,7 +1815,7 @@ mro_implementation(PyTypeObject *type) PyObject **to_merge; Py_ssize_t i, n; - if (type->tp_dict == NULL) { + if (!_PyType_IsReady(type)) { if (PyType_Ready(type) < 0) return NULL; } @@ -2084,7 +2084,7 @@ best_base(PyObject *bases) return NULL; } base_i = (PyTypeObject *)base_proto; - if (base_i->tp_dict == NULL) { + if (!_PyType_IsReady(base_i)) { if (PyType_Ready(base_i) < 0) return NULL; } @@ -2429,6 +2429,7 @@ typedef struct { } type_new_ctx; +/* Check for valid slot names and two special cases */ static int type_new_visit_slots(type_new_ctx *ctx) { @@ -2464,6 +2465,10 @@ type_new_visit_slots(type_new_ctx *ctx) } +/* Copy slots into a list, mangle names and sort them. + Sorted names are needed for __class__ assignment. + Convert them back to tuple at the end. +*/ static PyObject* type_new_copy_slots(type_new_ctx *ctx, PyObject *dict) { @@ -2554,7 +2559,7 @@ type_new_slots_bases(type_new_ctx *ctx) if (ctx->may_add_dict && ctx->add_dict == 0 && type->tp_dictoffset != 0) { - (ctx->add_dict)++; + ctx->add_dict++; } if (ctx->may_add_weak && ctx->add_weak == 0 && type->tp_weaklistoffset != 0) @@ -2585,15 +2590,10 @@ type_new_slots_impl(type_new_ctx *ctx, PyObject *dict) return -1; } - /* Check for valid slot names and two special cases */ if (type_new_visit_slots(ctx) < 0) { return -1; } - /* Copy slots into a list, mangle names and sort them. - Sorted names are needed for __class__ assignment. - Convert them back to tuple at the end. - */ PyObject *new_slots = type_new_copy_slots(ctx, dict); if (new_slots == NULL) { return -1; @@ -2698,6 +2698,7 @@ type_new_set_name(const type_new_ctx *ctx, PyTypeObject *type) } +/* Set __module__ in the dict */ static int type_new_set_module(PyTypeObject *type) { @@ -2729,6 +2730,8 @@ type_new_set_module(PyTypeObject *type) } +/* Set ht_qualname to dict['__qualname__'] if available, else to + __name__. The __qualname__ accessor will look for ht_qualname. */ static int type_new_set_ht_name(PyTypeObject *type) { @@ -2757,6 +2760,9 @@ type_new_set_ht_name(PyTypeObject *type) } +/* Set tp_doc to a copy of dict['__doc__'], if the latter is there + and is a string. The __doc__ accessor will first look for tp_doc; + if that fails, it will still look into __dict__. */ static int type_new_set_doc(PyTypeObject *type) { @@ -2847,6 +2853,7 @@ type_new_classmethod(PyTypeObject *type, _Py_Identifier *attr_id) } +/* Add descriptors for custom slots from __slots__, or for __dict__ */ static int type_new_descriptors(const type_new_ctx *ctx, PyTypeObject *type) { @@ -2924,6 +2931,7 @@ type_new_set_slots(const type_new_ctx *ctx, PyTypeObject *type) } +/* store type in class' cell if one is supplied */ static int type_new_set_classcell(PyTypeObject *type) { @@ -2959,20 +2967,14 @@ type_new_set_attrs(const type_new_ctx *ctx, PyTypeObject *type) return -1; } - /* Set __module__ in the dict */ if (type_new_set_module(type) < 0) { return -1; } - /* Set ht_qualname to dict['__qualname__'] if available, else to - __name__. The __qualname__ accessor will look for ht_qualname. */ if (type_new_set_ht_name(type) < 0) { return -1; } - /* Set tp_doc to a copy of dict['__doc__'], if the latter is there - and is a string. The __doc__ accessor will first look for tp_doc; - if that fails, it will still look into __dict__. */ if (type_new_set_doc(type) < 0) { return -1; } @@ -2992,14 +2994,12 @@ type_new_set_attrs(const type_new_ctx *ctx, PyTypeObject *type) return -1; } - /* Add descriptors for custom slots from __slots__, or for __dict__ */ if (type_new_descriptors(ctx, type) < 0) { return -1; } type_new_set_slots(ctx, type); - /* store type in class' cell if one is supplied */ if (type_new_set_classcell(type) < 0) { return -1; } @@ -3784,7 +3784,7 @@ type_getattro(PyTypeObject *type, PyObject *name) } /* Initialize this type (we'll assume the metatype is initialized) */ - if (type->tp_dict == NULL) { + if (!_PyType_IsReady(type)) { if (PyType_Ready(type) < 0) return NULL; } @@ -5817,20 +5817,10 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base) static int add_operators(PyTypeObject *); -int -PyType_Ready(PyTypeObject *type) -{ - PyObject *dict, *bases; - PyTypeObject *base; - Py_ssize_t i, n; - - if (type->tp_flags & Py_TPFLAGS_READY) { - assert(_PyType_CheckConsistency(type)); - return 0; - } - _PyObject_ASSERT((PyObject *)type, - (type->tp_flags & Py_TPFLAGS_READYING) == 0); +static int +type_ready_checks(PyTypeObject *type) +{ /* Consistency checks for PEP 590: * - Py_TPFLAGS_METHOD_DESCRIPTOR requires tp_descr_get * - Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and @@ -5844,6 +5834,7 @@ PyType_Ready(PyTypeObject *type) _PyObject_ASSERT((PyObject *)type, type->tp_vectorcall_offset > 0); _PyObject_ASSERT((PyObject *)type, type->tp_call != NULL); } + /* Consistency check for Py_TPFLAGS_HAVE_AM_SEND - flag requires * type->tp_as_async->am_send to be present. */ @@ -5852,25 +5843,20 @@ PyType_Ready(PyTypeObject *type) _PyObject_ASSERT((PyObject *)type, type->tp_as_async->am_send != NULL); } - type->tp_flags |= Py_TPFLAGS_READYING; - -#ifdef Py_TRACE_REFS - /* PyType_Ready is the closest thing we have to a choke point - * for type objects, so is the best place I can think of to try - * to get type objects into the doubly-linked list of all objects. - * Still, not all type objects go through PyType_Ready. - */ - _Py_AddToAllObjects((PyObject *)type, 0); -#endif - if (type->tp_name == NULL) { PyErr_Format(PyExc_SystemError, "Type does not define the tp_name field."); - goto error; + return -1; } + return 0; +} + +static int +type_ready_set_base(PyTypeObject *type) +{ /* Initialize tp_base (defaults to BaseObject unless that's us) */ - base = type->tp_base; + PyTypeObject *base = type->tp_base; if (base == NULL && type != &PyBaseObject_Type) { base = &PyBaseObject_Type; if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) { @@ -5882,13 +5868,13 @@ PyType_Ready(PyTypeObject *type) } /* Now the only way base can still be NULL is if type is - * &PyBaseObject_Type. - */ + * &PyBaseObject_Type. */ /* Initialize the base class */ - if (base != NULL && base->tp_dict == NULL) { - if (PyType_Ready(base) < 0) - goto error; + if (base != NULL && !_PyType_IsReady(base)) { + if (PyType_Ready(base) < 0) { + return -1; + } } /* Initialize ob_type if NULL. This means extensions that want to be @@ -5901,83 +5887,115 @@ PyType_Ready(PyTypeObject *type) if (Py_IS_TYPE(type, NULL) && base != NULL) { Py_SET_TYPE(type, Py_TYPE(base)); } + return 0; +} + +static int +type_ready_add_attrs(PyTypeObject *type) +{ /* Initialize tp_bases */ - bases = type->tp_bases; + PyObject *bases = type->tp_bases; if (bases == NULL) { - if (base == NULL) + PyTypeObject *base = type->tp_base; + if (base == NULL) { bases = PyTuple_New(0); - else + } + else { bases = PyTuple_Pack(1, base); - if (bases == NULL) - goto error; + } + if (bases == NULL) { + return -1; + } type->tp_bases = bases; } /* Initialize tp_dict */ - dict = type->tp_dict; + PyObject *dict = type->tp_dict; if (dict == NULL) { dict = PyDict_New(); - if (dict == NULL) - goto error; + if (dict == NULL) { + return -1; + } type->tp_dict = dict; } /* Add type-specific descriptors to tp_dict */ - if (add_operators(type) < 0) - goto error; + if (add_operators(type) < 0) { + return -1; + } if (type->tp_methods != NULL) { - if (add_methods(type, type->tp_methods) < 0) - goto error; + if (add_methods(type, type->tp_methods) < 0) { + return -1; + } } if (type->tp_members != NULL) { - if (add_members(type, type->tp_members) < 0) - goto error; + if (add_members(type, type->tp_members) < 0) { + return -1; + } } if (type->tp_getset != NULL) { - if (add_getset(type, type->tp_getset) < 0) - goto error; + if (add_getset(type, type->tp_getset) < 0) { + return -1; + } } + return 0; +} + +static int +type_ready_mro(PyTypeObject *type) +{ /* Calculate method resolution order */ - if (mro_internal(type, NULL) < 0) - goto error; + if (mro_internal(type, NULL) < 0) { + return -1; + } + assert(type->tp_mro != NULL); + assert(PyTuple_Check(type->tp_mro)); + + /* All bases of statically allocated type should be statically allocated */ + if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + PyObject *mro = type->tp_mro; + Py_ssize_t n = PyTuple_GET_SIZE(mro); + for (Py_ssize_t i = 0; i < n; i++) { + PyTypeObject *base = (PyTypeObject *)PyTuple_GET_ITEM(mro, i); + if (PyType_Check(base) && (base->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + PyErr_Format(PyExc_TypeError, + "type '%.100s' is not dynamically allocated but " + "its base type '%.100s' is dynamically allocated", + type->tp_name, base->tp_name); + return -1; + } + } + } + return 0; +} + +static int +type_ready_inherit(PyTypeObject *type) +{ /* Inherit special flags from dominant base */ - if (type->tp_base != NULL) + if (type->tp_base != NULL) { inherit_special(type, type->tp_base); + } /* Initialize tp_dict properly */ - bases = type->tp_mro; - assert(bases != NULL); - assert(PyTuple_Check(bases)); - n = PyTuple_GET_SIZE(bases); - for (i = 1; i < n; i++) { - PyObject *b = PyTuple_GET_ITEM(bases, i); + PyObject *mro = type->tp_mro; + Py_ssize_t n = PyTuple_GET_SIZE(type->tp_mro); + for (Py_ssize_t i = 1; i < n; i++) { + PyObject *b = PyTuple_GET_ITEM(mro, i); if (PyType_Check(b)) { if (inherit_slots(type, (PyTypeObject *)b) < 0) { - goto error; + return -1; } } } - /* All bases of statically allocated type should be statically allocated */ - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) - for (i = 0; i < n; i++) { - PyObject *b = PyTuple_GET_ITEM(bases, i); - if (PyType_Check(b) && - (((PyTypeObject *)b)->tp_flags & Py_TPFLAGS_HEAPTYPE)) { - PyErr_Format(PyExc_TypeError, - "type '%.100s' is not dynamically allocated but " - "its base type '%.100s' is dynamically allocated", - type->tp_name, ((PyTypeObject *)b)->tp_name); - goto error; - } - } - /* Sanity check for tp_free. */ if (_PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) && - (type->tp_free == NULL || type->tp_free == PyObject_Del)) { + (type->tp_free == NULL || type->tp_free == PyObject_Del)) + { /* This base class needs to call tp_free, but doesn't have * one, or its tp_free is for non-gc'ed objects. */ @@ -5985,89 +6003,187 @@ PyType_Ready(PyTypeObject *type) "gc and is a base type but has inappropriate " "tp_free slot", type->tp_name); - goto error; + return -1; } + return 0; +} - /* if the type dictionary doesn't contain a __doc__, set it from - the tp_doc slot. - */ + +/* If the type dictionary doesn't contain a __doc__, set it from + the tp_doc slot. */ +static int +type_ready_set_doc(PyTypeObject *type) +{ int r = _PyDict_ContainsId(type->tp_dict, &PyId___doc__); if (r < 0) { - goto error; + return -1; } - if (r == 0) { - if (type->tp_doc != NULL) { - const char *old_doc = _PyType_DocWithoutSignature(type->tp_name, - type->tp_doc); - PyObject *doc = PyUnicode_FromString(old_doc); - if (doc == NULL) - goto error; - if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, doc) < 0) { - Py_DECREF(doc); - goto error; - } - Py_DECREF(doc); - } else { - if (_PyDict_SetItemId(type->tp_dict, - &PyId___doc__, Py_None) < 0) - goto error; - } + if (r > 0) { + return 0; } - /* Hack for tp_hash and __hash__. - If after all that, tp_hash is still NULL, and __hash__ is not in - tp_dict, set tp_hash to PyObject_HashNotImplemented and - tp_dict['__hash__'] equal to None. - This signals that __hash__ is not inherited. - */ - if (type->tp_hash == NULL) { - r = _PyDict_ContainsId(type->tp_dict, &PyId___hash__); - if (r < 0) { - goto error; + if (type->tp_doc != NULL) { + const char *doc_str; + doc_str = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc); + PyObject *doc = PyUnicode_FromString(doc_str); + if (doc == NULL) { + return -1; } - if (r == 0) { - if (_PyDict_SetItemId(type->tp_dict, &PyId___hash__, Py_None) < 0) { - goto error; - } - type->tp_hash = PyObject_HashNotImplemented; + + if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, doc) < 0) { + Py_DECREF(doc); + return -1; + } + Py_DECREF(doc); + } + else { + if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, Py_None) < 0) { + return -1; } } + return 0; +} - /* Some more special stuff */ - base = type->tp_base; - if (base != NULL) { - if (type->tp_as_async == NULL) - type->tp_as_async = base->tp_as_async; - if (type->tp_as_number == NULL) - type->tp_as_number = base->tp_as_number; - if (type->tp_as_sequence == NULL) - type->tp_as_sequence = base->tp_as_sequence; - if (type->tp_as_mapping == NULL) - type->tp_as_mapping = base->tp_as_mapping; - if (type->tp_as_buffer == NULL) - type->tp_as_buffer = base->tp_as_buffer; - } - - /* Link into each base class's list of subclasses */ - bases = type->tp_bases; - n = PyTuple_GET_SIZE(bases); - for (i = 0; i < n; i++) { + +/* Hack for tp_hash and __hash__. + If after all that, tp_hash is still NULL, and __hash__ is not in + tp_dict, set tp_hash to PyObject_HashNotImplemented and + tp_dict['__hash__'] equal to None. + This signals that __hash__ is not inherited. */ +static int +type_ready_set_hash(PyTypeObject *type) +{ + if (type->tp_hash != NULL) { + return 0; + } + + int r = _PyDict_ContainsId(type->tp_dict, &PyId___hash__); + if (r < 0) { + return -1; + } + if (r > 0) { + return 0; + } + + if (_PyDict_SetItemId(type->tp_dict, &PyId___hash__, Py_None) < 0) { + return -1; + } + type->tp_hash = PyObject_HashNotImplemented; + return 0; +} + + +/* Some more special stuff */ +static void +type_ready_inherit_special(PyTypeObject *type) +{ + PyTypeObject *base = type->tp_base; + if (base == NULL) { + return; + } + + if (type->tp_as_async == NULL) { + type->tp_as_async = base->tp_as_async; + } + if (type->tp_as_number == NULL) { + type->tp_as_number = base->tp_as_number; + } + if (type->tp_as_sequence == NULL) { + type->tp_as_sequence = base->tp_as_sequence; + } + if (type->tp_as_mapping == NULL) { + type->tp_as_mapping = base->tp_as_mapping; + } + if (type->tp_as_buffer == NULL) { + type->tp_as_buffer = base->tp_as_buffer; + } +} + + +/* Link into each base class's list of subclasses */ +static int +type_ready_add_subclasses(PyTypeObject *type) +{ + PyObject *bases = type->tp_bases; + Py_ssize_t nbase = PyTuple_GET_SIZE(bases); + for (Py_ssize_t i = 0; i < nbase; i++) { PyObject *b = PyTuple_GET_ITEM(bases, i); - if (PyType_Check(b) && - add_subclass((PyTypeObject *)b, type) < 0) - goto error; + if (PyType_Check(b) && add_subclass((PyTypeObject *)b, type) < 0) { + return -1; + } + } + return 0; +} + + +static int +type_ready(PyTypeObject *type) +{ + if (type_ready_checks(type) < 0) { + return -1; + } + +#ifdef Py_TRACE_REFS + /* PyType_Ready is the closest thing we have to a choke point + * for type objects, so is the best place I can think of to try + * to get type objects into the doubly-linked list of all objects. + * Still, not all type objects go through PyType_Ready. + */ + _Py_AddToAllObjects((PyObject *)type, 0); +#endif + + if (type_ready_set_base(type) < 0) { + return -1; + } + if (type_ready_add_attrs(type) < 0) { + return -1; + } + if (type_ready_mro(type) < 0) { + return -1; + } + if (type_ready_inherit(type) < 0) { + return -1; } + if (type_ready_set_doc(type) < 0) { + return -1; + } + if (type_ready_set_hash(type) < 0) { + return -1; + } + + type_ready_inherit_special(type); + + if (type_ready_add_subclasses(type) < 0) { + return -1; + } + return 0; +} + + +int +PyType_Ready(PyTypeObject *type) +{ + if (type->tp_flags & Py_TPFLAGS_READY) { + assert(_PyType_CheckConsistency(type)); + return 0; + } + _PyObject_ASSERT((PyObject *)type, + (type->tp_flags & Py_TPFLAGS_READYING) == 0); + + type->tp_flags |= Py_TPFLAGS_READYING; + + if (type_ready(type) < 0) { + type->tp_flags &= ~Py_TPFLAGS_READYING; + return -1; + } + /* All done -- set the ready flag */ - type->tp_flags = - (type->tp_flags & ~Py_TPFLAGS_READYING) | Py_TPFLAGS_READY; + type->tp_flags = (type->tp_flags & ~Py_TPFLAGS_READYING) | Py_TPFLAGS_READY; assert(_PyType_CheckConsistency(type)); return 0; - - error: - type->tp_flags &= ~Py_TPFLAGS_READYING; - return -1; } + static int add_subclass(PyTypeObject *base, PyTypeObject *type) { From webhook-mailer at python.org Sun Apr 11 18:21:28 2021 From: webhook-mailer at python.org (vstinner) Date: Sun, 11 Apr 2021 22:21:28 -0000 Subject: [Python-checkins] bpo-43682: Make staticmethod objects callable (GH-25117) Message-ID: https://github.com/python/cpython/commit/553ee2781a37ac9d2068da3e1325a780ca79e21e commit: 553ee2781a37ac9d2068da3e1325a780ca79e21e branch: master author: Victor Stinner committer: vstinner date: 2021-04-12T00:21:22+02:00 summary: bpo-43682: Make staticmethod objects callable (GH-25117) Static methods (@staticmethod) are now callable as regular functions. files: A Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst M Doc/library/functions.rst M Doc/reference/datamodel.rst M Doc/whatsnew/3.10.rst M Lib/test/test_decorators.py M Lib/test/test_pydoc.py M Objects/funcobject.c diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index dca8b9334877d..30f62e69e7fb9 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1619,8 +1619,9 @@ are always available. They are listed here in alphabetical order. The ``@staticmethod`` form is a function :term:`decorator` -- see :ref:`function` for details. - A static method can be called either on the class (such as ``C.f()``) or on an instance (such - as ``C().f()``). + A static method can be called either on the class (such as ``C.f()``) or on + an instance (such as ``C().f()``). Moreover, they can be called as regular + functions (such as ``f()``). Static methods in Python are similar to those found in Java or C++. Also see :func:`classmethod` for a variant that is useful for creating alternate class @@ -1632,15 +1633,19 @@ are always available. They are listed here in alphabetical order. body and you want to avoid the automatic transformation to instance method. For these cases, use this idiom:: + def regular_function(): + ... + class C: - builtin_open = staticmethod(open) + method = staticmethod(regular_function) For more information on static methods, see :ref:`types`. .. versionchanged:: 3.10 Static methods now inherit the method attributes (``__module__``, - ``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``) and - have a new ``__wrapped__`` attribute. + ``__name__``, ``__qualname__``, ``__doc__`` and ``__annotations__``), + have a new ``__wrapped__`` attribute, and are now callable as regular + functions. .. index:: diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 9c819b7ae6d28..3b8780d834bf0 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1132,9 +1132,8 @@ Internal types around any other object, usually a user-defined method object. When a static method object is retrieved from a class or a class instance, the object actually returned is the wrapped object, which is not subject to any further - transformation. Static method objects are not themselves callable, although the - objects they wrap usually are. Static method objects are created by the built-in - :func:`staticmethod` constructor. + transformation. Static method objects are also callable. Static method + objects are created by the built-in :func:`staticmethod` constructor. Class method objects A class method object, like a static method object, is a wrapper around another diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 50c8d53e57d83..9f6b7a469ca49 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -623,6 +623,7 @@ Other Language Changes (:func:`@classmethod `) now inherit the method attributes (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, ``__annotations__``) and have a new ``__wrapped__`` attribute. + Moreover, static methods are now callable as regular functions. (Contributed by Victor Stinner in :issue:`43682`.) diff --git a/Lib/test/test_decorators.py b/Lib/test/test_decorators.py index 7d0243ab19939..d4353457933f3 100644 --- a/Lib/test/test_decorators.py +++ b/Lib/test/test_decorators.py @@ -91,14 +91,18 @@ def func(x): getattr(func, attr)) self.assertEqual(repr(wrapper), format_str.format(func)) - - self.assertRaises(TypeError, wrapper, 1) + return wrapper def test_staticmethod(self): - self.check_wrapper_attrs(staticmethod, '') + wrapper = self.check_wrapper_attrs(staticmethod, '') + + # bpo-43682: Static methods are callable since Python 3.10 + self.assertEqual(wrapper(1), 1) def test_classmethod(self): - self.check_wrapper_attrs(classmethod, '') + wrapper = self.check_wrapper_attrs(classmethod, '') + + self.assertRaises(TypeError, wrapper, 1) def test_dotted(self): decorators = MiscDecorators() diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index e94ebd30160e0..9bde0c75bc906 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -1142,7 +1142,7 @@ def sm(x, y): '''A static method''' ... self.assertEqual(self._get_summary_lines(X.__dict__['sm']), - 'sm(...)\n' + 'sm(x, y)\n' ' A static method\n') self.assertEqual(self._get_summary_lines(X.sm), """\ sm(x, y) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst new file mode 100644 index 0000000000000..1ad949389a1f6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst @@ -0,0 +1,2 @@ +Static methods (:func:`@staticmethod `) are now callable as +regular functions. Patch by Victor Stinner. diff --git a/Objects/funcobject.c b/Objects/funcobject.c index df59131912190..f0b0b673d4fa4 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -1040,6 +1040,13 @@ sm_init(PyObject *self, PyObject *args, PyObject *kwds) return 0; } +static PyObject* +sm_call(PyObject *callable, PyObject *args, PyObject *kwargs) +{ + staticmethod *sm = (staticmethod *)callable; + return PyObject_Call(sm->sm_callable, args, kwargs); +} + static PyMemberDef sm_memberlist[] = { {"__func__", T_OBJECT, offsetof(staticmethod, sm_callable), READONLY}, {"__wrapped__", T_OBJECT, offsetof(staticmethod, sm_callable), READONLY}, @@ -1107,7 +1114,7 @@ PyTypeObject PyStaticMethod_Type = { 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ - 0, /* tp_call */ + sm_call, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ From webhook-mailer at python.org Mon Apr 12 01:47:01 2021 From: webhook-mailer at python.org (methane) Date: Mon, 12 Apr 2021 05:47:01 -0000 Subject: [Python-checkins] bpo-43785: Improve BZ2File performance by removing RLock (GH-25299) Message-ID: https://github.com/python/cpython/commit/cc2ffcdfd78df3a18edae60df81b2f1b044b1634 commit: cc2ffcdfd78df3a18edae60df81b2f1b044b1634 branch: master author: Inada Naoki committer: methane date: 2021-04-12T14:46:53+09:00 summary: bpo-43785: Improve BZ2File performance by removing RLock (GH-25299) Remove `RLock` from `BZ2File`. It makes `BZ2File` to thread unsafe, but gzip and lzma don't use it too. Co-authored-by: Gregory P. Smith files: A Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst M Lib/bz2.py diff --git a/Lib/bz2.py b/Lib/bz2.py index 1da3ce65c81b7..43f321ae85239 100644 --- a/Lib/bz2.py +++ b/Lib/bz2.py @@ -13,7 +13,6 @@ import io import os import _compression -from threading import RLock from _bz2 import BZ2Compressor, BZ2Decompressor @@ -53,9 +52,6 @@ def __init__(self, filename, mode="r", *, compresslevel=9): If mode is 'r', the input file may be the concatenation of multiple compressed streams. """ - # This lock must be recursive, so that BufferedIOBase's - # writelines() does not deadlock. - self._lock = RLock() self._fp = None self._closefp = False self._mode = _MODE_CLOSED @@ -104,24 +100,23 @@ def close(self): May be called more than once without error. Once the file is closed, any other operation on it will raise a ValueError. """ - with self._lock: - if self._mode == _MODE_CLOSED: - return + if self._mode == _MODE_CLOSED: + return + try: + if self._mode == _MODE_READ: + self._buffer.close() + elif self._mode == _MODE_WRITE: + self._fp.write(self._compressor.flush()) + self._compressor = None + finally: try: - if self._mode == _MODE_READ: - self._buffer.close() - elif self._mode == _MODE_WRITE: - self._fp.write(self._compressor.flush()) - self._compressor = None + if self._closefp: + self._fp.close() finally: - try: - if self._closefp: - self._fp.close() - finally: - self._fp = None - self._closefp = False - self._mode = _MODE_CLOSED - self._buffer = None + self._fp = None + self._closefp = False + self._mode = _MODE_CLOSED + self._buffer = None @property def closed(self): @@ -153,12 +148,11 @@ def peek(self, n=0): Always returns at least one byte of data, unless at EOF. The exact number of bytes returned is unspecified. """ - with self._lock: - self._check_can_read() - # Relies on the undocumented fact that BufferedReader.peek() - # always returns at least one byte (except at EOF), independent - # of the value of n - return self._buffer.peek(n) + self._check_can_read() + # Relies on the undocumented fact that BufferedReader.peek() + # always returns at least one byte (except at EOF), independent + # of the value of n + return self._buffer.peek(n) def read(self, size=-1): """Read up to size uncompressed bytes from the file. @@ -166,9 +160,8 @@ def read(self, size=-1): If size is negative or omitted, read until EOF is reached. Returns b'' if the file is already at EOF. """ - with self._lock: - self._check_can_read() - return self._buffer.read(size) + self._check_can_read() + return self._buffer.read(size) def read1(self, size=-1): """Read up to size uncompressed bytes, while trying to avoid @@ -177,20 +170,18 @@ def read1(self, size=-1): Returns b'' if the file is at EOF. """ - with self._lock: - self._check_can_read() - if size < 0: - size = io.DEFAULT_BUFFER_SIZE - return self._buffer.read1(size) + self._check_can_read() + if size < 0: + size = io.DEFAULT_BUFFER_SIZE + return self._buffer.read1(size) def readinto(self, b): """Read bytes into b. Returns the number of bytes read (0 for EOF). """ - with self._lock: - self._check_can_read() - return self._buffer.readinto(b) + self._check_can_read() + return self._buffer.readinto(b) def readline(self, size=-1): """Read a line of uncompressed bytes from the file. @@ -203,9 +194,8 @@ def readline(self, size=-1): if not hasattr(size, "__index__"): raise TypeError("Integer argument expected") size = size.__index__() - with self._lock: - self._check_can_read() - return self._buffer.readline(size) + self._check_can_read() + return self._buffer.readline(size) def readlines(self, size=-1): """Read a list of lines of uncompressed bytes from the file. @@ -218,9 +208,8 @@ def readlines(self, size=-1): if not hasattr(size, "__index__"): raise TypeError("Integer argument expected") size = size.__index__() - with self._lock: - self._check_can_read() - return self._buffer.readlines(size) + self._check_can_read() + return self._buffer.readlines(size) def write(self, data): """Write a byte string to the file. @@ -229,12 +218,11 @@ def write(self, data): always len(data). Note that due to buffering, the file on disk may not reflect the data written until close() is called. """ - with self._lock: - self._check_can_write() - compressed = self._compressor.compress(data) - self._fp.write(compressed) - self._pos += len(data) - return len(data) + self._check_can_write() + compressed = self._compressor.compress(data) + self._fp.write(compressed) + self._pos += len(data) + return len(data) def writelines(self, seq): """Write a sequence of byte strings to the file. @@ -244,8 +232,7 @@ def writelines(self, seq): Line separators are not added between the written byte strings. """ - with self._lock: - return _compression.BaseStream.writelines(self, seq) + return _compression.BaseStream.writelines(self, seq) def seek(self, offset, whence=io.SEEK_SET): """Change the file position. @@ -262,17 +249,15 @@ def seek(self, offset, whence=io.SEEK_SET): Note that seeking is emulated, so depending on the parameters, this operation may be extremely slow. """ - with self._lock: - self._check_can_seek() - return self._buffer.seek(offset, whence) + self._check_can_seek() + return self._buffer.seek(offset, whence) def tell(self): """Return the current file position.""" - with self._lock: - self._check_not_closed() - if self._mode == _MODE_READ: - return self._buffer.tell() - return self._pos + self._check_not_closed() + if self._mode == _MODE_READ: + return self._buffer.tell() + return self._pos def open(filename, mode="rb", compresslevel=9, diff --git a/Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst b/Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst new file mode 100644 index 0000000000000..b4ed5e51e2247 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst @@ -0,0 +1,4 @@ +Improve ``bz2.BZ2File`` performance by removing the RLock from BZ2File. +This makes BZ2File thread unsafe in the face of multiple simultaneous +readers or writers, just like its equivalent classes in :mod:`gzip` and +:mod:`lzma` have always been. Patch by Inada Naoki. From webhook-mailer at python.org Mon Apr 12 04:43:02 2021 From: webhook-mailer at python.org (vstinner) Date: Mon, 12 Apr 2021 08:43:02 -0000 Subject: [Python-checkins] bpo-43723: Deprecate camelCase aliases from threading (GH-25174) Message-ID: https://github.com/python/cpython/commit/9825bdfbd5c966abf1f1b7264992d722a94c9613 commit: 9825bdfbd5c966abf1f1b7264992d722a94c9613 branch: master author: Jelle Zijlstra committer: vstinner date: 2021-04-12T10:42:53+02:00 summary: bpo-43723: Deprecate camelCase aliases from threading (GH-25174) The snake_case names have existed since Python 2.6, so there is no reason to keep the old camelCase names around. One similar method, threading.Thread.isAlive, was already removed in Python 3.9 (bpo-37804). files: A Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst M Doc/faq/library.rst M Doc/library/idle.rst M Doc/library/threading.rst M Doc/whatsnew/3.10.rst M Lib/test/test_threading.py M Lib/threading.py diff --git a/Doc/faq/library.rst b/Doc/faq/library.rst index 97058b5806a35..4d27abd4351ec 100644 --- a/Doc/faq/library.rst +++ b/Doc/faq/library.rst @@ -319,11 +319,11 @@ Here's a trivial example:: try: arg = q.get(block=False) except queue.Empty: - print('Worker', threading.currentThread(), end=' ') + print('Worker', threading.current_thread(), end=' ') print('queue empty') break else: - print('Worker', threading.currentThread(), end=' ') + print('Worker', threading.current_thread(), end=' ') print('running with argument', arg) time.sleep(0.5) diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 6ef15653eacb5..3c302115b5f40 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -732,7 +732,7 @@ intended to be the same as executing the same code by the default method, directly with Python in a text-mode system console or terminal window. However, the different interface and operation occasionally affect visible results. For instance, ``sys.modules`` starts with more entries, -and ``threading.activeCount()`` returns 2 instead of 1. +and ``threading.active_count()`` returns 2 instead of 1. By default, IDLE runs user code in a separate OS process rather than in the user interface process that runs the shell and editor. In the execution diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index bb982f2edcf1b..16f23c3a0c354 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -16,9 +16,9 @@ level :mod:`_thread` module. See also the :mod:`queue` module. .. note:: - While they are not listed below, the ``camelCase`` names used for some - methods and functions in this module in the Python 2.x series are still - supported by this module. + In the Python 2.x series, this module contained ``camelCase`` names + for some methods and functions. These are deprecated as of Python 3.10, + but they are still supported for compatibility with Python 2.5 and lower. .. impl-detail:: @@ -42,6 +42,8 @@ This module defines the following functions: Return the number of :class:`Thread` objects currently alive. The returned count is equal to the length of the list returned by :func:`.enumerate`. + The function ``activeCount`` is a deprecated alias for this function. + .. function:: current_thread() @@ -50,6 +52,8 @@ This module defines the following functions: :mod:`threading` module, a dummy thread object with limited functionality is returned. + The function ``currentThread`` is a deprecated alias for this function. + .. function:: excepthook(args, /) @@ -381,9 +385,11 @@ since it is impossible to detect the termination of alien threads. .. method:: getName() setName() - Old getter/setter API for :attr:`~Thread.name`; use it directly as a + Deprecated getter/setter API for :attr:`~Thread.name`; use it directly as a property instead. + .. deprecated:: 3.10 + .. attribute:: ident The 'thread identifier' of this thread or ``None`` if the thread has not @@ -433,9 +439,11 @@ since it is impossible to detect the termination of alien threads. .. method:: isDaemon() setDaemon() - Old getter/setter API for :attr:`~Thread.daemon`; use it directly as a + Deprecated getter/setter API for :attr:`~Thread.daemon`; use it directly as a property instead. + .. deprecated:: 3.10 + .. _lock-objects: @@ -771,6 +779,8 @@ item to the buffer only needs to wake up one consumer thread. calling thread has not acquired the lock when this method is called, a :exc:`RuntimeError` is raised. + The method ``notifyAll`` is a deprecated alias for this method. + .. _semaphore-objects: @@ -908,6 +918,8 @@ method. The :meth:`~Event.wait` method blocks until the flag is true. Return ``True`` if and only if the internal flag is true. + The method ``isSet`` is a deprecated alias for this method. + .. method:: set() Set the internal flag to true. All threads waiting for it to become true diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9f6b7a469ca49..85f229cd78717 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1129,6 +1129,27 @@ Deprecated ``cache=shared`` query parameter. (Contributed by Erlend E. Aasland in :issue:`24464`.) +* The following ``threading`` methods are now deprecated: + + * ``threading.currentThread`` => :func:`threading.current_thread` + + * ``threading.activeCount`` => :func:`threading.active_count` + + * ``threading.Condition.notifyAll`` => + :meth:`threading.Condition.notify_all` + + * ``threading.Event.isSet`` => :meth:`threading.Event.is_set` + + * ``threading.Thread.setName`` => :attr:`threading.Thread.name` + + * ``threading.thread.getName`` => :attr:`threading.Thread.name` + + * ``threading.Thread.isDaemon`` => :attr:`threading.Thread.daemon` + + * ``threading.Thread.setDaemon`` => :attr:`threading.Thread.daemon` + + (Contributed by Jelle Zijlstra in :issue:`21574`.) + Removed ======= diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 933935ba2ce2c..49a4af8365afc 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -154,9 +154,9 @@ def test_various_ops(self): def test_ident_of_no_threading_threads(self): # The ident still must work for the main thread and dummy threads. - self.assertIsNotNone(threading.currentThread().ident) + self.assertIsNotNone(threading.current_thread().ident) def f(): - ident.append(threading.currentThread().ident) + ident.append(threading.current_thread().ident) done.set() done = threading.Event() ident = [] @@ -447,13 +447,32 @@ def test_old_threading_api(self): # Just a quick sanity check to make sure the old method names are # still present t = threading.Thread() - t.isDaemon() - t.setDaemon(True) - t.getName() - t.setName("name") + with self.assertWarnsRegex(DeprecationWarning, + r'get the daemon attribute'): + t.isDaemon() + with self.assertWarnsRegex(DeprecationWarning, + r'set the daemon attribute'): + t.setDaemon(True) + with self.assertWarnsRegex(DeprecationWarning, + r'get the name attribute'): + t.getName() + with self.assertWarnsRegex(DeprecationWarning, + r'set the name attribute'): + t.setName("name") + e = threading.Event() - e.isSet() - threading.activeCount() + with self.assertWarnsRegex(DeprecationWarning, 'use is_set()'): + e.isSet() + + cond = threading.Condition() + cond.acquire() + with self.assertWarnsRegex(DeprecationWarning, 'use notify_all()'): + cond.notifyAll() + + with self.assertWarnsRegex(DeprecationWarning, 'use active_count()'): + threading.activeCount() + with self.assertWarnsRegex(DeprecationWarning, 'use current_thread()'): + threading.currentThread() def test_repr_daemon(self): t = threading.Thread() diff --git a/Lib/threading.py b/Lib/threading.py index ff2624a3e1e49..4dcf84715c439 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -388,7 +388,16 @@ def notify_all(self): """ self.notify(len(self._waiters)) - notifyAll = notify_all + def notifyAll(self): + """Wake up all threads waiting on this condition. + + This method is deprecated, use notify_all() instead. + + """ + import warnings + warnings.warn('notifyAll() is deprecated, use notify_all() instead', + DeprecationWarning, stacklevel=2) + self.notify_all() class Semaphore: @@ -538,7 +547,16 @@ def is_set(self): """Return true if and only if the internal flag is true.""" return self._flag - isSet = is_set + def isSet(self): + """Return true if and only if the internal flag is true. + + This method is deprecated, use notify_all() instead. + + """ + import warnings + warnings.warn('isSet() is deprecated, use is_set() instead', + DeprecationWarning, stacklevel=2) + return self.is_set() def set(self): """Set the internal flag to true. @@ -1146,15 +1164,47 @@ def daemon(self, daemonic): self._daemonic = daemonic def isDaemon(self): + """Return whether this thread is a daemon. + + This method is deprecated, use the daemon attribute instead. + + """ + import warnings + warnings.warn('isDaemon() is deprecated, get the daemon attribute instead', + DeprecationWarning, stacklevel=2) return self.daemon def setDaemon(self, daemonic): + """Set whether this thread is a daemon. + + This method is deprecated, use the .daemon property instead. + + """ + import warnings + warnings.warn('setDaemon() is deprecated, set the daemon attribute instead', + DeprecationWarning, stacklevel=2) self.daemon = daemonic def getName(self): + """Return a string used for identification purposes only. + + This method is deprecated, use the name attribute instead. + + """ + import warnings + warnings.warn('getName() is deprecated, get the name attribute instead', + DeprecationWarning, stacklevel=2) return self.name def setName(self, name): + """Set the name string for this thread. + + This method is deprecated, use the name attribute instead. + + """ + import warnings + warnings.warn('setName() is deprecated, set the name attribute instead', + DeprecationWarning, stacklevel=2) self.name = name @@ -1349,7 +1399,16 @@ def current_thread(): except KeyError: return _DummyThread() -currentThread = current_thread +def currentThread(): + """Return the current Thread object, corresponding to the caller's thread of control. + + This function is deprecated, use current_thread() instead. + + """ + import warnings + warnings.warn('currentThread() is deprecated, use current_thread() instead', + DeprecationWarning, stacklevel=2) + return current_thread() def active_count(): """Return the number of Thread objects currently alive. @@ -1361,7 +1420,16 @@ def active_count(): with _active_limbo_lock: return len(_active) + len(_limbo) -activeCount = active_count +def activeCount(): + """Return the number of Thread objects currently alive. + + This function is deprecated, use active_count() instead. + + """ + import warnings + warnings.warn('activeCount() is deprecated, use active_count() instead', + DeprecationWarning, stacklevel=2) + return active_count() def _enumerate(): # Same as enumerate(), but without the lock. Internal use only. diff --git a/Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst b/Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst new file mode 100644 index 0000000000000..27cf7aa716273 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst @@ -0,0 +1,19 @@ +The following ``threading`` methods are now deprecated and should be replaced: + +- ``currentThread`` => :func:`threading.current_thread` + +- ``activeCount`` => :func:`threading.active_count` + +- ``Condition.notifyAll`` => :meth:`threading.Condition.notify_all` + +- ``Event.isSet`` => :meth:`threading.Event.is_set` + +- ``Thread.setName`` => :attr:`threading.Thread.name` + +- ``thread.getName`` => :attr:`threading.Thread.name` + +- ``Thread.isDaemon`` => :attr:`threading.Thread.daemon` + +- ``Thread.setDaemon`` => :attr:`threading.Thread.daemon` + +Patch by Jelle Zijlstra. From webhook-mailer at python.org Mon Apr 12 04:45:02 2021 From: webhook-mailer at python.org (vstinner) Date: Mon, 12 Apr 2021 08:45:02 -0000 Subject: [Python-checkins] bpo-43680: _pyio.open() becomes a static method (GH-25354) Message-ID: https://github.com/python/cpython/commit/77d668b1221d0f8c3e9d6b6199f67aaf3c45f040 commit: 77d668b1221d0f8c3e9d6b6199f67aaf3c45f040 branch: master author: Victor Stinner committer: vstinner date: 2021-04-12T10:44:53+02:00 summary: bpo-43680: _pyio.open() becomes a static method (GH-25354) The Python _pyio.open() function becomes a static method to behave as io.open() built-in function: don't become a bound method when stored as a class variable. It becomes possible since static methods are now callable in Python 3.10. Moreover, _pyio.OpenWrapper becomes a simple alias to _pyio.open. init_set_builtins_open() now sets builtins.open to io.open, rather than setting it to io.OpenWrapper, since OpenWrapper is now an alias to open in the io and _pyio modules. files: A Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst M Lib/_pyio.py M Python/pylifecycle.c diff --git a/Lib/_pyio.py b/Lib/_pyio.py index 0f182d4240206..cb5a619f02a48 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -63,6 +63,13 @@ def text_encoding(encoding, stacklevel=2): return encoding +# Wrapper for builtins.open +# +# Trick so that open() won't become a bound method when stored +# as a class variable (as dbm.dumb does). +# +# See init_set_builtins_open() in Python/pylifecycle.c. + at staticmethod def open(file, mode="r", buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None): @@ -313,18 +320,9 @@ def __get__(self, obj, typ=None): "errors=None, newline=None, closefd=True)\n\n" + open.__doc__) -class OpenWrapper: - """Wrapper for builtins.open - Trick so that open won't become a bound method when stored - as a class variable (as dbm.dumb does). - - See initstdio() in Python/pylifecycle.c. - """ - __doc__ = DocDescriptor() - - def __new__(cls, *args, **kwargs): - return open(*args, **kwargs) +# bpo-43680: Alias to open() kept for backward compatibility +OpenWrapper = open # In normal operation, both `UnsupportedOperation`s should be bound to the diff --git a/Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst b/Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst new file mode 100644 index 0000000000000..cb561ae586a98 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst @@ -0,0 +1,6 @@ +The Python :func:`_pyio.open` function becomes a static method to behave as +:func:`io.open` built-in function: don't become a bound method when stored as a +class variable. It becomes possible since static methods are now callable in +Python 3.10. Moreover, :func:`_pyio.OpenWrapper` becomes a simple alias to +:func:`_pyio.open`. +Patch by Victor Stinner. diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 0ad1796e3cbc6..2dbebe45fd4b0 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -2241,7 +2241,7 @@ create_stdio(const PyConfig *config, PyObject* io, return NULL; } -/* Set builtins.open to io.OpenWrapper */ +/* Set builtins.open to io.open */ static PyStatus init_set_builtins_open(void) { @@ -2257,7 +2257,7 @@ init_set_builtins_open(void) goto error; } - if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { + if (!(wrapper = PyObject_GetAttrString(iomod, "open"))) { goto error; } @@ -2279,7 +2279,7 @@ init_set_builtins_open(void) } -/* Initialize sys.stdin, stdout, stderr and builtins.open */ +/* Create sys.stdin, sys.stdout and sys.stderr */ static PyStatus init_sys_streams(PyThreadState *tstate) { From webhook-mailer at python.org Mon Apr 12 05:44:54 2021 From: webhook-mailer at python.org (cjw296) Date: Mon, 12 Apr 2021 09:44:54 -0000 Subject: [Python-checkins] try and get a peak at mock-related PRs before they land (#25356) Message-ID: https://github.com/python/cpython/commit/06e971fc0eeaf6301ea6230c54957ac045f054a9 commit: 06e971fc0eeaf6301ea6230c54957ac045f054a9 branch: master author: Chris Withers committer: cjw296 date: 2021-04-12T10:44:42+01:00 summary: try and get a peak at mock-related PRs before they land (#25356) files: M .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 19ac3aac713fc..5b86d39dc9c25 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -91,6 +91,10 @@ Parser/asdl.py @isidentical Parser/asdl_c.py @isidentical Lib/ast.py @isidentical +# Mock +/Lib/unittest/mock.py @cjw296 +/Lib/unittest/test/testmock/* @cjw296 + # SQLite 3 **/*sqlite* @berkerpeksag From webhook-mailer at python.org Mon Apr 12 06:00:50 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 12 Apr 2021 10:00:50 -0000 Subject: [Python-checkins] bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Message-ID: https://github.com/python/cpython/commit/3447750073aff229b049e4ccd6217db2811dcfd1 commit: 3447750073aff229b049e4ccd6217db2811dcfd1 branch: master author: Christian Heimes committer: tiran date: 2021-04-12T12:00:38+02:00 summary: bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Signed-off-by: Christian Heimes files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 831f411b12be6..140aecc712738 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -168,7 +168,10 @@ def is_ubuntu(): def seclevel_workaround(*ctxs): """"Lower security level to '1' and allow all ciphers for TLS 1.0/1""" for ctx in ctxs: - if ctx.minimum_version <= ssl.TLSVersion.TLSv1_1: + if ( + hasattr(ctx, "minimum_version") and + ctx.minimum_version <= ssl.TLSVersion.TLSv1_1 + ): ctx.set_ciphers("@SECLEVEL=1:ALL") else: def seclevel_workaround(*ctxs): From webhook-mailer at python.org Mon Apr 12 06:21:30 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 12 Apr 2021 10:21:30 -0000 Subject: [Python-checkins] bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Message-ID: https://github.com/python/cpython/commit/04425a922b598d03770619b0c658ee9874113550 commit: 04425a922b598d03770619b0c658ee9874113550 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-12T03:21:25-07:00 summary: bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Signed-off-by: Christian Heimes (cherry picked from commit 3447750073aff229b049e4ccd6217db2811dcfd1) Co-authored-by: Christian Heimes files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 75ba8a9489bed..e3fe18c1e3061 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -160,7 +160,10 @@ def is_ubuntu(): def seclevel_workaround(*ctxs): """"Lower security level to '1' and allow all ciphers for TLS 1.0/1""" for ctx in ctxs: - if ctx.minimum_version <= ssl.TLSVersion.TLSv1_1: + if ( + hasattr(ctx, "minimum_version") and + ctx.minimum_version <= ssl.TLSVersion.TLSv1_1 + ): ctx.set_ciphers("@SECLEVEL=1:ALL") else: def seclevel_workaround(*ctxs): From webhook-mailer at python.org Mon Apr 12 06:24:57 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 12 Apr 2021 10:24:57 -0000 Subject: [Python-checkins] bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Message-ID: https://github.com/python/cpython/commit/0983e01837714524fb164e784a8e96a2bc4bdf94 commit: 0983e01837714524fb164e784a8e96a2bc4bdf94 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-12T03:24:48-07:00 summary: bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) Signed-off-by: Christian Heimes (cherry picked from commit 3447750073aff229b049e4ccd6217db2811dcfd1) Co-authored-by: Christian Heimes files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index fdd557c861dc2..3f49c1c1f69ea 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -164,7 +164,10 @@ def is_ubuntu(): def seclevel_workaround(*ctxs): """"Lower security level to '1' and allow all ciphers for TLS 1.0/1""" for ctx in ctxs: - if ctx.minimum_version <= ssl.TLSVersion.TLSv1_1: + if ( + hasattr(ctx, "minimum_version") and + ctx.minimum_version <= ssl.TLSVersion.TLSv1_1 + ): ctx.set_ciphers("@SECLEVEL=1:ALL") else: def seclevel_workaround(*ctxs): From webhook-mailer at python.org Mon Apr 12 07:13:04 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 12 Apr 2021 11:13:04 -0000 Subject: [Python-checkins] bpo-43723: Fix deprecation error caused by thread.setDaemon() (GH-25361) Message-ID: https://github.com/python/cpython/commit/95bbb331ecb3ef5d05859d90b287cc3d27613c86 commit: 95bbb331ecb3ef5d05859d90b287cc3d27613c86 branch: master author: Christian Heimes committer: tiran date: 2021-04-12T13:12:36+02:00 summary: bpo-43723: Fix deprecation error caused by thread.setDaemon() (GH-25361) files: M Lib/test/test_asyncio/test_streams.py M Lib/test/test_logging.py M Lib/test/test_telnetlib.py M Tools/ccbench/ccbench.py diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py index aa3977977588e..a075358903920 100644 --- a/Lib/test/test_asyncio/test_streams.py +++ b/Lib/test/test_asyncio/test_streams.py @@ -799,7 +799,7 @@ async def client(host, port): # Start the server thread and wait for it to be listening. thread = threading.Thread(target=server) - thread.setDaemon(True) + thread.daemon = True thread.start() addr = q.get() diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 452ba78523443..6179e28759cce 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -849,7 +849,7 @@ def start(self): """ self._thread = t = threading.Thread(target=self.serve_forever, args=(self.poll_interval,)) - t.setDaemon(True) + t.daemon = True t.start() def serve_forever(self, poll_interval): @@ -901,7 +901,7 @@ def start(self): """ self._thread = t = threading.Thread(target=self.serve_forever, args=(self.poll_interval,)) - t.setDaemon(True) + t.daemon = True t.start() def serve_forever(self, poll_interval): diff --git a/Lib/test/test_telnetlib.py b/Lib/test/test_telnetlib.py index 8e36051cd095b..41c4fcd4195e3 100644 --- a/Lib/test/test_telnetlib.py +++ b/Lib/test/test_telnetlib.py @@ -29,7 +29,7 @@ def setUp(self): self.sock.settimeout(60) # Safety net. Look issue 11812 self.port = socket_helper.bind_port(self.sock) self.thread = threading.Thread(target=server, args=(self.evt,self.sock)) - self.thread.setDaemon(True) + self.thread.daemon = True self.thread.start() self.evt.wait() diff --git a/Tools/ccbench/ccbench.py b/Tools/ccbench/ccbench.py index ab1465a276092..d52701a82948d 100644 --- a/Tools/ccbench/ccbench.py +++ b/Tools/ccbench/ccbench.py @@ -221,7 +221,7 @@ def run(): for i in range(nthreads): threads.append(threading.Thread(target=run)) for t in threads: - t.setDaemon(True) + t.daemon = True t.start() # We don't want measurements to include thread startup overhead, # so we arrange for timing to start after all threads are ready. @@ -328,7 +328,7 @@ def run(): for i in range(nthreads): threads.append(threading.Thread(target=run)) for t in threads: - t.setDaemon(True) + t.daemon = True t.start() # Wait for threads to be ready with ready_cond: @@ -460,7 +460,7 @@ def run(): for i in range(nthreads): threads.append(threading.Thread(target=run)) for t in threads: - t.setDaemon(True) + t.daemon = True t.start() # Wait for threads to be ready with ready_cond: From webhook-mailer at python.org Mon Apr 12 08:17:49 2021 From: webhook-mailer at python.org (matrixise) Date: Mon, 12 Apr 2021 12:17:49 -0000 Subject: [Python-checkins] bpo-34311: Add locale.localize (GH-15275) Message-ID: https://github.com/python/cpython/commit/e126547c070fbc080562abb08e16a2c93a8a805d commit: e126547c070fbc080562abb08e16a2c93a8a805d branch: master author: C?dric Krier committer: matrixise date: 2021-04-12T14:17:40+02:00 summary: bpo-34311: Add locale.localize (GH-15275) * Add method localize to the locale module * Update the documentation of the locale module files: A Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst M Doc/library/locale.rst M Lib/locale.py M Lib/test/test_locale.py diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst index 0a77be47fb899..60d0c59d017c7 100644 --- a/Doc/library/locale.rst +++ b/Doc/library/locale.rst @@ -427,6 +427,14 @@ The :mod:`locale` module defines the following exception and functions: .. versionadded:: 3.5 +.. function:: localize(string, grouping=False, monetary=False) + + Converts a normalized number string into a formatted string following the + :const:`LC_NUMERIC` settings. + + .. versionadded:: 3.10 + + .. function:: atof(string) Converts a string to a floating point number, following the :const:`LC_NUMERIC` diff --git a/Lib/locale.py b/Lib/locale.py index ee841e8b8655e..6d4f51929923f 100644 --- a/Lib/locale.py +++ b/Lib/locale.py @@ -185,8 +185,14 @@ def _format(percent, value, grouping=False, monetary=False, *additional): formatted = percent % ((value,) + additional) else: formatted = percent % value + if percent[-1] in 'eEfFgGdiu': + formatted = _localize(formatted, grouping, monetary) + return formatted + +# Transform formatted as locale number according to the locale settings +def _localize(formatted, grouping=False, monetary=False): # floats and decimal ints need special action! - if percent[-1] in 'eEfFgG': + if '.' in formatted: seps = 0 parts = formatted.split('.') if grouping: @@ -196,7 +202,7 @@ def _format(percent, value, grouping=False, monetary=False, *additional): formatted = decimal_point.join(parts) if seps: formatted = _strip_padding(formatted, seps) - elif percent[-1] in 'diu': + else: seps = 0 if grouping: formatted, seps = _group(formatted, monetary=monetary) @@ -267,7 +273,7 @@ def currency(val, symbol=True, grouping=False, international=False): raise ValueError("Currency formatting is not possible using " "the 'C' locale.") - s = _format('%%.%if' % digits, abs(val), grouping, monetary=True) + s = _localize(f'{abs(val):.{digits}f}', grouping, monetary=True) # '<' and '>' are markers if the sign must be inserted between symbol and value s = '<' + s + '>' @@ -323,6 +329,10 @@ def delocalize(string): string = string.replace(dd, '.') return string +def localize(string, grouping=False, monetary=False): + """Parses a string as locale number according to the locale settings.""" + return _localize(string, grouping, monetary) + def atof(string, func=float): "Parses a string as a float according to the locale settings." return func(delocalize(string)) diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py index 4bb4c5541d077..2c788f2dfa65e 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py @@ -1,3 +1,4 @@ +from decimal import Decimal from test.support import verbose, is_android from test.support.warnings_helper import check_warnings import unittest @@ -636,5 +637,32 @@ def test_atoi(self): self._test_atoi('50 000', 50000) +class BaseLocalizeTest(BaseLocalizedTest): + + def _test_localize(self, value, out, grouping=False): + self.assertEqual(locale.localize(value, grouping=grouping), out) + + +class TestEnUSLocalize(EnUSCookedTest, BaseLocalizeTest): + + def test_localize(self): + self._test_localize('50000.00', '50000.00') + self._test_localize( + '{0:.16f}'.format(Decimal('1.15')), '1.1500000000000000') + + +class TestCLocalize(CCookedTest, BaseLocalizeTest): + + def test_localize(self): + self._test_localize('50000.00', '50000.00') + + +class TestfrFRLocalize(FrFRCookedTest, BaseLocalizeTest): + + def test_localize(self): + self._test_localize('50000.00', '50000,00') + self._test_localize('50000.00', '50 000,00', grouping=True) + + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst b/Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst new file mode 100644 index 0000000000000..2fedb0696c326 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst @@ -0,0 +1,2 @@ +Provide a locale.localize() function, which converts a normalized number string +into a locale format. From webhook-mailer at python.org Mon Apr 12 11:39:41 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 12 Apr 2021 15:39:41 -0000 Subject: [Python-checkins] bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) Message-ID: https://github.com/python/cpython/commit/67c0b3d89c4da9750fdb43fc66d3924681b22d2e commit: 67c0b3d89c4da9750fdb43fc66d3924681b22d2e branch: master author: Zackery Spytz committer: zooba date: 2021-04-12T16:39:31+01:00 summary: bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) files: M Doc/library/os.path.rst diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index e2f335ee8c309..4cab3113c9e4e 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -366,7 +366,8 @@ the :mod:`glob` module.) Return a relative filepath to *path* either from the current directory or from an optional *start* directory. This is a path computation: the filesystem is not accessed to confirm the existence or nature of *path* or - *start*. + *start*. On Windows, :exc:`ValueError` is raised when *path* and *start* + are on different drives. *start* defaults to :attr:`os.curdir`. From webhook-mailer at python.org Mon Apr 12 11:51:29 2021 From: webhook-mailer at python.org (ethanfurman) Date: Mon, 12 Apr 2021 15:51:29 -0000 Subject: [Python-checkins] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350) Message-ID: https://github.com/python/cpython/commit/8c14f5a787b21d5a1eae5d5ee981431d1c0e055f commit: 8c14f5a787b21d5a1eae5d5ee981431d1c0e055f branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-12T08:51:20-07:00 summary: bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350) files: A Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst M Lib/enum.py M Lib/test/test_enum.py diff --git a/Lib/enum.py b/Lib/enum.py index f31779baa0d65..b102a4e4cc782 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -919,25 +919,30 @@ def __new__(cls, value): except Exception as e: exc = e result = None - if isinstance(result, cls): - return result - elif ( - Flag is not None and issubclass(cls, Flag) - and cls._boundary_ is EJECT and isinstance(result, int) - ): - return result - else: - ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__)) - if result is None and exc is None: - raise ve_exc - elif exc is None: - exc = TypeError( - 'error in %s._missing_: returned %r instead of None or a valid member' - % (cls.__name__, result) - ) - if not isinstance(exc, ValueError): - exc.__context__ = ve_exc - raise exc + try: + if isinstance(result, cls): + return result + elif ( + Flag is not None and issubclass(cls, Flag) + and cls._boundary_ is EJECT and isinstance(result, int) + ): + return result + else: + ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__)) + if result is None and exc is None: + raise ve_exc + elif exc is None: + exc = TypeError( + 'error in %s._missing_: returned %r instead of None or a valid member' + % (cls.__name__, result) + ) + if not isinstance(exc, ValueError): + exc.__context__ = ve_exc + raise exc + finally: + # ensure all variables that could hold an exception are destroyed + exc = None + ve_exc = None def _generate_next_value_(name, start, count, last_values): """ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 6002cd85622cf..5af7cd2ca57ed 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1932,6 +1932,38 @@ def _missing_(cls, item): else: raise Exception('Exception not raised.') + def test_missing_exceptions_reset(self): + import weakref + # + class TestEnum(enum.Enum): + VAL1 = 'val1' + VAL2 = 'val2' + # + class Class1: + def __init__(self): + # Gracefully handle an exception of our own making + try: + raise ValueError() + except ValueError: + pass + # + class Class2: + def __init__(self): + # Gracefully handle an exception of Enum's making + try: + TestEnum('invalid_value') + except ValueError: + pass + # No strong refs here so these are free to die. + class_1_ref = weakref.ref(Class1()) + class_2_ref = weakref.ref(Class2()) + # + # The exception raised by Enum creates a reference loop and thus + # Class2 instances will stick around until the next gargage collection + # cycle, unlike Class1. + self.assertIs(class_1_ref(), None) + self.assertIs(class_2_ref(), None) + def test_multiple_mixin(self): class MaxMixin: @classproperty diff --git a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst new file mode 100644 index 0000000000000..0722d35a37a1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst @@ -0,0 +1 @@ +[Enum] ensure exceptions raised in ``_missing__`` are released From webhook-mailer at python.org Mon Apr 12 11:58:59 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 12 Apr 2021 15:58:59 -0000 Subject: [Python-checkins] bpo-43774: Remove --without-cycle-gc doc (GH-25364) Message-ID: https://github.com/python/cpython/commit/2459b92a4db69d9b14d0a86a9b81cc075894e910 commit: 2459b92a4db69d9b14d0a86a9b81cc075894e910 branch: master author: Victor Stinner committer: pablogsal date: 2021-04-12T16:58:45+01:00 summary: bpo-43774: Remove --without-cycle-gc doc (GH-25364) The configure --without-cycle-gc option has been removed in Python 2.3 by the commit cccd1e72481106b0a373117f32fda6261f3141a7. It's now time to remove the last reference to it in the documentation. files: M Doc/extending/extending.rst diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index bc85a05ff2f85..561d1c616cc10 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -911,12 +911,7 @@ the cycle itself. The cycle detector is able to detect garbage cycles and can reclaim them. The :mod:`gc` module exposes a way to run the detector (the :func:`~gc.collect` function), as well as configuration -interfaces and the ability to disable the detector at runtime. The cycle -detector is considered an optional component; though it is included by default, -it can be disabled at build time using the :option:`!--without-cycle-gc` option -to the :program:`configure` script on Unix platforms (including Mac OS X). If -the cycle detector is disabled in this way, the :mod:`gc` module will not be -available. +interfaces and the ability to disable the detector at runtime. .. _refcountsinpython: From webhook-mailer at python.org Mon Apr 12 11:59:35 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 12 Apr 2021 15:59:35 -0000 Subject: [Python-checkins] bpo-43797: Improve syntax error for invalid comparisons (#25317) Message-ID: https://github.com/python/cpython/commit/b86ed8e3bb41ede77eeab4a8bb4e2b91a8065283 commit: b86ed8e3bb41ede77eeab4a8bb4e2b91a8065283 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-12T16:59:30+01:00 summary: bpo-43797: Improve syntax error for invalid comparisons (#25317) * bpo-43797: Improve syntax error for invalid comparisons * Update Lib/test/test_fstring.py Co-authored-by: Guido van Rossum * Apply review comments * can't -> cannot Co-authored-by: Guido van Rossum files: A Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst M Grammar/python.gram M Lib/test/test_cmd_line_script.py M Lib/test/test_codeop.py M Lib/test/test_exceptions.py M Lib/test/test_fstring.py M Lib/test/test_generators.py M Lib/test/test_genexps.py M Lib/test/test_syntax.py M Lib/test/test_unpack_ex.py M Parser/parser.c M Parser/pegen.c diff --git a/Grammar/python.gram b/Grammar/python.gram index eb10fc211051c..324793c88af2a 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -163,17 +163,20 @@ dotted_name[expr_ty]: | NAME if_stmt[stmt_ty]: - | 'if' a=named_expression &&':' b=block c=elif_stmt { + | 'if' a=named_expression ':' b=block c=elif_stmt { _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } - | 'if' a=named_expression &&':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } + | 'if' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } + | invalid_if_stmt elif_stmt[stmt_ty]: - | 'elif' a=named_expression &&':' b=block c=elif_stmt { + | 'elif' a=named_expression ':' b=block c=elif_stmt { _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } - | 'elif' a=named_expression &&':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } + | 'elif' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } + | invalid_elif_stmt else_block[asdl_stmt_seq*]: 'else' &&':' b=block { b } while_stmt[stmt_ty]: - | 'while' a=named_expression &&':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } + | 'while' a=named_expression ':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } + | invalid_while_stmt for_stmt[stmt_ty]: | 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { @@ -438,10 +441,11 @@ star_named_expressions[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_named_express star_named_expression[expr_ty]: | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } | named_expression + named_expression[expr_ty]: | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) } - | expression !':=' | invalid_named_expression + | expression !':=' annotated_rhs[expr_ty]: yield_expr | star_expressions @@ -772,6 +776,12 @@ invalid_named_expression: | a=expression ':=' expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( a, "cannot use assignment expressions with %s", _PyPegen_get_expr_name(a)) } + | a=NAME b='=' bitwise_or !('='|':='|',') { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?") } + | !(list|tuple|genexp|'True'|'None'|'False') a=bitwise_or b='=' bitwise_or !('='|':='|',') { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(b, "cannot assign to %s here. Maybe you meant '==' instead of '='?", + _PyPegen_get_expr_name(a)) } + invalid_assignment: | a=invalid_ann_assign_target ':' expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( @@ -841,9 +851,9 @@ invalid_for_target: invalid_group: | '(' a=starred_expression ')' { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "can't use starred expression here") } + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use starred expression here") } | '(' a='**' expression ')' { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "can't use double starred expression here") } + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use double starred expression here") } invalid_import_from_targets: | import_from_as_names ',' { RAISE_SYNTAX_ERROR("trailing comma not allowed without surrounding parentheses") } @@ -860,6 +870,11 @@ invalid_except_block: invalid_match_stmt: | "match" subject_expr !':' { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) } - invalid_case_block: | "case" patterns guard? !':' { RAISE_SYNTAX_ERROR("expected ':'") } +invalid_if_stmt: + | 'if' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } +invalid_elif_stmt: + | 'elif' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } +invalid_while_stmt: + | 'while' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index 8f12b1e19bcfc..2e0b5f72c2229 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -600,8 +600,8 @@ def test_syntaxerror_unindented_caret_position(self): script_name = _make_test_script(script_dir, 'script', script) exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() - # Confirm that the caret is located under the first 1 character - self.assertIn("\n 1 + 1 = 2\n ^", text) + # Confirm that the caret is located under the '=' sign + self.assertIn("\n 1 + 1 = 2\n ^\n", text) def test_syntaxerror_indented_caret_position(self): script = textwrap.dedent("""\ @@ -613,7 +613,7 @@ def test_syntaxerror_indented_caret_position(self): exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() # Confirm that the caret is located under the first 1 character - self.assertIn("\n 1 + 1 = 2\n ^", text) + self.assertIn("\n 1 + 1 = 2\n ^\n", text) # Try the same with a form feed at the start of the indented line script = ( @@ -624,7 +624,7 @@ def test_syntaxerror_indented_caret_position(self): exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), "ascii").read() self.assertNotIn("\f", text) - self.assertIn("\n 1 + 1 = 2\n ^", text) + self.assertIn("\n 1 + 1 = 2\n ^\n", text) def test_syntaxerror_multi_line_fstring(self): script = 'foo = f"""{}\nfoo"""\n' diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py index ecc46affea262..07b46afbe1bd8 100644 --- a/Lib/test/test_codeop.py +++ b/Lib/test/test_codeop.py @@ -275,7 +275,6 @@ def test_invalid(self): ai("a = 'a\\\n") ai("a = 1","eval") - ai("a = (","eval") ai("]","eval") ai("())","eval") ai("[}","eval") diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 1e6f525cbb509..9dc3a81ffedbd 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -260,7 +260,7 @@ def baz(): check('[*x for x in xs]', 1, 2) check('foo(x for x in range(10), 100)', 1, 5) check('for 1 in []: pass', 1, 5) - check('(yield i) = 2', 1, 2) + check('(yield i) = 2', 1, 11) check('def f(*):\n pass', 1, 8) @cpython_only diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 296cb05285c48..caae1b7c4f853 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -990,7 +990,7 @@ def test_conversions(self): ]) def test_assignment(self): - self.assertAllRaise(SyntaxError, 'invalid syntax', + self.assertAllRaise(SyntaxError, r'invalid syntax', ["f'' = 3", "f'{0}' = x", "f'{x}' = x", @@ -1276,11 +1276,11 @@ def test_with_an_underscore_and_a_comma_in_format_specifier(self): f'{1:_,}' def test_syntax_error_for_starred_expressions(self): - error_msg = re.escape("can't use starred expression here") + error_msg = re.escape("cannot use starred expression here") with self.assertRaisesRegex(SyntaxError, error_msg): compile("f'{*a}'", "?", "exec") - error_msg = re.escape("can't use double starred expression here") + error_msg = re.escape("cannot use double starred expression here") with self.assertRaisesRegex(SyntaxError, error_msg): compile("f'{**a}'", "?", "exec") diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index a634ccd517399..ebf8bb7e32098 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -2013,7 +2013,7 @@ def printsolution(self, x): >>> def f(): (yield bar) = y Traceback (most recent call last): ... -SyntaxError: cannot assign to yield expression +SyntaxError: cannot assign to yield expression here. Maybe you meant '==' instead of '='? >>> def f(): (yield bar) += y Traceback (most recent call last): diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py index 5c1a209b0e990..70fe2bba3a698 100644 --- a/Lib/test/test_genexps.py +++ b/Lib/test/test_genexps.py @@ -103,7 +103,7 @@ >>> dict(a = i for i in range(10)) Traceback (most recent call last): ... - SyntaxError: invalid syntax + SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? Verify that parenthesis are required when used as a keyword argument value diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 730c297717af5..78b11c9335121 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -61,7 +61,7 @@ >>> f() = 1 Traceback (most recent call last): -SyntaxError: cannot assign to function call +SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? >>> yield = 1 Traceback (most recent call last): @@ -73,7 +73,7 @@ >>> a + 1 = 2 Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='? >>> (x for x in x) = 1 Traceback (most recent call last): @@ -81,19 +81,19 @@ >>> 1 = 1 Traceback (most recent call last): -SyntaxError: cannot assign to literal +SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='? >>> "abc" = 1 Traceback (most recent call last): -SyntaxError: cannot assign to literal +SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='? >>> b"" = 1 Traceback (most recent call last): -SyntaxError: cannot assign to literal +SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='? >>> ... = 1 Traceback (most recent call last): -SyntaxError: cannot assign to Ellipsis +SyntaxError: cannot assign to Ellipsis here. Maybe you meant '==' instead of '='? >>> `1` = 1 Traceback (most recent call last): @@ -126,15 +126,15 @@ >>> [a, b, c + 1] = [1, 2, 3] Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> [a, b[1], c + 1] = [1, 2, 3] Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> [a, b.c.d, c + 1] = [1, 2, 3] Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> a if 1 else b = 1 Traceback (most recent call last): @@ -181,7 +181,7 @@ >>> for (*a, b, c+1) in b: pass Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> for (x, *(y, z.d())) in b: pass Traceback (most recent call last): @@ -193,7 +193,7 @@ >>> for a, b, (c + 1, d()): pass Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> for i < (): pass Traceback (most recent call last): @@ -217,7 +217,7 @@ >>> with a as (*b, c, d+1): pass Traceback (most recent call last): -SyntaxError: cannot assign to operator +SyntaxError: cannot assign to expression >>> with a as (x, *(y, z.d())): pass Traceback (most recent call last): @@ -465,7 +465,7 @@ # SyntaxError: expression cannot contain assignment, perhaps you meant "=="? # >>> f(True=2) # Traceback (most recent call last): -# SyntaxError: cannot assign to True +# SyntaxError: cannot assign to True here. Maybe you meant '==' instead of '='? >>> f(__debug__=1) Traceback (most recent call last): SyntaxError: cannot assign to __debug__ @@ -684,7 +684,7 @@ ... pass Traceback (most recent call last): ... - SyntaxError: cannot assign to function call + SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? >>> if 1: ... pass @@ -692,7 +692,7 @@ ... x() = 1 Traceback (most recent call last): ... - SyntaxError: cannot assign to function call + SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? >>> if 1: ... x() = 1 @@ -702,7 +702,7 @@ ... pass Traceback (most recent call last): ... - SyntaxError: cannot assign to function call + SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? >>> if 1: ... pass @@ -712,7 +712,7 @@ ... pass Traceback (most recent call last): ... - SyntaxError: cannot assign to function call + SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? >>> if 1: ... pass @@ -722,7 +722,7 @@ ... x() = 1 Traceback (most recent call last): ... - SyntaxError: cannot assign to function call + SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='? Missing ':' before suites: @@ -843,6 +843,26 @@ Traceback (most recent call last): SyntaxError: expected ':' + >>> if x = 3: + ... pass + Traceback (most recent call last): + SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? + + >>> while x = 3: + ... pass + Traceback (most recent call last): + SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? + + >>> if x.a = 3: + ... pass + Traceback (most recent call last): + SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? + + >>> while x.a = 3: + ... pass + Traceback (most recent call last): + SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? + Make sure that the old "raise X, Y[, Z]" form is gone: >>> raise X, Y Traceback (most recent call last): @@ -894,19 +914,19 @@ >>> {1, 2, 3} = 42 Traceback (most recent call last): -SyntaxError: cannot assign to set display +SyntaxError: cannot assign to set display here. Maybe you meant '==' instead of '='? >>> {1: 2, 3: 4} = 42 Traceback (most recent call last): -SyntaxError: cannot assign to dict display +SyntaxError: cannot assign to dict literal here. Maybe you meant '==' instead of '='? >>> f'{x}' = 42 Traceback (most recent call last): -SyntaxError: cannot assign to f-string expression +SyntaxError: cannot assign to f-string expression here. Maybe you meant '==' instead of '='? >>> f'{x}-{y}' = 42 Traceback (most recent call last): -SyntaxError: cannot assign to f-string expression +SyntaxError: cannot assign to f-string expression here. Maybe you meant '==' instead of '='? >>> from t import x, Traceback (most recent call last): @@ -988,7 +1008,7 @@ def _check_error(self, code, errtext, def test_expression_with_assignment(self): self._check_error( "print(end1 + end2 = ' ')", - 'expression cannot contain assignment, perhaps you meant "=="?', + "cannot assign to expression here. Maybe you meant '==' instead of '='?", offset=19 ) @@ -1000,31 +1020,31 @@ def test_assign_call(self): def test_assign_del(self): self._check_error("del (,)", "invalid syntax") - self._check_error("del 1", "delete literal") - self._check_error("del (1, 2)", "delete literal") - self._check_error("del None", "delete None") - self._check_error("del *x", "delete starred") - self._check_error("del (*x)", "use starred expression") - self._check_error("del (*x,)", "delete starred") - self._check_error("del [*x,]", "delete starred") - self._check_error("del f()", "delete function call") - self._check_error("del f(a, b)", "delete function call") - self._check_error("del o.f()", "delete function call") - self._check_error("del a[0]()", "delete function call") - self._check_error("del x, f()", "delete function call") - self._check_error("del f(), x", "delete function call") - self._check_error("del [a, b, ((c), (d,), e.f())]", "delete function call") - self._check_error("del (a if True else b)", "delete conditional") - self._check_error("del +a", "delete operator") - self._check_error("del a, +b", "delete operator") - self._check_error("del a + b", "delete operator") - self._check_error("del (a + b, c)", "delete operator") - self._check_error("del (c[0], a + b)", "delete operator") - self._check_error("del a.b.c + 2", "delete operator") - self._check_error("del a.b.c[0] + 2", "delete operator") - self._check_error("del (a, b, (c, d.e.f + 2))", "delete operator") - self._check_error("del [a, b, (c, d.e.f[0] + 2)]", "delete operator") - self._check_error("del (a := 5)", "delete named expression") + self._check_error("del 1", "cannot delete literal") + self._check_error("del (1, 2)", "cannot delete literal") + self._check_error("del None", "cannot delete None") + self._check_error("del *x", "cannot delete starred") + self._check_error("del (*x)", "cannot use starred expression") + self._check_error("del (*x,)", "cannot delete starred") + self._check_error("del [*x,]", "cannot delete starred") + self._check_error("del f()", "cannot delete function call") + self._check_error("del f(a, b)", "cannot delete function call") + self._check_error("del o.f()", "cannot delete function call") + self._check_error("del a[0]()", "cannot delete function call") + self._check_error("del x, f()", "cannot delete function call") + self._check_error("del f(), x", "cannot delete function call") + self._check_error("del [a, b, ((c), (d,), e.f())]", "cannot delete function call") + self._check_error("del (a if True else b)", "cannot delete conditional") + self._check_error("del +a", "cannot delete expression") + self._check_error("del a, +b", "cannot delete expression") + self._check_error("del a + b", "cannot delete expression") + self._check_error("del (a + b, c)", "cannot delete expression") + self._check_error("del (c[0], a + b)", "cannot delete expression") + self._check_error("del a.b.c + 2", "cannot delete expression") + self._check_error("del a.b.c[0] + 2", "cannot delete expression") + self._check_error("del (a, b, (c, d.e.f + 2))", "cannot delete expression") + self._check_error("del [a, b, (c, d.e.f[0] + 2)]", "cannot delete expression") + self._check_error("del (a := 5)", "cannot delete named expression") # We don't have a special message for this, but make sure we don't # report "cannot delete name" self._check_error("del a += b", "invalid syntax") diff --git a/Lib/test/test_unpack_ex.py b/Lib/test/test_unpack_ex.py index 049e48b13fa1f..bd79421e6e2b3 100644 --- a/Lib/test/test_unpack_ex.py +++ b/Lib/test/test_unpack_ex.py @@ -349,27 +349,27 @@ >>> (*x),y = 1, 2 # doctest:+ELLIPSIS Traceback (most recent call last): ... - SyntaxError: can't use starred expression here + SyntaxError: cannot use starred expression here >>> (((*x))),y = 1, 2 # doctest:+ELLIPSIS Traceback (most recent call last): ... - SyntaxError: can't use starred expression here + SyntaxError: cannot use starred expression here >>> z,(*x),y = 1, 2, 4 # doctest:+ELLIPSIS Traceback (most recent call last): ... - SyntaxError: can't use starred expression here + SyntaxError: cannot use starred expression here >>> z,(*x) = 1, 2 # doctest:+ELLIPSIS Traceback (most recent call last): ... - SyntaxError: can't use starred expression here + SyntaxError: cannot use starred expression here >>> ((*x),y) = 1, 2 # doctest:+ELLIPSIS Traceback (most recent call last): ... - SyntaxError: can't use starred expression here + SyntaxError: cannot use starred expression here Some size constraints (all fail.) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst new file mode 100644 index 0000000000000..2c10bb6ddc8c3 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst @@ -0,0 +1,2 @@ +Improve ``SyntaxError`` error messages for invalid comparisons. Patch by +Pablo Galindo. diff --git a/Parser/parser.c b/Parser/parser.c index af0c088694c2c..099186e623260 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -264,188 +264,194 @@ static KeywordToken *reserved_keywords[] = { #define invalid_except_block_type 1196 #define invalid_match_stmt_type 1197 #define invalid_case_block_type 1198 -#define _loop0_1_type 1199 -#define _loop0_2_type 1200 -#define _loop0_4_type 1201 -#define _gather_3_type 1202 -#define _loop0_6_type 1203 -#define _gather_5_type 1204 -#define _loop0_8_type 1205 -#define _gather_7_type 1206 -#define _loop0_10_type 1207 -#define _gather_9_type 1208 -#define _loop1_11_type 1209 -#define _loop0_13_type 1210 -#define _gather_12_type 1211 -#define _tmp_14_type 1212 -#define _tmp_15_type 1213 -#define _tmp_16_type 1214 -#define _tmp_17_type 1215 -#define _tmp_18_type 1216 -#define _tmp_19_type 1217 -#define _tmp_20_type 1218 -#define _tmp_21_type 1219 -#define _loop1_22_type 1220 -#define _tmp_23_type 1221 -#define _tmp_24_type 1222 -#define _loop0_26_type 1223 -#define _gather_25_type 1224 -#define _loop0_28_type 1225 -#define _gather_27_type 1226 -#define _tmp_29_type 1227 -#define _tmp_30_type 1228 -#define _loop0_31_type 1229 -#define _loop1_32_type 1230 -#define _loop0_34_type 1231 -#define _gather_33_type 1232 -#define _tmp_35_type 1233 -#define _loop0_37_type 1234 -#define _gather_36_type 1235 -#define _tmp_38_type 1236 -#define _loop0_40_type 1237 -#define _gather_39_type 1238 -#define _loop0_42_type 1239 -#define _gather_41_type 1240 -#define _loop0_44_type 1241 -#define _gather_43_type 1242 -#define _loop0_46_type 1243 -#define _gather_45_type 1244 -#define _tmp_47_type 1245 -#define _loop1_48_type 1246 -#define _tmp_49_type 1247 -#define _loop1_50_type 1248 -#define _loop0_52_type 1249 -#define _gather_51_type 1250 -#define _tmp_53_type 1251 -#define _tmp_54_type 1252 -#define _tmp_55_type 1253 -#define _loop0_57_type 1254 -#define _gather_56_type 1255 -#define _tmp_58_type 1256 -#define _loop0_60_type 1257 -#define _gather_59_type 1258 -#define _tmp_61_type 1259 -#define _loop0_63_type 1260 -#define _gather_62_type 1261 -#define _loop0_65_type 1262 -#define _gather_64_type 1263 -#define _tmp_66_type 1264 -#define _tmp_67_type 1265 -#define _tmp_68_type 1266 -#define _tmp_69_type 1267 -#define _loop0_70_type 1268 -#define _loop0_71_type 1269 -#define _loop0_72_type 1270 -#define _loop1_73_type 1271 -#define _loop0_74_type 1272 -#define _loop1_75_type 1273 -#define _loop1_76_type 1274 -#define _loop1_77_type 1275 -#define _loop0_78_type 1276 -#define _loop1_79_type 1277 -#define _loop0_80_type 1278 -#define _loop1_81_type 1279 -#define _loop0_82_type 1280 -#define _loop1_83_type 1281 -#define _loop1_84_type 1282 -#define _tmp_85_type 1283 -#define _loop1_86_type 1284 -#define _loop0_88_type 1285 -#define _gather_87_type 1286 -#define _loop1_89_type 1287 -#define _loop0_90_type 1288 -#define _loop0_91_type 1289 -#define _loop0_92_type 1290 -#define _loop1_93_type 1291 -#define _loop0_94_type 1292 -#define _loop1_95_type 1293 -#define _loop1_96_type 1294 -#define _loop1_97_type 1295 -#define _loop0_98_type 1296 -#define _loop1_99_type 1297 -#define _loop0_100_type 1298 -#define _loop1_101_type 1299 -#define _loop0_102_type 1300 -#define _loop1_103_type 1301 -#define _loop1_104_type 1302 -#define _loop1_105_type 1303 -#define _loop1_106_type 1304 -#define _tmp_107_type 1305 -#define _loop0_109_type 1306 -#define _gather_108_type 1307 -#define _tmp_110_type 1308 -#define _tmp_111_type 1309 -#define _tmp_112_type 1310 -#define _tmp_113_type 1311 -#define _loop1_114_type 1312 -#define _tmp_115_type 1313 -#define _tmp_116_type 1314 -#define _loop0_118_type 1315 -#define _gather_117_type 1316 -#define _loop1_119_type 1317 -#define _loop0_120_type 1318 -#define _loop0_121_type 1319 -#define _loop0_123_type 1320 -#define _gather_122_type 1321 -#define _tmp_124_type 1322 -#define _loop0_126_type 1323 -#define _gather_125_type 1324 -#define _loop0_128_type 1325 -#define _gather_127_type 1326 -#define _loop0_130_type 1327 -#define _gather_129_type 1328 -#define _loop0_132_type 1329 -#define _gather_131_type 1330 -#define _loop0_133_type 1331 -#define _loop0_135_type 1332 -#define _gather_134_type 1333 -#define _loop1_136_type 1334 -#define _tmp_137_type 1335 -#define _loop0_139_type 1336 -#define _gather_138_type 1337 -#define _loop0_141_type 1338 -#define _gather_140_type 1339 -#define _tmp_142_type 1340 -#define _loop0_143_type 1341 -#define _loop0_144_type 1342 -#define _loop0_145_type 1343 -#define _tmp_146_type 1344 -#define _tmp_147_type 1345 -#define _tmp_148_type 1346 -#define _loop0_149_type 1347 -#define _loop1_150_type 1348 -#define _loop0_151_type 1349 -#define _loop1_152_type 1350 -#define _tmp_153_type 1351 -#define _tmp_154_type 1352 -#define _tmp_155_type 1353 -#define _loop0_157_type 1354 -#define _gather_156_type 1355 -#define _loop0_159_type 1356 -#define _gather_158_type 1357 -#define _tmp_160_type 1358 -#define _tmp_161_type 1359 -#define _tmp_162_type 1360 -#define _tmp_163_type 1361 -#define _tmp_164_type 1362 -#define _tmp_165_type 1363 -#define _tmp_166_type 1364 -#define _tmp_167_type 1365 -#define _tmp_168_type 1366 -#define _tmp_169_type 1367 -#define _tmp_170_type 1368 -#define _tmp_171_type 1369 -#define _tmp_172_type 1370 -#define _tmp_173_type 1371 -#define _tmp_174_type 1372 -#define _tmp_175_type 1373 -#define _tmp_176_type 1374 -#define _tmp_177_type 1375 -#define _tmp_178_type 1376 -#define _tmp_179_type 1377 -#define _tmp_180_type 1378 -#define _tmp_181_type 1379 -#define _tmp_182_type 1380 +#define invalid_if_stmt_type 1199 +#define invalid_elif_stmt_type 1200 +#define invalid_while_stmt_type 1201 +#define _loop0_1_type 1202 +#define _loop0_2_type 1203 +#define _loop0_4_type 1204 +#define _gather_3_type 1205 +#define _loop0_6_type 1206 +#define _gather_5_type 1207 +#define _loop0_8_type 1208 +#define _gather_7_type 1209 +#define _loop0_10_type 1210 +#define _gather_9_type 1211 +#define _loop1_11_type 1212 +#define _loop0_13_type 1213 +#define _gather_12_type 1214 +#define _tmp_14_type 1215 +#define _tmp_15_type 1216 +#define _tmp_16_type 1217 +#define _tmp_17_type 1218 +#define _tmp_18_type 1219 +#define _tmp_19_type 1220 +#define _tmp_20_type 1221 +#define _tmp_21_type 1222 +#define _loop1_22_type 1223 +#define _tmp_23_type 1224 +#define _tmp_24_type 1225 +#define _loop0_26_type 1226 +#define _gather_25_type 1227 +#define _loop0_28_type 1228 +#define _gather_27_type 1229 +#define _tmp_29_type 1230 +#define _tmp_30_type 1231 +#define _loop0_31_type 1232 +#define _loop1_32_type 1233 +#define _loop0_34_type 1234 +#define _gather_33_type 1235 +#define _tmp_35_type 1236 +#define _loop0_37_type 1237 +#define _gather_36_type 1238 +#define _tmp_38_type 1239 +#define _loop0_40_type 1240 +#define _gather_39_type 1241 +#define _loop0_42_type 1242 +#define _gather_41_type 1243 +#define _loop0_44_type 1244 +#define _gather_43_type 1245 +#define _loop0_46_type 1246 +#define _gather_45_type 1247 +#define _tmp_47_type 1248 +#define _loop1_48_type 1249 +#define _tmp_49_type 1250 +#define _loop1_50_type 1251 +#define _loop0_52_type 1252 +#define _gather_51_type 1253 +#define _tmp_53_type 1254 +#define _tmp_54_type 1255 +#define _tmp_55_type 1256 +#define _loop0_57_type 1257 +#define _gather_56_type 1258 +#define _tmp_58_type 1259 +#define _loop0_60_type 1260 +#define _gather_59_type 1261 +#define _tmp_61_type 1262 +#define _loop0_63_type 1263 +#define _gather_62_type 1264 +#define _loop0_65_type 1265 +#define _gather_64_type 1266 +#define _tmp_66_type 1267 +#define _tmp_67_type 1268 +#define _tmp_68_type 1269 +#define _tmp_69_type 1270 +#define _loop0_70_type 1271 +#define _loop0_71_type 1272 +#define _loop0_72_type 1273 +#define _loop1_73_type 1274 +#define _loop0_74_type 1275 +#define _loop1_75_type 1276 +#define _loop1_76_type 1277 +#define _loop1_77_type 1278 +#define _loop0_78_type 1279 +#define _loop1_79_type 1280 +#define _loop0_80_type 1281 +#define _loop1_81_type 1282 +#define _loop0_82_type 1283 +#define _loop1_83_type 1284 +#define _loop1_84_type 1285 +#define _tmp_85_type 1286 +#define _loop1_86_type 1287 +#define _loop0_88_type 1288 +#define _gather_87_type 1289 +#define _loop1_89_type 1290 +#define _loop0_90_type 1291 +#define _loop0_91_type 1292 +#define _loop0_92_type 1293 +#define _loop1_93_type 1294 +#define _loop0_94_type 1295 +#define _loop1_95_type 1296 +#define _loop1_96_type 1297 +#define _loop1_97_type 1298 +#define _loop0_98_type 1299 +#define _loop1_99_type 1300 +#define _loop0_100_type 1301 +#define _loop1_101_type 1302 +#define _loop0_102_type 1303 +#define _loop1_103_type 1304 +#define _loop1_104_type 1305 +#define _loop1_105_type 1306 +#define _loop1_106_type 1307 +#define _tmp_107_type 1308 +#define _loop0_109_type 1309 +#define _gather_108_type 1310 +#define _tmp_110_type 1311 +#define _tmp_111_type 1312 +#define _tmp_112_type 1313 +#define _tmp_113_type 1314 +#define _loop1_114_type 1315 +#define _tmp_115_type 1316 +#define _tmp_116_type 1317 +#define _loop0_118_type 1318 +#define _gather_117_type 1319 +#define _loop1_119_type 1320 +#define _loop0_120_type 1321 +#define _loop0_121_type 1322 +#define _loop0_123_type 1323 +#define _gather_122_type 1324 +#define _tmp_124_type 1325 +#define _loop0_126_type 1326 +#define _gather_125_type 1327 +#define _loop0_128_type 1328 +#define _gather_127_type 1329 +#define _loop0_130_type 1330 +#define _gather_129_type 1331 +#define _loop0_132_type 1332 +#define _gather_131_type 1333 +#define _loop0_133_type 1334 +#define _loop0_135_type 1335 +#define _gather_134_type 1336 +#define _loop1_136_type 1337 +#define _tmp_137_type 1338 +#define _loop0_139_type 1339 +#define _gather_138_type 1340 +#define _loop0_141_type 1341 +#define _gather_140_type 1342 +#define _tmp_142_type 1343 +#define _tmp_143_type 1344 +#define _tmp_144_type 1345 +#define _tmp_145_type 1346 +#define _loop0_146_type 1347 +#define _loop0_147_type 1348 +#define _loop0_148_type 1349 +#define _tmp_149_type 1350 +#define _tmp_150_type 1351 +#define _tmp_151_type 1352 +#define _loop0_152_type 1353 +#define _loop1_153_type 1354 +#define _loop0_154_type 1355 +#define _loop1_155_type 1356 +#define _tmp_156_type 1357 +#define _tmp_157_type 1358 +#define _tmp_158_type 1359 +#define _loop0_160_type 1360 +#define _gather_159_type 1361 +#define _loop0_162_type 1362 +#define _gather_161_type 1363 +#define _tmp_163_type 1364 +#define _tmp_164_type 1365 +#define _tmp_165_type 1366 +#define _tmp_166_type 1367 +#define _tmp_167_type 1368 +#define _tmp_168_type 1369 +#define _tmp_169_type 1370 +#define _tmp_170_type 1371 +#define _tmp_171_type 1372 +#define _tmp_172_type 1373 +#define _tmp_173_type 1374 +#define _tmp_174_type 1375 +#define _tmp_175_type 1376 +#define _tmp_176_type 1377 +#define _tmp_177_type 1378 +#define _tmp_178_type 1379 +#define _tmp_179_type 1380 +#define _tmp_180_type 1381 +#define _tmp_181_type 1382 +#define _tmp_182_type 1383 +#define _tmp_183_type 1384 +#define _tmp_184_type 1385 +#define _tmp_185_type 1386 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -646,6 +652,9 @@ static void *invalid_with_stmt_rule(Parser *p); static void *invalid_except_block_rule(Parser *p); static void *invalid_match_stmt_rule(Parser *p); static void *invalid_case_block_rule(Parser *p); +static void *invalid_if_stmt_rule(Parser *p); +static void *invalid_elif_stmt_rule(Parser *p); +static void *invalid_while_stmt_rule(Parser *p); static asdl_seq *_loop0_1_rule(Parser *p); static asdl_seq *_loop0_2_rule(Parser *p); static asdl_seq *_loop0_4_rule(Parser *p); @@ -788,26 +797,26 @@ static asdl_seq *_gather_138_rule(Parser *p); static asdl_seq *_loop0_141_rule(Parser *p); static asdl_seq *_gather_140_rule(Parser *p); static void *_tmp_142_rule(Parser *p); -static asdl_seq *_loop0_143_rule(Parser *p); -static asdl_seq *_loop0_144_rule(Parser *p); -static asdl_seq *_loop0_145_rule(Parser *p); -static void *_tmp_146_rule(Parser *p); -static void *_tmp_147_rule(Parser *p); -static void *_tmp_148_rule(Parser *p); -static asdl_seq *_loop0_149_rule(Parser *p); -static asdl_seq *_loop1_150_rule(Parser *p); -static asdl_seq *_loop0_151_rule(Parser *p); -static asdl_seq *_loop1_152_rule(Parser *p); -static void *_tmp_153_rule(Parser *p); -static void *_tmp_154_rule(Parser *p); -static void *_tmp_155_rule(Parser *p); -static asdl_seq *_loop0_157_rule(Parser *p); -static asdl_seq *_gather_156_rule(Parser *p); -static asdl_seq *_loop0_159_rule(Parser *p); -static asdl_seq *_gather_158_rule(Parser *p); -static void *_tmp_160_rule(Parser *p); -static void *_tmp_161_rule(Parser *p); -static void *_tmp_162_rule(Parser *p); +static void *_tmp_143_rule(Parser *p); +static void *_tmp_144_rule(Parser *p); +static void *_tmp_145_rule(Parser *p); +static asdl_seq *_loop0_146_rule(Parser *p); +static asdl_seq *_loop0_147_rule(Parser *p); +static asdl_seq *_loop0_148_rule(Parser *p); +static void *_tmp_149_rule(Parser *p); +static void *_tmp_150_rule(Parser *p); +static void *_tmp_151_rule(Parser *p); +static asdl_seq *_loop0_152_rule(Parser *p); +static asdl_seq *_loop1_153_rule(Parser *p); +static asdl_seq *_loop0_154_rule(Parser *p); +static asdl_seq *_loop1_155_rule(Parser *p); +static void *_tmp_156_rule(Parser *p); +static void *_tmp_157_rule(Parser *p); +static void *_tmp_158_rule(Parser *p); +static asdl_seq *_loop0_160_rule(Parser *p); +static asdl_seq *_gather_159_rule(Parser *p); +static asdl_seq *_loop0_162_rule(Parser *p); +static asdl_seq *_gather_161_rule(Parser *p); static void *_tmp_163_rule(Parser *p); static void *_tmp_164_rule(Parser *p); static void *_tmp_165_rule(Parser *p); @@ -828,6 +837,9 @@ static void *_tmp_179_rule(Parser *p); static void *_tmp_180_rule(Parser *p); static void *_tmp_181_rule(Parser *p); static void *_tmp_182_rule(Parser *p); +static void *_tmp_183_rule(Parser *p); +static void *_tmp_184_rule(Parser *p); +static void *_tmp_185_rule(Parser *p); // file: statements? $ @@ -3737,8 +3749,9 @@ dotted_name_raw(Parser *p) } // if_stmt: -// | 'if' named_expression &&':' block elif_stmt -// | 'if' named_expression &&':' block else_block? +// | 'if' named_expression ':' block elif_stmt +// | 'if' named_expression ':' block else_block? +// | invalid_if_stmt static stmt_ty if_stmt_rule(Parser *p) { @@ -3758,12 +3771,12 @@ if_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'if' named_expression &&':' block elif_stmt + { // 'if' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression &&':' block elif_stmt")); + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); Token * _keyword; Token * _literal; expr_ty a; @@ -3774,14 +3787,14 @@ if_stmt_rule(Parser *p) && (a = named_expression_rule(p)) // named_expression && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = block_rule(p)) // block && (c = elif_stmt_rule(p)) // elif_stmt ) { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression &&':' block elif_stmt")); + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -3801,14 +3814,14 @@ if_stmt_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression &&':' block elif_stmt")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt")); } - { // 'if' named_expression &&':' block else_block? + { // 'if' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); Token * _keyword; Token * _literal; expr_ty a; @@ -3819,14 +3832,14 @@ if_stmt_rule(Parser *p) && (a = named_expression_rule(p)) // named_expression && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = block_rule(p)) // block && (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -3846,7 +3859,26 @@ if_stmt_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression &&':' block else_block?")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?")); + } + if (p->call_invalid_rules) { // invalid_if_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + void *invalid_if_stmt_var; + if ( + (invalid_if_stmt_var = invalid_if_stmt_rule(p)) // invalid_if_stmt + ) + { + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + _res = invalid_if_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt")); } _res = NULL; done: @@ -3855,8 +3887,9 @@ if_stmt_rule(Parser *p) } // elif_stmt: -// | 'elif' named_expression &&':' block elif_stmt -// | 'elif' named_expression &&':' block else_block? +// | 'elif' named_expression ':' block elif_stmt +// | 'elif' named_expression ':' block else_block? +// | invalid_elif_stmt static stmt_ty elif_stmt_rule(Parser *p) { @@ -3876,12 +3909,12 @@ elif_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'elif' named_expression &&':' block elif_stmt + { // 'elif' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression &&':' block elif_stmt")); + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); Token * _keyword; Token * _literal; expr_ty a; @@ -3892,14 +3925,14 @@ elif_stmt_rule(Parser *p) && (a = named_expression_rule(p)) // named_expression && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = block_rule(p)) // block && (c = elif_stmt_rule(p)) // elif_stmt ) { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression &&':' block elif_stmt")); + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -3919,14 +3952,14 @@ elif_stmt_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression &&':' block elif_stmt")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); } - { // 'elif' named_expression &&':' block else_block? + { // 'elif' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); Token * _keyword; Token * _literal; expr_ty a; @@ -3937,14 +3970,14 @@ elif_stmt_rule(Parser *p) && (a = named_expression_rule(p)) // named_expression && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = block_rule(p)) // block && (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -3964,7 +3997,26 @@ elif_stmt_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression &&':' block else_block?")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?")); + } + if (p->call_invalid_rules) { // invalid_elif_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + void *invalid_elif_stmt_var; + if ( + (invalid_elif_stmt_var = invalid_elif_stmt_rule(p)) // invalid_elif_stmt + ) + { + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + _res = invalid_elif_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt")); } _res = NULL; done: @@ -4019,7 +4071,7 @@ else_block_rule(Parser *p) return _res; } -// while_stmt: 'while' named_expression &&':' block else_block? +// while_stmt: 'while' named_expression ':' block else_block? | invalid_while_stmt static stmt_ty while_stmt_rule(Parser *p) { @@ -4039,12 +4091,12 @@ while_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'while' named_expression &&':' block else_block? + { // 'while' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); Token * _keyword; Token * _literal; expr_ty a; @@ -4055,14 +4107,14 @@ while_stmt_rule(Parser *p) && (a = named_expression_rule(p)) // named_expression && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = block_rule(p)) // block && (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression &&':' block else_block?")); + D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -4082,7 +4134,26 @@ while_stmt_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression &&':' block else_block?")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?")); + } + if (p->call_invalid_rules) { // invalid_while_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + void *invalid_while_stmt_var; + if ( + (invalid_while_stmt_var = invalid_while_stmt_rule(p)) // invalid_while_stmt + ) + { + D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + _res = invalid_while_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt")); } _res = NULL; done: @@ -9214,7 +9285,7 @@ star_named_expression_rule(Parser *p) return _res; } -// named_expression: NAME ':=' ~ expression | expression !':=' | invalid_named_expression +// named_expression: NAME ':=' ~ expression | invalid_named_expression | expression !':=' static expr_ty named_expression_rule(Parser *p) { @@ -9280,45 +9351,45 @@ named_expression_rule(Parser *p) return NULL; } } - { // expression !':=' + if (p->call_invalid_rules) { // invalid_named_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); - expr_ty expression_var; + D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression")); + void *invalid_named_expression_var; if ( - (expression_var = expression_rule(p)) // expression - && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' + (invalid_named_expression_var = invalid_named_expression_rule(p)) // invalid_named_expression ) { - D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); - _res = expression_var; + D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_named_expression")); + _res = invalid_named_expression_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_named_expression")); } - if (p->call_invalid_rules) { // invalid_named_expression + { // expression !':=' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression")); - void *invalid_named_expression_var; + D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + expr_ty expression_var; if ( - (invalid_named_expression_var = invalid_named_expression_rule(p)) // invalid_named_expression + (expression_var = expression_rule(p)) // expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_named_expression")); - _res = invalid_named_expression_var; + D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + _res = expression_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_named_expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; done: @@ -17242,7 +17313,10 @@ invalid_kwarg_rule(Parser *p) return _res; } -// invalid_named_expression: expression ':=' expression +// invalid_named_expression: +// | expression ':=' expression +// | NAME '=' bitwise_or !('=' | ':=' | ',') +// | !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',') static void * invalid_named_expression_rule(Parser *p) { @@ -17283,6 +17357,72 @@ invalid_named_expression_rule(Parser *p) D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':=' expression")); } + { // NAME '=' bitwise_or !('=' | ':=' | ',') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); + expr_ty a; + Token * b; + expr_ty bitwise_or_var; + if ( + (a = _PyPegen_name_token(p)) // NAME + && + (b = _PyPegen_expect_token(p, 22)) // token='=' + && + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + && + _PyPegen_lookahead(0, _tmp_143_rule, p) + ) + { + D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); + } + { // !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',')")); + expr_ty a; + Token * b; + expr_ty bitwise_or_var; + if ( + _PyPegen_lookahead(0, _tmp_144_rule, p) + && + (a = bitwise_or_rule(p)) // bitwise_or + && + (b = _PyPegen_expect_token(p, 22)) // token='=' + && + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + && + _PyPegen_lookahead(0, _tmp_145_rule, p) + ) + { + D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',')")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( b , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',')")); + } _res = NULL; done: D(p->level--); @@ -17344,7 +17484,7 @@ invalid_assignment_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_143_var; + asdl_seq * _loop0_146_var; expr_ty a; expr_ty expression_var; if ( @@ -17352,7 +17492,7 @@ invalid_assignment_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_loop0_143_var = _loop0_143_rule(p)) // star_named_expressions* + (_loop0_146_var = _loop0_146_rule(p)) // star_named_expressions* && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -17409,10 +17549,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='")); Token * _literal; - asdl_seq * _loop0_144_var; + asdl_seq * _loop0_147_var; expr_ty a; if ( - (_loop0_144_var = _loop0_144_rule(p)) // ((star_targets '='))* + (_loop0_147_var = _loop0_147_rule(p)) // ((star_targets '='))* && (a = star_expressions_rule(p)) // star_expressions && @@ -17439,10 +17579,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='")); Token * _literal; - asdl_seq * _loop0_145_var; + asdl_seq * _loop0_148_var; expr_ty a; if ( - (_loop0_145_var = _loop0_145_rule(p)) // ((star_targets '='))* + (_loop0_148_var = _loop0_148_rule(p)) // ((star_targets '='))* && (a = yield_expr_rule(p)) // yield_expr && @@ -17468,7 +17608,7 @@ invalid_assignment_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); - void *_tmp_146_var; + void *_tmp_149_var; expr_ty a; AugOperator* augassign_var; if ( @@ -17476,7 +17616,7 @@ invalid_assignment_rule(Parser *p) && (augassign_var = augassign_rule(p)) // augassign && - (_tmp_146_var = _tmp_146_rule(p)) // yield_expr | star_expressions + (_tmp_149_var = _tmp_149_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); @@ -17734,11 +17874,11 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses")); - void *_tmp_147_var; + void *_tmp_150_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_147_var = _tmp_147_rule(p)) // '[' | '(' | '{' + (_tmp_150_var = _tmp_150_rule(p)) // '[' | '(' | '{' && (a = starred_expression_rule(p)) // starred_expression && @@ -17767,11 +17907,11 @@ invalid_comprehension_rule(Parser *p) Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_148_var; + void *_tmp_151_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_148_var = _tmp_148_rule(p)) // '[' | '{' + (_tmp_151_var = _tmp_151_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -17871,11 +18011,11 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_149_var; + asdl_seq * _loop0_152_var; void *invalid_parameters_helper_var; arg_ty param_no_default_var; if ( - (_loop0_149_var = _loop0_149_rule(p)) // param_no_default* + (_loop0_152_var = _loop0_152_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && @@ -17942,13 +18082,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_150_var; + asdl_seq * _loop1_153_var; if ( - (_loop1_150_var = _loop1_150_rule(p)) // param_with_default+ + (_loop1_153_var = _loop1_153_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_150_var; + _res = _loop1_153_var; goto done; } p->mark = _mark; @@ -17979,11 +18119,11 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_151_var; + asdl_seq * _loop0_154_var; void *invalid_lambda_parameters_helper_var; arg_ty lambda_param_no_default_var; if ( - (_loop0_151_var = _loop0_151_rule(p)) // lambda_param_no_default* + (_loop0_154_var = _loop0_154_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && @@ -18052,13 +18192,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_152_var; + asdl_seq * _loop1_155_var; if ( - (_loop1_152_var = _loop1_152_rule(p)) // lambda_param_with_default+ + (_loop1_155_var = _loop1_155_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_152_var; + _res = _loop1_155_var; goto done; } p->mark = _mark; @@ -18089,11 +18229,11 @@ invalid_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); Token * _literal; - void *_tmp_153_var; + void *_tmp_156_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_153_var = _tmp_153_rule(p)) // ')' | ',' (')' | '**') + (_tmp_156_var = _tmp_156_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); @@ -18163,11 +18303,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_154_var; + void *_tmp_157_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_154_var = _tmp_154_rule(p)) // ':' | ',' (':' | '**') + (_tmp_157_var = _tmp_157_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -18269,7 +18409,7 @@ invalid_with_item_rule(Parser *p) && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_155_rule, p) + _PyPegen_lookahead(1, _tmp_158_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -18368,7 +18508,7 @@ invalid_group_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "can't use starred expression here" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use starred expression here" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18401,7 +18541,7 @@ invalid_group_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "can't use double starred expression here" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use double starred expression here" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18482,7 +18622,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - asdl_seq * _gather_156_var; + asdl_seq * _gather_159_var; Token * _keyword; Token * _literal; void *_opt_var; @@ -18492,13 +18632,13 @@ invalid_with_stmt_rule(Parser *p) && (_keyword = _PyPegen_expect_token(p, 519)) // token='with' && - (_gather_156_var = _gather_156_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_159_var = _gather_159_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_156_var, _literal); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_159_var, _literal); goto done; } p->mark = _mark; @@ -18511,7 +18651,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - asdl_seq * _gather_158_var; + asdl_seq * _gather_161_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -18527,7 +18667,7 @@ invalid_with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_158_var = _gather_158_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_161_var = _gather_161_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), 1) // ','? && @@ -18537,7 +18677,7 @@ invalid_with_stmt_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_158_var, _opt_var_1, _literal_1, _literal_2); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_161_var, _opt_var_1, _literal_1, _literal_2); goto done; } p->mark = _mark; @@ -18586,7 +18726,7 @@ invalid_except_block_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_160_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_163_rule(p), 1) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -18620,7 +18760,7 @@ invalid_except_block_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_161_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_164_rule(p), 1) // ['as' NAME] && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' ) @@ -18757,6 +18897,147 @@ invalid_case_block_rule(Parser *p) return _res; } +// invalid_if_stmt: 'if' named_expression NEWLINE +static void * +invalid_if_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'if' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression NEWLINE")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_elif_stmt: 'elif' named_expression NEWLINE +static void * +invalid_elif_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'elif' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression NEWLINE")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_while_stmt: 'while' named_expression NEWLINE +static void * +invalid_while_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'while' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 512)) // token='while' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression NEWLINE")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + // _loop0_1: NEWLINE static asdl_seq * _loop0_1_rule(Parser *p) @@ -20005,12 +20286,12 @@ _loop1_22_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_162_var; + void *_tmp_165_var; while ( - (_tmp_162_var = _tmp_162_rule(p)) // star_targets '=' + (_tmp_165_var = _tmp_165_rule(p)) // star_targets '=' ) { - _res = _tmp_162_var; + _res = _tmp_165_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -20513,12 +20794,12 @@ _loop0_31_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_163_var; + void *_tmp_166_var; while ( - (_tmp_163_var = _tmp_163_rule(p)) // '.' | '...' + (_tmp_166_var = _tmp_166_rule(p)) // '.' | '...' ) { - _res = _tmp_163_var; + _res = _tmp_166_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -20579,12 +20860,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_164_var; + void *_tmp_167_var; while ( - (_tmp_164_var = _tmp_164_rule(p)) // '.' | '...' + (_tmp_167_var = _tmp_167_rule(p)) // '.' | '...' ) { - _res = _tmp_164_var; + _res = _tmp_167_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23695,12 +23976,12 @@ _loop1_84_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_165_var; + void *_tmp_168_var; while ( - (_tmp_165_var = _tmp_165_rule(p)) // '@' named_expression NEWLINE + (_tmp_168_var = _tmp_168_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_165_var; + _res = _tmp_168_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23813,12 +24094,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_166_var; + void *_tmp_169_var; while ( - (_tmp_166_var = _tmp_166_rule(p)) // ',' star_expression + (_tmp_169_var = _tmp_169_rule(p)) // ',' star_expression ) { - _res = _tmp_166_var; + _res = _tmp_169_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23998,12 +24279,12 @@ _loop1_89_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_167_var; + void *_tmp_170_var; while ( - (_tmp_167_var = _tmp_167_rule(p)) // ',' expression + (_tmp_170_var = _tmp_170_rule(p)) // ',' expression ) { - _res = _tmp_167_var; + _res = _tmp_170_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25028,12 +25309,12 @@ _loop1_104_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_168_var; + void *_tmp_171_var; while ( - (_tmp_168_var = _tmp_168_rule(p)) // 'or' conjunction + (_tmp_171_var = _tmp_171_rule(p)) // 'or' conjunction ) { - _res = _tmp_168_var; + _res = _tmp_171_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25099,12 +25380,12 @@ _loop1_105_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_169_var; + void *_tmp_172_var; while ( - (_tmp_169_var = _tmp_169_rule(p)) // 'and' inversion + (_tmp_172_var = _tmp_172_rule(p)) // 'and' inversion ) { - _res = _tmp_169_var; + _res = _tmp_172_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26020,12 +26301,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_170_var; + void *_tmp_173_var; while ( - (_tmp_170_var = _tmp_170_rule(p)) // 'if' disjunction + (_tmp_173_var = _tmp_173_rule(p)) // 'if' disjunction ) { - _res = _tmp_170_var; + _res = _tmp_173_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26086,12 +26367,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_171_var; + void *_tmp_174_var; while ( - (_tmp_171_var = _tmp_171_rule(p)) // 'if' disjunction + (_tmp_174_var = _tmp_174_rule(p)) // 'if' disjunction ) { - _res = _tmp_171_var; + _res = _tmp_174_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26157,7 +26438,7 @@ _loop0_123_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_172_rule(p)) // starred_expression | named_expression !'=' + (elem = _tmp_175_rule(p)) // starred_expression | named_expression !'=' ) { _res = elem; @@ -26220,7 +26501,7 @@ _gather_122_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_172_rule(p)) // starred_expression | named_expression !'=' + (elem = _tmp_175_rule(p)) // starred_expression | named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) @@ -26766,12 +27047,12 @@ _loop0_133_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_173_var; + void *_tmp_176_var; while ( - (_tmp_173_var = _tmp_173_rule(p)) // ',' star_target + (_tmp_176_var = _tmp_176_rule(p)) // ',' star_target ) { - _res = _tmp_173_var; + _res = _tmp_176_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26946,12 +27227,12 @@ _loop1_136_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_174_var; + void *_tmp_177_var; while ( - (_tmp_174_var = _tmp_174_rule(p)) // ',' star_target + (_tmp_177_var = _tmp_177_rule(p)) // ',' star_target ) { - _res = _tmp_174_var; + _res = _tmp_177_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27314,9 +27595,288 @@ _tmp_142_rule(Parser *p) return _res; } -// _loop0_143: star_named_expressions +// _tmp_143: '=' | ':=' | ',' +static void * +_tmp_143_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // '=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); + } + { // ':=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 53)) // token=':=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); + } + { // ',' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + ) + { + D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_144: list | tuple | genexp | 'True' | 'None' | 'False' +static void * +_tmp_144_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // list + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + expr_ty list_var; + if ( + (list_var = list_rule(p)) // list + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + _res = list_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); + } + { // tuple + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + expr_ty tuple_var; + if ( + (tuple_var = tuple_rule(p)) // tuple + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + _res = tuple_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); + } + { // genexp + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + expr_ty genexp_var; + if ( + (genexp_var = genexp_rule(p)) // genexp + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + _res = genexp_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); + } + { // 'True' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 524)) // token='True' + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); + } + { // 'None' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); + } + { // 'False' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 525)) // token='False' + ) + { + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_145: '=' | ':=' | ',' +static void * +_tmp_145_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // '=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); + } + { // ':=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 53)) // token=':=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); + } + { // ',' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + ) + { + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_146: star_named_expressions static asdl_seq * -_loop0_143_rule(Parser *p) +_loop0_146_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27340,7 +27900,7 @@ _loop0_143_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); + D(fprintf(stderr, "%*c> _loop0_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); asdl_expr_seq* star_named_expressions_var; while ( (star_named_expressions_var = star_named_expressions_rule(p)) // star_named_expressions @@ -27362,7 +27922,7 @@ _loop0_143_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_143[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_146[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27375,14 +27935,14 @@ _loop0_143_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_143_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_146_type, _seq); D(p->level--); return _seq; } -// _loop0_144: (star_targets '=') +// _loop0_147: (star_targets '=') static asdl_seq * -_loop0_144_rule(Parser *p) +_loop0_147_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27406,13 +27966,13 @@ _loop0_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_175_var; + D(fprintf(stderr, "%*c> _loop0_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_178_var; while ( - (_tmp_175_var = _tmp_175_rule(p)) // star_targets '=' + (_tmp_178_var = _tmp_178_rule(p)) // star_targets '=' ) { - _res = _tmp_175_var; + _res = _tmp_178_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27428,7 +27988,7 @@ _loop0_144_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_147[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27441,14 +28001,14 @@ _loop0_144_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_144_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_147_type, _seq); D(p->level--); return _seq; } -// _loop0_145: (star_targets '=') +// _loop0_148: (star_targets '=') static asdl_seq * -_loop0_145_rule(Parser *p) +_loop0_148_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27472,13 +28032,13 @@ _loop0_145_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_176_var; + D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_179_var; while ( - (_tmp_176_var = _tmp_176_rule(p)) // star_targets '=' + (_tmp_179_var = _tmp_179_rule(p)) // star_targets '=' ) { - _res = _tmp_176_var; + _res = _tmp_179_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27494,7 +28054,7 @@ _loop0_145_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_145[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_148[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27507,14 +28067,14 @@ _loop0_145_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_145_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_148_type, _seq); D(p->level--); return _seq; } -// _tmp_146: yield_expr | star_expressions +// _tmp_149: yield_expr | star_expressions static void * -_tmp_146_rule(Parser *p) +_tmp_149_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27528,18 +28088,18 @@ _tmp_146_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -27547,18 +28107,18 @@ _tmp_146_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -27567,9 +28127,9 @@ _tmp_146_rule(Parser *p) return _res; } -// _tmp_147: '[' | '(' | '{' +// _tmp_150: '[' | '(' | '{' static void * -_tmp_147_rule(Parser *p) +_tmp_150_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27583,18 +28143,18 @@ _tmp_147_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '(' @@ -27602,18 +28162,18 @@ _tmp_147_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '{' @@ -27621,18 +28181,18 @@ _tmp_147_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -27641,9 +28201,9 @@ _tmp_147_rule(Parser *p) return _res; } -// _tmp_148: '[' | '{' +// _tmp_151: '[' | '{' static void * -_tmp_148_rule(Parser *p) +_tmp_151_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27657,18 +28217,18 @@ _tmp_148_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -27676,18 +28236,18 @@ _tmp_148_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -27696,9 +28256,9 @@ _tmp_148_rule(Parser *p) return _res; } -// _loop0_149: param_no_default +// _loop0_152: param_no_default static asdl_seq * -_loop0_149_rule(Parser *p) +_loop0_152_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27722,7 +28282,7 @@ _loop0_149_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27744,7 +28304,7 @@ _loop0_149_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_149[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_152[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27757,14 +28317,14 @@ _loop0_149_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_149_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_152_type, _seq); D(p->level--); return _seq; } -// _loop1_150: param_with_default +// _loop1_153: param_with_default static asdl_seq * -_loop1_150_rule(Parser *p) +_loop1_153_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27788,7 +28348,7 @@ _loop1_150_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27810,7 +28370,7 @@ _loop1_150_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -27828,14 +28388,14 @@ _loop1_150_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_150_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_153_type, _seq); D(p->level--); return _seq; } -// _loop0_151: lambda_param_no_default +// _loop0_154: lambda_param_no_default static asdl_seq * -_loop0_151_rule(Parser *p) +_loop0_154_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27859,7 +28419,7 @@ _loop0_151_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -27881,7 +28441,7 @@ _loop0_151_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27894,14 +28454,14 @@ _loop0_151_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_151_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_154_type, _seq); D(p->level--); return _seq; } -// _loop1_152: lambda_param_with_default +// _loop1_155: lambda_param_with_default static asdl_seq * -_loop1_152_rule(Parser *p) +_loop1_155_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27925,7 +28485,7 @@ _loop1_152_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -27947,7 +28507,7 @@ _loop1_152_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -27965,14 +28525,14 @@ _loop1_152_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_152_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_155_type, _seq); D(p->level--); return _seq; } -// _tmp_153: ')' | ',' (')' | '**') +// _tmp_156: ')' | ',' (')' | '**') static void * -_tmp_153_rule(Parser *p) +_tmp_156_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27986,18 +28546,18 @@ _tmp_153_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -28005,21 +28565,21 @@ _tmp_153_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_177_var; + void *_tmp_180_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_177_var = _tmp_177_rule(p)) // ')' | '**' + (_tmp_180_var = _tmp_180_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_177_var); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_180_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -28028,9 +28588,9 @@ _tmp_153_rule(Parser *p) return _res; } -// _tmp_154: ':' | ',' (':' | '**') +// _tmp_157: ':' | ',' (':' | '**') static void * -_tmp_154_rule(Parser *p) +_tmp_157_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28044,18 +28604,18 @@ _tmp_154_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -28063,21 +28623,21 @@ _tmp_154_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_178_var; + void *_tmp_181_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_178_var = _tmp_178_rule(p)) // ':' | '**' + (_tmp_181_var = _tmp_181_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_178_var); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_181_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -28086,9 +28646,9 @@ _tmp_154_rule(Parser *p) return _res; } -// _tmp_155: ',' | ')' | ':' +// _tmp_158: ',' | ')' | ':' static void * -_tmp_155_rule(Parser *p) +_tmp_158_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28102,18 +28662,18 @@ _tmp_155_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -28121,18 +28681,18 @@ _tmp_155_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -28140,18 +28700,18 @@ _tmp_155_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -28160,9 +28720,9 @@ _tmp_155_rule(Parser *p) return _res; } -// _loop0_157: ',' (expression ['as' star_target]) +// _loop0_160: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_157_rule(Parser *p) +_loop0_160_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28186,13 +28746,13 @@ _loop0_157_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_179_rule(p)) // expression ['as' star_target] + (elem = _tmp_182_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -28217,7 +28777,7 @@ _loop0_157_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28230,14 +28790,14 @@ _loop0_157_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_157_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_160_type, _seq); D(p->level--); return _seq; } -// _gather_156: (expression ['as' star_target]) _loop0_157 +// _gather_159: (expression ['as' star_target]) _loop0_160 static asdl_seq * -_gather_156_rule(Parser *p) +_gather_159_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28246,27 +28806,27 @@ _gather_156_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_157 + { // (expression ['as' star_target]) _loop0_160 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_157")); + D(fprintf(stderr, "%*c> _gather_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_179_rule(p)) // expression ['as' star_target] + (elem = _tmp_182_rule(p)) // expression ['as' star_target] && - (seq = _loop0_157_rule(p)) // _loop0_157 + (seq = _loop0_160_rule(p)) // _loop0_160 ) { - D(fprintf(stderr, "%*c+ _gather_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_157")); + D(fprintf(stderr, "%*c+ _gather_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_156[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_157")); + D(fprintf(stderr, "%*c%s _gather_159[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); } _res = NULL; done: @@ -28274,9 +28834,9 @@ _gather_156_rule(Parser *p) return _res; } -// _loop0_159: ',' (expressions ['as' star_target]) +// _loop0_162: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_159_rule(Parser *p) +_loop0_162_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28300,13 +28860,13 @@ _loop0_159_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_180_rule(p)) // expressions ['as' star_target] + (elem = _tmp_183_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -28331,7 +28891,7 @@ _loop0_159_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28344,14 +28904,14 @@ _loop0_159_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_159_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_162_type, _seq); D(p->level--); return _seq; } -// _gather_158: (expressions ['as' star_target]) _loop0_159 +// _gather_161: (expressions ['as' star_target]) _loop0_162 static asdl_seq * -_gather_158_rule(Parser *p) +_gather_161_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28360,27 +28920,27 @@ _gather_158_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_159 + { // (expressions ['as' star_target]) _loop0_162 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_159")); + D(fprintf(stderr, "%*c> _gather_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_180_rule(p)) // expressions ['as' star_target] + (elem = _tmp_183_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_159_rule(p)) // _loop0_159 + (seq = _loop0_162_rule(p)) // _loop0_162 ) { - D(fprintf(stderr, "%*c+ _gather_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_159")); + D(fprintf(stderr, "%*c+ _gather_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_158[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_159")); + D(fprintf(stderr, "%*c%s _gather_161[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); } _res = NULL; done: @@ -28388,9 +28948,9 @@ _gather_158_rule(Parser *p) return _res; } -// _tmp_160: 'as' NAME +// _tmp_163: 'as' NAME static void * -_tmp_160_rule(Parser *p) +_tmp_163_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28404,7 +28964,7 @@ _tmp_160_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -28413,12 +28973,12 @@ _tmp_160_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -28427,9 +28987,9 @@ _tmp_160_rule(Parser *p) return _res; } -// _tmp_161: 'as' NAME +// _tmp_164: 'as' NAME static void * -_tmp_161_rule(Parser *p) +_tmp_164_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28443,7 +29003,7 @@ _tmp_161_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -28452,12 +29012,12 @@ _tmp_161_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -28466,9 +29026,9 @@ _tmp_161_rule(Parser *p) return _res; } -// _tmp_162: star_targets '=' +// _tmp_165: star_targets '=' static void * -_tmp_162_rule(Parser *p) +_tmp_165_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28482,7 +29042,7 @@ _tmp_162_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -28491,7 +29051,7 @@ _tmp_162_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28501,7 +29061,7 @@ _tmp_162_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -28510,9 +29070,9 @@ _tmp_162_rule(Parser *p) return _res; } -// _tmp_163: '.' | '...' +// _tmp_166: '.' | '...' static void * -_tmp_163_rule(Parser *p) +_tmp_166_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28526,18 +29086,18 @@ _tmp_163_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -28545,18 +29105,18 @@ _tmp_163_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -28565,9 +29125,9 @@ _tmp_163_rule(Parser *p) return _res; } -// _tmp_164: '.' | '...' +// _tmp_167: '.' | '...' static void * -_tmp_164_rule(Parser *p) +_tmp_167_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28581,18 +29141,18 @@ _tmp_164_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -28600,18 +29160,18 @@ _tmp_164_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -28620,9 +29180,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: '@' named_expression NEWLINE +// _tmp_168: '@' named_expression NEWLINE static void * -_tmp_165_rule(Parser *p) +_tmp_168_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28636,7 +29196,7 @@ _tmp_165_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -28648,7 +29208,7 @@ _tmp_165_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28658,7 +29218,7 @@ _tmp_165_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -28667,9 +29227,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _tmp_166: ',' star_expression +// _tmp_169: ',' star_expression static void * -_tmp_166_rule(Parser *p) +_tmp_169_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28683,7 +29243,7 @@ _tmp_166_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -28692,7 +29252,7 @@ _tmp_166_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28702,7 +29262,7 @@ _tmp_166_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -28711,9 +29271,9 @@ _tmp_166_rule(Parser *p) return _res; } -// _tmp_167: ',' expression +// _tmp_170: ',' expression static void * -_tmp_167_rule(Parser *p) +_tmp_170_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28727,7 +29287,7 @@ _tmp_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -28736,7 +29296,7 @@ _tmp_167_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28746,7 +29306,7 @@ _tmp_167_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -28755,9 +29315,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: 'or' conjunction +// _tmp_171: 'or' conjunction static void * -_tmp_168_rule(Parser *p) +_tmp_171_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28771,7 +29331,7 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -28780,7 +29340,7 @@ _tmp_168_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28790,7 +29350,7 @@ _tmp_168_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -28799,9 +29359,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: 'and' inversion +// _tmp_172: 'and' inversion static void * -_tmp_169_rule(Parser *p) +_tmp_172_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28815,7 +29375,7 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -28824,7 +29384,7 @@ _tmp_169_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28834,7 +29394,7 @@ _tmp_169_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -28843,9 +29403,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: 'if' disjunction +// _tmp_173: 'if' disjunction static void * -_tmp_170_rule(Parser *p) +_tmp_173_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28859,7 +29419,7 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -28868,7 +29428,7 @@ _tmp_170_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28878,7 +29438,7 @@ _tmp_170_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -28887,9 +29447,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: 'if' disjunction +// _tmp_174: 'if' disjunction static void * -_tmp_171_rule(Parser *p) +_tmp_174_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28903,7 +29463,7 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -28912,7 +29472,7 @@ _tmp_171_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28922,7 +29482,7 @@ _tmp_171_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -28931,9 +29491,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: starred_expression | named_expression !'=' +// _tmp_175: starred_expression | named_expression !'=' static void * -_tmp_172_rule(Parser *p) +_tmp_175_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28947,18 +29507,18 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // named_expression !'=' @@ -28966,7 +29526,7 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); expr_ty named_expression_var; if ( (named_expression_var = named_expression_rule(p)) // named_expression @@ -28974,12 +29534,12 @@ _tmp_172_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); _res = named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression !'='")); } _res = NULL; @@ -28988,9 +29548,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _tmp_173: ',' star_target +// _tmp_176: ',' star_target static void * -_tmp_173_rule(Parser *p) +_tmp_176_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29004,7 +29564,7 @@ _tmp_173_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -29013,7 +29573,7 @@ _tmp_173_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29023,7 +29583,7 @@ _tmp_173_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -29032,9 +29592,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _tmp_174: ',' star_target +// _tmp_177: ',' star_target static void * -_tmp_174_rule(Parser *p) +_tmp_177_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29048,7 +29608,7 @@ _tmp_174_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -29057,7 +29617,7 @@ _tmp_174_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29067,7 +29627,7 @@ _tmp_174_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -29076,9 +29636,9 @@ _tmp_174_rule(Parser *p) return _res; } -// _tmp_175: star_targets '=' +// _tmp_178: star_targets '=' static void * -_tmp_175_rule(Parser *p) +_tmp_178_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29092,7 +29652,7 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -29101,12 +29661,12 @@ _tmp_175_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29115,9 +29675,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: star_targets '=' +// _tmp_179: star_targets '=' static void * -_tmp_176_rule(Parser *p) +_tmp_179_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29131,7 +29691,7 @@ _tmp_176_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -29140,12 +29700,12 @@ _tmp_176_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29154,9 +29714,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: ')' | '**' +// _tmp_180: ')' | '**' static void * -_tmp_177_rule(Parser *p) +_tmp_180_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29170,18 +29730,18 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -29189,18 +29749,18 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -29209,9 +29769,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: ':' | '**' +// _tmp_181: ':' | '**' static void * -_tmp_178_rule(Parser *p) +_tmp_181_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29225,18 +29785,18 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -29244,18 +29804,18 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -29264,9 +29824,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: expression ['as' star_target] +// _tmp_182: expression ['as' star_target] static void * -_tmp_179_rule(Parser *p) +_tmp_182_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29280,22 +29840,22 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_181_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_184_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -29304,9 +29864,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: expressions ['as' star_target] +// _tmp_183: expressions ['as' star_target] static void * -_tmp_180_rule(Parser *p) +_tmp_183_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29320,22 +29880,22 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_182_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_185_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -29344,9 +29904,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _tmp_181: 'as' star_target +// _tmp_184: 'as' star_target static void * -_tmp_181_rule(Parser *p) +_tmp_184_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29360,7 +29920,7 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -29369,12 +29929,12 @@ _tmp_181_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -29383,9 +29943,9 @@ _tmp_181_rule(Parser *p) return _res; } -// _tmp_182: 'as' star_target +// _tmp_185: 'as' star_target static void * -_tmp_182_rule(Parser *p) +_tmp_185_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29399,7 +29959,7 @@ _tmp_182_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -29408,12 +29968,12 @@ _tmp_182_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; diff --git a/Parser/pegen.c b/Parser/pegen.c index f841ace28e717..7258cafca58ca 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -147,8 +147,8 @@ byte_offset_to_character_offset(PyObject *line, Py_ssize_t col_offset) return 0; } Py_ssize_t len = strlen(str); - if (col_offset > len) { - col_offset = len; + if (col_offset > len + 1) { + col_offset = len + 1; } assert(col_offset >= 0); PyObject *text = PyUnicode_DecodeUTF8(str, col_offset, "replace"); @@ -184,7 +184,7 @@ _PyPegen_get_expr_name(expr_ty e) case BoolOp_kind: case BinOp_kind: case UnaryOp_kind: - return "operator"; + return "expression"; case GeneratorExp_kind: return "generator expression"; case Yield_kind: @@ -199,7 +199,7 @@ _PyPegen_get_expr_name(expr_ty e) case DictComp_kind: return "dict comprehension"; case Dict_kind: - return "dict display"; + return "dict literal"; case Set_kind: return "set display"; case JoinedStr_kind: From webhook-mailer at python.org Mon Apr 12 12:03:17 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 12 Apr 2021 16:03:17 -0000 Subject: [Python-checkins] bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) Message-ID: https://github.com/python/cpython/commit/de06baa9de109a00c26de0dc5a248fe7aafe09f5 commit: de06baa9de109a00c26de0dc5a248fe7aafe09f5 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-12T09:03:08-07:00 summary: bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) (cherry picked from commit 67c0b3d89c4da9750fdb43fc66d3924681b22d2e) Co-authored-by: Zackery Spytz files: M Doc/library/os.path.rst diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index 251df4d516eb5..d2fe494352453 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -366,7 +366,8 @@ the :mod:`glob` module.) Return a relative filepath to *path* either from the current directory or from an optional *start* directory. This is a path computation: the filesystem is not accessed to confirm the existence or nature of *path* or - *start*. + *start*. On Windows, :exc:`ValueError` is raised when *path* and *start* + are on different drives. *start* defaults to :attr:`os.curdir`. From webhook-mailer at python.org Mon Apr 12 13:03:28 2021 From: webhook-mailer at python.org (gvanrossum) Date: Mon, 12 Apr 2021 17:03:28 -0000 Subject: [Python-checkins] Use double quotes over single quotes for match statement grammar (GH-24943) Message-ID: https://github.com/python/cpython/commit/37a5e220234dd4afb8f97b810393e3d58db674a1 commit: 37a5e220234dd4afb8f97b810393e3d58db674a1 branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-12T10:03:20-07:00 summary: Use double quotes over single quotes for match statement grammar (GH-24943) files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 2da90682a1f9b..8e68081270684 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -533,7 +533,7 @@ The match statement is used for pattern matching. Syntax: match_stmt: 'match' `subject_expr` ":" NEWLINE INDENT `case_block`+ DEDENT subject_expr: `star_named_expression` "," `star_named_expressions`? : | `named_expression` - case_block: 'case' `patterns` [`guard`] ':' `block` + case_block: 'case' `patterns` [`guard`] ":" `block` .. note:: This section uses single quotes to denote @@ -861,7 +861,7 @@ emphasize the intended grouping. Otherwise, it has no additional syntax. Syntax: .. productionlist:: python-grammar - group_pattern: '(' `pattern` ')' + group_pattern: "(" `pattern` ")" In simple terms ``(P)`` has the same effect as ``P``. From webhook-mailer at python.org Mon Apr 12 13:23:21 2021 From: webhook-mailer at python.org (gvanrossum) Date: Mon, 12 Apr 2021 17:23:21 -0000 Subject: [Python-checkins] bpo-42904: Fix get_type_hints for class local namespaces (GH-24201) Message-ID: https://github.com/python/cpython/commit/852150ddfe68bc2696fc880175aeb855a0c16ae6 commit: 852150ddfe68bc2696fc880175aeb855a0c16ae6 branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-12T10:23:12-07:00 summary: bpo-42904: Fix get_type_hints for class local namespaces (GH-24201) files: A Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 82c517a4e6002..062163ccf4b65 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -2874,7 +2874,7 @@ def test_get_type_hints_classes(self): {'x': int, 'y': int}) self.assertEqual(gth(mod_generics_cache.B), {'my_inner_a1': mod_generics_cache.B.A, - 'my_inner_a2': mod_generics_cache.A, + 'my_inner_a2': mod_generics_cache.B.A, 'my_outer_a': mod_generics_cache.A}) def test_respect_no_type_check(self): @@ -3010,6 +3010,13 @@ def __iand__(self, other: Const["MySet[T]"]) -> "MySet[T]": {'other': MySet[T], 'return': MySet[T]} ) + def test_get_type_hints_classes(self): + class Foo: + y = str + x: y + # This previously raised an error under PEP 563. + self.assertEqual(get_type_hints(Foo), {'x': str}) + class GetUtilitiesTestCase(TestCase): def test_get_origin(self): diff --git a/Lib/typing.py b/Lib/typing.py index a24c01f0e3b9e..583438e4740ab 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1632,12 +1632,13 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False): else: base_globals = globalns ann = base.__dict__.get('__annotations__', {}) + base_locals = dict(vars(base)) if localns is None else localns for name, value in ann.items(): if value is None: value = type(None) if isinstance(value, str): value = ForwardRef(value, is_argument=False) - value = _eval_type(value, base_globals, localns) + value = _eval_type(value, base_globals, base_locals) hints[name] = value return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()} diff --git a/Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst b/Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst new file mode 100644 index 0000000000000..ef4b4e56fbebc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst @@ -0,0 +1,2 @@ +:func:`typing.get_type_hints` now checks the local namespace of a class when +evaluating :pep:`563` annotations inside said class. From webhook-mailer at python.org Mon Apr 12 14:17:33 2021 From: webhook-mailer at python.org (gvanrossum) Date: Mon, 12 Apr 2021 18:17:33 -0000 Subject: [Python-checkins] bpo-41515: Fix KeyError raised in get_type_hints (GH-25352) Message-ID: https://github.com/python/cpython/commit/a9cf69df2e031d6157f01289f66ca9cf723ceb5c commit: a9cf69df2e031d6157f01289f66ca9cf723ceb5c branch: master author: Karthikeyan Singaravelan committer: gvanrossum date: 2021-04-12T11:17:25-07:00 summary: bpo-41515: Fix KeyError raised in get_type_hints (GH-25352) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> Co-authored-by: efahl <36704995+efahl at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 062163ccf4b65..a6afd35944f2e 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -2267,6 +2267,12 @@ def test_no_isinstance(self): with self.assertRaises(TypeError): issubclass(int, ClassVar) + def test_bad_module(self): + # bpo-41515 + class BadModule: + pass + BadModule.__module__ = 'bad' # Something not in sys.modules + assert(get_type_hints(BadModule), {}) class FinalTests(BaseTestCase): diff --git a/Lib/typing.py b/Lib/typing.py index 583438e4740ab..dc2a7a478835d 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1628,7 +1628,10 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False): hints = {} for base in reversed(obj.__mro__): if globalns is None: - base_globals = sys.modules[base.__module__].__dict__ + try: + base_globals = sys.modules[base.__module__].__dict__ + except KeyError: + continue else: base_globals = globalns ann = base.__dict__.get('__annotations__', {}) diff --git a/Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst b/Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst new file mode 100644 index 0000000000000..aef5c1791dfea --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst @@ -0,0 +1,2 @@ +Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due to +synthetic modules that don't appear in ``sys.modules``. From webhook-mailer at python.org Mon Apr 12 15:16:55 2021 From: webhook-mailer at python.org (ethanfurman) Date: Mon, 12 Apr 2021 19:16:55 -0000 Subject: [Python-checkins] [3.8] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350). (GH-25369) Message-ID: https://github.com/python/cpython/commit/f396a1a940f8608a4be2a9ac4ef82e37c198ecd3 commit: f396a1a940f8608a4be2a9ac4ef82e37c198ecd3 branch: 3.8 author: Ethan Furman committer: ethanfurman date: 2021-04-12T12:16:46-07:00 summary: [3.8] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350). (GH-25369) (cherry picked from commit 8c14f5a787b21d5a1eae5d5ee981431d1c0e055f) Co-authored-by: Ethan Furman files: A Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst M Lib/enum.py M Lib/test/test_enum.py diff --git a/Lib/enum.py b/Lib/enum.py index 31afdd3a24f7b..3d0b1797aebe0 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -654,19 +654,24 @@ def __new__(cls, value): except Exception as e: exc = e result = None - if isinstance(result, cls): - return result - else: - ve_exc = ValueError("%r is not a valid %s" % (value, cls.__name__)) - if result is None and exc is None: - raise ve_exc - elif exc is None: - exc = TypeError( - 'error in %s._missing_: returned %r instead of None or a valid member' - % (cls.__name__, result) - ) - exc.__context__ = ve_exc - raise exc + try: + if isinstance(result, cls): + return result + else: + ve_exc = ValueError("%r is not a valid %s" % (value, cls.__name__)) + if result is None and exc is None: + raise ve_exc + elif exc is None: + exc = TypeError( + 'error in %s._missing_: returned %r instead of None or a valid member' + % (cls.__name__, result) + ) + exc.__context__ = ve_exc + raise exc + finally: + # ensure all variables that could hold an exception are destroyed + exc = None + ve_exc = None def _generate_next_value_(name, start, count, last_values): """ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index b5e4009bb0680..b246163fff4e2 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1897,6 +1897,38 @@ def _missing_(cls, item): else: raise Exception('Exception not raised.') + def test_missing_exceptions_reset(self): + import weakref + # + class TestEnum(enum.Enum): + VAL1 = 'val1' + VAL2 = 'val2' + # + class Class1: + def __init__(self): + # Gracefully handle an exception of our own making + try: + raise ValueError() + except ValueError: + pass + # + class Class2: + def __init__(self): + # Gracefully handle an exception of Enum's making + try: + TestEnum('invalid_value') + except ValueError: + pass + # No strong refs here so these are free to die. + class_1_ref = weakref.ref(Class1()) + class_2_ref = weakref.ref(Class2()) + # + # The exception raised by Enum creates a reference loop and thus + # Class2 instances will stick around until the next gargage collection + # cycle, unlike Class1. + self.assertIs(class_1_ref(), None) + self.assertIs(class_2_ref(), None) + def test_multiple_mixin(self): class MaxMixin: @classproperty diff --git a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst new file mode 100644 index 0000000000000..0722d35a37a1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst @@ -0,0 +1 @@ +[Enum] ensure exceptions raised in ``_missing__`` are released From webhook-mailer at python.org Mon Apr 12 15:53:28 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 12 Apr 2021 19:53:28 -0000 Subject: [Python-checkins] Fix Sphinx errors in the documentation and re-activate the suspicious check (GH-25368) Message-ID: https://github.com/python/cpython/commit/20ac34772aa9805ccbf082e700f2b033291ff5d2 commit: 20ac34772aa9805ccbf082e700f2b033291ff5d2 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-12T20:53:15+01:00 summary: Fix Sphinx errors in the documentation and re-activate the suspicious check (GH-25368) The suspicious check is still executed as part of the release process and release managers have been lately fixing some actual errors that the suspicious target can find. For this reason, reactivate the suspicious until we decide what to do in a coordinated fashion. files: M .github/workflows/doc.yml M .travis.yml M Doc/c-api/init_config.rst M Doc/tools/susp-ignored.csv diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 864303bfff850..8924fc992e25e 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -36,7 +36,7 @@ jobs: - name: 'Install build dependencies' run: make -C Doc/ PYTHON=../python venv - name: 'Build documentation' - run: xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W --keep-going -j4" doctest html + run: xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W --keep-going -j4" doctest html suspicious - name: 'Upload' uses: actions/upload-artifact at v2.2.2 with: diff --git a/.travis.yml b/.travis.yml index 7050d2557a7fc..fc06321691444 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,7 +53,7 @@ matrix: - cd Doc - make venv PYTHON=python script: - - make check html SPHINXOPTS="-q -W -j4" + - make check html suspicious SPHINXOPTS="-q -W -j4" - name: "Documentation tests" os: linux language: c diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index 7ececeb6c6269..d364f4a3c98b5 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -831,7 +831,7 @@ PyConfig Set by the :envvar:`PYTHONPLATLIBDIR` environment variable. Default: value of the ``PLATLIBDIR`` macro which is set by the - :option`configure --with-platlibdir option <--with-platlibdir>` (default: + :option:`configure --with-platlibdir option <--with-platlibdir>` (default: ``"lib"``). Part of the :ref:`Python Path Configuration ` input. diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index fd27ab5d80dc2..325c5fa35eed7 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -365,3 +365,4 @@ whatsnew/changelog,,::,default::DeprecationWarning library/importlib.metadata,,:main,"EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts')" library/importlib.metadata,,`,loading the metadata for packages for the indicated ``context``. library/re,,`,"`" +using/configure,84,:db2,=db1:db2:... From webhook-mailer at python.org Mon Apr 12 17:27:44 2021 From: webhook-mailer at python.org (vstinner) Date: Mon, 12 Apr 2021 21:27:44 -0000 Subject: [Python-checkins] bpo-43774: Add more links to configure options (GH-25363) Message-ID: https://github.com/python/cpython/commit/85918e4ab6e9410008aef6dedf000d24b3e120ea commit: 85918e4ab6e9410008aef6dedf000d24b3e120ea branch: master author: Victor Stinner committer: vstinner date: 2021-04-12T23:27:35+02:00 summary: bpo-43774: Add more links to configure options (GH-25363) files: M Doc/c-api/init_config.rst M Doc/howto/instrumentation.rst M Doc/library/decimal.rst M Doc/library/sqlite3.rst M Doc/library/sys.rst M Doc/library/zoneinfo.rst M Doc/using/configure.rst M Doc/using/unix.rst M Doc/whatsnew/3.10.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index d364f4a3c98b5..5e9296a5470d4 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -638,7 +638,7 @@ PyConfig Set to ``1`` by the :envvar:`PYTHONDUMPREFS` environment variable. Need a special build of Python with the ``Py_TRACE_REFS`` macro defined: - see :option:`configure --with-trace-refs <--with-trace-refs>`. + see the :option:`configure --with-trace-refs option <--with-trace-refs>`. Default: ``0``. @@ -820,7 +820,7 @@ PyConfig Set to ``1`` by the :envvar:`PYTHONMALLOCSTATS` environment variable. The option is ignored if Python is :option:`configured using - --without-pymalloc <--without-pymalloc>`. + the --without-pymalloc option <--without-pymalloc>`. Default: ``0``. @@ -831,8 +831,8 @@ PyConfig Set by the :envvar:`PYTHONPLATLIBDIR` environment variable. Default: value of the ``PLATLIBDIR`` macro which is set by the - :option:`configure --with-platlibdir option <--with-platlibdir>` (default: - ``"lib"``). + :option:`configure --with-platlibdir option <--with-platlibdir>` + (default: ``"lib"``). Part of the :ref:`Python Path Configuration ` input. diff --git a/Doc/howto/instrumentation.rst b/Doc/howto/instrumentation.rst index ab6240d1c02e7..4a59ae82f96e2 100644 --- a/Doc/howto/instrumentation.rst +++ b/Doc/howto/instrumentation.rst @@ -46,7 +46,8 @@ or:: $ sudo apt-get install systemtap-sdt-dev -CPython must then be configured ``--with-dtrace``: +CPython must then be :option:`configured with the --with-dtrace option +<--with-dtrace>`: .. code-block:: none @@ -77,7 +78,8 @@ the built binary by seeing if it contains a ".note.stapsdt" section. $ readelf -S ./python | grep .note.stapsdt [30] .note.stapsdt NOTE 0000000000000000 00308d78 -If you've built Python as a shared library (with --enable-shared), you +If you've built Python as a shared library +(with the :option:`--enable-shared` configure option), you need to look instead within the shared library. For example:: $ readelf -S libpython3.3dm.so.1.0 | grep .note.stapsdt @@ -252,7 +254,7 @@ where the columns are: and the remainder indicates the call/return hierarchy as the script executes. -For a `--enable-shared` build of CPython, the markers are contained within the +For a :option:`--enable-shared` build of CPython, the markers are contained within the libpython shared library, and the probe's dotted path needs to reflect this. For example, this line from the above example: diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index 35a263a659eaf..e759c5cf23b9e 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -1484,8 +1484,8 @@ are also included in the pure Python version for compatibility. .. data:: HAVE_CONTEXTVAR - The default value is ``True``. If Python is :option:`configured with - --without-decimal-contextvar <--without-decimal-contextvar>`, + The default value is ``True``. If Python is :option:`configured using + the --without-decimal-contextvar option <--without-decimal-contextvar>`, the C version uses a thread-local rather than a coroutine-local context and the value is ``False``. This is slightly faster in some nested context scenarios. diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 1da5c7f3ab187..aee58a4bbfc07 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -1090,5 +1090,5 @@ committed: .. [#f1] The sqlite3 module is not built with loadable extension support by default, because some platforms (notably Mac OS X) have SQLite libraries which are compiled without this feature. To get loadable - extension support, you must pass ``--enable-loadable-sqlite-extensions`` to - configure. + extension support, you must pass the + :option:`--enable-loadable-sqlite-extensions` option to configure. diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index d85eadbf5a8fa..721edd1495aa5 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -250,8 +250,9 @@ always available. Print low-level information to stderr about the state of CPython's memory allocator. - If Python is :option:`configured --with-pydebug <--with-pydebug>`, it also - performs some expensive internal consistency checks. + If Python is `built in debug mode ` (:option:`configure + --with-pydebug option <--with-pydebug>`), it also performs some expensive + internal consistency checks. .. versionadded:: 3.3 diff --git a/Doc/library/zoneinfo.rst b/Doc/library/zoneinfo.rst index 3a4c12a73acd7..1b2ba2af2ae6f 100644 --- a/Doc/library/zoneinfo.rst +++ b/Doc/library/zoneinfo.rst @@ -124,8 +124,9 @@ time zone database (except on Windows, where there are no "well-known" locations for time zone data). On POSIX systems, downstream distributors and those building Python from source who know where their system time zone data is deployed may change the default time zone path by specifying -the compile-time option ``TZPATH`` (or, more likely, the ``configure`` flag -``--with-tzpath``), which should be a string delimited by :data:`os.pathsep`. +the compile-time option ``TZPATH`` (or, more likely, the :option:`configure +flag --with-tzpath <--with-tzpath>`), which should be a string delimited by +:data:`os.pathsep`. On all platforms, the configured value is available as the ``TZPATH`` key in :func:`sysconfig.get_config_var`. diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index 85c9018067e04..e7fad7f2e622b 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -19,7 +19,10 @@ General Options .. cmdoption:: --enable-loadable-sqlite-extensions Support loadable extensions in the :mod:`_sqlite` extension module (default - is no), see the :mod:`sqlite3` module. + is no). + + See the :meth:`sqlite3.Connection.enable_load_extension` method of the + :mod:`sqlite3` module. .. versionadded:: 3.6 @@ -54,8 +57,9 @@ General Options .. cmdoption:: --with-tzpath= - Select the default time zone search path for :data:`zoneinfo.TZPATH`, - see the :mod:`zoneinfo` module. + Select the default time zone search path for :data:`zoneinfo.TZPATH`. + See the :ref:`Compile-time configuration + ` of the :mod:`zoneinfo` module. Default: ``/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo``. @@ -287,6 +291,9 @@ Debug options Enable DTrace support (default is no). + See :ref:`Instrumenting CPython with DTrace and SystemTap + `. + .. versionadded:: 3.6 .. cmdoption:: --with-address-sanitizer diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst index b5b26ecef20fb..09dd5b0ac6e90 100644 --- a/Doc/using/unix.rst +++ b/Doc/using/unix.rst @@ -168,6 +168,7 @@ Custom OpenSSL $ popd 3. Build Python with custom OpenSSL + (see the configure `--with-openssl` and `--with-openssl-rpath` options) .. code-block:: shell-session diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 85f229cd78717..6af0f834a9d4c 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -986,9 +986,9 @@ Optimizations van Rossum in :issue:`42927`, based on ideas implemented originally in PyPy and MicroPython.) -* When building Python with ``--enable-optimizations`` now +* When building Python with :option:`--enable-optimizations` now ``-fno-semantic-interposition`` is added to both the compile and link line. - This speeds builds of the Python interpreter created with ``--enable-shared`` + This speeds builds of the Python interpreter created with :option:`--enable-shared` with ``gcc`` by up to 30%. See `this article `_ for more details. (Contributed by Victor Stinner and Pablo Galindo in @@ -1300,11 +1300,12 @@ Build Changes * The :mod:`atexit` module must now always be built as a built-in module. (Contributed by Victor Stinner in :issue:`42639`.) -* Added ``--disable-test-modules`` option to the ``configure`` script: +* Added :option:`--disable-test-modules` option to the ``configure`` script: don't build nor install test modules. (Contributed by Xavier de Gaye, Thomas Petazzoni and Peixing Xin in :issue:`27640`.) -* Add ``--with-wheel-pkg-dir=PATH`` option to the ``./configure`` script. If +* Add :option:`--with-wheel-pkg-dir=PATH option <--with-wheel-pkg-dir>` + to the ``./configure`` script. If specified, the :mod:`ensurepip` module looks for ``setuptools`` and ``pip`` wheel packages in this directory: if both are present, these wheel packages are used instead of ensurepip bundled wheel packages. @@ -1316,19 +1317,19 @@ Build Changes (Contributed by Victor Stinner in :issue:`42856`.) -* Add a new configure ``--without-static-libpython`` option to not build the - ``libpythonMAJOR.MINOR.a`` static library and not install the ``python.o`` - object file. +* Add a new :option:`configure --without-static-libpython option + <--without-static-libpython>` to not build the ``libpythonMAJOR.MINOR.a`` + static library and not install the ``python.o`` object file. (Contributed by Victor Stinner in :issue:`43103`.) * The ``configure`` script now uses the ``pkg-config`` utility, if available, to detect the location of Tcl/Tk headers and libraries. As before, those - locations can be explicitly specified with the ``--with-tcltk-includes`` - and ``--with-tcltk-libs`` configuration options. + locations can be explicitly specified with the :option:`--with-tcltk-includes` + and :option:`--with-tcltk-libs` configuration options. (Contributed by Manolis Stamatogiannakis in :issue:`42603`.) -* Add ``--with-openssl-rpath`` option to ``configure`` script. The option +* Add :option:`--with-openssl-rpath` option to ``configure`` script. The option simplifies building Python with a custom OpenSSL installation, e.g. ``./configure --with-openssl=/path/to/openssl --with-openssl-rpath=auto``. (Contributed by Christian Heimes in :issue:`43466`.) @@ -1405,8 +1406,8 @@ New Features in debug mode because the :c:type:`PyObject` structure is the same in release and debug mode since Python 3.8 (see :issue:`36465`). - The limited C API is still not supported in the ``--with-trace-refs`` special - build (``Py_TRACE_REFS`` macro). + The limited C API is still not supported in the :option:`--with-trace-refs` + special build (``Py_TRACE_REFS`` macro). (Contributed by Victor Stinner in :issue:`43688`.) * Add the :c:func:`Py_Is(x, y) ` function to test if the *x* object is diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index c16b9a70fbdd1..174d9e24be319 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1211,9 +1211,9 @@ Build Changes non-system Tcl and Tk frameworks if they are installed in ``/Library/Frameworks``, as had been the case on older releases of macOS. If a macOS SDK is explicitly configured, by using - ``--enable-universalsdk=`` or ``-isysroot``, only the SDK itself is + :option:`--enable-universalsdk` or ``-isysroot``, only the SDK itself is searched. The default behavior can still be overridden with - ``--with-tcltk-includes`` and ``--with-tcltk-libs``. + :option:`--with-tcltk-includes` and :option:`--with-tcltk-libs`. (Contributed by Ned Deily in :issue:`34956`.) * Python can now be built for Windows 10 ARM64. From webhook-mailer at python.org Mon Apr 12 18:03:39 2021 From: webhook-mailer at python.org (ethanfurman) Date: Mon, 12 Apr 2021 22:03:39 -0000 Subject: [Python-checkins] [3.9] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350). (GH-25370) Message-ID: https://github.com/python/cpython/commit/6379924ecd51e346b42b0293da0f4442a0f67707 commit: 6379924ecd51e346b42b0293da0f4442a0f67707 branch: 3.9 author: Ethan Furman committer: ethanfurman date: 2021-04-12T15:03:29-07:00 summary: [3.9] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released (GH-25350). (GH-25370) (cherry picked from commit 8c14f5a787b21d5a1eae5d5ee981431d1c0e055f) Co-authored-by: Ethan Furman files: A Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst M Lib/enum.py M Lib/test/test_enum.py diff --git a/Lib/enum.py b/Lib/enum.py index 1fddb1c75e8be..be74796a8a0ce 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -669,19 +669,24 @@ def __new__(cls, value): except Exception as e: exc = e result = None - if isinstance(result, cls): - return result - else: - ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__)) - if result is None and exc is None: - raise ve_exc - elif exc is None: - exc = TypeError( - 'error in %s._missing_: returned %r instead of None or a valid member' - % (cls.__name__, result) - ) - exc.__context__ = ve_exc - raise exc + try: + if isinstance(result, cls): + return result + else: + ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__)) + if result is None and exc is None: + raise ve_exc + elif exc is None: + exc = TypeError( + 'error in %s._missing_: returned %r instead of None or a valid member' + % (cls.__name__, result) + ) + exc.__context__ = ve_exc + raise exc + finally: + # ensure all variables that could hold an exception are destroyed + exc = None + ve_exc = None def _generate_next_value_(name, start, count, last_values): """ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 4e22986325521..fc2d61d59cd4b 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1897,6 +1897,38 @@ def _missing_(cls, item): else: raise Exception('Exception not raised.') + def test_missing_exceptions_reset(self): + import weakref + # + class TestEnum(enum.Enum): + VAL1 = 'val1' + VAL2 = 'val2' + # + class Class1: + def __init__(self): + # Gracefully handle an exception of our own making + try: + raise ValueError() + except ValueError: + pass + # + class Class2: + def __init__(self): + # Gracefully handle an exception of Enum's making + try: + TestEnum('invalid_value') + except ValueError: + pass + # No strong refs here so these are free to die. + class_1_ref = weakref.ref(Class1()) + class_2_ref = weakref.ref(Class2()) + # + # The exception raised by Enum creates a reference loop and thus + # Class2 instances will stick around until the next gargage collection + # cycle, unlike Class1. + self.assertIs(class_1_ref(), None) + self.assertIs(class_2_ref(), None) + def test_multiple_mixin(self): class MaxMixin: @classproperty diff --git a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst new file mode 100644 index 0000000000000..0722d35a37a1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst @@ -0,0 +1 @@ +[Enum] ensure exceptions raised in ``_missing__`` are released From webhook-mailer at python.org Mon Apr 12 21:02:10 2021 From: webhook-mailer at python.org (ericvsmith) Date: Tue, 13 Apr 2021 01:02:10 -0000 Subject: [Python-checkins] Remove an unnecessary copy of the 'namespace' parameter to make_dataclass(). (GH-25372) Message-ID: https://github.com/python/cpython/commit/c1a66bdd6f884e2ec813891c5c7e2b1ceeede8f1 commit: c1a66bdd6f884e2ec813891c5c7e2b1ceeede8f1 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-12T21:02:02-04:00 summary: Remove an unnecessary copy of the 'namespace' parameter to make_dataclass(). (GH-25372) files: A Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst M Lib/dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index e8eb2060f6df1..3ccfbbd92035a 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1233,14 +1233,12 @@ class C(Base): if namespace is None: namespace = {} - else: - # Copy namespace since we're going to mutate it. - namespace = namespace.copy() # While we're looking through the field names, validate that they # are identifiers, are not keywords, and not duplicates. seen = set() - anns = {} + annotations = {} + defaults = {} for item in fields: if isinstance(item, str): name = item @@ -1249,7 +1247,7 @@ class C(Base): name, tp, = item elif len(item) == 3: name, tp, spec = item - namespace[name] = spec + defaults[name] = spec else: raise TypeError(f'Invalid field: {item!r}') @@ -1261,12 +1259,19 @@ class C(Base): raise TypeError(f'Field name duplicated: {name!r}') seen.add(name) - anns[name] = tp + annotations[name] = tp + + # Update 'ns' with the user-supplied namespace plus our calculated values. + def exec_body_callback(ns): + ns.update(namespace) + ns.update(defaults) + ns['__annotations__'] = annotations - namespace['__annotations__'] = anns # We use `types.new_class()` instead of simply `type()` to allow dynamic creation # of generic dataclassses. - cls = types.new_class(cls_name, bases, {}, lambda ns: ns.update(namespace)) + cls = types.new_class(cls_name, bases, {}, exec_body_callback) + + # Apply the normal decorator. return dataclass(cls, init=init, repr=repr, eq=eq, order=order, unsafe_hash=unsafe_hash, frozen=frozen, match_args=match_args) diff --git a/Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst b/Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst new file mode 100644 index 0000000000000..2c870ac8b97de --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst @@ -0,0 +1,2 @@ +Remove an unneeded copy of the namespace passed to +dataclasses.make_dataclass(). From webhook-mailer at python.org Mon Apr 12 21:32:44 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 13 Apr 2021 01:32:44 -0000 Subject: [Python-checkins] Ensure that early = are not matched by the parser as invalid comparisons (GH-25375) Message-ID: https://github.com/python/cpython/commit/d9151cb45371836d39b6d53afb50c5bcd353c661 commit: d9151cb45371836d39b6d53afb50c5bcd353c661 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-13T02:32:33+01:00 summary: Ensure that early = are not matched by the parser as invalid comparisons (GH-25375) files: M Grammar/python.gram M Lib/test/test_syntax.py M Parser/parser.c diff --git a/Grammar/python.gram b/Grammar/python.gram index 324793c88af2a..8524a1206b054 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -447,6 +447,10 @@ named_expression[expr_ty]: | invalid_named_expression | expression !':=' +direct_named_expression[expr_ty]: + | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) } + | expression !':=' + annotated_rhs[expr_ty]: yield_expr | star_expressions expressions[expr_ty]: @@ -671,7 +675,7 @@ arguments[expr_ty] (memo): | a=args [','] &')' { a } | invalid_arguments args[expr_ty]: - | a[asdl_expr_seq*]=','.(starred_expression | named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) } + | a[asdl_expr_seq*]=','.(starred_expression | direct_named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) } | a=kwargs { _PyAST_Call(_PyPegen_dummy_name(p), CHECK_NULL_ALLOWED(asdl_expr_seq*, _PyPegen_seq_extract_starred_exprs(p, a)), CHECK_NULL_ALLOWED(asdl_keyword_seq*, _PyPegen_seq_delete_starred_exprs(p, a)), diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 78b11c9335121..0e6942f6a6fa2 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -863,6 +863,11 @@ Traceback (most recent call last): SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? +Ensure that early = are not matched by the parser as invalid comparisons + >>> f(2, 4, x=34); {1,2 a} + Traceback (most recent call last): + SyntaxError: invalid syntax + Make sure that the old "raise X, Y[, Z]" form is gone: >>> raise X, Y Traceback (most recent call last): diff --git a/Parser/parser.c b/Parser/parser.c index 099186e623260..38bab96ae3981 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -159,299 +159,300 @@ static KeywordToken *reserved_keywords[] = { #define star_named_expressions_type 1091 #define star_named_expression_type 1092 #define named_expression_type 1093 -#define annotated_rhs_type 1094 -#define expressions_type 1095 -#define expression_type 1096 -#define lambdef_type 1097 -#define lambda_params_type 1098 -#define lambda_parameters_type 1099 -#define lambda_slash_no_default_type 1100 -#define lambda_slash_with_default_type 1101 -#define lambda_star_etc_type 1102 -#define lambda_kwds_type 1103 -#define lambda_param_no_default_type 1104 -#define lambda_param_with_default_type 1105 -#define lambda_param_maybe_default_type 1106 -#define lambda_param_type 1107 -#define disjunction_type 1108 -#define conjunction_type 1109 -#define inversion_type 1110 -#define comparison_type 1111 -#define compare_op_bitwise_or_pair_type 1112 -#define eq_bitwise_or_type 1113 -#define noteq_bitwise_or_type 1114 -#define lte_bitwise_or_type 1115 -#define lt_bitwise_or_type 1116 -#define gte_bitwise_or_type 1117 -#define gt_bitwise_or_type 1118 -#define notin_bitwise_or_type 1119 -#define in_bitwise_or_type 1120 -#define isnot_bitwise_or_type 1121 -#define is_bitwise_or_type 1122 -#define bitwise_or_type 1123 // Left-recursive -#define bitwise_xor_type 1124 // Left-recursive -#define bitwise_and_type 1125 // Left-recursive -#define shift_expr_type 1126 // Left-recursive -#define sum_type 1127 // Left-recursive -#define term_type 1128 // Left-recursive -#define factor_type 1129 -#define power_type 1130 -#define await_primary_type 1131 -#define primary_type 1132 // Left-recursive -#define slices_type 1133 -#define slice_type 1134 -#define atom_type 1135 -#define strings_type 1136 -#define list_type 1137 -#define listcomp_type 1138 -#define tuple_type 1139 -#define group_type 1140 -#define genexp_type 1141 -#define set_type 1142 -#define setcomp_type 1143 -#define dict_type 1144 -#define dictcomp_type 1145 -#define double_starred_kvpairs_type 1146 -#define double_starred_kvpair_type 1147 -#define kvpair_type 1148 -#define for_if_clauses_type 1149 -#define for_if_clause_type 1150 -#define yield_expr_type 1151 -#define arguments_type 1152 -#define args_type 1153 -#define kwargs_type 1154 -#define starred_expression_type 1155 -#define kwarg_or_starred_type 1156 -#define kwarg_or_double_starred_type 1157 -#define star_targets_type 1158 -#define star_targets_list_seq_type 1159 -#define star_targets_tuple_seq_type 1160 -#define star_target_type 1161 -#define target_with_star_atom_type 1162 -#define star_atom_type 1163 -#define single_target_type 1164 -#define single_subscript_attribute_target_type 1165 -#define del_targets_type 1166 -#define del_target_type 1167 -#define del_t_atom_type 1168 -#define targets_type 1169 -#define target_type 1170 -#define t_primary_type 1171 // Left-recursive -#define t_lookahead_type 1172 -#define t_atom_type 1173 -#define invalid_arguments_type 1174 -#define invalid_kwarg_type 1175 -#define invalid_named_expression_type 1176 -#define invalid_assignment_type 1177 -#define invalid_ann_assign_target_type 1178 -#define invalid_del_stmt_type 1179 -#define invalid_block_type 1180 -#define invalid_primary_type 1181 // Left-recursive -#define invalid_comprehension_type 1182 -#define invalid_dict_comprehension_type 1183 -#define invalid_parameters_type 1184 -#define invalid_parameters_helper_type 1185 -#define invalid_lambda_parameters_type 1186 -#define invalid_lambda_parameters_helper_type 1187 -#define invalid_star_etc_type 1188 -#define invalid_lambda_star_etc_type 1189 -#define invalid_double_type_comments_type 1190 -#define invalid_with_item_type 1191 -#define invalid_for_target_type 1192 -#define invalid_group_type 1193 -#define invalid_import_from_targets_type 1194 -#define invalid_with_stmt_type 1195 -#define invalid_except_block_type 1196 -#define invalid_match_stmt_type 1197 -#define invalid_case_block_type 1198 -#define invalid_if_stmt_type 1199 -#define invalid_elif_stmt_type 1200 -#define invalid_while_stmt_type 1201 -#define _loop0_1_type 1202 -#define _loop0_2_type 1203 -#define _loop0_4_type 1204 -#define _gather_3_type 1205 -#define _loop0_6_type 1206 -#define _gather_5_type 1207 -#define _loop0_8_type 1208 -#define _gather_7_type 1209 -#define _loop0_10_type 1210 -#define _gather_9_type 1211 -#define _loop1_11_type 1212 -#define _loop0_13_type 1213 -#define _gather_12_type 1214 -#define _tmp_14_type 1215 -#define _tmp_15_type 1216 -#define _tmp_16_type 1217 -#define _tmp_17_type 1218 -#define _tmp_18_type 1219 -#define _tmp_19_type 1220 -#define _tmp_20_type 1221 -#define _tmp_21_type 1222 -#define _loop1_22_type 1223 -#define _tmp_23_type 1224 -#define _tmp_24_type 1225 -#define _loop0_26_type 1226 -#define _gather_25_type 1227 -#define _loop0_28_type 1228 -#define _gather_27_type 1229 -#define _tmp_29_type 1230 -#define _tmp_30_type 1231 -#define _loop0_31_type 1232 -#define _loop1_32_type 1233 -#define _loop0_34_type 1234 -#define _gather_33_type 1235 -#define _tmp_35_type 1236 -#define _loop0_37_type 1237 -#define _gather_36_type 1238 -#define _tmp_38_type 1239 -#define _loop0_40_type 1240 -#define _gather_39_type 1241 -#define _loop0_42_type 1242 -#define _gather_41_type 1243 -#define _loop0_44_type 1244 -#define _gather_43_type 1245 -#define _loop0_46_type 1246 -#define _gather_45_type 1247 -#define _tmp_47_type 1248 -#define _loop1_48_type 1249 -#define _tmp_49_type 1250 -#define _loop1_50_type 1251 -#define _loop0_52_type 1252 -#define _gather_51_type 1253 -#define _tmp_53_type 1254 -#define _tmp_54_type 1255 -#define _tmp_55_type 1256 -#define _loop0_57_type 1257 -#define _gather_56_type 1258 -#define _tmp_58_type 1259 -#define _loop0_60_type 1260 -#define _gather_59_type 1261 -#define _tmp_61_type 1262 -#define _loop0_63_type 1263 -#define _gather_62_type 1264 -#define _loop0_65_type 1265 -#define _gather_64_type 1266 -#define _tmp_66_type 1267 -#define _tmp_67_type 1268 -#define _tmp_68_type 1269 -#define _tmp_69_type 1270 -#define _loop0_70_type 1271 -#define _loop0_71_type 1272 -#define _loop0_72_type 1273 -#define _loop1_73_type 1274 -#define _loop0_74_type 1275 -#define _loop1_75_type 1276 -#define _loop1_76_type 1277 -#define _loop1_77_type 1278 -#define _loop0_78_type 1279 -#define _loop1_79_type 1280 -#define _loop0_80_type 1281 -#define _loop1_81_type 1282 -#define _loop0_82_type 1283 -#define _loop1_83_type 1284 -#define _loop1_84_type 1285 -#define _tmp_85_type 1286 -#define _loop1_86_type 1287 -#define _loop0_88_type 1288 -#define _gather_87_type 1289 -#define _loop1_89_type 1290 -#define _loop0_90_type 1291 -#define _loop0_91_type 1292 -#define _loop0_92_type 1293 -#define _loop1_93_type 1294 -#define _loop0_94_type 1295 -#define _loop1_95_type 1296 -#define _loop1_96_type 1297 -#define _loop1_97_type 1298 -#define _loop0_98_type 1299 -#define _loop1_99_type 1300 -#define _loop0_100_type 1301 -#define _loop1_101_type 1302 -#define _loop0_102_type 1303 -#define _loop1_103_type 1304 -#define _loop1_104_type 1305 -#define _loop1_105_type 1306 -#define _loop1_106_type 1307 -#define _tmp_107_type 1308 -#define _loop0_109_type 1309 -#define _gather_108_type 1310 -#define _tmp_110_type 1311 -#define _tmp_111_type 1312 -#define _tmp_112_type 1313 -#define _tmp_113_type 1314 -#define _loop1_114_type 1315 -#define _tmp_115_type 1316 -#define _tmp_116_type 1317 -#define _loop0_118_type 1318 -#define _gather_117_type 1319 -#define _loop1_119_type 1320 -#define _loop0_120_type 1321 -#define _loop0_121_type 1322 -#define _loop0_123_type 1323 -#define _gather_122_type 1324 -#define _tmp_124_type 1325 -#define _loop0_126_type 1326 -#define _gather_125_type 1327 -#define _loop0_128_type 1328 -#define _gather_127_type 1329 -#define _loop0_130_type 1330 -#define _gather_129_type 1331 -#define _loop0_132_type 1332 -#define _gather_131_type 1333 -#define _loop0_133_type 1334 -#define _loop0_135_type 1335 -#define _gather_134_type 1336 -#define _loop1_136_type 1337 -#define _tmp_137_type 1338 -#define _loop0_139_type 1339 -#define _gather_138_type 1340 -#define _loop0_141_type 1341 -#define _gather_140_type 1342 -#define _tmp_142_type 1343 -#define _tmp_143_type 1344 -#define _tmp_144_type 1345 -#define _tmp_145_type 1346 -#define _loop0_146_type 1347 -#define _loop0_147_type 1348 -#define _loop0_148_type 1349 -#define _tmp_149_type 1350 -#define _tmp_150_type 1351 -#define _tmp_151_type 1352 -#define _loop0_152_type 1353 -#define _loop1_153_type 1354 -#define _loop0_154_type 1355 -#define _loop1_155_type 1356 -#define _tmp_156_type 1357 -#define _tmp_157_type 1358 -#define _tmp_158_type 1359 -#define _loop0_160_type 1360 -#define _gather_159_type 1361 -#define _loop0_162_type 1362 -#define _gather_161_type 1363 -#define _tmp_163_type 1364 -#define _tmp_164_type 1365 -#define _tmp_165_type 1366 -#define _tmp_166_type 1367 -#define _tmp_167_type 1368 -#define _tmp_168_type 1369 -#define _tmp_169_type 1370 -#define _tmp_170_type 1371 -#define _tmp_171_type 1372 -#define _tmp_172_type 1373 -#define _tmp_173_type 1374 -#define _tmp_174_type 1375 -#define _tmp_175_type 1376 -#define _tmp_176_type 1377 -#define _tmp_177_type 1378 -#define _tmp_178_type 1379 -#define _tmp_179_type 1380 -#define _tmp_180_type 1381 -#define _tmp_181_type 1382 -#define _tmp_182_type 1383 -#define _tmp_183_type 1384 -#define _tmp_184_type 1385 -#define _tmp_185_type 1386 +#define direct_named_expression_type 1094 +#define annotated_rhs_type 1095 +#define expressions_type 1096 +#define expression_type 1097 +#define lambdef_type 1098 +#define lambda_params_type 1099 +#define lambda_parameters_type 1100 +#define lambda_slash_no_default_type 1101 +#define lambda_slash_with_default_type 1102 +#define lambda_star_etc_type 1103 +#define lambda_kwds_type 1104 +#define lambda_param_no_default_type 1105 +#define lambda_param_with_default_type 1106 +#define lambda_param_maybe_default_type 1107 +#define lambda_param_type 1108 +#define disjunction_type 1109 +#define conjunction_type 1110 +#define inversion_type 1111 +#define comparison_type 1112 +#define compare_op_bitwise_or_pair_type 1113 +#define eq_bitwise_or_type 1114 +#define noteq_bitwise_or_type 1115 +#define lte_bitwise_or_type 1116 +#define lt_bitwise_or_type 1117 +#define gte_bitwise_or_type 1118 +#define gt_bitwise_or_type 1119 +#define notin_bitwise_or_type 1120 +#define in_bitwise_or_type 1121 +#define isnot_bitwise_or_type 1122 +#define is_bitwise_or_type 1123 +#define bitwise_or_type 1124 // Left-recursive +#define bitwise_xor_type 1125 // Left-recursive +#define bitwise_and_type 1126 // Left-recursive +#define shift_expr_type 1127 // Left-recursive +#define sum_type 1128 // Left-recursive +#define term_type 1129 // Left-recursive +#define factor_type 1130 +#define power_type 1131 +#define await_primary_type 1132 +#define primary_type 1133 // Left-recursive +#define slices_type 1134 +#define slice_type 1135 +#define atom_type 1136 +#define strings_type 1137 +#define list_type 1138 +#define listcomp_type 1139 +#define tuple_type 1140 +#define group_type 1141 +#define genexp_type 1142 +#define set_type 1143 +#define setcomp_type 1144 +#define dict_type 1145 +#define dictcomp_type 1146 +#define double_starred_kvpairs_type 1147 +#define double_starred_kvpair_type 1148 +#define kvpair_type 1149 +#define for_if_clauses_type 1150 +#define for_if_clause_type 1151 +#define yield_expr_type 1152 +#define arguments_type 1153 +#define args_type 1154 +#define kwargs_type 1155 +#define starred_expression_type 1156 +#define kwarg_or_starred_type 1157 +#define kwarg_or_double_starred_type 1158 +#define star_targets_type 1159 +#define star_targets_list_seq_type 1160 +#define star_targets_tuple_seq_type 1161 +#define star_target_type 1162 +#define target_with_star_atom_type 1163 +#define star_atom_type 1164 +#define single_target_type 1165 +#define single_subscript_attribute_target_type 1166 +#define del_targets_type 1167 +#define del_target_type 1168 +#define del_t_atom_type 1169 +#define targets_type 1170 +#define target_type 1171 +#define t_primary_type 1172 // Left-recursive +#define t_lookahead_type 1173 +#define t_atom_type 1174 +#define invalid_arguments_type 1175 +#define invalid_kwarg_type 1176 +#define invalid_named_expression_type 1177 +#define invalid_assignment_type 1178 +#define invalid_ann_assign_target_type 1179 +#define invalid_del_stmt_type 1180 +#define invalid_block_type 1181 +#define invalid_primary_type 1182 // Left-recursive +#define invalid_comprehension_type 1183 +#define invalid_dict_comprehension_type 1184 +#define invalid_parameters_type 1185 +#define invalid_parameters_helper_type 1186 +#define invalid_lambda_parameters_type 1187 +#define invalid_lambda_parameters_helper_type 1188 +#define invalid_star_etc_type 1189 +#define invalid_lambda_star_etc_type 1190 +#define invalid_double_type_comments_type 1191 +#define invalid_with_item_type 1192 +#define invalid_for_target_type 1193 +#define invalid_group_type 1194 +#define invalid_import_from_targets_type 1195 +#define invalid_with_stmt_type 1196 +#define invalid_except_block_type 1197 +#define invalid_match_stmt_type 1198 +#define invalid_case_block_type 1199 +#define invalid_if_stmt_type 1200 +#define invalid_elif_stmt_type 1201 +#define invalid_while_stmt_type 1202 +#define _loop0_1_type 1203 +#define _loop0_2_type 1204 +#define _loop0_4_type 1205 +#define _gather_3_type 1206 +#define _loop0_6_type 1207 +#define _gather_5_type 1208 +#define _loop0_8_type 1209 +#define _gather_7_type 1210 +#define _loop0_10_type 1211 +#define _gather_9_type 1212 +#define _loop1_11_type 1213 +#define _loop0_13_type 1214 +#define _gather_12_type 1215 +#define _tmp_14_type 1216 +#define _tmp_15_type 1217 +#define _tmp_16_type 1218 +#define _tmp_17_type 1219 +#define _tmp_18_type 1220 +#define _tmp_19_type 1221 +#define _tmp_20_type 1222 +#define _tmp_21_type 1223 +#define _loop1_22_type 1224 +#define _tmp_23_type 1225 +#define _tmp_24_type 1226 +#define _loop0_26_type 1227 +#define _gather_25_type 1228 +#define _loop0_28_type 1229 +#define _gather_27_type 1230 +#define _tmp_29_type 1231 +#define _tmp_30_type 1232 +#define _loop0_31_type 1233 +#define _loop1_32_type 1234 +#define _loop0_34_type 1235 +#define _gather_33_type 1236 +#define _tmp_35_type 1237 +#define _loop0_37_type 1238 +#define _gather_36_type 1239 +#define _tmp_38_type 1240 +#define _loop0_40_type 1241 +#define _gather_39_type 1242 +#define _loop0_42_type 1243 +#define _gather_41_type 1244 +#define _loop0_44_type 1245 +#define _gather_43_type 1246 +#define _loop0_46_type 1247 +#define _gather_45_type 1248 +#define _tmp_47_type 1249 +#define _loop1_48_type 1250 +#define _tmp_49_type 1251 +#define _loop1_50_type 1252 +#define _loop0_52_type 1253 +#define _gather_51_type 1254 +#define _tmp_53_type 1255 +#define _tmp_54_type 1256 +#define _tmp_55_type 1257 +#define _loop0_57_type 1258 +#define _gather_56_type 1259 +#define _tmp_58_type 1260 +#define _loop0_60_type 1261 +#define _gather_59_type 1262 +#define _tmp_61_type 1263 +#define _loop0_63_type 1264 +#define _gather_62_type 1265 +#define _loop0_65_type 1266 +#define _gather_64_type 1267 +#define _tmp_66_type 1268 +#define _tmp_67_type 1269 +#define _tmp_68_type 1270 +#define _tmp_69_type 1271 +#define _loop0_70_type 1272 +#define _loop0_71_type 1273 +#define _loop0_72_type 1274 +#define _loop1_73_type 1275 +#define _loop0_74_type 1276 +#define _loop1_75_type 1277 +#define _loop1_76_type 1278 +#define _loop1_77_type 1279 +#define _loop0_78_type 1280 +#define _loop1_79_type 1281 +#define _loop0_80_type 1282 +#define _loop1_81_type 1283 +#define _loop0_82_type 1284 +#define _loop1_83_type 1285 +#define _loop1_84_type 1286 +#define _tmp_85_type 1287 +#define _loop1_86_type 1288 +#define _loop0_88_type 1289 +#define _gather_87_type 1290 +#define _loop1_89_type 1291 +#define _loop0_90_type 1292 +#define _loop0_91_type 1293 +#define _loop0_92_type 1294 +#define _loop1_93_type 1295 +#define _loop0_94_type 1296 +#define _loop1_95_type 1297 +#define _loop1_96_type 1298 +#define _loop1_97_type 1299 +#define _loop0_98_type 1300 +#define _loop1_99_type 1301 +#define _loop0_100_type 1302 +#define _loop1_101_type 1303 +#define _loop0_102_type 1304 +#define _loop1_103_type 1305 +#define _loop1_104_type 1306 +#define _loop1_105_type 1307 +#define _loop1_106_type 1308 +#define _tmp_107_type 1309 +#define _loop0_109_type 1310 +#define _gather_108_type 1311 +#define _tmp_110_type 1312 +#define _tmp_111_type 1313 +#define _tmp_112_type 1314 +#define _tmp_113_type 1315 +#define _loop1_114_type 1316 +#define _tmp_115_type 1317 +#define _tmp_116_type 1318 +#define _loop0_118_type 1319 +#define _gather_117_type 1320 +#define _loop1_119_type 1321 +#define _loop0_120_type 1322 +#define _loop0_121_type 1323 +#define _loop0_123_type 1324 +#define _gather_122_type 1325 +#define _tmp_124_type 1326 +#define _loop0_126_type 1327 +#define _gather_125_type 1328 +#define _loop0_128_type 1329 +#define _gather_127_type 1330 +#define _loop0_130_type 1331 +#define _gather_129_type 1332 +#define _loop0_132_type 1333 +#define _gather_131_type 1334 +#define _loop0_133_type 1335 +#define _loop0_135_type 1336 +#define _gather_134_type 1337 +#define _loop1_136_type 1338 +#define _tmp_137_type 1339 +#define _loop0_139_type 1340 +#define _gather_138_type 1341 +#define _loop0_141_type 1342 +#define _gather_140_type 1343 +#define _tmp_142_type 1344 +#define _tmp_143_type 1345 +#define _tmp_144_type 1346 +#define _tmp_145_type 1347 +#define _loop0_146_type 1348 +#define _loop0_147_type 1349 +#define _loop0_148_type 1350 +#define _tmp_149_type 1351 +#define _tmp_150_type 1352 +#define _tmp_151_type 1353 +#define _loop0_152_type 1354 +#define _loop1_153_type 1355 +#define _loop0_154_type 1356 +#define _loop1_155_type 1357 +#define _tmp_156_type 1358 +#define _tmp_157_type 1359 +#define _tmp_158_type 1360 +#define _loop0_160_type 1361 +#define _gather_159_type 1362 +#define _loop0_162_type 1363 +#define _gather_161_type 1364 +#define _tmp_163_type 1365 +#define _tmp_164_type 1366 +#define _tmp_165_type 1367 +#define _tmp_166_type 1368 +#define _tmp_167_type 1369 +#define _tmp_168_type 1370 +#define _tmp_169_type 1371 +#define _tmp_170_type 1372 +#define _tmp_171_type 1373 +#define _tmp_172_type 1374 +#define _tmp_173_type 1375 +#define _tmp_174_type 1376 +#define _tmp_175_type 1377 +#define _tmp_176_type 1378 +#define _tmp_177_type 1379 +#define _tmp_178_type 1380 +#define _tmp_179_type 1381 +#define _tmp_180_type 1382 +#define _tmp_181_type 1383 +#define _tmp_182_type 1384 +#define _tmp_183_type 1385 +#define _tmp_184_type 1386 +#define _tmp_185_type 1387 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -547,6 +548,7 @@ static expr_ty star_expression_rule(Parser *p); static asdl_expr_seq* star_named_expressions_rule(Parser *p); static expr_ty star_named_expression_rule(Parser *p); static expr_ty named_expression_rule(Parser *p); +static expr_ty direct_named_expression_rule(Parser *p); static expr_ty annotated_rhs_rule(Parser *p); static expr_ty expressions_rule(Parser *p); static expr_ty expression_rule(Parser *p); @@ -9397,6 +9399,99 @@ named_expression_rule(Parser *p) return _res; } +// direct_named_expression: NAME ':=' ~ expression | expression !':=' +static expr_ty +direct_named_expression_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // NAME ':=' ~ expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> direct_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression")); + int _cut_var = 0; + Token * _literal; + expr_ty a; + expr_ty b; + if ( + (a = _PyPegen_name_token(p)) // NAME + && + (_literal = _PyPegen_expect_token(p, 53)) // token=':=' + && + (_cut_var = 1) + && + (b = expression_rule(p)) // expression + ) + { + D(fprintf(stderr, "%*c+ direct_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s direct_named_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':=' ~ expression")); + if (_cut_var) { + D(p->level--); + return NULL; + } + } + { // expression !':=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> direct_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' + ) + { + D(fprintf(stderr, "%*c+ direct_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + _res = expression_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s direct_named_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + // annotated_rhs: yield_expr | star_expressions static expr_ty annotated_rhs_rule(Parser *p) @@ -14807,7 +14902,7 @@ arguments_rule(Parser *p) return _res; } -// args: ','.(starred_expression | named_expression !'=')+ [',' kwargs] | kwargs +// args: ','.(starred_expression | direct_named_expression !'=')+ [',' kwargs] | kwargs static expr_ty args_rule(Parser *p) { @@ -14827,21 +14922,21 @@ args_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // ','.(starred_expression | named_expression !'=')+ [',' kwargs] + { // ','.(starred_expression | direct_named_expression !'=')+ [',' kwargs] if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]")); + D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | direct_named_expression !'=')+ [',' kwargs]")); asdl_expr_seq* a; void *b; if ( - (a = (asdl_expr_seq*)_gather_122_rule(p)) // ','.(starred_expression | named_expression !'=')+ + (a = (asdl_expr_seq*)_gather_122_rule(p)) // ','.(starred_expression | direct_named_expression !'=')+ && (b = _tmp_124_rule(p), 1) // [',' kwargs] ) { - D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]")); + D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | direct_named_expression !'=')+ [',' kwargs]")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14861,7 +14956,7 @@ args_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | direct_named_expression !'=')+ [',' kwargs]")); } { // kwargs if (p->error_indicator) { @@ -26406,7 +26501,7 @@ _loop0_121_rule(Parser *p) return _seq; } -// _loop0_123: ',' (starred_expression | named_expression !'=') +// _loop0_123: ',' (starred_expression | direct_named_expression !'=') static asdl_seq * _loop0_123_rule(Parser *p) { @@ -26427,18 +26522,18 @@ _loop0_123_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' (starred_expression | named_expression !'=') + { // ',' (starred_expression | direct_named_expression !'=') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | named_expression !'=')")); + D(fprintf(stderr, "%*c> _loop0_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | direct_named_expression !'=')")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_175_rule(p)) // starred_expression | named_expression !'=' + (elem = _tmp_175_rule(p)) // starred_expression | direct_named_expression !'=' ) { _res = elem; @@ -26464,7 +26559,7 @@ _loop0_123_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_123[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | named_expression !'=')")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | direct_named_expression !'=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -26481,7 +26576,7 @@ _loop0_123_rule(Parser *p) return _seq; } -// _gather_122: (starred_expression | named_expression !'=') _loop0_123 +// _gather_122: (starred_expression | direct_named_expression !'=') _loop0_123 static asdl_seq * _gather_122_rule(Parser *p) { @@ -26492,27 +26587,27 @@ _gather_122_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (starred_expression | named_expression !'=') _loop0_123 + { // (starred_expression | direct_named_expression !'=') _loop0_123 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_123")); + D(fprintf(stderr, "%*c> _gather_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | direct_named_expression !'=') _loop0_123")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_175_rule(p)) // starred_expression | named_expression !'=' + (elem = _tmp_175_rule(p)) // starred_expression | direct_named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) { - D(fprintf(stderr, "%*c+ _gather_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_123")); + D(fprintf(stderr, "%*c+ _gather_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | direct_named_expression !'=') _loop0_123")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_122[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_123")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | direct_named_expression !'=') _loop0_123")); } _res = NULL; done: @@ -29491,7 +29586,7 @@ _tmp_174_rule(Parser *p) return _res; } -// _tmp_175: starred_expression | named_expression !'=' +// _tmp_175: starred_expression | direct_named_expression !'=' static void * _tmp_175_rule(Parser *p) { @@ -29521,26 +29616,26 @@ _tmp_175_rule(Parser *p) D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } - { // named_expression !'=' + { // direct_named_expression !'=' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); - expr_ty named_expression_var; + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + expr_ty direct_named_expression_var; if ( - (named_expression_var = named_expression_rule(p)) // named_expression + (direct_named_expression_var = direct_named_expression_rule(p)) // direct_named_expression && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression !'='")); - _res = named_expression_var; + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + _res = direct_named_expression_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression !'='")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "direct_named_expression !'='")); } _res = NULL; done: From webhook-mailer at python.org Tue Apr 13 00:51:57 2021 From: webhook-mailer at python.org (methane) Date: Tue, 13 Apr 2021 04:51:57 -0000 Subject: [Python-checkins] bpo-43787: Add __iter__ to GzipFile, BZ2File, and LZMAFile (GH-25353) Message-ID: https://github.com/python/cpython/commit/d2a8e69c2c605fbaa3656a5f99aa8d295f74c80e commit: d2a8e69c2c605fbaa3656a5f99aa8d295f74c80e branch: master author: Inada Naoki committer: methane date: 2021-04-13T13:51:49+09:00 summary: bpo-43787: Add __iter__ to GzipFile, BZ2File, and LZMAFile (GH-25353) files: A Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst M Lib/bz2.py M Lib/gzip.py M Lib/lzma.py diff --git a/Lib/bz2.py b/Lib/bz2.py index 43f321ae85239..a2c588e7487f3 100644 --- a/Lib/bz2.py +++ b/Lib/bz2.py @@ -197,6 +197,10 @@ def readline(self, size=-1): self._check_can_read() return self._buffer.readline(size) + def __iter__(self): + self._check_can_read() + return self._buffer.__iter__() + def readlines(self, size=-1): """Read a list of lines of uncompressed bytes from the file. diff --git a/Lib/gzip.py b/Lib/gzip.py index 0a8993ba35471..9a4e0f9c00c58 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -398,6 +398,10 @@ def readline(self, size=-1): self._check_not_closed() return self._buffer.readline(size) + def __iter__(self): + self._check_not_closed() + return self._buffer.__iter__() + class _GzipReader(_compression.DecompressReader): def __init__(self, fp): diff --git a/Lib/lzma.py b/Lib/lzma.py index c8b197055cddc..2ada7d81d3c81 100644 --- a/Lib/lzma.py +++ b/Lib/lzma.py @@ -221,6 +221,10 @@ def readline(self, size=-1): self._check_can_read() return self._buffer.readline(size) + def __iter__(self): + self._check_can_read() + return self._buffer.__iter__() + def write(self, data): """Write a bytes object to the file. diff --git a/Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst b/Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst new file mode 100644 index 0000000000000..9b8d945cbb8a8 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst @@ -0,0 +1,3 @@ +Add ``__iter__()`` method to :class:`bz2.BZ2File`, :class:`gzip.GzipFile`, and +:class:`lzma.LZMAFile`. It makes iterating them about 2x faster. Patch by +Inada Naoki. From webhook-mailer at python.org Tue Apr 13 02:17:35 2021 From: webhook-mailer at python.org (tiran) Date: Tue, 13 Apr 2021 06:17:35 -0000 Subject: [Python-checkins] bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) Message-ID: https://github.com/python/cpython/commit/a4833883c9b81b6b272cc7c5b67fa1658b65304c commit: a4833883c9b81b6b272cc7c5b67fa1658b65304c branch: master author: Christian Heimes committer: tiran date: 2021-04-13T08:17:26+02:00 summary: bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst M Modules/_hashopenssl.c M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst new file mode 100644 index 0000000000000..bd79519015c7a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index ef927abf4859f..272df354e6702 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -11,20 +11,26 @@ * */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" #include "hashlib.h" #include "pystrhex.h" - /* EVP is the preferred interface to hashing in OpenSSL */ #include #include #include /* We use the object interface to discover what hashes OpenSSL supports. */ #include -#include "openssl/err.h" +#include #include // FIPS_mode() @@ -1862,12 +1868,11 @@ _hashlib_get_fips_mode_impl(PyObject *module) /*[clinic end generated code: output=87eece1bab4d3fa9 input=2db61538c41c6fef]*/ { - int result; #if OPENSSL_VERSION_NUMBER >= 0x30000000L - result = EVP_default_properties_is_fips_enabled(NULL); + return EVP_default_properties_is_fips_enabled(NULL); #else ERR_clear_error(); - result = FIPS_mode(); + int result = FIPS_mode(); if (result == 0) { // "If the library was built without support of the FIPS Object Module, // then the function will return 0 with an error code of diff --git a/Modules/_ssl.c b/Modules/_ssl.c index c08665be295fa..d2b257e1ff462 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -14,6 +14,13 @@ http://bugs.python.org/issue8108#msg102867 ? */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -43,14 +50,6 @@ static PySocketModule_APIObject PySocketModule; #include #endif -/* Don't warn about deprecated functions */ -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#endif - /* Include OpenSSL header files */ #include "openssl/rsa.h" #include "openssl/crypto.h" @@ -148,24 +147,20 @@ static void _PySSLFixErrno(void) { # define PY_OPENSSL_1_1_API 1 #endif -/* OpenSSL API compat */ -#ifdef OPENSSL_API_COMPAT -#if OPENSSL_API_COMPAT >= 0x10100000L - -/* OpenSSL API 1.1.0+ does not include version methods */ +/* OpenSSL API 1.1.0+ does not include version methods. Define the methods + * unless OpenSSL is compiled without the methods. It's the easiest way to + * make 1.0.2, 1.1.0, 1.1.1, and 3.0.0 happy without deprecation warnings. + */ #ifndef OPENSSL_NO_TLS1_METHOD -#define OPENSSL_NO_TLS1_METHOD 1 +extern const SSL_METHOD *TLSv1_method(void); #endif #ifndef OPENSSL_NO_TLS1_1_METHOD -#define OPENSSL_NO_TLS1_1_METHOD 1 +extern const SSL_METHOD *TLSv1_1_method(void); #endif #ifndef OPENSSL_NO_TLS1_2_METHOD -#define OPENSSL_NO_TLS1_2_METHOD 1 +extern const SSL_METHOD *TLSv1_2_method(void); #endif -#endif /* >= 1.1.0 compcat */ -#endif /* OPENSSL_API_COMPAT */ - /* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ #if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL # define PY_OPENSSL_1_1_API 1 From webhook-mailer at python.org Tue Apr 13 02:41:09 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 13 Apr 2021 06:41:09 -0000 Subject: [Python-checkins] [3.9] bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) (GH-25382) Message-ID: https://github.com/python/cpython/commit/7d9d5bf863bb0af26b74b0732ab89b2053d2fbec commit: 7d9d5bf863bb0af26b74b0732ab89b2053d2fbec branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-12T23:40:52-07:00 summary: [3.9] bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) (GH-25382) Signed-off-by: Christian Heimes (cherry picked from commit a4833883c9b81b6b272cc7c5b67fa1658b65304c) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst M Modules/_hashopenssl.c M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst new file mode 100644 index 0000000000000..bd79519015c7a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index adc8653773250..0dd16621013fa 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -11,20 +11,26 @@ * */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" #include "hashlib.h" #include "pystrhex.h" - /* EVP is the preferred interface to hashing in OpenSSL */ #include #include #include /* We use the object interface to discover what hashes OpenSSL supports. */ #include -#include "openssl/err.h" +#include #include // FIPS_mode() @@ -1811,12 +1817,11 @@ _hashlib_get_fips_mode_impl(PyObject *module) /*[clinic end generated code: output=87eece1bab4d3fa9 input=2db61538c41c6fef]*/ { - int result; #if OPENSSL_VERSION_NUMBER >= 0x30000000L - result = EVP_default_properties_is_fips_enabled(NULL); + return EVP_default_properties_is_fips_enabled(NULL); #else ERR_clear_error(); - result = FIPS_mode(); + int result = FIPS_mode(); if (result == 0) { // "If the library was built without support of the FIPS Object Module, // then the function will return 0 with an error code of diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4ff948e2ab174..4c63dac3d7cfd 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -14,6 +14,13 @@ http://bugs.python.org/issue8108#msg102867 ? */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -43,14 +50,6 @@ static PySocketModule_APIObject PySocketModule; #include #endif -/* Don't warn about deprecated functions */ -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#endif - /* Include OpenSSL header files */ #include "openssl/rsa.h" #include "openssl/crypto.h" @@ -148,24 +147,20 @@ static void _PySSLFixErrno(void) { # define PY_OPENSSL_1_1_API 1 #endif -/* OpenSSL API compat */ -#ifdef OPENSSL_API_COMPAT -#if OPENSSL_API_COMPAT >= 0x10100000L - -/* OpenSSL API 1.1.0+ does not include version methods */ +/* OpenSSL API 1.1.0+ does not include version methods. Define the methods + * unless OpenSSL is compiled without the methods. It's the easiest way to + * make 1.0.2, 1.1.0, 1.1.1, and 3.0.0 happy without deprecation warnings. + */ #ifndef OPENSSL_NO_TLS1_METHOD -#define OPENSSL_NO_TLS1_METHOD 1 +extern const SSL_METHOD *TLSv1_method(void); #endif #ifndef OPENSSL_NO_TLS1_1_METHOD -#define OPENSSL_NO_TLS1_1_METHOD 1 +extern const SSL_METHOD *TLSv1_1_method(void); #endif #ifndef OPENSSL_NO_TLS1_2_METHOD -#define OPENSSL_NO_TLS1_2_METHOD 1 +extern const SSL_METHOD *TLSv1_2_method(void); #endif -#endif /* >= 1.1.0 compcat */ -#endif /* OPENSSL_API_COMPAT */ - /* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ #if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL # define PY_OPENSSL_1_1_API 1 From webhook-mailer at python.org Tue Apr 13 03:09:30 2021 From: webhook-mailer at python.org (tiran) Date: Tue, 13 Apr 2021 07:09:30 -0000 Subject: [Python-checkins] [3.8] bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) (GH-25383) Message-ID: https://github.com/python/cpython/commit/b71aaa0df0f3a9640b034b4774651cd8c54d2fb9 commit: b71aaa0df0f3a9640b034b4774651cd8c54d2fb9 branch: 3.8 author: Christian Heimes committer: tiran date: 2021-04-13T09:09:22+02:00 summary: [3.8] bpo-43799: OpenSSL 3.0.0: declare OPENSSL_API_COMPAT 1.1.1 (GH-25329) (GH-25383) Signed-off-by: Christian Heimes . (cherry picked from commit a4833883c9b81b6b272cc7c5b67fa1658b65304c) files: A Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst M Modules/_hashopenssl.c M Modules/_ssl.c diff --git a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst new file mode 100644 index 0000000000000..bd79519015c7a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index edadbcb3933c1..93bf25fee3433 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -11,6 +11,13 @@ * */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -24,7 +31,7 @@ #include /* We use the object interface to discover what hashes OpenSSL supports. */ #include -#include "openssl/err.h" +#include #ifndef OPENSSL_THREADS # error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL" diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 0475e26751ea6..ac502a9289396 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -14,6 +14,13 @@ http://bugs.python.org/issue8108#msg102867 ? */ +/* Don't warn about deprecated functions, */ +#ifndef OPENSSL_API_COMPAT + // 0x10101000L == 1.1.1, 30000 == 3.0.0 + #define OPENSSL_API_COMPAT 0x10101000L +#endif +#define OPENSSL_NO_DEPRECATED 1 + #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -45,14 +52,6 @@ static PySocketModule_APIObject PySocketModule; #include #endif -/* Don't warn about deprecated functions */ -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#endif - /* Include OpenSSL header files */ #include "openssl/rsa.h" #include "openssl/crypto.h" @@ -150,24 +149,20 @@ static void _PySSLFixErrno(void) { # define PY_OPENSSL_1_1_API 1 #endif -/* OpenSSL API compat */ -#ifdef OPENSSL_API_COMPAT -#if OPENSSL_API_COMPAT >= 0x10100000L - -/* OpenSSL API 1.1.0+ does not include version methods */ +/* OpenSSL API 1.1.0+ does not include version methods. Define the methods + * unless OpenSSL is compiled without the methods. It's the easiest way to + * make 1.0.2, 1.1.0, 1.1.1, and 3.0.0 happy without deprecation warnings. + */ #ifndef OPENSSL_NO_TLS1_METHOD -#define OPENSSL_NO_TLS1_METHOD 1 +extern const SSL_METHOD *TLSv1_method(void); #endif #ifndef OPENSSL_NO_TLS1_1_METHOD -#define OPENSSL_NO_TLS1_1_METHOD 1 +extern const SSL_METHOD *TLSv1_1_method(void); #endif #ifndef OPENSSL_NO_TLS1_2_METHOD -#define OPENSSL_NO_TLS1_2_METHOD 1 +extern const SSL_METHOD *TLSv1_2_method(void); #endif -#endif /* >= 1.1.0 compcat */ -#endif /* OPENSSL_API_COMPAT */ - /* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ #if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL # define PY_OPENSSL_1_1_API 1 From webhook-mailer at python.org Tue Apr 13 05:17:33 2021 From: webhook-mailer at python.org (methane) Date: Tue, 13 Apr 2021 09:17:33 -0000 Subject: [Python-checkins] bpo-43731: Add an `encoding` parameter to logging.fileConfig() (GH-25273) Message-ID: https://github.com/python/cpython/commit/c2b7a66b91cdb96fbfdb160f96797208ddc5e436 commit: c2b7a66b91cdb96fbfdb160f96797208ddc5e436 branch: master author: Inada Naoki committer: methane date: 2021-04-13T18:17:03+09:00 summary: bpo-43731: Add an `encoding` parameter to logging.fileConfig() (GH-25273) files: A Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst M Doc/library/logging.config.rst M Lib/logging/config.py diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst index cab49f6072f35..f833bcdd1fcf5 100644 --- a/Doc/library/logging.config.rst +++ b/Doc/library/logging.config.rst @@ -77,7 +77,7 @@ in :mod:`logging` itself) and defining handlers which are declared either in .. versionadded:: 3.2 -.. function:: fileConfig(fname, defaults=None, disable_existing_loggers=True) +.. function:: fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None) Reads the logging configuration from a :mod:`configparser`\-format file. The format of the file should be as described in @@ -111,6 +111,8 @@ in :mod:`logging` itself) and defining handlers which are declared either in they or their ancestors are explicitly named in the logging configuration. + :param encoding: The encoding used to open file when *fname* is filename. + .. versionchanged:: 3.4 An instance of a subclass of :class:`~configparser.RawConfigParser` is now accepted as a value for ``fname``. This facilitates: @@ -121,6 +123,9 @@ in :mod:`logging` itself) and defining handlers which are declared either in application (e.g. based on command-line parameters or other aspects of the runtime environment) before being passed to ``fileConfig``. + .. versionadded:: 3.10 + The *encoding* parameter is added. + .. function:: listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None) Starts up a socket server on the specified port, and listens for new diff --git a/Lib/logging/config.py b/Lib/logging/config.py index fd3aded7608cb..3bc63b78621ab 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -48,7 +48,7 @@ # _listener holds the server object doing the listening _listener = None -def fileConfig(fname, defaults=None, disable_existing_loggers=True): +def fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None): """ Read the logging configuration from a ConfigParser-format file. @@ -66,7 +66,8 @@ def fileConfig(fname, defaults=None, disable_existing_loggers=True): if hasattr(fname, 'readline'): cp.read_file(fname) else: - cp.read(fname) + encoding = io.text_encoding(encoding) + cp.read(fname, encoding=encoding) formatters = _create_formatters(cp) diff --git a/Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst b/Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst new file mode 100644 index 0000000000000..e5309c92fddba --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst @@ -0,0 +1 @@ +Add an ``encoding`` parameter :func:`logging.fileConfig()`. From webhook-mailer at python.org Tue Apr 13 06:08:32 2021 From: webhook-mailer at python.org (markshannon) Date: Tue, 13 Apr 2021 10:08:32 -0000 Subject: [Python-checkins] bpo-43760: Speed up check for tracing in interpreter dispatch (#25276) Message-ID: https://github.com/python/cpython/commit/9e7b2076fb4380987ad0262c4c0ca900b06475ad commit: 9e7b2076fb4380987ad0262c4c0ca900b06475ad branch: master author: Mark Shannon committer: markshannon date: 2021-04-13T11:08:14+01:00 summary: bpo-43760: Speed up check for tracing in interpreter dispatch (#25276) * Remove redundant tracing_possible field from interpreter state. * Move 'use_tracing' from tstate onto C stack, for fastest possible checking in dispatch logic. * Add comments stressing the importance stack discipline when dealing with CFrames. * Add NEWS files: A Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst M Include/cpython/pystate.h M Include/internal/pycore_interp.h M Python/ceval.c M Python/pystate.c M Python/sysmodule.c diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index cfaee890f9715..e3ccc54356084 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -29,6 +29,21 @@ typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *); #define PyTrace_OPCODE 7 +typedef struct _cframe { + /* This struct will be threaded through the C stack + * allowing fast access to per-thread state that needs + * to be accessed quickly by the interpreter, but can + * be modified outside of the interpreter. + * + * WARNING: This makes data on the C stack accessible from + * heap objects. Care must be taken to maintain stack + * discipline and make sure that instances of this struct cannot + * accessed outside of their lifetime. + */ + int use_tracing; + struct _cframe *previous; +} CFrame; + typedef struct _err_stackitem { /* This struct represents an entry on the exception stack, which is a * per-coroutine state. (Coroutine in the computer science sense, @@ -61,7 +76,10 @@ struct _ts { This is to prevent the actual trace/profile code from being recorded in the trace/profile. */ int tracing; - int use_tracing; + + /* Pointer to current CFrame in the C stack frame of the currently, + * or most recently, executing _PyEval_EvalFrameDefault. */ + CFrame *cframe; Py_tracefunc c_profilefunc; Py_tracefunc c_tracefunc; @@ -129,6 +147,8 @@ struct _ts { /* Unique thread state id. */ uint64_t id; + CFrame root_cframe; + /* XXX signal handlers should also be here */ }; diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index fa0e26feb0f84..dbdd109bd7883 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -33,12 +33,6 @@ struct _pending_calls { struct _ceval_state { int recursion_limit; - /* Records whether tracing is on for any thread. Counts the number - of threads for which tstate->c_tracefunc is non-NULL, so if the - value is 0, we know we don't have to check this thread's - c_tracefunc. This speeds up the if statement in - _PyEval_EvalFrameDefault() after fast_next_opcode. */ - int tracing_possible; /* This single variable consolidates all requests to break out of the fast path in the eval loop. */ _Py_atomic_int eval_breaker; diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst new file mode 100644 index 0000000000000..e6612103d807e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst @@ -0,0 +1,2 @@ +Move the flag for checking whether tracing is enabled to the C stack, from the heap. +Should speed up dispatch in the interpreter. diff --git a/Python/ceval.c b/Python/ceval.c index c12116044b54e..53b596b304c21 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -37,6 +37,7 @@ typedef struct { PyCodeObject *code; // The code object for the bounds. May be NULL. int instr_prev; // Only valid if code != NULL. PyCodeAddressRange bounds; // Only valid if code != NULL. + CFrame cframe; } PyTraceInfo; @@ -1109,8 +1110,6 @@ match_class(PyThreadState *tstate, PyObject *subject, PyObject *type, static int do_raise(PyThreadState *tstate, PyObject *exc, PyObject *cause); static int unpack_iterable(PyThreadState *, PyObject *, int, int, PyObject **); -#define _Py_TracingPossible(ceval) ((ceval)->tracing_possible) - PyObject * PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals) @@ -1307,7 +1306,7 @@ eval_frame_handle_pending(PyThreadState *tstate) #define DISPATCH() \ { \ - if (_Py_TracingPossible(ceval2) OR_DTRACE_LINE OR_LLTRACE) { \ + if (trace_info.cframe.use_tracing OR_DTRACE_LINE OR_LLTRACE) { \ goto tracing_dispatch; \ } \ f->f_lasti = INSTR_OFFSET(); \ @@ -1595,8 +1594,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) int oparg; /* Current opcode argument, if any */ PyObject **fastlocals, **freevars; PyObject *retval = NULL; /* Return value */ - struct _ceval_state * const ceval2 = &tstate->interp->ceval; - _Py_atomic_int * const eval_breaker = &ceval2->eval_breaker; + _Py_atomic_int * const eval_breaker = &tstate->interp->ceval.eval_breaker; PyCodeObject *co; const _Py_CODEUNIT *first_instr; @@ -1616,11 +1614,20 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) /* Mark trace_info as uninitialized */ trace_info.code = NULL; + /* WARNING: Because the CFrame lives on the C stack, + * but can be accessed from a heap allocated object (tstate) + * strict stack discipline must be maintained. + */ + CFrame *prev_cframe = tstate->cframe; + trace_info.cframe.use_tracing = prev_cframe->use_tracing; + trace_info.cframe.previous = prev_cframe; + tstate->cframe = &trace_info.cframe; + /* push frame */ tstate->frame = f; co = f->f_code; - if (tstate->use_tracing) { + if (trace_info.cframe.use_tracing) { if (tstate->c_tracefunc != NULL) { /* tstate->c_tracefunc, if defined, is a function that will be called on *every* entry @@ -1782,7 +1789,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) /* line-by-line tracing support */ - if (_Py_TracingPossible(ceval2) && + if (trace_info.cframe.use_tracing && tstate->c_tracefunc != NULL && !tstate->tracing) { int err; /* see maybe_call_line_trace() @@ -4543,7 +4550,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) PUSH(val); PUSH(exc); JUMPTO(handler); - if (_Py_TracingPossible(ceval2)) { + if (trace_info.cframe.use_tracing) { trace_info.instr_prev = INT_MAX; } /* Resume normal execution */ @@ -4567,7 +4574,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) f->f_stackdepth = 0; f->f_state = FRAME_RAISED; exiting: - if (tstate->use_tracing) { + if (trace_info.cframe.use_tracing) { if (tstate->c_tracefunc) { if (call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj, tstate, f, &trace_info, PyTrace_RETURN, retval)) { @@ -4584,6 +4591,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) /* pop frame */ exit_eval_frame: + /* Restore previous cframe */ + tstate->cframe = trace_info.cframe.previous; + tstate->cframe->use_tracing = trace_info.cframe.use_tracing; + if (PyDTrace_FUNCTION_RETURN_ENABLED()) dtrace_function_return(f); _Py_LeaveRecursiveCall(tstate); @@ -5507,7 +5518,7 @@ call_trace(Py_tracefunc func, PyObject *obj, if (tstate->tracing) return 0; tstate->tracing++; - tstate->use_tracing = 0; + tstate->cframe->use_tracing = 0; if (frame->f_lasti < 0) { frame->f_lineno = frame->f_code->co_firstlineno; } @@ -5517,7 +5528,7 @@ call_trace(Py_tracefunc func, PyObject *obj, } result = func(obj, frame, what, arg); frame->f_lineno = 0; - tstate->use_tracing = ((tstate->c_tracefunc != NULL) + tstate->cframe->use_tracing = ((tstate->c_tracefunc != NULL) || (tstate->c_profilefunc != NULL)); tstate->tracing--; return result; @@ -5528,15 +5539,15 @@ _PyEval_CallTracing(PyObject *func, PyObject *args) { PyThreadState *tstate = _PyThreadState_GET(); int save_tracing = tstate->tracing; - int save_use_tracing = tstate->use_tracing; + int save_use_tracing = tstate->cframe->use_tracing; PyObject *result; tstate->tracing = 0; - tstate->use_tracing = ((tstate->c_tracefunc != NULL) + tstate->cframe->use_tracing = ((tstate->c_tracefunc != NULL) || (tstate->c_profilefunc != NULL)); result = PyObject_Call(func, args, NULL); tstate->tracing = save_tracing; - tstate->use_tracing = save_use_tracing; + tstate->cframe->use_tracing = save_use_tracing; return result; } @@ -5590,7 +5601,7 @@ _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) tstate->c_profilefunc = NULL; tstate->c_profileobj = NULL; /* Must make sure that tracing is not ignored if 'profileobj' is freed */ - tstate->use_tracing = tstate->c_tracefunc != NULL; + tstate->cframe->use_tracing = tstate->c_tracefunc != NULL; Py_XDECREF(profileobj); Py_XINCREF(arg); @@ -5598,7 +5609,7 @@ _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) tstate->c_profilefunc = func; /* Flag that tracing or profiling is turned on */ - tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL); + tstate->cframe->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL); return 0; } @@ -5626,14 +5637,12 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) return -1; } - struct _ceval_state *ceval2 = &tstate->interp->ceval; PyObject *traceobj = tstate->c_traceobj; - ceval2->tracing_possible += (func != NULL) - (tstate->c_tracefunc != NULL); tstate->c_tracefunc = NULL; tstate->c_traceobj = NULL; /* Must make sure that profiling is not ignored if 'traceobj' is freed */ - tstate->use_tracing = (tstate->c_profilefunc != NULL); + tstate->cframe->use_tracing = (tstate->c_profilefunc != NULL); Py_XDECREF(traceobj); Py_XINCREF(arg); @@ -5641,7 +5650,7 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) tstate->c_tracefunc = func; /* Flag that tracing or profiling is turned on */ - tstate->use_tracing = ((func != NULL) + tstate->cframe->use_tracing = ((func != NULL) || (tstate->c_profilefunc != NULL)); return 0; @@ -5836,7 +5845,7 @@ PyEval_GetFuncDesc(PyObject *func) } #define C_TRACE(x, call) \ -if (tstate->use_tracing && tstate->c_profilefunc) { \ +if (trace_info->cframe.use_tracing && tstate->c_profilefunc) { \ if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, \ tstate, tstate->frame, trace_info, \ PyTrace_C_CALL, func)) { \ @@ -5917,7 +5926,7 @@ call_function(PyThreadState *tstate, Py_ssize_t nargs = oparg - nkwargs; PyObject **stack = (*pp_stack) - nargs - nkwargs; - if (tstate->use_tracing) { + if (trace_info->cframe.use_tracing) { x = trace_call_function(tstate, trace_info, func, stack, nargs, kwnames); } else { @@ -5950,7 +5959,7 @@ do_call_core(PyThreadState *tstate, } else if (Py_IS_TYPE(func, &PyMethodDescr_Type)) { Py_ssize_t nargs = PyTuple_GET_SIZE(callargs); - if (nargs > 0 && tstate->use_tracing) { + if (nargs > 0 && trace_info->cframe.use_tracing) { /* We need to create a temporary bound method as argument for profiling. diff --git a/Python/pystate.c b/Python/pystate.c index c8b2530f68dfe..436f874842cc8 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -624,7 +624,8 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->recursion_headroom = 0; tstate->stackcheck_counter = 0; tstate->tracing = 0; - tstate->use_tracing = 0; + tstate->root_cframe.use_tracing = 0; + tstate->cframe = &tstate->root_cframe; tstate->gilstate_counter = 0; tstate->async_exc = NULL; tstate->thread_id = PyThread_get_thread_ident(); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 54d70ef056975..a36d90f9de168 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -252,7 +252,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event, /* Disallow tracing in hooks unless explicitly enabled */ ts->tracing++; - ts->use_tracing = 0; + ts->cframe->use_tracing = 0; while ((hook = PyIter_Next(hooks)) != NULL) { _Py_IDENTIFIER(__cantrace__); PyObject *o; @@ -265,14 +265,14 @@ sys_audit_tstate(PyThreadState *ts, const char *event, break; } if (canTrace) { - ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc); + ts->cframe->use_tracing = (ts->c_tracefunc || ts->c_profilefunc); ts->tracing--; } PyObject* args[2] = {eventName, eventArgs}; o = _PyObject_FastCallTstate(ts, hook, args, 2); if (canTrace) { ts->tracing++; - ts->use_tracing = 0; + ts->cframe->use_tracing = 0; } if (!o) { break; @@ -280,7 +280,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event, Py_DECREF(o); Py_CLEAR(hook); } - ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc); + ts->cframe->use_tracing = (ts->c_tracefunc || ts->c_profilefunc); ts->tracing--; if (_PyErr_Occurred(ts)) { goto exit; From webhook-mailer at python.org Tue Apr 13 07:27:32 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 13 Apr 2021 11:27:32 -0000 Subject: [Python-checkins] bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) Message-ID: https://github.com/python/cpython/commit/54db51c9114ac49030832f5134979ca866ffd21c commit: 54db51c9114ac49030832f5134979ca866ffd21c branch: master author: Andrew V. Jones committer: vstinner date: 2021-04-13T13:27:21+02:00 summary: bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) Signed-off-by: Andrew V. Jones files: M Include/cpython/pyctype.h diff --git a/Include/cpython/pyctype.h b/Include/cpython/pyctype.h index 6bce63eeb63b8..729d93275e6c5 100644 --- a/Include/cpython/pyctype.h +++ b/Include/cpython/pyctype.h @@ -1,6 +1,9 @@ #ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H +#ifdef __cplusplus +extern "C" { +#endif #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 @@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) +#ifdef __cplusplus +} +#endif #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ From webhook-mailer at python.org Tue Apr 13 07:33:40 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 13 Apr 2021 11:33:40 -0000 Subject: [Python-checkins] bpo-43770: Reorder type_ready() (GH-25373) Message-ID: https://github.com/python/cpython/commit/65f058eb081c9e1fe44115d1ac7966067e3650c7 commit: 65f058eb081c9e1fe44115d1ac7966067e3650c7 branch: master author: Victor Stinner committer: vstinner date: 2021-04-13T13:33:31+02:00 summary: bpo-43770: Reorder type_ready() (GH-25373) Add type_ready_create_dict() sub-function. * Start with type_ready_create_dict(). * Call type_ready_mro() earlier, before type_ready_add_attrs(). * Call type_ready_inherit_special() earlier, in type_ready_inherit(). files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 75dd604d39c45..9ed77fdb250ae 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5853,7 +5853,7 @@ type_ready_checks(PyTypeObject *type) static int -type_ready_set_base(PyTypeObject *type) +type_ready_set_bases(PyTypeObject *type) { /* Initialize tp_base (defaults to BaseObject unless that's us) */ PyTypeObject *base = type->tp_base; @@ -5887,13 +5887,7 @@ type_ready_set_base(PyTypeObject *type) if (Py_IS_TYPE(type, NULL) && base != NULL) { Py_SET_TYPE(type, Py_TYPE(base)); } - return 0; -} - -static int -type_ready_add_attrs(PyTypeObject *type) -{ /* Initialize tp_bases */ PyObject *bases = type->tp_bases; if (bases == NULL) { @@ -5909,17 +5903,29 @@ type_ready_add_attrs(PyTypeObject *type) } type->tp_bases = bases; } + return 0; +} - /* Initialize tp_dict */ - PyObject *dict = type->tp_dict; + +static int +type_ready_set_dict(PyTypeObject *type) +{ + if (type->tp_dict != NULL) { + return 0; + } + + PyObject *dict = PyDict_New(); if (dict == NULL) { - dict = PyDict_New(); - if (dict == NULL) { - return -1; - } - type->tp_dict = dict; + return -1; } + type->tp_dict = dict; + return 0; +} + +static int +type_ready_add_attrs(PyTypeObject *type) +{ /* Add type-specific descriptors to tp_dict */ if (add_operators(type) < 0) { return -1; @@ -5972,12 +5978,35 @@ type_ready_mro(PyTypeObject *type) } +/* Some more special stuff */ +static void +type_ready_inherit_special(PyTypeObject *type, PyTypeObject *base) +{ + if (type->tp_as_async == NULL) { + type->tp_as_async = base->tp_as_async; + } + if (type->tp_as_number == NULL) { + type->tp_as_number = base->tp_as_number; + } + if (type->tp_as_sequence == NULL) { + type->tp_as_sequence = base->tp_as_sequence; + } + if (type->tp_as_mapping == NULL) { + type->tp_as_mapping = base->tp_as_mapping; + } + if (type->tp_as_buffer == NULL) { + type->tp_as_buffer = base->tp_as_buffer; + } +} + + static int type_ready_inherit(PyTypeObject *type) { /* Inherit special flags from dominant base */ - if (type->tp_base != NULL) { - inherit_special(type, type->tp_base); + PyTypeObject *base = type->tp_base; + if (base != NULL) { + inherit_special(type, base); } /* Initialize tp_dict properly */ @@ -5992,6 +6021,10 @@ type_ready_inherit(PyTypeObject *type) } } + if (base != NULL) { + type_ready_inherit_special(type, base); + } + /* Sanity check for tp_free. */ if (_PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) && (type->tp_free == NULL || type->tp_free == PyObject_Del)) @@ -6005,6 +6038,7 @@ type_ready_inherit(PyTypeObject *type) type->tp_name); return -1; } + return 0; } @@ -6073,33 +6107,6 @@ type_ready_set_hash(PyTypeObject *type) } -/* Some more special stuff */ -static void -type_ready_inherit_special(PyTypeObject *type) -{ - PyTypeObject *base = type->tp_base; - if (base == NULL) { - return; - } - - if (type->tp_as_async == NULL) { - type->tp_as_async = base->tp_as_async; - } - if (type->tp_as_number == NULL) { - type->tp_as_number = base->tp_as_number; - } - if (type->tp_as_sequence == NULL) { - type->tp_as_sequence = base->tp_as_sequence; - } - if (type->tp_as_mapping == NULL) { - type->tp_as_mapping = base->tp_as_mapping; - } - if (type->tp_as_buffer == NULL) { - type->tp_as_buffer = base->tp_as_buffer; - } -} - - /* Link into each base class's list of subclasses */ static int type_ready_add_subclasses(PyTypeObject *type) @@ -6132,15 +6139,19 @@ type_ready(PyTypeObject *type) _Py_AddToAllObjects((PyObject *)type, 0); #endif - if (type_ready_set_base(type) < 0) { + /* Initialize tp_dict: _PyType_IsReady() tests if tp_dict != NULL */ + if (type_ready_set_dict(type) < 0) { return -1; } - if (type_ready_add_attrs(type) < 0) { + if (type_ready_set_bases(type) < 0) { return -1; } if (type_ready_mro(type) < 0) { return -1; } + if (type_ready_add_attrs(type) < 0) { + return -1; + } if (type_ready_inherit(type) < 0) { return -1; } @@ -6150,9 +6161,6 @@ type_ready(PyTypeObject *type) if (type_ready_set_hash(type) < 0) { return -1; } - - type_ready_inherit_special(type); - if (type_ready_add_subclasses(type) < 0) { return -1; } From webhook-mailer at python.org Tue Apr 13 07:45:32 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 13 Apr 2021 11:45:32 -0000 Subject: [Python-checkins] bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) Message-ID: https://github.com/python/cpython/commit/47a894d338f436ea8f513f1ad2cc7e1b086e99cc commit: 47a894d338f436ea8f513f1ad2cc7e1b086e99cc branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T04:45:20-07:00 summary: bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) Signed-off-by: Andrew V. Jones (cherry picked from commit 54db51c9114ac49030832f5134979ca866ffd21c) Co-authored-by: Andrew V. Jones files: M Include/pyctype.h diff --git a/Include/pyctype.h b/Include/pyctype.h index 6bce63eeb63b8..729d93275e6c5 100644 --- a/Include/pyctype.h +++ b/Include/pyctype.h @@ -1,6 +1,9 @@ #ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H +#ifdef __cplusplus +extern "C" { +#endif #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 @@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) +#ifdef __cplusplus +} +#endif #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ From webhook-mailer at python.org Tue Apr 13 08:20:22 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 13 Apr 2021 12:20:22 -0000 Subject: [Python-checkins] bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) (GH-25387) Message-ID: https://github.com/python/cpython/commit/15ad30d88fead718b7eeff8c54454b82753d520e commit: 15ad30d88fead718b7eeff8c54454b82753d520e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-13T14:20:13+02:00 summary: bpo-43816: Add extern "C" to Include/cpython/pyctype.h (GH-25365) (GH-25387) Signed-off-by: Andrew V. Jones (cherry picked from commit 54db51c9114ac49030832f5134979ca866ffd21c) Co-authored-by: Andrew V. Jones Co-authored-by: Andrew V. Jones files: M Include/pyctype.h diff --git a/Include/pyctype.h b/Include/pyctype.h index 6bce63eeb63b8..729d93275e6c5 100644 --- a/Include/pyctype.h +++ b/Include/pyctype.h @@ -1,6 +1,9 @@ #ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H +#ifdef __cplusplus +extern "C" { +#endif #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 @@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) +#ifdef __cplusplus +} +#endif #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ From webhook-mailer at python.org Tue Apr 13 09:25:25 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 13 Apr 2021 13:25:25 -0000 Subject: [Python-checkins] bpo-43770: Cleanup type_ready() (GH-25388) Message-ID: https://github.com/python/cpython/commit/a328d73843cfd42d2aee1434c78df1ef2845931a commit: a328d73843cfd42d2aee1434c78df1ef2845931a branch: master author: Victor Stinner committer: vstinner date: 2021-04-13T15:25:16+02:00 summary: bpo-43770: Cleanup type_ready() (GH-25388) * Rename functions * Only pass type parameter to "add_xxx" functions. * Clarify the role of the type_ready_inherit_as_structs() function. * Move type_dict_set_doc() code to call it in type_ready_fill_dict(). files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 9ed77fdb250ae..a957c832b90bd 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5437,72 +5437,92 @@ PyTypeObject PyBaseObject_Type = { }; -/* Add the methods from tp_methods to the __dict__ in a type object */ - static int -add_methods(PyTypeObject *type, PyMethodDef *meth) +type_add_method(PyTypeObject *type, PyMethodDef *meth) { - PyObject *dict = type->tp_dict; - PyObject *name; - - for (; meth->ml_name != NULL; meth++) { - PyObject *descr; - int err; - int isdescr = 1; - if (meth->ml_flags & METH_CLASS) { - if (meth->ml_flags & METH_STATIC) { - PyErr_SetString(PyExc_ValueError, - "method cannot be both class and static"); - return -1; - } - descr = PyDescr_NewClassMethod(type, meth); - } - else if (meth->ml_flags & METH_STATIC) { - PyObject *cfunc = PyCFunction_NewEx(meth, (PyObject*)type, NULL); - if (cfunc == NULL) - return -1; - descr = PyStaticMethod_New(cfunc); - isdescr = 0; // PyStaticMethod is not PyDescrObject - Py_DECREF(cfunc); - } - else { - descr = PyDescr_NewMethod(type, meth); - } - if (descr == NULL) + PyObject *descr; + int isdescr = 1; + if (meth->ml_flags & METH_CLASS) { + if (meth->ml_flags & METH_STATIC) { + PyErr_SetString(PyExc_ValueError, + "method cannot be both class and static"); return -1; - - if (isdescr) { - name = PyDescr_NAME(descr); } - else { - name = PyUnicode_FromString(meth->ml_name); - if (name == NULL) { - Py_DECREF(descr); - return -1; - } + descr = PyDescr_NewClassMethod(type, meth); + } + else if (meth->ml_flags & METH_STATIC) { + PyObject *cfunc = PyCFunction_NewEx(meth, (PyObject*)type, NULL); + if (cfunc == NULL) { + return -1; } + descr = PyStaticMethod_New(cfunc); + isdescr = 0; // PyStaticMethod is not PyDescrObject + Py_DECREF(cfunc); + } + else { + descr = PyDescr_NewMethod(type, meth); + } + if (descr == NULL) { + return -1; + } - if (!(meth->ml_flags & METH_COEXIST)) { - err = PyDict_SetDefault(dict, name, descr) == NULL; - } - else { - err = PyDict_SetItem(dict, name, descr) < 0; - } - if (!isdescr) { - Py_DECREF(name); + PyObject *name; + if (isdescr) { + name = PyDescr_NAME(descr); + } + else { + name = PyUnicode_FromString(meth->ml_name); + if (name == NULL) { + Py_DECREF(descr); + return -1; } - Py_DECREF(descr); - if (err) + } + + int err; + if (!(meth->ml_flags & METH_COEXIST)) { + err = PyDict_SetDefault(type->tp_dict, name, descr) == NULL; + } + else { + err = PyDict_SetItem(type->tp_dict, name, descr) < 0; + } + if (!isdescr) { + Py_DECREF(name); + } + Py_DECREF(descr); + if (err) { + return -1; + } + return 0; +} + + +/* Add the methods from tp_methods to the __dict__ in a type object */ +static int +type_add_methods(PyTypeObject *type) +{ + PyMethodDef *meth = type->tp_methods; + if (meth == NULL) { + return 0; + } + + for (; meth->ml_name != NULL; meth++) { + if (type_add_method(type, meth) < 0) { return -1; + } } return 0; } + static int -add_members(PyTypeObject *type, PyMemberDef *memb) +type_add_members(PyTypeObject *type) { - PyObject *dict = type->tp_dict; + PyMemberDef *memb = type->tp_members; + if (memb == NULL) { + return 0; + } + PyObject *dict = type->tp_dict; for (; memb->name != NULL; memb++) { PyObject *descr = PyDescr_NewMember(type, memb); if (descr == NULL) @@ -5517,15 +5537,21 @@ add_members(PyTypeObject *type, PyMemberDef *memb) return 0; } + static int -add_getset(PyTypeObject *type, PyGetSetDef *gsp) +type_add_getset(PyTypeObject *type) { - PyObject *dict = type->tp_dict; + PyGetSetDef *gsp = type->tp_getset; + if (gsp == NULL) { + return 0; + } + PyObject *dict = type->tp_dict; for (; gsp->name != NULL; gsp++) { PyObject *descr = PyDescr_NewGetSet(type, gsp); - if (descr == NULL) + if (descr == NULL) { return -1; + } if (PyDict_SetDefault(dict, PyDescr_NAME(descr), descr) == NULL) { Py_DECREF(descr); @@ -5536,6 +5562,7 @@ add_getset(PyTypeObject *type, PyGetSetDef *gsp) return 0; } + static void inherit_special(PyTypeObject *type, PyTypeObject *base) { @@ -5572,31 +5599,39 @@ inherit_special(PyTypeObject *type, PyTypeObject *base) /* Copy other non-function slots */ -#undef COPYVAL #define COPYVAL(SLOT) \ - if (type->SLOT == 0) type->SLOT = base->SLOT + if (type->SLOT == 0) { type->SLOT = base->SLOT; } COPYVAL(tp_itemsize); COPYVAL(tp_weaklistoffset); COPYVAL(tp_dictoffset); +#undef COPYVAL /* Setup fast subclass flags */ - if (PyType_IsSubtype(base, (PyTypeObject*)PyExc_BaseException)) + if (PyType_IsSubtype(base, (PyTypeObject*)PyExc_BaseException)) { type->tp_flags |= Py_TPFLAGS_BASE_EXC_SUBCLASS; - else if (PyType_IsSubtype(base, &PyType_Type)) + } + else if (PyType_IsSubtype(base, &PyType_Type)) { type->tp_flags |= Py_TPFLAGS_TYPE_SUBCLASS; - else if (PyType_IsSubtype(base, &PyLong_Type)) + } + else if (PyType_IsSubtype(base, &PyLong_Type)) { type->tp_flags |= Py_TPFLAGS_LONG_SUBCLASS; - else if (PyType_IsSubtype(base, &PyBytes_Type)) + } + else if (PyType_IsSubtype(base, &PyBytes_Type)) { type->tp_flags |= Py_TPFLAGS_BYTES_SUBCLASS; - else if (PyType_IsSubtype(base, &PyUnicode_Type)) + } + else if (PyType_IsSubtype(base, &PyUnicode_Type)) { type->tp_flags |= Py_TPFLAGS_UNICODE_SUBCLASS; - else if (PyType_IsSubtype(base, &PyTuple_Type)) + } + else if (PyType_IsSubtype(base, &PyTuple_Type)) { type->tp_flags |= Py_TPFLAGS_TUPLE_SUBCLASS; - else if (PyType_IsSubtype(base, &PyList_Type)) + } + else if (PyType_IsSubtype(base, &PyList_Type)) { type->tp_flags |= Py_TPFLAGS_LIST_SUBCLASS; - else if (PyType_IsSubtype(base, &PyDict_Type)) + } + else if (PyType_IsSubtype(base, &PyDict_Type)) { type->tp_flags |= Py_TPFLAGS_DICT_SUBCLASS; + } if (PyType_HasFeature(base, _Py_TPFLAGS_MATCH_SELF)) { type->tp_flags |= _Py_TPFLAGS_MATCH_SELF; @@ -5923,25 +5958,35 @@ type_ready_set_dict(PyTypeObject *type) } +/* If the type dictionary doesn't contain a __doc__, set it from + the tp_doc slot. */ static int -type_ready_add_attrs(PyTypeObject *type) +type_dict_set_doc(PyTypeObject *type) { - /* Add type-specific descriptors to tp_dict */ - if (add_operators(type) < 0) { + int r = _PyDict_ContainsId(type->tp_dict, &PyId___doc__); + if (r < 0) { return -1; } - if (type->tp_methods != NULL) { - if (add_methods(type, type->tp_methods) < 0) { + if (r > 0) { + return 0; + } + + if (type->tp_doc != NULL) { + const char *doc_str; + doc_str = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc); + PyObject *doc = PyUnicode_FromString(doc_str); + if (doc == NULL) { return -1; } - } - if (type->tp_members != NULL) { - if (add_members(type, type->tp_members) < 0) { + + if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, doc) < 0) { + Py_DECREF(doc); return -1; } + Py_DECREF(doc); } - if (type->tp_getset != NULL) { - if (add_getset(type, type->tp_getset) < 0) { + else { + if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, Py_None) < 0) { return -1; } } @@ -5949,6 +5994,29 @@ type_ready_add_attrs(PyTypeObject *type) } +static int +type_ready_fill_dict(PyTypeObject *type) +{ + /* Add type-specific descriptors to tp_dict */ + if (add_operators(type) < 0) { + return -1; + } + if (type_add_methods(type) < 0) { + return -1; + } + if (type_add_members(type) < 0) { + return -1; + } + if (type_add_getset(type) < 0) { + return -1; + } + if (type_dict_set_doc(type) < 0) { + return -1; + } + return 0; +} + + static int type_ready_mro(PyTypeObject *type) { @@ -5978,9 +6046,13 @@ type_ready_mro(PyTypeObject *type) } -/* Some more special stuff */ +// For static types, inherit tp_as_xxx structures from the base class +// if it's NULL. +// +// For heap types, tp_as_xxx structures are not NULL: they are set to the +// PyHeapTypeObject.as_xxx fields by type_new_alloc(). static void -type_ready_inherit_special(PyTypeObject *type, PyTypeObject *base) +type_ready_inherit_as_structs(PyTypeObject *type, PyTypeObject *base) { if (type->tp_as_async == NULL) { type->tp_as_async = base->tp_as_async; @@ -6009,7 +6081,7 @@ type_ready_inherit(PyTypeObject *type) inherit_special(type, base); } - /* Initialize tp_dict properly */ + // Inherit slots PyObject *mro = type->tp_mro; Py_ssize_t n = PyTuple_GET_SIZE(type->tp_mro); for (Py_ssize_t i = 1; i < n; i++) { @@ -6022,7 +6094,7 @@ type_ready_inherit(PyTypeObject *type) } if (base != NULL) { - type_ready_inherit_special(type, base); + type_ready_inherit_as_structs(type, base); } /* Sanity check for tp_free. */ @@ -6043,42 +6115,6 @@ type_ready_inherit(PyTypeObject *type) } -/* If the type dictionary doesn't contain a __doc__, set it from - the tp_doc slot. */ -static int -type_ready_set_doc(PyTypeObject *type) -{ - int r = _PyDict_ContainsId(type->tp_dict, &PyId___doc__); - if (r < 0) { - return -1; - } - if (r > 0) { - return 0; - } - - if (type->tp_doc != NULL) { - const char *doc_str; - doc_str = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc); - PyObject *doc = PyUnicode_FromString(doc_str); - if (doc == NULL) { - return -1; - } - - if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, doc) < 0) { - Py_DECREF(doc); - return -1; - } - Py_DECREF(doc); - } - else { - if (_PyDict_SetItemId(type->tp_dict, &PyId___doc__, Py_None) < 0) { - return -1; - } - } - return 0; -} - - /* Hack for tp_hash and __hash__. If after all that, tp_hash is still NULL, and __hash__ is not in tp_dict, set tp_hash to PyObject_HashNotImplemented and @@ -6149,15 +6185,12 @@ type_ready(PyTypeObject *type) if (type_ready_mro(type) < 0) { return -1; } - if (type_ready_add_attrs(type) < 0) { + if (type_ready_fill_dict(type) < 0) { return -1; } if (type_ready_inherit(type) < 0) { return -1; } - if (type_ready_set_doc(type) < 0) { - return -1; - } if (type_ready_set_hash(type) < 0) { return -1; } @@ -8431,8 +8464,9 @@ add_operators(PyTypeObject *type) } } if (type->tp_new != NULL) { - if (add_tp_new_wrapper(type) < 0) + if (add_tp_new_wrapper(type) < 0) { return -1; + } } return 0; } From webhook-mailer at python.org Tue Apr 13 09:54:32 2021 From: webhook-mailer at python.org (gvanrossum) Date: Tue, 13 Apr 2021 13:54:32 -0000 Subject: [Python-checkins] bpo41515: Fix assert in test which throws SyntaxWarning. (#25379) Message-ID: https://github.com/python/cpython/commit/eb77133564d74eb09ed63872a69b9827d4841b49 commit: eb77133564d74eb09ed63872a69b9827d4841b49 branch: master author: Karthikeyan Singaravelan committer: gvanrossum date: 2021-04-13T06:54:23-07:00 summary: bpo41515: Fix assert in test which throws SyntaxWarning. (#25379) files: M Lib/test/test_typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index a6afd35944f2e..50723c4df1990 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -2272,7 +2272,7 @@ def test_bad_module(self): class BadModule: pass BadModule.__module__ = 'bad' # Something not in sys.modules - assert(get_type_hints(BadModule), {}) + self.assertEqual(get_type_hints(BadModule), {}) class FinalTests(BaseTestCase): From webhook-mailer at python.org Tue Apr 13 12:03:31 2021 From: webhook-mailer at python.org (JulienPalard) Date: Tue, 13 Apr 2021 16:03:31 -0000 Subject: [Python-checkins] Doc: Try to enhance wording on circular imports. (GH-24705) Message-ID: https://github.com/python/cpython/commit/fd79af7ae2574aaaa829e40ed780e17ef1f9be84 commit: fd79af7ae2574aaaa829e40ed780e17ef1f9be84 branch: master author: Julien Palard committer: JulienPalard date: 2021-04-13T18:03:22+02:00 summary: Doc: Try to enhance wording on circular imports. (GH-24705) files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 514ca04ab3c52..ff78ca7320d7d 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1898,26 +1898,26 @@ How can I have modules that mutually import each other? Suppose you have the following modules: -foo.py:: +:file:`foo.py`:: from bar import bar_var foo_var = 1 -bar.py:: +:file:`bar.py`:: from foo import foo_var bar_var = 2 The problem is that the interpreter will perform the following steps: -* main imports foo -* Empty globals for foo are created -* foo is compiled and starts executing -* foo imports bar -* Empty globals for bar are created -* bar is compiled and starts executing -* bar imports foo (which is a no-op since there already is a module named foo) -* bar.foo_var = foo.foo_var +* main imports ``foo`` +* Empty globals for ``foo`` are created +* ``foo`` is compiled and starts executing +* ``foo`` imports ``bar`` +* Empty globals for ``bar`` are created +* ``bar`` is compiled and starts executing +* ``bar`` imports ``foo`` (which is a no-op since there already is a module named ``foo``) +* The import mechanism tries to read ``foo_var`` from ``foo`` globals, to set ``bar.foo_var = foo.foo_var`` The last step fails, because Python isn't done with interpreting ``foo`` yet and the global symbol dictionary for ``foo`` is still empty. From webhook-mailer at python.org Tue Apr 13 12:51:42 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 13 Apr 2021 16:51:42 -0000 Subject: [Python-checkins] bpo-43797: Handle correctly invalid assignments inside function calls and generators (GH-25390) Message-ID: https://github.com/python/cpython/commit/30ed93bfec5dfa7ee05982e2df8fd810f3f49305 commit: 30ed93bfec5dfa7ee05982e2df8fd810f3f49305 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-13T17:51:21+01:00 summary: bpo-43797: Handle correctly invalid assignments inside function calls and generators (GH-25390) files: M Grammar/python.gram M Lib/test/test_genexps.py M Lib/test/test_syntax.py M Parser/parser.c diff --git a/Grammar/python.gram b/Grammar/python.gram index 8524a1206b054..180d952b57a8d 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -638,7 +638,7 @@ group[expr_ty]: | '(' a=(yield_expr | named_expression) ')' { a } | invalid_group genexp[expr_ty]: - | '(' a=named_expression b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) } + | '(' a=direct_named_expression b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) } | invalid_comprehension set[expr_ty]: '{' a=star_named_expressions '}' { _PyAST_Set(a, EXTRA) } setcomp[expr_ty]: diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py index 70fe2bba3a698..5c1a209b0e990 100644 --- a/Lib/test/test_genexps.py +++ b/Lib/test/test_genexps.py @@ -103,7 +103,7 @@ >>> dict(a = i for i in range(10)) Traceback (most recent call last): ... - SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? + SyntaxError: invalid syntax Verify that parenthesis are required when used as a keyword argument value diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 0e6942f6a6fa2..bd6a4d339e736 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -868,6 +868,18 @@ Traceback (most recent call last): SyntaxError: invalid syntax + >>> dict(x=34); x $ y + Traceback (most recent call last): + SyntaxError: invalid syntax + + >>> dict(x=34, (x for x in range 10), 1); x $ y + Traceback (most recent call last): + SyntaxError: invalid syntax + + >>> dict(x=34, x=1, y=2); x $ y + Traceback (most recent call last): + SyntaxError: invalid syntax + Make sure that the old "raise X, Y[, Z]" form is gone: >>> raise X, Y Traceback (most recent call last): @@ -1013,7 +1025,7 @@ def _check_error(self, code, errtext, def test_expression_with_assignment(self): self._check_error( "print(end1 + end2 = ' ')", - "cannot assign to expression here. Maybe you meant '==' instead of '='?", + 'expression cannot contain assignment, perhaps you meant "=="?', offset=19 ) diff --git a/Parser/parser.c b/Parser/parser.c index 38bab96ae3981..d158b2952baec 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -14015,7 +14015,7 @@ group_rule(Parser *p) return _res; } -// genexp: '(' named_expression for_if_clauses ')' | invalid_comprehension +// genexp: '(' direct_named_expression for_if_clauses ')' | invalid_comprehension static expr_ty genexp_rule(Parser *p) { @@ -14035,12 +14035,12 @@ genexp_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '(' named_expression for_if_clauses ')' + { // '(' direct_named_expression for_if_clauses ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' named_expression for_if_clauses ')'")); + D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' direct_named_expression for_if_clauses ')'")); Token * _literal; Token * _literal_1; expr_ty a; @@ -14048,14 +14048,14 @@ genexp_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = named_expression_rule(p)) // named_expression + (a = direct_named_expression_rule(p)) // direct_named_expression && (b = for_if_clauses_rule(p)) // for_if_clauses && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' named_expression for_if_clauses ')'")); + D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' direct_named_expression for_if_clauses ')'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14075,7 +14075,7 @@ genexp_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' named_expression for_if_clauses ')'")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' direct_named_expression for_if_clauses ')'")); } if (p->call_invalid_rules) { // invalid_comprehension if (p->error_indicator) { From webhook-mailer at python.org Tue Apr 13 13:23:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 13 Apr 2021 17:23:58 -0000 Subject: [Python-checkins] bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) Message-ID: https://github.com/python/cpython/commit/8fa1489365e7af8b90286c97db55a2dc60a05cde commit: 8fa1489365e7af8b90286c97db55a2dc60a05cde branch: master author: Christian Heimes committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T10:23:45-07:00 summary: bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) The new checks are only executed when one or more OpenSSL-related files are modified. The checks run a handful of networking and hashing test suites. All SSL checks are optional. This PR also introduces ccache to speed up compilation. In common cases it speeds up configure and compile time from about 90 seconds to less than 30 seconds. Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst M .github/workflows/build.yml M .github/workflows/posix-deps-apt.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39c349bf6e910..c6e6ce3085415 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,7 @@ jobs: runs-on: ubuntu-latest outputs: run_tests: ${{ steps.check.outputs.run_tests }} + run_ssl_tests: ${{ steps.check.outputs.run_ssl_tests }} steps: - uses: actions/checkout at v2 - name: Check for source changes @@ -30,6 +31,7 @@ jobs: run: | if [ -z "$GITHUB_BASE_REF" ]; then echo '::set-output name=run_tests::true' + echo '::set-output name=run_ssl_tests::true' else git fetch origin $GITHUB_BASE_REF --depth=1 # git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more @@ -46,6 +48,7 @@ jobs: # # https://github.com/python/core-workflow/issues/373 git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true + git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE '(ssl|hashlib|hmac|^.github)' && echo '::set-output name=run_ssl_tests::true' || true fi check_generated_files: @@ -138,6 +141,11 @@ jobs: run: echo "::add-matcher::.github/problem-matchers/gcc.json" - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV - name: 'Restore OpenSSL build' id: cache-openssl uses: actions/cache at v2.1.4 @@ -146,12 +154,65 @@ jobs: key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' - run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $OPENSSL_VER --system Linux + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 - name: Configure CPython - run: ./configure --with-pydebug --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR - name: Build CPython run: make -j4 - name: Display build info run: make pythoninfo - name: Tests run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" + + build_ubuntu_ssltests: + name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + runs-on: ubuntu-20.04 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' + strategy: + fail-fast: false + matrix: + openssl_ver: [1.0.2u, 1.1.0l, 1.1.1k, 3.0.0-alpha14] + env: + OPENSSL_VER: ${{ matrix.openssl_ver }} + MULTISSL_DIR: ${{ github.workspace }}/multissl + OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }} + LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib + steps: + - uses: actions/checkout at v2 + - name: Register gcc problem matcher + run: echo "::add-matcher::.github/problem-matchers/gcc.json" + - name: Install Dependencies + run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV + - name: 'Restore OpenSSL build' + id: cache-openssl + uses: actions/cache at v2.1.4 + with: + path: ./multissl/openssl/${{ env.OPENSSL_VER }} + key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} + - name: Install OpenSSL + if: steps.cache-openssl.outputs.cache-hit != 'true' + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 + - name: Configure CPython + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR + - name: Build CPython + run: make -j4 + - name: Display build info + run: make pythoninfo + - name: SSL tests + run: ./python Lib/test/ssltests.py diff --git a/.github/workflows/posix-deps-apt.sh b/.github/workflows/posix-deps-apt.sh index 5c7b9988be451..56cc70edf6000 100755 --- a/.github/workflows/posix-deps-apt.sh +++ b/.github/workflows/posix-deps-apt.sh @@ -3,6 +3,7 @@ apt-get update apt-get -yq install \ build-essential \ + ccache \ gdb \ lcov \ libbz2-dev \ diff --git a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst new file mode 100644 index 0000000000000..d4c7066013332 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst @@ -0,0 +1,2 @@ +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. From webhook-mailer at python.org Tue Apr 13 15:14:49 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 13 Apr 2021 19:14:49 -0000 Subject: [Python-checkins] [3.9] bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) (GH-25391) Message-ID: https://github.com/python/cpython/commit/5ce227f3a767e6e44e7c41e0c845a83cf7777ca4 commit: 5ce227f3a767e6e44e7c41e0c845a83cf7777ca4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T12:14:41-07:00 summary: [3.9] bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) (GH-25391) The new checks are only executed when one or more OpenSSL-related files are modified. The checks run a handful of networking and hashing test suites. All SSL checks are optional. This PR also introduces ccache to speed up compilation. In common cases it speeds up configure and compile time from about 90 seconds to less than 30 seconds. Signed-off-by: Christian Heimes (cherry picked from commit 8fa1489365e7af8b90286c97db55a2dc60a05cde) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst M .github/workflows/build.yml M .github/workflows/posix-deps-apt.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a4a687bc9522..84516136c076d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,7 @@ jobs: runs-on: ubuntu-latest outputs: run_tests: ${{ steps.check.outputs.run_tests }} + run_ssl_tests: ${{ steps.check.outputs.run_ssl_tests }} steps: - uses: actions/checkout at v2 - name: Check for source changes @@ -30,6 +31,7 @@ jobs: run: | if [ -z "$GITHUB_BASE_REF" ]; then echo '::set-output name=run_tests::true' + echo '::set-output name=run_ssl_tests::true' else git fetch origin $GITHUB_BASE_REF --depth=1 # git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more @@ -46,6 +48,7 @@ jobs: # # https://github.com/python/core-workflow/issues/373 git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true + git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE '(ssl|hashlib|hmac|^.github)' && echo '::set-output name=run_ssl_tests::true' || true fi check_abi: @@ -152,6 +155,11 @@ jobs: - uses: actions/checkout at v2 - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV - name: 'Restore OpenSSL build' id: cache-openssl uses: actions/cache at v2.1.3 @@ -160,12 +168,63 @@ jobs: key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' - run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $OPENSSL_VER --system Linux + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 - name: Configure CPython - run: ./configure --with-pydebug --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR - name: Build CPython run: make -j4 - name: Display build info run: make pythoninfo - name: Tests run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" + + build_ubuntu_ssltests: + name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + runs-on: ubuntu-20.04 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' + strategy: + fail-fast: false + matrix: + openssl_ver: [1.0.2u, 1.1.0l, 1.1.1k, 3.0.0-alpha14] + env: + OPENSSL_VER: ${{ matrix.openssl_ver }} + MULTISSL_DIR: ${{ github.workspace }}/multissl + OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }} + LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib + steps: + - uses: actions/checkout at v2 + - name: Install Dependencies + run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV + - name: 'Restore OpenSSL build' + id: cache-openssl + uses: actions/cache at v2.1.4 + with: + path: ./multissl/openssl/${{ env.OPENSSL_VER }} + key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} + - name: Install OpenSSL + if: steps.cache-openssl.outputs.cache-hit != 'true' + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 + - name: Configure CPython + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR + - name: Build CPython + run: make -j4 + - name: Display build info + run: make pythoninfo + - name: SSL tests + run: ./python Lib/test/ssltests.py diff --git a/.github/workflows/posix-deps-apt.sh b/.github/workflows/posix-deps-apt.sh index 5c7b9988be451..56cc70edf6000 100755 --- a/.github/workflows/posix-deps-apt.sh +++ b/.github/workflows/posix-deps-apt.sh @@ -3,6 +3,7 @@ apt-get update apt-get -yq install \ build-essential \ + ccache \ gdb \ lcov \ libbz2-dev \ diff --git a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst new file mode 100644 index 0000000000000..d4c7066013332 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst @@ -0,0 +1,2 @@ +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. From webhook-mailer at python.org Tue Apr 13 15:27:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 13 Apr 2021 19:27:11 -0000 Subject: [Python-checkins] [3.8] bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) (GH-25392) Message-ID: https://github.com/python/cpython/commit/a607815eb07582deb3c5818be881a98abe25a100 commit: a607815eb07582deb3c5818be881a98abe25a100 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T12:27:02-07:00 summary: [3.8] bpo-43811: Test multiple OpenSSL versions on GHA (GH-25360) (GH-25392) The new checks are only executed when one or more OpenSSL-related files are modified. The checks run a handful of networking and hashing test suites. All SSL checks are optional. This PR also introduces ccache to speed up compilation. In common cases it speeds up configure and compile time from about 90 seconds to less than 30 seconds. Signed-off-by: Christian Heimes (cherry picked from commit 8fa1489365e7af8b90286c97db55a2dc60a05cde) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst M .github/workflows/build.yml M .github/workflows/posix-deps-apt.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71b36e9ddd29e..90d0317fbfad0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,7 @@ jobs: runs-on: ubuntu-latest outputs: run_tests: ${{ steps.check.outputs.run_tests }} + run_ssl_tests: ${{ steps.check.outputs.run_ssl_tests }} steps: - uses: actions/checkout at v2 - name: Check for source changes @@ -23,6 +24,7 @@ jobs: run: | if [ -z "$GITHUB_BASE_REF" ]; then echo '::set-output name=run_tests::true' + echo '::set-output name=run_ssl_tests::true' else git fetch origin $GITHUB_BASE_REF --depth=1 # git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more @@ -39,6 +41,7 @@ jobs: # # https://github.com/python/core-workflow/issues/373 git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true + git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE '(ssl|hashlib|hmac|^.github)' && echo '::set-output name=run_ssl_tests::true' || true fi check_abi: @@ -145,6 +148,11 @@ jobs: - uses: actions/checkout at v2 - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV - name: 'Restore OpenSSL build' id: cache-openssl uses: actions/cache at v2.1.3 @@ -153,12 +161,63 @@ jobs: key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' - run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $OPENSSL_VER --system Linux + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 - name: Configure CPython - run: ./configure --with-pydebug --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR - name: Build CPython run: make -j4 - name: Display build info run: make pythoninfo - name: Tests run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" + + build_ubuntu_ssltests: + name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + runs-on: ubuntu-20.04 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' + strategy: + fail-fast: false + matrix: + openssl_ver: [1.0.2u, 1.1.0l, 1.1.1k, 3.0.0-alpha14] + env: + OPENSSL_VER: ${{ matrix.openssl_ver }} + MULTISSL_DIR: ${{ github.workspace }}/multissl + OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }} + LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib + steps: + - uses: actions/checkout at v2 + - name: Install Dependencies + run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Configure OpenSSL env vars + run: | + echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV + echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV + - name: 'Restore OpenSSL build' + id: cache-openssl + uses: actions/cache at v2.1.4 + with: + path: ./multissl/openssl/${{ env.OPENSSL_VER }} + key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} + - name: Install OpenSSL + if: steps.cache-openssl.outputs.cache-hit != 'true' + run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux + - name: Add ccache to PATH + run: | + echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action at v1 + - name: Configure CPython + run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR + - name: Build CPython + run: make -j4 + - name: Display build info + run: make pythoninfo + - name: SSL tests + run: ./python Lib/test/ssltests.py diff --git a/.github/workflows/posix-deps-apt.sh b/.github/workflows/posix-deps-apt.sh index 5c7b9988be451..56cc70edf6000 100755 --- a/.github/workflows/posix-deps-apt.sh +++ b/.github/workflows/posix-deps-apt.sh @@ -3,6 +3,7 @@ apt-get update apt-get -yq install \ build-essential \ + ccache \ gdb \ lcov \ libbz2-dev \ diff --git a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst new file mode 100644 index 0000000000000..d4c7066013332 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst @@ -0,0 +1,2 @@ +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. From webhook-mailer at python.org Tue Apr 13 19:23:11 2021 From: webhook-mailer at python.org (methane) Date: Tue, 13 Apr 2021 23:23:11 -0000 Subject: [Python-checkins] bpo-43785: Update bz2 document (GH-25351) Message-ID: https://github.com/python/cpython/commit/695d47b51e3e197de5448a1eb2f618bef6d59ac8 commit: 695d47b51e3e197de5448a1eb2f618bef6d59ac8 branch: master author: Inada Naoki committer: methane date: 2021-04-14T08:22:49+09:00 summary: bpo-43785: Update bz2 document (GH-25351) files: M Doc/library/bz2.rst M Doc/library/lzma.rst M Doc/whatsnew/3.10.rst diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst index 637baf49da1fc..f6787ab120ed5 100644 --- a/Doc/library/bz2.rst +++ b/Doc/library/bz2.rst @@ -25,8 +25,6 @@ The :mod:`bz2` module contains: * The :func:`compress` and :func:`decompress` functions for one-shot (de)compression. -All of the classes in this module may safely be accessed from multiple threads. - (De)compression of files ------------------------ @@ -140,6 +138,11 @@ All of the classes in this module may safely be accessed from multiple threads. The *compresslevel* parameter became keyword-only. + .. versionchanged:: 3.10 + This class is thread unsafe in the face of multiple simultaneous + readers or writers, just like its equivalent classes in :mod:`gzip` and + :mod:`lzma` have always been. + Incremental (de)compression --------------------------- diff --git a/Doc/library/lzma.rst b/Doc/library/lzma.rst index 633c87873cd8c..21092645366da 100644 --- a/Doc/library/lzma.rst +++ b/Doc/library/lzma.rst @@ -19,8 +19,8 @@ interface supporting the ``.xz`` and legacy ``.lzma`` file formats used by the :program:`xz` utility, as well as raw compressed streams. The interface provided by this module is very similar to that of the :mod:`bz2` -module. However, note that :class:`LZMAFile` is *not* thread-safe, unlike -:class:`bz2.BZ2File`, so if you need to use a single :class:`LZMAFile` instance +module. Note that :class:`LZMAFile` and :class:`bz2.BZ2File` are *not* +thread-safe, so if you need to use a single :class:`LZMAFile` instance from multiple threads, it is necessary to protect it with a lock. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 6af0f834a9d4c..e0e7d19577e2b 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1013,6 +1013,11 @@ Optimizations :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`. (Contributed by Dong-hee Na and Jeroen Demeyerin in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`) +* :class:`BZ2File` performance is improved by removing internal ``RLock``. + This makes :class:`BZ2File` thread unsafe in the face of multiple simultaneous + readers or writers, just like its equivalent classes in :mod:`gzip` and + :mod:`lzma` have always been. (Contributed by Inada Naoki in :issue:`43785`). + Deprecated ========== From webhook-mailer at python.org Tue Apr 13 19:26:51 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 13 Apr 2021 23:26:51 -0000 Subject: [Python-checkins] Revert "Add ignore file for the abidump check (GH-25323)" (GH-25394) Message-ID: https://github.com/python/cpython/commit/4da5ca52b7269556dd8b6ebcdfa6eb1d25717a9d commit: 4da5ca52b7269556dd8b6ebcdfa6eb1d25717a9d branch: 3.9 author: Pablo Galindo committer: pablogsal date: 2021-04-14T00:26:43+01:00 summary: Revert "Add ignore file for the abidump check (GH-25323)" (GH-25394) This reverts commit b3fec753bb14e10066be908b93d3448c6b433ea6. files: D Doc/data/python3.9.abi.ignorefile M Makefile.pre.in diff --git a/Doc/data/python3.9.abi.ignorefile b/Doc/data/python3.9.abi.ignorefile deleted file mode 100644 index a9c89f0a746c8..0000000000000 --- a/Doc/data/python3.9.abi.ignorefile +++ /dev/null @@ -1,8 +0,0 @@ -[suppress_type] -name_regexp = _Py.* - -[suppress_variable] -name_regexp = _Py.* - -[suppress_function] -name_regexp = _Py.* diff --git a/Makefile.pre.in b/Makefile.pre.in index 9aeeac5cca295..d088eb5768fc8 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -759,9 +759,7 @@ regen-abidump: all @$(UPDATE_FILE) $(srcdir)/Doc/data/python$(LDVERSION).abi $(srcdir)/Doc/data/python$(LDVERSION).abi.new check-abidump: all - abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types \ - --suppressions $(srcdir)/Doc/data/python$(LDVERSION).abi.ignorefile \ - --no-architecture --no-added-syms + abidiff "libpython$(LDVERSION).so" $(srcdir)/Doc/data/python$(LDVERSION).abi --drop-private-types --no-architecture --no-added-syms ############################################################################ # Regenerate all generated files From webhook-mailer at python.org Tue Apr 13 19:59:33 2021 From: webhook-mailer at python.org (ericvsmith) Date: Tue, 13 Apr 2021 23:59:33 -0000 Subject: [Python-checkins] bpo-43080: pprint for dataclass instances (GH-24389) Message-ID: https://github.com/python/cpython/commit/11159d2c9d6616497ef4cc62953a5c3cc8454afb commit: 11159d2c9d6616497ef4cc62953a5c3cc8454afb branch: master author: Lewis Gaul committer: ericvsmith date: 2021-04-13T19:59:24-04:00 summary: bpo-43080: pprint for dataclass instances (GH-24389) * Added pprint support for dataclass instances which don't have a custom __repr__. files: A Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst M Doc/library/pprint.rst M Doc/whatsnew/3.10.rst M Lib/pprint.py M Lib/test/test_pprint.py diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst index 756c33a7a8668..f45c66fd9f46f 100644 --- a/Doc/library/pprint.rst +++ b/Doc/library/pprint.rst @@ -28,6 +28,9 @@ Dictionaries are sorted by key before the display is computed. .. versionchanged:: 3.9 Added support for pretty-printing :class:`types.SimpleNamespace`. +.. versionchanged:: 3.10 + Added support for pretty-printing :class:`dataclasses.dataclass`. + The :mod:`pprint` module defines one class: .. First the implementation class: diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index e0e7d19577e2b..b1a33eeb5e61d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -820,6 +820,12 @@ identification from `freedesktop.org os-release `_ standard file. (Contributed by Christian Heimes in :issue:`28468`) +pprint +------ + +:mod:`pprint` can now pretty-print :class:`dataclasses.dataclass` instances. +(Contributed by Lewis Gaul in :issue:`43080`.) + py_compile ---------- diff --git a/Lib/pprint.py b/Lib/pprint.py index b45cfdd99a8e1..13819f3fef212 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -35,6 +35,7 @@ """ import collections as _collections +import dataclasses as _dataclasses import re import sys as _sys import types as _types @@ -178,8 +179,26 @@ def _format(self, object, stream, indent, allowance, context, level): p(self, object, stream, indent, allowance, context, level + 1) del context[objid] return + elif (_dataclasses.is_dataclass(object) and + not isinstance(object, type) and + object.__dataclass_params__.repr and + # Check dataclass has generated repr method. + hasattr(object.__repr__, "__wrapped__") and + "__create_fn__" in object.__repr__.__wrapped__.__qualname__): + context[objid] = 1 + self._pprint_dataclass(object, stream, indent, allowance, context, level + 1) + del context[objid] + return stream.write(rep) + def _pprint_dataclass(self, object, stream, indent, allowance, context, level): + cls_name = object.__class__.__name__ + indent += len(cls_name) + 1 + items = [(f.name, getattr(object, f.name)) for f in _dataclasses.fields(object) if f.repr] + stream.write(cls_name + '(') + self._format_namespace_items(items, stream, indent, allowance, context, level) + stream.write(')') + _dispatch = {} def _pprint_dict(self, object, stream, indent, allowance, context, level): @@ -346,21 +365,9 @@ def _pprint_simplenamespace(self, object, stream, indent, allowance, context, le else: cls_name = object.__class__.__name__ indent += len(cls_name) + 1 - delimnl = ',\n' + ' ' * indent items = object.__dict__.items() - last_index = len(items) - 1 - stream.write(cls_name + '(') - for i, (key, ent) in enumerate(items): - stream.write(key) - stream.write('=') - - last = i == last_index - self._format(ent, stream, indent + len(key) + 1, - allowance if last else 1, - context, level) - if not last: - stream.write(delimnl) + self._format_namespace_items(items, stream, indent, allowance, context, level) stream.write(')') _dispatch[_types.SimpleNamespace.__repr__] = _pprint_simplenamespace @@ -382,6 +389,25 @@ def _format_dict_items(self, items, stream, indent, allowance, context, if not last: write(delimnl) + def _format_namespace_items(self, items, stream, indent, allowance, context, level): + write = stream.write + delimnl = ',\n' + ' ' * indent + last_index = len(items) - 1 + for i, (key, ent) in enumerate(items): + last = i == last_index + write(key) + write('=') + if id(ent) in context: + # Special-case representation of recursion to match standard + # recursive dataclass repr. + write("...") + else: + self._format(ent, stream, indent + len(key) + 1, + allowance if last else 1, + context, level) + if not last: + write(delimnl) + def _format_items(self, items, stream, indent, allowance, context, level): write = stream.write indent += self._indent_per_level diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py index e5d2ac52d1283..6c714fd39e203 100644 --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import collections +import dataclasses import io import itertools import pprint @@ -66,6 +67,38 @@ class dict_custom_repr(dict): def __repr__(self): return '*'*len(dict.__repr__(self)) + at dataclasses.dataclass +class dataclass1: + field1: str + field2: int + field3: bool = False + field4: int = dataclasses.field(default=1, repr=False) + + at dataclasses.dataclass +class dataclass2: + a: int = 1 + def __repr__(self): + return "custom repr that doesn't fit within pprint width" + + at dataclasses.dataclass(repr=False) +class dataclass3: + a: int = 1 + + at dataclasses.dataclass +class dataclass4: + a: "dataclass4" + b: int = 1 + + at dataclasses.dataclass +class dataclass5: + a: "dataclass6" + b: int = 1 + + at dataclasses.dataclass +class dataclass6: + c: "dataclass5" + d: int = 1 + class Unorderable: def __repr__(self): return str(id(self)) @@ -428,7 +461,7 @@ def test_simple_namespace(self): lazy=7, dog=8, ) - formatted = pprint.pformat(ns, width=60) + formatted = pprint.pformat(ns, width=60, indent=4) self.assertEqual(formatted, """\ namespace(the=0, quick=1, @@ -465,6 +498,56 @@ class AdvancedNamespace(types.SimpleNamespace): pass lazy=7, dog=8)""") + def test_empty_dataclass(self): + dc = dataclasses.make_dataclass("MyDataclass", ())() + formatted = pprint.pformat(dc) + self.assertEqual(formatted, "MyDataclass()") + + def test_small_dataclass(self): + dc = dataclass1("text", 123) + formatted = pprint.pformat(dc) + self.assertEqual(formatted, "dataclass1(field1='text', field2=123, field3=False)") + + def test_larger_dataclass(self): + dc = dataclass1("some fairly long text", int(1e10), True) + formatted = pprint.pformat([dc, dc], width=60, indent=4) + self.assertEqual(formatted, """\ +[ dataclass1(field1='some fairly long text', + field2=10000000000, + field3=True), + dataclass1(field1='some fairly long text', + field2=10000000000, + field3=True)]""") + + def test_dataclass_with_repr(self): + dc = dataclass2() + formatted = pprint.pformat(dc, width=20) + self.assertEqual(formatted, "custom repr that doesn't fit within pprint width") + + def test_dataclass_no_repr(self): + dc = dataclass3() + formatted = pprint.pformat(dc, width=10) + self.assertRegex(formatted, r"") + + def test_recursive_dataclass(self): + dc = dataclass4(None) + dc.a = dc + formatted = pprint.pformat(dc, width=10) + self.assertEqual(formatted, """\ +dataclass4(a=..., + b=1)""") + + def test_cyclic_dataclass(self): + dc5 = dataclass5(None) + dc6 = dataclass6(None) + dc5.a = dc6 + dc6.c = dc5 + formatted = pprint.pformat(dc5, width=10) + self.assertEqual(formatted, """\ +dataclass5(a=dataclass6(c=..., + d=1), + b=1)""") + def test_subclassing(self): # length(repr(obj)) > width o = {'names with spaces': 'should be presented using repr()', diff --git a/Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst b/Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst new file mode 100644 index 0000000000000..aa59b901739b4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst @@ -0,0 +1 @@ +:mod:`pprint` now has support for :class:`dataclasses.dataclass`. Patch by Lewis Gaul. \ No newline at end of file From webhook-mailer at python.org Tue Apr 13 21:24:37 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 14 Apr 2021 01:24:37 -0000 Subject: [Python-checkins] bpo-43680: Deprecate io.OpenWrapper (GH-25357) Message-ID: https://github.com/python/cpython/commit/3bc694d5f3d4eb2e5d2f0b83e498b19662845d4e commit: 3bc694d5f3d4eb2e5d2f0b83e498b19662845d4e branch: master author: Victor Stinner committer: vstinner date: 2021-04-14T03:24:33+02:00 summary: bpo-43680: Deprecate io.OpenWrapper (GH-25357) Deprecate io.OpenWrapper and _pyio.OpenWrapper: use io.open and _pyio.open instead. Until Python 3.9, _pyio.open was not a static method and builtins.open was set to OpenWrapper to not become a bound method when set to a class variable. _io.open is a built-in function whereas _pyio.open is a Python function. In Python 3.10, _pyio.open() is now a static method, and builtins.open() is now io.open(). files: A Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst M Lib/_pyio.py M Lib/io.py M Lib/test/test_io.py diff --git a/Lib/_pyio.py b/Lib/_pyio.py index cb5a619f02a48..56e9a0cb33c5f 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -311,18 +311,20 @@ def _open_code_with_warning(path): open_code = _open_code_with_warning -class DocDescriptor: - """Helper for builtins.open.__doc__ - """ - def __get__(self, obj, typ=None): - return ( - "open(file, mode='r', buffering=-1, encoding=None, " - "errors=None, newline=None, closefd=True)\n\n" + - open.__doc__) - - -# bpo-43680: Alias to open() kept for backward compatibility -OpenWrapper = open +def __getattr__(name): + if name == "OpenWrapper": + # bpo-43680: Until Python 3.9, _pyio.open was not a static method and + # builtins.open was set to OpenWrapper to not become a bound method + # when set to a class variable. _io.open is a built-in function whereas + # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now + # a static method, and builtins.open() is now io.open(). + import warnings + warnings.warn('OpenWrapper is deprecated, use open instead', + DeprecationWarning, stacklevel=2) + global OpenWrapper + OpenWrapper = open + return OpenWrapper + raise AttributeError(name) # In normal operation, both `UnsupportedOperation`s should be bound to the diff --git a/Lib/io.py b/Lib/io.py index 01f1df80ded29..2a6140c3dd509 100644 --- a/Lib/io.py +++ b/Lib/io.py @@ -56,7 +56,22 @@ BufferedWriter, BufferedRWPair, BufferedRandom, IncrementalNewlineDecoder, text_encoding, TextIOWrapper) -OpenWrapper = _io.open # for compatibility with _pyio + +def __getattr__(name): + if name == "OpenWrapper": + # bpo-43680: Until Python 3.9, _pyio.open was not a static method and + # builtins.open was set to OpenWrapper to not become a bound method + # when set to a class variable. _io.open is a built-in function whereas + # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now + # a static method, and builtins.open() is now io.open(). + import warnings + warnings.warn('OpenWrapper is deprecated, use open instead', + DeprecationWarning, stacklevel=2) + global OpenWrapper + OpenWrapper = open + return OpenWrapper + raise AttributeError(name) + # Pretend this exception was created here. UnsupportedOperation.__module__ = "io" diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 48a3cca3fbde4..32c29ea5dc4a7 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -4283,6 +4283,14 @@ def test_check_encoding_warning(self): self.assertTrue( warnings[1].startswith(b":8: EncodingWarning: ")) + @support.cpython_only + # Depending if OpenWrapper was already created or not, the warning is + # emitted or not. For example, the attribute is already created when this + # test is run multiple times. + @warnings_helper.ignore_warnings(category=DeprecationWarning) + def test_openwrapper(self): + self.assertIs(self.io.OpenWrapper, self.io.open) + class CMiscIOTest(MiscIOTest): io = io @@ -4598,8 +4606,6 @@ def load_tests(*args): globs = globals() c_io_ns.update((x.__name__, globs["C" + x.__name__]) for x in mocks) py_io_ns.update((x.__name__, globs["Py" + x.__name__]) for x in mocks) - # Avoid turning open into a bound method. - py_io_ns["open"] = pyio.OpenWrapper for test in tests: if test.__name__.startswith("C"): for name, obj in c_io_ns.items(): diff --git a/Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst b/Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst new file mode 100644 index 0000000000000..e4ddb96491b57 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst @@ -0,0 +1,6 @@ +Deprecate io.OpenWrapper and _pyio.OpenWrapper: use io.open and _pyio.open +instead. Until Python 3.9, _pyio.open was not a static method and +builtins.open was set to OpenWrapper to not become a bound method when set +to a class variable. _io.open is a built-in function whereas _pyio.open is a +Python function. In Python 3.10, _pyio.open() is now a static method, and +builtins.open() is now io.open(). From webhook-mailer at python.org Tue Apr 13 21:36:15 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 14 Apr 2021 01:36:15 -0000 Subject: [Python-checkins] bpo-38530: Offer suggestions on AttributeError (#16856) Message-ID: https://github.com/python/cpython/commit/37494b441aced0362d7edd2956ab3ea7801e60c8 commit: 37494b441aced0362d7edd2956ab3ea7801e60c8 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-14T02:36:07+01:00 summary: bpo-38530: Offer suggestions on AttributeError (#16856) When printing AttributeError, PyErr_Display will offer suggestions of similar attribute names in the object that the exception was raised from: >>> collections.namedtoplo Traceback (most recent call last): File "", line 1, in AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? files: A Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst A Python/suggestions.c M Doc/library/exceptions.rst M Doc/whatsnew/3.10.rst M Include/cpython/pyerrors.h M Include/internal/pycore_pyerrors.h M Lib/test/test_exceptions.py M Makefile.pre.in M Objects/exceptions.c M Objects/object.c M PCbuild/pythoncore.vcxproj M Python/pythonrun.c diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 4dea6701a6bfd..8fdd6ebecfa69 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -149,6 +149,13 @@ The following exceptions are the exceptions that are usually raised. assignment fails. (When an object does not support attribute references or attribute assignments at all, :exc:`TypeError` is raised.) + The :attr:`name` and :attr:`obj` attributes can be set using keyword-only + arguments to the constructor. When set they represent the name of the attribute + that was attempted to be accessed and the object that was accessed for said + attribute, respectively. + + .. versionchanged:: 3.10 + Added the :attr:`name` and :attr:`obj` attributes. .. exception:: EOFError diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b1a33eeb5e61d..b6e954c3cfc40 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -125,8 +125,11 @@ Check :pep:`617` for more details. in :issue:`12782` and :issue:`40334`.) -Better error messages in the parser ------------------------------------ +Better error messages +--------------------- + +SyntaxErrors +~~~~~~~~~~~~ When parsing code that contains unclosed parentheses or brackets the interpreter now includes the location of the unclosed bracket of parentheses instead of displaying @@ -167,6 +170,23 @@ These improvements are inspired by previous work in the PyPy interpreter. (Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in :issue:`40176`.) + +AttributeErrors +~~~~~~~~~~~~~~~ + +When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer +suggestions of simmilar attribute names in the object that the exception was +raised from: + +.. code-block:: python + + >>> collections.namedtoplo + Traceback (most recent call last): + File "", line 1, in + AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? + +(Contributed by Pablo Galindo in :issue:`38530`.) + PEP 626: Precise line numbers for debugging and other tools ----------------------------------------------------------- diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index 6711e8be68ffe..a15082e693cb9 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -62,6 +62,12 @@ typedef struct { PyObject *value; } PyStopIterationObject; +typedef struct { + PyException_HEAD + PyObject *obj; + PyObject *name; +} PyAttributeErrorObject; + /* Compatibility typedefs */ typedef PyOSErrorObject PyEnvironmentErrorObject; #ifdef MS_WINDOWS diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h index 9dd66aec9c3d7..d1af8e91b3b90 100644 --- a/Include/internal/pycore_pyerrors.h +++ b/Include/internal/pycore_pyerrors.h @@ -86,6 +86,8 @@ PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate); PyAPI_FUNC(void) _Py_DumpExtensionModules(int fd, PyInterpreterState *interp); +extern PyObject* _Py_Offer_Suggestions(PyObject* exception); + #ifdef __cplusplus } #endif diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 9dc3a81ffedbd..e1a5ec76d78ad 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1414,6 +1414,165 @@ class TestException(MemoryError): gc_collect() +class AttributeErrorTests(unittest.TestCase): + def test_attributes(self): + # Setting 'attr' should not be a problem. + exc = AttributeError('Ouch!') + self.assertIsNone(exc.name) + self.assertIsNone(exc.obj) + + sentinel = object() + exc = AttributeError('Ouch', name='carry', obj=sentinel) + self.assertEqual(exc.name, 'carry') + self.assertIs(exc.obj, sentinel) + + def test_getattr_has_name_and_obj(self): + class A: + blech = None + + obj = A() + try: + obj.bluch + except AttributeError as exc: + self.assertEqual("bluch", exc.name) + self.assertEqual(obj, exc.obj) + + def test_getattr_has_name_and_obj_for_method(self): + class A: + def blech(self): + return + + obj = A() + try: + obj.bluch() + except AttributeError as exc: + self.assertEqual("bluch", exc.name) + self.assertEqual(obj, exc.obj) + + def test_getattr_suggestions(self): + class Substitution: + noise = more_noise = a = bc = None + blech = None + + class Elimination: + noise = more_noise = a = bc = None + blch = None + + class Addition: + noise = more_noise = a = bc = None + bluchin = None + + class SubstitutionOverElimination: + blach = None + bluc = None + + class SubstitutionOverAddition: + blach = None + bluchi = None + + class EliminationOverAddition: + blucha = None + bluc = None + + for cls, suggestion in [(Substitution, "blech?"), + (Elimination, "blch?"), + (Addition, "bluchin?"), + (EliminationOverAddition, "bluc?"), + (SubstitutionOverElimination, "blach?"), + (SubstitutionOverAddition, "blach?")]: + try: + cls().bluch + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertIn(suggestion, err.getvalue()) + + def test_getattr_suggestions_do_not_trigger_for_long_attributes(self): + class A: + blech = None + + try: + A().somethingverywrong + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("blech", err.getvalue()) + + def test_getattr_suggestions_do_not_trigger_for_big_dicts(self): + class A: + blech = None + # A class with a very big __dict__ will not be consider + # for suggestions. + for index in range(101): + setattr(A, f"index_{index}", None) + + try: + A().bluch + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("blech", err.getvalue()) + + def test_getattr_suggestions_no_args(self): + class A: + blech = None + def __getattr__(self, attr): + raise AttributeError() + + try: + A().bluch + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertIn("blech", err.getvalue()) + + class A: + blech = None + def __getattr__(self, attr): + raise AttributeError + + try: + A().bluch + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertIn("blech", err.getvalue()) + + def test_getattr_suggestions_invalid_args(self): + class NonStringifyClass: + __str__ = None + __repr__ = None + + class A: + blech = None + def __getattr__(self, attr): + raise AttributeError(NonStringifyClass()) + + class B: + blech = None + def __getattr__(self, attr): + raise AttributeError("Error", 23) + + class C: + blech = None + def __getattr__(self, attr): + raise AttributeError(23) + + for cls in [A, B, C]: + try: + cls().bluch + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertIn("blech", err.getvalue()) + + class ImportErrorTests(unittest.TestCase): def test_attributes(self): diff --git a/Makefile.pre.in b/Makefile.pre.in index 365449d644583..eccc72697704b 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -387,6 +387,7 @@ PYTHON_OBJS= \ Python/dtoa.o \ Python/formatter_unicode.o \ Python/fileutils.o \ + Python/suggestions.o \ Python/$(DYNLOADFILE) \ $(LIBOBJS) \ $(MACHDEP_OBJS) \ diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst b/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst new file mode 100644 index 0000000000000..09c73eae77def --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst @@ -0,0 +1,3 @@ +When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer +suggestions of simmilar attribute names in the object that the exception was +raised from. Patch by Pablo Galindo diff --git a/Objects/exceptions.c b/Objects/exceptions.c index dfa069e01d960..4bb415331161f 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1338,9 +1338,76 @@ SimpleExtendsException(PyExc_NameError, UnboundLocalError, /* * AttributeError extends Exception */ -SimpleExtendsException(PyExc_Exception, AttributeError, - "Attribute not found."); +static int +AttributeError_init(PyAttributeErrorObject *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"name", "obj", NULL}; + PyObject *name = NULL; + PyObject *obj = NULL; + + if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1) { + return -1; + } + + PyObject *empty_tuple = PyTuple_New(0); + if (!empty_tuple) { + return -1; + } + if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:AttributeError", kwlist, + &name, &obj)) { + Py_DECREF(empty_tuple); + return -1; + } + Py_DECREF(empty_tuple); + + Py_XINCREF(name); + Py_XSETREF(self->name, name); + + Py_XINCREF(obj); + Py_XSETREF(self->obj, obj); + + return 0; +} + +static int +AttributeError_clear(PyAttributeErrorObject *self) +{ + Py_CLEAR(self->obj); + Py_CLEAR(self->name); + return BaseException_clear((PyBaseExceptionObject *)self); +} + +static void +AttributeError_dealloc(PyAttributeErrorObject *self) +{ + _PyObject_GC_UNTRACK(self); + AttributeError_clear(self); + Py_TYPE(self)->tp_free((PyObject *)self); +} + +static int +AttributeError_traverse(PyAttributeErrorObject *self, visitproc visit, void *arg) +{ + Py_VISIT(self->obj); + Py_VISIT(self->name); + return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg); +} + +static PyMemberDef AttributeError_members[] = { + {"name", T_OBJECT, offsetof(PyAttributeErrorObject, name), 0, PyDoc_STR("attribute name")}, + {"obj", T_OBJECT, offsetof(PyAttributeErrorObject, obj), 0, PyDoc_STR("object")}, + {NULL} /* Sentinel */ +}; + +static PyMethodDef AttributeError_methods[] = { + {NULL} /* Sentinel */ +}; + +ComplexExtendsException(PyExc_Exception, AttributeError, + AttributeError, 0, + AttributeError_methods, AttributeError_members, + 0, BaseException_str, "Attribute not found."); /* * SyntaxError extends Exception diff --git a/Objects/object.c b/Objects/object.c index 4b678403c0761..854cc85b1cfa4 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -884,29 +884,60 @@ _PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w) return result; } +static inline int +set_attribute_error_context(PyObject* v, PyObject* name) +{ + assert(PyErr_Occurred()); + _Py_IDENTIFIER(name); + _Py_IDENTIFIER(obj); + // Intercept AttributeError exceptions and augment them to offer + // suggestions later. + if (PyErr_ExceptionMatches(PyExc_AttributeError)){ + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + PyErr_NormalizeException(&type, &value, &traceback); + if (PyErr_GivenExceptionMatches(value, PyExc_AttributeError) && + (_PyObject_SetAttrId(value, &PyId_name, name) || + _PyObject_SetAttrId(value, &PyId_obj, v))) { + return 1; + } + PyErr_Restore(type, value, traceback); + } + return 0; +} + PyObject * PyObject_GetAttr(PyObject *v, PyObject *name) { PyTypeObject *tp = Py_TYPE(v); - if (!PyUnicode_Check(name)) { PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", Py_TYPE(name)->tp_name); return NULL; } - if (tp->tp_getattro != NULL) - return (*tp->tp_getattro)(v, name); - if (tp->tp_getattr != NULL) { + + PyObject* result = NULL; + if (tp->tp_getattro != NULL) { + result = (*tp->tp_getattro)(v, name); + } + else if (tp->tp_getattr != NULL) { const char *name_str = PyUnicode_AsUTF8(name); - if (name_str == NULL) + if (name_str == NULL) { return NULL; - return (*tp->tp_getattr)(v, (char *)name_str); + } + result = (*tp->tp_getattr)(v, (char *)name_str); } - PyErr_Format(PyExc_AttributeError, - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); - return NULL; + else { + PyErr_Format(PyExc_AttributeError, + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); + } + + if (result == NULL) { + set_attribute_error_context(v, name); + } + return result; } int @@ -1165,6 +1196,8 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) PyErr_Format(PyExc_AttributeError, "'%.50s' object has no attribute '%U'", tp->tp_name, name); + + set_attribute_error_context(obj, name); return 0; } diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 2c1cc0d4cc80f..3c4785c077e6a 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -485,6 +485,7 @@ + diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 99be6295b48a7..321b04eb724ed 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -15,7 +15,7 @@ #include "pycore_interp.h" // PyInterpreterState.importlib #include "pycore_object.h" // _PyDebug_PrintTotalRefs() #include "pycore_parser.h" // _PyParser_ASTFromString() -#include "pycore_pyerrors.h" // _PyErr_Fetch +#include "pycore_pyerrors.h" // _PyErr_Fetch, _Py_Offer_Suggestions #include "pycore_pylifecycle.h" // _Py_UnhandledKeyboardInterrupt #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_sysmodule.h" // _PySys_Audit() @@ -953,6 +953,16 @@ print_exception(PyObject *f, PyObject *value) if (err < 0) { PyErr_Clear(); } + PyObject* suggestions = _Py_Offer_Suggestions(value); + if (suggestions) { + // Add a trailer ". Did you mean: (...)?" + err = PyFile_WriteString(". Did you mean: ", f); + if (err == 0) { + err = PyFile_WriteObject(suggestions, f, Py_PRINT_RAW); + err += PyFile_WriteString("?", f); + } + Py_DECREF(suggestions); + } err += PyFile_WriteString("\n", f); Py_XDECREF(tb); Py_DECREF(value); diff --git a/Python/suggestions.c b/Python/suggestions.c new file mode 100644 index 0000000000000..2c0858d558d00 --- /dev/null +++ b/Python/suggestions.c @@ -0,0 +1,146 @@ +#include "Python.h" + +#include "pycore_pyerrors.h" + +#define MAX_DISTANCE 3 +#define MAX_CANDIDATE_ITEMS 100 +#define MAX_STRING_SIZE 20 + +/* Calculate the Levenshtein distance between string1 and string2 */ +static size_t +levenshtein_distance(const char *a, const char *b) { + if (a == NULL || b == NULL) { + return 0; + } + + const size_t a_size = strlen(a); + const size_t b_size = strlen(b); + + if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) { + return 0; + } + + // Both strings are the same (by identity) + if (a == b) { + return 0; + } + + // The first string is empty + if (a_size == 0) { + return b_size; + } + + // The second string is empty + if (b_size == 0) { + return a_size; + } + + size_t *buffer = PyMem_Calloc(a_size, sizeof(size_t)); + if (buffer == NULL) { + return 0; + } + + // Initialize the buffer row + size_t index = 0; + while (index < a_size) { + buffer[index] = index + 1; + index++; + } + + size_t b_index = 0; + size_t result = 0; + while (b_index < b_size) { + char code = b[b_index]; + size_t distance = result = b_index++; + index = SIZE_MAX; + while (++index < a_size) { + size_t b_distance = code == a[index] ? distance : distance + 1; + distance = buffer[index]; + if (distance > result) { + if (b_distance > result) { + result = result + 1; + } else { + result = b_distance; + } + } else { + if (b_distance > distance) { + result = distance + 1; + } else { + result = b_distance; + } + } + buffer[index] = result; + } + } + PyMem_Free(buffer); + return result; +} + +static inline PyObject * +calculate_suggestions(PyObject *dir, + PyObject *name) { + assert(!PyErr_Occurred()); + assert(PyList_CheckExact(dir)); + + Py_ssize_t dir_size = PyList_GET_SIZE(dir); + if (dir_size >= MAX_CANDIDATE_ITEMS) { + return NULL; + } + + Py_ssize_t suggestion_distance = PyUnicode_GetLength(name); + PyObject *suggestion = NULL; + for (int i = 0; i < dir_size; ++i) { + PyObject *item = PyList_GET_ITEM(dir, i); + const char *name_str = PyUnicode_AsUTF8(name); + if (name_str == NULL) { + PyErr_Clear(); + continue; + } + Py_ssize_t current_distance = levenshtein_distance(PyUnicode_AsUTF8(name), PyUnicode_AsUTF8(item)); + if (current_distance == 0 || current_distance > MAX_DISTANCE) { + continue; + } + if (!suggestion || current_distance < suggestion_distance) { + suggestion = item; + suggestion_distance = current_distance; + } + } + if (!suggestion) { + return NULL; + } + Py_INCREF(suggestion); + return suggestion; +} + +static PyObject * +offer_suggestions_for_attribute_error(PyAttributeErrorObject *exc) { + PyObject *name = exc->name; // borrowed reference + PyObject *obj = exc->obj; // borrowed reference + + // Abort if we don't have an attribute name or we have an invalid one + if (name == NULL || obj == NULL || !PyUnicode_CheckExact(name)) { + return NULL; + } + + PyObject *dir = PyObject_Dir(obj); + if (dir == NULL) { + return NULL; + } + + PyObject *suggestions = calculate_suggestions(dir, name); + Py_DECREF(dir); + return suggestions; +} + +// Offer suggestions for a given exception. Returns a python string object containing the +// suggestions. This function does not raise exceptions and returns NULL if no suggestion was found. +PyObject *_Py_Offer_Suggestions(PyObject *exception) { + PyObject *result = NULL; + assert(!PyErr_Occurred()); // Check that we are not going to clean any existing exception + if (PyErr_GivenExceptionMatches(exception, PyExc_AttributeError)) { + result = offer_suggestions_for_attribute_error((PyAttributeErrorObject *) exception); + } + assert(!PyErr_Occurred()); + return result; +} + From webhook-mailer at python.org Wed Apr 14 01:09:56 2021 From: webhook-mailer at python.org (methane) Date: Wed, 14 Apr 2021 05:09:56 -0000 Subject: [Python-checkins] bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) Message-ID: https://github.com/python/cpython/commit/133705b85cc25d1e6684d32f8943ca288fadfda0 commit: 133705b85cc25d1e6684d32f8943ca288fadfda0 branch: master author: Bob Kline committer: methane date: 2021-04-14T14:09:32+09:00 summary: bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) files: M Doc/tutorial/venv.rst diff --git a/Doc/tutorial/venv.rst b/Doc/tutorial/venv.rst index c4ae6b6e9931f..221c11ca74b4e 100644 --- a/Doc/tutorial/venv.rst +++ b/Doc/tutorial/venv.rst @@ -95,20 +95,9 @@ Managing Packages with pip You can install, upgrade, and remove packages using a program called :program:`pip`. By default ``pip`` will install packages from the Python Package Index, . You can browse the Python -Package Index by going to it in your web browser, or you can use ``pip``'s -limited search feature: +Package Index by going to it in your web browser. -.. code-block:: bash - - (tutorial-env) $ pip search astronomy - skyfield - Elegant astronomy for Python - gary - Galactic astronomy and gravitational dynamics. - novas - The United States Naval Observatory NOVAS astronomy library - astroobs - Provides astronomy ephemeris to plan telescope observations - PyAstronomy - A collection of astronomy related tools for Python. - ... - -``pip`` has a number of subcommands: "search", "install", "uninstall", +``pip`` has a number of subcommands: "install", "uninstall", "freeze", etc. (Consult the :ref:`installing-index` guide for complete documentation for ``pip``.) From webhook-mailer at python.org Wed Apr 14 01:13:06 2021 From: webhook-mailer at python.org (methane) Date: Wed, 14 Apr 2021 05:13:06 -0000 Subject: [Python-checkins] bpo-43712 : fileinput: Add encoding parameter (GH-25272) Message-ID: https://github.com/python/cpython/commit/333d10cbb53dd5f28d76f659a49bf0735f8509d8 commit: 333d10cbb53dd5f28d76f659a49bf0735f8509d8 branch: master author: Inada Naoki committer: methane date: 2021-04-14T14:12:58+09:00 summary: bpo-43712 : fileinput: Add encoding parameter (GH-25272) files: A Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst M Doc/library/fileinput.rst M Doc/whatsnew/3.10.rst M Lib/fileinput.py M Lib/test/test_fileinput.py M Misc/ACKS diff --git a/Doc/library/fileinput.rst b/Doc/library/fileinput.rst index cc4039a30e38a..819640045cadf 100644 --- a/Doc/library/fileinput.rst +++ b/Doc/library/fileinput.rst @@ -18,7 +18,7 @@ write one file see :func:`open`. The typical use is:: import fileinput - for line in fileinput.input(): + for line in fileinput.input(encoding="utf-8"): process(line) This iterates over the lines of all files listed in ``sys.argv[1:]``, defaulting @@ -49,13 +49,14 @@ a file may not have one. You can control how files are opened by providing an opening hook via the *openhook* parameter to :func:`fileinput.input` or :class:`FileInput()`. The hook must be a function that takes two arguments, *filename* and *mode*, and -returns an accordingly opened file-like object. Two useful hooks are already -provided by this module. +returns an accordingly opened file-like object. If *encoding* and/or *errors* +are specified, they will be passed to the hook as aditional keyword arguments. +This module provides a :func:`hook_encoded` to support compressed files. The following function is the primary interface of this module: -.. function:: input(files=None, inplace=False, backup='', *, mode='r', openhook=None) +.. function:: input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None) Create an instance of the :class:`FileInput` class. The instance will be used as global state for the functions of this module, and is also returned to use @@ -66,7 +67,7 @@ The following function is the primary interface of this module: :keyword:`with` statement. In this example, *input* is closed after the :keyword:`!with` statement is exited, even if an exception occurs:: - with fileinput.input(files=('spam.txt', 'eggs.txt')) as f: + with fileinput.input(files=('spam.txt', 'eggs.txt'), encoding="utf-8") as f: for line in f: process(line) @@ -76,6 +77,9 @@ The following function is the primary interface of this module: .. versionchanged:: 3.8 The keyword parameters *mode* and *openhook* are now keyword-only. + .. versionchanged:: 3.10 + The keyword-only parameter *encoding* and *errors* are added. + The following functions use the global state created by :func:`fileinput.input`; if there is no active state, :exc:`RuntimeError` is raised. @@ -137,7 +141,7 @@ The class which implements the sequence behavior provided by the module is available for subclassing as well: -.. class:: FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None) +.. class:: FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None) Class :class:`FileInput` is the implementation; its methods :meth:`filename`, :meth:`fileno`, :meth:`lineno`, :meth:`filelineno`, :meth:`isfirstline`, @@ -155,6 +159,8 @@ available for subclassing as well: *filename* and *mode*, and returns an accordingly opened file-like object. You cannot use *inplace* and *openhook* together. + You can specify *encoding* and *errors* that is passed to :func:`open` or *openhook*. + A :class:`FileInput` instance can be used as a context manager in the :keyword:`with` statement. In this example, *input* is closed after the :keyword:`!with` statement is exited, even if an exception occurs:: @@ -162,7 +168,6 @@ available for subclassing as well: with FileInput(files=('spam.txt', 'eggs.txt')) as input: process(input) - .. versionchanged:: 3.2 Can be used as a context manager. @@ -175,6 +180,8 @@ available for subclassing as well: .. versionchanged:: 3.8 The keyword parameter *mode* and *openhook* are now keyword-only. + .. versionchanged:: 3.10 + The keyword-only parameter *encoding* and *errors* are added. **Optional in-place filtering:** if the keyword argument ``inplace=True`` is @@ -191,14 +198,20 @@ when standard input is read. The two following opening hooks are provided by this module: -.. function:: hook_compressed(filename, mode) +.. function:: hook_compressed(filename, mode, *, encoding=None, errors=None) Transparently opens files compressed with gzip and bzip2 (recognized by the extensions ``'.gz'`` and ``'.bz2'``) using the :mod:`gzip` and :mod:`bz2` modules. If the filename extension is not ``'.gz'`` or ``'.bz2'``, the file is opened normally (ie, using :func:`open` without any decompression). - Usage example: ``fi = fileinput.FileInput(openhook=fileinput.hook_compressed)`` + The *encoding* and *errors* values are passed to to :class:`io.TextIOWrapper` + for compressed files and open for normal files. + + Usage example: ``fi = fileinput.FileInput(openhook=fileinput.hook_compressed, encoding="utf-8")`` + + .. versionchanged:: 3.10 + The keyword-only parameter *encoding* and *errors* are added. .. function:: hook_encoded(encoding, errors=None) @@ -212,3 +225,7 @@ The two following opening hooks are provided by this module: .. versionchanged:: 3.6 Added the optional *errors* parameter. + + .. deprecated:: 3.10 + This function is deprecated since :func:`input` and :class:`FileInput` + now have *encoding* and *errors* parameters. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b6e954c3cfc40..21f912871d47a 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -760,6 +760,17 @@ enum module constants have a :func:`repr` of ``module_name.member_name``. (Contributed by Ethan Furman in :issue:`40066`.) +fileinput +--------- + +Added *encoding* and *errors* parameters in :func:`fileinput.input` and +:class:`fileinput.FileInput`. +(Contributed by Inada Naoki in :issue:`43712`.) + +:func:`fileinput.hook_compressed` now returns :class:`TextIOWrapper` object +when *mode* is "r" and file is compressed, like uncompressed files. +(Contributed by Inada Naoki in :issue:`5758`.) + gc -- diff --git a/Lib/fileinput.py b/Lib/fileinput.py index 0c31f93ed8f2e..6218c4f4e2fdf 100644 --- a/Lib/fileinput.py +++ b/Lib/fileinput.py @@ -3,7 +3,7 @@ Typical use is: import fileinput - for line in fileinput.input(): + for line in fileinput.input(encoding="utf-8"): process(line) This iterates over the lines of all files listed in sys.argv[1:], @@ -63,15 +63,9 @@ deleted when the output file is closed. In-place filtering is disabled when standard input is read. XXX The current implementation does not work for MS-DOS 8+3 filesystems. - -XXX Possible additions: - -- optional getopt argument processing -- isatty() -- read(), read(size), even readlines() - """ +import io import sys, os from types import GenericAlias @@ -81,7 +75,8 @@ _state = None -def input(files=None, inplace=False, backup="", *, mode="r", openhook=None): +def input(files=None, inplace=False, backup="", *, mode="r", openhook=None, + encoding=None, errors=None): """Return an instance of the FileInput class, which can be iterated. The parameters are passed to the constructor of the FileInput class. @@ -91,7 +86,8 @@ def input(files=None, inplace=False, backup="", *, mode="r", openhook=None): global _state if _state and _state._file: raise RuntimeError("input() already active") - _state = FileInput(files, inplace, backup, mode=mode, openhook=openhook) + _state = FileInput(files, inplace, backup, mode=mode, openhook=openhook, + encoding=encoding, errors=errors) return _state def close(): @@ -186,7 +182,7 @@ class FileInput: """ def __init__(self, files=None, inplace=False, backup="", *, - mode="r", openhook=None): + mode="r", openhook=None, encoding=None, errors=None): if isinstance(files, str): files = (files,) elif isinstance(files, os.PathLike): @@ -209,6 +205,16 @@ def __init__(self, files=None, inplace=False, backup="", *, self._file = None self._isstdin = False self._backupfilename = None + self._encoding = encoding + self._errors = errors + + # We can not use io.text_encoding() here because old openhook doesn't + # take encoding parameter. + if "b" not in mode and encoding is None and sys.flags.warn_default_encoding: + import warnings + warnings.warn("'encoding' argument not specified.", + EncodingWarning, 2) + # restrict mode argument to reading modes if mode not in ('r', 'rU', 'U', 'rb'): raise ValueError("FileInput opening mode must be one of " @@ -362,9 +368,20 @@ def _readline(self): else: # This may raise OSError if self._openhook: - self._file = self._openhook(self._filename, self._mode) + # Custom hooks made previous to Python 3.10 didn't have + # encoding argument + if self._encoding is None: + self._file = self._openhook(self._filename, self._mode) + else: + self._file = self._openhook( + self._filename, self._mode, encoding=self._encoding, errors=self._errors) else: - self._file = open(self._filename, self._mode) + # EncodingWarning is emitted in __init__() already + if "b" not in self._mode: + encoding = self._encoding or "locale" + else: + encoding = None + self._file = open(self._filename, self._mode, encoding=encoding, errors=self._errors) self._readline = self._file.readline # hide FileInput._readline return self._readline() @@ -395,16 +412,23 @@ def isstdin(self): __class_getitem__ = classmethod(GenericAlias) -def hook_compressed(filename, mode): +def hook_compressed(filename, mode, *, encoding=None, errors=None): + if encoding is None: # EncodingWarning is emitted in FileInput() already. + encoding = "locale" ext = os.path.splitext(filename)[1] if ext == '.gz': import gzip - return gzip.open(filename, mode) + stream = gzip.open(filename, mode) elif ext == '.bz2': import bz2 - return bz2.BZ2File(filename, mode) + stream = bz2.BZ2File(filename, mode) else: - return open(filename, mode) + return open(filename, mode, encoding=encoding, errors=errors) + + # gzip and bz2 are binary mode by default. + if "b" not in mode: + stream = io.TextIOWrapper(stream, encoding=encoding, errors=errors) + return stream def hook_encoded(encoding, errors=None): diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index d5edf74938548..d01d39627219e 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -2,6 +2,7 @@ Tests for fileinput module. Nick Mathewson ''' +import io import os import sys import re @@ -238,7 +239,7 @@ def test_opening_mode(self): # try opening in universal newline mode t1 = self.writeTmp(b"A\nB\r\nC\rD", mode="wb") with warnings_helper.check_warnings(('', DeprecationWarning)): - fi = FileInput(files=t1, mode="U") + fi = FileInput(files=t1, mode="U", encoding="utf-8") with warnings_helper.check_warnings(('', DeprecationWarning)): lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C\n", "D"]) @@ -278,7 +279,7 @@ def test_file_opening_hook(self): class CustomOpenHook: def __init__(self): self.invoked = False - def __call__(self, *args): + def __call__(self, *args, **kargs): self.invoked = True return open(*args) @@ -334,6 +335,14 @@ def test_inplace_binary_write_mode(self): with open(temp_file, 'rb') as f: self.assertEqual(f.read(), b'New line.') + def test_file_hook_backward_compatibility(self): + def old_hook(filename, mode): + return io.StringIO("I used to receive only filename and mode") + t = self.writeTmp("\n") + with FileInput([t], openhook=old_hook) as fi: + result = fi.readline() + self.assertEqual(result, "I used to receive only filename and mode") + def test_context_manager(self): t1 = self.writeTmp("A\nB\nC") t2 = self.writeTmp("D\nE\nF") @@ -529,12 +538,14 @@ class MockFileInput: """A class that mocks out fileinput.FileInput for use during unit tests""" def __init__(self, files=None, inplace=False, backup="", *, - mode="r", openhook=None): + mode="r", openhook=None, encoding=None, errors=None): self.files = files self.inplace = inplace self.backup = backup self.mode = mode self.openhook = openhook + self.encoding = encoding + self.errors = errors self._file = None self.invocation_counts = collections.defaultdict(lambda: 0) self.return_values = {} @@ -637,10 +648,11 @@ def do_test_call_input(self): backup = object() mode = object() openhook = object() + encoding = object() # call fileinput.input() with different values for each argument result = fileinput.input(files=files, inplace=inplace, backup=backup, - mode=mode, openhook=openhook) + mode=mode, openhook=openhook, encoding=encoding) # ensure fileinput._state was set to the returned object self.assertIs(result, fileinput._state, "fileinput._state") @@ -863,11 +875,15 @@ def test_state_is_not_None(self): self.assertIs(fileinput._state, instance) class InvocationRecorder: + def __init__(self): self.invocation_count = 0 + def __call__(self, *args, **kwargs): self.invocation_count += 1 self.last_invocation = (args, kwargs) + return io.BytesIO(b'some bytes') + class Test_hook_compressed(unittest.TestCase): """Unit tests for fileinput.hook_compressed()""" @@ -886,33 +902,43 @@ def test_gz_ext_fake(self): original_open = gzip.open gzip.open = self.fake_open try: - result = fileinput.hook_compressed("test.gz", 3) + result = fileinput.hook_compressed("test.gz", "3") finally: gzip.open = original_open self.assertEqual(self.fake_open.invocation_count, 1) - self.assertEqual(self.fake_open.last_invocation, (("test.gz", 3), {})) + self.assertEqual(self.fake_open.last_invocation, (("test.gz", "3"), {})) + + @unittest.skipUnless(gzip, "Requires gzip and zlib") + def test_gz_with_encoding_fake(self): + original_open = gzip.open + gzip.open = lambda filename, mode: io.BytesIO(b'Ex-binary string') + try: + result = fileinput.hook_compressed("test.gz", "3", encoding="utf-8") + finally: + gzip.open = original_open + self.assertEqual(list(result), ['Ex-binary string']) @unittest.skipUnless(bz2, "Requires bz2") def test_bz2_ext_fake(self): original_open = bz2.BZ2File bz2.BZ2File = self.fake_open try: - result = fileinput.hook_compressed("test.bz2", 4) + result = fileinput.hook_compressed("test.bz2", "4") finally: bz2.BZ2File = original_open self.assertEqual(self.fake_open.invocation_count, 1) - self.assertEqual(self.fake_open.last_invocation, (("test.bz2", 4), {})) + self.assertEqual(self.fake_open.last_invocation, (("test.bz2", "4"), {})) def test_blah_ext(self): - self.do_test_use_builtin_open("abcd.blah", 5) + self.do_test_use_builtin_open("abcd.blah", "5") def test_gz_ext_builtin(self): - self.do_test_use_builtin_open("abcd.Gz", 6) + self.do_test_use_builtin_open("abcd.Gz", "6") def test_bz2_ext_builtin(self): - self.do_test_use_builtin_open("abcd.Bz2", 7) + self.do_test_use_builtin_open("abcd.Bz2", "7") def do_test_use_builtin_open(self, filename, mode): original_open = self.replace_builtin_open(self.fake_open) @@ -923,7 +949,7 @@ def do_test_use_builtin_open(self, filename, mode): self.assertEqual(self.fake_open.invocation_count, 1) self.assertEqual(self.fake_open.last_invocation, - ((filename, mode), {})) + ((filename, mode), {'encoding': 'locale', 'errors': None})) @staticmethod def replace_builtin_open(new_open_func): diff --git a/Misc/ACKS b/Misc/ACKS index 42f0efdd536dd..2502ba816ac92 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -33,6 +33,7 @@ Nir Aides Akira Yaniv Aknin Jyrki Alakuijala +Tatiana Al-Chueyr Steve Alexander Fred Allen Jeff Allen diff --git a/Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst b/Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst new file mode 100644 index 0000000000000..d11df0d102700 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst @@ -0,0 +1,2 @@ +Add ``encoding`` and ``errors`` parameters to :func:`fileinput.input` and +:class:`fileinput.FileInput`. From webhook-mailer at python.org Wed Apr 14 01:19:54 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 14 Apr 2021 05:19:54 -0000 Subject: [Python-checkins] bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) Message-ID: https://github.com/python/cpython/commit/6ac1ea25a2ba2aae742e191784cf73033b3ab332 commit: 6ac1ea25a2ba2aae742e191784cf73033b3ab332 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T22:19:49-07:00 summary: bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) (cherry picked from commit 133705b85cc25d1e6684d32f8943ca288fadfda0) Co-authored-by: Bob Kline files: M Doc/tutorial/venv.rst diff --git a/Doc/tutorial/venv.rst b/Doc/tutorial/venv.rst index 558076d57356d..891dbdb97db1c 100644 --- a/Doc/tutorial/venv.rst +++ b/Doc/tutorial/venv.rst @@ -95,20 +95,9 @@ Managing Packages with pip You can install, upgrade, and remove packages using a program called :program:`pip`. By default ``pip`` will install packages from the Python Package Index, . You can browse the Python -Package Index by going to it in your web browser, or you can use ``pip``'s -limited search feature: +Package Index by going to it in your web browser. -.. code-block:: bash - - (tutorial-env) $ pip search astronomy - skyfield - Elegant astronomy for Python - gary - Galactic astronomy and gravitational dynamics. - novas - The United States Naval Observatory NOVAS astronomy library - astroobs - Provides astronomy ephemeris to plan telescope observations - PyAstronomy - A collection of astronomy related tools for Python. - ... - -``pip`` has a number of subcommands: "search", "install", "uninstall", +``pip`` has a number of subcommands: "install", "uninstall", "freeze", etc. (Consult the :ref:`installing-index` guide for complete documentation for ``pip``.) From webhook-mailer at python.org Wed Apr 14 01:34:53 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 14 Apr 2021 05:34:53 -0000 Subject: [Python-checkins] bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) Message-ID: https://github.com/python/cpython/commit/57873af35aad98c6428b1718aaee4b16a82ea3f5 commit: 57873af35aad98c6428b1718aaee4b16a82ea3f5 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-13T22:34:39-07:00 summary: bpo-43777: Drop description of "pip search" command from tutorial (GH-25287) (cherry picked from commit 133705b85cc25d1e6684d32f8943ca288fadfda0) Co-authored-by: Bob Kline files: M Doc/tutorial/venv.rst diff --git a/Doc/tutorial/venv.rst b/Doc/tutorial/venv.rst index f422146aae8a3..2782db9da077d 100644 --- a/Doc/tutorial/venv.rst +++ b/Doc/tutorial/venv.rst @@ -95,20 +95,9 @@ Managing Packages with pip You can install, upgrade, and remove packages using a program called :program:`pip`. By default ``pip`` will install packages from the Python Package Index, . You can browse the Python -Package Index by going to it in your web browser, or you can use ``pip``'s -limited search feature: +Package Index by going to it in your web browser. -.. code-block:: bash - - (tutorial-env) $ pip search astronomy - skyfield - Elegant astronomy for Python - gary - Galactic astronomy and gravitational dynamics. - novas - The United States Naval Observatory NOVAS astronomy library - astroobs - Provides astronomy ephemeris to plan telescope observations - PyAstronomy - A collection of astronomy related tools for Python. - ... - -``pip`` has a number of subcommands: "search", "install", "uninstall", +``pip`` has a number of subcommands: "install", "uninstall", "freeze", etc. (Consult the :ref:`installing-index` guide for complete documentation for ``pip``.) From webhook-mailer at python.org Wed Apr 14 07:18:54 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 11:18:54 -0000 Subject: [Python-checkins] bpo-43752: Fix sqlite3 regression for zero-sized blobs with converters (GH-25228) Message-ID: https://github.com/python/cpython/commit/6f1e8ccffa5b1272a36a35405d3c4e4bbba0c082 commit: 6f1e8ccffa5b1272a36a35405d3c4e4bbba0c082 branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-14T14:18:49+03:00 summary: bpo-43752: Fix sqlite3 regression for zero-sized blobs with converters (GH-25228) files: A Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst M Lib/sqlite3/test/types.py M Modules/_sqlite/cursor.c diff --git a/Lib/sqlite3/test/types.py b/Lib/sqlite3/test/types.py index 2370dd1693042..4bb1de80887b8 100644 --- a/Lib/sqlite3/test/types.py +++ b/Lib/sqlite3/test/types.py @@ -255,7 +255,9 @@ def test_number2(self): def test_convert_zero_sized_blob(self): self.con.execute("insert into test(cbin) values (?)", (b"",)) cur = self.con.execute("select cbin from test") - self.assertEqual(cur.fetchone()[0], b"blobish") + # Zero-sized blobs with converters returns None. This differs from + # blobs without a converter, where b"" is returned. + self.assertIsNone(cur.fetchone()[0]) class ColNamesTests(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst b/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst new file mode 100644 index 0000000000000..ef4b9539a8055 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst @@ -0,0 +1,3 @@ +Fix :mod:`sqlite3` regression for zero-sized blobs with converters, where +``b""`` was returned instead of ``None``. The regression was introduced by +GH-24723. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index dfaa5577ab408..09c9a8c92d124 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -240,7 +240,6 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self) { int i, numcols; PyObject* row; - PyObject* item = NULL; int coltype; PyObject* converter; PyObject* converted; @@ -282,18 +281,22 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self) */ if (converter != Py_None) { const void *blob = sqlite3_column_blob(self->statement->st, i); - if (blob == NULL && sqlite3_errcode(db) == SQLITE_NOMEM) { - PyErr_NoMemory(); - goto error; + if (blob == NULL) { + if (sqlite3_errcode(db) == SQLITE_NOMEM) { + PyErr_NoMemory(); + goto error; + } + converted = Py_NewRef(Py_None); } - - nbytes = sqlite3_column_bytes(self->statement->st, i); - item = PyBytes_FromStringAndSize(blob, nbytes); - if (item == NULL) { - goto error; + else { + nbytes = sqlite3_column_bytes(self->statement->st, i); + PyObject *item = PyBytes_FromStringAndSize(blob, nbytes); + if (item == NULL) { + goto error; + } + converted = PyObject_CallOneArg(converter, item); + Py_DECREF(item); } - converted = PyObject_CallOneArg(converter, item); - Py_DECREF(item); } else { Py_BEGIN_ALLOW_THREADS coltype = sqlite3_column_type(self->statement->st, i); From webhook-mailer at python.org Wed Apr 14 07:45:26 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 14 Apr 2021 11:45:26 -0000 Subject: [Python-checkins] bpo-43825: Fix deprecation warnings in test_cmd_line and test_collections (GH-25380) Message-ID: https://github.com/python/cpython/commit/b8509ffa82d393d9d4a0f5520edca057978bbd86 commit: b8509ffa82d393d9d4a0f5520edca057978bbd86 branch: master author: Karthikeyan Singaravelan committer: vstinner date: 2021-04-14T13:45:22+02:00 summary: bpo-43825: Fix deprecation warnings in test_cmd_line and test_collections (GH-25380) * Fix deprecation warnings due to invalid escape sequences. * Use self.assertEqual instead of deprecated self.assertEquals. files: M Lib/test/test_cmd_line.py M Lib/test/test_collections.py diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 375876768b29f..cbf9ff2a863c3 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -862,7 +862,7 @@ def test_tokenizer_error_with_stdin(self): self.check_string(b"(1+2+3") def test_decoding_error_at_the_end_of_the_line(self): - self.check_string(b"'\u1f'") + self.check_string(br"'\u1f'") def test_main(): support.run_unittest(CmdLineTest, IgnoreEnvironmentTest, SyntaxErrorTests) diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 7b245c08b5ddd..98690d231e606 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1515,7 +1515,7 @@ def __repr__(self): items = [5,43,2,1] s = MySet(items) r = s.pop() - self.assertEquals(len(s), len(items) - 1) + self.assertEqual(len(s), len(items) - 1) self.assertNotIn(r, s) self.assertIn(r, items) From webhook-mailer at python.org Wed Apr 14 07:45:54 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 11:45:54 -0000 Subject: [Python-checkins] bpo-43265: Improve sqlite3.Connection.backup error handling (GH-24586) Message-ID: https://github.com/python/cpython/commit/c1ae7419975f7d664320f66ea3acc8663bbf76cf commit: c1ae7419975f7d664320f66ea3acc8663bbf76cf branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-14T14:45:49+03:00 summary: bpo-43265: Improve sqlite3.Connection.backup error handling (GH-24586) files: A Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst M Lib/sqlite3/test/backup.py M Modules/_sqlite/connection.c diff --git a/Lib/sqlite3/test/backup.py b/Lib/sqlite3/test/backup.py index cbe24df2e9c96..4e30594bec6d9 100644 --- a/Lib/sqlite3/test/backup.py +++ b/Lib/sqlite3/test/backup.py @@ -149,10 +149,7 @@ def test_database_source_name(self): with self.assertRaises(sqlite.OperationalError) as cm: with sqlite.connect(':memory:') as bck: self.cx.backup(bck, name='non-existing') - self.assertIn( - str(cm.exception), - ['SQL logic error', 'SQL logic error or missing database'] - ) + self.assertIn("unknown database", str(cm.exception)) self.cx.execute("ATTACH DATABASE ':memory:' AS attached_db") self.cx.execute('CREATE TABLE attached_db.foo (key INTEGER)') diff --git a/Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst b/Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst new file mode 100644 index 0000000000000..3e7f34ea5649d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst @@ -0,0 +1,3 @@ +Improve :meth:`sqlite3.Connection.backup` error handling. The error message +for non-existant target database names is now ``unknown database `` instead of ``SQL logic error``. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 9bf2a35ab0e55..6d3ccb9b94126 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1601,7 +1601,6 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, /*[clinic end generated code: output=306a3e6a38c36334 input=30ae45fc420bfd3b]*/ { int rc; - int callback_error = 0; int sleep_ms = (int)(sleep * 1000.0); sqlite3 *bck_conn; sqlite3_backup *bck_handle; @@ -1643,60 +1642,50 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, bck_handle = sqlite3_backup_init(bck_conn, "main", self->db, name); Py_END_ALLOW_THREADS - if (bck_handle) { - do { - Py_BEGIN_ALLOW_THREADS - rc = sqlite3_backup_step(bck_handle, pages); - Py_END_ALLOW_THREADS + if (bck_handle == NULL) { + _pysqlite_seterror(bck_conn, NULL); + return NULL; + } - if (progress != Py_None) { - PyObject *res; - - res = PyObject_CallFunction(progress, "iii", rc, - sqlite3_backup_remaining(bck_handle), - sqlite3_backup_pagecount(bck_handle)); - if (res == NULL) { - /* User's callback raised an error: interrupt the loop and - propagate it. */ - callback_error = 1; - rc = -1; - } else { - Py_DECREF(res); - } - } + do { + Py_BEGIN_ALLOW_THREADS + rc = sqlite3_backup_step(bck_handle, pages); + Py_END_ALLOW_THREADS - /* Sleep for a while if there are still further pages to copy and - the engine could not make any progress */ - if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { + if (progress != Py_None) { + int remaining = sqlite3_backup_remaining(bck_handle); + int pagecount = sqlite3_backup_pagecount(bck_handle); + PyObject *res = PyObject_CallFunction(progress, "iii", rc, + remaining, pagecount); + if (res == NULL) { + /* Callback failed: abort backup and bail. */ Py_BEGIN_ALLOW_THREADS - sqlite3_sleep(sleep_ms); + sqlite3_backup_finish(bck_handle); Py_END_ALLOW_THREADS + return NULL; } - } while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED); - - Py_BEGIN_ALLOW_THREADS - rc = sqlite3_backup_finish(bck_handle); - Py_END_ALLOW_THREADS - } else { - rc = _pysqlite_seterror(bck_conn, NULL); - } + Py_DECREF(res); + } - if (!callback_error && rc != SQLITE_OK) { - /* We cannot use _pysqlite_seterror() here because the backup APIs do - not set the error status on the connection object, but rather on - the backup handle. */ - if (rc == SQLITE_NOMEM) { - (void)PyErr_NoMemory(); - } else { - PyErr_SetString(pysqlite_OperationalError, sqlite3_errstr(rc)); + /* Sleep for a while if there are still further pages to copy and + the engine could not make any progress */ + if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { + Py_BEGIN_ALLOW_THREADS + sqlite3_sleep(sleep_ms); + Py_END_ALLOW_THREADS } - } + } while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED); - if (!callback_error && rc == SQLITE_OK) { - Py_RETURN_NONE; - } else { + Py_BEGIN_ALLOW_THREADS + rc = sqlite3_backup_finish(bck_handle); + Py_END_ALLOW_THREADS + + if (rc != SQLITE_OK) { + _pysqlite_seterror(bck_conn, NULL); return NULL; } + + Py_RETURN_NONE; } /*[clinic input] From webhook-mailer at python.org Wed Apr 14 08:28:59 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 12:28:59 -0000 Subject: [Python-checkins] bpo-20364: Improve sqlite3 placeholder docs (GH-25003) Message-ID: https://github.com/python/cpython/commit/3386ca0b36327afeef8d7eff277b2aed1030c08d commit: 3386ca0b36327afeef8d7eff277b2aed1030c08d branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-14T15:28:55+03:00 summary: bpo-20364: Improve sqlite3 placeholder docs (GH-25003) files: M Doc/includes/sqlite3/execute_1.py M Doc/library/sqlite3.rst M Doc/tools/susp-ignored.csv diff --git a/Doc/includes/sqlite3/execute_1.py b/Doc/includes/sqlite3/execute_1.py index 3466b1265a5bf..42aad4d5839f0 100644 --- a/Doc/includes/sqlite3/execute_1.py +++ b/Doc/includes/sqlite3/execute_1.py @@ -2,17 +2,22 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -cur.execute("create table people (name_last, age)") - -who = "Yeltsin" -age = 72 +cur.execute("create table lang (lang_name, lang_age)") # This is the qmark style: -cur.execute("insert into people values (?, ?)", (who, age)) +cur.execute("insert into lang values (?, ?)", ("C", 49)) -# And this is the named style: -cur.execute("select * from people where name_last=:who and age=:age", {"who": who, "age": age}) +# The qmark style used with executemany(): +lang_list = [ + ("Fortran", 64), + ("Python", 30), + ("Go", 11), +] +cur.executemany("insert into lang values (?, ?)", lang_list) -print(cur.fetchone()) +# And this is the named style: +cur.execute("select * from lang where lang_name=:name and lang_age=:age", + {"name": "C", "age": 49}) +print(cur.fetchall()) con.close() diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index aee58a4bbfc07..6bdf4ed0d81bc 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -55,33 +55,6 @@ The data you've saved is persistent and is available in subsequent sessions:: con = sqlite3.connect('example.db') cur = con.cursor() -Usually your SQL operations will need to use values from Python variables. You -shouldn't assemble your query using Python's string operations because doing so -is insecure; it makes your program vulnerable to an SQL injection attack -(see https://xkcd.com/327/ for humorous example of what can go wrong). - -Instead, use the DB-API's parameter substitution. Put ``?`` as a placeholder -wherever you want to use a value, and then provide a tuple of values as the -second argument to the cursor's :meth:`~Cursor.execute` method. (Other database -modules may use a different placeholder, such as ``%s`` or ``:1``.) For -example:: - - # Never do this -- insecure! - symbol = 'RHAT' - cur.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) - - # Do this instead - t = ('RHAT',) - cur.execute('SELECT * FROM stocks WHERE symbol=?', t) - print(cur.fetchone()) - - # Larger example that inserts many records at a time - purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), - ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00), - ('2006-04-06', 'SELL', 'IBM', 500, 53.00), - ] - cur.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases) - To retrieve data after executing a SELECT statement, you can either treat the cursor as an :term:`iterator`, call the cursor's :meth:`~Cursor.fetchone` method to retrieve a single matching row, or call :meth:`~Cursor.fetchall` to get a list of the @@ -98,6 +71,33 @@ This example uses the iterator form:: ('2006-04-05', 'BUY', 'MSFT', 1000, 72.0) +.. _sqlite3-placeholders: + +Usually your SQL operations will need to use values from Python variables. You +shouldn't assemble your query using Python's string operations because doing so +is insecure; it makes your program vulnerable to an SQL injection attack +(see the `xkcd webcomic `_ for a humorous example of +what can go wrong):: + + # Never do this -- insecure! + symbol = 'RHAT' + cur.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) + +Instead, use the DB-API's parameter substitution. Put a placeholder wherever +you want to use a value, and then provide a tuple of values as the second +argument to the cursor's :meth:`~Cursor.execute` method. An SQL statement may +use one of two kinds of placeholders: question marks (qmark style) or named +placeholders (named style). For the qmark style, ``parameters`` must be a +:term:`sequence `. For the named style, it can be either a +:term:`sequence ` or :class:`dict` instance. The length of the +:term:`sequence ` must match the number of placeholders, or a +:exc:`ProgrammingError` is raised. If a :class:`dict` is given, it must contain +keys for all named parameters. Any extra items are ignored. Here's an example +of both styles: + +.. literalinclude:: ../includes/sqlite3/execute_1.py + + .. seealso:: https://www.sqlite.org @@ -607,14 +607,8 @@ Cursor Objects .. method:: execute(sql[, parameters]) - Executes an SQL statement. The SQL statement may be parameterized (i. e. - placeholders instead of SQL literals). The :mod:`sqlite3` module supports two - kinds of placeholders: question marks (qmark style) and named placeholders - (named style). - - Here's an example of both styles: - - .. literalinclude:: ../includes/sqlite3/execute_1.py + Executes an SQL statement. Values may be bound to the statement using + :ref:`placeholders `. :meth:`execute` will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a :exc:`.Warning`. Use @@ -624,9 +618,10 @@ Cursor Objects .. method:: executemany(sql, seq_of_parameters) - Executes an SQL command against all parameter sequences or mappings found in - the sequence *seq_of_parameters*. The :mod:`sqlite3` module also allows - using an :term:`iterator` yielding parameters instead of a sequence. + Executes a :ref:`parameterized ` SQL command + against all parameter sequences or mappings found in the sequence + *seq_of_parameters*. The :mod:`sqlite3` module also allows using an + :term:`iterator` yielding parameters instead of a sequence. .. literalinclude:: ../includes/sqlite3/executemany_1.py diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 325c5fa35eed7..a3ee3326d255d 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -209,9 +209,9 @@ library/smtplib,,:port,method must support that as well as a regular host:port library/socket,,::,'5aef:2b::8' library/socket,,:can,"return (can_id, can_dlc, data[:can_dlc])" library/socket,,:len,fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) -library/sqlite3,,:age,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" +library/sqlite3,,:name,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age""," +library/sqlite3,,:age,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age""," library/sqlite3,,:memory, -library/sqlite3,,:who,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" library/ssl,,:My,"Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc." From webhook-mailer at python.org Wed Apr 14 09:16:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 14 Apr 2021 13:16:52 -0000 Subject: [Python-checkins] Fix typo in the What's New for 3.10 (GH-25396) Message-ID: https://github.com/python/cpython/commit/c4073a24f95b54705416138dc1f20141ad76dd37 commit: c4073a24f95b54705416138dc1f20141ad76dd37 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-14T14:16:47+01:00 summary: Fix typo in the What's New for 3.10 (GH-25396) files: M Doc/whatsnew/3.10.rst M Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 21f912871d47a..f149d7453b895 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -175,7 +175,7 @@ AttributeErrors ~~~~~~~~~~~~~~~ When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer -suggestions of simmilar attribute names in the object that the exception was +suggestions of similar attribute names in the object that the exception was raised from: .. code-block:: python diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst b/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst index 09c73eae77def..0bd2fa6544882 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst @@ -1,3 +1,3 @@ When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer -suggestions of simmilar attribute names in the object that the exception was +suggestions of similar attribute names in the object that the exception was raised from. Patch by Pablo Galindo From webhook-mailer at python.org Wed Apr 14 09:28:16 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 13:28:16 -0000 Subject: [Python-checkins] bpo-20364: Improve sqlite3 placeholder docs (GH-25003) Message-ID: https://github.com/python/cpython/commit/95e4431804587a0c9d464bb7b3d5f3057bbeaccd commit: 95e4431804587a0c9d464bb7b3d5f3057bbeaccd branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-04-14T16:28:11+03:00 summary: bpo-20364: Improve sqlite3 placeholder docs (GH-25003) (cherry picked from commit 3386ca0b36327afeef8d7eff277b2aed1030c08d) Co-authored-by: Erlend Egeberg Aasland files: M Doc/includes/sqlite3/execute_1.py M Doc/library/sqlite3.rst M Doc/tools/susp-ignored.csv diff --git a/Doc/includes/sqlite3/execute_1.py b/Doc/includes/sqlite3/execute_1.py index 3466b1265a5bf..42aad4d5839f0 100644 --- a/Doc/includes/sqlite3/execute_1.py +++ b/Doc/includes/sqlite3/execute_1.py @@ -2,17 +2,22 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -cur.execute("create table people (name_last, age)") - -who = "Yeltsin" -age = 72 +cur.execute("create table lang (lang_name, lang_age)") # This is the qmark style: -cur.execute("insert into people values (?, ?)", (who, age)) +cur.execute("insert into lang values (?, ?)", ("C", 49)) -# And this is the named style: -cur.execute("select * from people where name_last=:who and age=:age", {"who": who, "age": age}) +# The qmark style used with executemany(): +lang_list = [ + ("Fortran", 64), + ("Python", 30), + ("Go", 11), +] +cur.executemany("insert into lang values (?, ?)", lang_list) -print(cur.fetchone()) +# And this is the named style: +cur.execute("select * from lang where lang_name=:name and lang_age=:age", + {"name": "C", "age": 49}) +print(cur.fetchall()) con.close() diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 8e935c32abef8..a82ba3a55248a 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -54,33 +54,6 @@ The data you've saved is persistent and is available in subsequent sessions:: con = sqlite3.connect('example.db') cur = con.cursor() -Usually your SQL operations will need to use values from Python variables. You -shouldn't assemble your query using Python's string operations because doing so -is insecure; it makes your program vulnerable to an SQL injection attack -(see https://xkcd.com/327/ for humorous example of what can go wrong). - -Instead, use the DB-API's parameter substitution. Put ``?`` as a placeholder -wherever you want to use a value, and then provide a tuple of values as the -second argument to the cursor's :meth:`~Cursor.execute` method. (Other database -modules may use a different placeholder, such as ``%s`` or ``:1``.) For -example:: - - # Never do this -- insecure! - symbol = 'RHAT' - cur.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) - - # Do this instead - t = ('RHAT',) - cur.execute('SELECT * FROM stocks WHERE symbol=?', t) - print(cur.fetchone()) - - # Larger example that inserts many records at a time - purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), - ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00), - ('2006-04-06', 'SELL', 'IBM', 500, 53.00), - ] - cur.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases) - To retrieve data after executing a SELECT statement, you can either treat the cursor as an :term:`iterator`, call the cursor's :meth:`~Cursor.fetchone` method to retrieve a single matching row, or call :meth:`~Cursor.fetchall` to get a list of the @@ -97,6 +70,33 @@ This example uses the iterator form:: ('2006-04-05', 'BUY', 'MSFT', 1000, 72.0) +.. _sqlite3-placeholders: + +Usually your SQL operations will need to use values from Python variables. You +shouldn't assemble your query using Python's string operations because doing so +is insecure; it makes your program vulnerable to an SQL injection attack +(see the `xkcd webcomic `_ for a humorous example of +what can go wrong):: + + # Never do this -- insecure! + symbol = 'RHAT' + cur.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) + +Instead, use the DB-API's parameter substitution. Put a placeholder wherever +you want to use a value, and then provide a tuple of values as the second +argument to the cursor's :meth:`~Cursor.execute` method. An SQL statement may +use one of two kinds of placeholders: question marks (qmark style) or named +placeholders (named style). For the qmark style, ``parameters`` must be a +:term:`sequence `. For the named style, it can be either a +:term:`sequence ` or :class:`dict` instance. The length of the +:term:`sequence ` must match the number of placeholders, or a +:exc:`ProgrammingError` is raised. If a :class:`dict` is given, it must contain +keys for all named parameters. Any extra items are ignored. Here's an example +of both styles: + +.. literalinclude:: ../includes/sqlite3/execute_1.py + + .. seealso:: https://www.sqlite.org @@ -608,14 +608,8 @@ Cursor Objects .. method:: execute(sql[, parameters]) - Executes an SQL statement. The SQL statement may be parameterized (i. e. - placeholders instead of SQL literals). The :mod:`sqlite3` module supports two - kinds of placeholders: question marks (qmark style) and named placeholders - (named style). - - Here's an example of both styles: - - .. literalinclude:: ../includes/sqlite3/execute_1.py + Executes an SQL statement. Values may be bound to the statement using + :ref:`placeholders `. :meth:`execute` will only execute a single SQL statement. If you try to execute more than one statement with it, it will raise a :exc:`.Warning`. Use @@ -625,9 +619,10 @@ Cursor Objects .. method:: executemany(sql, seq_of_parameters) - Executes an SQL command against all parameter sequences or mappings found in - the sequence *seq_of_parameters*. The :mod:`sqlite3` module also allows - using an :term:`iterator` yielding parameters instead of a sequence. + Executes a :ref:`parameterized ` SQL command + against all parameter sequences or mappings found in the sequence + *seq_of_parameters*. The :mod:`sqlite3` module also allows using an + :term:`iterator` yielding parameters instead of a sequence. .. literalinclude:: ../includes/sqlite3/executemany_1.py diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 9f0c42a9bb5ab..19b84c6c05021 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -211,9 +211,9 @@ library/smtplib,,:port,method must support that as well as a regular host:port library/socket,,::,'5aef:2b::8' library/socket,,:can,"return (can_id, can_dlc, data[:can_dlc])" library/socket,,:len,fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) -library/sqlite3,,:age,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" +library/sqlite3,,:name,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age""," +library/sqlite3,,:age,"cur.execute(""select * from lang where lang_name=:name and lang_age=:age""," library/sqlite3,,:memory, -library/sqlite3,,:who,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" library/ssl,,:My,"Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc." From webhook-mailer at python.org Wed Apr 14 10:10:46 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 14 Apr 2021 14:10:46 -0000 Subject: [Python-checkins] bpo-38530: Offer suggestions on NameError (GH-25397) Message-ID: https://github.com/python/cpython/commit/5bf8bf2267cd109970b2d946d43b2e9f71379ba2 commit: 5bf8bf2267cd109970b2d946d43b2e9f71379ba2 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-14T15:10:33+01:00 summary: bpo-38530: Offer suggestions on NameError (GH-25397) When printing NameError raised by the interpreter, PyErr_Display will offer suggestions of simmilar variable names in the function that the exception was raised from: >>> schwarzschild_black_hole = None >>> schwarschild_black_hole Traceback (most recent call last): File "", line 1, in NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole? files: A Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst M Doc/library/exceptions.rst M Doc/whatsnew/3.10.rst M Include/cpython/pyerrors.h M Lib/test/test_exceptions.py M Objects/exceptions.c M Python/ceval.c M Python/suggestions.c diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 8fdd6ebecfa69..f4f5c478f2cb8 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -242,6 +242,13 @@ The following exceptions are the exceptions that are usually raised. unqualified names. The associated value is an error message that includes the name that could not be found. + The :attr:`name` attribute can be set using a keyword-only argument to the + constructor. When set it represent the name of the variable that was attempted + to be accessed. + + .. versionchanged:: 3.10 + Added the :attr:`name` attribute. + .. exception:: NotImplementedError diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index f149d7453b895..69697e15d421f 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -187,6 +187,23 @@ raised from: (Contributed by Pablo Galindo in :issue:`38530`.) +NameErrors +~~~~~~~~~~ + +When printing :exc:`NameError` raised by the interpreter, :c:func:`PyErr_Display` +will offer suggestions of simmilar variable names in the function that the exception +was raised from: + +.. code-block:: python + + >>> schwarzschild_black_hole = None + >>> schwarschild_black_hole + Traceback (most recent call last): + File "", line 1, in + NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole? + +(Contributed by Pablo Galindo in :issue:`38530`.) + PEP 626: Precise line numbers for debugging and other tools ----------------------------------------------------------- diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index a15082e693cb9..9d88e6631f664 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -62,6 +62,11 @@ typedef struct { PyObject *value; } PyStopIterationObject; +typedef struct { + PyException_HEAD + PyObject *name; +} PyNameErrorObject; + typedef struct { PyException_HEAD PyObject *obj; diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index e1a5ec76d78ad..4f3c9ab4563e1 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1413,6 +1413,129 @@ class TestException(MemoryError): gc_collect() +global_for_suggestions = None + +class NameErrorTests(unittest.TestCase): + def test_name_error_has_name(self): + try: + bluch + except NameError as exc: + self.assertEqual("bluch", exc.name) + + def test_name_error_suggestions(self): + def Substitution(): + noise = more_noise = a = bc = None + blech = None + print(bluch) + + def Elimination(): + noise = more_noise = a = bc = None + blch = None + print(bluch) + + def Addition(): + noise = more_noise = a = bc = None + bluchin = None + print(bluch) + + def SubstitutionOverElimination(): + blach = None + bluc = None + print(bluch) + + def SubstitutionOverAddition(): + blach = None + bluchi = None + print(bluch) + + def EliminationOverAddition(): + blucha = None + bluc = None + print(bluch) + + for func, suggestion in [(Substitution, "blech?"), + (Elimination, "blch?"), + (Addition, "bluchin?"), + (EliminationOverAddition, "blucha?"), + (SubstitutionOverElimination, "blach?"), + (SubstitutionOverAddition, "blach?")]: + err = None + try: + func() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertIn(suggestion, err.getvalue()) + + def test_name_error_suggestions_from_globals(self): + def func(): + print(global_for_suggestio) + try: + func() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertIn("global_for_suggestions?", err.getvalue()) + + def test_name_error_suggestions_do_not_trigger_for_long_names(self): + def f(): + somethingverywronghehehehehehe = None + print(somethingverywronghe) + + try: + f() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("somethingverywronghehe", err.getvalue()) + + def test_name_error_suggestions_do_not_trigger_for_big_dicts(self): + def f(): + # Mutating locals() is unreliable, so we need to do it by hand + a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = a10 = a11 = a12 = a13 = \ + a14 = a15 = a16 = a17 = a18 = a19 = a20 = a21 = a22 = a23 = a24 = a25 = \ + a26 = a27 = a28 = a29 = a30 = a31 = a32 = a33 = a34 = a35 = a36 = a37 = \ + a38 = a39 = a40 = a41 = a42 = a43 = a44 = a45 = a46 = a47 = a48 = a49 = \ + a50 = a51 = a52 = a53 = a54 = a55 = a56 = a57 = a58 = a59 = a60 = a61 = \ + a62 = a63 = a64 = a65 = a66 = a67 = a68 = a69 = a70 = a71 = a72 = a73 = \ + a74 = a75 = a76 = a77 = a78 = a79 = a80 = a81 = a82 = a83 = a84 = a85 = \ + a86 = a87 = a88 = a89 = a90 = a91 = a92 = a93 = a94 = a95 = a96 = a97 = \ + a98 = a99 = a100 = a101 = a102 = a103 = None + print(a0) + + try: + f() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("a10", err.getvalue()) + + def test_name_error_with_custom_exceptions(self): + def f(): + blech = None + raise NameError() + + try: + f() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("blech", err.getvalue()) + + def f(): + blech = None + raise NameError + + try: + f() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("blech", err.getvalue()) class AttributeErrorTests(unittest.TestCase): def test_attributes(self): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst new file mode 100644 index 0000000000000..ca175e7bebd9e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst @@ -0,0 +1,3 @@ +When printing :exc:`NameError` raised by the interpreter, +:c:func:`PyErr_Display` will offer suggestions of similar variable names in +the function that the exception was raised from. Patch by Pablo Galindo diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 4bb415331161f..9916ce88549ed 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1326,8 +1326,69 @@ SimpleExtendsException(PyExc_RuntimeError, NotImplementedError, /* * NameError extends Exception */ -SimpleExtendsException(PyExc_Exception, NameError, - "Name not found globally."); + +static int +NameError_init(PyNameErrorObject *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"name", NULL}; + PyObject *name = NULL; + + if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1) { + return -1; + } + + PyObject *empty_tuple = PyTuple_New(0); + if (!empty_tuple) { + return -1; + } + if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$O:NameError", kwlist, + &name)) { + Py_DECREF(empty_tuple); + return -1; + } + Py_DECREF(empty_tuple); + + Py_XINCREF(name); + Py_XSETREF(self->name, name); + + return 0; +} + +static int +NameError_clear(PyNameErrorObject *self) +{ + Py_CLEAR(self->name); + return BaseException_clear((PyBaseExceptionObject *)self); +} + +static void +NameError_dealloc(PyNameErrorObject *self) +{ + _PyObject_GC_UNTRACK(self); + NameError_clear(self); + Py_TYPE(self)->tp_free((PyObject *)self); +} + +static int +NameError_traverse(PyNameErrorObject *self, visitproc visit, void *arg) +{ + Py_VISIT(self->name); + return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg); +} + +static PyMemberDef NameError_members[] = { + {"name", T_OBJECT, offsetof(PyNameErrorObject, name), 0, PyDoc_STR("name")}, + {NULL} /* Sentinel */ +}; + +static PyMethodDef NameError_methods[] = { + {NULL} /* Sentinel */ +}; + +ComplexExtendsException(PyExc_Exception, NameError, + NameError, 0, + NameError_methods, NameError_members, + 0, BaseException_str, "Name not found globally."); /* * UnboundLocalError extends NameError diff --git a/Python/ceval.c b/Python/ceval.c index 53b596b304c21..326930b706c43 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -6319,6 +6319,20 @@ format_exc_check_arg(PyThreadState *tstate, PyObject *exc, return; _PyErr_Format(tstate, exc, format_str, obj_str); + + if (exc == PyExc_NameError) { + // Include the name in the NameError exceptions to offer suggestions later. + _Py_IDENTIFIER(name); + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + PyErr_NormalizeException(&type, &value, &traceback); + if (PyErr_GivenExceptionMatches(value, PyExc_NameError)) { + // We do not care if this fails because we are going to restore the + // NameError anyway. + (void)_PyObject_SetAttrId(value, &PyId_name, obj); + } + PyErr_Restore(type, value, traceback); + } } static void diff --git a/Python/suggestions.c b/Python/suggestions.c index 2c0858d558d00..058294fc8b6b7 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -1,17 +1,15 @@ #include "Python.h" +#include "frameobject.h" #include "pycore_pyerrors.h" #define MAX_DISTANCE 3 #define MAX_CANDIDATE_ITEMS 100 -#define MAX_STRING_SIZE 20 +#define MAX_STRING_SIZE 25 /* Calculate the Levenshtein distance between string1 and string2 */ static size_t levenshtein_distance(const char *a, const char *b) { - if (a == NULL || b == NULL) { - return 0; - } const size_t a_size = strlen(a); const size_t b_size = strlen(b); @@ -89,14 +87,19 @@ calculate_suggestions(PyObject *dir, Py_ssize_t suggestion_distance = PyUnicode_GetLength(name); PyObject *suggestion = NULL; + const char *name_str = PyUnicode_AsUTF8(name); + if (name_str == NULL) { + PyErr_Clear(); + return NULL; + } for (int i = 0; i < dir_size; ++i) { PyObject *item = PyList_GET_ITEM(dir, i); - const char *name_str = PyUnicode_AsUTF8(name); - if (name_str == NULL) { + const char *item_str = PyUnicode_AsUTF8(item); + if (item_str == NULL) { PyErr_Clear(); - continue; + return NULL; } - Py_ssize_t current_distance = levenshtein_distance(PyUnicode_AsUTF8(name), PyUnicode_AsUTF8(item)); + Py_ssize_t current_distance = levenshtein_distance(name_str, item_str); if (current_distance == 0 || current_distance > MAX_DISTANCE) { continue; } @@ -132,6 +135,48 @@ offer_suggestions_for_attribute_error(PyAttributeErrorObject *exc) { return suggestions; } + +static PyObject * +offer_suggestions_for_name_error(PyNameErrorObject *exc) { + PyObject *name = exc->name; // borrowed reference + PyTracebackObject *traceback = (PyTracebackObject *) exc->traceback; // borrowed reference + // Abort if we don't have an attribute name or we have an invalid one + if (name == NULL || traceback == NULL || !PyUnicode_CheckExact(name)) { + return NULL; + } + + // Move to the traceback of the exception + while (traceback->tb_next != NULL) { + traceback = traceback->tb_next; + } + + PyFrameObject *frame = traceback->tb_frame; + assert(frame != NULL); + PyCodeObject *code = frame->f_code; + assert(code != NULL && code->co_varnames != NULL); + PyObject *dir = PySequence_List(code->co_varnames); + if (dir == NULL) { + PyErr_Clear(); + return NULL; + } + + PyObject *suggestions = calculate_suggestions(dir, name); + Py_DECREF(dir); + if (suggestions != NULL) { + return suggestions; + } + + dir = PySequence_List(frame->f_globals); + if (dir == NULL) { + PyErr_Clear(); + return NULL; + } + suggestions = calculate_suggestions(dir, name); + Py_DECREF(dir); + + return suggestions; +} + // Offer suggestions for a given exception. Returns a python string object containing the // suggestions. This function does not raise exceptions and returns NULL if no suggestion was found. PyObject *_Py_Offer_Suggestions(PyObject *exception) { @@ -139,6 +184,8 @@ PyObject *_Py_Offer_Suggestions(PyObject *exception) { assert(!PyErr_Occurred()); // Check that we are not going to clean any existing exception if (PyErr_GivenExceptionMatches(exception, PyExc_AttributeError)) { result = offer_suggestions_for_attribute_error((PyAttributeErrorObject *) exception); + } else if (PyErr_GivenExceptionMatches(exception, PyExc_NameError)) { + result = offer_suggestions_for_name_error((PyNameErrorObject *) exception); } assert(!PyErr_Occurred()); return result; From webhook-mailer at python.org Wed Apr 14 10:38:38 2021 From: webhook-mailer at python.org (encukou) Date: Wed, 14 Apr 2021 14:38:38 -0000 Subject: [Python-checkins] bpo-43795: Sort PC/python3dll.c (GH-25312) Message-ID: https://github.com/python/cpython/commit/92eebf6dd20c541ca5883d010a575fb6ea4a245c commit: 92eebf6dd20c541ca5883d010a575fb6ea4a245c branch: master author: Petr Viktorin committer: encukou date: 2021-04-14T16:38:30+02:00 summary: bpo-43795: Sort PC/python3dll.c (GH-25312) Each section is sorted to reduce diffs (review effort) when the file becomes generated. Sort is done with key=str.lower to preserve most of the original order (underscored items first). https://bugs.python.org/issue43795 files: M PC/python3dll.c diff --git a/PC/python3dll.c b/PC/python3dll.c index b5735e81e81ae..195c6531fdf88 100644 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -14,6 +14,8 @@ EXPORT_FUNC(_Py_BuildValue_SizeT) EXPORT_FUNC(_Py_CheckRecursiveCall) EXPORT_FUNC(_Py_Dealloc) +EXPORT_FUNC(_Py_DecRef) +EXPORT_FUNC(_Py_IncRef) EXPORT_FUNC(_Py_VaBuildValue_SizeT) EXPORT_FUNC(_PyArg_Parse_SizeT) EXPORT_FUNC(_PyArg_ParseTuple_SizeT) @@ -36,14 +38,12 @@ EXPORT_FUNC(_PyTrash_deposit_object) EXPORT_FUNC(_PyTrash_destroy_chain) EXPORT_FUNC(_PyTrash_thread_deposit_object) EXPORT_FUNC(_PyTrash_thread_destroy_chain) -EXPORT_FUNC(_Py_IncRef) -EXPORT_FUNC(_Py_DecRef) EXPORT_FUNC(Py_AddPendingCall) EXPORT_FUNC(Py_AtExit) EXPORT_FUNC(Py_BuildValue) EXPORT_FUNC(Py_CompileString) -EXPORT_FUNC(Py_DecRef) EXPORT_FUNC(Py_DecodeLocale) +EXPORT_FUNC(Py_DecRef) EXPORT_FUNC(Py_EncodeLocale) EXPORT_FUNC(Py_EndInterpreter) EXPORT_FUNC(Py_EnterRecursiveCall) @@ -260,8 +260,8 @@ EXPORT_FUNC(PyFloat_FromString) EXPORT_FUNC(PyFloat_GetInfo) EXPORT_FUNC(PyFloat_GetMax) EXPORT_FUNC(PyFloat_GetMin) -EXPORT_FUNC(PyFrame_GetLineNumber) EXPORT_FUNC(PyFrame_GetCode) +EXPORT_FUNC(PyFrame_GetLineNumber) EXPORT_FUNC(PyFrozenSet_New) EXPORT_FUNC(PyGC_Collect) EXPORT_FUNC(PyGILState_Ensure) @@ -424,8 +424,8 @@ EXPORT_FUNC(PyObject_GC_Del) EXPORT_FUNC(PyObject_GC_Track) EXPORT_FUNC(PyObject_GC_UnTrack) EXPORT_FUNC(PyObject_GenericGetAttr) -EXPORT_FUNC(PyObject_GenericSetAttr) EXPORT_FUNC(PyObject_GenericGetDict) +EXPORT_FUNC(PyObject_GenericSetAttr) EXPORT_FUNC(PyObject_GenericSetDict) EXPORT_FUNC(PyObject_GetAttr) EXPORT_FUNC(PyObject_GetAttrString) @@ -556,9 +556,9 @@ EXPORT_FUNC(PyTuple_Pack) EXPORT_FUNC(PyTuple_SetItem) EXPORT_FUNC(PyTuple_Size) EXPORT_FUNC(PyType_ClearCache) +EXPORT_FUNC(PyType_FromModuleAndSpec) EXPORT_FUNC(PyType_FromSpec) EXPORT_FUNC(PyType_FromSpecWithBases) -EXPORT_FUNC(PyType_FromModuleAndSpec) EXPORT_FUNC(PyType_GenericAlloc) EXPORT_FUNC(PyType_GenericNew) EXPORT_FUNC(PyType_GetFlags) @@ -726,13 +726,13 @@ EXPORT_DATA(PyExc_BlockingIOError) EXPORT_DATA(PyExc_BrokenPipeError) EXPORT_DATA(PyExc_BufferError) EXPORT_DATA(PyExc_BytesWarning) -EXPORT_DATA(PyExc_EncodingWarning) EXPORT_DATA(PyExc_ChildProcessError) EXPORT_DATA(PyExc_ConnectionAbortedError) EXPORT_DATA(PyExc_ConnectionError) EXPORT_DATA(PyExc_ConnectionRefusedError) EXPORT_DATA(PyExc_ConnectionResetError) EXPORT_DATA(PyExc_DeprecationWarning) +EXPORT_DATA(PyExc_EncodingWarning) EXPORT_DATA(PyExc_EnvironmentError) EXPORT_DATA(PyExc_EOFError) EXPORT_DATA(PyExc_Exception) From webhook-mailer at python.org Wed Apr 14 10:39:06 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 14 Apr 2021 14:39:06 -0000 Subject: [Python-checkins] bpo-41282: setup.py ignores distutils DeprecationWarning (GH-25405) Message-ID: https://github.com/python/cpython/commit/d9ba9dee7f267a603394b8d63a7697b08efdf1cb commit: d9ba9dee7f267a603394b8d63a7697b08efdf1cb branch: master author: Victor Stinner committer: vstinner date: 2021-04-14T16:38:58+02:00 summary: bpo-41282: setup.py ignores distutils DeprecationWarning (GH-25405) files: M setup.py diff --git a/setup.py b/setup.py index 253053da7fb47..f8b7a17e772b1 100644 --- a/setup.py +++ b/setup.py @@ -8,6 +8,7 @@ import re import sys import sysconfig +import warnings from glob import glob, escape import _osx_support @@ -30,14 +31,19 @@ SUBPROCESS_BOOTSTRAP = True -from distutils import log -from distutils.command.build_ext import build_ext -from distutils.command.build_scripts import build_scripts -from distutils.command.install import install -from distutils.command.install_lib import install_lib -from distutils.core import Extension, setup -from distutils.errors import CCompilerError, DistutilsError -from distutils.spawn import find_executable +with warnings.catch_warnings(): + # bpo-41282 (PEP 632) deprecated distutils but setup.py still uses it + warnings.filterwarnings("ignore", "The distutils package is deprecated", + DeprecationWarning) + + from distutils import log + from distutils.command.build_ext import build_ext + from distutils.command.build_scripts import build_scripts + from distutils.command.install import install + from distutils.command.install_lib import install_lib + from distutils.core import Extension, setup + from distutils.errors import CCompilerError, DistutilsError + from distutils.spawn import find_executable # Compile extensions used to test Python? From webhook-mailer at python.org Wed Apr 14 10:50:25 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 14:50:25 -0000 Subject: [Python-checkins] bpo-43505: Explicitly initialize and shutdown sqlite3 (GH-25404) Message-ID: https://github.com/python/cpython/commit/def919342facf7f53a3a5f0e9f4b1889d323956d commit: def919342facf7f53a3a5f0e9f4b1889d323956d branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-14T17:50:16+03:00 summary: bpo-43505: Explicitly initialize and shutdown sqlite3 (GH-25404) files: M Modules/_sqlite/module.c diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 6bfb1b73f8239..8dbfa7b38a1f9 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -343,8 +343,7 @@ static struct PyModuleDef _sqlite3module = { #define ADD_TYPE(module, type) \ do { \ if (PyModule_AddType(module, &type) < 0) { \ - Py_DECREF(module); \ - return NULL; \ + goto error; \ } \ } while (0) @@ -370,6 +369,12 @@ PyMODINIT_FUNC PyInit__sqlite3(void) return NULL; } + int rc = sqlite3_initialize(); + if (rc != SQLITE_OK) { + PyErr_SetString(PyExc_ImportError, sqlite3_errstr(rc)); + return NULL; + } + module = PyModule_Create(&_sqlite3module); if (!module || @@ -380,8 +385,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void) (pysqlite_statement_setup_types(module) < 0) || (pysqlite_prepare_protocol_setup_types(module) < 0) ) { - Py_XDECREF(module); - return NULL; + goto error; } ADD_TYPE(module, *pysqlite_ConnectionType); @@ -428,12 +432,11 @@ PyMODINIT_FUNC PyInit__sqlite3(void) goto error; } -error: - if (PyErr_Occurred()) - { - PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed"); - Py_DECREF(module); - module = NULL; - } return module; + +error: + sqlite3_shutdown(); + PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed"); + Py_XDECREF(module); + return NULL; } From webhook-mailer at python.org Wed Apr 14 11:12:39 2021 From: webhook-mailer at python.org (encukou) Date: Wed, 14 Apr 2021 15:12:39 -0000 Subject: [Python-checkins] bpo-41282: (PEP 632) Load install schemes from sysconfig (GH-24549) Message-ID: https://github.com/python/cpython/commit/341e8a939aca6e9f59ffb0e6daee5888933694ed commit: 341e8a939aca6e9f59ffb0e6daee5888933694ed branch: master author: Lum?r 'Frenzy' Balhar committer: encukou date: 2021-04-14T17:12:34+02:00 summary: bpo-41282: (PEP 632) Load install schemes from sysconfig (GH-24549) With this patch, `distutils.command.install.INSTALL_SCHEMES` are loaded from `sysconfig._INSTALL_SCHEMES`. The distutils module is deprecated and will be removed in 3.12 (PEP 632). This change makes the `sysconfig._INSTALL_SCHEMES` the single point of truth for install schemes while keeping `distutils.command.install.INSTALL_SCHEMES` exactly the same. If we, during the transition to the sysconfig, change something, this makes sure that it also propagates to distutils until the module gets removed. Moreover, as discussed [on Discourse], Linux distros need to patch distutils/sysconfig to make sure the packages will land in proper locations. This patch makes it easier because it leaves only one location where install schemes are defined which is much easier to patch/adjust. [on Discourse]: https://discuss.python.org/t/pep-632-deprecate-distutils-module/5134 The implementation is slightly different than the plan but I think it's the easiest way how to do it and it also makes the downstream patch simple, flexible and easy to maintain. It's also necessary to implement this before setuptools starts bundling the distutils module so the default install schemes stay in the standard library. The removed code from sysconfig does not seem to have any negative effect because, honestly, it seems that nothing actually uses the install schemes from sysconfig at all. There were many big changes in these modules where they were trying to include packaging in stdlib and then reverted that. Also, the test of distutils install command does not count with the different locations which is good evidence that the reason to have this piece of code is no longer valid. https://bugs.python.org/issue41282 files: A Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst M Lib/distutils/command/install.py M Lib/sysconfig.py diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py index bdead133bd399..d33a889afe4a8 100644 --- a/Lib/distutils/command/install.py +++ b/Lib/distutils/command/install.py @@ -3,7 +3,9 @@ Implements the Distutils 'install' command.""" import sys +import sysconfig import os +import re from distutils import log from distutils.core import Command @@ -20,33 +22,45 @@ HAS_USER_SITE = (USER_SITE is not None) -WINDOWS_SCHEME = { - 'purelib': '$base/Lib/site-packages', - 'platlib': '$base/Lib/site-packages', - 'headers': '$base/Include/$dist_name', - 'scripts': '$base/Scripts', - 'data' : '$base', -} - -INSTALL_SCHEMES = { - 'unix_prefix': { - 'purelib': '$base/lib/python$py_version_short/site-packages', - 'platlib': '$platbase/$platlibdir/python$py_version_short/site-packages', - 'headers': '$base/include/python$py_version_short$abiflags/$dist_name', - 'scripts': '$base/bin', - 'data' : '$base', - }, - 'unix_home': { - 'purelib': '$base/lib/python', - 'platlib': '$base/$platlibdir/python', - 'headers': '$base/include/python/$dist_name', - 'scripts': '$base/bin', - 'data' : '$base', - }, - 'nt': WINDOWS_SCHEME, - } - -# user site schemes +# The keys to an installation scheme; if any new types of files are to be +# installed, be sure to add an entry to every scheme in +# sysconfig._INSTALL_SCHEMES, and to SCHEME_KEYS here. +SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') + +# The following code provides backward-compatible INSTALL_SCHEMES +# while making the sysconfig module the single point of truth. +# This makes it easier for OS distributions where they need to +# alter locations for packages installations in a single place. +# Note that this module is depracated (PEP 632); all consumers +# of this information should switch to using sysconfig directly. +INSTALL_SCHEMES = {"unix_prefix": {}, "unix_home": {}, "nt": {}} + +# Copy from sysconfig._INSTALL_SCHEMES +for key in SCHEME_KEYS: + sys_key = key + if key == "headers": + sys_key = "include" + INSTALL_SCHEMES["unix_prefix"][key] = sysconfig._INSTALL_SCHEMES["posix_prefix"][sys_key] + INSTALL_SCHEMES["unix_home"][key] = sysconfig._INSTALL_SCHEMES["posix_home"][sys_key] + INSTALL_SCHEMES["nt"][key] = sysconfig._INSTALL_SCHEMES["nt"][sys_key] + +# Transformation to different template format +for main_key in INSTALL_SCHEMES: + for key, value in INSTALL_SCHEMES[main_key].items(): + # Change all ocurences of {variable} to $variable + value = re.sub(r"\{(.+?)\}", r"$\g<1>", value) + value = value.replace("$installed_base", "$base") + value = value.replace("$py_version_nodot_plat", "$py_version_nodot") + if key == "headers": + value += "/$dist_name" + if sys.version_info >= (3, 9) and key == "platlib": + # platlibdir is available since 3.9: bpo-1294959 + value = value.replace("/lib/", "/$platlibdir/") + INSTALL_SCHEMES[main_key][key] = value + +# The following part of INSTALL_SCHEMES has a different definition +# than the one in sysconfig, but because both depend on the site module, +# the outcomes should be the same. if HAS_USER_SITE: INSTALL_SCHEMES['nt_user'] = { 'purelib': '$usersite', @@ -65,11 +79,6 @@ 'data' : '$userbase', } -# The keys to an installation scheme; if any new types of files are to be -# installed, be sure to add an entry to every installation scheme above, -# and to SCHEME_KEYS here. -SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') - class install(Command): diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index b8b1aca17e24d..d056d2c338160 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -176,12 +176,6 @@ def is_python_build(check_home=False): _PYTHON_BUILD = is_python_build(True) -if _PYTHON_BUILD: - for scheme in ('posix_prefix', 'posix_home'): - _INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include' - _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.' - - def _subst_vars(s, local_vars): try: return s.format(**local_vars) diff --git a/Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst b/Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst new file mode 100644 index 0000000000000..eefebcfe1ba7c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst @@ -0,0 +1,2 @@ +Install schemes in :mod:`distutils.command.install` are now loaded from +:mod:`sysconfig`. From webhook-mailer at python.org Wed Apr 14 12:16:19 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 14 Apr 2021 16:16:19 -0000 Subject: [Python-checkins] Fix typo in 3.10's What's New documentation (GH-25409) Message-ID: https://github.com/python/cpython/commit/0c4c43632556a5ea5ef2267efeb17b332b861a19 commit: 0c4c43632556a5ea5ef2267efeb17b332b861a19 branch: master author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-14T09:16:11-07:00 summary: Fix typo in 3.10's What's New documentation (GH-25409) "occured" -> "occurred" files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 69697e15d421f..0962f04b3a7d9 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -420,7 +420,7 @@ For example:: case ('warning', code, 40): print("A warning has been received.") case ('error', code, _): - print(f"An error {code} occured.") + print(f"An error {code} occurred.") In the above case, ``test_variable`` will match for ('error', code, 100) and ('error', code, 800). From webhook-mailer at python.org Wed Apr 14 13:58:37 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 14 Apr 2021 17:58:37 -0000 Subject: [Python-checkins] bpo-38530: Make sure that failing to generate suggestions on failure will not propagate exceptions (GH-25408) Message-ID: https://github.com/python/cpython/commit/e07f4ab26aaf08f90ebd9e6004af14fd6ef39351 commit: e07f4ab26aaf08f90ebd9e6004af14fd6ef39351 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-14T18:58:28+01:00 summary: bpo-38530: Make sure that failing to generate suggestions on failure will not propagate exceptions (GH-25408) files: M Lib/test/test_exceptions.py M Python/pythonrun.c M Python/suggestions.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 4f3c9ab4563e1..ebeb67b451282 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1695,6 +1695,20 @@ def __getattr__(self, attr): self.assertIn("blech", err.getvalue()) + def test_attribute_error_with_failing_dict(self): + class T: + bluch = 1 + def __dir__(self): + raise AttributeError("oh no!") + + try: + T().blich + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("blech", err.getvalue()) + self.assertNotIn("oh no!", err.getvalue()) class ImportErrorTests(unittest.TestCase): diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 321b04eb724ed..6f84cab702e98 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -962,6 +962,8 @@ print_exception(PyObject *f, PyObject *value) err += PyFile_WriteString("?", f); } Py_DECREF(suggestions); + } else if (PyErr_Occurred()) { + PyErr_Clear(); } err += PyFile_WriteString("\n", f); Py_XDECREF(tb); diff --git a/Python/suggestions.c b/Python/suggestions.c index 058294fc8b6b7..bdc8e2fd1bb08 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -89,14 +89,12 @@ calculate_suggestions(PyObject *dir, PyObject *suggestion = NULL; const char *name_str = PyUnicode_AsUTF8(name); if (name_str == NULL) { - PyErr_Clear(); return NULL; } for (int i = 0; i < dir_size; ++i) { PyObject *item = PyList_GET_ITEM(dir, i); const char *item_str = PyUnicode_AsUTF8(item); if (item_str == NULL) { - PyErr_Clear(); return NULL; } Py_ssize_t current_distance = levenshtein_distance(name_str, item_str); @@ -156,7 +154,6 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { assert(code != NULL && code->co_varnames != NULL); PyObject *dir = PySequence_List(code->co_varnames); if (dir == NULL) { - PyErr_Clear(); return NULL; } @@ -168,7 +165,6 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { dir = PySequence_List(frame->f_globals); if (dir == NULL) { - PyErr_Clear(); return NULL; } suggestions = calculate_suggestions(dir, name); @@ -178,16 +174,16 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { } // Offer suggestions for a given exception. Returns a python string object containing the -// suggestions. This function does not raise exceptions and returns NULL if no suggestion was found. +// suggestions. This function returns NULL if no suggestion was found or if an exception happened, +// users must call PyErr_Occurred() to disambiguate. PyObject *_Py_Offer_Suggestions(PyObject *exception) { PyObject *result = NULL; - assert(!PyErr_Occurred()); // Check that we are not going to clean any existing exception + assert(!PyErr_Occurred()); if (PyErr_GivenExceptionMatches(exception, PyExc_AttributeError)) { result = offer_suggestions_for_attribute_error((PyAttributeErrorObject *) exception); } else if (PyErr_GivenExceptionMatches(exception, PyExc_NameError)) { result = offer_suggestions_for_name_error((PyNameErrorObject *) exception); } - assert(!PyErr_Occurred()); return result; } From webhook-mailer at python.org Wed Apr 14 17:09:41 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 14 Apr 2021 21:09:41 -0000 Subject: [Python-checkins] bpo-43296: Handle sqlite3_value_blob() errors (GH-24674) Message-ID: https://github.com/python/cpython/commit/5cb601f956886b32641f818b5da347cc86a43db2 commit: 5cb601f956886b32641f818b5da347cc86a43db2 branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-15T00:09:11+03:00 summary: bpo-43296: Handle sqlite3_value_blob() errors (GH-24674) files: A Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst M Lib/sqlite3/test/userfunctions.py M Modules/_sqlite/connection.c diff --git a/Lib/sqlite3/test/userfunctions.py b/Lib/sqlite3/test/userfunctions.py index 749ea049c834a..148d9f596a91c 100644 --- a/Lib/sqlite3/test/userfunctions.py +++ b/Lib/sqlite3/test/userfunctions.py @@ -276,6 +276,10 @@ def test_any_arguments(self): val = cur.fetchone()[0] self.assertEqual(val, 2) + def test_empty_blob(self): + cur = self.con.execute("select isblob(x'')") + self.assertTrue(cur.fetchone()[0]) + # Regarding deterministic functions: # # Between 3.8.3 and 3.15.0, deterministic functions were only used to diff --git a/Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst b/Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst new file mode 100644 index 0000000000000..741dfcd705ebd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst @@ -0,0 +1,3 @@ +Improve :mod:`sqlite3` error handling: ``sqlite3_value_blob()`` errors that +set ``SQLITE_NOMEM`` now raise :exc:`MemoryError`. Patch by Erlend E. +Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 6d3ccb9b94126..93365495f5885 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -546,7 +546,6 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, sqlite3_value* cur_value; PyObject* cur_py_value; const char* val_str; - Py_ssize_t buflen; args = PyTuple_New(argc); if (!args) { @@ -571,19 +570,26 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, cur_py_value = Py_NewRef(Py_None); } break; - case SQLITE_BLOB: - buflen = sqlite3_value_bytes(cur_value); - cur_py_value = PyBytes_FromStringAndSize( - sqlite3_value_blob(cur_value), buflen); + case SQLITE_BLOB: { + sqlite3 *db = sqlite3_context_db_handle(context); + const void *blob = sqlite3_value_blob(cur_value); + + if (blob == NULL && sqlite3_errcode(db) == SQLITE_NOMEM) { + PyErr_NoMemory(); + goto error; + } + + Py_ssize_t size = sqlite3_value_bytes(cur_value); + cur_py_value = PyBytes_FromStringAndSize(blob, size); break; + } case SQLITE_NULL: default: cur_py_value = Py_NewRef(Py_None); } if (!cur_py_value) { - Py_DECREF(args); - return NULL; + goto error; } PyTuple_SetItem(args, i, cur_py_value); @@ -591,6 +597,10 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, } return args; + +error: + Py_DECREF(args); + return NULL; } static void From webhook-mailer at python.org Wed Apr 14 19:03:51 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 14 Apr 2021 23:03:51 -0000 Subject: [Python-checkins] bpo-38530: Optimize the calculation of string sizes when offering suggestions (GH-25412) Message-ID: https://github.com/python/cpython/commit/3fc65b97d09fd29272fdf60d2e567bfb070da824 commit: 3fc65b97d09fd29272fdf60d2e567bfb070da824 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-15T00:03:43+01:00 summary: bpo-38530: Optimize the calculation of string sizes when offering suggestions (GH-25412) files: M Python/suggestions.c diff --git a/Python/suggestions.c b/Python/suggestions.c index bdc8e2fd1bb08..258e3f1833e6b 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -9,10 +9,8 @@ /* Calculate the Levenshtein distance between string1 and string2 */ static size_t -levenshtein_distance(const char *a, const char *b) { - - const size_t a_size = strlen(a); - const size_t b_size = strlen(b); +levenshtein_distance(const char *a, size_t a_size, + const char *b, size_t b_size) { if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) { return 0; @@ -87,17 +85,20 @@ calculate_suggestions(PyObject *dir, Py_ssize_t suggestion_distance = PyUnicode_GetLength(name); PyObject *suggestion = NULL; - const char *name_str = PyUnicode_AsUTF8(name); + Py_ssize_t name_size; + const char *name_str = PyUnicode_AsUTF8AndSize(name, &name_size); if (name_str == NULL) { return NULL; } for (int i = 0; i < dir_size; ++i) { PyObject *item = PyList_GET_ITEM(dir, i); - const char *item_str = PyUnicode_AsUTF8(item); + Py_ssize_t item_size; + const char *item_str = PyUnicode_AsUTF8AndSize(item, &item_size); if (item_str == NULL) { return NULL; } - Py_ssize_t current_distance = levenshtein_distance(name_str, item_str); + Py_ssize_t current_distance = levenshtein_distance( + name_str, name_size, item_str, item_size); if (current_distance == 0 || current_distance > MAX_DISTANCE) { continue; } @@ -138,7 +139,8 @@ static PyObject * offer_suggestions_for_name_error(PyNameErrorObject *exc) { PyObject *name = exc->name; // borrowed reference PyTracebackObject *traceback = (PyTracebackObject *) exc->traceback; // borrowed reference - // Abort if we don't have an attribute name or we have an invalid one + // Abort if we don't have a variable name or we have an invalid one + // or if we don't have a traceback to work with if (name == NULL || traceback == NULL || !PyUnicode_CheckExact(name)) { return NULL; } From webhook-mailer at python.org Wed Apr 14 20:56:52 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 15 Apr 2021 00:56:52 -0000 Subject: [Python-checkins] bpo-37741: make importlib.metadata docs discoverable through a module directive. (GH-25415) Message-ID: https://github.com/python/cpython/commit/23acadcc1c75eb74b2459304af70d97a35001b34 commit: 23acadcc1c75eb74b2459304af70d97a35001b34 branch: master author: Jason R. Coombs committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-14T17:56:21-07:00 summary: bpo-37741: make importlib.metadata docs discoverable through a module directive. (GH-25415) Automerge-Triggered-By: GH:jaraco files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index fee5e677823f7..3cd200b711992 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -4,6 +4,11 @@ Using :mod:`!importlib.metadata` ================================= +.. module:: importlib.metadata + :synopsis: The implementation of the importlib metadata. + +**Source code:** :source:`Lib/importlib/metadata.py` + .. note:: This functionality is provisional and may deviate from the usual version semantics of the standard library. From webhook-mailer at python.org Wed Apr 14 21:08:25 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 15 Apr 2021 01:08:25 -0000 Subject: [Python-checkins] bpo-37741: make importlib.metadata docs discoverable through a module directive. (GH-25415) Message-ID: https://github.com/python/cpython/commit/a746fceb7548e92f58037d9f90b5468bdc76889d commit: a746fceb7548e92f58037d9f90b5468bdc76889d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-14T18:08:17-07:00 summary: bpo-37741: make importlib.metadata docs discoverable through a module directive. (GH-25415) Automerge-Triggered-By: GH:jaraco (cherry picked from commit 23acadcc1c75eb74b2459304af70d97a35001b34) Co-authored-by: Jason R. Coombs files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index c8b4d4173de03..a057767ebd2f7 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -4,6 +4,11 @@ Using :mod:`!importlib.metadata` ================================= +.. module:: importlib.metadata + :synopsis: The implementation of the importlib metadata. + +**Source code:** :source:`Lib/importlib/metadata.py` + .. note:: This functionality is provisional and may deviate from the usual version semantics of the standard library. From webhook-mailer at python.org Thu Apr 15 09:06:48 2021 From: webhook-mailer at python.org (pablogsal) Date: Thu, 15 Apr 2021 13:06:48 -0000 Subject: [Python-checkins] bpo-43823: Improve syntax errors for invalid dictionary literals (GH-25378) Message-ID: https://github.com/python/cpython/commit/da7435017430671f86075449ff7bde96fd7700a5 commit: da7435017430671f86075449ff7bde96fd7700a5 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-15T14:06:39+01:00 summary: bpo-43823: Improve syntax errors for invalid dictionary literals (GH-25378) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst M Grammar/python.gram M Lib/test/test_syntax.py M Parser/parser.c diff --git a/Grammar/python.gram b/Grammar/python.gram index 180d952b57a8d..8e399f1b8ea91 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -650,6 +650,8 @@ dict[expr_ty]: CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, a)), CHECK(asdl_expr_seq*, _PyPegen_get_values(p, a)), EXTRA) } + | '{' invalid_double_starred_kvpairs '}' + dictcomp[expr_ty]: | '{' a=kvpair b=for_if_clauses '}' { _PyAST_DictComp(a->key, a->value, b, EXTRA) } | invalid_dict_comprehension @@ -882,3 +884,12 @@ invalid_elif_stmt: | 'elif' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } invalid_while_stmt: | 'while' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } + +invalid_double_starred_kvpairs: + | ','.double_starred_kvpair+ ',' invalid_kvpair + | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } + | expression a=':' &('}'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } +invalid_kvpair: + | a=expression !(':') { RAISE_SYNTAX_ERROR("':' expected after dictionary key") } + | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } + | expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index bd6a4d339e736..75b778d20e90a 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -880,6 +880,38 @@ Traceback (most recent call last): SyntaxError: invalid syntax +Incomplete dictionary literals + + >>> {1:2, 3:4, 5} + Traceback (most recent call last): + SyntaxError: ':' expected after dictionary key + + >>> {1:2, 3:4, 5:} + Traceback (most recent call last): + SyntaxError: expression expected after dictionary key and ':' + + >>> {1: *12+1, 23: 1} + Traceback (most recent call last): + SyntaxError: cannot use a starred expression in a dictionary value + + >>> {1: *12+1} + Traceback (most recent call last): + SyntaxError: cannot use a starred expression in a dictionary value + + >>> {1: 23, 1: *12+1} + Traceback (most recent call last): + SyntaxError: cannot use a starred expression in a dictionary value + + >>> {1:} + Traceback (most recent call last): + SyntaxError: expression expected after dictionary key and ':' + + # Ensure that the error is not raise for syntax errors that happen after sets + + >>> {1} $ + Traceback (most recent call last): + SyntaxError: invalid syntax + Make sure that the old "raise X, Y[, Z]" form is gone: >>> raise X, Y Traceback (most recent call last): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst new file mode 100644 index 0000000000000..96cf8eee16b7e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst @@ -0,0 +1,2 @@ +Improve syntax errors for invalid dictionary literals. Patch by Pablo +Galindo. diff --git a/Parser/parser.c b/Parser/parser.c index d158b2952baec..2ead05225be5f 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -268,191 +268,196 @@ static KeywordToken *reserved_keywords[] = { #define invalid_if_stmt_type 1200 #define invalid_elif_stmt_type 1201 #define invalid_while_stmt_type 1202 -#define _loop0_1_type 1203 -#define _loop0_2_type 1204 -#define _loop0_4_type 1205 -#define _gather_3_type 1206 -#define _loop0_6_type 1207 -#define _gather_5_type 1208 -#define _loop0_8_type 1209 -#define _gather_7_type 1210 -#define _loop0_10_type 1211 -#define _gather_9_type 1212 -#define _loop1_11_type 1213 -#define _loop0_13_type 1214 -#define _gather_12_type 1215 -#define _tmp_14_type 1216 -#define _tmp_15_type 1217 -#define _tmp_16_type 1218 -#define _tmp_17_type 1219 -#define _tmp_18_type 1220 -#define _tmp_19_type 1221 -#define _tmp_20_type 1222 -#define _tmp_21_type 1223 -#define _loop1_22_type 1224 -#define _tmp_23_type 1225 -#define _tmp_24_type 1226 -#define _loop0_26_type 1227 -#define _gather_25_type 1228 -#define _loop0_28_type 1229 -#define _gather_27_type 1230 -#define _tmp_29_type 1231 -#define _tmp_30_type 1232 -#define _loop0_31_type 1233 -#define _loop1_32_type 1234 -#define _loop0_34_type 1235 -#define _gather_33_type 1236 -#define _tmp_35_type 1237 -#define _loop0_37_type 1238 -#define _gather_36_type 1239 -#define _tmp_38_type 1240 -#define _loop0_40_type 1241 -#define _gather_39_type 1242 -#define _loop0_42_type 1243 -#define _gather_41_type 1244 -#define _loop0_44_type 1245 -#define _gather_43_type 1246 -#define _loop0_46_type 1247 -#define _gather_45_type 1248 -#define _tmp_47_type 1249 -#define _loop1_48_type 1250 -#define _tmp_49_type 1251 -#define _loop1_50_type 1252 -#define _loop0_52_type 1253 -#define _gather_51_type 1254 -#define _tmp_53_type 1255 -#define _tmp_54_type 1256 -#define _tmp_55_type 1257 -#define _loop0_57_type 1258 -#define _gather_56_type 1259 -#define _tmp_58_type 1260 -#define _loop0_60_type 1261 -#define _gather_59_type 1262 -#define _tmp_61_type 1263 -#define _loop0_63_type 1264 -#define _gather_62_type 1265 -#define _loop0_65_type 1266 -#define _gather_64_type 1267 -#define _tmp_66_type 1268 -#define _tmp_67_type 1269 -#define _tmp_68_type 1270 -#define _tmp_69_type 1271 -#define _loop0_70_type 1272 -#define _loop0_71_type 1273 -#define _loop0_72_type 1274 -#define _loop1_73_type 1275 -#define _loop0_74_type 1276 -#define _loop1_75_type 1277 -#define _loop1_76_type 1278 -#define _loop1_77_type 1279 -#define _loop0_78_type 1280 -#define _loop1_79_type 1281 -#define _loop0_80_type 1282 -#define _loop1_81_type 1283 -#define _loop0_82_type 1284 -#define _loop1_83_type 1285 -#define _loop1_84_type 1286 -#define _tmp_85_type 1287 -#define _loop1_86_type 1288 -#define _loop0_88_type 1289 -#define _gather_87_type 1290 -#define _loop1_89_type 1291 -#define _loop0_90_type 1292 -#define _loop0_91_type 1293 -#define _loop0_92_type 1294 -#define _loop1_93_type 1295 -#define _loop0_94_type 1296 -#define _loop1_95_type 1297 -#define _loop1_96_type 1298 -#define _loop1_97_type 1299 -#define _loop0_98_type 1300 -#define _loop1_99_type 1301 -#define _loop0_100_type 1302 -#define _loop1_101_type 1303 -#define _loop0_102_type 1304 -#define _loop1_103_type 1305 -#define _loop1_104_type 1306 -#define _loop1_105_type 1307 -#define _loop1_106_type 1308 -#define _tmp_107_type 1309 -#define _loop0_109_type 1310 -#define _gather_108_type 1311 -#define _tmp_110_type 1312 -#define _tmp_111_type 1313 -#define _tmp_112_type 1314 -#define _tmp_113_type 1315 -#define _loop1_114_type 1316 -#define _tmp_115_type 1317 -#define _tmp_116_type 1318 -#define _loop0_118_type 1319 -#define _gather_117_type 1320 -#define _loop1_119_type 1321 -#define _loop0_120_type 1322 -#define _loop0_121_type 1323 -#define _loop0_123_type 1324 -#define _gather_122_type 1325 -#define _tmp_124_type 1326 -#define _loop0_126_type 1327 -#define _gather_125_type 1328 -#define _loop0_128_type 1329 -#define _gather_127_type 1330 -#define _loop0_130_type 1331 -#define _gather_129_type 1332 -#define _loop0_132_type 1333 -#define _gather_131_type 1334 -#define _loop0_133_type 1335 -#define _loop0_135_type 1336 -#define _gather_134_type 1337 -#define _loop1_136_type 1338 -#define _tmp_137_type 1339 -#define _loop0_139_type 1340 -#define _gather_138_type 1341 -#define _loop0_141_type 1342 -#define _gather_140_type 1343 -#define _tmp_142_type 1344 -#define _tmp_143_type 1345 -#define _tmp_144_type 1346 -#define _tmp_145_type 1347 -#define _loop0_146_type 1348 -#define _loop0_147_type 1349 -#define _loop0_148_type 1350 -#define _tmp_149_type 1351 -#define _tmp_150_type 1352 -#define _tmp_151_type 1353 -#define _loop0_152_type 1354 -#define _loop1_153_type 1355 -#define _loop0_154_type 1356 -#define _loop1_155_type 1357 -#define _tmp_156_type 1358 -#define _tmp_157_type 1359 -#define _tmp_158_type 1360 -#define _loop0_160_type 1361 -#define _gather_159_type 1362 -#define _loop0_162_type 1363 -#define _gather_161_type 1364 -#define _tmp_163_type 1365 -#define _tmp_164_type 1366 -#define _tmp_165_type 1367 -#define _tmp_166_type 1368 -#define _tmp_167_type 1369 -#define _tmp_168_type 1370 -#define _tmp_169_type 1371 -#define _tmp_170_type 1372 -#define _tmp_171_type 1373 -#define _tmp_172_type 1374 -#define _tmp_173_type 1375 -#define _tmp_174_type 1376 -#define _tmp_175_type 1377 -#define _tmp_176_type 1378 -#define _tmp_177_type 1379 -#define _tmp_178_type 1380 -#define _tmp_179_type 1381 -#define _tmp_180_type 1382 -#define _tmp_181_type 1383 -#define _tmp_182_type 1384 -#define _tmp_183_type 1385 -#define _tmp_184_type 1386 -#define _tmp_185_type 1387 +#define invalid_double_starred_kvpairs_type 1203 +#define invalid_kvpair_type 1204 +#define _loop0_1_type 1205 +#define _loop0_2_type 1206 +#define _loop0_4_type 1207 +#define _gather_3_type 1208 +#define _loop0_6_type 1209 +#define _gather_5_type 1210 +#define _loop0_8_type 1211 +#define _gather_7_type 1212 +#define _loop0_10_type 1213 +#define _gather_9_type 1214 +#define _loop1_11_type 1215 +#define _loop0_13_type 1216 +#define _gather_12_type 1217 +#define _tmp_14_type 1218 +#define _tmp_15_type 1219 +#define _tmp_16_type 1220 +#define _tmp_17_type 1221 +#define _tmp_18_type 1222 +#define _tmp_19_type 1223 +#define _tmp_20_type 1224 +#define _tmp_21_type 1225 +#define _loop1_22_type 1226 +#define _tmp_23_type 1227 +#define _tmp_24_type 1228 +#define _loop0_26_type 1229 +#define _gather_25_type 1230 +#define _loop0_28_type 1231 +#define _gather_27_type 1232 +#define _tmp_29_type 1233 +#define _tmp_30_type 1234 +#define _loop0_31_type 1235 +#define _loop1_32_type 1236 +#define _loop0_34_type 1237 +#define _gather_33_type 1238 +#define _tmp_35_type 1239 +#define _loop0_37_type 1240 +#define _gather_36_type 1241 +#define _tmp_38_type 1242 +#define _loop0_40_type 1243 +#define _gather_39_type 1244 +#define _loop0_42_type 1245 +#define _gather_41_type 1246 +#define _loop0_44_type 1247 +#define _gather_43_type 1248 +#define _loop0_46_type 1249 +#define _gather_45_type 1250 +#define _tmp_47_type 1251 +#define _loop1_48_type 1252 +#define _tmp_49_type 1253 +#define _loop1_50_type 1254 +#define _loop0_52_type 1255 +#define _gather_51_type 1256 +#define _tmp_53_type 1257 +#define _tmp_54_type 1258 +#define _tmp_55_type 1259 +#define _loop0_57_type 1260 +#define _gather_56_type 1261 +#define _tmp_58_type 1262 +#define _loop0_60_type 1263 +#define _gather_59_type 1264 +#define _tmp_61_type 1265 +#define _loop0_63_type 1266 +#define _gather_62_type 1267 +#define _loop0_65_type 1268 +#define _gather_64_type 1269 +#define _tmp_66_type 1270 +#define _tmp_67_type 1271 +#define _tmp_68_type 1272 +#define _tmp_69_type 1273 +#define _loop0_70_type 1274 +#define _loop0_71_type 1275 +#define _loop0_72_type 1276 +#define _loop1_73_type 1277 +#define _loop0_74_type 1278 +#define _loop1_75_type 1279 +#define _loop1_76_type 1280 +#define _loop1_77_type 1281 +#define _loop0_78_type 1282 +#define _loop1_79_type 1283 +#define _loop0_80_type 1284 +#define _loop1_81_type 1285 +#define _loop0_82_type 1286 +#define _loop1_83_type 1287 +#define _loop1_84_type 1288 +#define _tmp_85_type 1289 +#define _loop1_86_type 1290 +#define _loop0_88_type 1291 +#define _gather_87_type 1292 +#define _loop1_89_type 1293 +#define _loop0_90_type 1294 +#define _loop0_91_type 1295 +#define _loop0_92_type 1296 +#define _loop1_93_type 1297 +#define _loop0_94_type 1298 +#define _loop1_95_type 1299 +#define _loop1_96_type 1300 +#define _loop1_97_type 1301 +#define _loop0_98_type 1302 +#define _loop1_99_type 1303 +#define _loop0_100_type 1304 +#define _loop1_101_type 1305 +#define _loop0_102_type 1306 +#define _loop1_103_type 1307 +#define _loop1_104_type 1308 +#define _loop1_105_type 1309 +#define _loop1_106_type 1310 +#define _tmp_107_type 1311 +#define _loop0_109_type 1312 +#define _gather_108_type 1313 +#define _tmp_110_type 1314 +#define _tmp_111_type 1315 +#define _tmp_112_type 1316 +#define _tmp_113_type 1317 +#define _loop1_114_type 1318 +#define _tmp_115_type 1319 +#define _tmp_116_type 1320 +#define _loop0_118_type 1321 +#define _gather_117_type 1322 +#define _loop1_119_type 1323 +#define _loop0_120_type 1324 +#define _loop0_121_type 1325 +#define _loop0_123_type 1326 +#define _gather_122_type 1327 +#define _tmp_124_type 1328 +#define _loop0_126_type 1329 +#define _gather_125_type 1330 +#define _loop0_128_type 1331 +#define _gather_127_type 1332 +#define _loop0_130_type 1333 +#define _gather_129_type 1334 +#define _loop0_132_type 1335 +#define _gather_131_type 1336 +#define _loop0_133_type 1337 +#define _loop0_135_type 1338 +#define _gather_134_type 1339 +#define _loop1_136_type 1340 +#define _tmp_137_type 1341 +#define _loop0_139_type 1342 +#define _gather_138_type 1343 +#define _loop0_141_type 1344 +#define _gather_140_type 1345 +#define _tmp_142_type 1346 +#define _tmp_143_type 1347 +#define _tmp_144_type 1348 +#define _tmp_145_type 1349 +#define _loop0_146_type 1350 +#define _loop0_147_type 1351 +#define _loop0_148_type 1352 +#define _tmp_149_type 1353 +#define _tmp_150_type 1354 +#define _tmp_151_type 1355 +#define _loop0_152_type 1356 +#define _loop1_153_type 1357 +#define _loop0_154_type 1358 +#define _loop1_155_type 1359 +#define _tmp_156_type 1360 +#define _tmp_157_type 1361 +#define _tmp_158_type 1362 +#define _loop0_160_type 1363 +#define _gather_159_type 1364 +#define _loop0_162_type 1365 +#define _gather_161_type 1366 +#define _tmp_163_type 1367 +#define _tmp_164_type 1368 +#define _loop0_166_type 1369 +#define _gather_165_type 1370 +#define _tmp_167_type 1371 +#define _tmp_168_type 1372 +#define _tmp_169_type 1373 +#define _tmp_170_type 1374 +#define _tmp_171_type 1375 +#define _tmp_172_type 1376 +#define _tmp_173_type 1377 +#define _tmp_174_type 1378 +#define _tmp_175_type 1379 +#define _tmp_176_type 1380 +#define _tmp_177_type 1381 +#define _tmp_178_type 1382 +#define _tmp_179_type 1383 +#define _tmp_180_type 1384 +#define _tmp_181_type 1385 +#define _tmp_182_type 1386 +#define _tmp_183_type 1387 +#define _tmp_184_type 1388 +#define _tmp_185_type 1389 +#define _tmp_186_type 1390 +#define _tmp_187_type 1391 +#define _tmp_188_type 1392 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -657,6 +662,8 @@ static void *invalid_case_block_rule(Parser *p); static void *invalid_if_stmt_rule(Parser *p); static void *invalid_elif_stmt_rule(Parser *p); static void *invalid_while_stmt_rule(Parser *p); +static void *invalid_double_starred_kvpairs_rule(Parser *p); +static void *invalid_kvpair_rule(Parser *p); static asdl_seq *_loop0_1_rule(Parser *p); static asdl_seq *_loop0_2_rule(Parser *p); static asdl_seq *_loop0_4_rule(Parser *p); @@ -821,8 +828,8 @@ static asdl_seq *_loop0_162_rule(Parser *p); static asdl_seq *_gather_161_rule(Parser *p); static void *_tmp_163_rule(Parser *p); static void *_tmp_164_rule(Parser *p); -static void *_tmp_165_rule(Parser *p); -static void *_tmp_166_rule(Parser *p); +static asdl_seq *_loop0_166_rule(Parser *p); +static asdl_seq *_gather_165_rule(Parser *p); static void *_tmp_167_rule(Parser *p); static void *_tmp_168_rule(Parser *p); static void *_tmp_169_rule(Parser *p); @@ -842,6 +849,9 @@ static void *_tmp_182_rule(Parser *p); static void *_tmp_183_rule(Parser *p); static void *_tmp_184_rule(Parser *p); static void *_tmp_185_rule(Parser *p); +static void *_tmp_186_rule(Parser *p); +static void *_tmp_187_rule(Parser *p); +static void *_tmp_188_rule(Parser *p); // file: statements? $ @@ -14254,7 +14264,7 @@ setcomp_rule(Parser *p) return _res; } -// dict: '{' double_starred_kvpairs? '}' +// dict: '{' double_starred_kvpairs? '}' | '{' invalid_double_starred_kvpairs '}' static expr_ty dict_rule(Parser *p) { @@ -14313,6 +14323,31 @@ dict_rule(Parser *p) D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'")); } + { // '{' invalid_double_starred_kvpairs '}' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + Token * _literal; + Token * _literal_1; + void *invalid_double_starred_kvpairs_var; + if ( + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (invalid_double_starred_kvpairs_var = invalid_double_starred_kvpairs_rule(p)) // invalid_double_starred_kvpairs + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + ) + { + D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + _res = _PyPegen_dummy_name(p, _literal, invalid_double_starred_kvpairs_var, _literal_1); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + } _res = NULL; done: D(p->level--); @@ -19133,6 +19168,216 @@ invalid_while_stmt_rule(Parser *p) return _res; } +// invalid_double_starred_kvpairs: +// | ','.double_starred_kvpair+ ',' invalid_kvpair +// | expression ':' '*' bitwise_or +// | expression ':' &('}' | ',') +static void * +invalid_double_starred_kvpairs_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // ','.double_starred_kvpair+ ',' invalid_kvpair + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + asdl_seq * _gather_165_var; + Token * _literal; + void *invalid_kvpair_var; + if ( + (_gather_165_var = _gather_165_rule(p)) // ','.double_starred_kvpair+ + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (invalid_kvpair_var = invalid_kvpair_rule(p)) // invalid_kvpair + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + _res = _PyPegen_dummy_name(p, _gather_165_var, _literal, invalid_kvpair_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + } + { // expression ':' '*' bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + Token * _literal; + Token * a; + expr_ty bitwise_or_var; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (a = _PyPegen_expect_token(p, 16)) // token='*' + && + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or")); + } + { // expression ':' &('}' | ',') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); + Token * a; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (a = _PyPegen_expect_token(p, 11)) // token=':' + && + _PyPegen_lookahead(1, _tmp_167_rule, p) + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_kvpair: expression !(':') | expression ':' '*' bitwise_or | expression ':' +static void * +invalid_kvpair_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // expression !(':') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')")); + expr_ty a; + if ( + (a = expression_rule(p)) // expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=(':') + ) + { + D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')")); + _res = RAISE_SYNTAX_ERROR ( "':' expected after dictionary key" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !(':')")); + } + { // expression ':' '*' bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + Token * _literal; + Token * a; + expr_ty bitwise_or_var; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (a = _PyPegen_expect_token(p, 16)) // token='*' + && + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + ) + { + D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or")); + } + { // expression ':' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':'")); + Token * a; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (a = _PyPegen_expect_token(p, 11)) // token=':' + ) + { + D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':'")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + // _loop0_1: NEWLINE static asdl_seq * _loop0_1_rule(Parser *p) @@ -20381,12 +20626,12 @@ _loop1_22_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_165_var; + void *_tmp_168_var; while ( - (_tmp_165_var = _tmp_165_rule(p)) // star_targets '=' + (_tmp_168_var = _tmp_168_rule(p)) // star_targets '=' ) { - _res = _tmp_165_var; + _res = _tmp_168_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -20889,12 +21134,12 @@ _loop0_31_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_166_var; + void *_tmp_169_var; while ( - (_tmp_166_var = _tmp_166_rule(p)) // '.' | '...' + (_tmp_169_var = _tmp_169_rule(p)) // '.' | '...' ) { - _res = _tmp_166_var; + _res = _tmp_169_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -20955,12 +21200,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_167_var; + void *_tmp_170_var; while ( - (_tmp_167_var = _tmp_167_rule(p)) // '.' | '...' + (_tmp_170_var = _tmp_170_rule(p)) // '.' | '...' ) { - _res = _tmp_167_var; + _res = _tmp_170_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24071,12 +24316,12 @@ _loop1_84_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_168_var; + void *_tmp_171_var; while ( - (_tmp_168_var = _tmp_168_rule(p)) // '@' named_expression NEWLINE + (_tmp_171_var = _tmp_171_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_168_var; + _res = _tmp_171_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24189,12 +24434,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_169_var; + void *_tmp_172_var; while ( - (_tmp_169_var = _tmp_169_rule(p)) // ',' star_expression + (_tmp_172_var = _tmp_172_rule(p)) // ',' star_expression ) { - _res = _tmp_169_var; + _res = _tmp_172_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24374,12 +24619,12 @@ _loop1_89_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_170_var; + void *_tmp_173_var; while ( - (_tmp_170_var = _tmp_170_rule(p)) // ',' expression + (_tmp_173_var = _tmp_173_rule(p)) // ',' expression ) { - _res = _tmp_170_var; + _res = _tmp_173_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25404,12 +25649,12 @@ _loop1_104_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_171_var; + void *_tmp_174_var; while ( - (_tmp_171_var = _tmp_171_rule(p)) // 'or' conjunction + (_tmp_174_var = _tmp_174_rule(p)) // 'or' conjunction ) { - _res = _tmp_171_var; + _res = _tmp_174_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25475,12 +25720,12 @@ _loop1_105_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_172_var; + void *_tmp_175_var; while ( - (_tmp_172_var = _tmp_172_rule(p)) // 'and' inversion + (_tmp_175_var = _tmp_175_rule(p)) // 'and' inversion ) { - _res = _tmp_172_var; + _res = _tmp_175_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26396,12 +26641,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_173_var; + void *_tmp_176_var; while ( - (_tmp_173_var = _tmp_173_rule(p)) // 'if' disjunction + (_tmp_176_var = _tmp_176_rule(p)) // 'if' disjunction ) { - _res = _tmp_173_var; + _res = _tmp_176_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26462,12 +26707,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_174_var; + void *_tmp_177_var; while ( - (_tmp_174_var = _tmp_174_rule(p)) // 'if' disjunction + (_tmp_177_var = _tmp_177_rule(p)) // 'if' disjunction ) { - _res = _tmp_174_var; + _res = _tmp_177_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26533,7 +26778,7 @@ _loop0_123_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_175_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_178_rule(p)) // starred_expression | direct_named_expression !'=' ) { _res = elem; @@ -26596,7 +26841,7 @@ _gather_122_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_175_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_178_rule(p)) // starred_expression | direct_named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) @@ -27142,12 +27387,12 @@ _loop0_133_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_176_var; + void *_tmp_179_var; while ( - (_tmp_176_var = _tmp_176_rule(p)) // ',' star_target + (_tmp_179_var = _tmp_179_rule(p)) // ',' star_target ) { - _res = _tmp_176_var; + _res = _tmp_179_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27322,12 +27567,12 @@ _loop1_136_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_177_var; + void *_tmp_180_var; while ( - (_tmp_177_var = _tmp_177_rule(p)) // ',' star_target + (_tmp_180_var = _tmp_180_rule(p)) // ',' star_target ) { - _res = _tmp_177_var; + _res = _tmp_180_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28062,12 +28307,12 @@ _loop0_147_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_178_var; + void *_tmp_181_var; while ( - (_tmp_178_var = _tmp_178_rule(p)) // star_targets '=' + (_tmp_181_var = _tmp_181_rule(p)) // star_targets '=' ) { - _res = _tmp_178_var; + _res = _tmp_181_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28128,12 +28373,12 @@ _loop0_148_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_179_var; + void *_tmp_182_var; while ( - (_tmp_179_var = _tmp_179_rule(p)) // star_targets '=' + (_tmp_182_var = _tmp_182_rule(p)) // star_targets '=' ) { - _res = _tmp_179_var; + _res = _tmp_182_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28662,15 +28907,15 @@ _tmp_156_rule(Parser *p) } D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_180_var; + void *_tmp_183_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_180_var = _tmp_180_rule(p)) // ')' | '**' + (_tmp_183_var = _tmp_183_rule(p)) // ')' | '**' ) { D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_180_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_183_var); goto done; } p->mark = _mark; @@ -28720,15 +28965,15 @@ _tmp_157_rule(Parser *p) } D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_181_var; + void *_tmp_184_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_181_var = _tmp_181_rule(p)) // ':' | '**' + (_tmp_184_var = _tmp_184_rule(p)) // ':' | '**' ) { D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_181_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_184_var); goto done; } p->mark = _mark; @@ -28847,7 +29092,7 @@ _loop0_160_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_182_rule(p)) // expression ['as' star_target] + (elem = _tmp_185_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -28910,7 +29155,7 @@ _gather_159_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_182_rule(p)) // expression ['as' star_target] + (elem = _tmp_185_rule(p)) // expression ['as' star_target] && (seq = _loop0_160_rule(p)) // _loop0_160 ) @@ -28961,7 +29206,7 @@ _loop0_162_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_183_rule(p)) // expressions ['as' star_target] + (elem = _tmp_186_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -29024,7 +29269,7 @@ _gather_161_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_183_rule(p)) // expressions ['as' star_target] + (elem = _tmp_186_rule(p)) // expressions ['as' star_target] && (seq = _loop0_162_rule(p)) // _loop0_162 ) @@ -29121,9 +29366,178 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: star_targets '=' +// _loop0_166: ',' double_starred_kvpair +static asdl_seq * +_loop0_166_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' double_starred_kvpair + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _loop0_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + Token * _literal; + KeyValuePair* elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair + ) + { + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop0_166[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_166_type, _seq); + D(p->level--); + return _seq; +} + +// _gather_165: double_starred_kvpair _loop0_166 +static asdl_seq * +_gather_165_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // double_starred_kvpair _loop0_166 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_166")); + KeyValuePair* elem; + asdl_seq * seq; + if ( + (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair + && + (seq = _loop0_166_rule(p)) // _loop0_166 + ) + { + D(fprintf(stderr, "%*c+ _gather_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_166")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_165[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_166")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_167: '}' | ',' static void * -_tmp_165_rule(Parser *p) +_tmp_167_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // '}' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 26)) // token='}' + ) + { + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); + } + { // ',' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + ) + { + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_168: star_targets '=' +static void * +_tmp_168_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29137,7 +29551,7 @@ _tmp_165_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -29146,7 +29560,7 @@ _tmp_165_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29156,7 +29570,7 @@ _tmp_165_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29165,9 +29579,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _tmp_166: '.' | '...' +// _tmp_169: '.' | '...' static void * -_tmp_166_rule(Parser *p) +_tmp_169_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29181,18 +29595,18 @@ _tmp_166_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29200,18 +29614,18 @@ _tmp_166_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29220,9 +29634,9 @@ _tmp_166_rule(Parser *p) return _res; } -// _tmp_167: '.' | '...' +// _tmp_170: '.' | '...' static void * -_tmp_167_rule(Parser *p) +_tmp_170_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29236,18 +29650,18 @@ _tmp_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29255,18 +29669,18 @@ _tmp_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29275,9 +29689,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: '@' named_expression NEWLINE +// _tmp_171: '@' named_expression NEWLINE static void * -_tmp_168_rule(Parser *p) +_tmp_171_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29291,7 +29705,7 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -29303,7 +29717,7 @@ _tmp_168_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29313,7 +29727,7 @@ _tmp_168_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -29322,9 +29736,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: ',' star_expression +// _tmp_172: ',' star_expression static void * -_tmp_169_rule(Parser *p) +_tmp_172_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29338,7 +29752,7 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -29347,7 +29761,7 @@ _tmp_169_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29357,7 +29771,7 @@ _tmp_169_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -29366,9 +29780,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: ',' expression +// _tmp_173: ',' expression static void * -_tmp_170_rule(Parser *p) +_tmp_173_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29382,7 +29796,7 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -29391,7 +29805,7 @@ _tmp_170_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29401,7 +29815,7 @@ _tmp_170_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -29410,9 +29824,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: 'or' conjunction +// _tmp_174: 'or' conjunction static void * -_tmp_171_rule(Parser *p) +_tmp_174_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29426,7 +29840,7 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -29435,7 +29849,7 @@ _tmp_171_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29445,7 +29859,7 @@ _tmp_171_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -29454,9 +29868,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: 'and' inversion +// _tmp_175: 'and' inversion static void * -_tmp_172_rule(Parser *p) +_tmp_175_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29470,7 +29884,7 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -29479,7 +29893,7 @@ _tmp_172_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29489,7 +29903,7 @@ _tmp_172_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -29498,9 +29912,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _tmp_173: 'if' disjunction +// _tmp_176: 'if' disjunction static void * -_tmp_173_rule(Parser *p) +_tmp_176_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29514,7 +29928,7 @@ _tmp_173_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -29523,7 +29937,7 @@ _tmp_173_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29533,7 +29947,7 @@ _tmp_173_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -29542,9 +29956,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _tmp_174: 'if' disjunction +// _tmp_177: 'if' disjunction static void * -_tmp_174_rule(Parser *p) +_tmp_177_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29558,7 +29972,7 @@ _tmp_174_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -29567,7 +29981,7 @@ _tmp_174_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29577,7 +29991,7 @@ _tmp_174_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -29586,9 +30000,9 @@ _tmp_174_rule(Parser *p) return _res; } -// _tmp_175: starred_expression | direct_named_expression !'=' +// _tmp_178: starred_expression | direct_named_expression !'=' static void * -_tmp_175_rule(Parser *p) +_tmp_178_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29602,18 +30016,18 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // direct_named_expression !'=' @@ -29621,7 +30035,7 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); expr_ty direct_named_expression_var; if ( (direct_named_expression_var = direct_named_expression_rule(p)) // direct_named_expression @@ -29629,12 +30043,12 @@ _tmp_175_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); _res = direct_named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "direct_named_expression !'='")); } _res = NULL; @@ -29643,9 +30057,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: ',' star_target +// _tmp_179: ',' star_target static void * -_tmp_176_rule(Parser *p) +_tmp_179_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29659,7 +30073,7 @@ _tmp_176_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -29668,7 +30082,7 @@ _tmp_176_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29678,7 +30092,7 @@ _tmp_176_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -29687,9 +30101,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: ',' star_target +// _tmp_180: ',' star_target static void * -_tmp_177_rule(Parser *p) +_tmp_180_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29703,7 +30117,7 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -29712,7 +30126,7 @@ _tmp_177_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29722,7 +30136,7 @@ _tmp_177_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -29731,9 +30145,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: star_targets '=' +// _tmp_181: star_targets '=' static void * -_tmp_178_rule(Parser *p) +_tmp_181_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29747,7 +30161,7 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -29756,12 +30170,12 @@ _tmp_178_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29770,9 +30184,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: star_targets '=' +// _tmp_182: star_targets '=' static void * -_tmp_179_rule(Parser *p) +_tmp_182_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29786,7 +30200,7 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -29795,12 +30209,12 @@ _tmp_179_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29809,9 +30223,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: ')' | '**' +// _tmp_183: ')' | '**' static void * -_tmp_180_rule(Parser *p) +_tmp_183_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29825,18 +30239,18 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -29844,18 +30258,18 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -29864,9 +30278,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _tmp_181: ':' | '**' +// _tmp_184: ':' | '**' static void * -_tmp_181_rule(Parser *p) +_tmp_184_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29880,18 +30294,18 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -29899,18 +30313,18 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -29919,9 +30333,9 @@ _tmp_181_rule(Parser *p) return _res; } -// _tmp_182: expression ['as' star_target] +// _tmp_185: expression ['as' star_target] static void * -_tmp_182_rule(Parser *p) +_tmp_185_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29935,22 +30349,22 @@ _tmp_182_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_184_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_187_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -29959,9 +30373,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: expressions ['as' star_target] +// _tmp_186: expressions ['as' star_target] static void * -_tmp_183_rule(Parser *p) +_tmp_186_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29975,22 +30389,22 @@ _tmp_183_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_185_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_188_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -29999,9 +30413,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _tmp_184: 'as' star_target +// _tmp_187: 'as' star_target static void * -_tmp_184_rule(Parser *p) +_tmp_187_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30015,7 +30429,7 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30024,12 +30438,12 @@ _tmp_184_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -30038,9 +30452,9 @@ _tmp_184_rule(Parser *p) return _res; } -// _tmp_185: 'as' star_target +// _tmp_188: 'as' star_target static void * -_tmp_185_rule(Parser *p) +_tmp_188_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30054,7 +30468,7 @@ _tmp_185_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30063,12 +30477,12 @@ _tmp_185_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; From webhook-mailer at python.org Thu Apr 15 09:29:21 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 15 Apr 2021 13:29:21 -0000 Subject: [Python-checkins] bpo-43846: Use less stack for large literals and calls (GH-25403) Message-ID: https://github.com/python/cpython/commit/11e0b295dee235dd6fd66a10d4823b0dcb014dc4 commit: 11e0b295dee235dd6fd66a10d4823b0dcb014dc4 branch: master author: Mark Shannon committer: markshannon date: 2021-04-15T14:28:56+01:00 summary: bpo-43846: Use less stack for large literals and calls (GH-25403) * Modify compiler to reduce stack consumption for large expressions. * Add more tests for stack usage. * Add NEWS item. * Raise SystemError for truly excessive stack use. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst M Lib/test/test_compile.py M Python/compile.c diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index c0de3bef5b6c9..fd1ef612fd613 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -961,6 +961,32 @@ def test_if_else(self): def test_binop(self): self.check_stack_size("x + " * self.N + "x") + def test_list(self): + self.check_stack_size("[" + "x, " * self.N + "x]") + + def test_tuple(self): + self.check_stack_size("(" + "x, " * self.N + "x)") + + def test_set(self): + self.check_stack_size("{" + "x, " * self.N + "x}") + + def test_dict(self): + self.check_stack_size("{" + "x:x, " * self.N + "x:x}") + + def test_func_args(self): + self.check_stack_size("f(" + "x, " * self.N + ")") + + def test_func_kwargs(self): + kwargs = (f'a{i}=x' for i in range(self.N)) + self.check_stack_size("f(" + ", ".join(kwargs) + ")") + + def test_func_args(self): + self.check_stack_size("o.m(" + "x, " * self.N + ")") + + def test_meth_kwargs(self): + kwargs = (f'a{i}=x' for i in range(self.N)) + self.check_stack_size("o.m(" + ", ".join(kwargs) + ")") + def test_func_and(self): code = "def f(x):\n" code += " x and x\n" * self.N diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst new file mode 100644 index 0000000000000..220690cd81374 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst @@ -0,0 +1 @@ +Data stack usage is much reduced for large literal and call expressions. diff --git a/Python/compile.c b/Python/compile.c index 85bc87dbf6820..11d910b5b7d58 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -43,6 +43,30 @@ #define COMP_SETCOMP 2 #define COMP_DICTCOMP 3 +/* A soft limit for stack use, to avoid excessive + * memory use for large constants, etc. + * + * The value 30 is plucked out of thin air. + * Code that could use more stack than this is + * rare, so the exact value is unimportant. + */ +#define STACK_USE_GUIDELINE 30 + +/* If we exceed this limit, it should + * be considered a compiler bug. + * Currently it should be impossible + * to exceed STACK_USE_GUIDELINE * 100, + * as 100 is the maximum parse depth. + * For performance reasons we will + * want to reduce this to a + * few hundred in the future. + * + * NOTE: Whatever MAX_ALLOWED_STACK_USE is + * set to, it should never restrict what Python + * we can write, just how we compile it. + */ +#define MAX_ALLOWED_STACK_USE (STACK_USE_GUIDELINE * 100) + #define IS_TOP_LEVEL_AWAIT(c) ( \ (c->c_flags->cf_flags & PyCF_ALLOW_TOP_LEVEL_AWAIT) \ && (c->u->u_ste->ste_type == ModuleBlock)) @@ -1403,7 +1427,7 @@ compiler_addop_name(struct compiler *c, int opcode, PyObject *dict, */ static int -compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) +compiler_addop_i_line(struct compiler *c, int opcode, Py_ssize_t oparg, int lineno) { struct instr *i; int off; @@ -1424,10 +1448,22 @@ compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int); - i->i_lineno = c->u->u_lineno; + i->i_lineno = lineno; return 1; } +static int +compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) +{ + return compiler_addop_i_line(c, opcode, oparg, c->u->u_lineno); +} + +static int +compiler_addop_i_noline(struct compiler *c, int opcode, Py_ssize_t oparg) +{ + return compiler_addop_i_line(c, opcode, oparg, -1); +} + static int add_jump_to_block(basicblock *b, int opcode, int lineno, basicblock *target) { assert(HAS_ARG(opcode)); @@ -1527,6 +1563,11 @@ compiler_addop_j_noline(struct compiler *c, int opcode, basicblock *b) return 0; \ } +#define ADDOP_I_NOLINE(C, OP, O) { \ + if (!compiler_addop_i_noline((C), (OP), (O))) \ + return 0; \ +} + #define ADDOP_JUMP(C, OP, O) { \ if (!compiler_addop_j((C), (OP), (O))) \ return 0; \ @@ -3707,14 +3748,13 @@ starunpack_helper(struct compiler *c, asdl_expr_seq *elts, int pushed, int build, int add, int extend, int tuple) { Py_ssize_t n = asdl_seq_LEN(elts); - Py_ssize_t i, seen_star = 0; if (n > 2 && are_all_items_const(elts, 0, n)) { PyObject *folded = PyTuple_New(n); if (folded == NULL) { return 0; } PyObject *val; - for (i = 0; i < n; i++) { + for (Py_ssize_t i = 0; i < n; i++) { val = ((expr_ty)asdl_seq_GET(elts, i))->v.Constant.value; Py_INCREF(val); PyTuple_SET_ITEM(folded, i, val); @@ -3735,38 +3775,16 @@ starunpack_helper(struct compiler *c, asdl_expr_seq *elts, int pushed, return 1; } - for (i = 0; i < n; i++) { + int big = n+pushed > STACK_USE_GUIDELINE; + int seen_star = 0; + for (Py_ssize_t i = 0; i < n; i++) { expr_ty elt = asdl_seq_GET(elts, i); if (elt->kind == Starred_kind) { seen_star = 1; } } - if (seen_star) { - seen_star = 0; - for (i = 0; i < n; i++) { - expr_ty elt = asdl_seq_GET(elts, i); - if (elt->kind == Starred_kind) { - if (seen_star == 0) { - ADDOP_I(c, build, i+pushed); - seen_star = 1; - } - VISIT(c, expr, elt->v.Starred.value); - ADDOP_I(c, extend, 1); - } - else { - VISIT(c, expr, elt); - if (seen_star) { - ADDOP_I(c, add, 1); - } - } - } - assert(seen_star); - if (tuple) { - ADDOP(c, LIST_TO_TUPLE); - } - } - else { - for (i = 0; i < n; i++) { + if (!seen_star && !big) { + for (Py_ssize_t i = 0; i < n; i++) { expr_ty elt = asdl_seq_GET(elts, i); VISIT(c, expr, elt); } @@ -3775,6 +3793,33 @@ starunpack_helper(struct compiler *c, asdl_expr_seq *elts, int pushed, } else { ADDOP_I(c, build, n+pushed); } + return 1; + } + int sequence_built = 0; + if (big) { + ADDOP_I(c, build, pushed); + sequence_built = 1; + } + for (Py_ssize_t i = 0; i < n; i++) { + expr_ty elt = asdl_seq_GET(elts, i); + if (elt->kind == Starred_kind) { + if (sequence_built == 0) { + ADDOP_I(c, build, i+pushed); + sequence_built = 1; + } + VISIT(c, expr, elt->v.Starred.value); + ADDOP_I(c, extend, 1); + } + else { + VISIT(c, expr, elt); + if (sequence_built) { + ADDOP_I(c, add, 1); + } + } + } + assert(sequence_built); + if (tuple) { + ADDOP(c, LIST_TO_TUPLE); } return 1; } @@ -3874,7 +3919,8 @@ compiler_subdict(struct compiler *c, expr_ty e, Py_ssize_t begin, Py_ssize_t end { Py_ssize_t i, n = end - begin; PyObject *keys, *key; - if (n > 1 && are_all_items_const(e->v.Dict.keys, begin, end)) { + int big = n*2 > STACK_USE_GUIDELINE; + if (n > 1 && !big && are_all_items_const(e->v.Dict.keys, begin, end)) { for (i = begin; i < end; i++) { VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); } @@ -3889,12 +3935,19 @@ compiler_subdict(struct compiler *c, expr_ty e, Py_ssize_t begin, Py_ssize_t end } ADDOP_LOAD_CONST_NEW(c, keys); ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + return 1; } - else { - for (i = begin; i < end; i++) { - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + if (big) { + ADDOP_I(c, BUILD_MAP, 0); + } + for (i = begin; i < end; i++) { + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + if (big) { + ADDOP_I(c, MAP_ADD, 1); } + } + if (!big) { ADDOP_I(c, BUILD_MAP, n); } return 1; @@ -3930,7 +3983,7 @@ compiler_dict(struct compiler *c, expr_ty e) ADDOP_I(c, DICT_UPDATE, 1); } else { - if (elements == 0xFFFF) { + if (elements*2 > STACK_USE_GUIDELINE) { if (!compiler_subdict(c, e, i - elements, i + 1)) { return 0; } @@ -4126,11 +4179,15 @@ maybe_optimize_method_call(struct compiler *c, expr_ty e) /* Check that the call node is an attribute access, and that the call doesn't have keyword parameters. */ if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load || - asdl_seq_LEN(e->v.Call.keywords)) + asdl_seq_LEN(e->v.Call.keywords)) { return -1; - - /* Check that there are no *varargs types of arguments. */ + } + /* Check that there aren't too many arguments */ argsl = asdl_seq_LEN(args); + if (argsl >= STACK_USE_GUIDELINE) { + return -1; + } + /* Check that there are no *varargs types of arguments. */ for (i = 0; i < argsl; i++) { expr_ty elt = asdl_seq_GET(args, i); if (elt->kind == Starred_kind) { @@ -4192,9 +4249,29 @@ compiler_call(struct compiler *c, expr_ty e) static int compiler_joined_str(struct compiler *c, expr_ty e) { - VISIT_SEQ(c, expr, e->v.JoinedStr.values); - if (asdl_seq_LEN(e->v.JoinedStr.values) != 1) - ADDOP_I(c, BUILD_STRING, asdl_seq_LEN(e->v.JoinedStr.values)); + + Py_ssize_t value_count = asdl_seq_LEN(e->v.JoinedStr.values); + if (value_count > STACK_USE_GUIDELINE) { + ADDOP_LOAD_CONST_NEW(c, _PyUnicode_FromASCII("", 0)); + PyObject *join = _PyUnicode_FromASCII("join", 4); + if (join == NULL) { + return 0; + } + ADDOP_NAME(c, LOAD_METHOD, join, names); + Py_DECREF(join); + ADDOP_I(c, BUILD_LIST, 0); + for (Py_ssize_t i = 0; i < asdl_seq_LEN(e->v.JoinedStr.values); i++) { + VISIT(c, expr, asdl_seq_GET(e->v.JoinedStr.values, i)); + ADDOP_I(c, LIST_APPEND, 1); + } + ADDOP_I(c, CALL_METHOD, 1); + } + else { + VISIT_SEQ(c, expr, e->v.JoinedStr.values); + if (asdl_seq_LEN(e->v.JoinedStr.values) != 1) { + ADDOP_I(c, BUILD_STRING, asdl_seq_LEN(e->v.JoinedStr.values)); + } + } return 1; } @@ -4251,7 +4328,8 @@ compiler_subkwargs(struct compiler *c, asdl_keyword_seq *keywords, Py_ssize_t be keyword_ty kw; PyObject *keys, *key; assert(n > 0); - if (n > 1) { + int big = n*2 > STACK_USE_GUIDELINE; + if (n > 1 && !big) { for (i = begin; i < end; i++) { kw = asdl_seq_GET(keywords, i); VISIT(c, expr, kw->value); @@ -4267,14 +4345,20 @@ compiler_subkwargs(struct compiler *c, asdl_keyword_seq *keywords, Py_ssize_t be } ADDOP_LOAD_CONST_NEW(c, keys); ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + return 1; } - else { - /* a for loop only executes once */ - for (i = begin; i < end; i++) { - kw = asdl_seq_GET(keywords, i); - ADDOP_LOAD_CONST(c, kw->arg); - VISIT(c, expr, kw->value); + if (big) { + ADDOP_I_NOLINE(c, BUILD_MAP, 0); + } + for (i = begin; i < end; i++) { + kw = asdl_seq_GET(keywords, i); + ADDOP_LOAD_CONST(c, kw->arg); + VISIT(c, expr, kw->value); + if (big) { + ADDOP_I_NOLINE(c, MAP_ADD, 1); } + } + if (!big) { ADDOP_I(c, BUILD_MAP, n); } return 1; @@ -4296,6 +4380,9 @@ compiler_call_helper(struct compiler *c, nelts = asdl_seq_LEN(args); nkwelts = asdl_seq_LEN(keywords); + if (nelts + nkwelts*2 > STACK_USE_GUIDELINE) { + goto ex_call; + } for (i = 0; i < nelts; i++) { expr_ty elt = asdl_seq_GET(args, i); if (elt->kind == Starred_kind) { @@ -6603,6 +6690,13 @@ makecode(struct compiler *c, struct assembler *a, PyObject *consts) Py_DECREF(consts); goto error; } + if (maxdepth > MAX_ALLOWED_STACK_USE) { + PyErr_Format(PyExc_SystemError, + "excessive stack use: stack is %d deep", + maxdepth); + Py_DECREF(consts); + goto error; + } co = PyCode_NewWithPosOnlyArgs(posonlyargcount+posorkeywordargcount, posonlyargcount, kwonlyargcount, nlocals_int, maxdepth, flags, a->a_bytecode, consts, names, From webhook-mailer at python.org Thu Apr 15 09:50:00 2021 From: webhook-mailer at python.org (ethanfurman) Date: Thu, 15 Apr 2021 13:50:00 -0000 Subject: [Python-checkins] [Enum] fix doc string (GH-25376) Message-ID: https://github.com/python/cpython/commit/0dca5eb54bd137ed5c6e20012fe8dddb2eadfdd7 commit: 0dca5eb54bd137ed5c6e20012fe8dddb2eadfdd7 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-15T06:49:54-07:00 summary: [Enum] fix doc string (GH-25376) files: M Lib/enum.py diff --git a/Lib/enum.py b/Lib/enum.py index b102a4e4cc782..9533dd80b2366 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -310,7 +310,7 @@ def __setitem__(self, key, value): pass elif _is_sunder(key): if key not in ( - '_order_', '_create_pseudo_member_', + '_order_', '_generate_next_value_', '_missing_', '_ignore_', '_iter_member_', '_iter_member_by_value_', '_iter_member_by_def_', ): @@ -1131,7 +1131,9 @@ def _iter_member_by_def_(cls, value): @classmethod def _missing_(cls, value): """ - Create a composite member iff value contains only members. + Create a composite member containing all canonical members present in `value`. + + If non-member values are present, result depends on `_boundary_` setting. """ if not isinstance(value, int): raise ValueError( From webhook-mailer at python.org Thu Apr 15 09:58:41 2021 From: webhook-mailer at python.org (ethanfurman) Date: Thu, 15 Apr 2021 13:58:41 -0000 Subject: [Python-checkins] bpo-43744: [Enum] fix ``_is_private`` (GH-25349) Message-ID: https://github.com/python/cpython/commit/ec09973f5b21d33550c834ddc89606b0e1c70ffd commit: ec09973f5b21d33550c834ddc89606b0e1c70ffd branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-15T06:58:33-07:00 summary: bpo-43744: [Enum] fix ``_is_private`` (GH-25349) ``_is_private`` now returns ``False`` instead of raising an exception when enum name matches beginning of class name as used in a private variable files: A Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst M Lib/enum.py M Lib/test/test_enum.py diff --git a/Lib/enum.py b/Lib/enum.py index 9533dd80b2366..17deb4b9c05ae 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -53,10 +53,11 @@ def _is_sunder(name): def _is_private(cls_name, name): # do not use `re` as `re` imports `enum` pattern = '_%s__' % (cls_name, ) + pat_len = len(pattern) if ( - len(name) >= 5 + len(name) > pat_len and name.startswith(pattern) - and name[len(pattern)] != '_' + and name[pat_len:pat_len+1] != ['_'] and (name[-1] != '_' or name[-2] != '_') ): return True diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 5af7cd2ca57ed..b9d7f96a3e948 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3395,6 +3395,31 @@ class Sillier(IntEnum): triple = 3 value = 4 +class TestHelpers(unittest.TestCase): + + sunder_names = '_bad_', '_good_', '_what_ho_' + dunder_names = '__mal__', '__bien__', '__que_que__' + private_names = '_MyEnum__private', '_MyEnum__still_private' + private_and_sunder_names = '_MyEnum__private_', '_MyEnum__also_private_' + random_names = 'okay', '_semi_private', '_weird__', '_MyEnum__' + + def test_sunder(self): + for name in self.sunder_names + self.private_and_sunder_names: + self.assertTrue(enum._is_sunder(name), '%r is a not sunder name?' % name) + for name in self.dunder_names + self.private_names + self.random_names: + self.assertFalse(enum._is_sunder(name), '%r is a sunder name?' % name) + + def test_dunder(self): + for name in self.dunder_names: + self.assertTrue(enum._is_dunder(name), '%r is a not dunder name?' % name) + for name in self.sunder_names + self.private_names + self.private_and_sunder_names + self.random_names: + self.assertFalse(enum._is_dunder(name), '%r is a dunder name?' % name) + + def test_is_private(self): + for name in self.private_names + self.private_and_sunder_names: + self.assertTrue(enum._is_private('MyEnum', name), '%r is a not private name?') + for name in self.sunder_names + self.dunder_names + self.random_names: + self.assertFalse(enum._is_private('MyEnum', name), '%r is a private name?') class TestEnumTypeSubclassing(unittest.TestCase): pass diff --git a/Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst b/Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst new file mode 100644 index 0000000000000..7fd74be87664e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst @@ -0,0 +1,2 @@ +fix issue with enum member name matching the start of a private variable +name From webhook-mailer at python.org Thu Apr 15 10:56:01 2021 From: webhook-mailer at python.org (ethanfurman) Date: Thu, 15 Apr 2021 14:56:01 -0000 Subject: [Python-checkins] Update ACKS (GH-25423) Message-ID: https://github.com/python/cpython/commit/e692f55979980826a5281560c534ef399a8f9848 commit: e692f55979980826a5281560c534ef399a8f9848 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-15T07:55:46-07:00 summary: Update ACKS (GH-25423) * Add Arseny Boykov * Add Matthias Urlichs files: M Misc/ACKS diff --git a/Misc/ACKS b/Misc/ACKS index 2502ba816ac92..20359762a5217 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -206,6 +206,7 @@ Eric Bouck Thierry Bousch Sebastian Boving Michal Bozon +Arseny Boykov Jeff Bradberry Chris Bradbury Aaron Brancotti @@ -1797,6 +1798,7 @@ Adnan Umer Utkarsh Upadhyay Roger Upole Daniel Urban +Matthias Urlichs Michael Urman Hector Urtubia Elizabeth Uselton From webhook-mailer at python.org Thu Apr 15 16:38:56 2021 From: webhook-mailer at python.org (pablogsal) Date: Thu, 15 Apr 2021 20:38:56 -0000 Subject: [Python-checkins] bpo-43822: Improve syntax errors for missing commas (GH-25377) Message-ID: https://github.com/python/cpython/commit/b280248be8e648feb82f3f3ed0050e50b238df7b commit: b280248be8e648feb82f3f3ed0050e50b238df7b branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-15T21:38:45+01:00 summary: bpo-43822: Improve syntax errors for missing commas (GH-25377) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst M Doc/library/token-list.inc M Grammar/Tokens M Grammar/python.gram M Include/token.h M Lib/test/test_genexps.py M Lib/test/test_syntax.py M Lib/token.py M Parser/parser.c M Parser/pegen.c M Parser/pegen.h M Parser/token.c M Tools/peg_generator/pegen/c_generator.py diff --git a/Doc/library/token-list.inc b/Doc/library/token-list.inc index 877d39a432ed7..1a99f0518d1b4 100644 --- a/Doc/library/token-list.inc +++ b/Doc/library/token-list.inc @@ -211,6 +211,8 @@ .. data:: TYPE_COMMENT +.. data:: SOFT_KEYWORD + .. data:: ERRORTOKEN .. data:: N_TOKENS diff --git a/Grammar/Tokens b/Grammar/Tokens index 9de2da5d15fc3..1f3e3b0991365 100644 --- a/Grammar/Tokens +++ b/Grammar/Tokens @@ -59,6 +59,7 @@ AWAIT ASYNC TYPE_IGNORE TYPE_COMMENT +SOFT_KEYWORD ERRORTOKEN # These aren't used by the C tokenizer but are needed for tokenize.py diff --git a/Grammar/python.gram b/Grammar/python.gram index 8e399f1b8ea91..e5baac3663675 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -7,6 +7,7 @@ _PyPegen_parse(Parser *p) // Initialize keywords p->keywords = reserved_keywords; p->n_keyword_lists = n_keyword_lists; + p->soft_keywords = soft_keywords; // Run parser void *result = NULL; @@ -459,6 +460,7 @@ expressions[expr_ty]: | a=expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } | expression expression[expr_ty] (memo): + | invalid_expression | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) } | disjunction | lambdef @@ -778,6 +780,13 @@ invalid_kwarg: | expression a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( a, "expression cannot contain assignment, perhaps you meant \"==\"?") } + +invalid_expression: + # !(NAME STRING) is not matched so we don't show this error with some invalid string prefixes like: kf"dsfsdf" + # Soft keywords need to also be ignored because they can be parsed as NAME NAME + | !(NAME STRING | SOFT_KEYWORD) a=disjunction expression { + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, "invalid syntax. Perhaps you forgot a comma?") } + invalid_named_expression: | a=expression ':=' expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( diff --git a/Include/token.h b/Include/token.h index 9b8a3aae07467..eb1b9ea47b469 100644 --- a/Include/token.h +++ b/Include/token.h @@ -69,8 +69,9 @@ extern "C" { #define ASYNC 56 #define TYPE_IGNORE 57 #define TYPE_COMMENT 58 -#define ERRORTOKEN 59 -#define N_TOKENS 63 +#define SOFT_KEYWORD 59 +#define ERRORTOKEN 60 +#define N_TOKENS 64 #define NT_OFFSET 256 /* Special definitions for cooperation with parser */ diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py index 5c1a209b0e990..70fe2bba3a698 100644 --- a/Lib/test/test_genexps.py +++ b/Lib/test/test_genexps.py @@ -103,7 +103,7 @@ >>> dict(a = i for i in range(10)) Traceback (most recent call last): ... - SyntaxError: invalid syntax + SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? Verify that parenthesis are required when used as a keyword argument value diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 75b778d20e90a..4d8198e5db605 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -248,22 +248,36 @@ # Missing commas in literals collections should not # produce special error messages regarding missing -# parentheses +# parentheses, but about missing commas instead >>> [1, 2 3] Traceback (most recent call last): -SyntaxError: invalid syntax +SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> {1, 2 3} Traceback (most recent call last): -SyntaxError: invalid syntax +SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> {1:2, 2:5 3:12} Traceback (most recent call last): -SyntaxError: invalid syntax +SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> (1, 2 3) Traceback (most recent call last): +SyntaxError: invalid syntax. Perhaps you forgot a comma? + +# Make sure soft keywords constructs don't raise specialized +# errors regarding missing commas + +>>> match x: +... y = 3 +Traceback (most recent call last): +SyntaxError: invalid syntax + +>>> match x: +... case y: +... 3 $ 3 +Traceback (most recent call last): SyntaxError: invalid syntax From compiler_complex_args(): @@ -864,7 +878,7 @@ SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? Ensure that early = are not matched by the parser as invalid comparisons - >>> f(2, 4, x=34); {1,2 a} + >>> f(2, 4, x=34); 1 $ 2 Traceback (most recent call last): SyntaxError: invalid syntax diff --git a/Lib/token.py b/Lib/token.py index 493bf0426508f..9d0c0bf0fb036 100644 --- a/Lib/token.py +++ b/Lib/token.py @@ -62,12 +62,13 @@ ASYNC = 56 TYPE_IGNORE = 57 TYPE_COMMENT = 58 +SOFT_KEYWORD = 59 # These aren't used by the C tokenizer but are needed for tokenize.py -ERRORTOKEN = 59 -COMMENT = 60 -NL = 61 -ENCODING = 62 -N_TOKENS = 63 +ERRORTOKEN = 60 +COMMENT = 61 +NL = 62 +ENCODING = 63 +N_TOKENS = 64 # Special definitions for cooperation with parser NT_OFFSET = 256 diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst new file mode 100644 index 0000000000000..f0e1c2f35a186 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst @@ -0,0 +1,2 @@ +Improve syntax errors in the parser for missing commas between expressions. +Patch by Pablo Galindo. diff --git a/Parser/parser.c b/Parser/parser.c index 2ead05225be5f..2f7a71a5418e6 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -65,6 +65,12 @@ static KeywordToken *reserved_keywords[] = { {NULL, -1}, }, }; +static char *soft_keywords[] = { + "_", + "case", + "match", + NULL, +}; #define file_type 1000 #define interactive_type 1001 #define eval_type 1002 @@ -242,222 +248,224 @@ static KeywordToken *reserved_keywords[] = { #define t_atom_type 1174 #define invalid_arguments_type 1175 #define invalid_kwarg_type 1176 -#define invalid_named_expression_type 1177 -#define invalid_assignment_type 1178 -#define invalid_ann_assign_target_type 1179 -#define invalid_del_stmt_type 1180 -#define invalid_block_type 1181 -#define invalid_primary_type 1182 // Left-recursive -#define invalid_comprehension_type 1183 -#define invalid_dict_comprehension_type 1184 -#define invalid_parameters_type 1185 -#define invalid_parameters_helper_type 1186 -#define invalid_lambda_parameters_type 1187 -#define invalid_lambda_parameters_helper_type 1188 -#define invalid_star_etc_type 1189 -#define invalid_lambda_star_etc_type 1190 -#define invalid_double_type_comments_type 1191 -#define invalid_with_item_type 1192 -#define invalid_for_target_type 1193 -#define invalid_group_type 1194 -#define invalid_import_from_targets_type 1195 -#define invalid_with_stmt_type 1196 -#define invalid_except_block_type 1197 -#define invalid_match_stmt_type 1198 -#define invalid_case_block_type 1199 -#define invalid_if_stmt_type 1200 -#define invalid_elif_stmt_type 1201 -#define invalid_while_stmt_type 1202 -#define invalid_double_starred_kvpairs_type 1203 -#define invalid_kvpair_type 1204 -#define _loop0_1_type 1205 -#define _loop0_2_type 1206 -#define _loop0_4_type 1207 -#define _gather_3_type 1208 -#define _loop0_6_type 1209 -#define _gather_5_type 1210 -#define _loop0_8_type 1211 -#define _gather_7_type 1212 -#define _loop0_10_type 1213 -#define _gather_9_type 1214 -#define _loop1_11_type 1215 -#define _loop0_13_type 1216 -#define _gather_12_type 1217 -#define _tmp_14_type 1218 -#define _tmp_15_type 1219 -#define _tmp_16_type 1220 -#define _tmp_17_type 1221 -#define _tmp_18_type 1222 -#define _tmp_19_type 1223 -#define _tmp_20_type 1224 -#define _tmp_21_type 1225 -#define _loop1_22_type 1226 -#define _tmp_23_type 1227 -#define _tmp_24_type 1228 -#define _loop0_26_type 1229 -#define _gather_25_type 1230 -#define _loop0_28_type 1231 -#define _gather_27_type 1232 -#define _tmp_29_type 1233 -#define _tmp_30_type 1234 -#define _loop0_31_type 1235 -#define _loop1_32_type 1236 -#define _loop0_34_type 1237 -#define _gather_33_type 1238 -#define _tmp_35_type 1239 -#define _loop0_37_type 1240 -#define _gather_36_type 1241 -#define _tmp_38_type 1242 -#define _loop0_40_type 1243 -#define _gather_39_type 1244 -#define _loop0_42_type 1245 -#define _gather_41_type 1246 -#define _loop0_44_type 1247 -#define _gather_43_type 1248 -#define _loop0_46_type 1249 -#define _gather_45_type 1250 -#define _tmp_47_type 1251 -#define _loop1_48_type 1252 -#define _tmp_49_type 1253 -#define _loop1_50_type 1254 -#define _loop0_52_type 1255 -#define _gather_51_type 1256 -#define _tmp_53_type 1257 -#define _tmp_54_type 1258 -#define _tmp_55_type 1259 -#define _loop0_57_type 1260 -#define _gather_56_type 1261 -#define _tmp_58_type 1262 -#define _loop0_60_type 1263 -#define _gather_59_type 1264 -#define _tmp_61_type 1265 -#define _loop0_63_type 1266 -#define _gather_62_type 1267 -#define _loop0_65_type 1268 -#define _gather_64_type 1269 -#define _tmp_66_type 1270 -#define _tmp_67_type 1271 -#define _tmp_68_type 1272 -#define _tmp_69_type 1273 -#define _loop0_70_type 1274 -#define _loop0_71_type 1275 -#define _loop0_72_type 1276 -#define _loop1_73_type 1277 -#define _loop0_74_type 1278 -#define _loop1_75_type 1279 -#define _loop1_76_type 1280 -#define _loop1_77_type 1281 -#define _loop0_78_type 1282 -#define _loop1_79_type 1283 -#define _loop0_80_type 1284 -#define _loop1_81_type 1285 -#define _loop0_82_type 1286 -#define _loop1_83_type 1287 -#define _loop1_84_type 1288 -#define _tmp_85_type 1289 -#define _loop1_86_type 1290 -#define _loop0_88_type 1291 -#define _gather_87_type 1292 -#define _loop1_89_type 1293 -#define _loop0_90_type 1294 -#define _loop0_91_type 1295 -#define _loop0_92_type 1296 -#define _loop1_93_type 1297 -#define _loop0_94_type 1298 -#define _loop1_95_type 1299 -#define _loop1_96_type 1300 -#define _loop1_97_type 1301 -#define _loop0_98_type 1302 -#define _loop1_99_type 1303 -#define _loop0_100_type 1304 -#define _loop1_101_type 1305 -#define _loop0_102_type 1306 -#define _loop1_103_type 1307 -#define _loop1_104_type 1308 -#define _loop1_105_type 1309 -#define _loop1_106_type 1310 -#define _tmp_107_type 1311 -#define _loop0_109_type 1312 -#define _gather_108_type 1313 -#define _tmp_110_type 1314 -#define _tmp_111_type 1315 -#define _tmp_112_type 1316 -#define _tmp_113_type 1317 -#define _loop1_114_type 1318 -#define _tmp_115_type 1319 -#define _tmp_116_type 1320 -#define _loop0_118_type 1321 -#define _gather_117_type 1322 -#define _loop1_119_type 1323 -#define _loop0_120_type 1324 -#define _loop0_121_type 1325 -#define _loop0_123_type 1326 -#define _gather_122_type 1327 -#define _tmp_124_type 1328 -#define _loop0_126_type 1329 -#define _gather_125_type 1330 -#define _loop0_128_type 1331 -#define _gather_127_type 1332 -#define _loop0_130_type 1333 -#define _gather_129_type 1334 -#define _loop0_132_type 1335 -#define _gather_131_type 1336 -#define _loop0_133_type 1337 -#define _loop0_135_type 1338 -#define _gather_134_type 1339 -#define _loop1_136_type 1340 -#define _tmp_137_type 1341 -#define _loop0_139_type 1342 -#define _gather_138_type 1343 -#define _loop0_141_type 1344 -#define _gather_140_type 1345 -#define _tmp_142_type 1346 -#define _tmp_143_type 1347 -#define _tmp_144_type 1348 -#define _tmp_145_type 1349 -#define _loop0_146_type 1350 -#define _loop0_147_type 1351 -#define _loop0_148_type 1352 -#define _tmp_149_type 1353 -#define _tmp_150_type 1354 -#define _tmp_151_type 1355 -#define _loop0_152_type 1356 -#define _loop1_153_type 1357 -#define _loop0_154_type 1358 -#define _loop1_155_type 1359 -#define _tmp_156_type 1360 -#define _tmp_157_type 1361 -#define _tmp_158_type 1362 -#define _loop0_160_type 1363 -#define _gather_159_type 1364 -#define _loop0_162_type 1365 -#define _gather_161_type 1366 -#define _tmp_163_type 1367 -#define _tmp_164_type 1368 -#define _loop0_166_type 1369 -#define _gather_165_type 1370 -#define _tmp_167_type 1371 -#define _tmp_168_type 1372 -#define _tmp_169_type 1373 -#define _tmp_170_type 1374 -#define _tmp_171_type 1375 -#define _tmp_172_type 1376 -#define _tmp_173_type 1377 -#define _tmp_174_type 1378 -#define _tmp_175_type 1379 -#define _tmp_176_type 1380 -#define _tmp_177_type 1381 -#define _tmp_178_type 1382 -#define _tmp_179_type 1383 -#define _tmp_180_type 1384 -#define _tmp_181_type 1385 -#define _tmp_182_type 1386 -#define _tmp_183_type 1387 -#define _tmp_184_type 1388 -#define _tmp_185_type 1389 -#define _tmp_186_type 1390 -#define _tmp_187_type 1391 -#define _tmp_188_type 1392 +#define invalid_expression_type 1177 +#define invalid_named_expression_type 1178 +#define invalid_assignment_type 1179 +#define invalid_ann_assign_target_type 1180 +#define invalid_del_stmt_type 1181 +#define invalid_block_type 1182 +#define invalid_primary_type 1183 // Left-recursive +#define invalid_comprehension_type 1184 +#define invalid_dict_comprehension_type 1185 +#define invalid_parameters_type 1186 +#define invalid_parameters_helper_type 1187 +#define invalid_lambda_parameters_type 1188 +#define invalid_lambda_parameters_helper_type 1189 +#define invalid_star_etc_type 1190 +#define invalid_lambda_star_etc_type 1191 +#define invalid_double_type_comments_type 1192 +#define invalid_with_item_type 1193 +#define invalid_for_target_type 1194 +#define invalid_group_type 1195 +#define invalid_import_from_targets_type 1196 +#define invalid_with_stmt_type 1197 +#define invalid_except_block_type 1198 +#define invalid_match_stmt_type 1199 +#define invalid_case_block_type 1200 +#define invalid_if_stmt_type 1201 +#define invalid_elif_stmt_type 1202 +#define invalid_while_stmt_type 1203 +#define invalid_double_starred_kvpairs_type 1204 +#define invalid_kvpair_type 1205 +#define _loop0_1_type 1206 +#define _loop0_2_type 1207 +#define _loop0_4_type 1208 +#define _gather_3_type 1209 +#define _loop0_6_type 1210 +#define _gather_5_type 1211 +#define _loop0_8_type 1212 +#define _gather_7_type 1213 +#define _loop0_10_type 1214 +#define _gather_9_type 1215 +#define _loop1_11_type 1216 +#define _loop0_13_type 1217 +#define _gather_12_type 1218 +#define _tmp_14_type 1219 +#define _tmp_15_type 1220 +#define _tmp_16_type 1221 +#define _tmp_17_type 1222 +#define _tmp_18_type 1223 +#define _tmp_19_type 1224 +#define _tmp_20_type 1225 +#define _tmp_21_type 1226 +#define _loop1_22_type 1227 +#define _tmp_23_type 1228 +#define _tmp_24_type 1229 +#define _loop0_26_type 1230 +#define _gather_25_type 1231 +#define _loop0_28_type 1232 +#define _gather_27_type 1233 +#define _tmp_29_type 1234 +#define _tmp_30_type 1235 +#define _loop0_31_type 1236 +#define _loop1_32_type 1237 +#define _loop0_34_type 1238 +#define _gather_33_type 1239 +#define _tmp_35_type 1240 +#define _loop0_37_type 1241 +#define _gather_36_type 1242 +#define _tmp_38_type 1243 +#define _loop0_40_type 1244 +#define _gather_39_type 1245 +#define _loop0_42_type 1246 +#define _gather_41_type 1247 +#define _loop0_44_type 1248 +#define _gather_43_type 1249 +#define _loop0_46_type 1250 +#define _gather_45_type 1251 +#define _tmp_47_type 1252 +#define _loop1_48_type 1253 +#define _tmp_49_type 1254 +#define _loop1_50_type 1255 +#define _loop0_52_type 1256 +#define _gather_51_type 1257 +#define _tmp_53_type 1258 +#define _tmp_54_type 1259 +#define _tmp_55_type 1260 +#define _loop0_57_type 1261 +#define _gather_56_type 1262 +#define _tmp_58_type 1263 +#define _loop0_60_type 1264 +#define _gather_59_type 1265 +#define _tmp_61_type 1266 +#define _loop0_63_type 1267 +#define _gather_62_type 1268 +#define _loop0_65_type 1269 +#define _gather_64_type 1270 +#define _tmp_66_type 1271 +#define _tmp_67_type 1272 +#define _tmp_68_type 1273 +#define _tmp_69_type 1274 +#define _loop0_70_type 1275 +#define _loop0_71_type 1276 +#define _loop0_72_type 1277 +#define _loop1_73_type 1278 +#define _loop0_74_type 1279 +#define _loop1_75_type 1280 +#define _loop1_76_type 1281 +#define _loop1_77_type 1282 +#define _loop0_78_type 1283 +#define _loop1_79_type 1284 +#define _loop0_80_type 1285 +#define _loop1_81_type 1286 +#define _loop0_82_type 1287 +#define _loop1_83_type 1288 +#define _loop1_84_type 1289 +#define _tmp_85_type 1290 +#define _loop1_86_type 1291 +#define _loop0_88_type 1292 +#define _gather_87_type 1293 +#define _loop1_89_type 1294 +#define _loop0_90_type 1295 +#define _loop0_91_type 1296 +#define _loop0_92_type 1297 +#define _loop1_93_type 1298 +#define _loop0_94_type 1299 +#define _loop1_95_type 1300 +#define _loop1_96_type 1301 +#define _loop1_97_type 1302 +#define _loop0_98_type 1303 +#define _loop1_99_type 1304 +#define _loop0_100_type 1305 +#define _loop1_101_type 1306 +#define _loop0_102_type 1307 +#define _loop1_103_type 1308 +#define _loop1_104_type 1309 +#define _loop1_105_type 1310 +#define _loop1_106_type 1311 +#define _tmp_107_type 1312 +#define _loop0_109_type 1313 +#define _gather_108_type 1314 +#define _tmp_110_type 1315 +#define _tmp_111_type 1316 +#define _tmp_112_type 1317 +#define _tmp_113_type 1318 +#define _loop1_114_type 1319 +#define _tmp_115_type 1320 +#define _tmp_116_type 1321 +#define _loop0_118_type 1322 +#define _gather_117_type 1323 +#define _loop1_119_type 1324 +#define _loop0_120_type 1325 +#define _loop0_121_type 1326 +#define _loop0_123_type 1327 +#define _gather_122_type 1328 +#define _tmp_124_type 1329 +#define _loop0_126_type 1330 +#define _gather_125_type 1331 +#define _loop0_128_type 1332 +#define _gather_127_type 1333 +#define _loop0_130_type 1334 +#define _gather_129_type 1335 +#define _loop0_132_type 1336 +#define _gather_131_type 1337 +#define _loop0_133_type 1338 +#define _loop0_135_type 1339 +#define _gather_134_type 1340 +#define _loop1_136_type 1341 +#define _tmp_137_type 1342 +#define _loop0_139_type 1343 +#define _gather_138_type 1344 +#define _loop0_141_type 1345 +#define _gather_140_type 1346 +#define _tmp_142_type 1347 +#define _tmp_143_type 1348 +#define _tmp_144_type 1349 +#define _tmp_145_type 1350 +#define _tmp_146_type 1351 +#define _loop0_147_type 1352 +#define _loop0_148_type 1353 +#define _loop0_149_type 1354 +#define _tmp_150_type 1355 +#define _tmp_151_type 1356 +#define _tmp_152_type 1357 +#define _loop0_153_type 1358 +#define _loop1_154_type 1359 +#define _loop0_155_type 1360 +#define _loop1_156_type 1361 +#define _tmp_157_type 1362 +#define _tmp_158_type 1363 +#define _tmp_159_type 1364 +#define _loop0_161_type 1365 +#define _gather_160_type 1366 +#define _loop0_163_type 1367 +#define _gather_162_type 1368 +#define _tmp_164_type 1369 +#define _tmp_165_type 1370 +#define _loop0_167_type 1371 +#define _gather_166_type 1372 +#define _tmp_168_type 1373 +#define _tmp_169_type 1374 +#define _tmp_170_type 1375 +#define _tmp_171_type 1376 +#define _tmp_172_type 1377 +#define _tmp_173_type 1378 +#define _tmp_174_type 1379 +#define _tmp_175_type 1380 +#define _tmp_176_type 1381 +#define _tmp_177_type 1382 +#define _tmp_178_type 1383 +#define _tmp_179_type 1384 +#define _tmp_180_type 1385 +#define _tmp_181_type 1386 +#define _tmp_182_type 1387 +#define _tmp_183_type 1388 +#define _tmp_184_type 1389 +#define _tmp_185_type 1390 +#define _tmp_186_type 1391 +#define _tmp_187_type 1392 +#define _tmp_188_type 1393 +#define _tmp_189_type 1394 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -636,6 +644,7 @@ static void *t_lookahead_rule(Parser *p); static expr_ty t_atom_rule(Parser *p); static void *invalid_arguments_rule(Parser *p); static void *invalid_kwarg_rule(Parser *p); +static void *invalid_expression_rule(Parser *p); static void *invalid_named_expression_rule(Parser *p); static void *invalid_assignment_rule(Parser *p); static expr_ty invalid_ann_assign_target_rule(Parser *p); @@ -809,28 +818,28 @@ static void *_tmp_142_rule(Parser *p); static void *_tmp_143_rule(Parser *p); static void *_tmp_144_rule(Parser *p); static void *_tmp_145_rule(Parser *p); -static asdl_seq *_loop0_146_rule(Parser *p); +static void *_tmp_146_rule(Parser *p); static asdl_seq *_loop0_147_rule(Parser *p); static asdl_seq *_loop0_148_rule(Parser *p); -static void *_tmp_149_rule(Parser *p); +static asdl_seq *_loop0_149_rule(Parser *p); static void *_tmp_150_rule(Parser *p); static void *_tmp_151_rule(Parser *p); -static asdl_seq *_loop0_152_rule(Parser *p); -static asdl_seq *_loop1_153_rule(Parser *p); -static asdl_seq *_loop0_154_rule(Parser *p); -static asdl_seq *_loop1_155_rule(Parser *p); -static void *_tmp_156_rule(Parser *p); +static void *_tmp_152_rule(Parser *p); +static asdl_seq *_loop0_153_rule(Parser *p); +static asdl_seq *_loop1_154_rule(Parser *p); +static asdl_seq *_loop0_155_rule(Parser *p); +static asdl_seq *_loop1_156_rule(Parser *p); static void *_tmp_157_rule(Parser *p); static void *_tmp_158_rule(Parser *p); -static asdl_seq *_loop0_160_rule(Parser *p); -static asdl_seq *_gather_159_rule(Parser *p); -static asdl_seq *_loop0_162_rule(Parser *p); -static asdl_seq *_gather_161_rule(Parser *p); -static void *_tmp_163_rule(Parser *p); +static void *_tmp_159_rule(Parser *p); +static asdl_seq *_loop0_161_rule(Parser *p); +static asdl_seq *_gather_160_rule(Parser *p); +static asdl_seq *_loop0_163_rule(Parser *p); +static asdl_seq *_gather_162_rule(Parser *p); static void *_tmp_164_rule(Parser *p); -static asdl_seq *_loop0_166_rule(Parser *p); -static asdl_seq *_gather_165_rule(Parser *p); -static void *_tmp_167_rule(Parser *p); +static void *_tmp_165_rule(Parser *p); +static asdl_seq *_loop0_167_rule(Parser *p); +static asdl_seq *_gather_166_rule(Parser *p); static void *_tmp_168_rule(Parser *p); static void *_tmp_169_rule(Parser *p); static void *_tmp_170_rule(Parser *p); @@ -852,6 +861,7 @@ static void *_tmp_185_rule(Parser *p); static void *_tmp_186_rule(Parser *p); static void *_tmp_187_rule(Parser *p); static void *_tmp_188_rule(Parser *p); +static void *_tmp_189_rule(Parser *p); // file: statements? $ @@ -9678,7 +9688,11 @@ expressions_rule(Parser *p) return _res; } -// expression: disjunction 'if' disjunction 'else' expression | disjunction | lambdef +// expression: +// | invalid_expression +// | disjunction 'if' disjunction 'else' expression +// | disjunction +// | lambdef static expr_ty expression_rule(Parser *p) { @@ -9702,6 +9716,25 @@ expression_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression")); + void *invalid_expression_var; + if ( + (invalid_expression_var = invalid_expression_rule(p)) // invalid_expression + ) + { + D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_expression")); + _res = invalid_expression_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_expression")); + } { // disjunction 'if' disjunction 'else' expression if (p->error_indicator) { D(p->level--); @@ -17443,6 +17476,52 @@ invalid_kwarg_rule(Parser *p) return _res; } +// invalid_expression: !(NAME STRING | SOFT_KEYWORD) disjunction expression +static void * +invalid_expression_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // !(NAME STRING | SOFT_KEYWORD) disjunction expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression")); + expr_ty a; + expr_ty expression_var; + if ( + _PyPegen_lookahead(0, _tmp_143_rule, p) + && + (a = disjunction_rule(p)) // disjunction + && + (expression_var = expression_rule(p)) // expression + ) + { + D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression")); + _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , "invalid syntax. Perhaps you forgot a comma?" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + // invalid_named_expression: // | expression ':=' expression // | NAME '=' bitwise_or !('=' | ':=' | ',') @@ -17503,7 +17582,7 @@ invalid_named_expression_rule(Parser *p) && (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_143_rule, p) + _PyPegen_lookahead(0, _tmp_144_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); @@ -17529,7 +17608,7 @@ invalid_named_expression_rule(Parser *p) Token * b; expr_ty bitwise_or_var; if ( - _PyPegen_lookahead(0, _tmp_144_rule, p) + _PyPegen_lookahead(0, _tmp_145_rule, p) && (a = bitwise_or_rule(p)) // bitwise_or && @@ -17537,7 +17616,7 @@ invalid_named_expression_rule(Parser *p) && (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_145_rule, p) + _PyPegen_lookahead(0, _tmp_146_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',')")); @@ -17614,7 +17693,7 @@ invalid_assignment_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_146_var; + asdl_seq * _loop0_147_var; expr_ty a; expr_ty expression_var; if ( @@ -17622,7 +17701,7 @@ invalid_assignment_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_loop0_146_var = _loop0_146_rule(p)) // star_named_expressions* + (_loop0_147_var = _loop0_147_rule(p)) // star_named_expressions* && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -17679,10 +17758,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='")); Token * _literal; - asdl_seq * _loop0_147_var; + asdl_seq * _loop0_148_var; expr_ty a; if ( - (_loop0_147_var = _loop0_147_rule(p)) // ((star_targets '='))* + (_loop0_148_var = _loop0_148_rule(p)) // ((star_targets '='))* && (a = star_expressions_rule(p)) // star_expressions && @@ -17709,10 +17788,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='")); Token * _literal; - asdl_seq * _loop0_148_var; + asdl_seq * _loop0_149_var; expr_ty a; if ( - (_loop0_148_var = _loop0_148_rule(p)) // ((star_targets '='))* + (_loop0_149_var = _loop0_149_rule(p)) // ((star_targets '='))* && (a = yield_expr_rule(p)) // yield_expr && @@ -17738,7 +17817,7 @@ invalid_assignment_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); - void *_tmp_149_var; + void *_tmp_150_var; expr_ty a; AugOperator* augassign_var; if ( @@ -17746,7 +17825,7 @@ invalid_assignment_rule(Parser *p) && (augassign_var = augassign_rule(p)) // augassign && - (_tmp_149_var = _tmp_149_rule(p)) // yield_expr | star_expressions + (_tmp_150_var = _tmp_150_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); @@ -18004,11 +18083,11 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses")); - void *_tmp_150_var; + void *_tmp_151_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_150_var = _tmp_150_rule(p)) // '[' | '(' | '{' + (_tmp_151_var = _tmp_151_rule(p)) // '[' | '(' | '{' && (a = starred_expression_rule(p)) // starred_expression && @@ -18037,11 +18116,11 @@ invalid_comprehension_rule(Parser *p) Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_151_var; + void *_tmp_152_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_151_var = _tmp_151_rule(p)) // '[' | '{' + (_tmp_152_var = _tmp_152_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -18141,11 +18220,11 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_152_var; + asdl_seq * _loop0_153_var; void *invalid_parameters_helper_var; arg_ty param_no_default_var; if ( - (_loop0_152_var = _loop0_152_rule(p)) // param_no_default* + (_loop0_153_var = _loop0_153_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && @@ -18212,13 +18291,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_153_var; + asdl_seq * _loop1_154_var; if ( - (_loop1_153_var = _loop1_153_rule(p)) // param_with_default+ + (_loop1_154_var = _loop1_154_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_153_var; + _res = _loop1_154_var; goto done; } p->mark = _mark; @@ -18249,11 +18328,11 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_154_var; + asdl_seq * _loop0_155_var; void *invalid_lambda_parameters_helper_var; arg_ty lambda_param_no_default_var; if ( - (_loop0_154_var = _loop0_154_rule(p)) // lambda_param_no_default* + (_loop0_155_var = _loop0_155_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && @@ -18322,13 +18401,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_155_var; + asdl_seq * _loop1_156_var; if ( - (_loop1_155_var = _loop1_155_rule(p)) // lambda_param_with_default+ + (_loop1_156_var = _loop1_156_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_155_var; + _res = _loop1_156_var; goto done; } p->mark = _mark; @@ -18359,11 +18438,11 @@ invalid_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); Token * _literal; - void *_tmp_156_var; + void *_tmp_157_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_156_var = _tmp_156_rule(p)) // ')' | ',' (')' | '**') + (_tmp_157_var = _tmp_157_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); @@ -18433,11 +18512,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_157_var; + void *_tmp_158_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_157_var = _tmp_157_rule(p)) // ':' | ',' (':' | '**') + (_tmp_158_var = _tmp_158_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -18539,7 +18618,7 @@ invalid_with_item_rule(Parser *p) && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_158_rule, p) + _PyPegen_lookahead(1, _tmp_159_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -18752,7 +18831,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - asdl_seq * _gather_159_var; + asdl_seq * _gather_160_var; Token * _keyword; Token * _literal; void *_opt_var; @@ -18762,13 +18841,13 @@ invalid_with_stmt_rule(Parser *p) && (_keyword = _PyPegen_expect_token(p, 519)) // token='with' && - (_gather_159_var = _gather_159_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_160_var = _gather_160_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_159_var, _literal); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_160_var, _literal); goto done; } p->mark = _mark; @@ -18781,7 +18860,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - asdl_seq * _gather_161_var; + asdl_seq * _gather_162_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -18797,7 +18876,7 @@ invalid_with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_161_var = _gather_161_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_162_var = _gather_162_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), 1) // ','? && @@ -18807,7 +18886,7 @@ invalid_with_stmt_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_161_var, _opt_var_1, _literal_1, _literal_2); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_162_var, _opt_var_1, _literal_1, _literal_2); goto done; } p->mark = _mark; @@ -18856,7 +18935,7 @@ invalid_except_block_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_163_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_164_rule(p), 1) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -18890,7 +18969,7 @@ invalid_except_block_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_164_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_165_rule(p), 1) // ['as' NAME] && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' ) @@ -19188,11 +19267,11 @@ invalid_double_starred_kvpairs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - asdl_seq * _gather_165_var; + asdl_seq * _gather_166_var; Token * _literal; void *invalid_kvpair_var; if ( - (_gather_165_var = _gather_165_rule(p)) // ','.double_starred_kvpair+ + (_gather_166_var = _gather_166_rule(p)) // ','.double_starred_kvpair+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -19200,7 +19279,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - _res = _PyPegen_dummy_name(p, _gather_165_var, _literal, invalid_kvpair_var); + _res = _PyPegen_dummy_name(p, _gather_166_var, _literal, invalid_kvpair_var); goto done; } p->mark = _mark; @@ -19253,7 +19332,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_167_rule, p) + _PyPegen_lookahead(1, _tmp_168_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -20626,12 +20705,12 @@ _loop1_22_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_168_var; + void *_tmp_169_var; while ( - (_tmp_168_var = _tmp_168_rule(p)) // star_targets '=' + (_tmp_169_var = _tmp_169_rule(p)) // star_targets '=' ) { - _res = _tmp_168_var; + _res = _tmp_169_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -21134,12 +21213,12 @@ _loop0_31_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_169_var; + void *_tmp_170_var; while ( - (_tmp_169_var = _tmp_169_rule(p)) // '.' | '...' + (_tmp_170_var = _tmp_170_rule(p)) // '.' | '...' ) { - _res = _tmp_169_var; + _res = _tmp_170_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -21200,12 +21279,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_170_var; + void *_tmp_171_var; while ( - (_tmp_170_var = _tmp_170_rule(p)) // '.' | '...' + (_tmp_171_var = _tmp_171_rule(p)) // '.' | '...' ) { - _res = _tmp_170_var; + _res = _tmp_171_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24316,12 +24395,12 @@ _loop1_84_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_171_var; + void *_tmp_172_var; while ( - (_tmp_171_var = _tmp_171_rule(p)) // '@' named_expression NEWLINE + (_tmp_172_var = _tmp_172_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_171_var; + _res = _tmp_172_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24434,12 +24513,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_172_var; + void *_tmp_173_var; while ( - (_tmp_172_var = _tmp_172_rule(p)) // ',' star_expression + (_tmp_173_var = _tmp_173_rule(p)) // ',' star_expression ) { - _res = _tmp_172_var; + _res = _tmp_173_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24619,12 +24698,12 @@ _loop1_89_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_173_var; + void *_tmp_174_var; while ( - (_tmp_173_var = _tmp_173_rule(p)) // ',' expression + (_tmp_174_var = _tmp_174_rule(p)) // ',' expression ) { - _res = _tmp_173_var; + _res = _tmp_174_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25649,12 +25728,12 @@ _loop1_104_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_174_var; + void *_tmp_175_var; while ( - (_tmp_174_var = _tmp_174_rule(p)) // 'or' conjunction + (_tmp_175_var = _tmp_175_rule(p)) // 'or' conjunction ) { - _res = _tmp_174_var; + _res = _tmp_175_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25720,12 +25799,12 @@ _loop1_105_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_175_var; + void *_tmp_176_var; while ( - (_tmp_175_var = _tmp_175_rule(p)) // 'and' inversion + (_tmp_176_var = _tmp_176_rule(p)) // 'and' inversion ) { - _res = _tmp_175_var; + _res = _tmp_176_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26641,12 +26720,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_176_var; + void *_tmp_177_var; while ( - (_tmp_176_var = _tmp_176_rule(p)) // 'if' disjunction + (_tmp_177_var = _tmp_177_rule(p)) // 'if' disjunction ) { - _res = _tmp_176_var; + _res = _tmp_177_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26707,12 +26786,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_177_var; + void *_tmp_178_var; while ( - (_tmp_177_var = _tmp_177_rule(p)) // 'if' disjunction + (_tmp_178_var = _tmp_178_rule(p)) // 'if' disjunction ) { - _res = _tmp_177_var; + _res = _tmp_178_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26778,7 +26857,7 @@ _loop0_123_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_178_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_179_rule(p)) // starred_expression | direct_named_expression !'=' ) { _res = elem; @@ -26841,7 +26920,7 @@ _gather_122_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_178_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_179_rule(p)) // starred_expression | direct_named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) @@ -27387,12 +27466,12 @@ _loop0_133_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_179_var; + void *_tmp_180_var; while ( - (_tmp_179_var = _tmp_179_rule(p)) // ',' star_target + (_tmp_180_var = _tmp_180_rule(p)) // ',' star_target ) { - _res = _tmp_179_var; + _res = _tmp_180_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27567,12 +27646,12 @@ _loop1_136_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_180_var; + void *_tmp_181_var; while ( - (_tmp_180_var = _tmp_180_rule(p)) // ',' star_target + (_tmp_181_var = _tmp_181_rule(p)) // ',' star_target ) { - _res = _tmp_180_var; + _res = _tmp_181_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27935,9 +28014,67 @@ _tmp_142_rule(Parser *p) return _res; } -// _tmp_143: '=' | ':=' | ',' +// _tmp_143: NAME STRING | SOFT_KEYWORD static void * _tmp_143_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // NAME STRING + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + expr_ty name_var; + expr_ty string_var; + if ( + (name_var = _PyPegen_name_token(p)) // NAME + && + (string_var = _PyPegen_string_token(p)) // STRING + ) + { + D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + _res = _PyPegen_dummy_name(p, name_var, string_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME STRING")); + } + { // SOFT_KEYWORD + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + expr_ty soft_keyword_var; + if ( + (soft_keyword_var = _PyPegen_soft_keyword_token(p)) // SOFT_KEYWORD + ) + { + D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + _res = soft_keyword_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "SOFT_KEYWORD")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_144: '=' | ':=' | ',' +static void * +_tmp_144_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27951,18 +28088,18 @@ _tmp_143_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -27970,18 +28107,18 @@ _tmp_143_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } { // ',' @@ -27989,18 +28126,18 @@ _tmp_143_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -28009,9 +28146,9 @@ _tmp_143_rule(Parser *p) return _res; } -// _tmp_144: list | tuple | genexp | 'True' | 'None' | 'False' +// _tmp_145: list | tuple | genexp | 'True' | 'None' | 'False' static void * -_tmp_144_rule(Parser *p) +_tmp_145_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28025,18 +28162,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } { // tuple @@ -28044,18 +28181,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // genexp @@ -28063,18 +28200,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } { // 'True' @@ -28082,18 +28219,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 524)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'None' @@ -28101,18 +28238,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 523)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } { // 'False' @@ -28120,18 +28257,18 @@ _tmp_144_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 525)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; @@ -28140,9 +28277,9 @@ _tmp_144_rule(Parser *p) return _res; } -// _tmp_145: '=' | ':=' | ',' +// _tmp_146: '=' | ':=' | ',' static void * -_tmp_145_rule(Parser *p) +_tmp_146_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28156,18 +28293,18 @@ _tmp_145_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -28175,18 +28312,18 @@ _tmp_145_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } { // ',' @@ -28194,18 +28331,18 @@ _tmp_145_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -28214,9 +28351,9 @@ _tmp_145_rule(Parser *p) return _res; } -// _loop0_146: star_named_expressions +// _loop0_147: star_named_expressions static asdl_seq * -_loop0_146_rule(Parser *p) +_loop0_147_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28240,7 +28377,7 @@ _loop0_146_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); + D(fprintf(stderr, "%*c> _loop0_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); asdl_expr_seq* star_named_expressions_var; while ( (star_named_expressions_var = star_named_expressions_rule(p)) // star_named_expressions @@ -28262,7 +28399,7 @@ _loop0_146_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_146[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_147[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28275,14 +28412,14 @@ _loop0_146_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_146_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_147_type, _seq); D(p->level--); return _seq; } -// _loop0_147: (star_targets '=') +// _loop0_148: (star_targets '=') static asdl_seq * -_loop0_147_rule(Parser *p) +_loop0_148_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28306,13 +28443,13 @@ _loop0_147_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_181_var; + D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_182_var; while ( - (_tmp_181_var = _tmp_181_rule(p)) // star_targets '=' + (_tmp_182_var = _tmp_182_rule(p)) // star_targets '=' ) { - _res = _tmp_181_var; + _res = _tmp_182_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28328,7 +28465,7 @@ _loop0_147_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_147[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_148[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28341,14 +28478,14 @@ _loop0_147_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_147_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_148_type, _seq); D(p->level--); return _seq; } -// _loop0_148: (star_targets '=') +// _loop0_149: (star_targets '=') static asdl_seq * -_loop0_148_rule(Parser *p) +_loop0_149_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28372,13 +28509,13 @@ _loop0_148_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_182_var; + D(fprintf(stderr, "%*c> _loop0_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_183_var; while ( - (_tmp_182_var = _tmp_182_rule(p)) // star_targets '=' + (_tmp_183_var = _tmp_183_rule(p)) // star_targets '=' ) { - _res = _tmp_182_var; + _res = _tmp_183_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28394,7 +28531,7 @@ _loop0_148_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_148[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_149[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28407,14 +28544,14 @@ _loop0_148_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_148_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_149_type, _seq); D(p->level--); return _seq; } -// _tmp_149: yield_expr | star_expressions +// _tmp_150: yield_expr | star_expressions static void * -_tmp_149_rule(Parser *p) +_tmp_150_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28428,18 +28565,18 @@ _tmp_149_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -28447,18 +28584,18 @@ _tmp_149_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -28467,9 +28604,9 @@ _tmp_149_rule(Parser *p) return _res; } -// _tmp_150: '[' | '(' | '{' +// _tmp_151: '[' | '(' | '{' static void * -_tmp_150_rule(Parser *p) +_tmp_151_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28483,18 +28620,18 @@ _tmp_150_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '(' @@ -28502,18 +28639,18 @@ _tmp_150_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '{' @@ -28521,18 +28658,18 @@ _tmp_150_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -28541,9 +28678,9 @@ _tmp_150_rule(Parser *p) return _res; } -// _tmp_151: '[' | '{' +// _tmp_152: '[' | '{' static void * -_tmp_151_rule(Parser *p) +_tmp_152_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28557,18 +28694,18 @@ _tmp_151_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -28576,18 +28713,18 @@ _tmp_151_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -28596,9 +28733,9 @@ _tmp_151_rule(Parser *p) return _res; } -// _loop0_152: param_no_default +// _loop0_153: param_no_default static asdl_seq * -_loop0_152_rule(Parser *p) +_loop0_153_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28622,7 +28759,7 @@ _loop0_152_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -28644,7 +28781,7 @@ _loop0_152_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28657,14 +28794,14 @@ _loop0_152_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_152_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_153_type, _seq); D(p->level--); return _seq; } -// _loop1_153: param_with_default +// _loop1_154: param_with_default static asdl_seq * -_loop1_153_rule(Parser *p) +_loop1_154_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28688,7 +28825,7 @@ _loop1_153_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -28710,7 +28847,7 @@ _loop1_153_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -28728,14 +28865,14 @@ _loop1_153_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_153_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_154_type, _seq); D(p->level--); return _seq; } -// _loop0_154: lambda_param_no_default +// _loop0_155: lambda_param_no_default static asdl_seq * -_loop0_154_rule(Parser *p) +_loop0_155_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28759,7 +28896,7 @@ _loop0_154_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -28781,7 +28918,7 @@ _loop0_154_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28794,14 +28931,14 @@ _loop0_154_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_154_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_155_type, _seq); D(p->level--); return _seq; } -// _loop1_155: lambda_param_with_default +// _loop1_156: lambda_param_with_default static asdl_seq * -_loop1_155_rule(Parser *p) +_loop1_156_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28825,7 +28962,7 @@ _loop1_155_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -28847,7 +28984,7 @@ _loop1_155_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -28865,14 +29002,14 @@ _loop1_155_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_155_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_156_type, _seq); D(p->level--); return _seq; } -// _tmp_156: ')' | ',' (')' | '**') +// _tmp_157: ')' | ',' (')' | '**') static void * -_tmp_156_rule(Parser *p) +_tmp_157_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28886,18 +29023,18 @@ _tmp_156_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -28905,21 +29042,21 @@ _tmp_156_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_183_var; + void *_tmp_184_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_183_var = _tmp_183_rule(p)) // ')' | '**' + (_tmp_184_var = _tmp_184_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_183_var); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_184_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -28928,9 +29065,9 @@ _tmp_156_rule(Parser *p) return _res; } -// _tmp_157: ':' | ',' (':' | '**') +// _tmp_158: ':' | ',' (':' | '**') static void * -_tmp_157_rule(Parser *p) +_tmp_158_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28944,18 +29081,18 @@ _tmp_157_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -28963,21 +29100,21 @@ _tmp_157_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_184_var; + void *_tmp_185_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_184_var = _tmp_184_rule(p)) // ':' | '**' + (_tmp_185_var = _tmp_185_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_184_var); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_185_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -28986,9 +29123,9 @@ _tmp_157_rule(Parser *p) return _res; } -// _tmp_158: ',' | ')' | ':' +// _tmp_159: ',' | ')' | ':' static void * -_tmp_158_rule(Parser *p) +_tmp_159_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29002,18 +29139,18 @@ _tmp_158_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -29021,18 +29158,18 @@ _tmp_158_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -29040,18 +29177,18 @@ _tmp_158_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -29060,9 +29197,9 @@ _tmp_158_rule(Parser *p) return _res; } -// _loop0_160: ',' (expression ['as' star_target]) +// _loop0_161: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_160_rule(Parser *p) +_loop0_161_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29086,13 +29223,13 @@ _loop0_160_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_185_rule(p)) // expression ['as' star_target] + (elem = _tmp_186_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -29117,7 +29254,7 @@ _loop0_160_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29130,14 +29267,14 @@ _loop0_160_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_160_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_161_type, _seq); D(p->level--); return _seq; } -// _gather_159: (expression ['as' star_target]) _loop0_160 +// _gather_160: (expression ['as' star_target]) _loop0_161 static asdl_seq * -_gather_159_rule(Parser *p) +_gather_160_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29146,27 +29283,27 @@ _gather_159_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_160 + { // (expression ['as' star_target]) _loop0_161 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); + D(fprintf(stderr, "%*c> _gather_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_185_rule(p)) // expression ['as' star_target] + (elem = _tmp_186_rule(p)) // expression ['as' star_target] && - (seq = _loop0_160_rule(p)) // _loop0_160 + (seq = _loop0_161_rule(p)) // _loop0_161 ) { - D(fprintf(stderr, "%*c+ _gather_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); + D(fprintf(stderr, "%*c+ _gather_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_159[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_160")); + D(fprintf(stderr, "%*c%s _gather_160[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); } _res = NULL; done: @@ -29174,9 +29311,9 @@ _gather_159_rule(Parser *p) return _res; } -// _loop0_162: ',' (expressions ['as' star_target]) +// _loop0_163: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_162_rule(Parser *p) +_loop0_163_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29200,13 +29337,13 @@ _loop0_162_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_186_rule(p)) // expressions ['as' star_target] + (elem = _tmp_187_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -29231,7 +29368,7 @@ _loop0_162_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29244,14 +29381,14 @@ _loop0_162_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_162_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_163_type, _seq); D(p->level--); return _seq; } -// _gather_161: (expressions ['as' star_target]) _loop0_162 +// _gather_162: (expressions ['as' star_target]) _loop0_163 static asdl_seq * -_gather_161_rule(Parser *p) +_gather_162_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29260,27 +29397,27 @@ _gather_161_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_162 + { // (expressions ['as' star_target]) _loop0_163 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); + D(fprintf(stderr, "%*c> _gather_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_186_rule(p)) // expressions ['as' star_target] + (elem = _tmp_187_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_162_rule(p)) // _loop0_162 + (seq = _loop0_163_rule(p)) // _loop0_163 ) { - D(fprintf(stderr, "%*c+ _gather_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); + D(fprintf(stderr, "%*c+ _gather_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_161[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_162")); + D(fprintf(stderr, "%*c%s _gather_162[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); } _res = NULL; done: @@ -29288,9 +29425,9 @@ _gather_161_rule(Parser *p) return _res; } -// _tmp_163: 'as' NAME +// _tmp_164: 'as' NAME static void * -_tmp_163_rule(Parser *p) +_tmp_164_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29304,7 +29441,7 @@ _tmp_163_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -29313,12 +29450,12 @@ _tmp_163_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -29327,9 +29464,9 @@ _tmp_163_rule(Parser *p) return _res; } -// _tmp_164: 'as' NAME +// _tmp_165: 'as' NAME static void * -_tmp_164_rule(Parser *p) +_tmp_165_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29343,7 +29480,7 @@ _tmp_164_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -29352,12 +29489,12 @@ _tmp_164_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -29366,9 +29503,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _loop0_166: ',' double_starred_kvpair +// _loop0_167: ',' double_starred_kvpair static asdl_seq * -_loop0_166_rule(Parser *p) +_loop0_167_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29392,7 +29529,7 @@ _loop0_166_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -29423,7 +29560,7 @@ _loop0_166_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29436,14 +29573,14 @@ _loop0_166_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_166_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_167_type, _seq); D(p->level--); return _seq; } -// _gather_165: double_starred_kvpair _loop0_166 +// _gather_166: double_starred_kvpair _loop0_167 static asdl_seq * -_gather_165_rule(Parser *p) +_gather_166_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29452,27 +29589,27 @@ _gather_165_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_166 + { // double_starred_kvpair _loop0_167 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_166")); + D(fprintf(stderr, "%*c> _gather_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_167")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_166_rule(p)) // _loop0_166 + (seq = _loop0_167_rule(p)) // _loop0_167 ) { - D(fprintf(stderr, "%*c+ _gather_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_166")); + D(fprintf(stderr, "%*c+ _gather_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_167")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_165[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_166")); + D(fprintf(stderr, "%*c%s _gather_166[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_167")); } _res = NULL; done: @@ -29480,9 +29617,9 @@ _gather_165_rule(Parser *p) return _res; } -// _tmp_167: '}' | ',' +// _tmp_168: '}' | ',' static void * -_tmp_167_rule(Parser *p) +_tmp_168_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29496,18 +29633,18 @@ _tmp_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -29515,18 +29652,18 @@ _tmp_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -29535,9 +29672,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: star_targets '=' +// _tmp_169: star_targets '=' static void * -_tmp_168_rule(Parser *p) +_tmp_169_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29551,7 +29688,7 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -29560,7 +29697,7 @@ _tmp_168_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29570,7 +29707,7 @@ _tmp_168_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29579,9 +29716,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: '.' | '...' +// _tmp_170: '.' | '...' static void * -_tmp_169_rule(Parser *p) +_tmp_170_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29595,18 +29732,18 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29614,18 +29751,18 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29634,9 +29771,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: '.' | '...' +// _tmp_171: '.' | '...' static void * -_tmp_170_rule(Parser *p) +_tmp_171_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29650,18 +29787,18 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29669,18 +29806,18 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29689,9 +29826,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: '@' named_expression NEWLINE +// _tmp_172: '@' named_expression NEWLINE static void * -_tmp_171_rule(Parser *p) +_tmp_172_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29705,7 +29842,7 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -29717,7 +29854,7 @@ _tmp_171_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29727,7 +29864,7 @@ _tmp_171_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -29736,9 +29873,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: ',' star_expression +// _tmp_173: ',' star_expression static void * -_tmp_172_rule(Parser *p) +_tmp_173_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29752,7 +29889,7 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -29761,7 +29898,7 @@ _tmp_172_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29771,7 +29908,7 @@ _tmp_172_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -29780,9 +29917,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _tmp_173: ',' expression +// _tmp_174: ',' expression static void * -_tmp_173_rule(Parser *p) +_tmp_174_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29796,7 +29933,7 @@ _tmp_173_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -29805,7 +29942,7 @@ _tmp_173_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29815,7 +29952,7 @@ _tmp_173_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -29824,9 +29961,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _tmp_174: 'or' conjunction +// _tmp_175: 'or' conjunction static void * -_tmp_174_rule(Parser *p) +_tmp_175_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29840,7 +29977,7 @@ _tmp_174_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -29849,7 +29986,7 @@ _tmp_174_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29859,7 +29996,7 @@ _tmp_174_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -29868,9 +30005,9 @@ _tmp_174_rule(Parser *p) return _res; } -// _tmp_175: 'and' inversion +// _tmp_176: 'and' inversion static void * -_tmp_175_rule(Parser *p) +_tmp_176_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29884,7 +30021,7 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -29893,7 +30030,7 @@ _tmp_175_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29903,7 +30040,7 @@ _tmp_175_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -29912,9 +30049,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: 'if' disjunction +// _tmp_177: 'if' disjunction static void * -_tmp_176_rule(Parser *p) +_tmp_177_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29928,7 +30065,7 @@ _tmp_176_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -29937,7 +30074,7 @@ _tmp_176_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29947,7 +30084,7 @@ _tmp_176_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -29956,9 +30093,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: 'if' disjunction +// _tmp_178: 'if' disjunction static void * -_tmp_177_rule(Parser *p) +_tmp_178_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29972,7 +30109,7 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -29981,7 +30118,7 @@ _tmp_177_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29991,7 +30128,7 @@ _tmp_177_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -30000,9 +30137,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: starred_expression | direct_named_expression !'=' +// _tmp_179: starred_expression | direct_named_expression !'=' static void * -_tmp_178_rule(Parser *p) +_tmp_179_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30016,18 +30153,18 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // direct_named_expression !'=' @@ -30035,7 +30172,7 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); expr_ty direct_named_expression_var; if ( (direct_named_expression_var = direct_named_expression_rule(p)) // direct_named_expression @@ -30043,12 +30180,12 @@ _tmp_178_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); _res = direct_named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "direct_named_expression !'='")); } _res = NULL; @@ -30057,9 +30194,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: ',' star_target +// _tmp_180: ',' star_target static void * -_tmp_179_rule(Parser *p) +_tmp_180_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30073,7 +30210,7 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -30082,7 +30219,7 @@ _tmp_179_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30092,7 +30229,7 @@ _tmp_179_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -30101,9 +30238,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: ',' star_target +// _tmp_181: ',' star_target static void * -_tmp_180_rule(Parser *p) +_tmp_181_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30117,7 +30254,7 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -30126,7 +30263,7 @@ _tmp_180_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30136,7 +30273,7 @@ _tmp_180_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -30145,9 +30282,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _tmp_181: star_targets '=' +// _tmp_182: star_targets '=' static void * -_tmp_181_rule(Parser *p) +_tmp_182_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30161,7 +30298,7 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -30170,12 +30307,12 @@ _tmp_181_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -30184,9 +30321,9 @@ _tmp_181_rule(Parser *p) return _res; } -// _tmp_182: star_targets '=' +// _tmp_183: star_targets '=' static void * -_tmp_182_rule(Parser *p) +_tmp_183_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30200,7 +30337,7 @@ _tmp_182_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -30209,12 +30346,12 @@ _tmp_182_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -30223,9 +30360,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: ')' | '**' +// _tmp_184: ')' | '**' static void * -_tmp_183_rule(Parser *p) +_tmp_184_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30239,18 +30376,18 @@ _tmp_183_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -30258,18 +30395,18 @@ _tmp_183_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -30278,9 +30415,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _tmp_184: ':' | '**' +// _tmp_185: ':' | '**' static void * -_tmp_184_rule(Parser *p) +_tmp_185_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30294,18 +30431,18 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -30313,18 +30450,18 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -30333,9 +30470,9 @@ _tmp_184_rule(Parser *p) return _res; } -// _tmp_185: expression ['as' star_target] +// _tmp_186: expression ['as' star_target] static void * -_tmp_185_rule(Parser *p) +_tmp_186_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30349,22 +30486,22 @@ _tmp_185_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_187_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_188_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -30373,9 +30510,9 @@ _tmp_185_rule(Parser *p) return _res; } -// _tmp_186: expressions ['as' star_target] +// _tmp_187: expressions ['as' star_target] static void * -_tmp_186_rule(Parser *p) +_tmp_187_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30389,22 +30526,22 @@ _tmp_186_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_188_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_189_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -30413,9 +30550,9 @@ _tmp_186_rule(Parser *p) return _res; } -// _tmp_187: 'as' star_target +// _tmp_188: 'as' star_target static void * -_tmp_187_rule(Parser *p) +_tmp_188_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30429,7 +30566,7 @@ _tmp_187_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30438,12 +30575,12 @@ _tmp_187_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -30452,9 +30589,9 @@ _tmp_187_rule(Parser *p) return _res; } -// _tmp_188: 'as' star_target +// _tmp_189: 'as' star_target static void * -_tmp_188_rule(Parser *p) +_tmp_189_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30468,7 +30605,7 @@ _tmp_188_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30477,12 +30614,12 @@ _tmp_188_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_189[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -30497,6 +30634,7 @@ _PyPegen_parse(Parser *p) // Initialize keywords p->keywords = reserved_keywords; p->n_keyword_lists = n_keyword_lists; + p->soft_keywords = soft_keywords; // Run parser void *result = NULL; diff --git a/Parser/pegen.c b/Parser/pegen.c index 7258cafca58ca..eb70ea7d24fec 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -943,6 +943,23 @@ _PyPegen_string_token(Parser *p) return _PyPegen_expect_token(p, STRING); } + +expr_ty _PyPegen_soft_keyword_token(Parser *p) { + Token *t = _PyPegen_expect_token(p, NAME); + if (t == NULL) { + return NULL; + } + char *the_token; + Py_ssize_t size; + PyBytes_AsStringAndSize(t->bytes, &the_token, &size); + for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) { + if (strncmp(*keyword, the_token, size) == 0) { + return _PyPegen_name_token(p); + } + } + return NULL; +} + static PyObject * parsenumber_raw(const char *s) { @@ -1151,6 +1168,7 @@ _PyPegen_Parser_New(struct tok_state *tok, int start_rule, int flags, p->tok = tok; p->keywords = NULL; p->n_keyword_lists = -1; + p->soft_keywords = NULL; p->tokens = PyMem_Malloc(sizeof(Token *)); if (!p->tokens) { PyMem_Free(p); diff --git a/Parser/pegen.h b/Parser/pegen.h index f3e0876afba60..9b218d4c59c4f 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -59,6 +59,7 @@ typedef struct { int fill, size; PyArena *arena; KeywordToken **keywords; + char **soft_keywords; int n_keyword_lists; int start_rule; int *errcode; @@ -125,6 +126,7 @@ int _PyPegen_lookahead(int, void *(func)(Parser *), Parser *); Token *_PyPegen_expect_token(Parser *p, int type); Token *_PyPegen_expect_forced_token(Parser *p, int type, const char* expected); expr_ty _PyPegen_expect_soft_keyword(Parser *p, const char *keyword); +expr_ty _PyPegen_soft_keyword_token(Parser *p); Token *_PyPegen_get_last_nonnwhitespace_token(Parser *); int _PyPegen_fill_token(Parser *p); expr_ty _PyPegen_name_token(Parser *p); diff --git a/Parser/token.c b/Parser/token.c index a489668900901..74bca0eff657b 100644 --- a/Parser/token.c +++ b/Parser/token.c @@ -65,6 +65,7 @@ const char * const _PyParser_TokenNames[] = { "ASYNC", "TYPE_IGNORE", "TYPE_COMMENT", + "SOFT_KEYWORD", "", "", "", diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py index 24418ea70e448..d762240c9ba67 100644 --- a/Tools/peg_generator/pegen/c_generator.py +++ b/Tools/peg_generator/pegen/c_generator.py @@ -46,6 +46,7 @@ // Initialize keywords p->keywords = reserved_keywords; p->n_keyword_lists = n_keyword_lists; + p->soft_keywords = soft_keywords; return start_rule(p); } @@ -66,6 +67,7 @@ class NodeTypes(Enum): "NAME": NodeTypes.NAME_TOKEN, "NUMBER": NodeTypes.NUMBER_TOKEN, "STRING": NodeTypes.STRING_TOKEN, + "SOFT_KEYWORD": NodeTypes.SOFT_KEYWORD, } @@ -411,6 +413,7 @@ def generate(self, filename: str) -> None: if subheader: self.print(subheader) self._setup_keywords() + self._setup_soft_keywords() for i, (rulename, rule) in enumerate(self.todo.items(), 1000): comment = " // Left-recursive" if rule.left_recursive else "" self.print(f"#define {rulename}_type {i}{comment}") @@ -474,6 +477,15 @@ def _setup_keywords(self) -> None: self.print("},") self.print("};") + def _setup_soft_keywords(self) -> None: + soft_keywords = sorted(self.callmakervisitor.soft_keywords) + self.print("static char *soft_keywords[] = {") + with self.indent(): + for keyword in soft_keywords: + self.print(f'"{keyword}",') + self.print("NULL,") + self.print("};") + def _set_up_token_start_metadata_extraction(self) -> None: self.print("if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {") with self.indent(): From webhook-mailer at python.org Thu Apr 15 19:45:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Thu, 15 Apr 2021 23:45:52 -0000 Subject: [Python-checkins] bpo-43823: Fix location of one of the errors for invalid dictionary literals (GH-25427) Message-ID: https://github.com/python/cpython/commit/b5b98bd8f8c72a9068cf149dbc162c8c95d30057 commit: b5b98bd8f8c72a9068cf149dbc162c8c95d30057 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-16T00:45:42+01:00 summary: bpo-43823: Fix location of one of the errors for invalid dictionary literals (GH-25427) files: M Grammar/python.gram M Parser/parser.c diff --git a/Grammar/python.gram b/Grammar/python.gram index e5baac3663675..d91e887e04dc0 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -899,6 +899,7 @@ invalid_double_starred_kvpairs: | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } | expression a=':' &('}'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } invalid_kvpair: - | a=expression !(':') { RAISE_SYNTAX_ERROR("':' expected after dictionary key") } + | a=expression !(':') { + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, "':' expected after dictionary key") } | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } | expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } diff --git a/Parser/parser.c b/Parser/parser.c index 2f7a71a5418e6..e47093e1dca7d 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -19379,7 +19379,7 @@ invalid_kvpair_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')")); - _res = RAISE_SYNTAX_ERROR ( "':' expected after dictionary key" ); + _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , "':' expected after dictionary key" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); From webhook-mailer at python.org Thu Apr 15 20:28:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 16 Apr 2021 00:28:52 -0000 Subject: [Python-checkins] Improve the section with SyntaxError message improvements to the What's New of 3.10 (GH-25428) Message-ID: https://github.com/python/cpython/commit/ff3d9c0f1a960c3d677d7eb0200d59f3aa2a8b1b commit: ff3d9c0f1a960c3d677d7eb0200d59f3aa2a8b1b branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-16T01:28:48+01:00 summary: Improve the section with SyntaxError message improvements to the What's New of 3.10 (GH-25428) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 0962f04b3a7d9..6623adfbf4f3d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -145,7 +145,7 @@ For instance, consider the following code (notice the unclosed '{'): previous versions of the interpreter reported confusing places as the location of the syntax error: -.. code-block:: text +.. code-block:: python File "example.py", line 3 some_other_code = foo() @@ -154,7 +154,7 @@ the syntax error: but in Python3.10 a more informative error is emitted: -.. code-block:: text +.. code-block:: python File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, @@ -170,6 +170,95 @@ These improvements are inspired by previous work in the PyPy interpreter. (Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in :issue:`40176`.) +A considerable ammount of new specialized messages for :exc:`SyntaxError` exceptions +have been incorporated. Some of the most notable ones: + +* Missing ``:`` before blocks: + +.. code-block:: python + + >>> if rocket.position > event_horizon + File "", line 1 + if rocket.position > event_horizon + ^ + SyntaxError: expected ':' + + +* Unparenthesised tuples in comprehensions targets: + +.. code-block:: python + + >>> {x,y for x,y in range(100)} + File "", line 1 + {x,y for x,y in range(100)} + ^ + SyntaxError: did you forget parentheses around the comprehension target? + +* Missing commas in collection literals: + +.. code-block:: python + + >>> items = { + ... x: 1, + ... y: 2 + ... z: 3, + File "", line 3 + y: 2 + ^ + SyntaxError: invalid syntax. Perhaps you forgot a comma? + +* Exception groups without parentheses: + +.. code-block:: python + + >>> try: + ... build_dyson_sphere() + ... except NotEnoughScienceError, NotEnoughResourcesError: + File "", line 3 + except NotEnoughScienceError, NotEnoughResourcesError: + ^ + SyntaxError: exception group must be parenthesized + +* Missing ``:`` and values in dictionary literals: + +.. code-block:: python + + >>> values = { + ... x: 1, + ... y: 2, + ... z: + ... } + File "", line 4 + z: + ^ + SyntaxError: expression expected after dictionary key and ':' + + >>> values = {x:1, y:2, z w:3} + File "", line 1 + values = {x:1, y:2, z w:3} + ^ + SyntaxError: ':' expected after dictionary key + +* Usage of ``=`` instead of ``==`` in comparisons: + +.. code-block:: python + + >>> if rocket.position = event_horizon: + File "", line 1 + if rocket.position = event_horizon: + ^ + SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? + +* Usage of ``*`` in f-strings: + +.. code-block:: python + + >>> f"Black holes {*all_black_holes} and revelations" + File "", line 1 + (*all_black_holes) + ^ + SyntaxError: f-string: cannot use starred expression here + AttributeErrors ~~~~~~~~~~~~~~~ From webhook-mailer at python.org Fri Apr 16 01:01:34 2021 From: webhook-mailer at python.org (methane) Date: Fri, 16 Apr 2021 05:01:34 -0000 Subject: [Python-checkins] bpo-41323: compiler: Reuse tuple in constant tuple folding (GH-25419) Message-ID: https://github.com/python/cpython/commit/8a232c7b17a2e41ae14d8bb7937ddfea69301dce commit: 8a232c7b17a2e41ae14d8bb7937ddfea69301dce branch: master author: Inada Naoki committer: methane date: 2021-04-16T14:01:04+09:00 summary: bpo-41323: compiler: Reuse tuple in constant tuple folding (GH-25419) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst M Python/compile.c M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst new file mode 100644 index 0000000000000..b14299e77ebd5 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst @@ -0,0 +1,2 @@ +Constant tuple folding in bytecode optimizer now reuses tuple in constant +table. diff --git a/Python/compile.c b/Python/compile.c index 11d910b5b7d58..496b4b0371f1d 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6751,7 +6751,7 @@ static int normalize_basic_block(basicblock *bb); static int -optimize_cfg(struct assembler *a, PyObject *consts); +optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts); static int ensure_exits_have_lineno(struct compiler *c); @@ -6850,7 +6850,7 @@ assemble(struct compiler *c, int addNone) if (consts == NULL) { goto error; } - if (optimize_cfg(&a, consts)) { + if (optimize_cfg(c, &a, consts)) { goto error; } @@ -6898,7 +6898,8 @@ assemble(struct compiler *c, int addNone) Called with codestr pointing to the first LOAD_CONST. */ static int -fold_tuple_on_constants(struct instr *inst, +fold_tuple_on_constants(struct compiler *c, + struct instr *inst, int n, PyObject *consts) { /* Pre-conditions */ @@ -6923,15 +6924,27 @@ fold_tuple_on_constants(struct instr *inst, Py_INCREF(constant); PyTuple_SET_ITEM(newconst, i, constant); } - Py_ssize_t index = PyList_GET_SIZE(consts); - if ((size_t)index >= (size_t)INT_MAX - 1) { + if (merge_const_one(c, &newconst) == 0) { Py_DECREF(newconst); - PyErr_SetString(PyExc_OverflowError, "too many constants"); return -1; } - if (PyList_Append(consts, newconst)) { - Py_DECREF(newconst); - return -1; + + Py_ssize_t index; + for (index = 0; index < PyList_GET_SIZE(consts); index++) { + if (PyList_GET_ITEM(consts, index) == newconst) { + break; + } + } + if (index == PyList_GET_SIZE(consts)) { + if ((size_t)index >= (size_t)INT_MAX - 1) { + Py_DECREF(newconst); + PyErr_SetString(PyExc_OverflowError, "too many constants"); + return -1; + } + if (PyList_Append(consts, newconst)) { + Py_DECREF(newconst); + return -1; + } } Py_DECREF(newconst); for (int i = 0; i < n; i++) { @@ -6968,7 +6981,7 @@ eliminate_jump_to_jump(basicblock *bb, int opcode) { /* Optimization */ static int -optimize_basic_block(basicblock *bb, PyObject *consts) +optimize_basic_block(struct compiler *c, basicblock *bb, PyObject *consts) { assert(PyList_CheckExact(consts)); struct instr nop; @@ -7056,7 +7069,7 @@ optimize_basic_block(basicblock *bb, PyObject *consts) break; } if (i >= oparg) { - if (fold_tuple_on_constants(inst-oparg, oparg, consts)) { + if (fold_tuple_on_constants(c, inst-oparg, oparg, consts)) { goto error; } } @@ -7390,10 +7403,10 @@ propogate_line_numbers(struct assembler *a) { */ static int -optimize_cfg(struct assembler *a, PyObject *consts) +optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts) { for (basicblock *b = a->a_entry; b != NULL; b = b->b_next) { - if (optimize_basic_block(b, consts)) { + if (optimize_basic_block(c, b, consts)) { return -1; } clean_basic_block(b, -1); diff --git a/Python/importlib.h b/Python/importlib.h index b561038673b68..ea00ff36d7391 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1212,676 +1212,676 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, 114,128,0,0,0,27,3,0,0,114,188,0,0,0,122,26, 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,1, - 78,41,18,114,9,0,0,0,114,8,0,0,0,114,1,0, - 0,0,114,10,0,0,0,114,151,0,0,0,218,12,115,116, - 97,116,105,99,109,101,116,104,111,100,114,114,0,0,0,218, - 11,99,108,97,115,115,109,101,116,104,111,100,114,183,0,0, - 0,114,184,0,0,0,114,162,0,0,0,114,163,0,0,0, - 114,95,0,0,0,114,187,0,0,0,114,189,0,0,0,114, - 128,0,0,0,114,111,0,0,0,114,170,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,175,0,0,0,212,2,0,0,115,48,0,0,0, - 8,0,4,2,4,7,2,2,10,1,2,10,12,1,2,8, - 12,1,2,14,10,1,2,7,10,1,2,4,2,1,12,1, - 2,4,2,1,12,1,2,4,2,1,12,1,12,4,255,128, - 114,175,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,144, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,90,4,101,5,100,3,100,4,132,0,131,1,90,6,101, - 7,100,22,100,6,100,7,132,1,131,1,90,8,101,7,100, - 23,100,8,100,9,132,1,131,1,90,9,101,5,100,10,100, - 11,132,0,131,1,90,10,101,5,100,12,100,13,132,0,131, - 1,90,11,101,7,100,14,100,15,132,0,131,1,90,12,101, - 7,101,13,100,16,100,17,132,0,131,1,131,1,90,14,101, - 7,101,13,100,18,100,19,132,0,131,1,131,1,90,15,101, - 7,101,13,100,20,100,21,132,0,131,1,131,1,90,16,100, - 5,83,0,41,24,218,14,70,114,111,122,101,110,73,109,112, - 111,114,116,101,114,122,142,77,101,116,97,32,112,97,116,104, - 32,105,109,112,111,114,116,32,102,111,114,32,102,114,111,122, - 101,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, - 32,65,108,108,32,109,101,116,104,111,100,115,32,97,114,101, - 32,101,105,116,104,101,114,32,99,108,97,115,115,32,111,114, - 32,115,116,97,116,105,99,32,109,101,116,104,111,100,115,32, - 116,111,32,97,118,111,105,100,32,116,104,101,32,110,101,101, - 100,32,116,111,10,32,32,32,32,105,110,115,116,97,110,116, - 105,97,116,101,32,116,104,101,32,99,108,97,115,115,46,10, - 10,32,32,32,32,90,6,102,114,111,122,101,110,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0, - 0,0,67,0,0,0,115,28,0,0,0,116,0,160,1,100, - 1,116,2,161,2,1,0,100,2,160,3,124,0,106,4,116, - 5,106,6,161,2,83,0,41,4,114,176,0,0,0,122,80, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,109, - 111,100,117,108,101,95,114,101,112,114,40,41,32,105,115,32, + 105,115,95,112,97,99,107,97,103,101,169,2,78,78,114,0, + 0,0,0,41,18,114,9,0,0,0,114,8,0,0,0,114, + 1,0,0,0,114,10,0,0,0,114,151,0,0,0,218,12, + 115,116,97,116,105,99,109,101,116,104,111,100,114,114,0,0, + 0,218,11,99,108,97,115,115,109,101,116,104,111,100,114,183, + 0,0,0,114,184,0,0,0,114,162,0,0,0,114,163,0, + 0,0,114,95,0,0,0,114,187,0,0,0,114,189,0,0, + 0,114,128,0,0,0,114,111,0,0,0,114,170,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,175,0,0,0,212,2,0,0,115,48,0, + 0,0,8,0,4,2,4,7,2,2,10,1,2,10,12,1, + 2,8,12,1,2,14,10,1,2,7,10,1,2,4,2,1, + 12,1,2,4,2,1,12,1,2,4,2,1,12,1,12,4, + 255,128,114,175,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, + 115,144,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,90,4,101,5,100,3,100,4,132,0,131,1,90, + 6,101,7,100,22,100,6,100,7,132,1,131,1,90,8,101, + 7,100,23,100,8,100,9,132,1,131,1,90,9,101,5,100, + 10,100,11,132,0,131,1,90,10,101,5,100,12,100,13,132, + 0,131,1,90,11,101,7,100,14,100,15,132,0,131,1,90, + 12,101,7,101,13,100,16,100,17,132,0,131,1,131,1,90, + 14,101,7,101,13,100,18,100,19,132,0,131,1,131,1,90, + 15,101,7,101,13,100,20,100,21,132,0,131,1,131,1,90, + 16,100,5,83,0,41,24,218,14,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,122,142,77,101,116,97,32,112,97, + 116,104,32,105,109,112,111,114,116,32,102,111,114,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,115,46,10,10,32, + 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, + 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, + 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, + 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, + 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, + 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, + 46,10,10,32,32,32,32,90,6,102,114,111,122,101,110,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,160, + 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106, + 4,116,5,106,6,161,2,83,0,41,4,114,176,0,0,0, + 122,80,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,109,111,100,117,108,101,95,114,101,112,114,40,41,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, + 49,50,114,166,0,0,0,78,41,7,114,101,0,0,0,114, + 102,0,0,0,114,103,0,0,0,114,50,0,0,0,114,9, + 0,0,0,114,193,0,0,0,114,151,0,0,0,41,1,218, + 1,109,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,114,0,0,0,47,3,0,0,115,10,0,0,0,6, + 7,2,1,4,255,16,2,255,128,122,26,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, + 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, + 30,0,0,0,116,0,160,1,124,1,161,1,114,13,116,2, + 124,1,124,0,124,0,106,3,100,1,141,3,83,0,100,0, + 83,0,114,178,0,0,0,41,4,114,64,0,0,0,114,98, + 0,0,0,114,104,0,0,0,114,151,0,0,0,114,179,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,183,0,0,0,58,3,0,0,115,8,0,0,0,10, + 2,16,1,4,2,255,128,122,24,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, + 99,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,116, + 0,160,1,100,1,116,2,161,2,1,0,116,3,160,4,124, + 1,161,1,114,13,124,0,83,0,100,2,83,0,41,3,122, + 93,70,105,110,100,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,105, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,102, + 105,110,100,95,109,111,100,117,108,101,40,41,32,105,115,32, 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, - 114,166,0,0,0,78,41,7,114,101,0,0,0,114,102,0, - 0,0,114,103,0,0,0,114,50,0,0,0,114,9,0,0, - 0,114,192,0,0,0,114,151,0,0,0,41,1,218,1,109, + 59,32,117,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,78,41,5,114,101,0,0, + 0,114,102,0,0,0,114,103,0,0,0,114,64,0,0,0, + 114,98,0,0,0,41,3,114,180,0,0,0,114,89,0,0, + 0,114,181,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,184,0,0,0,65,3,0,0,115,10, + 0,0,0,6,7,2,2,4,254,18,3,255,128,122,26,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, + 110,100,95,109,111,100,117,108,101,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, + 0,0,114,185,0,0,0,41,2,122,42,85,115,101,32,100, + 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, + 116,105,111,110,46,78,114,5,0,0,0,114,174,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 114,0,0,0,47,3,0,0,115,10,0,0,0,6,7,2, - 1,4,255,16,2,255,128,122,26,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,114, - 101,112,114,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,5,0,0,0,67,0,0,0,115,30,0, - 0,0,116,0,160,1,124,1,161,1,114,13,116,2,124,1, - 124,0,124,0,106,3,100,1,141,3,83,0,100,0,83,0, - 114,178,0,0,0,41,4,114,64,0,0,0,114,98,0,0, - 0,114,104,0,0,0,114,151,0,0,0,114,179,0,0,0, + 162,0,0,0,77,3,0,0,115,4,0,0,0,4,0,255, + 128,122,28,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,64,0,0,0,124,0,106, + 0,106,1,125,1,116,2,160,3,124,1,161,1,115,18,116, + 4,100,1,160,5,124,1,161,1,124,1,100,2,141,2,130, + 1,116,6,116,2,106,7,124,1,131,2,125,2,116,8,124, + 2,124,0,106,9,131,2,1,0,100,0,83,0,114,97,0, + 0,0,41,10,114,113,0,0,0,114,20,0,0,0,114,64, + 0,0,0,114,98,0,0,0,114,87,0,0,0,114,50,0, + 0,0,114,74,0,0,0,218,17,103,101,116,95,102,114,111, + 122,101,110,95,111,98,106,101,99,116,218,4,101,120,101,99, + 114,14,0,0,0,41,3,114,110,0,0,0,114,20,0,0, + 0,218,4,99,111,100,101,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,163,0,0,0,81,3,0,0,115, + 16,0,0,0,8,2,10,1,10,1,2,1,6,255,12,2, + 16,1,255,128,122,26,70,114,111,122,101,110,73,109,112,111, + 114,116,101,114,46,101,120,101,99,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,0, + 124,0,124,1,131,2,83,0,41,2,122,95,76,111,97,100, + 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, + 46,10,10,32,32,32,32,32,32,32,32,78,41,1,114,111, + 0,0,0,114,186,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,170,0,0,0,90,3,0,0, + 115,4,0,0,0,10,8,255,128,122,26,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,108,111,97,100,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,243,10, + 0,0,0,116,0,160,1,124,1,161,1,83,0,41,2,122, + 45,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, + 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,46,78,41, + 2,114,64,0,0,0,114,195,0,0,0,114,186,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 183,0,0,0,58,3,0,0,115,8,0,0,0,10,2,16, - 1,4,2,255,128,122,24,70,114,111,122,101,110,73,109,112, - 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,99, - 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 4,0,0,0,67,0,0,0,115,30,0,0,0,116,0,160, - 1,100,1,116,2,161,2,1,0,116,3,160,4,124,1,161, - 1,114,13,124,0,83,0,100,2,83,0,41,3,122,93,70, - 105,110,100,32,97,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, - 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,122,105,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,40,41,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, - 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, - 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, - 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,78,41,5,114,101,0,0,0,114, - 102,0,0,0,114,103,0,0,0,114,64,0,0,0,114,98, - 0,0,0,41,3,114,180,0,0,0,114,89,0,0,0,114, - 181,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,184,0,0,0,65,3,0,0,115,10,0,0, - 0,6,7,2,2,4,254,18,3,255,128,122,26,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100, - 95,109,111,100,117,108,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,1,0,0,0,67,0,0,0, - 114,185,0,0,0,41,2,122,42,85,115,101,32,100,101,102, - 97,117,108,116,32,115,101,109,97,110,116,105,99,115,32,102, - 111,114,32,109,111,100,117,108,101,32,99,114,101,97,116,105, - 111,110,46,78,114,5,0,0,0,114,174,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,162,0, - 0,0,77,3,0,0,115,4,0,0,0,4,0,255,128,122, - 28,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,64,0,0,0,124,0,106,0,106, - 1,125,1,116,2,160,3,124,1,161,1,115,18,116,4,100, - 1,160,5,124,1,161,1,124,1,100,2,141,2,130,1,116, - 6,116,2,106,7,124,1,131,2,125,2,116,8,124,2,124, - 0,106,9,131,2,1,0,100,0,83,0,114,97,0,0,0, - 41,10,114,113,0,0,0,114,20,0,0,0,114,64,0,0, - 0,114,98,0,0,0,114,87,0,0,0,114,50,0,0,0, - 114,74,0,0,0,218,17,103,101,116,95,102,114,111,122,101, - 110,95,111,98,106,101,99,116,218,4,101,120,101,99,114,14, - 0,0,0,41,3,114,110,0,0,0,114,20,0,0,0,218, - 4,99,111,100,101,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,163,0,0,0,81,3,0,0,115,16,0, - 0,0,8,2,10,1,10,1,2,1,6,255,12,2,16,1, - 255,128,122,26,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,0, - 124,1,131,2,83,0,41,2,122,95,76,111,97,100,32,97, - 32,102,114,111,122,101,110,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, - 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, - 10,32,32,32,32,32,32,32,32,78,41,1,114,111,0,0, - 0,114,186,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,170,0,0,0,90,3,0,0,115,4, - 0,0,0,10,8,255,128,122,26,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,108,111,97,100,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,243,10,0,0, - 0,116,0,160,1,124,1,161,1,83,0,41,2,122,45,82, - 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, - 98,106,101,99,116,32,102,111,114,32,116,104,101,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,46,78,41,2,114, - 64,0,0,0,114,194,0,0,0,114,186,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,187,0, - 0,0,100,3,0,0,243,4,0,0,0,10,4,255,128,122, - 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,114,185,0,0,0,41,2,122,54,82,101,116,117,114,110, - 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, - 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, - 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,114,5,0,0,0,114,186,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,189,0,0,0,106, - 3,0,0,114,188,0,0,0,122,25,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,117, - 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,114,197,0,0, - 0,41,2,122,46,82,101,116,117,114,110,32,84,114,117,101, - 32,105,102,32,116,104,101,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, - 103,101,46,78,41,2,114,64,0,0,0,90,17,105,115,95, - 102,114,111,122,101,110,95,112,97,99,107,97,103,101,114,186, + 187,0,0,0,100,3,0,0,243,4,0,0,0,10,4,255, + 128,122,23,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,114,185,0,0,0,41,2,122,54,82,101,116,117, + 114,110,32,78,111,110,101,32,97,115,32,102,114,111,122,101, + 110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,116, + 32,104,97,118,101,32,115,111,117,114,99,101,32,99,111,100, + 101,46,78,114,5,0,0,0,114,186,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,189,0,0, + 0,106,3,0,0,114,188,0,0,0,122,25,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,115, + 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,114,198, + 0,0,0,41,2,122,46,82,101,116,117,114,110,32,84,114, + 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, + 107,97,103,101,46,78,41,2,114,64,0,0,0,90,17,105, + 115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,101, + 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,128,0,0,0,112,3,0,0,114,199,0, + 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,105,115,95,112,97,99,107,97,103,101,114,190,0, + 0,0,114,0,0,0,0,41,17,114,9,0,0,0,114,8, + 0,0,0,114,1,0,0,0,114,10,0,0,0,114,151,0, + 0,0,114,191,0,0,0,114,114,0,0,0,114,192,0,0, + 0,114,183,0,0,0,114,184,0,0,0,114,162,0,0,0, + 114,163,0,0,0,114,170,0,0,0,114,100,0,0,0,114, + 187,0,0,0,114,189,0,0,0,114,128,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,128,0,0,0,112,3,0,0,114,198,0,0,0, - 122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 46,105,115,95,112,97,99,107,97,103,101,41,2,78,78,41, - 1,78,41,17,114,9,0,0,0,114,8,0,0,0,114,1, - 0,0,0,114,10,0,0,0,114,151,0,0,0,114,190,0, - 0,0,114,114,0,0,0,114,191,0,0,0,114,183,0,0, - 0,114,184,0,0,0,114,162,0,0,0,114,163,0,0,0, - 114,170,0,0,0,114,100,0,0,0,114,187,0,0,0,114, - 189,0,0,0,114,128,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,192,0, - 0,0,36,3,0,0,115,50,0,0,0,8,0,4,2,4, - 7,2,2,10,1,2,10,12,1,2,6,12,1,2,11,10, - 1,2,3,10,1,2,8,10,1,2,9,2,1,12,1,2, - 4,2,1,12,1,2,4,2,1,16,1,255,128,114,192,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,32,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,83,0, - 41,7,218,18,95,73,109,112,111,114,116,76,111,99,107,67, - 111,110,116,101,120,116,122,36,67,111,110,116,101,120,116,32, - 109,97,110,97,103,101,114,32,102,111,114,32,116,104,101,32, - 105,109,112,111,114,116,32,108,111,99,107,46,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0, - 0,67,0,0,0,243,12,0,0,0,116,0,160,1,161,0, - 1,0,100,1,83,0,41,2,122,24,65,99,113,117,105,114, + 0,0,114,193,0,0,0,36,3,0,0,115,50,0,0,0, + 8,0,4,2,4,7,2,2,10,1,2,10,12,1,2,6, + 12,1,2,11,10,1,2,3,10,1,2,8,10,1,2,9, + 2,1,12,1,2,4,2,1,12,1,2,4,2,1,16,1, + 255,128,114,193,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, + 115,32,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, + 5,100,6,83,0,41,7,218,18,95,73,109,112,111,114,116, + 76,111,99,107,67,111,110,116,101,120,116,122,36,67,111,110, + 116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 46,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,243,12,0,0,0,116, + 0,160,1,161,0,1,0,100,1,83,0,41,2,122,24,65, + 99,113,117,105,114,101,32,116,104,101,32,105,109,112,111,114, + 116,32,108,111,99,107,46,78,41,2,114,64,0,0,0,114, + 65,0,0,0,114,52,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,61,0,0,0,125,3,0, + 0,243,4,0,0,0,12,2,255,128,122,28,95,73,109,112, + 111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95, + 95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,2,0,0,0,67,0,0, + 0,114,201,0,0,0,41,2,122,60,82,101,108,101,97,115, 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, - 107,46,78,41,2,114,64,0,0,0,114,65,0,0,0,114, - 52,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,61,0,0,0,125,3,0,0,243,4,0,0, - 0,12,2,255,128,122,28,95,73,109,112,111,114,116,76,111, - 99,107,67,111,110,116,101,120,116,46,95,95,101,110,116,101, - 114,95,95,99,4,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,2,0,0,0,67,0,0,0,114,200,0,0, - 0,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, - 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, - 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, - 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, - 46,78,41,2,114,64,0,0,0,114,67,0,0,0,41,4, - 114,33,0,0,0,218,8,101,120,99,95,116,121,112,101,218, - 9,101,120,99,95,118,97,108,117,101,218,13,101,120,99,95, - 116,114,97,99,101,98,97,99,107,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,63,0,0,0,129,3,0, - 0,114,201,0,0,0,122,27,95,73,109,112,111,114,116,76, - 111,99,107,67,111,110,116,101,120,116,46,95,95,101,120,105, - 116,95,95,78,41,6,114,9,0,0,0,114,8,0,0,0, - 114,1,0,0,0,114,10,0,0,0,114,61,0,0,0,114, - 63,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,199,0,0,0,121,3,0, - 0,115,10,0,0,0,8,0,4,2,8,2,12,4,255,128, - 114,199,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,64, - 0,0,0,124,1,160,0,100,1,124,2,100,2,24,0,161, - 2,125,3,116,1,124,3,131,1,124,2,107,0,114,18,116, - 2,100,3,131,1,130,1,124,3,100,4,25,0,125,4,124, - 0,114,30,100,5,160,3,124,4,124,0,161,2,83,0,124, - 4,83,0,41,7,122,50,82,101,115,111,108,118,101,32,97, - 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, - 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, - 108,117,116,101,32,111,110,101,46,114,141,0,0,0,114,42, - 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114, - 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98, - 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32, - 112,97,99,107,97,103,101,114,25,0,0,0,250,5,123,125, - 46,123,125,78,41,4,218,6,114,115,112,108,105,116,218,3, - 108,101,110,114,87,0,0,0,114,50,0,0,0,41,5,114, - 20,0,0,0,218,7,112,97,99,107,97,103,101,218,5,108, - 101,118,101,108,90,4,98,105,116,115,90,4,98,97,115,101, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 13,95,114,101,115,111,108,118,101,95,110,97,109,101,134,3, - 0,0,115,12,0,0,0,16,2,12,1,8,1,8,1,20, - 1,255,128,114,210,0,0,0,99,3,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, - 0,115,60,0,0,0,116,0,124,0,131,1,155,0,100,1, - 157,2,125,3,116,1,160,2,124,3,116,3,161,2,1,0, - 124,0,160,4,124,1,124,2,161,2,125,4,124,4,100,0, - 117,0,114,25,100,0,83,0,116,5,124,1,124,4,131,2, - 83,0,41,2,78,122,53,46,102,105,110,100,95,115,112,101, - 99,40,41,32,110,111,116,32,102,111,117,110,100,59,32,102, - 97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,102, - 105,110,100,95,109,111,100,117,108,101,40,41,41,6,114,7, + 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, + 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, + 116,105,111,110,115,46,78,41,2,114,64,0,0,0,114,67, + 0,0,0,41,4,114,33,0,0,0,218,8,101,120,99,95, + 116,121,112,101,218,9,101,120,99,95,118,97,108,117,101,218, + 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,63,0, + 0,0,129,3,0,0,114,202,0,0,0,122,27,95,73,109, + 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, + 95,95,101,120,105,116,95,95,78,41,6,114,9,0,0,0, + 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, + 61,0,0,0,114,63,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,200,0, + 0,0,121,3,0,0,115,10,0,0,0,8,0,4,2,8, + 2,12,4,255,128,114,200,0,0,0,99,3,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,64,0,0,0,124,1,160,0,100,1,124,2, + 100,2,24,0,161,2,125,3,116,1,124,3,131,1,124,2, + 107,0,114,18,116,2,100,3,131,1,130,1,124,3,100,4, + 25,0,125,4,124,0,114,30,100,5,160,3,124,4,124,0, + 161,2,83,0,124,4,83,0,41,7,122,50,82,101,115,111, + 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, + 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, + 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,141, + 0,0,0,114,42,0,0,0,122,50,97,116,116,101,109,112, + 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, + 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, + 101,118,101,108,32,112,97,99,107,97,103,101,114,25,0,0, + 0,250,5,123,125,46,123,125,78,41,4,218,6,114,115,112, + 108,105,116,218,3,108,101,110,114,87,0,0,0,114,50,0, + 0,0,41,5,114,20,0,0,0,218,7,112,97,99,107,97, + 103,101,218,5,108,101,118,101,108,90,4,98,105,116,115,90, + 4,98,97,115,101,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,13,95,114,101,115,111,108,118,101,95,110, + 97,109,101,134,3,0,0,115,12,0,0,0,16,2,12,1, + 8,1,8,1,20,1,255,128,114,211,0,0,0,99,3,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, + 0,0,67,0,0,0,115,60,0,0,0,116,0,124,0,131, + 1,155,0,100,1,157,2,125,3,116,1,160,2,124,3,116, + 3,161,2,1,0,124,0,160,4,124,1,124,2,161,2,125, + 4,124,4,100,0,117,0,114,25,100,0,83,0,116,5,124, + 1,124,4,131,2,83,0,41,2,78,122,53,46,102,105,110, + 100,95,115,112,101,99,40,41,32,110,111,116,32,102,111,117, + 110,100,59,32,102,97,108,108,105,110,103,32,98,97,99,107, + 32,116,111,32,102,105,110,100,95,109,111,100,117,108,101,40, + 41,41,6,114,7,0,0,0,114,101,0,0,0,114,102,0, + 0,0,114,169,0,0,0,114,184,0,0,0,114,104,0,0, + 0,41,5,218,6,102,105,110,100,101,114,114,20,0,0,0, + 114,181,0,0,0,114,108,0,0,0,114,122,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, + 95,102,105,110,100,95,115,112,101,99,95,108,101,103,97,99, + 121,143,3,0,0,115,14,0,0,0,14,1,12,2,12,1, + 8,1,4,1,10,1,255,128,114,213,0,0,0,99,3,0, + 0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0, + 0,0,67,0,0,0,115,24,1,0,0,116,0,106,1,125, + 3,124,3,100,1,117,0,114,11,116,2,100,2,131,1,130, + 1,124,3,115,19,116,3,160,4,100,3,116,5,161,2,1, + 0,124,0,116,0,106,6,118,0,125,4,124,3,68,0,93, + 109,125,5,116,7,131,0,143,46,1,0,122,5,124,5,106, + 8,125,6,87,0,110,26,4,0,116,9,121,139,1,0,1, + 0,1,0,116,10,124,5,124,0,124,1,131,3,125,7,124, + 7,100,1,117,0,114,62,89,0,87,0,100,1,4,0,4, + 0,131,3,1,0,113,26,89,0,110,6,124,6,124,0,124, + 1,124,2,131,3,125,7,87,0,100,1,4,0,4,0,131, + 3,1,0,110,8,49,0,115,80,119,1,1,0,1,0,1, + 0,89,0,1,0,124,7,100,1,117,1,114,135,124,4,115, + 131,124,0,116,0,106,6,118,0,114,131,116,0,106,6,124, + 0,25,0,125,8,122,5,124,8,106,11,125,9,87,0,110, + 12,4,0,116,9,121,138,1,0,1,0,1,0,124,7,6, + 0,89,0,2,0,1,0,83,0,124,9,100,1,117,0,114, + 127,124,7,2,0,1,0,83,0,124,9,2,0,1,0,83, + 0,124,7,2,0,1,0,83,0,113,26,100,1,83,0,119, + 0,119,0,41,4,122,21,70,105,110,100,32,97,32,109,111, + 100,117,108,101,39,115,32,115,112,101,99,46,78,122,53,115, + 121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,32, + 78,111,110,101,44,32,80,121,116,104,111,110,32,105,115,32, + 108,105,107,101,108,121,32,115,104,117,116,116,105,110,103,32, + 100,111,119,110,122,22,115,121,115,46,109,101,116,97,95,112, + 97,116,104,32,105,115,32,101,109,112,116,121,41,12,114,18, + 0,0,0,218,9,109,101,116,97,95,112,97,116,104,114,87, 0,0,0,114,101,0,0,0,114,102,0,0,0,114,169,0, - 0,0,114,184,0,0,0,114,104,0,0,0,41,5,218,6, - 102,105,110,100,101,114,114,20,0,0,0,114,181,0,0,0, - 114,108,0,0,0,114,122,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, - 95,115,112,101,99,95,108,101,103,97,99,121,143,3,0,0, - 115,14,0,0,0,14,1,12,2,12,1,8,1,4,1,10, - 1,255,128,114,212,0,0,0,99,3,0,0,0,0,0,0, - 0,0,0,0,0,10,0,0,0,10,0,0,0,67,0,0, - 0,115,24,1,0,0,116,0,106,1,125,3,124,3,100,1, - 117,0,114,11,116,2,100,2,131,1,130,1,124,3,115,19, - 116,3,160,4,100,3,116,5,161,2,1,0,124,0,116,0, - 106,6,118,0,125,4,124,3,68,0,93,109,125,5,116,7, - 131,0,143,46,1,0,122,5,124,5,106,8,125,6,87,0, - 110,26,4,0,116,9,121,139,1,0,1,0,1,0,116,10, - 124,5,124,0,124,1,131,3,125,7,124,7,100,1,117,0, - 114,62,89,0,87,0,100,1,4,0,4,0,131,3,1,0, - 113,26,89,0,110,6,124,6,124,0,124,1,124,2,131,3, - 125,7,87,0,100,1,4,0,4,0,131,3,1,0,110,8, - 49,0,115,80,119,1,1,0,1,0,1,0,89,0,1,0, - 124,7,100,1,117,1,114,135,124,4,115,131,124,0,116,0, - 106,6,118,0,114,131,116,0,106,6,124,0,25,0,125,8, - 122,5,124,8,106,11,125,9,87,0,110,12,4,0,116,9, - 121,138,1,0,1,0,1,0,124,7,6,0,89,0,2,0, - 1,0,83,0,124,9,100,1,117,0,114,127,124,7,2,0, - 1,0,83,0,124,9,2,0,1,0,83,0,124,7,2,0, - 1,0,83,0,113,26,100,1,83,0,119,0,119,0,41,4, - 122,21,70,105,110,100,32,97,32,109,111,100,117,108,101,39, - 115,32,115,112,101,99,46,78,122,53,115,121,115,46,109,101, - 116,97,95,112,97,116,104,32,105,115,32,78,111,110,101,44, - 32,80,121,116,104,111,110,32,105,115,32,108,105,107,101,108, - 121,32,115,104,117,116,116,105,110,103,32,100,111,119,110,122, - 22,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, - 115,32,101,109,112,116,121,41,12,114,18,0,0,0,218,9, - 109,101,116,97,95,112,97,116,104,114,87,0,0,0,114,101, - 0,0,0,114,102,0,0,0,114,169,0,0,0,114,105,0, - 0,0,114,199,0,0,0,114,183,0,0,0,114,2,0,0, - 0,114,212,0,0,0,114,113,0,0,0,41,10,114,20,0, - 0,0,114,181,0,0,0,114,182,0,0,0,114,213,0,0, - 0,90,9,105,115,95,114,101,108,111,97,100,114,211,0,0, - 0,114,183,0,0,0,114,109,0,0,0,114,110,0,0,0, - 114,113,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,10,95,102,105,110,100,95,115,112,101,99, - 153,3,0,0,115,66,0,0,0,6,2,8,1,8,2,4, - 3,12,1,10,5,8,1,8,1,2,1,10,1,12,1,12, - 1,8,1,16,1,4,255,12,3,30,128,8,1,14,2,10, - 1,2,1,10,1,12,1,12,4,8,2,8,1,8,2,8, - 2,2,239,4,19,2,243,2,244,255,128,114,214,0,0,0, - 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,5,0,0,0,67,0,0,0,115,110,0,0,0,116,0, - 124,0,116,1,131,2,115,14,116,2,100,1,160,3,116,4, - 124,0,131,1,161,1,131,1,130,1,124,2,100,2,107,0, - 114,22,116,5,100,3,131,1,130,1,124,2,100,2,107,4, - 114,41,116,0,124,1,116,1,131,2,115,35,116,2,100,4, - 131,1,130,1,124,1,115,41,116,6,100,5,131,1,130,1, - 124,0,115,53,124,2,100,2,107,2,114,51,116,5,100,6, - 131,1,130,1,100,7,83,0,100,7,83,0,41,8,122,28, - 86,101,114,105,102,121,32,97,114,103,117,109,101,110,116,115, - 32,97,114,101,32,34,115,97,110,101,34,46,122,31,109,111, - 100,117,108,101,32,110,97,109,101,32,109,117,115,116,32,98, - 101,32,115,116,114,44,32,110,111,116,32,123,125,114,25,0, - 0,0,122,18,108,101,118,101,108,32,109,117,115,116,32,98, - 101,32,62,61,32,48,122,31,95,95,112,97,99,107,97,103, - 101,95,95,32,110,111,116,32,115,101,116,32,116,111,32,97, - 32,115,116,114,105,110,103,122,54,97,116,116,101,109,112,116, - 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111, - 114,116,32,119,105,116,104,32,110,111,32,107,110,111,119,110, - 32,112,97,114,101,110,116,32,112,97,99,107,97,103,101,122, - 17,69,109,112,116,121,32,109,111,100,117,108,101,32,110,97, - 109,101,78,41,7,218,10,105,115,105,110,115,116,97,110,99, - 101,218,3,115,116,114,218,9,84,121,112,101,69,114,114,111, - 114,114,50,0,0,0,114,3,0,0,0,218,10,86,97,108, - 117,101,69,114,114,111,114,114,87,0,0,0,169,3,114,20, - 0,0,0,114,208,0,0,0,114,209,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,13,95,115, - 97,110,105,116,121,95,99,104,101,99,107,200,3,0,0,115, - 26,0,0,0,10,2,18,1,8,1,8,1,8,1,10,1, - 8,1,4,1,8,1,12,2,8,1,8,255,255,128,114,220, - 0,0,0,122,16,78,111,32,109,111,100,117,108,101,32,110, - 97,109,101,100,32,122,4,123,33,114,125,99,2,0,0,0, - 0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0, - 67,0,0,0,115,16,1,0,0,100,0,125,2,124,0,160, - 0,100,1,161,1,100,2,25,0,125,3,124,3,114,63,124, - 3,116,1,106,2,118,1,114,21,116,3,124,1,124,3,131, - 2,1,0,124,0,116,1,106,2,118,0,114,31,116,1,106, - 2,124,0,25,0,83,0,116,1,106,2,124,3,25,0,125, - 4,122,5,124,4,106,4,125,2,87,0,110,21,4,0,116, - 5,121,135,1,0,1,0,1,0,116,6,100,3,23,0,160, - 7,124,0,124,3,161,2,125,5,116,8,124,5,124,0,100, - 4,141,2,100,0,130,2,116,9,124,0,124,2,131,2,125, - 6,124,6,100,0,117,0,114,81,116,8,116,6,160,7,124, - 0,161,1,124,0,100,4,141,2,130,1,116,10,124,6,131, - 1,125,7,124,3,114,132,116,1,106,2,124,3,25,0,125, - 4,124,0,160,0,100,1,161,1,100,5,25,0,125,8,122, - 9,116,11,124,4,124,8,124,7,131,3,1,0,87,0,124, - 7,83,0,4,0,116,5,121,134,1,0,1,0,1,0,100, - 6,124,3,155,2,100,7,124,8,155,2,157,4,125,5,116, - 12,160,13,124,5,116,14,161,2,1,0,89,0,124,7,83, - 0,124,7,83,0,119,0,119,0,41,8,78,114,141,0,0, - 0,114,25,0,0,0,122,23,59,32,123,33,114,125,32,105, - 115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,114, - 19,0,0,0,233,2,0,0,0,122,27,67,97,110,110,111, - 116,32,115,101,116,32,97,110,32,97,116,116,114,105,98,117, - 116,101,32,111,110,32,122,18,32,102,111,114,32,99,104,105, - 108,100,32,109,111,100,117,108,101,32,41,15,114,142,0,0, - 0,114,18,0,0,0,114,105,0,0,0,114,74,0,0,0, - 114,154,0,0,0,114,2,0,0,0,218,8,95,69,82,82, - 95,77,83,71,114,50,0,0,0,218,19,77,111,100,117,108, - 101,78,111,116,70,111,117,110,100,69,114,114,111,114,114,214, - 0,0,0,114,173,0,0,0,114,12,0,0,0,114,101,0, - 0,0,114,102,0,0,0,114,169,0,0,0,41,9,114,20, - 0,0,0,218,7,105,109,112,111,114,116,95,114,181,0,0, - 0,114,143,0,0,0,90,13,112,97,114,101,110,116,95,109, - 111,100,117,108,101,114,108,0,0,0,114,109,0,0,0,114, - 110,0,0,0,90,5,99,104,105,108,100,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,23,95,102,105,110, - 100,95,97,110,100,95,108,111,97,100,95,117,110,108,111,99, - 107,101,100,219,3,0,0,115,60,0,0,0,4,1,14,1, - 4,1,10,1,10,1,10,2,10,1,10,1,2,1,10,1, - 12,1,16,1,14,1,10,1,8,1,18,1,8,2,4,1, - 10,2,14,1,2,1,14,1,4,4,12,253,16,1,14,1, - 8,1,2,253,2,242,255,128,114,225,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,0, - 0,0,67,0,0,0,115,128,0,0,0,116,0,124,0,131, - 1,143,31,1,0,116,1,106,2,160,3,124,0,116,4,161, - 2,125,2,124,2,116,4,117,0,114,28,116,5,124,0,124, - 1,131,2,87,0,2,0,100,1,4,0,4,0,131,3,1, - 0,83,0,87,0,100,1,4,0,4,0,131,3,1,0,110, - 8,49,0,115,38,119,1,1,0,1,0,1,0,89,0,1, - 0,124,2,100,1,117,0,114,58,100,2,160,6,124,0,161, - 1,125,3,116,7,124,3,124,0,100,3,141,2,130,1,116, - 8,124,0,131,1,1,0,124,2,83,0,41,4,122,25,70, - 105,110,100,32,97,110,100,32,108,111,97,100,32,116,104,101, - 32,109,111,100,117,108,101,46,78,122,40,105,109,112,111,114, - 116,32,111,102,32,123,125,32,104,97,108,116,101,100,59,32, - 78,111,110,101,32,105,110,32,115,121,115,46,109,111,100,117, - 108,101,115,114,19,0,0,0,41,9,114,57,0,0,0,114, - 18,0,0,0,114,105,0,0,0,114,38,0,0,0,218,14, - 95,78,69,69,68,83,95,76,79,65,68,73,78,71,114,225, - 0,0,0,114,50,0,0,0,114,223,0,0,0,114,72,0, - 0,0,41,4,114,20,0,0,0,114,224,0,0,0,114,110, - 0,0,0,114,82,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,14,95,102,105,110,100,95,97, - 110,100,95,108,111,97,100,254,3,0,0,115,28,0,0,0, - 10,2,14,1,8,1,24,1,14,255,16,128,8,3,2,1, - 6,1,2,255,12,2,8,2,4,1,255,128,114,227,0,0, - 0,114,25,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, - 42,0,0,0,116,0,124,0,124,1,124,2,131,3,1,0, - 124,2,100,1,107,4,114,16,116,1,124,0,124,1,124,2, - 131,3,125,0,116,2,124,0,116,3,131,2,83,0,41,3, - 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, - 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, - 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, - 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, - 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, - 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, - 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, - 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, - 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, - 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, - 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, - 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, - 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, - 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, - 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, - 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, - 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, - 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, - 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, - 46,10,10,32,32,32,32,114,25,0,0,0,78,41,4,114, - 220,0,0,0,114,210,0,0,0,114,227,0,0,0,218,11, - 95,103,99,100,95,105,109,112,111,114,116,114,219,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 228,0,0,0,14,4,0,0,115,10,0,0,0,12,9,8, - 1,12,1,10,1,255,128,114,228,0,0,0,169,1,218,9, - 114,101,99,117,114,115,105,118,101,99,3,0,0,0,0,0, - 0,0,1,0,0,0,8,0,0,0,11,0,0,0,67,0, - 0,0,115,218,0,0,0,124,1,68,0,93,103,125,4,116, - 0,124,4,116,1,131,2,115,32,124,3,114,17,124,0,106, - 2,100,1,23,0,125,5,110,2,100,2,125,5,116,3,100, - 3,124,5,155,0,100,4,116,4,124,4,131,1,106,2,155, - 0,157,4,131,1,130,1,124,4,100,5,107,2,114,53,124, - 3,115,52,116,5,124,0,100,6,131,2,114,52,116,6,124, - 0,124,0,106,7,124,2,100,7,100,8,141,4,1,0,113, - 2,116,5,124,0,124,4,131,2,115,105,100,9,160,8,124, - 0,106,2,124,4,161,2,125,6,122,7,116,9,124,2,124, - 6,131,2,1,0,87,0,113,2,4,0,116,10,121,108,1, - 0,125,7,1,0,122,21,124,7,106,11,124,6,107,2,114, - 100,116,12,106,13,160,14,124,6,116,15,161,2,100,10,117, - 1,114,100,87,0,89,0,100,10,125,7,126,7,113,2,130, - 0,100,10,125,7,126,7,119,1,113,2,124,0,83,0,119, - 0,41,11,122,238,70,105,103,117,114,101,32,111,117,116,32, - 119,104,97,116,32,95,95,105,109,112,111,114,116,95,95,32, - 115,104,111,117,108,100,32,114,101,116,117,114,110,46,10,10, - 32,32,32,32,84,104,101,32,105,109,112,111,114,116,95,32, - 112,97,114,97,109,101,116,101,114,32,105,115,32,97,32,99, - 97,108,108,97,98,108,101,32,119,104,105,99,104,32,116,97, - 107,101,115,32,116,104,101,32,110,97,109,101,32,111,102,32, - 109,111,100,117,108,101,32,116,111,10,32,32,32,32,105,109, - 112,111,114,116,46,32,73,116,32,105,115,32,114,101,113,117, - 105,114,101,100,32,116,111,32,100,101,99,111,117,112,108,101, - 32,116,104,101,32,102,117,110,99,116,105,111,110,32,102,114, - 111,109,32,97,115,115,117,109,105,110,103,32,105,109,112,111, - 114,116,108,105,98,39,115,10,32,32,32,32,105,109,112,111, - 114,116,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,105,115,32,100,101,115,105,114,101,100,46,10,10,32, - 32,32,32,122,8,46,95,95,97,108,108,95,95,122,13,96, - 96,102,114,111,109,32,108,105,115,116,39,39,122,8,73,116, - 101,109,32,105,110,32,122,18,32,109,117,115,116,32,98,101, - 32,115,116,114,44,32,110,111,116,32,250,1,42,218,7,95, - 95,97,108,108,95,95,84,114,229,0,0,0,114,205,0,0, - 0,78,41,16,114,215,0,0,0,114,216,0,0,0,114,9, - 0,0,0,114,217,0,0,0,114,3,0,0,0,114,11,0, - 0,0,218,16,95,104,97,110,100,108,101,95,102,114,111,109, - 108,105,115,116,114,232,0,0,0,114,50,0,0,0,114,74, - 0,0,0,114,223,0,0,0,114,20,0,0,0,114,18,0, - 0,0,114,105,0,0,0,114,38,0,0,0,114,226,0,0, - 0,41,8,114,110,0,0,0,218,8,102,114,111,109,108,105, - 115,116,114,224,0,0,0,114,230,0,0,0,218,1,120,90, - 5,119,104,101,114,101,90,9,102,114,111,109,95,110,97,109, - 101,90,3,101,120,99,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,233,0,0,0,29,4,0,0,115,58, - 0,0,0,8,10,10,1,4,1,12,1,4,2,10,1,8, - 1,8,255,8,2,14,1,10,1,2,1,6,255,2,128,10, - 2,14,1,2,1,14,1,14,1,10,4,16,1,2,255,12, - 2,2,1,8,128,2,245,4,12,2,248,255,128,114,233,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,6,0,0,0,67,0,0,0,115,146,0,0,0, - 124,0,160,0,100,1,161,1,125,1,124,0,160,0,100,2, - 161,1,125,2,124,1,100,3,117,1,114,41,124,2,100,3, - 117,1,114,39,124,1,124,2,106,1,107,3,114,39,116,2, - 106,3,100,4,124,1,155,2,100,5,124,2,106,1,155,2, - 100,6,157,5,116,4,100,7,100,8,141,3,1,0,124,1, - 83,0,124,2,100,3,117,1,114,48,124,2,106,1,83,0, - 116,2,106,3,100,9,116,4,100,7,100,8,141,3,1,0, - 124,0,100,10,25,0,125,1,100,11,124,0,118,1,114,71, - 124,1,160,5,100,12,161,1,100,13,25,0,125,1,124,1, - 83,0,41,14,122,167,67,97,108,99,117,108,97,116,101,32, - 119,104,97,116,32,95,95,112,97,99,107,97,103,101,95,95, - 32,115,104,111,117,108,100,32,98,101,46,10,10,32,32,32, - 32,95,95,112,97,99,107,97,103,101,95,95,32,105,115,32, - 110,111,116,32,103,117,97,114,97,110,116,101,101,100,32,116, - 111,32,98,101,32,100,101,102,105,110,101,100,32,111,114,32, - 99,111,117,108,100,32,98,101,32,115,101,116,32,116,111,32, - 78,111,110,101,10,32,32,32,32,116,111,32,114,101,112,114, - 101,115,101,110,116,32,116,104,97,116,32,105,116,115,32,112, - 114,111,112,101,114,32,118,97,108,117,101,32,105,115,32,117, - 110,107,110,111,119,110,46,10,10,32,32,32,32,114,158,0, - 0,0,114,113,0,0,0,78,122,32,95,95,112,97,99,107, - 97,103,101,95,95,32,33,61,32,95,95,115,112,101,99,95, - 95,46,112,97,114,101,110,116,32,40,122,4,32,33,61,32, - 250,1,41,233,3,0,0,0,41,1,90,10,115,116,97,99, - 107,108,101,118,101,108,122,89,99,97,110,39,116,32,114,101, - 115,111,108,118,101,32,112,97,99,107,97,103,101,32,102,114, - 111,109,32,95,95,115,112,101,99,95,95,32,111,114,32,95, - 95,112,97,99,107,97,103,101,95,95,44,32,102,97,108,108, - 105,110,103,32,98,97,99,107,32,111,110,32,95,95,110,97, - 109,101,95,95,32,97,110,100,32,95,95,112,97,116,104,95, - 95,114,9,0,0,0,114,154,0,0,0,114,141,0,0,0, - 114,25,0,0,0,41,6,114,38,0,0,0,114,143,0,0, - 0,114,101,0,0,0,114,102,0,0,0,114,169,0,0,0, - 114,142,0,0,0,41,3,218,7,103,108,111,98,97,108,115, - 114,208,0,0,0,114,109,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,17,95,99,97,108,99, - 95,95,95,112,97,99,107,97,103,101,95,95,66,4,0,0, - 115,44,0,0,0,10,7,10,1,8,1,18,1,6,1,2, - 1,4,255,4,1,6,255,4,2,6,254,4,3,8,1,6, - 1,6,2,4,2,6,254,8,3,8,1,14,1,4,1,255, - 128,114,239,0,0,0,114,5,0,0,0,99,5,0,0,0, - 0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, - 67,0,0,0,115,174,0,0,0,124,4,100,1,107,2,114, - 9,116,0,124,0,131,1,125,5,110,18,124,1,100,2,117, - 1,114,15,124,1,110,1,105,0,125,6,116,1,124,6,131, - 1,125,7,116,0,124,0,124,7,124,4,131,3,125,5,124, - 3,115,74,124,4,100,1,107,2,114,42,116,0,124,0,160, - 2,100,3,161,1,100,1,25,0,131,1,83,0,124,0,115, - 46,124,5,83,0,116,3,124,0,131,1,116,3,124,0,160, - 2,100,3,161,1,100,1,25,0,131,1,24,0,125,8,116, - 4,106,5,124,5,106,6,100,2,116,3,124,5,106,6,131, - 1,124,8,24,0,133,2,25,0,25,0,83,0,116,7,124, - 5,100,4,131,2,114,85,116,8,124,5,124,3,116,0,131, - 3,83,0,124,5,83,0,41,5,97,215,1,0,0,73,109, - 112,111,114,116,32,97,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,84,104,101,32,39,103,108,111,98,97,108,115, - 39,32,97,114,103,117,109,101,110,116,32,105,115,32,117,115, - 101,100,32,116,111,32,105,110,102,101,114,32,119,104,101,114, - 101,32,116,104,101,32,105,109,112,111,114,116,32,105,115,32, - 111,99,99,117,114,114,105,110,103,32,102,114,111,109,10,32, - 32,32,32,116,111,32,104,97,110,100,108,101,32,114,101,108, - 97,116,105,118,101,32,105,109,112,111,114,116,115,46,32,84, - 104,101,32,39,108,111,99,97,108,115,39,32,97,114,103,117, - 109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,46, - 32,84,104,101,10,32,32,32,32,39,102,114,111,109,108,105, - 115,116,39,32,97,114,103,117,109,101,110,116,32,115,112,101, - 99,105,102,105,101,115,32,119,104,97,116,32,115,104,111,117, - 108,100,32,101,120,105,115,116,32,97,115,32,97,116,116,114, - 105,98,117,116,101,115,32,111,110,32,116,104,101,32,109,111, - 100,117,108,101,10,32,32,32,32,98,101,105,110,103,32,105, - 109,112,111,114,116,101,100,32,40,101,46,103,46,32,96,96, - 102,114,111,109,32,109,111,100,117,108,101,32,105,109,112,111, - 114,116,32,60,102,114,111,109,108,105,115,116,62,96,96,41, - 46,32,32,84,104,101,32,39,108,101,118,101,108,39,10,32, - 32,32,32,97,114,103,117,109,101,110,116,32,114,101,112,114, - 101,115,101,110,116,115,32,116,104,101,32,112,97,99,107,97, - 103,101,32,108,111,99,97,116,105,111,110,32,116,111,32,105, - 109,112,111,114,116,32,102,114,111,109,32,105,110,32,97,32, - 114,101,108,97,116,105,118,101,10,32,32,32,32,105,109,112, - 111,114,116,32,40,101,46,103,46,32,96,96,102,114,111,109, - 32,46,46,112,107,103,32,105,109,112,111,114,116,32,109,111, - 100,96,96,32,119,111,117,108,100,32,104,97,118,101,32,97, - 32,39,108,101,118,101,108,39,32,111,102,32,50,41,46,10, - 10,32,32,32,32,114,25,0,0,0,78,114,141,0,0,0, - 114,154,0,0,0,41,9,114,228,0,0,0,114,239,0,0, - 0,218,9,112,97,114,116,105,116,105,111,110,114,207,0,0, - 0,114,18,0,0,0,114,105,0,0,0,114,9,0,0,0, - 114,11,0,0,0,114,233,0,0,0,41,9,114,20,0,0, - 0,114,238,0,0,0,218,6,108,111,99,97,108,115,114,234, - 0,0,0,114,209,0,0,0,114,110,0,0,0,90,8,103, - 108,111,98,97,108,115,95,114,208,0,0,0,90,7,99,117, - 116,95,111,102,102,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,10,95,95,105,109,112,111,114,116,95,95, - 93,4,0,0,115,32,0,0,0,8,11,10,1,16,2,8, - 1,12,1,4,1,8,3,18,1,4,1,4,1,26,4,30, - 3,10,1,12,1,4,2,255,128,114,242,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,116,0,160,1, - 124,0,161,1,125,1,124,1,100,0,117,0,114,15,116,2, - 100,1,124,0,23,0,131,1,130,1,116,3,124,1,131,1, - 83,0,41,2,78,122,25,110,111,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,32,110,97,109,101,100,32, - 41,4,114,175,0,0,0,114,183,0,0,0,114,87,0,0, - 0,114,173,0,0,0,41,2,114,20,0,0,0,114,109,0, + 0,0,114,105,0,0,0,114,200,0,0,0,114,183,0,0, + 0,114,2,0,0,0,114,213,0,0,0,114,113,0,0,0, + 41,10,114,20,0,0,0,114,181,0,0,0,114,182,0,0, + 0,114,214,0,0,0,90,9,105,115,95,114,101,108,111,97, + 100,114,212,0,0,0,114,183,0,0,0,114,109,0,0,0, + 114,110,0,0,0,114,113,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,10,95,102,105,110,100, + 95,115,112,101,99,153,3,0,0,115,66,0,0,0,6,2, + 8,1,8,2,4,3,12,1,10,5,8,1,8,1,2,1, + 10,1,12,1,12,1,8,1,16,1,4,255,12,3,30,128, + 8,1,14,2,10,1,2,1,10,1,12,1,12,4,8,2, + 8,1,8,2,8,2,2,239,4,19,2,243,2,244,255,128, + 114,215,0,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,110, + 0,0,0,116,0,124,0,116,1,131,2,115,14,116,2,100, + 1,160,3,116,4,124,0,131,1,161,1,131,1,130,1,124, + 2,100,2,107,0,114,22,116,5,100,3,131,1,130,1,124, + 2,100,2,107,4,114,41,116,0,124,1,116,1,131,2,115, + 35,116,2,100,4,131,1,130,1,124,1,115,41,116,6,100, + 5,131,1,130,1,124,0,115,53,124,2,100,2,107,2,114, + 51,116,5,100,6,131,1,130,1,100,7,83,0,100,7,83, + 0,41,8,122,28,86,101,114,105,102,121,32,97,114,103,117, + 109,101,110,116,115,32,97,114,101,32,34,115,97,110,101,34, + 46,122,31,109,111,100,117,108,101,32,110,97,109,101,32,109, + 117,115,116,32,98,101,32,115,116,114,44,32,110,111,116,32, + 123,125,114,25,0,0,0,122,18,108,101,118,101,108,32,109, + 117,115,116,32,98,101,32,62,61,32,48,122,31,95,95,112, + 97,99,107,97,103,101,95,95,32,110,111,116,32,115,101,116, + 32,116,111,32,97,32,115,116,114,105,110,103,122,54,97,116, + 116,101,109,112,116,101,100,32,114,101,108,97,116,105,118,101, + 32,105,109,112,111,114,116,32,119,105,116,104,32,110,111,32, + 107,110,111,119,110,32,112,97,114,101,110,116,32,112,97,99, + 107,97,103,101,122,17,69,109,112,116,121,32,109,111,100,117, + 108,101,32,110,97,109,101,78,41,7,218,10,105,115,105,110, + 115,116,97,110,99,101,218,3,115,116,114,218,9,84,121,112, + 101,69,114,114,111,114,114,50,0,0,0,114,3,0,0,0, + 218,10,86,97,108,117,101,69,114,114,111,114,114,87,0,0, + 0,169,3,114,20,0,0,0,114,209,0,0,0,114,210,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,18,95,98,117,105,108,116,105,110,95,102,114,111,109, - 95,110,97,109,101,130,4,0,0,115,10,0,0,0,10,1, - 8,1,12,1,8,1,255,128,114,243,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,10,0,0,0,5,0, - 0,0,67,0,0,0,115,166,0,0,0,124,1,97,0,124, - 0,97,1,116,2,116,1,131,1,125,2,116,1,106,3,160, - 4,161,0,68,0,93,36,92,2,125,3,125,4,116,5,124, - 4,124,2,131,2,114,49,124,3,116,1,106,6,118,0,114, - 30,116,7,125,5,110,9,116,0,160,8,124,3,161,1,114, - 38,116,9,125,5,110,1,113,13,116,10,124,4,124,5,131, - 2,125,6,116,11,124,6,124,4,131,2,1,0,113,13,116, - 1,106,3,116,12,25,0,125,7,100,1,68,0,93,23,125, - 8,124,8,116,1,106,3,118,1,114,69,116,13,124,8,131, - 1,125,9,110,5,116,1,106,3,124,8,25,0,125,9,116, - 14,124,7,124,8,124,9,131,3,1,0,113,57,100,2,83, - 0,41,3,122,250,83,101,116,117,112,32,105,109,112,111,114, - 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, - 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, - 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, - 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, - 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, - 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, - 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, - 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, - 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, - 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, - 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, - 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, - 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, - 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,41, - 3,114,26,0,0,0,114,101,0,0,0,114,71,0,0,0, - 78,41,15,114,64,0,0,0,114,18,0,0,0,114,3,0, - 0,0,114,105,0,0,0,218,5,105,116,101,109,115,114,215, - 0,0,0,114,86,0,0,0,114,175,0,0,0,114,98,0, - 0,0,114,192,0,0,0,114,155,0,0,0,114,161,0,0, - 0,114,9,0,0,0,114,243,0,0,0,114,12,0,0,0, - 41,10,218,10,115,121,115,95,109,111,100,117,108,101,218,11, - 95,105,109,112,95,109,111,100,117,108,101,90,11,109,111,100, - 117,108,101,95,116,121,112,101,114,20,0,0,0,114,110,0, - 0,0,114,122,0,0,0,114,109,0,0,0,90,11,115,101, - 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, - 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, - 95,109,111,100,117,108,101,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,218,6,95,115,101,116,117,112,137,4, - 0,0,115,42,0,0,0,4,9,4,1,8,3,18,1,10, - 1,10,1,6,1,10,1,6,1,2,2,10,1,10,1,2, - 128,10,3,8,1,10,1,10,1,10,2,14,1,4,251,255, - 128,114,247,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 38,0,0,0,116,0,124,0,124,1,131,2,1,0,116,1, - 106,2,160,3,116,4,161,1,1,0,116,1,106,2,160,3, - 116,5,161,1,1,0,100,1,83,0,41,2,122,48,73,110, - 115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,32, - 102,111,114,32,98,117,105,108,116,105,110,32,97,110,100,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,115,78,41, - 6,114,247,0,0,0,114,18,0,0,0,114,213,0,0,0, - 114,132,0,0,0,114,175,0,0,0,114,192,0,0,0,41, - 2,114,245,0,0,0,114,246,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,8,95,105,110,115, - 116,97,108,108,172,4,0,0,115,8,0,0,0,10,2,12, - 2,16,1,255,128,114,248,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, - 0,0,0,115,32,0,0,0,100,1,100,2,108,0,125,0, - 124,0,97,1,124,0,160,2,116,3,106,4,116,5,25,0, - 161,1,1,0,100,2,83,0,41,3,122,57,73,110,115,116, - 97,108,108,32,105,109,112,111,114,116,101,114,115,32,116,104, - 97,116,32,114,101,113,117,105,114,101,32,101,120,116,101,114, - 110,97,108,32,102,105,108,101,115,121,115,116,101,109,32,97, - 99,99,101,115,115,114,25,0,0,0,78,41,6,218,26,95, - 102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,98, - 95,101,120,116,101,114,110,97,108,114,139,0,0,0,114,248, - 0,0,0,114,18,0,0,0,114,105,0,0,0,114,9,0, - 0,0,41,1,114,249,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,27,95,105,110,115,116,97, - 108,108,95,101,120,116,101,114,110,97,108,95,105,109,112,111, - 114,116,101,114,115,180,4,0,0,115,8,0,0,0,8,3, - 4,1,20,1,255,128,114,250,0,0,0,41,2,78,78,41, - 1,78,41,2,78,114,25,0,0,0,41,4,78,78,114,5, - 0,0,0,114,25,0,0,0,41,54,114,10,0,0,0,114, - 7,0,0,0,114,26,0,0,0,114,101,0,0,0,114,71, - 0,0,0,114,139,0,0,0,114,17,0,0,0,114,21,0, - 0,0,114,66,0,0,0,114,37,0,0,0,114,47,0,0, - 0,114,22,0,0,0,114,23,0,0,0,114,55,0,0,0, - 114,57,0,0,0,114,60,0,0,0,114,72,0,0,0,114, - 74,0,0,0,114,83,0,0,0,114,95,0,0,0,114,100, - 0,0,0,114,111,0,0,0,114,124,0,0,0,114,125,0, - 0,0,114,104,0,0,0,114,155,0,0,0,114,161,0,0, - 0,114,165,0,0,0,114,119,0,0,0,114,106,0,0,0, - 114,172,0,0,0,114,173,0,0,0,114,107,0,0,0,114, - 175,0,0,0,114,192,0,0,0,114,199,0,0,0,114,210, - 0,0,0,114,212,0,0,0,114,214,0,0,0,114,220,0, - 0,0,90,15,95,69,82,82,95,77,83,71,95,80,82,69, - 70,73,88,114,222,0,0,0,114,225,0,0,0,218,6,111, - 98,106,101,99,116,114,226,0,0,0,114,227,0,0,0,114, - 228,0,0,0,114,233,0,0,0,114,239,0,0,0,114,242, - 0,0,0,114,243,0,0,0,114,247,0,0,0,114,248,0, - 0,0,114,250,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,8,60,109,111, - 100,117,108,101,62,1,0,0,0,115,106,0,0,0,4,0, - 8,22,4,9,4,1,4,1,4,3,8,3,8,8,4,8, - 4,2,16,3,14,4,14,77,14,21,8,16,8,37,8,17, - 14,11,8,8,8,11,8,12,8,19,14,26,16,101,10,26, - 14,45,8,72,8,17,8,17,8,30,8,36,8,45,14,15, - 14,80,14,85,8,13,8,9,10,10,8,47,4,16,8,1, - 8,2,6,32,8,3,10,16,14,15,8,37,10,27,8,37, - 8,7,8,35,12,8,255,128, + 0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,107, + 200,3,0,0,115,26,0,0,0,10,2,18,1,8,1,8, + 1,8,1,10,1,8,1,4,1,8,1,12,2,8,1,8, + 255,255,128,114,221,0,0,0,122,16,78,111,32,109,111,100, + 117,108,101,32,110,97,109,101,100,32,122,4,123,33,114,125, + 99,2,0,0,0,0,0,0,0,0,0,0,0,9,0,0, + 0,8,0,0,0,67,0,0,0,115,16,1,0,0,100,0, + 125,2,124,0,160,0,100,1,161,1,100,2,25,0,125,3, + 124,3,114,63,124,3,116,1,106,2,118,1,114,21,116,3, + 124,1,124,3,131,2,1,0,124,0,116,1,106,2,118,0, + 114,31,116,1,106,2,124,0,25,0,83,0,116,1,106,2, + 124,3,25,0,125,4,122,5,124,4,106,4,125,2,87,0, + 110,21,4,0,116,5,121,135,1,0,1,0,1,0,116,6, + 100,3,23,0,160,7,124,0,124,3,161,2,125,5,116,8, + 124,5,124,0,100,4,141,2,100,0,130,2,116,9,124,0, + 124,2,131,2,125,6,124,6,100,0,117,0,114,81,116,8, + 116,6,160,7,124,0,161,1,124,0,100,4,141,2,130,1, + 116,10,124,6,131,1,125,7,124,3,114,132,116,1,106,2, + 124,3,25,0,125,4,124,0,160,0,100,1,161,1,100,5, + 25,0,125,8,122,9,116,11,124,4,124,8,124,7,131,3, + 1,0,87,0,124,7,83,0,4,0,116,5,121,134,1,0, + 1,0,1,0,100,6,124,3,155,2,100,7,124,8,155,2, + 157,4,125,5,116,12,160,13,124,5,116,14,161,2,1,0, + 89,0,124,7,83,0,124,7,83,0,119,0,119,0,41,8, + 78,114,141,0,0,0,114,25,0,0,0,122,23,59,32,123, + 33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99, + 107,97,103,101,114,19,0,0,0,233,2,0,0,0,122,27, + 67,97,110,110,111,116,32,115,101,116,32,97,110,32,97,116, + 116,114,105,98,117,116,101,32,111,110,32,122,18,32,102,111, + 114,32,99,104,105,108,100,32,109,111,100,117,108,101,32,41, + 15,114,142,0,0,0,114,18,0,0,0,114,105,0,0,0, + 114,74,0,0,0,114,154,0,0,0,114,2,0,0,0,218, + 8,95,69,82,82,95,77,83,71,114,50,0,0,0,218,19, + 77,111,100,117,108,101,78,111,116,70,111,117,110,100,69,114, + 114,111,114,114,215,0,0,0,114,173,0,0,0,114,12,0, + 0,0,114,101,0,0,0,114,102,0,0,0,114,169,0,0, + 0,41,9,114,20,0,0,0,218,7,105,109,112,111,114,116, + 95,114,181,0,0,0,114,143,0,0,0,90,13,112,97,114, + 101,110,116,95,109,111,100,117,108,101,114,108,0,0,0,114, + 109,0,0,0,114,110,0,0,0,90,5,99,104,105,108,100, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 23,95,102,105,110,100,95,97,110,100,95,108,111,97,100,95, + 117,110,108,111,99,107,101,100,219,3,0,0,115,60,0,0, + 0,4,1,14,1,4,1,10,1,10,1,10,2,10,1,10, + 1,2,1,10,1,12,1,16,1,14,1,10,1,8,1,18, + 1,8,2,4,1,10,2,14,1,2,1,14,1,4,4,12, + 253,16,1,14,1,8,1,2,253,2,242,255,128,114,226,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,8,0,0,0,67,0,0,0,115,128,0,0,0, + 116,0,124,0,131,1,143,31,1,0,116,1,106,2,160,3, + 124,0,116,4,161,2,125,2,124,2,116,4,117,0,114,28, + 116,5,124,0,124,1,131,2,87,0,2,0,100,1,4,0, + 4,0,131,3,1,0,83,0,87,0,100,1,4,0,4,0, + 131,3,1,0,110,8,49,0,115,38,119,1,1,0,1,0, + 1,0,89,0,1,0,124,2,100,1,117,0,114,58,100,2, + 160,6,124,0,161,1,125,3,116,7,124,3,124,0,100,3, + 141,2,130,1,116,8,124,0,131,1,1,0,124,2,83,0, + 41,4,122,25,70,105,110,100,32,97,110,100,32,108,111,97, + 100,32,116,104,101,32,109,111,100,117,108,101,46,78,122,40, + 105,109,112,111,114,116,32,111,102,32,123,125,32,104,97,108, + 116,101,100,59,32,78,111,110,101,32,105,110,32,115,121,115, + 46,109,111,100,117,108,101,115,114,19,0,0,0,41,9,114, + 57,0,0,0,114,18,0,0,0,114,105,0,0,0,114,38, + 0,0,0,218,14,95,78,69,69,68,83,95,76,79,65,68, + 73,78,71,114,226,0,0,0,114,50,0,0,0,114,224,0, + 0,0,114,72,0,0,0,41,4,114,20,0,0,0,114,225, + 0,0,0,114,110,0,0,0,114,82,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,14,95,102, + 105,110,100,95,97,110,100,95,108,111,97,100,254,3,0,0, + 115,28,0,0,0,10,2,14,1,8,1,24,1,14,255,16, + 128,8,3,2,1,6,1,2,255,12,2,8,2,4,1,255, + 128,114,228,0,0,0,114,25,0,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 67,0,0,0,115,42,0,0,0,116,0,124,0,124,1,124, + 2,131,3,1,0,124,2,100,1,107,4,114,16,116,1,124, + 0,124,1,124,2,131,3,125,0,116,2,124,0,116,3,131, + 2,83,0,41,3,97,50,1,0,0,73,109,112,111,114,116, + 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, + 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, + 105,116,115,32,110,97,109,101,44,32,116,104,101,32,112,97, + 99,107,97,103,101,32,116,104,101,32,99,97,108,108,32,105, + 115,10,32,32,32,32,98,101,105,110,103,32,109,97,100,101, + 32,102,114,111,109,44,32,97,110,100,32,116,104,101,32,108, + 101,118,101,108,32,97,100,106,117,115,116,109,101,110,116,46, + 10,10,32,32,32,32,84,104,105,115,32,102,117,110,99,116, + 105,111,110,32,114,101,112,114,101,115,101,110,116,115,32,116, + 104,101,32,103,114,101,97,116,101,115,116,32,99,111,109,109, + 111,110,32,100,101,110,111,109,105,110,97,116,111,114,32,111, + 102,32,102,117,110,99,116,105,111,110,97,108,105,116,121,10, + 32,32,32,32,98,101,116,119,101,101,110,32,105,109,112,111, + 114,116,95,109,111,100,117,108,101,32,97,110,100,32,95,95, + 105,109,112,111,114,116,95,95,46,32,84,104,105,115,32,105, + 110,99,108,117,100,101,115,32,115,101,116,116,105,110,103,32, + 95,95,112,97,99,107,97,103,101,95,95,32,105,102,10,32, + 32,32,32,116,104,101,32,108,111,97,100,101,114,32,100,105, + 100,32,110,111,116,46,10,10,32,32,32,32,114,25,0,0, + 0,78,41,4,114,221,0,0,0,114,211,0,0,0,114,228, + 0,0,0,218,11,95,103,99,100,95,105,109,112,111,114,116, + 114,220,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,229,0,0,0,14,4,0,0,115,10,0, + 0,0,12,9,8,1,12,1,10,1,255,128,114,229,0,0, + 0,169,1,218,9,114,101,99,117,114,115,105,118,101,99,3, + 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,11, + 0,0,0,67,0,0,0,115,218,0,0,0,124,1,68,0, + 93,103,125,4,116,0,124,4,116,1,131,2,115,32,124,3, + 114,17,124,0,106,2,100,1,23,0,125,5,110,2,100,2, + 125,5,116,3,100,3,124,5,155,0,100,4,116,4,124,4, + 131,1,106,2,155,0,157,4,131,1,130,1,124,4,100,5, + 107,2,114,53,124,3,115,52,116,5,124,0,100,6,131,2, + 114,52,116,6,124,0,124,0,106,7,124,2,100,7,100,8, + 141,4,1,0,113,2,116,5,124,0,124,4,131,2,115,105, + 100,9,160,8,124,0,106,2,124,4,161,2,125,6,122,7, + 116,9,124,2,124,6,131,2,1,0,87,0,113,2,4,0, + 116,10,121,108,1,0,125,7,1,0,122,21,124,7,106,11, + 124,6,107,2,114,100,116,12,106,13,160,14,124,6,116,15, + 161,2,100,10,117,1,114,100,87,0,89,0,100,10,125,7, + 126,7,113,2,130,0,100,10,125,7,126,7,119,1,113,2, + 124,0,83,0,119,0,41,11,122,238,70,105,103,117,114,101, + 32,111,117,116,32,119,104,97,116,32,95,95,105,109,112,111, + 114,116,95,95,32,115,104,111,117,108,100,32,114,101,116,117, + 114,110,46,10,10,32,32,32,32,84,104,101,32,105,109,112, + 111,114,116,95,32,112,97,114,97,109,101,116,101,114,32,105, + 115,32,97,32,99,97,108,108,97,98,108,101,32,119,104,105, + 99,104,32,116,97,107,101,115,32,116,104,101,32,110,97,109, + 101,32,111,102,32,109,111,100,117,108,101,32,116,111,10,32, + 32,32,32,105,109,112,111,114,116,46,32,73,116,32,105,115, + 32,114,101,113,117,105,114,101,100,32,116,111,32,100,101,99, + 111,117,112,108,101,32,116,104,101,32,102,117,110,99,116,105, + 111,110,32,102,114,111,109,32,97,115,115,117,109,105,110,103, + 32,105,109,112,111,114,116,108,105,98,39,115,10,32,32,32, + 32,105,109,112,111,114,116,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,105,115,32,100,101,115,105,114,101, + 100,46,10,10,32,32,32,32,122,8,46,95,95,97,108,108, + 95,95,122,13,96,96,102,114,111,109,32,108,105,115,116,39, + 39,122,8,73,116,101,109,32,105,110,32,122,18,32,109,117, + 115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,250, + 1,42,218,7,95,95,97,108,108,95,95,84,114,230,0,0, + 0,114,206,0,0,0,78,41,16,114,216,0,0,0,114,217, + 0,0,0,114,9,0,0,0,114,218,0,0,0,114,3,0, + 0,0,114,11,0,0,0,218,16,95,104,97,110,100,108,101, + 95,102,114,111,109,108,105,115,116,114,233,0,0,0,114,50, + 0,0,0,114,74,0,0,0,114,224,0,0,0,114,20,0, + 0,0,114,18,0,0,0,114,105,0,0,0,114,38,0,0, + 0,114,227,0,0,0,41,8,114,110,0,0,0,218,8,102, + 114,111,109,108,105,115,116,114,225,0,0,0,114,231,0,0, + 0,218,1,120,90,5,119,104,101,114,101,90,9,102,114,111, + 109,95,110,97,109,101,90,3,101,120,99,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,234,0,0,0,29, + 4,0,0,115,58,0,0,0,8,10,10,1,4,1,12,1, + 4,2,10,1,8,1,8,255,8,2,14,1,10,1,2,1, + 6,255,2,128,10,2,14,1,2,1,14,1,14,1,10,4, + 16,1,2,255,12,2,2,1,8,128,2,245,4,12,2,248, + 255,128,114,234,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,0, + 115,146,0,0,0,124,0,160,0,100,1,161,1,125,1,124, + 0,160,0,100,2,161,1,125,2,124,1,100,3,117,1,114, + 41,124,2,100,3,117,1,114,39,124,1,124,2,106,1,107, + 3,114,39,116,2,106,3,100,4,124,1,155,2,100,5,124, + 2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,141, + 3,1,0,124,1,83,0,124,2,100,3,117,1,114,48,124, + 2,106,1,83,0,116,2,106,3,100,9,116,4,100,7,100, + 8,141,3,1,0,124,0,100,10,25,0,125,1,100,11,124, + 0,118,1,114,71,124,1,160,5,100,12,161,1,100,13,25, + 0,125,1,124,1,83,0,41,14,122,167,67,97,108,99,117, + 108,97,116,101,32,119,104,97,116,32,95,95,112,97,99,107, + 97,103,101,95,95,32,115,104,111,117,108,100,32,98,101,46, + 10,10,32,32,32,32,95,95,112,97,99,107,97,103,101,95, + 95,32,105,115,32,110,111,116,32,103,117,97,114,97,110,116, + 101,101,100,32,116,111,32,98,101,32,100,101,102,105,110,101, + 100,32,111,114,32,99,111,117,108,100,32,98,101,32,115,101, + 116,32,116,111,32,78,111,110,101,10,32,32,32,32,116,111, + 32,114,101,112,114,101,115,101,110,116,32,116,104,97,116,32, + 105,116,115,32,112,114,111,112,101,114,32,118,97,108,117,101, + 32,105,115,32,117,110,107,110,111,119,110,46,10,10,32,32, + 32,32,114,158,0,0,0,114,113,0,0,0,78,122,32,95, + 95,112,97,99,107,97,103,101,95,95,32,33,61,32,95,95, + 115,112,101,99,95,95,46,112,97,114,101,110,116,32,40,122, + 4,32,33,61,32,250,1,41,233,3,0,0,0,41,1,90, + 10,115,116,97,99,107,108,101,118,101,108,122,89,99,97,110, + 39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97, + 103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95, + 32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44, + 32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110, + 32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95, + 112,97,116,104,95,95,114,9,0,0,0,114,154,0,0,0, + 114,141,0,0,0,114,25,0,0,0,41,6,114,38,0,0, + 0,114,143,0,0,0,114,101,0,0,0,114,102,0,0,0, + 114,169,0,0,0,114,142,0,0,0,41,3,218,7,103,108, + 111,98,97,108,115,114,209,0,0,0,114,109,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, + 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95, + 95,66,4,0,0,115,44,0,0,0,10,7,10,1,8,1, + 18,1,6,1,2,1,4,255,4,1,6,255,4,2,6,254, + 4,3,8,1,6,1,6,2,4,2,6,254,8,3,8,1, + 14,1,4,1,255,128,114,240,0,0,0,114,5,0,0,0, + 99,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0, + 0,5,0,0,0,67,0,0,0,115,174,0,0,0,124,4, + 100,1,107,2,114,9,116,0,124,0,131,1,125,5,110,18, + 124,1,100,2,117,1,114,15,124,1,110,1,105,0,125,6, + 116,1,124,6,131,1,125,7,116,0,124,0,124,7,124,4, + 131,3,125,5,124,3,115,74,124,4,100,1,107,2,114,42, + 116,0,124,0,160,2,100,3,161,1,100,1,25,0,131,1, + 83,0,124,0,115,46,124,5,83,0,116,3,124,0,131,1, + 116,3,124,0,160,2,100,3,161,1,100,1,25,0,131,1, + 24,0,125,8,116,4,106,5,124,5,106,6,100,2,116,3, + 124,5,106,6,131,1,124,8,24,0,133,2,25,0,25,0, + 83,0,116,7,124,5,100,4,131,2,114,85,116,8,124,5, + 124,3,116,0,131,3,83,0,124,5,83,0,41,5,97,215, + 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, + 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, + 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, + 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, + 116,32,105,115,32,111,99,99,117,114,114,105,110,103,32,102, + 114,111,109,10,32,32,32,32,116,111,32,104,97,110,100,108, + 101,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, + 116,115,46,32,84,104,101,32,39,108,111,99,97,108,115,39, + 32,97,114,103,117,109,101,110,116,32,105,115,32,105,103,110, + 111,114,101,100,46,32,84,104,101,10,32,32,32,32,39,102, + 114,111,109,108,105,115,116,39,32,97,114,103,117,109,101,110, + 116,32,115,112,101,99,105,102,105,101,115,32,119,104,97,116, + 32,115,104,111,117,108,100,32,101,120,105,115,116,32,97,115, + 32,97,116,116,114,105,98,117,116,101,115,32,111,110,32,116, + 104,101,32,109,111,100,117,108,101,10,32,32,32,32,98,101, + 105,110,103,32,105,109,112,111,114,116,101,100,32,40,101,46, + 103,46,32,96,96,102,114,111,109,32,109,111,100,117,108,101, + 32,105,109,112,111,114,116,32,60,102,114,111,109,108,105,115, + 116,62,96,96,41,46,32,32,84,104,101,32,39,108,101,118, + 101,108,39,10,32,32,32,32,97,114,103,117,109,101,110,116, + 32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32, + 112,97,99,107,97,103,101,32,108,111,99,97,116,105,111,110, + 32,116,111,32,105,109,112,111,114,116,32,102,114,111,109,32, + 105,110,32,97,32,114,101,108,97,116,105,118,101,10,32,32, + 32,32,105,109,112,111,114,116,32,40,101,46,103,46,32,96, + 96,102,114,111,109,32,46,46,112,107,103,32,105,109,112,111, + 114,116,32,109,111,100,96,96,32,119,111,117,108,100,32,104, + 97,118,101,32,97,32,39,108,101,118,101,108,39,32,111,102, + 32,50,41,46,10,10,32,32,32,32,114,25,0,0,0,78, + 114,141,0,0,0,114,154,0,0,0,41,9,114,229,0,0, + 0,114,240,0,0,0,218,9,112,97,114,116,105,116,105,111, + 110,114,208,0,0,0,114,18,0,0,0,114,105,0,0,0, + 114,9,0,0,0,114,11,0,0,0,114,234,0,0,0,41, + 9,114,20,0,0,0,114,239,0,0,0,218,6,108,111,99, + 97,108,115,114,235,0,0,0,114,210,0,0,0,114,110,0, + 0,0,90,8,103,108,111,98,97,108,115,95,114,209,0,0, + 0,90,7,99,117,116,95,111,102,102,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,10,95,95,105,109,112, + 111,114,116,95,95,93,4,0,0,115,32,0,0,0,8,11, + 10,1,16,2,8,1,12,1,4,1,8,3,18,1,4,1, + 4,1,26,4,30,3,10,1,12,1,4,2,255,128,114,243, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,38,0,0, + 0,116,0,160,1,124,0,161,1,125,1,124,1,100,0,117, + 0,114,15,116,2,100,1,124,0,23,0,131,1,130,1,116, + 3,124,1,131,1,83,0,41,2,78,122,25,110,111,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,32,110, + 97,109,101,100,32,41,4,114,175,0,0,0,114,183,0,0, + 0,114,87,0,0,0,114,173,0,0,0,41,2,114,20,0, + 0,0,114,109,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,218,18,95,98,117,105,108,116,105,110, + 95,102,114,111,109,95,110,97,109,101,130,4,0,0,115,10, + 0,0,0,10,1,8,1,12,1,8,1,255,128,114,244,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,10, + 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, + 124,1,97,0,124,0,97,1,116,2,116,1,131,1,125,2, + 116,1,106,3,160,4,161,0,68,0,93,36,92,2,125,3, + 125,4,116,5,124,4,124,2,131,2,114,49,124,3,116,1, + 106,6,118,0,114,30,116,7,125,5,110,9,116,0,160,8, + 124,3,161,1,114,38,116,9,125,5,110,1,113,13,116,10, + 124,4,124,5,131,2,125,6,116,11,124,6,124,4,131,2, + 1,0,113,13,116,1,106,3,116,12,25,0,125,7,100,1, + 68,0,93,23,125,8,124,8,116,1,106,3,118,1,114,69, + 116,13,124,8,131,1,125,9,110,5,116,1,106,3,124,8, + 25,0,125,9,116,14,124,7,124,8,124,9,131,3,1,0, + 113,57,100,2,83,0,41,3,122,250,83,101,116,117,112,32, + 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, + 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, + 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, + 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, + 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, + 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, + 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, + 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, + 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, + 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, + 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, + 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, + 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, + 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, + 32,32,32,32,41,3,114,26,0,0,0,114,101,0,0,0, + 114,71,0,0,0,78,41,15,114,64,0,0,0,114,18,0, + 0,0,114,3,0,0,0,114,105,0,0,0,218,5,105,116, + 101,109,115,114,216,0,0,0,114,86,0,0,0,114,175,0, + 0,0,114,98,0,0,0,114,193,0,0,0,114,155,0,0, + 0,114,161,0,0,0,114,9,0,0,0,114,244,0,0,0, + 114,12,0,0,0,41,10,218,10,115,121,115,95,109,111,100, + 117,108,101,218,11,95,105,109,112,95,109,111,100,117,108,101, + 90,11,109,111,100,117,108,101,95,116,121,112,101,114,20,0, + 0,0,114,110,0,0,0,114,122,0,0,0,114,109,0,0, + 0,90,11,115,101,108,102,95,109,111,100,117,108,101,90,12, + 98,117,105,108,116,105,110,95,110,97,109,101,90,14,98,117, + 105,108,116,105,110,95,109,111,100,117,108,101,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,6,95,115,101, + 116,117,112,137,4,0,0,115,42,0,0,0,4,9,4,1, + 8,3,18,1,10,1,10,1,6,1,10,1,6,1,2,2, + 10,1,10,1,2,128,10,3,8,1,10,1,10,1,10,2, + 14,1,4,251,255,128,114,248,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 67,0,0,0,115,38,0,0,0,116,0,124,0,124,1,131, + 2,1,0,116,1,106,2,160,3,116,4,161,1,1,0,116, + 1,106,2,160,3,116,5,161,1,1,0,100,1,83,0,41, + 2,122,48,73,110,115,116,97,108,108,32,105,109,112,111,114, + 116,101,114,115,32,102,111,114,32,98,117,105,108,116,105,110, + 32,97,110,100,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,115,78,41,6,114,248,0,0,0,114,18,0,0,0, + 114,214,0,0,0,114,132,0,0,0,114,175,0,0,0,114, + 193,0,0,0,41,2,114,246,0,0,0,114,247,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 8,95,105,110,115,116,97,108,108,172,4,0,0,115,8,0, + 0,0,10,2,12,2,16,1,255,128,114,249,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,67,0,0,0,115,32,0,0,0,100,1,100, + 2,108,0,125,0,124,0,97,1,124,0,160,2,116,3,106, + 4,116,5,25,0,161,1,1,0,100,2,83,0,41,3,122, + 57,73,110,115,116,97,108,108,32,105,109,112,111,114,116,101, + 114,115,32,116,104,97,116,32,114,101,113,117,105,114,101,32, + 101,120,116,101,114,110,97,108,32,102,105,108,101,115,121,115, + 116,101,109,32,97,99,99,101,115,115,114,25,0,0,0,78, + 41,6,218,26,95,102,114,111,122,101,110,95,105,109,112,111, + 114,116,108,105,98,95,101,120,116,101,114,110,97,108,114,139, + 0,0,0,114,249,0,0,0,114,18,0,0,0,114,105,0, + 0,0,114,9,0,0,0,41,1,114,250,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,27,95, + 105,110,115,116,97,108,108,95,101,120,116,101,114,110,97,108, + 95,105,109,112,111,114,116,101,114,115,180,4,0,0,115,8, + 0,0,0,8,3,4,1,20,1,255,128,114,251,0,0,0, + 114,190,0,0,0,114,0,0,0,0,114,24,0,0,0,41, + 4,78,78,114,5,0,0,0,114,25,0,0,0,41,54,114, + 10,0,0,0,114,7,0,0,0,114,26,0,0,0,114,101, + 0,0,0,114,71,0,0,0,114,139,0,0,0,114,17,0, + 0,0,114,21,0,0,0,114,66,0,0,0,114,37,0,0, + 0,114,47,0,0,0,114,22,0,0,0,114,23,0,0,0, + 114,55,0,0,0,114,57,0,0,0,114,60,0,0,0,114, + 72,0,0,0,114,74,0,0,0,114,83,0,0,0,114,95, + 0,0,0,114,100,0,0,0,114,111,0,0,0,114,124,0, + 0,0,114,125,0,0,0,114,104,0,0,0,114,155,0,0, + 0,114,161,0,0,0,114,165,0,0,0,114,119,0,0,0, + 114,106,0,0,0,114,172,0,0,0,114,173,0,0,0,114, + 107,0,0,0,114,175,0,0,0,114,193,0,0,0,114,200, + 0,0,0,114,211,0,0,0,114,213,0,0,0,114,215,0, + 0,0,114,221,0,0,0,90,15,95,69,82,82,95,77,83, + 71,95,80,82,69,70,73,88,114,223,0,0,0,114,226,0, + 0,0,218,6,111,98,106,101,99,116,114,227,0,0,0,114, + 228,0,0,0,114,229,0,0,0,114,234,0,0,0,114,240, + 0,0,0,114,243,0,0,0,114,244,0,0,0,114,248,0, + 0,0,114,249,0,0,0,114,251,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,106, + 0,0,0,4,0,8,22,4,9,4,1,4,1,4,3,8, + 3,8,8,4,8,4,2,16,3,14,4,14,77,14,21,8, + 16,8,37,8,17,14,11,8,8,8,11,8,12,8,19,14, + 26,16,101,10,26,14,45,8,72,8,17,8,17,8,30,8, + 36,8,45,14,15,14,80,14,85,8,13,8,9,10,10,8, + 47,4,16,8,1,8,2,6,32,8,3,10,16,14,15,8, + 37,10,27,8,37,8,7,8,35,12,8,255,128, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index f484b2d209fa3..e242c36aa39ce 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -35,7 +35,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 132,0,90,61,100,68,100,69,132,0,90,62,100,114,100,70, 100,71,132,1,90,63,100,115,100,72,100,73,132,1,90,64, 100,116,100,75,100,76,132,1,90,65,100,77,100,78,132,0, - 90,66,101,67,131,0,90,68,100,117,100,1,101,68,100,79, + 90,66,101,67,131,0,90,68,100,113,100,1,101,68,100,79, 156,2,100,80,100,81,132,3,90,69,71,0,100,82,100,83, 132,0,100,83,131,2,90,70,71,0,100,84,100,85,132,0, 100,85,131,2,90,71,71,0,100,86,100,87,132,0,100,87, @@ -47,9 +47,9 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 132,0,100,97,131,2,90,77,71,0,100,98,100,99,132,0, 100,99,131,2,90,78,71,0,100,100,100,101,132,0,100,101, 131,2,90,79,71,0,100,102,100,103,132,0,100,103,131,2, - 90,80,100,118,100,104,100,105,132,1,90,81,100,106,100,107, + 90,80,100,113,100,104,100,105,132,1,90,81,100,106,100,107, 132,0,90,82,100,108,100,109,132,0,90,83,100,110,100,111, - 132,0,90,84,100,1,83,0,41,119,97,94,1,0,0,67, + 132,0,90,84,100,1,83,0,41,117,97,94,1,0,0,67, 111,114,101,32,105,109,112,108,101,109,101,110,116,97,116,105, 111,110,32,111,102,32,112,97,116,104,45,98,97,115,101,100, 32,105,109,112,111,114,116,46,10,10,84,104,105,115,32,109, @@ -676,2105 +676,2105 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,8,0,0,0,218,5,95,119,114,97,112,40,2, 0,0,115,12,0,0,0,8,1,10,1,18,1,2,128,18, 1,255,128,122,26,95,99,104,101,99,107,95,110,97,109,101, - 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,41, - 1,78,41,2,218,10,95,98,111,111,116,115,116,114,97,112, - 114,158,0,0,0,41,3,114,147,0,0,0,114,148,0,0, - 0,114,158,0,0,0,114,7,0,0,0,114,146,0,0,0, - 114,8,0,0,0,218,11,95,99,104,101,99,107,95,110,97, - 109,101,19,2,0,0,115,14,0,0,0,14,8,8,10,8, - 1,8,2,10,6,4,1,255,128,114,160,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, - 0,0,0,67,0,0,0,115,72,0,0,0,116,0,160,1, - 100,1,116,2,161,2,1,0,124,0,160,3,124,1,161,1, - 92,2,125,2,125,3,124,2,100,2,117,0,114,34,116,4, - 124,3,131,1,114,34,100,3,125,4,116,0,160,1,124,4, - 160,5,124,3,100,4,25,0,161,1,116,6,161,2,1,0, - 124,2,83,0,41,5,122,155,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,32,98,121,32,100,101,108,101,103,97,116, - 105,110,103,32,116,111,10,32,32,32,32,115,101,108,102,46, - 102,105,110,100,95,108,111,97,100,101,114,40,41,46,10,10, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,105,110, - 32,102,97,118,111,114,32,111,102,32,102,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,40,41,46,10,10,32, - 32,32,32,122,90,102,105,110,100,95,109,111,100,117,108,101, - 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, - 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, - 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, - 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, - 122,44,78,111,116,32,105,109,112,111,114,116,105,110,103,32, - 100,105,114,101,99,116,111,114,121,32,123,125,58,32,109,105, - 115,115,105,110,103,32,95,95,105,110,105,116,95,95,114,0, - 0,0,0,41,7,114,99,0,0,0,114,100,0,0,0,114, - 101,0,0,0,218,11,102,105,110,100,95,108,111,97,100,101, - 114,114,4,0,0,0,114,89,0,0,0,218,13,73,109,112, - 111,114,116,87,97,114,110,105,110,103,41,5,114,143,0,0, - 0,218,8,102,117,108,108,110,97,109,101,218,6,108,111,97, - 100,101,114,218,8,112,111,114,116,105,111,110,115,218,3,109, - 115,103,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,17,95,102,105,110,100,95,109,111,100,117,108,101,95, - 115,104,105,109,50,2,0,0,115,18,0,0,0,6,7,2, - 2,4,254,14,6,16,1,4,1,22,1,4,1,255,128,114, - 167,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,6,0,0,0,4,0,0,0,67,0,0,0,115,166,0, - 0,0,124,0,100,1,100,2,133,2,25,0,125,3,124,3, - 116,0,107,3,114,32,100,3,124,1,155,2,100,4,124,3, - 155,2,157,4,125,4,116,1,160,2,100,5,124,4,161,2, - 1,0,116,3,124,4,102,1,105,0,124,2,164,1,142,1, - 130,1,116,4,124,0,131,1,100,6,107,0,114,53,100,7, - 124,1,155,2,157,2,125,4,116,1,160,2,100,5,124,4, - 161,2,1,0,116,5,124,4,131,1,130,1,116,6,124,0, - 100,2,100,8,133,2,25,0,131,1,125,5,124,5,100,9, - 64,0,114,81,100,10,124,5,155,2,100,11,124,1,155,2, - 157,4,125,4,116,3,124,4,102,1,105,0,124,2,164,1, - 142,1,130,1,124,5,83,0,41,12,97,84,2,0,0,80, - 101,114,102,111,114,109,32,98,97,115,105,99,32,118,97,108, - 105,100,105,116,121,32,99,104,101,99,107,105,110,103,32,111, - 102,32,97,32,112,121,99,32,104,101,97,100,101,114,32,97, - 110,100,32,114,101,116,117,114,110,32,116,104,101,32,102,108, - 97,103,115,32,102,105,101,108,100,44,10,32,32,32,32,119, - 104,105,99,104,32,100,101,116,101,114,109,105,110,101,115,32, - 104,111,119,32,116,104,101,32,112,121,99,32,115,104,111,117, - 108,100,32,98,101,32,102,117,114,116,104,101,114,32,118,97, - 108,105,100,97,116,101,100,32,97,103,97,105,110,115,116,32, - 116,104,101,32,115,111,117,114,99,101,46,10,10,32,32,32, - 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, - 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, - 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, - 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, - 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, - 101,100,44,32,116,104,111,117,103,104,46,41,10,10,32,32, - 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, - 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, - 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, - 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, - 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, - 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, - 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, - 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, - 32,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, - 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,115, - 32,105,110,99,111,114,114,101,99,116,32,111,114,32,119,104, - 101,110,32,116,104,101,32,102,108,97,103,115,10,32,32,32, - 32,102,105,101,108,100,32,105,115,32,105,110,118,97,108,105, - 100,46,32,69,79,70,69,114,114,111,114,32,105,115,32,114, - 97,105,115,101,100,32,119,104,101,110,32,116,104,101,32,100, - 97,116,97,32,105,115,32,102,111,117,110,100,32,116,111,32, - 98,101,32,116,114,117,110,99,97,116,101,100,46,10,10,32, - 32,32,32,78,114,31,0,0,0,122,20,98,97,100,32,109, - 97,103,105,99,32,110,117,109,98,101,114,32,105,110,32,122, - 2,58,32,250,2,123,125,233,16,0,0,0,122,40,114,101, - 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, - 114,101,97,100,105,110,103,32,112,121,99,32,104,101,97,100, - 101,114,32,111,102,32,233,8,0,0,0,233,252,255,255,255, - 122,14,105,110,118,97,108,105,100,32,102,108,97,103,115,32, - 122,4,32,105,110,32,41,7,218,12,77,65,71,73,67,95, - 78,85,77,66,69,82,114,159,0,0,0,218,16,95,118,101, - 114,98,111,115,101,95,109,101,115,115,97,103,101,114,142,0, - 0,0,114,4,0,0,0,218,8,69,79,70,69,114,114,111, - 114,114,42,0,0,0,41,6,114,41,0,0,0,114,141,0, - 0,0,218,11,101,120,99,95,100,101,116,97,105,108,115,90, - 5,109,97,103,105,99,114,117,0,0,0,114,16,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 13,95,99,108,97,115,115,105,102,121,95,112,121,99,70,2, - 0,0,115,30,0,0,0,12,16,8,1,16,1,12,1,16, - 1,12,1,10,1,12,1,8,1,16,1,8,2,16,1,16, - 1,4,1,255,128,114,176,0,0,0,99,5,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,67, - 0,0,0,115,124,0,0,0,116,0,124,0,100,1,100,2, - 133,2,25,0,131,1,124,1,100,3,64,0,107,3,114,31, - 100,4,124,3,155,2,157,2,125,5,116,1,160,2,100,5, - 124,5,161,2,1,0,116,3,124,5,102,1,105,0,124,4, - 164,1,142,1,130,1,124,2,100,6,117,1,114,60,116,0, - 124,0,100,2,100,7,133,2,25,0,131,1,124,2,100,3, - 64,0,107,3,114,58,116,3,100,4,124,3,155,2,157,2, - 102,1,105,0,124,4,164,1,142,1,130,1,100,6,83,0, - 100,6,83,0,41,8,97,7,2,0,0,86,97,108,105,100, - 97,116,101,32,97,32,112,121,99,32,97,103,97,105,110,115, - 116,32,116,104,101,32,115,111,117,114,99,101,32,108,97,115, - 116,45,109,111,100,105,102,105,101,100,32,116,105,109,101,46, - 10,10,32,32,32,32,42,100,97,116,97,42,32,105,115,32, - 116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32, - 116,104,101,32,112,121,99,32,102,105,108,101,46,32,40,79, - 110,108,121,32,116,104,101,32,102,105,114,115,116,32,49,54, - 32,98,121,116,101,115,32,97,114,101,10,32,32,32,32,114, - 101,113,117,105,114,101,100,46,41,10,10,32,32,32,32,42, - 115,111,117,114,99,101,95,109,116,105,109,101,42,32,105,115, - 32,116,104,101,32,108,97,115,116,32,109,111,100,105,102,105, - 101,100,32,116,105,109,101,115,116,97,109,112,32,111,102,32, - 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,46, - 10,10,32,32,32,32,42,115,111,117,114,99,101,95,115,105, - 122,101,42,32,105,115,32,78,111,110,101,32,111,114,32,116, - 104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,32,105,110,32,98,121, - 116,101,115,46,10,10,32,32,32,32,42,110,97,109,101,42, - 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, - 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, - 32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,115, - 32,117,115,101,100,32,102,111,114,32,108,111,103,103,105,110, - 103,46,10,10,32,32,32,32,42,101,120,99,95,100,101,116, - 97,105,108,115,42,32,105,115,32,97,32,100,105,99,116,105, - 111,110,97,114,121,32,112,97,115,115,101,100,32,116,111,32, - 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,105, - 116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,32, - 32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,103, - 105,110,103,46,10,10,32,32,32,32,65,110,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,105,102,32,116,104,101,32,98,121,116,101,99,111, - 100,101,32,105,115,32,115,116,97,108,101,46,10,10,32,32, - 32,32,114,170,0,0,0,233,12,0,0,0,114,30,0,0, - 0,122,22,98,121,116,101,99,111,100,101,32,105,115,32,115, - 116,97,108,101,32,102,111,114,32,114,168,0,0,0,78,114, - 169,0,0,0,41,4,114,42,0,0,0,114,159,0,0,0, - 114,173,0,0,0,114,142,0,0,0,41,6,114,41,0,0, - 0,218,12,115,111,117,114,99,101,95,109,116,105,109,101,218, - 11,115,111,117,114,99,101,95,115,105,122,101,114,141,0,0, - 0,114,175,0,0,0,114,117,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,23,95,118,97,108, - 105,100,97,116,101,95,116,105,109,101,115,116,97,109,112,95, - 112,121,99,103,2,0,0,115,20,0,0,0,24,19,10,1, - 12,1,16,1,8,1,22,1,2,255,22,2,8,254,255,128, - 114,180,0,0,0,99,4,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,42, - 0,0,0,124,0,100,1,100,2,133,2,25,0,124,1,107, - 3,114,19,116,0,100,3,124,2,155,2,157,2,102,1,105, - 0,124,3,164,1,142,1,130,1,100,4,83,0,41,5,97, - 243,1,0,0,86,97,108,105,100,97,116,101,32,97,32,104, - 97,115,104,45,98,97,115,101,100,32,112,121,99,32,98,121, - 32,99,104,101,99,107,105,110,103,32,116,104,101,32,114,101, - 97,108,32,115,111,117,114,99,101,32,104,97,115,104,32,97, - 103,97,105,110,115,116,32,116,104,101,32,111,110,101,32,105, - 110,10,32,32,32,32,116,104,101,32,112,121,99,32,104,101, - 97,100,101,114,46,10,10,32,32,32,32,42,100,97,116,97, - 42,32,105,115,32,116,104,101,32,99,111,110,116,101,110,116, - 115,32,111,102,32,116,104,101,32,112,121,99,32,102,105,108, - 101,46,32,40,79,110,108,121,32,116,104,101,32,102,105,114, - 115,116,32,49,54,32,98,121,116,101,115,32,97,114,101,10, - 32,32,32,32,114,101,113,117,105,114,101,100,46,41,10,10, - 32,32,32,32,42,115,111,117,114,99,101,95,104,97,115,104, - 42,32,105,115,32,116,104,101,32,105,109,112,111,114,116,108, - 105,98,46,117,116,105,108,46,115,111,117,114,99,101,95,104, - 97,115,104,40,41,32,111,102,32,116,104,101,32,115,111,117, - 114,99,101,32,102,105,108,101,46,10,10,32,32,32,32,42, - 110,97,109,101,42,32,105,115,32,116,104,101,32,110,97,109, - 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, - 98,101,105,110,103,32,105,109,112,111,114,116,101,100,46,32, - 73,116,32,105,115,32,117,115,101,100,32,102,111,114,32,108, - 111,103,103,105,110,103,46,10,10,32,32,32,32,42,101,120, - 99,95,100,101,116,97,105,108,115,42,32,105,115,32,97,32, - 100,105,99,116,105,111,110,97,114,121,32,112,97,115,115,101, - 100,32,116,111,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,102,32,105,116,32,114,97,105,115,101,100,32,102,111, - 114,10,32,32,32,32,105,109,112,114,111,118,101,100,32,100, - 101,98,117,103,103,105,110,103,46,10,10,32,32,32,32,65, - 110,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,32,105,102,32,116,104,101,32,98, - 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, - 46,10,10,32,32,32,32,114,170,0,0,0,114,169,0,0, - 0,122,46,104,97,115,104,32,105,110,32,98,121,116,101,99, - 111,100,101,32,100,111,101,115,110,39,116,32,109,97,116,99, - 104,32,104,97,115,104,32,111,102,32,115,111,117,114,99,101, - 32,78,41,1,114,142,0,0,0,41,4,114,41,0,0,0, - 218,11,115,111,117,114,99,101,95,104,97,115,104,114,141,0, - 0,0,114,175,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,18,95,118,97,108,105,100,97,116, - 101,95,104,97,115,104,95,112,121,99,131,2,0,0,115,16, - 0,0,0,16,17,2,1,8,1,4,255,2,2,6,254,4, - 255,255,128,114,182,0,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, - 0,115,76,0,0,0,116,0,160,1,124,0,161,1,125,4, - 116,2,124,4,116,3,131,2,114,28,116,4,160,5,100,1, - 124,2,161,2,1,0,124,3,100,2,117,1,114,26,116,6, - 160,7,124,4,124,3,161,2,1,0,124,4,83,0,116,8, - 100,3,160,9,124,2,161,1,124,1,124,2,100,4,141,3, - 130,1,41,5,122,35,67,111,109,112,105,108,101,32,98,121, - 116,101,99,111,100,101,32,97,115,32,102,111,117,110,100,32, - 105,110,32,97,32,112,121,99,46,122,21,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, - 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, - 99,116,32,105,110,32,123,33,114,125,169,2,114,141,0,0, - 0,114,65,0,0,0,41,10,218,7,109,97,114,115,104,97, - 108,90,5,108,111,97,100,115,218,10,105,115,105,110,115,116, - 97,110,99,101,218,10,95,99,111,100,101,95,116,121,112,101, - 114,159,0,0,0,114,173,0,0,0,218,4,95,105,109,112, - 90,16,95,102,105,120,95,99,111,95,102,105,108,101,110,97, - 109,101,114,142,0,0,0,114,89,0,0,0,41,5,114,41, - 0,0,0,114,141,0,0,0,114,132,0,0,0,114,134,0, - 0,0,218,4,99,111,100,101,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,17,95,99,111,109,112,105,108, - 101,95,98,121,116,101,99,111,100,101,155,2,0,0,115,20, - 0,0,0,10,2,10,1,12,1,8,1,12,1,4,1,10, - 2,4,1,6,255,255,128,114,189,0,0,0,99,3,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0, - 0,67,0,0,0,115,70,0,0,0,116,0,116,1,131,1, - 125,3,124,3,160,2,116,3,100,1,131,1,161,1,1,0, - 124,3,160,2,116,3,124,1,131,1,161,1,1,0,124,3, - 160,2,116,3,124,2,131,1,161,1,1,0,124,3,160,2, - 116,4,160,5,124,0,161,1,161,1,1,0,124,3,83,0, - 41,3,122,43,80,114,111,100,117,99,101,32,116,104,101,32, - 100,97,116,97,32,102,111,114,32,97,32,116,105,109,101,115, - 116,97,109,112,45,98,97,115,101,100,32,112,121,99,46,114, - 0,0,0,0,78,41,6,218,9,98,121,116,101,97,114,114, - 97,121,114,172,0,0,0,218,6,101,120,116,101,110,100,114, - 36,0,0,0,114,184,0,0,0,218,5,100,117,109,112,115, - 41,4,114,188,0,0,0,218,5,109,116,105,109,101,114,179, - 0,0,0,114,41,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,22,95,99,111,100,101,95,116, - 111,95,116,105,109,101,115,116,97,109,112,95,112,121,99,168, - 2,0,0,115,14,0,0,0,8,2,14,1,14,1,14,1, - 16,1,4,1,255,128,114,194,0,0,0,84,99,3,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,67,0,0,0,115,80,0,0,0,116,0,116,1,131,1, - 125,3,100,1,124,2,100,1,62,0,66,0,125,4,124,3, - 160,2,116,3,124,4,131,1,161,1,1,0,116,4,124,1, - 131,1,100,2,107,2,115,25,74,0,130,1,124,3,160,2, - 124,1,161,1,1,0,124,3,160,2,116,5,160,6,124,0, - 161,1,161,1,1,0,124,3,83,0,41,4,122,38,80,114, - 111,100,117,99,101,32,116,104,101,32,100,97,116,97,32,102, - 111,114,32,97,32,104,97,115,104,45,98,97,115,101,100,32, - 112,121,99,46,114,3,0,0,0,114,170,0,0,0,78,41, - 7,114,190,0,0,0,114,172,0,0,0,114,191,0,0,0, - 114,36,0,0,0,114,4,0,0,0,114,184,0,0,0,114, - 192,0,0,0,41,5,114,188,0,0,0,114,181,0,0,0, - 90,7,99,104,101,99,107,101,100,114,41,0,0,0,114,16, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,17,95,99,111,100,101,95,116,111,95,104,97,115, - 104,95,112,121,99,178,2,0,0,115,16,0,0,0,8,2, - 12,1,14,1,16,1,10,1,16,1,4,1,255,128,114,195, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,6,0,0,0,67,0,0,0,115,62,0,0, - 0,100,1,100,2,108,0,125,1,116,1,160,2,124,0,161, - 1,106,3,125,2,124,1,160,4,124,2,161,1,125,3,116, - 1,160,5,100,2,100,3,161,2,125,4,124,4,160,6,124, - 0,160,6,124,3,100,1,25,0,161,1,161,1,83,0,41, - 4,122,121,68,101,99,111,100,101,32,98,121,116,101,115,32, - 114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,117, - 114,99,101,32,99,111,100,101,32,97,110,100,32,114,101,116, - 117,114,110,32,116,104,101,32,115,116,114,105,110,103,46,10, - 10,32,32,32,32,85,110,105,118,101,114,115,97,108,32,110, - 101,119,108,105,110,101,32,115,117,112,112,111,114,116,32,105, - 115,32,117,115,101,100,32,105,110,32,116,104,101,32,100,101, - 99,111,100,105,110,103,46,10,32,32,32,32,114,0,0,0, - 0,78,84,41,7,218,8,116,111,107,101,110,105,122,101,114, - 91,0,0,0,90,7,66,121,116,101,115,73,79,90,8,114, - 101,97,100,108,105,110,101,90,15,100,101,116,101,99,116,95, - 101,110,99,111,100,105,110,103,90,25,73,110,99,114,101,109, - 101,110,116,97,108,78,101,119,108,105,110,101,68,101,99,111, - 100,101,114,218,6,100,101,99,111,100,101,41,5,218,12,115, - 111,117,114,99,101,95,98,121,116,101,115,114,196,0,0,0, - 90,21,115,111,117,114,99,101,95,98,121,116,101,115,95,114, - 101,97,100,108,105,110,101,218,8,101,110,99,111,100,105,110, - 103,90,15,110,101,119,108,105,110,101,95,100,101,99,111,100, - 101,114,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,13,100,101,99,111,100,101,95,115,111,117,114,99,101, - 189,2,0,0,115,12,0,0,0,8,5,12,1,10,1,12, - 1,20,1,255,128,114,200,0,0,0,169,2,114,164,0,0, - 0,218,26,115,117,98,109,111,100,117,108,101,95,115,101,97, - 114,99,104,95,108,111,99,97,116,105,111,110,115,99,2,0, - 0,0,0,0,0,0,2,0,0,0,9,0,0,0,8,0, - 0,0,67,0,0,0,115,52,1,0,0,124,1,100,1,117, - 0,114,28,100,2,125,1,116,0,124,2,100,3,131,2,114, - 27,122,7,124,2,160,1,124,0,161,1,125,1,87,0,110, - 35,4,0,116,2,121,153,1,0,1,0,1,0,89,0,110, - 27,110,26,116,3,160,4,124,1,161,1,125,1,116,5,124, - 1,131,1,115,54,122,9,116,6,116,3,160,7,161,0,124, - 1,131,2,125,1,87,0,110,7,4,0,116,8,121,152,1, - 0,1,0,1,0,89,0,116,9,106,10,124,0,124,2,124, - 1,100,4,141,3,125,4,100,5,124,4,95,11,124,2,100, - 1,117,0,114,96,116,12,131,0,68,0,93,21,92,2,125, - 5,125,6,124,1,160,13,116,14,124,6,131,1,161,1,114, - 93,124,5,124,0,124,1,131,2,125,2,124,2,124,4,95, - 15,1,0,113,96,113,72,100,1,83,0,124,3,116,16,117, - 0,114,127,116,0,124,2,100,6,131,2,114,126,122,7,124, - 2,160,17,124,0,161,1,125,7,87,0,110,8,4,0,116, - 2,121,151,1,0,1,0,1,0,89,0,110,9,124,7,114, - 126,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, - 4,106,18,103,0,107,2,114,149,124,1,114,149,116,19,124, - 1,131,1,100,7,25,0,125,8,124,4,106,18,160,20,124, - 8,161,1,1,0,124,4,83,0,119,0,119,0,119,0,41, - 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, - 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, - 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, - 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, - 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, - 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, - 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, - 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, - 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, - 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, - 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, - 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, - 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, - 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, - 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, - 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, - 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, - 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, - 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, - 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, - 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, - 12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,218, - 6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,99, - 107,97,103,101,114,0,0,0,0,41,21,114,153,0,0,0, - 114,203,0,0,0,114,142,0,0,0,114,18,0,0,0,114, - 103,0,0,0,114,86,0,0,0,114,67,0,0,0,114,82, - 0,0,0,114,76,0,0,0,114,159,0,0,0,218,10,77, - 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, - 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, - 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, - 97,100,101,114,115,114,58,0,0,0,114,136,0,0,0,114, - 164,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 206,0,0,0,114,202,0,0,0,114,74,0,0,0,114,61, - 0,0,0,41,9,114,141,0,0,0,90,8,108,111,99,97, - 116,105,111,110,114,164,0,0,0,114,202,0,0,0,218,4, - 115,112,101,99,218,12,108,111,97,100,101,114,95,99,108,97, - 115,115,218,8,115,117,102,102,105,120,101,115,114,206,0,0, - 0,90,7,100,105,114,110,97,109,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,23,115,112,101,99,95, - 102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105, - 111,110,206,2,0,0,115,86,0,0,0,8,12,4,4,10, - 1,2,2,14,1,12,1,4,1,2,251,10,7,8,1,2, - 1,18,1,12,1,2,1,16,8,6,1,8,3,14,1,14, - 1,10,1,6,1,4,1,2,253,4,5,8,3,10,2,2, - 1,14,1,12,1,4,1,4,2,6,1,2,128,6,2,10, - 1,4,1,12,1,12,1,4,2,2,244,2,228,2,249,255, - 128,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, - 88,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,90,4,100,3,90,5,101,6,111,15,100,4,101,7, - 118,0,90,8,101,9,100,5,100,6,132,0,131,1,90,10, - 101,11,100,7,100,8,132,0,131,1,90,12,101,11,100,14, - 100,10,100,11,132,1,131,1,90,13,101,11,100,15,100,12, - 100,13,132,1,131,1,90,14,100,9,83,0,41,16,218,21, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, - 32,102,105,110,100,101,114,32,102,111,114,32,109,111,100,117, - 108,101,115,32,100,101,99,108,97,114,101,100,32,105,110,32, - 116,104,101,32,87,105,110,100,111,119,115,32,114,101,103,105, - 115,116,114,121,46,122,59,83,111,102,116,119,97,114,101,92, - 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, - 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, - 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, - 101,125,122,65,83,111,102,116,119,97,114,101,92,80,121,116, - 104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123, - 115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100, - 117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,92, - 68,101,98,117,103,122,6,95,100,46,112,121,100,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0, - 0,0,67,0,0,0,115,50,0,0,0,122,8,116,0,160, - 1,116,0,106,2,124,0,161,2,87,0,83,0,4,0,116, - 3,121,24,1,0,1,0,1,0,116,0,160,1,116,0,106, - 4,124,0,161,2,6,0,89,0,83,0,119,0,114,69,0, - 0,0,41,5,218,6,119,105,110,114,101,103,90,7,79,112, - 101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82, - 69,78,84,95,85,83,69,82,114,76,0,0,0,90,18,72, - 75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78, - 69,114,19,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103, - 105,115,116,114,121,35,3,0,0,115,12,0,0,0,2,2, - 16,1,12,1,18,1,2,255,255,128,122,36,87,105,110,100, - 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, - 114,46,95,111,112,101,110,95,114,101,103,105,115,116,114,121, - 99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,8,0,0,0,67,0,0,0,115,130,0,0,0,124,0, - 106,0,114,7,124,0,106,1,125,2,110,3,124,0,106,2, - 125,2,124,2,106,3,124,1,100,1,116,4,106,5,100,0, - 100,2,133,2,25,0,22,0,100,3,141,2,125,3,122,30, - 124,0,160,6,124,3,161,1,143,14,125,4,116,7,160,8, - 124,4,100,4,161,2,125,5,87,0,100,0,4,0,4,0, - 131,3,1,0,110,8,49,0,115,47,119,1,1,0,1,0, - 1,0,89,0,1,0,87,0,124,5,83,0,4,0,116,9, - 121,64,1,0,1,0,1,0,89,0,100,0,83,0,119,0, - 41,5,78,122,5,37,100,46,37,100,114,44,0,0,0,41, - 2,114,163,0,0,0,90,11,115,121,115,95,118,101,114,115, - 105,111,110,114,10,0,0,0,41,10,218,11,68,69,66,85, - 71,95,66,85,73,76,68,218,18,82,69,71,73,83,84,82, - 89,95,75,69,89,95,68,69,66,85,71,218,12,82,69,71, - 73,83,84,82,89,95,75,69,89,114,89,0,0,0,114,15, - 0,0,0,218,12,118,101,114,115,105,111,110,95,105,110,102, - 111,114,216,0,0,0,114,215,0,0,0,90,10,81,117,101, - 114,121,86,97,108,117,101,114,76,0,0,0,41,6,218,3, - 99,108,115,114,163,0,0,0,90,12,114,101,103,105,115,116, - 114,121,95,107,101,121,114,20,0,0,0,90,4,104,107,101, - 121,218,8,102,105,108,101,112,97,116,104,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,16,95,115,101,97, - 114,99,104,95,114,101,103,105,115,116,114,121,42,3,0,0, - 115,30,0,0,0,6,2,8,1,6,2,6,1,16,1,6, - 255,2,2,12,1,26,1,18,128,4,3,12,254,6,1,2, - 255,255,128,122,38,87,105,110,100,111,119,115,82,101,103,105, - 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0, - 0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0, - 0,67,0,0,0,115,120,0,0,0,124,0,160,0,124,1, - 161,1,125,4,124,4,100,0,117,0,114,11,100,0,83,0, - 122,6,116,1,124,4,131,1,1,0,87,0,110,9,4,0, - 116,2,121,59,1,0,1,0,1,0,89,0,100,0,83,0, - 116,3,131,0,68,0,93,26,92,2,125,5,125,6,124,4, - 160,4,116,5,124,6,131,1,161,1,114,56,116,6,106,7, - 124,1,124,5,124,1,124,4,131,2,124,4,100,1,141,3, - 125,7,124,7,2,0,1,0,83,0,113,30,100,0,83,0, - 119,0,41,2,78,114,204,0,0,0,41,8,114,223,0,0, - 0,114,75,0,0,0,114,76,0,0,0,114,208,0,0,0, - 114,58,0,0,0,114,136,0,0,0,114,159,0,0,0,218, - 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, - 114,41,8,114,221,0,0,0,114,163,0,0,0,114,65,0, - 0,0,218,6,116,97,114,103,101,116,114,222,0,0,0,114, - 164,0,0,0,114,212,0,0,0,114,210,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,9,102, - 105,110,100,95,115,112,101,99,57,3,0,0,115,36,0,0, - 0,10,2,8,1,4,1,2,1,12,1,12,1,6,1,14, - 1,14,1,6,1,8,1,2,1,6,254,8,3,2,252,4, - 255,2,254,255,128,122,31,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, - 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 42,0,0,0,116,0,160,1,100,1,116,2,161,2,1,0, - 124,0,160,3,124,1,124,2,161,2,125,3,124,3,100,2, - 117,1,114,19,124,3,106,4,83,0,100,2,83,0,41,3, - 122,106,70,105,110,100,32,109,111,100,117,108,101,32,110,97, - 109,101,100,32,105,110,32,116,104,101,32,114,101,103,105,115, - 116,114,121,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,114, + 69,0,0,0,41,2,218,10,95,98,111,111,116,115,116,114, + 97,112,114,158,0,0,0,41,3,114,147,0,0,0,114,148, + 0,0,0,114,158,0,0,0,114,7,0,0,0,114,146,0, + 0,0,114,8,0,0,0,218,11,95,99,104,101,99,107,95, + 110,97,109,101,19,2,0,0,115,14,0,0,0,14,8,8, + 10,8,1,8,2,10,6,4,1,255,128,114,160,0,0,0, + 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,6,0,0,0,67,0,0,0,115,72,0,0,0,116,0, + 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, + 161,1,92,2,125,2,125,3,124,2,100,2,117,0,114,34, + 116,4,124,3,131,1,114,34,100,3,125,4,116,0,160,1, + 124,4,160,5,124,3,100,4,25,0,161,1,116,6,161,2, + 1,0,124,2,83,0,41,5,122,155,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, + 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, + 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, + 10,10,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, + 10,32,32,32,32,122,90,102,105,110,100,95,109,111,100,117, + 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, + 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, + 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,122,112,87,105, + 100,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, + 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, + 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, + 114,0,0,0,0,41,7,114,99,0,0,0,114,100,0,0, + 0,114,101,0,0,0,218,11,102,105,110,100,95,108,111,97, + 100,101,114,114,4,0,0,0,114,89,0,0,0,218,13,73, + 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,143, + 0,0,0,218,8,102,117,108,108,110,97,109,101,218,6,108, + 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, + 3,109,115,103,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, + 101,95,115,104,105,109,50,2,0,0,115,18,0,0,0,6, + 7,2,2,4,254,14,6,16,1,4,1,22,1,4,1,255, + 128,114,167,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, + 166,0,0,0,124,0,100,1,100,2,133,2,25,0,125,3, + 124,3,116,0,107,3,114,32,100,3,124,1,155,2,100,4, + 124,3,155,2,157,4,125,4,116,1,160,2,100,5,124,4, + 161,2,1,0,116,3,124,4,102,1,105,0,124,2,164,1, + 142,1,130,1,116,4,124,0,131,1,100,6,107,0,114,53, + 100,7,124,1,155,2,157,2,125,4,116,1,160,2,100,5, + 124,4,161,2,1,0,116,5,124,4,131,1,130,1,116,6, + 124,0,100,2,100,8,133,2,25,0,131,1,125,5,124,5, + 100,9,64,0,114,81,100,10,124,5,155,2,100,11,124,1, + 155,2,157,4,125,4,116,3,124,4,102,1,105,0,124,2, + 164,1,142,1,130,1,124,5,83,0,41,12,97,84,2,0, + 0,80,101,114,102,111,114,109,32,98,97,115,105,99,32,118, + 97,108,105,100,105,116,121,32,99,104,101,99,107,105,110,103, + 32,111,102,32,97,32,112,121,99,32,104,101,97,100,101,114, + 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, + 102,108,97,103,115,32,102,105,101,108,100,44,10,32,32,32, + 32,119,104,105,99,104,32,100,101,116,101,114,109,105,110,101, + 115,32,104,111,119,32,116,104,101,32,112,121,99,32,115,104, + 111,117,108,100,32,98,101,32,102,117,114,116,104,101,114,32, + 118,97,108,105,100,97,116,101,100,32,97,103,97,105,110,115, + 116,32,116,104,101,32,115,111,117,114,99,101,46,10,10,32, + 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, + 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, + 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, + 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, + 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, + 105,114,101,100,44,32,116,104,111,117,103,104,46,41,10,10, + 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, + 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, + 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, + 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, + 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, + 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, + 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, + 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, + 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, + 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, + 32,32,32,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, + 104,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32, + 105,115,32,105,110,99,111,114,114,101,99,116,32,111,114,32, + 119,104,101,110,32,116,104,101,32,102,108,97,103,115,10,32, + 32,32,32,102,105,101,108,100,32,105,115,32,105,110,118,97, + 108,105,100,46,32,69,79,70,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, + 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, + 111,32,98,101,32,116,114,117,110,99,97,116,101,100,46,10, + 10,32,32,32,32,78,114,31,0,0,0,122,20,98,97,100, + 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, + 32,122,2,58,32,250,2,123,125,233,16,0,0,0,122,40, + 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, + 101,32,114,101,97,100,105,110,103,32,112,121,99,32,104,101, + 97,100,101,114,32,111,102,32,233,8,0,0,0,233,252,255, + 255,255,122,14,105,110,118,97,108,105,100,32,102,108,97,103, + 115,32,122,4,32,105,110,32,41,7,218,12,77,65,71,73, + 67,95,78,85,77,66,69,82,114,159,0,0,0,218,16,95, + 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,114, + 142,0,0,0,114,4,0,0,0,218,8,69,79,70,69,114, + 114,111,114,114,42,0,0,0,41,6,114,41,0,0,0,114, + 141,0,0,0,218,11,101,120,99,95,100,101,116,97,105,108, + 115,90,5,109,97,103,105,99,114,117,0,0,0,114,16,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,13,95,99,108,97,115,115,105,102,121,95,112,121,99, + 70,2,0,0,115,30,0,0,0,12,16,8,1,16,1,12, + 1,16,1,12,1,10,1,12,1,8,1,16,1,8,2,16, + 1,16,1,4,1,255,128,114,176,0,0,0,99,5,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, + 0,67,0,0,0,115,124,0,0,0,116,0,124,0,100,1, + 100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3, + 114,31,100,4,124,3,155,2,157,2,125,5,116,1,160,2, + 100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0, + 124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,60, + 116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2, + 100,3,64,0,107,3,114,58,116,3,100,4,124,3,155,2, + 157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6, + 83,0,100,6,83,0,41,8,97,7,2,0,0,86,97,108, + 105,100,97,116,101,32,97,32,112,121,99,32,97,103,97,105, + 110,115,116,32,116,104,101,32,115,111,117,114,99,101,32,108, + 97,115,116,45,109,111,100,105,102,105,101,100,32,116,105,109, + 101,46,10,10,32,32,32,32,42,100,97,116,97,42,32,105, + 115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111, + 102,32,116,104,101,32,112,121,99,32,102,105,108,101,46,32, + 40,79,110,108,121,32,116,104,101,32,102,105,114,115,116,32, + 49,54,32,98,121,116,101,115,32,97,114,101,10,32,32,32, + 32,114,101,113,117,105,114,101,100,46,41,10,10,32,32,32, + 32,42,115,111,117,114,99,101,95,109,116,105,109,101,42,32, + 105,115,32,116,104,101,32,108,97,115,116,32,109,111,100,105, + 102,105,101,100,32,116,105,109,101,115,116,97,109,112,32,111, + 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,46,10,10,32,32,32,32,42,115,111,117,114,99,101,95, + 115,105,122,101,42,32,105,115,32,78,111,110,101,32,111,114, + 32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101, + 32,115,111,117,114,99,101,32,102,105,108,101,32,105,110,32, + 98,121,116,101,115,46,10,10,32,32,32,32,42,110,97,109, + 101,42,32,105,115,32,116,104,101,32,110,97,109,101,32,111, + 102,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, + 110,103,32,105,109,112,111,114,116,101,100,46,32,73,116,32, + 105,115,32,117,115,101,100,32,102,111,114,32,108,111,103,103, + 105,110,103,46,10,10,32,32,32,32,42,101,120,99,95,100, + 101,116,97,105,108,115,42,32,105,115,32,97,32,100,105,99, + 116,105,111,110,97,114,121,32,112,97,115,115,101,100,32,116, + 111,32,73,109,112,111,114,116,69,114,114,111,114,32,105,102, + 32,105,116,32,114,97,105,115,101,100,32,102,111,114,10,32, + 32,32,32,105,109,112,114,111,118,101,100,32,100,101,98,117, + 103,103,105,110,103,46,10,10,32,32,32,32,65,110,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,32,105,102,32,116,104,101,32,98,121,116,101, + 99,111,100,101,32,105,115,32,115,116,97,108,101,46,10,10, + 32,32,32,32,114,170,0,0,0,233,12,0,0,0,114,30, + 0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,115, + 32,115,116,97,108,101,32,102,111,114,32,114,168,0,0,0, + 78,114,169,0,0,0,41,4,114,42,0,0,0,114,159,0, + 0,0,114,173,0,0,0,114,142,0,0,0,41,6,114,41, + 0,0,0,218,12,115,111,117,114,99,101,95,109,116,105,109, + 101,218,11,115,111,117,114,99,101,95,115,105,122,101,114,141, + 0,0,0,114,175,0,0,0,114,117,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,118, + 97,108,105,100,97,116,101,95,116,105,109,101,115,116,97,109, + 112,95,112,121,99,103,2,0,0,115,20,0,0,0,24,19, + 10,1,12,1,16,1,8,1,22,1,2,255,22,2,8,254, + 255,128,114,180,0,0,0,99,4,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, + 115,42,0,0,0,124,0,100,1,100,2,133,2,25,0,124, + 1,107,3,114,19,116,0,100,3,124,2,155,2,157,2,102, + 1,105,0,124,3,164,1,142,1,130,1,100,4,83,0,41, + 5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,97, + 32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,32, + 98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,32, + 114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,104, + 32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,101, + 32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,32, + 104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,97, + 116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,101, + 110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,102, + 105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,102, + 105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,114, + 101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,41, + 10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,97, + 115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,114, + 116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,101, + 95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, + 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, + 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, + 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114, + 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42, + 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32, + 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115, + 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32, + 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100, + 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32, + 32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,101, + 32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97, + 108,101,46,10,10,32,32,32,32,114,170,0,0,0,114,169, + 0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,116, + 101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,97, + 116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,114, + 99,101,32,78,41,1,114,142,0,0,0,41,4,114,41,0, + 0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,114, + 141,0,0,0,114,175,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,18,95,118,97,108,105,100, + 97,116,101,95,104,97,115,104,95,112,121,99,131,2,0,0, + 115,16,0,0,0,16,17,2,1,8,1,4,255,2,2,6, + 254,4,255,255,128,114,182,0,0,0,99,4,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,76,0,0,0,116,0,160,1,124,0,161,1, + 125,4,116,2,124,4,116,3,131,2,114,28,116,4,160,5, + 100,1,124,2,161,2,1,0,124,3,100,2,117,1,114,26, + 116,6,160,7,124,4,124,3,161,2,1,0,124,4,83,0, + 116,8,100,3,160,9,124,2,161,1,124,1,124,2,100,4, + 141,3,130,1,41,5,122,35,67,111,109,112,105,108,101,32, + 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, + 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, + 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, + 114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,98, + 106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,141, + 0,0,0,114,65,0,0,0,41,10,218,7,109,97,114,115, + 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, + 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, + 112,101,114,159,0,0,0,114,173,0,0,0,218,4,95,105, + 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, + 110,97,109,101,114,142,0,0,0,114,89,0,0,0,41,5, + 114,41,0,0,0,114,141,0,0,0,114,132,0,0,0,114, + 134,0,0,0,218,4,99,111,100,101,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,17,95,99,111,109,112, + 105,108,101,95,98,121,116,101,99,111,100,101,155,2,0,0, + 115,20,0,0,0,10,2,10,1,12,1,8,1,12,1,4, + 1,10,2,4,1,6,255,255,128,114,189,0,0,0,99,3, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, + 0,0,0,67,0,0,0,115,70,0,0,0,116,0,116,1, + 131,1,125,3,124,3,160,2,116,3,100,1,131,1,161,1, + 1,0,124,3,160,2,116,3,124,1,131,1,161,1,1,0, + 124,3,160,2,116,3,124,2,131,1,161,1,1,0,124,3, + 160,2,116,4,160,5,124,0,161,1,161,1,1,0,124,3, + 83,0,41,3,122,43,80,114,111,100,117,99,101,32,116,104, + 101,32,100,97,116,97,32,102,111,114,32,97,32,116,105,109, + 101,115,116,97,109,112,45,98,97,115,101,100,32,112,121,99, + 46,114,0,0,0,0,78,41,6,218,9,98,121,116,101,97, + 114,114,97,121,114,172,0,0,0,218,6,101,120,116,101,110, + 100,114,36,0,0,0,114,184,0,0,0,218,5,100,117,109, + 112,115,41,4,114,188,0,0,0,218,5,109,116,105,109,101, + 114,179,0,0,0,114,41,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,22,95,99,111,100,101, + 95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121, + 99,168,2,0,0,115,14,0,0,0,8,2,14,1,14,1, + 14,1,16,1,4,1,255,128,114,194,0,0,0,84,99,3, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,80,0,0,0,116,0,116,1, + 131,1,125,3,100,1,124,2,100,1,62,0,66,0,125,4, + 124,3,160,2,116,3,124,4,131,1,161,1,1,0,116,4, + 124,1,131,1,100,2,107,2,115,25,74,0,130,1,124,3, + 160,2,124,1,161,1,1,0,124,3,160,2,116,5,160,6, + 124,0,161,1,161,1,1,0,124,3,83,0,41,4,122,38, + 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, + 32,102,111,114,32,97,32,104,97,115,104,45,98,97,115,101, + 100,32,112,121,99,46,114,3,0,0,0,114,170,0,0,0, + 78,41,7,114,190,0,0,0,114,172,0,0,0,114,191,0, + 0,0,114,36,0,0,0,114,4,0,0,0,114,184,0,0, + 0,114,192,0,0,0,41,5,114,188,0,0,0,114,181,0, + 0,0,90,7,99,104,101,99,107,101,100,114,41,0,0,0, + 114,16,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,17,95,99,111,100,101,95,116,111,95,104, + 97,115,104,95,112,121,99,178,2,0,0,115,16,0,0,0, + 8,2,12,1,14,1,16,1,10,1,16,1,4,1,255,128, + 114,195,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62, + 0,0,0,100,1,100,2,108,0,125,1,116,1,160,2,124, + 0,161,1,106,3,125,2,124,1,160,4,124,2,161,1,125, + 3,116,1,160,5,100,2,100,3,161,2,125,4,124,4,160, + 6,124,0,160,6,124,3,100,1,25,0,161,1,161,1,83, + 0,41,4,122,121,68,101,99,111,100,101,32,98,121,116,101, + 115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115, + 111,117,114,99,101,32,99,111,100,101,32,97,110,100,32,114, + 101,116,117,114,110,32,116,104,101,32,115,116,114,105,110,103, + 46,10,10,32,32,32,32,85,110,105,118,101,114,115,97,108, + 32,110,101,119,108,105,110,101,32,115,117,112,112,111,114,116, + 32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32, + 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,0, + 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, + 101,114,91,0,0,0,90,7,66,121,116,101,115,73,79,90, + 8,114,101,97,100,108,105,110,101,90,15,100,101,116,101,99, + 116,95,101,110,99,111,100,105,110,103,90,25,73,110,99,114, + 101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101, + 99,111,100,101,114,218,6,100,101,99,111,100,101,41,5,218, + 12,115,111,117,114,99,101,95,98,121,116,101,115,114,196,0, + 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, + 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, + 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, + 111,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, + 99,101,189,2,0,0,115,12,0,0,0,8,5,12,1,10, + 1,12,1,20,1,255,128,114,200,0,0,0,169,2,114,164, + 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, + 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, + 2,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, + 8,0,0,0,67,0,0,0,115,52,1,0,0,124,1,100, + 1,117,0,114,28,100,2,125,1,116,0,124,2,100,3,131, + 2,114,27,122,7,124,2,160,1,124,0,161,1,125,1,87, + 0,110,35,4,0,116,2,121,153,1,0,1,0,1,0,89, + 0,110,27,110,26,116,3,160,4,124,1,161,1,125,1,116, + 5,124,1,131,1,115,54,122,9,116,6,116,3,160,7,161, + 0,124,1,131,2,125,1,87,0,110,7,4,0,116,8,121, + 152,1,0,1,0,1,0,89,0,116,9,106,10,124,0,124, + 2,124,1,100,4,141,3,125,4,100,5,124,4,95,11,124, + 2,100,1,117,0,114,96,116,12,131,0,68,0,93,21,92, + 2,125,5,125,6,124,1,160,13,116,14,124,6,131,1,161, + 1,114,93,124,5,124,0,124,1,131,2,125,2,124,2,124, + 4,95,15,1,0,113,96,113,72,100,1,83,0,124,3,116, + 16,117,0,114,127,116,0,124,2,100,6,131,2,114,126,122, + 7,124,2,160,17,124,0,161,1,125,7,87,0,110,8,4, + 0,116,2,121,151,1,0,1,0,1,0,89,0,110,9,124, + 7,114,126,103,0,124,4,95,18,110,3,124,3,124,4,95, + 18,124,4,106,18,103,0,107,2,114,149,124,1,114,149,116, + 19,124,1,131,1,100,7,25,0,125,8,124,4,106,18,160, + 20,124,8,161,1,1,0,124,4,83,0,119,0,119,0,119, + 0,41,8,97,61,1,0,0,82,101,116,117,114,110,32,97, + 32,109,111,100,117,108,101,32,115,112,101,99,32,98,97,115, + 101,100,32,111,110,32,97,32,102,105,108,101,32,108,111,99, + 97,116,105,111,110,46,10,10,32,32,32,32,84,111,32,105, + 110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101, + 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, + 107,97,103,101,44,32,115,101,116,10,32,32,32,32,115,117, + 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, + 111,99,97,116,105,111,110,115,32,116,111,32,97,32,108,105, + 115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32, + 112,97,116,104,115,46,32,32,65,110,10,32,32,32,32,101, + 109,112,116,121,32,108,105,115,116,32,105,115,32,115,117,102, + 102,105,99,105,101,110,116,44,32,116,104,111,117,103,104,32, + 105,116,115,32,110,111,116,32,111,116,104,101,114,119,105,115, + 101,32,117,115,101,102,117,108,32,116,111,32,116,104,101,10, + 32,32,32,32,105,109,112,111,114,116,32,115,121,115,116,101, + 109,46,10,10,32,32,32,32,84,104,101,32,108,111,97,100, + 101,114,32,109,117,115,116,32,116,97,107,101,32,97,32,115, + 112,101,99,32,97,115,32,105,116,115,32,111,110,108,121,32, + 95,95,105,110,105,116,95,95,40,41,32,97,114,103,46,10, + 10,32,32,32,32,78,122,9,60,117,110,107,110,111,119,110, + 62,218,12,103,101,116,95,102,105,108,101,110,97,109,101,169, + 1,218,6,111,114,105,103,105,110,84,218,10,105,115,95,112, + 97,99,107,97,103,101,114,0,0,0,0,41,21,114,153,0, + 0,0,114,203,0,0,0,114,142,0,0,0,114,18,0,0, + 0,114,103,0,0,0,114,86,0,0,0,114,67,0,0,0, + 114,82,0,0,0,114,76,0,0,0,114,159,0,0,0,218, + 10,77,111,100,117,108,101,83,112,101,99,90,13,95,115,101, + 116,95,102,105,108,101,97,116,116,114,218,27,95,103,101,116, + 95,115,117,112,112,111,114,116,101,100,95,102,105,108,101,95, + 108,111,97,100,101,114,115,114,58,0,0,0,114,136,0,0, + 0,114,164,0,0,0,218,9,95,80,79,80,85,76,65,84, + 69,114,206,0,0,0,114,202,0,0,0,114,74,0,0,0, + 114,61,0,0,0,41,9,114,141,0,0,0,90,8,108,111, + 99,97,116,105,111,110,114,164,0,0,0,114,202,0,0,0, + 218,4,115,112,101,99,218,12,108,111,97,100,101,114,95,99, + 108,97,115,115,218,8,115,117,102,102,105,120,101,115,114,206, + 0,0,0,90,7,100,105,114,110,97,109,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,23,115,112,101, + 99,95,102,114,111,109,95,102,105,108,101,95,108,111,99,97, + 116,105,111,110,206,2,0,0,115,86,0,0,0,8,12,4, + 4,10,1,2,2,14,1,12,1,4,1,2,251,10,7,8, + 1,2,1,18,1,12,1,2,1,16,8,6,1,8,3,14, + 1,14,1,10,1,6,1,4,1,2,253,4,5,8,3,10, + 2,2,1,14,1,12,1,4,1,4,2,6,1,2,128,6, + 2,10,1,4,1,12,1,12,1,4,2,2,244,2,228,2, + 249,255,128,114,213,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, + 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, + 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, + 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, + 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, + 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, + 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, + 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, + 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, + 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, + 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, + 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, + 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, + 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, + 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, + 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, + 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, + 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, + 125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, + 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, + 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, + 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, + 69,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, + 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, + 82,82,69,78,84,95,85,83,69,82,114,76,0,0,0,90, + 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, + 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, + 101,103,105,115,116,114,121,35,3,0,0,115,12,0,0,0, + 2,2,16,1,12,1,18,1,2,255,255,128,122,36,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,40, - 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, - 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, - 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, - 32,51,46,49,50,59,32,117,115,101,32,102,105,110,100,95, - 115,112,101,99,40,41,32,105,110,115,116,101,97,100,78,169, - 5,114,99,0,0,0,114,100,0,0,0,114,101,0,0,0, - 114,226,0,0,0,114,164,0,0,0,169,4,114,221,0,0, - 0,114,163,0,0,0,114,65,0,0,0,114,210,0,0,0, + 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, + 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0, + 124,0,106,0,114,7,124,0,106,1,125,2,110,3,124,0, + 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5, + 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3, + 122,30,124,0,160,6,124,3,161,1,143,14,125,4,116,7, + 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0, + 4,0,131,3,1,0,110,8,49,0,115,47,119,1,1,0, + 1,0,1,0,89,0,1,0,87,0,124,5,83,0,4,0, + 116,9,121,64,1,0,1,0,1,0,89,0,100,0,83,0, + 119,0,41,5,78,122,5,37,100,46,37,100,114,44,0,0, + 0,41,2,114,163,0,0,0,90,11,115,121,115,95,118,101, + 114,115,105,111,110,114,10,0,0,0,41,10,218,11,68,69, + 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, + 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, + 69,71,73,83,84,82,89,95,75,69,89,114,89,0,0,0, + 114,15,0,0,0,218,12,118,101,114,115,105,111,110,95,105, + 110,102,111,114,216,0,0,0,114,215,0,0,0,90,10,81, + 117,101,114,121,86,97,108,117,101,114,76,0,0,0,41,6, + 218,3,99,108,115,114,163,0,0,0,90,12,114,101,103,105, + 115,116,114,121,95,107,101,121,114,20,0,0,0,90,4,104, + 107,101,121,218,8,102,105,108,101,112,97,116,104,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,115, + 101,97,114,99,104,95,114,101,103,105,115,116,114,121,42,3, + 0,0,115,30,0,0,0,6,2,8,1,6,2,6,1,16, + 1,6,255,2,2,12,1,26,1,18,128,4,3,12,254,6, + 1,2,255,255,128,122,38,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,114,101,103,105,115,116,114,121,78,99,4, + 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8, + 0,0,0,67,0,0,0,115,120,0,0,0,124,0,160,0, + 124,1,161,1,125,4,124,4,100,0,117,0,114,11,100,0, + 83,0,122,6,116,1,124,4,131,1,1,0,87,0,110,9, + 4,0,116,2,121,59,1,0,1,0,1,0,89,0,100,0, + 83,0,116,3,131,0,68,0,93,26,92,2,125,5,125,6, + 124,4,160,4,116,5,124,6,131,1,161,1,114,56,116,6, + 106,7,124,1,124,5,124,1,124,4,131,2,124,4,100,1, + 141,3,125,7,124,7,2,0,1,0,83,0,113,30,100,0, + 83,0,119,0,41,2,78,114,204,0,0,0,41,8,114,223, + 0,0,0,114,75,0,0,0,114,76,0,0,0,114,208,0, + 0,0,114,58,0,0,0,114,136,0,0,0,114,159,0,0, + 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, + 100,101,114,41,8,114,221,0,0,0,114,163,0,0,0,114, + 65,0,0,0,218,6,116,97,114,103,101,116,114,222,0,0, + 0,114,164,0,0,0,114,212,0,0,0,114,210,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,73,3,0,0, - 115,16,0,0,0,6,7,2,2,4,254,12,3,8,1,6, - 1,4,2,255,128,122,33,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,41,2,78,78,41,1,78,41, - 15,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, - 114,152,0,0,0,114,219,0,0,0,114,218,0,0,0,218, - 11,95,77,83,95,87,73,78,68,79,87,83,218,18,69,88, - 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, - 114,217,0,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,216,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,223,0,0,0,114,226,0,0,0,114, - 229,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,214,0,0,0,23,3,0, - 0,115,32,0,0,0,8,0,4,2,2,3,2,255,2,4, - 2,255,12,3,2,2,10,1,2,6,10,1,2,14,12,1, - 2,15,16,1,255,128,114,214,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, - 9,132,0,90,7,100,10,83,0,41,11,218,13,95,76,111, - 97,100,101,114,66,97,115,105,99,115,122,83,66,97,115,101, - 32,99,108,97,115,115,32,111,102,32,99,111,109,109,111,110, - 32,99,111,100,101,32,110,101,101,100,101,100,32,98,121,32, - 98,111,116,104,32,83,111,117,114,99,101,76,111,97,100,101, - 114,32,97,110,100,10,32,32,32,32,83,111,117,114,99,101, - 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,124, - 0,160,1,124,1,161,1,131,1,100,1,25,0,125,2,124, - 2,160,2,100,2,100,1,161,2,100,3,25,0,125,3,124, - 1,160,3,100,2,161,1,100,4,25,0,125,4,124,3,100, - 5,107,2,111,31,124,4,100,5,107,3,83,0,41,7,122, - 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, - 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, - 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, - 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, - 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, - 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, - 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,3, - 0,0,0,114,97,0,0,0,114,0,0,0,0,114,44,0, - 0,0,218,8,95,95,105,110,105,116,95,95,78,41,4,114, - 74,0,0,0,114,203,0,0,0,114,125,0,0,0,114,104, - 0,0,0,41,5,114,143,0,0,0,114,163,0,0,0,114, - 120,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, - 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,206,0, - 0,0,95,3,0,0,115,10,0,0,0,18,3,16,1,14, - 1,16,1,255,128,122,24,95,76,111,97,100,101,114,66,97, - 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,23,0,0,0,169,2,122, - 42,85,115,101,32,100,101,102,97,117,108,116,32,115,101,109, - 97,110,116,105,99,115,32,102,111,114,32,109,111,100,117,108, - 101,32,99,114,101,97,116,105,111,110,46,78,114,7,0,0, - 0,169,2,114,143,0,0,0,114,210,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,13,99,114, - 101,97,116,101,95,109,111,100,117,108,101,103,3,0,0,243, - 4,0,0,0,4,0,255,128,122,27,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, + 9,102,105,110,100,95,115,112,101,99,57,3,0,0,115,36, + 0,0,0,10,2,8,1,4,1,2,1,12,1,12,1,6, + 1,14,1,14,1,6,1,8,1,2,1,6,254,8,3,2, + 252,4,255,2,254,255,128,122,31,87,105,110,100,111,119,115, + 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, + 0,115,42,0,0,0,116,0,160,1,100,1,116,2,161,2, + 1,0,124,0,160,3,124,1,124,2,161,2,125,3,124,3, + 100,2,117,1,114,19,124,3,106,4,83,0,100,2,83,0, + 41,3,122,106,70,105,110,100,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, + 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,112, + 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, + 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,46,49,50,59,32,117,115,101,32,102,105,110, + 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, + 78,169,5,114,99,0,0,0,114,100,0,0,0,114,101,0, + 0,0,114,226,0,0,0,114,164,0,0,0,169,4,114,221, + 0,0,0,114,163,0,0,0,114,65,0,0,0,114,210,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,11,102,105,110,100,95,109,111,100,117,108,101,73,3, + 0,0,115,16,0,0,0,6,7,2,2,4,254,12,3,8, + 1,6,1,4,2,255,128,122,33,87,105,110,100,111,119,115, + 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, + 105,110,100,95,109,111,100,117,108,101,169,2,78,78,114,69, + 0,0,0,41,15,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,219,0,0,0,114,218, + 0,0,0,218,11,95,77,83,95,87,73,78,68,79,87,83, + 218,18,69,88,84,69,78,83,73,79,78,95,83,85,70,70, + 73,88,69,83,114,217,0,0,0,218,12,115,116,97,116,105, + 99,109,101,116,104,111,100,114,216,0,0,0,218,11,99,108, + 97,115,115,109,101,116,104,111,100,114,223,0,0,0,114,226, + 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, + 0,23,3,0,0,115,32,0,0,0,8,0,4,2,2,3, + 2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1, + 2,14,12,1,2,15,16,1,255,128,114,214,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,64,0,0,0,115,48,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, + 6,100,8,100,9,132,0,90,7,100,10,83,0,41,11,218, + 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, + 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, + 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, + 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, + 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, + 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, + 101,114,46,99,2,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,4,0,0,0,67,0,0,0,115,64,0,0, + 0,116,0,124,0,160,1,124,1,161,1,131,1,100,1,25, + 0,125,2,124,2,160,2,100,2,100,1,161,2,100,3,25, + 0,125,3,124,1,160,3,100,2,161,1,100,4,25,0,125, + 4,124,3,100,5,107,2,111,31,124,4,100,5,107,3,83, + 0,41,7,122,141,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 73,110,115,112,101,99,116,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,32,98,121,32,99,104,101,99, + 107,105,110,103,32,105,102,10,32,32,32,32,32,32,32,32, + 116,104,101,32,112,97,116,104,32,114,101,116,117,114,110,101, + 100,32,98,121,32,103,101,116,95,102,105,108,101,110,97,109, + 101,32,104,97,115,32,97,32,102,105,108,101,110,97,109,101, + 32,111,102,32,39,95,95,105,110,105,116,95,95,46,112,121, + 39,46,114,3,0,0,0,114,97,0,0,0,114,0,0,0, + 0,114,44,0,0,0,218,8,95,95,105,110,105,116,95,95, + 78,41,4,114,74,0,0,0,114,203,0,0,0,114,125,0, + 0,0,114,104,0,0,0,41,5,114,143,0,0,0,114,163, + 0,0,0,114,120,0,0,0,90,13,102,105,108,101,110,97, + 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, + 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,206,0,0,0,95,3,0,0,115,10,0,0,0,18, + 3,16,1,14,1,16,1,255,128,122,24,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, + 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, + 0,169,2,122,42,85,115,101,32,100,101,102,97,117,108,116, + 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, + 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, + 114,7,0,0,0,169,2,114,143,0,0,0,114,210,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,103, + 3,0,0,243,4,0,0,0,4,0,255,128,122,27,95,76, + 111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0, + 0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161, + 1,125,2,124,2,100,1,117,0,114,18,116,2,100,2,160, + 3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116, + 6,124,2,124,1,106,7,161,3,1,0,100,1,83,0,41, + 3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109, + 111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32, + 108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125, + 32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41, + 32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218, + 8,103,101,116,95,99,111,100,101,114,150,0,0,0,114,142, + 0,0,0,114,89,0,0,0,114,159,0,0,0,218,25,95, + 99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115, + 95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,156, + 0,0,0,41,3,114,143,0,0,0,218,6,109,111,100,117, + 108,101,114,188,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,11,101,120,101,99,95,109,111,100, + 117,108,101,106,3,0,0,115,14,0,0,0,12,2,8,1, + 4,1,8,1,4,255,20,2,255,128,122,25,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,109, 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,56, - 0,0,0,124,0,160,0,124,1,106,1,161,1,125,2,124, - 2,100,1,117,0,114,18,116,2,100,2,160,3,124,1,106, - 1,161,1,131,1,130,1,116,4,160,5,116,6,124,2,124, - 1,106,7,161,3,1,0,100,1,83,0,41,3,122,19,69, - 120,101,99,117,116,101,32,116,104,101,32,109,111,100,117,108, - 101,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100, - 32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101, - 110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116, - 117,114,110,115,32,78,111,110,101,41,8,218,8,103,101,116, - 95,99,111,100,101,114,150,0,0,0,114,142,0,0,0,114, - 89,0,0,0,114,159,0,0,0,218,25,95,99,97,108,108, - 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, - 111,118,101,100,218,4,101,120,101,99,114,156,0,0,0,41, - 3,114,143,0,0,0,218,6,109,111,100,117,108,101,114,188, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,106, - 3,0,0,115,14,0,0,0,12,2,8,1,4,1,8,1, - 4,255,20,2,255,128,122,25,95,76,111,97,100,101,114,66, - 97,115,105,99,115,46,101,120,101,99,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,12,0,0,0,116, - 0,160,1,124,0,124,1,161,2,83,0,41,2,122,26,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,78,41,2,114,159,0,0, - 0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,95, - 115,104,105,109,169,2,114,143,0,0,0,114,163,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,108,111,97,100,95,109,111,100,117,108,101,114,3,0,0, - 115,4,0,0,0,12,3,255,128,122,25,95,76,111,97,100, - 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, - 100,117,108,101,78,41,8,114,150,0,0,0,114,149,0,0, - 0,114,151,0,0,0,114,152,0,0,0,114,206,0,0,0, - 114,238,0,0,0,114,244,0,0,0,114,247,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,234,0,0,0,90,3,0,0,115,14,0,0, - 0,8,0,4,2,8,3,8,8,8,3,12,8,255,128,114, - 234,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,74,0, - 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0, - 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, - 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, - 90,7,100,11,100,12,156,1,100,13,100,14,132,2,90,8, - 100,15,100,16,132,0,90,9,100,17,83,0,41,18,218,12, - 83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,4,0,0,0,116,0,130,1,41,2, - 122,165,79,112,116,105,111,110,97,108,32,109,101,116,104,111, - 100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,116, - 104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32, - 116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,111, - 114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,112, - 101,99,105,102,105,101,100,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,82, - 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, - 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, - 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,78,41,1,114,76,0,0,0,169, - 2,114,143,0,0,0,114,65,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,10,112,97,116,104, - 95,109,116,105,109,101,122,3,0,0,115,4,0,0,0,4, - 6,255,128,122,23,83,111,117,114,99,101,76,111,97,100,101, - 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0, - 124,1,161,1,105,1,83,0,41,3,97,158,1,0,0,79, - 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114, - 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100, - 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32, - 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46, - 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, - 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, - 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, - 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, - 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, - 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, - 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, - 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, - 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, - 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, - 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, - 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, - 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, - 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, - 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, - 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, - 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, - 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, - 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, - 108,101,100,46,10,32,32,32,32,32,32,32,32,114,193,0, - 0,0,78,41,1,114,250,0,0,0,114,249,0,0,0,114, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,12, + 0,0,0,116,0,160,1,124,0,124,1,161,2,83,0,41, + 2,122,26,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,78,41,2, + 114,159,0,0,0,218,17,95,108,111,97,100,95,109,111,100, + 117,108,101,95,115,104,105,109,169,2,114,143,0,0,0,114, + 163,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, + 114,3,0,0,115,4,0,0,0,12,3,255,128,122,25,95, + 76,111,97,100,101,114,66,97,115,105,99,115,46,108,111,97, + 100,95,109,111,100,117,108,101,78,41,8,114,150,0,0,0, + 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, + 206,0,0,0,114,239,0,0,0,114,245,0,0,0,114,248, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,235,0,0,0,90,3,0,0, + 115,14,0,0,0,8,0,4,2,8,3,8,8,8,3,12, + 8,255,128,114,235,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, + 0,115,74,0,0,0,101,0,90,1,100,0,90,2,100,1, + 100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5, + 100,6,132,0,90,5,100,7,100,8,132,0,90,6,100,9, + 100,10,132,0,90,7,100,11,100,12,156,1,100,13,100,14, + 132,2,90,8,100,15,100,16,132,0,90,9,100,17,83,0, + 41,18,218,12,83,111,117,114,99,101,76,111,97,100,101,114, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,116,0, + 130,1,41,2,122,165,79,112,116,105,111,110,97,108,32,109, + 101,116,104,111,100,32,116,104,97,116,32,114,101,116,117,114, + 110,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116, + 105,111,110,32,116,105,109,101,32,40,97,110,32,105,110,116, + 41,32,102,111,114,32,116,104,101,10,32,32,32,32,32,32, + 32,32,115,112,101,99,105,102,105,101,100,32,112,97,116,104, + 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, + 32,32,32,82,97,105,115,101,115,32,79,83,69,114,114,111, + 114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32, + 99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101, + 100,46,10,32,32,32,32,32,32,32,32,78,41,1,114,76, + 0,0,0,169,2,114,143,0,0,0,114,65,0,0,0,114, 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, - 112,97,116,104,95,115,116,97,116,115,130,3,0,0,115,4, - 0,0,0,14,12,255,128,122,23,83,111,117,114,99,101,76, - 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, - 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,4,0,0,0,67,0,0,0,115,12,0,0,0,124,0, - 160,0,124,2,124,3,161,2,83,0,41,2,122,228,79,112, - 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, - 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, - 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, - 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, - 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, - 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, - 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, - 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,32, - 112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,105, - 110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,101, - 99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,101, - 114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,32, - 32,32,78,41,1,218,8,115,101,116,95,100,97,116,97,41, - 4,114,143,0,0,0,114,134,0,0,0,90,10,99,97,99, - 104,101,95,112,97,116,104,114,41,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,15,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,144,3,0,0, - 115,4,0,0,0,12,8,255,128,122,28,83,111,117,114,99, - 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, - 121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0, - 114,23,0,0,0,41,2,122,150,79,112,116,105,111,110,97, - 108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119, - 114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101, - 115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116, - 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, - 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, - 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, - 111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116, - 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, - 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78, - 114,7,0,0,0,41,3,114,143,0,0,0,114,65,0,0, - 0,114,41,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,252,0,0,0,154,3,0,0,114,239, - 0,0,0,122,21,83,111,117,114,99,101,76,111,97,100,101, - 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67, - 0,0,0,115,70,0,0,0,124,0,160,0,124,1,161,1, - 125,2,122,10,124,0,160,1,124,2,161,1,125,3,87,0, - 116,4,124,3,131,1,83,0,4,0,116,2,121,34,1,0, - 125,4,1,0,122,7,116,3,100,1,124,1,100,2,141,2, - 124,4,130,2,100,3,125,4,126,4,119,1,119,0,41,4, - 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, - 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, - 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, - 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, - 140,0,0,0,78,41,5,114,203,0,0,0,218,8,103,101, - 116,95,100,97,116,97,114,76,0,0,0,114,142,0,0,0, - 114,200,0,0,0,41,5,114,143,0,0,0,114,163,0,0, - 0,114,65,0,0,0,114,198,0,0,0,218,3,101,120,99, + 112,97,116,104,95,109,116,105,109,101,122,3,0,0,115,4, + 0,0,0,4,6,255,128,122,23,83,111,117,114,99,101,76, + 111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,14,0,0,0,100,1, + 124,0,160,0,124,1,161,1,105,1,83,0,41,3,97,158, + 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, + 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, + 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,10,32, + 32,32,32,32,32,32,32,112,97,116,104,32,40,97,32,115, + 116,114,41,46,10,10,32,32,32,32,32,32,32,32,80,111, + 115,115,105,98,108,101,32,107,101,121,115,58,10,32,32,32, + 32,32,32,32,32,45,32,39,109,116,105,109,101,39,32,40, + 109,97,110,100,97,116,111,114,121,41,32,105,115,32,116,104, + 101,32,110,117,109,101,114,105,99,32,116,105,109,101,115,116, + 97,109,112,32,111,102,32,108,97,115,116,32,115,111,117,114, + 99,101,10,32,32,32,32,32,32,32,32,32,32,99,111,100, + 101,32,109,111,100,105,102,105,99,97,116,105,111,110,59,10, + 32,32,32,32,32,32,32,32,45,32,39,115,105,122,101,39, + 32,40,111,112,116,105,111,110,97,108,41,32,105,115,32,116, + 104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115, + 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,10,10,32,32,32,32,32,32,32,32,73,109, + 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, + 109,101,116,104,111,100,32,97,108,108,111,119,115,32,116,104, + 101,32,108,111,97,100,101,114,32,116,111,32,114,101,97,100, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, + 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, + 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, + 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, + 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, + 32,114,193,0,0,0,78,41,1,114,251,0,0,0,114,250, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,10,112,97,116,104,95,115,116,97,116,115,130,3, + 0,0,115,4,0,0,0,14,12,255,128,122,23,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, + 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,12,0, + 0,0,124,0,160,0,124,2,124,3,161,2,83,0,41,2, + 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, + 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, + 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, + 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, + 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, + 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, + 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, + 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, + 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, + 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, + 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, + 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, + 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, + 32,32,32,32,32,32,78,41,1,218,8,115,101,116,95,100, + 97,116,97,41,4,114,143,0,0,0,114,134,0,0,0,90, + 10,99,97,99,104,101,95,112,97,116,104,114,41,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 10,103,101,116,95,115,111,117,114,99,101,161,3,0,0,115, - 26,0,0,0,10,2,2,1,12,1,8,4,14,253,4,1, - 2,1,4,255,2,1,2,255,8,128,2,255,255,128,122,23, - 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, - 95,115,111,117,114,99,101,114,130,0,0,0,41,1,218,9, - 95,111,112,116,105,109,105,122,101,99,3,0,0,0,0,0, - 0,0,1,0,0,0,4,0,0,0,8,0,0,0,67,0, - 0,0,115,22,0,0,0,116,0,106,1,116,2,124,1,124, - 2,100,1,100,2,124,3,100,3,141,6,83,0,41,5,122, - 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, - 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, - 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, - 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, - 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, - 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, - 32,32,32,114,242,0,0,0,84,41,2,218,12,100,111,110, - 116,95,105,110,104,101,114,105,116,114,108,0,0,0,78,41, - 3,114,159,0,0,0,114,241,0,0,0,218,7,99,111,109, - 112,105,108,101,41,4,114,143,0,0,0,114,41,0,0,0, - 114,65,0,0,0,114,1,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,14,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,171,3,0,0,115,8,0, - 0,0,12,5,4,1,6,255,255,128,122,27,83,111,117,114, - 99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95, - 116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,15,0,0,0,9,0,0,0,67,0,0,0, - 115,12,2,0,0,124,0,160,0,124,1,161,1,125,2,100, - 1,125,3,100,1,125,4,100,1,125,5,100,2,125,6,100, - 3,125,7,122,6,116,1,124,2,131,1,125,8,87,0,110, - 11,4,0,116,2,144,1,121,5,1,0,1,0,1,0,100, - 1,125,8,89,0,110,143,122,7,124,0,160,3,124,2,161, - 1,125,9,87,0,110,9,4,0,116,4,144,1,121,4,1, - 0,1,0,1,0,89,0,110,126,116,5,124,9,100,4,25, - 0,131,1,125,3,122,7,124,0,160,6,124,8,161,1,125, - 10,87,0,110,9,4,0,116,4,144,1,121,3,1,0,1, - 0,1,0,89,0,110,103,124,1,124,8,100,5,156,2,125, - 11,122,71,116,7,124,10,124,1,124,11,131,3,125,12,116, - 8,124,10,131,1,100,6,100,1,133,2,25,0,125,13,124, - 12,100,7,64,0,100,8,107,3,125,6,124,6,114,138,124, - 12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,100, - 10,107,3,114,137,124,7,115,119,116,9,106,10,100,11,107, - 2,114,137,124,0,160,6,124,2,161,1,125,4,116,9,160, - 11,116,12,124,4,161,2,125,5,116,13,124,10,124,5,124, - 1,124,11,131,4,1,0,110,10,116,14,124,10,124,3,124, - 9,100,12,25,0,124,1,124,11,131,5,1,0,87,0,110, - 11,4,0,116,15,116,16,102,2,144,1,121,2,1,0,1, - 0,1,0,89,0,110,15,116,17,160,18,100,13,124,8,124, - 2,161,3,1,0,116,19,124,13,124,1,124,8,124,2,100, - 14,141,4,83,0,124,4,100,1,117,0,114,185,124,0,160, - 6,124,2,161,1,125,4,124,0,160,20,124,4,124,2,161, - 2,125,14,116,17,160,18,100,15,124,2,161,2,1,0,116, - 21,106,22,115,255,124,8,100,1,117,1,114,255,124,3,100, - 1,117,1,114,255,124,6,114,226,124,5,100,1,117,0,114, - 219,116,9,160,11,124,4,161,1,125,5,116,23,124,14,124, - 5,124,7,131,3,125,10,110,8,116,24,124,14,124,3,116, - 25,124,4,131,1,131,3,125,10,122,10,124,0,160,26,124, - 2,124,8,124,10,161,3,1,0,87,0,124,14,83,0,4, - 0,116,2,144,1,121,1,1,0,1,0,1,0,89,0,124, - 14,83,0,124,14,83,0,119,0,119,0,119,0,119,0,119, - 0,41,16,122,190,67,111,110,99,114,101,116,101,32,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, - 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, - 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, - 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, - 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, - 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, - 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, - 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, - 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, - 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, - 32,32,32,78,70,84,114,193,0,0,0,114,183,0,0,0, - 114,169,0,0,0,114,3,0,0,0,114,0,0,0,0,114, - 44,0,0,0,90,5,110,101,118,101,114,90,6,97,108,119, - 97,121,115,218,4,115,105,122,101,122,13,123,125,32,109,97, - 116,99,104,101,115,32,123,125,41,3,114,141,0,0,0,114, - 132,0,0,0,114,134,0,0,0,122,19,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,125,41,27, - 114,203,0,0,0,114,121,0,0,0,114,107,0,0,0,114, - 251,0,0,0,114,76,0,0,0,114,33,0,0,0,114,254, - 0,0,0,114,176,0,0,0,218,10,109,101,109,111,114,121, - 118,105,101,119,114,187,0,0,0,90,21,99,104,101,99,107, - 95,104,97,115,104,95,98,97,115,101,100,95,112,121,99,115, - 114,181,0,0,0,218,17,95,82,65,87,95,77,65,71,73, - 67,95,78,85,77,66,69,82,114,182,0,0,0,114,180,0, - 0,0,114,142,0,0,0,114,174,0,0,0,114,159,0,0, - 0,114,173,0,0,0,114,189,0,0,0,114,4,1,0,0, - 114,15,0,0,0,218,19,100,111,110,116,95,119,114,105,116, - 101,95,98,121,116,101,99,111,100,101,114,195,0,0,0,114, - 194,0,0,0,114,4,0,0,0,114,253,0,0,0,41,15, - 114,143,0,0,0,114,163,0,0,0,114,134,0,0,0,114, - 178,0,0,0,114,198,0,0,0,114,181,0,0,0,90,10, - 104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99, - 107,95,115,111,117,114,99,101,114,132,0,0,0,218,2,115, - 116,114,41,0,0,0,114,175,0,0,0,114,16,0,0,0, - 90,10,98,121,116,101,115,95,100,97,116,97,90,11,99,111, - 100,101,95,111,98,106,101,99,116,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,240,0,0,0,179,3,0, - 0,115,170,0,0,0,10,7,4,1,4,1,4,1,4,1, - 4,1,2,1,12,1,14,1,8,1,2,2,14,1,14,1, - 4,1,12,2,2,1,14,1,14,1,4,1,2,3,2,1, - 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, - 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, - 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, - 6,1,2,1,2,1,4,251,4,128,18,7,4,1,8,2, - 2,1,4,255,6,2,2,1,2,1,6,254,8,3,10,1, - 12,1,12,1,14,1,6,1,2,255,4,2,8,1,10,1, - 14,1,6,2,6,1,4,255,2,2,16,1,4,3,14,254, - 2,1,8,1,2,254,2,233,2,225,2,250,2,251,255,128, - 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,78,41,10,114,150,0,0,0,114, - 149,0,0,0,114,151,0,0,0,114,250,0,0,0,114,251, - 0,0,0,114,253,0,0,0,114,252,0,0,0,114,0,1, - 0,0,114,4,1,0,0,114,240,0,0,0,114,7,0,0, + 15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, + 144,3,0,0,115,4,0,0,0,12,8,255,128,122,28,83, + 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, + 104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0, + 67,0,0,0,114,23,0,0,0,41,2,122,150,79,112,116, + 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, + 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, + 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, + 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, + 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, + 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, + 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, + 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, + 32,32,32,78,114,7,0,0,0,41,3,114,143,0,0,0, + 114,65,0,0,0,114,41,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,253,0,0,0,154,3, + 0,0,114,240,0,0,0,122,21,83,111,117,114,99,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,10, + 0,0,0,67,0,0,0,115,70,0,0,0,124,0,160,0, + 124,1,161,1,125,2,122,10,124,0,160,1,124,2,161,1, + 125,3,87,0,116,4,124,3,131,1,83,0,4,0,116,2, + 121,34,1,0,125,4,1,0,122,7,116,3,100,1,124,1, + 100,2,141,2,124,4,130,2,100,3,125,4,126,4,119,1, + 119,0,41,4,122,52,67,111,110,99,114,101,116,101,32,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, + 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103, + 101,116,95,115,111,117,114,99,101,46,122,39,115,111,117,114, + 99,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101, + 32,116,104,114,111,117,103,104,32,103,101,116,95,100,97,116, + 97,40,41,114,140,0,0,0,78,41,5,114,203,0,0,0, + 218,8,103,101,116,95,100,97,116,97,114,76,0,0,0,114, + 142,0,0,0,114,200,0,0,0,41,5,114,143,0,0,0, + 114,163,0,0,0,114,65,0,0,0,114,198,0,0,0,218, + 3,101,120,99,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,161, + 3,0,0,115,26,0,0,0,10,2,2,1,12,1,8,4, + 14,253,4,1,2,1,4,255,2,1,2,255,8,128,2,255, + 255,128,122,23,83,111,117,114,99,101,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,114,130,0,0,0, + 41,1,218,9,95,111,112,116,105,109,105,122,101,99,3,0, + 0,0,0,0,0,0,1,0,0,0,4,0,0,0,8,0, + 0,0,67,0,0,0,115,22,0,0,0,116,0,106,1,116, + 2,124,1,124,2,100,1,100,2,124,3,100,3,141,6,83, + 0,41,5,122,130,82,101,116,117,114,110,32,116,104,101,32, + 99,111,100,101,32,111,98,106,101,99,116,32,99,111,109,112, + 105,108,101,100,32,102,114,111,109,32,115,111,117,114,99,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,39, + 100,97,116,97,39,32,97,114,103,117,109,101,110,116,32,99, + 97,110,32,98,101,32,97,110,121,32,111,98,106,101,99,116, + 32,116,121,112,101,32,116,104,97,116,32,99,111,109,112,105, + 108,101,40,41,32,115,117,112,112,111,114,116,115,46,10,32, + 32,32,32,32,32,32,32,114,243,0,0,0,84,41,2,218, + 12,100,111,110,116,95,105,110,104,101,114,105,116,114,108,0, + 0,0,78,41,3,114,159,0,0,0,114,242,0,0,0,218, + 7,99,111,109,112,105,108,101,41,4,114,143,0,0,0,114, + 41,0,0,0,114,65,0,0,0,114,2,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,115, + 111,117,114,99,101,95,116,111,95,99,111,100,101,171,3,0, + 0,115,8,0,0,0,12,5,4,1,6,255,255,128,122,27, + 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, + 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,15,0,0,0,9,0,0,0, + 67,0,0,0,115,12,2,0,0,124,0,160,0,124,1,161, + 1,125,2,100,1,125,3,100,1,125,4,100,1,125,5,100, + 2,125,6,100,3,125,7,122,6,116,1,124,2,131,1,125, + 8,87,0,110,11,4,0,116,2,144,1,121,5,1,0,1, + 0,1,0,100,1,125,8,89,0,110,143,122,7,124,0,160, + 3,124,2,161,1,125,9,87,0,110,9,4,0,116,4,144, + 1,121,4,1,0,1,0,1,0,89,0,110,126,116,5,124, + 9,100,4,25,0,131,1,125,3,122,7,124,0,160,6,124, + 8,161,1,125,10,87,0,110,9,4,0,116,4,144,1,121, + 3,1,0,1,0,1,0,89,0,110,103,124,1,124,8,100, + 5,156,2,125,11,122,71,116,7,124,10,124,1,124,11,131, + 3,125,12,116,8,124,10,131,1,100,6,100,1,133,2,25, + 0,125,13,124,12,100,7,64,0,100,8,107,3,125,6,124, + 6,114,138,124,12,100,9,64,0,100,8,107,3,125,7,116, + 9,106,10,100,10,107,3,114,137,124,7,115,119,116,9,106, + 10,100,11,107,2,114,137,124,0,160,6,124,2,161,1,125, + 4,116,9,160,11,116,12,124,4,161,2,125,5,116,13,124, + 10,124,5,124,1,124,11,131,4,1,0,110,10,116,14,124, + 10,124,3,124,9,100,12,25,0,124,1,124,11,131,5,1, + 0,87,0,110,11,4,0,116,15,116,16,102,2,144,1,121, + 2,1,0,1,0,1,0,89,0,110,15,116,17,160,18,100, + 13,124,8,124,2,161,3,1,0,116,19,124,13,124,1,124, + 8,124,2,100,14,141,4,83,0,124,4,100,1,117,0,114, + 185,124,0,160,6,124,2,161,1,125,4,124,0,160,20,124, + 4,124,2,161,2,125,14,116,17,160,18,100,15,124,2,161, + 2,1,0,116,21,106,22,115,255,124,8,100,1,117,1,114, + 255,124,3,100,1,117,1,114,255,124,6,114,226,124,5,100, + 1,117,0,114,219,116,9,160,11,124,4,161,1,125,5,116, + 23,124,14,124,5,124,7,131,3,125,10,110,8,116,24,124, + 14,124,3,116,25,124,4,131,1,131,3,125,10,122,10,124, + 0,160,26,124,2,124,8,124,10,161,3,1,0,87,0,124, + 14,83,0,4,0,116,2,144,1,121,1,1,0,1,0,1, + 0,89,0,124,14,83,0,124,14,83,0,119,0,119,0,119, + 0,119,0,119,0,41,16,122,190,67,111,110,99,114,101,116, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, + 114,46,103,101,116,95,99,111,100,101,46,10,10,32,32,32, + 32,32,32,32,32,82,101,97,100,105,110,103,32,111,102,32, + 98,121,116,101,99,111,100,101,32,114,101,113,117,105,114,101, + 115,32,112,97,116,104,95,115,116,97,116,115,32,116,111,32, + 98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,32, + 84,111,32,119,114,105,116,101,10,32,32,32,32,32,32,32, + 32,98,121,116,101,99,111,100,101,44,32,115,101,116,95,100, + 97,116,97,32,109,117,115,116,32,97,108,115,111,32,98,101, + 32,105,109,112,108,101,109,101,110,116,101,100,46,10,10,32, + 32,32,32,32,32,32,32,78,70,84,114,193,0,0,0,114, + 183,0,0,0,114,169,0,0,0,114,3,0,0,0,114,0, + 0,0,0,114,44,0,0,0,90,5,110,101,118,101,114,90, + 6,97,108,119,97,121,115,218,4,115,105,122,101,122,13,123, + 125,32,109,97,116,99,104,101,115,32,123,125,41,3,114,141, + 0,0,0,114,132,0,0,0,114,134,0,0,0,122,19,99, + 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, + 123,125,41,27,114,203,0,0,0,114,121,0,0,0,114,107, + 0,0,0,114,252,0,0,0,114,76,0,0,0,114,33,0, + 0,0,114,255,0,0,0,114,176,0,0,0,218,10,109,101, + 109,111,114,121,118,105,101,119,114,187,0,0,0,90,21,99, + 104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,95, + 112,121,99,115,114,181,0,0,0,218,17,95,82,65,87,95, + 77,65,71,73,67,95,78,85,77,66,69,82,114,182,0,0, + 0,114,180,0,0,0,114,142,0,0,0,114,174,0,0,0, + 114,159,0,0,0,114,173,0,0,0,114,189,0,0,0,114, + 5,1,0,0,114,15,0,0,0,218,19,100,111,110,116,95, + 119,114,105,116,101,95,98,121,116,101,99,111,100,101,114,195, + 0,0,0,114,194,0,0,0,114,4,0,0,0,114,254,0, + 0,0,41,15,114,143,0,0,0,114,163,0,0,0,114,134, + 0,0,0,114,178,0,0,0,114,198,0,0,0,114,181,0, + 0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,12, + 99,104,101,99,107,95,115,111,117,114,99,101,114,132,0,0, + 0,218,2,115,116,114,41,0,0,0,114,175,0,0,0,114, + 16,0,0,0,90,10,98,121,116,101,115,95,100,97,116,97, + 90,11,99,111,100,101,95,111,98,106,101,99,116,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, + 0,179,3,0,0,115,170,0,0,0,10,7,4,1,4,1, + 4,1,4,1,4,1,2,1,12,1,14,1,8,1,2,2, + 14,1,14,1,4,1,12,2,2,1,14,1,14,1,4,1, + 2,3,2,1,6,254,2,4,12,1,16,1,12,1,4,1, + 12,1,10,1,2,1,2,255,8,2,2,254,10,3,4,1, + 2,1,2,1,4,254,8,4,2,1,4,255,2,128,2,3, + 2,1,2,1,6,1,2,1,2,1,4,251,4,128,18,7, + 4,1,8,2,2,1,4,255,6,2,2,1,2,1,6,254, + 8,3,10,1,12,1,12,1,14,1,6,1,2,255,4,2, + 8,1,10,1,14,1,6,2,6,1,4,255,2,2,16,1, + 4,3,14,254,2,1,8,1,2,254,2,233,2,225,2,250, + 2,251,255,128,122,21,83,111,117,114,99,101,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,78,41,10,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,251,0, + 0,0,114,252,0,0,0,114,254,0,0,0,114,253,0,0, + 0,114,1,1,0,0,114,5,1,0,0,114,241,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,249,0,0,0,120,3,0,0,115,18,0, + 0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,10, + 12,8,255,128,114,249,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, + 0,0,115,92,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,132,0,90,6,101,7,135,0,102, + 1,100,8,100,9,132,8,131,1,90,8,101,7,100,10,100, + 11,132,0,131,1,90,9,100,12,100,13,132,0,90,10,101, + 7,100,14,100,15,132,0,131,1,90,11,135,0,4,0,90, + 12,83,0,41,16,218,10,70,105,108,101,76,111,97,100,101, + 114,122,103,66,97,115,101,32,102,105,108,101,32,108,111,97, + 100,101,114,32,99,108,97,115,115,32,119,104,105,99,104,32, + 105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,108, + 111,97,100,101,114,32,112,114,111,116,111,99,111,108,32,109, + 101,116,104,111,100,115,32,116,104,97,116,10,32,32,32,32, + 114,101,113,117,105,114,101,32,102,105,108,101,32,115,121,115, + 116,101,109,32,117,115,97,103,101,46,99,3,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, + 0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,2, + 124,0,95,1,100,1,83,0,41,2,122,75,67,97,99,104, + 101,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, + 101,32,97,110,100,32,116,104,101,32,112,97,116,104,32,116, + 111,32,116,104,101,32,102,105,108,101,32,102,111,117,110,100, + 32,98,121,32,116,104,101,10,32,32,32,32,32,32,32,32, + 102,105,110,100,101,114,46,78,114,183,0,0,0,41,3,114, + 143,0,0,0,114,163,0,0,0,114,65,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,236,0, + 0,0,13,4,0,0,115,6,0,0,0,6,3,10,1,255, + 128,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, + 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,243, + 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,11, + 124,0,106,1,124,1,106,1,107,2,83,0,114,69,0,0, + 0,169,2,218,9,95,95,99,108,97,115,115,95,95,114,156, + 0,0,0,169,2,114,143,0,0,0,90,5,111,116,104,101, + 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,6,95,95,101,113,95,95,19,4,0,0,243,8,0,0, + 0,12,1,10,1,2,255,255,128,122,17,70,105,108,101,76, + 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,243,20,0,0,0,116,0,124,0,106,1, + 131,1,116,0,124,0,106,2,131,1,65,0,83,0,114,69, + 0,0,0,169,3,218,4,104,97,115,104,114,141,0,0,0, + 114,65,0,0,0,169,1,114,143,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,8,95,95,104, + 97,115,104,95,95,23,4,0,0,243,4,0,0,0,20,1, + 255,128,122,19,70,105,108,101,76,111,97,100,101,114,46,95, + 95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, + 115,16,0,0,0,116,0,116,1,124,0,131,2,160,2,124, + 1,161,1,83,0,41,2,122,100,76,111,97,100,32,97,32, + 109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, + 218,5,115,117,112,101,114,114,11,1,0,0,114,248,0,0, + 0,114,247,0,0,0,169,1,114,14,1,0,0,114,7,0, + 0,0,114,8,0,0,0,114,248,0,0,0,26,4,0,0, + 115,4,0,0,0,16,10,255,128,122,22,70,105,108,101,76, + 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,243,6,0,0,0,124, + 0,106,0,83,0,169,2,122,58,82,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, + 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, + 101,114,46,78,114,71,0,0,0,114,247,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,203,0, + 0,0,38,4,0,0,243,4,0,0,0,6,3,255,128,122, + 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, + 0,115,128,0,0,0,116,0,124,0,116,1,116,2,102,2, + 131,2,114,36,116,3,160,4,116,5,124,1,131,1,161,1, + 143,12,125,2,124,2,160,6,161,0,87,0,2,0,100,1, + 4,0,4,0,131,3,1,0,83,0,49,0,115,29,119,1, + 1,0,1,0,1,0,89,0,1,0,100,1,83,0,116,3, + 160,7,124,1,100,2,161,2,143,12,125,2,124,2,160,6, + 161,0,87,0,2,0,100,1,4,0,4,0,131,3,1,0, + 83,0,49,0,115,57,119,1,1,0,1,0,1,0,89,0, + 1,0,100,1,83,0,41,3,122,39,82,101,116,117,114,110, + 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, + 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, + 46,78,218,1,114,41,8,114,185,0,0,0,114,249,0,0, + 0,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,114,91,0,0,0,90,9,111,112,101, + 110,95,99,111,100,101,114,109,0,0,0,90,4,114,101,97, + 100,114,92,0,0,0,41,3,114,143,0,0,0,114,65,0, + 0,0,114,94,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,255,0,0,0,43,4,0,0,115, + 16,0,0,0,14,2,16,1,22,1,20,128,14,2,22,1, + 20,128,255,128,122,19,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, + 0,0,115,20,0,0,0,100,1,100,2,108,0,109,1,125, + 2,1,0,124,2,124,0,131,1,83,0,41,3,78,114,0, + 0,0,0,41,1,218,10,70,105,108,101,82,101,97,100,101, + 114,41,2,218,17,105,109,112,111,114,116,108,105,98,46,114, + 101,97,100,101,114,115,114,31,1,0,0,41,3,114,143,0, + 0,0,114,244,0,0,0,114,31,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,19,103,101,116, + 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, + 52,4,0,0,115,6,0,0,0,12,2,8,1,255,128,122, + 30,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,41, + 13,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, + 114,152,0,0,0,114,236,0,0,0,114,16,1,0,0,114, + 22,1,0,0,114,160,0,0,0,114,248,0,0,0,114,203, + 0,0,0,114,255,0,0,0,114,33,1,0,0,90,13,95, + 95,99,108,97,115,115,99,101,108,108,95,95,114,7,0,0, + 0,114,7,0,0,0,114,25,1,0,0,114,8,0,0,0, + 114,11,1,0,0,8,4,0,0,115,26,0,0,0,8,0, + 4,2,8,3,8,6,8,4,2,3,14,1,2,11,10,1, + 8,4,2,9,18,1,255,128,114,11,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,46,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,100,7,156,1,100,8,100, + 9,132,2,90,6,100,10,83,0,41,11,218,16,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,101, + 76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,101, + 32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,22,0,0,0,116,0,124,1,131, + 1,125,2,124,2,106,1,124,2,106,2,100,1,156,2,83, + 0,41,3,122,33,82,101,116,117,114,110,32,116,104,101,32, + 109,101,116,97,100,97,116,97,32,102,111,114,32,116,104,101, + 32,112,97,116,104,46,41,2,114,193,0,0,0,114,6,1, + 0,0,78,41,3,114,75,0,0,0,218,8,115,116,95,109, + 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, + 143,0,0,0,114,65,0,0,0,114,10,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,252,0, + 0,0,62,4,0,0,115,6,0,0,0,8,2,14,1,255, + 128,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97, + 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1, + 131,1,125,4,124,0,106,1,124,2,124,3,124,4,100,1, + 141,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101, + 41,2,114,139,0,0,0,114,253,0,0,0,41,5,114,143, + 0,0,0,114,134,0,0,0,114,132,0,0,0,114,41,0, + 0,0,114,78,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,254,0,0,0,67,4,0,0,115, + 6,0,0,0,8,2,16,1,255,128,122,32,83,111,117,114, + 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,114,87,0,0, + 0,114,36,1,0,0,99,3,0,0,0,0,0,0,0,1, + 0,0,0,9,0,0,0,11,0,0,0,67,0,0,0,115, + 254,0,0,0,116,0,124,1,131,1,92,2,125,4,125,5, + 103,0,125,6,124,4,114,31,116,1,124,4,131,1,115,31, + 116,0,124,4,131,1,92,2,125,4,125,7,124,6,160,2, + 124,7,161,1,1,0,124,4,114,31,116,1,124,4,131,1, + 114,14,116,3,124,6,131,1,68,0,93,48,125,7,116,4, + 124,4,124,7,131,2,125,4,122,7,116,5,160,6,124,4, + 161,1,1,0,87,0,113,35,4,0,116,7,121,58,1,0, + 1,0,1,0,89,0,113,35,4,0,116,8,121,126,1,0, + 125,8,1,0,122,15,116,9,160,10,100,1,124,4,124,8, + 161,3,1,0,87,0,89,0,100,2,125,8,126,8,1,0, + 100,2,83,0,100,2,125,8,126,8,119,1,122,15,116,11, + 124,1,124,2,124,3,131,3,1,0,116,9,160,10,100,3, + 124,1,161,2,1,0,87,0,100,2,83,0,4,0,116,8, + 121,125,1,0,125,8,1,0,122,14,116,9,160,10,100,1, + 124,1,124,8,161,3,1,0,87,0,89,0,100,2,125,8, + 126,8,100,2,83,0,100,2,125,8,126,8,119,1,119,0, + 119,0,41,4,122,27,87,114,105,116,101,32,98,121,116,101, + 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, + 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, + 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, + 12,99,114,101,97,116,101,100,32,123,33,114,125,41,12,114, + 74,0,0,0,114,83,0,0,0,114,61,0,0,0,218,8, + 114,101,118,101,114,115,101,100,114,67,0,0,0,114,18,0, + 0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69, + 120,105,115,116,115,69,114,114,111,114,114,76,0,0,0,114, + 159,0,0,0,114,173,0,0,0,114,95,0,0,0,41,9, + 114,143,0,0,0,114,65,0,0,0,114,41,0,0,0,114, + 37,1,0,0,218,6,112,97,114,101,110,116,114,120,0,0, + 0,114,63,0,0,0,114,68,0,0,0,114,0,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 253,0,0,0,72,4,0,0,115,58,0,0,0,12,2,4, + 1,12,2,12,1,10,1,12,254,12,4,10,1,2,1,14, + 1,12,1,4,2,14,1,6,3,4,1,4,255,16,2,8, + 128,2,1,12,1,18,1,14,1,8,2,2,1,18,255,8, + 128,2,254,2,247,255,128,122,25,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, + 116,97,78,41,7,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,252,0,0,0,114,254, + 0,0,0,114,253,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,34,1,0, + 0,58,4,0,0,115,12,0,0,0,8,0,4,2,8,2, + 8,5,18,5,255,128,114,34,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,32,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,83,0,41,7,218,20,83,111,117, + 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, + 114,122,45,76,111,97,100,101,114,32,119,104,105,99,104,32, + 104,97,110,100,108,101,115,32,115,111,117,114,99,101,108,101, + 115,115,32,102,105,108,101,32,105,109,112,111,114,116,115,46, + 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,68,0,0,0,124,0, + 160,0,124,1,161,1,125,2,124,0,160,1,124,2,161,1, + 125,3,124,1,124,2,100,1,156,2,125,4,116,2,124,3, + 124,1,124,4,131,3,1,0,116,3,116,4,124,3,131,1, + 100,2,100,0,133,2,25,0,124,1,124,2,100,3,141,3, + 83,0,41,4,78,114,183,0,0,0,114,169,0,0,0,41, + 2,114,141,0,0,0,114,132,0,0,0,41,5,114,203,0, + 0,0,114,255,0,0,0,114,176,0,0,0,114,189,0,0, + 0,114,7,1,0,0,41,5,114,143,0,0,0,114,163,0, + 0,0,114,65,0,0,0,114,41,0,0,0,114,175,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,248,0,0,0,120,3,0,0,115,18,0,0,0,8,0, - 8,2,8,8,8,14,8,10,8,7,14,10,12,8,255,128, - 114,248,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,92, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,101,7,135,0,102,1,100,8,100, - 9,132,8,131,1,90,8,101,7,100,10,100,11,132,0,131, - 1,90,9,100,12,100,13,132,0,90,10,101,7,100,14,100, - 15,132,0,131,1,90,11,135,0,4,0,90,12,83,0,41, - 16,218,10,70,105,108,101,76,111,97,100,101,114,122,103,66, - 97,115,101,32,102,105,108,101,32,108,111,97,100,101,114,32, - 99,108,97,115,115,32,119,104,105,99,104,32,105,109,112,108, - 101,109,101,110,116,115,32,116,104,101,32,108,111,97,100,101, - 114,32,112,114,111,116,111,99,111,108,32,109,101,116,104,111, - 100,115,32,116,104,97,116,10,32,32,32,32,114,101,113,117, - 105,114,101,32,102,105,108,101,32,115,121,115,116,101,109,32, - 117,115,97,103,101,46,99,3,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, - 100,1,83,0,41,2,122,75,67,97,99,104,101,32,116,104, - 101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,110, - 100,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, - 101,32,102,105,108,101,32,102,111,117,110,100,32,98,121,32, - 116,104,101,10,32,32,32,32,32,32,32,32,102,105,110,100, - 101,114,46,78,114,183,0,0,0,41,3,114,143,0,0,0, - 114,163,0,0,0,114,65,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,235,0,0,0,13,4, - 0,0,115,6,0,0,0,6,3,10,1,255,128,122,19,70, - 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,243,24,0,0,0, - 124,0,106,0,124,1,106,0,107,2,111,11,124,0,106,1, - 124,1,106,1,107,2,83,0,114,69,0,0,0,169,2,218, - 9,95,95,99,108,97,115,115,95,95,114,156,0,0,0,169, - 2,114,143,0,0,0,90,5,111,116,104,101,114,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,6,95,95, - 101,113,95,95,19,4,0,0,243,8,0,0,0,12,1,10, - 1,2,255,255,128,122,17,70,105,108,101,76,111,97,100,101, - 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,243,20,0,0,0,116,0,124,0,106,1,131,1,116,0, - 124,0,106,2,131,1,65,0,83,0,114,69,0,0,0,169, - 3,218,4,104,97,115,104,114,141,0,0,0,114,65,0,0, - 0,169,1,114,143,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,8,95,95,104,97,115,104,95, - 95,23,4,0,0,243,4,0,0,0,20,1,255,128,122,19, - 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, - 104,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,3,0,0,0,115,16,0,0, - 0,116,0,116,1,124,0,131,2,160,2,124,1,161,1,83, - 0,41,2,122,100,76,111,97,100,32,97,32,109,111,100,117, - 108,101,32,102,114,111,109,32,97,32,102,105,108,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, - 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, - 10,32,32,32,32,32,32,32,32,78,41,3,218,5,115,117, - 112,101,114,114,10,1,0,0,114,247,0,0,0,114,246,0, - 0,0,169,1,114,13,1,0,0,114,7,0,0,0,114,8, - 0,0,0,114,247,0,0,0,26,4,0,0,115,4,0,0, - 0,16,10,255,128,122,22,70,105,108,101,76,111,97,100,101, - 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,243,6,0,0,0,124,0,106,0,83, - 0,169,2,122,58,82,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, - 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,78, - 114,71,0,0,0,114,246,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,203,0,0,0,38,4, - 0,0,243,4,0,0,0,6,3,255,128,122,23,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, - 110,97,109,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,8,0,0,0,67,0,0,0,115,128,0, - 0,0,116,0,124,0,116,1,116,2,102,2,131,2,114,36, - 116,3,160,4,116,5,124,1,131,1,161,1,143,12,125,2, - 124,2,160,6,161,0,87,0,2,0,100,1,4,0,4,0, - 131,3,1,0,83,0,49,0,115,29,119,1,1,0,1,0, - 1,0,89,0,1,0,100,1,83,0,116,3,160,7,124,1, - 100,2,161,2,143,12,125,2,124,2,160,6,161,0,87,0, - 2,0,100,1,4,0,4,0,131,3,1,0,83,0,49,0, - 115,57,119,1,1,0,1,0,1,0,89,0,1,0,100,1, - 83,0,41,3,122,39,82,101,116,117,114,110,32,116,104,101, - 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, - 97,115,32,114,97,119,32,98,121,116,101,115,46,78,218,1, - 114,41,8,114,185,0,0,0,114,248,0,0,0,218,19,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,114,91,0,0,0,90,9,111,112,101,110,95,99,111, - 100,101,114,109,0,0,0,90,4,114,101,97,100,114,92,0, - 0,0,41,3,114,143,0,0,0,114,65,0,0,0,114,94, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,254,0,0,0,43,4,0,0,115,16,0,0,0, - 14,2,16,1,22,1,20,128,14,2,22,1,20,128,255,128, - 122,19,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,100,97,116,97,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,20, - 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, - 2,124,0,131,1,83,0,41,3,78,114,0,0,0,0,41, - 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, - 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, - 114,115,114,30,1,0,0,41,3,114,143,0,0,0,114,243, - 0,0,0,114,30,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,19,103,101,116,95,114,101,115, - 111,117,114,99,101,95,114,101,97,100,101,114,52,4,0,0, - 115,6,0,0,0,12,2,8,1,255,128,122,30,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, - 117,114,99,101,95,114,101,97,100,101,114,41,13,114,150,0, - 0,0,114,149,0,0,0,114,151,0,0,0,114,152,0,0, - 0,114,235,0,0,0,114,15,1,0,0,114,21,1,0,0, - 114,160,0,0,0,114,247,0,0,0,114,203,0,0,0,114, - 254,0,0,0,114,32,1,0,0,90,13,95,95,99,108,97, - 115,115,99,101,108,108,95,95,114,7,0,0,0,114,7,0, - 0,0,114,24,1,0,0,114,8,0,0,0,114,10,1,0, - 0,8,4,0,0,115,26,0,0,0,8,0,4,2,8,3, - 8,6,8,4,2,3,14,1,2,11,10,1,8,4,2,9, - 18,1,255,128,114,10,1,0,0,99,0,0,0,0,0,0, + 114,241,0,0,0,107,4,0,0,115,24,0,0,0,10,1, + 10,1,2,4,2,1,6,254,12,4,2,1,14,1,2,1, + 2,1,6,253,255,128,122,29,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,23, + 0,0,0,41,2,122,39,82,101,116,117,114,110,32,78,111, + 110,101,32,97,115,32,116,104,101,114,101,32,105,115,32,110, + 111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114, + 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,1,1,0,0,123,4,0, + 0,114,24,0,0,0,122,31,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,78,41,6,114,150,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,152,0,0,0,114,241, + 0,0,0,114,1,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,41,1,0, + 0,103,4,0,0,115,10,0,0,0,8,0,4,2,8,2, + 12,16,255,128,114,41,1,0,0,99,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100, + 0,0,115,92,0,0,0,101,0,90,1,100,0,90,2,100, 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90, - 6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, - 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, - 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, - 2,106,1,124,2,106,2,100,1,156,2,83,0,41,3,122, - 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, - 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, - 104,46,41,2,114,193,0,0,0,114,5,1,0,0,78,41, - 3,114,75,0,0,0,218,8,115,116,95,109,116,105,109,101, - 90,7,115,116,95,115,105,122,101,41,3,114,143,0,0,0, - 114,65,0,0,0,114,9,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,251,0,0,0,62,4, - 0,0,115,6,0,0,0,8,2,14,1,255,128,122,27,83, - 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, - 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,24,0,0,0,116,0,124,1,131,1,125,4, - 124,0,106,1,124,2,124,3,124,4,100,1,141,3,83,0, - 41,2,78,169,1,218,5,95,109,111,100,101,41,2,114,139, - 0,0,0,114,252,0,0,0,41,5,114,143,0,0,0,114, - 134,0,0,0,114,132,0,0,0,114,41,0,0,0,114,78, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,253,0,0,0,67,4,0,0,115,6,0,0,0, - 8,2,16,1,255,128,122,32,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, - 98,121,116,101,99,111,100,101,114,87,0,0,0,114,35,1, - 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,9, - 0,0,0,11,0,0,0,67,0,0,0,115,254,0,0,0, - 116,0,124,1,131,1,92,2,125,4,125,5,103,0,125,6, - 124,4,114,31,116,1,124,4,131,1,115,31,116,0,124,4, - 131,1,92,2,125,4,125,7,124,6,160,2,124,7,161,1, - 1,0,124,4,114,31,116,1,124,4,131,1,114,14,116,3, - 124,6,131,1,68,0,93,48,125,7,116,4,124,4,124,7, - 131,2,125,4,122,7,116,5,160,6,124,4,161,1,1,0, - 87,0,113,35,4,0,116,7,121,58,1,0,1,0,1,0, - 89,0,113,35,4,0,116,8,121,126,1,0,125,8,1,0, - 122,15,116,9,160,10,100,1,124,4,124,8,161,3,1,0, - 87,0,89,0,100,2,125,8,126,8,1,0,100,2,83,0, - 100,2,125,8,126,8,119,1,122,15,116,11,124,1,124,2, - 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, - 1,0,87,0,100,2,83,0,4,0,116,8,121,125,1,0, - 125,8,1,0,122,14,116,9,160,10,100,1,124,1,124,8, - 161,3,1,0,87,0,89,0,100,2,125,8,126,8,100,2, - 83,0,100,2,125,8,126,8,119,1,119,0,119,0,41,4, - 122,27,87,114,105,116,101,32,98,121,116,101,115,32,100,97, - 116,97,32,116,111,32,97,32,102,105,108,101,46,122,27,99, - 111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32, - 123,33,114,125,58,32,123,33,114,125,78,122,12,99,114,101, - 97,116,101,100,32,123,33,114,125,41,12,114,74,0,0,0, - 114,83,0,0,0,114,61,0,0,0,218,8,114,101,118,101, - 114,115,101,100,114,67,0,0,0,114,18,0,0,0,90,5, - 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, - 115,69,114,114,111,114,114,76,0,0,0,114,159,0,0,0, - 114,173,0,0,0,114,95,0,0,0,41,9,114,143,0,0, - 0,114,65,0,0,0,114,41,0,0,0,114,36,1,0,0, - 218,6,112,97,114,101,110,116,114,120,0,0,0,114,63,0, - 0,0,114,68,0,0,0,114,255,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,252,0,0,0, - 72,4,0,0,115,58,0,0,0,12,2,4,1,12,2,12, - 1,10,1,12,254,12,4,10,1,2,1,14,1,12,1,4, - 2,14,1,6,3,4,1,4,255,16,2,8,128,2,1,12, - 1,18,1,14,1,8,2,2,1,18,255,8,128,2,254,2, - 247,255,128,122,25,83,111,117,114,99,101,70,105,108,101,76, - 111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,41, - 7,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, - 114,152,0,0,0,114,251,0,0,0,114,253,0,0,0,114, - 252,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,33,1,0,0,58,4,0, - 0,115,12,0,0,0,8,0,4,2,8,2,8,5,18,5, - 255,128,114,33,1,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, - 115,32,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,83,0,41,7,218,20,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,122,45,76, - 111,97,100,101,114,32,119,104,105,99,104,32,104,97,110,100, - 108,101,115,32,115,111,117,114,99,101,108,101,115,115,32,102, - 105,108,101,32,105,109,112,111,114,116,115,46,99,2,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,67,0,0,0,115,68,0,0,0,124,0,160,0,124,1, - 161,1,125,2,124,0,160,1,124,2,161,1,125,3,124,1, - 124,2,100,1,156,2,125,4,116,2,124,3,124,1,124,4, - 131,3,1,0,116,3,116,4,124,3,131,1,100,2,100,0, - 133,2,25,0,124,1,124,2,100,3,141,3,83,0,41,4, - 78,114,183,0,0,0,114,169,0,0,0,41,2,114,141,0, - 0,0,114,132,0,0,0,41,5,114,203,0,0,0,114,254, - 0,0,0,114,176,0,0,0,114,189,0,0,0,114,6,1, - 0,0,41,5,114,143,0,0,0,114,163,0,0,0,114,65, - 0,0,0,114,41,0,0,0,114,175,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, - 0,107,4,0,0,115,24,0,0,0,10,1,10,1,2,4, - 2,1,6,254,12,4,2,1,14,1,2,1,2,1,6,253, - 255,128,122,29,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,41, - 2,122,39,82,101,116,117,114,110,32,78,111,110,101,32,97, - 115,32,116,104,101,114,101,32,105,115,32,110,111,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,7,0,0,0, - 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,0,1,0,0,123,4,0,0,114,24,0, - 0,0,122,31,83,111,117,114,99,101,108,101,115,115,70,105, + 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, + 0,90,7,100,10,100,11,132,0,90,8,100,12,100,13,132, + 0,90,9,100,14,100,15,132,0,90,10,100,16,100,17,132, + 0,90,11,101,12,100,18,100,19,132,0,131,1,90,13,100, + 20,83,0,41,21,114,30,1,0,0,122,93,76,111,97,100, + 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, + 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, + 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, + 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, + 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, + 0,0,115,16,0,0,0,124,1,124,0,95,0,124,2,124, + 0,95,1,100,0,83,0,114,69,0,0,0,114,183,0,0, + 0,41,3,114,143,0,0,0,114,141,0,0,0,114,65,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,236,0,0,0,136,4,0,0,115,6,0,0,0,6, + 1,10,1,255,128,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,114,12,1,0, + 0,114,69,0,0,0,114,13,1,0,0,114,15,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 16,1,0,0,140,4,0,0,114,17,1,0,0,122,26,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,46,95,95,101,113,95,95,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,114,18,1,0,0,114,69,0,0,0,114,19,1,0, + 0,114,21,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,22,1,0,0,144,4,0,0,114,23, + 1,0,0,122,28,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, + 95,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, + 0,160,1,116,2,106,3,124,1,161,2,125,2,116,0,160, + 4,100,1,124,1,106,5,124,0,106,6,161,3,1,0,124, + 2,83,0,41,3,122,38,67,114,101,97,116,101,32,97,110, + 32,117,110,105,116,105,97,108,105,122,101,100,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,122,38,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, + 123,33,114,125,32,108,111,97,100,101,100,32,102,114,111,109, + 32,123,33,114,125,78,41,7,114,159,0,0,0,114,242,0, + 0,0,114,187,0,0,0,90,14,99,114,101,97,116,101,95, + 100,121,110,97,109,105,99,114,173,0,0,0,114,141,0,0, + 0,114,65,0,0,0,41,3,114,143,0,0,0,114,210,0, + 0,0,114,244,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,239,0,0,0,147,4,0,0,115, + 16,0,0,0,4,2,6,1,4,255,6,2,8,1,4,255, + 4,2,255,128,122,33,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,99,114,101,97,116,101, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,5,0,0,0,67,0,0,0, + 115,36,0,0,0,116,0,160,1,116,2,106,3,124,1,161, + 2,1,0,116,0,160,4,100,1,124,0,106,5,124,0,106, + 6,161,3,1,0,100,2,83,0,41,3,122,30,73,110,105, + 116,105,97,108,105,122,101,32,97,110,32,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,122,40,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, + 114,125,32,101,120,101,99,117,116,101,100,32,102,114,111,109, + 32,123,33,114,125,78,41,7,114,159,0,0,0,114,242,0, + 0,0,114,187,0,0,0,90,12,101,120,101,99,95,100,121, + 110,97,109,105,99,114,173,0,0,0,114,141,0,0,0,114, + 65,0,0,0,169,2,114,143,0,0,0,114,244,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 245,0,0,0,155,4,0,0,115,10,0,0,0,14,2,6, + 1,8,1,8,255,255,128,122,31,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,101, + 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, + 0,115,36,0,0,0,116,0,124,0,106,1,131,1,100,1, + 25,0,137,0,116,2,135,0,102,1,100,2,100,3,132,8, + 116,3,68,0,131,1,131,1,83,0,41,5,122,49,82,101, + 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, + 3,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,51,0,0,0,115,28,0, + 0,0,129,0,124,0,93,9,125,1,136,0,100,0,124,1, + 23,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2, + 114,236,0,0,0,78,114,7,0,0,0,169,2,114,5,0, + 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105, + 108,101,95,110,97,109,101,114,7,0,0,0,114,8,0,0, + 0,114,9,0,0,0,164,4,0,0,115,8,0,0,0,6, + 128,2,1,20,255,255,128,122,49,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, + 112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,78,41,4,114,74,0, + 0,0,114,65,0,0,0,218,3,97,110,121,114,232,0,0, + 0,114,247,0,0,0,114,7,0,0,0,114,45,1,0,0, + 114,8,0,0,0,114,206,0,0,0,161,4,0,0,115,10, + 0,0,0,14,2,12,1,2,1,8,255,255,128,122,30,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,41,2,122,63,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,97,110, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32, + 97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114, + 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,241,0,0,0,167,4,0, + 0,114,24,0,0,0,122,28,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, + 0,0,41,2,122,53,82,101,116,117,114,110,32,78,111,110, + 101,32,97,115,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,115, + 111,117,114,99,101,32,99,111,100,101,46,78,114,7,0,0, + 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,1,1,0,0,171,4,0,0,114,24, + 0,0,0,122,30,69,120,116,101,110,115,105,111,110,70,105, 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,78,41,6,114,150,0,0,0,114,149,0,0,0, - 114,151,0,0,0,114,152,0,0,0,114,240,0,0,0,114, - 0,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,40,1,0,0,103,4,0, - 0,115,10,0,0,0,8,0,4,2,8,2,12,16,255,128, - 114,40,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,92, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, - 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, - 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,101, - 12,100,18,100,19,132,0,131,1,90,13,100,20,83,0,41, - 21,114,29,1,0,0,122,93,76,111,97,100,101,114,32,102, - 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, - 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, - 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, - 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, - 10,32,32,32,32,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, - 0,83,0,114,69,0,0,0,114,183,0,0,0,41,3,114, - 143,0,0,0,114,141,0,0,0,114,65,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, - 0,0,136,4,0,0,115,6,0,0,0,6,1,10,1,255, - 128,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 2,0,0,0,67,0,0,0,114,11,1,0,0,114,69,0, - 0,0,114,12,1,0,0,114,14,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,15,1,0,0, - 140,4,0,0,114,16,1,0,0,122,26,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, - 95,101,113,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,17, - 1,0,0,114,69,0,0,0,114,18,1,0,0,114,20,1, + 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,26,1,0, + 0,114,27,1,0,0,114,71,0,0,0,114,247,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 203,0,0,0,175,4,0,0,114,28,1,0,0,122,32,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,78, + 41,14,114,150,0,0,0,114,149,0,0,0,114,151,0,0, + 0,114,152,0,0,0,114,236,0,0,0,114,16,1,0,0, + 114,22,1,0,0,114,239,0,0,0,114,245,0,0,0,114, + 206,0,0,0,114,241,0,0,0,114,1,1,0,0,114,160, + 0,0,0,114,203,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,30,1,0, + 0,128,4,0,0,115,26,0,0,0,8,0,4,2,8,6, + 8,4,8,4,8,3,8,8,8,6,8,6,8,4,2,4, + 14,1,255,128,114,30,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,104,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, + 0,90,7,100,10,100,11,132,0,90,8,100,12,100,13,132, + 0,90,9,100,14,100,15,132,0,90,10,100,16,100,17,132, + 0,90,11,100,18,100,19,132,0,90,12,100,20,100,21,132, + 0,90,13,100,22,100,23,132,0,90,14,100,24,83,0,41, + 25,218,14,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,97,38,1,0,0,82,101,112,114,101,115,101,110,116,115, + 32,97,32,110,97,109,101,115,112,97,99,101,32,112,97,99, + 107,97,103,101,39,115,32,112,97,116,104,46,32,32,73,116, + 32,117,115,101,115,32,116,104,101,32,109,111,100,117,108,101, + 32,110,97,109,101,10,32,32,32,32,116,111,32,102,105,110, + 100,32,105,116,115,32,112,97,114,101,110,116,32,109,111,100, + 117,108,101,44,32,97,110,100,32,102,114,111,109,32,116,104, + 101,114,101,32,105,116,32,108,111,111,107,115,32,117,112,32, + 116,104,101,32,112,97,114,101,110,116,39,115,10,32,32,32, + 32,95,95,112,97,116,104,95,95,46,32,32,87,104,101,110, + 32,116,104,105,115,32,99,104,97,110,103,101,115,44,32,116, + 104,101,32,109,111,100,117,108,101,39,115,32,111,119,110,32, + 112,97,116,104,32,105,115,32,114,101,99,111,109,112,117,116, + 101,100,44,10,32,32,32,32,117,115,105,110,103,32,112,97, + 116,104,95,102,105,110,100,101,114,46,32,32,70,111,114,32, + 116,111,112,45,108,101,118,101,108,32,109,111,100,117,108,101, + 115,44,32,116,104,101,32,112,97,114,101,110,116,32,109,111, + 100,117,108,101,39,115,32,112,97,116,104,10,32,32,32,32, + 105,115,32,115,121,115,46,112,97,116,104,46,99,4,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,67,0,0,0,115,36,0,0,0,124,1,124,0,95,0, + 124,2,124,0,95,1,116,2,124,0,160,3,161,0,131,1, + 124,0,95,4,124,3,124,0,95,5,100,0,83,0,114,69, + 0,0,0,41,6,218,5,95,110,97,109,101,218,5,95,112, + 97,116,104,114,136,0,0,0,218,16,95,103,101,116,95,112, + 97,114,101,110,116,95,112,97,116,104,218,17,95,108,97,115, + 116,95,112,97,114,101,110,116,95,112,97,116,104,218,12,95, + 112,97,116,104,95,102,105,110,100,101,114,169,4,114,143,0, + 0,0,114,141,0,0,0,114,65,0,0,0,90,11,112,97, + 116,104,95,102,105,110,100,101,114,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,236,0,0,0,188,4,0, + 0,115,10,0,0,0,6,1,6,1,14,1,10,1,255,128, + 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, + 0,0,115,38,0,0,0,124,0,106,0,160,1,100,1,161, + 1,92,3,125,1,125,2,125,3,124,2,100,2,107,2,114, + 15,100,3,83,0,124,1,100,4,102,2,83,0,41,6,122, + 62,82,101,116,117,114,110,115,32,97,32,116,117,112,108,101, + 32,111,102,32,40,112,97,114,101,110,116,45,109,111,100,117, + 108,101,45,110,97,109,101,44,32,112,97,114,101,110,116,45, + 112,97,116,104,45,97,116,116,114,45,110,97,109,101,41,114, + 97,0,0,0,114,10,0,0,0,41,2,114,15,0,0,0, + 114,65,0,0,0,90,8,95,95,112,97,116,104,95,95,78, + 41,2,114,48,1,0,0,114,104,0,0,0,41,4,114,143, + 0,0,0,114,40,1,0,0,218,3,100,111,116,90,2,109, + 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,112, + 97,116,104,95,110,97,109,101,115,194,4,0,0,115,10,0, + 0,0,18,2,8,1,4,2,8,3,255,128,122,38,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, + 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, + 97,109,101,115,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,67,0,0,0,115,28,0, + 0,0,124,0,160,0,161,0,92,2,125,1,125,2,116,1, + 116,2,106,3,124,1,25,0,124,2,131,2,83,0,114,69, + 0,0,0,41,4,114,55,1,0,0,114,155,0,0,0,114, + 15,0,0,0,218,7,109,111,100,117,108,101,115,41,3,114, + 143,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, + 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, + 116,116,114,95,110,97,109,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,50,1,0,0,204,4,0,0, + 115,6,0,0,0,12,1,16,1,255,128,122,31,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, + 95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0, + 0,67,0,0,0,115,80,0,0,0,116,0,124,0,160,1, + 161,0,131,1,125,1,124,1,124,0,106,2,107,3,114,37, + 124,0,160,3,124,0,106,4,124,1,161,2,125,2,124,2, + 100,0,117,1,114,34,124,2,106,5,100,0,117,0,114,34, + 124,2,106,6,114,34,124,2,106,6,124,0,95,7,124,1, + 124,0,95,2,124,0,106,7,83,0,114,69,0,0,0,41, + 8,114,136,0,0,0,114,50,1,0,0,114,51,1,0,0, + 114,52,1,0,0,114,48,1,0,0,114,164,0,0,0,114, + 202,0,0,0,114,49,1,0,0,41,3,114,143,0,0,0, + 90,11,112,97,114,101,110,116,95,112,97,116,104,114,210,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,21,1,0,0,144,4,0,0,114,22,1,0,0,122, - 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,5,0, - 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, - 2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,124, - 1,106,5,124,0,106,6,161,3,1,0,124,2,83,0,41, - 3,122,38,67,114,101,97,116,101,32,97,110,32,117,110,105, - 116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, - 32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,114, - 125,78,41,7,114,159,0,0,0,114,241,0,0,0,114,187, - 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, - 109,105,99,114,173,0,0,0,114,141,0,0,0,114,65,0, - 0,0,41,3,114,143,0,0,0,114,210,0,0,0,114,243, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,238,0,0,0,147,4,0,0,115,16,0,0,0, - 4,2,6,1,4,255,6,2,8,1,4,255,4,2,255,128, - 122,33,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,5,0,0,0,67,0,0,0,115,36,0,0, - 0,116,0,160,1,116,2,106,3,124,1,161,2,1,0,116, - 0,160,4,100,1,124,0,106,5,124,0,106,6,161,3,1, - 0,100,2,83,0,41,3,122,30,73,110,105,116,105,97,108, - 105,122,101,32,97,110,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,40,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,101, - 120,101,99,117,116,101,100,32,102,114,111,109,32,123,33,114, - 125,78,41,7,114,159,0,0,0,114,241,0,0,0,114,187, - 0,0,0,90,12,101,120,101,99,95,100,121,110,97,109,105, - 99,114,173,0,0,0,114,141,0,0,0,114,65,0,0,0, - 169,2,114,143,0,0,0,114,243,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,244,0,0,0, - 155,4,0,0,115,10,0,0,0,14,2,6,1,8,1,8, - 255,255,128,122,31,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,3,0,0,0,115,36,0, - 0,0,116,0,124,0,106,1,131,1,100,1,25,0,137,0, - 116,2,135,0,102,1,100,2,100,3,132,8,116,3,68,0, - 131,1,131,1,83,0,41,5,122,49,82,101,116,117,114,110, - 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, - 32,97,32,112,97,99,107,97,103,101,46,114,3,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,4,0,0,0,51,0,0,0,115,28,0,0,0,129,0, - 124,0,93,9,125,1,136,0,100,0,124,1,23,0,107,2, - 86,0,1,0,113,2,100,1,83,0,41,2,114,235,0,0, - 0,78,114,7,0,0,0,169,2,114,5,0,0,0,218,6, - 115,117,102,102,105,120,169,1,90,9,102,105,108,101,95,110, - 97,109,101,114,7,0,0,0,114,8,0,0,0,114,9,0, - 0,0,164,4,0,0,115,8,0,0,0,6,128,2,1,20, - 255,255,128,122,49,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, - 97,103,101,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,78,41,4,114,74,0,0,0,114,65, - 0,0,0,218,3,97,110,121,114,231,0,0,0,114,246,0, - 0,0,114,7,0,0,0,114,44,1,0,0,114,8,0,0, - 0,114,206,0,0,0,161,4,0,0,115,10,0,0,0,14, - 2,12,1,2,1,8,255,255,128,122,30,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, + 0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,208, + 4,0,0,115,18,0,0,0,12,2,10,1,14,1,18,3, + 6,1,8,1,6,1,6,1,255,128,122,27,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, + 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 243,12,0,0,0,116,0,124,0,160,1,161,0,131,1,83, + 0,114,69,0,0,0,41,2,218,4,105,116,101,114,114,57, + 1,0,0,114,21,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,8,95,95,105,116,101,114,95, + 95,221,4,0,0,243,4,0,0,0,12,1,255,128,122,23, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,105,116,101,114,95,95,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,12,0,0,0,124,0,160,0,161,0,124,1,25,0,83, + 0,114,69,0,0,0,169,1,114,57,1,0,0,41,2,114, + 143,0,0,0,218,5,105,110,100,101,120,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,11,95,95,103,101, + 116,105,116,101,109,95,95,224,4,0,0,114,61,1,0,0, + 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,14,0,0,0,124,2,124,0,106,0, + 124,1,60,0,100,0,83,0,114,69,0,0,0,41,1,114, + 49,1,0,0,41,3,114,143,0,0,0,114,63,1,0,0, + 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, + 95,227,4,0,0,115,4,0,0,0,14,1,255,128,122,26, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,114,58,1,0,0,114,69,0,0,0,41,2,114, + 4,0,0,0,114,57,1,0,0,114,21,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,7,95, + 95,108,101,110,95,95,230,4,0,0,114,61,1,0,0,122, + 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 243,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, + 0,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,40,123,33,114,125,41,41,2,114,89,0,0, + 0,114,49,1,0,0,114,21,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,8,95,95,114,101, + 112,114,95,95,233,4,0,0,114,61,1,0,0,122,23,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 12,0,0,0,124,1,124,0,160,0,161,0,118,0,83,0, + 114,69,0,0,0,114,62,1,0,0,169,2,114,143,0,0, + 0,218,4,105,116,101,109,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,105, + 110,115,95,95,236,4,0,0,114,61,1,0,0,122,27,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 99,111,110,116,97,105,110,115,95,95,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,16,0,0,0,124,0,106,0,160,1,124,1, + 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, + 49,1,0,0,114,61,0,0,0,114,69,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,61,0, + 0,0,239,4,0,0,243,4,0,0,0,16,1,255,128,122, + 21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 97,112,112,101,110,100,78,41,15,114,150,0,0,0,114,149, + 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, + 0,0,114,55,1,0,0,114,50,1,0,0,114,57,1,0, + 0,114,60,1,0,0,114,64,1,0,0,114,65,1,0,0, + 114,66,1,0,0,114,68,1,0,0,114,71,1,0,0,114, + 61,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,47,1,0,0,181,4,0, + 0,115,28,0,0,0,8,0,4,1,8,6,8,6,8,10, + 8,4,8,13,8,3,8,3,8,3,8,3,8,3,12,3, + 255,128,114,47,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, + 115,88,0,0,0,101,0,90,1,100,0,90,2,100,1,100, + 2,132,0,90,3,101,4,100,3,100,4,132,0,131,1,90, + 5,100,5,100,6,132,0,90,6,100,7,100,8,132,0,90, + 7,100,9,100,10,132,0,90,8,100,11,100,12,132,0,90, + 9,100,13,100,14,132,0,90,10,100,15,100,16,132,0,90, + 11,100,17,100,18,132,0,90,12,100,19,83,0,41,20,218, + 16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,4,0,0,0,67,0,0,0,115,18,0,0,0,116, + 0,124,1,124,2,124,3,131,3,124,0,95,1,100,0,83, + 0,114,69,0,0,0,41,2,114,47,1,0,0,114,49,1, + 0,0,114,53,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,236,0,0,0,245,4,0,0,115, + 4,0,0,0,18,1,255,128,122,25,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,67,0,0,0,115,24,0,0, + 0,116,0,160,1,100,1,116,2,161,2,1,0,100,2,160, + 3,124,0,106,4,161,1,83,0,41,4,122,115,82,101,116, + 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, + 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, + 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, + 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, + 122,82,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,109,111,100,117,108,101,95,114,101,112,114,40,41, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, + 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, + 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, + 51,46,49,50,122,25,60,109,111,100,117,108,101,32,123,33, + 114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,78, + 41,5,114,99,0,0,0,114,100,0,0,0,114,101,0,0, + 0,114,89,0,0,0,114,150,0,0,0,41,1,114,244,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,11,109,111,100,117,108,101,95,114,101,112,114,248,4, + 0,0,115,10,0,0,0,6,7,2,1,4,255,12,2,255, + 128,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,114,23,0,0,0,41,2,78, + 84,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,206,0,0,0,3, + 5,0,0,243,4,0,0,0,4,1,255,128,122,27,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,105, 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,114,23,0,0,0,41,2,122,63,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97, - 110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,46,78,114,7,0,0,0, - 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,240,0,0,0,167,4,0,0,114,24,0, - 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,114,23,0,0,0,41,2, - 122,53,82,101,116,117,114,110,32,78,111,110,101,32,97,115, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,114,7,0,0,0,114,246,0, + 0,0,114,23,0,0,0,41,2,78,114,10,0,0,0,114, + 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,1,1,0,0,6,5,0, + 0,114,75,1,0,0,122,27,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,6,0,0,0,67,0,0,0,115,16,0,0, + 0,116,0,100,1,100,2,100,3,100,4,100,5,141,4,83, + 0,41,6,78,114,10,0,0,0,122,8,60,115,116,114,105, + 110,103,62,114,243,0,0,0,84,41,1,114,3,1,0,0, + 41,1,114,4,1,0,0,114,247,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,241,0,0,0, + 9,5,0,0,114,72,1,0,0,122,25,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, + 0,0,114,237,0,0,0,114,7,0,0,0,114,238,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,239,0,0,0,12,5,0,0,114,240,0,0,0,122,30, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,0, + 114,69,0,0,0,114,7,0,0,0,114,42,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,245, + 0,0,0,15,5,0,0,114,75,1,0,0,122,28,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, + 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,26,0,0,0,116,0,160,1,100,1,124,0, + 106,2,161,2,1,0,116,0,160,3,124,0,124,1,161,2, + 83,0,41,3,122,98,76,111,97,100,32,97,32,110,97,109, + 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, + 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, + 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, + 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, + 78,41,4,114,159,0,0,0,114,173,0,0,0,114,49,1, + 0,0,114,246,0,0,0,114,247,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,248,0,0,0, + 18,5,0,0,115,10,0,0,0,6,7,4,1,4,255,12, + 3,255,128,122,28,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,100, + 1,100,2,108,0,109,1,125,2,1,0,124,2,124,0,106, + 2,131,1,83,0,41,3,78,114,0,0,0,0,41,1,218, + 15,78,97,109,101,115,112,97,99,101,82,101,97,100,101,114, + 41,3,114,32,1,0,0,114,76,1,0,0,114,49,1,0, + 0,41,3,114,143,0,0,0,114,244,0,0,0,114,76,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,0,1,0,0,171,4,0,0,114,24,0,0,0,122, - 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,25,1,0,0,114,26,1, - 0,0,114,71,0,0,0,114,246,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,203,0,0,0, - 175,4,0,0,114,27,1,0,0,122,32,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, - 101,116,95,102,105,108,101,110,97,109,101,78,41,14,114,150, - 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, - 0,0,114,235,0,0,0,114,15,1,0,0,114,21,1,0, - 0,114,238,0,0,0,114,244,0,0,0,114,206,0,0,0, - 114,240,0,0,0,114,0,1,0,0,114,160,0,0,0,114, - 203,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,29,1,0,0,128,4,0, - 0,115,26,0,0,0,8,0,4,2,8,6,8,4,8,4, - 8,3,8,8,8,6,8,6,8,4,2,4,14,1,255,128, - 114,29,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,104, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, - 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, - 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,100, - 18,100,19,132,0,90,12,100,20,100,21,132,0,90,13,100, - 22,100,23,132,0,90,14,100,24,83,0,41,25,218,14,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,1, - 0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,110, - 97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,101, - 39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,101, - 115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, - 101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,116, - 115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,44, - 32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,32, - 105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,32, - 112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,112, - 97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,105, - 115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,109, - 111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,104, - 32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,10, - 32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,102, - 105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,45, - 108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,116, - 104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,101, - 39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,115, - 121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, - 0,115,36,0,0,0,124,1,124,0,95,0,124,2,124,0, - 95,1,116,2,124,0,160,3,161,0,131,1,124,0,95,4, - 124,3,124,0,95,5,100,0,83,0,114,69,0,0,0,41, - 6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,114, - 136,0,0,0,218,16,95,103,101,116,95,112,97,114,101,110, - 116,95,112,97,116,104,218,17,95,108,97,115,116,95,112,97, - 114,101,110,116,95,112,97,116,104,218,12,95,112,97,116,104, - 95,102,105,110,100,101,114,169,4,114,143,0,0,0,114,141, - 0,0,0,114,65,0,0,0,90,11,112,97,116,104,95,102, + 0,114,33,1,0,0,30,5,0,0,115,6,0,0,0,12, + 1,10,1,255,128,122,36,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, + 117,114,99,101,95,114,101,97,100,101,114,78,41,13,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,236,0, + 0,0,114,233,0,0,0,114,74,1,0,0,114,206,0,0, + 0,114,1,1,0,0,114,241,0,0,0,114,239,0,0,0, + 114,245,0,0,0,114,248,0,0,0,114,33,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,73,1,0,0,244,4,0,0,115,24,0,0, + 0,8,0,8,1,2,3,10,1,8,10,8,3,8,3,8, + 3,8,3,8,3,12,12,255,128,114,73,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,64,0,0,0,115,118,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, + 131,1,90,5,101,4,100,4,100,5,132,0,131,1,90,6, + 101,7,100,6,100,7,132,0,131,1,90,8,101,7,100,8, + 100,9,132,0,131,1,90,9,101,7,100,19,100,11,100,12, + 132,1,131,1,90,10,101,7,100,20,100,13,100,14,132,1, + 131,1,90,11,101,7,100,19,100,15,100,16,132,1,131,1, + 90,12,101,4,100,17,100,18,132,0,131,1,90,13,100,10, + 83,0,41,21,218,10,80,97,116,104,70,105,110,100,101,114, + 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, + 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, + 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, + 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, + 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,64,0,0,0,116,0, + 116,1,106,2,160,3,161,0,131,1,68,0,93,22,92,2, + 125,0,125,1,124,1,100,1,117,0,114,20,116,1,106,2, + 124,0,61,0,113,7,116,4,124,1,100,2,131,2,114,29, + 124,1,160,5,161,0,1,0,113,7,100,1,83,0,41,3, + 122,125,67,97,108,108,32,116,104,101,32,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,40,41,32,109, + 101,116,104,111,100,32,111,110,32,97,108,108,32,112,97,116, + 104,32,101,110,116,114,121,32,102,105,110,100,101,114,115,10, + 32,32,32,32,32,32,32,32,115,116,111,114,101,100,32,105, + 110,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,115,32,40,119,104,101,114, + 101,32,105,109,112,108,101,109,101,110,116,101,100,41,46,78, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,41,6,218,4,108,105,115,116,114,15,0,0,0, + 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,218,5,105,116,101,109,115,114,153,0,0, + 0,114,78,1,0,0,41,2,114,141,0,0,0,218,6,102, 105,110,100,101,114,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,235,0,0,0,188,4,0,0,115,10,0, - 0,0,6,1,6,1,14,1,10,1,255,128,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, - 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, - 0,0,0,124,0,106,0,160,1,100,1,161,1,92,3,125, - 1,125,2,125,3,124,2,100,2,107,2,114,15,100,3,83, - 0,124,1,100,4,102,2,83,0,41,6,122,62,82,101,116, - 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, - 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, - 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, - 45,97,116,116,114,45,110,97,109,101,41,114,97,0,0,0, - 114,10,0,0,0,41,2,114,15,0,0,0,114,65,0,0, - 0,90,8,95,95,112,97,116,104,95,95,78,41,2,114,47, - 1,0,0,114,104,0,0,0,41,4,114,143,0,0,0,114, - 39,1,0,0,218,3,100,111,116,90,2,109,101,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,102, - 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, - 110,97,109,101,115,194,4,0,0,115,10,0,0,0,18,2, - 8,1,4,2,8,3,255,128,122,38,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, - 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, - 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,28,0,0,0,124,0, - 160,0,161,0,92,2,125,1,125,2,116,1,116,2,106,3, - 124,1,25,0,124,2,131,2,83,0,114,69,0,0,0,41, - 4,114,54,1,0,0,114,155,0,0,0,114,15,0,0,0, - 218,7,109,111,100,117,108,101,115,41,3,114,143,0,0,0, - 90,18,112,97,114,101,110,116,95,109,111,100,117,108,101,95, - 110,97,109,101,90,14,112,97,116,104,95,97,116,116,114,95, - 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,49,1,0,0,204,4,0,0,115,6,0,0, - 0,12,1,16,1,255,128,122,31,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,114, - 101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, - 0,115,80,0,0,0,116,0,124,0,160,1,161,0,131,1, - 125,1,124,1,124,0,106,2,107,3,114,37,124,0,160,3, - 124,0,106,4,124,1,161,2,125,2,124,2,100,0,117,1, - 114,34,124,2,106,5,100,0,117,0,114,34,124,2,106,6, - 114,34,124,2,106,6,124,0,95,7,124,1,124,0,95,2, - 124,0,106,7,83,0,114,69,0,0,0,41,8,114,136,0, - 0,0,114,49,1,0,0,114,50,1,0,0,114,51,1,0, - 0,114,47,1,0,0,114,164,0,0,0,114,202,0,0,0, - 114,48,1,0,0,41,3,114,143,0,0,0,90,11,112,97, - 114,101,110,116,95,112,97,116,104,114,210,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,12,95, - 114,101,99,97,108,99,117,108,97,116,101,208,4,0,0,115, - 18,0,0,0,12,2,10,1,14,1,18,3,6,1,8,1, - 6,1,6,1,255,128,122,27,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,114,101,99,97,108,99,117,108, - 97,116,101,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,243,12,0,0, - 0,116,0,124,0,160,1,161,0,131,1,83,0,114,69,0, - 0,0,41,2,218,4,105,116,101,114,114,56,1,0,0,114, - 20,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,8,95,95,105,116,101,114,95,95,221,4,0, - 0,243,4,0,0,0,12,1,255,128,122,23,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,105,116,101, - 114,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, - 0,124,0,160,0,161,0,124,1,25,0,83,0,114,69,0, - 0,0,169,1,114,56,1,0,0,41,2,114,143,0,0,0, - 218,5,105,110,100,101,120,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,11,95,95,103,101,116,105,116,101, - 109,95,95,224,4,0,0,114,60,1,0,0,122,26,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,103, - 101,116,105,116,101,109,95,95,99,3,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,14,0,0,0,124,2,124,0,106,0,124,1,60,0, - 100,0,83,0,114,69,0,0,0,41,1,114,48,1,0,0, - 41,3,114,143,0,0,0,114,62,1,0,0,114,65,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,11,95,95,115,101,116,105,116,101,109,95,95,227,4,0, - 0,115,4,0,0,0,14,1,255,128,122,26,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,115,101,116, - 105,116,101,109,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, - 57,1,0,0,114,69,0,0,0,41,2,114,4,0,0,0, - 114,56,1,0,0,114,20,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,7,95,95,108,101,110, - 95,95,230,4,0,0,114,60,1,0,0,122,22,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, - 110,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,243,12,0,0, - 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, - 122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 40,123,33,114,125,41,41,2,114,89,0,0,0,114,48,1, - 0,0,114,20,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,8,95,95,114,101,112,114,95,95, - 233,4,0,0,114,60,1,0,0,122,23,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, - 124,1,124,0,160,0,161,0,118,0,83,0,114,69,0,0, - 0,114,61,1,0,0,169,2,114,143,0,0,0,218,4,105, - 116,101,109,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,95, - 236,4,0,0,114,60,1,0,0,122,27,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,95,99,111,110,116, - 97,105,110,115,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 16,0,0,0,124,0,106,0,160,1,124,1,161,1,1,0, - 100,0,83,0,114,69,0,0,0,41,2,114,48,1,0,0, - 114,61,0,0,0,114,68,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,61,0,0,0,239,4, - 0,0,243,4,0,0,0,16,1,255,128,122,21,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,97,112,112,101, - 110,100,78,41,15,114,150,0,0,0,114,149,0,0,0,114, - 151,0,0,0,114,152,0,0,0,114,235,0,0,0,114,54, - 1,0,0,114,49,1,0,0,114,56,1,0,0,114,59,1, - 0,0,114,63,1,0,0,114,64,1,0,0,114,65,1,0, - 0,114,67,1,0,0,114,70,1,0,0,114,61,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,46,1,0,0,181,4,0,0,115,28,0, - 0,0,8,0,4,1,8,6,8,6,8,10,8,4,8,13, - 8,3,8,3,8,3,8,3,8,3,12,3,255,128,114,46, - 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,64,0,0,0,115,88,0,0, - 0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,90, - 3,101,4,100,3,100,4,132,0,131,1,90,5,100,5,100, - 6,132,0,90,6,100,7,100,8,132,0,90,7,100,9,100, - 10,132,0,90,8,100,11,100,12,132,0,90,9,100,13,100, - 14,132,0,90,10,100,15,100,16,132,0,90,11,100,17,100, - 18,132,0,90,12,100,19,83,0,41,20,218,16,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, - 0,0,67,0,0,0,115,18,0,0,0,116,0,124,1,124, - 2,124,3,131,3,124,0,95,1,100,0,83,0,114,69,0, - 0,0,41,2,114,46,1,0,0,114,48,1,0,0,114,52, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,235,0,0,0,245,4,0,0,115,4,0,0,0, - 18,1,255,128,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,67,0,0,0,115,24,0,0,0,116,0,160, - 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106, - 4,161,1,83,0,41,4,122,115,82,101,116,117,114,110,32, - 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, - 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, - 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, - 102,46,10,10,32,32,32,32,32,32,32,32,122,82,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,109, - 111,100,117,108,101,95,114,101,112,114,40,41,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, - 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, - 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,78,41,5,114,99, - 0,0,0,114,100,0,0,0,114,101,0,0,0,114,89,0, - 0,0,114,150,0,0,0,41,1,114,243,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,109, - 111,100,117,108,101,95,114,101,112,114,248,4,0,0,115,10, - 0,0,0,6,7,2,1,4,255,12,2,255,128,122,28,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,114,23,0,0,0,41,2,78,84,114,7,0, - 0,0,114,246,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,206,0,0,0,3,5,0,0,243, - 4,0,0,0,4,1,255,128,122,27,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,105,115,95,112,97, - 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,23, - 0,0,0,41,2,78,114,10,0,0,0,114,7,0,0,0, - 114,246,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,0,1,0,0,6,5,0,0,114,74,1, - 0,0,122,27,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 6,0,0,0,67,0,0,0,115,16,0,0,0,116,0,100, - 1,100,2,100,3,100,4,100,5,141,4,83,0,41,6,78, - 114,10,0,0,0,122,8,60,115,116,114,105,110,103,62,114, - 242,0,0,0,84,41,1,114,2,1,0,0,41,1,114,3, - 1,0,0,114,246,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,240,0,0,0,9,5,0,0, - 114,71,1,0,0,122,25,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,114,23,0,0,0,114,236, - 0,0,0,114,7,0,0,0,114,237,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,238,0,0, - 0,12,5,0,0,114,239,0,0,0,122,30,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,99,114,101, - 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,0,83,0,114,69,0,0, - 0,114,7,0,0,0,114,41,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,244,0,0,0,15, - 5,0,0,114,74,1,0,0,122,28,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,101,120,101,99,95, - 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, - 26,0,0,0,116,0,160,1,100,1,124,0,106,2,161,2, - 1,0,116,0,160,3,124,0,124,1,161,2,83,0,41,3, - 122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97, - 99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32, - 109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105, - 116,104,32,112,97,116,104,32,123,33,114,125,78,41,4,114, - 159,0,0,0,114,173,0,0,0,114,48,1,0,0,114,245, - 0,0,0,114,246,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,247,0,0,0,18,5,0,0, - 115,10,0,0,0,6,7,4,1,4,255,12,3,255,128,122, - 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0, - 0,0,67,0,0,0,115,22,0,0,0,100,1,100,2,108, - 0,109,1,125,2,1,0,124,2,124,0,106,2,131,1,83, - 0,41,3,78,114,0,0,0,0,41,1,218,15,78,97,109, - 101,115,112,97,99,101,82,101,97,100,101,114,41,3,114,31, - 1,0,0,114,75,1,0,0,114,48,1,0,0,41,3,114, - 143,0,0,0,114,243,0,0,0,114,75,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,32,1, - 0,0,30,5,0,0,115,6,0,0,0,12,1,10,1,255, - 128,122,36,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101, - 95,114,101,97,100,101,114,78,41,13,114,150,0,0,0,114, - 149,0,0,0,114,151,0,0,0,114,235,0,0,0,114,232, - 0,0,0,114,73,1,0,0,114,206,0,0,0,114,0,1, - 0,0,114,240,0,0,0,114,238,0,0,0,114,244,0,0, - 0,114,247,0,0,0,114,32,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 72,1,0,0,244,4,0,0,115,24,0,0,0,8,0,8, - 1,2,3,10,1,8,10,8,3,8,3,8,3,8,3,8, - 3,12,12,255,128,114,72,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, - 0,0,0,115,118,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,101,4,100,2,100,3,132,0,131,1,90,5, - 101,4,100,4,100,5,132,0,131,1,90,6,101,7,100,6, - 100,7,132,0,131,1,90,8,101,7,100,8,100,9,132,0, - 131,1,90,9,101,7,100,19,100,11,100,12,132,1,131,1, - 90,10,101,7,100,20,100,13,100,14,132,1,131,1,90,11, - 101,7,100,21,100,15,100,16,132,1,131,1,90,12,101,4, - 100,17,100,18,132,0,131,1,90,13,100,10,83,0,41,22, - 218,10,80,97,116,104,70,105,110,100,101,114,122,62,77,101, - 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, - 111,114,32,115,121,115,46,112,97,116,104,32,97,110,100,32, - 112,97,99,107,97,103,101,32,95,95,112,97,116,104,95,95, - 32,97,116,116,114,105,98,117,116,101,115,46,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,64,0,0,0,116,0,116,1,106,2, - 160,3,161,0,131,1,68,0,93,22,92,2,125,0,125,1, - 124,1,100,1,117,0,114,20,116,1,106,2,124,0,61,0, - 113,7,116,4,124,1,100,2,131,2,114,29,124,1,160,5, - 161,0,1,0,113,7,100,1,83,0,41,3,122,125,67,97, - 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, - 100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,110, - 116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,32, - 32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,121, - 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,109, - 112,108,101,109,101,110,116,101,100,41,46,78,218,17,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,41, - 6,218,4,108,105,115,116,114,15,0,0,0,218,19,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,218,5,105,116,101,109,115,114,153,0,0,0,114,77,1, - 0,0,41,2,114,141,0,0,0,218,6,102,105,110,100,101, - 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,77,1,0,0,41,5,0,0,115,16,0,0,0,22,4, - 8,1,10,1,10,1,8,1,2,128,4,252,255,128,122,28, - 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,9,0,0, - 0,67,0,0,0,115,76,0,0,0,116,0,106,1,100,1, - 117,1,114,14,116,0,106,1,115,14,116,2,160,3,100,2, - 116,4,161,2,1,0,116,0,106,1,68,0,93,17,125,1, - 122,7,124,1,124,0,131,1,87,0,2,0,1,0,83,0, - 4,0,116,5,121,37,1,0,1,0,1,0,89,0,113,17, - 100,1,83,0,119,0,41,3,122,46,83,101,97,114,99,104, - 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, - 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, - 116,121,41,6,114,15,0,0,0,218,10,112,97,116,104,95, - 104,111,111,107,115,114,99,0,0,0,114,100,0,0,0,114, - 162,0,0,0,114,142,0,0,0,41,2,114,65,0,0,0, - 90,4,104,111,111,107,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,11,95,112,97,116,104,95,104,111,111, - 107,115,51,5,0,0,115,20,0,0,0,16,3,12,1,10, - 1,2,1,14,1,12,1,4,1,4,2,2,253,255,128,122, - 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, - 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0, - 115,100,0,0,0,124,1,100,1,107,2,114,20,122,6,116, - 0,160,1,161,0,125,1,87,0,110,9,4,0,116,2,121, - 49,1,0,1,0,1,0,89,0,100,2,83,0,122,8,116, - 3,106,4,124,1,25,0,125,2,87,0,124,2,83,0,4, - 0,116,5,121,48,1,0,1,0,1,0,124,0,160,6,124, - 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89, - 0,124,2,83,0,119,0,119,0,41,3,122,210,71,101,116, - 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32, - 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102, - 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, - 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, - 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105, - 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110, - 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116, - 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32, - 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73, - 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97, - 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32, - 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114, - 10,0,0,0,78,41,7,114,18,0,0,0,114,82,0,0, - 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, - 114,114,111,114,114,15,0,0,0,114,79,1,0,0,218,8, - 75,101,121,69,114,114,111,114,114,83,1,0,0,41,3,114, - 221,0,0,0,114,65,0,0,0,114,81,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,20,95, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,64,5,0,0,115,30,0,0,0,8,8,2,1, - 12,1,12,1,6,3,2,1,12,1,4,4,12,253,10,1, - 12,1,4,1,2,253,2,250,255,128,122,31,80,97,116,104, - 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, - 0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0, - 67,0,0,0,115,138,0,0,0,116,0,124,2,100,1,131, - 2,114,27,116,1,160,2,124,2,161,1,155,0,100,2,157, + 8,0,0,0,114,78,1,0,0,41,5,0,0,115,16,0, + 0,0,22,4,8,1,10,1,10,1,8,1,2,128,4,252, + 255,128,122,28,80,97,116,104,70,105,110,100,101,114,46,105, + 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,9,0,0,0,67,0,0,0,115,76,0,0,0,116,0, + 106,1,100,1,117,1,114,14,116,0,106,1,115,14,116,2, + 160,3,100,2,116,4,161,2,1,0,116,0,106,1,68,0, + 93,17,125,1,122,7,124,1,124,0,131,1,87,0,2,0, + 1,0,83,0,4,0,116,5,121,37,1,0,1,0,1,0, + 89,0,113,17,100,1,83,0,119,0,41,3,122,46,83,101, + 97,114,99,104,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, + 32,102,111,114,32,39,112,97,116,104,39,46,78,122,23,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,105,115, + 32,101,109,112,116,121,41,6,114,15,0,0,0,218,10,112, + 97,116,104,95,104,111,111,107,115,114,99,0,0,0,114,100, + 0,0,0,114,162,0,0,0,114,142,0,0,0,41,2,114, + 65,0,0,0,90,4,104,111,111,107,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,95,112,97,116,104, + 95,104,111,111,107,115,51,5,0,0,115,20,0,0,0,16, + 3,12,1,10,1,2,1,14,1,12,1,4,1,4,2,2, + 253,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, + 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, + 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114, + 20,122,6,116,0,160,1,161,0,125,1,87,0,110,9,4, + 0,116,2,121,49,1,0,1,0,1,0,89,0,100,2,83, + 0,122,8,116,3,106,4,124,1,25,0,125,2,87,0,124, + 2,83,0,4,0,116,5,121,48,1,0,1,0,1,0,124, + 0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124, + 1,60,0,89,0,124,2,83,0,119,0,119,0,41,3,122, + 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, + 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, + 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, + 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, + 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, + 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, + 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, + 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, + 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, + 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, + 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, + 32,32,32,114,10,0,0,0,78,41,7,114,18,0,0,0, + 114,82,0,0,0,218,17,70,105,108,101,78,111,116,70,111, + 117,110,100,69,114,114,111,114,114,15,0,0,0,114,80,1, + 0,0,218,8,75,101,121,69,114,114,111,114,114,84,1,0, + 0,41,3,114,221,0,0,0,114,65,0,0,0,114,82,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,20,95,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,64,5,0,0,115,30,0,0,0, + 8,8,2,1,12,1,12,1,6,3,2,1,12,1,4,4, + 12,253,10,1,12,1,4,1,2,253,2,250,255,128,122,31, + 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,99, + 3,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, + 4,0,0,0,67,0,0,0,115,138,0,0,0,116,0,124, + 2,100,1,131,2,114,27,116,1,160,2,124,2,161,1,155, + 0,100,2,157,2,125,3,116,3,160,4,124,3,116,5,161, + 2,1,0,124,2,160,6,124,1,161,1,92,2,125,4,125, + 5,110,21,116,1,160,2,124,2,161,1,155,0,100,3,157, 2,125,3,116,3,160,4,124,3,116,5,161,2,1,0,124, - 2,160,6,124,1,161,1,92,2,125,4,125,5,110,21,116, - 1,160,2,124,2,161,1,155,0,100,3,157,2,125,3,116, - 3,160,4,124,3,116,5,161,2,1,0,124,2,160,7,124, - 1,161,1,125,4,103,0,125,5,124,4,100,0,117,1,114, - 58,116,1,160,8,124,1,124,4,161,2,83,0,116,1,160, - 9,124,1,100,0,161,2,125,6,124,5,124,6,95,10,124, - 6,83,0,41,4,78,114,161,0,0,0,122,53,46,102,105, - 110,100,95,115,112,101,99,40,41,32,110,111,116,32,102,111, - 117,110,100,59,32,102,97,108,108,105,110,103,32,98,97,99, - 107,32,116,111,32,102,105,110,100,95,108,111,97,100,101,114, - 40,41,122,53,46,102,105,110,100,95,115,112,101,99,40,41, - 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, - 105,110,103,32,98,97,99,107,32,116,111,32,102,105,110,100, - 95,109,111,100,117,108,101,40,41,41,11,114,153,0,0,0, - 114,159,0,0,0,90,12,95,111,98,106,101,99,116,95,110, - 97,109,101,114,99,0,0,0,114,100,0,0,0,114,162,0, - 0,0,114,161,0,0,0,114,229,0,0,0,114,224,0,0, - 0,114,207,0,0,0,114,202,0,0,0,41,7,114,221,0, - 0,0,114,163,0,0,0,114,81,1,0,0,114,166,0,0, - 0,114,164,0,0,0,114,165,0,0,0,114,210,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, - 99,86,5,0,0,115,28,0,0,0,10,4,16,1,12,2, - 16,1,16,2,12,2,10,1,4,1,8,1,12,1,12,1, - 6,1,4,1,255,128,122,27,80,97,116,104,70,105,110,100, - 101,114,46,95,108,101,103,97,99,121,95,103,101,116,95,115, - 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,9,0,0,0,5,0,0,0,67,0,0,0,115,166,0, - 0,0,103,0,125,4,124,2,68,0,93,67,125,5,116,0, - 124,5,116,1,116,2,102,2,131,2,115,14,113,4,124,0, - 160,3,124,5,161,1,125,6,124,6,100,1,117,1,114,71, - 116,4,124,6,100,2,131,2,114,35,124,6,160,5,124,1, - 124,3,161,2,125,7,110,6,124,0,160,6,124,1,124,6, - 161,2,125,7,124,7,100,1,117,0,114,46,113,4,124,7, - 106,7,100,1,117,1,114,55,124,7,2,0,1,0,83,0, - 124,7,106,8,125,8,124,8,100,1,117,0,114,66,116,9, - 100,3,131,1,130,1,124,4,160,10,124,8,161,1,1,0, - 113,4,116,11,160,12,124,1,100,1,161,2,125,7,124,4, - 124,7,95,8,124,7,83,0,41,4,122,63,70,105,110,100, - 32,116,104,101,32,108,111,97,100,101,114,32,111,114,32,110, - 97,109,101,115,112,97,99,101,95,112,97,116,104,32,102,111, - 114,32,116,104,105,115,32,109,111,100,117,108,101,47,112,97, - 99,107,97,103,101,32,110,97,109,101,46,78,114,226,0,0, - 0,122,19,115,112,101,99,32,109,105,115,115,105,110,103,32, - 108,111,97,100,101,114,41,13,114,185,0,0,0,114,109,0, - 0,0,218,5,98,121,116,101,115,114,86,1,0,0,114,153, - 0,0,0,114,226,0,0,0,114,87,1,0,0,114,164,0, - 0,0,114,202,0,0,0,114,142,0,0,0,114,191,0,0, - 0,114,159,0,0,0,114,207,0,0,0,41,9,114,221,0, - 0,0,114,163,0,0,0,114,65,0,0,0,114,225,0,0, - 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, - 104,90,5,101,110,116,114,121,114,81,1,0,0,114,210,0, - 0,0,114,165,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,9,95,103,101,116,95,115,112,101, - 99,107,5,0,0,115,44,0,0,0,4,5,8,1,14,1, - 2,1,10,1,8,1,10,1,14,1,12,2,8,1,2,1, - 10,1,8,1,6,1,8,1,8,1,10,5,2,128,12,2, - 6,1,4,1,255,128,122,20,80,97,116,104,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,99,4,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0, - 0,67,0,0,0,115,94,0,0,0,124,2,100,1,117,0, - 114,7,116,0,106,1,125,2,124,0,160,2,124,1,124,2, - 124,3,161,3,125,4,124,4,100,1,117,0,114,20,100,1, - 83,0,124,4,106,3,100,1,117,0,114,45,124,4,106,4, - 125,5,124,5,114,43,100,1,124,4,95,5,116,6,124,1, - 124,5,124,0,106,2,131,3,124,4,95,4,124,4,83,0, - 100,1,83,0,124,4,83,0,41,2,122,141,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,39,102,117,108,108,110,97,109,101,39,32,111,110, + 2,160,7,124,1,161,1,125,4,103,0,125,5,124,4,100, + 0,117,1,114,58,116,1,160,8,124,1,124,4,161,2,83, + 0,116,1,160,9,124,1,100,0,161,2,125,6,124,5,124, + 6,95,10,124,6,83,0,41,4,78,114,161,0,0,0,122, + 53,46,102,105,110,100,95,115,112,101,99,40,41,32,110,111, + 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, + 32,98,97,99,107,32,116,111,32,102,105,110,100,95,108,111, + 97,100,101,114,40,41,122,53,46,102,105,110,100,95,115,112, + 101,99,40,41,32,110,111,116,32,102,111,117,110,100,59,32, + 102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32, + 102,105,110,100,95,109,111,100,117,108,101,40,41,41,11,114, + 153,0,0,0,114,159,0,0,0,90,12,95,111,98,106,101, + 99,116,95,110,97,109,101,114,99,0,0,0,114,100,0,0, + 0,114,162,0,0,0,114,161,0,0,0,114,229,0,0,0, + 114,224,0,0,0,114,207,0,0,0,114,202,0,0,0,41, + 7,114,221,0,0,0,114,163,0,0,0,114,82,1,0,0, + 114,166,0,0,0,114,164,0,0,0,114,165,0,0,0,114, + 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,116, + 95,115,112,101,99,86,5,0,0,115,28,0,0,0,10,4, + 16,1,12,2,16,1,16,2,12,2,10,1,4,1,8,1, + 12,1,12,1,6,1,4,1,255,128,122,27,80,97,116,104, + 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, + 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, + 0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, + 0,115,166,0,0,0,103,0,125,4,124,2,68,0,93,67, + 125,5,116,0,124,5,116,1,116,2,102,2,131,2,115,14, + 113,4,124,0,160,3,124,5,161,1,125,6,124,6,100,1, + 117,1,114,71,116,4,124,6,100,2,131,2,114,35,124,6, + 160,5,124,1,124,3,161,2,125,7,110,6,124,0,160,6, + 124,1,124,6,161,2,125,7,124,7,100,1,117,0,114,46, + 113,4,124,7,106,7,100,1,117,1,114,55,124,7,2,0, + 1,0,83,0,124,7,106,8,125,8,124,8,100,1,117,0, + 114,66,116,9,100,3,131,1,130,1,124,4,160,10,124,8, + 161,1,1,0,113,4,116,11,160,12,124,1,100,1,161,2, + 125,7,124,4,124,7,95,8,124,7,83,0,41,4,122,63, + 70,105,110,100,32,116,104,101,32,108,111,97,100,101,114,32, + 111,114,32,110,97,109,101,115,112,97,99,101,95,112,97,116, + 104,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108, + 101,47,112,97,99,107,97,103,101,32,110,97,109,101,46,78, + 114,226,0,0,0,122,19,115,112,101,99,32,109,105,115,115, + 105,110,103,32,108,111,97,100,101,114,41,13,114,185,0,0, + 0,114,109,0,0,0,218,5,98,121,116,101,115,114,87,1, + 0,0,114,153,0,0,0,114,226,0,0,0,114,88,1,0, + 0,114,164,0,0,0,114,202,0,0,0,114,142,0,0,0, + 114,191,0,0,0,114,159,0,0,0,114,207,0,0,0,41, + 9,114,221,0,0,0,114,163,0,0,0,114,65,0,0,0, + 114,225,0,0,0,218,14,110,97,109,101,115,112,97,99,101, + 95,112,97,116,104,90,5,101,110,116,114,121,114,82,1,0, + 0,114,210,0,0,0,114,165,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,9,95,103,101,116, + 95,115,112,101,99,107,5,0,0,115,44,0,0,0,4,5, + 8,1,14,1,2,1,10,1,8,1,10,1,14,1,12,2, + 8,1,2,1,10,1,8,1,6,1,8,1,8,1,10,5, + 2,128,12,2,6,1,4,1,255,128,122,20,80,97,116,104, + 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, + 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,5,0,0,0,67,0,0,0,115,94,0,0,0,124,2, + 100,1,117,0,114,7,116,0,106,1,125,2,124,0,160,2, + 124,1,124,2,124,3,161,3,125,4,124,4,100,1,117,0, + 114,20,100,1,83,0,124,4,106,3,100,1,117,0,114,45, + 124,4,106,4,125,5,124,5,114,43,100,1,124,4,95,5, + 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, + 124,4,83,0,100,1,83,0,124,4,83,0,41,2,122,141, + 84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,112, + 101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,101, + 39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, + 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, + 32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,32, + 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,46, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,7, + 114,15,0,0,0,114,65,0,0,0,114,91,1,0,0,114, + 164,0,0,0,114,202,0,0,0,114,205,0,0,0,114,47, + 1,0,0,41,6,114,221,0,0,0,114,163,0,0,0,114, + 65,0,0,0,114,225,0,0,0,114,210,0,0,0,114,90, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,226,0,0,0,139,5,0,0,115,28,0,0,0, + 8,6,6,1,14,1,8,1,4,1,10,1,6,1,4,1, + 6,3,16,1,4,1,4,2,4,2,255,128,122,20,80,97, + 116,104,70,105,110,100,101,114,46,102,105,110,100,95,115,112, + 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,67,0,0,0,115,42,0,0,0, + 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, + 124,1,124,2,161,2,125,3,124,3,100,2,117,0,114,18, + 100,2,83,0,124,3,106,4,83,0,41,3,122,170,102,105, + 110,100,32,116,104,101,32,109,111,100,117,108,101,32,111,110, 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, - 116,104,39,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,115,101,97,114,99,104,32,105,115,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,32,115,121,115,46,112,97,116,104, + 116,104,39,32,98,97,115,101,100,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,10, + 32,32,32,32,32,32,32,32,115,121,115,46,112,97,116,104, 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,32,32,32,32,32,32,32,32,78,41,7,114,15,0,0, - 0,114,65,0,0,0,114,90,1,0,0,114,164,0,0,0, - 114,202,0,0,0,114,205,0,0,0,114,46,1,0,0,41, - 6,114,221,0,0,0,114,163,0,0,0,114,65,0,0,0, - 114,225,0,0,0,114,210,0,0,0,114,89,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,226, - 0,0,0,139,5,0,0,115,28,0,0,0,8,6,6,1, - 14,1,8,1,4,1,10,1,6,1,4,1,6,3,16,1, - 4,1,4,2,4,2,255,128,122,20,80,97,116,104,70,105, - 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, - 0,0,0,67,0,0,0,115,42,0,0,0,116,0,160,1, - 100,1,116,2,161,2,1,0,124,0,160,3,124,1,124,2, - 161,2,125,3,124,3,100,2,117,0,114,18,100,2,83,0, - 124,3,106,4,83,0,41,3,122,170,102,105,110,100,32,116, - 104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115, - 46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32, - 32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,122,101,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,40,41,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, - 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, - 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, - 49,50,59,32,117,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,78,114,227,0,0, - 0,114,228,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,229,0,0,0,163,5,0,0,115,16, - 0,0,0,6,8,2,2,4,254,12,3,8,1,4,1,6, - 1,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, - 102,105,110,100,95,109,111,100,117,108,101,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,109, - 1,125,2,1,0,124,2,106,2,124,0,105,0,124,1,164, - 1,142,1,83,0,41,4,97,32,1,0,0,10,32,32,32, - 32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,105, - 98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,114, - 97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,116, - 114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,99, - 101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,32, - 32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,104, - 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,112, - 97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,103, - 32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,96, - 96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,108, - 108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,110, - 101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,97, - 108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,105, - 110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,32, - 32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,101, - 115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,104, - 96,96,46,10,32,32,32,32,32,32,32,32,114,0,0,0, - 0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,116, - 104,70,105,110,100,101,114,78,41,3,90,18,105,109,112,111, - 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,91, - 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, - 98,117,116,105,111,110,115,41,3,114,144,0,0,0,114,145, - 0,0,0,114,91,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,92,1,0,0,179,5,0,0, - 115,6,0,0,0,12,10,16,1,255,128,122,29,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, - 116,114,105,98,117,116,105,111,110,115,41,1,78,41,2,78, - 78,41,1,78,41,14,114,150,0,0,0,114,149,0,0,0, - 114,151,0,0,0,114,152,0,0,0,114,232,0,0,0,114, - 77,1,0,0,114,83,1,0,0,114,233,0,0,0,114,86, - 1,0,0,114,87,1,0,0,114,90,1,0,0,114,226,0, - 0,0,114,229,0,0,0,114,92,1,0,0,114,7,0,0, + 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, + 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,122,101,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, + 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, + 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, + 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, + 114,227,0,0,0,114,228,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,229,0,0,0,163,5, + 0,0,115,16,0,0,0,6,8,2,2,4,254,12,3,8, + 1,4,1,6,1,255,128,122,22,80,97,116,104,70,105,110, + 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,79,0,0,0,115,28,0,0,0,100,1,100, + 2,108,0,109,1,125,2,1,0,124,2,106,2,124,0,105, + 0,124,1,164,1,142,1,83,0,41,4,97,32,1,0,0, + 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105, + 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32, + 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32, + 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, + 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, + 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, + 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, + 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, + 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, + 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110, + 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111, + 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96, + 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101, + 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116, + 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32, + 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116, + 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46, + 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32, + 114,0,0,0,0,41,1,218,18,77,101,116,97,100,97,116, + 97,80,97,116,104,70,105,110,100,101,114,78,41,3,90,18, + 105,109,112,111,114,116,108,105,98,46,109,101,116,97,100,97, + 116,97,114,92,1,0,0,218,18,102,105,110,100,95,100,105, + 115,116,114,105,98,117,116,105,111,110,115,41,3,114,144,0, + 0,0,114,145,0,0,0,114,92,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,93,1,0,0, + 179,5,0,0,115,6,0,0,0,12,10,16,1,255,128,122, + 29,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, + 95,100,105,115,116,114,105,98,117,116,105,111,110,115,114,69, + 0,0,0,114,230,0,0,0,41,14,114,150,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,152,0,0,0,114,233, + 0,0,0,114,78,1,0,0,114,84,1,0,0,114,234,0, + 0,0,114,87,1,0,0,114,88,1,0,0,114,91,1,0, + 0,114,226,0,0,0,114,229,0,0,0,114,93,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,77,1,0,0,37,5,0,0,115,38,0, + 0,0,8,0,4,2,2,2,10,1,2,9,10,1,2,12, + 10,1,2,21,10,1,2,20,12,1,2,31,12,1,2,23, + 12,1,2,15,14,1,255,128,114,77,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,90,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,101,6,90,7,100,6,100,7,132, + 0,90,8,100,8,100,9,132,0,90,9,100,19,100,11,100, + 12,132,1,90,10,100,13,100,14,132,0,90,11,101,12,100, + 15,100,16,132,0,131,1,90,13,100,17,100,18,132,0,90, + 14,100,10,83,0,41,20,218,10,70,105,108,101,70,105,110, + 100,101,114,122,172,70,105,108,101,45,98,97,115,101,100,32, + 102,105,110,100,101,114,46,10,10,32,32,32,32,73,110,116, + 101,114,97,99,116,105,111,110,115,32,119,105,116,104,32,116, + 104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,97, + 114,101,32,99,97,99,104,101,100,32,102,111,114,32,112,101, + 114,102,111,114,109,97,110,99,101,44,32,98,101,105,110,103, + 10,32,32,32,32,114,101,102,114,101,115,104,101,100,32,119, + 104,101,110,32,116,104,101,32,100,105,114,101,99,116,111,114, + 121,32,116,104,101,32,102,105,110,100,101,114,32,105,115,32, + 104,97,110,100,108,105,110,103,32,104,97,115,32,98,101,101, + 110,32,109,111,100,105,102,105,101,100,46,10,10,32,32,32, + 32,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,6,0,0,0,7,0,0,0,115,112,0,0,0,103, + 0,125,3,124,2,68,0,93,16,92,2,137,0,125,4,124, + 3,160,0,135,0,102,1,100,1,100,2,132,8,124,4,68, + 0,131,1,161,1,1,0,113,4,124,3,124,0,95,1,124, + 1,112,27,100,3,124,0,95,2,116,3,124,0,106,2,131, + 1,115,43,116,4,116,5,160,6,161,0,124,0,106,2,131, + 2,124,0,95,2,100,4,124,0,95,7,116,8,131,0,124, + 0,95,9,116,8,131,0,124,0,95,10,100,5,83,0,41, + 6,122,154,73,110,105,116,105,97,108,105,122,101,32,119,105, + 116,104,32,116,104,101,32,112,97,116,104,32,116,111,32,115, + 101,97,114,99,104,32,111,110,32,97,110,100,32,97,32,118, + 97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,111, + 102,10,32,32,32,32,32,32,32,32,50,45,116,117,112,108, + 101,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104, + 101,32,108,111,97,100,101,114,32,97,110,100,32,116,104,101, + 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,116, + 104,101,32,108,111,97,100,101,114,10,32,32,32,32,32,32, + 32,32,114,101,99,111,103,110,105,122,101,115,46,99,1,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,51,0,0,0,115,24,0,0,0,129,0,124,0,93, + 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, + 0,83,0,114,69,0,0,0,114,7,0,0,0,114,43,1, + 0,0,169,1,114,164,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,9,0,0,0,208,5,0,0,115,6,0,0, + 0,6,128,18,0,255,128,122,38,70,105,108,101,70,105,110, + 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, + 97,0,0,0,114,130,0,0,0,78,41,11,114,191,0,0, + 0,218,8,95,108,111,97,100,101,114,115,114,65,0,0,0, + 114,86,0,0,0,114,67,0,0,0,114,18,0,0,0,114, + 82,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, + 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, + 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, + 116,104,95,99,97,99,104,101,41,5,114,143,0,0,0,114, + 65,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, + 97,105,108,115,90,7,108,111,97,100,101,114,115,114,212,0, + 0,0,114,7,0,0,0,114,95,1,0,0,114,8,0,0, + 0,114,236,0,0,0,202,5,0,0,115,22,0,0,0,4, + 4,12,1,26,1,6,1,10,2,10,1,18,1,6,1,8, + 1,12,1,255,128,122,19,70,105,108,101,70,105,110,100,101, + 114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, + 0,0,0,115,10,0,0,0,100,1,124,0,95,0,100,2, + 83,0,41,3,122,31,73,110,118,97,108,105,100,97,116,101, + 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, + 116,105,109,101,46,114,130,0,0,0,78,41,1,114,97,1, + 0,0,114,21,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,78,1,0,0,218,5,0,0,114, + 81,0,0,0,122,28,70,105,108,101,70,105,110,100,101,114, + 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,4,0,0,0,67,0,0,0,115,54,0,0,0, + 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, + 124,1,161,1,125,2,124,2,100,2,117,0,114,19,100,2, + 103,0,102,2,83,0,124,2,106,4,124,2,106,5,112,25, + 103,0,102,2,83,0,41,3,122,197,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32, + 110,97,109,101,115,112,97,99,101,10,32,32,32,32,32,32, + 32,32,112,97,99,107,97,103,101,32,112,111,114,116,105,111, + 110,115,46,32,82,101,116,117,114,110,115,32,40,108,111,97, + 100,101,114,44,32,108,105,115,116,45,111,102,45,112,111,114, + 116,105,111,110,115,41,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,122, + 101,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, + 95,108,111,97,100,101,114,40,41,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, + 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, + 110,32,80,121,116,104,111,110,32,51,46,49,50,59,32,117, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,78,41,6,114,99,0,0,0,114,100, + 0,0,0,114,101,0,0,0,114,226,0,0,0,114,164,0, + 0,0,114,202,0,0,0,41,3,114,143,0,0,0,114,163, + 0,0,0,114,210,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,161,0,0,0,224,5,0,0, + 115,16,0,0,0,6,7,2,2,4,254,10,3,8,1,8, + 1,16,1,255,128,122,22,70,105,108,101,70,105,110,100,101, + 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, + 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, + 0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124, + 3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100, + 1,141,4,83,0,41,2,78,114,201,0,0,0,41,1,114, + 213,0,0,0,41,7,114,143,0,0,0,114,211,0,0,0, + 114,163,0,0,0,114,65,0,0,0,90,4,115,109,115,108, + 114,225,0,0,0,114,164,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,91,1,0,0,239,5, + 0,0,115,10,0,0,0,10,1,8,1,2,1,6,255,255, + 128,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, + 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, + 0,0,0,0,0,14,0,0,0,9,0,0,0,67,0,0, + 0,115,120,1,0,0,100,1,125,3,124,1,160,0,100,2, + 161,1,100,3,25,0,125,4,122,12,116,1,124,0,106,2, + 112,17,116,3,160,4,161,0,131,1,106,5,125,5,87,0, + 110,9,4,0,116,6,121,187,1,0,1,0,1,0,100,4, + 125,5,89,0,124,5,124,0,106,7,107,3,114,43,124,0, + 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, + 114,54,124,0,106,10,125,6,124,4,160,11,161,0,125,7, + 110,5,124,0,106,12,125,6,124,4,125,7,124,7,124,6, + 118,0,114,106,116,13,124,0,106,2,124,4,131,2,125,8, + 124,0,106,14,68,0,93,29,92,2,125,9,125,10,100,5, + 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12, + 116,15,124,12,131,1,114,101,124,0,160,16,124,10,124,1, + 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0, + 113,72,116,17,124,8,131,1,125,3,124,0,106,14,68,0, + 93,54,92,2,125,9,125,10,122,10,116,13,124,0,106,2, + 124,4,124,9,23,0,131,2,125,12,87,0,110,10,4,0, + 116,18,121,186,1,0,1,0,1,0,89,0,1,0,100,6, + 83,0,116,19,106,20,100,7,124,12,100,3,100,8,141,3, + 1,0,124,7,124,9,23,0,124,6,118,0,114,163,116,15, + 124,12,131,1,114,163,124,0,160,16,124,10,124,1,124,12, + 100,6,124,2,161,5,2,0,1,0,83,0,113,109,124,3, + 114,184,116,19,160,20,100,9,124,8,161,2,1,0,116,19, + 160,21,124,1,100,6,161,2,125,13,124,8,103,1,124,13, + 95,22,124,13,83,0,100,6,83,0,119,0,119,0,41,10, + 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, + 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, + 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, + 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, + 32,70,114,97,0,0,0,114,44,0,0,0,114,130,0,0, + 0,114,236,0,0,0,78,122,9,116,114,121,105,110,103,32, + 123,125,41,1,90,9,118,101,114,98,111,115,105,116,121,122, + 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, + 97,99,101,32,102,111,114,32,123,125,41,23,114,104,0,0, + 0,114,75,0,0,0,114,65,0,0,0,114,18,0,0,0, + 114,82,0,0,0,114,35,1,0,0,114,76,0,0,0,114, + 97,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, + 101,114,21,0,0,0,114,100,1,0,0,114,131,0,0,0, + 114,99,1,0,0,114,67,0,0,0,114,96,1,0,0,114, + 80,0,0,0,114,91,1,0,0,114,83,0,0,0,114,111, + 0,0,0,114,159,0,0,0,114,173,0,0,0,114,207,0, + 0,0,114,202,0,0,0,41,14,114,143,0,0,0,114,163, + 0,0,0,114,225,0,0,0,90,12,105,115,95,110,97,109, + 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, + 117,108,101,114,193,0,0,0,90,5,99,97,99,104,101,90, + 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, + 97,115,101,95,112,97,116,104,114,44,1,0,0,114,211,0, + 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, + 101,90,9,102,117,108,108,95,112,97,116,104,114,210,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,76,1,0,0,37,5,0,0,115,38,0,0,0,8,0, - 4,2,2,2,10,1,2,9,10,1,2,12,10,1,2,21, - 10,1,2,20,12,1,2,31,12,1,2,23,12,1,2,15, - 14,1,255,128,114,76,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, - 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, - 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, - 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, - 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, - 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, - 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, - 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, - 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, - 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, - 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, - 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, - 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, - 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, - 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, - 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, - 0,0,7,0,0,0,115,112,0,0,0,103,0,125,3,124, - 2,68,0,93,16,92,2,137,0,125,4,124,3,160,0,135, - 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, - 1,1,0,113,4,124,3,124,0,95,1,124,1,112,27,100, - 3,124,0,95,2,116,3,124,0,106,2,131,1,115,43,116, - 4,116,5,160,6,161,0,124,0,106,2,131,2,124,0,95, - 2,100,4,124,0,95,7,116,8,131,0,124,0,95,9,116, - 8,131,0,124,0,95,10,100,5,83,0,41,6,122,154,73, - 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, - 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, - 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, - 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, - 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, - 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, - 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, - 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, - 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, - 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,0, - 0,0,115,24,0,0,0,129,0,124,0,93,7,125,1,124, - 1,136,0,102,2,86,0,1,0,113,2,100,0,83,0,114, - 69,0,0,0,114,7,0,0,0,114,42,1,0,0,169,1, - 114,164,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,208,5,0,0,115,6,0,0,0,6,128,18, - 0,255,128,122,38,70,105,108,101,70,105,110,100,101,114,46, - 95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115, - 62,46,60,103,101,110,101,120,112,114,62,114,97,0,0,0, - 114,130,0,0,0,78,41,11,114,191,0,0,0,218,8,95, - 108,111,97,100,101,114,115,114,65,0,0,0,114,86,0,0, - 0,114,67,0,0,0,114,18,0,0,0,114,82,0,0,0, - 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, - 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, - 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, - 97,99,104,101,41,5,114,143,0,0,0,114,65,0,0,0, - 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, - 90,7,108,111,97,100,101,114,115,114,212,0,0,0,114,7, - 0,0,0,114,94,1,0,0,114,8,0,0,0,114,235,0, - 0,0,202,5,0,0,115,22,0,0,0,4,4,12,1,26, - 1,6,1,10,2,10,1,18,1,6,1,8,1,12,1,255, - 128,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 10,0,0,0,100,1,124,0,95,0,100,2,83,0,41,3, - 122,31,73,110,118,97,108,105,100,97,116,101,32,116,104,101, - 32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,101, - 46,114,130,0,0,0,78,41,1,114,96,1,0,0,114,20, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,77,1,0,0,218,5,0,0,114,81,0,0,0, - 122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, - 0,0,0,67,0,0,0,115,54,0,0,0,116,0,160,1, - 100,1,116,2,161,2,1,0,124,0,160,3,124,1,161,1, - 125,2,124,2,100,2,117,0,114,19,100,2,103,0,102,2, - 83,0,124,2,106,4,124,2,106,5,112,25,103,0,102,2, - 83,0,41,3,122,197,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, - 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, - 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, - 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, - 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, - 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,122,101,70,105,108, - 101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,97, - 100,101,114,40,41,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, - 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, - 116,104,111,110,32,51,46,49,50,59,32,117,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,78,41,6,114,99,0,0,0,114,100,0,0,0,114, - 101,0,0,0,114,226,0,0,0,114,164,0,0,0,114,202, - 0,0,0,41,3,114,143,0,0,0,114,163,0,0,0,114, - 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,161,0,0,0,224,5,0,0,115,16,0,0, - 0,6,7,2,2,4,254,10,3,8,1,8,1,16,1,255, - 128,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, - 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, - 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0, - 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125, - 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83, - 0,41,2,78,114,201,0,0,0,41,1,114,213,0,0,0, - 41,7,114,143,0,0,0,114,211,0,0,0,114,163,0,0, - 0,114,65,0,0,0,90,4,115,109,115,108,114,225,0,0, - 0,114,164,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,90,1,0,0,239,5,0,0,115,10, - 0,0,0,10,1,8,1,2,1,6,255,255,128,122,20,70, - 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, - 112,101,99,78,99,3,0,0,0,0,0,0,0,0,0,0, - 0,14,0,0,0,9,0,0,0,67,0,0,0,115,120,1, - 0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,3, - 25,0,125,4,122,12,116,1,124,0,106,2,112,17,116,3, - 160,4,161,0,131,1,106,5,125,5,87,0,110,9,4,0, - 116,6,121,187,1,0,1,0,1,0,100,4,125,5,89,0, - 124,5,124,0,106,7,107,3,114,43,124,0,160,8,161,0, - 1,0,124,5,124,0,95,7,116,9,131,0,114,54,124,0, - 106,10,125,6,124,4,160,11,161,0,125,7,110,5,124,0, - 106,12,125,6,124,4,125,7,124,7,124,6,118,0,114,106, - 116,13,124,0,106,2,124,4,131,2,125,8,124,0,106,14, - 68,0,93,29,92,2,125,9,125,10,100,5,124,9,23,0, - 125,11,116,13,124,8,124,11,131,2,125,12,116,15,124,12, - 131,1,114,101,124,0,160,16,124,10,124,1,124,12,124,8, - 103,1,124,2,161,5,2,0,1,0,83,0,113,72,116,17, - 124,8,131,1,125,3,124,0,106,14,68,0,93,54,92,2, - 125,9,125,10,122,10,116,13,124,0,106,2,124,4,124,9, - 23,0,131,2,125,12,87,0,110,10,4,0,116,18,121,186, - 1,0,1,0,1,0,89,0,1,0,100,6,83,0,116,19, - 106,20,100,7,124,12,100,3,100,8,141,3,1,0,124,7, - 124,9,23,0,124,6,118,0,114,163,116,15,124,12,131,1, - 114,163,124,0,160,16,124,10,124,1,124,12,100,6,124,2, - 161,5,2,0,1,0,83,0,113,109,124,3,114,184,116,19, - 160,20,100,9,124,8,161,2,1,0,116,19,160,21,124,1, - 100,6,161,2,125,13,124,8,103,1,124,13,95,22,124,13, - 83,0,100,6,83,0,119,0,119,0,41,10,122,111,84,114, - 121,32,116,111,32,102,105,110,100,32,97,32,115,112,101,99, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,32,109,111,100,117,108,101,46,10,10,32,32,32,32, - 32,32,32,32,82,101,116,117,114,110,115,32,116,104,101,32, - 109,97,116,99,104,105,110,103,32,115,112,101,99,44,32,111, - 114,32,78,111,110,101,32,105,102,32,110,111,116,32,102,111, - 117,110,100,46,10,32,32,32,32,32,32,32,32,70,114,97, - 0,0,0,114,44,0,0,0,114,130,0,0,0,114,235,0, - 0,0,78,122,9,116,114,121,105,110,103,32,123,125,41,1, - 90,9,118,101,114,98,111,115,105,116,121,122,25,112,111,115, - 115,105,98,108,101,32,110,97,109,101,115,112,97,99,101,32, - 102,111,114,32,123,125,41,23,114,104,0,0,0,114,75,0, - 0,0,114,65,0,0,0,114,18,0,0,0,114,82,0,0, - 0,114,34,1,0,0,114,76,0,0,0,114,96,1,0,0, - 218,11,95,102,105,108,108,95,99,97,99,104,101,114,21,0, - 0,0,114,99,1,0,0,114,131,0,0,0,114,98,1,0, - 0,114,67,0,0,0,114,95,1,0,0,114,80,0,0,0, - 114,90,1,0,0,114,83,0,0,0,114,111,0,0,0,114, - 159,0,0,0,114,173,0,0,0,114,207,0,0,0,114,202, - 0,0,0,41,14,114,143,0,0,0,114,163,0,0,0,114, - 225,0,0,0,90,12,105,115,95,110,97,109,101,115,112,97, - 99,101,90,11,116,97,105,108,95,109,111,100,117,108,101,114, - 193,0,0,0,90,5,99,97,99,104,101,90,12,99,97,99, - 104,101,95,109,111,100,117,108,101,90,9,98,97,115,101,95, - 112,97,116,104,114,43,1,0,0,114,211,0,0,0,90,13, - 105,110,105,116,95,102,105,108,101,110,97,109,101,90,9,102, - 117,108,108,95,112,97,116,104,114,210,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,226,0,0, - 0,244,5,0,0,115,88,0,0,0,4,5,14,1,2,1, - 24,1,12,1,6,1,10,1,8,1,6,1,6,2,6,1, - 10,1,6,2,4,1,8,2,12,1,14,1,8,1,10,1, - 8,1,24,1,2,255,8,5,14,2,2,1,20,1,12,1, - 8,1,16,1,12,1,8,1,10,1,4,1,8,255,2,128, - 4,2,12,1,12,1,8,1,4,1,4,1,2,244,2,228, - 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, - 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, - 0,115,190,0,0,0,124,0,106,0,125,1,122,11,116,1, - 160,2,124,1,112,11,116,1,160,3,161,0,161,1,125,2, - 87,0,110,12,4,0,116,4,116,5,116,6,102,3,121,94, - 1,0,1,0,1,0,103,0,125,2,89,0,116,7,106,8, - 160,9,100,1,161,1,115,39,116,10,124,2,131,1,124,0, - 95,11,110,37,116,10,131,0,125,3,124,2,68,0,93,28, - 125,4,124,4,160,12,100,2,161,1,92,3,125,5,125,6, - 125,7,124,6,114,65,100,3,160,13,124,5,124,7,160,14, - 161,0,161,2,125,8,110,2,124,5,125,8,124,3,160,15, - 124,8,161,1,1,0,113,44,124,3,124,0,95,11,116,7, - 106,8,160,9,116,16,161,1,114,92,100,4,100,5,132,0, - 124,2,68,0,131,1,124,0,95,17,100,6,83,0,100,6, - 83,0,119,0,41,7,122,68,70,105,108,108,32,116,104,101, - 32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116, - 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, - 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, - 115,32,100,105,114,101,99,116,111,114,121,46,114,14,0,0, - 0,114,97,0,0,0,114,88,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 83,0,0,0,115,20,0,0,0,104,0,124,0,93,6,125, - 1,124,1,160,0,161,0,146,2,113,2,83,0,114,7,0, - 0,0,41,1,114,131,0,0,0,41,2,114,5,0,0,0, - 90,2,102,110,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,13,0,0,0,68,6,0,0,115,4,0,0, - 0,20,0,255,128,122,41,70,105,108,101,70,105,110,100,101, - 114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108, - 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, - 78,41,18,114,65,0,0,0,114,18,0,0,0,90,7,108, - 105,115,116,100,105,114,114,82,0,0,0,114,84,1,0,0, - 218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,111, - 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, - 69,114,114,111,114,114,15,0,0,0,114,25,0,0,0,114, - 26,0,0,0,114,97,1,0,0,114,98,1,0,0,114,126, - 0,0,0,114,89,0,0,0,114,131,0,0,0,218,3,97, - 100,100,114,27,0,0,0,114,99,1,0,0,41,9,114,143, - 0,0,0,114,65,0,0,0,90,8,99,111,110,116,101,110, - 116,115,90,21,108,111,119,101,114,95,115,117,102,102,105,120, - 95,99,111,110,116,101,110,116,115,114,69,1,0,0,114,141, - 0,0,0,114,53,1,0,0,114,43,1,0,0,90,8,110, - 101,119,95,110,97,109,101,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,101,1,0,0,39,6,0,0,115, - 40,0,0,0,6,2,2,1,22,1,18,1,6,3,12,3, - 12,1,6,7,8,1,16,1,4,1,18,1,4,2,12,1, - 6,1,12,1,20,1,4,255,2,233,255,128,122,22,70,105, - 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, - 97,99,104,101,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,7,0,0,0,115,18,0, - 0,0,135,0,135,1,102,2,100,1,100,2,132,8,125,2, - 124,2,83,0,41,4,97,20,1,0,0,65,32,99,108,97, - 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, - 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, - 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, - 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, - 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, - 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, - 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, - 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, + 114,226,0,0,0,244,5,0,0,115,88,0,0,0,4,5, + 14,1,2,1,24,1,12,1,6,1,10,1,8,1,6,1, + 6,2,6,1,10,1,6,2,4,1,8,2,12,1,14,1, + 8,1,10,1,8,1,24,1,2,255,8,5,14,2,2,1, + 20,1,12,1,8,1,16,1,12,1,8,1,10,1,4,1, + 8,255,2,128,4,2,12,1,12,1,8,1,4,1,4,1, + 2,244,2,228,255,128,122,20,70,105,108,101,70,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,0, + 0,0,0,0,0,0,0,0,0,9,0,0,0,10,0,0, + 0,67,0,0,0,115,190,0,0,0,124,0,106,0,125,1, + 122,11,116,1,160,2,124,1,112,11,116,1,160,3,161,0, + 161,1,125,2,87,0,110,12,4,0,116,4,116,5,116,6, + 102,3,121,94,1,0,1,0,1,0,103,0,125,2,89,0, + 116,7,106,8,160,9,100,1,161,1,115,39,116,10,124,2, + 131,1,124,0,95,11,110,37,116,10,131,0,125,3,124,2, + 68,0,93,28,125,4,124,4,160,12,100,2,161,1,92,3, + 125,5,125,6,125,7,124,6,114,65,100,3,160,13,124,5, + 124,7,160,14,161,0,161,2,125,8,110,2,124,5,125,8, + 124,3,160,15,124,8,161,1,1,0,113,44,124,3,124,0, + 95,11,116,7,106,8,160,9,116,16,161,1,114,92,100,4, + 100,5,132,0,124,2,68,0,131,1,124,0,95,17,100,6, + 83,0,100,6,83,0,119,0,41,7,122,68,70,105,108,108, + 32,116,104,101,32,99,97,99,104,101,32,111,102,32,112,111, + 116,101,110,116,105,97,108,32,109,111,100,117,108,101,115,32, + 97,110,100,32,112,97,99,107,97,103,101,115,32,102,111,114, + 32,116,104,105,115,32,100,105,114,101,99,116,111,114,121,46, + 114,14,0,0,0,114,97,0,0,0,114,88,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,83,0,0,0,115,20,0,0,0,104,0,124, + 0,93,6,125,1,124,1,160,0,161,0,146,2,113,2,83, + 0,114,7,0,0,0,41,1,114,131,0,0,0,41,2,114, + 5,0,0,0,90,2,102,110,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,13,0,0,0,68,6,0,0, + 115,4,0,0,0,20,0,255,128,122,41,70,105,108,101,70, + 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, + 101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, + 111,109,112,62,78,41,18,114,65,0,0,0,114,18,0,0, + 0,90,7,108,105,115,116,100,105,114,114,82,0,0,0,114, + 85,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,15,0,0,0,114,25, + 0,0,0,114,26,0,0,0,114,98,1,0,0,114,99,1, + 0,0,114,126,0,0,0,114,89,0,0,0,114,131,0,0, + 0,218,3,97,100,100,114,27,0,0,0,114,100,1,0,0, + 41,9,114,143,0,0,0,114,65,0,0,0,90,8,99,111, + 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, + 102,102,105,120,95,99,111,110,116,101,110,116,115,114,70,1, + 0,0,114,141,0,0,0,114,54,1,0,0,114,44,1,0, + 0,90,8,110,101,119,95,110,97,109,101,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,39, + 6,0,0,115,40,0,0,0,6,2,2,1,22,1,18,1, + 6,3,12,3,12,1,6,7,8,1,16,1,4,1,18,1, + 4,2,12,1,6,1,12,1,20,1,4,255,2,233,255,128, + 122,22,70,105,108,101,70,105,110,100,101,114,46,95,102,105, + 108,108,95,99,97,99,104,101,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,7,0,0, + 0,115,18,0,0,0,135,0,135,1,102,2,100,1,100,2, + 132,8,125,2,124,2,83,0,41,4,97,20,1,0,0,65, + 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, + 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, + 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, + 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, + 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, + 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, + 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, + 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, - 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, - 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, - 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, - 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, - 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,19,0,0,0,115,36,0,0,0,116,0,124, - 0,131,1,115,10,116,1,100,1,124,0,100,2,141,2,130, - 1,136,0,124,0,103,1,136,1,162,1,82,0,142,0,83, - 0,41,4,122,45,80,97,116,104,32,104,111,111,107,32,102, - 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, - 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, - 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, - 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,71,0,0,0,78,41,2,114,83,0,0,0,114, - 142,0,0,0,114,71,0,0,0,169,2,114,221,0,0,0, - 114,100,1,0,0,114,7,0,0,0,114,8,0,0,0,218, - 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, - 105,108,101,70,105,110,100,101,114,80,6,0,0,115,8,0, - 0,0,8,2,12,1,16,1,255,128,122,54,70,105,108,101, - 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, - 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, - 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, - 101,114,78,114,7,0,0,0,41,3,114,221,0,0,0,114, - 100,1,0,0,114,106,1,0,0,114,7,0,0,0,114,105, - 1,0,0,114,8,0,0,0,218,9,112,97,116,104,95,104, - 111,111,107,70,6,0,0,115,6,0,0,0,14,10,4,6, - 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,112, - 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,114,66,1,0,0,41,2,78,122,16,70,105,108,101,70, - 105,110,100,101,114,40,123,33,114,125,41,41,2,114,89,0, - 0,0,114,65,0,0,0,114,20,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,67,1,0,0, - 88,6,0,0,114,60,1,0,0,122,19,70,105,108,101,70, - 105,110,100,101,114,46,95,95,114,101,112,114,95,95,41,1, - 78,41,15,114,150,0,0,0,114,149,0,0,0,114,151,0, - 0,0,114,152,0,0,0,114,235,0,0,0,114,77,1,0, - 0,114,167,0,0,0,114,229,0,0,0,114,161,0,0,0, - 114,90,1,0,0,114,226,0,0,0,114,101,1,0,0,114, - 233,0,0,0,114,107,1,0,0,114,67,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,93,1,0,0,193,5,0,0,115,26,0,0,0, - 8,0,4,2,8,7,8,16,4,4,8,2,8,15,10,5, - 8,51,2,31,10,1,12,17,255,128,114,93,1,0,0,99, - 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 8,0,0,0,67,0,0,0,115,144,0,0,0,124,0,160, - 0,100,1,161,1,125,4,124,0,160,0,100,2,161,1,125, - 5,124,4,115,33,124,5,114,18,124,5,106,1,125,4,110, - 15,124,2,124,3,107,2,114,28,116,2,124,1,124,2,131, - 2,125,4,110,5,116,3,124,1,124,2,131,2,125,4,124, - 5,115,42,116,4,124,1,124,2,124,4,100,3,141,3,125, - 5,122,19,124,5,124,0,100,2,60,0,124,4,124,0,100, - 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, - 5,60,0,87,0,100,0,83,0,4,0,116,5,121,71,1, - 0,1,0,1,0,89,0,100,0,83,0,119,0,41,6,78, - 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, - 115,112,101,99,95,95,114,94,1,0,0,90,8,95,95,102, - 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, - 95,41,6,218,3,103,101,116,114,164,0,0,0,114,40,1, - 0,0,114,33,1,0,0,114,213,0,0,0,218,9,69,120, - 99,101,112,116,105,111,110,41,6,90,2,110,115,114,141,0, - 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, - 97,116,104,110,97,109,101,114,164,0,0,0,114,210,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, - 94,6,0,0,115,38,0,0,0,10,2,10,1,4,1,4, - 1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,8, - 1,8,1,8,1,14,1,12,1,6,2,2,254,255,128,114, - 112,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,67,0,0,0,115,38,0, - 0,0,116,0,116,1,160,2,161,0,102,2,125,0,116,3, - 116,4,102,2,125,1,116,5,116,6,102,2,125,2,124,0, - 124,1,124,2,103,3,83,0,41,2,122,95,82,101,116,117, - 114,110,115,32,97,32,108,105,115,116,32,111,102,32,102,105, - 108,101,45,98,97,115,101,100,32,109,111,100,117,108,101,32, - 108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97, - 99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112, - 108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102, - 105,120,101,115,41,46,10,32,32,32,32,78,41,7,114,29, - 1,0,0,114,187,0,0,0,218,18,101,120,116,101,110,115, - 105,111,110,95,115,117,102,102,105,120,101,115,114,33,1,0, - 0,114,127,0,0,0,114,40,1,0,0,114,113,0,0,0, - 41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,6, - 115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,101, + 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, + 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, + 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, + 32,32,32,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,19,0,0,0,115,36,0,0, + 0,116,0,124,0,131,1,115,10,116,1,100,1,124,0,100, + 2,141,2,130,1,136,0,124,0,103,1,136,1,162,1,82, + 0,142,0,83,0,41,4,122,45,80,97,116,104,32,104,111, + 111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,98, + 46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,70, + 105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,114, + 101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,112, + 112,111,114,116,101,100,114,71,0,0,0,78,41,2,114,83, + 0,0,0,114,142,0,0,0,114,71,0,0,0,169,2,114, + 221,0,0,0,114,101,1,0,0,114,7,0,0,0,114,8, + 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,80,6,0, + 0,115,8,0,0,0,8,2,12,1,16,1,255,128,122,54, + 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, + 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,78,114,7,0,0,0,41,3,114,221, + 0,0,0,114,101,1,0,0,114,107,1,0,0,114,7,0, + 0,0,114,106,1,0,0,114,8,0,0,0,218,9,112,97, + 116,104,95,104,111,111,107,70,6,0,0,115,6,0,0,0, + 14,10,4,6,255,128,122,20,70,105,108,101,70,105,110,100, + 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,114,67,1,0,0,41,2,78,122,16,70, + 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, + 2,114,89,0,0,0,114,65,0,0,0,114,21,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 208,0,0,0,117,6,0,0,115,10,0,0,0,12,5,8, - 1,8,1,10,1,255,128,114,208,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, - 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, - 83,0,114,69,0,0,0,41,1,114,159,0,0,0,41,1, - 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, - 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,128,6,0,0,115,4,0, - 0,0,8,2,255,128,114,115,1,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, - 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, - 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160, - 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, - 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, - 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, - 112,111,110,101,110,116,115,46,78,41,10,114,115,1,0,0, - 114,208,0,0,0,114,15,0,0,0,114,82,1,0,0,114, - 191,0,0,0,114,93,1,0,0,114,107,1,0,0,218,9, - 109,101,116,97,95,112,97,116,104,114,61,0,0,0,114,76, - 1,0,0,41,2,114,114,1,0,0,90,17,115,117,112,112, - 111,114,116,101,100,95,108,111,97,100,101,114,115,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,105, - 110,115,116,97,108,108,133,6,0,0,115,10,0,0,0,8, - 2,6,1,20,1,16,1,255,128,114,117,1,0,0,41,1, - 114,87,0,0,0,41,1,78,41,3,78,78,78,41,2,114, - 0,0,0,0,114,0,0,0,0,41,1,84,41,1,78,41, - 1,78,41,85,114,152,0,0,0,114,159,0,0,0,114,187, - 0,0,0,114,91,0,0,0,114,15,0,0,0,114,99,0, - 0,0,114,184,0,0,0,114,25,0,0,0,114,230,0,0, - 0,90,2,110,116,114,18,0,0,0,114,215,0,0,0,90, - 5,112,111,115,105,120,114,50,0,0,0,218,3,97,108,108, - 114,59,0,0,0,114,136,0,0,0,114,57,0,0,0,114, - 62,0,0,0,90,20,95,112,97,116,104,115,101,112,115,95, - 119,105,116,104,95,99,111,108,111,110,114,28,0,0,0,90, - 37,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, - 86,69,95,80,76,65,84,70,79,82,77,83,95,66,89,84, - 69,83,95,75,69,89,114,27,0,0,0,114,29,0,0,0, - 114,21,0,0,0,114,36,0,0,0,114,42,0,0,0,114, - 45,0,0,0,114,67,0,0,0,114,74,0,0,0,114,75, - 0,0,0,114,79,0,0,0,114,80,0,0,0,114,83,0, - 0,0,114,86,0,0,0,114,95,0,0,0,218,4,116,121, - 112,101,218,8,95,95,99,111,100,101,95,95,114,186,0,0, - 0,114,34,0,0,0,114,172,0,0,0,114,33,0,0,0, - 114,39,0,0,0,114,7,1,0,0,114,116,0,0,0,114, - 112,0,0,0,114,127,0,0,0,114,61,0,0,0,114,113, - 1,0,0,114,231,0,0,0,114,113,0,0,0,90,23,68, - 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, - 70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,69, - 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, - 88,69,83,114,121,0,0,0,114,128,0,0,0,114,135,0, - 0,0,114,137,0,0,0,114,139,0,0,0,114,160,0,0, - 0,114,167,0,0,0,114,176,0,0,0,114,180,0,0,0, - 114,182,0,0,0,114,189,0,0,0,114,194,0,0,0,114, - 195,0,0,0,114,200,0,0,0,218,6,111,98,106,101,99, - 116,114,209,0,0,0,114,213,0,0,0,114,214,0,0,0, - 114,234,0,0,0,114,248,0,0,0,114,10,1,0,0,114, - 33,1,0,0,114,40,1,0,0,114,29,1,0,0,114,46, - 1,0,0,114,72,1,0,0,114,76,1,0,0,114,93,1, - 0,0,114,112,1,0,0,114,208,0,0,0,114,115,1,0, - 0,114,117,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,8,60,109,111,100, - 117,108,101,62,1,0,0,0,115,182,0,0,0,4,0,4, - 22,8,3,8,1,8,1,8,1,8,1,10,3,4,1,8, - 1,10,1,8,2,4,3,10,1,6,2,22,2,8,1,8, - 1,10,1,14,1,4,4,4,1,2,1,2,1,4,255,8, - 4,6,16,8,3,8,5,8,5,4,6,10,1,8,30,8, - 6,8,8,8,10,8,9,8,5,4,7,10,1,8,8,10, - 5,10,22,0,127,16,27,12,1,4,2,4,1,6,2,4, - 1,10,1,8,2,6,2,8,2,16,2,8,71,8,40,8, - 19,8,12,8,12,8,31,8,20,8,33,8,28,10,24,10, - 13,10,10,8,11,6,14,4,3,2,1,12,255,14,73,14, - 67,16,30,0,127,14,17,18,50,18,45,18,25,14,53,14, - 63,14,49,0,127,14,29,0,127,10,30,8,23,8,11,12, - 5,255,128, + 68,1,0,0,88,6,0,0,114,61,1,0,0,122,19,70, + 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, + 95,95,114,69,0,0,0,41,15,114,150,0,0,0,114,149, + 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, + 0,0,114,78,1,0,0,114,167,0,0,0,114,229,0,0, + 0,114,161,0,0,0,114,91,1,0,0,114,226,0,0,0, + 114,102,1,0,0,114,234,0,0,0,114,108,1,0,0,114, + 68,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,94,1,0,0,193,5,0, + 0,115,26,0,0,0,8,0,4,2,8,7,8,16,4,4, + 8,2,8,15,10,5,8,51,2,31,10,1,12,17,255,128, + 114,94,1,0,0,99,4,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,144, + 0,0,0,124,0,160,0,100,1,161,1,125,4,124,0,160, + 0,100,2,161,1,125,5,124,4,115,33,124,5,114,18,124, + 5,106,1,125,4,110,15,124,2,124,3,107,2,114,28,116, + 2,124,1,124,2,131,2,125,4,110,5,116,3,124,1,124, + 2,131,2,125,4,124,5,115,42,116,4,124,1,124,2,124, + 4,100,3,141,3,125,5,122,19,124,5,124,0,100,2,60, + 0,124,4,124,0,100,1,60,0,124,2,124,0,100,4,60, + 0,124,3,124,0,100,5,60,0,87,0,100,0,83,0,4, + 0,116,5,121,71,1,0,1,0,1,0,89,0,100,0,83, + 0,119,0,41,6,78,218,10,95,95,108,111,97,100,101,114, + 95,95,218,8,95,95,115,112,101,99,95,95,114,95,1,0, + 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, + 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,164, + 0,0,0,114,41,1,0,0,114,34,1,0,0,114,213,0, + 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, + 2,110,115,114,141,0,0,0,90,8,112,97,116,104,110,97, + 109,101,90,9,99,112,97,116,104,110,97,109,101,114,164,0, + 0,0,114,210,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,14,95,102,105,120,95,117,112,95, + 109,111,100,117,108,101,94,6,0,0,115,38,0,0,0,10, + 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, + 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, + 2,2,254,255,128,114,113,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, + 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, + 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,2, + 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, + 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, + 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, + 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, + 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, + 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, + 32,78,41,7,114,30,1,0,0,114,187,0,0,0,218,18, + 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, + 101,115,114,34,1,0,0,114,127,0,0,0,114,41,1,0, + 0,114,113,0,0,0,41,3,90,10,101,120,116,101,110,115, + 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, + 116,101,99,111,100,101,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,208,0,0,0,117,6,0,0,115,10, + 0,0,0,12,5,8,1,8,1,10,1,255,128,114,208,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, + 124,0,97,0,100,0,83,0,114,69,0,0,0,41,1,114, + 159,0,0,0,41,1,218,17,95,98,111,111,116,115,116,114, + 97,112,95,109,111,100,117,108,101,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,21,95,115,101,116,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,128, + 6,0,0,115,4,0,0,0,8,2,255,128,114,116,1,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, + 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, + 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, + 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, + 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, + 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, + 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, + 10,114,116,1,0,0,114,208,0,0,0,114,15,0,0,0, + 114,83,1,0,0,114,191,0,0,0,114,94,1,0,0,114, + 108,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, + 61,0,0,0,114,77,1,0,0,41,2,114,115,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,8,95,105,110,115,116,97,108,108,133,6,0,0, + 115,10,0,0,0,8,2,6,1,20,1,16,1,255,128,114, + 118,1,0,0,41,1,114,87,0,0,0,114,69,0,0,0, + 41,3,78,78,78,41,2,114,0,0,0,0,114,0,0,0, + 0,41,1,84,41,85,114,152,0,0,0,114,159,0,0,0, + 114,187,0,0,0,114,91,0,0,0,114,15,0,0,0,114, + 99,0,0,0,114,184,0,0,0,114,25,0,0,0,114,231, + 0,0,0,90,2,110,116,114,18,0,0,0,114,215,0,0, + 0,90,5,112,111,115,105,120,114,50,0,0,0,218,3,97, + 108,108,114,59,0,0,0,114,136,0,0,0,114,57,0,0, + 0,114,62,0,0,0,90,20,95,112,97,116,104,115,101,112, + 115,95,119,105,116,104,95,99,111,108,111,110,114,28,0,0, + 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, + 89,84,69,83,95,75,69,89,114,27,0,0,0,114,29,0, + 0,0,114,21,0,0,0,114,36,0,0,0,114,42,0,0, + 0,114,45,0,0,0,114,67,0,0,0,114,74,0,0,0, + 114,75,0,0,0,114,79,0,0,0,114,80,0,0,0,114, + 83,0,0,0,114,86,0,0,0,114,95,0,0,0,218,4, + 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,186, + 0,0,0,114,34,0,0,0,114,172,0,0,0,114,33,0, + 0,0,114,39,0,0,0,114,8,1,0,0,114,116,0,0, + 0,114,112,0,0,0,114,127,0,0,0,114,61,0,0,0, + 114,114,1,0,0,114,232,0,0,0,114,113,0,0,0,90, + 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, + 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,114,121,0,0,0,114,128,0,0,0,114, + 135,0,0,0,114,137,0,0,0,114,139,0,0,0,114,160, + 0,0,0,114,167,0,0,0,114,176,0,0,0,114,180,0, + 0,0,114,182,0,0,0,114,189,0,0,0,114,194,0,0, + 0,114,195,0,0,0,114,200,0,0,0,218,6,111,98,106, + 101,99,116,114,209,0,0,0,114,213,0,0,0,114,214,0, + 0,0,114,235,0,0,0,114,249,0,0,0,114,11,1,0, + 0,114,34,1,0,0,114,41,1,0,0,114,30,1,0,0, + 114,47,1,0,0,114,73,1,0,0,114,77,1,0,0,114, + 94,1,0,0,114,113,1,0,0,114,208,0,0,0,114,116, + 1,0,0,114,118,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, + 111,100,117,108,101,62,1,0,0,0,115,182,0,0,0,4, + 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, + 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, + 1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4, + 255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8, + 30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8, + 8,10,5,10,22,0,127,16,27,12,1,4,2,4,1,6, + 2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8, + 40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10, + 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, + 73,14,67,16,30,0,127,14,17,18,50,18,45,18,25,14, + 53,14,63,14,49,0,127,14,29,0,127,10,30,8,23,8, + 11,12,5,255,128, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index cbfba669a51bc..09a202d8358d6 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -78,13 +78,13 @@ const unsigned char _Py_M__zipimport[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, 0,0,0,64,0,0,0,115,126,0,0,0,101,0,90,1, 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, - 100,29,100,5,100,6,132,1,90,5,100,30,100,7,100,8, - 132,1,90,6,100,31,100,9,100,10,132,1,90,7,100,11, + 100,29,100,5,100,6,132,1,90,5,100,29,100,7,100,8, + 132,1,90,6,100,29,100,9,100,10,132,1,90,7,100,11, 100,12,132,0,90,8,100,13,100,14,132,0,90,9,100,15, 100,16,132,0,90,10,100,17,100,18,132,0,90,11,100,19, 100,20,132,0,90,12,100,21,100,22,132,0,90,13,100,23, 100,24,132,0,90,14,100,25,100,26,132,0,90,15,100,27, - 100,28,132,0,90,16,100,4,83,0,41,32,114,4,0,0, + 100,28,132,0,90,16,100,4,83,0,41,30,114,4,0,0, 0,97,255,1,0,0,122,105,112,105,109,112,111,114,116,101, 114,40,97,114,99,104,105,118,101,112,97,116,104,41,32,45, 62,32,122,105,112,105,109,112,111,114,116,101,114,32,111,98, @@ -572,496 +572,496 @@ const unsigned char _Py_M__zipimport[] = { 10,0,0,0,218,8,95,95,114,101,112,114,95,95,84,1, 0,0,115,4,0,0,0,24,1,255,128,122,20,122,105,112, 105,109,112,111,114,116,101,114,46,95,95,114,101,112,114,95, - 95,41,1,78,41,1,78,41,1,78,41,17,114,6,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,7,95,95,100, - 111,99,95,95,114,34,0,0,0,114,44,0,0,0,114,45, - 0,0,0,114,49,0,0,0,114,55,0,0,0,114,62,0, - 0,0,114,63,0,0,0,114,70,0,0,0,114,46,0,0, - 0,114,83,0,0,0,114,85,0,0,0,114,88,0,0,0, - 114,89,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,114,4,0,0,0,46,0, - 0,0,115,32,0,0,0,8,0,4,1,8,17,10,46,10, - 37,10,16,8,27,8,10,8,21,8,12,8,26,8,13,8, - 43,8,15,12,10,255,128,122,12,95,95,105,110,105,116,95, - 95,46,112,121,99,84,114,66,0,0,0,70,41,3,122,4, - 46,112,121,99,84,70,41,3,114,67,0,0,0,70,70,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,20,0,0,0,124,0,106, - 0,124,1,160,1,100,1,161,1,100,2,25,0,23,0,83, - 0,41,3,78,218,1,46,233,2,0,0,0,41,2,114,31, - 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,41, - 2,114,32,0,0,0,114,41,0,0,0,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,114,39,0,0,0,102, - 1,0,0,115,4,0,0,0,20,1,255,128,114,39,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,2,0,0,0,67,0,0,0,115,18,0,0,0,124, - 1,116,0,23,0,125,2,124,2,124,0,106,1,118,0,83, - 0,169,1,78,41,2,114,20,0,0,0,114,28,0,0,0, - 41,3,114,32,0,0,0,114,13,0,0,0,90,7,100,105, - 114,112,97,116,104,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,114,40,0,0,0,106,1,0,0,115,6,0, - 0,0,8,4,10,2,255,128,114,40,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0, - 0,0,67,0,0,0,115,56,0,0,0,116,0,124,0,124, - 1,131,2,125,2,116,1,68,0,93,18,92,3,125,3,125, - 4,125,5,124,2,124,3,23,0,125,6,124,6,124,0,106, - 2,118,0,114,25,124,5,2,0,1,0,83,0,113,7,100, - 0,83,0,114,94,0,0,0,41,3,114,39,0,0,0,218, - 16,95,122,105,112,95,115,101,97,114,99,104,111,114,100,101, - 114,114,28,0,0,0,41,7,114,32,0,0,0,114,41,0, - 0,0,114,13,0,0,0,218,6,115,117,102,102,105,120,218, - 10,105,115,98,121,116,101,99,111,100,101,114,54,0,0,0, - 114,69,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,114,38,0,0,0,115,1,0,0,115,16,0, - 0,0,10,1,14,1,8,1,10,1,8,1,2,255,4,2, - 255,128,114,38,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,26,0,0,0,9,0,0,0,67,0,0,0, - 115,226,4,0,0,122,7,116,0,160,1,124,0,161,1,125, - 1,87,0,110,16,4,0,116,2,144,2,121,112,1,0,1, - 0,1,0,116,3,100,1,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,1,144,2,143,60,1,0,122,18,124, - 1,160,4,116,5,11,0,100,3,161,2,1,0,124,1,160, - 6,161,0,125,2,124,1,160,7,116,5,161,1,125,3,87, - 0,110,16,4,0,116,2,144,2,121,111,1,0,1,0,1, - 0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,116,8,124,3,131,1,116,5,107,3,114,78,116, - 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,3,100,0,100,5,133,2,25,0,116,9,107,3,114, - 201,122,12,124,1,160,4,100,6,100,3,161,2,1,0,124, - 1,160,6,161,0,125,4,87,0,110,16,4,0,116,2,144, - 2,121,110,1,0,1,0,1,0,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,116,10,124,4,116, - 11,24,0,116,5,24,0,100,6,131,2,125,5,122,11,124, - 1,160,4,124,5,161,1,1,0,124,1,160,7,161,0,125, - 6,87,0,110,16,4,0,116,2,144,2,121,109,1,0,1, - 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,6,160,12,116,9,161,1,125,7,124, - 7,100,6,107,0,114,170,116,3,100,7,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,124,6,124,7,124,7,116, - 5,23,0,133,2,25,0,125,3,116,8,124,3,131,1,116, - 5,107,3,114,193,116,3,100,8,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,124,4,116,8,124,6,131,1,24, - 0,124,7,23,0,125,2,116,13,124,3,100,9,100,10,133, - 2,25,0,131,1,125,8,116,13,124,3,100,10,100,11,133, - 2,25,0,131,1,125,9,124,2,124,8,107,0,114,230,116, - 3,100,12,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,2,124,9,107,0,114,243,116,3,100,13,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,124,2,124,8,56, - 0,125,2,124,2,124,9,24,0,125,10,124,10,100,6,107, - 0,144,1,114,9,116,3,100,14,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,105,0,125,11,100,6,125,12,122, - 7,124,1,160,4,124,2,161,1,1,0,87,0,110,16,4, - 0,116,2,144,2,121,108,1,0,1,0,1,0,116,3,100, - 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,9, - 0,124,1,160,7,100,16,161,1,125,3,116,8,124,3,131, - 1,100,5,107,0,144,1,114,54,116,14,100,17,131,1,130, - 1,124,3,100,0,100,5,133,2,25,0,100,18,107,3,144, - 1,114,65,144,2,113,80,116,8,124,3,131,1,100,16,107, - 3,144,1,114,76,116,14,100,17,131,1,130,1,116,15,124, - 3,100,19,100,20,133,2,25,0,131,1,125,13,116,15,124, - 3,100,20,100,9,133,2,25,0,131,1,125,14,116,15,124, - 3,100,9,100,21,133,2,25,0,131,1,125,15,116,15,124, - 3,100,21,100,10,133,2,25,0,131,1,125,16,116,13,124, - 3,100,10,100,11,133,2,25,0,131,1,125,17,116,13,124, - 3,100,11,100,22,133,2,25,0,131,1,125,18,116,13,124, - 3,100,22,100,23,133,2,25,0,131,1,125,4,116,15,124, - 3,100,23,100,24,133,2,25,0,131,1,125,19,116,15,124, - 3,100,24,100,25,133,2,25,0,131,1,125,20,116,15,124, - 3,100,25,100,26,133,2,25,0,131,1,125,21,116,13,124, - 3,100,27,100,16,133,2,25,0,131,1,125,22,124,19,124, - 20,23,0,124,21,23,0,125,8,124,22,124,9,107,4,144, - 1,114,184,116,3,100,28,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,22,124,10,55,0,125,22,122,7,124, - 1,160,7,124,19,161,1,125,23,87,0,110,16,4,0,116, - 2,144,2,121,107,1,0,1,0,1,0,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,116,8,124, - 23,131,1,124,19,107,3,144,1,114,228,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,122,25,116, - 8,124,1,160,7,124,8,124,19,24,0,161,1,131,1,124, - 8,124,19,24,0,107,3,144,1,114,252,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,87,0,110, - 16,4,0,116,2,144,2,121,106,1,0,1,0,1,0,116, - 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,13,100,29,64,0,144,2,114,24,124,23,160,16,161, - 0,125,23,110,24,122,7,124,23,160,16,100,30,161,1,125, - 23,87,0,110,16,4,0,116,17,144,2,121,105,1,0,1, - 0,1,0,124,23,160,16,100,31,161,1,160,18,116,19,161, - 1,125,23,89,0,124,23,160,20,100,32,116,21,161,2,125, - 23,116,22,160,23,124,0,124,23,161,2,125,24,124,24,124, - 14,124,18,124,4,124,22,124,15,124,16,124,17,102,8,125, - 25,124,25,124,11,124,23,60,0,124,12,100,33,55,0,125, - 12,144,1,113,38,87,0,100,0,4,0,4,0,131,3,1, - 0,110,9,49,0,144,2,115,91,119,1,1,0,1,0,1, - 0,89,0,1,0,116,24,160,25,100,34,124,12,124,0,161, - 3,1,0,124,11,83,0,119,0,119,0,119,0,119,0,119, - 0,119,0,119,0,119,0,41,35,78,122,21,99,97,110,39, - 116,32,111,112,101,110,32,90,105,112,32,102,105,108,101,58, - 32,114,12,0,0,0,114,92,0,0,0,250,21,99,97,110, - 39,116,32,114,101,97,100,32,90,105,112,32,102,105,108,101, - 58,32,233,4,0,0,0,114,0,0,0,0,122,16,110,111, - 116,32,97,32,90,105,112,32,102,105,108,101,58,32,122,18, - 99,111,114,114,117,112,116,32,90,105,112,32,102,105,108,101, - 58,32,233,12,0,0,0,233,16,0,0,0,233,20,0,0, - 0,122,28,98,97,100,32,99,101,110,116,114,97,108,32,100, - 105,114,101,99,116,111,114,121,32,115,105,122,101,58,32,122, - 30,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, - 101,99,116,111,114,121,32,111,102,102,115,101,116,58,32,122, - 38,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, - 101,99,116,111,114,121,32,115,105,122,101,32,111,114,32,111, - 102,102,115,101,116,58,32,84,233,46,0,0,0,250,27,69, - 79,70,32,114,101,97,100,32,119,104,101,114,101,32,110,111, - 116,32,101,120,112,101,99,116,101,100,115,4,0,0,0,80, - 75,1,2,233,8,0,0,0,233,10,0,0,0,233,14,0, - 0,0,233,24,0,0,0,233,28,0,0,0,233,30,0,0, - 0,233,32,0,0,0,233,34,0,0,0,233,42,0,0,0, - 122,25,98,97,100,32,108,111,99,97,108,32,104,101,97,100, - 101,114,32,111,102,102,115,101,116,58,32,105,0,8,0,0, - 218,5,97,115,99,105,105,90,6,108,97,116,105,110,49,250, - 1,47,114,5,0,0,0,122,33,122,105,112,105,109,112,111, - 114,116,58,32,102,111,117,110,100,32,123,125,32,110,97,109, - 101,115,32,105,110,32,123,33,114,125,41,26,218,3,95,105, - 111,218,9,111,112,101,110,95,99,111,100,101,114,22,0,0, - 0,114,3,0,0,0,218,4,115,101,101,107,218,20,69,78, - 68,95,67,69,78,84,82,65,76,95,68,73,82,95,83,73, - 90,69,90,4,116,101,108,108,218,4,114,101,97,100,114,58, - 0,0,0,218,18,83,84,82,73,78,71,95,69,78,68,95, - 65,82,67,72,73,86,69,218,3,109,97,120,218,15,77,65, - 88,95,67,79,77,77,69,78,84,95,76,69,78,218,5,114, - 102,105,110,100,114,2,0,0,0,218,8,69,79,70,69,114, - 114,111,114,114,1,0,0,0,114,68,0,0,0,218,18,85, - 110,105,99,111,100,101,68,101,99,111,100,101,69,114,114,111, - 114,218,9,116,114,97,110,115,108,97,116,101,218,11,99,112, - 52,51,55,95,116,97,98,108,101,114,19,0,0,0,114,20, - 0,0,0,114,21,0,0,0,114,30,0,0,0,114,48,0, - 0,0,114,81,0,0,0,41,26,114,29,0,0,0,218,2, - 102,112,90,15,104,101,97,100,101,114,95,112,111,115,105,116, - 105,111,110,218,6,98,117,102,102,101,114,218,9,102,105,108, - 101,95,115,105,122,101,90,17,109,97,120,95,99,111,109,109, - 101,110,116,95,115,116,97,114,116,218,4,100,97,116,97,90, - 3,112,111,115,218,11,104,101,97,100,101,114,95,115,105,122, - 101,90,13,104,101,97,100,101,114,95,111,102,102,115,101,116, - 90,10,97,114,99,95,111,102,102,115,101,116,114,33,0,0, - 0,218,5,99,111,117,110,116,218,5,102,108,97,103,115,218, - 8,99,111,109,112,114,101,115,115,218,4,116,105,109,101,218, - 4,100,97,116,101,218,3,99,114,99,218,9,100,97,116,97, - 95,115,105,122,101,218,9,110,97,109,101,95,115,105,122,101, - 218,10,101,120,116,114,97,95,115,105,122,101,90,12,99,111, - 109,109,101,110,116,95,115,105,122,101,218,11,102,105,108,101, - 95,111,102,102,115,101,116,114,47,0,0,0,114,13,0,0, - 0,218,1,116,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,114,27,0,0,0,146,1,0,0,115,240,0,0, - 0,2,1,14,1,14,1,18,1,8,2,2,1,14,1,8, - 1,14,1,14,1,18,1,12,1,18,1,16,1,2,3,12, - 1,12,1,14,1,10,1,2,1,6,255,8,2,2,1,2, - 255,2,1,4,255,2,2,10,1,12,1,14,1,10,1,2, - 1,6,255,10,2,8,1,10,1,2,1,6,255,16,2,12, - 1,10,1,2,1,6,255,16,2,16,2,16,1,8,1,18, - 1,8,1,18,1,8,1,8,1,10,1,18,1,4,2,4, - 2,2,1,14,1,14,1,18,1,2,1,10,1,14,1,8, - 1,18,2,4,1,14,1,8,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,12, - 1,10,1,18,1,8,1,2,2,14,1,14,1,18,1,14, - 1,18,1,2,4,28,1,18,1,4,255,14,2,18,1,10, - 2,10,2,2,3,14,1,14,1,18,1,12,2,12,1,20, - 1,8,1,8,1,4,202,14,6,18,128,14,49,4,1,2, - 247,2,246,2,246,2,227,2,227,2,248,2,246,2,248,255, - 128,114,27,0,0,0,117,190,1,0,0,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,195,135,195,188,195, - 169,195,162,195,164,195,160,195,165,195,167,195,170,195,171,195, - 168,195,175,195,174,195,172,195,132,195,133,195,137,195,166,195, - 134,195,180,195,182,195,178,195,187,195,185,195,191,195,150,195, - 156,194,162,194,163,194,165,226,130,167,198,146,195,161,195,173, - 195,179,195,186,195,177,195,145,194,170,194,186,194,191,226,140, - 144,194,172,194,189,194,188,194,161,194,171,194,187,226,150,145, - 226,150,146,226,150,147,226,148,130,226,148,164,226,149,161,226, - 149,162,226,149,150,226,149,149,226,149,163,226,149,145,226,149, - 151,226,149,157,226,149,156,226,149,155,226,148,144,226,148,148, - 226,148,180,226,148,172,226,148,156,226,148,128,226,148,188,226, - 149,158,226,149,159,226,149,154,226,149,148,226,149,169,226,149, - 166,226,149,160,226,149,144,226,149,172,226,149,167,226,149,168, - 226,149,164,226,149,165,226,149,153,226,149,152,226,149,146,226, - 149,147,226,149,171,226,149,170,226,148,152,226,148,140,226,150, - 136,226,150,132,226,150,140,226,150,144,226,150,128,206,177,195, - 159,206,147,207,128,206,163,207,131,194,181,207,132,206,166,206, - 152,206,169,206,180,226,136,158,207,134,206,181,226,136,169,226, - 137,161,194,177,226,137,165,226,137,164,226,140,160,226,140,161, - 195,183,226,137,136,194,176,226,136,153,194,183,226,136,154,226, - 129,191,194,178,226,150,160,194,160,99,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, - 0,0,115,106,0,0,0,116,0,114,11,116,1,160,2,100, - 1,161,1,1,0,116,3,100,2,131,1,130,1,100,3,97, - 0,122,28,122,8,100,4,100,5,108,4,109,5,125,0,1, - 0,87,0,110,15,4,0,116,6,121,52,1,0,1,0,1, - 0,116,1,160,2,100,1,161,1,1,0,116,3,100,2,131, - 1,130,1,87,0,100,6,97,0,110,3,100,6,97,0,119, - 0,116,1,160,2,100,7,161,1,1,0,124,0,83,0,119, - 0,41,8,78,122,27,122,105,112,105,109,112,111,114,116,58, - 32,122,108,105,98,32,85,78,65,86,65,73,76,65,66,76, - 69,250,41,99,97,110,39,116,32,100,101,99,111,109,112,114, - 101,115,115,32,100,97,116,97,59,32,122,108,105,98,32,110, - 111,116,32,97,118,97,105,108,97,98,108,101,84,114,0,0, - 0,0,169,1,218,10,100,101,99,111,109,112,114,101,115,115, - 70,122,25,122,105,112,105,109,112,111,114,116,58,32,122,108, - 105,98,32,97,118,97,105,108,97,98,108,101,41,7,218,15, - 95,105,109,112,111,114,116,105,110,103,95,122,108,105,98,114, - 48,0,0,0,114,81,0,0,0,114,3,0,0,0,90,4, - 122,108,105,98,114,147,0,0,0,218,9,69,120,99,101,112, - 116,105,111,110,114,146,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,218,20,95,103,101,116,95,100, - 101,99,111,109,112,114,101,115,115,95,102,117,110,99,48,2, - 0,0,115,30,0,0,0,4,2,10,3,8,1,4,2,4, - 1,16,1,12,1,10,1,8,1,2,253,12,5,10,2,4, - 1,2,249,255,128,114,150,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67, - 0,0,0,115,120,1,0,0,124,1,92,8,125,2,125,3, - 125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1, - 107,0,114,18,116,0,100,2,131,1,130,1,116,1,160,2, - 124,0,161,1,143,127,125,10,122,7,124,10,160,3,124,6, - 161,1,1,0,87,0,110,15,4,0,116,4,121,187,1,0, - 1,0,1,0,116,0,100,3,124,0,155,2,157,2,124,0, - 100,4,141,2,130,1,124,10,160,5,100,5,161,1,125,11, - 116,6,124,11,131,1,100,5,107,3,114,62,116,7,100,6, - 131,1,130,1,124,11,100,0,100,7,133,2,25,0,100,8, - 107,3,114,79,116,0,100,9,124,0,155,2,157,2,124,0, - 100,4,141,2,130,1,116,8,124,11,100,10,100,11,133,2, - 25,0,131,1,125,12,116,8,124,11,100,11,100,5,133,2, - 25,0,131,1,125,13,100,5,124,12,23,0,124,13,23,0, - 125,14,124,6,124,14,55,0,125,6,122,7,124,10,160,3, - 124,6,161,1,1,0,87,0,110,15,4,0,116,4,121,186, - 1,0,1,0,1,0,116,0,100,3,124,0,155,2,157,2, - 124,0,100,4,141,2,130,1,124,10,160,5,124,4,161,1, - 125,15,116,6,124,15,131,1,124,4,107,3,114,143,116,4, - 100,12,131,1,130,1,87,0,100,0,4,0,4,0,131,3, - 1,0,110,8,49,0,115,153,119,1,1,0,1,0,1,0, - 89,0,1,0,124,3,100,1,107,2,114,164,124,15,83,0, - 122,5,116,9,131,0,125,16,87,0,110,10,4,0,116,10, - 121,185,1,0,1,0,1,0,116,0,100,13,131,1,130,1, - 124,16,124,15,100,14,131,2,83,0,119,0,119,0,119,0, - 41,15,78,114,0,0,0,0,122,18,110,101,103,97,116,105, - 118,101,32,100,97,116,97,32,115,105,122,101,114,98,0,0, - 0,114,12,0,0,0,114,110,0,0,0,114,104,0,0,0, - 114,99,0,0,0,115,4,0,0,0,80,75,3,4,122,23, - 98,97,100,32,108,111,99,97,108,32,102,105,108,101,32,104, - 101,97,100,101,114,58,32,233,26,0,0,0,114,109,0,0, - 0,122,26,122,105,112,105,109,112,111,114,116,58,32,99,97, - 110,39,116,32,114,101,97,100,32,100,97,116,97,114,145,0, - 0,0,105,241,255,255,255,41,11,114,3,0,0,0,114,116, - 0,0,0,114,117,0,0,0,114,118,0,0,0,114,22,0, - 0,0,114,120,0,0,0,114,58,0,0,0,114,125,0,0, - 0,114,1,0,0,0,114,150,0,0,0,114,149,0,0,0, - 41,17,114,29,0,0,0,114,61,0,0,0,90,8,100,97, - 116,97,112,97,116,104,114,136,0,0,0,114,140,0,0,0, - 114,131,0,0,0,114,143,0,0,0,114,137,0,0,0,114, - 138,0,0,0,114,139,0,0,0,114,129,0,0,0,114,130, - 0,0,0,114,141,0,0,0,114,142,0,0,0,114,133,0, - 0,0,90,8,114,97,119,95,100,97,116,97,114,147,0,0, + 95,169,1,78,41,17,114,6,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,7,95,95,100,111,99,95,95,114,34, + 0,0,0,114,44,0,0,0,114,45,0,0,0,114,49,0, + 0,0,114,55,0,0,0,114,62,0,0,0,114,63,0,0, + 0,114,70,0,0,0,114,46,0,0,0,114,83,0,0,0, + 114,85,0,0,0,114,88,0,0,0,114,89,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,114,4,0,0,0,46,0,0,0,115,32,0,0, + 0,8,0,4,1,8,17,10,46,10,37,10,16,8,27,8, + 10,8,21,8,12,8,26,8,13,8,43,8,15,12,10,255, + 128,122,12,95,95,105,110,105,116,95,95,46,112,121,99,84, + 114,66,0,0,0,70,41,3,122,4,46,112,121,99,84,70, + 41,3,114,67,0,0,0,70,70,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,20,0,0,0,124,0,106,0,124,1,160,1,100, + 1,161,1,100,2,25,0,23,0,83,0,41,3,78,218,1, + 46,233,2,0,0,0,41,2,114,31,0,0,0,218,10,114, + 112,97,114,116,105,116,105,111,110,41,2,114,32,0,0,0, + 114,41,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,39,0,0,0,102,1,0,0,115,4,0, + 0,0,20,1,255,128,114,39,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, + 67,0,0,0,115,18,0,0,0,124,1,116,0,23,0,125, + 2,124,2,124,0,106,1,118,0,83,0,114,90,0,0,0, + 41,2,114,20,0,0,0,114,28,0,0,0,41,3,114,32, + 0,0,0,114,13,0,0,0,90,7,100,105,114,112,97,116, + 104,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 114,40,0,0,0,106,1,0,0,115,6,0,0,0,8,4, + 10,2,255,128,114,40,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,7,0,0,0,4,0,0,0,67,0, + 0,0,115,56,0,0,0,116,0,124,0,124,1,131,2,125, + 2,116,1,68,0,93,18,92,3,125,3,125,4,125,5,124, + 2,124,3,23,0,125,6,124,6,124,0,106,2,118,0,114, + 25,124,5,2,0,1,0,83,0,113,7,100,0,83,0,114, + 90,0,0,0,41,3,114,39,0,0,0,218,16,95,122,105, + 112,95,115,101,97,114,99,104,111,114,100,101,114,114,28,0, + 0,0,41,7,114,32,0,0,0,114,41,0,0,0,114,13, + 0,0,0,218,6,115,117,102,102,105,120,218,10,105,115,98, + 121,116,101,99,111,100,101,114,54,0,0,0,114,69,0,0, 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 114,59,0,0,0,69,2,0,0,115,74,0,0,0,20,1, - 8,1,8,1,12,2,2,2,14,1,12,1,18,1,10,1, - 12,1,8,1,16,2,18,2,16,2,16,1,12,1,8,1, - 2,1,14,1,12,1,18,1,10,1,12,1,8,1,14,255, - 16,128,8,3,4,2,2,3,10,1,12,1,8,1,10,1, - 2,254,2,243,2,240,255,128,114,59,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,16,0,0,0,116,0,124,0,124, - 1,24,0,131,1,100,1,107,1,83,0,41,2,78,114,5, - 0,0,0,41,1,218,3,97,98,115,41,2,90,2,116,49, - 90,2,116,50,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,9,95,101,113,95,109,116,105,109,101,115,2, - 0,0,115,4,0,0,0,16,2,255,128,114,153,0,0,0, - 99,5,0,0,0,0,0,0,0,0,0,0,0,14,0,0, - 0,6,0,0,0,67,0,0,0,115,254,0,0,0,124,3, - 124,2,100,1,156,2,125,5,116,0,160,1,124,4,124,3, - 124,5,161,3,125,6,124,6,100,2,64,0,100,3,107,3, - 125,7,124,7,114,63,124,6,100,4,64,0,100,3,107,3, - 125,8,116,2,106,3,100,5,107,3,114,62,124,8,115,38, - 116,2,106,3,100,6,107,2,114,62,116,4,124,0,124,2, - 131,2,125,9,124,9,100,0,117,1,114,62,116,2,160,5, - 116,0,106,6,124,9,161,2,125,10,116,0,160,7,124,4, - 124,10,124,3,124,5,161,4,1,0,110,40,116,8,124,0, - 124,2,131,2,92,2,125,11,125,12,124,11,114,103,116,9, - 116,10,124,4,100,7,100,8,133,2,25,0,131,1,124,11, - 131,2,114,93,116,10,124,4,100,8,100,9,133,2,25,0, - 131,1,124,12,107,3,114,103,116,11,160,12,100,10,124,3, - 155,2,157,2,161,1,1,0,100,0,83,0,116,13,160,14, - 124,4,100,9,100,0,133,2,25,0,161,1,125,13,116,15, - 124,13,116,16,131,2,115,125,116,17,100,11,124,1,155,2, - 100,12,157,3,131,1,130,1,124,13,83,0,41,13,78,41, - 2,114,47,0,0,0,114,13,0,0,0,114,5,0,0,0, - 114,0,0,0,0,114,92,0,0,0,90,5,110,101,118,101, - 114,90,6,97,108,119,97,121,115,114,105,0,0,0,114,100, - 0,0,0,114,101,0,0,0,122,22,98,121,116,101,99,111, - 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, - 122,16,99,111,109,112,105,108,101,100,32,109,111,100,117,108, - 101,32,122,21,32,105,115,32,110,111,116,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,41,18,114,21,0,0,0, - 90,13,95,99,108,97,115,115,105,102,121,95,112,121,99,218, - 4,95,105,109,112,90,21,99,104,101,99,107,95,104,97,115, - 104,95,98,97,115,101,100,95,112,121,99,115,218,15,95,103, - 101,116,95,112,121,99,95,115,111,117,114,99,101,218,11,115, - 111,117,114,99,101,95,104,97,115,104,90,17,95,82,65,87, - 95,77,65,71,73,67,95,78,85,77,66,69,82,90,18,95, - 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121, - 99,218,29,95,103,101,116,95,109,116,105,109,101,95,97,110, - 100,95,115,105,122,101,95,111,102,95,115,111,117,114,99,101, - 114,153,0,0,0,114,2,0,0,0,114,48,0,0,0,114, - 81,0,0,0,218,7,109,97,114,115,104,97,108,90,5,108, - 111,97,100,115,114,15,0,0,0,218,10,95,99,111,100,101, - 95,116,121,112,101,218,9,84,121,112,101,69,114,114,111,114, - 41,14,114,32,0,0,0,114,60,0,0,0,114,69,0,0, - 0,114,41,0,0,0,114,132,0,0,0,90,11,101,120,99, - 95,100,101,116,97,105,108,115,114,135,0,0,0,90,10,104, - 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107, - 95,115,111,117,114,99,101,90,12,115,111,117,114,99,101,95, - 98,121,116,101,115,114,156,0,0,0,90,12,115,111,117,114, - 99,101,95,109,116,105,109,101,90,11,115,111,117,114,99,101, - 95,115,105,122,101,114,53,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,15,95,117,110,109,97, - 114,115,104,97,108,95,99,111,100,101,123,2,0,0,115,74, - 0,0,0,2,2,2,1,6,254,14,5,12,2,4,1,12, - 1,10,1,2,1,2,255,8,1,2,255,10,2,8,1,4, - 1,4,1,2,1,4,254,4,5,8,1,4,255,2,128,8, - 4,6,255,4,3,22,3,18,1,2,255,4,2,8,1,4, - 255,4,2,18,2,10,1,16,1,4,1,255,128,114,161,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,4,0,0,0,67,0,0,0,115,28,0,0,0, - 124,0,160,0,100,1,100,2,161,2,125,0,124,0,160,0, - 100,3,100,2,161,2,125,0,124,0,83,0,41,4,78,115, - 2,0,0,0,13,10,243,1,0,0,0,10,243,1,0,0, - 0,13,41,1,114,19,0,0,0,41,1,218,6,115,111,117, - 114,99,101,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,218,23,95,110,111,114,109,97,108,105,122,101,95,108, - 105,110,101,95,101,110,100,105,110,103,115,168,2,0,0,115, - 8,0,0,0,12,1,12,1,4,1,255,128,114,165,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,6,0,0,0,67,0,0,0,115,24,0,0,0,116, - 0,124,1,131,1,125,1,116,1,124,1,124,0,100,1,100, - 2,100,3,141,4,83,0,41,4,78,114,79,0,0,0,84, - 41,1,90,12,100,111,110,116,95,105,110,104,101,114,105,116, - 41,2,114,165,0,0,0,218,7,99,111,109,112,105,108,101, - 41,2,114,60,0,0,0,114,164,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,15,95,99,111, - 109,112,105,108,101,95,115,111,117,114,99,101,175,2,0,0, - 115,6,0,0,0,8,1,16,1,255,128,114,167,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,11,0,0,0,67,0,0,0,115,68,0,0,0,116,0, - 160,1,124,0,100,1,63,0,100,2,23,0,124,0,100,3, - 63,0,100,4,64,0,124,0,100,5,64,0,124,1,100,6, - 63,0,124,1,100,3,63,0,100,7,64,0,124,1,100,5, - 64,0,100,8,20,0,100,9,100,9,100,9,102,9,161,1, - 83,0,41,10,78,233,9,0,0,0,105,188,7,0,0,233, - 5,0,0,0,233,15,0,0,0,233,31,0,0,0,233,11, - 0,0,0,233,63,0,0,0,114,92,0,0,0,114,14,0, - 0,0,41,2,114,137,0,0,0,90,6,109,107,116,105,109, - 101,41,2,218,1,100,114,144,0,0,0,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,218,14,95,112,97,114, - 115,101,95,100,111,115,116,105,109,101,181,2,0,0,115,20, - 0,0,0,4,1,10,1,10,1,6,1,6,1,10,1,10, - 1,6,1,6,249,255,128,114,175,0,0,0,99,2,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,10,0,0, - 0,67,0,0,0,115,110,0,0,0,122,41,124,1,100,1, - 100,0,133,2,25,0,100,2,118,0,115,11,74,0,130,1, - 124,1,100,0,100,1,133,2,25,0,125,1,124,0,106,0, - 124,1,25,0,125,2,124,2,100,3,25,0,125,3,124,2, - 100,4,25,0,125,4,124,2,100,5,25,0,125,5,116,1, - 124,4,124,3,131,2,124,5,102,2,87,0,83,0,4,0, - 116,2,116,3,116,4,102,3,121,54,1,0,1,0,1,0, - 89,0,100,6,83,0,119,0,41,7,78,114,14,0,0,0, - 169,2,218,1,99,218,1,111,114,169,0,0,0,233,6,0, - 0,0,233,3,0,0,0,41,2,114,0,0,0,0,114,0, - 0,0,0,41,5,114,28,0,0,0,114,175,0,0,0,114, - 26,0,0,0,218,10,73,110,100,101,120,69,114,114,111,114, - 114,160,0,0,0,41,6,114,32,0,0,0,114,13,0,0, - 0,114,61,0,0,0,114,137,0,0,0,114,138,0,0,0, - 90,17,117,110,99,111,109,112,114,101,115,115,101,100,95,115, - 105,122,101,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,114,157,0,0,0,194,2,0,0,115,24,0,0,0, - 2,1,20,2,12,1,10,1,8,3,8,1,8,1,16,1, - 18,1,6,1,2,255,255,128,114,157,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,0, - 0,0,67,0,0,0,115,80,0,0,0,124,1,100,1,100, - 0,133,2,25,0,100,2,118,0,115,10,74,0,130,1,124, - 1,100,0,100,1,133,2,25,0,125,1,122,7,124,0,106, - 0,124,1,25,0,125,2,87,0,110,9,4,0,116,1,121, - 39,1,0,1,0,1,0,89,0,100,0,83,0,116,2,124, - 0,106,3,124,2,131,2,83,0,119,0,41,3,78,114,14, - 0,0,0,114,176,0,0,0,41,4,114,28,0,0,0,114, - 26,0,0,0,114,59,0,0,0,114,29,0,0,0,41,3, - 114,32,0,0,0,114,13,0,0,0,114,61,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,155, - 0,0,0,213,2,0,0,115,18,0,0,0,20,2,12,1, - 2,2,14,1,12,1,6,1,12,2,2,253,255,128,114,155, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 14,0,0,0,11,0,0,0,67,0,0,0,115,14,1,0, - 0,116,0,124,0,124,1,131,2,125,2,100,0,125,3,116, - 1,68,0,93,100,92,3,125,4,125,5,125,6,124,2,124, - 4,23,0,125,7,116,2,106,3,100,1,124,0,106,4,116, - 5,124,7,100,2,100,3,141,5,1,0,122,7,124,0,106, - 6,124,7,25,0,125,8,87,0,110,8,4,0,116,7,121, - 134,1,0,1,0,1,0,89,0,113,9,124,8,100,4,25, - 0,125,9,116,8,124,0,106,4,124,8,131,2,125,10,100, - 0,125,11,124,5,114,89,122,10,116,9,124,0,124,9,124, - 7,124,1,124,10,131,5,125,11,87,0,110,24,4,0,116, - 10,121,133,1,0,125,12,1,0,122,8,124,12,125,3,87, - 0,89,0,100,0,125,12,126,12,110,9,100,0,125,12,126, - 12,119,1,116,11,124,9,124,10,131,2,125,11,124,11,100, - 0,117,0,114,99,113,9,124,8,100,4,25,0,125,9,124, - 11,124,6,124,9,102,3,2,0,1,0,83,0,124,3,114, - 124,100,5,124,3,155,0,157,2,125,13,116,12,124,13,124, - 1,100,6,141,2,124,3,130,2,116,12,100,7,124,1,155, - 2,157,2,124,1,100,6,141,2,130,1,119,0,119,0,41, - 8,78,122,13,116,114,121,105,110,103,32,123,125,123,125,123, - 125,114,92,0,0,0,41,1,90,9,118,101,114,98,111,115, - 105,116,121,114,0,0,0,0,122,20,109,111,100,117,108,101, - 32,108,111,97,100,32,102,97,105,108,101,100,58,32,114,65, - 0,0,0,114,64,0,0,0,41,13,114,39,0,0,0,114, - 95,0,0,0,114,48,0,0,0,114,81,0,0,0,114,29, - 0,0,0,114,20,0,0,0,114,28,0,0,0,114,26,0, - 0,0,114,59,0,0,0,114,161,0,0,0,114,80,0,0, - 0,114,167,0,0,0,114,3,0,0,0,41,14,114,32,0, - 0,0,114,41,0,0,0,114,13,0,0,0,90,12,105,109, - 112,111,114,116,95,101,114,114,111,114,114,96,0,0,0,114, - 97,0,0,0,114,54,0,0,0,114,69,0,0,0,114,61, - 0,0,0,114,43,0,0,0,114,132,0,0,0,114,53,0, - 0,0,90,3,101,120,99,114,82,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,114,51,0,0,0, - 228,2,0,0,115,60,0,0,0,10,1,4,1,14,1,8, - 1,22,1,2,1,14,1,12,1,4,1,8,2,12,1,4, - 1,4,1,2,1,20,1,14,1,16,1,8,128,10,2,8, - 1,2,3,8,1,14,1,4,2,10,1,14,1,18,2,2, - 241,2,247,255,128,114,51,0,0,0,41,46,114,90,0,0, - 0,90,26,95,102,114,111,122,101,110,95,105,109,112,111,114, - 116,108,105,98,95,101,120,116,101,114,110,97,108,114,21,0, - 0,0,114,1,0,0,0,114,2,0,0,0,90,17,95,102, - 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,114, - 48,0,0,0,114,154,0,0,0,114,116,0,0,0,114,158, - 0,0,0,114,72,0,0,0,114,137,0,0,0,114,35,0, - 0,0,90,7,95,95,97,108,108,95,95,114,20,0,0,0, - 90,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, - 115,114,18,0,0,0,114,80,0,0,0,114,3,0,0,0, - 114,25,0,0,0,218,4,116,121,112,101,114,75,0,0,0, - 114,119,0,0,0,114,121,0,0,0,114,123,0,0,0,90, - 13,95,76,111,97,100,101,114,66,97,115,105,99,115,114,4, - 0,0,0,114,95,0,0,0,114,39,0,0,0,114,40,0, - 0,0,114,38,0,0,0,114,27,0,0,0,114,128,0,0, - 0,114,148,0,0,0,114,150,0,0,0,114,59,0,0,0, - 114,153,0,0,0,114,161,0,0,0,218,8,95,95,99,111, - 100,101,95,95,114,159,0,0,0,114,165,0,0,0,114,167, - 0,0,0,114,175,0,0,0,114,157,0,0,0,114,155,0, - 0,0,114,51,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111, - 100,117,108,101,62,1,0,0,0,115,92,0,0,0,4,0, - 8,16,16,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,1,8,2,6,3,14,1,16,3,4,4,8,2,4,2, - 4,1,4,1,18,2,0,127,0,127,12,50,12,1,2,1, - 2,1,4,252,8,9,8,4,8,9,8,31,2,126,2,254, - 4,29,8,5,8,21,8,46,8,8,10,40,8,5,8,7, - 8,6,8,13,8,19,12,15,255,128, + 114,38,0,0,0,115,1,0,0,115,16,0,0,0,10,1, + 14,1,8,1,10,1,8,1,2,255,4,2,255,128,114,38, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 26,0,0,0,9,0,0,0,67,0,0,0,115,226,4,0, + 0,122,7,116,0,160,1,124,0,161,1,125,1,87,0,110, + 16,4,0,116,2,144,2,121,112,1,0,1,0,1,0,116, + 3,100,1,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,1,144,2,143,60,1,0,122,18,124,1,160,4,116, + 5,11,0,100,3,161,2,1,0,124,1,160,6,161,0,125, + 2,124,1,160,7,116,5,161,1,125,3,87,0,110,16,4, + 0,116,2,144,2,121,111,1,0,1,0,1,0,116,3,100, + 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,116, + 8,124,3,131,1,116,5,107,3,114,78,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,3,100, + 0,100,5,133,2,25,0,116,9,107,3,114,201,122,12,124, + 1,160,4,100,6,100,3,161,2,1,0,124,1,160,6,161, + 0,125,4,87,0,110,16,4,0,116,2,144,2,121,110,1, + 0,1,0,1,0,116,3,100,4,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,116,10,124,4,116,11,24,0,116, + 5,24,0,100,6,131,2,125,5,122,11,124,1,160,4,124, + 5,161,1,1,0,124,1,160,7,161,0,125,6,87,0,110, + 16,4,0,116,2,144,2,121,109,1,0,1,0,1,0,116, + 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,6,160,12,116,9,161,1,125,7,124,7,100,6,107, + 0,114,170,116,3,100,7,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,124,6,124,7,124,7,116,5,23,0,133, + 2,25,0,125,3,116,8,124,3,131,1,116,5,107,3,114, + 193,116,3,100,8,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,124,4,116,8,124,6,131,1,24,0,124,7,23, + 0,125,2,116,13,124,3,100,9,100,10,133,2,25,0,131, + 1,125,8,116,13,124,3,100,10,100,11,133,2,25,0,131, + 1,125,9,124,2,124,8,107,0,114,230,116,3,100,12,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,124, + 9,107,0,114,243,116,3,100,13,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,124,2,124,8,56,0,125,2,124, + 2,124,9,24,0,125,10,124,10,100,6,107,0,144,1,114, + 9,116,3,100,14,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,105,0,125,11,100,6,125,12,122,7,124,1,160, + 4,124,2,161,1,1,0,87,0,110,16,4,0,116,2,144, + 2,121,108,1,0,1,0,1,0,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,9,0,124,1,160, + 7,100,16,161,1,125,3,116,8,124,3,131,1,100,5,107, + 0,144,1,114,54,116,14,100,17,131,1,130,1,124,3,100, + 0,100,5,133,2,25,0,100,18,107,3,144,1,114,65,144, + 2,113,80,116,8,124,3,131,1,100,16,107,3,144,1,114, + 76,116,14,100,17,131,1,130,1,116,15,124,3,100,19,100, + 20,133,2,25,0,131,1,125,13,116,15,124,3,100,20,100, + 9,133,2,25,0,131,1,125,14,116,15,124,3,100,9,100, + 21,133,2,25,0,131,1,125,15,116,15,124,3,100,21,100, + 10,133,2,25,0,131,1,125,16,116,13,124,3,100,10,100, + 11,133,2,25,0,131,1,125,17,116,13,124,3,100,11,100, + 22,133,2,25,0,131,1,125,18,116,13,124,3,100,22,100, + 23,133,2,25,0,131,1,125,4,116,15,124,3,100,23,100, + 24,133,2,25,0,131,1,125,19,116,15,124,3,100,24,100, + 25,133,2,25,0,131,1,125,20,116,15,124,3,100,25,100, + 26,133,2,25,0,131,1,125,21,116,13,124,3,100,27,100, + 16,133,2,25,0,131,1,125,22,124,19,124,20,23,0,124, + 21,23,0,125,8,124,22,124,9,107,4,144,1,114,184,116, + 3,100,28,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,22,124,10,55,0,125,22,122,7,124,1,160,7,124, + 19,161,1,125,23,87,0,110,16,4,0,116,2,144,2,121, + 107,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,116,8,124,23,131,1,124, + 19,107,3,144,1,114,228,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,122,25,116,8,124,1,160, + 7,124,8,124,19,24,0,161,1,131,1,124,8,124,19,24, + 0,107,3,144,1,114,252,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,87,0,110,16,4,0,116, + 2,144,2,121,106,1,0,1,0,1,0,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,13,100, + 29,64,0,144,2,114,24,124,23,160,16,161,0,125,23,110, + 24,122,7,124,23,160,16,100,30,161,1,125,23,87,0,110, + 16,4,0,116,17,144,2,121,105,1,0,1,0,1,0,124, + 23,160,16,100,31,161,1,160,18,116,19,161,1,125,23,89, + 0,124,23,160,20,100,32,116,21,161,2,125,23,116,22,160, + 23,124,0,124,23,161,2,125,24,124,24,124,14,124,18,124, + 4,124,22,124,15,124,16,124,17,102,8,125,25,124,25,124, + 11,124,23,60,0,124,12,100,33,55,0,125,12,144,1,113, + 38,87,0,100,0,4,0,4,0,131,3,1,0,110,9,49, + 0,144,2,115,91,119,1,1,0,1,0,1,0,89,0,1, + 0,116,24,160,25,100,34,124,12,124,0,161,3,1,0,124, + 11,83,0,119,0,119,0,119,0,119,0,119,0,119,0,119, + 0,119,0,41,35,78,122,21,99,97,110,39,116,32,111,112, + 101,110,32,90,105,112,32,102,105,108,101,58,32,114,12,0, + 0,0,114,93,0,0,0,250,21,99,97,110,39,116,32,114, + 101,97,100,32,90,105,112,32,102,105,108,101,58,32,233,4, + 0,0,0,114,0,0,0,0,122,16,110,111,116,32,97,32, + 90,105,112,32,102,105,108,101,58,32,122,18,99,111,114,114, + 117,112,116,32,90,105,112,32,102,105,108,101,58,32,233,12, + 0,0,0,233,16,0,0,0,233,20,0,0,0,122,28,98, + 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, + 116,111,114,121,32,115,105,122,101,58,32,122,30,98,97,100, + 32,99,101,110,116,114,97,108,32,100,105,114,101,99,116,111, + 114,121,32,111,102,102,115,101,116,58,32,122,38,98,97,100, + 32,99,101,110,116,114,97,108,32,100,105,114,101,99,116,111, + 114,121,32,115,105,122,101,32,111,114,32,111,102,102,115,101, + 116,58,32,84,233,46,0,0,0,250,27,69,79,70,32,114, + 101,97,100,32,119,104,101,114,101,32,110,111,116,32,101,120, + 112,101,99,116,101,100,115,4,0,0,0,80,75,1,2,233, + 8,0,0,0,233,10,0,0,0,233,14,0,0,0,233,24, + 0,0,0,233,28,0,0,0,233,30,0,0,0,233,32,0, + 0,0,233,34,0,0,0,233,42,0,0,0,122,25,98,97, + 100,32,108,111,99,97,108,32,104,101,97,100,101,114,32,111, + 102,102,115,101,116,58,32,105,0,8,0,0,218,5,97,115, + 99,105,105,90,6,108,97,116,105,110,49,250,1,47,114,5, + 0,0,0,122,33,122,105,112,105,109,112,111,114,116,58,32, + 102,111,117,110,100,32,123,125,32,110,97,109,101,115,32,105, + 110,32,123,33,114,125,41,26,218,3,95,105,111,218,9,111, + 112,101,110,95,99,111,100,101,114,22,0,0,0,114,3,0, + 0,0,218,4,115,101,101,107,218,20,69,78,68,95,67,69, + 78,84,82,65,76,95,68,73,82,95,83,73,90,69,90,4, + 116,101,108,108,218,4,114,101,97,100,114,58,0,0,0,218, + 18,83,84,82,73,78,71,95,69,78,68,95,65,82,67,72, + 73,86,69,218,3,109,97,120,218,15,77,65,88,95,67,79, + 77,77,69,78,84,95,76,69,78,218,5,114,102,105,110,100, + 114,2,0,0,0,218,8,69,79,70,69,114,114,111,114,114, + 1,0,0,0,114,68,0,0,0,218,18,85,110,105,99,111, + 100,101,68,101,99,111,100,101,69,114,114,111,114,218,9,116, + 114,97,110,115,108,97,116,101,218,11,99,112,52,51,55,95, + 116,97,98,108,101,114,19,0,0,0,114,20,0,0,0,114, + 21,0,0,0,114,30,0,0,0,114,48,0,0,0,114,81, + 0,0,0,41,26,114,29,0,0,0,218,2,102,112,90,15, + 104,101,97,100,101,114,95,112,111,115,105,116,105,111,110,218, + 6,98,117,102,102,101,114,218,9,102,105,108,101,95,115,105, + 122,101,90,17,109,97,120,95,99,111,109,109,101,110,116,95, + 115,116,97,114,116,218,4,100,97,116,97,90,3,112,111,115, + 218,11,104,101,97,100,101,114,95,115,105,122,101,90,13,104, + 101,97,100,101,114,95,111,102,102,115,101,116,90,10,97,114, + 99,95,111,102,102,115,101,116,114,33,0,0,0,218,5,99, + 111,117,110,116,218,5,102,108,97,103,115,218,8,99,111,109, + 112,114,101,115,115,218,4,116,105,109,101,218,4,100,97,116, + 101,218,3,99,114,99,218,9,100,97,116,97,95,115,105,122, + 101,218,9,110,97,109,101,95,115,105,122,101,218,10,101,120, + 116,114,97,95,115,105,122,101,90,12,99,111,109,109,101,110, + 116,95,115,105,122,101,218,11,102,105,108,101,95,111,102,102, + 115,101,116,114,47,0,0,0,114,13,0,0,0,218,1,116, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,114, + 27,0,0,0,146,1,0,0,115,240,0,0,0,2,1,14, + 1,14,1,18,1,8,2,2,1,14,1,8,1,14,1,14, + 1,18,1,12,1,18,1,16,1,2,3,12,1,12,1,14, + 1,10,1,2,1,6,255,8,2,2,1,2,255,2,1,4, + 255,2,2,10,1,12,1,14,1,10,1,2,1,6,255,10, + 2,8,1,10,1,2,1,6,255,16,2,12,1,10,1,2, + 1,6,255,16,2,16,2,16,1,8,1,18,1,8,1,18, + 1,8,1,8,1,10,1,18,1,4,2,4,2,2,1,14, + 1,14,1,18,1,2,1,10,1,14,1,8,1,18,2,4, + 1,14,1,8,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,16,1,12,1,10,1,18, + 1,8,1,2,2,14,1,14,1,18,1,14,1,18,1,2, + 4,28,1,18,1,4,255,14,2,18,1,10,2,10,2,2, + 3,14,1,14,1,18,1,12,2,12,1,20,1,8,1,8, + 1,4,202,14,6,18,128,14,49,4,1,2,247,2,246,2, + 246,2,227,2,227,2,248,2,246,2,248,255,128,114,27,0, + 0,0,117,190,1,0,0,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,195,135,195,188,195,169,195,162,195, + 164,195,160,195,165,195,167,195,170,195,171,195,168,195,175,195, + 174,195,172,195,132,195,133,195,137,195,166,195,134,195,180,195, + 182,195,178,195,187,195,185,195,191,195,150,195,156,194,162,194, + 163,194,165,226,130,167,198,146,195,161,195,173,195,179,195,186, + 195,177,195,145,194,170,194,186,194,191,226,140,144,194,172,194, + 189,194,188,194,161,194,171,194,187,226,150,145,226,150,146,226, + 150,147,226,148,130,226,148,164,226,149,161,226,149,162,226,149, + 150,226,149,149,226,149,163,226,149,145,226,149,151,226,149,157, + 226,149,156,226,149,155,226,148,144,226,148,148,226,148,180,226, + 148,172,226,148,156,226,148,128,226,148,188,226,149,158,226,149, + 159,226,149,154,226,149,148,226,149,169,226,149,166,226,149,160, + 226,149,144,226,149,172,226,149,167,226,149,168,226,149,164,226, + 149,165,226,149,153,226,149,152,226,149,146,226,149,147,226,149, + 171,226,149,170,226,148,152,226,148,140,226,150,136,226,150,132, + 226,150,140,226,150,144,226,150,128,206,177,195,159,206,147,207, + 128,206,163,207,131,194,181,207,132,206,166,206,152,206,169,206, + 180,226,136,158,207,134,206,181,226,136,169,226,137,161,194,177, + 226,137,165,226,137,164,226,140,160,226,140,161,195,183,226,137, + 136,194,176,226,136,153,194,183,226,136,154,226,129,191,194,178, + 226,150,160,194,160,99,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,8,0,0,0,67,0,0,0,115,106, + 0,0,0,116,0,114,11,116,1,160,2,100,1,161,1,1, + 0,116,3,100,2,131,1,130,1,100,3,97,0,122,28,122, + 8,100,4,100,5,108,4,109,5,125,0,1,0,87,0,110, + 15,4,0,116,6,121,52,1,0,1,0,1,0,116,1,160, + 2,100,1,161,1,1,0,116,3,100,2,131,1,130,1,87, + 0,100,6,97,0,110,3,100,6,97,0,119,0,116,1,160, + 2,100,7,161,1,1,0,124,0,83,0,119,0,41,8,78, + 122,27,122,105,112,105,109,112,111,114,116,58,32,122,108,105, + 98,32,85,78,65,86,65,73,76,65,66,76,69,250,41,99, + 97,110,39,116,32,100,101,99,111,109,112,114,101,115,115,32, + 100,97,116,97,59,32,122,108,105,98,32,110,111,116,32,97, + 118,97,105,108,97,98,108,101,84,114,0,0,0,0,169,1, + 218,10,100,101,99,111,109,112,114,101,115,115,70,122,25,122, + 105,112,105,109,112,111,114,116,58,32,122,108,105,98,32,97, + 118,97,105,108,97,98,108,101,41,7,218,15,95,105,109,112, + 111,114,116,105,110,103,95,122,108,105,98,114,48,0,0,0, + 114,81,0,0,0,114,3,0,0,0,90,4,122,108,105,98, + 114,147,0,0,0,218,9,69,120,99,101,112,116,105,111,110, + 114,146,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,218,20,95,103,101,116,95,100,101,99,111,109, + 112,114,101,115,115,95,102,117,110,99,48,2,0,0,115,30, + 0,0,0,4,2,10,3,8,1,4,2,4,1,16,1,12, + 1,10,1,8,1,2,253,12,5,10,2,4,1,2,249,255, + 128,114,150,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,17,0,0,0,9,0,0,0,67,0,0,0,115, + 120,1,0,0,124,1,92,8,125,2,125,3,125,4,125,5, + 125,6,125,7,125,8,125,9,124,4,100,1,107,0,114,18, + 116,0,100,2,131,1,130,1,116,1,160,2,124,0,161,1, + 143,127,125,10,122,7,124,10,160,3,124,6,161,1,1,0, + 87,0,110,15,4,0,116,4,121,187,1,0,1,0,1,0, + 116,0,100,3,124,0,155,2,157,2,124,0,100,4,141,2, + 130,1,124,10,160,5,100,5,161,1,125,11,116,6,124,11, + 131,1,100,5,107,3,114,62,116,7,100,6,131,1,130,1, + 124,11,100,0,100,7,133,2,25,0,100,8,107,3,114,79, + 116,0,100,9,124,0,155,2,157,2,124,0,100,4,141,2, + 130,1,116,8,124,11,100,10,100,11,133,2,25,0,131,1, + 125,12,116,8,124,11,100,11,100,5,133,2,25,0,131,1, + 125,13,100,5,124,12,23,0,124,13,23,0,125,14,124,6, + 124,14,55,0,125,6,122,7,124,10,160,3,124,6,161,1, + 1,0,87,0,110,15,4,0,116,4,121,186,1,0,1,0, + 1,0,116,0,100,3,124,0,155,2,157,2,124,0,100,4, + 141,2,130,1,124,10,160,5,124,4,161,1,125,15,116,6, + 124,15,131,1,124,4,107,3,114,143,116,4,100,12,131,1, + 130,1,87,0,100,0,4,0,4,0,131,3,1,0,110,8, + 49,0,115,153,119,1,1,0,1,0,1,0,89,0,1,0, + 124,3,100,1,107,2,114,164,124,15,83,0,122,5,116,9, + 131,0,125,16,87,0,110,10,4,0,116,10,121,185,1,0, + 1,0,1,0,116,0,100,13,131,1,130,1,124,16,124,15, + 100,14,131,2,83,0,119,0,119,0,119,0,41,15,78,114, + 0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100, + 97,116,97,32,115,105,122,101,114,98,0,0,0,114,12,0, + 0,0,114,110,0,0,0,114,104,0,0,0,114,99,0,0, + 0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32, + 108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101, + 114,58,32,233,26,0,0,0,114,109,0,0,0,122,26,122, + 105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32, + 114,101,97,100,32,100,97,116,97,114,145,0,0,0,105,241, + 255,255,255,41,11,114,3,0,0,0,114,116,0,0,0,114, + 117,0,0,0,114,118,0,0,0,114,22,0,0,0,114,120, + 0,0,0,114,58,0,0,0,114,125,0,0,0,114,1,0, + 0,0,114,150,0,0,0,114,149,0,0,0,41,17,114,29, + 0,0,0,114,61,0,0,0,90,8,100,97,116,97,112,97, + 116,104,114,136,0,0,0,114,140,0,0,0,114,131,0,0, + 0,114,143,0,0,0,114,137,0,0,0,114,138,0,0,0, + 114,139,0,0,0,114,129,0,0,0,114,130,0,0,0,114, + 141,0,0,0,114,142,0,0,0,114,133,0,0,0,90,8, + 114,97,119,95,100,97,116,97,114,147,0,0,0,114,9,0, + 0,0,114,9,0,0,0,114,10,0,0,0,114,59,0,0, + 0,69,2,0,0,115,74,0,0,0,20,1,8,1,8,1, + 12,2,2,2,14,1,12,1,18,1,10,1,12,1,8,1, + 16,2,18,2,16,2,16,1,12,1,8,1,2,1,14,1, + 12,1,18,1,10,1,12,1,8,1,14,255,16,128,8,3, + 4,2,2,3,10,1,12,1,8,1,10,1,2,254,2,243, + 2,240,255,128,114,59,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,16,0,0,0,116,0,124,0,124,1,24,0,131, + 1,100,1,107,1,83,0,41,2,78,114,5,0,0,0,41, + 1,218,3,97,98,115,41,2,90,2,116,49,90,2,116,50, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, + 9,95,101,113,95,109,116,105,109,101,115,2,0,0,115,4, + 0,0,0,16,2,255,128,114,153,0,0,0,99,5,0,0, + 0,0,0,0,0,0,0,0,0,14,0,0,0,6,0,0, + 0,67,0,0,0,115,254,0,0,0,124,3,124,2,100,1, + 156,2,125,5,116,0,160,1,124,4,124,3,124,5,161,3, + 125,6,124,6,100,2,64,0,100,3,107,3,125,7,124,7, + 114,63,124,6,100,4,64,0,100,3,107,3,125,8,116,2, + 106,3,100,5,107,3,114,62,124,8,115,38,116,2,106,3, + 100,6,107,2,114,62,116,4,124,0,124,2,131,2,125,9, + 124,9,100,0,117,1,114,62,116,2,160,5,116,0,106,6, + 124,9,161,2,125,10,116,0,160,7,124,4,124,10,124,3, + 124,5,161,4,1,0,110,40,116,8,124,0,124,2,131,2, + 92,2,125,11,125,12,124,11,114,103,116,9,116,10,124,4, + 100,7,100,8,133,2,25,0,131,1,124,11,131,2,114,93, + 116,10,124,4,100,8,100,9,133,2,25,0,131,1,124,12, + 107,3,114,103,116,11,160,12,100,10,124,3,155,2,157,2, + 161,1,1,0,100,0,83,0,116,13,160,14,124,4,100,9, + 100,0,133,2,25,0,161,1,125,13,116,15,124,13,116,16, + 131,2,115,125,116,17,100,11,124,1,155,2,100,12,157,3, + 131,1,130,1,124,13,83,0,41,13,78,41,2,114,47,0, + 0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0, + 0,114,93,0,0,0,90,5,110,101,118,101,114,90,6,97, + 108,119,97,121,115,114,105,0,0,0,114,100,0,0,0,114, + 101,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105, + 115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111, + 109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21, + 32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111, + 98,106,101,99,116,41,18,114,21,0,0,0,90,13,95,99, + 108,97,115,115,105,102,121,95,112,121,99,218,4,95,105,109, + 112,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97, + 115,101,100,95,112,121,99,115,218,15,95,103,101,116,95,112, + 121,99,95,115,111,117,114,99,101,218,11,115,111,117,114,99, + 101,95,104,97,115,104,90,17,95,82,65,87,95,77,65,71, + 73,67,95,78,85,77,66,69,82,90,18,95,118,97,108,105, + 100,97,116,101,95,104,97,115,104,95,112,121,99,218,29,95, + 103,101,116,95,109,116,105,109,101,95,97,110,100,95,115,105, + 122,101,95,111,102,95,115,111,117,114,99,101,114,153,0,0, + 0,114,2,0,0,0,114,48,0,0,0,114,81,0,0,0, + 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, + 114,15,0,0,0,218,10,95,99,111,100,101,95,116,121,112, + 101,218,9,84,121,112,101,69,114,114,111,114,41,14,114,32, + 0,0,0,114,60,0,0,0,114,69,0,0,0,114,41,0, + 0,0,114,132,0,0,0,90,11,101,120,99,95,100,101,116, + 97,105,108,115,114,135,0,0,0,90,10,104,97,115,104,95, + 98,97,115,101,100,90,12,99,104,101,99,107,95,115,111,117, + 114,99,101,90,12,115,111,117,114,99,101,95,98,121,116,101, + 115,114,156,0,0,0,90,12,115,111,117,114,99,101,95,109, + 116,105,109,101,90,11,115,111,117,114,99,101,95,115,105,122, + 101,114,53,0,0,0,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,15,95,117,110,109,97,114,115,104,97, + 108,95,99,111,100,101,123,2,0,0,115,74,0,0,0,2, + 2,2,1,6,254,14,5,12,2,4,1,12,1,10,1,2, + 1,2,255,8,1,2,255,10,2,8,1,4,1,4,1,2, + 1,4,254,4,5,8,1,4,255,2,128,8,4,6,255,4, + 3,22,3,18,1,2,255,4,2,8,1,4,255,4,2,18, + 2,10,1,16,1,4,1,255,128,114,161,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,67,0,0,0,115,28,0,0,0,124,0,160,0, + 100,1,100,2,161,2,125,0,124,0,160,0,100,3,100,2, + 161,2,125,0,124,0,83,0,41,4,78,115,2,0,0,0, + 13,10,243,1,0,0,0,10,243,1,0,0,0,13,41,1, + 114,19,0,0,0,41,1,218,6,115,111,117,114,99,101,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,23, + 95,110,111,114,109,97,108,105,122,101,95,108,105,110,101,95, + 101,110,100,105,110,103,115,168,2,0,0,115,8,0,0,0, + 12,1,12,1,4,1,255,128,114,165,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, + 0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,131, + 1,125,1,116,1,124,1,124,0,100,1,100,2,100,3,141, + 4,83,0,41,4,78,114,79,0,0,0,84,41,1,90,12, + 100,111,110,116,95,105,110,104,101,114,105,116,41,2,114,165, + 0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,60, + 0,0,0,114,164,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,15,95,99,111,109,112,105,108, + 101,95,115,111,117,114,99,101,175,2,0,0,115,6,0,0, + 0,8,1,16,1,255,128,114,167,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,0, + 0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,0, + 100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,4, + 64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,1, + 100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,8, + 20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,10, + 78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,0, + 233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,233, + 63,0,0,0,114,93,0,0,0,114,14,0,0,0,41,2, + 114,137,0,0,0,90,6,109,107,116,105,109,101,41,2,218, + 1,100,114,144,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,100, + 111,115,116,105,109,101,181,2,0,0,115,20,0,0,0,4, + 1,10,1,10,1,6,1,6,1,10,1,10,1,6,1,6, + 249,255,128,114,175,0,0,0,99,2,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,10,0,0,0,67,0,0, + 0,115,110,0,0,0,122,41,124,1,100,1,100,0,133,2, + 25,0,100,2,118,0,115,11,74,0,130,1,124,1,100,0, + 100,1,133,2,25,0,125,1,124,0,106,0,124,1,25,0, + 125,2,124,2,100,3,25,0,125,3,124,2,100,4,25,0, + 125,4,124,2,100,5,25,0,125,5,116,1,124,4,124,3, + 131,2,124,5,102,2,87,0,83,0,4,0,116,2,116,3, + 116,4,102,3,121,54,1,0,1,0,1,0,89,0,100,6, + 83,0,119,0,41,7,78,114,14,0,0,0,169,2,218,1, + 99,218,1,111,114,169,0,0,0,233,6,0,0,0,233,3, + 0,0,0,41,2,114,0,0,0,0,114,0,0,0,0,41, + 5,114,28,0,0,0,114,175,0,0,0,114,26,0,0,0, + 218,10,73,110,100,101,120,69,114,114,111,114,114,160,0,0, + 0,41,6,114,32,0,0,0,114,13,0,0,0,114,61,0, + 0,0,114,137,0,0,0,114,138,0,0,0,90,17,117,110, + 99,111,109,112,114,101,115,115,101,100,95,115,105,122,101,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,157, + 0,0,0,194,2,0,0,115,24,0,0,0,2,1,20,2, + 12,1,10,1,8,3,8,1,8,1,16,1,18,1,6,1, + 2,255,255,128,114,157,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, + 0,0,115,80,0,0,0,124,1,100,1,100,0,133,2,25, + 0,100,2,118,0,115,10,74,0,130,1,124,1,100,0,100, + 1,133,2,25,0,125,1,122,7,124,0,106,0,124,1,25, + 0,125,2,87,0,110,9,4,0,116,1,121,39,1,0,1, + 0,1,0,89,0,100,0,83,0,116,2,124,0,106,3,124, + 2,131,2,83,0,119,0,41,3,78,114,14,0,0,0,114, + 176,0,0,0,41,4,114,28,0,0,0,114,26,0,0,0, + 114,59,0,0,0,114,29,0,0,0,41,3,114,32,0,0, + 0,114,13,0,0,0,114,61,0,0,0,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,114,155,0,0,0,213, + 2,0,0,115,18,0,0,0,20,2,12,1,2,2,14,1, + 12,1,6,1,12,2,2,253,255,128,114,155,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, + 11,0,0,0,67,0,0,0,115,14,1,0,0,116,0,124, + 0,124,1,131,2,125,2,100,0,125,3,116,1,68,0,93, + 100,92,3,125,4,125,5,125,6,124,2,124,4,23,0,125, + 7,116,2,106,3,100,1,124,0,106,4,116,5,124,7,100, + 2,100,3,141,5,1,0,122,7,124,0,106,6,124,7,25, + 0,125,8,87,0,110,8,4,0,116,7,121,134,1,0,1, + 0,1,0,89,0,113,9,124,8,100,4,25,0,125,9,116, + 8,124,0,106,4,124,8,131,2,125,10,100,0,125,11,124, + 5,114,89,122,10,116,9,124,0,124,9,124,7,124,1,124, + 10,131,5,125,11,87,0,110,24,4,0,116,10,121,133,1, + 0,125,12,1,0,122,8,124,12,125,3,87,0,89,0,100, + 0,125,12,126,12,110,9,100,0,125,12,126,12,119,1,116, + 11,124,9,124,10,131,2,125,11,124,11,100,0,117,0,114, + 99,113,9,124,8,100,4,25,0,125,9,124,11,124,6,124, + 9,102,3,2,0,1,0,83,0,124,3,114,124,100,5,124, + 3,155,0,157,2,125,13,116,12,124,13,124,1,100,6,141, + 2,124,3,130,2,116,12,100,7,124,1,155,2,157,2,124, + 1,100,6,141,2,130,1,119,0,119,0,41,8,78,122,13, + 116,114,121,105,110,103,32,123,125,123,125,123,125,114,93,0, + 0,0,41,1,90,9,118,101,114,98,111,115,105,116,121,114, + 0,0,0,0,122,20,109,111,100,117,108,101,32,108,111,97, + 100,32,102,97,105,108,101,100,58,32,114,65,0,0,0,114, + 64,0,0,0,41,13,114,39,0,0,0,114,95,0,0,0, + 114,48,0,0,0,114,81,0,0,0,114,29,0,0,0,114, + 20,0,0,0,114,28,0,0,0,114,26,0,0,0,114,59, + 0,0,0,114,161,0,0,0,114,80,0,0,0,114,167,0, + 0,0,114,3,0,0,0,41,14,114,32,0,0,0,114,41, + 0,0,0,114,13,0,0,0,90,12,105,109,112,111,114,116, + 95,101,114,114,111,114,114,96,0,0,0,114,97,0,0,0, + 114,54,0,0,0,114,69,0,0,0,114,61,0,0,0,114, + 43,0,0,0,114,132,0,0,0,114,53,0,0,0,90,3, + 101,120,99,114,82,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,51,0,0,0,228,2,0,0, + 115,60,0,0,0,10,1,4,1,14,1,8,1,22,1,2, + 1,14,1,12,1,4,1,8,2,12,1,4,1,4,1,2, + 1,20,1,14,1,16,1,8,128,10,2,8,1,2,3,8, + 1,14,1,4,2,10,1,14,1,18,2,2,241,2,247,255, + 128,114,51,0,0,0,41,46,114,91,0,0,0,90,26,95, + 102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,98, + 95,101,120,116,101,114,110,97,108,114,21,0,0,0,114,1, + 0,0,0,114,2,0,0,0,90,17,95,102,114,111,122,101, + 110,95,105,109,112,111,114,116,108,105,98,114,48,0,0,0, + 114,154,0,0,0,114,116,0,0,0,114,158,0,0,0,114, + 72,0,0,0,114,137,0,0,0,114,35,0,0,0,90,7, + 95,95,97,108,108,95,95,114,20,0,0,0,90,15,112,97, + 116,104,95,115,101,112,97,114,97,116,111,114,115,114,18,0, + 0,0,114,80,0,0,0,114,3,0,0,0,114,25,0,0, + 0,218,4,116,121,112,101,114,75,0,0,0,114,119,0,0, + 0,114,121,0,0,0,114,123,0,0,0,90,13,95,76,111, + 97,100,101,114,66,97,115,105,99,115,114,4,0,0,0,114, + 95,0,0,0,114,39,0,0,0,114,40,0,0,0,114,38, + 0,0,0,114,27,0,0,0,114,128,0,0,0,114,148,0, + 0,0,114,150,0,0,0,114,59,0,0,0,114,153,0,0, + 0,114,161,0,0,0,218,8,95,95,99,111,100,101,95,95, + 114,159,0,0,0,114,165,0,0,0,114,167,0,0,0,114, + 175,0,0,0,114,157,0,0,0,114,155,0,0,0,114,51, + 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,8,60,109,111,100,117,108,101, + 62,1,0,0,0,115,92,0,0,0,4,0,8,16,16,1, + 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,2, + 6,3,14,1,16,3,4,4,8,2,4,2,4,1,4,1, + 18,2,0,127,0,127,12,50,12,1,2,1,2,1,4,252, + 8,9,8,4,8,9,8,31,2,126,2,254,4,29,8,5, + 8,21,8,46,8,8,10,40,8,5,8,7,8,6,8,13, + 8,19,12,15,255,128, }; From webhook-mailer at python.org Fri Apr 16 02:08:15 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 16 Apr 2021 06:08:15 -0000 Subject: [Python-checkins] [3.9] bpo-43723: Revert IDLE doc change (GH-25174) Message-ID: https://github.com/python/cpython/commit/56c76df6e861322bdff77bfb21e5cd55fbacfad2 commit: 56c76df6e861322bdff77bfb21e5cd55fbacfad2 branch: 3.9 author: Terry Jan Reedy committer: terryjreedy date: 2021-04-16T02:08:07-04:00 summary: [3.9] bpo-43723: Revert IDLE doc change (GH-25174) Change threading.activeCount to synonym threading.active_count. files: M Doc/library/idle.rst diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 6ef15653eacb5..3c302115b5f40 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -732,7 +732,7 @@ intended to be the same as executing the same code by the default method, directly with Python in a text-mode system console or terminal window. However, the different interface and operation occasionally affect visible results. For instance, ``sys.modules`` starts with more entries, -and ``threading.activeCount()`` returns 2 instead of 1. +and ``threading.active_count()`` returns 2 instead of 1. By default, IDLE runs user code in a separate OS process rather than in the user interface process that runs the shell and editor. In the execution From webhook-mailer at python.org Fri Apr 16 03:01:16 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 16 Apr 2021 07:01:16 -0000 Subject: [Python-checkins] [3.8] bpo-43723: Backport IDLE doc change (GH-25174) Message-ID: https://github.com/python/cpython/commit/b40564727fbe85932e92862e57fc065034d98dbf commit: b40564727fbe85932e92862e57fc065034d98dbf branch: 3.8 author: Terry Jan Reedy committer: terryjreedy date: 2021-04-16T03:01:00-04:00 summary: [3.8] bpo-43723: Backport IDLE doc change (GH-25174) Cherry-picked from 9825bdfbd5c966abf1f1b7264992d722a94c9613 files: M Doc/library/idle.rst diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 6ef15653eacb5..3c302115b5f40 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -732,7 +732,7 @@ intended to be the same as executing the same code by the default method, directly with Python in a text-mode system console or terminal window. However, the different interface and operation occasionally affect visible results. For instance, ``sys.modules`` starts with more entries, -and ``threading.activeCount()`` returns 2 instead of 1. +and ``threading.active_count()`` returns 2 instead of 1. By default, IDLE runs user code in a separate OS process rather than in the user interface process that runs the shell and editor. In the execution From webhook-mailer at python.org Fri Apr 16 05:26:37 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 09:26:37 -0000 Subject: [Python-checkins] bpo-40443: Remove unused imports (GH-25429) Message-ID: https://github.com/python/cpython/commit/a6a5c91b1ee56fa5ba7ab8c5aeca70c31cc85fd3 commit: a6a5c91b1ee56fa5ba7ab8c5aeca70c31cc85fd3 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T11:26:06+02:00 summary: bpo-40443: Remove unused imports (GH-25429) * pyclbr no longer uses copy * typing no longer uses ast Issue discovered by pyflakes. files: A Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst M Lib/pyclbr.py M Lib/typing.py diff --git a/Lib/pyclbr.py b/Lib/pyclbr.py index ebcc23c29da21..37f86995d6ce0 100644 --- a/Lib/pyclbr.py +++ b/Lib/pyclbr.py @@ -42,7 +42,6 @@ """ import ast -import copy import sys import importlib.util diff --git a/Lib/typing.py b/Lib/typing.py index dc2a7a478835d..ea66cf50a078f 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -20,7 +20,6 @@ """ from abc import abstractmethod, ABCMeta -import ast import collections import collections.abc import contextlib diff --git a/Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst b/Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst new file mode 100644 index 0000000000000..f5672e6bd7bf5 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst @@ -0,0 +1,2 @@ +Remove unused imports: pyclbr no longer uses copy, and typing no longer uses +ast. Patch by Victor Stinner. From webhook-mailer at python.org Fri Apr 16 05:26:46 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 09:26:46 -0000 Subject: [Python-checkins] bpo-41282: Fix distutils.utils.byte_compile() DeprecationWarning (GH-25406) Message-ID: https://github.com/python/cpython/commit/69ca32e0d34fe17dd242592b6f8754cda7bae684 commit: 69ca32e0d34fe17dd242592b6f8754cda7bae684 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T11:26:40+02:00 summary: bpo-41282: Fix distutils.utils.byte_compile() DeprecationWarning (GH-25406) * byte_compile() of distutils.utils no longer logs a DeprecationWarning * test_distutils no longer logs a DeprecationWarning files: M Lib/distutils/__init__.py M Lib/distutils/util.py M Lib/test/test_distutils.py diff --git a/Lib/distutils/__init__.py b/Lib/distutils/__init__.py index 8eef902f7d620..fdad6f65a7856 100644 --- a/Lib/distutils/__init__.py +++ b/Lib/distutils/__init__.py @@ -13,7 +13,8 @@ __version__ = sys.version[:sys.version.index(' ')] -warnings.warn("The distutils package is deprecated and slated for " - "removal in Python 3.12. Use setuptools or check " - "PEP 632 for potential alternatives", +_DEPRECATION_MESSAGE = ("The distutils package is deprecated and slated for " + "removal in Python 3.12. Use setuptools or check " + "PEP 632 for potential alternatives") +warnings.warn(_DEPRECATION_MESSAGE, DeprecationWarning, 2) diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py index 4b002ecef1df8..2ce5c5b64d62f 100644 --- a/Lib/distutils/util.py +++ b/Lib/distutils/util.py @@ -9,6 +9,7 @@ import importlib.util import string import sys +import distutils from distutils.errors import DistutilsPlatformError from distutils.dep_util import newer from distutils.spawn import spawn @@ -419,8 +420,10 @@ def byte_compile (py_files, direct=1) """ % (optimize, force, prefix, base_dir, verbose)) + msg = distutils._DEPRECATION_MESSAGE cmd = [sys.executable] cmd.extend(subprocess._optim_args_from_interpreter_flags()) + cmd.append(f'-Wignore:{msg}:DeprecationWarning') cmd.append(script_name) spawn(cmd, dry_run=dry_run) execute(os.remove, (script_name,), "removing %s" % script_name, diff --git a/Lib/test/test_distutils.py b/Lib/test/test_distutils.py index a37f11791754d..de94da54798ce 100644 --- a/Lib/test/test_distutils.py +++ b/Lib/test/test_distutils.py @@ -5,14 +5,20 @@ be run. """ -import distutils.tests -import test.support +import warnings +from test import support +from test.support import warnings_helper + +with warnings_helper.check_warnings( + ("The distutils package is deprecated", DeprecationWarning)): + + import distutils.tests def test_main(): # used by regrtest - test.support.run_unittest(distutils.tests.test_suite()) - test.support.reap_children() + support.run_unittest(distutils.tests.test_suite()) + support.reap_children() def load_tests(*_): From webhook-mailer at python.org Fri Apr 16 05:27:06 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 09:27:06 -0000 Subject: [Python-checkins] bpo-43844: Fix PendingDeprecationWarning in test_lib2to3 (GH-25407) Message-ID: https://github.com/python/cpython/commit/471870fc504b0d69c767b188f180b17248be6998 commit: 471870fc504b0d69c767b188f180b17248be6998 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T11:27:00+02:00 summary: bpo-43844: Fix PendingDeprecationWarning in test_lib2to3 (GH-25407) files: M Lib/lib2to3/tests/test_parser.py diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py index d5db66b9b1e7b..1aba0e88945a4 100644 --- a/Lib/lib2to3/tests/test_parser.py +++ b/Lib/lib2to3/tests/test_parser.py @@ -84,12 +84,16 @@ def test_load_grammar_from_subprocess(self): # different hash randomization seed. sub_env = dict(os.environ) sub_env['PYTHONHASHSEED'] = 'random' - subprocess.check_call( - [sys.executable, '-c', """ + code = """ from lib2to3.pgen2 import driver as pgen2_driver pgen2_driver.load_grammar(%r, save=True, force=True) - """ % (grammar_sub_copy,)], - env=sub_env) + """ % (grammar_sub_copy,) + msg = ("lib2to3 package is deprecated and may not be able " + "to parse Python 3.10+") + cmd = [sys.executable, + f'-Wignore:{msg}:PendingDeprecationWarning', + '-c', code] + subprocess.check_call( cmd, env=sub_env) self.assertTrue(os.path.exists(pickle_sub_name)) with open(pickle_name, 'rb') as pickle_f_1, \ From webhook-mailer at python.org Fri Apr 16 05:48:00 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 16 Apr 2021 09:48:00 -0000 Subject: [Python-checkins] [3.9] bpo-43723: Revert IDLE doc change (GH-25174) Message-ID: https://github.com/python/cpython/commit/582917f8b255801f3c722d89ff2b8d6b17a11590 commit: 582917f8b255801f3c722d89ff2b8d6b17a11590 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-16T02:47:44-07:00 summary: [3.9] bpo-43723: Revert IDLE doc change (GH-25174) Change threading.activeCount to synonym threading.active_count. (cherry picked from commit 56c76df6e861322bdff77bfb21e5cd55fbacfad2) Co-authored-by: Terry Jan Reedy files: From webhook-mailer at python.org Fri Apr 16 08:32:07 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 12:32:07 -0000 Subject: [Python-checkins] bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) Message-ID: https://github.com/python/cpython/commit/75ec103b3adbb7c619a0e22fa60f3d34c5a9e603 commit: 75ec103b3adbb7c619a0e22fa60f3d34c5a9e603 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T14:32:01+02:00 summary: bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) Fix a race condition in the SMTP test of test_logging. Don't close a file descriptor (socket) from a different thread while asyncore.loop() is polling the file descriptor. files: A Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 6179e28759cce..bb31e29ca7691 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -829,6 +829,7 @@ def __init__(self, addr, handler, poll_interval, sockmap): self.port = self.socket.getsockname()[1] self._handler = handler self._thread = None + self._quit = False self.poll_interval = poll_interval def process_message(self, peer, mailfrom, rcpttos, data): @@ -860,16 +861,18 @@ def serve_forever(self, poll_interval): :func:`select` or :func:`poll` call by :func:`asyncore.loop`. """ - asyncore.loop(poll_interval, map=self._map) + while not self._quit: + asyncore.loop(poll_interval, map=self._map, count=1) def stop(self): """ Stop the thread by closing the server instance. Wait for the server thread to terminate. """ - self.close() + self._quit = True threading_helper.join_thread(self._thread) self._thread = None + self.close() asyncore.close_all(map=self._map, ignore_all=True) diff --git a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst new file mode 100644 index 0000000000000..5b4a120eb8637 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst @@ -0,0 +1,4 @@ +Fix a race condition in the SMTP test of test_logging. Don't close a file +descriptor (socket) from a different thread while asyncore.loop() is polling +the file descriptor. +Patch by Victor Stinner. From webhook-mailer at python.org Fri Apr 16 08:33:14 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 12:33:14 -0000 Subject: [Python-checkins] bpo-43843: libregrtest uses threading.excepthook (GH-25400) Message-ID: https://github.com/python/cpython/commit/b136b1aac4b7d07e3120ee59e41c02bc86032162 commit: b136b1aac4b7d07e3120ee59e41c02bc86032162 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T14:33:10+02:00 summary: bpo-43843: libregrtest uses threading.excepthook (GH-25400) test.libregrtest now marks a test as ENV_CHANGED (altered the execution environment) if a thread raises an exception but does not catch it. It sets a hook on threading.excepthook. Use --fail-env-changed option to mark the test as failed. libregrtest regrtest_unraisable_hook() explicitly flushs sys.stdout, sys.stderr and sys.__stderr__. files: A Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst M Lib/test/libregrtest/setup.py M Lib/test/libregrtest/utils.py M Lib/test/test_regrtest.py M Lib/test/test_socketserver.py M Lib/test/test_threading.py diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py index 715d4b96cf91d..83ce2f73f4e5a 100644 --- a/Lib/test/libregrtest/setup.py +++ b/Lib/test/libregrtest/setup.py @@ -10,7 +10,8 @@ except ImportError: gc = None -from test.libregrtest.utils import setup_unraisable_hook +from test.libregrtest.utils import (setup_unraisable_hook, + setup_threading_excepthook) def setup_tests(ns): @@ -81,6 +82,7 @@ def _test_audit_hook(name, args): sys.addaudithook(_test_audit_hook) setup_unraisable_hook() + setup_threading_excepthook() if ns.timeout is not None: # For a slow buildbot worker, increase SHORT_TIMEOUT and LONG_TIMEOUT diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 13efdb45818b7..89d7e7e535405 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -68,14 +68,23 @@ def print_warning(msg): orig_unraisablehook = None +def flush_std_streams(): + if sys.stdout is not None: + sys.stdout.flush() + if sys.stderr is not None: + sys.stderr.flush() + + def regrtest_unraisable_hook(unraisable): global orig_unraisablehook support.environment_altered = True print_warning("Unraisable exception") old_stderr = sys.stderr try: + flush_std_streams() sys.stderr = sys.__stderr__ orig_unraisablehook(unraisable) + sys.stderr.flush() finally: sys.stderr = old_stderr @@ -86,6 +95,30 @@ def setup_unraisable_hook(): sys.unraisablehook = regrtest_unraisable_hook +orig_threading_excepthook = None + + +def regrtest_threading_excepthook(args): + global orig_threading_excepthook + support.environment_altered = True + print_warning(f"Uncaught thread exception: {args.exc_type.__name__}") + old_stderr = sys.stderr + try: + flush_std_streams() + sys.stderr = sys.__stderr__ + orig_threading_excepthook(args) + sys.stderr.flush() + finally: + sys.stderr = old_stderr + + +def setup_threading_excepthook(): + global orig_threading_excepthook + import threading + orig_threading_excepthook = threading.excepthook + threading.excepthook = regrtest_threading_excepthook + + def clear_caches(): # Clear the warnings registry, so they can be displayed again for mod in sys.modules.values(): diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 38321e04b54a9..054776ccf4808 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -1236,7 +1236,7 @@ def test_sleep(self): def test_unraisable_exc(self): # --fail-env-changed must catch unraisable exception. - # The exceptioin must be displayed even if sys.stderr is redirected. + # The exception must be displayed even if sys.stderr is redirected. code = textwrap.dedent(r""" import unittest import weakref @@ -1267,6 +1267,37 @@ def test_unraisable_exc(self): self.assertIn("Warning -- Unraisable exception", output) self.assertIn("Exception: weakref callback bug", output) + def test_threading_excepthook(self): + # --fail-env-changed must catch uncaught thread exception. + # The exception must be displayed even if sys.stderr is redirected. + code = textwrap.dedent(r""" + import threading + import unittest + from test.support import captured_stderr + + class MyObject: + pass + + def func_bug(): + raise Exception("bug in thread") + + class Tests(unittest.TestCase): + def test_threading_excepthook(self): + with captured_stderr() as stderr: + thread = threading.Thread(target=func_bug) + thread.start() + thread.join() + self.assertEqual(stderr.getvalue(), '') + """) + testname = self.create_test(code=code) + + output = self.run_tests("--fail-env-changed", "-v", testname, exitcode=3) + self.check_executed_tests(output, [testname], + env_changed=[testname], + fail_env_changed=True) + self.assertIn("Warning -- Uncaught thread exception", output) + self.assertIn("Exception: bug in thread", output) + def test_cleanup(self): dirname = os.path.join(self.tmptestdir, "test_python_123") os.mkdir(dirname) diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py index 954e0331352fb..211321f37617e 100644 --- a/Lib/test/test_socketserver.py +++ b/Lib/test/test_socketserver.py @@ -323,8 +323,11 @@ def test_threading_handled(self): self.check_result(handled=True) def test_threading_not_handled(self): - ThreadingErrorTestServer(SystemExit) - self.check_result(handled=False) + with threading_helper.catch_threading_exception() as cm: + ThreadingErrorTestServer(SystemExit) + self.check_result(handled=False) + + self.assertIs(cm.exc_type, SystemExit) @requires_forking def test_forking_handled(self): diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 49a4af8365afc..f44f17f2978f7 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -32,6 +32,11 @@ platforms_to_skip = ('netbsd5', 'hp-ux11') +def restore_default_excepthook(testcase): + testcase.addCleanup(setattr, threading, 'excepthook', threading.excepthook) + threading.excepthook = threading.__excepthook__ + + # A trivial mutable counter. class Counter(object): def __init__(self): @@ -427,6 +432,8 @@ def _run(self, other_ref, yet_another): if self.should_raise: raise SystemExit + restore_default_excepthook(self) + cyclic_object = RunSelfFunction(should_raise=False) weak_cyclic_object = weakref.ref(cyclic_object) cyclic_object.thread.join() @@ -1331,6 +1338,10 @@ def run(self): class ExceptHookTests(BaseTestCase): + def setUp(self): + restore_default_excepthook(self) + super().setUp() + def test_excepthook(self): with support.captured_output("stderr") as stderr: thread = ThreadRunFail(name="excepthook thread") @@ -1501,6 +1512,8 @@ class BarrierTests(lock_tests.BarrierTests): class MiscTestCase(unittest.TestCase): def test__all__(self): + restore_default_excepthook(self) + extra = {"ThreadError"} not_exported = {'currentThread', 'activeCount'} support.check__all__(self, threading, ('threading', '_thread'), diff --git a/Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst b/Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst new file mode 100644 index 0000000000000..d1085ec2395b8 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst @@ -0,0 +1,5 @@ +:mod:`test.libregrtest` now marks a test as ENV_CHANGED (altered the execution +environment) if a thread raises an exception but does not catch it. It sets a +hook on :func:`threading.excepthook`. Use ``--fail-env-changed`` option to mark +the test as failed. +Patch by Victor Stinner. From webhook-mailer at python.org Fri Apr 16 10:06:47 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 14:06:47 -0000 Subject: [Python-checkins] bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) (GH-25437) Message-ID: https://github.com/python/cpython/commit/e1903e11a3d42512effe336026e0c67f602e5848 commit: e1903e11a3d42512effe336026e0c67f602e5848 branch: 3.9 author: Victor Stinner committer: vstinner date: 2021-04-16T16:06:38+02:00 summary: bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) (GH-25437) Fix a race condition in the SMTP test of test_logging. Don't close a file descriptor (socket) from a different thread while asyncore.loop() is polling the file descriptor. (cherry picked from commit 75ec103b3adbb7c619a0e22fa60f3d34c5a9e603) files: A Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index a6cd291c9a553..1760e241d824c 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -826,6 +826,7 @@ def __init__(self, addr, handler, poll_interval, sockmap): self.port = self.socket.getsockname()[1] self._handler = handler self._thread = None + self._quit = False self.poll_interval = poll_interval def process_message(self, peer, mailfrom, rcpttos, data): @@ -857,16 +858,18 @@ def serve_forever(self, poll_interval): :func:`select` or :func:`poll` call by :func:`asyncore.loop`. """ - asyncore.loop(poll_interval, map=self._map) + while not self._quit: + asyncore.loop(poll_interval, map=self._map, count=1) def stop(self): """ Stop the thread by closing the server instance. Wait for the server thread to terminate. """ - self.close() + self._quit = True support.join_thread(self._thread) self._thread = None + self.close() asyncore.close_all(map=self._map, ignore_all=True) diff --git a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst new file mode 100644 index 0000000000000..5b4a120eb8637 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst @@ -0,0 +1,4 @@ +Fix a race condition in the SMTP test of test_logging. Don't close a file +descriptor (socket) from a different thread while asyncore.loop() is polling +the file descriptor. +Patch by Victor Stinner. From webhook-mailer at python.org Fri Apr 16 10:37:14 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 14:37:14 -0000 Subject: [Python-checkins] bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) (GH-25437) (GH-25440) Message-ID: https://github.com/python/cpython/commit/816da333c8ee848dab7c830c561b8df0b8d23915 commit: 816da333c8ee848dab7c830c561b8df0b8d23915 branch: 3.8 author: Victor Stinner committer: vstinner date: 2021-04-16T16:37:09+02:00 summary: bpo-43842: Fix race condition in test_logging SMTP test (GH-25436) (GH-25437) (GH-25440) Fix a race condition in the SMTP test of test_logging. Don't close a file descriptor (socket) from a different thread while asyncore.loop() is polling the file descriptor. (cherry picked from commit 75ec103b3adbb7c619a0e22fa60f3d34c5a9e603) (cherry picked from commit e1903e11a3d42512effe336026e0c67f602e5848) files: A Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 3e15db03a43a5..15250a3a9521d 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -836,6 +836,7 @@ def __init__(self, addr, handler, poll_interval, sockmap): self.port = self.socket.getsockname()[1] self._handler = handler self._thread = None + self._quit = False self.poll_interval = poll_interval def process_message(self, peer, mailfrom, rcpttos, data): @@ -867,7 +868,8 @@ def serve_forever(self, poll_interval): :func:`select` or :func:`poll` call by :func:`asyncore.loop`. """ - asyncore.loop(poll_interval, map=self._map) + while not self._quit: + asyncore.loop(poll_interval, map=self._map, count=1) def stop(self, timeout=None): """ @@ -877,9 +879,10 @@ def stop(self, timeout=None): :param timeout: How long to wait for the server thread to terminate. """ - self.close() + self._quit = True support.join_thread(self._thread, timeout) self._thread = None + self.close() asyncore.close_all(map=self._map, ignore_all=True) diff --git a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst new file mode 100644 index 0000000000000..5b4a120eb8637 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst @@ -0,0 +1,4 @@ +Fix a race condition in the SMTP test of test_logging. Don't close a file +descriptor (socket) from a different thread while asyncore.loop() is polling +the file descriptor. +Patch by Victor Stinner. From webhook-mailer at python.org Fri Apr 16 11:39:13 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 16 Apr 2021 15:39:13 -0000 Subject: [Python-checkins] bpo-38530: Properly extend UnboundLocalError from NameError (GH-25444) Message-ID: https://github.com/python/cpython/commit/3b82cae774638ecf2baaee8fe2cac8fedafb2ca7 commit: 3b82cae774638ecf2baaee8fe2cac8fedafb2ca7 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-16T16:38:55+01:00 summary: bpo-38530: Properly extend UnboundLocalError from NameError (GH-25444) files: M Objects/exceptions.c diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 9916ce88549ed..4a2fc27a8740c 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1393,7 +1393,8 @@ ComplexExtendsException(PyExc_Exception, NameError, /* * UnboundLocalError extends NameError */ -SimpleExtendsException(PyExc_NameError, UnboundLocalError, + +MiddlingExtendsException(PyExc_NameError, UnboundLocalError, NameError, "Local name referenced but not bound to a value."); /* From webhook-mailer at python.org Fri Apr 16 12:12:08 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 16 Apr 2021 16:12:08 -0000 Subject: [Python-checkins] bpo-38530: Match exactly AttributeError and NameError when offering suggestions (GH-25443) Message-ID: https://github.com/python/cpython/commit/0ad81d4db2f409d72f469d0b74ab597be772a68e commit: 0ad81d4db2f409d72f469d0b74ab597be772a68e branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-16T17:12:03+01:00 summary: bpo-38530: Match exactly AttributeError and NameError when offering suggestions (GH-25443) files: M Lib/test/test_exceptions.py M Python/suggestions.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index ebeb67b451282..bd20b232e541f 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1537,6 +1537,21 @@ def f(): self.assertNotIn("blech", err.getvalue()) + def test_unbound_local_error_doesn_not_match(self): + def foo(): + something = 3 + print(somethong) + somethong = 3 + + try: + foo() + except UnboundLocalError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("something", err.getvalue()) + + class AttributeErrorTests(unittest.TestCase): def test_attributes(self): # Setting 'attr' should not be a problem. diff --git a/Python/suggestions.c b/Python/suggestions.c index 258e3f1833e6b..e422760920739 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -181,9 +181,9 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { PyObject *_Py_Offer_Suggestions(PyObject *exception) { PyObject *result = NULL; assert(!PyErr_Occurred()); - if (PyErr_GivenExceptionMatches(exception, PyExc_AttributeError)) { + if (Py_IS_TYPE(exception, (PyTypeObject*)PyExc_AttributeError)) { result = offer_suggestions_for_attribute_error((PyAttributeErrorObject *) exception); - } else if (PyErr_GivenExceptionMatches(exception, PyExc_NameError)) { + } else if (Py_IS_TYPE(exception, (PyTypeObject*)PyExc_NameError)) { result = offer_suggestions_for_name_error((PyNameErrorObject *) exception); } return result; From webhook-mailer at python.org Fri Apr 16 13:07:49 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 16 Apr 2021 17:07:49 -0000 Subject: [Python-checkins] bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818) (#25345) Message-ID: https://github.com/python/cpython/commit/d5b80eb11b4812b4a579ce129ba4a10c5f5d27f6 commit: d5b80eb11b4812b4a579ce129ba4a10c5f5d27f6 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-16T10:07:31-07:00 summary: bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818) (#25345) * coerce bytes separator to string * Add news * Update Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst (cherry picked from commit b38601d49675d90e1ee6faa47f7adaeca992d02d) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst M Lib/test/test_urlparse.py M Lib/urllib/parse.py diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 90c8d6922629e..d2ec0dadbcb07 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -891,6 +891,8 @@ def test_parse_qs_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qs(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qs(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_parse_qsl_separator(self): @@ -910,6 +912,8 @@ def test_parse_qsl_separator(self): with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"): result = urllib.parse.parse_qsl(orig, separator=';') self.assertEqual(result, expect, "Error parsing %r" % orig) + result_bytes = urllib.parse.parse_qsl(orig, separator=b';') + self.assertEqual(result_bytes, expect, "Error parsing %r" % orig) def test_urlencode_sequences(self): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 0c1c94f5fc986..36fd8fe2803e2 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -721,6 +721,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, Returns a list, as G-d intended. """ qs, _coerce_result = _coerce_args(qs) + separator, _ = _coerce_args(separator) if not separator or (not isinstance(separator, (str, bytes))): raise ValueError("Separator must be of type string or bytes.") diff --git a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst new file mode 100644 index 0000000000000..f8ad3eaaedd78 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst @@ -0,0 +1,3 @@ +Allow :class:`bytes` ``separator`` argument in ``urllib.parse.parse_qs`` and +``urllib.parse.parse_qsl`` when parsing :class:`str` query strings. Previously, +this raised a ``TypeError``. From webhook-mailer at python.org Fri Apr 16 13:12:22 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 16 Apr 2021 17:12:22 -0000 Subject: [Python-checkins] bpo-43862: Enhance -W cmdline option documentation (GH-25439) Message-ID: https://github.com/python/cpython/commit/62ec63864822de1dd1933225584e8503ac40c1f9 commit: 62ec63864822de1dd1933225584e8503ac40c1f9 branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T19:12:14+02:00 summary: bpo-43862: Enhance -W cmdline option documentation (GH-25439) The -W format is "action:message:category:module:lineno". Update also the Python manual page. files: M Doc/c-api/init_config.rst M Doc/tools/susp-ignored.csv M Doc/using/cmdline.rst M Misc/python.man diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index 5e9296a5470d4..325e60706167e 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -1135,6 +1135,13 @@ PyConfig item of :data:`warnings.filters` which is checked first (highest priority). + The :option:`-W` command line options adds its value to + :c:member:`~PyConfig.warnoptions`, it can be used multiple times. + + The :envvar:`PYTHONWARNINGS` environment variable can also be used to add + warning options. Multiple options can be specified, separated by commas + (``,``). + Default: empty list. .. c:member:: int write_bytecode diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index a3ee3326d255d..b9e10678d4648 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -279,7 +279,11 @@ tutorial/stdlib2,,:start,"fields = struct.unpack(' https://github.com/python/cpython/commit/7c29ae1f0585378dba4d220a2c0fb5dd49fdab3e commit: 7c29ae1f0585378dba4d220a2c0fb5dd49fdab3e branch: master author: Victor Stinner committer: vstinner date: 2021-04-16T19:42:34+02:00 summary: bpo-43867: multiprocessing Server catchs SystemExit (GH-25441) The multiprocessing Server class now explicitly catchs SystemExit and closes the client connection in this case. It happens when the Server.serve_client() method reachs the end of file (EOF). files: A Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst M Lib/multiprocessing/managers.py diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py index 0eb16c664cfab..6ee9521c76b48 100644 --- a/Lib/multiprocessing/managers.py +++ b/Lib/multiprocessing/managers.py @@ -192,11 +192,8 @@ def accepter(self): t.daemon = True t.start() - def handle_request(self, c): - ''' - Handle a new connection - ''' - funcname = result = request = None + def _handle_request(self, c): + request = None try: connection.deliver_challenge(c, self.authkey) connection.answer_challenge(c, self.authkey) @@ -213,6 +210,7 @@ def handle_request(self, c): msg = ('#TRACEBACK', format_exc()) else: msg = ('#RETURN', result) + try: c.send(msg) except Exception as e: @@ -224,7 +222,17 @@ def handle_request(self, c): util.info(' ... request was %r', request) util.info(' ... exception was %r', e) - c.close() + def handle_request(self, conn): + ''' + Handle a new connection + ''' + try: + self._handle_request(conn) + except SystemExit: + # Server.serve_client() calls sys.exit(0) on EOF + pass + finally: + conn.close() def serve_client(self, conn): ''' diff --git a/Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst b/Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst new file mode 100644 index 0000000000000..1ec914e5ee9d0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst @@ -0,0 +1,3 @@ +The :mod:`multiprocessing` ``Server`` class now explicitly catchs +:exc:`SystemExit` and closes the client connection in this case. It happens +when the ``Server.serve_client()`` method reachs the end of file (EOF). From webhook-mailer at python.org Fri Apr 16 19:13:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 16 Apr 2021 23:13:58 -0000 Subject: [Python-checkins] bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Message-ID: https://github.com/python/cpython/commit/adf24bd835ed8f76dcc51aa98c8c54275e86965b commit: adf24bd835ed8f76dcc51aa98c8c54275e86965b branch: master author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-16T16:13:38-07:00 summary: bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Use a versionadded directive to generate the text "New in version 3.8." (to match with the documentation of other modules). Automerge-Triggered-By: GH:jaraco files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 3cd200b711992..0f0a8dd91eea1 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -7,6 +7,8 @@ .. module:: importlib.metadata :synopsis: The implementation of the importlib metadata. +.. versionadded:: 3.8 + **Source code:** :source:`Lib/importlib/metadata.py` .. note:: From webhook-mailer at python.org Sat Apr 17 02:33:07 2021 From: webhook-mailer at python.org (tirkarthi) Date: Sat, 17 Apr 2021 06:33:07 -0000 Subject: [Python-checkins] Fix typo in exceptions.rst (GH-25434) Message-ID: https://github.com/python/cpython/commit/cfaa2d338bd72af63a35a424515b47a183cefc14 commit: cfaa2d338bd72af63a35a424515b47a183cefc14 branch: master author: Ikko Ashimine committer: tirkarthi date: 2021-04-17T12:02:53+05:30 summary: Fix typo in exceptions.rst (GH-25434) attemps -> attempts files: M Doc/c-api/exceptions.rst diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 158672d86b325..21c508dc30ae2 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -512,7 +512,7 @@ Signal Handling and if so, invokes the corresponding signal handler. If the :mod:`signal` module is supported, this can invoke a signal handler written in Python. - The function attemps to handle all pending signals, and then returns ``0``. + The function attempts to handle all pending signals, and then returns ``0``. However, if a Python signal handler raises an exception, the error indicator is set and the function returns ``-1`` immediately (such that other pending signals may not have been handled yet: they will be on the From webhook-mailer at python.org Sat Apr 17 04:07:27 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 08:07:27 -0000 Subject: [Python-checkins] bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) Message-ID: https://github.com/python/cpython/commit/b467d9a24011992242c95d9157d3455f8a84466b commit: b467d9a24011992242c95d9157d3455f8a84466b branch: master author: Christian Heimes committer: tiran date: 2021-04-17T10:07:19+02:00 summary: bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) Fix problem with ssl.SSLContext.hostname_checks_common_name. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. Signed-off-by: Christian Heimes files: A Lib/test/nosan.pem A Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst M Doc/library/ssl.rst M Lib/test/allsans.pem M Lib/test/capath/b1930218.0 M Lib/test/capath/ceff1710.0 M Lib/test/idnsans.pem M Lib/test/keycert2.pem M Lib/test/keycert3.pem M Lib/test/keycert4.pem M Lib/test/keycertecc.pem M Lib/test/make_ssl_certs.py M Lib/test/pycacert.pem M Lib/test/pycakey.pem M Lib/test/revocation.crl M Lib/test/test_asyncio/utils.py M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 587d3b3ac9f61..f7bdd56d2b31f 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -2047,6 +2047,11 @@ to speed up repeated connections from the same clients. .. versionadded:: 3.7 + .. versionchanged:: 3.10 + + The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, + 3.9.3, and 3.10 include workarounds for previous versions. + .. attribute:: SSLContext.security_level An integer representing the `security level diff --git a/Lib/test/allsans.pem b/Lib/test/allsans.pem index 6eebde7a57f15..e400e178a1f59 100644 --- a/Lib/test/allsans.pem +++ b/Lib/test/allsans.pem @@ -1,81 +1,170 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCg/pM6dP7BTFNc -qe6wIJIBB7HjwL42bp0vjcCVl4Z3MRWFswYpfxy+o+8+PguMp4K6zndA5fwNkK/H -3HmtanncUfPqnV0usN0NHQGh/f9xRoNmB1q2L7kTuO99o0KLQgvonRT2snf8rq9n -tPRzhHUGYhog7zzNxetYV309PHpPr19BcKepDtM5RMk2aBnoN5vtItorjXiDosFm -6o5wQHrcupcVydszba6P75BEbc1XIWvq2Fv8muaw4pCe81QYINyLqgcPNO/nF3Os -5EI4HKjCNRSCOhOcWqYctXLXN9lBdMBBvQc3zDmYzh1eIZewzZXPVEQT33xPkhxz -HNmhcIctpWX4LTRF6FulkcbeuZDga3gkZYJf/M6IpU1WYXr6q8sNxbgmRRX/NuHo -V9oDwBzLG07rKUiqRHfjGqoCRmmVeVYpryvXUNjHGH0nlVzz/8lTUxAnJorO3Fdc -I+6zKLUPICdAlvz51AH6yopgPFhrdgA0pVzPO6L5G8SRQCxKhAUCAwEAAQKCAYAa -2jtOTcNMFGH3G7TfFZ+kolbuaPCQ/aQkEV2k1dAswzgWw8RsWXI+7fLyi8C7Zhks -9VD4tyNyU8at7D0zSoYm1Fh9sl+fcQp9rG/gSBA6IYu7EdD0gEM7YeY4K2nm9k4s -Lz8W4q+WqsBA6PK47cfjF6vKAH1AyRk28+jEtPiln9egf5zHWtyqOanh9D0V+Wh9 -hgmjqAYI1rWxZ7/4Qxj7Bfg7Px7blhi+kzOZ5kKQnNd2JT46hM+jgzah/G3zVE+R -FFW6ksmJgZ+dCuSbE7HEJmKms1CWq/1Cll0A3uy4JTDZOrK4KcZQ9UjjWJWvlXQm -uNXSSAp1k287DLVUm9c22SDeXpb9PyKmzyvJvVmMqqBx6QzHZ/L7WPzpUWAoLcU+ -ZHT7vggDymkIO+fcRbUzv8s5R7RnLbcBga51/5OCUvAWDoJXNw0qwYZOIbfTnQgs -8xbCmbMzllyYM/dK3GxQAwfn8Hzk+DbS/NObMjHLCWLfYeUvutXJSNly6Ny+ZcEC -gcEAzo5Y1UFOfBX4MZLIZ69LfgaXj9URobMwqlEwKil8pWQMa951ga3moLt91nOe -SAQz3meFTBX/VAb2ZHLeIf3FoNkiIx48PkxsR/hhLHpvl26zEg3yXs3tv0IFBx2R -EEnLNpQaAQFR9S1yDOaG2rsb17ZDKyp9isDpAENHAmEnT/XJn+Dc0SOH1EVDjUeM -JqToAF/fjIx/RF4oUJCAgOPBMlRy5ywLQk8uDi6ft0NCzzCi0eCuk1Ty3KzWFGwx -7cYRAoHBAMeIPCzHG3No4JGUFunslVwo5TuC7maO6qYKbq0OyvwWfL4b7gjrMBR9 -d5WyZlp/Vf40O463dg8x8qPNOFWp49f3hxTvvfnt2/m3+CQuDOLfqBbHufZApP1J -U9MubUNnDFHHeJ9l0tg2nhiLw24GHeMARZhA/BimMQPY0OpZPpLVxAUArM2EB7hI -glQpYCtdXhqwl1pl0u3TZ08y3BXYNg9BycdpGRMWSsAwsApJRgNuI/dfDKu0uMYF -/pUhXVPatQKBwGgLpAun3dT7bA3sli5ESo6s22OEPGFrVbQ1OUHDrBnTj742TJKJ -+oY0a2q+ypgUJdx94NM2sWquJybqBaKxpf8j4OI3tLjc3h5SqwAwnE13YZRSmifP -K1cP9mBjMFM4GLjhWUfwVkxeG/kLlhpP7fJ2yNbRjHN8QOH1AavdLGRGts1mA1UF -xMHUMfbUd3Bv2L13ja/KhcD2fPA4GcLS9tpXV5nCwdkg8V4LdkBmDR04rotx1f44 -6Czokt2usmfHQQKBwFkufxbUd2SB/72Rnxw27hse/DY5My0Lu70y9HzNG9TIiEDA -YwgBdp/x5D04W58fQuQ3nFcRkOcBwB2OYBuJr5ibvfiRnyvSMHvQykwBeSj+Jjbo -VinGgvfiimDdY2C48jyrFzLHZBHXd5oo/dRzT3Bicri2cvbhcQ7zHY1hDiK7AL3r -q1DALmMjpXzQcXdwZ9suCrgQwtIhpw8zAEOTO7ZeBT3nr5lkYUy9djFixrRJyjGK -fjNQtzVrAHrPStNr8QKBwQDCC0zhsCnTv4sAJmW7LL6Ayd5rbWhUZ6px1xY0yHMA -hehj+xbaiC6cfVr5Rg0ncvaa8AExu4kXpVsupTyNwvC4NgzLHtfBw6WUdOnd1awE -kSrDtDReBt2wByAcQwttQsrJ1/Pt6zcNJJI4Z9s8G4NTcQWJwUhU20N55JQKR//l -OQJqhq9NVhte/ctDjVwOHs/OhDNvxsAWxdjnf/O2up0os+M2bFkmHuaVW0vQbqTQ -mw7Vbzk2Ff5oT6E3kbC8Ur4= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAQKCAYAe +BaCCgdJk+xk1USg9cuo5ykBqzTSYlQLXdDlN2oO7sGehJhgvVEGX+QdM3ze+oM2B +wNd3tQDB2iKo11oCunDh4/m2xhq6wA+iPK8POoWRSUf+VJb6xlsTmurENV1s8IHz +GrPqM87OePFGqg/fEuQVuAotObzppVMfNdxHm0er4W6zRMw2rWqDnAOCQ5zDQ1/p +ryp5rYpA49M+R9NoAMlByHRbR7s+6Qnk3NuIMDmUcpF2xeQ/KIMUiHnLEU/gKDpi +bsk+VtyjlibR4zhh9/cJrLTApAIA+4eC176EJvKXCh5UIjd92JC7741HTNQXJpvG +9PXbzhyUCmncr04U+46snGHdwD+lG4LS7oBGACTLMtpcMrlgAm6XCg4T8gRVE/9n +FvCkqPHBR+vnhOxm+0x0yUY/DstJby6IPYPsfGK/s2n//j/vJrAZE1Pxlm9EPU13 +MRLcHstwjAc/NXRPnUN1DfcQvPLx6Tt6rqw3Wm1KO75kM+HZ56BX9/Bi1TgkiI0C +gcEA5JTlXssJ3W8Cz6w1ZtGsThHQBDbvHF2D5AdqO7y6/eqzCQgBQl9BTfXOzsvP +I1gf2CLEFBtGK09UjAuJQg90/NlKur7i7xt7HpAzEfGsDAL4P5BW5JnMNrzpJjjL +0uUDsPJlA75Wi29N2SFiaIslY0sZ6nckInat5GRe4O1AMSHoJ5suY9yTZTU3XB4O +A+XyddutI1GsFZgl8/8LyyNMcyNjxG3T5sr7IKf5/nIv6oMDjC2zLVZa8QS/MEnL +Kaa7AoHBANhEsxfcjw2MaPkrsqAsOP0dDf7g2rdz6wKT5BzZu9e+/E76NmvVDpns +e+kCjql9Os3/wonOMINvn1bTCQGTgk8+dw1fMyqg+zQCvH4ImcE6LSqhzblVHsIB +zZ7rW86trri1U9+olNHG4nwkus0i4LV8eeORns+j8DgXr6/eOvjX3ZW5TyU7/Qgm +SiSdBapzJbom3xJrbo9KQsrN5PVCOwuwrgY0o+2BeKyKhnt4uGv0bR+ii06EOJUA +WvjD7gLI9wKBwGVRXk3jH29IOm3EvjLh80bzfEmx89CV3tUfOEZcRGIyOsNhCfXa +dP7SWqWtDxZyhELwPgtPf43I7wfYQTHH2ioNQqN94ubrPmpwrkJg5cq5MkIyf2F6 +jlsg5xMrD6VeH4G6H25GWuQZJN9+fbkrHBpj+ovD3X9tLWzT1H5Miyx8BAQyM6DN +74Nn0C8Dn2C49vyor5i9JdK4ivIY9ahH8CYE5L73k3p0NFXoPtY61ORUyCjFROtu +oIa+fOQxgVzn6wKBwQC3DD7BnY7/Gq7m51ODOqrpoaPs7Qhyagyp298hhDD3hNEt +T56sWmLHaV/fcqipUDNrlGRmGzz4ooutA2YGDYIn7Gj7ym4WULcN6Jr92e25nLIJ ++XWUvjUQZFJThkXogxz1fZSGI7wCamHcTYJGipTDR54rPV+7w7hY4cN0CZbEdIE6 +buRMUZ/zO+VZZAYdpORz0N7SSlgDtAkgenCmHe64EEzbN8bgCcvHzl/RNfZyeSm7 +supSBJuXkfttvvg/JzUCgcEAlx0Pep9qCLvpk0WqzijBVHc3zK4wYxjhN2MBkF42 +SLWfogKpiPfIqxX6YF94roIA0VlW6Pj50v+sbPwq8nwsgFNhml80A4ODKr3O3Y3M +fXDBJW5W5ZRb/vhIKRjXyCSckSRfj7N8HUYjCLkxQansNWimrldmSet0H2mYJN0Y +JpBXdqpa76zoHzWpKFwD0fSVzvnMelPHSDCNOdIEHmR8e1x2F1/ufR/9/dBzPULY +HMj0OhQHoi8kJyMIj3+bQkbC -----END PRIVATE KEY----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + cb:2d:80:99:5a:69:52:5f + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=allsans + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:c1:1a:f8:fe:53:2f:d5:53:24:d1:9a:62:00:d5: + 41:04:35:38:61:d3:ea:56:38:37:2f:bd:49:64:78: + 8a:3e:5d:32:77:16:11:78:fd:15:63:22:60:c7:8e: + 8c:e5:db:c5:df:d9:3c:ca:9e:f4:09:6b:52:82:a6: + a6:bb:7e:bf:1c:2f:d4:0c:c2:4e:29:1f:e4:b8:ba: + 5c:4e:bb:4d:81:97:76:1a:7f:1d:a8:25:55:0c:2f: + 7e:ef:72:22:60:fb:39:33:3f:1d:64:de:d5:c5:8d: + 79:2b:2c:68:d9:c0:ea:2e:7c:10:b7:02:63:ee:ab: + 6c:47:14:1c:c7:ae:fa:79:fc:32:11:1f:6b:25:40: + 53:3d:7e:95:59:cc:de:fb:81:8c:b3:c5:b6:b4:c0: + 27:c2:3e:90:9f:78:91:51:c9:82:96:f1:ce:cc:5e: + bc:27:33:cd:98:b4:4e:d1:96:77:f6:db:b1:24:09: + d3:0d:69:27:99:2d:42:31:79:5a:5c:9d:27:2a:66: + 5d:12:21:b4:77:60:48:95:d0:b3:c5:93:1d:30:24: + 59:bc:a9:41:05:53:f8:7e:d2:36:a6:83:2f:ce:37: + ed:75:9e:a9:8c:96:9d:c1:8c:d8:bf:25:35:6c:6b: + b3:7b:03:77:6f:74:70:bb:55:59:6b:5a:75:20:53: + a3:28:4a:78:b2:2f:a8:a3:a6:e7:32:1e:d6:73:2b: + 69:89:cb:4b:07:47:c3:da:74:72:a8:c3:43:b8:db: + 7f:f9:37:c1:8a:4d:23:af:68:63:17:4e:30:1e:38: + 6b:3e:f7:f3:f5:65:8a:37:22:38:d0:3f:3f:cd:57: + 74:25:84:af:33:46:ac:45:dd:c5:b4:7a:41:c7:91: + 3f:bf:8d:98:c2:bd:22:a6:ea:67:5b:31:0b:a7:28: + 4d:56:f9:da:24:01:cf:35:e6:96:f8:f0:cc:df:d5: + e5:8a:77:fe:d4:c9:47:fb:09:7b:ac:b3:20:1a:27: + 77:25:a5:a2:b5:b1:b6:e7:f6:6d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Alternative Name: + DNS:allsans, othername:, othername:, email:user at example.org, DNS:www.example.org, DirName:/C=XY/L=Castle Anthrax/O=Python Software Foundation/CN=dirname example, URI:https://www.python.org/, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1, Registered ID:1.2.3.4.5 + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + D4:F1:D8:23:E0:A7:E9:CA:12:45:A0:0D:03:C2:25:A6:E8:65:BC:EE + X509v3 Authority Key Identifier: + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD + DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server + serial:CB:2D:80:99:5A:69:52:5B + + Authority Information Access: + CA Issuers - URI:http://testca.pythontest.net/testca/pycacert.cer + OCSP - URI:http://testca.pythontest.net/testca/ocsp/ + + X509v3 CRL Distribution Points: + + Full Name: + URI:http://testca.pythontest.net/testca/revocation.crl + + Signature Algorithm: sha256WithRSAEncryption + 70:77:d8:82:b0:f4:ab:de:84:ce:88:32:63:5e:23:0f:b6:58: + a2:b1:65:ff:12:22:0b:88:a6:fa:06:40:9a:e7:63:a7:5d:ae: + 94:c5:68:3c:4b:e9:95:34:01:75:24:df:9d:6e:9b:e4:ff:3f: + 61:97:29:7b:ab:34:2c:14:d3:01:d2:eb:fb:84:40:db:12:54: + 7e:7a:44:bc:08:eb:9f:e2:15:0b:11:4f:25:d2:56:51:95:ad: + 6d:ad:07:aa:6a:61:f9:39:d5:82:8c:45:31:9f:2a:ff:18:98: + 49:0c:bb:17:ad:d5:24:d3:d1:c7:c4:10:3e:c4:79:26:58:f4: + c5:de:82:16:c4:c3:c4:a7:a3:62:22:41:90:36:0f:bc:4c:fd: + 6a:18:22:f2:87:e9:07:db:b4:3d:65:00:e4:70:f9:d6:e5:a8: + a1:b9:c9:9d:e7:5d:78:aa:98:d5:f8:f4:fd:5c:d9:4c:d0:6d: + bf:87:71:d3:5b:ec:f4:bf:46:f9:c8:f8:10:c5:72:af:c3:15: + b9:c4:06:67:0b:3f:f6:f4:64:c5:27:74:c1:6b:00:37:da:ea: + 18:36:77:36:a7:3e:80:2e:5d:54:0f:01:df:ce:9e:97:dd:c9: + f2:8b:59:82:c5:65:31:c8:73:20:fd:24:23:25:d8:00:df:90: + 93:26:76:08:0a:06:a9:0e:d3:d3:4c:6f:ef:a7:fb:de:eb:2a: + 40:b9:e4:b1:44:0c:37:ca:c6:9e:44:4a:b4:7c:2c:40:52:35: + bb:b3:71:28:3d:35:fd:be:c9:4f:54:b3:99:c5:5f:84:38:fb: + 2b:fb:ea:dd:88:e8:9d:c1:9b:67:87:3d:79:7b:3d:7e:61:1f: + 70:3c:b7:c8:4c:17:a5:0c:a3:28:c7:ab:48:11:14:f7:98:7a: + da:4e:fb:91:76:89:0a:a6:c6:72:e0:96:d9:f1:80:ea:68:90: + 37:5c:c6:69:c7:d7:bc:c7:d1:ae:5b:a9:12:59:c6:e4:6c:61: + a9:8b:ba:51:b3:13 -----BEGIN CERTIFICATE----- -MIIHMDCCBZigAwIBAgIJALVVA6v9zJS5MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTgwODI5 -MTQyMzE3WhcNMjgwODI2MTQyMzE3WjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO -Q2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0 -aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB -igKCAYEAoP6TOnT+wUxTXKnusCCSAQex48C+Nm6dL43AlZeGdzEVhbMGKX8cvqPv -Pj4LjKeCus53QOX8DZCvx9x5rWp53FHz6p1dLrDdDR0Bof3/cUaDZgdati+5E7jv -faNCi0IL6J0U9rJ3/K6vZ7T0c4R1BmIaIO88zcXrWFd9PTx6T69fQXCnqQ7TOUTJ -NmgZ6Deb7SLaK414g6LBZuqOcEB63LqXFcnbM22uj++QRG3NVyFr6thb/JrmsOKQ -nvNUGCDci6oHDzTv5xdzrORCOByowjUUgjoTnFqmHLVy1zfZQXTAQb0HN8w5mM4d -XiGXsM2Vz1REE998T5IccxzZoXCHLaVl+C00RehbpZHG3rmQ4Gt4JGWCX/zOiKVN -VmF6+qvLDcW4JkUV/zbh6FfaA8AcyxtO6ylIqkR34xqqAkZplXlWKa8r11DYxxh9 -J5Vc8//JU1MQJyaKztxXXCPusyi1DyAnQJb8+dQB+sqKYDxYa3YANKVczzui+RvE -kUAsSoQFAgMBAAGjggLxMIIC7TCCATAGA1UdEQSCAScwggEjggdhbGxzYW5zoB4G -AyoDBKAXDBVzb21lIG90aGVyIGlkZW50aWZpZXKgNQYGKwYBBQICoCswKaAQGw5L -RVJCRVJPUy5SRUFMTaEVMBOgAwIBAaEMMAobCHVzZXJuYW1lgRB1c2VyQGV4YW1w -bGUub3Jngg93d3cuZXhhbXBsZS5vcmekZzBlMQswCQYDVQQGEwJYWTEXMBUGA1UE -BwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3Vu -ZGF0aW9uMRgwFgYDVQQDDA9kaXJuYW1lIGV4YW1wbGWGF2h0dHBzOi8vd3d3LnB5 -dGhvbi5vcmcvhwR/AAABhxAAAAAAAAAAAAAAAAAAAAABiAQqAwQFMA4GA1UdDwEB -/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUoLHAHNTWrHkSCUYkhn5NH0S40CAwgY8GA1UdIwSBhzCB -hIAUoLHAHNTWrHkSCUYkhn5NH0S40CChYaRfMF0xCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnOCCQC1VQOr/cyUuTCBgwYIKwYBBQUH -AQEEdzB1MDwGCCsGAQUFBzAChjBodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0 -L3Rlc3RjYS9weWNhY2VydC5jZXIwNQYIKwYBBQUHMAGGKWh0dHA6Ly90ZXN0Y2Eu -cHl0aG9udGVzdC5uZXQvdGVzdGNhL29jc3AvMEMGA1UdHwQ8MDowOKA2oDSGMmh0 -dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3Jldm9jYXRpb24uY3Js -MA0GCSqGSIb3DQEBCwUAA4IBgQAeKJKycO2DES98gyR2e/GzPYEw87cCS0cEpiiP -3CEUgzfEbF0X89GDKEey4H3Irvosbvt2hEcf2RNpahLUL/fUv53bDmHNmL8qJg5E -UJVMOHvOpSOjqoqeRuSyG0GnnAuUwcxdrZY6UzLdslhuq9F8UjgHr6KSMx56G9uK -LmTy5njMab0in2xL/YRX/0nogK3BHqpUHrfCdEYZkciRxtAa+OPpWn4dcZi+Fpf7 -ZYSgPLNt+djtFDMIAk5Bo+XDaQdW3dhF0w44enrGAOV0xPE+/jOuenNhKBafjuNb -lkeSr45+QZsi1rd18ny8z3uuaGqIAziFgmllZOH2D8giTn6+5jZcCNZCoGKUkPI9 -l/GMWwxg4HQYYlZcsZzTCem9Rb2XcrasAbmhFapMtR+QAwSed5vKE7ZdtQhj74kB -7Q0E7Lkgpp6BaObb2As8/f0K/UlSVSvrYk+i3JT9wK/qqkRGxsTFEF7N9t0rKu8y -4JdQDtZCI552MsFvYW6m+IOYgxg= +MIIHDTCCBXWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2Fs +bHNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAaOCAt4w +ggLaMIIBMAYDVR0RBIIBJzCCASOCB2FsbHNhbnOgHgYDKgMEoBcMFXNvbWUgb3Ro +ZXIgaWRlbnRpZmllcqA1BgYrBgEFAgKgKzApoBAbDktFUkJFUk9TLlJFQUxNoRUw +E6ADAgEBoQwwChsIdXNlcm5hbWWBEHVzZXJAZXhhbXBsZS5vcmeCD3d3dy5leGFt +cGxlLm9yZ6RnMGUxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJh +eDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xGDAWBgNVBAMM +D2Rpcm5hbWUgZXhhbXBsZYYXaHR0cHM6Ly93d3cucHl0aG9uLm9yZy+HBH8AAAGH +EAAAAAAAAAAAAAAAAAAAAAGIBCoDBAUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTU +8dgj4KfpyhJFoA0DwiWm6GW87jB9BgNVHSMEdjB0gBSziqCiunHxqCR51KRbJTYV +HknIzaFRpE8wTTELMAkGA1UEBhMCWFkxJjAkBgNVBAoMHVB5dGhvbiBTb2Z0d2Fy +ZSBGb3VuZGF0aW9uIENBMRYwFAYDVQQDDA1vdXItY2Etc2VydmVyggkAyy2AmVpp +UlswgYMGCCsGAQUFBwEBBHcwdTA8BggrBgEFBQcwAoYwaHR0cDovL3Rlc3RjYS5w +eXRob250ZXN0Lm5ldC90ZXN0Y2EvcHljYWNlcnQuY2VyMDUGCCsGAQUFBzABhilo +dHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9vY3NwLzBDBgNVHR8E +PDA6MDigNqA0hjJodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9y +ZXZvY2F0aW9uLmNybDANBgkqhkiG9w0BAQsFAAOCAYEAcHfYgrD0q96EzogyY14j +D7ZYorFl/xIiC4im+gZAmudjp12ulMVoPEvplTQBdSTfnW6b5P8/YZcpe6s0LBTT +AdLr+4RA2xJUfnpEvAjrn+IVCxFPJdJWUZWtba0Hqmph+TnVgoxFMZ8q/xiYSQy7 +F63VJNPRx8QQPsR5Jlj0xd6CFsTDxKejYiJBkDYPvEz9ahgi8ofpB9u0PWUA5HD5 +1uWoobnJneddeKqY1fj0/VzZTNBtv4dx01vs9L9G+cj4EMVyr8MVucQGZws/9vRk +xSd0wWsAN9rqGDZ3Nqc+gC5dVA8B386el93J8otZgsVlMchzIP0kIyXYAN+QkyZ2 +CAoGqQ7T00xv76f73usqQLnksUQMN8rGnkRKtHwsQFI1u7NxKD01/b7JT1SzmcVf +hDj7K/vq3YjoncGbZ4c9eXs9fmEfcDy3yEwXpQyjKMerSBEU95h62k77kXaJCqbG +cuCW2fGA6miQN1zGacfXvMfRrlupElnG5GxhqYu6UbMT -----END CERTIFICATE----- diff --git a/Lib/test/capath/b1930218.0 b/Lib/test/capath/b1930218.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/b1930218.0 +++ b/Lib/test/capath/b1930218.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/capath/ceff1710.0 b/Lib/test/capath/ceff1710.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/ceff1710.0 +++ b/Lib/test/capath/ceff1710.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/idnsans.pem b/Lib/test/idnsans.pem index e8a41fe5e565e..cbcac7818ddc6 100644 --- a/Lib/test/idnsans.pem +++ b/Lib/test/idnsans.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/wIBADANBgkqhkiG9w0BAQEFAASCBukwggblAgEAAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAQKCAYEA -qNuhjzYPkKNvHDxLJuKd2QXYEcWKzEjwvqRsh0/HI2UBMXM/bwws0/7mtPPKQM55 -XqPT8XvR9JVP2wZ6NrZN8J71BqcGVGq7BIWeuXbtfR3hU6F3m9eNKRkp6En3TcRq -Q3SwQ5oID86wkf6XPSGrvWKRyUObg0BpBY6XmPtP+T32MXAQKg/rY9k4GAfFuA59 -EowN7uOGT80j5Qzcvsa1tFHH3bxj2B+2VDVdmlrOJXxcamKvdRnQ2gSpbmdCv/4X -HKmRiP7m2qVMxRaNh3kcL/gACGvZw3rUE7K0PwjW+sQ6lRlWF9IqUSDZaswxWrie -EaM2et9qD80g3eUV3gMi6I8BIdmD20p/yqa/l0bQk75Y6KQRUlN5HTodFL1u4/7V -W9N9wVIlx5DB1yJBkCZBDoebr4Y1UOGs4rrkcOd6F+zCeRSwKPFAng5vHpZ8jclS -1X2pV/KnKWIUfcFH9+v6pD9Y+VC5tz5LgaFz4SYFxgMF69t+PCpdoR2+0zwSWKGB -AoHBAPr/bC0L7V/HXeoiNxXjOSAYDgyVvzZC3i8cbW2/7DqdY7DfDmZbabdEX1mu -kaY9S/5abVV5W1eQACh1Cd/MaRkUbm+5nTy/bF9jXfh8408MzrGbAR9KF9GfWgqC -UxRiAkCa2gLuAhfc6uqokf5yZK0F+kZGGYWEeGcFK46i+8JstqknW0LsN1hhd+wE -PFokf+/22NiV0t1T0GERz18fFu0XoQC60D9qaW56EI+6OTADw71XkVh35jbNBa96 -bLPVzQKBwQDEVGMtpARdwoU59fRfDBo9S8iJJ/jTFpJs5nrqGZKah4J2pkTBiDpW -ZNxesVKL6IuvWghIuZGnBw5ovWT9JKQ2NHD4GDm/XJ6veVWOxc7THiBhCvJaG5N7 -3Jbxyn+eJ5yBO9PeR6slZbDrgDSIFUI++XD9A7abod8eTZHh6Q3pYT5mRuvfuDS1 -nlrkvMgGC1ZCQXCVTdq8MmMS9jea4UXhJLn4paGSKQSYXWLWVxTX3Mgk0640XpXN -HvsdCBMgFpECgcEAtESQkAXZ9Yk9tTPftlOcqqU8KeO/EhyScOmM2l8WLb7uY5DA -SdlrotlzVfjf2LJ7ivGtRs9DQC9HPcdZUSgBb6bR7mI0QPYGwreePSKNKzA6nyqB -ctSHKOG3DIcvXhtKHNZar/H7BOKAwgpR2JqWHgKGDsS3/cH3q531+5qpEKl9wx1m -GTmIQmy2cYdVRTSjwlfaxCtO5/ETXzQoaNvuXlgzJVAG0xT9JgB7No78FbUOd0WW -OSDb8g3sAGz/92UdAoHBAJqaOV9/gVC0FWWHIWCXjzIls00OhQr1A2luNeyTJrc5 -bqswU4RzWj0eP8rxqCc0gIsdQtjCCMiW7enc+uG9MPLeaPd1XEQtE2jrC0zax/vI -BYdlr2L1xDYNh2/wHn7UgpHiIv0vQr64TZGl67gdxYUBuNAFVI9J8QFT5EUZ2TKm -uRShVK1fyWIbyUfGwVzBILQcBCQOoukAZLRR34e/Td/1o90B0THfyxaQs3xGJsu1 -uIYHi28B7MUSWHyMF0N1gQKBwB9jtS7k7ZRgb0WzsgutRzJLfirmMeahzJwAQ46o -2xRT1y7vr0Idh9OSTz8Iqva6Frse21HT6agymamqEeC2aYwq+ikA0V7K3AhG3PiN -S5diC+RIZybeTthBTO1yj5pKDniZl+NGe3vIunXMrjZIuk/03VFK2etqdYcXguwH -SkwvuKqC3vvzcJW8dV2qIJ3Bz9LWz0QKqJQZBlCZvfzHf1jN5rpJJPQezys4k723 -ZPGg6Smyks3ElGXevVdidVcPUA== +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAQKCAYEA +uaYWWwHW6pzxOrnabcVLYX0WunW9LVShbIw97AElI2n/LuhkXh6xkK48BsqP0vaK +oDHJ5VYxgQdmoP03Zs8sX4BSWe7twg1u8wJxkA+cUXI1BAn0opHjpwJlalEEfe2v +s8PwjMrF59nsCq56W42PrDlms5UmuQ5WLsw6Co++hZmfxW7LPu+GIS6qBZfluNT5 +kBpZlDDCtkyteUD4SVI3wvmOSi+Wzv4e7P2wC9kByjENIcfhC5QQURRD4sA1hWCp +2SThYWqJOCEc2SvGgoqgTRaJuQ2aVG9qrntXt0N4V+WdJWXBK0jedkB2flLve1fR +KmDYuc9k/c1svmS3Y+iZohBha9H8jpuJmXYBxxg1iNg9m7qkfg8F8wxCYLQKB+U6 +tjRS7by+jSE08On7mpDDhJORnlh+rfEuWPPwAKQpLpdp76KDTvR++GvfOMUiOrFM +e9s5aXp+vcgkSSqYvigE+sFpCjQWwkGBkMdT16Pf9CzhQaM08YuLnzfLEYgLFw6R +AoHBAN5NQINBmlq/cptGSru66kfecqHfI7xHnnGWKAkto/B1x7Crrgs4Tk5b4vaA +JmAqatt5P1e7zco7uAXXebY5VURuH/30TlkuaB+oGFp0OMw6165n8RVPT2ZaDViK +ssJ9LT8fJ+23TWCCT2Z1zUlM/NnHAMjKOVsJK3/KEkVvlc7ROC7uVooc78AsQehg +zpL3GBYEeBukT8aNUMqUlesCsIs/dQHW7DzQL2xGkQagm5/PDsxaCsT7ynA8eL3X +TW+IXwKBwQDZTV3TaG6wqtL8y2DR0lN5jY/eYayX4e18iZ+XEZVTntPdVVyJIE4d +0A5ZfcILb9WE8R21iptROYSjcH/05j+3fQMJ1WAK0sNfGTUNNT3jYU8YzLvos+wW +G8E+mNMpFPWNvLV5Qrl4VvoifGh8AMvplUEz8uAzGJbXbRxUPcmjth2ph8zULEDn +/+o4OcT3gh1bp+HCqch0OuiJRn9qNUpsJG5GMm5FtjBjZM97ucZ1/0DaWl3JUxUN +/pueo3J9vCUCgcBg2Fjdlcvv8u2z1aijJmgATVm1SWfhE3ZkV50zem2sSTNotTJK +cwoyOveimeueA3ywBp9g0lFx5Bhkex3sFAggmrVXRoKHeZ8lA28woOdJmezybxfp +R7b4iQy9YRdFgZEfqawUdMHB5KNAqNt5LpANNBQUZX0dOt53eooBM/6Yri8CyxRq +cPbFysIfwWTdQ8Z7eRD2Qdv7TP9AcgDp9C8DSu7nkUEzsSKn0gpGT9vcgDEbN7Lv +ZB4qTT3wvoZeq5MCgcBIG18eDtJkN1sp3Yb0OTnP5QSvg3PVNngq0jQt2fzWMacW +FARP0HN7exW35n4kc2jD44q7OhJOAqsb3PHo3xqXlZkTg0WKceO4w9GR32/46spn +bVCRaFrX/z/BuM6hHD5bWRpS8aw/3YTFOsklFNKVYRyw01BIREmRlLhIz/QAKidv +oQt8AG9NTON44tqUUw3Q40WL5fEJeJ6/JrCTGrnmZrRdANEMuucVpFchNEVB1IC9 +tCzY6IPdD/atzojoZi0CgcB2x9oWLjJ0XJIp2pMAb8nCMVjkKrznKFjZbDm8EQBs +ou7pM2zkO3VRcWT1BXQocinJsjQqjQiTawP6IN2FQgT0d89V+pwd+jdvpdildQhP +1/6SErVRZV//oopKTsC6TIBL/EmW1TkP3ulQIZs8YklFgybeHdDyNFi+VgPXkVGe +IHp0nEzrui9q0YJsjHfFHBeGyzDSfbiBYiF7Auk66gYZbXufebP/LZNG/FIamPP3 +rwYIeeV1IVwk9tPBw6fGwrs= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: - cb:2d:80:99:5a:69:52:5f - Signature Algorithm: sha256WithRSAEncryption + cb:2d:80:99:5a:69:52:60 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity - Not Before: Aug 29 14:23:17 2018 GMT - Not After : Jul 7 14:23:17 2028 GMT + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=idnsans Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c0:7e:4b:df:82:74:ff:f8:04:ea:22:24:79:92: - c8:06:5b:81:09:2b:dd:34:32:40:6c:63:d4:d7:41: - c3:5d:6e:b1:aa:6f:21:b8:13:01:2f:6c:35:b3:b0: - 05:81:aa:08:3b:e8:09:6d:a3:b2:60:c4:a9:76:80: - db:24:cf:74:f4:d3:bc:72:70:e5:40:cb:8c:f7:d6: - 0c:c4:58:c4:f1:f8:6c:4d:6c:28:a2:70:97:c2:66: - 3c:3a:67:80:a4:fd:48:a9:a2:85:c0:03:2f:d2:ee: - 3c:02:cf:7e:bd:13:84:46:6b:98:ec:23:1c:49:f8: - d7:43:a8:08:5e:a1:13:88:79:42:9a:c2:47:c5:ef: - 15:d3:cb:39:30:b9:3b:8d:8f:66:1c:57:f4:ef:25: - cb:06:54:64:13:8f:8b:59:55:26:c3:56:f2:f7:f0: - f9:50:5f:ad:95:a0:69:84:0c:af:29:97:c1:8b:d8: - 65:10:2b:7c:be:80:fd:95:14:31:de:a4:6c:6a:a9: - 7c:4f:2c:84:f1:a5:d0:45:68:8a:10:71:8e:18:57: - e9:c9:b4:db:bc:be:55:33:0c:c8:b3:08:72:88:23: - e6:0f:f4:97:6c:b7:13:8b:0b:21:1b:9a:32:ef:de: - b9:38:b4:78:08:26:e3:9f:3b:24:61:dc:a8:c8:71: - d8:21:98:d6:5c:67:bb:ce:be:96:eb:df:8d:60:28: - 13:51:2d:59:ac:03:1b:49:0a:aa:8c:7d:6b:cd:39: - ce:ab:5d:fa:76:d1:b0:a7:2f:f4:83:0c:97:81:ff: - bd:7f:29:f5:5e:55:a7:df:5d:1b:5f:11:67:30:25: - 6e:98:46:9e:e9:d8:c7:9a:97:30:2c:9d:40:39:c6: - c7:0e:28:8b:58:86:f9:89:d4:52:65:50:1f:0b:0d: - 9f:9d:58:44:a5:77:66:b8:08:87:4a:f6:5a:6e:7f: - 72:c3:ab:2f:b0:99:c1:93:76:7a:15:a2:2d:91:4f: - af:12:0d:81:c0:6f:f6:db:b7:1d + 00:bc:b2:aa:65:4e:e1:ee:2e:36:d6:4c:be:52:2f: + 60:f5:7f:0f:54:e9:64:33:2d:50:05:e6:0b:32:85: + de:65:af:61:69:7d:8c:23:ae:86:f9:31:ab:fd:d5: + a3:8b:6c:94:53:be:83:72:5e:c2:76:e8:53:d2:d1: + 1c:9c:44:65:db:a2:67:08:10:9c:57:1b:2f:5a:23: + ed:0c:2d:80:6d:d4:6e:66:82:a0:87:f8:77:15:0b: + 03:f3:08:d9:61:56:74:f0:be:98:00:ef:2f:33:b3: + 7f:ba:7b:36:40:3d:69:05:d3:25:8e:31:82:ed:4d: + ca:bd:03:91:96:79:ab:ed:e5:53:20:9b:52:99:17: + 78:0e:e2:4e:7c:a0:fc:a4:dc:07:bd:0f:42:c0:69: + 8b:17:e8:31:62:05:8c:78:d5:e5:11:e5:46:d2:6f: + 92:18:5d:a0:dd:f1:de:a3:a9:6f:e3:9d:88:60:73: + a0:b1:92:fd:60:4c:91:67:f3:b5:79:96:b1:b4:bd: + 83:12:45:4b:56:0d:0f:58:26:1f:c4:28:0c:63:1b: + 0e:c0:79:8e:36:f6:9e:93:13:85:28:26:10:e6:a0: + 56:11:d8:d2:ef:6b:08:4d:22:99:71:a2:5f:ef:d1: + fb:34:bd:e1:50:8c:8f:d4:b1:30:fc:da:d4:5f:9d: + 82:f8:21:7f:2c:ce:12:ec:13:9f:f9:22:af:1a:88: + b1:e3:55:b2:0c:c2:60:d8:01:ad:0f:eb:70:29:da: + 47:f5:6e:24:a7:f6:6a:43:2f:c9:50:6b:34:a8:ca: + bf:31:cc:8a:b6:41:2e:47:32:f1:9b:78:c0:26:4b: + 48:a1:d7:46:71:f3:8b:95:9a:45:a5:6a:f8:2f:b5: + 27:e5:c3:c2:bf:65:74:fd:73:bd:2b:66:9f:d3:74: + 11:98:f7:97:0e:16:c6:e0:e5:4f:f6:d0:cf:cb:96: + 98:ac:f6:d7:01:09:aa:15:69:84:85:ba:96:ad:ac: + ff:a9:f3:2d:7d:a8:fd:a7:79:bb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 54:53:0C:3C:4C:E3:63:C6:56:08:35:9C:5E:F4:C1:A1:04:3A:C2:C9 + 5C:BE:18:7F:7B:3F:CE:99:66:80:79:53:4B:DD:33:1B:42:A5:7E:00 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,64 +106,64 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 03:af:93:ab:58:98:74:3c:a1:68:53:18:13:be:56:60:77:d0: - a7:0e:c9:8a:02:1f:92:4d:21:18:61:d7:3e:9a:1d:aa:94:37: - 02:59:31:3b:71:62:d9:cb:04:e8:c7:44:41:f9:0e:0d:90:d1: - 4a:ab:4e:e2:bd:4e:60:1b:3c:eb:2a:b7:8a:ca:24:58:60:64: - d3:a6:20:f6:f5:98:6e:ca:5a:0a:91:63:97:58:f5:18:90:9f: - 17:55:9f:12:cf:22:a7:31:e6:90:da:36:61:3b:d6:42:e6:18: - 19:43:bb:17:52:28:40:a5:11:47:7f:32:fe:83:3d:c3:7d:8b: - 17:1b:5d:f7:20:3e:bd:3b:16:3d:00:01:68:ed:76:7a:a1:af: - ce:cd:dd:52:7f:19:22:db:83:c1:89:b6:90:02:4e:22:bc:b1: - 76:0c:00:ad:c5:3c:33:be:64:92:30:38:1f:b1:04:4f:53:a2: - 4a:fb:63:80:21:8b:03:72:72:4b:df:f1:9d:08:75:f0:94:06: - d3:cb:7c:df:3b:80:19:58:7a:85:ca:2a:bf:b4:8c:5d:f3:b6: - 65:24:37:b2:1d:46:da:1f:39:48:f2:eb:3a:84:98:3a:0c:59: - ff:0a:05:c2:2c:8c:b1:a5:a9:43:a9:8e:47:97:9a:d2:40:9c: - b8:c3:e6:46:1b:db:4b:85:a3:e1:e7:4e:2a:1e:b9:a6:de:ee: - a7:f0:63:3f:0f:e2:90:b6:82:70:4b:93:7f:e9:74:f3:ab:03: - 9e:04:38:f1:46:2d:f6:fe:77:0f:4a:8e:66:23:74:3e:c6:5b: - eb:0e:dd:72:c3:46:1d:a4:f0:2f:b6:18:2e:f1:1c:f9:85:69: - 0e:5a:37:5e:f8:ea:4b:2d:e7:63:ee:a1:e4:b9:f7:fa:a9:11: - 65:64:a1:b7:b5:91:81:5c:4d:b5:27:b4:16:96:4b:df:fc:c4: - 8a:26:b6:87:62:54:88:fb:1d:7d:af:97:25:65:27:38:1e:f7: - 8c:a4:16:46:f2:d9 + 5d:7a:f8:81:e0:a7:c1:3f:39:eb:d3:52:2c:e1:cb:4d:29:b3: + 77:18:17:18:9e:12:fc:11:cc:3c:49:cb:6b:f4:4d:6c:b8:d2: + f4:e9:37:f8:6b:ed:f5:d7:f1:eb:5a:41:04:c7:f3:8c:da:e1: + 05:8e:ae:58:71:d9:01:8a:32:46:b2:dd:95:46:e1:ce:82:04: + fa:0b:1c:29:75:07:85:ce:cd:59:d4:cc:f3:56:b3:72:4d:cb: + 90:0f:ce:02:21:ce:5d:17:84:96:7f:6a:00:57:42:b7:24:5b: + 07:25:1e:77:a8:9d:da:41:09:8e:29:79:b4:b0:a1:45:c8:70: + ae:2c:86:24:ae:3d:9a:74:a7:04:78:d6:1f:1b:17:c5:c1:6d: + b1:1a:fd:f4:50:2e:61:16:84:89:d0:42:3f:b6:bf:bd:52:bd: + c8:3e:8e:87:b4:f0:bd:ad:c7:51:65:2f:77:e8:69:79:0e:03: + 63:89:e7:70:ad:c8:d1:2f:1a:a5:06:d2:90:db:7c:07:35:9a: + 0b:0e:85:87:d1:70:17:a7:88:0f:c6:b5:9c:88:00:fa:f9:b2: + 0a:19:5a:4b:8d:91:12:51:5e:0e:c1:d8:9e:02:78:d0:2d:24: + 09:fe:d4:97:3c:cb:a0:1f:9a:ab:f7:0f:e2:fa:64:23:4e:53: + 0a:15:3e:f5:04:01:86:29:8b:8e:24:40:2f:b1:90:87:5c:3b: + 7b:a7:4c:06:af:c3:90:7f:e9:c6:56:42:61:15:2c:83:f1:7c: + 4f:89:17:f3:a0:11:34:3f:8d:af:75:34:60:1e:e0:f2:f3:02: + e7:aa:b3:f7:9f:1c:f8:69:f4:fe:da:57:6e:1b:95:53:70:cd: + ed:b6:bb:2a:84:eb:ab:c3:a9:b4:d5:15:a0:b2:cc:81:2d:f1: + 56:c1:54:9b:5f:14:4c:5f:ad:5f:f5:06:ee:22:60:45:e4:50: + 35:64:ac:ac:ca:4a:bf:86:78:f8:53:2d:17:d8:e8:84:c8:07: + a4:c2:29:76:c7:1f -----BEGIN CERTIFICATE----- -MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJgMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTdaFw0yODA3MDcx -NDIzMTdaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2lk -bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAaOCAo4w +bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAaOCAo4w ggKKMIHhBgNVHREEgdkwgdaCB2lkbnNhbnOCH3huLS1rbmlnLTVxYS5pZG4ucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2dzc2NoZW4tbGNiMHcuaWRuYTIwMDMucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2djaGVuLWI0YTNkdW4uaWRuYTIwMDgucHl0 aG9udGVzdC5uZXSCJHhuLS1ueGFzbXE2Yi5pZG5hMjAwMy5weXRob250ZXN0Lm5l dIIkeG4tLW54YXNtbTFjLmlkbmEyMDA4LnB5dGhvbnRlc3QubmV0MA4GA1UdDwEB /wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUVFMMPEzjY8ZWCDWcXvTBoQQ6wskwfQYDVR0jBHYwdIAU -3b/K2ubRNLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK +BAIwADAdBgNVHQ4EFgQUXL4Yf3s/zplmgHlTS90zG0KlfgAwfQYDVR0jBHYwdIAU +s4qgorpx8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK DB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNh LXNlcnZlcoIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKG MGh0dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNl cjA1BggrBgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 Y2Evb2NzcC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250 ZXN0Lm5ldC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGB -AAOvk6tYmHQ8oWhTGBO+VmB30KcOyYoCH5JNIRhh1z6aHaqUNwJZMTtxYtnLBOjH -REH5Dg2Q0UqrTuK9TmAbPOsqt4rKJFhgZNOmIPb1mG7KWgqRY5dY9RiQnxdVnxLP -Iqcx5pDaNmE71kLmGBlDuxdSKEClEUd/Mv6DPcN9ixcbXfcgPr07Fj0AAWjtdnqh -r87N3VJ/GSLbg8GJtpACTiK8sXYMAK3FPDO+ZJIwOB+xBE9Tokr7Y4AhiwNyckvf -8Z0IdfCUBtPLfN87gBlYeoXKKr+0jF3ztmUkN7IdRtofOUjy6zqEmDoMWf8KBcIs -jLGlqUOpjkeXmtJAnLjD5kYb20uFo+HnTioeuabe7qfwYz8P4pC2gnBLk3/pdPOr -A54EOPFGLfb+dw9KjmYjdD7GW+sO3XLDRh2k8C+2GC7xHPmFaQ5aN1746kst52Pu -oeS59/qpEWVkobe1kYFcTbUntBaWS9/8xIomtodiVIj7HX2vlyVlJzge94ykFkby -2Q== +AF16+IHgp8E/OevTUizhy00ps3cYFxieEvwRzDxJy2v0TWy40vTpN/hr7fXX8eta +QQTH84za4QWOrlhx2QGKMkay3ZVG4c6CBPoLHCl1B4XOzVnUzPNWs3JNy5APzgIh +zl0XhJZ/agBXQrckWwclHneondpBCY4pebSwoUXIcK4shiSuPZp0pwR41h8bF8XB +bbEa/fRQLmEWhInQQj+2v71Svcg+joe08L2tx1FlL3foaXkOA2OJ53CtyNEvGqUG +0pDbfAc1mgsOhYfRcBeniA/GtZyIAPr5sgoZWkuNkRJRXg7B2J4CeNAtJAn+1Jc8 +y6Afmqv3D+L6ZCNOUwoVPvUEAYYpi44kQC+xkIdcO3unTAavw5B/6cZWQmEVLIPx +fE+JF/OgETQ/ja91NGAe4PLzAueqs/efHPhp9P7aV24blVNwze22uyqE66vDqbTV +FaCyzIEt8VbBVJtfFExfrV/1Bu4iYEXkUDVkrKzKSr+GePhTLRfY6ITIB6TCKXbH +Hw== -----END CERTIFICATE----- diff --git a/Lib/test/keycert2.pem b/Lib/test/keycert2.pem index ed6ae85a4649d..e59d45439d4b6 100644 --- a/Lib/test/keycert2.pem +++ b/Lib/test/keycert2.pem @@ -1,66 +1,66 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDKjrjWZlfOs1Ch -qt1RoyLfqyXbHVXIAW0fTzAxfJnxvFOiWqAAKgC2qVQM8Y080kRUuRaXP/w9ywXT -+MzX6tByy5VbTYJYyTjHOH46EWLNdcqEJs4+FCVqOIYrQPQ6pGAhCXmgBy4Vb42J -ABLwb+Kt+y2Dk15tggVcAHP2Khri+lRXWvda+kZAe2F1IojmuWyCTy3FEYHic5qN -BsXcf6u1oyFV8MybOuz1zGj3vd2C+dEKO4Ohw9rRwnvHSatjM+CfwiXf8kTXzDBF -Z/8W3+6yA49pHxRbG7FE3K1TAPhkrp+BVTIUOcdI74wEA6UEkWFF5sQcmmAth59M -EQrl2CXorftEPhsKZE59dUP1+nYAPvR/mTySNCSw7/rvdf+csRSZ5ollMu/lxsht -ulJYJI03+IiDTn47FI5D+IF25REK7d4LzGIo6T73ktsT+qpSXHuTWC+IABm8AMF9 -7ljxHSwMRU/z+O5uiONRItDAgKH/OItFG54PtY2vAhaO0YiZrZcCAwEAAQKCAYB2 -hTo8IVghlySH5B1p5kXCkDcvVaPaypLaLhCp9Blzq9lX9yUF043lU4Ddrf0RaIsY -88/3IjZqxb+cP0lE0Z20fdDfwqORZfQ2BaU+PuwMAm9EEhy9kDYwR/ChoHkHUyT4 -T7392BWr70Dmt8ddLmp5mK4R/gnTk6+lHJK9p/dhdk4haxWvAyBWHJty2Yk3T6nh -OYkzdUIFidUVza+6jG2hc1lPGv3tmnYKgNeulkblm10oWphz79C6ycx5WG7TNgef -CQ3z7//Nn89YTiaUBjLvoLvxRTMwO96r7E/FaslSl/fWnF3HP3lut26Z/mNfhiwj -qn7AhUwpSNPV0qcxFWXr/rXUjdk745wv8wOODK8atjjE/vt/MRBK0rAOIPSm3ecx -37PKNtR4i+sNeDEcY1IyTHE6wFvJSy5y8AFpn5y8tbqYfhlEVWZ4pcnlrKxhWm7j -oBkB/4GBjKQgbQ7ttym9eNG1wIbZ8v9N06+yeLs/NCc4bFZEgcWjFqBH1bLtAYEC -gcEA8tt8iYNqbsDH2ognjEmbbBxrDBmyYcEKRpg1i1SUopcZl8i93IHpG7EgJIaj -l7aWSbASAxjnK02t0VZ3nNS60acibzRwY/+e8OrSqlQdMXlAB2ggBA86drDJpfBl -WGJG8TJVY9bc1TU2uuwtZR1LAMSsRHVp+3IvKLpHrne5exPd3x6KGYcuaM+Uk/rE -u6tLsFNwaCdh+iBFFDT2bnYIw7jAsokJUkwxMVxSC0/21s2blhO/q5LsN1gFC1kN -TbpXAoHBANWE7TmG2szPvujPwrK18v6iJlHCA2n50AgAQXrsetj2JcF3HYHYdHnq -z36MQ6FpBKOiQumozWvb32WTjEwdG2kix7GEfam4DAUBdqYuCHzPcR12K5Tc8hsX -NG7JXUAeS8ZJEiOdu95X59JHyBxUQtNfte5rcbaV17SVw6K6bsWVJnj60YjtJrpa -xHvv1ZRnT2WEzJGpA+ii1h3I52N7ipGBiw172qcW+bKJukMi8eHxx5CC9e5tBpnu -C+Ou/eYewQKBwHxNa0jXQrq9YY2w8s0TP8HuKbxfyrXOIHxRm9ZczFcMD8VosgUT -WUUbO+B2KXWVtwawYAfFz0ySzcy//SkAmT6F1VIl/QCx7aBSENGti+Ous98WpIxv -XvUxN4T/rl+2raj2ok4fw5g9TG4QRIvkmmciQyonDr/sicbG0bmy/fTJDl8NOpIm -ZtKurNWxHNERtAPkMTyeK7/ilHjrQtb3AzVqcvbuvR6qcONa5YN0wlrfkisWoJwo -707EdpCAXBbUsQKBwQCnpzcpu2Sj+t9ZKIElF87T93gFLETH+ppJHgJMRdDz+NqO -fTwTD2XtsNz57aLQ44f8AFVv6NZbQYq41FEOFrDGLcQE9BZDpDrz10FVnMGXVr7n -tjjkK1SCxwapkr0AsoknCYsPojO4kud46loLPHI4TGeq7HyeNCvqJMo3RRHjXIiX -58GNNUD6hHjRI/FdFH14Jf0GxmJGUU20l2Jwb7nPJJuNm9mE53pqoNA7FP4+Pj1H -kD0Q2FSdmxeE0IuWHEECgcBgw6ogJ/FRRGLcym+aApqP9BChK+W8FDfDc9Mi4p/J -g+XmetWNFGCGTlOefGqUDIkwSG+QVOEN3hxziXbsjnvfpGApqoaulAI5oRvrwIcj -QIvD2mt0PB52k5ZL9QL2K9sgBa43BJDyCKooMAlTy2XMM+NyXVxQKmzf3r3jQ5sl -Rptk7ro38a9G8Rs99RFDyOmP1haOM0KXZvPksN4nsXuTlE01cnwnI29XKAlEZaoA -pQPLXD8W/KK4mwDbmokYXmo= +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCf8FWxi4oVlDVx +e8NDFgb+IYAGr/hZWuY1Zq7d7g57yPoxJrgt+bN89+U7qTduqyB2Hy8G0TqeACOr +IdpPZ8P7V5E5YiASwfJ72nbVo7qR9DAKA5FE8PU0bJFmFLjDDihc970zc4ilRDfR +WylUpj68nefOY4CzFzeiqVOLX2wezs7Z0hflkSXGBmC0j1FbQU2I3YJg3CKCabhT +tU6OyKItzjJ2vVaOoQ+B0Kv8leaRQ6ANZBAFQF2LepSy5F2+oSD+QHjPr+012V5D +mrsdIc9We8YyonS1u/3HI7lLohf3W+qFroQWjn0DJI56ScV1uEr/B0+hn2jBRTM5 +d1F9BeVWm1u8BOJu50CvOeuxiVLsxJpa4T41DJznJk5V+hE4hKvDKmlrwulsRp8o +jUEyUi8dzWOBRfAijIWv3qAPjGA/J33n6+PllCczC2BsVZhVmLqSMCwp1g2JTCM/ +KC7T4vOl/EGkm76fcmLeA1Ef8oUdRg+3T77VP+HqZ2JP06J8O8MCAwEAAQKCAYAw +YvJZ82BEJQGCIrIxMpHNAm+MFmKpDdIFp9oRdDrXgjcG9bLU3e1KSmkEgq4tggIh +GlAM3PHB6ULhPC2ixj7JZHWgCaqwYhKtG6vF+HGyRFDgRrIFTGyyfoICgxReloLp +lV2dGj/l19yXLuAzJtRmFdOSYhIGnGiNgnKvAKBiNajoxyHJpv7piPZqyc0QMZJ2 +bKVMDm02TSuhz4FDuzktaGtl9uQf5GQfnvTZRrRpkC70vigGnrFuSBiCgopF6NLq +6AXl8YS3Jcu2oGWrZDfS/GlG1QmvGGsmr9wndJSGG43jcpcRZt0g1nJNu4Fioq3e +7y6Gap9TEsciuQOv/6RD457XkNARmTQxFpEwmSgOPQn2pFcDspo71Ej7azzL/Z+3 +jvnVo3wxgxBcrpyh+vhBtJARp4pT4anW4PcD6IcPSOWbnI8Ldoj1XN5QkJcBcykK +6LmsAUqsmEQDNsmnGZWyYSCns4P2vUJi0hwQz8UiQwgAta3xnq4v5On7l3cq35kC +gcEA0+joOFbZBeGlCb27tDW4VCW0cQuczzuNEoBUKnsNSqy0nx1O7hgHm/f/NQDD +cpxiD15bRQ0KM9QbQC4dGaVoLsM07hUGk97dCxQPs2zot4CodCKGohs7E154tEDP +zVg3YS5mubUmqdqtn8ZCKeeZye/Tv2ageyF300sEgj2Cd7EZ8S4sB0PxZ2tqT3jy +cBL5cDruLEWuHIQjN7WwSjxnXocpb1OU7dJ+v4zFPCkSCOoa0DTTw4jFhPEOBdqV +T619AoHBAME3QyW4QVtU2Ct9u0B1XThhqSEyOpUrcH9nOoefggwP4WF3phVx16BG +aDKUIGQ62klRa5fi2eooxcjQRLv1sWO0UzssnO6ABMnGkUiRdrowo6xukNak0RTp +0gvNoJ0SZxGF0yWSCw1Rq3qP2Koj7XDumFChAzLMyUsnoOl29SA7GfXcZp1pZTiq +kOfFMWt0CIHu/EK03YWcd4vfQEq6lus39RCSXuL++Jva3yiEl5s069RFZvP1bNrD +emkfetDSPwKBwQClk+8fVnzs44sZOW9ZOEB3P57mVbSJGHb6Zdtd9hhEqP3Y9gWe +dJg9fmGjAJ23CAp3B7s5ER9PsAQ6+c0zJNNq9ox9G2CwWgtNhLdf81FDUPxPAktA +jxZx4/dcoOe+A5gCD0elA67aOUxA86DvLVA1QXeqrn3muBfwuUUknvs6mt8yXGl6 +o9QUgxHmVxLYD3tn/iPr4+ZP0c/Sz9yXpOsAKYxuuFg+G6N9+HiEsXKuFH4vAZgV +yODNJ61VVZ4lS+ECgcAqFqOl39E81+qO7sCPdgFsermg5ZQlUmUbG52AVZq6jesG +lE21disGWs/v1JyJuNg8CGRrnZriiycqa1PNreOKWImY5kr5GSHx4jNbn3RBcr70 +nNEoMJbq+1QqBgzqqkuRYZlxIbMOn6++7v6/cTwT0aWUSr6rnjhrCqLeuG8FKlqp +V+1ydLb79QvDsQzm30vLIggJb+ShakgQS/1xSdv+OR5FEd1hjTESokbiSJ/Ny2Vj +xAp9MgUYUmSj6ZuTSXkCgcAggshdRQLom/EK2pYwffIpKfBiyLbi+KIjKxkiPEsb +jrrQbvh9ZN6iAG3StVAYB5c6vewfeIlcDT0YJDyy1hGRLRG7vf9ubPf+n7Xp1y0W +oo9L9qfCHu0jmWwtinkFYjpTDkXlxXCG2v3TllNsNX/5afYo8sb9oxXHLTpBlwZB +fw6IgNZblWQevdgmUMTP9W2W7AZUxEz4gOM6lQkOwC3U59Dx2yO6rD3An6G1tlZF +2MClyf8o5d5ePObH8rkxrpY= -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIEYjCCAsqgAwIBAgIJAJm2YulYpr+6MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTAeFw0x -ODA4MjkxNDIzMTZaFw0yODA4MjYxNDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEB -BQADggGPADCCAYoCggGBAMqOuNZmV86zUKGq3VGjIt+rJdsdVcgBbR9PMDF8mfG8 -U6JaoAAqALapVAzxjTzSRFS5Fpc//D3LBdP4zNfq0HLLlVtNgljJOMc4fjoRYs11 -yoQmzj4UJWo4hitA9DqkYCEJeaAHLhVvjYkAEvBv4q37LYOTXm2CBVwAc/YqGuL6 -VFda91r6RkB7YXUiiOa5bIJPLcURgeJzmo0Gxdx/q7WjIVXwzJs67PXMaPe93YL5 -0Qo7g6HD2tHCe8dJq2Mz4J/CJd/yRNfMMEVn/xbf7rIDj2kfFFsbsUTcrVMA+GSu -n4FVMhQ5x0jvjAQDpQSRYUXmxByaYC2Hn0wRCuXYJeit+0Q+GwpkTn11Q/X6dgA+ -9H+ZPJI0JLDv+u91/5yxFJnmiWUy7+XGyG26UlgkjTf4iINOfjsUjkP4gXblEQrt -3gvMYijpPveS2xP6qlJce5NYL4gAGbwAwX3uWPEdLAxFT/P47m6I41Ei0MCAof84 -i0Ubng+1ja8CFo7RiJmtlwIDAQABoxswGTAXBgNVHREEEDAOggxmYWtlaG9zdG5h -bWUwDQYJKoZIhvcNAQELBQADggGBAMIVLp6e6saH2NQSg8iFg8Ewg/K/etI++jHo -gCJ697AY02wtfrBox1XtljlmI2xpJtVAYZWHhrNqwrEG43aB7YEV6RqTcG6QUVqa -NbD8iNCnMKm7fP89hZizmqA1l4aHnieI3ucOqpgooM7FQwLX6qk+rSue6lD5N/5f -avsublnj8rNKyDfHpQ3AWduLoj8QqctpzI3CqoDZNLNzaDnzVWpxT1SKDQ88q7VI -W5zb+lndpdQlCu3v5HM4w5UpwL/k1htl/z6PnPseS2UdlXv6A8KITnCLg5PLP4tz -2oTAg9gjOtRP/0uwkhvicwoFzFJNVT813lzTLE1jlobMPiZhsS1mjaJGPD9GQZDK -ny3j8ogrIRGjnI4xpOMNNDVphcvwtV8fRbvURSHCj9Y4kCLpD5ODuoyEyLYicJIv -GZP456GP0iSCK5GKO0ij/YzGCkPWD5zA+mYFpMMGZPTwajenMw7TVaPXcc9CZBtr -oOjwwiLEqdkpxUj13mJYTlt5wsS/Kw== +MIIEbTCCAtWgAwIBAgIUF15VKdwjiTzzKgs6PnNpEekV9QQwDQYJKoZIhvcNAQEL +BQAwYjELMAkGA1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYD +VQQKDBpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhv +c3RuYW1lMB4XDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFowYjELMAkGA1UE +BhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYDVQQKDBpQeXRob24g +U29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhvc3RuYW1lMIIBojAN +BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAn/BVsYuKFZQ1cXvDQxYG/iGABq/4 +WVrmNWau3e4Oe8j6MSa4LfmzfPflO6k3bqsgdh8vBtE6ngAjqyHaT2fD+1eROWIg +EsHye9p21aO6kfQwCgORRPD1NGyRZhS4ww4oXPe9M3OIpUQ30VspVKY+vJ3nzmOA +sxc3oqlTi19sHs7O2dIX5ZElxgZgtI9RW0FNiN2CYNwigmm4U7VOjsiiLc4ydr1W +jqEPgdCr/JXmkUOgDWQQBUBdi3qUsuRdvqEg/kB4z6/tNdleQ5q7HSHPVnvGMqJ0 +tbv9xyO5S6IX91vqha6EFo59AySOeknFdbhK/wdPoZ9owUUzOXdRfQXlVptbvATi +budArznrsYlS7MSaWuE+NQyc5yZOVfoROISrwyppa8LpbEafKI1BMlIvHc1jgUXw +IoyFr96gD4xgPyd95+vj5ZQnMwtgbFWYVZi6kjAsKdYNiUwjPygu0+LzpfxBpJu+ +n3Ji3gNRH/KFHUYPt0++1T/h6mdiT9OifDvDAgMBAAGjGzAZMBcGA1UdEQQQMA6C +DGZha2Vob3N0bmFtZTANBgkqhkiG9w0BAQsFAAOCAYEARzdkuqa0Hexi/saMkdi3 +bubpQkc7X0RYKWnjy/PgcmbvQXLiWRMZOH9rMWvd5v+ZfkgAtsbOQuP8ycioNIFY +Il5SEmxHEN81z5UNSPLOib6ky13gzrnXRAxnnO7cICG7AaMu1dHv57fqjevcx/n/ +nxPNKwKL+TDpMw7ATVZw7Py7JciKyFAfwtkvt17j/ldvaQvuwmWHzyFVrQniQcQq +QEa4jy/Y/pXHAgCKq1qbe0ush17j1ChyH7l4SkF2xJKcYYQF5ipw8zg6WeOL2NFE +G1KDJN0SsMmM3PMN1e0lLQP3G+UaatervrKXu51QleKL32Xlby+pp1w9KKs39/Tb +RT8EMe9A6cecod6TL0ZUQHow6ykNYBkfSKDLTKWnL9ifZ0C/DvgmS7DpJg3oAa1e +GhIglMrgqJflTHAI/PvEsCKM1O0Un2dVGWsUCzPfhj1cKmagyb0Zd+2Tk9xGSRs9 +2ceXMxRCjOJwEHUCFuTYeqowabdlpi0nyPbSn7JIwCpT -----END CERTIFICATE----- diff --git a/Lib/test/keycert3.pem b/Lib/test/keycert3.pem index e0a8205a660e8..f6887ba7a84e1 100644 --- a/Lib/test/keycert3.pem +++ b/Lib/test/keycert3.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCfKC83Qe9/ZGMW -YhbpARRiKco6mJI9CNNeaf7A89TE+w5Y3GSwS8uzqp5C6QebZzPNueg8HYoTwN85 -Z3xM036/Qw9KhQVth+XDAqM+19e5KHkYcxg3d3ZI1HgY170eakaLBvMDN5ULoFOw -Is2PtwM2o9cjd5mfSuWttI6+fCqop8/l8cerG9iX2GH39p3iWwWoTZuYndAA9qYv -07YWajuQ1ESWKPjHYGTnMvu4xIzibC1mXd2M6u/IjNO6g426SKFaRDWQkx01gIV/ -CyKs9DgZoeMHkKZuPqZVOxOK+A/NrmrqHFsPIsrs5wk7QAVju5/X1skpn/UGQlmM -RwBaQULOs1FagA+54RXU6qUPW0YmhJ4xOB4gHHD1vjAKEsRZ7/6zcxMyOm+M1DbK -RTH4NWjVWpnY8XaVGdRhtTpH9MjycpKhF+D2Zdy2tQXtqu2GdcMnUedt13fn9xDu -P4PophE0ip/IMgn+kb4m9e+S+K9lldQl0B+4BcGWAqHelh2KuU0CAwEAAQKCAYEA -lKiWIYjmyRjdLKUGPTES9vWNvNmRjozV0RQ0LcoSbMMLDZkeO0UwyWqOVHUQ8+ib -jIcfEjeNJxI57oZopeHOO5vJhpNlFH+g7ltiW2qERqA1K88lSXm99Bzw6FNqhCRE -K8ub5N9fyfJA+P4o/xm0WK8EXk5yIUV17p/9zJJxzgKgv2jsVTi3QG2OZGvn4Oug -ByomMZEGHkBDzdxz8c/cP1Tlk1RFuwSgews178k2xq7AYSM/s0YmHi7b/RSvptX6 -1v8P8kXNUe4AwTaNyrlvF2lwIadZ8h1hA7tCE2n44b7a7KfhAkwcbr1T59ioYh6P -zxsyPT678uD51dbtD/DXJCcoeeFOb8uzkR2KNcrnQzZpCJnRq4Gp5ybxwsxxuzpr -gz0gbNlhuWtE7EoSzmIK9t+WTS7IM2CvZymd6/OAh1Fuw6AQhSp64XRp3OfMMAAC -Ie2EPtKj4islWGT8VoUjuRYGmdRh4duAH1dkiAXOWA3R7y5a1/y/iE8KE8BtxocB -AoHBAM8aiURgpu1Fs0Oqz6izec7KSLL3l8hmW+MKUOfk/Ybng6FrTFsL5YtzR+Ap -wW4wwWnnIKEc1JLiZ7g8agRETK8hr5PwFXUn/GSWC0SMsazLJToySQS5LOV0tLzK -kJ3jtNU7tnlDGNkCHTHSoVL2T/8t+IkZI/h5Z6wjlYPvU2Iu0nVIXtiG+alv4A6M -Hrh9l5or4mjB6rGnVXeYohLkCm6s/W97ahVxLMcEdbsBo1prm2JqGnSoiR/tEFC/ -QHQnbQKBwQDEu7kW0Yg9sZ89QtYtVQ1YpixFZORaUeRIRLnpEs1w7L1mCbOZ2Lj9 -JHxsH05cYAc7HJfPwwxv3+3aGAIC/dfu4VSwEFtatAzUpzlhzKS5+HQCWB4JUNNU -MQ3+FwK2xQX4Ph8t+OzrFiYcK2g0An5UxWMa2HWIAWUOhnTOydAVsoH6yP31cVm4 -0hxoABCwflaNLNGjRUyfBpLTAcNu/YtcE+KREy7YAAgXXrhRSO4XpLsSXwLnLT7/ -YOkoBWDcTWECgcBPWnSUDZCIQ3efithMZJBciqd2Y2X19Dpq8O31HImD4jtOY0V7 -cUB/wSkeHAGwjd/eCyA2e0x8B2IEdqmMfvr+86JJxekC3dJYXCFvH5WIhsH53YCa -3bT1KlWCLP9ib/g+58VQC0R/Cc9T4sfLePNH7D5ZkZd1wlbV30CPr+i8KwKay6MD -xhvtLx+jk07GE+E9wmjbCMo7TclyrLoVEOlqZMAqshgApT+p9eyCPetwXuDHwa3n -WxhHclcZCV7R4rUCgcAkdGSnxcvpIrDPOUNWwxvmAWTStw9ZbTNP8OxCNCm9cyDl -d4bAS1h8D/a+Uk7C70hnu7Sl2w7C7Eu2zhwRUdhhe3+l4GINPK/j99i6NqGPlGpq -xMlMEJ4YS768BqeKFpg0l85PRoEgTsphDeoROSUPsEPdBZ9BxIBlYKTkbKESZDGR -twzYHljx1n1NCDYPflmrb1KpXn4EOcObNghw2KqqNUUWfOeBPwBA1FxzM4BrAStp -DBINpGS4Dc0mjViVegECgcA3hTtm82XdxQXj9LQmb/E3lKx/7H87XIOeNMmvjYuZ -iS9wKrkF+u42vyoDxcKMCnxP5056wpdST4p56r+SBwVTHcc3lGBSGcMTIfwRXrj3 -thOA2our2n4ouNIsYyTlcsQSzifwmpRmVMRPxl9fYVdEWUgB83FgHT0D9avvZnF9 -t9OccnGJXShAIZIBADhVj/JwG4FbaX42NijD5PNpVLk1Y17OV0I576T9SfaQoBjJ -aH1M/zC4aVaS0DYB/Gxq7v8= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDFtLOteQlQojN7 +ztkux7m0hmGKkP1hh0hbKqTcD87jkLAqAwZWenjZMjCbbZ3vP+AObCIkYIKzPXY7 +Yi+H5M3O2mXIDxoHGjL/GWtoEyDNXvm9UC+MRuSOq2MaLHHQG0Rx2TxcYrMVUM7b +93rpN1LGRrCv1gISXM4EvEJooAR7Aadj0pG/o0fqDAdFjH6QZbhn1iZle+eGbjcf +dgH/H0F8dn1PPGoViHXicbsQ4kB6002Pf+aXP4b2QKAbflyNHEKHPHEOOTXrFjMd +c+bqKW24epEsMZI59qx9hU/4Rvp3/v+vEwTL7Nm7ilptzZn2cvGCW39LC0nNYLOz +kO3H8xwA75h6uykdB+WO/v2CKIK9M/ZO+9QNrmaokfKDamCk39b8hlCwNL6LsVpv +d3XTS5Wn4YWn92EqiltUJJoPo7pc7VTdWCg4zVFn4Q8Zh4NFNn/qTB8lEMgrsNTV +5cyZ7zhoBiUMSO45bmo2NsnE7ce/JUhlqe5uh0PT1MIBgTV+oDMCAwEAAQKCAYEA +udsy4gwblqK0tVnxz0lQqYV+os3EdO/BNHr1Oi7eNg2pngTz603812mYSjUVOHma +vtQmkH3twGQyBoc52Y1dcGzdK+IOfMjDUg7qao840ffL3I1J9ZwbdodlhZBsec94 +W3J1jP/4DDzICf8vm5g3h0+i/9m2Xt7BibAU2dg7/grC+lNUUoxDqaEfIOF/hW0q +muq1c8e0EisAROIh5FzUqhWVnWxU6eM7tuFlkuyu4whLLHB3LI466Lo+CTqT9M+v +jJYlvS5+AZW3qMBp6WOI8C+VIiBL178mo+Igkyyy5AYXcWeNkjp6ygRWvtWXIhCv +CI29mf+BP/54jAY0rQRXJ2UcSHXmM6PTDkE/L2OKeiY1Ou8gLOwun3yBVdbkXJMb +PWmUW4N8qSIJQ+vE2TDqmkqAT6m+ilzOXl1O+LLTvGyMnOiiSLXK9mC4ND3tqaQu +hvKivnI1doErcWUaIf1DHiJmLrGxrTCUKjCEoefqVq2/dDdtCfx7CqUvjl3DYKMB +AoHBAP+Vdi6D07gZFepEGCaJ+YH6cxEyO73CNnea/F1whVAzOv91kHS32jC9PAI3 +/wYlX+DLcN9mVF/q62V4SLZYfOxTPW4vWO0A45URe9s9Z795fdAcQ5jt3QFOVSnk +3XSaCkIOwckuwabGJi4+foiUEOnLLzQi1/g7x12dwejxVNhqhz5KFkOQPv8fQRed +sb5LVLYDeprsB2Vsx0fHwg4z9FvTIxLBeI7+sJD30lNpYZrCl/T9x4e1SV2Rwn2W +bghxgQKBwQDGBx07biZK9RB5g4qPl+G6vz0M+/KBfpwQbMYxSyct7u6gfGD9mWBO +qocIIr39Unac3kUL237Cn3HbgiGCRe7Mwd7XqnSSGWM5oWSlVQxEKTXYUlTbd9O9 +DKuyQGOl/AMEwD4ZbEOfQNmnd1U4nh1AV052FQY8Ry/atGFT9fApA/5X/bbenOwQ +YGDsokLzPf2BIDncpE+VNevUMoMI7EnySgjjfpL+cRld0qpLqBMo2h5VddeJ/5YM +1YcNfMQiw7MCgcEAwXqXuKa7A8aZvHpH/gS9CRRbP01TxFbdfLWrDeE8SnY9111c +Ob9kQTk/0D4rpK9uYXIgxD1m6iWghXQFN2TNTOnGuz7EhsYBgrt1k4Zsn5qND5oV +4hNPFsoB1nEW5EooMdGSCYaHuoSOKrvMdgAAvbu+xC0MaTJ3vfrK7Fik7h/WueTD +7emohuFWGVabU38bZZ5EljrPboxmX4Rs9uuFtG2lQ3GKnlVXvKaeZd6EsO9WsXPc +NHOcUmUhYokaSvIBAoHAGCxGJTsM8Zl4qVylTWH87A7sJOmccLJD2r1sdBf4cGL6 +PhzwugQ+/VtToGqdRo8Ka5u2Ufw5PQi5nVIFRSHERLpluW3VTQBMXHyXDJeVJ7zg +Fcf3E9NMxYcGbnvtrhVVSP8ulWvh1U7VQtwOSxsB9xixOzjVygXmkYvzVYxwBJG4 +OoV+DS6aomUhb8Fe6tJmX5zPc1+bV1t9ril8VVqCrFDdROfuiaDEt+8/Wnzp2dLG +YShBZ1cLugVWtw7D4nqBAoHAF29k64iAxY5Y4OOibVkqjUCPyqG2oxiXqgO7CxZp +FGUat5UtV2mIBlSENs1o5AZ1nPlgWtPtg0xVCaG2t/Rq7ugvUfAnAhUK6zX8FS+T +gCXE+7iKuuIJiCo13/iAwF/CLfuXvj4CZ71ta0wX9w99f1FcPEk0x+ytiyuWJK8K +tyubL34JwNrnkh/8e3LcV3L88Sk9ZmxeTz31f3cA3Fy2ZJOAUMD9dKXeKtY7azzt +MkhXedRsdLSKqMh0VGeGHoLS -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5c - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:9f:28:2f:37:41:ef:7f:64:63:16:62:16:e9:01: - 14:62:29:ca:3a:98:92:3d:08:d3:5e:69:fe:c0:f3: - d4:c4:fb:0e:58:dc:64:b0:4b:cb:b3:aa:9e:42:e9: - 07:9b:67:33:cd:b9:e8:3c:1d:8a:13:c0:df:39:67: - 7c:4c:d3:7e:bf:43:0f:4a:85:05:6d:87:e5:c3:02: - a3:3e:d7:d7:b9:28:79:18:73:18:37:77:76:48:d4: - 78:18:d7:bd:1e:6a:46:8b:06:f3:03:37:95:0b:a0: - 53:b0:22:cd:8f:b7:03:36:a3:d7:23:77:99:9f:4a: - e5:ad:b4:8e:be:7c:2a:a8:a7:cf:e5:f1:c7:ab:1b: - d8:97:d8:61:f7:f6:9d:e2:5b:05:a8:4d:9b:98:9d: - d0:00:f6:a6:2f:d3:b6:16:6a:3b:90:d4:44:96:28: - f8:c7:60:64:e7:32:fb:b8:c4:8c:e2:6c:2d:66:5d: - dd:8c:ea:ef:c8:8c:d3:ba:83:8d:ba:48:a1:5a:44: - 35:90:93:1d:35:80:85:7f:0b:22:ac:f4:38:19:a1: - e3:07:90:a6:6e:3e:a6:55:3b:13:8a:f8:0f:cd:ae: - 6a:ea:1c:5b:0f:22:ca:ec:e7:09:3b:40:05:63:bb: - 9f:d7:d6:c9:29:9f:f5:06:42:59:8c:47:00:5a:41: - 42:ce:b3:51:5a:80:0f:b9:e1:15:d4:ea:a5:0f:5b: - 46:26:84:9e:31:38:1e:20:1c:70:f5:be:30:0a:12: - c4:59:ef:fe:b3:73:13:32:3a:6f:8c:d4:36:ca:45: - 31:f8:35:68:d5:5a:99:d8:f1:76:95:19:d4:61:b5: - 3a:47:f4:c8:f2:72:92:a1:17:e0:f6:65:dc:b6:b5: - 05:ed:aa:ed:86:75:c3:27:51:e7:6d:d7:77:e7:f7: - 10:ee:3f:83:e8:a6:11:34:8a:9f:c8:32:09:fe:91: - be:26:f5:ef:92:f8:af:65:95:d4:25:d0:1f:b8:05: - c1:96:02:a1:de:96:1d:8a:b9:4d + 00:c5:b4:b3:ad:79:09:50:a2:33:7b:ce:d9:2e:c7: + b9:b4:86:61:8a:90:fd:61:87:48:5b:2a:a4:dc:0f: + ce:e3:90:b0:2a:03:06:56:7a:78:d9:32:30:9b:6d: + 9d:ef:3f:e0:0e:6c:22:24:60:82:b3:3d:76:3b:62: + 2f:87:e4:cd:ce:da:65:c8:0f:1a:07:1a:32:ff:19: + 6b:68:13:20:cd:5e:f9:bd:50:2f:8c:46:e4:8e:ab: + 63:1a:2c:71:d0:1b:44:71:d9:3c:5c:62:b3:15:50: + ce:db:f7:7a:e9:37:52:c6:46:b0:af:d6:02:12:5c: + ce:04:bc:42:68:a0:04:7b:01:a7:63:d2:91:bf:a3: + 47:ea:0c:07:45:8c:7e:90:65:b8:67:d6:26:65:7b: + e7:86:6e:37:1f:76:01:ff:1f:41:7c:76:7d:4f:3c: + 6a:15:88:75:e2:71:bb:10:e2:40:7a:d3:4d:8f:7f: + e6:97:3f:86:f6:40:a0:1b:7e:5c:8d:1c:42:87:3c: + 71:0e:39:35:eb:16:33:1d:73:e6:ea:29:6d:b8:7a: + 91:2c:31:92:39:f6:ac:7d:85:4f:f8:46:fa:77:fe: + ff:af:13:04:cb:ec:d9:bb:8a:5a:6d:cd:99:f6:72: + f1:82:5b:7f:4b:0b:49:cd:60:b3:b3:90:ed:c7:f3: + 1c:00:ef:98:7a:bb:29:1d:07:e5:8e:fe:fd:82:28: + 82:bd:33:f6:4e:fb:d4:0d:ae:66:a8:91:f2:83:6a: + 60:a4:df:d6:fc:86:50:b0:34:be:8b:b1:5a:6f:77: + 75:d3:4b:95:a7:e1:85:a7:f7:61:2a:8a:5b:54:24: + 9a:0f:a3:ba:5c:ed:54:dd:58:28:38:cd:51:67:e1: + 0f:19:87:83:45:36:7f:ea:4c:1f:25:10:c8:2b:b0: + d4:d5:e5:cc:99:ef:38:68:06:25:0c:48:ee:39:6e: + 6a:36:36:c9:c4:ed:c7:bf:25:48:65:a9:ee:6e:87: + 43:d3:d4:c2:01:81:35:7e:a0:33 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 8F:EA:1D:E3:33:5C:00:16:B3:8B:6F:6B:6F:D3:4C:CB:B5:CB:7C:55 + 85:75:10:25:D0:2C:80:50:24:1A:5B:57:70:DE:B5:CB:71:A9:3B:7B X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 27:f5:8c:59:10:f4:c6:e7:28:00:bf:ba:8d:7b:13:03:f1:1c: - a6:5f:b3:06:55:a4:22:b9:db:b2:d5:46:bd:f7:0c:dd:43:6e: - b4:79:65:67:21:0c:2a:55:ee:40:8e:85:9f:9f:47:bb:0a:2a: - 4d:b6:64:74:98:a0:7f:ae:dc:f1:2e:db:42:77:18:e0:75:8b: - 26:35:68:c3:41:ed:6b:c8:77:72:6f:6a:9a:5d:55:69:02:fd: - 5a:54:c8:57:cb:b0:65:03:16:e2:0f:00:39:99:66:a0:9b:88: - 93:17:e2:5a:2d:79:35:5f:97:57:78:c4:af:f5:99:5e:86:ab: - d3:11:ad:1a:a2:0d:fa:52:10:b9:fe:bf:9d:ce:33:d9:86:b2: - 9c:16:f8:d6:75:08:8a:db:0a:e5:b4:2b:16:7f:b4:f9:2a:9f: - c3:d2:77:d7:cd:65:1e:f4:6c:1e:eb:59:b9:f0:ae:5f:a4:1f: - cc:4a:c4:b9:7a:a9:d9:6b:32:68:3b:e1:65:b0:84:b7:90:c4: - ae:fe:f4:37:4f:21:a0:de:9f:3a:b1:e5:cc:16:04:66:3f:0b: - 41:dc:42:3d:20:3e:ec:b7:95:2b:35:57:fa:be:7f:b6:3a:ba: - ca:4f:58:fe:75:3e:08:89:2c:8c:b0:5d:2e:f9:89:10:2b:f9: - 41:46:4f:3c:00:b7:27:d3:65:24:28:17:23:26:31:42:ea:7e: - 4e:93:e4:7b:68:54:ca:9f:46:f3:ef:2b:e9:85:0c:b5:84:b2: - d5:35:34:80:75:2b:f0:91:23:b8:08:01:8e:b9:0a:54:d4:fb: - 34:52:fe:d9:45:f0:80:3b:b6:c1:6f:82:d1:1f:f2:3b:08:f6: - 46:a6:96:27:61:4b:58:32:7a:0e:1d:59:c5:44:ad:5e:1a:79: - 33:c1:d4:05:2f:4a:d3:d8:42:42:8d:33:e3:63:ca:d5:87:97: - 9b:4d:b8:1a:03:34:bb:1c:d2:02:3f:59:23:e2:23:80:88:63: - c2:f0:a2:63:a8:8b + 95:f3:56:bb:d5:8c:70:bd:d1:de:da:63:b0:29:d7:db:60:27: + d6:59:fd:61:1b:30:c6:d0:5d:73:7d:34:e1:68:e3:28:a6:89: + e6:60:bd:89:d3:0e:f4:72:ad:72:76:f8:86:21:fd:75:3c:f8: + 6d:be:9c:04:e1:82:03:69:6c:ae:d0:55:ba:5e:f2:ca:f5:0f: + 8e:d6:d9:8d:c8:56:46:f4:f8:ac:74:2a:19:7b:8e:47:70:1f: + fb:fb:bd:69:02:a1:a5:4a:6e:21:1c:04:14:15:55:bf:bf:24: + 43:c8:17:03:be:3e:2c:ea:db:c8:af:1d:fd:52:df:d6:15:49: + 9e:c2:44:69:ef:f1:45:43:83:b2:1e:cf:14:1c:13:3f:fe:9c: + 71:cb:e7:1b:18:56:36:a7:af:44:f1:0b:a1:79:44:46:f9:43: + 46:29:d8:b0:ca:49:4d:65:60:d3:f6:8e:74:bc:62:9e:1e:8d: + 4b:29:9a:b4:0d:f0:a2:77:5b:34:e4:11:2f:a7:25:c5:e5:07: + 76:12:ae:be:75:73:15:e4:0a:7d:53:38:56:3f:79:6d:6e:ca: + ed:80:ab:56:ed:7e:8b:1c:e7:e3:d4:62:30:22:70:e7:29:b2: + 03:3c:fe:fa:3d:f0:36:c0:4d:11:a2:99:d3:29:31:27:b8:c5: + b8:15:a3:3c:4f:9b:73:5e:2b:b2:fb:cb:fd:75:47:b8:17:bd: + 21:d8:e6:c1:b9:ff:73:81:d8:25:08:6d:08:5e:1c:a5:83:50: + de:67:e6:da:d0:8e:5a:d3:f2:2a:b1:3f:b8:80:21:07:6a:71: + 15:6d:05:eb:51:b3:59:8d:d4:15:46:7e:02:a8:13:01:16:99: + bd:03:cc:70:71:2a:23:16:78:af:d1:d5:01:9d:04:b4:63:93: + 9a:04:3a:92:2e:e6:7e:73:93:a5:fe:50:9b:bd:0e:ea:54:86: + 6f:7c:e5:14:77:fe:c2:28:5a:4a:0e:d7:2d:8c:e9:ed:61:29: + b2:53:ff:6c:04:bc -----BEGIN CERTIFICATE----- MIIF8TCCBFmgAwIBAgIJAMstgJlaaVJcMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxv -Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJ8oLzdB739k -YxZiFukBFGIpyjqYkj0I015p/sDz1MT7DljcZLBLy7OqnkLpB5tnM8256DwdihPA -3zlnfEzTfr9DD0qFBW2H5cMCoz7X17koeRhzGDd3dkjUeBjXvR5qRosG8wM3lQug -U7AizY+3Azaj1yN3mZ9K5a20jr58Kqinz+Xxx6sb2JfYYff2neJbBahNm5id0AD2 -pi/TthZqO5DURJYo+MdgZOcy+7jEjOJsLWZd3Yzq78iM07qDjbpIoVpENZCTHTWA -hX8LIqz0OBmh4weQpm4+plU7E4r4D82uauocWw8iyuznCTtABWO7n9fWySmf9QZC -WYxHAFpBQs6zUVqAD7nhFdTqpQ9bRiaEnjE4HiAccPW+MAoSxFnv/rNzEzI6b4zU -NspFMfg1aNVamdjxdpUZ1GG1Okf0yPJykqEX4PZl3La1Be2q7YZ1wydR523Xd+f3 -EO4/g+imETSKn8gyCf6Rvib175L4r2WV1CXQH7gFwZYCod6WHYq5TQIDAQABo4IB +Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMW0s615CVCi +M3vO2S7HubSGYYqQ/WGHSFsqpNwPzuOQsCoDBlZ6eNkyMJttne8/4A5sIiRggrM9 +djtiL4fkzc7aZcgPGgcaMv8Za2gTIM1e+b1QL4xG5I6rYxoscdAbRHHZPFxisxVQ +ztv3euk3UsZGsK/WAhJczgS8QmigBHsBp2PSkb+jR+oMB0WMfpBluGfWJmV754Zu +Nx92Af8fQXx2fU88ahWIdeJxuxDiQHrTTY9/5pc/hvZAoBt+XI0cQoc8cQ45NesW +Mx1z5uopbbh6kSwxkjn2rH2FT/hG+nf+/68TBMvs2buKWm3NmfZy8YJbf0sLSc1g +s7OQ7cfzHADvmHq7KR0H5Y7+/YIogr0z9k771A2uZqiR8oNqYKTf1vyGULA0voux +Wm93ddNLlafhhaf3YSqKW1Qkmg+julztVN1YKDjNUWfhDxmHg0U2f+pMHyUQyCuw +1NXlzJnvOGgGJQxI7jluajY2ycTtx78lSGWp7m6HQ9PUwgGBNX6gMwIDAQABo4IB wDCCAbwwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E -FgQUj+od4zNcABazi29rb9NMy7XLfFUwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHK -b5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m +FgQUhXUQJdAsgFAkGltXcN61y3GpO3swfQYDVR0jBHYwdIAUs4qgorpx8agkedSk +WyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m dHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMst gJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0 Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcw AYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYD VR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 -Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACf1jFkQ9MbnKAC/ -uo17EwPxHKZfswZVpCK527LVRr33DN1DbrR5ZWchDCpV7kCOhZ+fR7sKKk22ZHSY -oH+u3PEu20J3GOB1iyY1aMNB7WvId3JvappdVWkC/VpUyFfLsGUDFuIPADmZZqCb -iJMX4loteTVfl1d4xK/1mV6Gq9MRrRqiDfpSELn+v53OM9mGspwW+NZ1CIrbCuW0 -KxZ/tPkqn8PSd9fNZR70bB7rWbnwrl+kH8xKxLl6qdlrMmg74WWwhLeQxK7+9DdP -IaDenzqx5cwWBGY/C0HcQj0gPuy3lSs1V/q+f7Y6uspPWP51PgiJLIywXS75iRAr -+UFGTzwAtyfTZSQoFyMmMULqfk6T5HtoVMqfRvPvK+mFDLWEstU1NIB1K/CRI7gI -AY65ClTU+zRS/tlF8IA7tsFvgtEf8jsI9kamlidhS1gyeg4dWcVErV4aeTPB1AUv -StPYQkKNM+NjytWHl5tNuBoDNLsc0gI/WSPiI4CIY8LwomOoiw== +Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAJXzVrvVjHC90d7a +Y7Ap19tgJ9ZZ/WEbMMbQXXN9NOFo4yimieZgvYnTDvRyrXJ2+IYh/XU8+G2+nATh +ggNpbK7QVbpe8sr1D47W2Y3IVkb0+Kx0Khl7jkdwH/v7vWkCoaVKbiEcBBQVVb+/ +JEPIFwO+Pizq28ivHf1S39YVSZ7CRGnv8UVDg7IezxQcEz/+nHHL5xsYVjanr0Tx +C6F5REb5Q0Yp2LDKSU1lYNP2jnS8Yp4ejUspmrQN8KJ3WzTkES+nJcXlB3YSrr51 +cxXkCn1TOFY/eW1uyu2Aq1btfosc5+PUYjAicOcpsgM8/vo98DbATRGimdMpMSe4 +xbgVozxPm3NeK7L7y/11R7gXvSHY5sG5/3OB2CUIbQheHKWDUN5n5trQjlrT8iqx +P7iAIQdqcRVtBetRs1mN1BVGfgKoEwEWmb0DzHBxKiMWeK/R1QGdBLRjk5oEOpIu +5n5zk6X+UJu9DupUhm985RR3/sIoWkoO1y2M6e1hKbJT/2wEvA== -----END CERTIFICATE----- diff --git a/Lib/test/keycert4.pem b/Lib/test/keycert4.pem index d1ebb82486de2..1003d67fd075e 100644 --- a/Lib/test/keycert4.pem +++ b/Lib/test/keycert4.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDGjpiHzq7ghxhM -ZzrnRsGBC/cmw8EREIdbqlrz/l8BFaWeipvO5Hb/MyU8xs2zLUrqIr2JNf+Eii8Y -m4bYmZclFra4jomaiSlxTZOe3dMV8m4vAq4eT2mSfZZC1+XAutqdz7WhHxhMVEm3 -AyTWvTC3qCbnlbX5VIoQUwFrsSWqDiHyaGdK3rrOTKFUKM8YPiq/BZkm6A4eiFci -5wd/SPD+w0pIscZbQW1MUr5bs54uylWaUmtfI8KJt6BDZQ/uA06c6i863sSCEI6L -gq+wyikeJGNMxZMfgu3dzfv4BiZBQX0ZhiRvqseDSdPcuVa2Ifb6CFlg298neweY -4EAIE1O+uqo5h8FF1aUOMZpQEZuzsp9R/TAMBHX1YmVjG/kRdBeaHe3whzB1Pfue -PIX2ZTMmLNYbYbfnmxhk1nn8aAvoT98pNw8y3/2k2KNsu24n9uSkkxAoqJ19WKwm -mL8MpJKAzLv45tRvhN+QLtnRdu+LJ9m29npQHFmYLbdqRfmidnMCAwEAAQKCAYBd -w1C8MRnb5W/QBJ+IP515NxFLOP2e9VM2MkgpGGH8vSAssf/Jv5GCCcD35lmU1zqd -PjKK7PjwueBrmmYfOshpN0Sp+oV4eHUdkCi5yL65inYFtRpMLewIxU2D2zgfvx0l -kMSQhYKP6O22gsGOtmCfGcTlb4kzaHyaINh25nyGxY26TxsX+/3zFbTJbUv+grzk -39vmx4aDXJbpYHfl36gOZmJZ2bl1tnvKovhJjZSRO/MYoPsbPmPLbO89ZCgVmXFc -GVkb5Cram6i3iyutSDjxWN7Fb8uy8pFLPGAXZgF7pQoXPSEHZe8GEWBnWSC9KaDa -uM9Ir847/Muy1ceCmxKcI2WrSjoH2AhPcmHgvbPE9Mynr6+uzReSP3q7Wh9PHm23 -oFx3DwdCfmjysnpAMBawNmJdWyxVDbZ6eyrhp17ADpsMaDTynZ+fJjgMr+MmWtbU -YSRD0wWtl/DrzsaePZsOjCpKYJyulC+rh9/Zz1aiwrGWPbgEAzDrD6Q1Zp0mUCEC -gcEA+XskmGIB9rRPy+YQmRgzQ555PsjLWsnQsNktP6KBhlQjFKJZXRZ0DxDTS7h8 -NrJrUDBmwfsgzggVbeO55VP5FGwD6DNeO/Bz++Fdevh8uKQFHDfk4sbIUPS91qw4 -s7OW7PR7C7Jf7Dnjmsn42o2lO4FsbcEn2F+PHOvoLl/OrSx73lS/RkdOEItW8d8/ -ExRohylnba/I2vCE9bNZd4DGjMW87j/THKPadDZWEqWggcrjY8x6ibSQGm2n2Tka -8B+vAoHBAMu+zl8kqFlYDG24dGfVpMaOYj5Osj0cV5f7O2pZ15sCevjiqoKGHH7G -O8EiI5pRBZ893+Fsx6YWmcKue88lfGvaoQjV0LUbfMfX/FoD39w/ZLx31yKEiFuc -KvMiRV5mO3kQiHBVX9vamzr5NeaErccXY9LnhaKOMX9blgiDQZH7fc3RhodcFWrC -9yfX6ryfidpPnRvK7Ops7hVnFKyyS4FaAarnzH1B2WcVcD4lYYxhMc8VXeU3eKOh -j1fI/F5ifQKBwQDpCjB670HqUzAexL9IYqSwSz3yedoK6m24ZIWx5XicI8fJJIXZ -QHoVAKB/IMtWxH8dnri+Bnj0O/TYe1pQb4pBm0xjAGjMEKYm6LNLhQXr67qiS0vQ -0eKYTKVv+9vTcLRQj2bI3Exh+wkys+tzK9DmrtS8CSvRICIs3+g4OWJzvRPP8NXj -LgQrzBzhPqpKhkvFxdVJTmSOrxFj+a5exLmzEZqT6qanIB+VYpQwQuqVkxGpTX5B -V5ssNLYPYRpapx0CgcByCtQixzcAA1u5knR9pkT76ris3YnA0Ptqk3I3XiBjoGjK -pL0CICUVBMpvmTdKai12a8DDwgqiOaZJJTchxH63NAHNGzkeFkuq5IdYrzB/bHBr -WbzukjZs6KXVv4oKg7ioVAu6rN7iBaO7x8BWzk8i0EHMzFCto1+rRM1e6HEsUBOj -v7LIU0+dmZGUGLRIbhhQPR3Yb6ZatSwyiKc23vmKZqHmUqbQOaqBm6te7beDRugF -XJVY9sqs9IJyhYpVHlUCgcAPoslwYKeAXagsxdQrH3D9VJDXVOHWKMBqQZDio5dB -Q80uWpuxtt6nhZkQO1JIWnYb6v+zbDbcgjByBIDuxCdBW9d+QQnanKmVyrXguK91 -C3OcHHOmSduFdWC3/zYW1mW97Tz1sXyam2hly1u3L5kW+GnE1hr9VVPjQNrO9+Ge -qW0coaJqKY78q3Rm2dtyZeJSFFI1o/DQ3blyItsFpg/QrR+a5XrS6Nw2ZLIL4Azo -J1CTgMwjhwlMNCI4t4dkHd0= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQC34y3S6iXdmdvd +M/2aFBe6CvRvZwhh1huGl7IQRtdoakPqMLlEdNHJtNeF5M27xLei+p4wt7N1Jyi0 +2keHQb1m9TqH5AruOkE2ti+15zEoKoU9aWydTiH+epKTT0yjg2NcKQjRUaWcbhzB +H4EMKuCIlzIIz8/EIKkOqhCDwq6+Fv3Ays+z7Bz+yR80ixivKu/l7SjxQ7z7R/kC +I7OViRcIO5QBQPj7VLvCTz4VA6u/LdXngK2HNuau6WXm5yNNQbqrB11AEJcYZf/c +VrneV4F+ZjLloAKgSn9GB8eWOyilTQ18TcKd+H2icipRaP/+QR/KPx5GK/SXU3my +qm62QOGI7t/5ktVdjGhs6tHZxw1SRiipiLYWbtVRrSxa4wYlgpgoUwvrvvtC5kAN +nTw1VGWsxcs+6a7+PocYnJiq7k4b5OAUb3Ryvl9DLAMy8NqpRWo4cHD/XQ3FCYwF +HlOSgx/dL5Se0i3dW1KzbP6OvaNg6nl/1EXPUsJ1ATS8nzvzhccCAwEAAQKCAYEA +nD3GvaJ9MeB802JNZBEWZ9jO/6jHknldQeq6POI0PF+t/NoRUH0BkyS4yucxdw0a +CrxulG5BaJUxHRkqFV5iE4zhgnzcXLXamyYJO8GIHtyiASAGTVIJyDNVPxztvTDx +x2iGOXPqBxP4Eo82EqSLywLMXHhVzAsEGZWeGpXb61+Vk62+9Nz1dfZlMTvOaWdO +Fkp/sx8e/1KT3KGBANlOXIxioP4Xj1Tbg6nY0fogf3vud5j52B1pu8xL7PkPIaFq +DEGz3XvWhBF/+Cs5iDeYz8eQpfQig7HdHVn2D8dZmzQgpLw1yGbPAnqrgopWfm7R +MqiyFe82p2t+vfSoG5jz28XxPtzBJV3ljxKxlbnclqu/CAYSjzaYohDzyhjdZOZI +r9DOfWOqu01Ha3EEsApn95fusHHGTH2FOy0u61FSTrfLfqsLw9WRJPWleirKikhf +SZzi223QrmzZMtuCF7VgTx3ghDhBmFD8uzVVQ1SwPZ8CgftRkFcn1llXIAfJ3iHB +AoHBAOg3DOIdtUVgpjMKhpAyuH54fYvGl7afIMNbKRle0kCiP45wtGJ43RPMqiR8 +1rxZB3+iapICI/lnhk3O7vVRkR64yiqQBcl/hXZ1BhyD6iDXWYmm5mcnymcoqfwc +p9TfzEPyGPb3SM2YlI0cSPRqM/jDvGvnDeKIpzEKvUlwJ59WoN2HOHTIXf+XbN5n +unpuTt6YKJvc48DrXsPnUzkCmUfbOmgHfeb9/qBs/8kY4YJMsZEjqf88o7mCJCIy +BtDxTwKBwQDKuOwE8e0GIA01ZHd6RfR+ZCvmp2oauxal4EJsBx+ZZnhEWGaSm1fE +Bf/ih074ghcSKoSrdYpD1xGZ6fGVWMx3jcL11yLDOUiiPDJsm8hUBZ0IW1qXyfCP +l7xy1bUkWwPXdmFuGp1exrcjooKrFNuTdYiK4nQZSKuCfXQRADrmEJmM+gYwhqI7 +4XsYo848B9A4hbY6RLEox4uvo/RmafY0iR0PMhVEc+ydNLKB/4LpahZqBQ4kTpMv +o4+rEvYt1gkCgcB08gx177ozx1nMCLf99N0/LBUmCIytNvR8DfPjyAIg9NUHOjFO +CkpkR0VEfO50Cm4hVD1RbOyLFRzpIJbtSvfHvg5qYv/XG3auUn8Sa0jE408/aKNO +PhbL3wnEYvYO2ep4KXtzHNQ4XmgprJ39IWMtG/5PZRx0ApgYtazgSDBcKXd4OTow +bhwQtUTpuNmMAPONXJnO7O5yYNbn2B7sbiedrYV7kJJSe4X5awtiTjp7sX4XdxuM +5BAcQ7NI2WLfZTcCgcBp/X9hIoATmMRvKwUQx+yJ/KO7Z8KhETpJJdR0mNDbqmit +Cy8t7cxYb+6WqLoQUivv0o0k/EJ7L8JDH76woAnfZB4P3RiOy69/K0wN3vFBhOHS +kbju7aU53lKoE7YuuOtsRrewEng/KlRsbDY3bqNTGLt4KegbpBQQGLmLffxNd1Zh +EAQWcP33ou9yNYrJdihWtQpOssWRlash/O32ceZJF3s7C6t068tFclz2fPocQdxQ +OC5pqy9nU/P0tOhDlMkCgcEAosaBJLIeAYlOU0+2uSx5g5mIqOOTyrDEmqqad6T/ +wkB7vW2QaoDvLL22Yrzdn9vQ0V0rqzhVtan7sq5pn/BQJAueZYN8rFxS3uuW+UQk +Nsc4GLJzU8Az/2DvqEIrnE7zRc5E1FOI9gKLrBlpJB2o0hVcBznDe05Gax6Kjqbm +jHqzyU73SpxpEy3OesClCeCQIMr47HaL9aSqaEX4U9bMpgHi0HgTTHqvJ5pch0hY +dYl+WAE9LAyF1DF29BirEXVw -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5d - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=fakehostname Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c6:8e:98:87:ce:ae:e0:87:18:4c:67:3a:e7:46: - c1:81:0b:f7:26:c3:c1:11:10:87:5b:aa:5a:f3:fe: - 5f:01:15:a5:9e:8a:9b:ce:e4:76:ff:33:25:3c:c6: - cd:b3:2d:4a:ea:22:bd:89:35:ff:84:8a:2f:18:9b: - 86:d8:99:97:25:16:b6:b8:8e:89:9a:89:29:71:4d: - 93:9e:dd:d3:15:f2:6e:2f:02:ae:1e:4f:69:92:7d: - 96:42:d7:e5:c0:ba:da:9d:cf:b5:a1:1f:18:4c:54: - 49:b7:03:24:d6:bd:30:b7:a8:26:e7:95:b5:f9:54: - 8a:10:53:01:6b:b1:25:aa:0e:21:f2:68:67:4a:de: - ba:ce:4c:a1:54:28:cf:18:3e:2a:bf:05:99:26:e8: - 0e:1e:88:57:22:e7:07:7f:48:f0:fe:c3:4a:48:b1: - c6:5b:41:6d:4c:52:be:5b:b3:9e:2e:ca:55:9a:52: - 6b:5f:23:c2:89:b7:a0:43:65:0f:ee:03:4e:9c:ea: - 2f:3a:de:c4:82:10:8e:8b:82:af:b0:ca:29:1e:24: - 63:4c:c5:93:1f:82:ed:dd:cd:fb:f8:06:26:41:41: - 7d:19:86:24:6f:aa:c7:83:49:d3:dc:b9:56:b6:21: - f6:fa:08:59:60:db:df:27:7b:07:98:e0:40:08:13: - 53:be:ba:aa:39:87:c1:45:d5:a5:0e:31:9a:50:11: - 9b:b3:b2:9f:51:fd:30:0c:04:75:f5:62:65:63:1b: - f9:11:74:17:9a:1d:ed:f0:87:30:75:3d:fb:9e:3c: - 85:f6:65:33:26:2c:d6:1b:61:b7:e7:9b:18:64:d6: - 79:fc:68:0b:e8:4f:df:29:37:0f:32:df:fd:a4:d8: - a3:6c:bb:6e:27:f6:e4:a4:93:10:28:a8:9d:7d:58: - ac:26:98:bf:0c:a4:92:80:cc:bb:f8:e6:d4:6f:84: - df:90:2e:d9:d1:76:ef:8b:27:d9:b6:f6:7a:50:1c: - 59:98:2d:b7:6a:45:f9:a2:76:73 + 00:b7:e3:2d:d2:ea:25:dd:99:db:dd:33:fd:9a:14: + 17:ba:0a:f4:6f:67:08:61:d6:1b:86:97:b2:10:46: + d7:68:6a:43:ea:30:b9:44:74:d1:c9:b4:d7:85:e4: + cd:bb:c4:b7:a2:fa:9e:30:b7:b3:75:27:28:b4:da: + 47:87:41:bd:66:f5:3a:87:e4:0a:ee:3a:41:36:b6: + 2f:b5:e7:31:28:2a:85:3d:69:6c:9d:4e:21:fe:7a: + 92:93:4f:4c:a3:83:63:5c:29:08:d1:51:a5:9c:6e: + 1c:c1:1f:81:0c:2a:e0:88:97:32:08:cf:cf:c4:20: + a9:0e:aa:10:83:c2:ae:be:16:fd:c0:ca:cf:b3:ec: + 1c:fe:c9:1f:34:8b:18:af:2a:ef:e5:ed:28:f1:43: + bc:fb:47:f9:02:23:b3:95:89:17:08:3b:94:01:40: + f8:fb:54:bb:c2:4f:3e:15:03:ab:bf:2d:d5:e7:80: + ad:87:36:e6:ae:e9:65:e6:e7:23:4d:41:ba:ab:07: + 5d:40:10:97:18:65:ff:dc:56:b9:de:57:81:7e:66: + 32:e5:a0:02:a0:4a:7f:46:07:c7:96:3b:28:a5:4d: + 0d:7c:4d:c2:9d:f8:7d:a2:72:2a:51:68:ff:fe:41: + 1f:ca:3f:1e:46:2b:f4:97:53:79:b2:aa:6e:b6:40: + e1:88:ee:df:f9:92:d5:5d:8c:68:6c:ea:d1:d9:c7: + 0d:52:46:28:a9:88:b6:16:6e:d5:51:ad:2c:5a:e3: + 06:25:82:98:28:53:0b:eb:be:fb:42:e6:40:0d:9d: + 3c:35:54:65:ac:c5:cb:3e:e9:ae:fe:3e:87:18:9c: + 98:aa:ee:4e:1b:e4:e0:14:6f:74:72:be:5f:43:2c: + 03:32:f0:da:a9:45:6a:38:70:70:ff:5d:0d:c5:09: + 8c:05:1e:53:92:83:1f:dd:2f:94:9e:d2:2d:dd:5b: + 52:b3:6c:fe:8e:bd:a3:60:ea:79:7f:d4:45:cf:52: + c2:75:01:34:bc:9f:3b:f3:85:c7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 52:E0:93:AA:52:55:B7:BB:E7:A8:E0:8C:DE:41:2E:F4:07:F0:36:FB + C8:BD:A8:B4:C0:F2:32:10:73:47:9C:48:81:32:F8:BA:BB:26:84:97 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 29:d2:3f:82:3f:c1:38:35:a6:bd:81:10:fe:64:ec:ff:7e:e1: - c6:6f:7f:86:65:f9:31:6f:fb:ef:32:4e:2f:87:c8:42:de:6c: - 8d:b8:06:08:8f:37:70:95:7d:e1:40:d4:82:2b:8d:b3:4a:fd: - 34:c5:9e:df:ff:01:53:4a:4f:08:f4:58:e1:74:fc:78:e3:3e: - 71:a7:5e:66:07:ea:d2:04:31:e2:75:a8:4c:80:17:86:92:20: - d2:32:a7:9a:65:8b:1a:5f:f1:4c:c8:50:6d:00:fc:99:bf:69: - b3:48:f3:45:5a:ee:35:50:14:b8:f3:92:92:c6:9f:0e:5d:eb: - 0d:e8:ec:f2:a4:09:6b:dc:66:2b:fc:df:4c:fc:65:a1:ae:d3: - b5:88:6a:a4:e7:08:1c:94:49:e0:b8:c1:04:8c:21:09:6c:55: - 4b:2c:97:10:f1:8c:6c:d0:bb:ba:8d:93:e8:47:8b:4d:8e:7d: - 7d:85:53:18:c8:f8:f4:8f:67:3a:b1:aa:3e:18:34:6c:3a:e6: - a6:c7:2f:be:83:38:f5:d5:e5:d2:17:28:61:6c:b6:49:99:21: - 69:a4:a8:b6:94:76:fd:18:ad:35:52:45:64:fb:f1:5d:8e:bb: - c0:21:2e:59:55:24:af:bb:8f:b2:0a:7b:17:f0:34:97:8e:68: - a9:f2:d0:3e:f6:73:82:f8:7c:4e:9a:70:7d:d6:b3:8c:cc:85: - 04:5c:02:8f:74:da:88:3a:20:a8:7e:c2:9e:b0:dd:56:1f:ce: - cd:42:16:c6:14:91:ad:30:e0:dc:76:f2:2c:56:ea:38:45:d8: - c0:3e:b8:90:fa:f3:38:99:ec:44:07:35:8f:69:62:0c:f9:ef: - b7:9d:e5:15:42:6e:fb:fe:4c:ff:e8:94:5a:1a:b0:80:b2:0e: - 17:3d:e1:87:a8:08:84:93:74:68:8d:29:df:ca:0b:6a:44:32: - 8a:51:3b:d6:38:db:bd:e3:2a:1b:5e:20:48:81:82:19:91:c6: - 87:8c:0f:cd:51:ea + 76:87:76:4d:e4:0f:88:bf:2c:f3:58:67:c0:97:6c:cd:59:18: + 82:83:4c:04:19:a5:6d:aa:fa:64:3d:49:32:3e:e1:56:95:b2: + 13:f7:cf:d3:11:b0:72:b7:5b:e7:d7:85:69:51:3c:b6:54:80: + 45:2f:28:10:21:20:b9:ba:e9:27:5a:b7:3f:82:b7:69:f5:46: + f5:bf:a2:8b:17:7f:f2:14:d1:46:97:b5:8b:47:fb:9f:e8:5c: + 05:0e:9d:11:bd:7c:9a:03:84:0b:ca:29:66:4a:ca:0d:6f:09: + 1e:7a:27:c1:7f:03:96:70:8d:18:a5:2f:a4:98:a5:19:aa:8c: + 5d:1e:8c:3e:bb:6d:3b:c0:33:c0:15:e1:bd:09:3d:9f:e8:dc: + 12:d4:cb:44:1d:06:f5:e8:d6:4e:a1:2d:5c:9f:5d:1f:5b:2a: + c3:4d:40:8d:da:d1:78:80:d0:c6:31:72:10:48:8a:e9:10:7a: + 13:30:11:b2:9e:67:0e:ed:a1:aa:ec:73:2d:f0:b8:8a:22:75: + 0f:30:69:5c:50:7e:91:ce:da:91:c7:70:8c:65:ff:f6:58:fb: + 00:bd:45:cc:e2:e4:e3:e5:16:36:7d:f3:a2:4a:9c:45:ff:d9: + a5:16:e0:2f:b5:5b:6c:e6:8a:13:15:48:73:bd:7c:80:33:c3: + d4:3b:3a:1d:85:0e:a4:f7:f7:fb:48:0c:e9:a0:4b:5e:8a:5c: + 67:f8:25:02:6f:cd:72:c1:aa:5a:93:64:7c:14:20:43:e0:13: + 7f:0d:e1:0d:61:5e:2e:2c:cd:7a:2e:2a:ae:b6:75:6a:5f:a0: + 1a:9b:b6:67:2d:b0:a5:1c:54:bc:8c:70:7e:15:2b:c0:50:e3: + 03:bb:a4:a5:fc:45:01:c9:3f:a7:b8:18:dc:3e:08:07:a1:9b: + f5:bd:95:bd:49:e8:10:7c:91:7d:2d:c4:c2:98:b6:b7:51:69: + d7:0a:68:40:b5:0f:85:a0:a9:67:77:c6:68:cb:0e:58:34:b3: + 58:e7:c8:7c:09:67 -----BEGIN CERTIFICATE----- MIIF9zCCBF+gAwIBAgIJAMstgJlaaVJdMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZh -a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMaOmIfO -ruCHGExnOudGwYEL9ybDwREQh1uqWvP+XwEVpZ6Km87kdv8zJTzGzbMtSuoivYk1 -/4SKLxibhtiZlyUWtriOiZqJKXFNk57d0xXybi8Crh5PaZJ9lkLX5cC62p3PtaEf -GExUSbcDJNa9MLeoJueVtflUihBTAWuxJaoOIfJoZ0reus5MoVQozxg+Kr8FmSbo -Dh6IVyLnB39I8P7DSkixxltBbUxSvluzni7KVZpSa18jwom3oENlD+4DTpzqLzre -xIIQjouCr7DKKR4kY0zFkx+C7d3N+/gGJkFBfRmGJG+qx4NJ09y5VrYh9voIWWDb -3yd7B5jgQAgTU766qjmHwUXVpQ4xmlARm7Oyn1H9MAwEdfViZWMb+RF0F5od7fCH -MHU9+548hfZlMyYs1htht+ebGGTWefxoC+hP3yk3DzLf/aTYo2y7bif25KSTECio -nX1YrCaYvwykkoDMu/jm1G+E35Au2dF274sn2bb2elAcWZgtt2pF+aJ2cwIDAQAB +a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALfjLdLq +Jd2Z290z/ZoUF7oK9G9nCGHWG4aXshBG12hqQ+owuUR00cm014XkzbvEt6L6njC3 +s3UnKLTaR4dBvWb1OofkCu46QTa2L7XnMSgqhT1pbJ1OIf56kpNPTKODY1wpCNFR +pZxuHMEfgQwq4IiXMgjPz8QgqQ6qEIPCrr4W/cDKz7PsHP7JHzSLGK8q7+XtKPFD +vPtH+QIjs5WJFwg7lAFA+PtUu8JPPhUDq78t1eeArYc25q7pZebnI01BuqsHXUAQ +lxhl/9xWud5XgX5mMuWgAqBKf0YHx5Y7KKVNDXxNwp34faJyKlFo//5BH8o/HkYr +9JdTebKqbrZA4Yju3/mS1V2MaGzq0dnHDVJGKKmIthZu1VGtLFrjBiWCmChTC+u+ ++0LmQA2dPDVUZazFyz7prv4+hxicmKruThvk4BRvdHK+X0MsAzLw2qlFajhwcP9d +DcUJjAUeU5KDH90vlJ7SLd1bUrNs/o69o2DqeX/URc9SwnUBNLyfO/OFxwIDAQAB o4IBwzCCAb8wFwYDVR0RBBAwDoIMZmFrZWhvc3RuYW1lMA4GA1UdDwEB/wQEAwIF oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd -BgNVHQ4EFgQUUuCTqlJVt7vnqOCM3kEu9AfwNvswfQYDVR0jBHYwdIAU3b/K2ubR -NLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo +BgNVHQ4EFgQUyL2otMDyMhBzR5xIgTL4ursmhJcwfQYDVR0jBHYwdIAUs4qgorpx +8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo b24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZl coIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6 Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1Bggr BgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2Nz cC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5l -dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACnSP4I/ -wTg1pr2BEP5k7P9+4cZvf4Zl+TFv++8yTi+HyELebI24BgiPN3CVfeFA1IIrjbNK -/TTFnt//AVNKTwj0WOF0/HjjPnGnXmYH6tIEMeJ1qEyAF4aSINIyp5plixpf8UzI -UG0A/Jm/abNI80Va7jVQFLjzkpLGnw5d6w3o7PKkCWvcZiv830z8ZaGu07WIaqTn -CByUSeC4wQSMIQlsVUsslxDxjGzQu7qNk+hHi02OfX2FUxjI+PSPZzqxqj4YNGw6 -5qbHL76DOPXV5dIXKGFstkmZIWmkqLaUdv0YrTVSRWT78V2Ou8AhLllVJK+7j7IK -exfwNJeOaKny0D72c4L4fE6acH3Ws4zMhQRcAo902og6IKh+wp6w3VYfzs1CFsYU -ka0w4Nx28ixW6jhF2MA+uJD68ziZ7EQHNY9pYgz577ed5RVCbvv+TP/olFoasICy -Dhc94YeoCISTdGiNKd/KC2pEMopRO9Y4273jKhteIEiBghmRxoeMD81R6g== +dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHaHdk3k +D4i/LPNYZ8CXbM1ZGIKDTAQZpW2q+mQ9STI+4VaVshP3z9MRsHK3W+fXhWlRPLZU +gEUvKBAhILm66Sdatz+Ct2n1RvW/oosXf/IU0UaXtYtH+5/oXAUOnRG9fJoDhAvK +KWZKyg1vCR56J8F/A5ZwjRilL6SYpRmqjF0ejD67bTvAM8AV4b0JPZ/o3BLUy0Qd +BvXo1k6hLVyfXR9bKsNNQI3a0XiA0MYxchBIiukQehMwEbKeZw7toarscy3wuIoi +dQ8waVxQfpHO2pHHcIxl//ZY+wC9Rczi5OPlFjZ986JKnEX/2aUW4C+1W2zmihMV +SHO9fIAzw9Q7Oh2FDqT39/tIDOmgS16KXGf4JQJvzXLBqlqTZHwUIEPgE38N4Q1h +Xi4szXouKq62dWpfoBqbtmctsKUcVLyMcH4VK8BQ4wO7pKX8RQHJP6e4GNw+CAeh +m/W9lb1J6BB8kX0txMKYtrdRadcKaEC1D4WgqWd3xmjLDlg0s1jnyHwJZw== -----END CERTIFICATE----- diff --git a/Lib/test/keycertecc.pem b/Lib/test/keycertecc.pem index 02eda2835f07a..81daa4ccb9421 100644 --- a/Lib/test/keycertecc.pem +++ b/Lib/test/keycertecc.pem @@ -1,31 +1,31 @@ -----BEGIN PRIVATE KEY----- -MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBL2Y5JfpzbgHw+t4Q+ -c5SHhsZcD9ylEtUMg7OyF9xW6j+3VIVORGaokcOtE0Z2Y5ehZANiAASzz/rInKUz -onpxP5bLxmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fB -ihQTJkXyBMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FM= +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBcNwE+cm17mmr7Yg6d +0DNCnheGFOjkYH4tYzTyCkcZGShkmF/tKhIqb3imKz0Kx9+hZANiAATyp8ws6CuN +OI2/3MC4jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoG +JJYHhZNQXEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQAQ= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5e - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost-ecc Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: - 04:b3:cf:fa:c8:9c:a5:33:a2:7a:71:3f:96:cb:c6: - 6a:bc:7e:6a:ed:81:14:92:d2:34:4f:50:e5:35:e9: - 72:97:f8:ab:62:7e:72:db:98:b1:d0:b4:fa:dc:b5: - d9:11:45:13:82:c6:75:11:cf:67:c1:8a:14:13:26: - 45:f2:04:c4:ac:c0:d4:d1:0a:cf:b8:0d:42:9b:30: - 07:e2:86:28:0c:55:88:1d:59:b6:4f:14:10:e5:7a: - 8e:5a:78:5c:38:fc:53 + 04:f2:a7:cc:2c:e8:2b:8d:38:8d:bf:dc:c0:b8:8d: + 95:52:92:6a:03:ce:6f:d7:fd:9a:e4:12:6e:13:54: + 72:8f:49:9e:a4:cd:94:69:9a:65:25:2d:2f:65:ed: + 24:19:48:b6:32:0c:01:41:17:3a:06:24:96:07:85: + 93:50:5c:43:bb:1c:5b:33:9f:a2:a7:bc:b8:e1:c1: + 2e:9d:77:39:5a:1c:fc:e2:12:49:eb:4a:bd:0e:2a: + 12:66:74:91:eb:40:04 ASN1 OID: secp384r1 NIST CURVE: P-384 X509v3 extensions: @@ -38,9 +38,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - C6:82:22:BF:4F:3D:40:AD:9B:16:AD:E7:C5:ED:C4:82:EB:35:97:98 + 79:11:98:86:15:4F:48:F4:31:0B:D2:CC:C8:26:3A:09:07:5D:96:40 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -54,53 +54,53 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 76:e3:19:4d:34:78:50:3e:fa:63:53:d6:3f:01:87:e8:f4:a3: - a9:81:5b:31:d6:de:3a:98:f3:bb:70:4d:29:35:1f:b0:6a:b3: - 9d:bf:03:2b:79:c4:f2:0b:32:f8:fc:f6:cb:13:47:28:81:fa: - 96:b3:1a:1d:bd:4b:f6:35:df:87:ef:6e:74:63:87:3d:7e:2b: - c6:78:d4:8e:ef:03:e6:01:11:22:4e:1b:ef:2c:c1:c5:4e:3f: - 4a:07:ae:92:ef:d3:ac:79:59:7c:60:89:4b:3d:39:08:ef:c4: - 9a:dc:b0:8b:ee:5f:30:40:d3:c2:f3:f8:90:77:9d:8c:a7:07: - b9:5f:62:83:4d:37:fa:36:e1:1d:26:2b:cc:8f:7c:6f:f1:23: - 87:71:48:40:ad:6b:30:16:47:4c:d7:98:bb:f5:9b:63:c8:66: - 47:65:58:d2:c1:07:81:14:0c:25:20:87:b9:1d:ab:0b:56:db: - 2c:ab:36:db:7f:c7:42:52:af:91:d6:fb:18:cf:94:f7:1e:25: - 99:ce:20:78:c6:f8:69:6e:9c:53:f3:fe:90:3e:4d:ca:d5:d6: - ac:6e:02:17:be:4a:0f:fe:e6:14:d4:ce:25:df:17:8f:6f:b9: - d3:28:dc:b4:98:ef:05:6f:eb:20:14:1c:c1:e9:9d:02:7b:0e: - 0f:e4:a8:bc:3b:62:e0:42:0c:b0:f7:a1:63:fe:98:d7:aa:b0: - f6:ed:ff:ab:4f:1a:9a:8f:eb:f0:86:61:d2:d3:a5:08:d0:db: - e4:d6:a9:0e:ec:08:6f:af:fb:ef:73:3f:47:69:97:90:b2:5a: - 6f:31:66:a7:4c:32:0c:e9:ea:18:ce:a9:79:9c:f5:c4:42:f5: - 68:53:b2:a4:8c:98:3f:97:34:62:61:41:0a:54:d7:0b:cd:33: - c8:62:62:da:f7:07:c6:c6:3b:fa:68:ca:5f:62:3e:57:db:bd: - cb:16:94:07:9a:b5:31:55:b8:f8:cb:b0:7f:a0:d1:82:df:71: - c8:90:60:b3:88:b0 + 6e:42:e8:a2:2d:28:14:e3:25:5c:c1:7e:54:e9:3a:ff:30:db: + 94:ba:b2:f6:5f:ae:9a:c1:90:b3:4f:ce:65:1d:84:64:c0:71: + 2c:44:8e:7e:00:79:f5:8c:4a:1d:34:13:44:de:99:2e:db:53: + ee:ec:74:97:4d:59:1a:09:82:4f:98:75:91:a7:a0:b9:da:5e: + 68:f5:32:85:be:36:3d:83:d4:ee:f9:87:67:31:85:41:53:9a: + e7:05:96:13:1c:88:2e:7f:33:b1:ee:bd:f9:50:52:24:ed:3d: + 92:95:6e:30:c3:af:74:a9:ee:15:bb:da:7c:14:50:8e:e3:99: + ea:ba:b4:37:8a:50:61:26:de:01:93:b8:a2:6b:d9:c7:38:5e: + b2:f8:96:3d:a8:9f:7d:0c:71:d4:7e:cc:a0:57:af:7e:ce:3f: + a7:a7:27:68:c1:28:d7:4f:44:c1:b4:93:c3:c7:35:2b:50:c3: + 8e:2c:d0:46:c1:3f:e1:67:d3:f0:81:ae:f3:5c:3e:4f:d5:a8: + 07:8f:e0:eb:ef:d8:dc:47:e0:3d:58:eb:de:0e:7f:b2:58:cb: + 5c:f1:2f:65:7e:0f:0d:cc:ca:ba:83:53:63:bc:dd:18:0c:ee: + ed:ec:96:88:d0:38:c5:d7:ab:e7:55:79:7b:6d:ba:c0:a0:e9: + 5c:ca:7c:fb:f8:70:c7:fb:f5:b2:b5:74:cb:f7:c0:0d:20:9f: + 1d:b7:4c:bf:8a:8d:cd:e3:bc:4e:30:78:02:12:a0:9b:d5:8f: + 49:3c:95:91:76:6e:7c:54:dc:61:7a:2e:20:ed:35:25:e0:c5: + 17:50:02:83:00:74:8f:f0:1c:97:96:08:fc:2e:63:a4:f7:97: + 87:43:2a:32:04:2d:4c:f9:1a:07:bf:68:91:fc:50:21:a1:3c: + 8d:8f:fb:83:57:83:1f:b6:55:5c:55:2f:58:64:ad:f3:27:ba: + d0:e3:cd:58:01:a3:c9:ba:1d:95:dc:30:d5:af:b9:20:ad:d9: + 48:ba:8d:9a:66:ee -----BEGIN CERTIFICATE----- MIIEyzCCAzOgAwIBAgIJAMstgJlaaVJeMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGMxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFjAUBgNVBAMMDWxv -Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASzz/rInKUzonpxP5bL -xmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fBihQTJkXy -BMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FOjggHEMIIBwDAYBgNV +Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATyp8ws6CuNOI2/3MC4 +jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoGJJYHhZNQ +XEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQASjggHEMIIBwDAYBgNV HREEETAPgg1sb2NhbGhvc3QtZWNjMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU -BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUxoIi -v089QK2bFq3nxe3Egus1l5gwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHKb5oIKPI1 -tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg +BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUeRGY +hhVPSPQxC9LMyCY6CQddlkAwfQYDVR0jBHYwdIAUs4qgorpx8agkedSkWyU2FR5J +yM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMstgJlaaVJb MIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0Y2EucHl0 aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcwAYYpaHR0 cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYDVR0fBDww OjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2EvcmV2 -b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHbjGU00eFA++mNT1j8Bh+j0 -o6mBWzHW3jqY87twTSk1H7Bqs52/Ayt5xPILMvj89ssTRyiB+pazGh29S/Y134fv -bnRjhz1+K8Z41I7vA+YBESJOG+8swcVOP0oHrpLv06x5WXxgiUs9OQjvxJrcsIvu -XzBA08Lz+JB3nYynB7lfYoNNN/o24R0mK8yPfG/xI4dxSECtazAWR0zXmLv1m2PI -ZkdlWNLBB4EUDCUgh7kdqwtW2yyrNtt/x0JSr5HW+xjPlPceJZnOIHjG+GlunFPz -/pA+TcrV1qxuAhe+Sg/+5hTUziXfF49vudMo3LSY7wVv6yAUHMHpnQJ7Dg/kqLw7 -YuBCDLD3oWP+mNeqsPbt/6tPGpqP6/CGYdLTpQjQ2+TWqQ7sCG+v++9zP0dpl5Cy -Wm8xZqdMMgzp6hjOqXmc9cRC9WhTsqSMmD+XNGJhQQpU1wvNM8hiYtr3B8bGO/po -yl9iPlfbvcsWlAeatTFVuPjLsH+g0YLfcciQYLOIsA== +b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAG5C6KItKBTjJVzBflTpOv8w +25S6svZfrprBkLNPzmUdhGTAcSxEjn4AefWMSh00E0TemS7bU+7sdJdNWRoJgk+Y +dZGnoLnaXmj1MoW+Nj2D1O75h2cxhUFTmucFlhMciC5/M7HuvflQUiTtPZKVbjDD +r3Sp7hW72nwUUI7jmeq6tDeKUGEm3gGTuKJr2cc4XrL4lj2on30McdR+zKBXr37O +P6enJ2jBKNdPRMG0k8PHNStQw44s0EbBP+Fn0/CBrvNcPk/VqAeP4Ovv2NxH4D1Y +694Of7JYy1zxL2V+Dw3MyrqDU2O83RgM7u3slojQOMXXq+dVeXttusCg6VzKfPv4 +cMf79bK1dMv3wA0gnx23TL+Kjc3jvE4weAISoJvVj0k8lZF2bnxU3GF6LiDtNSXg +xRdQAoMAdI/wHJeWCPwuY6T3l4dDKjIELUz5Gge/aJH8UCGhPI2P+4NXgx+2VVxV +L1hkrfMnutDjzVgBo8m6HZXcMNWvuSCt2Ui6jZpm7g== -----END CERTIFICATE----- diff --git a/Lib/test/make_ssl_certs.py b/Lib/test/make_ssl_certs.py index 41b5f46c882ca..c62896f861dab 100644 --- a/Lib/test/make_ssl_certs.py +++ b/Lib/test/make_ssl_certs.py @@ -7,6 +7,9 @@ import tempfile from subprocess import * +startdate = "20180829142316Z" +enddate = "20371028142316Z" + req_template = """ [ default ] base_url = http://testca.pythontest.net/testca @@ -21,6 +24,8 @@ O = Python Software Foundation CN = {hostname} + [req_x509_extensions_nosan] + [req_x509_extensions_simple] subjectAltName = @san @@ -70,8 +75,12 @@ database = $dir/index.txt crlnumber = $dir/crl.txt default_md = sha256 - default_days = 3600 - default_crl_days = 3600 + startdate = {startdate} + default_startdate = {startdate} + enddate = {enddate} + default_enddate = {enddate} + default_days = 7000 + default_crl_days = 7000 certificate = pycacert.pem private_key = pycakey.pem serial = $dir/serial @@ -116,10 +125,15 @@ def make_cert_key(hostname, sign=False, extra_san='', tempnames.append(f.name) req_file, cert_file, key_file = tempnames try: - req = req_template.format(hostname=hostname, extra_san=extra_san) + req = req_template.format( + hostname=hostname, + extra_san=extra_san, + startdate=startdate, + enddate=enddate + ) with open(req_file, 'w') as f: f.write(req) - args = ['req', '-new', '-days', '3650', '-nodes', + args = ['req', '-new', '-nodes', '-days', '7000', '-newkey', key, '-keyout', key_file, '-extensions', ext, '-config', req_file] @@ -168,19 +182,30 @@ def make_ca(): f.write("00") with open(os.path.join('cadir','index.txt.attr'),'w+') as f: f.write('unique_subject = no') + # random start value for serial numbers + with open(os.path.join('cadir','serial'), 'w') as f: + f.write('CB2D80995A69525B\n') with tempfile.NamedTemporaryFile("w") as t: - t.write(req_template.format(hostname='our-ca-server', extra_san='')) + req = req_template.format( + hostname='our-ca-server', + extra_san='', + startdate=startdate, + enddate=enddate + ) + t.write(req) t.flush() with tempfile.NamedTemporaryFile() as f: - args = ['req', '-new', '-days', '3650', '-extensions', 'v3_ca', '-nodes', - '-newkey', 'rsa:3072', '-keyout', 'pycakey.pem', + args = ['req', '-config', t.name, '-new', + '-nodes', + '-newkey', 'rsa:3072', + '-keyout', 'pycakey.pem', '-out', f.name, '-subj', '/C=XY/L=Castle Anthrax/O=Python Software Foundation CA/CN=our-ca-server'] check_call(['openssl'] + args) - args = ['ca', '-config', t.name, '-create_serial', + args = ['ca', '-config', t.name, '-out', 'pycacert.pem', '-batch', '-outdir', TMP_CADIR, - '-keyfile', 'pycakey.pem', '-days', '3650', + '-keyfile', 'pycakey.pem', '-selfsign', '-extensions', 'v3_ca', '-infiles', f.name ] check_call(['openssl'] + args) args = ['ca', '-config', t.name, '-gencrl', '-out', 'revocation.crl'] @@ -223,18 +248,18 @@ def print_cert(path): f.write(key) f.write(cert) - cert, key = make_cert_key('localhost', True) + cert, key = make_cert_key('localhost', sign=True) with open('keycert3.pem', 'w') as f: f.write(key) f.write(cert) - cert, key = make_cert_key('fakehostname', True) + cert, key = make_cert_key('fakehostname', sign=True) with open('keycert4.pem', 'w') as f: f.write(key) f.write(cert) cert, key = make_cert_key( - 'localhost-ecc', True, key='param:secp384r1.pem' + 'localhost-ecc', sign=True, key='param:secp384r1.pem' ) with open('keycertecc.pem', 'w') as f: f.write(key) @@ -254,7 +279,7 @@ def print_cert(path): 'RID.1 = 1.2.3.4.5', ] - cert, key = make_cert_key('allsans', extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('allsans', sign=True, extra_san='\n'.join(extra_san)) with open('allsans.pem', 'w') as f: f.write(key) f.write(cert) @@ -271,11 +296,16 @@ def print_cert(path): ] # IDN SANS, signed - cert, key = make_cert_key('idnsans', True, extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('idnsans', sign=True, extra_san='\n'.join(extra_san)) with open('idnsans.pem', 'w') as f: f.write(key) f.write(cert) + cert, key = make_cert_key('nosan', sign=True, ext='req_x509_extensions_nosan') + with open('nosan.pem', 'w') as f: + f.write(key) + f.write(cert) + unmake_ca() print("update Lib/test/test_ssl.py and Lib/test/test_asyncio/util.py") print_cert('keycert.pem') diff --git a/Lib/test/nosan.pem b/Lib/test/nosan.pem new file mode 100644 index 0000000000000..ec10cdcabb9e3 --- /dev/null +++ b/Lib/test/nosan.pem @@ -0,0 +1,130 @@ +-----BEGIN PRIVATE KEY----- +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCv3sUoOE4F7Pye +AT2Q6XpXrGUOu1fYgdnItLLLhvn7ACuHMj7TA5UKXxsepJn5m2Ji9LvAbksr1IWd +LZAvNgjwsUR+E4HbY108BhVt9sk3HFkvE0OOFbAa14ICtYPe18P/4Hv6Zfu/GJDU +rwXHNCUu0p6i/mospZ5O3sx5MgVaShknGAEC3Kp7zOgusMmE8XSbkNQa3ARMkW4o +kTqWKAeAHDjVFVyyhzZQmo+gaLzhWfJVSZhlJsuiLoZGGrVTq85EiXsE4l8rPaI+ +mKkVzWP13IZW+Fx1tiIktumdHWb1OQWrvm8AiT9b8PcFCUUrvhQFcLDSCZjKlQ0t +RWrSSKrrVsSldOreqRLtpjGzFJpGnTcvslL7rP5pg5DjBsYmVcDjrmRuJuhGq52X +/6HEC97GouVK8tT1LVMv1wufVPn+i9TzwxOuRWeUvVqLAJgWQ9N3yKdymH+VrpZk +/oB9ScyDakGezZBW5CeOQbNJ8WoX58jNxefGjtqKxmyztu43r3ECAwEAAQKCAYBQ +fVoqYCqFV8L95X9x1QljGsldhqxbsIIl811o/KtoDtndFEfgd2E8z+4vhhHaRR0w +QOW02kWZF7jXCMVWdhp9XgQE15S0/bLsB7TDERFiIZ1HiD+AxbhFcKBV8REbahCQ +CQN0xDwFZ47RaBDy7JCf71EfM+UP7fSYECvww83jVspQNBIyZx+3bT5OMCbqqz88 ++3m3mT52dJDADEeN9WAJZ+Ey1IYKRwu6tCJLvePEF1BrbDVNBgZogXZ+mzalxpjr +4RpGPMMa+VWc8HmDVd+LtpwKJcQD00GvUP4fNywn+5jvNWl54FdQiTLPrieTWxas +XUQ2crxP7Aqr2/vsU5Ruru5uF7H+ssMHp9YQDhpJ2+SVhQ9P+/loXCuKGt+BrB2Z +MlitO3f+vfRtzATmJ8G0qFrOqZK1A/qsiyIze240C1hAl3oy2xpZqTDGp4gRWwoi +OIN0HmH9UbP7bbNQY1x/zstTbza4/7rGb1+DZKeZIMu7QjBCU0rtsJpGtUvcQGEC +gcEA42GMYSL/HljZMF1LsDhTX/cmP8FDNgONhWYxT+w0Csnj1usLNBaT63dYnEiW +QKydRR4casAR1Kdy4Yfcy2lCy1kCfwqkQYk8fxSsOSHRjUfwC1SnfdYlwKFMxw4a +oZF0R4oVCBYrfP+8kqrj+5gs/gXblsw72XkYtbCdIriKKdmUzTx7MegzSqh2PVRi +rJzuwCZQ/O0NfhwdOHxLQDo0dgD+vv9e+KOSoJ9FDv8HH1tnolpRMdkSA8AJR/Nk +DXt1AoHBAMYBfTKQZ2jqLKybe4tP+YKjvjVp8vJx0iNUXFN/P6hBaSBOgq85uxXL +X3s7N/pkOCjyE95B8QusIkbnbfdyEP89O4bTbUHPXyAkHyRkR7Vny49HYuaR/aXQ +mXC0J2z5bXVpCQ514l/R/Io3wBph+hbG3To7pp9pMOV4qzvibUZaTZFwH+q+xDwf +SKSFy3fcomgH4/K5/QuKVj0jOUQsYjQQWb8GukS2KZK3zYJIAG1bBcsCVpSuBdW0 +eCZgqjnwjQKBwCUyUwWc9QEg5b68tGIKhNEhHDe3xOf0ItWcxxpc+JJ/Pm9tGfMW +cnJFntBKK5I+6qdg6qMn8oLINcnhMORxvsSHNhpUQlSaP7RGTHo4JxCmoQUpfxDd +1GUzvdyeWQrvQYdmdlRRVCHpsA6KOCtzVIDlsmtz06Ka5cjrMHl6mNeJyYbdiwW6 +B5ICBv23bUDxlzkFy5/ko51qufkAlErYeraHKSVTn1SrZZQzGdf/LkoZ6NUtUzUF +XqYQZzRHA6oU9QKBwDslzLljC5D6ivfQxln6POV6dmJMUOd9erFVDPNgSqq/R2EA +MueXDjzXcKFGMlWYxHHuxmKZPiEnfWHC1kWZjFxCdVq0I6oKATd/stHTJtyYseUO +BQwtRiDXLE7PcguKgtkU1EC+lC3dc1vyhW8cH3HYW9N+aCqsaI/TuQr9e3kNlqhA +XzhnXgU7rx5+XSZkARukZ8JlLqLY4yQGNqAXxgoZbEW1A8VsyQRr5XbqfT4td5CK +FUT6qwGIlG+aZp9CLQKBwQCQkwdW9A/Q4Ffq8+XTL1hJ24m/q11OLAPODUypOhWw +OCbX2fkv59pSBe6niZDBls1NpHB9mzalBrJCfU+yKC667gKcKULOnWULIoOQvmcg +Ka3hkkW28gTnCjfDIYm3IdsLjc67zJplOixaKgxhO8NtJZGtg0oLIrofG8EYRInv +OmtGw+XE+s4TVs6WgXnEg9zWQ5ZYtqQVn6PT5jsz+Nrvipi61HWHVBd7g+78ojps +3suWxl0FvgzTW5HD16WRXeI= +-----END PRIVATE KEY----- +Certificate: + Data: + Version: 1 (0x0) + Serial Number: + cb:2d:80:99:5a:69:52:61 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=nosan + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:af:de:c5:28:38:4e:05:ec:fc:9e:01:3d:90:e9: + 7a:57:ac:65:0e:bb:57:d8:81:d9:c8:b4:b2:cb:86: + f9:fb:00:2b:87:32:3e:d3:03:95:0a:5f:1b:1e:a4: + 99:f9:9b:62:62:f4:bb:c0:6e:4b:2b:d4:85:9d:2d: + 90:2f:36:08:f0:b1:44:7e:13:81:db:63:5d:3c:06: + 15:6d:f6:c9:37:1c:59:2f:13:43:8e:15:b0:1a:d7: + 82:02:b5:83:de:d7:c3:ff:e0:7b:fa:65:fb:bf:18: + 90:d4:af:05:c7:34:25:2e:d2:9e:a2:fe:6a:2c:a5: + 9e:4e:de:cc:79:32:05:5a:4a:19:27:18:01:02:dc: + aa:7b:cc:e8:2e:b0:c9:84:f1:74:9b:90:d4:1a:dc: + 04:4c:91:6e:28:91:3a:96:28:07:80:1c:38:d5:15: + 5c:b2:87:36:50:9a:8f:a0:68:bc:e1:59:f2:55:49: + 98:65:26:cb:a2:2e:86:46:1a:b5:53:ab:ce:44:89: + 7b:04:e2:5f:2b:3d:a2:3e:98:a9:15:cd:63:f5:dc: + 86:56:f8:5c:75:b6:22:24:b6:e9:9d:1d:66:f5:39: + 05:ab:be:6f:00:89:3f:5b:f0:f7:05:09:45:2b:be: + 14:05:70:b0:d2:09:98:ca:95:0d:2d:45:6a:d2:48: + aa:eb:56:c4:a5:74:ea:de:a9:12:ed:a6:31:b3:14: + 9a:46:9d:37:2f:b2:52:fb:ac:fe:69:83:90:e3:06: + c6:26:55:c0:e3:ae:64:6e:26:e8:46:ab:9d:97:ff: + a1:c4:0b:de:c6:a2:e5:4a:f2:d4:f5:2d:53:2f:d7: + 0b:9f:54:f9:fe:8b:d4:f3:c3:13:ae:45:67:94:bd: + 5a:8b:00:98:16:43:d3:77:c8:a7:72:98:7f:95:ae: + 96:64:fe:80:7d:49:cc:83:6a:41:9e:cd:90:56:e4: + 27:8e:41:b3:49:f1:6a:17:e7:c8:cd:c5:e7:c6:8e: + da:8a:c6:6c:b3:b6:ee:37:af:71 + Exponent: 65537 (0x10001) + Signature Algorithm: sha256WithRSAEncryption + 91:42:c2:15:57:42:47:77:e7:0f:c5:55:26:b1:5b:c3:5e:ba: + 81:db:e1:a4:9f:b8:42:5a:21:c9:8c:18:ae:0f:90:ab:9a:24: + e7:d2:78:fc:bd:97:29:b1:5c:46:1f:5b:b8:d2:a7:87:f1:50: + 53:5b:d3:be:57:74:bd:e5:75:db:50:81:f7:37:95:0b:69:ef: + 39:8c:5c:82:d5:64:62:d5:8b:e9:e0:31:e1:73:d2:5a:2c:de: + 43:5a:06:e5:d3:4d:d0:35:e0:9f:c2:73:31:bc:35:69:d4:fb: + 7d:f0:1a:33:f7:f6:25:72:9c:a6:84:05:08:f6:b5:e8:04:10: + f1:1f:f2:95:ad:a1:f8:d8:80:a5:eb:75:43:99:33:90:0c:79: + fc:c0:87:08:95:20:aa:c2:81:0b:22:6f:56:f4:8f:2a:23:f8: + 40:47:1c:03:a5:b1:04:0a:04:4a:df:d0:88:a8:bc:31:f2:42: + 9b:d8:11:14:9e:e3:68:ea:07:2c:15:de:d2:36:5a:15:38:ed: + d2:af:0e:b4:b6:1d:a0:57:94:ea:c3:c7:4c:14:57:81:00:57: + 94:d3:b0:27:69:d7:48:02:6c:e5:97:f7:be:22:7c:38:24:af: + b2:b0:7b:08:75:1e:ca:2e:c7:41:ef:8b:74:cf:c9:c3:6f:39: + b9:52:41:18:c6:70:24:54:51:04:fe:5f:88:70:35:e5:1c:8e: + d6:67:69:44:44:33:9b:8c:fe:a5:b9:95:48:66:84:f3:1a:04: + ab:a3:57:c1:b6:b4:2f:28:12:45:2b:cb:42:d3:f4:a5:ce:7b: + 6c:1f:e4:c8:a9:e7:d4:6d:c8:27:2d:69:26:c5:e8:73:10:54: + 1f:c3:bf:fd:aa:f5:95:6f:f6:ca:d5:06:8f:1b:79:93:e3:86: + ba:8d:fe:a8:10:8f:95:3e:14:09:bf:ca:88:59:e2:93:b6:ec: + 03:a9:7e:dd:1f:5f:13:d3:29:b3:a6:f3:6a:df:30:53:44:c8: + cd:e5:82:57:bc:9c +-----BEGIN CERTIFICATE----- +MIIEJDCCAowCCQDLLYCZWmlSYTANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJY +WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV +BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTgwODI5MTQyMzE2WhcNMzcxMDI4MTQyMzE2 +WjBbMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNV +BAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMQ4wDAYDVQQDDAVub3NhbjCC +AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAK/exSg4TgXs/J4BPZDpeles +ZQ67V9iB2ci0ssuG+fsAK4cyPtMDlQpfGx6kmfmbYmL0u8BuSyvUhZ0tkC82CPCx +RH4TgdtjXTwGFW32yTccWS8TQ44VsBrXggK1g97Xw//ge/pl+78YkNSvBcc0JS7S +nqL+aiylnk7ezHkyBVpKGScYAQLcqnvM6C6wyYTxdJuQ1BrcBEyRbiiROpYoB4Ac +ONUVXLKHNlCaj6BovOFZ8lVJmGUmy6IuhkYatVOrzkSJewTiXys9oj6YqRXNY/Xc +hlb4XHW2IiS26Z0dZvU5Bau+bwCJP1vw9wUJRSu+FAVwsNIJmMqVDS1FatJIqutW +xKV06t6pEu2mMbMUmkadNy+yUvus/mmDkOMGxiZVwOOuZG4m6EarnZf/ocQL3sai +5Ury1PUtUy/XC59U+f6L1PPDE65FZ5S9WosAmBZD03fIp3KYf5WulmT+gH1JzINq +QZ7NkFbkJ45Bs0nxahfnyM3F58aO2orGbLO27jevcQIDAQABMA0GCSqGSIb3DQEB +CwUAA4IBgQCRQsIVV0JHd+cPxVUmsVvDXrqB2+Gkn7hCWiHJjBiuD5CrmiTn0nj8 +vZcpsVxGH1u40qeH8VBTW9O+V3S95XXbUIH3N5ULae85jFyC1WRi1Yvp4DHhc9Ja +LN5DWgbl003QNeCfwnMxvDVp1Pt98Boz9/YlcpymhAUI9rXoBBDxH/KVraH42ICl +63VDmTOQDHn8wIcIlSCqwoELIm9W9I8qI/hARxwDpbEECgRK39CIqLwx8kKb2BEU +nuNo6gcsFd7SNloVOO3Srw60th2gV5Tqw8dMFFeBAFeU07AnaddIAmzll/e+Inw4 +JK+ysHsIdR7KLsdB74t0z8nDbzm5UkEYxnAkVFEE/l+IcDXlHI7WZ2lERDObjP6l +uZVIZoTzGgSro1fBtrQvKBJFK8tC0/SlzntsH+TIqefUbcgnLWkmxehzEFQfw7/9 +qvWVb/bK1QaPG3mT44a6jf6oEI+VPhQJv8qIWeKTtuwDqX7dH18T0ymzpvNq3zBT +RMjN5YJXvJw= +-----END CERTIFICATE----- diff --git a/Lib/test/pycacert.pem b/Lib/test/pycacert.pem index 73150c960f358..360cd57426a5a 100644 --- a/Lib/test/pycacert.pem +++ b/Lib/test/pycacert.pem @@ -3,97 +3,97 @@ Certificate: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5b - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Aug 26 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, O=Python Software Foundation CA, CN=our-ca-server Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:97:ed:55:41:ba:36:17:95:db:71:1c:d3:e1:61: - ac:58:73:e3:c6:96:cf:2b:1f:b8:08:f5:9d:4b:4b: - c7:30:f6:b8:0b:b3:52:72:a0:bb:c9:4d:3b:8e:df: - 22:8e:01:57:81:c9:92:73:cc:00:c6:ec:70:b0:3a: - 17:40:c1:df:f2:8c:36:4c:c4:a7:81:e7:b6:24:68: - e2:a0:7e:35:07:2f:a0:5b:f9:45:46:f7:1e:f0:46: - 11:fe:ca:1a:3c:50:f1:26:a9:5f:9c:22:9c:f8:41: - e1:df:4f:12:95:19:2f:5c:90:01:17:6e:7e:3e:7d: - cf:e9:09:af:25:f8:f8:42:77:2d:6d:5f:36:f2:78: - 1e:7d:4a:87:68:63:6c:06:71:1b:8d:fa:25:fe:d4: - d3:f5:a5:17:b1:ef:ea:17:cb:54:c8:27:99:80:cb: - 3c:45:f1:2c:52:1c:dd:1f:51:45:20:50:1e:5e:ab: - 57:73:1b:41:78:96:de:84:a4:7a:dd:8f:30:85:36: - 58:79:76:a0:d2:61:c8:1b:a9:94:99:63:c6:ee:f8: - 14:bf:b4:52:56:31:97:fa:eb:ac:53:9e:95:ce:4c: - c4:5a:4a:b7:ca:03:27:5b:35:57:ce:02:dc:ec:ca: - 69:f8:8a:5a:39:cb:16:20:15:03:24:61:6c:f4:7a: - fc:b6:48:e5:59:10:5c:49:d0:23:9f:fb:71:5e:3a: - e9:68:9f:34:72:80:27:b6:3f:4c:b1:d9:db:63:7f: - 67:68:4a:6e:11:f8:e8:c0:f4:5a:16:39:53:0b:68: - de:77:fa:45:e7:f8:91:cd:78:cd:28:94:97:71:54: - fb:cf:f0:37:de:c9:26:c5:dc:1b:9e:89:6d:09:ac: - c8:44:71:cb:6d:f1:97:31:d5:4c:20:33:bf:75:4a: - a0:e0:dc:69:11:ed:2a:b4:64:10:11:30:8b:0e:b0: - a7:10:d8:8a:c5:aa:1b:c8:26:8a:25:e7:66:9f:a5: - 6a:1a:2f:7c:5f:83:c6:78:4f:1f + 00:b1:84:d3:4f:5c:04:80:91:4f:82:49:ba:30:0b: + f7:e8:cb:f9:14:ef:3d:9f:0b:3f:0a:62:fc:1b:20: + a5:20:d1:60:5f:87:5a:1f:16:d1:ed:97:70:a6:da: + 1b:03:2c:7e:a0:5b:3c:4e:2f:16:7e:0e:89:29:89: + e1:10:0d:38:da:6a:77:5f:37:13:b3:28:8f:7b:5c: + 76:ad:9e:e8:d3:f5:9e:f5:83:aa:10:07:8d:e6:51: + 98:f0:7c:0d:52:f2:0c:21:1e:d8:b9:99:26:a9:25: + 03:27:bb:5c:ab:2e:33:27:a2:d6:23:a8:83:87:44: + 29:9f:97:b5:24:6f:d7:b9:0a:fd:28:ee:bb:fb:41: + 58:ea:1d:99:dd:44:86:ab:98:be:1c:dc:cb:a9:89: + 1d:36:5c:a9:e8:47:b5:f4:52:48:aa:b5:a4:67:ef: + 3e:d7:e2:d3:33:de:98:29:d8:7a:b0:59:5c:e7:b1: + 0e:cc:fd:9f:eb:f6:d5:3a:0e:0b:cf:fe:0b:3d:a2: + bf:45:18:ce:94:e7:a9:55:60:88:d4:d8:84:50:79: + 05:2e:41:03:74:ae:67:26:f6:5b:12:08:98:ce:0a: + 97:ed:01:0f:89:4f:17:5c:fa:3e:1d:35:24:47:92: + 32:bf:f7:a4:18:2b:3c:d0:48:99:e1:a2:cd:a3:cc: + 50:53:20:b5:c6:e3:66:85:7b:57:10:ec:33:4f:c1: + 77:e7:1b:7e:81:c6:c4:f3:45:20:c0:91:dd:13:76: + 7b:03:af:f6:76:8e:a2:83:63:57:dd:63:bc:bb:5a: + 1c:17:52:8a:d6:06:48:cc:0f:c7:d3:4f:e8:da:22: + 6c:86:f9:4e:5c:a6:29:07:3b:d8:56:4c:59:b3:20: + 49:07:7b:94:84:cf:2b:c3:1c:1a:4e:87:64:92:ba: + 42:e1:e6:ad:7d:1d:f6:54:90:6f:2b:e9:b3:cc:4b: + 2b:33:26:23:fd:65:c0:3c:f0:79:ad:c9:c1:81:ef: + 37:04:e0:27:3e:b0:ee:15:be:51 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: - DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha256WithRSAEncryption - 33:6a:54:d3:6b:c0:d7:01:5f:9d:f4:05:c1:93:66:90:50:d0: - b7:18:e9:b0:1e:4a:a0:b6:da:76:93:af:84:db:ad:15:54:31: - 15:13:e4:de:7e:4e:0c:d5:09:1c:34:35:b6:e5:4c:d6:6f:65: - 7d:32:5f:eb:fc:a9:6b:07:f7:49:82:e5:81:7e:07:80:9a:63: - f8:2c:c3:40:bc:8f:d4:2a:da:3e:d1:ee:08:b7:4d:a7:84:ca: - f4:3f:a1:98:45:be:b1:05:69:e7:df:d7:99:ab:1b:ee:8b:30: - cc:f7:fc:e7:d4:0b:17:ae:97:bf:e4:7b:fd:0f:a7:b4:85:79: - e3:59:e2:16:87:bf:1f:29:45:2c:23:93:76:be:c0:87:1d:de: - ec:2b:42:6a:e5:bb:c8:f4:0a:4a:08:0a:8c:5c:d8:7d:4d:d1: - b8:bf:d5:f7:29:ed:92:d1:94:04:e8:35:06:57:7f:2c:23:97: - 87:a5:35:8d:26:d3:1a:47:f2:16:d7:d9:c6:d4:1f:23:43:d3: - 26:99:39:ca:20:f4:71:23:6f:0c:4a:76:76:f7:76:1f:b3:fe: - bf:47:b0:fc:2a:56:81:e1:d2:dd:ee:08:d8:f4:ff:5a:dc:25: - 61:8a:91:02:b9:86:1c:f2:50:73:76:25:35:fc:b6:25:26:15: - cb:eb:c4:2b:61:0c:1c:e7:ee:2f:17:9b:ec:f0:d4:a1:84:e7: - d2:af:de:e4:1b:24:14:a7:01:87:e3:ab:29:58:46:a0:d9:c0: - 0a:e0:8d:d7:59:d3:1b:f8:54:20:3e:78:a5:a5:c8:4f:8b:03: - c4:96:9f:ec:fb:47:cf:76:2d:8d:65:34:27:bf:fa:ae:01:05: - 8a:f3:92:0a:dd:89:6c:97:a1:c7:e7:60:51:e7:ac:eb:4b:7d: - 2c:b8:65:c9:fe:5d:6a:48:55:8e:e4:c7:f9:6a:40:e1:b8:64: - 45:e9:b5:59:29:a5:5f:cf:7d:58:7d:64:79:e5:a4:09:ac:1e: - 76:65:3d:94:c4:68 + 6b:32:2f:e7:05:18:ea:5c:c9:95:f4:e0:c2:0c:41:5f:1a:0a: + 95:c9:c7:7d:05:ee:8a:56:29:35:50:40:b7:fe:9f:7b:5b:1c: + c3:69:2f:a0:cb:d2:b8:91:2f:50:19:62:f7:27:18:6d:95:7b: + 53:16:15:a2:5a:dc:14:e3:fb:b1:32:a9:69:db:a6:33:47:3c: + bb:1f:d2:dc:70:f9:6a:2e:0c:d8:8c:6d:e5:5d:1d:43:3c:4e: + 91:de:a0:c8:da:a0:4b:0e:9d:5e:b6:0f:4a:49:f0:7b:b6:53: + 9e:fd:35:14:5b:e3:4d:b4:18:a6:36:61:e8:8f:33:9b:d4:05: + f9:54:66:df:e0:cb:18:a3:4e:dc:17:a8:a0:b3:c1:a8:f4:d6: + 9d:ca:7f:68:53:1a:d7:95:da:e8:d3:9e:48:00:71:95:99:11: + 07:cf:96:c0:7d:ce:7d:30:e8:4f:e1:83:16:33:a1:ff:59:9b: + 3e:4c:e7:3a:38:01:9f:0f:67:4c:fd:2d:8b:4a:d4:01:46:37: + 33:e8:13:6b:15:a9:1d:68:76:45:a2:82:33:69:26:30:60:05: + c8:8f:bd:b4:75:ab:be:7a:8b:48:68:70:40:b4:1b:51:c5:e6: + 7a:ad:6b:4f:db:17:c0:60:67:2e:63:61:9b:2c:48:99:b8:76: + 45:a0:9e:cc:ef:33:1e:50:4e:ab:72:c3:65:c8:b2:79:b3:35: + 83:21:78:d3:8b:6c:3a:18:e8:65:32:39:b8:c0:9d:71:2f:35: + 36:8a:c0:17:62:d8:8b:3e:e1:22:18:2b:4c:63:a6:0e:9d:0a: + fa:ab:5b:35:fb:88:91:77:4c:8d:8c:9d:a9:cf:fc:ab:c2:e6: + 5a:05:7b:7e:04:6e:39:cf:93:ce:67:3b:7a:cb:af:b6:36:e1: + fb:71:64:45:d4:a6:f0:ce:ef:75:04:99:69:9a:e5:88:0a:10: + 02:74:89:ec:75:84:44:80:48:df:c1:f7:e9:37:ce:ce:92:92: + 5c:89:22:08:73:1f -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/pycakey.pem b/Lib/test/pycakey.pem index c283f89098684..819bdef1ff9bf 100644 --- a/Lib/test/pycakey.pem +++ b/Lib/test/pycakey.pem @@ -1,40 +1,40 @@ -----BEGIN PRIVATE KEY----- -MIIG/AIBADANBgkqhkiG9w0BAQEFAASCBuYwggbiAgEAAoIBgQCX7VVBujYXldtx -HNPhYaxYc+PGls8rH7gI9Z1LS8cw9rgLs1JyoLvJTTuO3yKOAVeByZJzzADG7HCw -OhdAwd/yjDZMxKeB57YkaOKgfjUHL6Bb+UVG9x7wRhH+yho8UPEmqV+cIpz4QeHf -TxKVGS9ckAEXbn4+fc/pCa8l+PhCdy1tXzbyeB59SodoY2wGcRuN+iX+1NP1pRex -7+oXy1TIJ5mAyzxF8SxSHN0fUUUgUB5eq1dzG0F4lt6EpHrdjzCFNlh5dqDSYcgb -qZSZY8bu+BS/tFJWMZf666xTnpXOTMRaSrfKAydbNVfOAtzsymn4ilo5yxYgFQMk -YWz0evy2SOVZEFxJ0COf+3FeOulonzRygCe2P0yx2dtjf2doSm4R+OjA9FoWOVML -aN53+kXn+JHNeM0olJdxVPvP8DfeySbF3BueiW0JrMhEcctt8Zcx1UwgM791SqDg -3GkR7Sq0ZBARMIsOsKcQ2IrFqhvIJool52afpWoaL3xfg8Z4Tx8CAwEAAQKCAYB6 -1g1kwyYRE70FS4WUaOBr8+dqHW0LNO4bcFrpEi/PSuurqiUzQPoT3DoXXhoWLseN -zGh476yBKZJDKfS7CwYCmZMdprK4uZvu/E6f7Or7EGrbckOtCQkew8iw9L8ZnWgd -FjyThPjdUIdLgidIHcDJWjVHuLKh3B9KD+ZpEU/IjYtRLvbCPJSKQMQShrBE1Rau -SF6IF5P4vK7X0162NlQqMLpQBAKLml93VJcERzVY1u53JJnkG1loIrNvE32zvZ0C -ZnGVpWwamixVrO9K66F+Ml3Y3bkguF8aPUitc+l+yPmUSXmcDcKmhw9DZA0k5t39 -FxVYGn1uJlvHll8QvV9aZtzuTSkAN8VWNufGwivLLsoRlRb1LtGWqHY583FlUWtz -99ABCBehZ2EpAP+MrRj+pyKuMrkQH61bbOhjqifBM8MhHdn9uNmMpvnKyGPMIdRY -cLH4i2S5aQVvmsQbOa98DLOFGXdf+z5HuwdxHtG1S3J7jkT+FkIyYDehJA3X8UEC -gcEAyCpD8rMFfR5qLwrajhy8vbV7TIkNfFHEkm9tCWDBHwuOJqA0DFuMDAKl7cMv -Uo7Z6R2Fqe2OyWvxYkOi/CSjvtT+PTiA0ux1tXUZcxcRSIsLqQZV+elsKcv+QJPy -vf02vNvHjaMaRwl+NYtqpfr1s/3EdJnWCNC3nV1dD+mWVJoO3kGAK5grLAPM1/uP -stARN5Tnh3Doh8e1Yl4V4UKcVqyVqDykX1OLSmPqNH86T4Um0B4h+jf4UBBdDBz1 -rD3JAoHBAMJOZ3M7LqX+F2haSrF/hnG1y9qAqDWGsvy+8YgjFwPFWu7LvqLuXLuz -S3+5GGhplMuM0itqA9PyPotlgtG5O9hAU8SyMitrx1uTW+Q2U3iYPZQ9O327l1cO -F2jKljq0aJrXp+5iWUq8t/FG6DAqYYUCY/X1SheqEXCgCh4ldRhXig3TBYbVZNs9 -7azN0lk408AO/Hx7WYreFQVS7A/EJhk/M1yyIqnJESuxkDefjV4hTVkRXhh+MrCe -vF/jHqh5pwKBwHxXPQRbzvINXbrBTEjxcxGJ1gESNg1fIfQxQZOMxgrJ+9DkvdBb -YiDn2DldgV0Qni8ghrKrfoKDClyXVXy6KfnWh+Rx4BymhOxmxJto3fSpY2HpLKll -JirErLli7my1CjbBdDH4+s7cB8mtRF+9CLp5znr8QSgSt60KnU/QM/F0Df5kxADQ -syjRZ4NXoslaVQeo+TZ6nggSuAtWFNNstH9nEESE/zq0RBe+/3MDAa76MMUhosuz -zw21TIfEyZvoeQKBwDpszNpvPzWWU3+DNtZsXAaw/Vz0Np/xorwwxfuDYZY2r4MC -LI5dUfD2losPIvGyXZVfAIshU4lVW80adt2M7xu1K/sHAeLgg49bndPfKfYnAM0k -JFFIKNd6WzudPtLkEFgO5GXfmK3KVRztjz98XtpZv6jjWqYG8zuEQ8aQyMbK+63w -d8b1P2BVHLRLJybA2Zr0ZqMfi+sfn/570pNjDXml8VG8FoQq+0jCGXVAOofFR7ay -bDK9L4zADjBe4IcUHQKBwFwj8TEVlWxtG+IWO5d+vyuP0OPjSYOmYq4dCMyZ2+Xy -Y+XDYEhlgGTVxafRMTwt57VV3hJTtRxUZziDA++atr8+gPio+QHBYg1JgCKsqKYL -TGoSVrM1jTfdl1orwkpgQmq2q5j7ExpNA3Spsm5kyCaJ1S/8Ivusqaod8S4t7UhW -BRec3gQ+UYv/V3Pc9hS1Zdzf5+G+PDOYoNmveY16hcu0DKc/PlqGtJuBoQjjH7ir -1YVK9GAgLk0VqJvePnF57A== +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCxhNNPXASAkU+C +SbowC/foy/kU7z2fCz8KYvwbIKUg0WBfh1ofFtHtl3Cm2hsDLH6gWzxOLxZ+Dokp +ieEQDTjaandfNxOzKI97XHatnujT9Z71g6oQB43mUZjwfA1S8gwhHti5mSapJQMn +u1yrLjMnotYjqIOHRCmfl7Ukb9e5Cv0o7rv7QVjqHZndRIarmL4c3MupiR02XKno +R7X0UkiqtaRn7z7X4tMz3pgp2HqwWVznsQ7M/Z/r9tU6DgvP/gs9or9FGM6U56lV +YIjU2IRQeQUuQQN0rmcm9lsSCJjOCpftAQ+JTxdc+j4dNSRHkjK/96QYKzzQSJnh +os2jzFBTILXG42aFe1cQ7DNPwXfnG36BxsTzRSDAkd0TdnsDr/Z2jqKDY1fdY7y7 +WhwXUorWBkjMD8fTT+jaImyG+U5cpikHO9hWTFmzIEkHe5SEzyvDHBpOh2SSukLh +5q19HfZUkG8r6bPMSyszJiP9ZcA88HmtycGB7zcE4Cc+sO4VvlECAwEAAQKCAYB7 +gUnzALYxLOgAYYMkQm9si9zz768TpCNr+ooj5YZ9Wq6OSAEveBT+FErQCxaYErDW +qCNA0gn4Eezj9YWcQVa4vzHmEM+n6iRJU39ONC0Qqua5Ma10EY1sHIEnb2dlufku +YeOu3RrEu3eCgRxsDGySuvv5OxinV4kN++KPQzD3EOopPE+U81YFLCsMgsyfPlmm +gwc/IKIuXDHp5Vp2bXkZK98CYLV8RddjUw7SrkZNwx6cI9eET0CgTs7y4SrevoOy +jCdnA0j1HvL8AbLQuYoXo9fdGYDeq55hyYlxSMYLaEToZG3DJ0UAldrT+r7x52D8 +2QMnJUo2XHzVYPlXPJIAkFJisZZ36TkBvywCgXZMMLibPo9U6V0nfkybTtXKoory +nmgBv+XSGSNrVWMiygpDPqpX1G6bBgqUX3CiTlxtSkYYz1M4Vgj2cux5XEPTnVCq +CLVzvNIXZt1RyzXPxGWpPidCjOaiWBRT4u1Dol9fs3PmVvDaRxcKo9nspiUHCfEC +gcEA4GgxZ+IJwpAMHkdYId0oxjKgTqIg+Ua+EwfUoQT10ERl/k/V4cDwJRHT8lML +rKhTNQJMEE040jq+6mPJDl1KqMb/v05Q7fF22ToGw1HkZwK52O6CeEiJW4/J6bR1 +pZGN0irsa6GvzV65Y6gZVFEUl0JPRf8wPvQHXsWAw8/2LuXkXjV0ieIMq4pbWJf4 +kaid7dYLHnobiP9RVk7BGr7ifmCshoPjWp4TRMwYf6iIZrqMxUSX0QY8Xsqx6bch +LLx/AoHBAMqCvvwUKTrF4gKh5jyl6T6DTZ/Dujaz7BuAJdsSSHvuTa/Y1EfsQHZN +jABn89ZqHYDiyyCuVFO3dqhLtsPjhyFMSXj+98JYcL3FGKnqQqRTwtzzx2P2lV5X +U0WhrNRb3iLu79Tr8pE/2EPnvTr+J5b0DHEeRyM72LWs43zrDYHorH0/Aa5Qd37F +gDLCTBEl8jO5irRuAIq/KV9ZFnn8JDjNGVpXgHPW3354ON1YaMLnPASk7FQizSOQ +QZAsyxtdLwKBwGUosvTYYXvygXP4x1LkpmfKFJe94E1exXpAsmovmTvcSXn9tTXC +Sr77LWb0ZrPbYT7pHS7QEMg8MSnp941hIrG4mzs666KHkgLUdI4B0YtaIDsZMXlV +gY3j4KpYbhxH4/2U2eSfC2fxxnKVKW3n6vdQrfmo0q/eQ6BGOgiLK7fybCLHyBQL +8Zg2k3z5bNUEhMTdE0AW3WjBZ4IXmFcdK26616r/szJ7RcZilrydVXexqpmWlTVl +sTst9kucAPlwswKBwQCwf7my/GNezR8Jik+fZj7edBQQfcdra+8JnOvhfpLcKLte +2s1RjjA0q6usou1bYAsszP2bEzV97XWmgq7dFg4tUE7s/NO1d91zGDhBx2Gj1TkN +2A5dKonOuq9iDeITB6qYqcUvvyEfxRRZQr2jj+WzZCr/4BLCO6PJ29A9jKOuKLtF +QcfWRF2RiNMN6lffzkHFIR4p2YHxa2DEsGGtmbt8Ig3Jtl/HFmydzmxJRoev71dY ++ODdB6PhLhZmcRPoWpMCgcEAhGArwL68GwwRMqAX79gMv8tVT0CJnDyGk5mD/ZIB +Nzt0yQFO7rTEa1l1vAtOiVJ9IpAak2lgbEwodOfGnQst7lujNYDFzTRPTFt/lID1 +u6JBxmqawOSlqa00bt4l2YsTZV+BfSznBP6XO1PK4iR3o5G3NkoKJjZWm3e3asHk +6eTeMLcsIJ+Fp7gG0ve2EdQwhVSVMFEu4Q4C2FcJeU++L4kYpY7sTnAjUtiLvtHn +yp3jllEn3CBD8Uhs4B+sL/6p -----END PRIVATE KEY----- diff --git a/Lib/test/revocation.crl b/Lib/test/revocation.crl index c05461ca7f938..621675eb5c183 100644 --- a/Lib/test/revocation.crl +++ b/Lib/test/revocation.crl @@ -1,14 +1,14 @@ -----BEGIN X509 CRL----- MIICJjCBjwIBATANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJYWTEmMCQGA1UE CgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNVBAMMDW91ci1j -YS1zZXJ2ZXIXDTE4MDgyOTE0MjMxNloXDTI4MDcwNzE0MjMxNlqgDjAMMAoGA1Ud -FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCPhrtGSbuvxPAI3YWQFDB4iOWdBnVk -ugW1lsifmCsE86FfID0EwUut1SRHlksltMtcoULMEIdu8yMLWci++4ve22EEuMKT -HUc3T/wBIuQUhA7U4deFG8CZPAxRpNoK470y7dkD4OVf0Gxa6WYDl9z8mXKmWCB9 -hvzqVfLWNSLTAVPsHtkD5PXdi5yRkQr6wYD7poWaIvkpsn7EKCY6Tw5V3rsbRuZq -AGVCq5TH3mctcmwLloCJ4Xr/1q0DsRrYxeeLYxE+UpvvCbVBKgtjBK7zINS7AbcJ -CYCYKUwGWv1fYKJ+KQQHf75mT3jQ9lWuzOj/YWK4k1EBnYmVGuKKt73lLFxC6h3y -MUnaBZc1KZSyJj0IxfHg/o6qx8NgKOl9XRIQ5g5B30cwpPOskGhEhodbTTY3bPtm -RQ36JvQZngzmkhyhr+MDEV5yUTOShfUiclzQOx26CmLmLHWxOZgXtFZob/oKrvbm -Gen/+7K7YTw6hfY52U7J2FuQRGOyzBXfBYQ= +YS1zZXJ2ZXIXDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFqgDjAMMAoGA1Ud +FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCd2GrHb4zr2R8eK7YMHwlkgICxbWP1 +4nuEi55yzUcmMcCZJ6ZQV3yYqTlAULGQ9qWAUdhsyH+yu3hRKFKHQv0DAdKKxgow +66YasAQQ99DskXOPxmRoIA7qtIWZbLtBwHQJWh+uUFlTdUXitGIX5Xie74xu5YIr +moa3QeuZyG5+gigSTUyst5T/J/cHfBzlAJLc2k3Ty4EPYXKHCVnrZWJbRmxq199l +A7S+eBb9qWXSYXCn6v+EZ76pUS3u/66kZ86PO3h9294BzdhxbCJ27dQXNHw6owe2 +Iyiv0aWx+TNSGSf4yCqaYTH6RtEoviI3h/inVFHNGgjlMzdaGw/0I3bkB0rt2WSR +Vck37HnXvQvVEkgO/39C0WKZus6m4gmOgZcbJbXaR8uIR5Hmw3SEyGEPEIBu6tXV +BLJOSOSu2vVUH5GUIrpvK9FTySKYa+MGryoPasuqZNfwpaXK+ON2G6QsmcXPWZY0 +Dry6t0w2geW6UYVGmb831i8ZP3JVVVwcwi0= -----END X509 CRL----- diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py index 67180f7eb3955..0032c9a331f75 100644 --- a/Lib/test/test_asyncio/utils.py +++ b/Lib/test/test_asyncio/utils.py @@ -59,7 +59,7 @@ def data_file(filename): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 140aecc712738..54007c78ed31a 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -110,7 +110,7 @@ def data_file(*name): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), @@ -131,6 +131,8 @@ def data_file(*name): # cert with all kinds of subject alt names ALLSANFILE = data_file("allsans.pem") IDNSANSFILE = data_file("idnsans.pem") +NOSANFILE = data_file("nosan.pem") +NOSAN_HOSTNAME = 'localhost' REMOTE_HOST = "self-signed.pythontest.net" @@ -345,6 +347,8 @@ def testing_context(server_cert=SIGNED_CERTFILE): hostname = SIGNED_CERTFILE_HOSTNAME elif server_cert == SIGNED_CERTFILE2: hostname = SIGNED_CERTFILE2_HOSTNAME + elif server_cert == NOSANFILE: + hostname = NOSAN_HOSTNAME else: raise ValueError(server_cert) @@ -3027,6 +3031,30 @@ def test_check_hostname(self): "check_hostname requires server_hostname"): client_context.wrap_socket(s) + @unittest.skipUnless( + ssl.HAS_NEVER_CHECK_COMMON_NAME, "test requires hostname_checks_common_name" + ) + def test_hostname_checks_common_name(self): + client_context, server_context, hostname = testing_context() + assert client_context.hostname_checks_common_name + client_context.hostname_checks_common_name = False + + # default cert has a SAN + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + + client_context, server_context, hostname = testing_context(NOSANFILE) + client_context.hostname_checks_common_name = False + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + with self.assertRaises(ssl.SSLCertVerificationError): + s.connect((HOST, server.port)) + def test_ecc_cert(self): client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.load_verify_locations(SIGNING_CA) diff --git a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst new file mode 100644 index 0000000000000..a17e1b4463738 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst @@ -0,0 +1 @@ +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index d2b257e1ff462..951f9699278db 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -964,6 +964,11 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, _setSSLError(NULL, 0, __FILE__, __LINE__); return NULL; } + /* bpo43522 and OpenSSL < 1.1.1l: copy hostflags manually */ +#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION < 0x101010cf + X509_VERIFY_PARAM *ssl_params = SSL_get0_param(self->ssl); + X509_VERIFY_PARAM_set_hostflags(ssl_params, sslctx->hostflags); +#endif SSL_set_app_data(self->ssl, self); if (sock) { SSL_set_fd(self->ssl, Py_SAFE_DOWNCAST(sock->sock_fd, SOCKET_T, int)); From webhook-mailer at python.org Sat Apr 17 05:35:49 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 09:35:49 -0000 Subject: [Python-checkins] [3.9] bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) (GH-25451) Message-ID: https://github.com/python/cpython/commit/cdf02879790b8e52456df6e9d58fb8c0842fc359 commit: cdf02879790b8e52456df6e9d58fb8c0842fc359 branch: 3.9 author: Christian Heimes committer: tiran date: 2021-04-17T11:35:24+02:00 summary: [3.9] bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) (GH-25451) Fix problem with ssl.SSLContext.hostname_checks_common_name. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. Signed-off-by: Christian Heimes . (cherry picked from commit b467d9a24011992242c95d9157d3455f8a84466b) Co-authored-by: Christian Heimes files: A Lib/test/nosan.pem A Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst M Doc/library/ssl.rst M Lib/test/allsans.pem M Lib/test/capath/b1930218.0 M Lib/test/capath/ceff1710.0 M Lib/test/idnsans.pem M Lib/test/keycert2.pem M Lib/test/keycert3.pem M Lib/test/keycert4.pem M Lib/test/keycertecc.pem M Lib/test/make_ssl_certs.py M Lib/test/pycacert.pem M Lib/test/pycakey.pem M Lib/test/revocation.crl M Lib/test/test_asyncio/utils.py M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 8e6fd2cd8f342..d673effc4b82c 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -2040,6 +2040,11 @@ to speed up repeated connections from the same clients. .. versionadded:: 3.7 + .. versionchanged:: 3.9.3 + + The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, + 3.9.3, and 3.10 include workarounds for previous versions. + .. attribute:: SSLContext.verify_flags The flags for certificate verification operations. You can set flags like diff --git a/Lib/test/allsans.pem b/Lib/test/allsans.pem index 6eebde7a57f15..e400e178a1f59 100644 --- a/Lib/test/allsans.pem +++ b/Lib/test/allsans.pem @@ -1,81 +1,170 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCg/pM6dP7BTFNc -qe6wIJIBB7HjwL42bp0vjcCVl4Z3MRWFswYpfxy+o+8+PguMp4K6zndA5fwNkK/H -3HmtanncUfPqnV0usN0NHQGh/f9xRoNmB1q2L7kTuO99o0KLQgvonRT2snf8rq9n -tPRzhHUGYhog7zzNxetYV309PHpPr19BcKepDtM5RMk2aBnoN5vtItorjXiDosFm -6o5wQHrcupcVydszba6P75BEbc1XIWvq2Fv8muaw4pCe81QYINyLqgcPNO/nF3Os -5EI4HKjCNRSCOhOcWqYctXLXN9lBdMBBvQc3zDmYzh1eIZewzZXPVEQT33xPkhxz -HNmhcIctpWX4LTRF6FulkcbeuZDga3gkZYJf/M6IpU1WYXr6q8sNxbgmRRX/NuHo -V9oDwBzLG07rKUiqRHfjGqoCRmmVeVYpryvXUNjHGH0nlVzz/8lTUxAnJorO3Fdc -I+6zKLUPICdAlvz51AH6yopgPFhrdgA0pVzPO6L5G8SRQCxKhAUCAwEAAQKCAYAa -2jtOTcNMFGH3G7TfFZ+kolbuaPCQ/aQkEV2k1dAswzgWw8RsWXI+7fLyi8C7Zhks -9VD4tyNyU8at7D0zSoYm1Fh9sl+fcQp9rG/gSBA6IYu7EdD0gEM7YeY4K2nm9k4s -Lz8W4q+WqsBA6PK47cfjF6vKAH1AyRk28+jEtPiln9egf5zHWtyqOanh9D0V+Wh9 -hgmjqAYI1rWxZ7/4Qxj7Bfg7Px7blhi+kzOZ5kKQnNd2JT46hM+jgzah/G3zVE+R -FFW6ksmJgZ+dCuSbE7HEJmKms1CWq/1Cll0A3uy4JTDZOrK4KcZQ9UjjWJWvlXQm -uNXSSAp1k287DLVUm9c22SDeXpb9PyKmzyvJvVmMqqBx6QzHZ/L7WPzpUWAoLcU+ -ZHT7vggDymkIO+fcRbUzv8s5R7RnLbcBga51/5OCUvAWDoJXNw0qwYZOIbfTnQgs -8xbCmbMzllyYM/dK3GxQAwfn8Hzk+DbS/NObMjHLCWLfYeUvutXJSNly6Ny+ZcEC -gcEAzo5Y1UFOfBX4MZLIZ69LfgaXj9URobMwqlEwKil8pWQMa951ga3moLt91nOe -SAQz3meFTBX/VAb2ZHLeIf3FoNkiIx48PkxsR/hhLHpvl26zEg3yXs3tv0IFBx2R -EEnLNpQaAQFR9S1yDOaG2rsb17ZDKyp9isDpAENHAmEnT/XJn+Dc0SOH1EVDjUeM -JqToAF/fjIx/RF4oUJCAgOPBMlRy5ywLQk8uDi6ft0NCzzCi0eCuk1Ty3KzWFGwx -7cYRAoHBAMeIPCzHG3No4JGUFunslVwo5TuC7maO6qYKbq0OyvwWfL4b7gjrMBR9 -d5WyZlp/Vf40O463dg8x8qPNOFWp49f3hxTvvfnt2/m3+CQuDOLfqBbHufZApP1J -U9MubUNnDFHHeJ9l0tg2nhiLw24GHeMARZhA/BimMQPY0OpZPpLVxAUArM2EB7hI -glQpYCtdXhqwl1pl0u3TZ08y3BXYNg9BycdpGRMWSsAwsApJRgNuI/dfDKu0uMYF -/pUhXVPatQKBwGgLpAun3dT7bA3sli5ESo6s22OEPGFrVbQ1OUHDrBnTj742TJKJ -+oY0a2q+ypgUJdx94NM2sWquJybqBaKxpf8j4OI3tLjc3h5SqwAwnE13YZRSmifP -K1cP9mBjMFM4GLjhWUfwVkxeG/kLlhpP7fJ2yNbRjHN8QOH1AavdLGRGts1mA1UF -xMHUMfbUd3Bv2L13ja/KhcD2fPA4GcLS9tpXV5nCwdkg8V4LdkBmDR04rotx1f44 -6Czokt2usmfHQQKBwFkufxbUd2SB/72Rnxw27hse/DY5My0Lu70y9HzNG9TIiEDA -YwgBdp/x5D04W58fQuQ3nFcRkOcBwB2OYBuJr5ibvfiRnyvSMHvQykwBeSj+Jjbo -VinGgvfiimDdY2C48jyrFzLHZBHXd5oo/dRzT3Bicri2cvbhcQ7zHY1hDiK7AL3r -q1DALmMjpXzQcXdwZ9suCrgQwtIhpw8zAEOTO7ZeBT3nr5lkYUy9djFixrRJyjGK -fjNQtzVrAHrPStNr8QKBwQDCC0zhsCnTv4sAJmW7LL6Ayd5rbWhUZ6px1xY0yHMA -hehj+xbaiC6cfVr5Rg0ncvaa8AExu4kXpVsupTyNwvC4NgzLHtfBw6WUdOnd1awE -kSrDtDReBt2wByAcQwttQsrJ1/Pt6zcNJJI4Z9s8G4NTcQWJwUhU20N55JQKR//l -OQJqhq9NVhte/ctDjVwOHs/OhDNvxsAWxdjnf/O2up0os+M2bFkmHuaVW0vQbqTQ -mw7Vbzk2Ff5oT6E3kbC8Ur4= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAQKCAYAe +BaCCgdJk+xk1USg9cuo5ykBqzTSYlQLXdDlN2oO7sGehJhgvVEGX+QdM3ze+oM2B +wNd3tQDB2iKo11oCunDh4/m2xhq6wA+iPK8POoWRSUf+VJb6xlsTmurENV1s8IHz +GrPqM87OePFGqg/fEuQVuAotObzppVMfNdxHm0er4W6zRMw2rWqDnAOCQ5zDQ1/p +ryp5rYpA49M+R9NoAMlByHRbR7s+6Qnk3NuIMDmUcpF2xeQ/KIMUiHnLEU/gKDpi +bsk+VtyjlibR4zhh9/cJrLTApAIA+4eC176EJvKXCh5UIjd92JC7741HTNQXJpvG +9PXbzhyUCmncr04U+46snGHdwD+lG4LS7oBGACTLMtpcMrlgAm6XCg4T8gRVE/9n +FvCkqPHBR+vnhOxm+0x0yUY/DstJby6IPYPsfGK/s2n//j/vJrAZE1Pxlm9EPU13 +MRLcHstwjAc/NXRPnUN1DfcQvPLx6Tt6rqw3Wm1KO75kM+HZ56BX9/Bi1TgkiI0C +gcEA5JTlXssJ3W8Cz6w1ZtGsThHQBDbvHF2D5AdqO7y6/eqzCQgBQl9BTfXOzsvP +I1gf2CLEFBtGK09UjAuJQg90/NlKur7i7xt7HpAzEfGsDAL4P5BW5JnMNrzpJjjL +0uUDsPJlA75Wi29N2SFiaIslY0sZ6nckInat5GRe4O1AMSHoJ5suY9yTZTU3XB4O +A+XyddutI1GsFZgl8/8LyyNMcyNjxG3T5sr7IKf5/nIv6oMDjC2zLVZa8QS/MEnL +Kaa7AoHBANhEsxfcjw2MaPkrsqAsOP0dDf7g2rdz6wKT5BzZu9e+/E76NmvVDpns +e+kCjql9Os3/wonOMINvn1bTCQGTgk8+dw1fMyqg+zQCvH4ImcE6LSqhzblVHsIB +zZ7rW86trri1U9+olNHG4nwkus0i4LV8eeORns+j8DgXr6/eOvjX3ZW5TyU7/Qgm +SiSdBapzJbom3xJrbo9KQsrN5PVCOwuwrgY0o+2BeKyKhnt4uGv0bR+ii06EOJUA +WvjD7gLI9wKBwGVRXk3jH29IOm3EvjLh80bzfEmx89CV3tUfOEZcRGIyOsNhCfXa +dP7SWqWtDxZyhELwPgtPf43I7wfYQTHH2ioNQqN94ubrPmpwrkJg5cq5MkIyf2F6 +jlsg5xMrD6VeH4G6H25GWuQZJN9+fbkrHBpj+ovD3X9tLWzT1H5Miyx8BAQyM6DN +74Nn0C8Dn2C49vyor5i9JdK4ivIY9ahH8CYE5L73k3p0NFXoPtY61ORUyCjFROtu +oIa+fOQxgVzn6wKBwQC3DD7BnY7/Gq7m51ODOqrpoaPs7Qhyagyp298hhDD3hNEt +T56sWmLHaV/fcqipUDNrlGRmGzz4ooutA2YGDYIn7Gj7ym4WULcN6Jr92e25nLIJ ++XWUvjUQZFJThkXogxz1fZSGI7wCamHcTYJGipTDR54rPV+7w7hY4cN0CZbEdIE6 +buRMUZ/zO+VZZAYdpORz0N7SSlgDtAkgenCmHe64EEzbN8bgCcvHzl/RNfZyeSm7 +supSBJuXkfttvvg/JzUCgcEAlx0Pep9qCLvpk0WqzijBVHc3zK4wYxjhN2MBkF42 +SLWfogKpiPfIqxX6YF94roIA0VlW6Pj50v+sbPwq8nwsgFNhml80A4ODKr3O3Y3M +fXDBJW5W5ZRb/vhIKRjXyCSckSRfj7N8HUYjCLkxQansNWimrldmSet0H2mYJN0Y +JpBXdqpa76zoHzWpKFwD0fSVzvnMelPHSDCNOdIEHmR8e1x2F1/ufR/9/dBzPULY +HMj0OhQHoi8kJyMIj3+bQkbC -----END PRIVATE KEY----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + cb:2d:80:99:5a:69:52:5f + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=allsans + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:c1:1a:f8:fe:53:2f:d5:53:24:d1:9a:62:00:d5: + 41:04:35:38:61:d3:ea:56:38:37:2f:bd:49:64:78: + 8a:3e:5d:32:77:16:11:78:fd:15:63:22:60:c7:8e: + 8c:e5:db:c5:df:d9:3c:ca:9e:f4:09:6b:52:82:a6: + a6:bb:7e:bf:1c:2f:d4:0c:c2:4e:29:1f:e4:b8:ba: + 5c:4e:bb:4d:81:97:76:1a:7f:1d:a8:25:55:0c:2f: + 7e:ef:72:22:60:fb:39:33:3f:1d:64:de:d5:c5:8d: + 79:2b:2c:68:d9:c0:ea:2e:7c:10:b7:02:63:ee:ab: + 6c:47:14:1c:c7:ae:fa:79:fc:32:11:1f:6b:25:40: + 53:3d:7e:95:59:cc:de:fb:81:8c:b3:c5:b6:b4:c0: + 27:c2:3e:90:9f:78:91:51:c9:82:96:f1:ce:cc:5e: + bc:27:33:cd:98:b4:4e:d1:96:77:f6:db:b1:24:09: + d3:0d:69:27:99:2d:42:31:79:5a:5c:9d:27:2a:66: + 5d:12:21:b4:77:60:48:95:d0:b3:c5:93:1d:30:24: + 59:bc:a9:41:05:53:f8:7e:d2:36:a6:83:2f:ce:37: + ed:75:9e:a9:8c:96:9d:c1:8c:d8:bf:25:35:6c:6b: + b3:7b:03:77:6f:74:70:bb:55:59:6b:5a:75:20:53: + a3:28:4a:78:b2:2f:a8:a3:a6:e7:32:1e:d6:73:2b: + 69:89:cb:4b:07:47:c3:da:74:72:a8:c3:43:b8:db: + 7f:f9:37:c1:8a:4d:23:af:68:63:17:4e:30:1e:38: + 6b:3e:f7:f3:f5:65:8a:37:22:38:d0:3f:3f:cd:57: + 74:25:84:af:33:46:ac:45:dd:c5:b4:7a:41:c7:91: + 3f:bf:8d:98:c2:bd:22:a6:ea:67:5b:31:0b:a7:28: + 4d:56:f9:da:24:01:cf:35:e6:96:f8:f0:cc:df:d5: + e5:8a:77:fe:d4:c9:47:fb:09:7b:ac:b3:20:1a:27: + 77:25:a5:a2:b5:b1:b6:e7:f6:6d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Alternative Name: + DNS:allsans, othername:, othername:, email:user at example.org, DNS:www.example.org, DirName:/C=XY/L=Castle Anthrax/O=Python Software Foundation/CN=dirname example, URI:https://www.python.org/, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1, Registered ID:1.2.3.4.5 + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + D4:F1:D8:23:E0:A7:E9:CA:12:45:A0:0D:03:C2:25:A6:E8:65:BC:EE + X509v3 Authority Key Identifier: + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD + DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server + serial:CB:2D:80:99:5A:69:52:5B + + Authority Information Access: + CA Issuers - URI:http://testca.pythontest.net/testca/pycacert.cer + OCSP - URI:http://testca.pythontest.net/testca/ocsp/ + + X509v3 CRL Distribution Points: + + Full Name: + URI:http://testca.pythontest.net/testca/revocation.crl + + Signature Algorithm: sha256WithRSAEncryption + 70:77:d8:82:b0:f4:ab:de:84:ce:88:32:63:5e:23:0f:b6:58: + a2:b1:65:ff:12:22:0b:88:a6:fa:06:40:9a:e7:63:a7:5d:ae: + 94:c5:68:3c:4b:e9:95:34:01:75:24:df:9d:6e:9b:e4:ff:3f: + 61:97:29:7b:ab:34:2c:14:d3:01:d2:eb:fb:84:40:db:12:54: + 7e:7a:44:bc:08:eb:9f:e2:15:0b:11:4f:25:d2:56:51:95:ad: + 6d:ad:07:aa:6a:61:f9:39:d5:82:8c:45:31:9f:2a:ff:18:98: + 49:0c:bb:17:ad:d5:24:d3:d1:c7:c4:10:3e:c4:79:26:58:f4: + c5:de:82:16:c4:c3:c4:a7:a3:62:22:41:90:36:0f:bc:4c:fd: + 6a:18:22:f2:87:e9:07:db:b4:3d:65:00:e4:70:f9:d6:e5:a8: + a1:b9:c9:9d:e7:5d:78:aa:98:d5:f8:f4:fd:5c:d9:4c:d0:6d: + bf:87:71:d3:5b:ec:f4:bf:46:f9:c8:f8:10:c5:72:af:c3:15: + b9:c4:06:67:0b:3f:f6:f4:64:c5:27:74:c1:6b:00:37:da:ea: + 18:36:77:36:a7:3e:80:2e:5d:54:0f:01:df:ce:9e:97:dd:c9: + f2:8b:59:82:c5:65:31:c8:73:20:fd:24:23:25:d8:00:df:90: + 93:26:76:08:0a:06:a9:0e:d3:d3:4c:6f:ef:a7:fb:de:eb:2a: + 40:b9:e4:b1:44:0c:37:ca:c6:9e:44:4a:b4:7c:2c:40:52:35: + bb:b3:71:28:3d:35:fd:be:c9:4f:54:b3:99:c5:5f:84:38:fb: + 2b:fb:ea:dd:88:e8:9d:c1:9b:67:87:3d:79:7b:3d:7e:61:1f: + 70:3c:b7:c8:4c:17:a5:0c:a3:28:c7:ab:48:11:14:f7:98:7a: + da:4e:fb:91:76:89:0a:a6:c6:72:e0:96:d9:f1:80:ea:68:90: + 37:5c:c6:69:c7:d7:bc:c7:d1:ae:5b:a9:12:59:c6:e4:6c:61: + a9:8b:ba:51:b3:13 -----BEGIN CERTIFICATE----- -MIIHMDCCBZigAwIBAgIJALVVA6v9zJS5MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTgwODI5 -MTQyMzE3WhcNMjgwODI2MTQyMzE3WjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO -Q2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0 -aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB -igKCAYEAoP6TOnT+wUxTXKnusCCSAQex48C+Nm6dL43AlZeGdzEVhbMGKX8cvqPv -Pj4LjKeCus53QOX8DZCvx9x5rWp53FHz6p1dLrDdDR0Bof3/cUaDZgdati+5E7jv -faNCi0IL6J0U9rJ3/K6vZ7T0c4R1BmIaIO88zcXrWFd9PTx6T69fQXCnqQ7TOUTJ -NmgZ6Deb7SLaK414g6LBZuqOcEB63LqXFcnbM22uj++QRG3NVyFr6thb/JrmsOKQ -nvNUGCDci6oHDzTv5xdzrORCOByowjUUgjoTnFqmHLVy1zfZQXTAQb0HN8w5mM4d -XiGXsM2Vz1REE998T5IccxzZoXCHLaVl+C00RehbpZHG3rmQ4Gt4JGWCX/zOiKVN -VmF6+qvLDcW4JkUV/zbh6FfaA8AcyxtO6ylIqkR34xqqAkZplXlWKa8r11DYxxh9 -J5Vc8//JU1MQJyaKztxXXCPusyi1DyAnQJb8+dQB+sqKYDxYa3YANKVczzui+RvE -kUAsSoQFAgMBAAGjggLxMIIC7TCCATAGA1UdEQSCAScwggEjggdhbGxzYW5zoB4G -AyoDBKAXDBVzb21lIG90aGVyIGlkZW50aWZpZXKgNQYGKwYBBQICoCswKaAQGw5L -RVJCRVJPUy5SRUFMTaEVMBOgAwIBAaEMMAobCHVzZXJuYW1lgRB1c2VyQGV4YW1w -bGUub3Jngg93d3cuZXhhbXBsZS5vcmekZzBlMQswCQYDVQQGEwJYWTEXMBUGA1UE -BwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3Vu -ZGF0aW9uMRgwFgYDVQQDDA9kaXJuYW1lIGV4YW1wbGWGF2h0dHBzOi8vd3d3LnB5 -dGhvbi5vcmcvhwR/AAABhxAAAAAAAAAAAAAAAAAAAAABiAQqAwQFMA4GA1UdDwEB -/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUoLHAHNTWrHkSCUYkhn5NH0S40CAwgY8GA1UdIwSBhzCB -hIAUoLHAHNTWrHkSCUYkhn5NH0S40CChYaRfMF0xCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnOCCQC1VQOr/cyUuTCBgwYIKwYBBQUH -AQEEdzB1MDwGCCsGAQUFBzAChjBodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0 -L3Rlc3RjYS9weWNhY2VydC5jZXIwNQYIKwYBBQUHMAGGKWh0dHA6Ly90ZXN0Y2Eu -cHl0aG9udGVzdC5uZXQvdGVzdGNhL29jc3AvMEMGA1UdHwQ8MDowOKA2oDSGMmh0 -dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3Jldm9jYXRpb24uY3Js -MA0GCSqGSIb3DQEBCwUAA4IBgQAeKJKycO2DES98gyR2e/GzPYEw87cCS0cEpiiP -3CEUgzfEbF0X89GDKEey4H3Irvosbvt2hEcf2RNpahLUL/fUv53bDmHNmL8qJg5E -UJVMOHvOpSOjqoqeRuSyG0GnnAuUwcxdrZY6UzLdslhuq9F8UjgHr6KSMx56G9uK -LmTy5njMab0in2xL/YRX/0nogK3BHqpUHrfCdEYZkciRxtAa+OPpWn4dcZi+Fpf7 -ZYSgPLNt+djtFDMIAk5Bo+XDaQdW3dhF0w44enrGAOV0xPE+/jOuenNhKBafjuNb -lkeSr45+QZsi1rd18ny8z3uuaGqIAziFgmllZOH2D8giTn6+5jZcCNZCoGKUkPI9 -l/GMWwxg4HQYYlZcsZzTCem9Rb2XcrasAbmhFapMtR+QAwSed5vKE7ZdtQhj74kB -7Q0E7Lkgpp6BaObb2As8/f0K/UlSVSvrYk+i3JT9wK/qqkRGxsTFEF7N9t0rKu8y -4JdQDtZCI552MsFvYW6m+IOYgxg= +MIIHDTCCBXWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2Fs +bHNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAaOCAt4w +ggLaMIIBMAYDVR0RBIIBJzCCASOCB2FsbHNhbnOgHgYDKgMEoBcMFXNvbWUgb3Ro +ZXIgaWRlbnRpZmllcqA1BgYrBgEFAgKgKzApoBAbDktFUkJFUk9TLlJFQUxNoRUw +E6ADAgEBoQwwChsIdXNlcm5hbWWBEHVzZXJAZXhhbXBsZS5vcmeCD3d3dy5leGFt +cGxlLm9yZ6RnMGUxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJh +eDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xGDAWBgNVBAMM +D2Rpcm5hbWUgZXhhbXBsZYYXaHR0cHM6Ly93d3cucHl0aG9uLm9yZy+HBH8AAAGH +EAAAAAAAAAAAAAAAAAAAAAGIBCoDBAUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTU +8dgj4KfpyhJFoA0DwiWm6GW87jB9BgNVHSMEdjB0gBSziqCiunHxqCR51KRbJTYV +HknIzaFRpE8wTTELMAkGA1UEBhMCWFkxJjAkBgNVBAoMHVB5dGhvbiBTb2Z0d2Fy +ZSBGb3VuZGF0aW9uIENBMRYwFAYDVQQDDA1vdXItY2Etc2VydmVyggkAyy2AmVpp +UlswgYMGCCsGAQUFBwEBBHcwdTA8BggrBgEFBQcwAoYwaHR0cDovL3Rlc3RjYS5w +eXRob250ZXN0Lm5ldC90ZXN0Y2EvcHljYWNlcnQuY2VyMDUGCCsGAQUFBzABhilo +dHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9vY3NwLzBDBgNVHR8E +PDA6MDigNqA0hjJodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9y +ZXZvY2F0aW9uLmNybDANBgkqhkiG9w0BAQsFAAOCAYEAcHfYgrD0q96EzogyY14j +D7ZYorFl/xIiC4im+gZAmudjp12ulMVoPEvplTQBdSTfnW6b5P8/YZcpe6s0LBTT +AdLr+4RA2xJUfnpEvAjrn+IVCxFPJdJWUZWtba0Hqmph+TnVgoxFMZ8q/xiYSQy7 +F63VJNPRx8QQPsR5Jlj0xd6CFsTDxKejYiJBkDYPvEz9ahgi8ofpB9u0PWUA5HD5 +1uWoobnJneddeKqY1fj0/VzZTNBtv4dx01vs9L9G+cj4EMVyr8MVucQGZws/9vRk +xSd0wWsAN9rqGDZ3Nqc+gC5dVA8B386el93J8otZgsVlMchzIP0kIyXYAN+QkyZ2 +CAoGqQ7T00xv76f73usqQLnksUQMN8rGnkRKtHwsQFI1u7NxKD01/b7JT1SzmcVf +hDj7K/vq3YjoncGbZ4c9eXs9fmEfcDy3yEwXpQyjKMerSBEU95h62k77kXaJCqbG +cuCW2fGA6miQN1zGacfXvMfRrlupElnG5GxhqYu6UbMT -----END CERTIFICATE----- diff --git a/Lib/test/capath/b1930218.0 b/Lib/test/capath/b1930218.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/b1930218.0 +++ b/Lib/test/capath/b1930218.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/capath/ceff1710.0 b/Lib/test/capath/ceff1710.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/ceff1710.0 +++ b/Lib/test/capath/ceff1710.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/idnsans.pem b/Lib/test/idnsans.pem index e8a41fe5e565e..cbcac7818ddc6 100644 --- a/Lib/test/idnsans.pem +++ b/Lib/test/idnsans.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/wIBADANBgkqhkiG9w0BAQEFAASCBukwggblAgEAAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAQKCAYEA -qNuhjzYPkKNvHDxLJuKd2QXYEcWKzEjwvqRsh0/HI2UBMXM/bwws0/7mtPPKQM55 -XqPT8XvR9JVP2wZ6NrZN8J71BqcGVGq7BIWeuXbtfR3hU6F3m9eNKRkp6En3TcRq -Q3SwQ5oID86wkf6XPSGrvWKRyUObg0BpBY6XmPtP+T32MXAQKg/rY9k4GAfFuA59 -EowN7uOGT80j5Qzcvsa1tFHH3bxj2B+2VDVdmlrOJXxcamKvdRnQ2gSpbmdCv/4X -HKmRiP7m2qVMxRaNh3kcL/gACGvZw3rUE7K0PwjW+sQ6lRlWF9IqUSDZaswxWrie -EaM2et9qD80g3eUV3gMi6I8BIdmD20p/yqa/l0bQk75Y6KQRUlN5HTodFL1u4/7V -W9N9wVIlx5DB1yJBkCZBDoebr4Y1UOGs4rrkcOd6F+zCeRSwKPFAng5vHpZ8jclS -1X2pV/KnKWIUfcFH9+v6pD9Y+VC5tz5LgaFz4SYFxgMF69t+PCpdoR2+0zwSWKGB -AoHBAPr/bC0L7V/HXeoiNxXjOSAYDgyVvzZC3i8cbW2/7DqdY7DfDmZbabdEX1mu -kaY9S/5abVV5W1eQACh1Cd/MaRkUbm+5nTy/bF9jXfh8408MzrGbAR9KF9GfWgqC -UxRiAkCa2gLuAhfc6uqokf5yZK0F+kZGGYWEeGcFK46i+8JstqknW0LsN1hhd+wE -PFokf+/22NiV0t1T0GERz18fFu0XoQC60D9qaW56EI+6OTADw71XkVh35jbNBa96 -bLPVzQKBwQDEVGMtpARdwoU59fRfDBo9S8iJJ/jTFpJs5nrqGZKah4J2pkTBiDpW -ZNxesVKL6IuvWghIuZGnBw5ovWT9JKQ2NHD4GDm/XJ6veVWOxc7THiBhCvJaG5N7 -3Jbxyn+eJ5yBO9PeR6slZbDrgDSIFUI++XD9A7abod8eTZHh6Q3pYT5mRuvfuDS1 -nlrkvMgGC1ZCQXCVTdq8MmMS9jea4UXhJLn4paGSKQSYXWLWVxTX3Mgk0640XpXN -HvsdCBMgFpECgcEAtESQkAXZ9Yk9tTPftlOcqqU8KeO/EhyScOmM2l8WLb7uY5DA -SdlrotlzVfjf2LJ7ivGtRs9DQC9HPcdZUSgBb6bR7mI0QPYGwreePSKNKzA6nyqB -ctSHKOG3DIcvXhtKHNZar/H7BOKAwgpR2JqWHgKGDsS3/cH3q531+5qpEKl9wx1m -GTmIQmy2cYdVRTSjwlfaxCtO5/ETXzQoaNvuXlgzJVAG0xT9JgB7No78FbUOd0WW -OSDb8g3sAGz/92UdAoHBAJqaOV9/gVC0FWWHIWCXjzIls00OhQr1A2luNeyTJrc5 -bqswU4RzWj0eP8rxqCc0gIsdQtjCCMiW7enc+uG9MPLeaPd1XEQtE2jrC0zax/vI -BYdlr2L1xDYNh2/wHn7UgpHiIv0vQr64TZGl67gdxYUBuNAFVI9J8QFT5EUZ2TKm -uRShVK1fyWIbyUfGwVzBILQcBCQOoukAZLRR34e/Td/1o90B0THfyxaQs3xGJsu1 -uIYHi28B7MUSWHyMF0N1gQKBwB9jtS7k7ZRgb0WzsgutRzJLfirmMeahzJwAQ46o -2xRT1y7vr0Idh9OSTz8Iqva6Frse21HT6agymamqEeC2aYwq+ikA0V7K3AhG3PiN -S5diC+RIZybeTthBTO1yj5pKDniZl+NGe3vIunXMrjZIuk/03VFK2etqdYcXguwH -SkwvuKqC3vvzcJW8dV2qIJ3Bz9LWz0QKqJQZBlCZvfzHf1jN5rpJJPQezys4k723 -ZPGg6Smyks3ElGXevVdidVcPUA== +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAQKCAYEA +uaYWWwHW6pzxOrnabcVLYX0WunW9LVShbIw97AElI2n/LuhkXh6xkK48BsqP0vaK +oDHJ5VYxgQdmoP03Zs8sX4BSWe7twg1u8wJxkA+cUXI1BAn0opHjpwJlalEEfe2v +s8PwjMrF59nsCq56W42PrDlms5UmuQ5WLsw6Co++hZmfxW7LPu+GIS6qBZfluNT5 +kBpZlDDCtkyteUD4SVI3wvmOSi+Wzv4e7P2wC9kByjENIcfhC5QQURRD4sA1hWCp +2SThYWqJOCEc2SvGgoqgTRaJuQ2aVG9qrntXt0N4V+WdJWXBK0jedkB2flLve1fR +KmDYuc9k/c1svmS3Y+iZohBha9H8jpuJmXYBxxg1iNg9m7qkfg8F8wxCYLQKB+U6 +tjRS7by+jSE08On7mpDDhJORnlh+rfEuWPPwAKQpLpdp76KDTvR++GvfOMUiOrFM +e9s5aXp+vcgkSSqYvigE+sFpCjQWwkGBkMdT16Pf9CzhQaM08YuLnzfLEYgLFw6R +AoHBAN5NQINBmlq/cptGSru66kfecqHfI7xHnnGWKAkto/B1x7Crrgs4Tk5b4vaA +JmAqatt5P1e7zco7uAXXebY5VURuH/30TlkuaB+oGFp0OMw6165n8RVPT2ZaDViK +ssJ9LT8fJ+23TWCCT2Z1zUlM/NnHAMjKOVsJK3/KEkVvlc7ROC7uVooc78AsQehg +zpL3GBYEeBukT8aNUMqUlesCsIs/dQHW7DzQL2xGkQagm5/PDsxaCsT7ynA8eL3X +TW+IXwKBwQDZTV3TaG6wqtL8y2DR0lN5jY/eYayX4e18iZ+XEZVTntPdVVyJIE4d +0A5ZfcILb9WE8R21iptROYSjcH/05j+3fQMJ1WAK0sNfGTUNNT3jYU8YzLvos+wW +G8E+mNMpFPWNvLV5Qrl4VvoifGh8AMvplUEz8uAzGJbXbRxUPcmjth2ph8zULEDn +/+o4OcT3gh1bp+HCqch0OuiJRn9qNUpsJG5GMm5FtjBjZM97ucZ1/0DaWl3JUxUN +/pueo3J9vCUCgcBg2Fjdlcvv8u2z1aijJmgATVm1SWfhE3ZkV50zem2sSTNotTJK +cwoyOveimeueA3ywBp9g0lFx5Bhkex3sFAggmrVXRoKHeZ8lA28woOdJmezybxfp +R7b4iQy9YRdFgZEfqawUdMHB5KNAqNt5LpANNBQUZX0dOt53eooBM/6Yri8CyxRq +cPbFysIfwWTdQ8Z7eRD2Qdv7TP9AcgDp9C8DSu7nkUEzsSKn0gpGT9vcgDEbN7Lv +ZB4qTT3wvoZeq5MCgcBIG18eDtJkN1sp3Yb0OTnP5QSvg3PVNngq0jQt2fzWMacW +FARP0HN7exW35n4kc2jD44q7OhJOAqsb3PHo3xqXlZkTg0WKceO4w9GR32/46spn +bVCRaFrX/z/BuM6hHD5bWRpS8aw/3YTFOsklFNKVYRyw01BIREmRlLhIz/QAKidv +oQt8AG9NTON44tqUUw3Q40WL5fEJeJ6/JrCTGrnmZrRdANEMuucVpFchNEVB1IC9 +tCzY6IPdD/atzojoZi0CgcB2x9oWLjJ0XJIp2pMAb8nCMVjkKrznKFjZbDm8EQBs +ou7pM2zkO3VRcWT1BXQocinJsjQqjQiTawP6IN2FQgT0d89V+pwd+jdvpdildQhP +1/6SErVRZV//oopKTsC6TIBL/EmW1TkP3ulQIZs8YklFgybeHdDyNFi+VgPXkVGe +IHp0nEzrui9q0YJsjHfFHBeGyzDSfbiBYiF7Auk66gYZbXufebP/LZNG/FIamPP3 +rwYIeeV1IVwk9tPBw6fGwrs= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: - cb:2d:80:99:5a:69:52:5f - Signature Algorithm: sha256WithRSAEncryption + cb:2d:80:99:5a:69:52:60 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity - Not Before: Aug 29 14:23:17 2018 GMT - Not After : Jul 7 14:23:17 2028 GMT + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=idnsans Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c0:7e:4b:df:82:74:ff:f8:04:ea:22:24:79:92: - c8:06:5b:81:09:2b:dd:34:32:40:6c:63:d4:d7:41: - c3:5d:6e:b1:aa:6f:21:b8:13:01:2f:6c:35:b3:b0: - 05:81:aa:08:3b:e8:09:6d:a3:b2:60:c4:a9:76:80: - db:24:cf:74:f4:d3:bc:72:70:e5:40:cb:8c:f7:d6: - 0c:c4:58:c4:f1:f8:6c:4d:6c:28:a2:70:97:c2:66: - 3c:3a:67:80:a4:fd:48:a9:a2:85:c0:03:2f:d2:ee: - 3c:02:cf:7e:bd:13:84:46:6b:98:ec:23:1c:49:f8: - d7:43:a8:08:5e:a1:13:88:79:42:9a:c2:47:c5:ef: - 15:d3:cb:39:30:b9:3b:8d:8f:66:1c:57:f4:ef:25: - cb:06:54:64:13:8f:8b:59:55:26:c3:56:f2:f7:f0: - f9:50:5f:ad:95:a0:69:84:0c:af:29:97:c1:8b:d8: - 65:10:2b:7c:be:80:fd:95:14:31:de:a4:6c:6a:a9: - 7c:4f:2c:84:f1:a5:d0:45:68:8a:10:71:8e:18:57: - e9:c9:b4:db:bc:be:55:33:0c:c8:b3:08:72:88:23: - e6:0f:f4:97:6c:b7:13:8b:0b:21:1b:9a:32:ef:de: - b9:38:b4:78:08:26:e3:9f:3b:24:61:dc:a8:c8:71: - d8:21:98:d6:5c:67:bb:ce:be:96:eb:df:8d:60:28: - 13:51:2d:59:ac:03:1b:49:0a:aa:8c:7d:6b:cd:39: - ce:ab:5d:fa:76:d1:b0:a7:2f:f4:83:0c:97:81:ff: - bd:7f:29:f5:5e:55:a7:df:5d:1b:5f:11:67:30:25: - 6e:98:46:9e:e9:d8:c7:9a:97:30:2c:9d:40:39:c6: - c7:0e:28:8b:58:86:f9:89:d4:52:65:50:1f:0b:0d: - 9f:9d:58:44:a5:77:66:b8:08:87:4a:f6:5a:6e:7f: - 72:c3:ab:2f:b0:99:c1:93:76:7a:15:a2:2d:91:4f: - af:12:0d:81:c0:6f:f6:db:b7:1d + 00:bc:b2:aa:65:4e:e1:ee:2e:36:d6:4c:be:52:2f: + 60:f5:7f:0f:54:e9:64:33:2d:50:05:e6:0b:32:85: + de:65:af:61:69:7d:8c:23:ae:86:f9:31:ab:fd:d5: + a3:8b:6c:94:53:be:83:72:5e:c2:76:e8:53:d2:d1: + 1c:9c:44:65:db:a2:67:08:10:9c:57:1b:2f:5a:23: + ed:0c:2d:80:6d:d4:6e:66:82:a0:87:f8:77:15:0b: + 03:f3:08:d9:61:56:74:f0:be:98:00:ef:2f:33:b3: + 7f:ba:7b:36:40:3d:69:05:d3:25:8e:31:82:ed:4d: + ca:bd:03:91:96:79:ab:ed:e5:53:20:9b:52:99:17: + 78:0e:e2:4e:7c:a0:fc:a4:dc:07:bd:0f:42:c0:69: + 8b:17:e8:31:62:05:8c:78:d5:e5:11:e5:46:d2:6f: + 92:18:5d:a0:dd:f1:de:a3:a9:6f:e3:9d:88:60:73: + a0:b1:92:fd:60:4c:91:67:f3:b5:79:96:b1:b4:bd: + 83:12:45:4b:56:0d:0f:58:26:1f:c4:28:0c:63:1b: + 0e:c0:79:8e:36:f6:9e:93:13:85:28:26:10:e6:a0: + 56:11:d8:d2:ef:6b:08:4d:22:99:71:a2:5f:ef:d1: + fb:34:bd:e1:50:8c:8f:d4:b1:30:fc:da:d4:5f:9d: + 82:f8:21:7f:2c:ce:12:ec:13:9f:f9:22:af:1a:88: + b1:e3:55:b2:0c:c2:60:d8:01:ad:0f:eb:70:29:da: + 47:f5:6e:24:a7:f6:6a:43:2f:c9:50:6b:34:a8:ca: + bf:31:cc:8a:b6:41:2e:47:32:f1:9b:78:c0:26:4b: + 48:a1:d7:46:71:f3:8b:95:9a:45:a5:6a:f8:2f:b5: + 27:e5:c3:c2:bf:65:74:fd:73:bd:2b:66:9f:d3:74: + 11:98:f7:97:0e:16:c6:e0:e5:4f:f6:d0:cf:cb:96: + 98:ac:f6:d7:01:09:aa:15:69:84:85:ba:96:ad:ac: + ff:a9:f3:2d:7d:a8:fd:a7:79:bb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 54:53:0C:3C:4C:E3:63:C6:56:08:35:9C:5E:F4:C1:A1:04:3A:C2:C9 + 5C:BE:18:7F:7B:3F:CE:99:66:80:79:53:4B:DD:33:1B:42:A5:7E:00 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,64 +106,64 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 03:af:93:ab:58:98:74:3c:a1:68:53:18:13:be:56:60:77:d0: - a7:0e:c9:8a:02:1f:92:4d:21:18:61:d7:3e:9a:1d:aa:94:37: - 02:59:31:3b:71:62:d9:cb:04:e8:c7:44:41:f9:0e:0d:90:d1: - 4a:ab:4e:e2:bd:4e:60:1b:3c:eb:2a:b7:8a:ca:24:58:60:64: - d3:a6:20:f6:f5:98:6e:ca:5a:0a:91:63:97:58:f5:18:90:9f: - 17:55:9f:12:cf:22:a7:31:e6:90:da:36:61:3b:d6:42:e6:18: - 19:43:bb:17:52:28:40:a5:11:47:7f:32:fe:83:3d:c3:7d:8b: - 17:1b:5d:f7:20:3e:bd:3b:16:3d:00:01:68:ed:76:7a:a1:af: - ce:cd:dd:52:7f:19:22:db:83:c1:89:b6:90:02:4e:22:bc:b1: - 76:0c:00:ad:c5:3c:33:be:64:92:30:38:1f:b1:04:4f:53:a2: - 4a:fb:63:80:21:8b:03:72:72:4b:df:f1:9d:08:75:f0:94:06: - d3:cb:7c:df:3b:80:19:58:7a:85:ca:2a:bf:b4:8c:5d:f3:b6: - 65:24:37:b2:1d:46:da:1f:39:48:f2:eb:3a:84:98:3a:0c:59: - ff:0a:05:c2:2c:8c:b1:a5:a9:43:a9:8e:47:97:9a:d2:40:9c: - b8:c3:e6:46:1b:db:4b:85:a3:e1:e7:4e:2a:1e:b9:a6:de:ee: - a7:f0:63:3f:0f:e2:90:b6:82:70:4b:93:7f:e9:74:f3:ab:03: - 9e:04:38:f1:46:2d:f6:fe:77:0f:4a:8e:66:23:74:3e:c6:5b: - eb:0e:dd:72:c3:46:1d:a4:f0:2f:b6:18:2e:f1:1c:f9:85:69: - 0e:5a:37:5e:f8:ea:4b:2d:e7:63:ee:a1:e4:b9:f7:fa:a9:11: - 65:64:a1:b7:b5:91:81:5c:4d:b5:27:b4:16:96:4b:df:fc:c4: - 8a:26:b6:87:62:54:88:fb:1d:7d:af:97:25:65:27:38:1e:f7: - 8c:a4:16:46:f2:d9 + 5d:7a:f8:81:e0:a7:c1:3f:39:eb:d3:52:2c:e1:cb:4d:29:b3: + 77:18:17:18:9e:12:fc:11:cc:3c:49:cb:6b:f4:4d:6c:b8:d2: + f4:e9:37:f8:6b:ed:f5:d7:f1:eb:5a:41:04:c7:f3:8c:da:e1: + 05:8e:ae:58:71:d9:01:8a:32:46:b2:dd:95:46:e1:ce:82:04: + fa:0b:1c:29:75:07:85:ce:cd:59:d4:cc:f3:56:b3:72:4d:cb: + 90:0f:ce:02:21:ce:5d:17:84:96:7f:6a:00:57:42:b7:24:5b: + 07:25:1e:77:a8:9d:da:41:09:8e:29:79:b4:b0:a1:45:c8:70: + ae:2c:86:24:ae:3d:9a:74:a7:04:78:d6:1f:1b:17:c5:c1:6d: + b1:1a:fd:f4:50:2e:61:16:84:89:d0:42:3f:b6:bf:bd:52:bd: + c8:3e:8e:87:b4:f0:bd:ad:c7:51:65:2f:77:e8:69:79:0e:03: + 63:89:e7:70:ad:c8:d1:2f:1a:a5:06:d2:90:db:7c:07:35:9a: + 0b:0e:85:87:d1:70:17:a7:88:0f:c6:b5:9c:88:00:fa:f9:b2: + 0a:19:5a:4b:8d:91:12:51:5e:0e:c1:d8:9e:02:78:d0:2d:24: + 09:fe:d4:97:3c:cb:a0:1f:9a:ab:f7:0f:e2:fa:64:23:4e:53: + 0a:15:3e:f5:04:01:86:29:8b:8e:24:40:2f:b1:90:87:5c:3b: + 7b:a7:4c:06:af:c3:90:7f:e9:c6:56:42:61:15:2c:83:f1:7c: + 4f:89:17:f3:a0:11:34:3f:8d:af:75:34:60:1e:e0:f2:f3:02: + e7:aa:b3:f7:9f:1c:f8:69:f4:fe:da:57:6e:1b:95:53:70:cd: + ed:b6:bb:2a:84:eb:ab:c3:a9:b4:d5:15:a0:b2:cc:81:2d:f1: + 56:c1:54:9b:5f:14:4c:5f:ad:5f:f5:06:ee:22:60:45:e4:50: + 35:64:ac:ac:ca:4a:bf:86:78:f8:53:2d:17:d8:e8:84:c8:07: + a4:c2:29:76:c7:1f -----BEGIN CERTIFICATE----- -MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJgMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTdaFw0yODA3MDcx -NDIzMTdaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2lk -bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAaOCAo4w +bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAaOCAo4w ggKKMIHhBgNVHREEgdkwgdaCB2lkbnNhbnOCH3huLS1rbmlnLTVxYS5pZG4ucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2dzc2NoZW4tbGNiMHcuaWRuYTIwMDMucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2djaGVuLWI0YTNkdW4uaWRuYTIwMDgucHl0 aG9udGVzdC5uZXSCJHhuLS1ueGFzbXE2Yi5pZG5hMjAwMy5weXRob250ZXN0Lm5l dIIkeG4tLW54YXNtbTFjLmlkbmEyMDA4LnB5dGhvbnRlc3QubmV0MA4GA1UdDwEB /wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUVFMMPEzjY8ZWCDWcXvTBoQQ6wskwfQYDVR0jBHYwdIAU -3b/K2ubRNLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK +BAIwADAdBgNVHQ4EFgQUXL4Yf3s/zplmgHlTS90zG0KlfgAwfQYDVR0jBHYwdIAU +s4qgorpx8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK DB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNh LXNlcnZlcoIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKG MGh0dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNl cjA1BggrBgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 Y2Evb2NzcC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250 ZXN0Lm5ldC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGB -AAOvk6tYmHQ8oWhTGBO+VmB30KcOyYoCH5JNIRhh1z6aHaqUNwJZMTtxYtnLBOjH -REH5Dg2Q0UqrTuK9TmAbPOsqt4rKJFhgZNOmIPb1mG7KWgqRY5dY9RiQnxdVnxLP -Iqcx5pDaNmE71kLmGBlDuxdSKEClEUd/Mv6DPcN9ixcbXfcgPr07Fj0AAWjtdnqh -r87N3VJ/GSLbg8GJtpACTiK8sXYMAK3FPDO+ZJIwOB+xBE9Tokr7Y4AhiwNyckvf -8Z0IdfCUBtPLfN87gBlYeoXKKr+0jF3ztmUkN7IdRtofOUjy6zqEmDoMWf8KBcIs -jLGlqUOpjkeXmtJAnLjD5kYb20uFo+HnTioeuabe7qfwYz8P4pC2gnBLk3/pdPOr -A54EOPFGLfb+dw9KjmYjdD7GW+sO3XLDRh2k8C+2GC7xHPmFaQ5aN1746kst52Pu -oeS59/qpEWVkobe1kYFcTbUntBaWS9/8xIomtodiVIj7HX2vlyVlJzge94ykFkby -2Q== +AF16+IHgp8E/OevTUizhy00ps3cYFxieEvwRzDxJy2v0TWy40vTpN/hr7fXX8eta +QQTH84za4QWOrlhx2QGKMkay3ZVG4c6CBPoLHCl1B4XOzVnUzPNWs3JNy5APzgIh +zl0XhJZ/agBXQrckWwclHneondpBCY4pebSwoUXIcK4shiSuPZp0pwR41h8bF8XB +bbEa/fRQLmEWhInQQj+2v71Svcg+joe08L2tx1FlL3foaXkOA2OJ53CtyNEvGqUG +0pDbfAc1mgsOhYfRcBeniA/GtZyIAPr5sgoZWkuNkRJRXg7B2J4CeNAtJAn+1Jc8 +y6Afmqv3D+L6ZCNOUwoVPvUEAYYpi44kQC+xkIdcO3unTAavw5B/6cZWQmEVLIPx +fE+JF/OgETQ/ja91NGAe4PLzAueqs/efHPhp9P7aV24blVNwze22uyqE66vDqbTV +FaCyzIEt8VbBVJtfFExfrV/1Bu4iYEXkUDVkrKzKSr+GePhTLRfY6ITIB6TCKXbH +Hw== -----END CERTIFICATE----- diff --git a/Lib/test/keycert2.pem b/Lib/test/keycert2.pem index ed6ae85a4649d..e59d45439d4b6 100644 --- a/Lib/test/keycert2.pem +++ b/Lib/test/keycert2.pem @@ -1,66 +1,66 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDKjrjWZlfOs1Ch -qt1RoyLfqyXbHVXIAW0fTzAxfJnxvFOiWqAAKgC2qVQM8Y080kRUuRaXP/w9ywXT -+MzX6tByy5VbTYJYyTjHOH46EWLNdcqEJs4+FCVqOIYrQPQ6pGAhCXmgBy4Vb42J -ABLwb+Kt+y2Dk15tggVcAHP2Khri+lRXWvda+kZAe2F1IojmuWyCTy3FEYHic5qN -BsXcf6u1oyFV8MybOuz1zGj3vd2C+dEKO4Ohw9rRwnvHSatjM+CfwiXf8kTXzDBF -Z/8W3+6yA49pHxRbG7FE3K1TAPhkrp+BVTIUOcdI74wEA6UEkWFF5sQcmmAth59M -EQrl2CXorftEPhsKZE59dUP1+nYAPvR/mTySNCSw7/rvdf+csRSZ5ollMu/lxsht -ulJYJI03+IiDTn47FI5D+IF25REK7d4LzGIo6T73ktsT+qpSXHuTWC+IABm8AMF9 -7ljxHSwMRU/z+O5uiONRItDAgKH/OItFG54PtY2vAhaO0YiZrZcCAwEAAQKCAYB2 -hTo8IVghlySH5B1p5kXCkDcvVaPaypLaLhCp9Blzq9lX9yUF043lU4Ddrf0RaIsY -88/3IjZqxb+cP0lE0Z20fdDfwqORZfQ2BaU+PuwMAm9EEhy9kDYwR/ChoHkHUyT4 -T7392BWr70Dmt8ddLmp5mK4R/gnTk6+lHJK9p/dhdk4haxWvAyBWHJty2Yk3T6nh -OYkzdUIFidUVza+6jG2hc1lPGv3tmnYKgNeulkblm10oWphz79C6ycx5WG7TNgef -CQ3z7//Nn89YTiaUBjLvoLvxRTMwO96r7E/FaslSl/fWnF3HP3lut26Z/mNfhiwj -qn7AhUwpSNPV0qcxFWXr/rXUjdk745wv8wOODK8atjjE/vt/MRBK0rAOIPSm3ecx -37PKNtR4i+sNeDEcY1IyTHE6wFvJSy5y8AFpn5y8tbqYfhlEVWZ4pcnlrKxhWm7j -oBkB/4GBjKQgbQ7ttym9eNG1wIbZ8v9N06+yeLs/NCc4bFZEgcWjFqBH1bLtAYEC -gcEA8tt8iYNqbsDH2ognjEmbbBxrDBmyYcEKRpg1i1SUopcZl8i93IHpG7EgJIaj -l7aWSbASAxjnK02t0VZ3nNS60acibzRwY/+e8OrSqlQdMXlAB2ggBA86drDJpfBl -WGJG8TJVY9bc1TU2uuwtZR1LAMSsRHVp+3IvKLpHrne5exPd3x6KGYcuaM+Uk/rE -u6tLsFNwaCdh+iBFFDT2bnYIw7jAsokJUkwxMVxSC0/21s2blhO/q5LsN1gFC1kN -TbpXAoHBANWE7TmG2szPvujPwrK18v6iJlHCA2n50AgAQXrsetj2JcF3HYHYdHnq -z36MQ6FpBKOiQumozWvb32WTjEwdG2kix7GEfam4DAUBdqYuCHzPcR12K5Tc8hsX -NG7JXUAeS8ZJEiOdu95X59JHyBxUQtNfte5rcbaV17SVw6K6bsWVJnj60YjtJrpa -xHvv1ZRnT2WEzJGpA+ii1h3I52N7ipGBiw172qcW+bKJukMi8eHxx5CC9e5tBpnu -C+Ou/eYewQKBwHxNa0jXQrq9YY2w8s0TP8HuKbxfyrXOIHxRm9ZczFcMD8VosgUT -WUUbO+B2KXWVtwawYAfFz0ySzcy//SkAmT6F1VIl/QCx7aBSENGti+Ous98WpIxv -XvUxN4T/rl+2raj2ok4fw5g9TG4QRIvkmmciQyonDr/sicbG0bmy/fTJDl8NOpIm -ZtKurNWxHNERtAPkMTyeK7/ilHjrQtb3AzVqcvbuvR6qcONa5YN0wlrfkisWoJwo -707EdpCAXBbUsQKBwQCnpzcpu2Sj+t9ZKIElF87T93gFLETH+ppJHgJMRdDz+NqO -fTwTD2XtsNz57aLQ44f8AFVv6NZbQYq41FEOFrDGLcQE9BZDpDrz10FVnMGXVr7n -tjjkK1SCxwapkr0AsoknCYsPojO4kud46loLPHI4TGeq7HyeNCvqJMo3RRHjXIiX -58GNNUD6hHjRI/FdFH14Jf0GxmJGUU20l2Jwb7nPJJuNm9mE53pqoNA7FP4+Pj1H -kD0Q2FSdmxeE0IuWHEECgcBgw6ogJ/FRRGLcym+aApqP9BChK+W8FDfDc9Mi4p/J -g+XmetWNFGCGTlOefGqUDIkwSG+QVOEN3hxziXbsjnvfpGApqoaulAI5oRvrwIcj -QIvD2mt0PB52k5ZL9QL2K9sgBa43BJDyCKooMAlTy2XMM+NyXVxQKmzf3r3jQ5sl -Rptk7ro38a9G8Rs99RFDyOmP1haOM0KXZvPksN4nsXuTlE01cnwnI29XKAlEZaoA -pQPLXD8W/KK4mwDbmokYXmo= +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCf8FWxi4oVlDVx +e8NDFgb+IYAGr/hZWuY1Zq7d7g57yPoxJrgt+bN89+U7qTduqyB2Hy8G0TqeACOr +IdpPZ8P7V5E5YiASwfJ72nbVo7qR9DAKA5FE8PU0bJFmFLjDDihc970zc4ilRDfR +WylUpj68nefOY4CzFzeiqVOLX2wezs7Z0hflkSXGBmC0j1FbQU2I3YJg3CKCabhT +tU6OyKItzjJ2vVaOoQ+B0Kv8leaRQ6ANZBAFQF2LepSy5F2+oSD+QHjPr+012V5D +mrsdIc9We8YyonS1u/3HI7lLohf3W+qFroQWjn0DJI56ScV1uEr/B0+hn2jBRTM5 +d1F9BeVWm1u8BOJu50CvOeuxiVLsxJpa4T41DJznJk5V+hE4hKvDKmlrwulsRp8o +jUEyUi8dzWOBRfAijIWv3qAPjGA/J33n6+PllCczC2BsVZhVmLqSMCwp1g2JTCM/ +KC7T4vOl/EGkm76fcmLeA1Ef8oUdRg+3T77VP+HqZ2JP06J8O8MCAwEAAQKCAYAw +YvJZ82BEJQGCIrIxMpHNAm+MFmKpDdIFp9oRdDrXgjcG9bLU3e1KSmkEgq4tggIh +GlAM3PHB6ULhPC2ixj7JZHWgCaqwYhKtG6vF+HGyRFDgRrIFTGyyfoICgxReloLp +lV2dGj/l19yXLuAzJtRmFdOSYhIGnGiNgnKvAKBiNajoxyHJpv7piPZqyc0QMZJ2 +bKVMDm02TSuhz4FDuzktaGtl9uQf5GQfnvTZRrRpkC70vigGnrFuSBiCgopF6NLq +6AXl8YS3Jcu2oGWrZDfS/GlG1QmvGGsmr9wndJSGG43jcpcRZt0g1nJNu4Fioq3e +7y6Gap9TEsciuQOv/6RD457XkNARmTQxFpEwmSgOPQn2pFcDspo71Ej7azzL/Z+3 +jvnVo3wxgxBcrpyh+vhBtJARp4pT4anW4PcD6IcPSOWbnI8Ldoj1XN5QkJcBcykK +6LmsAUqsmEQDNsmnGZWyYSCns4P2vUJi0hwQz8UiQwgAta3xnq4v5On7l3cq35kC +gcEA0+joOFbZBeGlCb27tDW4VCW0cQuczzuNEoBUKnsNSqy0nx1O7hgHm/f/NQDD +cpxiD15bRQ0KM9QbQC4dGaVoLsM07hUGk97dCxQPs2zot4CodCKGohs7E154tEDP +zVg3YS5mubUmqdqtn8ZCKeeZye/Tv2ageyF300sEgj2Cd7EZ8S4sB0PxZ2tqT3jy +cBL5cDruLEWuHIQjN7WwSjxnXocpb1OU7dJ+v4zFPCkSCOoa0DTTw4jFhPEOBdqV +T619AoHBAME3QyW4QVtU2Ct9u0B1XThhqSEyOpUrcH9nOoefggwP4WF3phVx16BG +aDKUIGQ62klRa5fi2eooxcjQRLv1sWO0UzssnO6ABMnGkUiRdrowo6xukNak0RTp +0gvNoJ0SZxGF0yWSCw1Rq3qP2Koj7XDumFChAzLMyUsnoOl29SA7GfXcZp1pZTiq +kOfFMWt0CIHu/EK03YWcd4vfQEq6lus39RCSXuL++Jva3yiEl5s069RFZvP1bNrD +emkfetDSPwKBwQClk+8fVnzs44sZOW9ZOEB3P57mVbSJGHb6Zdtd9hhEqP3Y9gWe +dJg9fmGjAJ23CAp3B7s5ER9PsAQ6+c0zJNNq9ox9G2CwWgtNhLdf81FDUPxPAktA +jxZx4/dcoOe+A5gCD0elA67aOUxA86DvLVA1QXeqrn3muBfwuUUknvs6mt8yXGl6 +o9QUgxHmVxLYD3tn/iPr4+ZP0c/Sz9yXpOsAKYxuuFg+G6N9+HiEsXKuFH4vAZgV +yODNJ61VVZ4lS+ECgcAqFqOl39E81+qO7sCPdgFsermg5ZQlUmUbG52AVZq6jesG +lE21disGWs/v1JyJuNg8CGRrnZriiycqa1PNreOKWImY5kr5GSHx4jNbn3RBcr70 +nNEoMJbq+1QqBgzqqkuRYZlxIbMOn6++7v6/cTwT0aWUSr6rnjhrCqLeuG8FKlqp +V+1ydLb79QvDsQzm30vLIggJb+ShakgQS/1xSdv+OR5FEd1hjTESokbiSJ/Ny2Vj +xAp9MgUYUmSj6ZuTSXkCgcAggshdRQLom/EK2pYwffIpKfBiyLbi+KIjKxkiPEsb +jrrQbvh9ZN6iAG3StVAYB5c6vewfeIlcDT0YJDyy1hGRLRG7vf9ubPf+n7Xp1y0W +oo9L9qfCHu0jmWwtinkFYjpTDkXlxXCG2v3TllNsNX/5afYo8sb9oxXHLTpBlwZB +fw6IgNZblWQevdgmUMTP9W2W7AZUxEz4gOM6lQkOwC3U59Dx2yO6rD3An6G1tlZF +2MClyf8o5d5ePObH8rkxrpY= -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIEYjCCAsqgAwIBAgIJAJm2YulYpr+6MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTAeFw0x -ODA4MjkxNDIzMTZaFw0yODA4MjYxNDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEB -BQADggGPADCCAYoCggGBAMqOuNZmV86zUKGq3VGjIt+rJdsdVcgBbR9PMDF8mfG8 -U6JaoAAqALapVAzxjTzSRFS5Fpc//D3LBdP4zNfq0HLLlVtNgljJOMc4fjoRYs11 -yoQmzj4UJWo4hitA9DqkYCEJeaAHLhVvjYkAEvBv4q37LYOTXm2CBVwAc/YqGuL6 -VFda91r6RkB7YXUiiOa5bIJPLcURgeJzmo0Gxdx/q7WjIVXwzJs67PXMaPe93YL5 -0Qo7g6HD2tHCe8dJq2Mz4J/CJd/yRNfMMEVn/xbf7rIDj2kfFFsbsUTcrVMA+GSu -n4FVMhQ5x0jvjAQDpQSRYUXmxByaYC2Hn0wRCuXYJeit+0Q+GwpkTn11Q/X6dgA+ -9H+ZPJI0JLDv+u91/5yxFJnmiWUy7+XGyG26UlgkjTf4iINOfjsUjkP4gXblEQrt -3gvMYijpPveS2xP6qlJce5NYL4gAGbwAwX3uWPEdLAxFT/P47m6I41Ei0MCAof84 -i0Ubng+1ja8CFo7RiJmtlwIDAQABoxswGTAXBgNVHREEEDAOggxmYWtlaG9zdG5h -bWUwDQYJKoZIhvcNAQELBQADggGBAMIVLp6e6saH2NQSg8iFg8Ewg/K/etI++jHo -gCJ697AY02wtfrBox1XtljlmI2xpJtVAYZWHhrNqwrEG43aB7YEV6RqTcG6QUVqa -NbD8iNCnMKm7fP89hZizmqA1l4aHnieI3ucOqpgooM7FQwLX6qk+rSue6lD5N/5f -avsublnj8rNKyDfHpQ3AWduLoj8QqctpzI3CqoDZNLNzaDnzVWpxT1SKDQ88q7VI -W5zb+lndpdQlCu3v5HM4w5UpwL/k1htl/z6PnPseS2UdlXv6A8KITnCLg5PLP4tz -2oTAg9gjOtRP/0uwkhvicwoFzFJNVT813lzTLE1jlobMPiZhsS1mjaJGPD9GQZDK -ny3j8ogrIRGjnI4xpOMNNDVphcvwtV8fRbvURSHCj9Y4kCLpD5ODuoyEyLYicJIv -GZP456GP0iSCK5GKO0ij/YzGCkPWD5zA+mYFpMMGZPTwajenMw7TVaPXcc9CZBtr -oOjwwiLEqdkpxUj13mJYTlt5wsS/Kw== +MIIEbTCCAtWgAwIBAgIUF15VKdwjiTzzKgs6PnNpEekV9QQwDQYJKoZIhvcNAQEL +BQAwYjELMAkGA1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYD +VQQKDBpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhv +c3RuYW1lMB4XDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFowYjELMAkGA1UE +BhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYDVQQKDBpQeXRob24g +U29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhvc3RuYW1lMIIBojAN +BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAn/BVsYuKFZQ1cXvDQxYG/iGABq/4 +WVrmNWau3e4Oe8j6MSa4LfmzfPflO6k3bqsgdh8vBtE6ngAjqyHaT2fD+1eROWIg +EsHye9p21aO6kfQwCgORRPD1NGyRZhS4ww4oXPe9M3OIpUQ30VspVKY+vJ3nzmOA +sxc3oqlTi19sHs7O2dIX5ZElxgZgtI9RW0FNiN2CYNwigmm4U7VOjsiiLc4ydr1W +jqEPgdCr/JXmkUOgDWQQBUBdi3qUsuRdvqEg/kB4z6/tNdleQ5q7HSHPVnvGMqJ0 +tbv9xyO5S6IX91vqha6EFo59AySOeknFdbhK/wdPoZ9owUUzOXdRfQXlVptbvATi +budArznrsYlS7MSaWuE+NQyc5yZOVfoROISrwyppa8LpbEafKI1BMlIvHc1jgUXw +IoyFr96gD4xgPyd95+vj5ZQnMwtgbFWYVZi6kjAsKdYNiUwjPygu0+LzpfxBpJu+ +n3Ji3gNRH/KFHUYPt0++1T/h6mdiT9OifDvDAgMBAAGjGzAZMBcGA1UdEQQQMA6C +DGZha2Vob3N0bmFtZTANBgkqhkiG9w0BAQsFAAOCAYEARzdkuqa0Hexi/saMkdi3 +bubpQkc7X0RYKWnjy/PgcmbvQXLiWRMZOH9rMWvd5v+ZfkgAtsbOQuP8ycioNIFY +Il5SEmxHEN81z5UNSPLOib6ky13gzrnXRAxnnO7cICG7AaMu1dHv57fqjevcx/n/ +nxPNKwKL+TDpMw7ATVZw7Py7JciKyFAfwtkvt17j/ldvaQvuwmWHzyFVrQniQcQq +QEa4jy/Y/pXHAgCKq1qbe0ush17j1ChyH7l4SkF2xJKcYYQF5ipw8zg6WeOL2NFE +G1KDJN0SsMmM3PMN1e0lLQP3G+UaatervrKXu51QleKL32Xlby+pp1w9KKs39/Tb +RT8EMe9A6cecod6TL0ZUQHow6ykNYBkfSKDLTKWnL9ifZ0C/DvgmS7DpJg3oAa1e +GhIglMrgqJflTHAI/PvEsCKM1O0Un2dVGWsUCzPfhj1cKmagyb0Zd+2Tk9xGSRs9 +2ceXMxRCjOJwEHUCFuTYeqowabdlpi0nyPbSn7JIwCpT -----END CERTIFICATE----- diff --git a/Lib/test/keycert3.pem b/Lib/test/keycert3.pem index e0a8205a660e8..f6887ba7a84e1 100644 --- a/Lib/test/keycert3.pem +++ b/Lib/test/keycert3.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCfKC83Qe9/ZGMW -YhbpARRiKco6mJI9CNNeaf7A89TE+w5Y3GSwS8uzqp5C6QebZzPNueg8HYoTwN85 -Z3xM036/Qw9KhQVth+XDAqM+19e5KHkYcxg3d3ZI1HgY170eakaLBvMDN5ULoFOw -Is2PtwM2o9cjd5mfSuWttI6+fCqop8/l8cerG9iX2GH39p3iWwWoTZuYndAA9qYv -07YWajuQ1ESWKPjHYGTnMvu4xIzibC1mXd2M6u/IjNO6g426SKFaRDWQkx01gIV/ -CyKs9DgZoeMHkKZuPqZVOxOK+A/NrmrqHFsPIsrs5wk7QAVju5/X1skpn/UGQlmM -RwBaQULOs1FagA+54RXU6qUPW0YmhJ4xOB4gHHD1vjAKEsRZ7/6zcxMyOm+M1DbK -RTH4NWjVWpnY8XaVGdRhtTpH9MjycpKhF+D2Zdy2tQXtqu2GdcMnUedt13fn9xDu -P4PophE0ip/IMgn+kb4m9e+S+K9lldQl0B+4BcGWAqHelh2KuU0CAwEAAQKCAYEA -lKiWIYjmyRjdLKUGPTES9vWNvNmRjozV0RQ0LcoSbMMLDZkeO0UwyWqOVHUQ8+ib -jIcfEjeNJxI57oZopeHOO5vJhpNlFH+g7ltiW2qERqA1K88lSXm99Bzw6FNqhCRE -K8ub5N9fyfJA+P4o/xm0WK8EXk5yIUV17p/9zJJxzgKgv2jsVTi3QG2OZGvn4Oug -ByomMZEGHkBDzdxz8c/cP1Tlk1RFuwSgews178k2xq7AYSM/s0YmHi7b/RSvptX6 -1v8P8kXNUe4AwTaNyrlvF2lwIadZ8h1hA7tCE2n44b7a7KfhAkwcbr1T59ioYh6P -zxsyPT678uD51dbtD/DXJCcoeeFOb8uzkR2KNcrnQzZpCJnRq4Gp5ybxwsxxuzpr -gz0gbNlhuWtE7EoSzmIK9t+WTS7IM2CvZymd6/OAh1Fuw6AQhSp64XRp3OfMMAAC -Ie2EPtKj4islWGT8VoUjuRYGmdRh4duAH1dkiAXOWA3R7y5a1/y/iE8KE8BtxocB -AoHBAM8aiURgpu1Fs0Oqz6izec7KSLL3l8hmW+MKUOfk/Ybng6FrTFsL5YtzR+Ap -wW4wwWnnIKEc1JLiZ7g8agRETK8hr5PwFXUn/GSWC0SMsazLJToySQS5LOV0tLzK -kJ3jtNU7tnlDGNkCHTHSoVL2T/8t+IkZI/h5Z6wjlYPvU2Iu0nVIXtiG+alv4A6M -Hrh9l5or4mjB6rGnVXeYohLkCm6s/W97ahVxLMcEdbsBo1prm2JqGnSoiR/tEFC/ -QHQnbQKBwQDEu7kW0Yg9sZ89QtYtVQ1YpixFZORaUeRIRLnpEs1w7L1mCbOZ2Lj9 -JHxsH05cYAc7HJfPwwxv3+3aGAIC/dfu4VSwEFtatAzUpzlhzKS5+HQCWB4JUNNU -MQ3+FwK2xQX4Ph8t+OzrFiYcK2g0An5UxWMa2HWIAWUOhnTOydAVsoH6yP31cVm4 -0hxoABCwflaNLNGjRUyfBpLTAcNu/YtcE+KREy7YAAgXXrhRSO4XpLsSXwLnLT7/ -YOkoBWDcTWECgcBPWnSUDZCIQ3efithMZJBciqd2Y2X19Dpq8O31HImD4jtOY0V7 -cUB/wSkeHAGwjd/eCyA2e0x8B2IEdqmMfvr+86JJxekC3dJYXCFvH5WIhsH53YCa -3bT1KlWCLP9ib/g+58VQC0R/Cc9T4sfLePNH7D5ZkZd1wlbV30CPr+i8KwKay6MD -xhvtLx+jk07GE+E9wmjbCMo7TclyrLoVEOlqZMAqshgApT+p9eyCPetwXuDHwa3n -WxhHclcZCV7R4rUCgcAkdGSnxcvpIrDPOUNWwxvmAWTStw9ZbTNP8OxCNCm9cyDl -d4bAS1h8D/a+Uk7C70hnu7Sl2w7C7Eu2zhwRUdhhe3+l4GINPK/j99i6NqGPlGpq -xMlMEJ4YS768BqeKFpg0l85PRoEgTsphDeoROSUPsEPdBZ9BxIBlYKTkbKESZDGR -twzYHljx1n1NCDYPflmrb1KpXn4EOcObNghw2KqqNUUWfOeBPwBA1FxzM4BrAStp -DBINpGS4Dc0mjViVegECgcA3hTtm82XdxQXj9LQmb/E3lKx/7H87XIOeNMmvjYuZ -iS9wKrkF+u42vyoDxcKMCnxP5056wpdST4p56r+SBwVTHcc3lGBSGcMTIfwRXrj3 -thOA2our2n4ouNIsYyTlcsQSzifwmpRmVMRPxl9fYVdEWUgB83FgHT0D9avvZnF9 -t9OccnGJXShAIZIBADhVj/JwG4FbaX42NijD5PNpVLk1Y17OV0I576T9SfaQoBjJ -aH1M/zC4aVaS0DYB/Gxq7v8= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDFtLOteQlQojN7 +ztkux7m0hmGKkP1hh0hbKqTcD87jkLAqAwZWenjZMjCbbZ3vP+AObCIkYIKzPXY7 +Yi+H5M3O2mXIDxoHGjL/GWtoEyDNXvm9UC+MRuSOq2MaLHHQG0Rx2TxcYrMVUM7b +93rpN1LGRrCv1gISXM4EvEJooAR7Aadj0pG/o0fqDAdFjH6QZbhn1iZle+eGbjcf +dgH/H0F8dn1PPGoViHXicbsQ4kB6002Pf+aXP4b2QKAbflyNHEKHPHEOOTXrFjMd +c+bqKW24epEsMZI59qx9hU/4Rvp3/v+vEwTL7Nm7ilptzZn2cvGCW39LC0nNYLOz +kO3H8xwA75h6uykdB+WO/v2CKIK9M/ZO+9QNrmaokfKDamCk39b8hlCwNL6LsVpv +d3XTS5Wn4YWn92EqiltUJJoPo7pc7VTdWCg4zVFn4Q8Zh4NFNn/qTB8lEMgrsNTV +5cyZ7zhoBiUMSO45bmo2NsnE7ce/JUhlqe5uh0PT1MIBgTV+oDMCAwEAAQKCAYEA +udsy4gwblqK0tVnxz0lQqYV+os3EdO/BNHr1Oi7eNg2pngTz603812mYSjUVOHma +vtQmkH3twGQyBoc52Y1dcGzdK+IOfMjDUg7qao840ffL3I1J9ZwbdodlhZBsec94 +W3J1jP/4DDzICf8vm5g3h0+i/9m2Xt7BibAU2dg7/grC+lNUUoxDqaEfIOF/hW0q +muq1c8e0EisAROIh5FzUqhWVnWxU6eM7tuFlkuyu4whLLHB3LI466Lo+CTqT9M+v +jJYlvS5+AZW3qMBp6WOI8C+VIiBL178mo+Igkyyy5AYXcWeNkjp6ygRWvtWXIhCv +CI29mf+BP/54jAY0rQRXJ2UcSHXmM6PTDkE/L2OKeiY1Ou8gLOwun3yBVdbkXJMb +PWmUW4N8qSIJQ+vE2TDqmkqAT6m+ilzOXl1O+LLTvGyMnOiiSLXK9mC4ND3tqaQu +hvKivnI1doErcWUaIf1DHiJmLrGxrTCUKjCEoefqVq2/dDdtCfx7CqUvjl3DYKMB +AoHBAP+Vdi6D07gZFepEGCaJ+YH6cxEyO73CNnea/F1whVAzOv91kHS32jC9PAI3 +/wYlX+DLcN9mVF/q62V4SLZYfOxTPW4vWO0A45URe9s9Z795fdAcQ5jt3QFOVSnk +3XSaCkIOwckuwabGJi4+foiUEOnLLzQi1/g7x12dwejxVNhqhz5KFkOQPv8fQRed +sb5LVLYDeprsB2Vsx0fHwg4z9FvTIxLBeI7+sJD30lNpYZrCl/T9x4e1SV2Rwn2W +bghxgQKBwQDGBx07biZK9RB5g4qPl+G6vz0M+/KBfpwQbMYxSyct7u6gfGD9mWBO +qocIIr39Unac3kUL237Cn3HbgiGCRe7Mwd7XqnSSGWM5oWSlVQxEKTXYUlTbd9O9 +DKuyQGOl/AMEwD4ZbEOfQNmnd1U4nh1AV052FQY8Ry/atGFT9fApA/5X/bbenOwQ +YGDsokLzPf2BIDncpE+VNevUMoMI7EnySgjjfpL+cRld0qpLqBMo2h5VddeJ/5YM +1YcNfMQiw7MCgcEAwXqXuKa7A8aZvHpH/gS9CRRbP01TxFbdfLWrDeE8SnY9111c +Ob9kQTk/0D4rpK9uYXIgxD1m6iWghXQFN2TNTOnGuz7EhsYBgrt1k4Zsn5qND5oV +4hNPFsoB1nEW5EooMdGSCYaHuoSOKrvMdgAAvbu+xC0MaTJ3vfrK7Fik7h/WueTD +7emohuFWGVabU38bZZ5EljrPboxmX4Rs9uuFtG2lQ3GKnlVXvKaeZd6EsO9WsXPc +NHOcUmUhYokaSvIBAoHAGCxGJTsM8Zl4qVylTWH87A7sJOmccLJD2r1sdBf4cGL6 +PhzwugQ+/VtToGqdRo8Ka5u2Ufw5PQi5nVIFRSHERLpluW3VTQBMXHyXDJeVJ7zg +Fcf3E9NMxYcGbnvtrhVVSP8ulWvh1U7VQtwOSxsB9xixOzjVygXmkYvzVYxwBJG4 +OoV+DS6aomUhb8Fe6tJmX5zPc1+bV1t9ril8VVqCrFDdROfuiaDEt+8/Wnzp2dLG +YShBZ1cLugVWtw7D4nqBAoHAF29k64iAxY5Y4OOibVkqjUCPyqG2oxiXqgO7CxZp +FGUat5UtV2mIBlSENs1o5AZ1nPlgWtPtg0xVCaG2t/Rq7ugvUfAnAhUK6zX8FS+T +gCXE+7iKuuIJiCo13/iAwF/CLfuXvj4CZ71ta0wX9w99f1FcPEk0x+ytiyuWJK8K +tyubL34JwNrnkh/8e3LcV3L88Sk9ZmxeTz31f3cA3Fy2ZJOAUMD9dKXeKtY7azzt +MkhXedRsdLSKqMh0VGeGHoLS -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5c - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:9f:28:2f:37:41:ef:7f:64:63:16:62:16:e9:01: - 14:62:29:ca:3a:98:92:3d:08:d3:5e:69:fe:c0:f3: - d4:c4:fb:0e:58:dc:64:b0:4b:cb:b3:aa:9e:42:e9: - 07:9b:67:33:cd:b9:e8:3c:1d:8a:13:c0:df:39:67: - 7c:4c:d3:7e:bf:43:0f:4a:85:05:6d:87:e5:c3:02: - a3:3e:d7:d7:b9:28:79:18:73:18:37:77:76:48:d4: - 78:18:d7:bd:1e:6a:46:8b:06:f3:03:37:95:0b:a0: - 53:b0:22:cd:8f:b7:03:36:a3:d7:23:77:99:9f:4a: - e5:ad:b4:8e:be:7c:2a:a8:a7:cf:e5:f1:c7:ab:1b: - d8:97:d8:61:f7:f6:9d:e2:5b:05:a8:4d:9b:98:9d: - d0:00:f6:a6:2f:d3:b6:16:6a:3b:90:d4:44:96:28: - f8:c7:60:64:e7:32:fb:b8:c4:8c:e2:6c:2d:66:5d: - dd:8c:ea:ef:c8:8c:d3:ba:83:8d:ba:48:a1:5a:44: - 35:90:93:1d:35:80:85:7f:0b:22:ac:f4:38:19:a1: - e3:07:90:a6:6e:3e:a6:55:3b:13:8a:f8:0f:cd:ae: - 6a:ea:1c:5b:0f:22:ca:ec:e7:09:3b:40:05:63:bb: - 9f:d7:d6:c9:29:9f:f5:06:42:59:8c:47:00:5a:41: - 42:ce:b3:51:5a:80:0f:b9:e1:15:d4:ea:a5:0f:5b: - 46:26:84:9e:31:38:1e:20:1c:70:f5:be:30:0a:12: - c4:59:ef:fe:b3:73:13:32:3a:6f:8c:d4:36:ca:45: - 31:f8:35:68:d5:5a:99:d8:f1:76:95:19:d4:61:b5: - 3a:47:f4:c8:f2:72:92:a1:17:e0:f6:65:dc:b6:b5: - 05:ed:aa:ed:86:75:c3:27:51:e7:6d:d7:77:e7:f7: - 10:ee:3f:83:e8:a6:11:34:8a:9f:c8:32:09:fe:91: - be:26:f5:ef:92:f8:af:65:95:d4:25:d0:1f:b8:05: - c1:96:02:a1:de:96:1d:8a:b9:4d + 00:c5:b4:b3:ad:79:09:50:a2:33:7b:ce:d9:2e:c7: + b9:b4:86:61:8a:90:fd:61:87:48:5b:2a:a4:dc:0f: + ce:e3:90:b0:2a:03:06:56:7a:78:d9:32:30:9b:6d: + 9d:ef:3f:e0:0e:6c:22:24:60:82:b3:3d:76:3b:62: + 2f:87:e4:cd:ce:da:65:c8:0f:1a:07:1a:32:ff:19: + 6b:68:13:20:cd:5e:f9:bd:50:2f:8c:46:e4:8e:ab: + 63:1a:2c:71:d0:1b:44:71:d9:3c:5c:62:b3:15:50: + ce:db:f7:7a:e9:37:52:c6:46:b0:af:d6:02:12:5c: + ce:04:bc:42:68:a0:04:7b:01:a7:63:d2:91:bf:a3: + 47:ea:0c:07:45:8c:7e:90:65:b8:67:d6:26:65:7b: + e7:86:6e:37:1f:76:01:ff:1f:41:7c:76:7d:4f:3c: + 6a:15:88:75:e2:71:bb:10:e2:40:7a:d3:4d:8f:7f: + e6:97:3f:86:f6:40:a0:1b:7e:5c:8d:1c:42:87:3c: + 71:0e:39:35:eb:16:33:1d:73:e6:ea:29:6d:b8:7a: + 91:2c:31:92:39:f6:ac:7d:85:4f:f8:46:fa:77:fe: + ff:af:13:04:cb:ec:d9:bb:8a:5a:6d:cd:99:f6:72: + f1:82:5b:7f:4b:0b:49:cd:60:b3:b3:90:ed:c7:f3: + 1c:00:ef:98:7a:bb:29:1d:07:e5:8e:fe:fd:82:28: + 82:bd:33:f6:4e:fb:d4:0d:ae:66:a8:91:f2:83:6a: + 60:a4:df:d6:fc:86:50:b0:34:be:8b:b1:5a:6f:77: + 75:d3:4b:95:a7:e1:85:a7:f7:61:2a:8a:5b:54:24: + 9a:0f:a3:ba:5c:ed:54:dd:58:28:38:cd:51:67:e1: + 0f:19:87:83:45:36:7f:ea:4c:1f:25:10:c8:2b:b0: + d4:d5:e5:cc:99:ef:38:68:06:25:0c:48:ee:39:6e: + 6a:36:36:c9:c4:ed:c7:bf:25:48:65:a9:ee:6e:87: + 43:d3:d4:c2:01:81:35:7e:a0:33 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 8F:EA:1D:E3:33:5C:00:16:B3:8B:6F:6B:6F:D3:4C:CB:B5:CB:7C:55 + 85:75:10:25:D0:2C:80:50:24:1A:5B:57:70:DE:B5:CB:71:A9:3B:7B X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 27:f5:8c:59:10:f4:c6:e7:28:00:bf:ba:8d:7b:13:03:f1:1c: - a6:5f:b3:06:55:a4:22:b9:db:b2:d5:46:bd:f7:0c:dd:43:6e: - b4:79:65:67:21:0c:2a:55:ee:40:8e:85:9f:9f:47:bb:0a:2a: - 4d:b6:64:74:98:a0:7f:ae:dc:f1:2e:db:42:77:18:e0:75:8b: - 26:35:68:c3:41:ed:6b:c8:77:72:6f:6a:9a:5d:55:69:02:fd: - 5a:54:c8:57:cb:b0:65:03:16:e2:0f:00:39:99:66:a0:9b:88: - 93:17:e2:5a:2d:79:35:5f:97:57:78:c4:af:f5:99:5e:86:ab: - d3:11:ad:1a:a2:0d:fa:52:10:b9:fe:bf:9d:ce:33:d9:86:b2: - 9c:16:f8:d6:75:08:8a:db:0a:e5:b4:2b:16:7f:b4:f9:2a:9f: - c3:d2:77:d7:cd:65:1e:f4:6c:1e:eb:59:b9:f0:ae:5f:a4:1f: - cc:4a:c4:b9:7a:a9:d9:6b:32:68:3b:e1:65:b0:84:b7:90:c4: - ae:fe:f4:37:4f:21:a0:de:9f:3a:b1:e5:cc:16:04:66:3f:0b: - 41:dc:42:3d:20:3e:ec:b7:95:2b:35:57:fa:be:7f:b6:3a:ba: - ca:4f:58:fe:75:3e:08:89:2c:8c:b0:5d:2e:f9:89:10:2b:f9: - 41:46:4f:3c:00:b7:27:d3:65:24:28:17:23:26:31:42:ea:7e: - 4e:93:e4:7b:68:54:ca:9f:46:f3:ef:2b:e9:85:0c:b5:84:b2: - d5:35:34:80:75:2b:f0:91:23:b8:08:01:8e:b9:0a:54:d4:fb: - 34:52:fe:d9:45:f0:80:3b:b6:c1:6f:82:d1:1f:f2:3b:08:f6: - 46:a6:96:27:61:4b:58:32:7a:0e:1d:59:c5:44:ad:5e:1a:79: - 33:c1:d4:05:2f:4a:d3:d8:42:42:8d:33:e3:63:ca:d5:87:97: - 9b:4d:b8:1a:03:34:bb:1c:d2:02:3f:59:23:e2:23:80:88:63: - c2:f0:a2:63:a8:8b + 95:f3:56:bb:d5:8c:70:bd:d1:de:da:63:b0:29:d7:db:60:27: + d6:59:fd:61:1b:30:c6:d0:5d:73:7d:34:e1:68:e3:28:a6:89: + e6:60:bd:89:d3:0e:f4:72:ad:72:76:f8:86:21:fd:75:3c:f8: + 6d:be:9c:04:e1:82:03:69:6c:ae:d0:55:ba:5e:f2:ca:f5:0f: + 8e:d6:d9:8d:c8:56:46:f4:f8:ac:74:2a:19:7b:8e:47:70:1f: + fb:fb:bd:69:02:a1:a5:4a:6e:21:1c:04:14:15:55:bf:bf:24: + 43:c8:17:03:be:3e:2c:ea:db:c8:af:1d:fd:52:df:d6:15:49: + 9e:c2:44:69:ef:f1:45:43:83:b2:1e:cf:14:1c:13:3f:fe:9c: + 71:cb:e7:1b:18:56:36:a7:af:44:f1:0b:a1:79:44:46:f9:43: + 46:29:d8:b0:ca:49:4d:65:60:d3:f6:8e:74:bc:62:9e:1e:8d: + 4b:29:9a:b4:0d:f0:a2:77:5b:34:e4:11:2f:a7:25:c5:e5:07: + 76:12:ae:be:75:73:15:e4:0a:7d:53:38:56:3f:79:6d:6e:ca: + ed:80:ab:56:ed:7e:8b:1c:e7:e3:d4:62:30:22:70:e7:29:b2: + 03:3c:fe:fa:3d:f0:36:c0:4d:11:a2:99:d3:29:31:27:b8:c5: + b8:15:a3:3c:4f:9b:73:5e:2b:b2:fb:cb:fd:75:47:b8:17:bd: + 21:d8:e6:c1:b9:ff:73:81:d8:25:08:6d:08:5e:1c:a5:83:50: + de:67:e6:da:d0:8e:5a:d3:f2:2a:b1:3f:b8:80:21:07:6a:71: + 15:6d:05:eb:51:b3:59:8d:d4:15:46:7e:02:a8:13:01:16:99: + bd:03:cc:70:71:2a:23:16:78:af:d1:d5:01:9d:04:b4:63:93: + 9a:04:3a:92:2e:e6:7e:73:93:a5:fe:50:9b:bd:0e:ea:54:86: + 6f:7c:e5:14:77:fe:c2:28:5a:4a:0e:d7:2d:8c:e9:ed:61:29: + b2:53:ff:6c:04:bc -----BEGIN CERTIFICATE----- MIIF8TCCBFmgAwIBAgIJAMstgJlaaVJcMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxv -Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJ8oLzdB739k -YxZiFukBFGIpyjqYkj0I015p/sDz1MT7DljcZLBLy7OqnkLpB5tnM8256DwdihPA -3zlnfEzTfr9DD0qFBW2H5cMCoz7X17koeRhzGDd3dkjUeBjXvR5qRosG8wM3lQug -U7AizY+3Azaj1yN3mZ9K5a20jr58Kqinz+Xxx6sb2JfYYff2neJbBahNm5id0AD2 -pi/TthZqO5DURJYo+MdgZOcy+7jEjOJsLWZd3Yzq78iM07qDjbpIoVpENZCTHTWA -hX8LIqz0OBmh4weQpm4+plU7E4r4D82uauocWw8iyuznCTtABWO7n9fWySmf9QZC -WYxHAFpBQs6zUVqAD7nhFdTqpQ9bRiaEnjE4HiAccPW+MAoSxFnv/rNzEzI6b4zU -NspFMfg1aNVamdjxdpUZ1GG1Okf0yPJykqEX4PZl3La1Be2q7YZ1wydR523Xd+f3 -EO4/g+imETSKn8gyCf6Rvib175L4r2WV1CXQH7gFwZYCod6WHYq5TQIDAQABo4IB +Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMW0s615CVCi +M3vO2S7HubSGYYqQ/WGHSFsqpNwPzuOQsCoDBlZ6eNkyMJttne8/4A5sIiRggrM9 +djtiL4fkzc7aZcgPGgcaMv8Za2gTIM1e+b1QL4xG5I6rYxoscdAbRHHZPFxisxVQ +ztv3euk3UsZGsK/WAhJczgS8QmigBHsBp2PSkb+jR+oMB0WMfpBluGfWJmV754Zu +Nx92Af8fQXx2fU88ahWIdeJxuxDiQHrTTY9/5pc/hvZAoBt+XI0cQoc8cQ45NesW +Mx1z5uopbbh6kSwxkjn2rH2FT/hG+nf+/68TBMvs2buKWm3NmfZy8YJbf0sLSc1g +s7OQ7cfzHADvmHq7KR0H5Y7+/YIogr0z9k771A2uZqiR8oNqYKTf1vyGULA0voux +Wm93ddNLlafhhaf3YSqKW1Qkmg+julztVN1YKDjNUWfhDxmHg0U2f+pMHyUQyCuw +1NXlzJnvOGgGJQxI7jluajY2ycTtx78lSGWp7m6HQ9PUwgGBNX6gMwIDAQABo4IB wDCCAbwwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E -FgQUj+od4zNcABazi29rb9NMy7XLfFUwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHK -b5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m +FgQUhXUQJdAsgFAkGltXcN61y3GpO3swfQYDVR0jBHYwdIAUs4qgorpx8agkedSk +WyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m dHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMst gJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0 Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcw AYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYD VR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 -Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACf1jFkQ9MbnKAC/ -uo17EwPxHKZfswZVpCK527LVRr33DN1DbrR5ZWchDCpV7kCOhZ+fR7sKKk22ZHSY -oH+u3PEu20J3GOB1iyY1aMNB7WvId3JvappdVWkC/VpUyFfLsGUDFuIPADmZZqCb -iJMX4loteTVfl1d4xK/1mV6Gq9MRrRqiDfpSELn+v53OM9mGspwW+NZ1CIrbCuW0 -KxZ/tPkqn8PSd9fNZR70bB7rWbnwrl+kH8xKxLl6qdlrMmg74WWwhLeQxK7+9DdP -IaDenzqx5cwWBGY/C0HcQj0gPuy3lSs1V/q+f7Y6uspPWP51PgiJLIywXS75iRAr -+UFGTzwAtyfTZSQoFyMmMULqfk6T5HtoVMqfRvPvK+mFDLWEstU1NIB1K/CRI7gI -AY65ClTU+zRS/tlF8IA7tsFvgtEf8jsI9kamlidhS1gyeg4dWcVErV4aeTPB1AUv -StPYQkKNM+NjytWHl5tNuBoDNLsc0gI/WSPiI4CIY8LwomOoiw== +Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAJXzVrvVjHC90d7a +Y7Ap19tgJ9ZZ/WEbMMbQXXN9NOFo4yimieZgvYnTDvRyrXJ2+IYh/XU8+G2+nATh +ggNpbK7QVbpe8sr1D47W2Y3IVkb0+Kx0Khl7jkdwH/v7vWkCoaVKbiEcBBQVVb+/ +JEPIFwO+Pizq28ivHf1S39YVSZ7CRGnv8UVDg7IezxQcEz/+nHHL5xsYVjanr0Tx +C6F5REb5Q0Yp2LDKSU1lYNP2jnS8Yp4ejUspmrQN8KJ3WzTkES+nJcXlB3YSrr51 +cxXkCn1TOFY/eW1uyu2Aq1btfosc5+PUYjAicOcpsgM8/vo98DbATRGimdMpMSe4 +xbgVozxPm3NeK7L7y/11R7gXvSHY5sG5/3OB2CUIbQheHKWDUN5n5trQjlrT8iqx +P7iAIQdqcRVtBetRs1mN1BVGfgKoEwEWmb0DzHBxKiMWeK/R1QGdBLRjk5oEOpIu +5n5zk6X+UJu9DupUhm985RR3/sIoWkoO1y2M6e1hKbJT/2wEvA== -----END CERTIFICATE----- diff --git a/Lib/test/keycert4.pem b/Lib/test/keycert4.pem index d1ebb82486de2..1003d67fd075e 100644 --- a/Lib/test/keycert4.pem +++ b/Lib/test/keycert4.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDGjpiHzq7ghxhM -ZzrnRsGBC/cmw8EREIdbqlrz/l8BFaWeipvO5Hb/MyU8xs2zLUrqIr2JNf+Eii8Y -m4bYmZclFra4jomaiSlxTZOe3dMV8m4vAq4eT2mSfZZC1+XAutqdz7WhHxhMVEm3 -AyTWvTC3qCbnlbX5VIoQUwFrsSWqDiHyaGdK3rrOTKFUKM8YPiq/BZkm6A4eiFci -5wd/SPD+w0pIscZbQW1MUr5bs54uylWaUmtfI8KJt6BDZQ/uA06c6i863sSCEI6L -gq+wyikeJGNMxZMfgu3dzfv4BiZBQX0ZhiRvqseDSdPcuVa2Ifb6CFlg298neweY -4EAIE1O+uqo5h8FF1aUOMZpQEZuzsp9R/TAMBHX1YmVjG/kRdBeaHe3whzB1Pfue -PIX2ZTMmLNYbYbfnmxhk1nn8aAvoT98pNw8y3/2k2KNsu24n9uSkkxAoqJ19WKwm -mL8MpJKAzLv45tRvhN+QLtnRdu+LJ9m29npQHFmYLbdqRfmidnMCAwEAAQKCAYBd -w1C8MRnb5W/QBJ+IP515NxFLOP2e9VM2MkgpGGH8vSAssf/Jv5GCCcD35lmU1zqd -PjKK7PjwueBrmmYfOshpN0Sp+oV4eHUdkCi5yL65inYFtRpMLewIxU2D2zgfvx0l -kMSQhYKP6O22gsGOtmCfGcTlb4kzaHyaINh25nyGxY26TxsX+/3zFbTJbUv+grzk -39vmx4aDXJbpYHfl36gOZmJZ2bl1tnvKovhJjZSRO/MYoPsbPmPLbO89ZCgVmXFc -GVkb5Cram6i3iyutSDjxWN7Fb8uy8pFLPGAXZgF7pQoXPSEHZe8GEWBnWSC9KaDa -uM9Ir847/Muy1ceCmxKcI2WrSjoH2AhPcmHgvbPE9Mynr6+uzReSP3q7Wh9PHm23 -oFx3DwdCfmjysnpAMBawNmJdWyxVDbZ6eyrhp17ADpsMaDTynZ+fJjgMr+MmWtbU -YSRD0wWtl/DrzsaePZsOjCpKYJyulC+rh9/Zz1aiwrGWPbgEAzDrD6Q1Zp0mUCEC -gcEA+XskmGIB9rRPy+YQmRgzQ555PsjLWsnQsNktP6KBhlQjFKJZXRZ0DxDTS7h8 -NrJrUDBmwfsgzggVbeO55VP5FGwD6DNeO/Bz++Fdevh8uKQFHDfk4sbIUPS91qw4 -s7OW7PR7C7Jf7Dnjmsn42o2lO4FsbcEn2F+PHOvoLl/OrSx73lS/RkdOEItW8d8/ -ExRohylnba/I2vCE9bNZd4DGjMW87j/THKPadDZWEqWggcrjY8x6ibSQGm2n2Tka -8B+vAoHBAMu+zl8kqFlYDG24dGfVpMaOYj5Osj0cV5f7O2pZ15sCevjiqoKGHH7G -O8EiI5pRBZ893+Fsx6YWmcKue88lfGvaoQjV0LUbfMfX/FoD39w/ZLx31yKEiFuc -KvMiRV5mO3kQiHBVX9vamzr5NeaErccXY9LnhaKOMX9blgiDQZH7fc3RhodcFWrC -9yfX6ryfidpPnRvK7Ops7hVnFKyyS4FaAarnzH1B2WcVcD4lYYxhMc8VXeU3eKOh -j1fI/F5ifQKBwQDpCjB670HqUzAexL9IYqSwSz3yedoK6m24ZIWx5XicI8fJJIXZ -QHoVAKB/IMtWxH8dnri+Bnj0O/TYe1pQb4pBm0xjAGjMEKYm6LNLhQXr67qiS0vQ -0eKYTKVv+9vTcLRQj2bI3Exh+wkys+tzK9DmrtS8CSvRICIs3+g4OWJzvRPP8NXj -LgQrzBzhPqpKhkvFxdVJTmSOrxFj+a5exLmzEZqT6qanIB+VYpQwQuqVkxGpTX5B -V5ssNLYPYRpapx0CgcByCtQixzcAA1u5knR9pkT76ris3YnA0Ptqk3I3XiBjoGjK -pL0CICUVBMpvmTdKai12a8DDwgqiOaZJJTchxH63NAHNGzkeFkuq5IdYrzB/bHBr -WbzukjZs6KXVv4oKg7ioVAu6rN7iBaO7x8BWzk8i0EHMzFCto1+rRM1e6HEsUBOj -v7LIU0+dmZGUGLRIbhhQPR3Yb6ZatSwyiKc23vmKZqHmUqbQOaqBm6te7beDRugF -XJVY9sqs9IJyhYpVHlUCgcAPoslwYKeAXagsxdQrH3D9VJDXVOHWKMBqQZDio5dB -Q80uWpuxtt6nhZkQO1JIWnYb6v+zbDbcgjByBIDuxCdBW9d+QQnanKmVyrXguK91 -C3OcHHOmSduFdWC3/zYW1mW97Tz1sXyam2hly1u3L5kW+GnE1hr9VVPjQNrO9+Ge -qW0coaJqKY78q3Rm2dtyZeJSFFI1o/DQ3blyItsFpg/QrR+a5XrS6Nw2ZLIL4Azo -J1CTgMwjhwlMNCI4t4dkHd0= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQC34y3S6iXdmdvd +M/2aFBe6CvRvZwhh1huGl7IQRtdoakPqMLlEdNHJtNeF5M27xLei+p4wt7N1Jyi0 +2keHQb1m9TqH5AruOkE2ti+15zEoKoU9aWydTiH+epKTT0yjg2NcKQjRUaWcbhzB +H4EMKuCIlzIIz8/EIKkOqhCDwq6+Fv3Ays+z7Bz+yR80ixivKu/l7SjxQ7z7R/kC +I7OViRcIO5QBQPj7VLvCTz4VA6u/LdXngK2HNuau6WXm5yNNQbqrB11AEJcYZf/c +VrneV4F+ZjLloAKgSn9GB8eWOyilTQ18TcKd+H2icipRaP/+QR/KPx5GK/SXU3my +qm62QOGI7t/5ktVdjGhs6tHZxw1SRiipiLYWbtVRrSxa4wYlgpgoUwvrvvtC5kAN +nTw1VGWsxcs+6a7+PocYnJiq7k4b5OAUb3Ryvl9DLAMy8NqpRWo4cHD/XQ3FCYwF +HlOSgx/dL5Se0i3dW1KzbP6OvaNg6nl/1EXPUsJ1ATS8nzvzhccCAwEAAQKCAYEA +nD3GvaJ9MeB802JNZBEWZ9jO/6jHknldQeq6POI0PF+t/NoRUH0BkyS4yucxdw0a +CrxulG5BaJUxHRkqFV5iE4zhgnzcXLXamyYJO8GIHtyiASAGTVIJyDNVPxztvTDx +x2iGOXPqBxP4Eo82EqSLywLMXHhVzAsEGZWeGpXb61+Vk62+9Nz1dfZlMTvOaWdO +Fkp/sx8e/1KT3KGBANlOXIxioP4Xj1Tbg6nY0fogf3vud5j52B1pu8xL7PkPIaFq +DEGz3XvWhBF/+Cs5iDeYz8eQpfQig7HdHVn2D8dZmzQgpLw1yGbPAnqrgopWfm7R +MqiyFe82p2t+vfSoG5jz28XxPtzBJV3ljxKxlbnclqu/CAYSjzaYohDzyhjdZOZI +r9DOfWOqu01Ha3EEsApn95fusHHGTH2FOy0u61FSTrfLfqsLw9WRJPWleirKikhf +SZzi223QrmzZMtuCF7VgTx3ghDhBmFD8uzVVQ1SwPZ8CgftRkFcn1llXIAfJ3iHB +AoHBAOg3DOIdtUVgpjMKhpAyuH54fYvGl7afIMNbKRle0kCiP45wtGJ43RPMqiR8 +1rxZB3+iapICI/lnhk3O7vVRkR64yiqQBcl/hXZ1BhyD6iDXWYmm5mcnymcoqfwc +p9TfzEPyGPb3SM2YlI0cSPRqM/jDvGvnDeKIpzEKvUlwJ59WoN2HOHTIXf+XbN5n +unpuTt6YKJvc48DrXsPnUzkCmUfbOmgHfeb9/qBs/8kY4YJMsZEjqf88o7mCJCIy +BtDxTwKBwQDKuOwE8e0GIA01ZHd6RfR+ZCvmp2oauxal4EJsBx+ZZnhEWGaSm1fE +Bf/ih074ghcSKoSrdYpD1xGZ6fGVWMx3jcL11yLDOUiiPDJsm8hUBZ0IW1qXyfCP +l7xy1bUkWwPXdmFuGp1exrcjooKrFNuTdYiK4nQZSKuCfXQRADrmEJmM+gYwhqI7 +4XsYo848B9A4hbY6RLEox4uvo/RmafY0iR0PMhVEc+ydNLKB/4LpahZqBQ4kTpMv +o4+rEvYt1gkCgcB08gx177ozx1nMCLf99N0/LBUmCIytNvR8DfPjyAIg9NUHOjFO +CkpkR0VEfO50Cm4hVD1RbOyLFRzpIJbtSvfHvg5qYv/XG3auUn8Sa0jE408/aKNO +PhbL3wnEYvYO2ep4KXtzHNQ4XmgprJ39IWMtG/5PZRx0ApgYtazgSDBcKXd4OTow +bhwQtUTpuNmMAPONXJnO7O5yYNbn2B7sbiedrYV7kJJSe4X5awtiTjp7sX4XdxuM +5BAcQ7NI2WLfZTcCgcBp/X9hIoATmMRvKwUQx+yJ/KO7Z8KhETpJJdR0mNDbqmit +Cy8t7cxYb+6WqLoQUivv0o0k/EJ7L8JDH76woAnfZB4P3RiOy69/K0wN3vFBhOHS +kbju7aU53lKoE7YuuOtsRrewEng/KlRsbDY3bqNTGLt4KegbpBQQGLmLffxNd1Zh +EAQWcP33ou9yNYrJdihWtQpOssWRlash/O32ceZJF3s7C6t068tFclz2fPocQdxQ +OC5pqy9nU/P0tOhDlMkCgcEAosaBJLIeAYlOU0+2uSx5g5mIqOOTyrDEmqqad6T/ +wkB7vW2QaoDvLL22Yrzdn9vQ0V0rqzhVtan7sq5pn/BQJAueZYN8rFxS3uuW+UQk +Nsc4GLJzU8Az/2DvqEIrnE7zRc5E1FOI9gKLrBlpJB2o0hVcBznDe05Gax6Kjqbm +jHqzyU73SpxpEy3OesClCeCQIMr47HaL9aSqaEX4U9bMpgHi0HgTTHqvJ5pch0hY +dYl+WAE9LAyF1DF29BirEXVw -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5d - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=fakehostname Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c6:8e:98:87:ce:ae:e0:87:18:4c:67:3a:e7:46: - c1:81:0b:f7:26:c3:c1:11:10:87:5b:aa:5a:f3:fe: - 5f:01:15:a5:9e:8a:9b:ce:e4:76:ff:33:25:3c:c6: - cd:b3:2d:4a:ea:22:bd:89:35:ff:84:8a:2f:18:9b: - 86:d8:99:97:25:16:b6:b8:8e:89:9a:89:29:71:4d: - 93:9e:dd:d3:15:f2:6e:2f:02:ae:1e:4f:69:92:7d: - 96:42:d7:e5:c0:ba:da:9d:cf:b5:a1:1f:18:4c:54: - 49:b7:03:24:d6:bd:30:b7:a8:26:e7:95:b5:f9:54: - 8a:10:53:01:6b:b1:25:aa:0e:21:f2:68:67:4a:de: - ba:ce:4c:a1:54:28:cf:18:3e:2a:bf:05:99:26:e8: - 0e:1e:88:57:22:e7:07:7f:48:f0:fe:c3:4a:48:b1: - c6:5b:41:6d:4c:52:be:5b:b3:9e:2e:ca:55:9a:52: - 6b:5f:23:c2:89:b7:a0:43:65:0f:ee:03:4e:9c:ea: - 2f:3a:de:c4:82:10:8e:8b:82:af:b0:ca:29:1e:24: - 63:4c:c5:93:1f:82:ed:dd:cd:fb:f8:06:26:41:41: - 7d:19:86:24:6f:aa:c7:83:49:d3:dc:b9:56:b6:21: - f6:fa:08:59:60:db:df:27:7b:07:98:e0:40:08:13: - 53:be:ba:aa:39:87:c1:45:d5:a5:0e:31:9a:50:11: - 9b:b3:b2:9f:51:fd:30:0c:04:75:f5:62:65:63:1b: - f9:11:74:17:9a:1d:ed:f0:87:30:75:3d:fb:9e:3c: - 85:f6:65:33:26:2c:d6:1b:61:b7:e7:9b:18:64:d6: - 79:fc:68:0b:e8:4f:df:29:37:0f:32:df:fd:a4:d8: - a3:6c:bb:6e:27:f6:e4:a4:93:10:28:a8:9d:7d:58: - ac:26:98:bf:0c:a4:92:80:cc:bb:f8:e6:d4:6f:84: - df:90:2e:d9:d1:76:ef:8b:27:d9:b6:f6:7a:50:1c: - 59:98:2d:b7:6a:45:f9:a2:76:73 + 00:b7:e3:2d:d2:ea:25:dd:99:db:dd:33:fd:9a:14: + 17:ba:0a:f4:6f:67:08:61:d6:1b:86:97:b2:10:46: + d7:68:6a:43:ea:30:b9:44:74:d1:c9:b4:d7:85:e4: + cd:bb:c4:b7:a2:fa:9e:30:b7:b3:75:27:28:b4:da: + 47:87:41:bd:66:f5:3a:87:e4:0a:ee:3a:41:36:b6: + 2f:b5:e7:31:28:2a:85:3d:69:6c:9d:4e:21:fe:7a: + 92:93:4f:4c:a3:83:63:5c:29:08:d1:51:a5:9c:6e: + 1c:c1:1f:81:0c:2a:e0:88:97:32:08:cf:cf:c4:20: + a9:0e:aa:10:83:c2:ae:be:16:fd:c0:ca:cf:b3:ec: + 1c:fe:c9:1f:34:8b:18:af:2a:ef:e5:ed:28:f1:43: + bc:fb:47:f9:02:23:b3:95:89:17:08:3b:94:01:40: + f8:fb:54:bb:c2:4f:3e:15:03:ab:bf:2d:d5:e7:80: + ad:87:36:e6:ae:e9:65:e6:e7:23:4d:41:ba:ab:07: + 5d:40:10:97:18:65:ff:dc:56:b9:de:57:81:7e:66: + 32:e5:a0:02:a0:4a:7f:46:07:c7:96:3b:28:a5:4d: + 0d:7c:4d:c2:9d:f8:7d:a2:72:2a:51:68:ff:fe:41: + 1f:ca:3f:1e:46:2b:f4:97:53:79:b2:aa:6e:b6:40: + e1:88:ee:df:f9:92:d5:5d:8c:68:6c:ea:d1:d9:c7: + 0d:52:46:28:a9:88:b6:16:6e:d5:51:ad:2c:5a:e3: + 06:25:82:98:28:53:0b:eb:be:fb:42:e6:40:0d:9d: + 3c:35:54:65:ac:c5:cb:3e:e9:ae:fe:3e:87:18:9c: + 98:aa:ee:4e:1b:e4:e0:14:6f:74:72:be:5f:43:2c: + 03:32:f0:da:a9:45:6a:38:70:70:ff:5d:0d:c5:09: + 8c:05:1e:53:92:83:1f:dd:2f:94:9e:d2:2d:dd:5b: + 52:b3:6c:fe:8e:bd:a3:60:ea:79:7f:d4:45:cf:52: + c2:75:01:34:bc:9f:3b:f3:85:c7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 52:E0:93:AA:52:55:B7:BB:E7:A8:E0:8C:DE:41:2E:F4:07:F0:36:FB + C8:BD:A8:B4:C0:F2:32:10:73:47:9C:48:81:32:F8:BA:BB:26:84:97 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 29:d2:3f:82:3f:c1:38:35:a6:bd:81:10:fe:64:ec:ff:7e:e1: - c6:6f:7f:86:65:f9:31:6f:fb:ef:32:4e:2f:87:c8:42:de:6c: - 8d:b8:06:08:8f:37:70:95:7d:e1:40:d4:82:2b:8d:b3:4a:fd: - 34:c5:9e:df:ff:01:53:4a:4f:08:f4:58:e1:74:fc:78:e3:3e: - 71:a7:5e:66:07:ea:d2:04:31:e2:75:a8:4c:80:17:86:92:20: - d2:32:a7:9a:65:8b:1a:5f:f1:4c:c8:50:6d:00:fc:99:bf:69: - b3:48:f3:45:5a:ee:35:50:14:b8:f3:92:92:c6:9f:0e:5d:eb: - 0d:e8:ec:f2:a4:09:6b:dc:66:2b:fc:df:4c:fc:65:a1:ae:d3: - b5:88:6a:a4:e7:08:1c:94:49:e0:b8:c1:04:8c:21:09:6c:55: - 4b:2c:97:10:f1:8c:6c:d0:bb:ba:8d:93:e8:47:8b:4d:8e:7d: - 7d:85:53:18:c8:f8:f4:8f:67:3a:b1:aa:3e:18:34:6c:3a:e6: - a6:c7:2f:be:83:38:f5:d5:e5:d2:17:28:61:6c:b6:49:99:21: - 69:a4:a8:b6:94:76:fd:18:ad:35:52:45:64:fb:f1:5d:8e:bb: - c0:21:2e:59:55:24:af:bb:8f:b2:0a:7b:17:f0:34:97:8e:68: - a9:f2:d0:3e:f6:73:82:f8:7c:4e:9a:70:7d:d6:b3:8c:cc:85: - 04:5c:02:8f:74:da:88:3a:20:a8:7e:c2:9e:b0:dd:56:1f:ce: - cd:42:16:c6:14:91:ad:30:e0:dc:76:f2:2c:56:ea:38:45:d8: - c0:3e:b8:90:fa:f3:38:99:ec:44:07:35:8f:69:62:0c:f9:ef: - b7:9d:e5:15:42:6e:fb:fe:4c:ff:e8:94:5a:1a:b0:80:b2:0e: - 17:3d:e1:87:a8:08:84:93:74:68:8d:29:df:ca:0b:6a:44:32: - 8a:51:3b:d6:38:db:bd:e3:2a:1b:5e:20:48:81:82:19:91:c6: - 87:8c:0f:cd:51:ea + 76:87:76:4d:e4:0f:88:bf:2c:f3:58:67:c0:97:6c:cd:59:18: + 82:83:4c:04:19:a5:6d:aa:fa:64:3d:49:32:3e:e1:56:95:b2: + 13:f7:cf:d3:11:b0:72:b7:5b:e7:d7:85:69:51:3c:b6:54:80: + 45:2f:28:10:21:20:b9:ba:e9:27:5a:b7:3f:82:b7:69:f5:46: + f5:bf:a2:8b:17:7f:f2:14:d1:46:97:b5:8b:47:fb:9f:e8:5c: + 05:0e:9d:11:bd:7c:9a:03:84:0b:ca:29:66:4a:ca:0d:6f:09: + 1e:7a:27:c1:7f:03:96:70:8d:18:a5:2f:a4:98:a5:19:aa:8c: + 5d:1e:8c:3e:bb:6d:3b:c0:33:c0:15:e1:bd:09:3d:9f:e8:dc: + 12:d4:cb:44:1d:06:f5:e8:d6:4e:a1:2d:5c:9f:5d:1f:5b:2a: + c3:4d:40:8d:da:d1:78:80:d0:c6:31:72:10:48:8a:e9:10:7a: + 13:30:11:b2:9e:67:0e:ed:a1:aa:ec:73:2d:f0:b8:8a:22:75: + 0f:30:69:5c:50:7e:91:ce:da:91:c7:70:8c:65:ff:f6:58:fb: + 00:bd:45:cc:e2:e4:e3:e5:16:36:7d:f3:a2:4a:9c:45:ff:d9: + a5:16:e0:2f:b5:5b:6c:e6:8a:13:15:48:73:bd:7c:80:33:c3: + d4:3b:3a:1d:85:0e:a4:f7:f7:fb:48:0c:e9:a0:4b:5e:8a:5c: + 67:f8:25:02:6f:cd:72:c1:aa:5a:93:64:7c:14:20:43:e0:13: + 7f:0d:e1:0d:61:5e:2e:2c:cd:7a:2e:2a:ae:b6:75:6a:5f:a0: + 1a:9b:b6:67:2d:b0:a5:1c:54:bc:8c:70:7e:15:2b:c0:50:e3: + 03:bb:a4:a5:fc:45:01:c9:3f:a7:b8:18:dc:3e:08:07:a1:9b: + f5:bd:95:bd:49:e8:10:7c:91:7d:2d:c4:c2:98:b6:b7:51:69: + d7:0a:68:40:b5:0f:85:a0:a9:67:77:c6:68:cb:0e:58:34:b3: + 58:e7:c8:7c:09:67 -----BEGIN CERTIFICATE----- MIIF9zCCBF+gAwIBAgIJAMstgJlaaVJdMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZh -a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMaOmIfO -ruCHGExnOudGwYEL9ybDwREQh1uqWvP+XwEVpZ6Km87kdv8zJTzGzbMtSuoivYk1 -/4SKLxibhtiZlyUWtriOiZqJKXFNk57d0xXybi8Crh5PaZJ9lkLX5cC62p3PtaEf -GExUSbcDJNa9MLeoJueVtflUihBTAWuxJaoOIfJoZ0reus5MoVQozxg+Kr8FmSbo -Dh6IVyLnB39I8P7DSkixxltBbUxSvluzni7KVZpSa18jwom3oENlD+4DTpzqLzre -xIIQjouCr7DKKR4kY0zFkx+C7d3N+/gGJkFBfRmGJG+qx4NJ09y5VrYh9voIWWDb -3yd7B5jgQAgTU766qjmHwUXVpQ4xmlARm7Oyn1H9MAwEdfViZWMb+RF0F5od7fCH -MHU9+548hfZlMyYs1htht+ebGGTWefxoC+hP3yk3DzLf/aTYo2y7bif25KSTECio -nX1YrCaYvwykkoDMu/jm1G+E35Au2dF274sn2bb2elAcWZgtt2pF+aJ2cwIDAQAB +a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALfjLdLq +Jd2Z290z/ZoUF7oK9G9nCGHWG4aXshBG12hqQ+owuUR00cm014XkzbvEt6L6njC3 +s3UnKLTaR4dBvWb1OofkCu46QTa2L7XnMSgqhT1pbJ1OIf56kpNPTKODY1wpCNFR +pZxuHMEfgQwq4IiXMgjPz8QgqQ6qEIPCrr4W/cDKz7PsHP7JHzSLGK8q7+XtKPFD +vPtH+QIjs5WJFwg7lAFA+PtUu8JPPhUDq78t1eeArYc25q7pZebnI01BuqsHXUAQ +lxhl/9xWud5XgX5mMuWgAqBKf0YHx5Y7KKVNDXxNwp34faJyKlFo//5BH8o/HkYr +9JdTebKqbrZA4Yju3/mS1V2MaGzq0dnHDVJGKKmIthZu1VGtLFrjBiWCmChTC+u+ ++0LmQA2dPDVUZazFyz7prv4+hxicmKruThvk4BRvdHK+X0MsAzLw2qlFajhwcP9d +DcUJjAUeU5KDH90vlJ7SLd1bUrNs/o69o2DqeX/URc9SwnUBNLyfO/OFxwIDAQAB o4IBwzCCAb8wFwYDVR0RBBAwDoIMZmFrZWhvc3RuYW1lMA4GA1UdDwEB/wQEAwIF oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd -BgNVHQ4EFgQUUuCTqlJVt7vnqOCM3kEu9AfwNvswfQYDVR0jBHYwdIAU3b/K2ubR -NLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo +BgNVHQ4EFgQUyL2otMDyMhBzR5xIgTL4ursmhJcwfQYDVR0jBHYwdIAUs4qgorpx +8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo b24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZl coIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6 Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1Bggr BgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2Nz cC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5l -dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACnSP4I/ -wTg1pr2BEP5k7P9+4cZvf4Zl+TFv++8yTi+HyELebI24BgiPN3CVfeFA1IIrjbNK -/TTFnt//AVNKTwj0WOF0/HjjPnGnXmYH6tIEMeJ1qEyAF4aSINIyp5plixpf8UzI -UG0A/Jm/abNI80Va7jVQFLjzkpLGnw5d6w3o7PKkCWvcZiv830z8ZaGu07WIaqTn -CByUSeC4wQSMIQlsVUsslxDxjGzQu7qNk+hHi02OfX2FUxjI+PSPZzqxqj4YNGw6 -5qbHL76DOPXV5dIXKGFstkmZIWmkqLaUdv0YrTVSRWT78V2Ou8AhLllVJK+7j7IK -exfwNJeOaKny0D72c4L4fE6acH3Ws4zMhQRcAo902og6IKh+wp6w3VYfzs1CFsYU -ka0w4Nx28ixW6jhF2MA+uJD68ziZ7EQHNY9pYgz577ed5RVCbvv+TP/olFoasICy -Dhc94YeoCISTdGiNKd/KC2pEMopRO9Y4273jKhteIEiBghmRxoeMD81R6g== +dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHaHdk3k +D4i/LPNYZ8CXbM1ZGIKDTAQZpW2q+mQ9STI+4VaVshP3z9MRsHK3W+fXhWlRPLZU +gEUvKBAhILm66Sdatz+Ct2n1RvW/oosXf/IU0UaXtYtH+5/oXAUOnRG9fJoDhAvK +KWZKyg1vCR56J8F/A5ZwjRilL6SYpRmqjF0ejD67bTvAM8AV4b0JPZ/o3BLUy0Qd +BvXo1k6hLVyfXR9bKsNNQI3a0XiA0MYxchBIiukQehMwEbKeZw7toarscy3wuIoi +dQ8waVxQfpHO2pHHcIxl//ZY+wC9Rczi5OPlFjZ986JKnEX/2aUW4C+1W2zmihMV +SHO9fIAzw9Q7Oh2FDqT39/tIDOmgS16KXGf4JQJvzXLBqlqTZHwUIEPgE38N4Q1h +Xi4szXouKq62dWpfoBqbtmctsKUcVLyMcH4VK8BQ4wO7pKX8RQHJP6e4GNw+CAeh +m/W9lb1J6BB8kX0txMKYtrdRadcKaEC1D4WgqWd3xmjLDlg0s1jnyHwJZw== -----END CERTIFICATE----- diff --git a/Lib/test/keycertecc.pem b/Lib/test/keycertecc.pem index 02eda2835f07a..81daa4ccb9421 100644 --- a/Lib/test/keycertecc.pem +++ b/Lib/test/keycertecc.pem @@ -1,31 +1,31 @@ -----BEGIN PRIVATE KEY----- -MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBL2Y5JfpzbgHw+t4Q+ -c5SHhsZcD9ylEtUMg7OyF9xW6j+3VIVORGaokcOtE0Z2Y5ehZANiAASzz/rInKUz -onpxP5bLxmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fB -ihQTJkXyBMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FM= +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBcNwE+cm17mmr7Yg6d +0DNCnheGFOjkYH4tYzTyCkcZGShkmF/tKhIqb3imKz0Kx9+hZANiAATyp8ws6CuN +OI2/3MC4jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoG +JJYHhZNQXEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQAQ= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5e - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost-ecc Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: - 04:b3:cf:fa:c8:9c:a5:33:a2:7a:71:3f:96:cb:c6: - 6a:bc:7e:6a:ed:81:14:92:d2:34:4f:50:e5:35:e9: - 72:97:f8:ab:62:7e:72:db:98:b1:d0:b4:fa:dc:b5: - d9:11:45:13:82:c6:75:11:cf:67:c1:8a:14:13:26: - 45:f2:04:c4:ac:c0:d4:d1:0a:cf:b8:0d:42:9b:30: - 07:e2:86:28:0c:55:88:1d:59:b6:4f:14:10:e5:7a: - 8e:5a:78:5c:38:fc:53 + 04:f2:a7:cc:2c:e8:2b:8d:38:8d:bf:dc:c0:b8:8d: + 95:52:92:6a:03:ce:6f:d7:fd:9a:e4:12:6e:13:54: + 72:8f:49:9e:a4:cd:94:69:9a:65:25:2d:2f:65:ed: + 24:19:48:b6:32:0c:01:41:17:3a:06:24:96:07:85: + 93:50:5c:43:bb:1c:5b:33:9f:a2:a7:bc:b8:e1:c1: + 2e:9d:77:39:5a:1c:fc:e2:12:49:eb:4a:bd:0e:2a: + 12:66:74:91:eb:40:04 ASN1 OID: secp384r1 NIST CURVE: P-384 X509v3 extensions: @@ -38,9 +38,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - C6:82:22:BF:4F:3D:40:AD:9B:16:AD:E7:C5:ED:C4:82:EB:35:97:98 + 79:11:98:86:15:4F:48:F4:31:0B:D2:CC:C8:26:3A:09:07:5D:96:40 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -54,53 +54,53 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 76:e3:19:4d:34:78:50:3e:fa:63:53:d6:3f:01:87:e8:f4:a3: - a9:81:5b:31:d6:de:3a:98:f3:bb:70:4d:29:35:1f:b0:6a:b3: - 9d:bf:03:2b:79:c4:f2:0b:32:f8:fc:f6:cb:13:47:28:81:fa: - 96:b3:1a:1d:bd:4b:f6:35:df:87:ef:6e:74:63:87:3d:7e:2b: - c6:78:d4:8e:ef:03:e6:01:11:22:4e:1b:ef:2c:c1:c5:4e:3f: - 4a:07:ae:92:ef:d3:ac:79:59:7c:60:89:4b:3d:39:08:ef:c4: - 9a:dc:b0:8b:ee:5f:30:40:d3:c2:f3:f8:90:77:9d:8c:a7:07: - b9:5f:62:83:4d:37:fa:36:e1:1d:26:2b:cc:8f:7c:6f:f1:23: - 87:71:48:40:ad:6b:30:16:47:4c:d7:98:bb:f5:9b:63:c8:66: - 47:65:58:d2:c1:07:81:14:0c:25:20:87:b9:1d:ab:0b:56:db: - 2c:ab:36:db:7f:c7:42:52:af:91:d6:fb:18:cf:94:f7:1e:25: - 99:ce:20:78:c6:f8:69:6e:9c:53:f3:fe:90:3e:4d:ca:d5:d6: - ac:6e:02:17:be:4a:0f:fe:e6:14:d4:ce:25:df:17:8f:6f:b9: - d3:28:dc:b4:98:ef:05:6f:eb:20:14:1c:c1:e9:9d:02:7b:0e: - 0f:e4:a8:bc:3b:62:e0:42:0c:b0:f7:a1:63:fe:98:d7:aa:b0: - f6:ed:ff:ab:4f:1a:9a:8f:eb:f0:86:61:d2:d3:a5:08:d0:db: - e4:d6:a9:0e:ec:08:6f:af:fb:ef:73:3f:47:69:97:90:b2:5a: - 6f:31:66:a7:4c:32:0c:e9:ea:18:ce:a9:79:9c:f5:c4:42:f5: - 68:53:b2:a4:8c:98:3f:97:34:62:61:41:0a:54:d7:0b:cd:33: - c8:62:62:da:f7:07:c6:c6:3b:fa:68:ca:5f:62:3e:57:db:bd: - cb:16:94:07:9a:b5:31:55:b8:f8:cb:b0:7f:a0:d1:82:df:71: - c8:90:60:b3:88:b0 + 6e:42:e8:a2:2d:28:14:e3:25:5c:c1:7e:54:e9:3a:ff:30:db: + 94:ba:b2:f6:5f:ae:9a:c1:90:b3:4f:ce:65:1d:84:64:c0:71: + 2c:44:8e:7e:00:79:f5:8c:4a:1d:34:13:44:de:99:2e:db:53: + ee:ec:74:97:4d:59:1a:09:82:4f:98:75:91:a7:a0:b9:da:5e: + 68:f5:32:85:be:36:3d:83:d4:ee:f9:87:67:31:85:41:53:9a: + e7:05:96:13:1c:88:2e:7f:33:b1:ee:bd:f9:50:52:24:ed:3d: + 92:95:6e:30:c3:af:74:a9:ee:15:bb:da:7c:14:50:8e:e3:99: + ea:ba:b4:37:8a:50:61:26:de:01:93:b8:a2:6b:d9:c7:38:5e: + b2:f8:96:3d:a8:9f:7d:0c:71:d4:7e:cc:a0:57:af:7e:ce:3f: + a7:a7:27:68:c1:28:d7:4f:44:c1:b4:93:c3:c7:35:2b:50:c3: + 8e:2c:d0:46:c1:3f:e1:67:d3:f0:81:ae:f3:5c:3e:4f:d5:a8: + 07:8f:e0:eb:ef:d8:dc:47:e0:3d:58:eb:de:0e:7f:b2:58:cb: + 5c:f1:2f:65:7e:0f:0d:cc:ca:ba:83:53:63:bc:dd:18:0c:ee: + ed:ec:96:88:d0:38:c5:d7:ab:e7:55:79:7b:6d:ba:c0:a0:e9: + 5c:ca:7c:fb:f8:70:c7:fb:f5:b2:b5:74:cb:f7:c0:0d:20:9f: + 1d:b7:4c:bf:8a:8d:cd:e3:bc:4e:30:78:02:12:a0:9b:d5:8f: + 49:3c:95:91:76:6e:7c:54:dc:61:7a:2e:20:ed:35:25:e0:c5: + 17:50:02:83:00:74:8f:f0:1c:97:96:08:fc:2e:63:a4:f7:97: + 87:43:2a:32:04:2d:4c:f9:1a:07:bf:68:91:fc:50:21:a1:3c: + 8d:8f:fb:83:57:83:1f:b6:55:5c:55:2f:58:64:ad:f3:27:ba: + d0:e3:cd:58:01:a3:c9:ba:1d:95:dc:30:d5:af:b9:20:ad:d9: + 48:ba:8d:9a:66:ee -----BEGIN CERTIFICATE----- MIIEyzCCAzOgAwIBAgIJAMstgJlaaVJeMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGMxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFjAUBgNVBAMMDWxv -Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASzz/rInKUzonpxP5bL -xmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fBihQTJkXy -BMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FOjggHEMIIBwDAYBgNV +Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATyp8ws6CuNOI2/3MC4 +jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoGJJYHhZNQ +XEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQASjggHEMIIBwDAYBgNV HREEETAPgg1sb2NhbGhvc3QtZWNjMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU -BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUxoIi -v089QK2bFq3nxe3Egus1l5gwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHKb5oIKPI1 -tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg +BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUeRGY +hhVPSPQxC9LMyCY6CQddlkAwfQYDVR0jBHYwdIAUs4qgorpx8agkedSkWyU2FR5J +yM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMstgJlaaVJb MIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0Y2EucHl0 aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcwAYYpaHR0 cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYDVR0fBDww OjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2EvcmV2 -b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHbjGU00eFA++mNT1j8Bh+j0 -o6mBWzHW3jqY87twTSk1H7Bqs52/Ayt5xPILMvj89ssTRyiB+pazGh29S/Y134fv -bnRjhz1+K8Z41I7vA+YBESJOG+8swcVOP0oHrpLv06x5WXxgiUs9OQjvxJrcsIvu -XzBA08Lz+JB3nYynB7lfYoNNN/o24R0mK8yPfG/xI4dxSECtazAWR0zXmLv1m2PI -ZkdlWNLBB4EUDCUgh7kdqwtW2yyrNtt/x0JSr5HW+xjPlPceJZnOIHjG+GlunFPz -/pA+TcrV1qxuAhe+Sg/+5hTUziXfF49vudMo3LSY7wVv6yAUHMHpnQJ7Dg/kqLw7 -YuBCDLD3oWP+mNeqsPbt/6tPGpqP6/CGYdLTpQjQ2+TWqQ7sCG+v++9zP0dpl5Cy -Wm8xZqdMMgzp6hjOqXmc9cRC9WhTsqSMmD+XNGJhQQpU1wvNM8hiYtr3B8bGO/po -yl9iPlfbvcsWlAeatTFVuPjLsH+g0YLfcciQYLOIsA== +b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAG5C6KItKBTjJVzBflTpOv8w +25S6svZfrprBkLNPzmUdhGTAcSxEjn4AefWMSh00E0TemS7bU+7sdJdNWRoJgk+Y +dZGnoLnaXmj1MoW+Nj2D1O75h2cxhUFTmucFlhMciC5/M7HuvflQUiTtPZKVbjDD +r3Sp7hW72nwUUI7jmeq6tDeKUGEm3gGTuKJr2cc4XrL4lj2on30McdR+zKBXr37O +P6enJ2jBKNdPRMG0k8PHNStQw44s0EbBP+Fn0/CBrvNcPk/VqAeP4Ovv2NxH4D1Y +694Of7JYy1zxL2V+Dw3MyrqDU2O83RgM7u3slojQOMXXq+dVeXttusCg6VzKfPv4 +cMf79bK1dMv3wA0gnx23TL+Kjc3jvE4weAISoJvVj0k8lZF2bnxU3GF6LiDtNSXg +xRdQAoMAdI/wHJeWCPwuY6T3l4dDKjIELUz5Gge/aJH8UCGhPI2P+4NXgx+2VVxV +L1hkrfMnutDjzVgBo8m6HZXcMNWvuSCt2Ui6jZpm7g== -----END CERTIFICATE----- diff --git a/Lib/test/make_ssl_certs.py b/Lib/test/make_ssl_certs.py index 41b5f46c882ca..c62896f861dab 100644 --- a/Lib/test/make_ssl_certs.py +++ b/Lib/test/make_ssl_certs.py @@ -7,6 +7,9 @@ import tempfile from subprocess import * +startdate = "20180829142316Z" +enddate = "20371028142316Z" + req_template = """ [ default ] base_url = http://testca.pythontest.net/testca @@ -21,6 +24,8 @@ O = Python Software Foundation CN = {hostname} + [req_x509_extensions_nosan] + [req_x509_extensions_simple] subjectAltName = @san @@ -70,8 +75,12 @@ database = $dir/index.txt crlnumber = $dir/crl.txt default_md = sha256 - default_days = 3600 - default_crl_days = 3600 + startdate = {startdate} + default_startdate = {startdate} + enddate = {enddate} + default_enddate = {enddate} + default_days = 7000 + default_crl_days = 7000 certificate = pycacert.pem private_key = pycakey.pem serial = $dir/serial @@ -116,10 +125,15 @@ def make_cert_key(hostname, sign=False, extra_san='', tempnames.append(f.name) req_file, cert_file, key_file = tempnames try: - req = req_template.format(hostname=hostname, extra_san=extra_san) + req = req_template.format( + hostname=hostname, + extra_san=extra_san, + startdate=startdate, + enddate=enddate + ) with open(req_file, 'w') as f: f.write(req) - args = ['req', '-new', '-days', '3650', '-nodes', + args = ['req', '-new', '-nodes', '-days', '7000', '-newkey', key, '-keyout', key_file, '-extensions', ext, '-config', req_file] @@ -168,19 +182,30 @@ def make_ca(): f.write("00") with open(os.path.join('cadir','index.txt.attr'),'w+') as f: f.write('unique_subject = no') + # random start value for serial numbers + with open(os.path.join('cadir','serial'), 'w') as f: + f.write('CB2D80995A69525B\n') with tempfile.NamedTemporaryFile("w") as t: - t.write(req_template.format(hostname='our-ca-server', extra_san='')) + req = req_template.format( + hostname='our-ca-server', + extra_san='', + startdate=startdate, + enddate=enddate + ) + t.write(req) t.flush() with tempfile.NamedTemporaryFile() as f: - args = ['req', '-new', '-days', '3650', '-extensions', 'v3_ca', '-nodes', - '-newkey', 'rsa:3072', '-keyout', 'pycakey.pem', + args = ['req', '-config', t.name, '-new', + '-nodes', + '-newkey', 'rsa:3072', + '-keyout', 'pycakey.pem', '-out', f.name, '-subj', '/C=XY/L=Castle Anthrax/O=Python Software Foundation CA/CN=our-ca-server'] check_call(['openssl'] + args) - args = ['ca', '-config', t.name, '-create_serial', + args = ['ca', '-config', t.name, '-out', 'pycacert.pem', '-batch', '-outdir', TMP_CADIR, - '-keyfile', 'pycakey.pem', '-days', '3650', + '-keyfile', 'pycakey.pem', '-selfsign', '-extensions', 'v3_ca', '-infiles', f.name ] check_call(['openssl'] + args) args = ['ca', '-config', t.name, '-gencrl', '-out', 'revocation.crl'] @@ -223,18 +248,18 @@ def print_cert(path): f.write(key) f.write(cert) - cert, key = make_cert_key('localhost', True) + cert, key = make_cert_key('localhost', sign=True) with open('keycert3.pem', 'w') as f: f.write(key) f.write(cert) - cert, key = make_cert_key('fakehostname', True) + cert, key = make_cert_key('fakehostname', sign=True) with open('keycert4.pem', 'w') as f: f.write(key) f.write(cert) cert, key = make_cert_key( - 'localhost-ecc', True, key='param:secp384r1.pem' + 'localhost-ecc', sign=True, key='param:secp384r1.pem' ) with open('keycertecc.pem', 'w') as f: f.write(key) @@ -254,7 +279,7 @@ def print_cert(path): 'RID.1 = 1.2.3.4.5', ] - cert, key = make_cert_key('allsans', extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('allsans', sign=True, extra_san='\n'.join(extra_san)) with open('allsans.pem', 'w') as f: f.write(key) f.write(cert) @@ -271,11 +296,16 @@ def print_cert(path): ] # IDN SANS, signed - cert, key = make_cert_key('idnsans', True, extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('idnsans', sign=True, extra_san='\n'.join(extra_san)) with open('idnsans.pem', 'w') as f: f.write(key) f.write(cert) + cert, key = make_cert_key('nosan', sign=True, ext='req_x509_extensions_nosan') + with open('nosan.pem', 'w') as f: + f.write(key) + f.write(cert) + unmake_ca() print("update Lib/test/test_ssl.py and Lib/test/test_asyncio/util.py") print_cert('keycert.pem') diff --git a/Lib/test/nosan.pem b/Lib/test/nosan.pem new file mode 100644 index 0000000000000..ec10cdcabb9e3 --- /dev/null +++ b/Lib/test/nosan.pem @@ -0,0 +1,130 @@ +-----BEGIN PRIVATE KEY----- +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCv3sUoOE4F7Pye +AT2Q6XpXrGUOu1fYgdnItLLLhvn7ACuHMj7TA5UKXxsepJn5m2Ji9LvAbksr1IWd +LZAvNgjwsUR+E4HbY108BhVt9sk3HFkvE0OOFbAa14ICtYPe18P/4Hv6Zfu/GJDU +rwXHNCUu0p6i/mospZ5O3sx5MgVaShknGAEC3Kp7zOgusMmE8XSbkNQa3ARMkW4o +kTqWKAeAHDjVFVyyhzZQmo+gaLzhWfJVSZhlJsuiLoZGGrVTq85EiXsE4l8rPaI+ +mKkVzWP13IZW+Fx1tiIktumdHWb1OQWrvm8AiT9b8PcFCUUrvhQFcLDSCZjKlQ0t +RWrSSKrrVsSldOreqRLtpjGzFJpGnTcvslL7rP5pg5DjBsYmVcDjrmRuJuhGq52X +/6HEC97GouVK8tT1LVMv1wufVPn+i9TzwxOuRWeUvVqLAJgWQ9N3yKdymH+VrpZk +/oB9ScyDakGezZBW5CeOQbNJ8WoX58jNxefGjtqKxmyztu43r3ECAwEAAQKCAYBQ +fVoqYCqFV8L95X9x1QljGsldhqxbsIIl811o/KtoDtndFEfgd2E8z+4vhhHaRR0w +QOW02kWZF7jXCMVWdhp9XgQE15S0/bLsB7TDERFiIZ1HiD+AxbhFcKBV8REbahCQ +CQN0xDwFZ47RaBDy7JCf71EfM+UP7fSYECvww83jVspQNBIyZx+3bT5OMCbqqz88 ++3m3mT52dJDADEeN9WAJZ+Ey1IYKRwu6tCJLvePEF1BrbDVNBgZogXZ+mzalxpjr +4RpGPMMa+VWc8HmDVd+LtpwKJcQD00GvUP4fNywn+5jvNWl54FdQiTLPrieTWxas +XUQ2crxP7Aqr2/vsU5Ruru5uF7H+ssMHp9YQDhpJ2+SVhQ9P+/loXCuKGt+BrB2Z +MlitO3f+vfRtzATmJ8G0qFrOqZK1A/qsiyIze240C1hAl3oy2xpZqTDGp4gRWwoi +OIN0HmH9UbP7bbNQY1x/zstTbza4/7rGb1+DZKeZIMu7QjBCU0rtsJpGtUvcQGEC +gcEA42GMYSL/HljZMF1LsDhTX/cmP8FDNgONhWYxT+w0Csnj1usLNBaT63dYnEiW +QKydRR4casAR1Kdy4Yfcy2lCy1kCfwqkQYk8fxSsOSHRjUfwC1SnfdYlwKFMxw4a +oZF0R4oVCBYrfP+8kqrj+5gs/gXblsw72XkYtbCdIriKKdmUzTx7MegzSqh2PVRi +rJzuwCZQ/O0NfhwdOHxLQDo0dgD+vv9e+KOSoJ9FDv8HH1tnolpRMdkSA8AJR/Nk +DXt1AoHBAMYBfTKQZ2jqLKybe4tP+YKjvjVp8vJx0iNUXFN/P6hBaSBOgq85uxXL +X3s7N/pkOCjyE95B8QusIkbnbfdyEP89O4bTbUHPXyAkHyRkR7Vny49HYuaR/aXQ +mXC0J2z5bXVpCQ514l/R/Io3wBph+hbG3To7pp9pMOV4qzvibUZaTZFwH+q+xDwf +SKSFy3fcomgH4/K5/QuKVj0jOUQsYjQQWb8GukS2KZK3zYJIAG1bBcsCVpSuBdW0 +eCZgqjnwjQKBwCUyUwWc9QEg5b68tGIKhNEhHDe3xOf0ItWcxxpc+JJ/Pm9tGfMW +cnJFntBKK5I+6qdg6qMn8oLINcnhMORxvsSHNhpUQlSaP7RGTHo4JxCmoQUpfxDd +1GUzvdyeWQrvQYdmdlRRVCHpsA6KOCtzVIDlsmtz06Ka5cjrMHl6mNeJyYbdiwW6 +B5ICBv23bUDxlzkFy5/ko51qufkAlErYeraHKSVTn1SrZZQzGdf/LkoZ6NUtUzUF +XqYQZzRHA6oU9QKBwDslzLljC5D6ivfQxln6POV6dmJMUOd9erFVDPNgSqq/R2EA +MueXDjzXcKFGMlWYxHHuxmKZPiEnfWHC1kWZjFxCdVq0I6oKATd/stHTJtyYseUO +BQwtRiDXLE7PcguKgtkU1EC+lC3dc1vyhW8cH3HYW9N+aCqsaI/TuQr9e3kNlqhA +XzhnXgU7rx5+XSZkARukZ8JlLqLY4yQGNqAXxgoZbEW1A8VsyQRr5XbqfT4td5CK +FUT6qwGIlG+aZp9CLQKBwQCQkwdW9A/Q4Ffq8+XTL1hJ24m/q11OLAPODUypOhWw +OCbX2fkv59pSBe6niZDBls1NpHB9mzalBrJCfU+yKC667gKcKULOnWULIoOQvmcg +Ka3hkkW28gTnCjfDIYm3IdsLjc67zJplOixaKgxhO8NtJZGtg0oLIrofG8EYRInv +OmtGw+XE+s4TVs6WgXnEg9zWQ5ZYtqQVn6PT5jsz+Nrvipi61HWHVBd7g+78ojps +3suWxl0FvgzTW5HD16WRXeI= +-----END PRIVATE KEY----- +Certificate: + Data: + Version: 1 (0x0) + Serial Number: + cb:2d:80:99:5a:69:52:61 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=nosan + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:af:de:c5:28:38:4e:05:ec:fc:9e:01:3d:90:e9: + 7a:57:ac:65:0e:bb:57:d8:81:d9:c8:b4:b2:cb:86: + f9:fb:00:2b:87:32:3e:d3:03:95:0a:5f:1b:1e:a4: + 99:f9:9b:62:62:f4:bb:c0:6e:4b:2b:d4:85:9d:2d: + 90:2f:36:08:f0:b1:44:7e:13:81:db:63:5d:3c:06: + 15:6d:f6:c9:37:1c:59:2f:13:43:8e:15:b0:1a:d7: + 82:02:b5:83:de:d7:c3:ff:e0:7b:fa:65:fb:bf:18: + 90:d4:af:05:c7:34:25:2e:d2:9e:a2:fe:6a:2c:a5: + 9e:4e:de:cc:79:32:05:5a:4a:19:27:18:01:02:dc: + aa:7b:cc:e8:2e:b0:c9:84:f1:74:9b:90:d4:1a:dc: + 04:4c:91:6e:28:91:3a:96:28:07:80:1c:38:d5:15: + 5c:b2:87:36:50:9a:8f:a0:68:bc:e1:59:f2:55:49: + 98:65:26:cb:a2:2e:86:46:1a:b5:53:ab:ce:44:89: + 7b:04:e2:5f:2b:3d:a2:3e:98:a9:15:cd:63:f5:dc: + 86:56:f8:5c:75:b6:22:24:b6:e9:9d:1d:66:f5:39: + 05:ab:be:6f:00:89:3f:5b:f0:f7:05:09:45:2b:be: + 14:05:70:b0:d2:09:98:ca:95:0d:2d:45:6a:d2:48: + aa:eb:56:c4:a5:74:ea:de:a9:12:ed:a6:31:b3:14: + 9a:46:9d:37:2f:b2:52:fb:ac:fe:69:83:90:e3:06: + c6:26:55:c0:e3:ae:64:6e:26:e8:46:ab:9d:97:ff: + a1:c4:0b:de:c6:a2:e5:4a:f2:d4:f5:2d:53:2f:d7: + 0b:9f:54:f9:fe:8b:d4:f3:c3:13:ae:45:67:94:bd: + 5a:8b:00:98:16:43:d3:77:c8:a7:72:98:7f:95:ae: + 96:64:fe:80:7d:49:cc:83:6a:41:9e:cd:90:56:e4: + 27:8e:41:b3:49:f1:6a:17:e7:c8:cd:c5:e7:c6:8e: + da:8a:c6:6c:b3:b6:ee:37:af:71 + Exponent: 65537 (0x10001) + Signature Algorithm: sha256WithRSAEncryption + 91:42:c2:15:57:42:47:77:e7:0f:c5:55:26:b1:5b:c3:5e:ba: + 81:db:e1:a4:9f:b8:42:5a:21:c9:8c:18:ae:0f:90:ab:9a:24: + e7:d2:78:fc:bd:97:29:b1:5c:46:1f:5b:b8:d2:a7:87:f1:50: + 53:5b:d3:be:57:74:bd:e5:75:db:50:81:f7:37:95:0b:69:ef: + 39:8c:5c:82:d5:64:62:d5:8b:e9:e0:31:e1:73:d2:5a:2c:de: + 43:5a:06:e5:d3:4d:d0:35:e0:9f:c2:73:31:bc:35:69:d4:fb: + 7d:f0:1a:33:f7:f6:25:72:9c:a6:84:05:08:f6:b5:e8:04:10: + f1:1f:f2:95:ad:a1:f8:d8:80:a5:eb:75:43:99:33:90:0c:79: + fc:c0:87:08:95:20:aa:c2:81:0b:22:6f:56:f4:8f:2a:23:f8: + 40:47:1c:03:a5:b1:04:0a:04:4a:df:d0:88:a8:bc:31:f2:42: + 9b:d8:11:14:9e:e3:68:ea:07:2c:15:de:d2:36:5a:15:38:ed: + d2:af:0e:b4:b6:1d:a0:57:94:ea:c3:c7:4c:14:57:81:00:57: + 94:d3:b0:27:69:d7:48:02:6c:e5:97:f7:be:22:7c:38:24:af: + b2:b0:7b:08:75:1e:ca:2e:c7:41:ef:8b:74:cf:c9:c3:6f:39: + b9:52:41:18:c6:70:24:54:51:04:fe:5f:88:70:35:e5:1c:8e: + d6:67:69:44:44:33:9b:8c:fe:a5:b9:95:48:66:84:f3:1a:04: + ab:a3:57:c1:b6:b4:2f:28:12:45:2b:cb:42:d3:f4:a5:ce:7b: + 6c:1f:e4:c8:a9:e7:d4:6d:c8:27:2d:69:26:c5:e8:73:10:54: + 1f:c3:bf:fd:aa:f5:95:6f:f6:ca:d5:06:8f:1b:79:93:e3:86: + ba:8d:fe:a8:10:8f:95:3e:14:09:bf:ca:88:59:e2:93:b6:ec: + 03:a9:7e:dd:1f:5f:13:d3:29:b3:a6:f3:6a:df:30:53:44:c8: + cd:e5:82:57:bc:9c +-----BEGIN CERTIFICATE----- +MIIEJDCCAowCCQDLLYCZWmlSYTANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJY +WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV +BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTgwODI5MTQyMzE2WhcNMzcxMDI4MTQyMzE2 +WjBbMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNV +BAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMQ4wDAYDVQQDDAVub3NhbjCC +AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAK/exSg4TgXs/J4BPZDpeles +ZQ67V9iB2ci0ssuG+fsAK4cyPtMDlQpfGx6kmfmbYmL0u8BuSyvUhZ0tkC82CPCx +RH4TgdtjXTwGFW32yTccWS8TQ44VsBrXggK1g97Xw//ge/pl+78YkNSvBcc0JS7S +nqL+aiylnk7ezHkyBVpKGScYAQLcqnvM6C6wyYTxdJuQ1BrcBEyRbiiROpYoB4Ac +ONUVXLKHNlCaj6BovOFZ8lVJmGUmy6IuhkYatVOrzkSJewTiXys9oj6YqRXNY/Xc +hlb4XHW2IiS26Z0dZvU5Bau+bwCJP1vw9wUJRSu+FAVwsNIJmMqVDS1FatJIqutW +xKV06t6pEu2mMbMUmkadNy+yUvus/mmDkOMGxiZVwOOuZG4m6EarnZf/ocQL3sai +5Ury1PUtUy/XC59U+f6L1PPDE65FZ5S9WosAmBZD03fIp3KYf5WulmT+gH1JzINq +QZ7NkFbkJ45Bs0nxahfnyM3F58aO2orGbLO27jevcQIDAQABMA0GCSqGSIb3DQEB +CwUAA4IBgQCRQsIVV0JHd+cPxVUmsVvDXrqB2+Gkn7hCWiHJjBiuD5CrmiTn0nj8 +vZcpsVxGH1u40qeH8VBTW9O+V3S95XXbUIH3N5ULae85jFyC1WRi1Yvp4DHhc9Ja +LN5DWgbl003QNeCfwnMxvDVp1Pt98Boz9/YlcpymhAUI9rXoBBDxH/KVraH42ICl +63VDmTOQDHn8wIcIlSCqwoELIm9W9I8qI/hARxwDpbEECgRK39CIqLwx8kKb2BEU +nuNo6gcsFd7SNloVOO3Srw60th2gV5Tqw8dMFFeBAFeU07AnaddIAmzll/e+Inw4 +JK+ysHsIdR7KLsdB74t0z8nDbzm5UkEYxnAkVFEE/l+IcDXlHI7WZ2lERDObjP6l +uZVIZoTzGgSro1fBtrQvKBJFK8tC0/SlzntsH+TIqefUbcgnLWkmxehzEFQfw7/9 +qvWVb/bK1QaPG3mT44a6jf6oEI+VPhQJv8qIWeKTtuwDqX7dH18T0ymzpvNq3zBT +RMjN5YJXvJw= +-----END CERTIFICATE----- diff --git a/Lib/test/pycacert.pem b/Lib/test/pycacert.pem index 73150c960f358..360cd57426a5a 100644 --- a/Lib/test/pycacert.pem +++ b/Lib/test/pycacert.pem @@ -3,97 +3,97 @@ Certificate: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5b - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Aug 26 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, O=Python Software Foundation CA, CN=our-ca-server Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:97:ed:55:41:ba:36:17:95:db:71:1c:d3:e1:61: - ac:58:73:e3:c6:96:cf:2b:1f:b8:08:f5:9d:4b:4b: - c7:30:f6:b8:0b:b3:52:72:a0:bb:c9:4d:3b:8e:df: - 22:8e:01:57:81:c9:92:73:cc:00:c6:ec:70:b0:3a: - 17:40:c1:df:f2:8c:36:4c:c4:a7:81:e7:b6:24:68: - e2:a0:7e:35:07:2f:a0:5b:f9:45:46:f7:1e:f0:46: - 11:fe:ca:1a:3c:50:f1:26:a9:5f:9c:22:9c:f8:41: - e1:df:4f:12:95:19:2f:5c:90:01:17:6e:7e:3e:7d: - cf:e9:09:af:25:f8:f8:42:77:2d:6d:5f:36:f2:78: - 1e:7d:4a:87:68:63:6c:06:71:1b:8d:fa:25:fe:d4: - d3:f5:a5:17:b1:ef:ea:17:cb:54:c8:27:99:80:cb: - 3c:45:f1:2c:52:1c:dd:1f:51:45:20:50:1e:5e:ab: - 57:73:1b:41:78:96:de:84:a4:7a:dd:8f:30:85:36: - 58:79:76:a0:d2:61:c8:1b:a9:94:99:63:c6:ee:f8: - 14:bf:b4:52:56:31:97:fa:eb:ac:53:9e:95:ce:4c: - c4:5a:4a:b7:ca:03:27:5b:35:57:ce:02:dc:ec:ca: - 69:f8:8a:5a:39:cb:16:20:15:03:24:61:6c:f4:7a: - fc:b6:48:e5:59:10:5c:49:d0:23:9f:fb:71:5e:3a: - e9:68:9f:34:72:80:27:b6:3f:4c:b1:d9:db:63:7f: - 67:68:4a:6e:11:f8:e8:c0:f4:5a:16:39:53:0b:68: - de:77:fa:45:e7:f8:91:cd:78:cd:28:94:97:71:54: - fb:cf:f0:37:de:c9:26:c5:dc:1b:9e:89:6d:09:ac: - c8:44:71:cb:6d:f1:97:31:d5:4c:20:33:bf:75:4a: - a0:e0:dc:69:11:ed:2a:b4:64:10:11:30:8b:0e:b0: - a7:10:d8:8a:c5:aa:1b:c8:26:8a:25:e7:66:9f:a5: - 6a:1a:2f:7c:5f:83:c6:78:4f:1f + 00:b1:84:d3:4f:5c:04:80:91:4f:82:49:ba:30:0b: + f7:e8:cb:f9:14:ef:3d:9f:0b:3f:0a:62:fc:1b:20: + a5:20:d1:60:5f:87:5a:1f:16:d1:ed:97:70:a6:da: + 1b:03:2c:7e:a0:5b:3c:4e:2f:16:7e:0e:89:29:89: + e1:10:0d:38:da:6a:77:5f:37:13:b3:28:8f:7b:5c: + 76:ad:9e:e8:d3:f5:9e:f5:83:aa:10:07:8d:e6:51: + 98:f0:7c:0d:52:f2:0c:21:1e:d8:b9:99:26:a9:25: + 03:27:bb:5c:ab:2e:33:27:a2:d6:23:a8:83:87:44: + 29:9f:97:b5:24:6f:d7:b9:0a:fd:28:ee:bb:fb:41: + 58:ea:1d:99:dd:44:86:ab:98:be:1c:dc:cb:a9:89: + 1d:36:5c:a9:e8:47:b5:f4:52:48:aa:b5:a4:67:ef: + 3e:d7:e2:d3:33:de:98:29:d8:7a:b0:59:5c:e7:b1: + 0e:cc:fd:9f:eb:f6:d5:3a:0e:0b:cf:fe:0b:3d:a2: + bf:45:18:ce:94:e7:a9:55:60:88:d4:d8:84:50:79: + 05:2e:41:03:74:ae:67:26:f6:5b:12:08:98:ce:0a: + 97:ed:01:0f:89:4f:17:5c:fa:3e:1d:35:24:47:92: + 32:bf:f7:a4:18:2b:3c:d0:48:99:e1:a2:cd:a3:cc: + 50:53:20:b5:c6:e3:66:85:7b:57:10:ec:33:4f:c1: + 77:e7:1b:7e:81:c6:c4:f3:45:20:c0:91:dd:13:76: + 7b:03:af:f6:76:8e:a2:83:63:57:dd:63:bc:bb:5a: + 1c:17:52:8a:d6:06:48:cc:0f:c7:d3:4f:e8:da:22: + 6c:86:f9:4e:5c:a6:29:07:3b:d8:56:4c:59:b3:20: + 49:07:7b:94:84:cf:2b:c3:1c:1a:4e:87:64:92:ba: + 42:e1:e6:ad:7d:1d:f6:54:90:6f:2b:e9:b3:cc:4b: + 2b:33:26:23:fd:65:c0:3c:f0:79:ad:c9:c1:81:ef: + 37:04:e0:27:3e:b0:ee:15:be:51 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: - DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha256WithRSAEncryption - 33:6a:54:d3:6b:c0:d7:01:5f:9d:f4:05:c1:93:66:90:50:d0: - b7:18:e9:b0:1e:4a:a0:b6:da:76:93:af:84:db:ad:15:54:31: - 15:13:e4:de:7e:4e:0c:d5:09:1c:34:35:b6:e5:4c:d6:6f:65: - 7d:32:5f:eb:fc:a9:6b:07:f7:49:82:e5:81:7e:07:80:9a:63: - f8:2c:c3:40:bc:8f:d4:2a:da:3e:d1:ee:08:b7:4d:a7:84:ca: - f4:3f:a1:98:45:be:b1:05:69:e7:df:d7:99:ab:1b:ee:8b:30: - cc:f7:fc:e7:d4:0b:17:ae:97:bf:e4:7b:fd:0f:a7:b4:85:79: - e3:59:e2:16:87:bf:1f:29:45:2c:23:93:76:be:c0:87:1d:de: - ec:2b:42:6a:e5:bb:c8:f4:0a:4a:08:0a:8c:5c:d8:7d:4d:d1: - b8:bf:d5:f7:29:ed:92:d1:94:04:e8:35:06:57:7f:2c:23:97: - 87:a5:35:8d:26:d3:1a:47:f2:16:d7:d9:c6:d4:1f:23:43:d3: - 26:99:39:ca:20:f4:71:23:6f:0c:4a:76:76:f7:76:1f:b3:fe: - bf:47:b0:fc:2a:56:81:e1:d2:dd:ee:08:d8:f4:ff:5a:dc:25: - 61:8a:91:02:b9:86:1c:f2:50:73:76:25:35:fc:b6:25:26:15: - cb:eb:c4:2b:61:0c:1c:e7:ee:2f:17:9b:ec:f0:d4:a1:84:e7: - d2:af:de:e4:1b:24:14:a7:01:87:e3:ab:29:58:46:a0:d9:c0: - 0a:e0:8d:d7:59:d3:1b:f8:54:20:3e:78:a5:a5:c8:4f:8b:03: - c4:96:9f:ec:fb:47:cf:76:2d:8d:65:34:27:bf:fa:ae:01:05: - 8a:f3:92:0a:dd:89:6c:97:a1:c7:e7:60:51:e7:ac:eb:4b:7d: - 2c:b8:65:c9:fe:5d:6a:48:55:8e:e4:c7:f9:6a:40:e1:b8:64: - 45:e9:b5:59:29:a5:5f:cf:7d:58:7d:64:79:e5:a4:09:ac:1e: - 76:65:3d:94:c4:68 + 6b:32:2f:e7:05:18:ea:5c:c9:95:f4:e0:c2:0c:41:5f:1a:0a: + 95:c9:c7:7d:05:ee:8a:56:29:35:50:40:b7:fe:9f:7b:5b:1c: + c3:69:2f:a0:cb:d2:b8:91:2f:50:19:62:f7:27:18:6d:95:7b: + 53:16:15:a2:5a:dc:14:e3:fb:b1:32:a9:69:db:a6:33:47:3c: + bb:1f:d2:dc:70:f9:6a:2e:0c:d8:8c:6d:e5:5d:1d:43:3c:4e: + 91:de:a0:c8:da:a0:4b:0e:9d:5e:b6:0f:4a:49:f0:7b:b6:53: + 9e:fd:35:14:5b:e3:4d:b4:18:a6:36:61:e8:8f:33:9b:d4:05: + f9:54:66:df:e0:cb:18:a3:4e:dc:17:a8:a0:b3:c1:a8:f4:d6: + 9d:ca:7f:68:53:1a:d7:95:da:e8:d3:9e:48:00:71:95:99:11: + 07:cf:96:c0:7d:ce:7d:30:e8:4f:e1:83:16:33:a1:ff:59:9b: + 3e:4c:e7:3a:38:01:9f:0f:67:4c:fd:2d:8b:4a:d4:01:46:37: + 33:e8:13:6b:15:a9:1d:68:76:45:a2:82:33:69:26:30:60:05: + c8:8f:bd:b4:75:ab:be:7a:8b:48:68:70:40:b4:1b:51:c5:e6: + 7a:ad:6b:4f:db:17:c0:60:67:2e:63:61:9b:2c:48:99:b8:76: + 45:a0:9e:cc:ef:33:1e:50:4e:ab:72:c3:65:c8:b2:79:b3:35: + 83:21:78:d3:8b:6c:3a:18:e8:65:32:39:b8:c0:9d:71:2f:35: + 36:8a:c0:17:62:d8:8b:3e:e1:22:18:2b:4c:63:a6:0e:9d:0a: + fa:ab:5b:35:fb:88:91:77:4c:8d:8c:9d:a9:cf:fc:ab:c2:e6: + 5a:05:7b:7e:04:6e:39:cf:93:ce:67:3b:7a:cb:af:b6:36:e1: + fb:71:64:45:d4:a6:f0:ce:ef:75:04:99:69:9a:e5:88:0a:10: + 02:74:89:ec:75:84:44:80:48:df:c1:f7:e9:37:ce:ce:92:92: + 5c:89:22:08:73:1f -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/pycakey.pem b/Lib/test/pycakey.pem index c283f89098684..819bdef1ff9bf 100644 --- a/Lib/test/pycakey.pem +++ b/Lib/test/pycakey.pem @@ -1,40 +1,40 @@ -----BEGIN PRIVATE KEY----- -MIIG/AIBADANBgkqhkiG9w0BAQEFAASCBuYwggbiAgEAAoIBgQCX7VVBujYXldtx -HNPhYaxYc+PGls8rH7gI9Z1LS8cw9rgLs1JyoLvJTTuO3yKOAVeByZJzzADG7HCw -OhdAwd/yjDZMxKeB57YkaOKgfjUHL6Bb+UVG9x7wRhH+yho8UPEmqV+cIpz4QeHf -TxKVGS9ckAEXbn4+fc/pCa8l+PhCdy1tXzbyeB59SodoY2wGcRuN+iX+1NP1pRex -7+oXy1TIJ5mAyzxF8SxSHN0fUUUgUB5eq1dzG0F4lt6EpHrdjzCFNlh5dqDSYcgb -qZSZY8bu+BS/tFJWMZf666xTnpXOTMRaSrfKAydbNVfOAtzsymn4ilo5yxYgFQMk -YWz0evy2SOVZEFxJ0COf+3FeOulonzRygCe2P0yx2dtjf2doSm4R+OjA9FoWOVML -aN53+kXn+JHNeM0olJdxVPvP8DfeySbF3BueiW0JrMhEcctt8Zcx1UwgM791SqDg -3GkR7Sq0ZBARMIsOsKcQ2IrFqhvIJool52afpWoaL3xfg8Z4Tx8CAwEAAQKCAYB6 -1g1kwyYRE70FS4WUaOBr8+dqHW0LNO4bcFrpEi/PSuurqiUzQPoT3DoXXhoWLseN -zGh476yBKZJDKfS7CwYCmZMdprK4uZvu/E6f7Or7EGrbckOtCQkew8iw9L8ZnWgd -FjyThPjdUIdLgidIHcDJWjVHuLKh3B9KD+ZpEU/IjYtRLvbCPJSKQMQShrBE1Rau -SF6IF5P4vK7X0162NlQqMLpQBAKLml93VJcERzVY1u53JJnkG1loIrNvE32zvZ0C -ZnGVpWwamixVrO9K66F+Ml3Y3bkguF8aPUitc+l+yPmUSXmcDcKmhw9DZA0k5t39 -FxVYGn1uJlvHll8QvV9aZtzuTSkAN8VWNufGwivLLsoRlRb1LtGWqHY583FlUWtz -99ABCBehZ2EpAP+MrRj+pyKuMrkQH61bbOhjqifBM8MhHdn9uNmMpvnKyGPMIdRY -cLH4i2S5aQVvmsQbOa98DLOFGXdf+z5HuwdxHtG1S3J7jkT+FkIyYDehJA3X8UEC -gcEAyCpD8rMFfR5qLwrajhy8vbV7TIkNfFHEkm9tCWDBHwuOJqA0DFuMDAKl7cMv -Uo7Z6R2Fqe2OyWvxYkOi/CSjvtT+PTiA0ux1tXUZcxcRSIsLqQZV+elsKcv+QJPy -vf02vNvHjaMaRwl+NYtqpfr1s/3EdJnWCNC3nV1dD+mWVJoO3kGAK5grLAPM1/uP -stARN5Tnh3Doh8e1Yl4V4UKcVqyVqDykX1OLSmPqNH86T4Um0B4h+jf4UBBdDBz1 -rD3JAoHBAMJOZ3M7LqX+F2haSrF/hnG1y9qAqDWGsvy+8YgjFwPFWu7LvqLuXLuz -S3+5GGhplMuM0itqA9PyPotlgtG5O9hAU8SyMitrx1uTW+Q2U3iYPZQ9O327l1cO -F2jKljq0aJrXp+5iWUq8t/FG6DAqYYUCY/X1SheqEXCgCh4ldRhXig3TBYbVZNs9 -7azN0lk408AO/Hx7WYreFQVS7A/EJhk/M1yyIqnJESuxkDefjV4hTVkRXhh+MrCe -vF/jHqh5pwKBwHxXPQRbzvINXbrBTEjxcxGJ1gESNg1fIfQxQZOMxgrJ+9DkvdBb -YiDn2DldgV0Qni8ghrKrfoKDClyXVXy6KfnWh+Rx4BymhOxmxJto3fSpY2HpLKll -JirErLli7my1CjbBdDH4+s7cB8mtRF+9CLp5znr8QSgSt60KnU/QM/F0Df5kxADQ -syjRZ4NXoslaVQeo+TZ6nggSuAtWFNNstH9nEESE/zq0RBe+/3MDAa76MMUhosuz -zw21TIfEyZvoeQKBwDpszNpvPzWWU3+DNtZsXAaw/Vz0Np/xorwwxfuDYZY2r4MC -LI5dUfD2losPIvGyXZVfAIshU4lVW80adt2M7xu1K/sHAeLgg49bndPfKfYnAM0k -JFFIKNd6WzudPtLkEFgO5GXfmK3KVRztjz98XtpZv6jjWqYG8zuEQ8aQyMbK+63w -d8b1P2BVHLRLJybA2Zr0ZqMfi+sfn/570pNjDXml8VG8FoQq+0jCGXVAOofFR7ay -bDK9L4zADjBe4IcUHQKBwFwj8TEVlWxtG+IWO5d+vyuP0OPjSYOmYq4dCMyZ2+Xy -Y+XDYEhlgGTVxafRMTwt57VV3hJTtRxUZziDA++atr8+gPio+QHBYg1JgCKsqKYL -TGoSVrM1jTfdl1orwkpgQmq2q5j7ExpNA3Spsm5kyCaJ1S/8Ivusqaod8S4t7UhW -BRec3gQ+UYv/V3Pc9hS1Zdzf5+G+PDOYoNmveY16hcu0DKc/PlqGtJuBoQjjH7ir -1YVK9GAgLk0VqJvePnF57A== +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCxhNNPXASAkU+C +SbowC/foy/kU7z2fCz8KYvwbIKUg0WBfh1ofFtHtl3Cm2hsDLH6gWzxOLxZ+Dokp +ieEQDTjaandfNxOzKI97XHatnujT9Z71g6oQB43mUZjwfA1S8gwhHti5mSapJQMn +u1yrLjMnotYjqIOHRCmfl7Ukb9e5Cv0o7rv7QVjqHZndRIarmL4c3MupiR02XKno +R7X0UkiqtaRn7z7X4tMz3pgp2HqwWVznsQ7M/Z/r9tU6DgvP/gs9or9FGM6U56lV +YIjU2IRQeQUuQQN0rmcm9lsSCJjOCpftAQ+JTxdc+j4dNSRHkjK/96QYKzzQSJnh +os2jzFBTILXG42aFe1cQ7DNPwXfnG36BxsTzRSDAkd0TdnsDr/Z2jqKDY1fdY7y7 +WhwXUorWBkjMD8fTT+jaImyG+U5cpikHO9hWTFmzIEkHe5SEzyvDHBpOh2SSukLh +5q19HfZUkG8r6bPMSyszJiP9ZcA88HmtycGB7zcE4Cc+sO4VvlECAwEAAQKCAYB7 +gUnzALYxLOgAYYMkQm9si9zz768TpCNr+ooj5YZ9Wq6OSAEveBT+FErQCxaYErDW +qCNA0gn4Eezj9YWcQVa4vzHmEM+n6iRJU39ONC0Qqua5Ma10EY1sHIEnb2dlufku +YeOu3RrEu3eCgRxsDGySuvv5OxinV4kN++KPQzD3EOopPE+U81YFLCsMgsyfPlmm +gwc/IKIuXDHp5Vp2bXkZK98CYLV8RddjUw7SrkZNwx6cI9eET0CgTs7y4SrevoOy +jCdnA0j1HvL8AbLQuYoXo9fdGYDeq55hyYlxSMYLaEToZG3DJ0UAldrT+r7x52D8 +2QMnJUo2XHzVYPlXPJIAkFJisZZ36TkBvywCgXZMMLibPo9U6V0nfkybTtXKoory +nmgBv+XSGSNrVWMiygpDPqpX1G6bBgqUX3CiTlxtSkYYz1M4Vgj2cux5XEPTnVCq +CLVzvNIXZt1RyzXPxGWpPidCjOaiWBRT4u1Dol9fs3PmVvDaRxcKo9nspiUHCfEC +gcEA4GgxZ+IJwpAMHkdYId0oxjKgTqIg+Ua+EwfUoQT10ERl/k/V4cDwJRHT8lML +rKhTNQJMEE040jq+6mPJDl1KqMb/v05Q7fF22ToGw1HkZwK52O6CeEiJW4/J6bR1 +pZGN0irsa6GvzV65Y6gZVFEUl0JPRf8wPvQHXsWAw8/2LuXkXjV0ieIMq4pbWJf4 +kaid7dYLHnobiP9RVk7BGr7ifmCshoPjWp4TRMwYf6iIZrqMxUSX0QY8Xsqx6bch +LLx/AoHBAMqCvvwUKTrF4gKh5jyl6T6DTZ/Dujaz7BuAJdsSSHvuTa/Y1EfsQHZN +jABn89ZqHYDiyyCuVFO3dqhLtsPjhyFMSXj+98JYcL3FGKnqQqRTwtzzx2P2lV5X +U0WhrNRb3iLu79Tr8pE/2EPnvTr+J5b0DHEeRyM72LWs43zrDYHorH0/Aa5Qd37F +gDLCTBEl8jO5irRuAIq/KV9ZFnn8JDjNGVpXgHPW3354ON1YaMLnPASk7FQizSOQ +QZAsyxtdLwKBwGUosvTYYXvygXP4x1LkpmfKFJe94E1exXpAsmovmTvcSXn9tTXC +Sr77LWb0ZrPbYT7pHS7QEMg8MSnp941hIrG4mzs666KHkgLUdI4B0YtaIDsZMXlV +gY3j4KpYbhxH4/2U2eSfC2fxxnKVKW3n6vdQrfmo0q/eQ6BGOgiLK7fybCLHyBQL +8Zg2k3z5bNUEhMTdE0AW3WjBZ4IXmFcdK26616r/szJ7RcZilrydVXexqpmWlTVl +sTst9kucAPlwswKBwQCwf7my/GNezR8Jik+fZj7edBQQfcdra+8JnOvhfpLcKLte +2s1RjjA0q6usou1bYAsszP2bEzV97XWmgq7dFg4tUE7s/NO1d91zGDhBx2Gj1TkN +2A5dKonOuq9iDeITB6qYqcUvvyEfxRRZQr2jj+WzZCr/4BLCO6PJ29A9jKOuKLtF +QcfWRF2RiNMN6lffzkHFIR4p2YHxa2DEsGGtmbt8Ig3Jtl/HFmydzmxJRoev71dY ++ODdB6PhLhZmcRPoWpMCgcEAhGArwL68GwwRMqAX79gMv8tVT0CJnDyGk5mD/ZIB +Nzt0yQFO7rTEa1l1vAtOiVJ9IpAak2lgbEwodOfGnQst7lujNYDFzTRPTFt/lID1 +u6JBxmqawOSlqa00bt4l2YsTZV+BfSznBP6XO1PK4iR3o5G3NkoKJjZWm3e3asHk +6eTeMLcsIJ+Fp7gG0ve2EdQwhVSVMFEu4Q4C2FcJeU++L4kYpY7sTnAjUtiLvtHn +yp3jllEn3CBD8Uhs4B+sL/6p -----END PRIVATE KEY----- diff --git a/Lib/test/revocation.crl b/Lib/test/revocation.crl index c05461ca7f938..621675eb5c183 100644 --- a/Lib/test/revocation.crl +++ b/Lib/test/revocation.crl @@ -1,14 +1,14 @@ -----BEGIN X509 CRL----- MIICJjCBjwIBATANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJYWTEmMCQGA1UE CgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNVBAMMDW91ci1j -YS1zZXJ2ZXIXDTE4MDgyOTE0MjMxNloXDTI4MDcwNzE0MjMxNlqgDjAMMAoGA1Ud -FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCPhrtGSbuvxPAI3YWQFDB4iOWdBnVk -ugW1lsifmCsE86FfID0EwUut1SRHlksltMtcoULMEIdu8yMLWci++4ve22EEuMKT -HUc3T/wBIuQUhA7U4deFG8CZPAxRpNoK470y7dkD4OVf0Gxa6WYDl9z8mXKmWCB9 -hvzqVfLWNSLTAVPsHtkD5PXdi5yRkQr6wYD7poWaIvkpsn7EKCY6Tw5V3rsbRuZq -AGVCq5TH3mctcmwLloCJ4Xr/1q0DsRrYxeeLYxE+UpvvCbVBKgtjBK7zINS7AbcJ -CYCYKUwGWv1fYKJ+KQQHf75mT3jQ9lWuzOj/YWK4k1EBnYmVGuKKt73lLFxC6h3y -MUnaBZc1KZSyJj0IxfHg/o6qx8NgKOl9XRIQ5g5B30cwpPOskGhEhodbTTY3bPtm -RQ36JvQZngzmkhyhr+MDEV5yUTOShfUiclzQOx26CmLmLHWxOZgXtFZob/oKrvbm -Gen/+7K7YTw6hfY52U7J2FuQRGOyzBXfBYQ= +YS1zZXJ2ZXIXDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFqgDjAMMAoGA1Ud +FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCd2GrHb4zr2R8eK7YMHwlkgICxbWP1 +4nuEi55yzUcmMcCZJ6ZQV3yYqTlAULGQ9qWAUdhsyH+yu3hRKFKHQv0DAdKKxgow +66YasAQQ99DskXOPxmRoIA7qtIWZbLtBwHQJWh+uUFlTdUXitGIX5Xie74xu5YIr +moa3QeuZyG5+gigSTUyst5T/J/cHfBzlAJLc2k3Ty4EPYXKHCVnrZWJbRmxq199l +A7S+eBb9qWXSYXCn6v+EZ76pUS3u/66kZ86PO3h9294BzdhxbCJ27dQXNHw6owe2 +Iyiv0aWx+TNSGSf4yCqaYTH6RtEoviI3h/inVFHNGgjlMzdaGw/0I3bkB0rt2WSR +Vck37HnXvQvVEkgO/39C0WKZus6m4gmOgZcbJbXaR8uIR5Hmw3SEyGEPEIBu6tXV +BLJOSOSu2vVUH5GUIrpvK9FTySKYa+MGryoPasuqZNfwpaXK+ON2G6QsmcXPWZY0 +Dry6t0w2geW6UYVGmb831i8ZP3JVVVwcwi0= -----END X509 CRL----- diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py index 804db9166fe7f..2570433e67964 100644 --- a/Lib/test/test_asyncio/utils.py +++ b/Lib/test/test_asyncio/utils.py @@ -58,7 +58,7 @@ def data_file(filename): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 3f49c1c1f69ea..15d6520229c92 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -106,7 +106,7 @@ def data_file(*name): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), @@ -127,6 +127,8 @@ def data_file(*name): # cert with all kinds of subject alt names ALLSANFILE = data_file("allsans.pem") IDNSANSFILE = data_file("idnsans.pem") +NOSANFILE = data_file("nosan.pem") +NOSAN_HOSTNAME = 'localhost' REMOTE_HOST = "self-signed.pythontest.net" @@ -341,6 +343,8 @@ def testing_context(server_cert=SIGNED_CERTFILE): hostname = SIGNED_CERTFILE_HOSTNAME elif server_cert == SIGNED_CERTFILE2: hostname = SIGNED_CERTFILE2_HOSTNAME + elif server_cert == NOSANFILE: + hostname = NOSAN_HOSTNAME else: raise ValueError(server_cert) @@ -3002,6 +3006,30 @@ def test_check_hostname(self): "check_hostname requires server_hostname"): client_context.wrap_socket(s) + @unittest.skipUnless( + ssl.HAS_NEVER_CHECK_COMMON_NAME, "test requires hostname_checks_common_name" + ) + def test_hostname_checks_common_name(self): + client_context, server_context, hostname = testing_context() + assert client_context.hostname_checks_common_name + client_context.hostname_checks_common_name = False + + # default cert has a SAN + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + + client_context, server_context, hostname = testing_context(NOSANFILE) + client_context.hostname_checks_common_name = False + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + with self.assertRaises(ssl.SSLCertVerificationError): + s.connect((HOST, server.port)) + def test_ecc_cert(self): client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.load_verify_locations(SIGNING_CA) diff --git a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst new file mode 100644 index 0000000000000..a17e1b4463738 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst @@ -0,0 +1 @@ +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4c63dac3d7cfd..3f145900325c8 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -965,6 +965,11 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, _setSSLError(NULL, 0, __FILE__, __LINE__); return NULL; } + /* bpo43522 and OpenSSL < 1.1.1l: copy hostflags manually */ +#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION < 0x101010cf + X509_VERIFY_PARAM *ssl_params = SSL_get0_param(self->ssl); + X509_VERIFY_PARAM_set_hostflags(ssl_params, sslctx->hostflags); +#endif SSL_set_app_data(self->ssl, self); if (sock) { SSL_set_fd(self->ssl, Py_SAFE_DOWNCAST(sock->sock_fd, SOCKET_T, int)); From webhook-mailer at python.org Sat Apr 17 05:36:05 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 09:36:05 -0000 Subject: [Python-checkins] [3.8] bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) (GH-25452) Message-ID: https://github.com/python/cpython/commit/f77ca86f75d5ad9b52e5f3cd19c0024b204b168c commit: f77ca86f75d5ad9b52e5f3cd19c0024b204b168c branch: 3.8 author: Christian Heimes committer: tiran date: 2021-04-17T11:35:56+02:00 summary: [3.8] bpo-43522: Fix SSLContext.hostname_checks_common_name (GH-24899) (GH-25452) Fix problem with ssl.SSLContext.hostname_checks_common_name. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. (cherry picked from commit 330b49e397168df789fd0dd20cfe7e81b8e47258) files: A Lib/test/nosan.pem A Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst M Doc/library/ssl.rst M Lib/test/allsans.pem M Lib/test/capath/b1930218.0 M Lib/test/capath/ceff1710.0 M Lib/test/idnsans.pem M Lib/test/keycert2.pem M Lib/test/keycert3.pem M Lib/test/keycert4.pem M Lib/test/keycertecc.pem M Lib/test/make_ssl_certs.py M Lib/test/pycacert.pem M Lib/test/pycakey.pem M Lib/test/revocation.crl M Lib/test/test_asyncio/utils.py M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 12cd747c6ea9b..a58717c3abdcf 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -2040,6 +2040,11 @@ to speed up repeated connections from the same clients. .. versionadded:: 3.7 + .. versionchanged:: 3.9.3 + + The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, + 3.9.3, and 3.10 include workarounds for previous versions. + .. attribute:: SSLContext.verify_flags The flags for certificate verification operations. You can set flags like diff --git a/Lib/test/allsans.pem b/Lib/test/allsans.pem index 6eebde7a57f15..e400e178a1f59 100644 --- a/Lib/test/allsans.pem +++ b/Lib/test/allsans.pem @@ -1,81 +1,170 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCg/pM6dP7BTFNc -qe6wIJIBB7HjwL42bp0vjcCVl4Z3MRWFswYpfxy+o+8+PguMp4K6zndA5fwNkK/H -3HmtanncUfPqnV0usN0NHQGh/f9xRoNmB1q2L7kTuO99o0KLQgvonRT2snf8rq9n -tPRzhHUGYhog7zzNxetYV309PHpPr19BcKepDtM5RMk2aBnoN5vtItorjXiDosFm -6o5wQHrcupcVydszba6P75BEbc1XIWvq2Fv8muaw4pCe81QYINyLqgcPNO/nF3Os -5EI4HKjCNRSCOhOcWqYctXLXN9lBdMBBvQc3zDmYzh1eIZewzZXPVEQT33xPkhxz -HNmhcIctpWX4LTRF6FulkcbeuZDga3gkZYJf/M6IpU1WYXr6q8sNxbgmRRX/NuHo -V9oDwBzLG07rKUiqRHfjGqoCRmmVeVYpryvXUNjHGH0nlVzz/8lTUxAnJorO3Fdc -I+6zKLUPICdAlvz51AH6yopgPFhrdgA0pVzPO6L5G8SRQCxKhAUCAwEAAQKCAYAa -2jtOTcNMFGH3G7TfFZ+kolbuaPCQ/aQkEV2k1dAswzgWw8RsWXI+7fLyi8C7Zhks -9VD4tyNyU8at7D0zSoYm1Fh9sl+fcQp9rG/gSBA6IYu7EdD0gEM7YeY4K2nm9k4s -Lz8W4q+WqsBA6PK47cfjF6vKAH1AyRk28+jEtPiln9egf5zHWtyqOanh9D0V+Wh9 -hgmjqAYI1rWxZ7/4Qxj7Bfg7Px7blhi+kzOZ5kKQnNd2JT46hM+jgzah/G3zVE+R -FFW6ksmJgZ+dCuSbE7HEJmKms1CWq/1Cll0A3uy4JTDZOrK4KcZQ9UjjWJWvlXQm -uNXSSAp1k287DLVUm9c22SDeXpb9PyKmzyvJvVmMqqBx6QzHZ/L7WPzpUWAoLcU+ -ZHT7vggDymkIO+fcRbUzv8s5R7RnLbcBga51/5OCUvAWDoJXNw0qwYZOIbfTnQgs -8xbCmbMzllyYM/dK3GxQAwfn8Hzk+DbS/NObMjHLCWLfYeUvutXJSNly6Ny+ZcEC -gcEAzo5Y1UFOfBX4MZLIZ69LfgaXj9URobMwqlEwKil8pWQMa951ga3moLt91nOe -SAQz3meFTBX/VAb2ZHLeIf3FoNkiIx48PkxsR/hhLHpvl26zEg3yXs3tv0IFBx2R -EEnLNpQaAQFR9S1yDOaG2rsb17ZDKyp9isDpAENHAmEnT/XJn+Dc0SOH1EVDjUeM -JqToAF/fjIx/RF4oUJCAgOPBMlRy5ywLQk8uDi6ft0NCzzCi0eCuk1Ty3KzWFGwx -7cYRAoHBAMeIPCzHG3No4JGUFunslVwo5TuC7maO6qYKbq0OyvwWfL4b7gjrMBR9 -d5WyZlp/Vf40O463dg8x8qPNOFWp49f3hxTvvfnt2/m3+CQuDOLfqBbHufZApP1J -U9MubUNnDFHHeJ9l0tg2nhiLw24GHeMARZhA/BimMQPY0OpZPpLVxAUArM2EB7hI -glQpYCtdXhqwl1pl0u3TZ08y3BXYNg9BycdpGRMWSsAwsApJRgNuI/dfDKu0uMYF -/pUhXVPatQKBwGgLpAun3dT7bA3sli5ESo6s22OEPGFrVbQ1OUHDrBnTj742TJKJ -+oY0a2q+ypgUJdx94NM2sWquJybqBaKxpf8j4OI3tLjc3h5SqwAwnE13YZRSmifP -K1cP9mBjMFM4GLjhWUfwVkxeG/kLlhpP7fJ2yNbRjHN8QOH1AavdLGRGts1mA1UF -xMHUMfbUd3Bv2L13ja/KhcD2fPA4GcLS9tpXV5nCwdkg8V4LdkBmDR04rotx1f44 -6Czokt2usmfHQQKBwFkufxbUd2SB/72Rnxw27hse/DY5My0Lu70y9HzNG9TIiEDA -YwgBdp/x5D04W58fQuQ3nFcRkOcBwB2OYBuJr5ibvfiRnyvSMHvQykwBeSj+Jjbo -VinGgvfiimDdY2C48jyrFzLHZBHXd5oo/dRzT3Bicri2cvbhcQ7zHY1hDiK7AL3r -q1DALmMjpXzQcXdwZ9suCrgQwtIhpw8zAEOTO7ZeBT3nr5lkYUy9djFixrRJyjGK -fjNQtzVrAHrPStNr8QKBwQDCC0zhsCnTv4sAJmW7LL6Ayd5rbWhUZ6px1xY0yHMA -hehj+xbaiC6cfVr5Rg0ncvaa8AExu4kXpVsupTyNwvC4NgzLHtfBw6WUdOnd1awE -kSrDtDReBt2wByAcQwttQsrJ1/Pt6zcNJJI4Z9s8G4NTcQWJwUhU20N55JQKR//l -OQJqhq9NVhte/ctDjVwOHs/OhDNvxsAWxdjnf/O2up0os+M2bFkmHuaVW0vQbqTQ -mw7Vbzk2Ff5oT6E3kbC8Ur4= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAQKCAYAe +BaCCgdJk+xk1USg9cuo5ykBqzTSYlQLXdDlN2oO7sGehJhgvVEGX+QdM3ze+oM2B +wNd3tQDB2iKo11oCunDh4/m2xhq6wA+iPK8POoWRSUf+VJb6xlsTmurENV1s8IHz +GrPqM87OePFGqg/fEuQVuAotObzppVMfNdxHm0er4W6zRMw2rWqDnAOCQ5zDQ1/p +ryp5rYpA49M+R9NoAMlByHRbR7s+6Qnk3NuIMDmUcpF2xeQ/KIMUiHnLEU/gKDpi +bsk+VtyjlibR4zhh9/cJrLTApAIA+4eC176EJvKXCh5UIjd92JC7741HTNQXJpvG +9PXbzhyUCmncr04U+46snGHdwD+lG4LS7oBGACTLMtpcMrlgAm6XCg4T8gRVE/9n +FvCkqPHBR+vnhOxm+0x0yUY/DstJby6IPYPsfGK/s2n//j/vJrAZE1Pxlm9EPU13 +MRLcHstwjAc/NXRPnUN1DfcQvPLx6Tt6rqw3Wm1KO75kM+HZ56BX9/Bi1TgkiI0C +gcEA5JTlXssJ3W8Cz6w1ZtGsThHQBDbvHF2D5AdqO7y6/eqzCQgBQl9BTfXOzsvP +I1gf2CLEFBtGK09UjAuJQg90/NlKur7i7xt7HpAzEfGsDAL4P5BW5JnMNrzpJjjL +0uUDsPJlA75Wi29N2SFiaIslY0sZ6nckInat5GRe4O1AMSHoJ5suY9yTZTU3XB4O +A+XyddutI1GsFZgl8/8LyyNMcyNjxG3T5sr7IKf5/nIv6oMDjC2zLVZa8QS/MEnL +Kaa7AoHBANhEsxfcjw2MaPkrsqAsOP0dDf7g2rdz6wKT5BzZu9e+/E76NmvVDpns +e+kCjql9Os3/wonOMINvn1bTCQGTgk8+dw1fMyqg+zQCvH4ImcE6LSqhzblVHsIB +zZ7rW86trri1U9+olNHG4nwkus0i4LV8eeORns+j8DgXr6/eOvjX3ZW5TyU7/Qgm +SiSdBapzJbom3xJrbo9KQsrN5PVCOwuwrgY0o+2BeKyKhnt4uGv0bR+ii06EOJUA +WvjD7gLI9wKBwGVRXk3jH29IOm3EvjLh80bzfEmx89CV3tUfOEZcRGIyOsNhCfXa +dP7SWqWtDxZyhELwPgtPf43I7wfYQTHH2ioNQqN94ubrPmpwrkJg5cq5MkIyf2F6 +jlsg5xMrD6VeH4G6H25GWuQZJN9+fbkrHBpj+ovD3X9tLWzT1H5Miyx8BAQyM6DN +74Nn0C8Dn2C49vyor5i9JdK4ivIY9ahH8CYE5L73k3p0NFXoPtY61ORUyCjFROtu +oIa+fOQxgVzn6wKBwQC3DD7BnY7/Gq7m51ODOqrpoaPs7Qhyagyp298hhDD3hNEt +T56sWmLHaV/fcqipUDNrlGRmGzz4ooutA2YGDYIn7Gj7ym4WULcN6Jr92e25nLIJ ++XWUvjUQZFJThkXogxz1fZSGI7wCamHcTYJGipTDR54rPV+7w7hY4cN0CZbEdIE6 +buRMUZ/zO+VZZAYdpORz0N7SSlgDtAkgenCmHe64EEzbN8bgCcvHzl/RNfZyeSm7 +supSBJuXkfttvvg/JzUCgcEAlx0Pep9qCLvpk0WqzijBVHc3zK4wYxjhN2MBkF42 +SLWfogKpiPfIqxX6YF94roIA0VlW6Pj50v+sbPwq8nwsgFNhml80A4ODKr3O3Y3M +fXDBJW5W5ZRb/vhIKRjXyCSckSRfj7N8HUYjCLkxQansNWimrldmSet0H2mYJN0Y +JpBXdqpa76zoHzWpKFwD0fSVzvnMelPHSDCNOdIEHmR8e1x2F1/ufR/9/dBzPULY +HMj0OhQHoi8kJyMIj3+bQkbC -----END PRIVATE KEY----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + cb:2d:80:99:5a:69:52:5f + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=allsans + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:c1:1a:f8:fe:53:2f:d5:53:24:d1:9a:62:00:d5: + 41:04:35:38:61:d3:ea:56:38:37:2f:bd:49:64:78: + 8a:3e:5d:32:77:16:11:78:fd:15:63:22:60:c7:8e: + 8c:e5:db:c5:df:d9:3c:ca:9e:f4:09:6b:52:82:a6: + a6:bb:7e:bf:1c:2f:d4:0c:c2:4e:29:1f:e4:b8:ba: + 5c:4e:bb:4d:81:97:76:1a:7f:1d:a8:25:55:0c:2f: + 7e:ef:72:22:60:fb:39:33:3f:1d:64:de:d5:c5:8d: + 79:2b:2c:68:d9:c0:ea:2e:7c:10:b7:02:63:ee:ab: + 6c:47:14:1c:c7:ae:fa:79:fc:32:11:1f:6b:25:40: + 53:3d:7e:95:59:cc:de:fb:81:8c:b3:c5:b6:b4:c0: + 27:c2:3e:90:9f:78:91:51:c9:82:96:f1:ce:cc:5e: + bc:27:33:cd:98:b4:4e:d1:96:77:f6:db:b1:24:09: + d3:0d:69:27:99:2d:42:31:79:5a:5c:9d:27:2a:66: + 5d:12:21:b4:77:60:48:95:d0:b3:c5:93:1d:30:24: + 59:bc:a9:41:05:53:f8:7e:d2:36:a6:83:2f:ce:37: + ed:75:9e:a9:8c:96:9d:c1:8c:d8:bf:25:35:6c:6b: + b3:7b:03:77:6f:74:70:bb:55:59:6b:5a:75:20:53: + a3:28:4a:78:b2:2f:a8:a3:a6:e7:32:1e:d6:73:2b: + 69:89:cb:4b:07:47:c3:da:74:72:a8:c3:43:b8:db: + 7f:f9:37:c1:8a:4d:23:af:68:63:17:4e:30:1e:38: + 6b:3e:f7:f3:f5:65:8a:37:22:38:d0:3f:3f:cd:57: + 74:25:84:af:33:46:ac:45:dd:c5:b4:7a:41:c7:91: + 3f:bf:8d:98:c2:bd:22:a6:ea:67:5b:31:0b:a7:28: + 4d:56:f9:da:24:01:cf:35:e6:96:f8:f0:cc:df:d5: + e5:8a:77:fe:d4:c9:47:fb:09:7b:ac:b3:20:1a:27: + 77:25:a5:a2:b5:b1:b6:e7:f6:6d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Alternative Name: + DNS:allsans, othername:, othername:, email:user at example.org, DNS:www.example.org, DirName:/C=XY/L=Castle Anthrax/O=Python Software Foundation/CN=dirname example, URI:https://www.python.org/, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1, Registered ID:1.2.3.4.5 + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + D4:F1:D8:23:E0:A7:E9:CA:12:45:A0:0D:03:C2:25:A6:E8:65:BC:EE + X509v3 Authority Key Identifier: + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD + DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server + serial:CB:2D:80:99:5A:69:52:5B + + Authority Information Access: + CA Issuers - URI:http://testca.pythontest.net/testca/pycacert.cer + OCSP - URI:http://testca.pythontest.net/testca/ocsp/ + + X509v3 CRL Distribution Points: + + Full Name: + URI:http://testca.pythontest.net/testca/revocation.crl + + Signature Algorithm: sha256WithRSAEncryption + 70:77:d8:82:b0:f4:ab:de:84:ce:88:32:63:5e:23:0f:b6:58: + a2:b1:65:ff:12:22:0b:88:a6:fa:06:40:9a:e7:63:a7:5d:ae: + 94:c5:68:3c:4b:e9:95:34:01:75:24:df:9d:6e:9b:e4:ff:3f: + 61:97:29:7b:ab:34:2c:14:d3:01:d2:eb:fb:84:40:db:12:54: + 7e:7a:44:bc:08:eb:9f:e2:15:0b:11:4f:25:d2:56:51:95:ad: + 6d:ad:07:aa:6a:61:f9:39:d5:82:8c:45:31:9f:2a:ff:18:98: + 49:0c:bb:17:ad:d5:24:d3:d1:c7:c4:10:3e:c4:79:26:58:f4: + c5:de:82:16:c4:c3:c4:a7:a3:62:22:41:90:36:0f:bc:4c:fd: + 6a:18:22:f2:87:e9:07:db:b4:3d:65:00:e4:70:f9:d6:e5:a8: + a1:b9:c9:9d:e7:5d:78:aa:98:d5:f8:f4:fd:5c:d9:4c:d0:6d: + bf:87:71:d3:5b:ec:f4:bf:46:f9:c8:f8:10:c5:72:af:c3:15: + b9:c4:06:67:0b:3f:f6:f4:64:c5:27:74:c1:6b:00:37:da:ea: + 18:36:77:36:a7:3e:80:2e:5d:54:0f:01:df:ce:9e:97:dd:c9: + f2:8b:59:82:c5:65:31:c8:73:20:fd:24:23:25:d8:00:df:90: + 93:26:76:08:0a:06:a9:0e:d3:d3:4c:6f:ef:a7:fb:de:eb:2a: + 40:b9:e4:b1:44:0c:37:ca:c6:9e:44:4a:b4:7c:2c:40:52:35: + bb:b3:71:28:3d:35:fd:be:c9:4f:54:b3:99:c5:5f:84:38:fb: + 2b:fb:ea:dd:88:e8:9d:c1:9b:67:87:3d:79:7b:3d:7e:61:1f: + 70:3c:b7:c8:4c:17:a5:0c:a3:28:c7:ab:48:11:14:f7:98:7a: + da:4e:fb:91:76:89:0a:a6:c6:72:e0:96:d9:f1:80:ea:68:90: + 37:5c:c6:69:c7:d7:bc:c7:d1:ae:5b:a9:12:59:c6:e4:6c:61: + a9:8b:ba:51:b3:13 -----BEGIN CERTIFICATE----- -MIIHMDCCBZigAwIBAgIJALVVA6v9zJS5MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTgwODI5 -MTQyMzE3WhcNMjgwODI2MTQyMzE3WjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO -Q2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0 -aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB -igKCAYEAoP6TOnT+wUxTXKnusCCSAQex48C+Nm6dL43AlZeGdzEVhbMGKX8cvqPv -Pj4LjKeCus53QOX8DZCvx9x5rWp53FHz6p1dLrDdDR0Bof3/cUaDZgdati+5E7jv -faNCi0IL6J0U9rJ3/K6vZ7T0c4R1BmIaIO88zcXrWFd9PTx6T69fQXCnqQ7TOUTJ -NmgZ6Deb7SLaK414g6LBZuqOcEB63LqXFcnbM22uj++QRG3NVyFr6thb/JrmsOKQ -nvNUGCDci6oHDzTv5xdzrORCOByowjUUgjoTnFqmHLVy1zfZQXTAQb0HN8w5mM4d -XiGXsM2Vz1REE998T5IccxzZoXCHLaVl+C00RehbpZHG3rmQ4Gt4JGWCX/zOiKVN -VmF6+qvLDcW4JkUV/zbh6FfaA8AcyxtO6ylIqkR34xqqAkZplXlWKa8r11DYxxh9 -J5Vc8//JU1MQJyaKztxXXCPusyi1DyAnQJb8+dQB+sqKYDxYa3YANKVczzui+RvE -kUAsSoQFAgMBAAGjggLxMIIC7TCCATAGA1UdEQSCAScwggEjggdhbGxzYW5zoB4G -AyoDBKAXDBVzb21lIG90aGVyIGlkZW50aWZpZXKgNQYGKwYBBQICoCswKaAQGw5L -RVJCRVJPUy5SRUFMTaEVMBOgAwIBAaEMMAobCHVzZXJuYW1lgRB1c2VyQGV4YW1w -bGUub3Jngg93d3cuZXhhbXBsZS5vcmekZzBlMQswCQYDVQQGEwJYWTEXMBUGA1UE -BwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3Vu -ZGF0aW9uMRgwFgYDVQQDDA9kaXJuYW1lIGV4YW1wbGWGF2h0dHBzOi8vd3d3LnB5 -dGhvbi5vcmcvhwR/AAABhxAAAAAAAAAAAAAAAAAAAAABiAQqAwQFMA4GA1UdDwEB -/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUoLHAHNTWrHkSCUYkhn5NH0S40CAwgY8GA1UdIwSBhzCB -hIAUoLHAHNTWrHkSCUYkhn5NH0S40CChYaRfMF0xCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnOCCQC1VQOr/cyUuTCBgwYIKwYBBQUH -AQEEdzB1MDwGCCsGAQUFBzAChjBodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0 -L3Rlc3RjYS9weWNhY2VydC5jZXIwNQYIKwYBBQUHMAGGKWh0dHA6Ly90ZXN0Y2Eu -cHl0aG9udGVzdC5uZXQvdGVzdGNhL29jc3AvMEMGA1UdHwQ8MDowOKA2oDSGMmh0 -dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3Jldm9jYXRpb24uY3Js -MA0GCSqGSIb3DQEBCwUAA4IBgQAeKJKycO2DES98gyR2e/GzPYEw87cCS0cEpiiP -3CEUgzfEbF0X89GDKEey4H3Irvosbvt2hEcf2RNpahLUL/fUv53bDmHNmL8qJg5E -UJVMOHvOpSOjqoqeRuSyG0GnnAuUwcxdrZY6UzLdslhuq9F8UjgHr6KSMx56G9uK -LmTy5njMab0in2xL/YRX/0nogK3BHqpUHrfCdEYZkciRxtAa+OPpWn4dcZi+Fpf7 -ZYSgPLNt+djtFDMIAk5Bo+XDaQdW3dhF0w44enrGAOV0xPE+/jOuenNhKBafjuNb -lkeSr45+QZsi1rd18ny8z3uuaGqIAziFgmllZOH2D8giTn6+5jZcCNZCoGKUkPI9 -l/GMWwxg4HQYYlZcsZzTCem9Rb2XcrasAbmhFapMtR+QAwSed5vKE7ZdtQhj74kB -7Q0E7Lkgpp6BaObb2As8/f0K/UlSVSvrYk+i3JT9wK/qqkRGxsTFEF7N9t0rKu8y -4JdQDtZCI552MsFvYW6m+IOYgxg= +MIIHDTCCBXWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2Fs +bHNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDBGvj+Uy/VUyTR +mmIA1UEENThh0+pWODcvvUlkeIo+XTJ3FhF4/RVjImDHjozl28Xf2TzKnvQJa1KC +pqa7fr8cL9QMwk4pH+S4ulxOu02Bl3Yafx2oJVUML37vciJg+zkzPx1k3tXFjXkr +LGjZwOoufBC3AmPuq2xHFBzHrvp5/DIRH2slQFM9fpVZzN77gYyzxba0wCfCPpCf +eJFRyYKW8c7MXrwnM82YtE7Rlnf227EkCdMNaSeZLUIxeVpcnScqZl0SIbR3YEiV +0LPFkx0wJFm8qUEFU/h+0jamgy/ON+11nqmMlp3BjNi/JTVsa7N7A3dvdHC7VVlr +WnUgU6MoSniyL6ijpucyHtZzK2mJy0sHR8PadHKow0O423/5N8GKTSOvaGMXTjAe +OGs+9/P1ZYo3IjjQPz/NV3QlhK8zRqxF3cW0ekHHkT+/jZjCvSKm6mdbMQunKE1W ++dokAc815pb48Mzf1eWKd/7UyUf7CXussyAaJ3clpaK1sbbn9m0CAwEAAaOCAt4w +ggLaMIIBMAYDVR0RBIIBJzCCASOCB2FsbHNhbnOgHgYDKgMEoBcMFXNvbWUgb3Ro +ZXIgaWRlbnRpZmllcqA1BgYrBgEFAgKgKzApoBAbDktFUkJFUk9TLlJFQUxNoRUw +E6ADAgEBoQwwChsIdXNlcm5hbWWBEHVzZXJAZXhhbXBsZS5vcmeCD3d3dy5leGFt +cGxlLm9yZ6RnMGUxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJh +eDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xGDAWBgNVBAMM +D2Rpcm5hbWUgZXhhbXBsZYYXaHR0cHM6Ly93d3cucHl0aG9uLm9yZy+HBH8AAAGH +EAAAAAAAAAAAAAAAAAAAAAGIBCoDBAUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTU +8dgj4KfpyhJFoA0DwiWm6GW87jB9BgNVHSMEdjB0gBSziqCiunHxqCR51KRbJTYV +HknIzaFRpE8wTTELMAkGA1UEBhMCWFkxJjAkBgNVBAoMHVB5dGhvbiBTb2Z0d2Fy +ZSBGb3VuZGF0aW9uIENBMRYwFAYDVQQDDA1vdXItY2Etc2VydmVyggkAyy2AmVpp +UlswgYMGCCsGAQUFBwEBBHcwdTA8BggrBgEFBQcwAoYwaHR0cDovL3Rlc3RjYS5w +eXRob250ZXN0Lm5ldC90ZXN0Y2EvcHljYWNlcnQuY2VyMDUGCCsGAQUFBzABhilo +dHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9vY3NwLzBDBgNVHR8E +PDA6MDigNqA0hjJodHRwOi8vdGVzdGNhLnB5dGhvbnRlc3QubmV0L3Rlc3RjYS9y +ZXZvY2F0aW9uLmNybDANBgkqhkiG9w0BAQsFAAOCAYEAcHfYgrD0q96EzogyY14j +D7ZYorFl/xIiC4im+gZAmudjp12ulMVoPEvplTQBdSTfnW6b5P8/YZcpe6s0LBTT +AdLr+4RA2xJUfnpEvAjrn+IVCxFPJdJWUZWtba0Hqmph+TnVgoxFMZ8q/xiYSQy7 +F63VJNPRx8QQPsR5Jlj0xd6CFsTDxKejYiJBkDYPvEz9ahgi8ofpB9u0PWUA5HD5 +1uWoobnJneddeKqY1fj0/VzZTNBtv4dx01vs9L9G+cj4EMVyr8MVucQGZws/9vRk +xSd0wWsAN9rqGDZ3Nqc+gC5dVA8B386el93J8otZgsVlMchzIP0kIyXYAN+QkyZ2 +CAoGqQ7T00xv76f73usqQLnksUQMN8rGnkRKtHwsQFI1u7NxKD01/b7JT1SzmcVf +hDj7K/vq3YjoncGbZ4c9eXs9fmEfcDy3yEwXpQyjKMerSBEU95h62k77kXaJCqbG +cuCW2fGA6miQN1zGacfXvMfRrlupElnG5GxhqYu6UbMT -----END CERTIFICATE----- diff --git a/Lib/test/capath/b1930218.0 b/Lib/test/capath/b1930218.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/b1930218.0 +++ b/Lib/test/capath/b1930218.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/capath/ceff1710.0 b/Lib/test/capath/ceff1710.0 index 730e7fd911a55..941d7919f8033 100644 --- a/Lib/test/capath/ceff1710.0 +++ b/Lib/test/capath/ceff1710.0 @@ -1,26 +1,26 @@ -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/idnsans.pem b/Lib/test/idnsans.pem index e8a41fe5e565e..cbcac7818ddc6 100644 --- a/Lib/test/idnsans.pem +++ b/Lib/test/idnsans.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/wIBADANBgkqhkiG9w0BAQEFAASCBukwggblAgEAAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAQKCAYEA -qNuhjzYPkKNvHDxLJuKd2QXYEcWKzEjwvqRsh0/HI2UBMXM/bwws0/7mtPPKQM55 -XqPT8XvR9JVP2wZ6NrZN8J71BqcGVGq7BIWeuXbtfR3hU6F3m9eNKRkp6En3TcRq -Q3SwQ5oID86wkf6XPSGrvWKRyUObg0BpBY6XmPtP+T32MXAQKg/rY9k4GAfFuA59 -EowN7uOGT80j5Qzcvsa1tFHH3bxj2B+2VDVdmlrOJXxcamKvdRnQ2gSpbmdCv/4X -HKmRiP7m2qVMxRaNh3kcL/gACGvZw3rUE7K0PwjW+sQ6lRlWF9IqUSDZaswxWrie -EaM2et9qD80g3eUV3gMi6I8BIdmD20p/yqa/l0bQk75Y6KQRUlN5HTodFL1u4/7V -W9N9wVIlx5DB1yJBkCZBDoebr4Y1UOGs4rrkcOd6F+zCeRSwKPFAng5vHpZ8jclS -1X2pV/KnKWIUfcFH9+v6pD9Y+VC5tz5LgaFz4SYFxgMF69t+PCpdoR2+0zwSWKGB -AoHBAPr/bC0L7V/HXeoiNxXjOSAYDgyVvzZC3i8cbW2/7DqdY7DfDmZbabdEX1mu -kaY9S/5abVV5W1eQACh1Cd/MaRkUbm+5nTy/bF9jXfh8408MzrGbAR9KF9GfWgqC -UxRiAkCa2gLuAhfc6uqokf5yZK0F+kZGGYWEeGcFK46i+8JstqknW0LsN1hhd+wE -PFokf+/22NiV0t1T0GERz18fFu0XoQC60D9qaW56EI+6OTADw71XkVh35jbNBa96 -bLPVzQKBwQDEVGMtpARdwoU59fRfDBo9S8iJJ/jTFpJs5nrqGZKah4J2pkTBiDpW -ZNxesVKL6IuvWghIuZGnBw5ovWT9JKQ2NHD4GDm/XJ6veVWOxc7THiBhCvJaG5N7 -3Jbxyn+eJ5yBO9PeR6slZbDrgDSIFUI++XD9A7abod8eTZHh6Q3pYT5mRuvfuDS1 -nlrkvMgGC1ZCQXCVTdq8MmMS9jea4UXhJLn4paGSKQSYXWLWVxTX3Mgk0640XpXN -HvsdCBMgFpECgcEAtESQkAXZ9Yk9tTPftlOcqqU8KeO/EhyScOmM2l8WLb7uY5DA -SdlrotlzVfjf2LJ7ivGtRs9DQC9HPcdZUSgBb6bR7mI0QPYGwreePSKNKzA6nyqB -ctSHKOG3DIcvXhtKHNZar/H7BOKAwgpR2JqWHgKGDsS3/cH3q531+5qpEKl9wx1m -GTmIQmy2cYdVRTSjwlfaxCtO5/ETXzQoaNvuXlgzJVAG0xT9JgB7No78FbUOd0WW -OSDb8g3sAGz/92UdAoHBAJqaOV9/gVC0FWWHIWCXjzIls00OhQr1A2luNeyTJrc5 -bqswU4RzWj0eP8rxqCc0gIsdQtjCCMiW7enc+uG9MPLeaPd1XEQtE2jrC0zax/vI -BYdlr2L1xDYNh2/wHn7UgpHiIv0vQr64TZGl67gdxYUBuNAFVI9J8QFT5EUZ2TKm -uRShVK1fyWIbyUfGwVzBILQcBCQOoukAZLRR34e/Td/1o90B0THfyxaQs3xGJsu1 -uIYHi28B7MUSWHyMF0N1gQKBwB9jtS7k7ZRgb0WzsgutRzJLfirmMeahzJwAQ46o -2xRT1y7vr0Idh9OSTz8Iqva6Frse21HT6agymamqEeC2aYwq+ikA0V7K3AhG3PiN -S5diC+RIZybeTthBTO1yj5pKDniZl+NGe3vIunXMrjZIuk/03VFK2etqdYcXguwH -SkwvuKqC3vvzcJW8dV2qIJ3Bz9LWz0QKqJQZBlCZvfzHf1jN5rpJJPQezys4k723 -ZPGg6Smyks3ElGXevVdidVcPUA== +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAQKCAYEA +uaYWWwHW6pzxOrnabcVLYX0WunW9LVShbIw97AElI2n/LuhkXh6xkK48BsqP0vaK +oDHJ5VYxgQdmoP03Zs8sX4BSWe7twg1u8wJxkA+cUXI1BAn0opHjpwJlalEEfe2v +s8PwjMrF59nsCq56W42PrDlms5UmuQ5WLsw6Co++hZmfxW7LPu+GIS6qBZfluNT5 +kBpZlDDCtkyteUD4SVI3wvmOSi+Wzv4e7P2wC9kByjENIcfhC5QQURRD4sA1hWCp +2SThYWqJOCEc2SvGgoqgTRaJuQ2aVG9qrntXt0N4V+WdJWXBK0jedkB2flLve1fR +KmDYuc9k/c1svmS3Y+iZohBha9H8jpuJmXYBxxg1iNg9m7qkfg8F8wxCYLQKB+U6 +tjRS7by+jSE08On7mpDDhJORnlh+rfEuWPPwAKQpLpdp76KDTvR++GvfOMUiOrFM +e9s5aXp+vcgkSSqYvigE+sFpCjQWwkGBkMdT16Pf9CzhQaM08YuLnzfLEYgLFw6R +AoHBAN5NQINBmlq/cptGSru66kfecqHfI7xHnnGWKAkto/B1x7Crrgs4Tk5b4vaA +JmAqatt5P1e7zco7uAXXebY5VURuH/30TlkuaB+oGFp0OMw6165n8RVPT2ZaDViK +ssJ9LT8fJ+23TWCCT2Z1zUlM/NnHAMjKOVsJK3/KEkVvlc7ROC7uVooc78AsQehg +zpL3GBYEeBukT8aNUMqUlesCsIs/dQHW7DzQL2xGkQagm5/PDsxaCsT7ynA8eL3X +TW+IXwKBwQDZTV3TaG6wqtL8y2DR0lN5jY/eYayX4e18iZ+XEZVTntPdVVyJIE4d +0A5ZfcILb9WE8R21iptROYSjcH/05j+3fQMJ1WAK0sNfGTUNNT3jYU8YzLvos+wW +G8E+mNMpFPWNvLV5Qrl4VvoifGh8AMvplUEz8uAzGJbXbRxUPcmjth2ph8zULEDn +/+o4OcT3gh1bp+HCqch0OuiJRn9qNUpsJG5GMm5FtjBjZM97ucZ1/0DaWl3JUxUN +/pueo3J9vCUCgcBg2Fjdlcvv8u2z1aijJmgATVm1SWfhE3ZkV50zem2sSTNotTJK +cwoyOveimeueA3ywBp9g0lFx5Bhkex3sFAggmrVXRoKHeZ8lA28woOdJmezybxfp +R7b4iQy9YRdFgZEfqawUdMHB5KNAqNt5LpANNBQUZX0dOt53eooBM/6Yri8CyxRq +cPbFysIfwWTdQ8Z7eRD2Qdv7TP9AcgDp9C8DSu7nkUEzsSKn0gpGT9vcgDEbN7Lv +ZB4qTT3wvoZeq5MCgcBIG18eDtJkN1sp3Yb0OTnP5QSvg3PVNngq0jQt2fzWMacW +FARP0HN7exW35n4kc2jD44q7OhJOAqsb3PHo3xqXlZkTg0WKceO4w9GR32/46spn +bVCRaFrX/z/BuM6hHD5bWRpS8aw/3YTFOsklFNKVYRyw01BIREmRlLhIz/QAKidv +oQt8AG9NTON44tqUUw3Q40WL5fEJeJ6/JrCTGrnmZrRdANEMuucVpFchNEVB1IC9 +tCzY6IPdD/atzojoZi0CgcB2x9oWLjJ0XJIp2pMAb8nCMVjkKrznKFjZbDm8EQBs +ou7pM2zkO3VRcWT1BXQocinJsjQqjQiTawP6IN2FQgT0d89V+pwd+jdvpdildQhP +1/6SErVRZV//oopKTsC6TIBL/EmW1TkP3ulQIZs8YklFgybeHdDyNFi+VgPXkVGe +IHp0nEzrui9q0YJsjHfFHBeGyzDSfbiBYiF7Auk66gYZbXufebP/LZNG/FIamPP3 +rwYIeeV1IVwk9tPBw6fGwrs= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: - cb:2d:80:99:5a:69:52:5f - Signature Algorithm: sha256WithRSAEncryption + cb:2d:80:99:5a:69:52:60 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity - Not Before: Aug 29 14:23:17 2018 GMT - Not After : Jul 7 14:23:17 2028 GMT + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=idnsans Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c0:7e:4b:df:82:74:ff:f8:04:ea:22:24:79:92: - c8:06:5b:81:09:2b:dd:34:32:40:6c:63:d4:d7:41: - c3:5d:6e:b1:aa:6f:21:b8:13:01:2f:6c:35:b3:b0: - 05:81:aa:08:3b:e8:09:6d:a3:b2:60:c4:a9:76:80: - db:24:cf:74:f4:d3:bc:72:70:e5:40:cb:8c:f7:d6: - 0c:c4:58:c4:f1:f8:6c:4d:6c:28:a2:70:97:c2:66: - 3c:3a:67:80:a4:fd:48:a9:a2:85:c0:03:2f:d2:ee: - 3c:02:cf:7e:bd:13:84:46:6b:98:ec:23:1c:49:f8: - d7:43:a8:08:5e:a1:13:88:79:42:9a:c2:47:c5:ef: - 15:d3:cb:39:30:b9:3b:8d:8f:66:1c:57:f4:ef:25: - cb:06:54:64:13:8f:8b:59:55:26:c3:56:f2:f7:f0: - f9:50:5f:ad:95:a0:69:84:0c:af:29:97:c1:8b:d8: - 65:10:2b:7c:be:80:fd:95:14:31:de:a4:6c:6a:a9: - 7c:4f:2c:84:f1:a5:d0:45:68:8a:10:71:8e:18:57: - e9:c9:b4:db:bc:be:55:33:0c:c8:b3:08:72:88:23: - e6:0f:f4:97:6c:b7:13:8b:0b:21:1b:9a:32:ef:de: - b9:38:b4:78:08:26:e3:9f:3b:24:61:dc:a8:c8:71: - d8:21:98:d6:5c:67:bb:ce:be:96:eb:df:8d:60:28: - 13:51:2d:59:ac:03:1b:49:0a:aa:8c:7d:6b:cd:39: - ce:ab:5d:fa:76:d1:b0:a7:2f:f4:83:0c:97:81:ff: - bd:7f:29:f5:5e:55:a7:df:5d:1b:5f:11:67:30:25: - 6e:98:46:9e:e9:d8:c7:9a:97:30:2c:9d:40:39:c6: - c7:0e:28:8b:58:86:f9:89:d4:52:65:50:1f:0b:0d: - 9f:9d:58:44:a5:77:66:b8:08:87:4a:f6:5a:6e:7f: - 72:c3:ab:2f:b0:99:c1:93:76:7a:15:a2:2d:91:4f: - af:12:0d:81:c0:6f:f6:db:b7:1d + 00:bc:b2:aa:65:4e:e1:ee:2e:36:d6:4c:be:52:2f: + 60:f5:7f:0f:54:e9:64:33:2d:50:05:e6:0b:32:85: + de:65:af:61:69:7d:8c:23:ae:86:f9:31:ab:fd:d5: + a3:8b:6c:94:53:be:83:72:5e:c2:76:e8:53:d2:d1: + 1c:9c:44:65:db:a2:67:08:10:9c:57:1b:2f:5a:23: + ed:0c:2d:80:6d:d4:6e:66:82:a0:87:f8:77:15:0b: + 03:f3:08:d9:61:56:74:f0:be:98:00:ef:2f:33:b3: + 7f:ba:7b:36:40:3d:69:05:d3:25:8e:31:82:ed:4d: + ca:bd:03:91:96:79:ab:ed:e5:53:20:9b:52:99:17: + 78:0e:e2:4e:7c:a0:fc:a4:dc:07:bd:0f:42:c0:69: + 8b:17:e8:31:62:05:8c:78:d5:e5:11:e5:46:d2:6f: + 92:18:5d:a0:dd:f1:de:a3:a9:6f:e3:9d:88:60:73: + a0:b1:92:fd:60:4c:91:67:f3:b5:79:96:b1:b4:bd: + 83:12:45:4b:56:0d:0f:58:26:1f:c4:28:0c:63:1b: + 0e:c0:79:8e:36:f6:9e:93:13:85:28:26:10:e6:a0: + 56:11:d8:d2:ef:6b:08:4d:22:99:71:a2:5f:ef:d1: + fb:34:bd:e1:50:8c:8f:d4:b1:30:fc:da:d4:5f:9d: + 82:f8:21:7f:2c:ce:12:ec:13:9f:f9:22:af:1a:88: + b1:e3:55:b2:0c:c2:60:d8:01:ad:0f:eb:70:29:da: + 47:f5:6e:24:a7:f6:6a:43:2f:c9:50:6b:34:a8:ca: + bf:31:cc:8a:b6:41:2e:47:32:f1:9b:78:c0:26:4b: + 48:a1:d7:46:71:f3:8b:95:9a:45:a5:6a:f8:2f:b5: + 27:e5:c3:c2:bf:65:74:fd:73:bd:2b:66:9f:d3:74: + 11:98:f7:97:0e:16:c6:e0:e5:4f:f6:d0:cf:cb:96: + 98:ac:f6:d7:01:09:aa:15:69:84:85:ba:96:ad:ac: + ff:a9:f3:2d:7d:a8:fd:a7:79:bb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 54:53:0C:3C:4C:E3:63:C6:56:08:35:9C:5E:F4:C1:A1:04:3A:C2:C9 + 5C:BE:18:7F:7B:3F:CE:99:66:80:79:53:4B:DD:33:1B:42:A5:7E:00 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,64 +106,64 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 03:af:93:ab:58:98:74:3c:a1:68:53:18:13:be:56:60:77:d0: - a7:0e:c9:8a:02:1f:92:4d:21:18:61:d7:3e:9a:1d:aa:94:37: - 02:59:31:3b:71:62:d9:cb:04:e8:c7:44:41:f9:0e:0d:90:d1: - 4a:ab:4e:e2:bd:4e:60:1b:3c:eb:2a:b7:8a:ca:24:58:60:64: - d3:a6:20:f6:f5:98:6e:ca:5a:0a:91:63:97:58:f5:18:90:9f: - 17:55:9f:12:cf:22:a7:31:e6:90:da:36:61:3b:d6:42:e6:18: - 19:43:bb:17:52:28:40:a5:11:47:7f:32:fe:83:3d:c3:7d:8b: - 17:1b:5d:f7:20:3e:bd:3b:16:3d:00:01:68:ed:76:7a:a1:af: - ce:cd:dd:52:7f:19:22:db:83:c1:89:b6:90:02:4e:22:bc:b1: - 76:0c:00:ad:c5:3c:33:be:64:92:30:38:1f:b1:04:4f:53:a2: - 4a:fb:63:80:21:8b:03:72:72:4b:df:f1:9d:08:75:f0:94:06: - d3:cb:7c:df:3b:80:19:58:7a:85:ca:2a:bf:b4:8c:5d:f3:b6: - 65:24:37:b2:1d:46:da:1f:39:48:f2:eb:3a:84:98:3a:0c:59: - ff:0a:05:c2:2c:8c:b1:a5:a9:43:a9:8e:47:97:9a:d2:40:9c: - b8:c3:e6:46:1b:db:4b:85:a3:e1:e7:4e:2a:1e:b9:a6:de:ee: - a7:f0:63:3f:0f:e2:90:b6:82:70:4b:93:7f:e9:74:f3:ab:03: - 9e:04:38:f1:46:2d:f6:fe:77:0f:4a:8e:66:23:74:3e:c6:5b: - eb:0e:dd:72:c3:46:1d:a4:f0:2f:b6:18:2e:f1:1c:f9:85:69: - 0e:5a:37:5e:f8:ea:4b:2d:e7:63:ee:a1:e4:b9:f7:fa:a9:11: - 65:64:a1:b7:b5:91:81:5c:4d:b5:27:b4:16:96:4b:df:fc:c4: - 8a:26:b6:87:62:54:88:fb:1d:7d:af:97:25:65:27:38:1e:f7: - 8c:a4:16:46:f2:d9 + 5d:7a:f8:81:e0:a7:c1:3f:39:eb:d3:52:2c:e1:cb:4d:29:b3: + 77:18:17:18:9e:12:fc:11:cc:3c:49:cb:6b:f4:4d:6c:b8:d2: + f4:e9:37:f8:6b:ed:f5:d7:f1:eb:5a:41:04:c7:f3:8c:da:e1: + 05:8e:ae:58:71:d9:01:8a:32:46:b2:dd:95:46:e1:ce:82:04: + fa:0b:1c:29:75:07:85:ce:cd:59:d4:cc:f3:56:b3:72:4d:cb: + 90:0f:ce:02:21:ce:5d:17:84:96:7f:6a:00:57:42:b7:24:5b: + 07:25:1e:77:a8:9d:da:41:09:8e:29:79:b4:b0:a1:45:c8:70: + ae:2c:86:24:ae:3d:9a:74:a7:04:78:d6:1f:1b:17:c5:c1:6d: + b1:1a:fd:f4:50:2e:61:16:84:89:d0:42:3f:b6:bf:bd:52:bd: + c8:3e:8e:87:b4:f0:bd:ad:c7:51:65:2f:77:e8:69:79:0e:03: + 63:89:e7:70:ad:c8:d1:2f:1a:a5:06:d2:90:db:7c:07:35:9a: + 0b:0e:85:87:d1:70:17:a7:88:0f:c6:b5:9c:88:00:fa:f9:b2: + 0a:19:5a:4b:8d:91:12:51:5e:0e:c1:d8:9e:02:78:d0:2d:24: + 09:fe:d4:97:3c:cb:a0:1f:9a:ab:f7:0f:e2:fa:64:23:4e:53: + 0a:15:3e:f5:04:01:86:29:8b:8e:24:40:2f:b1:90:87:5c:3b: + 7b:a7:4c:06:af:c3:90:7f:e9:c6:56:42:61:15:2c:83:f1:7c: + 4f:89:17:f3:a0:11:34:3f:8d:af:75:34:60:1e:e0:f2:f3:02: + e7:aa:b3:f7:9f:1c:f8:69:f4:fe:da:57:6e:1b:95:53:70:cd: + ed:b6:bb:2a:84:eb:ab:c3:a9:b4:d5:15:a0:b2:cc:81:2d:f1: + 56:c1:54:9b:5f:14:4c:5f:ad:5f:f5:06:ee:22:60:45:e4:50: + 35:64:ac:ac:ca:4a:bf:86:78:f8:53:2d:17:d8:e8:84:c8:07: + a4:c2:29:76:c7:1f -----BEGIN CERTIFICATE----- -MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJfMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV +MIIGvTCCBSWgAwIBAgIJAMstgJlaaVJgMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTdaFw0yODA3MDcx -NDIzMTdaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx +NDIzMTZaMF0xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2lk -bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDAfkvfgnT/+ATq -IiR5ksgGW4EJK900MkBsY9TXQcNdbrGqbyG4EwEvbDWzsAWBqgg76Alto7JgxKl2 -gNskz3T007xycOVAy4z31gzEWMTx+GxNbCiicJfCZjw6Z4Ck/UipooXAAy/S7jwC -z369E4RGa5jsIxxJ+NdDqAheoROIeUKawkfF7xXTyzkwuTuNj2YcV/TvJcsGVGQT -j4tZVSbDVvL38PlQX62VoGmEDK8pl8GL2GUQK3y+gP2VFDHepGxqqXxPLITxpdBF -aIoQcY4YV+nJtNu8vlUzDMizCHKII+YP9JdstxOLCyEbmjLv3rk4tHgIJuOfOyRh -3KjIcdghmNZcZ7vOvpbr341gKBNRLVmsAxtJCqqMfWvNOc6rXfp20bCnL/SDDJeB -/71/KfVeVaffXRtfEWcwJW6YRp7p2MealzAsnUA5xscOKItYhvmJ1FJlUB8LDZ+d -WESld2a4CIdK9lpuf3LDqy+wmcGTdnoVoi2RT68SDYHAb/bbtx0CAwEAAaOCAo4w +bnNhbnMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC8sqplTuHuLjbW +TL5SL2D1fw9U6WQzLVAF5gsyhd5lr2FpfYwjrob5Mav91aOLbJRTvoNyXsJ26FPS +0RycRGXbomcIEJxXGy9aI+0MLYBt1G5mgqCH+HcVCwPzCNlhVnTwvpgA7y8zs3+6 +ezZAPWkF0yWOMYLtTcq9A5GWeavt5VMgm1KZF3gO4k58oPyk3Ae9D0LAaYsX6DFi +BYx41eUR5UbSb5IYXaDd8d6jqW/jnYhgc6Cxkv1gTJFn87V5lrG0vYMSRUtWDQ9Y +Jh/EKAxjGw7AeY429p6TE4UoJhDmoFYR2NLvawhNIplxol/v0fs0veFQjI/UsTD8 +2tRfnYL4IX8szhLsE5/5Iq8aiLHjVbIMwmDYAa0P63Ap2kf1biSn9mpDL8lQazSo +yr8xzIq2QS5HMvGbeMAmS0ih10Zx84uVmkWlavgvtSflw8K/ZXT9c70rZp/TdBGY +95cOFsbg5U/20M/Llpis9tcBCaoVaYSFupatrP+p8y19qP2nebsCAwEAAaOCAo4w ggKKMIHhBgNVHREEgdkwgdaCB2lkbnNhbnOCH3huLS1rbmlnLTVxYS5pZG4ucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2dzc2NoZW4tbGNiMHcuaWRuYTIwMDMucHl0 aG9udGVzdC5uZXSCLnhuLS1rbmlnc2djaGVuLWI0YTNkdW4uaWRuYTIwMDgucHl0 aG9udGVzdC5uZXSCJHhuLS1ueGFzbXE2Yi5pZG5hMjAwMy5weXRob250ZXN0Lm5l dIIkeG4tLW54YXNtbTFjLmlkbmEyMDA4LnB5dGhvbnRlc3QubmV0MA4GA1UdDwEB /wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/ -BAIwADAdBgNVHQ4EFgQUVFMMPEzjY8ZWCDWcXvTBoQQ6wskwfQYDVR0jBHYwdIAU -3b/K2ubRNLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK +BAIwADAdBgNVHQ4EFgQUXL4Yf3s/zplmgHlTS90zG0KlfgAwfQYDVR0jBHYwdIAU +s4qgorpx8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQK DB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNh LXNlcnZlcoIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKG MGh0dHA6Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNl cjA1BggrBgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 Y2Evb2NzcC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250 ZXN0Lm5ldC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGB -AAOvk6tYmHQ8oWhTGBO+VmB30KcOyYoCH5JNIRhh1z6aHaqUNwJZMTtxYtnLBOjH -REH5Dg2Q0UqrTuK9TmAbPOsqt4rKJFhgZNOmIPb1mG7KWgqRY5dY9RiQnxdVnxLP -Iqcx5pDaNmE71kLmGBlDuxdSKEClEUd/Mv6DPcN9ixcbXfcgPr07Fj0AAWjtdnqh -r87N3VJ/GSLbg8GJtpACTiK8sXYMAK3FPDO+ZJIwOB+xBE9Tokr7Y4AhiwNyckvf -8Z0IdfCUBtPLfN87gBlYeoXKKr+0jF3ztmUkN7IdRtofOUjy6zqEmDoMWf8KBcIs -jLGlqUOpjkeXmtJAnLjD5kYb20uFo+HnTioeuabe7qfwYz8P4pC2gnBLk3/pdPOr -A54EOPFGLfb+dw9KjmYjdD7GW+sO3XLDRh2k8C+2GC7xHPmFaQ5aN1746kst52Pu -oeS59/qpEWVkobe1kYFcTbUntBaWS9/8xIomtodiVIj7HX2vlyVlJzge94ykFkby -2Q== +AF16+IHgp8E/OevTUizhy00ps3cYFxieEvwRzDxJy2v0TWy40vTpN/hr7fXX8eta +QQTH84za4QWOrlhx2QGKMkay3ZVG4c6CBPoLHCl1B4XOzVnUzPNWs3JNy5APzgIh +zl0XhJZ/agBXQrckWwclHneondpBCY4pebSwoUXIcK4shiSuPZp0pwR41h8bF8XB +bbEa/fRQLmEWhInQQj+2v71Svcg+joe08L2tx1FlL3foaXkOA2OJ53CtyNEvGqUG +0pDbfAc1mgsOhYfRcBeniA/GtZyIAPr5sgoZWkuNkRJRXg7B2J4CeNAtJAn+1Jc8 +y6Afmqv3D+L6ZCNOUwoVPvUEAYYpi44kQC+xkIdcO3unTAavw5B/6cZWQmEVLIPx +fE+JF/OgETQ/ja91NGAe4PLzAueqs/efHPhp9P7aV24blVNwze22uyqE66vDqbTV +FaCyzIEt8VbBVJtfFExfrV/1Bu4iYEXkUDVkrKzKSr+GePhTLRfY6ITIB6TCKXbH +Hw== -----END CERTIFICATE----- diff --git a/Lib/test/keycert2.pem b/Lib/test/keycert2.pem index ed6ae85a4649d..e59d45439d4b6 100644 --- a/Lib/test/keycert2.pem +++ b/Lib/test/keycert2.pem @@ -1,66 +1,66 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDKjrjWZlfOs1Ch -qt1RoyLfqyXbHVXIAW0fTzAxfJnxvFOiWqAAKgC2qVQM8Y080kRUuRaXP/w9ywXT -+MzX6tByy5VbTYJYyTjHOH46EWLNdcqEJs4+FCVqOIYrQPQ6pGAhCXmgBy4Vb42J -ABLwb+Kt+y2Dk15tggVcAHP2Khri+lRXWvda+kZAe2F1IojmuWyCTy3FEYHic5qN -BsXcf6u1oyFV8MybOuz1zGj3vd2C+dEKO4Ohw9rRwnvHSatjM+CfwiXf8kTXzDBF -Z/8W3+6yA49pHxRbG7FE3K1TAPhkrp+BVTIUOcdI74wEA6UEkWFF5sQcmmAth59M -EQrl2CXorftEPhsKZE59dUP1+nYAPvR/mTySNCSw7/rvdf+csRSZ5ollMu/lxsht -ulJYJI03+IiDTn47FI5D+IF25REK7d4LzGIo6T73ktsT+qpSXHuTWC+IABm8AMF9 -7ljxHSwMRU/z+O5uiONRItDAgKH/OItFG54PtY2vAhaO0YiZrZcCAwEAAQKCAYB2 -hTo8IVghlySH5B1p5kXCkDcvVaPaypLaLhCp9Blzq9lX9yUF043lU4Ddrf0RaIsY -88/3IjZqxb+cP0lE0Z20fdDfwqORZfQ2BaU+PuwMAm9EEhy9kDYwR/ChoHkHUyT4 -T7392BWr70Dmt8ddLmp5mK4R/gnTk6+lHJK9p/dhdk4haxWvAyBWHJty2Yk3T6nh -OYkzdUIFidUVza+6jG2hc1lPGv3tmnYKgNeulkblm10oWphz79C6ycx5WG7TNgef -CQ3z7//Nn89YTiaUBjLvoLvxRTMwO96r7E/FaslSl/fWnF3HP3lut26Z/mNfhiwj -qn7AhUwpSNPV0qcxFWXr/rXUjdk745wv8wOODK8atjjE/vt/MRBK0rAOIPSm3ecx -37PKNtR4i+sNeDEcY1IyTHE6wFvJSy5y8AFpn5y8tbqYfhlEVWZ4pcnlrKxhWm7j -oBkB/4GBjKQgbQ7ttym9eNG1wIbZ8v9N06+yeLs/NCc4bFZEgcWjFqBH1bLtAYEC -gcEA8tt8iYNqbsDH2ognjEmbbBxrDBmyYcEKRpg1i1SUopcZl8i93IHpG7EgJIaj -l7aWSbASAxjnK02t0VZ3nNS60acibzRwY/+e8OrSqlQdMXlAB2ggBA86drDJpfBl -WGJG8TJVY9bc1TU2uuwtZR1LAMSsRHVp+3IvKLpHrne5exPd3x6KGYcuaM+Uk/rE -u6tLsFNwaCdh+iBFFDT2bnYIw7jAsokJUkwxMVxSC0/21s2blhO/q5LsN1gFC1kN -TbpXAoHBANWE7TmG2szPvujPwrK18v6iJlHCA2n50AgAQXrsetj2JcF3HYHYdHnq -z36MQ6FpBKOiQumozWvb32WTjEwdG2kix7GEfam4DAUBdqYuCHzPcR12K5Tc8hsX -NG7JXUAeS8ZJEiOdu95X59JHyBxUQtNfte5rcbaV17SVw6K6bsWVJnj60YjtJrpa -xHvv1ZRnT2WEzJGpA+ii1h3I52N7ipGBiw172qcW+bKJukMi8eHxx5CC9e5tBpnu -C+Ou/eYewQKBwHxNa0jXQrq9YY2w8s0TP8HuKbxfyrXOIHxRm9ZczFcMD8VosgUT -WUUbO+B2KXWVtwawYAfFz0ySzcy//SkAmT6F1VIl/QCx7aBSENGti+Ous98WpIxv -XvUxN4T/rl+2raj2ok4fw5g9TG4QRIvkmmciQyonDr/sicbG0bmy/fTJDl8NOpIm -ZtKurNWxHNERtAPkMTyeK7/ilHjrQtb3AzVqcvbuvR6qcONa5YN0wlrfkisWoJwo -707EdpCAXBbUsQKBwQCnpzcpu2Sj+t9ZKIElF87T93gFLETH+ppJHgJMRdDz+NqO -fTwTD2XtsNz57aLQ44f8AFVv6NZbQYq41FEOFrDGLcQE9BZDpDrz10FVnMGXVr7n -tjjkK1SCxwapkr0AsoknCYsPojO4kud46loLPHI4TGeq7HyeNCvqJMo3RRHjXIiX -58GNNUD6hHjRI/FdFH14Jf0GxmJGUU20l2Jwb7nPJJuNm9mE53pqoNA7FP4+Pj1H -kD0Q2FSdmxeE0IuWHEECgcBgw6ogJ/FRRGLcym+aApqP9BChK+W8FDfDc9Mi4p/J -g+XmetWNFGCGTlOefGqUDIkwSG+QVOEN3hxziXbsjnvfpGApqoaulAI5oRvrwIcj -QIvD2mt0PB52k5ZL9QL2K9sgBa43BJDyCKooMAlTy2XMM+NyXVxQKmzf3r3jQ5sl -Rptk7ro38a9G8Rs99RFDyOmP1haOM0KXZvPksN4nsXuTlE01cnwnI29XKAlEZaoA -pQPLXD8W/KK4mwDbmokYXmo= +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCf8FWxi4oVlDVx +e8NDFgb+IYAGr/hZWuY1Zq7d7g57yPoxJrgt+bN89+U7qTduqyB2Hy8G0TqeACOr +IdpPZ8P7V5E5YiASwfJ72nbVo7qR9DAKA5FE8PU0bJFmFLjDDihc970zc4ilRDfR +WylUpj68nefOY4CzFzeiqVOLX2wezs7Z0hflkSXGBmC0j1FbQU2I3YJg3CKCabhT +tU6OyKItzjJ2vVaOoQ+B0Kv8leaRQ6ANZBAFQF2LepSy5F2+oSD+QHjPr+012V5D +mrsdIc9We8YyonS1u/3HI7lLohf3W+qFroQWjn0DJI56ScV1uEr/B0+hn2jBRTM5 +d1F9BeVWm1u8BOJu50CvOeuxiVLsxJpa4T41DJznJk5V+hE4hKvDKmlrwulsRp8o +jUEyUi8dzWOBRfAijIWv3qAPjGA/J33n6+PllCczC2BsVZhVmLqSMCwp1g2JTCM/ +KC7T4vOl/EGkm76fcmLeA1Ef8oUdRg+3T77VP+HqZ2JP06J8O8MCAwEAAQKCAYAw +YvJZ82BEJQGCIrIxMpHNAm+MFmKpDdIFp9oRdDrXgjcG9bLU3e1KSmkEgq4tggIh +GlAM3PHB6ULhPC2ixj7JZHWgCaqwYhKtG6vF+HGyRFDgRrIFTGyyfoICgxReloLp +lV2dGj/l19yXLuAzJtRmFdOSYhIGnGiNgnKvAKBiNajoxyHJpv7piPZqyc0QMZJ2 +bKVMDm02TSuhz4FDuzktaGtl9uQf5GQfnvTZRrRpkC70vigGnrFuSBiCgopF6NLq +6AXl8YS3Jcu2oGWrZDfS/GlG1QmvGGsmr9wndJSGG43jcpcRZt0g1nJNu4Fioq3e +7y6Gap9TEsciuQOv/6RD457XkNARmTQxFpEwmSgOPQn2pFcDspo71Ej7azzL/Z+3 +jvnVo3wxgxBcrpyh+vhBtJARp4pT4anW4PcD6IcPSOWbnI8Ldoj1XN5QkJcBcykK +6LmsAUqsmEQDNsmnGZWyYSCns4P2vUJi0hwQz8UiQwgAta3xnq4v5On7l3cq35kC +gcEA0+joOFbZBeGlCb27tDW4VCW0cQuczzuNEoBUKnsNSqy0nx1O7hgHm/f/NQDD +cpxiD15bRQ0KM9QbQC4dGaVoLsM07hUGk97dCxQPs2zot4CodCKGohs7E154tEDP +zVg3YS5mubUmqdqtn8ZCKeeZye/Tv2ageyF300sEgj2Cd7EZ8S4sB0PxZ2tqT3jy +cBL5cDruLEWuHIQjN7WwSjxnXocpb1OU7dJ+v4zFPCkSCOoa0DTTw4jFhPEOBdqV +T619AoHBAME3QyW4QVtU2Ct9u0B1XThhqSEyOpUrcH9nOoefggwP4WF3phVx16BG +aDKUIGQ62klRa5fi2eooxcjQRLv1sWO0UzssnO6ABMnGkUiRdrowo6xukNak0RTp +0gvNoJ0SZxGF0yWSCw1Rq3qP2Koj7XDumFChAzLMyUsnoOl29SA7GfXcZp1pZTiq +kOfFMWt0CIHu/EK03YWcd4vfQEq6lus39RCSXuL++Jva3yiEl5s069RFZvP1bNrD +emkfetDSPwKBwQClk+8fVnzs44sZOW9ZOEB3P57mVbSJGHb6Zdtd9hhEqP3Y9gWe +dJg9fmGjAJ23CAp3B7s5ER9PsAQ6+c0zJNNq9ox9G2CwWgtNhLdf81FDUPxPAktA +jxZx4/dcoOe+A5gCD0elA67aOUxA86DvLVA1QXeqrn3muBfwuUUknvs6mt8yXGl6 +o9QUgxHmVxLYD3tn/iPr4+ZP0c/Sz9yXpOsAKYxuuFg+G6N9+HiEsXKuFH4vAZgV +yODNJ61VVZ4lS+ECgcAqFqOl39E81+qO7sCPdgFsermg5ZQlUmUbG52AVZq6jesG +lE21disGWs/v1JyJuNg8CGRrnZriiycqa1PNreOKWImY5kr5GSHx4jNbn3RBcr70 +nNEoMJbq+1QqBgzqqkuRYZlxIbMOn6++7v6/cTwT0aWUSr6rnjhrCqLeuG8FKlqp +V+1ydLb79QvDsQzm30vLIggJb+ShakgQS/1xSdv+OR5FEd1hjTESokbiSJ/Ny2Vj +xAp9MgUYUmSj6ZuTSXkCgcAggshdRQLom/EK2pYwffIpKfBiyLbi+KIjKxkiPEsb +jrrQbvh9ZN6iAG3StVAYB5c6vewfeIlcDT0YJDyy1hGRLRG7vf9ubPf+n7Xp1y0W +oo9L9qfCHu0jmWwtinkFYjpTDkXlxXCG2v3TllNsNX/5afYo8sb9oxXHLTpBlwZB +fw6IgNZblWQevdgmUMTP9W2W7AZUxEz4gOM6lQkOwC3U59Dx2yO6rD3An6G1tlZF +2MClyf8o5d5ePObH8rkxrpY= -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIEYjCCAsqgAwIBAgIJAJm2YulYpr+6MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV -BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u -IFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTAeFw0x -ODA4MjkxNDIzMTZaFw0yODA4MjYxNDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYD -VQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZv -dW5kYXRpb24xFTATBgNVBAMMDGZha2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEB -BQADggGPADCCAYoCggGBAMqOuNZmV86zUKGq3VGjIt+rJdsdVcgBbR9PMDF8mfG8 -U6JaoAAqALapVAzxjTzSRFS5Fpc//D3LBdP4zNfq0HLLlVtNgljJOMc4fjoRYs11 -yoQmzj4UJWo4hitA9DqkYCEJeaAHLhVvjYkAEvBv4q37LYOTXm2CBVwAc/YqGuL6 -VFda91r6RkB7YXUiiOa5bIJPLcURgeJzmo0Gxdx/q7WjIVXwzJs67PXMaPe93YL5 -0Qo7g6HD2tHCe8dJq2Mz4J/CJd/yRNfMMEVn/xbf7rIDj2kfFFsbsUTcrVMA+GSu -n4FVMhQ5x0jvjAQDpQSRYUXmxByaYC2Hn0wRCuXYJeit+0Q+GwpkTn11Q/X6dgA+ -9H+ZPJI0JLDv+u91/5yxFJnmiWUy7+XGyG26UlgkjTf4iINOfjsUjkP4gXblEQrt -3gvMYijpPveS2xP6qlJce5NYL4gAGbwAwX3uWPEdLAxFT/P47m6I41Ei0MCAof84 -i0Ubng+1ja8CFo7RiJmtlwIDAQABoxswGTAXBgNVHREEEDAOggxmYWtlaG9zdG5h -bWUwDQYJKoZIhvcNAQELBQADggGBAMIVLp6e6saH2NQSg8iFg8Ewg/K/etI++jHo -gCJ697AY02wtfrBox1XtljlmI2xpJtVAYZWHhrNqwrEG43aB7YEV6RqTcG6QUVqa -NbD8iNCnMKm7fP89hZizmqA1l4aHnieI3ucOqpgooM7FQwLX6qk+rSue6lD5N/5f -avsublnj8rNKyDfHpQ3AWduLoj8QqctpzI3CqoDZNLNzaDnzVWpxT1SKDQ88q7VI -W5zb+lndpdQlCu3v5HM4w5UpwL/k1htl/z6PnPseS2UdlXv6A8KITnCLg5PLP4tz -2oTAg9gjOtRP/0uwkhvicwoFzFJNVT813lzTLE1jlobMPiZhsS1mjaJGPD9GQZDK -ny3j8ogrIRGjnI4xpOMNNDVphcvwtV8fRbvURSHCj9Y4kCLpD5ODuoyEyLYicJIv -GZP456GP0iSCK5GKO0ij/YzGCkPWD5zA+mYFpMMGZPTwajenMw7TVaPXcc9CZBtr -oOjwwiLEqdkpxUj13mJYTlt5wsS/Kw== +MIIEbTCCAtWgAwIBAgIUF15VKdwjiTzzKgs6PnNpEekV9QQwDQYJKoZIhvcNAQEL +BQAwYjELMAkGA1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYD +VQQKDBpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhv +c3RuYW1lMB4XDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFowYjELMAkGA1UE +BhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMwIQYDVQQKDBpQeXRob24g +U29mdHdhcmUgRm91bmRhdGlvbjEVMBMGA1UEAwwMZmFrZWhvc3RuYW1lMIIBojAN +BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAn/BVsYuKFZQ1cXvDQxYG/iGABq/4 +WVrmNWau3e4Oe8j6MSa4LfmzfPflO6k3bqsgdh8vBtE6ngAjqyHaT2fD+1eROWIg +EsHye9p21aO6kfQwCgORRPD1NGyRZhS4ww4oXPe9M3OIpUQ30VspVKY+vJ3nzmOA +sxc3oqlTi19sHs7O2dIX5ZElxgZgtI9RW0FNiN2CYNwigmm4U7VOjsiiLc4ydr1W +jqEPgdCr/JXmkUOgDWQQBUBdi3qUsuRdvqEg/kB4z6/tNdleQ5q7HSHPVnvGMqJ0 +tbv9xyO5S6IX91vqha6EFo59AySOeknFdbhK/wdPoZ9owUUzOXdRfQXlVptbvATi +budArznrsYlS7MSaWuE+NQyc5yZOVfoROISrwyppa8LpbEafKI1BMlIvHc1jgUXw +IoyFr96gD4xgPyd95+vj5ZQnMwtgbFWYVZi6kjAsKdYNiUwjPygu0+LzpfxBpJu+ +n3Ji3gNRH/KFHUYPt0++1T/h6mdiT9OifDvDAgMBAAGjGzAZMBcGA1UdEQQQMA6C +DGZha2Vob3N0bmFtZTANBgkqhkiG9w0BAQsFAAOCAYEARzdkuqa0Hexi/saMkdi3 +bubpQkc7X0RYKWnjy/PgcmbvQXLiWRMZOH9rMWvd5v+ZfkgAtsbOQuP8ycioNIFY +Il5SEmxHEN81z5UNSPLOib6ky13gzrnXRAxnnO7cICG7AaMu1dHv57fqjevcx/n/ +nxPNKwKL+TDpMw7ATVZw7Py7JciKyFAfwtkvt17j/ldvaQvuwmWHzyFVrQniQcQq +QEa4jy/Y/pXHAgCKq1qbe0ush17j1ChyH7l4SkF2xJKcYYQF5ipw8zg6WeOL2NFE +G1KDJN0SsMmM3PMN1e0lLQP3G+UaatervrKXu51QleKL32Xlby+pp1w9KKs39/Tb +RT8EMe9A6cecod6TL0ZUQHow6ykNYBkfSKDLTKWnL9ifZ0C/DvgmS7DpJg3oAa1e +GhIglMrgqJflTHAI/PvEsCKM1O0Un2dVGWsUCzPfhj1cKmagyb0Zd+2Tk9xGSRs9 +2ceXMxRCjOJwEHUCFuTYeqowabdlpi0nyPbSn7JIwCpT -----END CERTIFICATE----- diff --git a/Lib/test/keycert3.pem b/Lib/test/keycert3.pem index e0a8205a660e8..f6887ba7a84e1 100644 --- a/Lib/test/keycert3.pem +++ b/Lib/test/keycert3.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCfKC83Qe9/ZGMW -YhbpARRiKco6mJI9CNNeaf7A89TE+w5Y3GSwS8uzqp5C6QebZzPNueg8HYoTwN85 -Z3xM036/Qw9KhQVth+XDAqM+19e5KHkYcxg3d3ZI1HgY170eakaLBvMDN5ULoFOw -Is2PtwM2o9cjd5mfSuWttI6+fCqop8/l8cerG9iX2GH39p3iWwWoTZuYndAA9qYv -07YWajuQ1ESWKPjHYGTnMvu4xIzibC1mXd2M6u/IjNO6g426SKFaRDWQkx01gIV/ -CyKs9DgZoeMHkKZuPqZVOxOK+A/NrmrqHFsPIsrs5wk7QAVju5/X1skpn/UGQlmM -RwBaQULOs1FagA+54RXU6qUPW0YmhJ4xOB4gHHD1vjAKEsRZ7/6zcxMyOm+M1DbK -RTH4NWjVWpnY8XaVGdRhtTpH9MjycpKhF+D2Zdy2tQXtqu2GdcMnUedt13fn9xDu -P4PophE0ip/IMgn+kb4m9e+S+K9lldQl0B+4BcGWAqHelh2KuU0CAwEAAQKCAYEA -lKiWIYjmyRjdLKUGPTES9vWNvNmRjozV0RQ0LcoSbMMLDZkeO0UwyWqOVHUQ8+ib -jIcfEjeNJxI57oZopeHOO5vJhpNlFH+g7ltiW2qERqA1K88lSXm99Bzw6FNqhCRE -K8ub5N9fyfJA+P4o/xm0WK8EXk5yIUV17p/9zJJxzgKgv2jsVTi3QG2OZGvn4Oug -ByomMZEGHkBDzdxz8c/cP1Tlk1RFuwSgews178k2xq7AYSM/s0YmHi7b/RSvptX6 -1v8P8kXNUe4AwTaNyrlvF2lwIadZ8h1hA7tCE2n44b7a7KfhAkwcbr1T59ioYh6P -zxsyPT678uD51dbtD/DXJCcoeeFOb8uzkR2KNcrnQzZpCJnRq4Gp5ybxwsxxuzpr -gz0gbNlhuWtE7EoSzmIK9t+WTS7IM2CvZymd6/OAh1Fuw6AQhSp64XRp3OfMMAAC -Ie2EPtKj4islWGT8VoUjuRYGmdRh4duAH1dkiAXOWA3R7y5a1/y/iE8KE8BtxocB -AoHBAM8aiURgpu1Fs0Oqz6izec7KSLL3l8hmW+MKUOfk/Ybng6FrTFsL5YtzR+Ap -wW4wwWnnIKEc1JLiZ7g8agRETK8hr5PwFXUn/GSWC0SMsazLJToySQS5LOV0tLzK -kJ3jtNU7tnlDGNkCHTHSoVL2T/8t+IkZI/h5Z6wjlYPvU2Iu0nVIXtiG+alv4A6M -Hrh9l5or4mjB6rGnVXeYohLkCm6s/W97ahVxLMcEdbsBo1prm2JqGnSoiR/tEFC/ -QHQnbQKBwQDEu7kW0Yg9sZ89QtYtVQ1YpixFZORaUeRIRLnpEs1w7L1mCbOZ2Lj9 -JHxsH05cYAc7HJfPwwxv3+3aGAIC/dfu4VSwEFtatAzUpzlhzKS5+HQCWB4JUNNU -MQ3+FwK2xQX4Ph8t+OzrFiYcK2g0An5UxWMa2HWIAWUOhnTOydAVsoH6yP31cVm4 -0hxoABCwflaNLNGjRUyfBpLTAcNu/YtcE+KREy7YAAgXXrhRSO4XpLsSXwLnLT7/ -YOkoBWDcTWECgcBPWnSUDZCIQ3efithMZJBciqd2Y2X19Dpq8O31HImD4jtOY0V7 -cUB/wSkeHAGwjd/eCyA2e0x8B2IEdqmMfvr+86JJxekC3dJYXCFvH5WIhsH53YCa -3bT1KlWCLP9ib/g+58VQC0R/Cc9T4sfLePNH7D5ZkZd1wlbV30CPr+i8KwKay6MD -xhvtLx+jk07GE+E9wmjbCMo7TclyrLoVEOlqZMAqshgApT+p9eyCPetwXuDHwa3n -WxhHclcZCV7R4rUCgcAkdGSnxcvpIrDPOUNWwxvmAWTStw9ZbTNP8OxCNCm9cyDl -d4bAS1h8D/a+Uk7C70hnu7Sl2w7C7Eu2zhwRUdhhe3+l4GINPK/j99i6NqGPlGpq -xMlMEJ4YS768BqeKFpg0l85PRoEgTsphDeoROSUPsEPdBZ9BxIBlYKTkbKESZDGR -twzYHljx1n1NCDYPflmrb1KpXn4EOcObNghw2KqqNUUWfOeBPwBA1FxzM4BrAStp -DBINpGS4Dc0mjViVegECgcA3hTtm82XdxQXj9LQmb/E3lKx/7H87XIOeNMmvjYuZ -iS9wKrkF+u42vyoDxcKMCnxP5056wpdST4p56r+SBwVTHcc3lGBSGcMTIfwRXrj3 -thOA2our2n4ouNIsYyTlcsQSzifwmpRmVMRPxl9fYVdEWUgB83FgHT0D9avvZnF9 -t9OccnGJXShAIZIBADhVj/JwG4FbaX42NijD5PNpVLk1Y17OV0I576T9SfaQoBjJ -aH1M/zC4aVaS0DYB/Gxq7v8= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDFtLOteQlQojN7 +ztkux7m0hmGKkP1hh0hbKqTcD87jkLAqAwZWenjZMjCbbZ3vP+AObCIkYIKzPXY7 +Yi+H5M3O2mXIDxoHGjL/GWtoEyDNXvm9UC+MRuSOq2MaLHHQG0Rx2TxcYrMVUM7b +93rpN1LGRrCv1gISXM4EvEJooAR7Aadj0pG/o0fqDAdFjH6QZbhn1iZle+eGbjcf +dgH/H0F8dn1PPGoViHXicbsQ4kB6002Pf+aXP4b2QKAbflyNHEKHPHEOOTXrFjMd +c+bqKW24epEsMZI59qx9hU/4Rvp3/v+vEwTL7Nm7ilptzZn2cvGCW39LC0nNYLOz +kO3H8xwA75h6uykdB+WO/v2CKIK9M/ZO+9QNrmaokfKDamCk39b8hlCwNL6LsVpv +d3XTS5Wn4YWn92EqiltUJJoPo7pc7VTdWCg4zVFn4Q8Zh4NFNn/qTB8lEMgrsNTV +5cyZ7zhoBiUMSO45bmo2NsnE7ce/JUhlqe5uh0PT1MIBgTV+oDMCAwEAAQKCAYEA +udsy4gwblqK0tVnxz0lQqYV+os3EdO/BNHr1Oi7eNg2pngTz603812mYSjUVOHma +vtQmkH3twGQyBoc52Y1dcGzdK+IOfMjDUg7qao840ffL3I1J9ZwbdodlhZBsec94 +W3J1jP/4DDzICf8vm5g3h0+i/9m2Xt7BibAU2dg7/grC+lNUUoxDqaEfIOF/hW0q +muq1c8e0EisAROIh5FzUqhWVnWxU6eM7tuFlkuyu4whLLHB3LI466Lo+CTqT9M+v +jJYlvS5+AZW3qMBp6WOI8C+VIiBL178mo+Igkyyy5AYXcWeNkjp6ygRWvtWXIhCv +CI29mf+BP/54jAY0rQRXJ2UcSHXmM6PTDkE/L2OKeiY1Ou8gLOwun3yBVdbkXJMb +PWmUW4N8qSIJQ+vE2TDqmkqAT6m+ilzOXl1O+LLTvGyMnOiiSLXK9mC4ND3tqaQu +hvKivnI1doErcWUaIf1DHiJmLrGxrTCUKjCEoefqVq2/dDdtCfx7CqUvjl3DYKMB +AoHBAP+Vdi6D07gZFepEGCaJ+YH6cxEyO73CNnea/F1whVAzOv91kHS32jC9PAI3 +/wYlX+DLcN9mVF/q62V4SLZYfOxTPW4vWO0A45URe9s9Z795fdAcQ5jt3QFOVSnk +3XSaCkIOwckuwabGJi4+foiUEOnLLzQi1/g7x12dwejxVNhqhz5KFkOQPv8fQRed +sb5LVLYDeprsB2Vsx0fHwg4z9FvTIxLBeI7+sJD30lNpYZrCl/T9x4e1SV2Rwn2W +bghxgQKBwQDGBx07biZK9RB5g4qPl+G6vz0M+/KBfpwQbMYxSyct7u6gfGD9mWBO +qocIIr39Unac3kUL237Cn3HbgiGCRe7Mwd7XqnSSGWM5oWSlVQxEKTXYUlTbd9O9 +DKuyQGOl/AMEwD4ZbEOfQNmnd1U4nh1AV052FQY8Ry/atGFT9fApA/5X/bbenOwQ +YGDsokLzPf2BIDncpE+VNevUMoMI7EnySgjjfpL+cRld0qpLqBMo2h5VddeJ/5YM +1YcNfMQiw7MCgcEAwXqXuKa7A8aZvHpH/gS9CRRbP01TxFbdfLWrDeE8SnY9111c +Ob9kQTk/0D4rpK9uYXIgxD1m6iWghXQFN2TNTOnGuz7EhsYBgrt1k4Zsn5qND5oV +4hNPFsoB1nEW5EooMdGSCYaHuoSOKrvMdgAAvbu+xC0MaTJ3vfrK7Fik7h/WueTD +7emohuFWGVabU38bZZ5EljrPboxmX4Rs9uuFtG2lQ3GKnlVXvKaeZd6EsO9WsXPc +NHOcUmUhYokaSvIBAoHAGCxGJTsM8Zl4qVylTWH87A7sJOmccLJD2r1sdBf4cGL6 +PhzwugQ+/VtToGqdRo8Ka5u2Ufw5PQi5nVIFRSHERLpluW3VTQBMXHyXDJeVJ7zg +Fcf3E9NMxYcGbnvtrhVVSP8ulWvh1U7VQtwOSxsB9xixOzjVygXmkYvzVYxwBJG4 +OoV+DS6aomUhb8Fe6tJmX5zPc1+bV1t9ril8VVqCrFDdROfuiaDEt+8/Wnzp2dLG +YShBZ1cLugVWtw7D4nqBAoHAF29k64iAxY5Y4OOibVkqjUCPyqG2oxiXqgO7CxZp +FGUat5UtV2mIBlSENs1o5AZ1nPlgWtPtg0xVCaG2t/Rq7ugvUfAnAhUK6zX8FS+T +gCXE+7iKuuIJiCo13/iAwF/CLfuXvj4CZ71ta0wX9w99f1FcPEk0x+ytiyuWJK8K +tyubL34JwNrnkh/8e3LcV3L88Sk9ZmxeTz31f3cA3Fy2ZJOAUMD9dKXeKtY7azzt +MkhXedRsdLSKqMh0VGeGHoLS -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5c - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:9f:28:2f:37:41:ef:7f:64:63:16:62:16:e9:01: - 14:62:29:ca:3a:98:92:3d:08:d3:5e:69:fe:c0:f3: - d4:c4:fb:0e:58:dc:64:b0:4b:cb:b3:aa:9e:42:e9: - 07:9b:67:33:cd:b9:e8:3c:1d:8a:13:c0:df:39:67: - 7c:4c:d3:7e:bf:43:0f:4a:85:05:6d:87:e5:c3:02: - a3:3e:d7:d7:b9:28:79:18:73:18:37:77:76:48:d4: - 78:18:d7:bd:1e:6a:46:8b:06:f3:03:37:95:0b:a0: - 53:b0:22:cd:8f:b7:03:36:a3:d7:23:77:99:9f:4a: - e5:ad:b4:8e:be:7c:2a:a8:a7:cf:e5:f1:c7:ab:1b: - d8:97:d8:61:f7:f6:9d:e2:5b:05:a8:4d:9b:98:9d: - d0:00:f6:a6:2f:d3:b6:16:6a:3b:90:d4:44:96:28: - f8:c7:60:64:e7:32:fb:b8:c4:8c:e2:6c:2d:66:5d: - dd:8c:ea:ef:c8:8c:d3:ba:83:8d:ba:48:a1:5a:44: - 35:90:93:1d:35:80:85:7f:0b:22:ac:f4:38:19:a1: - e3:07:90:a6:6e:3e:a6:55:3b:13:8a:f8:0f:cd:ae: - 6a:ea:1c:5b:0f:22:ca:ec:e7:09:3b:40:05:63:bb: - 9f:d7:d6:c9:29:9f:f5:06:42:59:8c:47:00:5a:41: - 42:ce:b3:51:5a:80:0f:b9:e1:15:d4:ea:a5:0f:5b: - 46:26:84:9e:31:38:1e:20:1c:70:f5:be:30:0a:12: - c4:59:ef:fe:b3:73:13:32:3a:6f:8c:d4:36:ca:45: - 31:f8:35:68:d5:5a:99:d8:f1:76:95:19:d4:61:b5: - 3a:47:f4:c8:f2:72:92:a1:17:e0:f6:65:dc:b6:b5: - 05:ed:aa:ed:86:75:c3:27:51:e7:6d:d7:77:e7:f7: - 10:ee:3f:83:e8:a6:11:34:8a:9f:c8:32:09:fe:91: - be:26:f5:ef:92:f8:af:65:95:d4:25:d0:1f:b8:05: - c1:96:02:a1:de:96:1d:8a:b9:4d + 00:c5:b4:b3:ad:79:09:50:a2:33:7b:ce:d9:2e:c7: + b9:b4:86:61:8a:90:fd:61:87:48:5b:2a:a4:dc:0f: + ce:e3:90:b0:2a:03:06:56:7a:78:d9:32:30:9b:6d: + 9d:ef:3f:e0:0e:6c:22:24:60:82:b3:3d:76:3b:62: + 2f:87:e4:cd:ce:da:65:c8:0f:1a:07:1a:32:ff:19: + 6b:68:13:20:cd:5e:f9:bd:50:2f:8c:46:e4:8e:ab: + 63:1a:2c:71:d0:1b:44:71:d9:3c:5c:62:b3:15:50: + ce:db:f7:7a:e9:37:52:c6:46:b0:af:d6:02:12:5c: + ce:04:bc:42:68:a0:04:7b:01:a7:63:d2:91:bf:a3: + 47:ea:0c:07:45:8c:7e:90:65:b8:67:d6:26:65:7b: + e7:86:6e:37:1f:76:01:ff:1f:41:7c:76:7d:4f:3c: + 6a:15:88:75:e2:71:bb:10:e2:40:7a:d3:4d:8f:7f: + e6:97:3f:86:f6:40:a0:1b:7e:5c:8d:1c:42:87:3c: + 71:0e:39:35:eb:16:33:1d:73:e6:ea:29:6d:b8:7a: + 91:2c:31:92:39:f6:ac:7d:85:4f:f8:46:fa:77:fe: + ff:af:13:04:cb:ec:d9:bb:8a:5a:6d:cd:99:f6:72: + f1:82:5b:7f:4b:0b:49:cd:60:b3:b3:90:ed:c7:f3: + 1c:00:ef:98:7a:bb:29:1d:07:e5:8e:fe:fd:82:28: + 82:bd:33:f6:4e:fb:d4:0d:ae:66:a8:91:f2:83:6a: + 60:a4:df:d6:fc:86:50:b0:34:be:8b:b1:5a:6f:77: + 75:d3:4b:95:a7:e1:85:a7:f7:61:2a:8a:5b:54:24: + 9a:0f:a3:ba:5c:ed:54:dd:58:28:38:cd:51:67:e1: + 0f:19:87:83:45:36:7f:ea:4c:1f:25:10:c8:2b:b0: + d4:d5:e5:cc:99:ef:38:68:06:25:0c:48:ee:39:6e: + 6a:36:36:c9:c4:ed:c7:bf:25:48:65:a9:ee:6e:87: + 43:d3:d4:c2:01:81:35:7e:a0:33 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 8F:EA:1D:E3:33:5C:00:16:B3:8B:6F:6B:6F:D3:4C:CB:B5:CB:7C:55 + 85:75:10:25:D0:2C:80:50:24:1A:5B:57:70:DE:B5:CB:71:A9:3B:7B X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 27:f5:8c:59:10:f4:c6:e7:28:00:bf:ba:8d:7b:13:03:f1:1c: - a6:5f:b3:06:55:a4:22:b9:db:b2:d5:46:bd:f7:0c:dd:43:6e: - b4:79:65:67:21:0c:2a:55:ee:40:8e:85:9f:9f:47:bb:0a:2a: - 4d:b6:64:74:98:a0:7f:ae:dc:f1:2e:db:42:77:18:e0:75:8b: - 26:35:68:c3:41:ed:6b:c8:77:72:6f:6a:9a:5d:55:69:02:fd: - 5a:54:c8:57:cb:b0:65:03:16:e2:0f:00:39:99:66:a0:9b:88: - 93:17:e2:5a:2d:79:35:5f:97:57:78:c4:af:f5:99:5e:86:ab: - d3:11:ad:1a:a2:0d:fa:52:10:b9:fe:bf:9d:ce:33:d9:86:b2: - 9c:16:f8:d6:75:08:8a:db:0a:e5:b4:2b:16:7f:b4:f9:2a:9f: - c3:d2:77:d7:cd:65:1e:f4:6c:1e:eb:59:b9:f0:ae:5f:a4:1f: - cc:4a:c4:b9:7a:a9:d9:6b:32:68:3b:e1:65:b0:84:b7:90:c4: - ae:fe:f4:37:4f:21:a0:de:9f:3a:b1:e5:cc:16:04:66:3f:0b: - 41:dc:42:3d:20:3e:ec:b7:95:2b:35:57:fa:be:7f:b6:3a:ba: - ca:4f:58:fe:75:3e:08:89:2c:8c:b0:5d:2e:f9:89:10:2b:f9: - 41:46:4f:3c:00:b7:27:d3:65:24:28:17:23:26:31:42:ea:7e: - 4e:93:e4:7b:68:54:ca:9f:46:f3:ef:2b:e9:85:0c:b5:84:b2: - d5:35:34:80:75:2b:f0:91:23:b8:08:01:8e:b9:0a:54:d4:fb: - 34:52:fe:d9:45:f0:80:3b:b6:c1:6f:82:d1:1f:f2:3b:08:f6: - 46:a6:96:27:61:4b:58:32:7a:0e:1d:59:c5:44:ad:5e:1a:79: - 33:c1:d4:05:2f:4a:d3:d8:42:42:8d:33:e3:63:ca:d5:87:97: - 9b:4d:b8:1a:03:34:bb:1c:d2:02:3f:59:23:e2:23:80:88:63: - c2:f0:a2:63:a8:8b + 95:f3:56:bb:d5:8c:70:bd:d1:de:da:63:b0:29:d7:db:60:27: + d6:59:fd:61:1b:30:c6:d0:5d:73:7d:34:e1:68:e3:28:a6:89: + e6:60:bd:89:d3:0e:f4:72:ad:72:76:f8:86:21:fd:75:3c:f8: + 6d:be:9c:04:e1:82:03:69:6c:ae:d0:55:ba:5e:f2:ca:f5:0f: + 8e:d6:d9:8d:c8:56:46:f4:f8:ac:74:2a:19:7b:8e:47:70:1f: + fb:fb:bd:69:02:a1:a5:4a:6e:21:1c:04:14:15:55:bf:bf:24: + 43:c8:17:03:be:3e:2c:ea:db:c8:af:1d:fd:52:df:d6:15:49: + 9e:c2:44:69:ef:f1:45:43:83:b2:1e:cf:14:1c:13:3f:fe:9c: + 71:cb:e7:1b:18:56:36:a7:af:44:f1:0b:a1:79:44:46:f9:43: + 46:29:d8:b0:ca:49:4d:65:60:d3:f6:8e:74:bc:62:9e:1e:8d: + 4b:29:9a:b4:0d:f0:a2:77:5b:34:e4:11:2f:a7:25:c5:e5:07: + 76:12:ae:be:75:73:15:e4:0a:7d:53:38:56:3f:79:6d:6e:ca: + ed:80:ab:56:ed:7e:8b:1c:e7:e3:d4:62:30:22:70:e7:29:b2: + 03:3c:fe:fa:3d:f0:36:c0:4d:11:a2:99:d3:29:31:27:b8:c5: + b8:15:a3:3c:4f:9b:73:5e:2b:b2:fb:cb:fd:75:47:b8:17:bd: + 21:d8:e6:c1:b9:ff:73:81:d8:25:08:6d:08:5e:1c:a5:83:50: + de:67:e6:da:d0:8e:5a:d3:f2:2a:b1:3f:b8:80:21:07:6a:71: + 15:6d:05:eb:51:b3:59:8d:d4:15:46:7e:02:a8:13:01:16:99: + bd:03:cc:70:71:2a:23:16:78:af:d1:d5:01:9d:04:b4:63:93: + 9a:04:3a:92:2e:e6:7e:73:93:a5:fe:50:9b:bd:0e:ea:54:86: + 6f:7c:e5:14:77:fe:c2:28:5a:4a:0e:d7:2d:8c:e9:ed:61:29: + b2:53:ff:6c:04:bc -----BEGIN CERTIFICATE----- MIIF8TCCBFmgAwIBAgIJAMstgJlaaVJcMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMMCWxv -Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJ8oLzdB739k -YxZiFukBFGIpyjqYkj0I015p/sDz1MT7DljcZLBLy7OqnkLpB5tnM8256DwdihPA -3zlnfEzTfr9DD0qFBW2H5cMCoz7X17koeRhzGDd3dkjUeBjXvR5qRosG8wM3lQug -U7AizY+3Azaj1yN3mZ9K5a20jr58Kqinz+Xxx6sb2JfYYff2neJbBahNm5id0AD2 -pi/TthZqO5DURJYo+MdgZOcy+7jEjOJsLWZd3Yzq78iM07qDjbpIoVpENZCTHTWA -hX8LIqz0OBmh4weQpm4+plU7E4r4D82uauocWw8iyuznCTtABWO7n9fWySmf9QZC -WYxHAFpBQs6zUVqAD7nhFdTqpQ9bRiaEnjE4HiAccPW+MAoSxFnv/rNzEzI6b4zU -NspFMfg1aNVamdjxdpUZ1GG1Okf0yPJykqEX4PZl3La1Be2q7YZ1wydR523Xd+f3 -EO4/g+imETSKn8gyCf6Rvib175L4r2WV1CXQH7gFwZYCod6WHYq5TQIDAQABo4IB +Y2FsaG9zdDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMW0s615CVCi +M3vO2S7HubSGYYqQ/WGHSFsqpNwPzuOQsCoDBlZ6eNkyMJttne8/4A5sIiRggrM9 +djtiL4fkzc7aZcgPGgcaMv8Za2gTIM1e+b1QL4xG5I6rYxoscdAbRHHZPFxisxVQ +ztv3euk3UsZGsK/WAhJczgS8QmigBHsBp2PSkb+jR+oMB0WMfpBluGfWJmV754Zu +Nx92Af8fQXx2fU88ahWIdeJxuxDiQHrTTY9/5pc/hvZAoBt+XI0cQoc8cQ45NesW +Mx1z5uopbbh6kSwxkjn2rH2FT/hG+nf+/68TBMvs2buKWm3NmfZy8YJbf0sLSc1g +s7OQ7cfzHADvmHq7KR0H5Y7+/YIogr0z9k771A2uZqiR8oNqYKTf1vyGULA0voux +Wm93ddNLlafhhaf3YSqKW1Qkmg+julztVN1YKDjNUWfhDxmHg0U2f+pMHyUQyCuw +1NXlzJnvOGgGJQxI7jluajY2ycTtx78lSGWp7m6HQ9PUwgGBNX6gMwIDAQABo4IB wDCCAbwwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E -FgQUj+od4zNcABazi29rb9NMy7XLfFUwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHK -b5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m +FgQUhXUQJdAsgFAkGltXcN61y3GpO3swfQYDVR0jBHYwdIAUs4qgorpx8agkedSk +WyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29m dHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMst gJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0 Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcw AYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYD VR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0 -Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACf1jFkQ9MbnKAC/ -uo17EwPxHKZfswZVpCK527LVRr33DN1DbrR5ZWchDCpV7kCOhZ+fR7sKKk22ZHSY -oH+u3PEu20J3GOB1iyY1aMNB7WvId3JvappdVWkC/VpUyFfLsGUDFuIPADmZZqCb -iJMX4loteTVfl1d4xK/1mV6Gq9MRrRqiDfpSELn+v53OM9mGspwW+NZ1CIrbCuW0 -KxZ/tPkqn8PSd9fNZR70bB7rWbnwrl+kH8xKxLl6qdlrMmg74WWwhLeQxK7+9DdP -IaDenzqx5cwWBGY/C0HcQj0gPuy3lSs1V/q+f7Y6uspPWP51PgiJLIywXS75iRAr -+UFGTzwAtyfTZSQoFyMmMULqfk6T5HtoVMqfRvPvK+mFDLWEstU1NIB1K/CRI7gI -AY65ClTU+zRS/tlF8IA7tsFvgtEf8jsI9kamlidhS1gyeg4dWcVErV4aeTPB1AUv -StPYQkKNM+NjytWHl5tNuBoDNLsc0gI/WSPiI4CIY8LwomOoiw== +Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAJXzVrvVjHC90d7a +Y7Ap19tgJ9ZZ/WEbMMbQXXN9NOFo4yimieZgvYnTDvRyrXJ2+IYh/XU8+G2+nATh +ggNpbK7QVbpe8sr1D47W2Y3IVkb0+Kx0Khl7jkdwH/v7vWkCoaVKbiEcBBQVVb+/ +JEPIFwO+Pizq28ivHf1S39YVSZ7CRGnv8UVDg7IezxQcEz/+nHHL5xsYVjanr0Tx +C6F5REb5Q0Yp2LDKSU1lYNP2jnS8Yp4ejUspmrQN8KJ3WzTkES+nJcXlB3YSrr51 +cxXkCn1TOFY/eW1uyu2Aq1btfosc5+PUYjAicOcpsgM8/vo98DbATRGimdMpMSe4 +xbgVozxPm3NeK7L7y/11R7gXvSHY5sG5/3OB2CUIbQheHKWDUN5n5trQjlrT8iqx +P7iAIQdqcRVtBetRs1mN1BVGfgKoEwEWmb0DzHBxKiMWeK/R1QGdBLRjk5oEOpIu +5n5zk6X+UJu9DupUhm985RR3/sIoWkoO1y2M6e1hKbJT/2wEvA== -----END CERTIFICATE----- diff --git a/Lib/test/keycert4.pem b/Lib/test/keycert4.pem index d1ebb82486de2..1003d67fd075e 100644 --- a/Lib/test/keycert4.pem +++ b/Lib/test/keycert4.pem @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDGjpiHzq7ghxhM -ZzrnRsGBC/cmw8EREIdbqlrz/l8BFaWeipvO5Hb/MyU8xs2zLUrqIr2JNf+Eii8Y -m4bYmZclFra4jomaiSlxTZOe3dMV8m4vAq4eT2mSfZZC1+XAutqdz7WhHxhMVEm3 -AyTWvTC3qCbnlbX5VIoQUwFrsSWqDiHyaGdK3rrOTKFUKM8YPiq/BZkm6A4eiFci -5wd/SPD+w0pIscZbQW1MUr5bs54uylWaUmtfI8KJt6BDZQ/uA06c6i863sSCEI6L -gq+wyikeJGNMxZMfgu3dzfv4BiZBQX0ZhiRvqseDSdPcuVa2Ifb6CFlg298neweY -4EAIE1O+uqo5h8FF1aUOMZpQEZuzsp9R/TAMBHX1YmVjG/kRdBeaHe3whzB1Pfue -PIX2ZTMmLNYbYbfnmxhk1nn8aAvoT98pNw8y3/2k2KNsu24n9uSkkxAoqJ19WKwm -mL8MpJKAzLv45tRvhN+QLtnRdu+LJ9m29npQHFmYLbdqRfmidnMCAwEAAQKCAYBd -w1C8MRnb5W/QBJ+IP515NxFLOP2e9VM2MkgpGGH8vSAssf/Jv5GCCcD35lmU1zqd -PjKK7PjwueBrmmYfOshpN0Sp+oV4eHUdkCi5yL65inYFtRpMLewIxU2D2zgfvx0l -kMSQhYKP6O22gsGOtmCfGcTlb4kzaHyaINh25nyGxY26TxsX+/3zFbTJbUv+grzk -39vmx4aDXJbpYHfl36gOZmJZ2bl1tnvKovhJjZSRO/MYoPsbPmPLbO89ZCgVmXFc -GVkb5Cram6i3iyutSDjxWN7Fb8uy8pFLPGAXZgF7pQoXPSEHZe8GEWBnWSC9KaDa -uM9Ir847/Muy1ceCmxKcI2WrSjoH2AhPcmHgvbPE9Mynr6+uzReSP3q7Wh9PHm23 -oFx3DwdCfmjysnpAMBawNmJdWyxVDbZ6eyrhp17ADpsMaDTynZ+fJjgMr+MmWtbU -YSRD0wWtl/DrzsaePZsOjCpKYJyulC+rh9/Zz1aiwrGWPbgEAzDrD6Q1Zp0mUCEC -gcEA+XskmGIB9rRPy+YQmRgzQ555PsjLWsnQsNktP6KBhlQjFKJZXRZ0DxDTS7h8 -NrJrUDBmwfsgzggVbeO55VP5FGwD6DNeO/Bz++Fdevh8uKQFHDfk4sbIUPS91qw4 -s7OW7PR7C7Jf7Dnjmsn42o2lO4FsbcEn2F+PHOvoLl/OrSx73lS/RkdOEItW8d8/ -ExRohylnba/I2vCE9bNZd4DGjMW87j/THKPadDZWEqWggcrjY8x6ibSQGm2n2Tka -8B+vAoHBAMu+zl8kqFlYDG24dGfVpMaOYj5Osj0cV5f7O2pZ15sCevjiqoKGHH7G -O8EiI5pRBZ893+Fsx6YWmcKue88lfGvaoQjV0LUbfMfX/FoD39w/ZLx31yKEiFuc -KvMiRV5mO3kQiHBVX9vamzr5NeaErccXY9LnhaKOMX9blgiDQZH7fc3RhodcFWrC -9yfX6ryfidpPnRvK7Ops7hVnFKyyS4FaAarnzH1B2WcVcD4lYYxhMc8VXeU3eKOh -j1fI/F5ifQKBwQDpCjB670HqUzAexL9IYqSwSz3yedoK6m24ZIWx5XicI8fJJIXZ -QHoVAKB/IMtWxH8dnri+Bnj0O/TYe1pQb4pBm0xjAGjMEKYm6LNLhQXr67qiS0vQ -0eKYTKVv+9vTcLRQj2bI3Exh+wkys+tzK9DmrtS8CSvRICIs3+g4OWJzvRPP8NXj -LgQrzBzhPqpKhkvFxdVJTmSOrxFj+a5exLmzEZqT6qanIB+VYpQwQuqVkxGpTX5B -V5ssNLYPYRpapx0CgcByCtQixzcAA1u5knR9pkT76ris3YnA0Ptqk3I3XiBjoGjK -pL0CICUVBMpvmTdKai12a8DDwgqiOaZJJTchxH63NAHNGzkeFkuq5IdYrzB/bHBr -WbzukjZs6KXVv4oKg7ioVAu6rN7iBaO7x8BWzk8i0EHMzFCto1+rRM1e6HEsUBOj -v7LIU0+dmZGUGLRIbhhQPR3Yb6ZatSwyiKc23vmKZqHmUqbQOaqBm6te7beDRugF -XJVY9sqs9IJyhYpVHlUCgcAPoslwYKeAXagsxdQrH3D9VJDXVOHWKMBqQZDio5dB -Q80uWpuxtt6nhZkQO1JIWnYb6v+zbDbcgjByBIDuxCdBW9d+QQnanKmVyrXguK91 -C3OcHHOmSduFdWC3/zYW1mW97Tz1sXyam2hly1u3L5kW+GnE1hr9VVPjQNrO9+Ge -qW0coaJqKY78q3Rm2dtyZeJSFFI1o/DQ3blyItsFpg/QrR+a5XrS6Nw2ZLIL4Azo -J1CTgMwjhwlMNCI4t4dkHd0= +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQC34y3S6iXdmdvd +M/2aFBe6CvRvZwhh1huGl7IQRtdoakPqMLlEdNHJtNeF5M27xLei+p4wt7N1Jyi0 +2keHQb1m9TqH5AruOkE2ti+15zEoKoU9aWydTiH+epKTT0yjg2NcKQjRUaWcbhzB +H4EMKuCIlzIIz8/EIKkOqhCDwq6+Fv3Ays+z7Bz+yR80ixivKu/l7SjxQ7z7R/kC +I7OViRcIO5QBQPj7VLvCTz4VA6u/LdXngK2HNuau6WXm5yNNQbqrB11AEJcYZf/c +VrneV4F+ZjLloAKgSn9GB8eWOyilTQ18TcKd+H2icipRaP/+QR/KPx5GK/SXU3my +qm62QOGI7t/5ktVdjGhs6tHZxw1SRiipiLYWbtVRrSxa4wYlgpgoUwvrvvtC5kAN +nTw1VGWsxcs+6a7+PocYnJiq7k4b5OAUb3Ryvl9DLAMy8NqpRWo4cHD/XQ3FCYwF +HlOSgx/dL5Se0i3dW1KzbP6OvaNg6nl/1EXPUsJ1ATS8nzvzhccCAwEAAQKCAYEA +nD3GvaJ9MeB802JNZBEWZ9jO/6jHknldQeq6POI0PF+t/NoRUH0BkyS4yucxdw0a +CrxulG5BaJUxHRkqFV5iE4zhgnzcXLXamyYJO8GIHtyiASAGTVIJyDNVPxztvTDx +x2iGOXPqBxP4Eo82EqSLywLMXHhVzAsEGZWeGpXb61+Vk62+9Nz1dfZlMTvOaWdO +Fkp/sx8e/1KT3KGBANlOXIxioP4Xj1Tbg6nY0fogf3vud5j52B1pu8xL7PkPIaFq +DEGz3XvWhBF/+Cs5iDeYz8eQpfQig7HdHVn2D8dZmzQgpLw1yGbPAnqrgopWfm7R +MqiyFe82p2t+vfSoG5jz28XxPtzBJV3ljxKxlbnclqu/CAYSjzaYohDzyhjdZOZI +r9DOfWOqu01Ha3EEsApn95fusHHGTH2FOy0u61FSTrfLfqsLw9WRJPWleirKikhf +SZzi223QrmzZMtuCF7VgTx3ghDhBmFD8uzVVQ1SwPZ8CgftRkFcn1llXIAfJ3iHB +AoHBAOg3DOIdtUVgpjMKhpAyuH54fYvGl7afIMNbKRle0kCiP45wtGJ43RPMqiR8 +1rxZB3+iapICI/lnhk3O7vVRkR64yiqQBcl/hXZ1BhyD6iDXWYmm5mcnymcoqfwc +p9TfzEPyGPb3SM2YlI0cSPRqM/jDvGvnDeKIpzEKvUlwJ59WoN2HOHTIXf+XbN5n +unpuTt6YKJvc48DrXsPnUzkCmUfbOmgHfeb9/qBs/8kY4YJMsZEjqf88o7mCJCIy +BtDxTwKBwQDKuOwE8e0GIA01ZHd6RfR+ZCvmp2oauxal4EJsBx+ZZnhEWGaSm1fE +Bf/ih074ghcSKoSrdYpD1xGZ6fGVWMx3jcL11yLDOUiiPDJsm8hUBZ0IW1qXyfCP +l7xy1bUkWwPXdmFuGp1exrcjooKrFNuTdYiK4nQZSKuCfXQRADrmEJmM+gYwhqI7 +4XsYo848B9A4hbY6RLEox4uvo/RmafY0iR0PMhVEc+ydNLKB/4LpahZqBQ4kTpMv +o4+rEvYt1gkCgcB08gx177ozx1nMCLf99N0/LBUmCIytNvR8DfPjyAIg9NUHOjFO +CkpkR0VEfO50Cm4hVD1RbOyLFRzpIJbtSvfHvg5qYv/XG3auUn8Sa0jE408/aKNO +PhbL3wnEYvYO2ep4KXtzHNQ4XmgprJ39IWMtG/5PZRx0ApgYtazgSDBcKXd4OTow +bhwQtUTpuNmMAPONXJnO7O5yYNbn2B7sbiedrYV7kJJSe4X5awtiTjp7sX4XdxuM +5BAcQ7NI2WLfZTcCgcBp/X9hIoATmMRvKwUQx+yJ/KO7Z8KhETpJJdR0mNDbqmit +Cy8t7cxYb+6WqLoQUivv0o0k/EJ7L8JDH76woAnfZB4P3RiOy69/K0wN3vFBhOHS +kbju7aU53lKoE7YuuOtsRrewEng/KlRsbDY3bqNTGLt4KegbpBQQGLmLffxNd1Zh +EAQWcP33ou9yNYrJdihWtQpOssWRlash/O32ceZJF3s7C6t068tFclz2fPocQdxQ +OC5pqy9nU/P0tOhDlMkCgcEAosaBJLIeAYlOU0+2uSx5g5mIqOOTyrDEmqqad6T/ +wkB7vW2QaoDvLL22Yrzdn9vQ0V0rqzhVtan7sq5pn/BQJAueZYN8rFxS3uuW+UQk +Nsc4GLJzU8Az/2DvqEIrnE7zRc5E1FOI9gKLrBlpJB2o0hVcBznDe05Gax6Kjqbm +jHqzyU73SpxpEy3OesClCeCQIMr47HaL9aSqaEX4U9bMpgHi0HgTTHqvJ5pch0hY +dYl+WAE9LAyF1DF29BirEXVw -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5d - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=fakehostname Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:c6:8e:98:87:ce:ae:e0:87:18:4c:67:3a:e7:46: - c1:81:0b:f7:26:c3:c1:11:10:87:5b:aa:5a:f3:fe: - 5f:01:15:a5:9e:8a:9b:ce:e4:76:ff:33:25:3c:c6: - cd:b3:2d:4a:ea:22:bd:89:35:ff:84:8a:2f:18:9b: - 86:d8:99:97:25:16:b6:b8:8e:89:9a:89:29:71:4d: - 93:9e:dd:d3:15:f2:6e:2f:02:ae:1e:4f:69:92:7d: - 96:42:d7:e5:c0:ba:da:9d:cf:b5:a1:1f:18:4c:54: - 49:b7:03:24:d6:bd:30:b7:a8:26:e7:95:b5:f9:54: - 8a:10:53:01:6b:b1:25:aa:0e:21:f2:68:67:4a:de: - ba:ce:4c:a1:54:28:cf:18:3e:2a:bf:05:99:26:e8: - 0e:1e:88:57:22:e7:07:7f:48:f0:fe:c3:4a:48:b1: - c6:5b:41:6d:4c:52:be:5b:b3:9e:2e:ca:55:9a:52: - 6b:5f:23:c2:89:b7:a0:43:65:0f:ee:03:4e:9c:ea: - 2f:3a:de:c4:82:10:8e:8b:82:af:b0:ca:29:1e:24: - 63:4c:c5:93:1f:82:ed:dd:cd:fb:f8:06:26:41:41: - 7d:19:86:24:6f:aa:c7:83:49:d3:dc:b9:56:b6:21: - f6:fa:08:59:60:db:df:27:7b:07:98:e0:40:08:13: - 53:be:ba:aa:39:87:c1:45:d5:a5:0e:31:9a:50:11: - 9b:b3:b2:9f:51:fd:30:0c:04:75:f5:62:65:63:1b: - f9:11:74:17:9a:1d:ed:f0:87:30:75:3d:fb:9e:3c: - 85:f6:65:33:26:2c:d6:1b:61:b7:e7:9b:18:64:d6: - 79:fc:68:0b:e8:4f:df:29:37:0f:32:df:fd:a4:d8: - a3:6c:bb:6e:27:f6:e4:a4:93:10:28:a8:9d:7d:58: - ac:26:98:bf:0c:a4:92:80:cc:bb:f8:e6:d4:6f:84: - df:90:2e:d9:d1:76:ef:8b:27:d9:b6:f6:7a:50:1c: - 59:98:2d:b7:6a:45:f9:a2:76:73 + 00:b7:e3:2d:d2:ea:25:dd:99:db:dd:33:fd:9a:14: + 17:ba:0a:f4:6f:67:08:61:d6:1b:86:97:b2:10:46: + d7:68:6a:43:ea:30:b9:44:74:d1:c9:b4:d7:85:e4: + cd:bb:c4:b7:a2:fa:9e:30:b7:b3:75:27:28:b4:da: + 47:87:41:bd:66:f5:3a:87:e4:0a:ee:3a:41:36:b6: + 2f:b5:e7:31:28:2a:85:3d:69:6c:9d:4e:21:fe:7a: + 92:93:4f:4c:a3:83:63:5c:29:08:d1:51:a5:9c:6e: + 1c:c1:1f:81:0c:2a:e0:88:97:32:08:cf:cf:c4:20: + a9:0e:aa:10:83:c2:ae:be:16:fd:c0:ca:cf:b3:ec: + 1c:fe:c9:1f:34:8b:18:af:2a:ef:e5:ed:28:f1:43: + bc:fb:47:f9:02:23:b3:95:89:17:08:3b:94:01:40: + f8:fb:54:bb:c2:4f:3e:15:03:ab:bf:2d:d5:e7:80: + ad:87:36:e6:ae:e9:65:e6:e7:23:4d:41:ba:ab:07: + 5d:40:10:97:18:65:ff:dc:56:b9:de:57:81:7e:66: + 32:e5:a0:02:a0:4a:7f:46:07:c7:96:3b:28:a5:4d: + 0d:7c:4d:c2:9d:f8:7d:a2:72:2a:51:68:ff:fe:41: + 1f:ca:3f:1e:46:2b:f4:97:53:79:b2:aa:6e:b6:40: + e1:88:ee:df:f9:92:d5:5d:8c:68:6c:ea:d1:d9:c7: + 0d:52:46:28:a9:88:b6:16:6e:d5:51:ad:2c:5a:e3: + 06:25:82:98:28:53:0b:eb:be:fb:42:e6:40:0d:9d: + 3c:35:54:65:ac:c5:cb:3e:e9:ae:fe:3e:87:18:9c: + 98:aa:ee:4e:1b:e4:e0:14:6f:74:72:be:5f:43:2c: + 03:32:f0:da:a9:45:6a:38:70:70:ff:5d:0d:c5:09: + 8c:05:1e:53:92:83:1f:dd:2f:94:9e:d2:2d:dd:5b: + 52:b3:6c:fe:8e:bd:a3:60:ea:79:7f:d4:45:cf:52: + c2:75:01:34:bc:9f:3b:f3:85:c7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: @@ -90,9 +90,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 52:E0:93:AA:52:55:B7:BB:E7:A8:E0:8C:DE:41:2E:F4:07:F0:36:FB + C8:BD:A8:B4:C0:F2:32:10:73:47:9C:48:81:32:F8:BA:BB:26:84:97 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -106,59 +106,59 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 29:d2:3f:82:3f:c1:38:35:a6:bd:81:10:fe:64:ec:ff:7e:e1: - c6:6f:7f:86:65:f9:31:6f:fb:ef:32:4e:2f:87:c8:42:de:6c: - 8d:b8:06:08:8f:37:70:95:7d:e1:40:d4:82:2b:8d:b3:4a:fd: - 34:c5:9e:df:ff:01:53:4a:4f:08:f4:58:e1:74:fc:78:e3:3e: - 71:a7:5e:66:07:ea:d2:04:31:e2:75:a8:4c:80:17:86:92:20: - d2:32:a7:9a:65:8b:1a:5f:f1:4c:c8:50:6d:00:fc:99:bf:69: - b3:48:f3:45:5a:ee:35:50:14:b8:f3:92:92:c6:9f:0e:5d:eb: - 0d:e8:ec:f2:a4:09:6b:dc:66:2b:fc:df:4c:fc:65:a1:ae:d3: - b5:88:6a:a4:e7:08:1c:94:49:e0:b8:c1:04:8c:21:09:6c:55: - 4b:2c:97:10:f1:8c:6c:d0:bb:ba:8d:93:e8:47:8b:4d:8e:7d: - 7d:85:53:18:c8:f8:f4:8f:67:3a:b1:aa:3e:18:34:6c:3a:e6: - a6:c7:2f:be:83:38:f5:d5:e5:d2:17:28:61:6c:b6:49:99:21: - 69:a4:a8:b6:94:76:fd:18:ad:35:52:45:64:fb:f1:5d:8e:bb: - c0:21:2e:59:55:24:af:bb:8f:b2:0a:7b:17:f0:34:97:8e:68: - a9:f2:d0:3e:f6:73:82:f8:7c:4e:9a:70:7d:d6:b3:8c:cc:85: - 04:5c:02:8f:74:da:88:3a:20:a8:7e:c2:9e:b0:dd:56:1f:ce: - cd:42:16:c6:14:91:ad:30:e0:dc:76:f2:2c:56:ea:38:45:d8: - c0:3e:b8:90:fa:f3:38:99:ec:44:07:35:8f:69:62:0c:f9:ef: - b7:9d:e5:15:42:6e:fb:fe:4c:ff:e8:94:5a:1a:b0:80:b2:0e: - 17:3d:e1:87:a8:08:84:93:74:68:8d:29:df:ca:0b:6a:44:32: - 8a:51:3b:d6:38:db:bd:e3:2a:1b:5e:20:48:81:82:19:91:c6: - 87:8c:0f:cd:51:ea + 76:87:76:4d:e4:0f:88:bf:2c:f3:58:67:c0:97:6c:cd:59:18: + 82:83:4c:04:19:a5:6d:aa:fa:64:3d:49:32:3e:e1:56:95:b2: + 13:f7:cf:d3:11:b0:72:b7:5b:e7:d7:85:69:51:3c:b6:54:80: + 45:2f:28:10:21:20:b9:ba:e9:27:5a:b7:3f:82:b7:69:f5:46: + f5:bf:a2:8b:17:7f:f2:14:d1:46:97:b5:8b:47:fb:9f:e8:5c: + 05:0e:9d:11:bd:7c:9a:03:84:0b:ca:29:66:4a:ca:0d:6f:09: + 1e:7a:27:c1:7f:03:96:70:8d:18:a5:2f:a4:98:a5:19:aa:8c: + 5d:1e:8c:3e:bb:6d:3b:c0:33:c0:15:e1:bd:09:3d:9f:e8:dc: + 12:d4:cb:44:1d:06:f5:e8:d6:4e:a1:2d:5c:9f:5d:1f:5b:2a: + c3:4d:40:8d:da:d1:78:80:d0:c6:31:72:10:48:8a:e9:10:7a: + 13:30:11:b2:9e:67:0e:ed:a1:aa:ec:73:2d:f0:b8:8a:22:75: + 0f:30:69:5c:50:7e:91:ce:da:91:c7:70:8c:65:ff:f6:58:fb: + 00:bd:45:cc:e2:e4:e3:e5:16:36:7d:f3:a2:4a:9c:45:ff:d9: + a5:16:e0:2f:b5:5b:6c:e6:8a:13:15:48:73:bd:7c:80:33:c3: + d4:3b:3a:1d:85:0e:a4:f7:f7:fb:48:0c:e9:a0:4b:5e:8a:5c: + 67:f8:25:02:6f:cd:72:c1:aa:5a:93:64:7c:14:20:43:e0:13: + 7f:0d:e1:0d:61:5e:2e:2c:cd:7a:2e:2a:ae:b6:75:6a:5f:a0: + 1a:9b:b6:67:2d:b0:a5:1c:54:bc:8c:70:7e:15:2b:c0:50:e3: + 03:bb:a4:a5:fc:45:01:c9:3f:a7:b8:18:dc:3e:08:07:a1:9b: + f5:bd:95:bd:49:e8:10:7c:91:7d:2d:c4:c2:98:b6:b7:51:69: + d7:0a:68:40:b5:0f:85:a0:a9:67:77:c6:68:cb:0e:58:34:b3: + 58:e7:c8:7c:09:67 -----BEGIN CERTIFICATE----- MIIF9zCCBF+gAwIBAgIJAMstgJlaaVJdMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGIxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDGZh -a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMaOmIfO -ruCHGExnOudGwYEL9ybDwREQh1uqWvP+XwEVpZ6Km87kdv8zJTzGzbMtSuoivYk1 -/4SKLxibhtiZlyUWtriOiZqJKXFNk57d0xXybi8Crh5PaZJ9lkLX5cC62p3PtaEf -GExUSbcDJNa9MLeoJueVtflUihBTAWuxJaoOIfJoZ0reus5MoVQozxg+Kr8FmSbo -Dh6IVyLnB39I8P7DSkixxltBbUxSvluzni7KVZpSa18jwom3oENlD+4DTpzqLzre -xIIQjouCr7DKKR4kY0zFkx+C7d3N+/gGJkFBfRmGJG+qx4NJ09y5VrYh9voIWWDb -3yd7B5jgQAgTU766qjmHwUXVpQ4xmlARm7Oyn1H9MAwEdfViZWMb+RF0F5od7fCH -MHU9+548hfZlMyYs1htht+ebGGTWefxoC+hP3yk3DzLf/aTYo2y7bif25KSTECio -nX1YrCaYvwykkoDMu/jm1G+E35Au2dF274sn2bb2elAcWZgtt2pF+aJ2cwIDAQAB +a2Vob3N0bmFtZTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALfjLdLq +Jd2Z290z/ZoUF7oK9G9nCGHWG4aXshBG12hqQ+owuUR00cm014XkzbvEt6L6njC3 +s3UnKLTaR4dBvWb1OofkCu46QTa2L7XnMSgqhT1pbJ1OIf56kpNPTKODY1wpCNFR +pZxuHMEfgQwq4IiXMgjPz8QgqQ6qEIPCrr4W/cDKz7PsHP7JHzSLGK8q7+XtKPFD +vPtH+QIjs5WJFwg7lAFA+PtUu8JPPhUDq78t1eeArYc25q7pZebnI01BuqsHXUAQ +lxhl/9xWud5XgX5mMuWgAqBKf0YHx5Y7KKVNDXxNwp34faJyKlFo//5BH8o/HkYr +9JdTebKqbrZA4Yju3/mS1V2MaGzq0dnHDVJGKKmIthZu1VGtLFrjBiWCmChTC+u+ ++0LmQA2dPDVUZazFyz7prv4+hxicmKruThvk4BRvdHK+X0MsAzLw2qlFajhwcP9d +DcUJjAUeU5KDH90vlJ7SLd1bUrNs/o69o2DqeX/URc9SwnUBNLyfO/OFxwIDAQAB o4IBwzCCAb8wFwYDVR0RBBAwDoIMZmFrZWhvc3RuYW1lMA4GA1UdDwEB/wQEAwIF oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd -BgNVHQ4EFgQUUuCTqlJVt7vnqOCM3kEu9AfwNvswfQYDVR0jBHYwdIAU3b/K2ubR -NLo3dSHKb5oIKPI1tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo +BgNVHQ4EFgQUyL2otMDyMhBzR5xIgTL4ursmhJcwfQYDVR0jBHYwdIAUs4qgorpx +8agkedSkWyU2FR5JyM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRo b24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZl coIJAMstgJlaaVJbMIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6 Ly90ZXN0Y2EucHl0aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1Bggr BgEFBQcwAYYpaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2Nz cC8wQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5l -dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBACnSP4I/ -wTg1pr2BEP5k7P9+4cZvf4Zl+TFv++8yTi+HyELebI24BgiPN3CVfeFA1IIrjbNK -/TTFnt//AVNKTwj0WOF0/HjjPnGnXmYH6tIEMeJ1qEyAF4aSINIyp5plixpf8UzI -UG0A/Jm/abNI80Va7jVQFLjzkpLGnw5d6w3o7PKkCWvcZiv830z8ZaGu07WIaqTn -CByUSeC4wQSMIQlsVUsslxDxjGzQu7qNk+hHi02OfX2FUxjI+PSPZzqxqj4YNGw6 -5qbHL76DOPXV5dIXKGFstkmZIWmkqLaUdv0YrTVSRWT78V2Ou8AhLllVJK+7j7IK -exfwNJeOaKny0D72c4L4fE6acH3Ws4zMhQRcAo902og6IKh+wp6w3VYfzs1CFsYU -ka0w4Nx28ixW6jhF2MA+uJD68ziZ7EQHNY9pYgz577ed5RVCbvv+TP/olFoasICy -Dhc94YeoCISTdGiNKd/KC2pEMopRO9Y4273jKhteIEiBghmRxoeMD81R6g== +dC90ZXN0Y2EvcmV2b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHaHdk3k +D4i/LPNYZ8CXbM1ZGIKDTAQZpW2q+mQ9STI+4VaVshP3z9MRsHK3W+fXhWlRPLZU +gEUvKBAhILm66Sdatz+Ct2n1RvW/oosXf/IU0UaXtYtH+5/oXAUOnRG9fJoDhAvK +KWZKyg1vCR56J8F/A5ZwjRilL6SYpRmqjF0ejD67bTvAM8AV4b0JPZ/o3BLUy0Qd +BvXo1k6hLVyfXR9bKsNNQI3a0XiA0MYxchBIiukQehMwEbKeZw7toarscy3wuIoi +dQ8waVxQfpHO2pHHcIxl//ZY+wC9Rczi5OPlFjZ986JKnEX/2aUW4C+1W2zmihMV +SHO9fIAzw9Q7Oh2FDqT39/tIDOmgS16KXGf4JQJvzXLBqlqTZHwUIEPgE38N4Q1h +Xi4szXouKq62dWpfoBqbtmctsKUcVLyMcH4VK8BQ4wO7pKX8RQHJP6e4GNw+CAeh +m/W9lb1J6BB8kX0txMKYtrdRadcKaEC1D4WgqWd3xmjLDlg0s1jnyHwJZw== -----END CERTIFICATE----- diff --git a/Lib/test/keycertecc.pem b/Lib/test/keycertecc.pem index 02eda2835f07a..81daa4ccb9421 100644 --- a/Lib/test/keycertecc.pem +++ b/Lib/test/keycertecc.pem @@ -1,31 +1,31 @@ -----BEGIN PRIVATE KEY----- -MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBL2Y5JfpzbgHw+t4Q+ -c5SHhsZcD9ylEtUMg7OyF9xW6j+3VIVORGaokcOtE0Z2Y5ehZANiAASzz/rInKUz -onpxP5bLxmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fB -ihQTJkXyBMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FM= +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBcNwE+cm17mmr7Yg6d +0DNCnheGFOjkYH4tYzTyCkcZGShkmF/tKhIqb3imKz0Kx9+hZANiAATyp8ws6CuN +OI2/3MC4jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoG +JJYHhZNQXEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQAQ= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5e - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Jul 7 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost-ecc Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: - 04:b3:cf:fa:c8:9c:a5:33:a2:7a:71:3f:96:cb:c6: - 6a:bc:7e:6a:ed:81:14:92:d2:34:4f:50:e5:35:e9: - 72:97:f8:ab:62:7e:72:db:98:b1:d0:b4:fa:dc:b5: - d9:11:45:13:82:c6:75:11:cf:67:c1:8a:14:13:26: - 45:f2:04:c4:ac:c0:d4:d1:0a:cf:b8:0d:42:9b:30: - 07:e2:86:28:0c:55:88:1d:59:b6:4f:14:10:e5:7a: - 8e:5a:78:5c:38:fc:53 + 04:f2:a7:cc:2c:e8:2b:8d:38:8d:bf:dc:c0:b8:8d: + 95:52:92:6a:03:ce:6f:d7:fd:9a:e4:12:6e:13:54: + 72:8f:49:9e:a4:cd:94:69:9a:65:25:2d:2f:65:ed: + 24:19:48:b6:32:0c:01:41:17:3a:06:24:96:07:85: + 93:50:5c:43:bb:1c:5b:33:9f:a2:a7:bc:b8:e1:c1: + 2e:9d:77:39:5a:1c:fc:e2:12:49:eb:4a:bd:0e:2a: + 12:66:74:91:eb:40:04 ASN1 OID: secp384r1 NIST CURVE: P-384 X509v3 extensions: @@ -38,9 +38,9 @@ Certificate: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - C6:82:22:BF:4F:3D:40:AD:9B:16:AD:E7:C5:ED:C4:82:EB:35:97:98 + 79:11:98:86:15:4F:48:F4:31:0B:D2:CC:C8:26:3A:09:07:5D:96:40 X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD DirName:/C=XY/O=Python Software Foundation CA/CN=our-ca-server serial:CB:2D:80:99:5A:69:52:5B @@ -54,53 +54,53 @@ Certificate: URI:http://testca.pythontest.net/testca/revocation.crl Signature Algorithm: sha256WithRSAEncryption - 76:e3:19:4d:34:78:50:3e:fa:63:53:d6:3f:01:87:e8:f4:a3: - a9:81:5b:31:d6:de:3a:98:f3:bb:70:4d:29:35:1f:b0:6a:b3: - 9d:bf:03:2b:79:c4:f2:0b:32:f8:fc:f6:cb:13:47:28:81:fa: - 96:b3:1a:1d:bd:4b:f6:35:df:87:ef:6e:74:63:87:3d:7e:2b: - c6:78:d4:8e:ef:03:e6:01:11:22:4e:1b:ef:2c:c1:c5:4e:3f: - 4a:07:ae:92:ef:d3:ac:79:59:7c:60:89:4b:3d:39:08:ef:c4: - 9a:dc:b0:8b:ee:5f:30:40:d3:c2:f3:f8:90:77:9d:8c:a7:07: - b9:5f:62:83:4d:37:fa:36:e1:1d:26:2b:cc:8f:7c:6f:f1:23: - 87:71:48:40:ad:6b:30:16:47:4c:d7:98:bb:f5:9b:63:c8:66: - 47:65:58:d2:c1:07:81:14:0c:25:20:87:b9:1d:ab:0b:56:db: - 2c:ab:36:db:7f:c7:42:52:af:91:d6:fb:18:cf:94:f7:1e:25: - 99:ce:20:78:c6:f8:69:6e:9c:53:f3:fe:90:3e:4d:ca:d5:d6: - ac:6e:02:17:be:4a:0f:fe:e6:14:d4:ce:25:df:17:8f:6f:b9: - d3:28:dc:b4:98:ef:05:6f:eb:20:14:1c:c1:e9:9d:02:7b:0e: - 0f:e4:a8:bc:3b:62:e0:42:0c:b0:f7:a1:63:fe:98:d7:aa:b0: - f6:ed:ff:ab:4f:1a:9a:8f:eb:f0:86:61:d2:d3:a5:08:d0:db: - e4:d6:a9:0e:ec:08:6f:af:fb:ef:73:3f:47:69:97:90:b2:5a: - 6f:31:66:a7:4c:32:0c:e9:ea:18:ce:a9:79:9c:f5:c4:42:f5: - 68:53:b2:a4:8c:98:3f:97:34:62:61:41:0a:54:d7:0b:cd:33: - c8:62:62:da:f7:07:c6:c6:3b:fa:68:ca:5f:62:3e:57:db:bd: - cb:16:94:07:9a:b5:31:55:b8:f8:cb:b0:7f:a0:d1:82:df:71: - c8:90:60:b3:88:b0 + 6e:42:e8:a2:2d:28:14:e3:25:5c:c1:7e:54:e9:3a:ff:30:db: + 94:ba:b2:f6:5f:ae:9a:c1:90:b3:4f:ce:65:1d:84:64:c0:71: + 2c:44:8e:7e:00:79:f5:8c:4a:1d:34:13:44:de:99:2e:db:53: + ee:ec:74:97:4d:59:1a:09:82:4f:98:75:91:a7:a0:b9:da:5e: + 68:f5:32:85:be:36:3d:83:d4:ee:f9:87:67:31:85:41:53:9a: + e7:05:96:13:1c:88:2e:7f:33:b1:ee:bd:f9:50:52:24:ed:3d: + 92:95:6e:30:c3:af:74:a9:ee:15:bb:da:7c:14:50:8e:e3:99: + ea:ba:b4:37:8a:50:61:26:de:01:93:b8:a2:6b:d9:c7:38:5e: + b2:f8:96:3d:a8:9f:7d:0c:71:d4:7e:cc:a0:57:af:7e:ce:3f: + a7:a7:27:68:c1:28:d7:4f:44:c1:b4:93:c3:c7:35:2b:50:c3: + 8e:2c:d0:46:c1:3f:e1:67:d3:f0:81:ae:f3:5c:3e:4f:d5:a8: + 07:8f:e0:eb:ef:d8:dc:47:e0:3d:58:eb:de:0e:7f:b2:58:cb: + 5c:f1:2f:65:7e:0f:0d:cc:ca:ba:83:53:63:bc:dd:18:0c:ee: + ed:ec:96:88:d0:38:c5:d7:ab:e7:55:79:7b:6d:ba:c0:a0:e9: + 5c:ca:7c:fb:f8:70:c7:fb:f5:b2:b5:74:cb:f7:c0:0d:20:9f: + 1d:b7:4c:bf:8a:8d:cd:e3:bc:4e:30:78:02:12:a0:9b:d5:8f: + 49:3c:95:91:76:6e:7c:54:dc:61:7a:2e:20:ed:35:25:e0:c5: + 17:50:02:83:00:74:8f:f0:1c:97:96:08:fc:2e:63:a4:f7:97: + 87:43:2a:32:04:2d:4c:f9:1a:07:bf:68:91:fc:50:21:a1:3c: + 8d:8f:fb:83:57:83:1f:b6:55:5c:55:2f:58:64:ad:f3:27:ba: + d0:e3:cd:58:01:a3:c9:ba:1d:95:dc:30:d5:af:b9:20:ad:d9: + 48:ba:8d:9a:66:ee -----BEGIN CERTIFICATE----- MIIEyzCCAzOgAwIBAgIJAMstgJlaaVJeMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA3MDcx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaMGMxCzAJBgNVBAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEj MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFjAUBgNVBAMMDWxv -Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASzz/rInKUzonpxP5bL -xmq8fmrtgRSS0jRPUOU16XKX+KtifnLbmLHQtPrctdkRRROCxnURz2fBihQTJkXy -BMSswNTRCs+4DUKbMAfihigMVYgdWbZPFBDleo5aeFw4/FOjggHEMIIBwDAYBgNV +Y2FsaG9zdC1lY2MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATyp8ws6CuNOI2/3MC4 +jZVSkmoDzm/X/ZrkEm4TVHKPSZ6kzZRpmmUlLS9l7SQZSLYyDAFBFzoGJJYHhZNQ +XEO7HFszn6KnvLjhwS6ddzlaHPziEknrSr0OKhJmdJHrQASjggHEMIIBwDAYBgNV HREEETAPgg1sb2NhbGhvc3QtZWNjMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU -BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUxoIi -v089QK2bFq3nxe3Egus1l5gwfQYDVR0jBHYwdIAU3b/K2ubRNLo3dSHKb5oIKPI1 -tkihUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg +BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUeRGY +hhVPSPQxC9LMyCY6CQddlkAwfQYDVR0jBHYwdIAUs4qgorpx8agkedSkWyU2FR5J +yM2hUaRPME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcoIJAMstgJlaaVJb MIGDBggrBgEFBQcBAQR3MHUwPAYIKwYBBQUHMAKGMGh0dHA6Ly90ZXN0Y2EucHl0 aG9udGVzdC5uZXQvdGVzdGNhL3B5Y2FjZXJ0LmNlcjA1BggrBgEFBQcwAYYpaHR0 cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2Evb2NzcC8wQwYDVR0fBDww OjA4oDagNIYyaHR0cDovL3Rlc3RjYS5weXRob250ZXN0Lm5ldC90ZXN0Y2EvcmV2 -b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAHbjGU00eFA++mNT1j8Bh+j0 -o6mBWzHW3jqY87twTSk1H7Bqs52/Ayt5xPILMvj89ssTRyiB+pazGh29S/Y134fv -bnRjhz1+K8Z41I7vA+YBESJOG+8swcVOP0oHrpLv06x5WXxgiUs9OQjvxJrcsIvu -XzBA08Lz+JB3nYynB7lfYoNNN/o24R0mK8yPfG/xI4dxSECtazAWR0zXmLv1m2PI -ZkdlWNLBB4EUDCUgh7kdqwtW2yyrNtt/x0JSr5HW+xjPlPceJZnOIHjG+GlunFPz -/pA+TcrV1qxuAhe+Sg/+5hTUziXfF49vudMo3LSY7wVv6yAUHMHpnQJ7Dg/kqLw7 -YuBCDLD3oWP+mNeqsPbt/6tPGpqP6/CGYdLTpQjQ2+TWqQ7sCG+v++9zP0dpl5Cy -Wm8xZqdMMgzp6hjOqXmc9cRC9WhTsqSMmD+XNGJhQQpU1wvNM8hiYtr3B8bGO/po -yl9iPlfbvcsWlAeatTFVuPjLsH+g0YLfcciQYLOIsA== +b2NhdGlvbi5jcmwwDQYJKoZIhvcNAQELBQADggGBAG5C6KItKBTjJVzBflTpOv8w +25S6svZfrprBkLNPzmUdhGTAcSxEjn4AefWMSh00E0TemS7bU+7sdJdNWRoJgk+Y +dZGnoLnaXmj1MoW+Nj2D1O75h2cxhUFTmucFlhMciC5/M7HuvflQUiTtPZKVbjDD +r3Sp7hW72nwUUI7jmeq6tDeKUGEm3gGTuKJr2cc4XrL4lj2on30McdR+zKBXr37O +P6enJ2jBKNdPRMG0k8PHNStQw44s0EbBP+Fn0/CBrvNcPk/VqAeP4Ovv2NxH4D1Y +694Of7JYy1zxL2V+Dw3MyrqDU2O83RgM7u3slojQOMXXq+dVeXttusCg6VzKfPv4 +cMf79bK1dMv3wA0gnx23TL+Kjc3jvE4weAISoJvVj0k8lZF2bnxU3GF6LiDtNSXg +xRdQAoMAdI/wHJeWCPwuY6T3l4dDKjIELUz5Gge/aJH8UCGhPI2P+4NXgx+2VVxV +L1hkrfMnutDjzVgBo8m6HZXcMNWvuSCt2Ui6jZpm7g== -----END CERTIFICATE----- diff --git a/Lib/test/make_ssl_certs.py b/Lib/test/make_ssl_certs.py index 41b5f46c882ca..c62896f861dab 100644 --- a/Lib/test/make_ssl_certs.py +++ b/Lib/test/make_ssl_certs.py @@ -7,6 +7,9 @@ import tempfile from subprocess import * +startdate = "20180829142316Z" +enddate = "20371028142316Z" + req_template = """ [ default ] base_url = http://testca.pythontest.net/testca @@ -21,6 +24,8 @@ O = Python Software Foundation CN = {hostname} + [req_x509_extensions_nosan] + [req_x509_extensions_simple] subjectAltName = @san @@ -70,8 +75,12 @@ database = $dir/index.txt crlnumber = $dir/crl.txt default_md = sha256 - default_days = 3600 - default_crl_days = 3600 + startdate = {startdate} + default_startdate = {startdate} + enddate = {enddate} + default_enddate = {enddate} + default_days = 7000 + default_crl_days = 7000 certificate = pycacert.pem private_key = pycakey.pem serial = $dir/serial @@ -116,10 +125,15 @@ def make_cert_key(hostname, sign=False, extra_san='', tempnames.append(f.name) req_file, cert_file, key_file = tempnames try: - req = req_template.format(hostname=hostname, extra_san=extra_san) + req = req_template.format( + hostname=hostname, + extra_san=extra_san, + startdate=startdate, + enddate=enddate + ) with open(req_file, 'w') as f: f.write(req) - args = ['req', '-new', '-days', '3650', '-nodes', + args = ['req', '-new', '-nodes', '-days', '7000', '-newkey', key, '-keyout', key_file, '-extensions', ext, '-config', req_file] @@ -168,19 +182,30 @@ def make_ca(): f.write("00") with open(os.path.join('cadir','index.txt.attr'),'w+') as f: f.write('unique_subject = no') + # random start value for serial numbers + with open(os.path.join('cadir','serial'), 'w') as f: + f.write('CB2D80995A69525B\n') with tempfile.NamedTemporaryFile("w") as t: - t.write(req_template.format(hostname='our-ca-server', extra_san='')) + req = req_template.format( + hostname='our-ca-server', + extra_san='', + startdate=startdate, + enddate=enddate + ) + t.write(req) t.flush() with tempfile.NamedTemporaryFile() as f: - args = ['req', '-new', '-days', '3650', '-extensions', 'v3_ca', '-nodes', - '-newkey', 'rsa:3072', '-keyout', 'pycakey.pem', + args = ['req', '-config', t.name, '-new', + '-nodes', + '-newkey', 'rsa:3072', + '-keyout', 'pycakey.pem', '-out', f.name, '-subj', '/C=XY/L=Castle Anthrax/O=Python Software Foundation CA/CN=our-ca-server'] check_call(['openssl'] + args) - args = ['ca', '-config', t.name, '-create_serial', + args = ['ca', '-config', t.name, '-out', 'pycacert.pem', '-batch', '-outdir', TMP_CADIR, - '-keyfile', 'pycakey.pem', '-days', '3650', + '-keyfile', 'pycakey.pem', '-selfsign', '-extensions', 'v3_ca', '-infiles', f.name ] check_call(['openssl'] + args) args = ['ca', '-config', t.name, '-gencrl', '-out', 'revocation.crl'] @@ -223,18 +248,18 @@ def print_cert(path): f.write(key) f.write(cert) - cert, key = make_cert_key('localhost', True) + cert, key = make_cert_key('localhost', sign=True) with open('keycert3.pem', 'w') as f: f.write(key) f.write(cert) - cert, key = make_cert_key('fakehostname', True) + cert, key = make_cert_key('fakehostname', sign=True) with open('keycert4.pem', 'w') as f: f.write(key) f.write(cert) cert, key = make_cert_key( - 'localhost-ecc', True, key='param:secp384r1.pem' + 'localhost-ecc', sign=True, key='param:secp384r1.pem' ) with open('keycertecc.pem', 'w') as f: f.write(key) @@ -254,7 +279,7 @@ def print_cert(path): 'RID.1 = 1.2.3.4.5', ] - cert, key = make_cert_key('allsans', extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('allsans', sign=True, extra_san='\n'.join(extra_san)) with open('allsans.pem', 'w') as f: f.write(key) f.write(cert) @@ -271,11 +296,16 @@ def print_cert(path): ] # IDN SANS, signed - cert, key = make_cert_key('idnsans', True, extra_san='\n'.join(extra_san)) + cert, key = make_cert_key('idnsans', sign=True, extra_san='\n'.join(extra_san)) with open('idnsans.pem', 'w') as f: f.write(key) f.write(cert) + cert, key = make_cert_key('nosan', sign=True, ext='req_x509_extensions_nosan') + with open('nosan.pem', 'w') as f: + f.write(key) + f.write(cert) + unmake_ca() print("update Lib/test/test_ssl.py and Lib/test/test_asyncio/util.py") print_cert('keycert.pem') diff --git a/Lib/test/nosan.pem b/Lib/test/nosan.pem new file mode 100644 index 0000000000000..ec10cdcabb9e3 --- /dev/null +++ b/Lib/test/nosan.pem @@ -0,0 +1,130 @@ +-----BEGIN PRIVATE KEY----- +MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQCv3sUoOE4F7Pye +AT2Q6XpXrGUOu1fYgdnItLLLhvn7ACuHMj7TA5UKXxsepJn5m2Ji9LvAbksr1IWd +LZAvNgjwsUR+E4HbY108BhVt9sk3HFkvE0OOFbAa14ICtYPe18P/4Hv6Zfu/GJDU +rwXHNCUu0p6i/mospZ5O3sx5MgVaShknGAEC3Kp7zOgusMmE8XSbkNQa3ARMkW4o +kTqWKAeAHDjVFVyyhzZQmo+gaLzhWfJVSZhlJsuiLoZGGrVTq85EiXsE4l8rPaI+ +mKkVzWP13IZW+Fx1tiIktumdHWb1OQWrvm8AiT9b8PcFCUUrvhQFcLDSCZjKlQ0t +RWrSSKrrVsSldOreqRLtpjGzFJpGnTcvslL7rP5pg5DjBsYmVcDjrmRuJuhGq52X +/6HEC97GouVK8tT1LVMv1wufVPn+i9TzwxOuRWeUvVqLAJgWQ9N3yKdymH+VrpZk +/oB9ScyDakGezZBW5CeOQbNJ8WoX58jNxefGjtqKxmyztu43r3ECAwEAAQKCAYBQ +fVoqYCqFV8L95X9x1QljGsldhqxbsIIl811o/KtoDtndFEfgd2E8z+4vhhHaRR0w +QOW02kWZF7jXCMVWdhp9XgQE15S0/bLsB7TDERFiIZ1HiD+AxbhFcKBV8REbahCQ +CQN0xDwFZ47RaBDy7JCf71EfM+UP7fSYECvww83jVspQNBIyZx+3bT5OMCbqqz88 ++3m3mT52dJDADEeN9WAJZ+Ey1IYKRwu6tCJLvePEF1BrbDVNBgZogXZ+mzalxpjr +4RpGPMMa+VWc8HmDVd+LtpwKJcQD00GvUP4fNywn+5jvNWl54FdQiTLPrieTWxas +XUQ2crxP7Aqr2/vsU5Ruru5uF7H+ssMHp9YQDhpJ2+SVhQ9P+/loXCuKGt+BrB2Z +MlitO3f+vfRtzATmJ8G0qFrOqZK1A/qsiyIze240C1hAl3oy2xpZqTDGp4gRWwoi +OIN0HmH9UbP7bbNQY1x/zstTbza4/7rGb1+DZKeZIMu7QjBCU0rtsJpGtUvcQGEC +gcEA42GMYSL/HljZMF1LsDhTX/cmP8FDNgONhWYxT+w0Csnj1usLNBaT63dYnEiW +QKydRR4casAR1Kdy4Yfcy2lCy1kCfwqkQYk8fxSsOSHRjUfwC1SnfdYlwKFMxw4a +oZF0R4oVCBYrfP+8kqrj+5gs/gXblsw72XkYtbCdIriKKdmUzTx7MegzSqh2PVRi +rJzuwCZQ/O0NfhwdOHxLQDo0dgD+vv9e+KOSoJ9FDv8HH1tnolpRMdkSA8AJR/Nk +DXt1AoHBAMYBfTKQZ2jqLKybe4tP+YKjvjVp8vJx0iNUXFN/P6hBaSBOgq85uxXL +X3s7N/pkOCjyE95B8QusIkbnbfdyEP89O4bTbUHPXyAkHyRkR7Vny49HYuaR/aXQ +mXC0J2z5bXVpCQ514l/R/Io3wBph+hbG3To7pp9pMOV4qzvibUZaTZFwH+q+xDwf +SKSFy3fcomgH4/K5/QuKVj0jOUQsYjQQWb8GukS2KZK3zYJIAG1bBcsCVpSuBdW0 +eCZgqjnwjQKBwCUyUwWc9QEg5b68tGIKhNEhHDe3xOf0ItWcxxpc+JJ/Pm9tGfMW +cnJFntBKK5I+6qdg6qMn8oLINcnhMORxvsSHNhpUQlSaP7RGTHo4JxCmoQUpfxDd +1GUzvdyeWQrvQYdmdlRRVCHpsA6KOCtzVIDlsmtz06Ka5cjrMHl6mNeJyYbdiwW6 +B5ICBv23bUDxlzkFy5/ko51qufkAlErYeraHKSVTn1SrZZQzGdf/LkoZ6NUtUzUF +XqYQZzRHA6oU9QKBwDslzLljC5D6ivfQxln6POV6dmJMUOd9erFVDPNgSqq/R2EA +MueXDjzXcKFGMlWYxHHuxmKZPiEnfWHC1kWZjFxCdVq0I6oKATd/stHTJtyYseUO +BQwtRiDXLE7PcguKgtkU1EC+lC3dc1vyhW8cH3HYW9N+aCqsaI/TuQr9e3kNlqhA +XzhnXgU7rx5+XSZkARukZ8JlLqLY4yQGNqAXxgoZbEW1A8VsyQRr5XbqfT4td5CK +FUT6qwGIlG+aZp9CLQKBwQCQkwdW9A/Q4Ffq8+XTL1hJ24m/q11OLAPODUypOhWw +OCbX2fkv59pSBe6niZDBls1NpHB9mzalBrJCfU+yKC667gKcKULOnWULIoOQvmcg +Ka3hkkW28gTnCjfDIYm3IdsLjc67zJplOixaKgxhO8NtJZGtg0oLIrofG8EYRInv +OmtGw+XE+s4TVs6WgXnEg9zWQ5ZYtqQVn6PT5jsz+Nrvipi61HWHVBd7g+78ojps +3suWxl0FvgzTW5HD16WRXeI= +-----END PRIVATE KEY----- +Certificate: + Data: + Version: 1 (0x0) + Serial Number: + cb:2d:80:99:5a:69:52:61 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server + Validity + Not Before: Aug 29 14:23:16 2018 GMT + Not After : Oct 28 14:23:16 2037 GMT + Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=nosan + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public-Key: (3072 bit) + Modulus: + 00:af:de:c5:28:38:4e:05:ec:fc:9e:01:3d:90:e9: + 7a:57:ac:65:0e:bb:57:d8:81:d9:c8:b4:b2:cb:86: + f9:fb:00:2b:87:32:3e:d3:03:95:0a:5f:1b:1e:a4: + 99:f9:9b:62:62:f4:bb:c0:6e:4b:2b:d4:85:9d:2d: + 90:2f:36:08:f0:b1:44:7e:13:81:db:63:5d:3c:06: + 15:6d:f6:c9:37:1c:59:2f:13:43:8e:15:b0:1a:d7: + 82:02:b5:83:de:d7:c3:ff:e0:7b:fa:65:fb:bf:18: + 90:d4:af:05:c7:34:25:2e:d2:9e:a2:fe:6a:2c:a5: + 9e:4e:de:cc:79:32:05:5a:4a:19:27:18:01:02:dc: + aa:7b:cc:e8:2e:b0:c9:84:f1:74:9b:90:d4:1a:dc: + 04:4c:91:6e:28:91:3a:96:28:07:80:1c:38:d5:15: + 5c:b2:87:36:50:9a:8f:a0:68:bc:e1:59:f2:55:49: + 98:65:26:cb:a2:2e:86:46:1a:b5:53:ab:ce:44:89: + 7b:04:e2:5f:2b:3d:a2:3e:98:a9:15:cd:63:f5:dc: + 86:56:f8:5c:75:b6:22:24:b6:e9:9d:1d:66:f5:39: + 05:ab:be:6f:00:89:3f:5b:f0:f7:05:09:45:2b:be: + 14:05:70:b0:d2:09:98:ca:95:0d:2d:45:6a:d2:48: + aa:eb:56:c4:a5:74:ea:de:a9:12:ed:a6:31:b3:14: + 9a:46:9d:37:2f:b2:52:fb:ac:fe:69:83:90:e3:06: + c6:26:55:c0:e3:ae:64:6e:26:e8:46:ab:9d:97:ff: + a1:c4:0b:de:c6:a2:e5:4a:f2:d4:f5:2d:53:2f:d7: + 0b:9f:54:f9:fe:8b:d4:f3:c3:13:ae:45:67:94:bd: + 5a:8b:00:98:16:43:d3:77:c8:a7:72:98:7f:95:ae: + 96:64:fe:80:7d:49:cc:83:6a:41:9e:cd:90:56:e4: + 27:8e:41:b3:49:f1:6a:17:e7:c8:cd:c5:e7:c6:8e: + da:8a:c6:6c:b3:b6:ee:37:af:71 + Exponent: 65537 (0x10001) + Signature Algorithm: sha256WithRSAEncryption + 91:42:c2:15:57:42:47:77:e7:0f:c5:55:26:b1:5b:c3:5e:ba: + 81:db:e1:a4:9f:b8:42:5a:21:c9:8c:18:ae:0f:90:ab:9a:24: + e7:d2:78:fc:bd:97:29:b1:5c:46:1f:5b:b8:d2:a7:87:f1:50: + 53:5b:d3:be:57:74:bd:e5:75:db:50:81:f7:37:95:0b:69:ef: + 39:8c:5c:82:d5:64:62:d5:8b:e9:e0:31:e1:73:d2:5a:2c:de: + 43:5a:06:e5:d3:4d:d0:35:e0:9f:c2:73:31:bc:35:69:d4:fb: + 7d:f0:1a:33:f7:f6:25:72:9c:a6:84:05:08:f6:b5:e8:04:10: + f1:1f:f2:95:ad:a1:f8:d8:80:a5:eb:75:43:99:33:90:0c:79: + fc:c0:87:08:95:20:aa:c2:81:0b:22:6f:56:f4:8f:2a:23:f8: + 40:47:1c:03:a5:b1:04:0a:04:4a:df:d0:88:a8:bc:31:f2:42: + 9b:d8:11:14:9e:e3:68:ea:07:2c:15:de:d2:36:5a:15:38:ed: + d2:af:0e:b4:b6:1d:a0:57:94:ea:c3:c7:4c:14:57:81:00:57: + 94:d3:b0:27:69:d7:48:02:6c:e5:97:f7:be:22:7c:38:24:af: + b2:b0:7b:08:75:1e:ca:2e:c7:41:ef:8b:74:cf:c9:c3:6f:39: + b9:52:41:18:c6:70:24:54:51:04:fe:5f:88:70:35:e5:1c:8e: + d6:67:69:44:44:33:9b:8c:fe:a5:b9:95:48:66:84:f3:1a:04: + ab:a3:57:c1:b6:b4:2f:28:12:45:2b:cb:42:d3:f4:a5:ce:7b: + 6c:1f:e4:c8:a9:e7:d4:6d:c8:27:2d:69:26:c5:e8:73:10:54: + 1f:c3:bf:fd:aa:f5:95:6f:f6:ca:d5:06:8f:1b:79:93:e3:86: + ba:8d:fe:a8:10:8f:95:3e:14:09:bf:ca:88:59:e2:93:b6:ec: + 03:a9:7e:dd:1f:5f:13:d3:29:b3:a6:f3:6a:df:30:53:44:c8: + cd:e5:82:57:bc:9c +-----BEGIN CERTIFICATE----- +MIIEJDCCAowCCQDLLYCZWmlSYTANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJY +WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV +BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTgwODI5MTQyMzE2WhcNMzcxMDI4MTQyMzE2 +WjBbMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwOQ2FzdGxlIEFudGhyYXgxIzAhBgNV +BAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMQ4wDAYDVQQDDAVub3NhbjCC +AaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAK/exSg4TgXs/J4BPZDpeles +ZQ67V9iB2ci0ssuG+fsAK4cyPtMDlQpfGx6kmfmbYmL0u8BuSyvUhZ0tkC82CPCx +RH4TgdtjXTwGFW32yTccWS8TQ44VsBrXggK1g97Xw//ge/pl+78YkNSvBcc0JS7S +nqL+aiylnk7ezHkyBVpKGScYAQLcqnvM6C6wyYTxdJuQ1BrcBEyRbiiROpYoB4Ac +ONUVXLKHNlCaj6BovOFZ8lVJmGUmy6IuhkYatVOrzkSJewTiXys9oj6YqRXNY/Xc +hlb4XHW2IiS26Z0dZvU5Bau+bwCJP1vw9wUJRSu+FAVwsNIJmMqVDS1FatJIqutW +xKV06t6pEu2mMbMUmkadNy+yUvus/mmDkOMGxiZVwOOuZG4m6EarnZf/ocQL3sai +5Ury1PUtUy/XC59U+f6L1PPDE65FZ5S9WosAmBZD03fIp3KYf5WulmT+gH1JzINq +QZ7NkFbkJ45Bs0nxahfnyM3F58aO2orGbLO27jevcQIDAQABMA0GCSqGSIb3DQEB +CwUAA4IBgQCRQsIVV0JHd+cPxVUmsVvDXrqB2+Gkn7hCWiHJjBiuD5CrmiTn0nj8 +vZcpsVxGH1u40qeH8VBTW9O+V3S95XXbUIH3N5ULae85jFyC1WRi1Yvp4DHhc9Ja +LN5DWgbl003QNeCfwnMxvDVp1Pt98Boz9/YlcpymhAUI9rXoBBDxH/KVraH42ICl +63VDmTOQDHn8wIcIlSCqwoELIm9W9I8qI/hARxwDpbEECgRK39CIqLwx8kKb2BEU +nuNo6gcsFd7SNloVOO3Srw60th2gV5Tqw8dMFFeBAFeU07AnaddIAmzll/e+Inw4 +JK+ysHsIdR7KLsdB74t0z8nDbzm5UkEYxnAkVFEE/l+IcDXlHI7WZ2lERDObjP6l +uZVIZoTzGgSro1fBtrQvKBJFK8tC0/SlzntsH+TIqefUbcgnLWkmxehzEFQfw7/9 +qvWVb/bK1QaPG3mT44a6jf6oEI+VPhQJv8qIWeKTtuwDqX7dH18T0ymzpvNq3zBT +RMjN5YJXvJw= +-----END CERTIFICATE----- diff --git a/Lib/test/pycacert.pem b/Lib/test/pycacert.pem index 73150c960f358..360cd57426a5a 100644 --- a/Lib/test/pycacert.pem +++ b/Lib/test/pycacert.pem @@ -3,97 +3,97 @@ Certificate: Version: 3 (0x2) Serial Number: cb:2d:80:99:5a:69:52:5b - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server Validity Not Before: Aug 29 14:23:16 2018 GMT - Not After : Aug 26 14:23:16 2028 GMT + Not After : Oct 28 14:23:16 2037 GMT Subject: C=XY, O=Python Software Foundation CA, CN=our-ca-server Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (3072 bit) + RSA Public-Key: (3072 bit) Modulus: - 00:97:ed:55:41:ba:36:17:95:db:71:1c:d3:e1:61: - ac:58:73:e3:c6:96:cf:2b:1f:b8:08:f5:9d:4b:4b: - c7:30:f6:b8:0b:b3:52:72:a0:bb:c9:4d:3b:8e:df: - 22:8e:01:57:81:c9:92:73:cc:00:c6:ec:70:b0:3a: - 17:40:c1:df:f2:8c:36:4c:c4:a7:81:e7:b6:24:68: - e2:a0:7e:35:07:2f:a0:5b:f9:45:46:f7:1e:f0:46: - 11:fe:ca:1a:3c:50:f1:26:a9:5f:9c:22:9c:f8:41: - e1:df:4f:12:95:19:2f:5c:90:01:17:6e:7e:3e:7d: - cf:e9:09:af:25:f8:f8:42:77:2d:6d:5f:36:f2:78: - 1e:7d:4a:87:68:63:6c:06:71:1b:8d:fa:25:fe:d4: - d3:f5:a5:17:b1:ef:ea:17:cb:54:c8:27:99:80:cb: - 3c:45:f1:2c:52:1c:dd:1f:51:45:20:50:1e:5e:ab: - 57:73:1b:41:78:96:de:84:a4:7a:dd:8f:30:85:36: - 58:79:76:a0:d2:61:c8:1b:a9:94:99:63:c6:ee:f8: - 14:bf:b4:52:56:31:97:fa:eb:ac:53:9e:95:ce:4c: - c4:5a:4a:b7:ca:03:27:5b:35:57:ce:02:dc:ec:ca: - 69:f8:8a:5a:39:cb:16:20:15:03:24:61:6c:f4:7a: - fc:b6:48:e5:59:10:5c:49:d0:23:9f:fb:71:5e:3a: - e9:68:9f:34:72:80:27:b6:3f:4c:b1:d9:db:63:7f: - 67:68:4a:6e:11:f8:e8:c0:f4:5a:16:39:53:0b:68: - de:77:fa:45:e7:f8:91:cd:78:cd:28:94:97:71:54: - fb:cf:f0:37:de:c9:26:c5:dc:1b:9e:89:6d:09:ac: - c8:44:71:cb:6d:f1:97:31:d5:4c:20:33:bf:75:4a: - a0:e0:dc:69:11:ed:2a:b4:64:10:11:30:8b:0e:b0: - a7:10:d8:8a:c5:aa:1b:c8:26:8a:25:e7:66:9f:a5: - 6a:1a:2f:7c:5f:83:c6:78:4f:1f + 00:b1:84:d3:4f:5c:04:80:91:4f:82:49:ba:30:0b: + f7:e8:cb:f9:14:ef:3d:9f:0b:3f:0a:62:fc:1b:20: + a5:20:d1:60:5f:87:5a:1f:16:d1:ed:97:70:a6:da: + 1b:03:2c:7e:a0:5b:3c:4e:2f:16:7e:0e:89:29:89: + e1:10:0d:38:da:6a:77:5f:37:13:b3:28:8f:7b:5c: + 76:ad:9e:e8:d3:f5:9e:f5:83:aa:10:07:8d:e6:51: + 98:f0:7c:0d:52:f2:0c:21:1e:d8:b9:99:26:a9:25: + 03:27:bb:5c:ab:2e:33:27:a2:d6:23:a8:83:87:44: + 29:9f:97:b5:24:6f:d7:b9:0a:fd:28:ee:bb:fb:41: + 58:ea:1d:99:dd:44:86:ab:98:be:1c:dc:cb:a9:89: + 1d:36:5c:a9:e8:47:b5:f4:52:48:aa:b5:a4:67:ef: + 3e:d7:e2:d3:33:de:98:29:d8:7a:b0:59:5c:e7:b1: + 0e:cc:fd:9f:eb:f6:d5:3a:0e:0b:cf:fe:0b:3d:a2: + bf:45:18:ce:94:e7:a9:55:60:88:d4:d8:84:50:79: + 05:2e:41:03:74:ae:67:26:f6:5b:12:08:98:ce:0a: + 97:ed:01:0f:89:4f:17:5c:fa:3e:1d:35:24:47:92: + 32:bf:f7:a4:18:2b:3c:d0:48:99:e1:a2:cd:a3:cc: + 50:53:20:b5:c6:e3:66:85:7b:57:10:ec:33:4f:c1: + 77:e7:1b:7e:81:c6:c4:f3:45:20:c0:91:dd:13:76: + 7b:03:af:f6:76:8e:a2:83:63:57:dd:63:bc:bb:5a: + 1c:17:52:8a:d6:06:48:cc:0f:c7:d3:4f:e8:da:22: + 6c:86:f9:4e:5c:a6:29:07:3b:d8:56:4c:59:b3:20: + 49:07:7b:94:84:cf:2b:c3:1c:1a:4e:87:64:92:ba: + 42:e1:e6:ad:7d:1d:f6:54:90:6f:2b:e9:b3:cc:4b: + 2b:33:26:23:fd:65:c0:3c:f0:79:ad:c9:c1:81:ef: + 37:04:e0:27:3e:b0:ee:15:be:51 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: - DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Authority Key Identifier: - keyid:DD:BF:CA:DA:E6:D1:34:BA:37:75:21:CA:6F:9A:08:28:F2:35:B6:48 + keyid:B3:8A:A0:A2:BA:71:F1:A8:24:79:D4:A4:5B:25:36:15:1E:49:C8:CD X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha256WithRSAEncryption - 33:6a:54:d3:6b:c0:d7:01:5f:9d:f4:05:c1:93:66:90:50:d0: - b7:18:e9:b0:1e:4a:a0:b6:da:76:93:af:84:db:ad:15:54:31: - 15:13:e4:de:7e:4e:0c:d5:09:1c:34:35:b6:e5:4c:d6:6f:65: - 7d:32:5f:eb:fc:a9:6b:07:f7:49:82:e5:81:7e:07:80:9a:63: - f8:2c:c3:40:bc:8f:d4:2a:da:3e:d1:ee:08:b7:4d:a7:84:ca: - f4:3f:a1:98:45:be:b1:05:69:e7:df:d7:99:ab:1b:ee:8b:30: - cc:f7:fc:e7:d4:0b:17:ae:97:bf:e4:7b:fd:0f:a7:b4:85:79: - e3:59:e2:16:87:bf:1f:29:45:2c:23:93:76:be:c0:87:1d:de: - ec:2b:42:6a:e5:bb:c8:f4:0a:4a:08:0a:8c:5c:d8:7d:4d:d1: - b8:bf:d5:f7:29:ed:92:d1:94:04:e8:35:06:57:7f:2c:23:97: - 87:a5:35:8d:26:d3:1a:47:f2:16:d7:d9:c6:d4:1f:23:43:d3: - 26:99:39:ca:20:f4:71:23:6f:0c:4a:76:76:f7:76:1f:b3:fe: - bf:47:b0:fc:2a:56:81:e1:d2:dd:ee:08:d8:f4:ff:5a:dc:25: - 61:8a:91:02:b9:86:1c:f2:50:73:76:25:35:fc:b6:25:26:15: - cb:eb:c4:2b:61:0c:1c:e7:ee:2f:17:9b:ec:f0:d4:a1:84:e7: - d2:af:de:e4:1b:24:14:a7:01:87:e3:ab:29:58:46:a0:d9:c0: - 0a:e0:8d:d7:59:d3:1b:f8:54:20:3e:78:a5:a5:c8:4f:8b:03: - c4:96:9f:ec:fb:47:cf:76:2d:8d:65:34:27:bf:fa:ae:01:05: - 8a:f3:92:0a:dd:89:6c:97:a1:c7:e7:60:51:e7:ac:eb:4b:7d: - 2c:b8:65:c9:fe:5d:6a:48:55:8e:e4:c7:f9:6a:40:e1:b8:64: - 45:e9:b5:59:29:a5:5f:cf:7d:58:7d:64:79:e5:a4:09:ac:1e: - 76:65:3d:94:c4:68 + 6b:32:2f:e7:05:18:ea:5c:c9:95:f4:e0:c2:0c:41:5f:1a:0a: + 95:c9:c7:7d:05:ee:8a:56:29:35:50:40:b7:fe:9f:7b:5b:1c: + c3:69:2f:a0:cb:d2:b8:91:2f:50:19:62:f7:27:18:6d:95:7b: + 53:16:15:a2:5a:dc:14:e3:fb:b1:32:a9:69:db:a6:33:47:3c: + bb:1f:d2:dc:70:f9:6a:2e:0c:d8:8c:6d:e5:5d:1d:43:3c:4e: + 91:de:a0:c8:da:a0:4b:0e:9d:5e:b6:0f:4a:49:f0:7b:b6:53: + 9e:fd:35:14:5b:e3:4d:b4:18:a6:36:61:e8:8f:33:9b:d4:05: + f9:54:66:df:e0:cb:18:a3:4e:dc:17:a8:a0:b3:c1:a8:f4:d6: + 9d:ca:7f:68:53:1a:d7:95:da:e8:d3:9e:48:00:71:95:99:11: + 07:cf:96:c0:7d:ce:7d:30:e8:4f:e1:83:16:33:a1:ff:59:9b: + 3e:4c:e7:3a:38:01:9f:0f:67:4c:fd:2d:8b:4a:d4:01:46:37: + 33:e8:13:6b:15:a9:1d:68:76:45:a2:82:33:69:26:30:60:05: + c8:8f:bd:b4:75:ab:be:7a:8b:48:68:70:40:b4:1b:51:c5:e6: + 7a:ad:6b:4f:db:17:c0:60:67:2e:63:61:9b:2c:48:99:b8:76: + 45:a0:9e:cc:ef:33:1e:50:4e:ab:72:c3:65:c8:b2:79:b3:35: + 83:21:78:d3:8b:6c:3a:18:e8:65:32:39:b8:c0:9d:71:2f:35: + 36:8a:c0:17:62:d8:8b:3e:e1:22:18:2b:4c:63:a6:0e:9d:0a: + fa:ab:5b:35:fb:88:91:77:4c:8d:8c:9d:a9:cf:fc:ab:c2:e6: + 5a:05:7b:7e:04:6e:39:cf:93:ce:67:3b:7a:cb:af:b6:36:e1: + fb:71:64:45:d4:a6:f0:ce:ef:75:04:99:69:9a:e5:88:0a:10: + 02:74:89:ec:75:84:44:80:48:df:c1:f7:e9:37:ce:ce:92:92: + 5c:89:22:08:73:1f -----BEGIN CERTIFICATE----- MIIEbTCCAtWgAwIBAgIJAMstgJlaaVJbMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNV BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW -MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0yODA4MjYx +MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xODA4MjkxNDIzMTZaFw0zNzEwMjgx NDIzMTZaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCAaIwDQYJKoZI -hvcNAQEBBQADggGPADCCAYoCggGBAJftVUG6NheV23Ec0+FhrFhz48aWzysfuAj1 -nUtLxzD2uAuzUnKgu8lNO47fIo4BV4HJknPMAMbscLA6F0DB3/KMNkzEp4HntiRo -4qB+NQcvoFv5RUb3HvBGEf7KGjxQ8SapX5winPhB4d9PEpUZL1yQARdufj59z+kJ -ryX4+EJ3LW1fNvJ4Hn1Kh2hjbAZxG436Jf7U0/WlF7Hv6hfLVMgnmYDLPEXxLFIc -3R9RRSBQHl6rV3MbQXiW3oSket2PMIU2WHl2oNJhyBuplJljxu74FL+0UlYxl/rr -rFOelc5MxFpKt8oDJ1s1V84C3OzKafiKWjnLFiAVAyRhbPR6/LZI5VkQXEnQI5/7 -cV466WifNHKAJ7Y/TLHZ22N/Z2hKbhH46MD0WhY5Uwto3nf6Ref4kc14zSiUl3FU -+8/wN97JJsXcG56JbQmsyERxy23xlzHVTCAzv3VKoODcaRHtKrRkEBEwiw6wpxDY -isWqG8gmiiXnZp+lahovfF+DxnhPHwIDAQABo1AwTjAdBgNVHQ4EFgQU3b/K2ubR -NLo3dSHKb5oIKPI1tkgwHwYDVR0jBBgwFoAU3b/K2ubRNLo3dSHKb5oIKPI1tkgw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAM2pU02vA1wFfnfQFwZNm -kFDQtxjpsB5KoLbadpOvhNutFVQxFRPk3n5ODNUJHDQ1tuVM1m9lfTJf6/ypawf3 -SYLlgX4HgJpj+CzDQLyP1CraPtHuCLdNp4TK9D+hmEW+sQVp59/Xmasb7oswzPf8 -59QLF66Xv+R7/Q+ntIV541niFoe/HylFLCOTdr7Ahx3e7CtCauW7yPQKSggKjFzY -fU3RuL/V9yntktGUBOg1Bld/LCOXh6U1jSbTGkfyFtfZxtQfI0PTJpk5yiD0cSNv -DEp2dvd2H7P+v0ew/CpWgeHS3e4I2PT/WtwlYYqRArmGHPJQc3YlNfy2JSYVy+vE -K2EMHOfuLxeb7PDUoYTn0q/e5BskFKcBh+OrKVhGoNnACuCN11nTG/hUID54paXI -T4sDxJaf7PtHz3YtjWU0J7/6rgEFivOSCt2JbJehx+dgUees60t9LLhlyf5dakhV -juTH+WpA4bhkRem1WSmlX899WH1keeWkCawedmU9lMRo +hvcNAQEBBQADggGPADCCAYoCggGBALGE009cBICRT4JJujAL9+jL+RTvPZ8LPwpi +/BsgpSDRYF+HWh8W0e2XcKbaGwMsfqBbPE4vFn4OiSmJ4RANONpqd183E7Moj3tc +dq2e6NP1nvWDqhAHjeZRmPB8DVLyDCEe2LmZJqklAye7XKsuMyei1iOog4dEKZ+X +tSRv17kK/Sjuu/tBWOodmd1EhquYvhzcy6mJHTZcqehHtfRSSKq1pGfvPtfi0zPe +mCnYerBZXOexDsz9n+v21ToOC8/+Cz2iv0UYzpTnqVVgiNTYhFB5BS5BA3SuZyb2 +WxIImM4Kl+0BD4lPF1z6Ph01JEeSMr/3pBgrPNBImeGizaPMUFMgtcbjZoV7VxDs +M0/Bd+cbfoHGxPNFIMCR3RN2ewOv9naOooNjV91jvLtaHBdSitYGSMwPx9NP6Noi +bIb5TlymKQc72FZMWbMgSQd7lITPK8McGk6HZJK6QuHmrX0d9lSQbyvps8xLKzMm +I/1lwDzwea3JwYHvNwTgJz6w7hW+UQIDAQABo1AwTjAdBgNVHQ4EFgQUs4qgorpx +8agkedSkWyU2FR5JyM0wHwYDVR0jBBgwFoAUs4qgorpx8agkedSkWyU2FR5JyM0w +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAazIv5wUY6lzJlfTgwgxB +XxoKlcnHfQXuilYpNVBAt/6fe1scw2kvoMvSuJEvUBli9ycYbZV7UxYVolrcFOP7 +sTKpadumM0c8ux/S3HD5ai4M2Ixt5V0dQzxOkd6gyNqgSw6dXrYPSknwe7ZTnv01 +FFvjTbQYpjZh6I8zm9QF+VRm3+DLGKNO3BeooLPBqPTWncp/aFMa15Xa6NOeSABx +lZkRB8+WwH3OfTDoT+GDFjOh/1mbPkznOjgBnw9nTP0ti0rUAUY3M+gTaxWpHWh2 +RaKCM2kmMGAFyI+9tHWrvnqLSGhwQLQbUcXmeq1rT9sXwGBnLmNhmyxImbh2RaCe +zO8zHlBOq3LDZciyebM1gyF404tsOhjoZTI5uMCdcS81NorAF2LYiz7hIhgrTGOm +Dp0K+qtbNfuIkXdMjYydqc/8q8LmWgV7fgRuOc+Tzmc7esuvtjbh+3FkRdSm8M7v +dQSZaZrliAoQAnSJ7HWERIBI38H36TfOzpKSXIkiCHMf -----END CERTIFICATE----- diff --git a/Lib/test/pycakey.pem b/Lib/test/pycakey.pem index c283f89098684..819bdef1ff9bf 100644 --- a/Lib/test/pycakey.pem +++ b/Lib/test/pycakey.pem @@ -1,40 +1,40 @@ -----BEGIN PRIVATE KEY----- -MIIG/AIBADANBgkqhkiG9w0BAQEFAASCBuYwggbiAgEAAoIBgQCX7VVBujYXldtx -HNPhYaxYc+PGls8rH7gI9Z1LS8cw9rgLs1JyoLvJTTuO3yKOAVeByZJzzADG7HCw -OhdAwd/yjDZMxKeB57YkaOKgfjUHL6Bb+UVG9x7wRhH+yho8UPEmqV+cIpz4QeHf -TxKVGS9ckAEXbn4+fc/pCa8l+PhCdy1tXzbyeB59SodoY2wGcRuN+iX+1NP1pRex -7+oXy1TIJ5mAyzxF8SxSHN0fUUUgUB5eq1dzG0F4lt6EpHrdjzCFNlh5dqDSYcgb -qZSZY8bu+BS/tFJWMZf666xTnpXOTMRaSrfKAydbNVfOAtzsymn4ilo5yxYgFQMk -YWz0evy2SOVZEFxJ0COf+3FeOulonzRygCe2P0yx2dtjf2doSm4R+OjA9FoWOVML -aN53+kXn+JHNeM0olJdxVPvP8DfeySbF3BueiW0JrMhEcctt8Zcx1UwgM791SqDg -3GkR7Sq0ZBARMIsOsKcQ2IrFqhvIJool52afpWoaL3xfg8Z4Tx8CAwEAAQKCAYB6 -1g1kwyYRE70FS4WUaOBr8+dqHW0LNO4bcFrpEi/PSuurqiUzQPoT3DoXXhoWLseN -zGh476yBKZJDKfS7CwYCmZMdprK4uZvu/E6f7Or7EGrbckOtCQkew8iw9L8ZnWgd -FjyThPjdUIdLgidIHcDJWjVHuLKh3B9KD+ZpEU/IjYtRLvbCPJSKQMQShrBE1Rau -SF6IF5P4vK7X0162NlQqMLpQBAKLml93VJcERzVY1u53JJnkG1loIrNvE32zvZ0C -ZnGVpWwamixVrO9K66F+Ml3Y3bkguF8aPUitc+l+yPmUSXmcDcKmhw9DZA0k5t39 -FxVYGn1uJlvHll8QvV9aZtzuTSkAN8VWNufGwivLLsoRlRb1LtGWqHY583FlUWtz -99ABCBehZ2EpAP+MrRj+pyKuMrkQH61bbOhjqifBM8MhHdn9uNmMpvnKyGPMIdRY -cLH4i2S5aQVvmsQbOa98DLOFGXdf+z5HuwdxHtG1S3J7jkT+FkIyYDehJA3X8UEC -gcEAyCpD8rMFfR5qLwrajhy8vbV7TIkNfFHEkm9tCWDBHwuOJqA0DFuMDAKl7cMv -Uo7Z6R2Fqe2OyWvxYkOi/CSjvtT+PTiA0ux1tXUZcxcRSIsLqQZV+elsKcv+QJPy -vf02vNvHjaMaRwl+NYtqpfr1s/3EdJnWCNC3nV1dD+mWVJoO3kGAK5grLAPM1/uP -stARN5Tnh3Doh8e1Yl4V4UKcVqyVqDykX1OLSmPqNH86T4Um0B4h+jf4UBBdDBz1 -rD3JAoHBAMJOZ3M7LqX+F2haSrF/hnG1y9qAqDWGsvy+8YgjFwPFWu7LvqLuXLuz -S3+5GGhplMuM0itqA9PyPotlgtG5O9hAU8SyMitrx1uTW+Q2U3iYPZQ9O327l1cO -F2jKljq0aJrXp+5iWUq8t/FG6DAqYYUCY/X1SheqEXCgCh4ldRhXig3TBYbVZNs9 -7azN0lk408AO/Hx7WYreFQVS7A/EJhk/M1yyIqnJESuxkDefjV4hTVkRXhh+MrCe -vF/jHqh5pwKBwHxXPQRbzvINXbrBTEjxcxGJ1gESNg1fIfQxQZOMxgrJ+9DkvdBb -YiDn2DldgV0Qni8ghrKrfoKDClyXVXy6KfnWh+Rx4BymhOxmxJto3fSpY2HpLKll -JirErLli7my1CjbBdDH4+s7cB8mtRF+9CLp5znr8QSgSt60KnU/QM/F0Df5kxADQ -syjRZ4NXoslaVQeo+TZ6nggSuAtWFNNstH9nEESE/zq0RBe+/3MDAa76MMUhosuz -zw21TIfEyZvoeQKBwDpszNpvPzWWU3+DNtZsXAaw/Vz0Np/xorwwxfuDYZY2r4MC -LI5dUfD2losPIvGyXZVfAIshU4lVW80adt2M7xu1K/sHAeLgg49bndPfKfYnAM0k -JFFIKNd6WzudPtLkEFgO5GXfmK3KVRztjz98XtpZv6jjWqYG8zuEQ8aQyMbK+63w -d8b1P2BVHLRLJybA2Zr0ZqMfi+sfn/570pNjDXml8VG8FoQq+0jCGXVAOofFR7ay -bDK9L4zADjBe4IcUHQKBwFwj8TEVlWxtG+IWO5d+vyuP0OPjSYOmYq4dCMyZ2+Xy -Y+XDYEhlgGTVxafRMTwt57VV3hJTtRxUZziDA++atr8+gPio+QHBYg1JgCKsqKYL -TGoSVrM1jTfdl1orwkpgQmq2q5j7ExpNA3Spsm5kyCaJ1S/8Ivusqaod8S4t7UhW -BRec3gQ+UYv/V3Pc9hS1Zdzf5+G+PDOYoNmveY16hcu0DKc/PlqGtJuBoQjjH7ir -1YVK9GAgLk0VqJvePnF57A== +MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCxhNNPXASAkU+C +SbowC/foy/kU7z2fCz8KYvwbIKUg0WBfh1ofFtHtl3Cm2hsDLH6gWzxOLxZ+Dokp +ieEQDTjaandfNxOzKI97XHatnujT9Z71g6oQB43mUZjwfA1S8gwhHti5mSapJQMn +u1yrLjMnotYjqIOHRCmfl7Ukb9e5Cv0o7rv7QVjqHZndRIarmL4c3MupiR02XKno +R7X0UkiqtaRn7z7X4tMz3pgp2HqwWVznsQ7M/Z/r9tU6DgvP/gs9or9FGM6U56lV +YIjU2IRQeQUuQQN0rmcm9lsSCJjOCpftAQ+JTxdc+j4dNSRHkjK/96QYKzzQSJnh +os2jzFBTILXG42aFe1cQ7DNPwXfnG36BxsTzRSDAkd0TdnsDr/Z2jqKDY1fdY7y7 +WhwXUorWBkjMD8fTT+jaImyG+U5cpikHO9hWTFmzIEkHe5SEzyvDHBpOh2SSukLh +5q19HfZUkG8r6bPMSyszJiP9ZcA88HmtycGB7zcE4Cc+sO4VvlECAwEAAQKCAYB7 +gUnzALYxLOgAYYMkQm9si9zz768TpCNr+ooj5YZ9Wq6OSAEveBT+FErQCxaYErDW +qCNA0gn4Eezj9YWcQVa4vzHmEM+n6iRJU39ONC0Qqua5Ma10EY1sHIEnb2dlufku +YeOu3RrEu3eCgRxsDGySuvv5OxinV4kN++KPQzD3EOopPE+U81YFLCsMgsyfPlmm +gwc/IKIuXDHp5Vp2bXkZK98CYLV8RddjUw7SrkZNwx6cI9eET0CgTs7y4SrevoOy +jCdnA0j1HvL8AbLQuYoXo9fdGYDeq55hyYlxSMYLaEToZG3DJ0UAldrT+r7x52D8 +2QMnJUo2XHzVYPlXPJIAkFJisZZ36TkBvywCgXZMMLibPo9U6V0nfkybTtXKoory +nmgBv+XSGSNrVWMiygpDPqpX1G6bBgqUX3CiTlxtSkYYz1M4Vgj2cux5XEPTnVCq +CLVzvNIXZt1RyzXPxGWpPidCjOaiWBRT4u1Dol9fs3PmVvDaRxcKo9nspiUHCfEC +gcEA4GgxZ+IJwpAMHkdYId0oxjKgTqIg+Ua+EwfUoQT10ERl/k/V4cDwJRHT8lML +rKhTNQJMEE040jq+6mPJDl1KqMb/v05Q7fF22ToGw1HkZwK52O6CeEiJW4/J6bR1 +pZGN0irsa6GvzV65Y6gZVFEUl0JPRf8wPvQHXsWAw8/2LuXkXjV0ieIMq4pbWJf4 +kaid7dYLHnobiP9RVk7BGr7ifmCshoPjWp4TRMwYf6iIZrqMxUSX0QY8Xsqx6bch +LLx/AoHBAMqCvvwUKTrF4gKh5jyl6T6DTZ/Dujaz7BuAJdsSSHvuTa/Y1EfsQHZN +jABn89ZqHYDiyyCuVFO3dqhLtsPjhyFMSXj+98JYcL3FGKnqQqRTwtzzx2P2lV5X +U0WhrNRb3iLu79Tr8pE/2EPnvTr+J5b0DHEeRyM72LWs43zrDYHorH0/Aa5Qd37F +gDLCTBEl8jO5irRuAIq/KV9ZFnn8JDjNGVpXgHPW3354ON1YaMLnPASk7FQizSOQ +QZAsyxtdLwKBwGUosvTYYXvygXP4x1LkpmfKFJe94E1exXpAsmovmTvcSXn9tTXC +Sr77LWb0ZrPbYT7pHS7QEMg8MSnp941hIrG4mzs666KHkgLUdI4B0YtaIDsZMXlV +gY3j4KpYbhxH4/2U2eSfC2fxxnKVKW3n6vdQrfmo0q/eQ6BGOgiLK7fybCLHyBQL +8Zg2k3z5bNUEhMTdE0AW3WjBZ4IXmFcdK26616r/szJ7RcZilrydVXexqpmWlTVl +sTst9kucAPlwswKBwQCwf7my/GNezR8Jik+fZj7edBQQfcdra+8JnOvhfpLcKLte +2s1RjjA0q6usou1bYAsszP2bEzV97XWmgq7dFg4tUE7s/NO1d91zGDhBx2Gj1TkN +2A5dKonOuq9iDeITB6qYqcUvvyEfxRRZQr2jj+WzZCr/4BLCO6PJ29A9jKOuKLtF +QcfWRF2RiNMN6lffzkHFIR4p2YHxa2DEsGGtmbt8Ig3Jtl/HFmydzmxJRoev71dY ++ODdB6PhLhZmcRPoWpMCgcEAhGArwL68GwwRMqAX79gMv8tVT0CJnDyGk5mD/ZIB +Nzt0yQFO7rTEa1l1vAtOiVJ9IpAak2lgbEwodOfGnQst7lujNYDFzTRPTFt/lID1 +u6JBxmqawOSlqa00bt4l2YsTZV+BfSznBP6XO1PK4iR3o5G3NkoKJjZWm3e3asHk +6eTeMLcsIJ+Fp7gG0ve2EdQwhVSVMFEu4Q4C2FcJeU++L4kYpY7sTnAjUtiLvtHn +yp3jllEn3CBD8Uhs4B+sL/6p -----END PRIVATE KEY----- diff --git a/Lib/test/revocation.crl b/Lib/test/revocation.crl index c05461ca7f938..621675eb5c183 100644 --- a/Lib/test/revocation.crl +++ b/Lib/test/revocation.crl @@ -1,14 +1,14 @@ -----BEGIN X509 CRL----- MIICJjCBjwIBATANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJYWTEmMCQGA1UE CgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNVBAMMDW91ci1j -YS1zZXJ2ZXIXDTE4MDgyOTE0MjMxNloXDTI4MDcwNzE0MjMxNlqgDjAMMAoGA1Ud -FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCPhrtGSbuvxPAI3YWQFDB4iOWdBnVk -ugW1lsifmCsE86FfID0EwUut1SRHlksltMtcoULMEIdu8yMLWci++4ve22EEuMKT -HUc3T/wBIuQUhA7U4deFG8CZPAxRpNoK470y7dkD4OVf0Gxa6WYDl9z8mXKmWCB9 -hvzqVfLWNSLTAVPsHtkD5PXdi5yRkQr6wYD7poWaIvkpsn7EKCY6Tw5V3rsbRuZq -AGVCq5TH3mctcmwLloCJ4Xr/1q0DsRrYxeeLYxE+UpvvCbVBKgtjBK7zINS7AbcJ -CYCYKUwGWv1fYKJ+KQQHf75mT3jQ9lWuzOj/YWK4k1EBnYmVGuKKt73lLFxC6h3y -MUnaBZc1KZSyJj0IxfHg/o6qx8NgKOl9XRIQ5g5B30cwpPOskGhEhodbTTY3bPtm -RQ36JvQZngzmkhyhr+MDEV5yUTOShfUiclzQOx26CmLmLHWxOZgXtFZob/oKrvbm -Gen/+7K7YTw6hfY52U7J2FuQRGOyzBXfBYQ= +YS1zZXJ2ZXIXDTIxMDMxNzA4NDgyMFoXDTQwMDUxNjA4NDgyMFqgDjAMMAoGA1Ud +FAQDAgEAMA0GCSqGSIb3DQEBCwUAA4IBgQCd2GrHb4zr2R8eK7YMHwlkgICxbWP1 +4nuEi55yzUcmMcCZJ6ZQV3yYqTlAULGQ9qWAUdhsyH+yu3hRKFKHQv0DAdKKxgow +66YasAQQ99DskXOPxmRoIA7qtIWZbLtBwHQJWh+uUFlTdUXitGIX5Xie74xu5YIr +moa3QeuZyG5+gigSTUyst5T/J/cHfBzlAJLc2k3Ty4EPYXKHCVnrZWJbRmxq199l +A7S+eBb9qWXSYXCn6v+EZ76pUS3u/66kZ86PO3h9294BzdhxbCJ27dQXNHw6owe2 +Iyiv0aWx+TNSGSf4yCqaYTH6RtEoviI3h/inVFHNGgjlMzdaGw/0I3bkB0rt2WSR +Vck37HnXvQvVEkgO/39C0WKZus6m4gmOgZcbJbXaR8uIR5Hmw3SEyGEPEIBu6tXV +BLJOSOSu2vVUH5GUIrpvK9FTySKYa+MGryoPasuqZNfwpaXK+ON2G6QsmcXPWZY0 +Dry6t0w2geW6UYVGmb831i8ZP3JVVVwcwi0= -----END X509 CRL----- diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py index 5b4bb123a9ec4..9e23e2d22a64b 100644 --- a/Lib/test/test_asyncio/utils.py +++ b/Lib/test/test_asyncio/utils.py @@ -58,7 +58,7 @@ def data_file(filename): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index e3fe18c1e3061..4ed1b3c999bdb 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -102,7 +102,7 @@ def data_file(*name): 'issuer': ((('countryName', 'XY'),), (('organizationName', 'Python Software Foundation CA'),), (('commonName', 'our-ca-server'),)), - 'notAfter': 'Jul 7 14:23:16 2028 GMT', + 'notAfter': 'Oct 28 14:23:16 2037 GMT', 'notBefore': 'Aug 29 14:23:16 2018 GMT', 'serialNumber': 'CB2D80995A69525C', 'subject': ((('countryName', 'XY'),), @@ -123,6 +123,8 @@ def data_file(*name): # cert with all kinds of subject alt names ALLSANFILE = data_file("allsans.pem") IDNSANSFILE = data_file("idnsans.pem") +NOSANFILE = data_file("nosan.pem") +NOSAN_HOSTNAME = 'localhost' REMOTE_HOST = "self-signed.pythontest.net" @@ -337,6 +339,8 @@ def testing_context(server_cert=SIGNED_CERTFILE): hostname = SIGNED_CERTFILE_HOSTNAME elif server_cert == SIGNED_CERTFILE2: hostname = SIGNED_CERTFILE2_HOSTNAME + elif server_cert == NOSANFILE: + hostname = NOSAN_HOSTNAME else: raise ValueError(server_cert) @@ -2997,6 +3001,30 @@ def test_check_hostname(self): "check_hostname requires server_hostname"): client_context.wrap_socket(s) + @unittest.skipUnless( + ssl.HAS_NEVER_CHECK_COMMON_NAME, "test requires hostname_checks_common_name" + ) + def test_hostname_checks_common_name(self): + client_context, server_context, hostname = testing_context() + assert client_context.hostname_checks_common_name + client_context.hostname_checks_common_name = False + + # default cert has a SAN + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + + client_context, server_context, hostname = testing_context(NOSANFILE) + client_context.hostname_checks_common_name = False + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + with self.assertRaises(ssl.SSLCertVerificationError): + s.connect((HOST, server.port)) + def test_ecc_cert(self): client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.load_verify_locations(SIGNING_CA) diff --git a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst new file mode 100644 index 0000000000000..a17e1b4463738 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst @@ -0,0 +1 @@ +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index ac502a9289396..d275f224b39a4 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -967,6 +967,11 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, _setSSLError(NULL, 0, __FILE__, __LINE__); return NULL; } + /* bpo43522 and OpenSSL < 1.1.1l: copy hostflags manually */ +#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION < 0x101010cf + X509_VERIFY_PARAM *ssl_params = SSL_get0_param(self->ssl); + X509_VERIFY_PARAM_set_hostflags(ssl_params, sslctx->hostflags); +#endif SSL_set_app_data(self->ssl, self); if (sock) { SSL_set_fd(self->ssl, Py_SAFE_DOWNCAST(sock->sock_fd, SOCKET_T, int)); From webhook-mailer at python.org Sat Apr 17 05:36:45 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 09:36:45 -0000 Subject: [Python-checkins] bpo-43669: PEP 644: Require OpenSSL 1.1.1 or newer (GH-23014) Message-ID: https://github.com/python/cpython/commit/39258d3595300bc7b952854c915f63ae2d4b9c3e commit: 39258d3595300bc7b952854c915f63ae2d4b9c3e branch: master author: Christian Heimes committer: tiran date: 2021-04-17T11:36:35+02:00 summary: bpo-43669: PEP 644: Require OpenSSL 1.1.1 or newer (GH-23014) - Remove HAVE_X509_VERIFY_PARAM_SET1_HOST check - Update hashopenssl to require OpenSSL 1.1.1 - multissltests only OpenSSL > 1.1.0 - ALPN is always supported - SNI is always supported - Remove deprecated NPN code. Python wrappers are no-op. - ECDH is always supported - Remove OPENSSL_VERSION_1_1 macro - Remove locking callbacks - Drop PY_OPENSSL_1_1_API macro - Drop HAVE_SSL_CTX_CLEAR_OPTIONS macro - SSL_CTRL_GET_MAX_PROTO_VERSION is always defined now - security level is always available now - get_num_tickets is available with TLS 1.3 - X509_V_ERR MISMATCH is always available now - Always set SSL_MODE_RELEASE_BUFFERS - X509_V_FLAG_TRUSTED_FIRST is always available - get_ciphers is always supported - SSL_CTX_set_keylog_callback is always available - Update Modules/Setup with static link example - Mention PEP in whatsnew - Drop 1.0.2 and 1.1.0 from GHA tests files: A Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst M .github/workflows/build.yml M Doc/using/unix.rst M Doc/whatsnew/3.10.rst M Lib/ssl.py M Lib/test/test_ssl.py M Modules/Setup M Modules/_hashopenssl.c M Modules/_ssl.c M Modules/_ssl/debughelpers.c M Modules/clinic/_hashopenssl.c.h M Modules/clinic/_ssl.c.h M Tools/ssl/multissltests.py M configure M configure.ac M pyconfig.h.in M setup.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6e6ce3085415..333c508ef53a7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -177,7 +177,7 @@ jobs: strategy: fail-fast: false matrix: - openssl_ver: [1.0.2u, 1.1.0l, 1.1.1k, 3.0.0-alpha14] + openssl_ver: [1.1.1k, 3.0.0-alpha14] env: OPENSSL_VER: ${{ matrix.openssl_ver }} MULTISSL_DIR: ${{ github.workspace }}/multissl diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst index 09dd5b0ac6e90..1d1fa8bd85d7e 100644 --- a/Doc/using/unix.rst +++ b/Doc/using/unix.rst @@ -135,6 +135,7 @@ some Unices may not have the :program:`env` command, so you may need to hardcode To use shell commands in your Python scripts, look at the :mod:`subprocess` module. +.. _unix_custom_openssl: Custom OpenSSL ============== diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 6623adfbf4f3d..0198b6e75deab 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -65,6 +65,7 @@ Summary -- Release highlights .. PEP-sized items next. +* :pep:`644`, require OpenSSL 1.1.1 or newer New Features @@ -1438,6 +1439,10 @@ CPython bytecode changes Build Changes ============= +* :pep:`644`: Python now requires OpenSSL 1.1.1 or newer. OpenSSL 1.0.2 is no + longer supported. + (Contributed by Christian Heimes in :issue:`43669`.) + * The C99 functions :c:func:`snprintf` and :c:func:`vsnprintf` are now required to build Python. (Contributed by Victor Stinner in :issue:`36020`.) @@ -1483,7 +1488,6 @@ Build Changes (Contributed by Christian Heimes in :issue:`43466`.) - C API Changes ============= diff --git a/Lib/ssl.py b/Lib/ssl.py index 30f4e5934febf..9c1ba581dd66f 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -909,15 +909,12 @@ def selected_npn_protocol(self): """Return the currently selected NPN protocol as a string, or ``None`` if a next protocol was not negotiated or if NPN is not supported by one of the peers.""" - if _ssl.HAS_NPN: - return self._sslobj.selected_npn_protocol() def selected_alpn_protocol(self): """Return the currently selected ALPN protocol as a string, or ``None`` if a next protocol was not negotiated or if ALPN is not supported by one of the peers.""" - if _ssl.HAS_ALPN: - return self._sslobj.selected_alpn_protocol() + return self._sslobj.selected_alpn_protocol() def cipher(self): """Return the currently selected cipher as a 3-tuple ``(name, @@ -1126,10 +1123,7 @@ def getpeercert(self, binary_form=False): @_sslcopydoc def selected_npn_protocol(self): self._checkClosed() - if self._sslobj is None or not _ssl.HAS_NPN: - return None - else: - return self._sslobj.selected_npn_protocol() + return None @_sslcopydoc def selected_alpn_protocol(self): diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 54007c78ed31a..3ad14c63968e6 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -40,7 +40,6 @@ PROTOCOLS = sorted(ssl._PROTOCOL_NAMES) HOST = socket_helper.HOST IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') -IS_OPENSSL_1_1_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0) IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) IS_OPENSSL_3_0_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') @@ -270,18 +269,6 @@ def handle_error(prefix): if support.verbose: sys.stdout.write(prefix + exc_format) -def can_clear_options(): - # 0.9.8m or higher - return ssl._OPENSSL_API_VERSION >= (0, 9, 8, 13, 15) - -def no_sslv2_implies_sslv3_hello(): - # 0.9.7h or higher - return ssl.OPENSSL_VERSION_INFO >= (0, 9, 7, 8, 15) - -def have_verify_flags(): - # 0.9.8 or higher - return ssl.OPENSSL_VERSION_INFO >= (0, 9, 8, 0, 15) - def _have_secp_curves(): if not ssl.HAS_ECDH: return False @@ -372,17 +359,15 @@ def test_constants(self): ssl.OP_SINGLE_DH_USE if ssl.HAS_ECDH: ssl.OP_SINGLE_ECDH_USE - if ssl.OPENSSL_VERSION_INFO >= (1, 0): - ssl.OP_NO_COMPRESSION + ssl.OP_NO_COMPRESSION self.assertIn(ssl.HAS_SNI, {True, False}) self.assertIn(ssl.HAS_ECDH, {True, False}) ssl.OP_NO_SSLv2 ssl.OP_NO_SSLv3 ssl.OP_NO_TLSv1 ssl.OP_NO_TLSv1_3 - if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1): - ssl.OP_NO_TLSv1_1 - ssl.OP_NO_TLSv1_2 + ssl.OP_NO_TLSv1_1 + ssl.OP_NO_TLSv1_2 self.assertEqual(ssl.PROTOCOL_TLS, ssl.PROTOCOL_SSLv23) def test_private_init(self): @@ -1161,7 +1146,6 @@ def test_python_ciphers(self): self.assertNotIn("RC4", name) self.assertNotIn("3DES", name) - @unittest.skipIf(ssl.OPENSSL_VERSION_INFO < (1, 0, 2, 0, 0), 'OpenSSL too old') def test_get_ciphers(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.set_ciphers('AESGCM') @@ -1181,15 +1165,11 @@ def test_options(self): self.assertEqual(default, ctx.options) ctx.options |= ssl.OP_NO_TLSv1 self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) - if can_clear_options(): - ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1) - self.assertEqual(default, ctx.options) - ctx.options = 0 - # Ubuntu has OP_NO_SSLv3 forced on by default - self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3) - else: - with self.assertRaises(ValueError): - ctx.options = 0 + ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1) + self.assertEqual(default, ctx.options) + ctx.options = 0 + # Ubuntu has OP_NO_SSLv3 forced on by default + self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3) def test_verify_mode_protocol(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) @@ -1327,8 +1307,6 @@ def test_security_level(self): } self.assertIn(ctx.security_level, security_level_range) - @unittest.skipUnless(have_verify_flags(), - "verify_flags need OpenSSL > 0.9.8") def test_verify_flags(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # default value @@ -1797,7 +1775,6 @@ class MySSLObject(ssl.SSLObject): obj = ctx.wrap_bio(ssl.MemoryBIO(), ssl.MemoryBIO()) self.assertIsInstance(obj, MySSLObject) - @unittest.skipUnless(IS_OPENSSL_1_1_1, "Test requires OpenSSL 1.1.1") def test_num_tickest(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) self.assertEqual(ctx.num_tickets, 2) @@ -2956,8 +2933,6 @@ def test_getpeercert(self): after = ssl.cert_time_to_seconds(cert['notAfter']) self.assertLess(before, after) - @unittest.skipUnless(have_verify_flags(), - "verify_flags need OpenSSL > 0.9.8") def test_crl_check(self): if support.verbose: sys.stdout.write("\n") @@ -3859,12 +3834,7 @@ def test_version_basic(self): self.assertIs(s.version(), None) self.assertIs(s._sslobj, None) s.connect((HOST, server.port)) - if IS_OPENSSL_1_1_1 and has_tls_version('TLSv1_3'): - self.assertEqual(s.version(), 'TLSv1.3') - elif ssl.OPENSSL_VERSION_INFO >= (1, 0, 2): - self.assertEqual(s.version(), 'TLSv1.2') - else: # 0.9.8 to 1.0.1 - self.assertIn(s.version(), ('TLSv1', 'TLSv1.2')) + self.assertEqual(s.version(), 'TLSv1.3') self.assertIs(s._sslobj, None) self.assertIs(s.version(), None) @@ -3966,8 +3936,6 @@ def test_default_ecdh_curve(self): # explicitly using the 'ECCdraft' cipher alias. Otherwise, # our default cipher list should prefer ECDH-based ciphers # automatically. - if ssl.OPENSSL_VERSION_INFO < (1, 0, 0): - context.set_ciphers("ECCdraft:ECDH") with ThreadedEchoServer(context=context) as server: with context.wrap_socket(socket.socket()) as s: s.connect((HOST, server.port)) @@ -4099,15 +4067,11 @@ def test_ecdh_curve(self): server_context.set_ciphers("ECDHE:!eNULL:!aNULL") server_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 try: - stats = server_params_test(client_context, server_context, - chatty=True, connectionchatty=True, - sni_name=hostname) + server_params_test(client_context, server_context, + chatty=True, connectionchatty=True, + sni_name=hostname) except ssl.SSLError: - pass - else: - # OpenSSL 1.0.2 does not fail although it should. - if IS_OPENSSL_1_1_0: - self.fail("mismatch curve did not fail") + self.fail("mismatch curve did not fail") def test_selected_alpn_protocol(self): # selected_alpn_protocol() is None unless ALPN is used. @@ -4117,7 +4081,6 @@ def test_selected_alpn_protocol(self): sni_name=hostname) self.assertIs(stats['client_alpn_protocol'], None) - @unittest.skipUnless(ssl.HAS_ALPN, "ALPN support required") def test_selected_alpn_protocol_if_server_uses_alpn(self): # selected_alpn_protocol() is None unless ALPN is used by the client. client_context, server_context, hostname = testing_context() @@ -4127,7 +4090,6 @@ def test_selected_alpn_protocol_if_server_uses_alpn(self): sni_name=hostname) self.assertIs(stats['client_alpn_protocol'], None) - @unittest.skipUnless(ssl.HAS_ALPN, "ALPN support needed for this test") def test_alpn_protocols(self): server_protocols = ['foo', 'bar', 'milkshake'] protocol_tests = [ @@ -4150,22 +4112,17 @@ def test_alpn_protocols(self): except ssl.SSLError as e: stats = e - if (expected is None and IS_OPENSSL_1_1_0 - and ssl.OPENSSL_VERSION_INFO < (1, 1, 0, 6)): - # OpenSSL 1.1.0 to 1.1.0e raises handshake error - self.assertIsInstance(stats, ssl.SSLError) - else: - msg = "failed trying %s (s) and %s (c).\n" \ - "was expecting %s, but got %%s from the %%s" \ - % (str(server_protocols), str(client_protocols), - str(expected)) - client_result = stats['client_alpn_protocol'] - self.assertEqual(client_result, expected, - msg % (client_result, "client")) - server_result = stats['server_alpn_protocols'][-1] \ - if len(stats['server_alpn_protocols']) else 'nothing' - self.assertEqual(server_result, expected, - msg % (server_result, "server")) + msg = "failed trying %s (s) and %s (c).\n" \ + "was expecting %s, but got %%s from the %%s" \ + % (str(server_protocols), str(client_protocols), + str(expected)) + client_result = stats['client_alpn_protocol'] + self.assertEqual(client_result, expected, + msg % (client_result, "client")) + server_result = stats['server_alpn_protocols'][-1] \ + if len(stats['server_alpn_protocols']) else 'nothing' + self.assertEqual(server_result, expected, + msg % (server_result, "server")) def test_selected_npn_protocol(self): # selected_npn_protocol() is None unless NPN is used @@ -4175,31 +4132,8 @@ def test_selected_npn_protocol(self): sni_name=hostname) self.assertIs(stats['client_npn_protocol'], None) - @unittest.skipUnless(ssl.HAS_NPN, "NPN support needed for this test") def test_npn_protocols(self): - server_protocols = ['http/1.1', 'spdy/2'] - protocol_tests = [ - (['http/1.1', 'spdy/2'], 'http/1.1'), - (['spdy/2', 'http/1.1'], 'http/1.1'), - (['spdy/2', 'test'], 'spdy/2'), - (['abc', 'def'], 'abc') - ] - for client_protocols, expected in protocol_tests: - client_context, server_context, hostname = testing_context() - server_context.set_npn_protocols(server_protocols) - client_context.set_npn_protocols(client_protocols) - stats = server_params_test(client_context, server_context, - chatty=True, connectionchatty=True, - sni_name=hostname) - msg = "failed trying %s (s) and %s (c).\n" \ - "was expecting %s, but got %%s from the %%s" \ - % (str(server_protocols), str(client_protocols), - str(expected)) - client_result = stats['client_npn_protocol'] - self.assertEqual(client_result, expected, msg % (client_result, "client")) - server_result = stats['server_npn_protocols'][-1] \ - if len(stats['server_npn_protocols']) else 'nothing' - self.assertEqual(server_result, expected, msg % (server_result, "server")) + assert not ssl.HAS_NPN def sni_contexts(self): server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) @@ -4369,8 +4303,7 @@ def test_session(self): self.assertGreater(session.time, 0) self.assertGreater(session.timeout, 0) self.assertTrue(session.has_ticket) - if ssl.OPENSSL_VERSION_INFO > (1, 0, 1): - self.assertGreater(session.ticket_lifetime_hint, 0) + self.assertGreater(session.ticket_lifetime_hint, 0) self.assertFalse(stats['session_reused']) sess_stat = server_context.session_stats() self.assertEqual(sess_stat['accept'], 1) diff --git a/Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst b/Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst new file mode 100644 index 0000000000000..48c74813daa90 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst @@ -0,0 +1 @@ +Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or newer. diff --git a/Modules/Setup b/Modules/Setup index a5fbaf6381be5..cce78582a1e28 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -207,11 +207,23 @@ _symtable symtablemodule.c #_socket socketmodule.c # Socket module helper for SSL support; you must comment out the other -# socket line above, and possibly edit the SSL variable: -#SSL=/usr/local/ssl -#_ssl _ssl.c \ -# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -# -L$(SSL)/lib -lssl -lcrypto +# socket line above, and edit the OPENSSL variable: +# OPENSSL=/path/to/openssl/directory +# _ssl _ssl.c \ +# -I$(OPENSSL)/include -L$(OPENSSL)/lib \ +# -lssl -lcrypto +#_hashlib _hashopenssl.c \ +# -I$(OPENSSL)/include -L$(OPENSSL)/lib \ +# -lcrypto + +# To statically link OpenSSL: +# _ssl _ssl.c \ +# -I$(OPENSSL)/include -L$(OPENSSL)/lib \ +# -l:libssl.a -Wl,--exclude-libs,libssl.a \ +# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a +#_hashlib _hashopenssl.c \ +# -I$(OPENSSL)/include -L$(OPENSSL)/lib \ +# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a # The crypt module is now disabled by default because it breaks builds # on many systems (where -lcrypt is needed), e.g. Linux (I believe). diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 272df354e6702..870ee89fdafc6 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -38,51 +38,12 @@ # error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL" #endif -#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) -/* OpenSSL < 1.1.0 */ -#define EVP_MD_CTX_new EVP_MD_CTX_create -#define EVP_MD_CTX_free EVP_MD_CTX_destroy - -HMAC_CTX * -HMAC_CTX_new(void) -{ - HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX)); - if (ctx != NULL) { - memset(ctx, 0, sizeof(HMAC_CTX)); - HMAC_CTX_init(ctx); - } - return ctx; -} - -void -HMAC_CTX_free(HMAC_CTX *ctx) -{ - if (ctx != NULL) { - HMAC_CTX_cleanup(ctx); - OPENSSL_free(ctx); - } -} - -const EVP_MD * -HMAC_CTX_get_md(const HMAC_CTX *ctx) -{ - return ctx->md; -} -#endif - #define MUNCH_SIZE INT_MAX -#ifdef NID_sha3_224 +#define PY_OPENSSL_HAS_SCRYPT 1 #define PY_OPENSSL_HAS_SHA3 1 -#endif - -#if defined(EVP_MD_FLAG_XOF) && defined(NID_shake128) #define PY_OPENSSL_HAS_SHAKE 1 -#endif - -#if defined(NID_blake2b512) && !defined(OPENSSL_NO_BLAKE2) #define PY_OPENSSL_HAS_BLAKE2 1 -#endif static PyModuleDef _hashlibmodule; @@ -1252,8 +1213,7 @@ pbkdf2_hmac_impl(PyObject *module, const char *hash_name, return key_obj; } -#if OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER) -#define PY_SCRYPT 1 +#ifdef PY_OPENSSL_HAS_SCRYPT /* XXX: Parameters salt, n, r and p should be required keyword-only parameters. They are optional in the Argument Clinic declaration only due to a @@ -1376,7 +1336,7 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt, } return key_obj; } -#endif +#endif /* PY_OPENSSL_HAS_SCRYPT */ /* Fast HMAC for hmac.digest() */ @@ -1844,12 +1804,6 @@ hashlib_md_meth_names(PyObject *module) return 0; } -/* LibreSSL doesn't support FIPS: - https://marc.info/?l=openbsd-misc&m=139819485423701&w=2 - - Ted Unangst wrote: "I figured I should mention our current libressl policy - wrt FIPS mode. It's gone and it's not coming back." */ -#ifndef LIBRESSL_VERSION_NUMBER /*[clinic input] _hashlib.get_fips_mode -> int @@ -1887,7 +1841,6 @@ _hashlib_get_fips_mode_impl(PyObject *module) return result; #endif } -#endif // !LIBRESSL_VERSION_NUMBER static int @@ -2067,17 +2020,6 @@ hashlib_free(void *m) } /* Py_mod_exec functions */ -static int -hashlib_openssl_legacy_init(PyObject *module) -{ -#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) - /* Load all digest algorithms and initialize cpuid */ - OPENSSL_add_all_algorithms_noconf(); - ERR_load_crypto_strings(); -#endif - return 0; -} - static int hashlib_init_evptype(PyObject *module) { @@ -2200,8 +2142,6 @@ hashlib_exception(PyObject *module) static PyModuleDef_Slot hashlib_slots[] = { - /* OpenSSL 1.0.2 and LibreSSL */ - {Py_mod_exec, hashlib_openssl_legacy_init}, {Py_mod_exec, hashlib_init_evptype}, {Py_mod_exec, hashlib_init_evpxoftype}, {Py_mod_exec, hashlib_init_hmactype}, diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 951f9699278db..f441a16625bc7 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -29,9 +29,9 @@ #define _PySSL_FIX_ERRNO #define PySSL_BEGIN_ALLOW_THREADS_S(save) \ - do { if (_ssl_locks_count>0) { (save) = PyEval_SaveThread(); } } while (0) + do { (save) = PyEval_SaveThread(); } while(0) #define PySSL_END_ALLOW_THREADS_S(save) \ - do { if (_ssl_locks_count>0) { PyEval_RestoreThread(save); } _PySSL_FIX_ERRNO; } while (0) + do { PyEval_RestoreThread(save); _PySSL_FIX_ERRNO; } while(0) #define PySSL_BEGIN_ALLOW_THREADS { \ PyThreadState *_save = NULL; \ PySSL_BEGIN_ALLOW_THREADS_S(_save); @@ -62,16 +62,6 @@ static PySocketModule_APIObject PySocketModule; #include "openssl/bio.h" #include "openssl/dh.h" -#ifndef HAVE_X509_VERIFY_PARAM_SET1_HOST -# ifdef LIBRESSL_VERSION_NUMBER -# error "LibreSSL is missing X509_VERIFY_PARAM_set1_host(), see https://github.com/libressl-portable/portable/issues/381" -# elif OPENSSL_VERSION_NUMBER > 0x1000200fL -# define HAVE_X509_VERIFY_PARAM_SET1_HOST -# else -# error "libssl is too old and does not support X509_VERIFY_PARAM_set1_host()" -# endif -#endif - #ifndef OPENSSL_THREADS # error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL" #endif @@ -142,15 +132,7 @@ static void _PySSLFixErrno(void) { #include "_ssl_data.h" #endif -#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) -# define OPENSSL_VERSION_1_1 1 -# define PY_OPENSSL_1_1_API 1 -#endif - -/* OpenSSL API 1.1.0+ does not include version methods. Define the methods - * unless OpenSSL is compiled without the methods. It's the easiest way to - * make 1.0.2, 1.1.0, 1.1.1, and 3.0.0 happy without deprecation warnings. - */ +/* OpenSSL API 1.1.0+ does not include version methods */ #ifndef OPENSSL_NO_TLS1_METHOD extern const SSL_METHOD *TLSv1_method(void); #endif @@ -161,129 +143,12 @@ extern const SSL_METHOD *TLSv1_1_method(void); extern const SSL_METHOD *TLSv1_2_method(void); #endif -/* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ -#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL -# define PY_OPENSSL_1_1_API 1 -#endif - -/* SNI support (client- and server-side) appeared in OpenSSL 1.0.0 and 0.9.8f - * This includes the SSL_set_SSL_CTX() function. - */ -#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME -# define HAVE_SNI 1 -#else -# define HAVE_SNI 0 -#endif - -#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation -# define HAVE_ALPN 1 -#else -# define HAVE_ALPN 0 -#endif - -/* We cannot rely on OPENSSL_NO_NEXTPROTONEG because LibreSSL 2.6.1 dropped - * NPN support but did not set OPENSSL_NO_NEXTPROTONEG for compatibility - * reasons. The check for TLSEXT_TYPE_next_proto_neg works with - * OpenSSL 1.0.1+ and LibreSSL. - * OpenSSL 1.1.1-pre1 dropped NPN but still has TLSEXT_TYPE_next_proto_neg. - */ -#ifdef OPENSSL_NO_NEXTPROTONEG -# define HAVE_NPN 0 -#elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) -# define HAVE_NPN 0 -#elif defined(TLSEXT_TYPE_next_proto_neg) -# define HAVE_NPN 1 -#else -# define HAVE_NPN 0 -#endif - -#if (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) -#define HAVE_OPENSSL_KEYLOG 1 -#endif - #ifndef INVALID_SOCKET /* MS defines this */ #define INVALID_SOCKET (-1) #endif -/* OpenSSL 1.0.2 and LibreSSL needs extra code for locking */ -#ifndef OPENSSL_VERSION_1_1 -#define HAVE_OPENSSL_CRYPTO_LOCK -#endif - -#if defined(OPENSSL_VERSION_1_1) && !defined(OPENSSL_NO_SSL2) +/* OpenSSL 1.1 does not have SSL 2.0 */ #define OPENSSL_NO_SSL2 -#endif - -#ifndef PY_OPENSSL_1_1_API -/* OpenSSL 1.1 API shims for OpenSSL < 1.1.0 and LibreSSL < 2.7.0 */ - -#define TLS_method SSLv23_method -#define TLS_client_method SSLv23_client_method -#define TLS_server_method SSLv23_server_method -#define ASN1_STRING_get0_data ASN1_STRING_data -#define X509_get0_notBefore X509_get_notBefore -#define X509_get0_notAfter X509_get_notAfter -#define OpenSSL_version_num SSLeay -#define OpenSSL_version SSLeay_version -#define OPENSSL_VERSION SSLEAY_VERSION - -static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) -{ - return ne->set; -} - -#ifndef OPENSSL_NO_COMP -/* LCOV_EXCL_START */ -static int COMP_get_type(const COMP_METHOD *meth) -{ - return meth->type; -} -/* LCOV_EXCL_STOP */ -#endif - -static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx) -{ - return ctx->default_passwd_callback; -} - -static void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx) -{ - return ctx->default_passwd_callback_userdata; -} - -static int X509_OBJECT_get_type(X509_OBJECT *x) -{ - return x->type; -} - -static X509 *X509_OBJECT_get0_X509(X509_OBJECT *x) -{ - return x->data.x509; -} - -static int BIO_up_ref(BIO *b) -{ - CRYPTO_add(&b->references, 1, CRYPTO_LOCK_BIO); - return 1; -} - -static STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *store) { - return store->objs; -} - -static int -SSL_SESSION_has_ticket(const SSL_SESSION *s) -{ - return (s->tlsext_ticklen > 0) ? 1 : 0; -} - -static unsigned long -SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s) -{ - return s->tlsext_tick_lifetime_hint; -} - -#endif /* OpenSSL < 1.1.0 or LibreSSL < 2.7.0 */ /* Default cipher suites */ #ifndef PY_SSL_DEFAULT_CIPHERS @@ -395,24 +260,10 @@ enum py_proto_version { #endif }; - -/* serves as a flag to see whether we've initialized the SSL thread support. */ -/* 0 means no, greater than 0 means yes */ - -static unsigned int _ssl_locks_count = 0; - /* SSL socket object */ #define X509_NAME_MAXLEN 256 -/* SSL_CTX_clear_options() and SSL_clear_options() were first added in - * OpenSSL 0.9.8m but do not appear in some 0.9.9-dev versions such the - * 0.9.9 from "May 2008" that NetBSD 5.0 uses. */ -#if OPENSSL_VERSION_NUMBER >= 0x009080dfL && OPENSSL_VERSION_NUMBER != 0x00909000L -# define HAVE_SSL_CTX_CLEAR_OPTIONS -#else -# undef HAVE_SSL_CTX_CLEAR_OPTIONS -#endif /* In case of 'tls-unique' it will be 12 bytes for TLS, 36 bytes for * older SSL, but let's be safe */ @@ -422,17 +273,9 @@ static unsigned int _ssl_locks_count = 0; typedef struct { PyObject_HEAD SSL_CTX *ctx; -#if HAVE_NPN - unsigned char *npn_protocols; - int npn_protocols_len; -#endif -#if HAVE_ALPN unsigned char *alpn_protocols; unsigned int alpn_protocols_len; -#endif -#ifndef OPENSSL_NO_TLSEXT PyObject *set_sni_cb; -#endif int check_hostname; /* OpenSSL has no API to get hostflags from X509_VERIFY_PARAM* struct. * We have to maintain our own copy. OpenSSL's hostflags default to 0. @@ -443,10 +286,8 @@ typedef struct { int post_handshake_auth; #endif PyObject *msg_cb; -#ifdef HAVE_OPENSSL_KEYLOG PyObject *keylog_filename; BIO *keylog_bio; -#endif } PySSLContext; typedef struct { @@ -652,23 +493,18 @@ fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, } switch (verify_code) { -#ifdef X509_V_ERR_HOSTNAME_MISMATCH - /* OpenSSL >= 1.0.2, LibreSSL >= 2.5.3 */ case X509_V_ERR_HOSTNAME_MISMATCH: verify_obj = PyUnicode_FromFormat( "Hostname mismatch, certificate is not valid for '%S'.", sslsock->server_hostname ); break; -#endif -#ifdef X509_V_ERR_IP_ADDRESS_MISMATCH case X509_V_ERR_IP_ADDRESS_MISMATCH: verify_obj = PyUnicode_FromFormat( "IP address mismatch, certificate is not valid for '%S'.", sslsock->server_hostname ); break; -#endif default: verify_str = X509_verify_cert_error_string(verify_code); if (verify_str != NULL) { @@ -1995,7 +1831,6 @@ cipher_to_tuple(const SSL_CIPHER *cipher) return NULL; } -#if OPENSSL_VERSION_NUMBER >= 0x10002000UL static PyObject * cipher_to_dict(const SSL_CIPHER *cipher) { @@ -2004,10 +1839,8 @@ cipher_to_dict(const SSL_CIPHER *cipher) unsigned long cipher_id; int alg_bits, strength_bits, len; char buf[512] = {0}; -#if OPENSSL_VERSION_1_1 int aead, nid; const char *skcipher = NULL, *digest = NULL, *kx = NULL, *auth = NULL; -#endif /* can be NULL */ cipher_name = SSL_CIPHER_get_name(cipher); @@ -2020,7 +1853,6 @@ cipher_to_dict(const SSL_CIPHER *cipher) buf[len-1] = '\0'; strength_bits = SSL_CIPHER_get_bits(cipher, &alg_bits); -#if OPENSSL_VERSION_1_1 aead = SSL_CIPHER_is_aead(cipher); nid = SSL_CIPHER_get_cipher_nid(cipher); skcipher = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; @@ -2030,13 +1862,10 @@ cipher_to_dict(const SSL_CIPHER *cipher) kx = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; nid = SSL_CIPHER_get_auth_nid(cipher); auth = nid != NID_undef ? OBJ_nid2ln(nid) : NULL; -#endif return Py_BuildValue( "{sksssssssisi" -#if OPENSSL_VERSION_1_1 "sOssssssss" -#endif "}", "id", cipher_id, "name", cipher_name, @@ -2044,16 +1873,13 @@ cipher_to_dict(const SSL_CIPHER *cipher) "description", buf, "strength_bits", strength_bits, "alg_bits", alg_bits -#if OPENSSL_VERSION_1_1 ,"aead", aead ? Py_True : Py_False, "symmetric", skcipher, "digest", digest, "kea", kx, "auth", auth -#endif ); } -#endif /*[clinic input] _ssl._SSLSocket.shared_ciphers @@ -2124,28 +1950,6 @@ _ssl__SSLSocket_version_impl(PySSLSocket *self) return PyUnicode_FromString(version); } -#if HAVE_NPN -/*[clinic input] -_ssl._SSLSocket.selected_npn_protocol -[clinic start generated code]*/ - -static PyObject * -_ssl__SSLSocket_selected_npn_protocol_impl(PySSLSocket *self) -/*[clinic end generated code: output=b91d494cd207ecf6 input=c28fde139204b826]*/ -{ - const unsigned char *out; - unsigned int outlen; - - SSL_get0_next_proto_negotiated(self->ssl, - &out, &outlen); - - if (out == NULL) - Py_RETURN_NONE; - return PyUnicode_FromStringAndSize((char *)out, outlen); -} -#endif - -#if HAVE_ALPN /*[clinic input] _ssl._SSLSocket.selected_alpn_protocol [clinic start generated code]*/ @@ -2163,7 +1967,6 @@ _ssl__SSLSocket_selected_alpn_protocol_impl(PySSLSocket *self) Py_RETURN_NONE; return PyUnicode_FromStringAndSize((char *)out, outlen); } -#endif /*[clinic input] _ssl._SSLSocket.compression @@ -2200,11 +2003,6 @@ static int PySSL_set_context(PySSLSocket *self, PyObject *value, void *closure) { if (PyObject_TypeCheck(value, PySSLContext_Type)) { -#if !HAVE_SNI - PyErr_SetString(PyExc_NotImplementedError, "setting a socket's " - "context is not supported by your OpenSSL library"); - return -1; -#else Py_INCREF(value); Py_SETREF(self->ctx, (PySSLContext *)value); SSL_set_SSL_CTX(self->ssl, self->ctx->ctx); @@ -2213,7 +2011,6 @@ static int PySSL_set_context(PySSLSocket *self, PyObject *value, self->ssl, self->ctx->msg_cb ? _PySSL_msg_callback : NULL ); -#endif } else { PyErr_SetString(PyExc_TypeError, "The value must be a SSLContext"); return -1; @@ -2840,8 +2637,6 @@ _ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self) #endif } -#ifdef OPENSSL_VERSION_1_1 - static SSL_SESSION* _ssl_session_dup(SSL_SESSION *session) { SSL_SESSION *newsession = NULL; @@ -2882,7 +2677,6 @@ _ssl_session_dup(SSL_SESSION *session) { } return NULL; } -#endif static PyObject * PySSL_get_session(PySSLSocket *self, void *closure) { @@ -2891,7 +2685,6 @@ PySSL_get_session(PySSLSocket *self, void *closure) { PySSLSession *pysess; SSL_SESSION *session; -#ifdef OPENSSL_VERSION_1_1 /* duplicate session as workaround for session bug in OpenSSL 1.1.0, * https://github.com/openssl/openssl/issues/1550 */ session = SSL_get0_session(self->ssl); /* borrowed reference */ @@ -2901,12 +2694,10 @@ PySSL_get_session(PySSLSocket *self, void *closure) { if ((session = _ssl_session_dup(session)) == NULL) { return NULL; } -#else session = SSL_get1_session(self->ssl); if (session == NULL) { Py_RETURN_NONE; } -#endif pysess = PyObject_GC_New(PySSLSession, PySSLSession_Type); if (pysess == NULL) { SSL_SESSION_free(session); @@ -2925,9 +2716,7 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, void *closure) { PySSLSession *pysess; -#ifdef OPENSSL_VERSION_1_1 SSL_SESSION *session; -#endif int result; if (!PySSLSession_Check(value)) { @@ -2951,7 +2740,6 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, "Cannot set session after handshake."); return -1; } -#ifdef OPENSSL_VERSION_1_1 /* duplicate session */ if ((session = _ssl_session_dup(pysess->session)) == NULL) { return -1; @@ -2959,9 +2747,6 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, result = SSL_set_session(self->ssl, session); /* free duplicate, SSL_set_session() bumps ref count */ SSL_SESSION_free(session); -#else - result = SSL_set_session(self->ssl, pysess->session); -#endif if (result == 0) { _setSSLError(NULL, 0, __FILE__, __LINE__); return -1; @@ -3012,7 +2797,6 @@ static PyMethodDef PySSLMethods[] = { _SSL__SSLSOCKET_CIPHER_METHODDEF _SSL__SSLSOCKET_SHARED_CIPHERS_METHODDEF _SSL__SSLSOCKET_VERSION_METHODDEF - _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF _SSL__SSLSOCKET_COMPRESSION_METHODDEF _SSL__SSLSOCKET_SHUTDOWN_METHODDEF @@ -3089,9 +2873,6 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) SSL_CTX *ctx = NULL; X509_VERIFY_PARAM *params; int result; -#if defined(SSL_MODE_RELEASE_BUFFERS) - unsigned long libver; -#endif PySSL_BEGIN_ALLOW_THREADS switch(proto_version) { @@ -3156,19 +2937,10 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) self->hostflags = X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS; self->protocol = proto_version; self->msg_cb = NULL; -#ifdef HAVE_OPENSSL_KEYLOG self->keylog_filename = NULL; self->keylog_bio = NULL; -#endif -#if HAVE_NPN - self->npn_protocols = NULL; -#endif -#if HAVE_ALPN self->alpn_protocols = NULL; -#endif -#ifndef OPENSSL_NO_TLSEXT self->set_sni_cb = NULL; -#endif /* Don't check host name by default */ if (proto_version == PY_SSL_VERSION_TLS_CLIENT) { self->check_hostname = 1; @@ -3230,37 +3002,9 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) return NULL; } -#if defined(SSL_MODE_RELEASE_BUFFERS) /* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces memory - usage for no cost at all. However, don't do this for OpenSSL versions - between 1.0.1 and 1.0.1h or 1.0.0 and 1.0.0m, which are affected by CVE - 2014-0198. I can't find exactly which beta fixed this CVE, so be - conservative and assume it wasn't fixed until release. We do this check - at runtime to avoid problems from the dynamic linker. - See #25672 for more on this. */ - libver = OpenSSL_version_num(); - if (!(libver >= 0x10001000UL && libver < 0x1000108fUL) && - !(libver >= 0x10000000UL && libver < 0x100000dfUL)) { - SSL_CTX_set_mode(self->ctx, SSL_MODE_RELEASE_BUFFERS); - } -#endif - - -#if !defined(OPENSSL_NO_ECDH) && !defined(OPENSSL_VERSION_1_1) - /* Allow automatic ECDH curve selection (on OpenSSL 1.0.2+), or use - prime256v1 by default. This is Apache mod_ssl's initialization - policy, so we should be safe. OpenSSL 1.1 has it enabled by default. - */ -#if defined(SSL_CTX_set_ecdh_auto) - SSL_CTX_set_ecdh_auto(self->ctx, 1); -#else - { - EC_KEY *key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); - SSL_CTX_set_tmp_ecdh(self->ctx, key); - EC_KEY_free(key); - } -#endif -#endif + usage for no cost at all. */ + SSL_CTX_set_mode(self->ctx, SSL_MODE_RELEASE_BUFFERS); #define SID_CTX "Python" SSL_CTX_set_session_id_context(self->ctx, (const unsigned char *) SID_CTX, @@ -3268,11 +3012,9 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #undef SID_CTX params = SSL_CTX_get0_param(self->ctx); -#ifdef X509_V_FLAG_TRUSTED_FIRST /* Improve trust chain building when cross-signed intermediate certificates are present. See https://bugs.python.org/issue23476. */ X509_VERIFY_PARAM_set_flags(params, X509_V_FLAG_TRUSTED_FIRST); -#endif X509_VERIFY_PARAM_set_hostflags(params, self->hostflags); #ifdef TLS1_3_VERSION @@ -3286,9 +3028,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) static int context_traverse(PySSLContext *self, visitproc visit, void *arg) { -#ifndef OPENSSL_NO_TLSEXT Py_VISIT(self->set_sni_cb); -#endif Py_VISIT(self->msg_cb); return 0; } @@ -3296,11 +3036,8 @@ context_traverse(PySSLContext *self, visitproc visit, void *arg) static int context_clear(PySSLContext *self) { -#ifndef OPENSSL_NO_TLSEXT Py_CLEAR(self->set_sni_cb); -#endif Py_CLEAR(self->msg_cb); -#ifdef HAVE_OPENSSL_KEYLOG Py_CLEAR(self->keylog_filename); if (self->keylog_bio != NULL) { PySSL_BEGIN_ALLOW_THREADS @@ -3308,7 +3045,6 @@ context_clear(PySSLContext *self) PySSL_END_ALLOW_THREADS self->keylog_bio = NULL; } -#endif return 0; } @@ -3320,12 +3056,7 @@ context_dealloc(PySSLContext *self) PyObject_GC_UnTrack(self); context_clear(self); SSL_CTX_free(self->ctx); -#if HAVE_NPN - PyMem_Free(self->npn_protocols); -#endif -#if HAVE_ALPN - PyMem_Free(self->alpn_protocols); -#endif + PyMem_FREE(self->alpn_protocols); Py_TYPE(self)->tp_free(self); Py_DECREF(tp); } @@ -3353,7 +3084,6 @@ _ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist) Py_RETURN_NONE; } -#if OPENSSL_VERSION_NUMBER >= 0x10002000UL /*[clinic input] _ssl._SSLContext.get_ciphers [clinic start generated code]*/ @@ -3396,10 +3126,8 @@ _ssl__SSLContext_get_ciphers_impl(PySSLContext *self) return result; } -#endif -#if HAVE_NPN || HAVE_ALPN static int do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, const unsigned char *server_protocols, unsigned int server_protocols_len, @@ -3423,77 +3151,7 @@ do_protocol_selection(int alpn, unsigned char **out, unsigned char *outlen, return SSL_TLSEXT_ERR_OK; } -#endif - -#if HAVE_NPN -/* this callback gets passed to SSL_CTX_set_next_protos_advertise_cb */ -static int -_advertiseNPN_cb(SSL *s, - const unsigned char **data, unsigned int *len, - void *args) -{ - PySSLContext *ssl_ctx = (PySSLContext *) args; - - if (ssl_ctx->npn_protocols == NULL) { - *data = (unsigned char *)""; - *len = 0; - } else { - *data = ssl_ctx->npn_protocols; - *len = ssl_ctx->npn_protocols_len; - } - return SSL_TLSEXT_ERR_OK; -} -/* this callback gets passed to SSL_CTX_set_next_proto_select_cb */ -static int -_selectNPN_cb(SSL *s, - unsigned char **out, unsigned char *outlen, - const unsigned char *server, unsigned int server_len, - void *args) -{ - PySSLContext *ctx = (PySSLContext *)args; - return do_protocol_selection(0, out, outlen, server, server_len, - ctx->npn_protocols, ctx->npn_protocols_len); -} -#endif - -/*[clinic input] -_ssl._SSLContext._set_npn_protocols - protos: Py_buffer - / -[clinic start generated code]*/ - -static PyObject * -_ssl__SSLContext__set_npn_protocols_impl(PySSLContext *self, - Py_buffer *protos) -/*[clinic end generated code: output=72b002c3324390c6 input=319fcb66abf95bd7]*/ -{ -#if HAVE_NPN - PyMem_Free(self->npn_protocols); - self->npn_protocols = PyMem_Malloc(protos->len); - if (self->npn_protocols == NULL) - return PyErr_NoMemory(); - memcpy(self->npn_protocols, protos->buf, protos->len); - self->npn_protocols_len = (int) protos->len; - - /* set both server and client callbacks, because the context can - * be used to create both types of sockets */ - SSL_CTX_set_next_protos_advertised_cb(self->ctx, - _advertiseNPN_cb, - self); - SSL_CTX_set_next_proto_select_cb(self->ctx, - _selectNPN_cb, - self); - - Py_RETURN_NONE; -#else - PyErr_SetString(PyExc_NotImplementedError, - "The NPN extension requires OpenSSL 1.0.1 or later."); - return NULL; -#endif -} - -#if HAVE_ALPN static int _selectALPN_cb(SSL *s, const unsigned char **out, unsigned char *outlen, @@ -3505,7 +3163,6 @@ _selectALPN_cb(SSL *s, ctx->alpn_protocols, ctx->alpn_protocols_len, client_protocols, client_protocols_len); } -#endif /*[clinic input] _ssl._SSLContext._set_alpn_protocols @@ -3518,7 +3175,6 @@ _ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self, Py_buffer *protos) /*[clinic end generated code: output=87599a7f76651a9b input=9bba964595d519be]*/ { -#if HAVE_ALPN if ((size_t)protos->len > UINT_MAX) { PyErr_Format(PyExc_OverflowError, "protocols longer than %u bytes", UINT_MAX); @@ -3537,11 +3193,6 @@ _ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self, SSL_CTX_set_alpn_select_cb(self->ctx, _selectALPN_cb, self); Py_RETURN_NONE; -#else - PyErr_SetString(PyExc_NotImplementedError, - "The ALPN extension requires OpenSSL 1.0.2 or later."); - return NULL; -#endif } static PyObject * @@ -3617,9 +3268,6 @@ set_verify_flags(PySSLContext *self, PyObject *arg, void *c) } /* Getter and setter for protocol version */ -#if defined(SSL_CTRL_GET_MAX_PROTO_VERSION) - - static int set_min_max_proto_version(PySSLContext *self, PyObject *arg, int what) { @@ -3714,9 +3362,8 @@ set_maximum_version(PySSLContext *self, PyObject *arg, void *c) { return set_min_max_proto_version(self, arg, 1); } -#endif /* SSL_CTRL_GET_MAX_PROTO_VERSION */ -#if (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) +#ifdef TLS1_3_VERSION static PyObject * get_num_tickets(PySSLContext *self, void *c) { @@ -3747,16 +3394,14 @@ set_num_tickets(PySSLContext *self, PyObject *arg, void *c) PyDoc_STRVAR(PySSLContext_num_tickets_doc, "Control the number of TLSv1.3 session tickets"); -#endif /* OpenSSL 1.1.1 */ +#endif /* TLS1_3_VERSION */ -#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) static PyObject * get_security_level(PySSLContext *self, void *c) { return PyLong_FromLong(SSL_CTX_get_security_level(self->ctx)); } PyDoc_STRVAR(PySSLContext_security_level_doc, "The current security level"); -#endif /* OpenSSL 1.1.0 */ static PyObject * get_options(PySSLContext *self, void *c) @@ -3774,13 +3419,7 @@ set_options(PySSLContext *self, PyObject *arg, void *c) clear = opts & ~new_opts; set = ~opts & new_opts; if (clear) { -#ifdef HAVE_SSL_CTX_CLEAR_OPTIONS SSL_CTX_clear_options(self->ctx, clear); -#else - PyErr_SetString(PyExc_ValueError, - "can't clear options before OpenSSL 0.9.8m"); - return -1; -#endif } if (set) SSL_CTX_set_options(self->ctx, set); @@ -4468,7 +4107,6 @@ _ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self) Py_RETURN_NONE; } -#ifndef OPENSSL_NO_ECDH /*[clinic input] _ssl._SSLContext.set_ecdh_curve name: object @@ -4503,9 +4141,7 @@ _ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name) EC_KEY_free(key); Py_RETURN_NONE; } -#endif -#if HAVE_SNI && !defined(OPENSSL_NO_TLSEXT) static int _servername_callback(SSL *s, int *al, void *args) { @@ -4609,7 +4245,6 @@ _servername_callback(SSL *s, int *al, void *args) PyGILState_Release(gstate); return ret; } -#endif static PyObject * get_sni_callback(PySSLContext *self, void *c) @@ -4630,7 +4265,6 @@ set_sni_callback(PySSLContext *self, PyObject *arg, void *c) "sni_callback cannot be set on TLS_CLIENT context"); return -1; } -#if HAVE_SNI && !defined(OPENSSL_NO_TLSEXT) Py_CLEAR(self->set_sni_cb); if (arg == Py_None) { SSL_CTX_set_tlsext_servername_callback(self->ctx, NULL); @@ -4648,13 +4282,6 @@ set_sni_callback(PySSLContext *self, PyObject *arg, void *c) SSL_CTX_set_tlsext_servername_arg(self->ctx, self); } return 0; -#else - PyErr_SetString(PyExc_NotImplementedError, - "The TLS extension servername callback, " - "SSL_CTX_set_tlsext_servername_callback, " - "is not in the current OpenSSL library."); - return -1; -#endif } PyDoc_STRVAR(PySSLContext_sni_callback_doc, @@ -4779,21 +4406,17 @@ static PyGetSetDef context_getsetlist[] = { (setter) set_check_hostname, NULL}, {"_host_flags", (getter) get_host_flags, (setter) set_host_flags, NULL}, -#if SSL_CTRL_GET_MAX_PROTO_VERSION {"minimum_version", (getter) get_minimum_version, (setter) set_minimum_version, NULL}, {"maximum_version", (getter) get_maximum_version, (setter) set_maximum_version, NULL}, -#endif -#ifdef HAVE_OPENSSL_KEYLOG {"keylog_filename", (getter) _PySSLContext_get_keylog_filename, (setter) _PySSLContext_set_keylog_filename, NULL}, -#endif {"_msg_callback", (getter) _PySSLContext_get_msg_callback, (setter) _PySSLContext_set_msg_callback, NULL}, {"sni_callback", (getter) get_sni_callback, (setter) set_sni_callback, PySSLContext_sni_callback_doc}, -#if (OPENSSL_VERSION_NUMBER >= 0x10101000L) && !defined(LIBRESSL_VERSION_NUMBER) +#ifdef TLS1_3_VERSION {"num_tickets", (getter) get_num_tickets, (setter) set_num_tickets, PySSLContext_num_tickets_doc}, #endif @@ -4812,10 +4435,8 @@ static PyGetSetDef context_getsetlist[] = { (setter) set_verify_flags, NULL}, {"verify_mode", (getter) get_verify_mode, (setter) set_verify_mode, NULL}, -#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) {"security_level", (getter) get_security_level, NULL, PySSLContext_security_level_doc}, -#endif {NULL}, /* sentinel */ }; @@ -4824,7 +4445,6 @@ static struct PyMethodDef context_methods[] = { _SSL__SSLCONTEXT__WRAP_BIO_METHODDEF _SSL__SSLCONTEXT_SET_CIPHERS_METHODDEF _SSL__SSLCONTEXT__SET_ALPN_PROTOCOLS_METHODDEF - _SSL__SSLCONTEXT__SET_NPN_PROTOCOLS_METHODDEF _SSL__SSLCONTEXT_LOAD_CERT_CHAIN_METHODDEF _SSL__SSLCONTEXT_LOAD_DH_PARAMS_METHODDEF _SSL__SSLCONTEXT_LOAD_VERIFY_LOCATIONS_METHODDEF @@ -5281,11 +4901,7 @@ PySSL_RAND(int len, int pseudo) if (bytes == NULL) return NULL; if (pseudo) { -#ifdef PY_OPENSSL_1_1_API ok = RAND_bytes((unsigned char*)PyBytes_AS_STRING(bytes), len); -#else - ok = RAND_pseudo_bytes((unsigned char*)PyBytes_AS_STRING(bytes), len); -#endif if (ok == 0 || ok == 1) return Py_BuildValue("NO", bytes, ok == 1 ? Py_True : Py_False); } @@ -5840,92 +5456,6 @@ static PyMethodDef PySSL_methods[] = { }; -#ifdef HAVE_OPENSSL_CRYPTO_LOCK - -/* an implementation of OpenSSL threading operations in terms - * of the Python C thread library - * Only used up to 1.0.2. OpenSSL 1.1.0+ has its own locking code. - */ - -static PyThread_type_lock *_ssl_locks = NULL; - -#if OPENSSL_VERSION_NUMBER >= 0x10000000 -/* use new CRYPTO_THREADID API. */ -static void -_ssl_threadid_callback(CRYPTO_THREADID *id) -{ - CRYPTO_THREADID_set_numeric(id, PyThread_get_thread_ident()); -} -#else -/* deprecated CRYPTO_set_id_callback() API. */ -static unsigned long -_ssl_thread_id_function (void) { - return PyThread_get_thread_ident(); -} -#endif - -static void _ssl_thread_locking_function - (int mode, int n, const char *file, int line) { - /* this function is needed to perform locking on shared data - structures. (Note that OpenSSL uses a number of global data - structures that will be implicitly shared whenever multiple - threads use OpenSSL.) Multi-threaded applications will - crash at random if it is not set. - - locking_function() must be able to handle up to - CRYPTO_num_locks() different mutex locks. It sets the n-th - lock if mode & CRYPTO_LOCK, and releases it otherwise. - - file and line are the file number of the function setting the - lock. They can be useful for debugging. - */ - - if ((_ssl_locks == NULL) || - (n < 0) || ((unsigned)n >= _ssl_locks_count)) - return; - - if (mode & CRYPTO_LOCK) { - PyThread_acquire_lock(_ssl_locks[n], 1); - } else { - PyThread_release_lock(_ssl_locks[n]); - } -} - -static int _setup_ssl_threads(void) { - - unsigned int i; - - if (_ssl_locks == NULL) { - _ssl_locks_count = CRYPTO_num_locks(); - _ssl_locks = PyMem_Calloc(_ssl_locks_count, - sizeof(PyThread_type_lock)); - if (_ssl_locks == NULL) { - PyErr_NoMemory(); - return 0; - } - for (i = 0; i < _ssl_locks_count; i++) { - _ssl_locks[i] = PyThread_allocate_lock(); - if (_ssl_locks[i] == NULL) { - unsigned int j; - for (j = 0; j < i; j++) { - PyThread_free_lock(_ssl_locks[j]); - } - PyMem_Free(_ssl_locks); - return 0; - } - } - CRYPTO_set_locking_callback(_ssl_thread_locking_function); -#if OPENSSL_VERSION_NUMBER >= 0x10000000 - CRYPTO_THREADID_set_callback(_ssl_threadid_callback); -#else - CRYPTO_set_id_callback(_ssl_thread_id_function); -#endif - } - return 1; -} - -#endif /* HAVE_OPENSSL_CRYPTO_LOCK for OpenSSL < 1.1.0 */ - static int sslmodule_init_types(PyObject *module) { @@ -6205,10 +5735,8 @@ sslmodule_init_constants(PyObject *m) X509_V_FLAG_X509_STRICT); PyModule_AddIntConstant(m, "VERIFY_ALLOW_PROXY_CERTS", X509_V_FLAG_ALLOW_PROXY_CERTS); -#ifdef X509_V_FLAG_TRUSTED_FIRST PyModule_AddIntConstant(m, "VERIFY_X509_TRUSTED_FIRST", X509_V_FLAG_TRUSTED_FIRST); -#endif /* Alert Descriptions from ssl.h */ /* note RESERVED constants no longer intended for use have been removed */ @@ -6365,31 +5893,11 @@ sslmodule_init_constants(PyObject *m) PyModule_AddObject((m), (key), bool_obj); \ } while (0) -#if HAVE_SNI addbool(m, "HAS_SNI", 1); -#else - addbool(m, "HAS_SNI", 0); -#endif - addbool(m, "HAS_TLS_UNIQUE", 1); - -#ifndef OPENSSL_NO_ECDH addbool(m, "HAS_ECDH", 1); -#else - addbool(m, "HAS_ECDH", 0); -#endif - -#if HAVE_NPN - addbool(m, "HAS_NPN", 1); -#else addbool(m, "HAS_NPN", 0); -#endif - -#if HAVE_ALPN addbool(m, "HAS_ALPN", 1); -#else - addbool(m, "HAS_ALPN", 0); -#endif #if defined(SSL2_VERSION) && !defined(OPENSSL_NO_SSL2) addbool(m, "HAS_SSLv2", 1); @@ -6430,29 +5938,6 @@ sslmodule_init_constants(PyObject *m) return 0; } -static int -sslmodule_legacy(PyObject *module) -{ -#ifndef OPENSSL_VERSION_1_1 - /* Load all algorithms and initialize cpuid */ - OPENSSL_add_all_algorithms_noconf(); - /* Init OpenSSL */ - SSL_load_error_strings(); - SSL_library_init(); -#endif - -#ifdef HAVE_OPENSSL_CRYPTO_LOCK - /* note that this will start threading if not already started */ - if (!_setup_ssl_threads()) { - return 0; - } -#elif OPENSSL_VERSION_1_1 - /* OpenSSL 1.1.0 builtin thread support is enabled */ - _ssl_locks_count++; -#endif - return 0; -} - PyDoc_STRVAR(module_doc, "Implementation module for SSL socket operations. See the socket module\n\ for documentation."); @@ -6491,8 +5976,6 @@ PyInit__ssl(void) return NULL; if (sslmodule_init_versioninfo(m) != 0) return NULL; - if (sslmodule_legacy(m) != 0) - return NULL; return m; } diff --git a/Modules/_ssl/debughelpers.c b/Modules/_ssl/debughelpers.c index af56f9d28d164..f39372ca53d9e 100644 --- a/Modules/_ssl/debughelpers.c +++ b/Modules/_ssl/debughelpers.c @@ -114,8 +114,6 @@ _PySSLContext_set_msg_callback(PySSLContext *self, PyObject *arg, void *c) { return 0; } -#ifdef HAVE_OPENSSL_KEYLOG - static void _PySSL_keylog_callback(const SSL *ssl, const char *line) { @@ -219,5 +217,3 @@ _PySSLContext_set_keylog_filename(PySSLContext *self, PyObject *arg, void *c) { SSL_CTX_set_keylog_callback(self->ctx, _PySSL_keylog_callback); return 0; } - -#endif diff --git a/Modules/clinic/_hashopenssl.c.h b/Modules/clinic/_hashopenssl.c.h index fbdff26026f6c..de01489e6a3b0 100644 --- a/Modules/clinic/_hashopenssl.c.h +++ b/Modules/clinic/_hashopenssl.c.h @@ -950,7 +950,7 @@ pbkdf2_hmac(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#if (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) +#if defined(PY_OPENSSL_HAS_SCRYPT) PyDoc_STRVAR(_hashlib_scrypt__doc__, "scrypt($module, /, password, *, salt=None, n=None, r=None, p=None,\n" @@ -1068,7 +1068,7 @@ _hashlib_scrypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) */ +#endif /* defined(PY_OPENSSL_HAS_SCRYPT) */ PyDoc_STRVAR(_hashlib_hmac_singleshot__doc__, "hmac_digest($module, /, key, msg, digest)\n" @@ -1275,8 +1275,6 @@ _hashlib_HMAC_hexdigest(HMACobject *self, PyObject *Py_UNUSED(ignored)) return _hashlib_HMAC_hexdigest_impl(self); } -#if !defined(LIBRESSL_VERSION_NUMBER) - PyDoc_STRVAR(_hashlib_get_fips_mode__doc__, "get_fips_mode($module, /)\n" "--\n" @@ -1312,8 +1310,6 @@ _hashlib_get_fips_mode(PyObject *module, PyObject *Py_UNUSED(ignored)) return return_value; } -#endif /* !defined(LIBRESSL_VERSION_NUMBER) */ - PyDoc_STRVAR(_hashlib_compare_digest__doc__, "compare_digest($module, a, b, /)\n" "--\n" @@ -1389,8 +1385,4 @@ _hashlib_compare_digest(PyObject *module, PyObject *const *args, Py_ssize_t narg #ifndef _HASHLIB_SCRYPT_METHODDEF #define _HASHLIB_SCRYPT_METHODDEF #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */ - -#ifndef _HASHLIB_GET_FIPS_MODE_METHODDEF - #define _HASHLIB_GET_FIPS_MODE_METHODDEF -#endif /* !defined(_HASHLIB_GET_FIPS_MODE_METHODDEF) */ -/*[clinic end generated code: output=980087de1b03ad42 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=162369cb9d43f1cc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 43469d3c35824..95aad0c21df9a 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -139,29 +139,6 @@ _ssl__SSLSocket_version(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) return _ssl__SSLSocket_version_impl(self); } -#if (HAVE_NPN) - -PyDoc_STRVAR(_ssl__SSLSocket_selected_npn_protocol__doc__, -"selected_npn_protocol($self, /)\n" -"--\n" -"\n"); - -#define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF \ - {"selected_npn_protocol", (PyCFunction)_ssl__SSLSocket_selected_npn_protocol, METH_NOARGS, _ssl__SSLSocket_selected_npn_protocol__doc__}, - -static PyObject * -_ssl__SSLSocket_selected_npn_protocol_impl(PySSLSocket *self); - -static PyObject * -_ssl__SSLSocket_selected_npn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) -{ - return _ssl__SSLSocket_selected_npn_protocol_impl(self); -} - -#endif /* (HAVE_NPN) */ - -#if (HAVE_ALPN) - PyDoc_STRVAR(_ssl__SSLSocket_selected_alpn_protocol__doc__, "selected_alpn_protocol($self, /)\n" "--\n" @@ -179,8 +156,6 @@ _ssl__SSLSocket_selected_alpn_protocol(PySSLSocket *self, PyObject *Py_UNUSED(ig return _ssl__SSLSocket_selected_alpn_protocol_impl(self); } -#endif /* (HAVE_ALPN) */ - PyDoc_STRVAR(_ssl__SSLSocket_compression__doc__, "compression($self, /)\n" "--\n" @@ -452,8 +427,6 @@ _ssl__SSLContext_set_ciphers(PySSLContext *self, PyObject *arg) return return_value; } -#if (OPENSSL_VERSION_NUMBER >= 0x10002000UL) - PyDoc_STRVAR(_ssl__SSLContext_get_ciphers__doc__, "get_ciphers($self, /)\n" "--\n" @@ -471,44 +444,6 @@ _ssl__SSLContext_get_ciphers(PySSLContext *self, PyObject *Py_UNUSED(ignored)) return _ssl__SSLContext_get_ciphers_impl(self); } -#endif /* (OPENSSL_VERSION_NUMBER >= 0x10002000UL) */ - -PyDoc_STRVAR(_ssl__SSLContext__set_npn_protocols__doc__, -"_set_npn_protocols($self, protos, /)\n" -"--\n" -"\n"); - -#define _SSL__SSLCONTEXT__SET_NPN_PROTOCOLS_METHODDEF \ - {"_set_npn_protocols", (PyCFunction)_ssl__SSLContext__set_npn_protocols, METH_O, _ssl__SSLContext__set_npn_protocols__doc__}, - -static PyObject * -_ssl__SSLContext__set_npn_protocols_impl(PySSLContext *self, - Py_buffer *protos); - -static PyObject * -_ssl__SSLContext__set_npn_protocols(PySSLContext *self, PyObject *arg) -{ - PyObject *return_value = NULL; - Py_buffer protos = {NULL, NULL}; - - if (PyObject_GetBuffer(arg, &protos, PyBUF_SIMPLE) != 0) { - goto exit; - } - if (!PyBuffer_IsContiguous(&protos, 'C')) { - _PyArg_BadArgument("_set_npn_protocols", "argument", "contiguous buffer", arg); - goto exit; - } - return_value = _ssl__SSLContext__set_npn_protocols_impl(self, &protos); - -exit: - /* Cleanup for protos */ - if (protos.obj) { - PyBuffer_Release(&protos); - } - - return return_value; -} - PyDoc_STRVAR(_ssl__SSLContext__set_alpn_protocols__doc__, "_set_alpn_protocols($self, protos, /)\n" "--\n" @@ -829,8 +764,6 @@ _ssl__SSLContext_set_default_verify_paths(PySSLContext *self, PyObject *Py_UNUSE return _ssl__SSLContext_set_default_verify_paths_impl(self); } -#if !defined(OPENSSL_NO_ECDH) - PyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__, "set_ecdh_curve($self, name, /)\n" "--\n" @@ -839,8 +772,6 @@ PyDoc_STRVAR(_ssl__SSLContext_set_ecdh_curve__doc__, #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF \ {"set_ecdh_curve", (PyCFunction)_ssl__SSLContext_set_ecdh_curve, METH_O, _ssl__SSLContext_set_ecdh_curve__doc__}, -#endif /* !defined(OPENSSL_NO_ECDH) */ - PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__, "cert_store_stats($self, /)\n" "--\n" @@ -1420,22 +1351,6 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #endif /* defined(_MSC_VER) */ -#ifndef _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF - #define _SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF -#endif /* !defined(_SSL__SSLSOCKET_SELECTED_NPN_PROTOCOL_METHODDEF) */ - -#ifndef _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF - #define _SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF -#endif /* !defined(_SSL__SSLSOCKET_SELECTED_ALPN_PROTOCOL_METHODDEF) */ - -#ifndef _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF - #define _SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF -#endif /* !defined(_SSL__SSLCONTEXT_GET_CIPHERS_METHODDEF) */ - -#ifndef _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF - #define _SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF -#endif /* !defined(_SSL__SSLCONTEXT_SET_ECDH_CURVE_METHODDEF) */ - #ifndef _SSL_RAND_EGD_METHODDEF #define _SSL_RAND_EGD_METHODDEF #endif /* !defined(_SSL_RAND_EGD_METHODDEF) */ @@ -1447,4 +1362,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=2bb53a80040c9b35 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9468e58904a565a2 input=a9049054013a1b77]*/ diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index dd8d211646df3..90213b3dff5e1 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -43,21 +43,17 @@ log = logging.getLogger("multissl") OPENSSL_OLD_VERSIONS = [ - "1.0.2u", - "1.1.0l", ] OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - # "3.0.0-alpha14" + "3.0.0-alpha14" ] LIBRESSL_OLD_VERSIONS = [ - "2.9.2", ] LIBRESSL_RECENT_VERSIONS = [ - "3.2.4", ] # store files in ../multissl diff --git a/configure b/configure index e03b9ac5b3ddb..ad0367fe0e20b 100755 --- a/configure +++ b/configure @@ -1,12 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for python 3.10. +# Generated by GNU Autoconf 2.69 for python 3.10. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -17,16 +16,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -36,46 +33,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -84,6 +81,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -92,12 +96,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -109,10 +109,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -134,22 +154,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -169,53 +187,42 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ) -then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir$as_base + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -223,21 +230,14 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -255,19 +255,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - printf "%s\n" "$0: Please tell bug-autoconf at gnu.org and + $as_echo "$0: Please tell bug-autoconf at gnu.org and $0: https://bugs.python.org/ about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script @@ -295,7 +294,6 @@ as_fn_unset () } as_unset=as_fn_unset - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -313,14 +311,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -335,7 +325,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -344,7 +334,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -383,13 +373,12 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -401,27 +390,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -433,9 +413,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -462,7 +442,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -506,7 +486,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -520,10 +500,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -537,13 +513,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -619,36 +588,40 @@ PACKAGE_URL='' ac_unique_file="Include/object.h" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS # include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif #endif #ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= ac_subst_vars='LTLIBOBJS TEST_MODULES LIBRARY_DEPS @@ -702,7 +675,6 @@ LDSHARED SHLIB_SUFFIX LIBTOOL_CRUFT OTHER_LIBTOOL_OPT -EGREP UNIVERSAL_ARCH_FLAGS LDFLAGS_NODIST CFLAGS_NODIST @@ -746,6 +718,7 @@ DLLLIBRARY LDLIBRARY LIBRARY BUILDEXEEXT +EGREP NO_AS_NEEDED MULTIARCH_CPPFLAGS PLATFORM_TRIPLET @@ -819,7 +792,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -943,7 +915,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -973,6 +944,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1013,9 +986,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1039,9 +1012,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1194,15 +1167,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1252,9 +1216,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1268,9 +1232,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1314,9 +1278,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1332,7 +1296,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1340,7 +1304,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1396,7 +1360,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1493,7 +1457,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1690,9 +1653,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1720,8 +1683,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1729,7 +1691,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1739,9 +1701,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF python configure 3.10 -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1758,14 +1720,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam + rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1773,15 +1735,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1803,7 +1764,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1811,15 +1772,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1835,14 +1795,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1850,18 +1810,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1876,43 +1835,101 @@ fi } # ac_fn_c_try_link -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## --------------------------------------- ## +## Report this to https://bugs.python.org/ ## +## --------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_header_compile +} # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -1922,26 +1939,25 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -1952,6 +1968,37 @@ fi } # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -1959,18 +2006,17 @@ fi ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -1978,13 +2024,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -1992,19 +2037,18 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2023,7 +2067,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2033,15 +2077,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2051,10 +2094,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break -else $as_nop +else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2062,14 +2104,14 @@ else $as_nop fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2079,15 +2121,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2097,10 +2138,9 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break -else $as_nop +else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2108,14 +2148,14 @@ else $as_nop fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -else $as_nop +else ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2123,7 +2163,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main (void) +main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2133,13 +2173,12 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid -else $as_nop +else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2149,12 +2188,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval (void) { return $2; } -static unsigned long int ulongval (void) { return $2; } +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } #include #include int -main (void) +main () { FILE *f = fopen ("conftest.val", "w"); @@ -2182,10 +2221,9 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2217,9 +2254,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2237,51 +2281,47 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func -# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR -# ------------------------------------------------------------------ +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. -ac_fn_check_decl () +# accordingly. +ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -printf %s "checking whether $as_decl_name is declared... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - eval ac_save_FLAGS=\$$6 - as_fn_append $6 " $5" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { #ifndef $as_decl_name #ifdef __cplusplus @@ -2295,22 +2335,19 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - eval $6=\$ac_save_FLAGS - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_check_decl +} # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- @@ -2319,17 +2356,16 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -printf %s "checking for $2.$3... " >&6; } -if eval test \${$4+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (ac_aggr.$3) @@ -2338,15 +2374,14 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2355,50 +2390,29 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by python $as_me 3.10, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2431,12 +2445,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2471,7 +2481,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2506,13 +2516,11 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2523,8 +2531,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2548,7 +2556,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2556,14 +2564,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2571,15 +2579,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2587,8 +2595,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2602,48 +2610,63 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi - -for ac_site_file in $ac_site_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2653,504 +2676,85 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not \xHH hex character constants. - These do not provoke an error unfortunately, instead are silently treated - as an "x". The following induces an error, until -std is added to get - proper ANSI mode. Curiously \x00 != x always comes out true, for an - array size at least. It is necessary to write \x00 == 0 to get something - that is true only with -std. */ -int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) '\''x'\'' -int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), - int, int);' - -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' - -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif - -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str = ""; - int number = 0; - float fnumber = 0; - - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - - return *str && number && fnumber; -} -' - -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' - -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif - -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; - -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); - -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } - -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; - -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; - -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; - -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' - -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' - -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" - -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" - -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" - -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" -as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" -as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" -as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh config.guess config.sub" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: - - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false - - as_found=false -done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 -fi - - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" -fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" -fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu @@ -3180,12 +2784,11 @@ if test -e $srcdir/.git then # Extract the first word of "git", so it can be a program name with args. set dummy git; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_HAS_GIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAS_GIT+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$HAS_GIT"; then ac_cv_prog_HAS_GIT="$HAS_GIT" # Let the user override the test. else @@ -3193,15 +2796,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_HAS_GIT="found" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3213,11 +2812,11 @@ fi fi HAS_GIT=$ac_cv_prog_HAS_GIT if test -n "$HAS_GIT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAS_GIT" >&5 -printf "%s\n" "$HAS_GIT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_GIT" >&5 +$as_echo "$HAS_GIT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3239,30 +2838,55 @@ fi ac_config_headers="$ac_config_headers pyconfig.h" +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 + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - # Make sure we can run config.sub. -$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -3281,22 +2905,21 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -3325,12 +2948,11 @@ for ac_prog in python$PACKAGE_VERSION python3 python do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_PYTHON_FOR_REGEN+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_FOR_REGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$PYTHON_FOR_REGEN"; then ac_cv_prog_PYTHON_FOR_REGEN="$PYTHON_FOR_REGEN" # Let the user override the test. else @@ -3338,15 +2960,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PYTHON_FOR_REGEN="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3357,11 +2975,11 @@ fi fi PYTHON_FOR_REGEN=$ac_cv_prog_PYTHON_FOR_REGEN if test -n "$PYTHON_FOR_REGEN"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_REGEN" >&5 -printf "%s\n" "$PYTHON_FOR_REGEN" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_REGEN" >&5 +$as_echo "$PYTHON_FOR_REGEN" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3372,8 +2990,8 @@ test -n "$PYTHON_FOR_REGEN" || PYTHON_FOR_REGEN="python3" if test "$cross_compiling" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 -printf %s "checking for python interpreter for cross build... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 +$as_echo_n "checking for python interpreter for cross build... " >&6; } if test -z "$PYTHON_FOR_BUILD"; then for interp in python$PACKAGE_VERSION python3 python; do which $interp >/dev/null 2>&1 || continue @@ -3385,8 +3003,8 @@ printf %s "checking for python interpreter for cross build... " >&6; } if test x$interp = x; then as_fn_error $? "python$PACKAGE_VERSION interpreter not found" "$LINENO" 5 fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 -printf "%s\n" "$interp" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 +$as_echo "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp fi elif test "$cross_compiling" = maybe; then @@ -3420,28 +3038,28 @@ SOVERSION=1.0 # The later defininition of _XOPEN_SOURCE disables certain features # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone). -printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # them. -printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h +$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable # them. -printf "%s\n" "#define __BSD_VISIBLE 1" >>confdefs.h +$as_echo "#define __BSD_VISIBLE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable # them. -printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h +$as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h @@ -3451,11 +3069,10 @@ define_xopen_source=yes CONFIG_ARGS="$ac_configure_args" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-universalsdk" >&5 -printf %s "checking for --enable-universalsdk... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-universalsdk" >&5 +$as_echo_n "checking for --enable-universalsdk... " >&6; } # Check whether --enable-universalsdk was given. -if test ${enable_universalsdk+y} -then : +if test "${enable_universalsdk+set}" = set; then : enableval=$enable_universalsdk; case $enableval in yes) @@ -3487,7 +3104,7 @@ then : esac -else $as_nop +else UNIVERSALSDK= enable_universalsdk= @@ -3496,11 +3113,11 @@ fi if test -n "${UNIVERSALSDK}" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSALSDK}" >&5 -printf "%s\n" "${UNIVERSALSDK}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSALSDK}" >&5 +$as_echo "${UNIVERSALSDK}" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3522,12 +3139,11 @@ then fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 -printf %s "checking for --with-universal-archs... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 +$as_echo_n "checking for --with-universal-archs... " >&6; } # Check whether --with-universal-archs was given. -if test ${with_universal_archs+y} -then : +if test "${with_universal_archs+set}" = set; then : withval=$with_universal_archs; UNIVERSAL_ARCHS="$withval" @@ -3535,23 +3151,22 @@ fi if test -n "${UNIVERSALSDK}" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5 -printf "%s\n" "${UNIVERSAL_ARCHS}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5 +$as_echo "${UNIVERSAL_ARCHS}" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Check whether --with-framework-name was given. -if test ${with_framework_name+y} -then : +if test "${with_framework_name+set}" = set; then : withval=$with_framework_name; PYTHONFRAMEWORK=${withval} PYTHONFRAMEWORKDIR=${withval}.framework PYTHONFRAMEWORKIDENTIFIER=org.python.`echo $withval | tr 'A-Z' 'a-z'` -else $as_nop +else PYTHONFRAMEWORK=Python PYTHONFRAMEWORKDIR=Python.framework @@ -3560,8 +3175,7 @@ else $as_nop fi # Check whether --enable-framework was given. -if test ${enable_framework+y} -then : +if test "${enable_framework+set}" = set; then : enableval=$enable_framework; case $enableval in yes) @@ -3650,7 +3264,7 @@ then : esac -else $as_nop +else PYTHONFRAMEWORK= PYTHONFRAMEWORKDIR=no-framework @@ -3685,7 +3299,9 @@ fi -printf "%s\n" "#define _PYTHONFRAMEWORK \"${PYTHONFRAMEWORK}\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define _PYTHONFRAMEWORK "${PYTHONFRAMEWORK}" +_ACEOF ##AC_ARG_WITH(dyld, @@ -3694,8 +3310,8 @@ printf "%s\n" "#define _PYTHONFRAMEWORK \"${PYTHONFRAMEWORK}\"" >>confdefs.h ## # Set name for machine-dependent library files -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking MACHDEP" >&5 -printf %s "checking MACHDEP... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MACHDEP" >&5 +$as_echo_n "checking MACHDEP... " >&6; } if test -z "$MACHDEP" then # avoid using uname for cross builds @@ -3745,8 +3361,8 @@ then '') MACHDEP="unknown";; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$MACHDEP\"" >&5 -printf "%s\n" "\"$MACHDEP\"" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$MACHDEP\"" >&5 +$as_echo "\"$MACHDEP\"" >&6; } if test "$cross_compiling" = yes; then @@ -3795,7 +3411,7 @@ case $ac_sys_system/$ac_sys_release in # also defined. This can be overridden by defining _BSD_SOURCE # As this has a different meaning on Linux, only define it on OpenBSD -printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h +$as_echo "#define _BSD_SOURCE 1" >>confdefs.h ;; OpenBSD/*) @@ -3803,7 +3419,7 @@ printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h # also defined. This can be overridden by defining _BSD_SOURCE # As this has a different meaning on Linux, only define it on OpenBSD -printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h +$as_echo "#define _BSD_SOURCE 1" >>confdefs.h ;; # Defining _XOPEN_SOURCE on NetBSD version prior to the introduction of @@ -3861,7 +3477,7 @@ if test $define_xopen_source = yes then # X/Open 7, incorporating POSIX.1-2008 -printf "%s\n" "#define _XOPEN_SOURCE 700" >>confdefs.h +$as_echo "#define _XOPEN_SOURCE 700" >>confdefs.h # On Tru64 Unix 4.0F, defining _XOPEN_SOURCE also requires @@ -3869,11 +3485,11 @@ printf "%s\n" "#define _XOPEN_SOURCE 700" >>confdefs.h # several APIs are not declared. Since this is also needed in some # cases for HP-UX, we define it globally. -printf "%s\n" "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h +$as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h -printf "%s\n" "#define _POSIX_C_SOURCE 200809L" >>confdefs.h +$as_echo "#define _POSIX_C_SOURCE 200809L" >>confdefs.h fi @@ -3888,7 +3504,7 @@ esac if test $define_stdc_a1 = yes then -printf "%s\n" "#define _INCLUDE__STDC_A1_SOURCE 1" >>confdefs.h +$as_echo "#define _INCLUDE__STDC_A1_SOURCE 1" >>confdefs.h fi @@ -3952,8 +3568,8 @@ then then if test -n "`"$found_gcc" --version | grep llvm-gcc`" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Detected llvm-gcc, falling back to clang" >&5 -printf "%s\n" "$as_me: Detected llvm-gcc, falling back to clang" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Detected llvm-gcc, falling back to clang" >&5 +$as_echo "$as_me: Detected llvm-gcc, falling back to clang" >&6;} CC="$found_clang" CXX="$found_clang++" fi @@ -3961,8 +3577,8 @@ printf "%s\n" "$as_me: Detected llvm-gcc, falling back to clang" >&6;} elif test -z "$found_gcc" -a -n "$found_clang" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No GCC found, use CLANG" >&5 -printf "%s\n" "$as_me: No GCC found, use CLANG" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: No GCC found, use CLANG" >&5 +$as_echo "$as_me: No GCC found, use CLANG" >&6;} CC="$found_clang" CXX="$found_clang++" @@ -3971,8 +3587,8 @@ printf "%s\n" "$as_me: No GCC found, use CLANG" >&6;} found_clang=`/usr/bin/xcrun -find clang 2>/dev/null` if test -n "${found_clang}" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using clang from Xcode.app" >&5 -printf "%s\n" "$as_me: Using clang from Xcode.app" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Using clang from Xcode.app" >&5 +$as_echo "$as_me: Using clang from Xcode.app" >&6;} CC="${found_clang}" CXX="`/usr/bin/xcrun -find clang++`" @@ -3981,15 +3597,6 @@ printf "%s\n" "$as_me: Using clang from Xcode.app" >&6;} fi fi fi - - - - - - - - - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3998,12 +3605,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4011,15 +3617,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4030,11 +3632,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4043,12 +3645,11 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -4056,15 +3657,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4075,11 +3672,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -4087,8 +3684,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -4101,12 +3698,11 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4114,15 +3710,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4133,11 +3725,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4146,12 +3738,11 @@ 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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4160,19 +3751,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4188,18 +3775,18 @@ if test $ac_prog_rejected = yes; then # 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 - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4210,12 +3797,11 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4223,15 +3809,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4242,11 +3824,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4259,12 +3841,11 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -4272,15 +3853,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4291,11 +3868,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4307,138 +3884,34 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi -else - CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do +for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -4448,7 +3921,7 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -4456,7 +3929,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -4468,9 +3941,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -4491,12 +3964,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -4513,7 +3985,7 @@ do # certainly right. break;; *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -4529,46 +4001,44 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop +else ac_file='' fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -4582,15 +4052,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -4599,7 +4069,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -4611,8 +4081,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -4620,10 +4090,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -4631,40 +4101,39 @@ printf "%s\n" "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -4678,12 +4147,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -4692,32 +4160,31 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -4727,33 +4194,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+y} +ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -4762,60 +4225,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else $as_nop +else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&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 @@ -4830,144 +4290,94 @@ else CFLAGS= fi fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext conftest.beam +rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + fi ac_ext=c @@ -4981,36 +4391,40 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -5022,11 +4436,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -5036,8 +4449,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : break fi @@ -5049,24 +4461,29 @@ fi else ac_cv_prog_CPP=$CPP fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -5078,11 +4495,10 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -5092,12 +4508,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -5108,12 +4523,11 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -5121,15 +4535,10 @@ else $as_nop for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -5138,13 +4547,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5172,17 +4581,16 @@ else fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -5196,15 +4604,10 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -5213,13 +4616,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - printf %s 0123456789 >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" + $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5247,20 +4650,19 @@ else fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-cxx-main=" >&5 -printf %s "checking for --with-cxx-main=... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-cxx-main=" >&5 +$as_echo_n "checking for --with-cxx-main=... " >&6; } # Check whether --with-cxx_main was given. -if test ${with_cxx_main+y} -then : +if test "${with_cxx_main+set}" = set; then : withval=$with_cxx_main; case $withval in @@ -5275,15 +4677,15 @@ then : CXX=$withval fi;; esac -else $as_nop +else with_cxx_main=no MAINCC='$(CC)' fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_cxx_main" >&5 -printf "%s\n" "$with_cxx_main" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_cxx_main" >&5 +$as_echo "$with_cxx_main" >&6; } preset_cxx="$CXX" if test -z "$CXX" @@ -5292,12 +4694,11 @@ then gcc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}g++", so it can be a program name with args. set dummy ${ac_tool_prefix}g++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -5307,15 +4708,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5327,11 +4724,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5340,12 +4737,11 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "g++", so it can be a program name with args. set dummy g++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -5355,15 +4751,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5375,11 +4767,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -printf "%s\n" "$ac_pt_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +$as_echo "$ac_pt_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -5387,8 +4779,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -5400,12 +4792,11 @@ fi cc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}c++", so it can be a program name with args. set dummy ${ac_tool_prefix}c++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -5415,15 +4806,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5435,11 +4822,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5448,12 +4835,11 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "c++", so it can be a program name with args. set dummy c++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -5463,15 +4849,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5483,11 +4865,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -printf "%s\n" "$ac_pt_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +$as_echo "$ac_pt_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -5495,8 +4877,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -5508,12 +4890,11 @@ fi clang|*/clang) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang++", so it can be a program name with args. set dummy ${ac_tool_prefix}clang++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -5523,15 +4904,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5543,11 +4920,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5556,12 +4933,11 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "clang++", so it can be a program name with args. set dummy clang++; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -5571,15 +4947,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5591,11 +4963,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -printf "%s\n" "$ac_pt_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +$as_echo "$ac_pt_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -5603,8 +4975,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -5616,12 +4988,11 @@ fi icc|*/icc) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}icpc", so it can be a program name with args. set dummy ${ac_tool_prefix}icpc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. @@ -5631,15 +5002,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5651,11 +5018,11 @@ esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5664,12 +5031,11 @@ if test -z "$ac_cv_path_CXX"; then ac_pt_CXX=$CXX # Extract the first word of "icpc", so it can be a program name with args. set dummy icpc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_CXX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CXX="$ac_pt_CXX" # Let the user override the test with a path. @@ -5679,15 +5045,11 @@ else $as_nop for as_dir in notfound do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_CXX="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5699,11 +5061,11 @@ esac fi ac_pt_CXX=$ac_cv_path_ac_pt_CXX if test -n "$ac_pt_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 -printf "%s\n" "$ac_pt_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CXX" >&5 +$as_echo "$ac_pt_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_CXX" = x; then @@ -5711,8 +5073,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_pt_CXX @@ -5734,12 +5096,11 @@ then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -5747,15 +5108,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5766,11 +5123,11 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -printf "%s\n" "$CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5783,12 +5140,11 @@ if test -z "$CXX"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -5796,15 +5152,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5815,11 +5167,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -printf "%s\n" "$ac_ct_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -5831,8 +5183,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -5846,12 +5198,12 @@ fi fi if test "$preset_cxx" != "$CXX" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: + { $as_echo "$as_me:${as_lineno-$LINENO}: By default, distutils will build C++ extension modules with \"$CXX\". If this is not intended, then set CXX on the configure command line. " >&5 -printf "%s\n" "$as_me: +$as_echo "$as_me: By default, distutils will build C++ extension modules with \"$CXX\". If this is not intended, then set CXX on the configure command line. @@ -5862,8 +5214,8 @@ fi MULTIARCH=$($CC --print-multiarch 2>/dev/null) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 -printf %s "checking for the platform triplet based on compiler characteristics... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 +$as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 -printf "%s\n" "$PLATFORM_TRIPLET" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 +$as_echo "$PLATFORM_TRIPLET" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi rm -f conftest.c conftest.out @@ -6033,8 +5385,8 @@ if test x$MULTIARCH != x; then fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5 -printf %s "checking for -Wl,--no-as-needed... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5 +$as_echo_n "checking for -Wl,--no-as-needed... " >&6; } save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--no-as-needed" @@ -6042,203 +5394,290 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : NO_AS_NEEDED="-Wl,--no-as-needed" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else NO_AS_NEEDED="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" # checks for UNIX variants that set C preprocessor variables -ac_header= ac_cache= -for ac_item in $ac_header_c_list + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi -done - - - - - - - - -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : - -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if test ${ac_cv_safe_to_define___extensions__+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include +#include +#include +#include -# define __EXTENSIONS__ 1 - $ac_includes_default int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_safe_to_define___extensions__=yes -else $as_nop - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 -printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } -if test ${ac_cv_should_define__xopen_source+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_should_define__xopen_source=no - if test $ac_cv_header_wchar_h = yes -then : +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include - #include - mbstate_t x; -int -main (void) -{ +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - ; - return 0; -} _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi -else $as_nop +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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif - #define _XOPEN_SOURCE 500 - #include - mbstate_t x; +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int -main (void) +main () { - - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_should_define__xopen_source=yes +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 -printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h - printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h +fi - printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h +fi - printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h +done - printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h - printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h - printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi - printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h + if test "$MINIX" = yes; then - printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h - printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h +$as_echo "#define _MINIX 1" >>confdefs.h - printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h + fi - if test $ac_cv_header_minix_config_h = yes -then : - MINIX=yes - printf "%s\n" "#define _MINIX 1" >>confdefs.h - printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ -else $as_nop - MINIX= + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no fi - if test $ac_cv_safe_to_define___extensions__ = yes -then : - printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test $ac_cv_should_define__xopen_source = yes -then : - printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Android API level" >&5 -printf %s "checking for the Android API level... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android API level" >&5 +$as_echo_n "checking for the Android API level... " >&6; } cat >> conftest.c <conftest.out 2>/dev/null; then ANDROID_API_LEVEL=`sed -n -e '/__ANDROID_API__/d' -e 's/^android_api = //p' conftest.out` _arm_arch=`sed -n -e '/__ARM_ARCH/d' -e 's/^arm_arch = //p' conftest.out` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5 -printf "%s\n" "$ANDROID_API_LEVEL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5 +$as_echo "$ANDROID_API_LEVEL" >&6; } if test -z "$ANDROID_API_LEVEL"; then echo 'Fatal: you must define __ANDROID_API__' exit 1 fi -printf "%s\n" "#define ANDROID_API_LEVEL $ANDROID_API_LEVEL" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ANDROID_API_LEVEL $ANDROID_API_LEVEL +_ACEOF - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5 -printf %s "checking for the Android arm ABI... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5 -printf "%s\n" "$_arm_arch" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5 +$as_echo_n "checking for the Android arm ABI... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5 +$as_echo "$_arm_arch" >&6; } if test "$_arm_arch" = 7; then BASECFLAGS="${BASECFLAGS} -mfloat-abi=softfp -mfpu=vfpv3-d16" LDFLAGS="${LDFLAGS} -march=armv7-a -Wl,--fix-cortex-a8" fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not Android" >&5 -printf "%s\n" "not Android" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not Android" >&5 +$as_echo "not Android" >&6; } fi rm -f conftest.c conftest.out @@ -6284,12 +5725,11 @@ atheos*|Linux*/1*) esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-suffix" >&5 -printf %s "checking for --with-suffix... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-suffix" >&5 +$as_echo_n "checking for --with-suffix... " >&6; } # Check whether --with-suffix was given. -if test ${with_suffix+y} -then : +if test "${with_suffix+set}" = set; then : withval=$with_suffix; case $withval in no) EXEEXT=;; @@ -6298,26 +5738,26 @@ then : esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EXEEXT" >&5 -printf "%s\n" "$EXEEXT" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXEEXT" >&5 +$as_echo "$EXEEXT" >&6; } # Test whether we're running on a non-case-sensitive system, in which # case we give a warning if no ext is given -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for case-insensitive build directory" >&5 -printf %s "checking for case-insensitive build directory... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for case-insensitive build directory" >&5 +$as_echo_n "checking for case-insensitive build directory... " >&6; } if test ! -d CaseSensitiveTestDir; then mkdir CaseSensitiveTestDir fi if test -d casesensitivetestdir then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } BUILDEXEEXT=.exe else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } BUILDEXEEXT=$EXEEXT fi rmdir CaseSensitiveTestDir @@ -6330,14 +5770,14 @@ hp*|HP*) esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LIBRARY" >&5 -printf %s "checking LIBRARY... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBRARY" >&5 +$as_echo_n "checking LIBRARY... " >&6; } if test -z "$LIBRARY" then LIBRARY='libpython$(VERSION)$(ABIFLAGS).a' fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBRARY" >&5 -printf "%s\n" "$LIBRARY" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBRARY" >&5 +$as_echo "$LIBRARY" >&6; } # LDLIBRARY is the name of the library to link against (as opposed to the # name of the library into which to insert object files). BLDLIBRARY is also @@ -6376,8 +5816,8 @@ LDVERSION="$VERSION" # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable: # python might then depend on the C++ runtime -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5 -printf %s "checking LINKCC... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5 +$as_echo_n "checking LINKCC... " >&6; } if test -z "$LINKCC" then LINKCC='$(PURIFY) $(MAINCC)' @@ -6388,8 +5828,8 @@ then LINKCC=qcc;; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5 -printf "%s\n" "$LINKCC" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5 +$as_echo "$LINKCC" >&6; } # EXPORTSYMS holds the list of exported symbols for AIX. # EXPORTSFROM holds the module name exporting symbols on AIX. @@ -6397,16 +5837,16 @@ EXPORTSYMS= EXPORTSFROM= -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5 -printf %s "checking EXPORTSYMS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5 +$as_echo_n "checking EXPORTSYMS... " >&6; } case $ac_sys_system in AIX*) EXPORTSYMS="Modules/python.exp" EXPORTSFROM=. # the main executable ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5 -printf "%s\n" "$EXPORTSYMS" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5 +$as_echo "$EXPORTSYMS" >&6; } # GNULD is set to "yes" if the GNU linker is used. If this goes wrong # make sure we default having it set to "no": this is used by @@ -6414,8 +5854,8 @@ printf "%s\n" "$EXPORTSYMS" >&6; } # to linker command lines, and failing to detect GNU ld simply results # in the same bahaviour as before. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } ac_prog=ld if test "$GCC" = yes; then ac_prog=`$CC -print-prog-name=ld` @@ -6426,14 +5866,13 @@ case `"$ac_prog" -V 2>&1 < /dev/null` in *) GNULD=no;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GNULD" >&5 -printf "%s\n" "$GNULD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNULD" >&5 +$as_echo "$GNULD" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-shared" >&5 -printf %s "checking for --enable-shared... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-shared" >&5 +$as_echo_n "checking for --enable-shared... " >&6; } # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : +if test "${enable_shared+set}" = set; then : enableval=$enable_shared; fi @@ -6447,14 +5886,13 @@ then enable_shared="no";; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -printf "%s\n" "$enable_shared" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-profiling" >&5 -printf %s "checking for --enable-profiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-profiling" >&5 +$as_echo_n "checking for --enable-profiling... " >&6; } # Check whether --enable-profiling was given. -if test ${enable_profiling+y} -then : +if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; fi @@ -6465,28 +5903,27 @@ if test "x$enable_profiling" = xyes; then /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : -else $as_nop +else enable_profiling=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$ac_save_cc" else enable_profiling=no fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_profiling" >&5 -printf "%s\n" "$enable_profiling" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_profiling" >&5 +$as_echo "$enable_profiling" >&6; } if test "x$enable_profiling" = xyes; then BASECFLAGS="-pg $BASECFLAGS" LDFLAGS="-pg $LDFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDLIBRARY" >&5 -printf %s "checking LDLIBRARY... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDLIBRARY" >&5 +$as_echo_n "checking LDLIBRARY... " >&6; } # MacOSX framework builds need more magic. LDLIBRARY is the dynamic # library that we build, but we do not want to link against it (we @@ -6507,7 +5944,7 @@ fi if test $enable_shared = "yes"; then PY_ENABLE_SHARED=1 -printf "%s\n" "#define Py_ENABLE_SHARED 1" >>confdefs.h +$as_echo "#define Py_ENABLE_SHARED 1" >>confdefs.h case $ac_sys_system in CYGWIN*) @@ -6571,8 +6008,8 @@ if test "$cross_compiling" = yes; then RUNSHARED= fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 -printf "%s\n" "$LDLIBRARY" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 +$as_echo "$LDLIBRARY" >&6; } if test -n "$ac_tool_prefix"; then @@ -6580,12 +6017,11 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6593,15 +6029,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6612,11 +6044,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6629,12 +6061,11 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6642,15 +6073,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6661,11 +6088,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6677,8 +6104,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6698,12 +6125,11 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_READELF+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$READELF"; then ac_cv_prog_READELF="$READELF" # Let the user override the test. else @@ -6711,15 +6137,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_READELF="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6730,11 +6152,11 @@ fi fi READELF=$ac_cv_prog_READELF if test -n "$READELF"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -printf "%s\n" "$READELF" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6747,12 +6169,11 @@ if test -z "$READELF"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_READELF+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_READELF"; then ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test. else @@ -6760,15 +6181,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_READELF="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6779,11 +6196,11 @@ fi fi ac_ct_READELF=$ac_cv_prog_ac_ct_READELF if test -n "$ac_ct_READELF"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 -printf "%s\n" "$ac_ct_READELF" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 +$as_echo "$ac_ct_READELF" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6795,8 +6212,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac READELF=$ac_ct_READELF @@ -6821,8 +6238,7 @@ hp*|HP*) INSTALL="${srcdir}/install-sh -c" fi esac - - # Find a good install program. We prefer a C program (faster), +# 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 @@ -6836,25 +6252,20 @@ esac # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test ${ac_cv_path_install+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -6864,13 +6275,13 @@ case $as_dir in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -6878,12 +6289,12 @@ case $as_dir in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -6899,7 +6310,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test ${ac_cv_path_install+y}; then + if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -6909,8 +6320,8 @@ fi INSTALL=$ac_install_sh fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -6920,31 +6331,25 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 -printf %s "checking for a race-free mkdir -p... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test ${ac_cv_path_mkdir+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue - case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir ('*'coreutils) '* | \ - 'BusyBox '* | \ + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done @@ -6955,7 +6360,7 @@ IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version - if test ${ac_cv_path_mkdir+y}; then + if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a @@ -6965,8 +6370,8 @@ fi MKDIR_P="$ac_install_sh -d" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -printf "%s\n" "$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } # Not every filesystem supports hard links @@ -6983,63 +6388,60 @@ fi ABIFLAGS="" # Check for --with-pydebug -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-pydebug" >&5 -printf %s "checking for --with-pydebug... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pydebug" >&5 +$as_echo_n "checking for --with-pydebug... " >&6; } # Check whether --with-pydebug was given. -if test ${with_pydebug+y} -then : +if test "${with_pydebug+set}" = set; then : withval=$with_pydebug; if test "$withval" != no then -printf "%s\n" "#define Py_DEBUG 1" >>confdefs.h +$as_echo "#define Py_DEBUG 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; Py_DEBUG='true' ABIFLAGS="${ABIFLAGS}d" -else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; }; Py_DEBUG='false' +else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; Py_DEBUG='false' fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Check for --with-trace-refs # --with-trace-refs -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-trace-refs" >&5 -printf %s "checking for --with-trace-refs... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-trace-refs" >&5 +$as_echo_n "checking for --with-trace-refs... " >&6; } # Check whether --with-trace-refs was given. -if test ${with_trace_refs+y} -then : +if test "${with_trace_refs+set}" = set; then : withval=$with_trace_refs; -else $as_nop +else with_trace_refs=no fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_trace_refs" >&5 -printf "%s\n" "$with_trace_refs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_trace_refs" >&5 +$as_echo "$with_trace_refs" >&6; } if test "$with_trace_refs" = "yes" then -printf "%s\n" "#define Py_TRACE_REFS 1" >>confdefs.h +$as_echo "#define Py_TRACE_REFS 1" >>confdefs.h fi # Check for --with-assertions. # This allows enabling assertions without Py_DEBUG. assertions='false' -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-assertions" >&5 -printf %s "checking for --with-assertions... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-assertions" >&5 +$as_echo_n "checking for --with-assertions... " >&6; } # Check whether --with-assertions was given. -if test ${with_assertions+y} -then : +if test "${with_assertions+set}" = set; then : withval=$with_assertions; if test "$withval" != no then @@ -7048,40 +6450,39 @@ fi fi if test "$assertions" = 'true'; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } elif test "$Py_DEBUG" = 'true'; then assertions='true' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: implied by --with-pydebug" >&5 -printf "%s\n" "implied by --with-pydebug" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: implied by --with-pydebug" >&5 +$as_echo "implied by --with-pydebug" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Enable optimization flags Py_OPT='false' -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-optimizations" >&5 -printf %s "checking for --enable-optimizations... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-optimizations" >&5 +$as_echo_n "checking for --enable-optimizations... " >&6; } # Check whether --enable-optimizations was given. -if test ${enable_optimizations+y} -then : +if test "${enable_optimizations+set}" = set; then : enableval=$enable_optimizations; if test "$enableval" != no then Py_OPT='true' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; else Py_OPT='false' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "$Py_OPT" = 'true' ; then @@ -7094,12 +6495,11 @@ if test "$Py_OPT" = 'true' ; then DEF_MAKE_RULE="build_all" case $CC in *gcc*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-semantic-interposition" >&5 -printf %s "checking whether C compiler accepts -fno-semantic-interposition... " >&6; } -if test ${ax_cv_check_cflags___fno_semantic_interposition+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-semantic-interposition" >&5 +$as_echo_n "checking whether C compiler accepts -fno-semantic-interposition... " >&6; } +if ${ax_cv_check_cflags___fno_semantic_interposition+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS -fno-semantic-interposition" @@ -7107,31 +6507,29 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ax_cv_check_cflags___fno_semantic_interposition=yes -else $as_nop +else ax_cv_check_cflags___fno_semantic_interposition=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_semantic_interposition" >&5 -printf "%s\n" "$ax_cv_check_cflags___fno_semantic_interposition" >&6; } -if test "x$ax_cv_check_cflags___fno_semantic_interposition" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_semantic_interposition" >&5 +$as_echo "$ax_cv_check_cflags___fno_semantic_interposition" >&6; } +if test "x$ax_cv_check_cflags___fno_semantic_interposition" = xyes; then : CFLAGS_NODIST="$CFLAGS_NODIST -fno-semantic-interposition" LDFLAGS_NODIST="$LDFLAGS_NODIST -fno-semantic-interposition" -else $as_nop +else : fi @@ -7146,14 +6544,14 @@ else fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking PROFILE_TASK" >&5 -printf %s "checking PROFILE_TASK... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking PROFILE_TASK" >&5 +$as_echo_n "checking PROFILE_TASK... " >&6; } if test -z "$PROFILE_TASK" then PROFILE_TASK='-m test --pgo --timeout=$(TESTTIMEOUT)' fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PROFILE_TASK" >&5 -printf "%s\n" "$PROFILE_TASK" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROFILE_TASK" >&5 +$as_echo "$PROFILE_TASK" >&6; } # Make llvm-relatec checks work on systems where llvm tools are not installed with their # normal names in the default $PATH (ie: Ubuntu). They exist under the @@ -7176,26 +6574,25 @@ then fi # Enable LTO flags -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5 -printf %s "checking for --with-lto... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5 +$as_echo_n "checking for --with-lto... " >&6; } # Check whether --with-lto was given. -if test ${with_lto+y} -then : +if test "${with_lto+set}" = set; then : withval=$with_lto; if test "$withval" != no then Py_LTO='true' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; else Py_LTO='false' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "$Py_LTO" = 'true' ; then @@ -7205,12 +6602,11 @@ if test "$Py_LTO" = 'true' ; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}llvm-ar", so it can be a program name with args. set dummy ${ac_tool_prefix}llvm-ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_LLVM_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LLVM_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else case $LLVM_AR in [\\/]* | ?:[\\/]*) ac_cv_path_LLVM_AR="$LLVM_AR" # Let the user override the test with a path. @@ -7220,15 +6616,11 @@ else $as_nop for as_dir in ${llvm_path} do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_LLVM_AR="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LLVM_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7240,11 +6632,11 @@ esac fi LLVM_AR=$ac_cv_path_LLVM_AR if test -n "$LLVM_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LLVM_AR" >&5 -printf "%s\n" "$LLVM_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_AR" >&5 +$as_echo "$LLVM_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7253,12 +6645,11 @@ if test -z "$ac_cv_path_LLVM_AR"; then ac_pt_LLVM_AR=$LLVM_AR # Extract the first word of "llvm-ar", so it can be a program name with args. set dummy llvm-ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_LLVM_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_LLVM_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_LLVM_AR in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LLVM_AR="$ac_pt_LLVM_AR" # Let the user override the test with a path. @@ -7268,15 +6659,11 @@ else $as_nop for as_dir in ${llvm_path} do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_LLVM_AR="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_LLVM_AR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7288,11 +6675,11 @@ esac fi ac_pt_LLVM_AR=$ac_cv_path_ac_pt_LLVM_AR if test -n "$ac_pt_LLVM_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_AR" >&5 -printf "%s\n" "$ac_pt_LLVM_AR" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_AR" >&5 +$as_echo "$ac_pt_LLVM_AR" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_LLVM_AR" = x; then @@ -7300,8 +6687,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LLVM_AR=$ac_pt_LLVM_AR @@ -7324,8 +6711,8 @@ fi then LLVM_AR='/usr/bin/xcrun llvm-ar' LLVM_AR_FOUND=found - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: llvm-ar found via xcrun: ${LLVM_AR}" >&5 -printf "%s\n" "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: llvm-ar found via xcrun: ${LLVM_AR}" >&5 +$as_echo "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;} fi fi if test $LLVM_AR_FOUND = not-found @@ -7379,12 +6766,11 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}llvm-profdata", so it can be a program name with args. set dummy ${ac_tool_prefix}llvm-profdata; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_LLVM_PROFDATA+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LLVM_PROFDATA+:} false; then : + $as_echo_n "(cached) " >&6 +else case $LLVM_PROFDATA in [\\/]* | ?:[\\/]*) ac_cv_path_LLVM_PROFDATA="$LLVM_PROFDATA" # Let the user override the test with a path. @@ -7394,15 +6780,11 @@ else $as_nop for as_dir in ${llvm_path} do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_LLVM_PROFDATA="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7414,11 +6796,11 @@ esac fi LLVM_PROFDATA=$ac_cv_path_LLVM_PROFDATA if test -n "$LLVM_PROFDATA"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5 -printf "%s\n" "$LLVM_PROFDATA" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5 +$as_echo "$LLVM_PROFDATA" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -7427,12 +6809,11 @@ if test -z "$ac_cv_path_LLVM_PROFDATA"; then ac_pt_LLVM_PROFDATA=$LLVM_PROFDATA # Extract the first word of "llvm-profdata", so it can be a program name with args. set dummy llvm-profdata; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_LLVM_PROFDATA+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_LLVM_PROFDATA+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_LLVM_PROFDATA in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LLVM_PROFDATA="$ac_pt_LLVM_PROFDATA" # Let the user override the test with a path. @@ -7442,15 +6823,11 @@ else $as_nop for as_dir in ${llvm_path} do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_LLVM_PROFDATA="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7462,11 +6839,11 @@ esac fi ac_pt_LLVM_PROFDATA=$ac_cv_path_ac_pt_LLVM_PROFDATA if test -n "$ac_pt_LLVM_PROFDATA"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_PROFDATA" >&5 -printf "%s\n" "$ac_pt_LLVM_PROFDATA" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_PROFDATA" >&5 +$as_echo "$ac_pt_LLVM_PROFDATA" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_LLVM_PROFDATA" = x; then @@ -7474,8 +6851,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LLVM_PROFDATA=$ac_pt_LLVM_PROFDATA @@ -7500,8 +6877,8 @@ then # https://apple.stackexchange.com/questions/197053/ LLVM_PROFDATA='/usr/bin/xcrun llvm-profdata' LLVM_PROF_FOUND=found - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&5 -printf "%s\n" "$as_me: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&5 +$as_echo "$as_me: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&6;} fi fi LLVM_PROF_ERR=no @@ -7645,20 +7022,19 @@ case $GCC in yes) CFLAGS_NODIST="$CFLAGS_NODIST -std=c99" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wextra" >&5 -printf %s "checking for -Wextra... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wextra" >&5 +$as_echo_n "checking for -Wextra... " >&6; } ac_save_cc="$CC" CC="$CC -Wextra -Werror" - if test ${ac_cv_extra_warnings+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_extra_warnings+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7666,22 +7042,21 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_extra_warnings=yes -else $as_nop +else ac_cv_extra_warnings=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_extra_warnings" >&5 -printf "%s\n" "$ac_cv_extra_warnings" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_extra_warnings" >&5 +$as_echo "$ac_cv_extra_warnings" >&6; } if test $ac_cv_extra_warnings = yes then @@ -7692,21 +7067,20 @@ printf "%s\n" "$ac_cv_extra_warnings" >&6; } # GCC produce warnings for legal Python code. Enable # -fno-strict-aliasing on versions of GCC that support but produce # warnings. See Issue3326 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts and needs -fno-strict-aliasing" >&5 -printf %s "checking whether $CC accepts and needs -fno-strict-aliasing... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts and needs -fno-strict-aliasing" >&5 +$as_echo_n "checking whether $CC accepts and needs -fno-strict-aliasing... " >&6; } ac_save_cc="$CC" CC="$CC -fno-strict-aliasing" save_CFLAGS="$CFLAGS" - if test ${ac_cv_no_strict_aliasing+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_no_strict_aliasing+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7714,8 +7088,7 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : CC="$ac_save_cc -fstrict-aliasing" CFLAGS="$CFLAGS -Werror -Wstrict-aliasing" @@ -7724,7 +7097,7 @@ then : void f(int **x) {} int -main (void) +main () { double *x; f((int **) &x); ; @@ -7732,30 +7105,29 @@ double *x; f((int **) &x); } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_no_strict_aliasing=no -else $as_nop +else ac_cv_no_strict_aliasing=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else $as_nop +else ac_cv_no_strict_aliasing=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_no_strict_aliasing" >&5 -printf "%s\n" "$ac_cv_no_strict_aliasing" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_no_strict_aliasing" >&5 +$as_echo "$ac_cv_no_strict_aliasing" >&6; } if test $ac_cv_no_strict_aliasing = yes then BASECFLAGS="$BASECFLAGS -fno-strict-aliasing" @@ -7768,21 +7140,20 @@ printf "%s\n" "$ac_cv_no_strict_aliasing" >&6; } ac_cv_disable_unused_result_warning=no ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused result warning" >&5 -printf %s "checking if we can turn off $CC unused result warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused result warning" >&5 +$as_echo_n "checking if we can turn off $CC unused result warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunused-result -Werror" save_CFLAGS="$CFLAGS" - if test ${ac_cv_disable_unused_result_warning+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_disable_unused_result_warning+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7790,23 +7161,22 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_disable_unused_result_warning=yes -else $as_nop +else ac_cv_disable_unused_result_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_result_warning" >&5 -printf "%s\n" "$ac_cv_disable_unused_result_warning" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_result_warning" >&5 +$as_echo "$ac_cv_disable_unused_result_warning" >&6; } ;; esac @@ -7816,20 +7186,19 @@ printf "%s\n" "$ac_cv_disable_unused_result_warning" >&6; } CFLAGS_NODIST="$CFLAGS_NODIST -Wno-unused-result" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused parameter warning" >&5 -printf %s "checking if we can turn off $CC unused parameter warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC unused parameter warning" >&5 +$as_echo_n "checking if we can turn off $CC unused parameter warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunused-parameter -Werror" - if test ${ac_cv_disable_unused_parameter_warning+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_disable_unused_parameter_warning+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7837,42 +7206,40 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_disable_unused_parameter_warning=yes -else $as_nop +else ac_cv_disable_unused_parameter_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_parameter_warning" >&5 -printf "%s\n" "$ac_cv_disable_unused_parameter_warning" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_unused_parameter_warning" >&5 +$as_echo "$ac_cv_disable_unused_parameter_warning" >&6; } if test $ac_cv_disable_unused_parameter_warning = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wno-unused-parameter" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC missing field initializers warning" >&5 -printf %s "checking if we can turn off $CC missing field initializers warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn off $CC missing field initializers warning" >&5 +$as_echo_n "checking if we can turn off $CC missing field initializers warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wmissing-field-initializers -Werror" - if test ${ac_cv_disable_missing_field_initializers+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_disable_missing_field_initializers+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7880,43 +7247,41 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_disable_missing_field_initializers=yes -else $as_nop +else ac_cv_disable_missing_field_initializers=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_missing_field_initializers" >&5 -printf "%s\n" "$ac_cv_disable_missing_field_initializers" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_disable_missing_field_initializers" >&5 +$as_echo "$ac_cv_disable_missing_field_initializers" >&6; } if test $ac_cv_disable_missing_field_initializers = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wno-missing-field-initializers" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC mixed sign comparison warning" >&5 -printf %s "checking if we can turn on $CC mixed sign comparison warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC mixed sign comparison warning" >&5 +$as_echo_n "checking if we can turn on $CC mixed sign comparison warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wsign-compare" save_CFLAGS="$CFLAGS" - if test ${ac_cv_enable_sign_compare_warning+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_enable_sign_compare_warning+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7924,44 +7289,42 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enable_sign_compare_warning=yes -else $as_nop +else ac_cv_enable_sign_compare_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$save_CFLAGS" CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_sign_compare_warning" >&5 -printf "%s\n" "$ac_cv_enable_sign_compare_warning" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_sign_compare_warning" >&5 +$as_echo "$ac_cv_enable_sign_compare_warning" >&6; } if test $ac_cv_enable_sign_compare_warning = yes then BASECFLAGS="$BASECFLAGS -Wsign-compare" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC unreachable code warning" >&5 -printf %s "checking if we can turn on $CC unreachable code warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC unreachable code warning" >&5 +$as_echo_n "checking if we can turn on $CC unreachable code warning... " >&6; } ac_save_cc="$CC" CC="$CC -Wunreachable-code" save_CFLAGS="$CFLAGS" - if test ${ac_cv_enable_unreachable_code_warning+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_enable_unreachable_code_warning+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -7969,17 +7332,16 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enable_unreachable_code_warning=yes -else $as_nop +else ac_cv_enable_unreachable_code_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$save_CFLAGS" @@ -8000,23 +7362,22 @@ fi else ac_cv_enable_unreachable_code_warning=no fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_unreachable_code_warning" >&5 -printf "%s\n" "$ac_cv_enable_unreachable_code_warning" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_unreachable_code_warning" >&5 +$as_echo "$ac_cv_enable_unreachable_code_warning" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC strict-prototypes warning" >&5 -printf %s "checking if we can turn on $CC strict-prototypes warning... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can turn on $CC strict-prototypes warning" >&5 +$as_echo_n "checking if we can turn on $CC strict-prototypes warning... " >&6; } ac_save_cc="$CC" CC="$CC -Werror -Wstrict-prototypes" - if test ${ac_cv_enable_enable_strict_prototypes_warning+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_enable_enable_strict_prototypes_warning+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -8024,42 +7385,40 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enable_strict_prototypes_warning=yes -else $as_nop +else ac_cv_enable_strict_prototypes_warning=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_strict_prototypes_warning" >&5 -printf "%s\n" "$ac_cv_enable_strict_prototypes_warning" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_strict_prototypes_warning" >&5 +$as_echo "$ac_cv_enable_strict_prototypes_warning" >&6; } if test $ac_cv_enable_strict_prototypes_warning = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Wstrict-prototypes" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can make implicit function declaration an error in $CC" >&5 -printf %s "checking if we can make implicit function declaration an error in $CC... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can make implicit function declaration an error in $CC" >&5 +$as_echo_n "checking if we can make implicit function declaration an error in $CC... " >&6; } ac_save_cc="$CC" CC="$CC -Werror=implicit-function-declaration" - if test ${ac_cv_enable_implicit_function_declaration_error+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_enable_implicit_function_declaration_error+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -8067,42 +7426,40 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enable_implicit_function_declaration_error=yes -else $as_nop +else ac_cv_enable_implicit_function_declaration_error=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_implicit_function_declaration_error" >&5 -printf "%s\n" "$ac_cv_enable_implicit_function_declaration_error" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_implicit_function_declaration_error" >&5 +$as_echo "$ac_cv_enable_implicit_function_declaration_error" >&6; } if test $ac_cv_enable_implicit_function_declaration_error = yes then CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can use visibility in $CC" >&5 -printf %s "checking if we can use visibility in $CC... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can use visibility in $CC" >&5 +$as_echo_n "checking if we can use visibility in $CC... " >&6; } ac_save_cc="$CC" CC="$CC -fvisibility=hidden" - if test ${ac_cv_enable_visibility+y} -then : - printf %s "(cached) " >&6 -else $as_nop + if ${ac_cv_enable_visibility+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -8110,22 +7467,21 @@ main (void) } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enable_visibility=yes -else $as_nop +else ac_cv_enable_visibility=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ac_save_cc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_visibility" >&5 -printf "%s\n" "$ac_cv_enable_visibility" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_visibility" >&5 +$as_echo "$ac_cv_enable_visibility" >&6; } if test $ac_cv_enable_visibility = yes then @@ -8151,8 +7507,8 @@ printf "%s\n" "$ac_cv_enable_visibility" >&6; } # used to be here, but non-Apple gcc doesn't accept them. if test "${CC}" = gcc then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 -printf %s "checking which compiler should be used... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +$as_echo_n "checking which compiler should be used... " >&6; } case "${UNIVERSALSDK}" in */MacOSX10.4u.sdk) # Build using 10.4 SDK, force usage of gcc when the @@ -8162,8 +7518,8 @@ printf %s "checking which compiler should be used... " >&6; } CPP=cpp-4.0 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } fi if test "${enable_universalsdk}" @@ -8238,8 +7594,8 @@ printf "%s\n" "$CC" >&6; } # below to pick either 10.3, 10.4, or 10.5 as the target. # 4. If we are running on OS X 10.2 or earlier, good luck! - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5 -printf %s "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5 +$as_echo_n "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } cur_target_major=`sw_vers -productVersion | \ sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` cur_target_minor=`sw_vers -productVersion | \ @@ -8276,33 +7632,32 @@ printf %s "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; } MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" export MACOSX_DEPLOYMENT_TARGET EXPORT_MACOSX_DEPLOYMENT_TARGET='' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5 -printf "%s\n" "$MACOSX_DEPLOYMENT_TARGET" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5 +$as_echo "$MACOSX_DEPLOYMENT_TARGET" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if specified universal architectures work" >&5 -printf %s "checking if specified universal architectures work... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if specified universal architectures work" >&5 +$as_echo_n "checking if specified universal architectures work... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { printf("%d", 42); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } as_fn_error $? "check config.log and use the '--with-universal-archs' option" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # end of Darwin* tests @@ -8348,16 +7703,14 @@ fi # complain if unaccepted options are passed (e.g. gcc on Mac OS X). # So we have to see first whether pthreads are available without # options before we can check whether -Kpthread improves anything. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads are available without options" >&5 -printf %s "checking whether pthreads are available without options... " >&6; } -if test ${ac_cv_pthread_is_default+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads are available without options" >&5 +$as_echo_n "checking whether pthreads are available without options... " >&6; } +if ${ac_cv_pthread_is_default+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_pthread_is_default=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8375,14 +7728,13 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_pthread_is_default=yes ac_cv_kthread=no ac_cv_pthread=no -else $as_nop +else ac_cv_pthread_is_default=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -8392,8 +7744,8 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_is_default" >&5 -printf "%s\n" "$ac_cv_pthread_is_default" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_is_default" >&5 +$as_echo "$ac_cv_pthread_is_default" >&6; } if test $ac_cv_pthread_is_default = yes @@ -8405,18 +7757,16 @@ else # Some compilers won't report that they do not support -Kpthread, # so we need to run a program to see whether it really made the # function available. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kpthread" >&5 -printf %s "checking whether $CC accepts -Kpthread... " >&6; } -if test ${ac_cv_kpthread+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kpthread" >&5 +$as_echo_n "checking whether $CC accepts -Kpthread... " >&6; } +if ${ac_cv_kpthread+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cc="$CC" CC="$CC -Kpthread" -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : ac_cv_kpthread=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8434,10 +7784,9 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_kpthread=yes -else $as_nop +else ac_cv_kpthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -8447,8 +7796,8 @@ fi CC="$ac_save_cc" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kpthread" >&5 -printf "%s\n" "$ac_cv_kpthread" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kpthread" >&5 +$as_echo "$ac_cv_kpthread" >&6; } fi if test $ac_cv_kpthread = no -a $ac_cv_pthread_is_default = no @@ -8458,18 +7807,16 @@ then # Some compilers won't report that they do not support -Kthread, # so we need to run a program to see whether it really made the # function available. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kthread" >&5 -printf %s "checking whether $CC accepts -Kthread... " >&6; } -if test ${ac_cv_kthread+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Kthread" >&5 +$as_echo_n "checking whether $CC accepts -Kthread... " >&6; } +if ${ac_cv_kthread+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cc="$CC" CC="$CC -Kthread" -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : ac_cv_kthread=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8487,10 +7834,9 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_kthread=yes -else $as_nop +else ac_cv_kthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -8500,8 +7846,8 @@ fi CC="$ac_save_cc" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kthread" >&5 -printf "%s\n" "$ac_cv_kthread" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kthread" >&5 +$as_echo "$ac_cv_kthread" >&6; } fi if test $ac_cv_kthread = no -a $ac_cv_pthread_is_default = no @@ -8511,18 +7857,16 @@ then # Some compilers won't report that they do not support -pthread, # so we need to run a program to see whether it really made the # function available. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -pthread" >&5 -printf %s "checking whether $CC accepts -pthread... " >&6; } -if test ${ac_cv_pthread+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -pthread" >&5 +$as_echo_n "checking whether $CC accepts -pthread... " >&6; } +if ${ac_cv_pthread+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_cc="$CC" CC="$CC -pthread" -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : ac_cv_pthread=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8540,10 +7884,9 @@ int main(){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_pthread=yes -else $as_nop +else ac_cv_pthread=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -8553,8 +7896,8 @@ fi CC="$ac_save_cc" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread" >&5 -printf "%s\n" "$ac_cv_pthread" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread" >&5 +$as_echo "$ac_cv_pthread" >&6; } fi # If we have set a CC compiler flag for thread support then @@ -8562,8 +7905,8 @@ fi ac_cv_cxx_thread=no if test ! -z "$CXX" then -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX also accepts flags for thread support" >&5 -printf %s "checking whether $CXX also accepts flags for thread support... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX also accepts flags for thread support" >&5 +$as_echo_n "checking whether $CXX also accepts flags for thread support... " >&6; } ac_save_cxx="$CXX" if test "$ac_cv_kpthread" = "yes" @@ -8593,702 +7936,358 @@ then fi rm -fr conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_thread" >&5 -printf "%s\n" "$ac_cv_cxx_thread" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_thread" >&5 +$as_echo "$ac_cv_cxx_thread" >&6; } fi CXX="$ac_save_cxx" # checks for header files -# Autoupdate added the next two lines to ensure that your configure -# script's behavior did not change. They are probably safe to remove. - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - -ac_fn_c_check_header_compile "$LINENO" "asm/types.h" "ac_cv_header_asm_types_h" "$ac_includes_default" -if test "x$ac_cv_header_asm_types_h" = xyes -then : - printf "%s\n" "#define HAVE_ASM_TYPES_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default" -if test "x$ac_cv_header_crypt_h" = xyes -then : - printf "%s\n" "#define HAVE_CRYPT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "conio.h" "ac_cv_header_conio_h" "$ac_includes_default" -if test "x$ac_cv_header_conio_h" = xyes -then : - printf "%s\n" "#define HAVE_CONIO_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "direct.h" "ac_cv_header_direct_h" "$ac_includes_default" -if test "x$ac_cv_header_direct_h" = xyes -then : - printf "%s\n" "#define HAVE_DIRECT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" -if test "x$ac_cv_header_dlfcn_h" = xyes -then : - printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include -fi -ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" -if test "x$ac_cv_header_errno_h" = xyes -then : - printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no fi -ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" -if test "x$ac_cv_header_fcntl_h" = xyes -then : - printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" -if test "x$ac_cv_header_grp_h" = xyes -then : - printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -fi -ac_fn_c_check_header_compile "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" -if test "x$ac_cv_header_ieeefp_h" = xyes -then : - printf "%s\n" "#define HAVE_IEEEFP_H 1" >>confdefs.h +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no fi -ac_fn_c_check_header_compile "$LINENO" "io.h" "ac_cv_header_io_h" "$ac_includes_default" -if test "x$ac_cv_header_io_h" = xyes -then : - printf "%s\n" "#define HAVE_IO_H 1" >>confdefs.h +rm -f conftest* fi -ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" -if test "x$ac_cv_header_langinfo_h" = xyes -then : - printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" -if test "x$ac_cv_header_libintl_h" = xyes -then : - printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -fi -ac_fn_c_check_header_compile "$LINENO" "process.h" "ac_cv_header_process_h" "$ac_includes_default" -if test "x$ac_cv_header_process_h" = xyes -then : - printf "%s\n" "#define HAVE_PROCESS_H 1" >>confdefs.h +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no fi -ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h +rm -f conftest* fi -ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default" -if test "x$ac_cv_header_sched_h" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" -if test "x$ac_cv_header_shadow_h" = xyes -then : - printf "%s\n" "#define HAVE_SHADOW_H 1" >>confdefs.h +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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif -fi -ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" -if test "x$ac_cv_header_signal_h" = xyes -then : - printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h +#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)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : +else + ac_cv_header_stdc=no fi -ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" -if test "x$ac_cv_header_stropts_h" = xyes -then : - printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h - +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" -if test "x$ac_cv_header_termios_h" = xyes -then : - printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" -if test "x$ac_cv_header_utime_h" = xyes -then : - printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h - fi -ac_fn_c_check_header_compile "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" -if test "x$ac_cv_header_poll_h" = xyes -then : - printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -fi -ac_fn_c_check_header_compile "$LINENO" "sys/devpoll.h" "ac_cv_header_sys_devpoll_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_devpoll_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_DEVPOLL_H 1" >>confdefs.h +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_epoll_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_poll_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_POLL_H 1" >>confdefs.h +for ac_header in asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \ +fcntl.h grp.h \ +ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \ +sched.h shadow.h signal.h stropts.h termios.h \ +utime.h \ +poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ +sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ +sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \ +sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ +sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \ +sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \ +libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ +linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \ +sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h \ +sys/mman.h sys/eventfd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "sys/audioio.h" "ac_cv_header_sys_audioio_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_audioio_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_AUDIOIO_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "sys/xattr.h" "ac_cv_header_sys_xattr_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_xattr_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_XATTR_H 1" >>confdefs.h +done -fi -ac_fn_c_check_header_compile "$LINENO" "sys/bsdtty.h" "ac_cv_header_sys_bsdtty_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_bsdtty_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_BSDTTY_H 1" >>confdefs.h +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" fi -ac_fn_c_check_header_compile "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_event_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_EVENT_H 1" >>confdefs.h - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -ac_fn_c_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_file_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF +ac_header_dirent=$ac_hdr; break fi -ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "sys/kern_control.h" "ac_cv_header_sys_kern_control_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_kern_control_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_KERN_CONTROL_H 1" >>confdefs.h +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res fi -ac_fn_c_check_header_compile "$LINENO" "sys/loadavg.h" "ac_cv_header_sys_loadavg_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_loadavg_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_LOADAVG_H 1" >>confdefs.h - +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break fi -ac_fn_c_check_header_compile "$LINENO" "sys/lock.h" "ac_cv_header_sys_lock_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_lock_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_LOCK_H 1" >>confdefs.h +done +if ${ac_cv_search_opendir+:} false; then : +else + ac_cv_search_opendir=no fi -ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mkdev_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MKDEV_H 1" >>confdefs.h - +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -ac_fn_c_check_header_compile "$LINENO" "sys/modem.h" "ac_cv_header_sys_modem_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_modem_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MODEM_H 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_param_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_random_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_select_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/sendfile.h" "ac_cv_header_sys_sendfile_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sendfile_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SENDFILE_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_socket_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_statvfs_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_STATVFS_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_stat_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/syscall.h" "ac_cv_header_sys_syscall_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_syscall_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SYSCALL_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/sys_domain.h" "ac_cv_header_sys_sys_domain_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sys_domain_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SYS_DOMAIN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/termio.h" "ac_cv_header_sys_termio_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_termio_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TERMIO_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_time_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_times_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_types_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_uio_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/un.h" "ac_cv_header_sys_un_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_un_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_UN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_utsname_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_UTSNAME_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_wait_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default" -if test "x$ac_cv_header_pty_h" = xyes -then : - printf "%s\n" "#define HAVE_PTY_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "libutil.h" "ac_cv_header_libutil_h" "$ac_includes_default" -if test "x$ac_cv_header_libutil_h" = xyes -then : - printf "%s\n" "#define HAVE_LIBUTIL_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_resource_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "netpacket/packet.h" "ac_cv_header_netpacket_packet_h" "$ac_includes_default" -if test "x$ac_cv_header_netpacket_packet_h" = xyes -then : - printf "%s\n" "#define HAVE_NETPACKET_PACKET_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sysexits.h" "ac_cv_header_sysexits_h" "$ac_includes_default" -if test "x$ac_cv_header_sysexits_h" = xyes -then : - printf "%s\n" "#define HAVE_SYSEXITS_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "bluetooth.h" "ac_cv_header_bluetooth_h" "$ac_includes_default" -if test "x$ac_cv_header_bluetooth_h" = xyes -then : - printf "%s\n" "#define HAVE_BLUETOOTH_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "linux/tipc.h" "ac_cv_header_linux_tipc_h" "$ac_includes_default" -if test "x$ac_cv_header_linux_tipc_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_TIPC_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "linux/random.h" "ac_cv_header_linux_random_h" "$ac_includes_default" -if test "x$ac_cv_header_linux_random_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_RANDOM_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" -if test "x$ac_cv_header_spawn_h" = xyes -then : - printf "%s\n" "#define HAVE_SPAWN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default" -if test "x$ac_cv_header_util_h" = xyes -then : - printf "%s\n" "#define HAVE_UTIL_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" -if test "x$ac_cv_header_alloca_h" = xyes -then : - printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "endian.h" "ac_cv_header_endian_h" "$ac_includes_default" -if test "x$ac_cv_header_endian_h" = xyes -then : - printf "%s\n" "#define HAVE_ENDIAN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/endian.h" "ac_cv_header_sys_endian_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_endian_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_ENDIAN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysmacros_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "linux/memfd.h" "ac_cv_header_linux_memfd_h" "$ac_includes_default" -if test "x$ac_cv_header_linux_memfd_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_MEMFD_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "linux/wait.h" "ac_cv_header_linux_wait_h" "$ac_includes_default" -if test "x$ac_cv_header_linux_wait_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_WAIT_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/memfd.h" "ac_cv_header_sys_memfd_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_memfd_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MEMFD_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/eventfd.h" "ac_cv_header_sys_eventfd_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_eventfd_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_EVENTFD_H 1" >>confdefs.h - -fi - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -printf %s "checking for $ac_hdr that defines DIR... " >&6; } -if eval test \${$as_ac_Header+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main (void) -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$as_ac_Header=yes" -else $as_nop - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes" -then : - cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -printf %s "checking for library containing opendir... " >&6; } -if test ${ac_cv_search_opendir+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char opendir (); int -main (void) +main () { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' dir -do +for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_opendir+y} -then : + if ${ac_cv_search_opendir+:} false; then : break fi done -if test ${ac_cv_search_opendir+y} -then : +if ${ac_cv_search_opendir+:} false; then : -else $as_nop +else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -printf "%s\n" "$ac_cv_search_opendir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 +$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } +if ${ac_cv_header_sys_types_h_makedev+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -printf %s "checking for library containing opendir... " >&6; } -if test ${ac_cv_search_opendir+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char opendir (); +#include int -main (void) +main () { -return opendir (); +return makedev(0, 0); ; return 0; } _ACEOF -for ac_lib in '' x -do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO" -then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext - if test ${ac_cv_search_opendir+y} -then : - break -fi -done -if test ${ac_cv_search_opendir+y} -then : - -else $as_nop - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_header_sys_types_h_makedev=yes +else + ac_cv_header_sys_types_h_makedev=no fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -printf "%s\n" "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no -then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 +$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } -fi +if test $ac_cv_header_sys_types_h_makedev = no; then +ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : +$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h -ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mkdev_h" = xyes -then : +fi -printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h -fi -if test $ac_cv_header_sys_mkdev_h = no; then - ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysmacros_h" = xyes -then : + if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : -printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h +$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi + + fi fi @@ -9296,17 +8295,24 @@ fi # http://permalink.gmane.org/gmane.linux.bluez.kernel/22294 SAVE_CFLAGS=$CFLAGS CFLAGS="-std=c99 $CFLAGS" -ac_fn_c_check_header_compile "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default" -if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes -then : - printf "%s\n" "#define HAVE_BLUETOOTH_BLUETOOTH_H 1" >>confdefs.h +for ac_header in bluetooth/bluetooth.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default" +if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BLUETOOTH_BLUETOOTH_H 1 +_ACEOF fi +done + CFLAGS=$SAVE_CFLAGS # On Darwin (OS X) net/if.h requires sys/socket.h to be imported first. -ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include +for ac_header in net/if.h +do : + ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include #ifdef STDC_HEADERS # include # include @@ -9320,15 +8326,20 @@ ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#incl #endif " -if test "x$ac_cv_header_net_if_h" = xyes -then : - printf "%s\n" "#define HAVE_NET_IF_H 1" >>confdefs.h +if test "x$ac_cv_header_net_if_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NET_IF_H 1 +_ACEOF fi +done + # On Linux, netlink.h requires asm/types.h -ac_fn_c_check_header_compile "$LINENO" "linux/netlink.h" "ac_cv_header_linux_netlink_h" " +for ac_header in linux/netlink.h +do : + ac_fn_c_check_header_compile "$LINENO" "linux/netlink.h" "ac_cv_header_linux_netlink_h" " #ifdef HAVE_ASM_TYPES_H #include #endif @@ -9337,15 +8348,20 @@ ac_fn_c_check_header_compile "$LINENO" "linux/netlink.h" "ac_cv_header_linux_net #endif " -if test "x$ac_cv_header_linux_netlink_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_NETLINK_H 1" >>confdefs.h +if test "x$ac_cv_header_linux_netlink_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_NETLINK_H 1 +_ACEOF fi +done + # On Linux, qrtr.h requires asm/types.h -ac_fn_c_check_header_compile "$LINENO" "linux/qrtr.h" "ac_cv_header_linux_qrtr_h" " +for ac_header in linux/qrtr.h +do : + ac_fn_c_check_header_compile "$LINENO" "linux/qrtr.h" "ac_cv_header_linux_qrtr_h" " #ifdef HAVE_ASM_TYPES_H #include #endif @@ -9354,101 +8370,80 @@ ac_fn_c_check_header_compile "$LINENO" "linux/qrtr.h" "ac_cv_header_linux_qrtr_h #endif " -if test "x$ac_cv_header_linux_qrtr_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_QRTR_H 1" >>confdefs.h +if test "x$ac_cv_header_linux_qrtr_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_QRTR_H 1 +_ACEOF fi - -ac_fn_c_check_header_compile "$LINENO" "linux/vm_sockets.h" "ac_cv_header_linux_vm_sockets_h" " -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -" -if test "x$ac_cv_header_linux_vm_sockets_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_VM_SOCKETS_H 1" >>confdefs.h - -fi +done -# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h -ac_fn_c_check_header_compile "$LINENO" "linux/can.h" "ac_cv_header_linux_can_h" " +for ac_header in linux/vm_sockets.h +do : + ac_fn_c_check_header_compile "$LINENO" "linux/vm_sockets.h" "ac_cv_header_linux_vm_sockets_h" " #ifdef HAVE_SYS_SOCKET_H #include #endif " -if test "x$ac_cv_header_linux_can_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_CAN_H 1" >>confdefs.h +if test "x$ac_cv_header_linux_vm_sockets_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_VM_SOCKETS_H 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "linux/can/bcm.h" "ac_cv_header_linux_can_bcm_h" " -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -" -if test "x$ac_cv_header_linux_can_bcm_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_CAN_BCM_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "linux/can/j1939.h" "ac_cv_header_linux_can_j1939_h" " -#ifdef HAVE_SYS_SOCKET_H -#include -#endif +done -" -if test "x$ac_cv_header_linux_can_j1939_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_CAN_J1939_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "linux/can/raw.h" "ac_cv_header_linux_can_raw_h" " +# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h +for ac_header in linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #ifdef HAVE_SYS_SOCKET_H #include #endif " -if test "x$ac_cv_header_linux_can_raw_h" = xyes -then : - printf "%s\n" "#define HAVE_LINUX_CAN_RAW_H 1" >>confdefs.h +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi +done + # checks for typedefs was_it_defined=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_t in time.h" >&5 -printf %s "checking for clock_t in time.h... " >&6; } - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_t in time.h" >&5 +$as_echo_n "checking for clock_t in time.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "clock_t" >/dev/null 2>&1 -then : + $EGREP "clock_t" >/dev/null 2>&1; then : was_it_defined=yes -else $as_nop +else -printf "%s\n" "#define clock_t long" >>confdefs.h +$as_echo "#define clock_t long" >>confdefs.h fi -rm -rf conftest* +rm -f conftest* -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 -printf "%s\n" "$was_it_defined" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 +$as_echo "$was_it_defined" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for makedev" >&5 -printf %s "checking for makedev... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for makedev" >&5 +$as_echo_n "checking for makedev... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9461,7 +8456,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { makedev(0, 0) @@ -9470,25 +8465,24 @@ main (void) } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_has_makedev=yes -else $as_nop +else ac_cv_has_makedev=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_makedev" >&5 -printf "%s\n" "$ac_cv_has_makedev" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_makedev" >&5 +$as_echo "$ac_cv_has_makedev" >&6; } if test "$ac_cv_has_makedev" = "yes"; then -printf "%s\n" "#define HAVE_MAKEDEV 1" >>confdefs.h +$as_echo "#define HAVE_MAKEDEV 1" >>confdefs.h fi # byte swapping -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for le64toh" >&5 -printf %s "checking for le64toh... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for le64toh" >&5 +$as_echo_n "checking for le64toh... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9499,7 +8493,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { le64toh(1) @@ -9508,19 +8502,18 @@ main (void) } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_has_le64toh=yes -else $as_nop +else ac_cv_has_le64toh=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_le64toh" >&5 -printf "%s\n" "$ac_cv_has_le64toh" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_le64toh" >&5 +$as_echo "$ac_cv_has_le64toh" >&6; } if test "$ac_cv_has_le64toh" = "yes"; then -printf "%s\n" "#define HAVE_HTOLE64 1" >>confdefs.h +$as_echo "#define HAVE_HTOLE64 1" >>confdefs.h fi @@ -9536,15 +8529,15 @@ if test "$use_lfs" = "yes"; then case $ac_sys_system/$ac_sys_release in AIX*) -printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h +$as_echo "#define _LARGE_FILES 1" >>confdefs.h ;; esac -printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h +$as_echo "#define _LARGEFILE_SOURCE 1" >>confdefs.h -printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h +$as_echo "#define _FILE_OFFSET_BITS 64" >>confdefs.h fi @@ -9557,121 +8550,96 @@ EOF # Type availability checks ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" -if test "x$ac_cv_type_mode_t" = xyes -then : +if test "x$ac_cv_type_mode_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define mode_t int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = xyes -then : +if test "x$ac_cv_type_off_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define off_t long int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF fi +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : - ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} +else +cat >>confdefs.h <<_ACEOF +#define pid_t int _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - fi - -printf "%s\n" "#define RETSIGTYPE void" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE void +_ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : +if test "x$ac_cv_type_size_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define size_t unsigned int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -printf %s "checking for uid_t in sys/types.h... " >&6; } -if test ${ac_cv_type_uid_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if ${ac_cv_type_uid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1 -then : + $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes -else $as_nop +else ac_cv_type_uid_t=no fi -rm -rf conftest* +rm -f conftest* fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -printf "%s\n" "$ac_cv_type_uid_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then -printf "%s\n" "#define uid_t int" >>confdefs.h +$as_echo "#define uid_t int" >>confdefs.h -printf "%s\n" "#define gid_t int" >>confdefs.h +$as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes -then : +if test "x$ac_cv_type_ssize_t" = xyes; then : -printf "%s\n" "#define HAVE_SSIZE_T 1" >>confdefs.h +$as_echo "#define HAVE_SSIZE_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "__uint128_t" "ac_cv_type___uint128_t" "$ac_includes_default" -if test "x$ac_cv_type___uint128_t" = xyes -then : +if test "x$ac_cv_type___uint128_t" = xyes; then : -printf "%s\n" "#define HAVE_GCC_UINT128_T 1" >>confdefs.h +$as_echo "#define HAVE_GCC_UINT128_T 1" >>confdefs.h fi @@ -9682,19 +8650,17 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -printf %s "checking size of int... " >&6; } -if test ${ac_cv_sizeof_int+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : + +else if test "$ac_cv_type_int" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else @@ -9703,31 +8669,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -printf "%s\n" "$ac_cv_sizeof_int" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -printf %s "checking size of long... " >&6; } -if test ${ac_cv_sizeof_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else @@ -9736,30 +8702,33 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -printf "%s\n" "$ac_cv_sizeof_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 -printf %s "checking alignment of long... " >&6; } -if test ${ac_cv_alignof_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 +$as_echo_n "checking alignment of long... " >&6; } +if ${ac_cv_alignof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long" "$ac_includes_default -typedef struct { char x; long y; } ac__type_alignof_;" -then : +#ifndef offsetof +# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) +#endif +typedef struct { char x; long y; } ac__type_alignof_;"; then : -else $as_nop +else if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of long See \`config.log' for more details" "$LINENO" 5; } else @@ -9768,31 +8737,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 -printf "%s\n" "$ac_cv_alignof_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 +$as_echo "$ac_cv_alignof_long" >&6; } -printf "%s\n" "#define ALIGNOF_LONG $ac_cv_alignof_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALIGNOF_LONG $ac_cv_alignof_long +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -printf %s "checking size of long long... " >&6; } -if test ${ac_cv_sizeof_long_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else if test "$ac_cv_type_long_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else @@ -9801,31 +8770,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } -printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 -printf %s "checking size of void *... " >&6; } -if test ${ac_cv_sizeof_void_p+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if ${ac_cv_sizeof_void_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + +else if test "$ac_cv_type_void_p" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else @@ -9834,31 +8803,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 -printf "%s\n" "$ac_cv_sizeof_void_p" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } -printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -printf %s "checking size of short... " >&6; } -if test ${ac_cv_sizeof_short+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : + +else if test "$ac_cv_type_short" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else @@ -9867,31 +8836,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -printf "%s\n" "$ac_cv_sizeof_short" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 -printf %s "checking size of float... " >&6; } -if test ${ac_cv_sizeof_float+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 +$as_echo_n "checking size of float... " >&6; } +if ${ac_cv_sizeof_float+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : + +else if test "$ac_cv_type_float" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else @@ -9900,31 +8869,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 -printf "%s\n" "$ac_cv_sizeof_float" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 +$as_echo "$ac_cv_sizeof_float" >&6; } -printf "%s\n" "#define SIZEOF_FLOAT $ac_cv_sizeof_float" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_FLOAT $ac_cv_sizeof_float +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 -printf %s "checking size of double... " >&6; } -if test ${ac_cv_sizeof_double+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +$as_echo_n "checking size of double... " >&6; } +if ${ac_cv_sizeof_double+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : + +else if test "$ac_cv_type_double" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else @@ -9933,31 +8902,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 -printf "%s\n" "$ac_cv_sizeof_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +$as_echo "$ac_cv_sizeof_double" >&6; } -printf "%s\n" "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_DOUBLE $ac_cv_sizeof_double +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of fpos_t" >&5 -printf %s "checking size of fpos_t... " >&6; } -if test ${ac_cv_sizeof_fpos_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (fpos_t))" "ac_cv_sizeof_fpos_t" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of fpos_t" >&5 +$as_echo_n "checking size of fpos_t... " >&6; } +if ${ac_cv_sizeof_fpos_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (fpos_t))" "ac_cv_sizeof_fpos_t" "$ac_includes_default"; then : + +else if test "$ac_cv_type_fpos_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (fpos_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9966,31 +8935,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_fpos_t" >&5 -printf "%s\n" "$ac_cv_sizeof_fpos_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_fpos_t" >&5 +$as_echo "$ac_cv_sizeof_fpos_t" >&6; } -printf "%s\n" "#define SIZEOF_FPOS_T $ac_cv_sizeof_fpos_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_FPOS_T $ac_cv_sizeof_fpos_t +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -printf %s "checking size of size_t... " >&6; } -if test ${ac_cv_sizeof_size_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +$as_echo_n "checking size of size_t... " >&6; } +if ${ac_cv_sizeof_size_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : + +else if test "$ac_cv_type_size_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -9999,30 +8968,33 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +$as_echo "$ac_cv_sizeof_size_t" >&6; } -printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +_ACEOF # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of size_t" >&5 -printf %s "checking alignment of size_t... " >&6; } -if test ${ac_cv_alignof_size_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of size_t" >&5 +$as_echo_n "checking alignment of size_t... " >&6; } +if ${ac_cv_alignof_size_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_size_t" "$ac_includes_default -typedef struct { char x; size_t y; } ac__type_alignof_;" -then : +#ifndef offsetof +# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) +#endif +typedef struct { char x; size_t y; } ac__type_alignof_;"; then : -else $as_nop +else if test "$ac_cv_type_size_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of size_t See \`config.log' for more details" "$LINENO" 5; } else @@ -10031,31 +9003,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_size_t" >&5 -printf "%s\n" "$ac_cv_alignof_size_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_size_t" >&5 +$as_echo "$ac_cv_alignof_size_t" >&6; } -printf "%s\n" "#define ALIGNOF_SIZE_T $ac_cv_alignof_size_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALIGNOF_SIZE_T $ac_cv_alignof_size_t +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pid_t" >&5 -printf %s "checking size of pid_t... " >&6; } -if test ${ac_cv_sizeof_pid_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pid_t))" "ac_cv_sizeof_pid_t" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pid_t" >&5 +$as_echo_n "checking size of pid_t... " >&6; } +if ${ac_cv_sizeof_pid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pid_t))" "ac_cv_sizeof_pid_t" "$ac_includes_default"; then : + +else if test "$ac_cv_type_pid_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pid_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10064,31 +9036,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pid_t" >&5 -printf "%s\n" "$ac_cv_sizeof_pid_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pid_t" >&5 +$as_echo "$ac_cv_sizeof_pid_t" >&6; } -printf "%s\n" "#define SIZEOF_PID_T $ac_cv_sizeof_pid_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PID_T $ac_cv_sizeof_pid_t +_ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of uintptr_t" >&5 -printf %s "checking size of uintptr_t... " >&6; } -if test ${ac_cv_sizeof_uintptr_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintptr_t))" "ac_cv_sizeof_uintptr_t" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uintptr_t" >&5 +$as_echo_n "checking size of uintptr_t... " >&6; } +if ${ac_cv_sizeof_uintptr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintptr_t))" "ac_cv_sizeof_uintptr_t" "$ac_includes_default"; then : + +else if test "$ac_cv_type_uintptr_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (uintptr_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10097,22 +9069,23 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintptr_t" >&5 -printf "%s\n" "$ac_cv_sizeof_uintptr_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintptr_t" >&5 +$as_echo "$ac_cv_sizeof_uintptr_t" >&6; } -printf "%s\n" "#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t +_ACEOF - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 -printf %s "checking for long double... " >&6; } -if test ${ac_cv_type_long_double+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 +$as_echo_n "checking for long double... " >&6; } +if ${ac_cv_type_long_double+:} false; then : + $as_echo_n "(cached) " >&6 +else if test "$GCC" = yes; then ac_cv_type_long_double=yes else @@ -10122,7 +9095,7 @@ else $as_nop not support it. */ long double foo = 0.0L; int -main (void) +main () { static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ sizeof (double) <= sizeof (long double))]; @@ -10133,20 +9106,19 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_long_double=yes -else $as_nop +else ac_cv_type_long_double=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 -printf "%s\n" "$ac_cv_type_long_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 +$as_echo "$ac_cv_type_long_double" >&6; } if test $ac_cv_type_long_double = yes; then -printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h +$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi @@ -10154,19 +9126,17 @@ printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 -printf %s "checking size of long double... " >&6; } -if test ${ac_cv_sizeof_long_double+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 +$as_echo_n "checking size of long double... " >&6; } +if ${ac_cv_sizeof_long_double+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : + +else if test "$ac_cv_type_long_double" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else @@ -10175,12 +9145,14 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 -printf "%s\n" "$ac_cv_sizeof_long_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 +$as_echo "$ac_cv_sizeof_long_double" >&6; } -printf "%s\n" "#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double +_ACEOF @@ -10188,19 +9160,17 @@ printf "%s\n" "#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double" >>confdefs. # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5 -printf %s "checking size of _Bool... " >&6; } -if test ${ac_cv_sizeof__Bool+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "$ac_includes_default" -then : - -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5 +$as_echo_n "checking size of _Bool... " >&6; } +if ${ac_cv_sizeof__Bool+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "$ac_includes_default"; then : + +else if test "$ac_cv_type__Bool" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (_Bool) See \`config.log' for more details" "$LINENO" 5; } else @@ -10209,12 +9179,14 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5 -printf "%s\n" "$ac_cv_sizeof__Bool" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5 +$as_echo "$ac_cv_sizeof__Bool" >&6; } -printf "%s\n" "#define SIZEOF__BOOL $ac_cv_sizeof__Bool" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF__BOOL $ac_cv_sizeof__Bool +_ACEOF @@ -10222,24 +9194,22 @@ printf "%s\n" "#define SIZEOF__BOOL $ac_cv_sizeof__Bool" >>confdefs.h # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 -printf %s "checking size of off_t... " >&6; } -if test ${ac_cv_sizeof_off_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +$as_echo_n "checking size of off_t... " >&6; } +if ${ac_cv_sizeof_off_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" " #ifdef HAVE_SYS_TYPES_H #include #endif -" -then : +"; then : -else $as_nop +else if test "$ac_cv_type_off_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (off_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10248,39 +9218,40 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 -printf "%s\n" "$ac_cv_sizeof_off_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +$as_echo "$ac_cv_sizeof_off_t" >&6; } -printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF_T $ac_cv_sizeof_off_t +_ACEOF -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable large file support" >&5 -printf %s "checking whether to enable large file support... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable large file support" >&5 +$as_echo_n "checking whether to enable large file support... " >&6; } if test "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \ "$ac_cv_sizeof_long_long" -ge "$ac_cv_sizeof_off_t"; then -printf "%s\n" "#define HAVE_LARGEFILE_SUPPORT 1" >>confdefs.h +$as_echo "#define HAVE_LARGEFILE_SUPPORT 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 -printf %s "checking size of time_t... " >&6; } -if test ${ac_cv_sizeof_time_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if ${ac_cv_sizeof_time_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " #ifdef HAVE_SYS_TYPES_H #include @@ -10289,13 +9260,12 @@ else $as_nop #include #endif -" -then : +"; then : -else $as_nop +else if test "$ac_cv_type_time_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10304,12 +9274,14 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 -printf "%s\n" "$ac_cv_sizeof_time_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } -printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TIME_T $ac_cv_sizeof_time_t +_ACEOF @@ -10323,15 +9295,15 @@ elif test "$ac_cv_pthread" = "yes" then CC="$CC -pthread" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_t" >&5 -printf %s "checking for pthread_t... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_t" >&5 +$as_echo_n "checking for pthread_t... " >&6; } have_pthread_t=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { pthread_t x; x = *(pthread_t*)0; ; @@ -10339,36 +9311,33 @@ pthread_t x; x = *(pthread_t*)0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : have_pthread_t=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_pthread_t" >&5 -printf "%s\n" "$have_pthread_t" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pthread_t" >&5 +$as_echo "$have_pthread_t" >&6; } if test "$have_pthread_t" = yes ; then # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 -printf %s "checking size of pthread_t... " >&6; } -if test ${ac_cv_sizeof_pthread_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 +$as_echo_n "checking size of pthread_t... " >&6; } +if ${ac_cv_sizeof_pthread_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" " #ifdef HAVE_PTHREAD_H #include #endif -" -then : +"; then : -else $as_nop +else if test "$ac_cv_type_pthread_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pthread_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10377,12 +9346,14 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 -printf "%s\n" "$ac_cv_sizeof_pthread_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 +$as_echo "$ac_cv_sizeof_pthread_t" >&6; } -printf "%s\n" "#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t +_ACEOF fi @@ -10393,20 +9364,18 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_key_t" >&5 -printf %s "checking size of pthread_key_t... " >&6; } -if test ${ac_cv_sizeof_pthread_key_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_key_t" >&5 +$as_echo_n "checking size of pthread_key_t... " >&6; } +if ${ac_cv_sizeof_pthread_key_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_key_t))" "ac_cv_sizeof_pthread_key_t" "#include -" -then : +"; then : -else $as_nop +else if test "$ac_cv_type_pthread_key_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pthread_key_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -10415,46 +9384,47 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_key_t" >&5 -printf "%s\n" "$ac_cv_sizeof_pthread_key_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_key_t" >&5 +$as_echo "$ac_cv_sizeof_pthread_key_t" >&6; } -printf "%s\n" "#define SIZEOF_PTHREAD_KEY_T $ac_cv_sizeof_pthread_key_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PTHREAD_KEY_T $ac_cv_sizeof_pthread_key_t +_ACEOF -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_key_t is compatible with int" >&5 -printf %s "checking whether pthread_key_t is compatible with int... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_key_t is compatible with int" >&5 +$as_echo_n "checking whether pthread_key_t is compatible with int... " >&6; } if test "$ac_cv_sizeof_pthread_key_t" -eq "$ac_cv_sizeof_int" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { pthread_key_t k; k * 1; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_pthread_key_t_is_arithmetic_type=yes -else $as_nop +else ac_pthread_key_t_is_arithmetic_type=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pthread_key_t_is_arithmetic_type" >&5 -printf "%s\n" "$ac_pthread_key_t_is_arithmetic_type" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pthread_key_t_is_arithmetic_type" >&5 +$as_echo "$ac_pthread_key_t_is_arithmetic_type" >&6; } if test "$ac_pthread_key_t_is_arithmetic_type" = yes ; then -printf "%s\n" "#define PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT 1" >>confdefs.h +$as_echo "#define PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT 1" >>confdefs.h fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi CC="$ac_save_cc" @@ -10488,10 +9458,9 @@ case $ac_sys_system/$ac_sys_release in else LIBTOOL_CRUFT="" fi - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : ac_osx_32bit=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10506,10 +9475,9 @@ else $as_nop } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_osx_32bit=yes -else $as_nop +else ac_osx_32bit=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -10551,40 +9519,40 @@ fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5 -printf %s "checking for --enable-framework... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5 +$as_echo_n "checking for --enable-framework... " >&6; } if test "$enable_framework" then BASECFLAGS="$BASECFLAGS -fno-common -dynamic" # -F. is needed to allow linking to the framework while # in the build location. -printf "%s\n" "#define WITH_NEXT_FRAMEWORK 1" >>confdefs.h +$as_echo "#define WITH_NEXT_FRAMEWORK 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } if test $enable_shared = "yes" then as_fn_error $? "Specifying both --enable-shared and --enable-framework is not supported, use only --enable-framework instead" "$LINENO" 5 fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dyld" >&5 -printf %s "checking for dyld... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dyld" >&5 +$as_echo_n "checking for dyld... " >&6; } case $ac_sys_system/$ac_sys_release in Darwin/*) -printf "%s\n" "#define WITH_DYLD 1" >>confdefs.h +$as_echo "#define WITH_DYLD 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: always on for Darwin" >&5 -printf "%s\n" "always on for Darwin" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: always on for Darwin" >&5 +$as_echo "always on for Darwin" >&6; } ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac @@ -10598,8 +9566,8 @@ esac # SHLIB_SUFFIX is the extension of shared libraries `(including the dot!) # -- usually .so, .sl on HP-UX, .dll on Cygwin -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the extension of shared libraries" >&5 -printf %s "checking the extension of shared libraries... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the extension of shared libraries" >&5 +$as_echo_n "checking the extension of shared libraries... " >&6; } if test -z "$SHLIB_SUFFIX"; then case $ac_sys_system in hp*|HP*) @@ -10612,15 +9580,15 @@ if test -z "$SHLIB_SUFFIX"; then *) SHLIB_SUFFIX=.so;; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHLIB_SUFFIX" >&5 -printf "%s\n" "$SHLIB_SUFFIX" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIB_SUFFIX" >&5 +$as_echo "$SHLIB_SUFFIX" >&6; } # LDSHARED is the ld *command* used to create shared library # -- "cc -G" on SunOS 5.x. # (Shared libraries in this instance are shared modules to be loaded into # Python, as opposed to building Python itself as a shared library.) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDSHARED" >&5 -printf %s "checking LDSHARED... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDSHARED" >&5 +$as_echo_n "checking LDSHARED... " >&6; } if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in @@ -10750,14 +9718,14 @@ then *) LDSHARED="ld";; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDSHARED" >&5 -printf "%s\n" "$LDSHARED" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDSHARED" >&5 +$as_echo "$LDSHARED" >&6; } LDCXXSHARED=${LDCXXSHARED-$LDSHARED} BLDSHARED=${BLDSHARED-$LDSHARED} # CCSHARED are the C *flags* used to create objects to go into a shared # library (module) -- this is only needed for a few systems -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking CCSHARED" >&5 -printf %s "checking CCSHARED... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CCSHARED" >&5 +$as_echo_n "checking CCSHARED... " >&6; } if test -z "$CCSHARED" then case $ac_sys_system/$ac_sys_release in @@ -10788,12 +9756,12 @@ then CCSHARED="-fpic -D__SO_PICABILINUX__ -ftls-model=global-dynamic" esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CCSHARED" >&5 -printf "%s\n" "$CCSHARED" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCSHARED" >&5 +$as_echo "$CCSHARED" >&6; } # LINKFORSHARED are the flags passed to the $(CC) command that links # the python executable -- this is only needed for a few systems -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LINKFORSHARED" >&5 -printf %s "checking LINKFORSHARED... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKFORSHARED" >&5 +$as_echo_n "checking LINKFORSHARED... " >&6; } if test -z "$LINKFORSHARED" then case $ac_sys_system/$ac_sys_release in @@ -10850,13 +9818,13 @@ then LINKFORSHARED='-Wl,-export-dynamic';; esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LINKFORSHARED" >&5 -printf "%s\n" "$LINKFORSHARED" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKFORSHARED" >&5 +$as_echo "$LINKFORSHARED" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking CFLAGSFORSHARED" >&5 -printf %s "checking CFLAGSFORSHARED... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGSFORSHARED" >&5 +$as_echo_n "checking CFLAGSFORSHARED... " >&6; } if test ! "$LIBRARY" = "$LDLIBRARY" then case $ac_sys_system in @@ -10868,8 +9836,8 @@ then CFLAGSFORSHARED='$(CCSHARED)' esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CFLAGSFORSHARED" >&5 -printf "%s\n" "$CFLAGSFORSHARED" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CFLAGSFORSHARED" >&5 +$as_echo "$CFLAGSFORSHARED" >&6; } # SHLIBS are libraries (except -lc and -lm) to link to the python shared # library (with --enable-shared). @@ -10880,23 +9848,22 @@ printf "%s\n" "$CFLAGSFORSHARED" >&6; } # don't need to link LIBS explicitly. The default should be only changed # on systems where this approach causes problems. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SHLIBS" >&5 -printf %s "checking SHLIBS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SHLIBS" >&5 +$as_echo_n "checking SHLIBS... " >&6; } case "$ac_sys_system" in *) SHLIBS='$(LIBS)';; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHLIBS" >&5 -printf "%s\n" "$SHLIBS" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIBS" >&5 +$as_echo "$SHLIBS" >&6; } # checks for libraries -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sendfile in -lsendfile" >&5 -printf %s "checking for sendfile in -lsendfile... " >&6; } -if test ${ac_cv_lib_sendfile_sendfile+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sendfile in -lsendfile" >&5 +$as_echo_n "checking for sendfile in -lsendfile... " >&6; } +if ${ac_cv_lib_sendfile_sendfile+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsendfile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10905,41 +9872,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sendfile (); int -main (void) +main () { return sendfile (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sendfile_sendfile=yes -else $as_nop +else ac_cv_lib_sendfile_sendfile=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sendfile_sendfile" >&5 -printf "%s\n" "$ac_cv_lib_sendfile_sendfile" >&6; } -if test "x$ac_cv_lib_sendfile_sendfile" = xyes -then : - printf "%s\n" "#define HAVE_LIBSENDFILE 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sendfile_sendfile" >&5 +$as_echo "$ac_cv_lib_sendfile_sendfile" >&6; } +if test "x$ac_cv_lib_sendfile_sendfile" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSENDFILE 1 +_ACEOF LIBS="-lsendfile $LIBS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10948,41 +9917,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : - printf "%s\n" "#define HAVE_LIBDL 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF LIBS="-ldl $LIBS" fi # Dynamic linking for SunOS/Solaris and SYSV -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10991,30 +9962,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shl_load (); int -main (void) +main () { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes -else $as_nop +else ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : - printf "%s\n" "#define HAVE_LIBDLD 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDLD 1 +_ACEOF LIBS="-ldld $LIBS" @@ -11022,27 +9996,27 @@ fi # Dynamic linking for HP-UX # checks for uuid.h location -ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" -if test "x$ac_cv_header_uuid_uuid_h" = xyes -then : - printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h +for ac_header in uuid/uuid.h uuid.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "$ac_includes_default" -if test "x$ac_cv_header_uuid_h" = xyes -then : - printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h -fi +done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time_safe" >&5 -printf %s "checking for uuid_generate_time_safe... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time_safe" >&5 +$as_echo_n "checking for uuid_generate_time_safe... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef uuid_generate_time_safe @@ -11053,29 +10027,28 @@ void *x = uuid_generate_time_safe return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h +$as_echo "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 (anno 2007) # FreeBSD and OpenBSD provides support as well -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_create" >&5 -printf %s "checking for uuid_create... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_create" >&5 +$as_echo_n "checking for uuid_create... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef uuid_create @@ -11086,29 +10059,28 @@ void *x = uuid_create return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_UUID_CREATE 1" >>confdefs.h +$as_echo "#define HAVE_UUID_CREATE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet # stream in big-endian byte-order -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_enc_be" >&5 -printf %s "checking for uuid_enc_be... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_enc_be" >&5 +$as_echo_n "checking for uuid_enc_be... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef uuid_enc_be @@ -11119,29 +10091,27 @@ void *x = uuid_enc_be return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_UUID_ENC_BE 1" >>confdefs.h +$as_echo "#define HAVE_UUID_ENC_BE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # 'Real Time' functions on Solaris # posix4 on Solaris 2.6 # pthread (first!) on Linux -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sem_init" >&5 -printf %s "checking for library containing sem_init... " >&6; } -if test ${ac_cv_search_sem_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_init" >&5 +$as_echo_n "checking for library containing sem_init... " >&6; } +if ${ac_cv_search_sem_init+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11149,60 +10119,57 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sem_init (); int -main (void) +main () { return sem_init (); ; return 0; } _ACEOF -for ac_lib in '' pthread rt posix4 -do +for ac_lib in '' pthread rt posix4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sem_init=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_sem_init+y} -then : + if ${ac_cv_search_sem_init+:} false; then : break fi done -if test ${ac_cv_search_sem_init+y} -then : +if ${ac_cv_search_sem_init+:} false; then : -else $as_nop +else ac_cv_search_sem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_init" >&5 -printf "%s\n" "$ac_cv_search_sem_init" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_init" >&5 +$as_echo "$ac_cv_search_sem_init" >&6; } ac_res=$ac_cv_search_sem_init -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # check if we need libintl for locale functions -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for textdomain in -lintl" >&5 -printf %s "checking for textdomain in -lintl... " >&6; } -if test ${ac_cv_lib_intl_textdomain+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for textdomain in -lintl" >&5 +$as_echo_n "checking for textdomain in -lintl... " >&6; } +if ${ac_cv_lib_intl_textdomain+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11211,31 +10178,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char textdomain (); int -main (void) +main () { return textdomain (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_textdomain=yes -else $as_nop +else ac_cv_lib_intl_textdomain=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_textdomain" >&5 -printf "%s\n" "$ac_cv_lib_intl_textdomain" >&6; } -if test "x$ac_cv_lib_intl_textdomain" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_textdomain" >&5 +$as_echo "$ac_cv_lib_intl_textdomain" >&6; } +if test "x$ac_cv_lib_intl_textdomain" = xyes; then : -printf "%s\n" "#define WITH_LIBINTL 1" >>confdefs.h +$as_echo "#define WITH_LIBINTL 1" >>confdefs.h LIBS="-lintl $LIBS" fi @@ -11243,14 +10211,14 @@ fi # checks for system dependent C++ extensions support case "$ac_sys_system" in - AIX*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for genuine AIX C++ extensions support" >&5 -printf %s "checking for genuine AIX C++ extensions support... " >&6; } + AIX*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for genuine AIX C++ extensions support" >&5 +$as_echo_n "checking for genuine AIX C++ extensions support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { loadAndInit("", 0, "") ; @@ -11258,49 +10226,48 @@ loadAndInit("", 0, "") } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : -printf "%s\n" "#define AIX_GENUINE_CPLUSPLUS 1" >>confdefs.h +$as_echo "#define AIX_GENUINE_CPLUSPLUS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the platform_tag # of the AIX system used to build/package Python executable. This tag serves # as a baseline for bdist module packages - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the system builddate" >&5 -printf %s "checking for the system builddate... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the system builddate" >&5 +$as_echo_n "checking for the system builddate... " >&6; } AIX_BUILDDATE=$(lslpp -Lcq bos.mp64 | awk -F: '{ print $NF }') -printf "%s\n" "#define AIX_BUILDDATE $AIX_BUILDDATE" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define AIX_BUILDDATE $AIX_BUILDDATE +_ACEOF - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AIX_BUILDDATE" >&5 -printf "%s\n" "$AIX_BUILDDATE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AIX_BUILDDATE" >&5 +$as_echo "$AIX_BUILDDATE" >&6; } ;; *) ;; esac # check for systems that require aligned memory access -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking aligned memory access is required" >&5 -printf %s "checking aligned memory access is required... " >&6; } -if test ${ac_cv_aligned_required+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking aligned memory access is required" >&5 +$as_echo_n "checking aligned memory access is required... " >&6; } +if ${ac_cv_aligned_required+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_aligned_required=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11317,10 +10284,9 @@ int main() return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_aligned_required=no -else $as_nop +else ac_cv_aligned_required=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -11330,33 +10296,32 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_aligned_required" >&5 -printf "%s\n" "$ac_cv_aligned_required" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_aligned_required" >&5 +$as_echo "$ac_cv_aligned_required" >&6; } if test "$ac_cv_aligned_required" = yes ; then -printf "%s\n" "#define HAVE_ALIGNED_REQUIRED 1" >>confdefs.h +$as_echo "#define HAVE_ALIGNED_REQUIRED 1" >>confdefs.h fi # str, bytes and memoryview hash algorithm -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-hash-algorithm" >&5 -printf %s "checking for --with-hash-algorithm... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-hash-algorithm" >&5 +$as_echo_n "checking for --with-hash-algorithm... " >&6; } # Check whether --with-hash_algorithm was given. -if test ${with_hash_algorithm+y} -then : +if test "${with_hash_algorithm+set}" = set; then : withval=$with_hash_algorithm; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } case "$withval" in siphash24) - printf "%s\n" "#define Py_HASH_ALGORITHM 1" >>confdefs.h + $as_echo "#define Py_HASH_ALGORITHM 1" >>confdefs.h ;; fnv) - printf "%s\n" "#define Py_HASH_ALGORITHM 2" >>confdefs.h + $as_echo "#define Py_HASH_ALGORITHM 2" >>confdefs.h ;; *) @@ -11364,9 +10329,9 @@ case "$withval" in ;; esac -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default" >&5 -printf "%s\n" "default" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: default" >&5 +$as_echo "default" >&6; } fi @@ -11385,12 +10350,11 @@ validate_tzpath() { } TZPATH="/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tzpath" >&5 -printf %s "checking for --with-tzpath... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tzpath" >&5 +$as_echo_n "checking for --with-tzpath... " >&6; } # Check whether --with-tzpath was given. -if test ${with_tzpath+y} -then : +if test "${with_tzpath+set}" = set; then : withval=$with_tzpath; case "$withval" in yes) @@ -11399,84 +10363,80 @@ case "$withval" in *) validate_tzpath "$withval" TZPATH="$withval" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$withval\"" >&5 -printf "%s\n" "\"$withval\"" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$withval\"" >&5 +$as_echo "\"$withval\"" >&6; } ;; esac -else $as_nop +else validate_tzpath "$TZPATH" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$TZPATH\"" >&5 -printf "%s\n" "\"$TZPATH\"" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$TZPATH\"" >&5 +$as_echo "\"$TZPATH\"" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-address-sanitizer" >&5 -printf %s "checking for --with-address-sanitizer... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-address-sanitizer" >&5 +$as_echo_n "checking for --with-address-sanitizer... " >&6; } # Check whether --with-address_sanitizer was given. -if test ${with_address_sanitizer+y} -then : +if test "${with_address_sanitizer+set}" = set; then : withval=$with_address_sanitizer; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } BASECFLAGS="-fsanitize=address -fno-omit-frame-pointer $BASECFLAGS" LDFLAGS="-fsanitize=address $LDFLAGS" # ASan works by controlling memory allocation, our own malloc interferes. with_pymalloc="no" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-memory-sanitizer" >&5 -printf %s "checking for --with-memory-sanitizer... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-memory-sanitizer" >&5 +$as_echo_n "checking for --with-memory-sanitizer... " >&6; } # Check whether --with-memory_sanitizer was given. -if test ${with_memory_sanitizer+y} -then : +if test "${with_memory_sanitizer+set}" = set; then : withval=$with_memory_sanitizer; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } BASECFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer $BASECFLAGS" LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 $LDFLAGS" # MSan works by controlling memory allocation, our own malloc interferes. with_pymalloc="no" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-undefined-behavior-sanitizer" >&5 -printf %s "checking for --with-undefined-behavior-sanitizer... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-undefined-behavior-sanitizer" >&5 +$as_echo_n "checking for --with-undefined-behavior-sanitizer... " >&6; } # Check whether --with-undefined_behavior_sanitizer was given. -if test ${with_undefined_behavior_sanitizer+y} -then : +if test "${with_undefined_behavior_sanitizer+set}" = set; then : withval=$with_undefined_behavior_sanitizer; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } BASECFLAGS="-fsanitize=undefined $BASECFLAGS" LDFLAGS="-fsanitize=undefined $LDFLAGS" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Most SVR4 platforms (e.g. Solaris) need -lsocket and -lnsl. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 -printf %s "checking for t_open in -lnsl... " >&6; } -if test ${ac_cv_lib_nsl_t_open+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 +$as_echo_n "checking for t_open in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_t_open+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11485,38 +10445,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char t_open (); int -main (void) +main () { return t_open (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_t_open=yes -else $as_nop +else ac_cv_lib_nsl_t_open=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 -printf "%s\n" "$ac_cv_lib_nsl_t_open" >&6; } -if test "x$ac_cv_lib_nsl_t_open" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 +$as_echo "$ac_cv_lib_nsl_t_open" >&6; } +if test "x$ac_cv_lib_nsl_t_open" = xyes; then : LIBS="-lnsl $LIBS" fi # SVR4 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -printf %s "checking for socket in -lsocket... " >&6; } -if test ${ac_cv_lib_socket_socket+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 +$as_echo_n "checking for socket in -lsocket... " >&6; } +if ${ac_cv_lib_socket_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11525,47 +10485,47 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char socket (); int -main (void) +main () { return socket (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_socket=yes -else $as_nop +else ac_cv_lib_socket_socket=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -printf "%s\n" "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 +$as_echo "$ac_cv_lib_socket_socket" >&6; } +if test "x$ac_cv_lib_socket_socket" = xyes; then : LIBS="-lsocket $LIBS" fi # SVR4 sockets -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libs" >&5 -printf %s "checking for --with-libs... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libs" >&5 +$as_echo_n "checking for --with-libs... " >&6; } # Check whether --with-libs was given. -if test ${with_libs+y} -then : +if test "${with_libs+set}" = set; then : withval=$with_libs; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } LIBS="$withval $LIBS" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -11580,12 +10540,11 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PKG_CONFIG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. @@ -11595,15 +10554,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11615,11 +10570,11 @@ esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -printf "%s\n" "$PKG_CONFIG" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -11628,12 +10583,11 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. @@ -11643,15 +10597,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11663,11 +10613,11 @@ esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then @@ -11675,8 +10625,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG @@ -11688,41 +10638,39 @@ fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check for use of the system expat library -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 -printf %s "checking for --with-system-expat... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 +$as_echo_n "checking for --with-system-expat... " >&6; } # Check whether --with-system_expat was given. -if test ${with_system_expat+y} -then : +if test "${with_system_expat+set}" = set; then : withval=$with_system_expat; -else $as_nop +else with_system_expat="no" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_expat" >&5 -printf "%s\n" "$with_system_expat" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_expat" >&5 +$as_echo "$with_system_expat" >&6; } # Check for use of the system libffi library -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-ffi" >&5 -printf %s "checking for --with-system-ffi... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-ffi" >&5 +$as_echo_n "checking for --with-system-ffi... " >&6; } # Check whether --with-system_ffi was given. -if test ${with_system_ffi+y} -then : +if test "${with_system_ffi+set}" = set; then : withval=$with_system_ffi; fi @@ -11739,15 +10687,15 @@ then as_fn_error $? "--with-system-ffi accepts no arguments" "$LINENO" 5 ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_ffi" >&5 -printf "%s\n" "$with_system_ffi" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_ffi" >&5 +$as_echo "$with_system_ffi" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } if test "$with_system_ffi" != "" then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --with(out)-system-ffi is ignored on this platform" >&5 -printf "%s\n" "$as_me: WARNING: --with(out)-system-ffi is ignored on this platform" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with(out)-system-ffi is ignored on this platform" >&5 +$as_echo "$as_me: WARNING: --with(out)-system-ffi is ignored on this platform" >&2;} fi with_system_ffi="yes" fi @@ -11760,30 +10708,28 @@ fi # Check for use of the system libmpdec library -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5 -printf %s "checking for --with-system-libmpdec... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5 +$as_echo_n "checking for --with-system-libmpdec... " >&6; } # Check whether --with-system_libmpdec was given. -if test ${with_system_libmpdec+y} -then : +if test "${with_system_libmpdec+set}" = set; then : withval=$with_system_libmpdec; -else $as_nop +else with_system_libmpdec="no" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_system_libmpdec" >&5 -printf "%s\n" "$with_system_libmpdec" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_libmpdec" >&5 +$as_echo "$with_system_libmpdec" >&6; } # Check whether _decimal should use a coroutine-local or thread-local context -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5 -printf %s "checking for --with-decimal-contextvar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5 +$as_echo_n "checking for --with-decimal-contextvar... " >&6; } # Check whether --with-decimal_contextvar was given. -if test ${with_decimal_contextvar+y} -then : +if test "${with_decimal_contextvar+set}" = set; then : withval=$with_decimal_contextvar; -else $as_nop +else with_decimal_contextvar="yes" fi @@ -11791,57 +10737,54 @@ fi if test "$with_decimal_contextvar" != "no" then -printf "%s\n" "#define WITH_DECIMAL_CONTEXTVAR 1" >>confdefs.h +$as_echo "#define WITH_DECIMAL_CONTEXTVAR 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5 -printf "%s\n" "$with_decimal_contextvar" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5 +$as_echo "$with_decimal_contextvar" >&6; } # Check for support for loadable sqlite extensions -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 -printf %s "checking for --enable-loadable-sqlite-extensions... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 +$as_echo_n "checking for --enable-loadable-sqlite-extensions... " >&6; } # Check whether --enable-loadable-sqlite-extensions was given. -if test ${enable_loadable_sqlite_extensions+y} -then : +if test "${enable_loadable_sqlite_extensions+set}" = set; then : enableval=$enable_loadable_sqlite_extensions; -else $as_nop +else enable_loadable_sqlite_extensions="no" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_loadable_sqlite_extensions" >&5 -printf "%s\n" "$enable_loadable_sqlite_extensions" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_loadable_sqlite_extensions" >&5 +$as_echo "$enable_loadable_sqlite_extensions" >&6; } # Check for --with-tcltk-includes=path and --with-tcltk-libs=path -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-includes" >&5 -printf %s "checking for --with-tcltk-includes... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-includes" >&5 +$as_echo_n "checking for --with-tcltk-includes... " >&6; } # Check whether --with-tcltk-includes was given. -if test ${with_tcltk_includes+y} -then : +if test "${with_tcltk_includes+set}" = set; then : withval=$with_tcltk_includes; -else $as_nop +else with_tcltk_includes="default" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_includes" >&5 -printf "%s\n" "$with_tcltk_includes" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-libs" >&5 -printf %s "checking for --with-tcltk-libs... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_includes" >&5 +$as_echo "$with_tcltk_includes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-libs" >&5 +$as_echo_n "checking for --with-tcltk-libs... " >&6; } # Check whether --with-tcltk-libs was given. -if test ${with_tcltk_libs+y} -then : +if test "${with_tcltk_libs+set}" = set; then : withval=$with_tcltk_libs; -else $as_nop +else with_tcltk_libs="default" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_libs" >&5 -printf "%s\n" "$with_tcltk_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_libs" >&5 +$as_echo "$with_tcltk_libs" >&6; } if test "x$with_tcltk_includes" = xdefault || test "x$with_tcltk_libs" = xdefault then if test "x$with_tcltk_includes" != "x$with_tcltk_libs" @@ -11861,12 +10804,11 @@ else fi # Check for --with-dbmliborder -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-dbmliborder" >&5 -printf %s "checking for --with-dbmliborder... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-dbmliborder" >&5 +$as_echo_n "checking for --with-dbmliborder... " >&6; } # Check whether --with-dbmliborder was given. -if test ${with_dbmliborder+y} -then : +if test "${with_dbmliborder+set}" = set; then : withval=$with_dbmliborder; if test x$with_dbmliborder = xyes then @@ -11881,8 +10823,8 @@ else fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5 -printf "%s\n" "$with_dbmliborder" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5 +$as_echo "$with_dbmliborder" >&6; } # Templates for things AC_DEFINEd more than once. # For a single AC_DEFINE, no template is needed. @@ -11891,7 +10833,7 @@ printf "%s\n" "$with_dbmliborder" >&6; } if test "$ac_cv_pthread_is_default" = yes then # Defining _REENTRANT on system with POSIX threads should not hurt. - printf "%s\n" "#define _REENTRANT 1" >>confdefs.h + $as_echo "#define _REENTRANT 1" >>confdefs.h posix_threads=yes if test "$ac_sys_system" = "SunOS"; then @@ -11926,8 +10868,8 @@ else # According to the POSIX spec, a pthreads implementation must # define _POSIX_THREADS in unistd.h. Some apparently don't # (e.g. gnu pth with pthread emulation) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _POSIX_THREADS in unistd.h" >&5 -printf %s "checking for _POSIX_THREADS in unistd.h... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _POSIX_THREADS in unistd.h" >&5 +$as_echo_n "checking for _POSIX_THREADS in unistd.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11938,26 +10880,25 @@ yes _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : unistd_defines_pthreads=yes -else $as_nop +else unistd_defines_pthreads=no fi -rm -rf conftest* +rm -f conftest* - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $unistd_defines_pthreads" >&5 -printf "%s\n" "$unistd_defines_pthreads" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $unistd_defines_pthreads" >&5 +$as_echo "$unistd_defines_pthreads" >&6; } - printf "%s\n" "#define _REENTRANT 1" >>confdefs.h + $as_echo "#define _REENTRANT 1" >>confdefs.h # Just looking for pthread_create in libpthread is not enough: # on HP/UX, pthread.h renames pthread_create to a different symbol name. # So we really have to include pthread.h, and then link. _libs=$LIBS LIBS="$LIBS -lpthread" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 -printf %s "checking for pthread_create in -lpthread... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +$as_echo_n "checking for pthread_create in -lpthread... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11966,7 +10907,7 @@ printf %s "checking for pthread_create in -lpthread... " >&6; } void * start_routine (void *arg) { exit (0); } int -main (void) +main () { pthread_create (NULL, NULL, start_routine, NULL) @@ -11974,30 +10915,27 @@ pthread_create (NULL, NULL, start_routine, NULL) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } posix_threads=yes -else $as_nop +else LIBS=$_libs ac_fn_c_check_func "$LINENO" "pthread_detach" "ac_cv_func_pthread_detach" -if test "x$ac_cv_func_pthread_detach" = xyes -then : +if test "x$ac_cv_func_pthread_detach" = xyes; then : posix_threads=yes -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreads" >&5 -printf %s "checking for pthread_create in -lpthreads... " >&6; } -if test ${ac_cv_lib_pthreads_pthread_create+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreads" >&5 +$as_echo_n "checking for pthread_create in -lpthreads... " >&6; } +if ${ac_cv_lib_pthreads_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12006,41 +10944,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char pthread_create (); int -main (void) +main () { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_create=yes -else $as_nop +else ac_cv_lib_pthreads_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_create" >&5 -printf "%s\n" "$ac_cv_lib_pthreads_pthread_create" >&6; } -if test "x$ac_cv_lib_pthreads_pthread_create" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_create" >&5 +$as_echo "$ac_cv_lib_pthreads_pthread_create" >&6; } +if test "x$ac_cv_lib_pthreads_pthread_create" = xyes; then : posix_threads=yes LIBS="$LIBS -lpthreads" -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 -printf %s "checking for pthread_create in -lc_r... " >&6; } -if test ${ac_cv_lib_c_r_pthread_create+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 +$as_echo_n "checking for pthread_create in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12049,41 +10987,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char pthread_create (); int -main (void) +main () { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_create=yes -else $as_nop +else ac_cv_lib_c_r_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 -printf "%s\n" "$ac_cv_lib_c_r_pthread_create" >&6; } -if test "x$ac_cv_lib_c_r_pthread_create" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; } +if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then : posix_threads=yes LIBS="$LIBS -lc_r" -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5 -printf %s "checking for __pthread_create_system in -lpthread... " >&6; } -if test ${ac_cv_lib_pthread___pthread_create_system+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5 +$as_echo_n "checking for __pthread_create_system in -lpthread... " >&6; } +if ${ac_cv_lib_pthread___pthread_create_system+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12092,41 +11030,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char __pthread_create_system (); int -main (void) +main () { return __pthread_create_system (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_create_system=yes -else $as_nop +else ac_cv_lib_pthread___pthread_create_system=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5 -printf "%s\n" "$ac_cv_lib_pthread___pthread_create_system" >&6; } -if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5 +$as_echo "$ac_cv_lib_pthread___pthread_create_system" >&6; } +if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes; then : posix_threads=yes LIBS="$LIBS -lpthread" -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lcma" >&5 -printf %s "checking for pthread_create in -lcma... " >&6; } -if test ${ac_cv_lib_cma_pthread_create+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lcma" >&5 +$as_echo_n "checking for pthread_create in -lcma... " >&6; } +if ${ac_cv_lib_cma_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lcma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12135,34 +11073,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char pthread_create (); int -main (void) +main () { return pthread_create (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cma_pthread_create=yes -else $as_nop +else ac_cv_lib_cma_pthread_create=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cma_pthread_create" >&5 -printf "%s\n" "$ac_cv_lib_cma_pthread_create" >&6; } -if test "x$ac_cv_lib_cma_pthread_create" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cma_pthread_create" >&5 +$as_echo "$ac_cv_lib_cma_pthread_create" >&6; } +if test "x$ac_cv_lib_cma_pthread_create" = xyes; then : posix_threads=yes LIBS="$LIBS -lcma" -else $as_nop +else as_fn_error $? "could not find pthreads on your system" "$LINENO" 5 @@ -12178,15 +11117,14 @@ fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usconfig in -lmpc" >&5 -printf %s "checking for usconfig in -lmpc... " >&6; } -if test ${ac_cv_lib_mpc_usconfig+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usconfig in -lmpc" >&5 +$as_echo_n "checking for usconfig in -lmpc... " >&6; } +if ${ac_cv_lib_mpc_usconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12195,29 +11133,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char usconfig (); int -main (void) +main () { return usconfig (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpc_usconfig=yes -else $as_nop +else ac_cv_lib_mpc_usconfig=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpc_usconfig" >&5 -printf "%s\n" "$ac_cv_lib_mpc_usconfig" >&6; } -if test "x$ac_cv_lib_mpc_usconfig" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpc_usconfig" >&5 +$as_echo "$ac_cv_lib_mpc_usconfig" >&6; } +if test "x$ac_cv_lib_mpc_usconfig" = xyes; then : LIBS="$LIBS -lmpc" @@ -12229,36 +11168,34 @@ fi if test "$posix_threads" = "yes"; then if test "$unistd_defines_pthreads" = "no"; then -printf "%s\n" "#define _POSIX_THREADS 1" >>confdefs.h +$as_echo "#define _POSIX_THREADS 1" >>confdefs.h fi # Bug 662787: Using semaphores causes unexplicable hangs on Solaris 8. case $ac_sys_system/$ac_sys_release in SunOS/5.6) -printf "%s\n" "#define HAVE_PTHREAD_DESTRUCTOR 1" >>confdefs.h +$as_echo "#define HAVE_PTHREAD_DESTRUCTOR 1" >>confdefs.h ;; SunOS/5.8) -printf "%s\n" "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h ;; AIX/*) -printf "%s\n" "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_POSIX_SEMAPHORES 1" >>confdefs.h ;; esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PTHREAD_SCOPE_SYSTEM is supported" >&5 -printf %s "checking if PTHREAD_SCOPE_SYSTEM is supported... " >&6; } - if test ${ac_cv_pthread_system_supported+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if PTHREAD_SCOPE_SYSTEM is supported" >&5 +$as_echo_n "checking if PTHREAD_SCOPE_SYSTEM is supported... " >&6; } + if ${ac_cv_pthread_system_supported+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_pthread_system_supported=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12276,10 +11213,9 @@ else $as_nop return (0); } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_pthread_system_supported=yes -else $as_nop +else ac_cv_pthread_system_supported=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -12289,61 +11225,64 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_system_supported" >&5 -printf "%s\n" "$ac_cv_pthread_system_supported" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pthread_system_supported" >&5 +$as_echo "$ac_cv_pthread_system_supported" >&6; } if test "$ac_cv_pthread_system_supported" = "yes"; then -printf "%s\n" "#define PTHREAD_SYSTEM_SCHED_SUPPORTED 1" >>confdefs.h +$as_echo "#define PTHREAD_SYSTEM_SCHED_SUPPORTED 1" >>confdefs.h fi - - for ac_func in pthread_sigmask + for ac_func in pthread_sigmask do : ac_fn_c_check_func "$LINENO" "pthread_sigmask" "ac_cv_func_pthread_sigmask" -if test "x$ac_cv_func_pthread_sigmask" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_SIGMASK 1" >>confdefs.h +if test "x$ac_cv_func_pthread_sigmask" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_SIGMASK 1 +_ACEOF case $ac_sys_system in CYGWIN*) -printf "%s\n" "#define HAVE_BROKEN_PTHREAD_SIGMASK 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_PTHREAD_SIGMASK 1" >>confdefs.h ;; esac fi - done - ac_fn_c_check_func "$LINENO" "pthread_getcpuclockid" "ac_cv_func_pthread_getcpuclockid" -if test "x$ac_cv_func_pthread_getcpuclockid" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_GETCPUCLOCKID 1" >>confdefs.h + + for ac_func in pthread_getcpuclockid +do : + ac_fn_c_check_func "$LINENO" "pthread_getcpuclockid" "ac_cv_func_pthread_getcpuclockid" +if test "x$ac_cv_func_pthread_getcpuclockid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_GETCPUCLOCKID 1 +_ACEOF fi +done fi # Check for enable-ipv6 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if --enable-ipv6 is specified" >&5 -printf %s "checking if --enable-ipv6 is specified... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if --enable-ipv6 is specified" >&5 +$as_echo_n "checking if --enable-ipv6 is specified... " >&6; } # Check whether --enable-ipv6 was given. -if test ${enable_ipv6+y} -then : +if test "${enable_ipv6+set}" = set; then : enableval=$enable_ipv6; case "$enableval" in no) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ipv6=no ;; - *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - printf "%s\n" "#define ENABLE_IPV6 1" >>confdefs.h + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + $as_echo "#define ENABLE_IPV6 1" >>confdefs.h ipv6=yes ;; esac -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12351,39 +11290,38 @@ else $as_nop #include #include int -main (void) +main () { int domain = AF_INET6; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } ipv6=yes -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ipv6=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$ipv6" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if RFC2553 API is available" >&5 -printf %s "checking if RFC2553 API is available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if RFC2553 API is available" >&5 +$as_echo_n "checking if RFC2553 API is available... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main (void) +main () { struct sockaddr_in6 x; x.sin6_scope_id; @@ -12392,25 +11330,24 @@ struct sockaddr_in6 x; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } ipv6=yes -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ipv6=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "$ipv6" = "yes"; then - printf "%s\n" "#define ENABLE_IPV6 1" >>confdefs.h + $as_echo "#define ENABLE_IPV6 1" >>confdefs.h fi @@ -12422,8 +11359,8 @@ ipv6lib=none ipv6trylibc=no if test "$ipv6" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 -printf %s "checking ipv6 stack type... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 +$as_echo_n "checking ipv6 stack type... " >&6; } for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta; do case $i in @@ -12437,11 +11374,10 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i fi -rm -rf conftest* +rm -f conftest* ;; kame) @@ -12454,14 +11390,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i; ipv6lib=inet6 ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -rf conftest* +rm -f conftest* ;; linux-glibc) @@ -12474,12 +11409,11 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i; ipv6trylibc=yes fi -rm -rf conftest* +rm -f conftest* ;; linux-inet6) @@ -12508,13 +11442,12 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -rf conftest* +rm -f conftest* ;; v6d) @@ -12527,14 +11460,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i; ipv6lib=v6; ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -rf conftest* +rm -f conftest* ;; zeta) @@ -12547,13 +11479,12 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 -then : + $EGREP "yes" >/dev/null 2>&1; then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -rf conftest* +rm -f conftest* ;; esac @@ -12561,8 +11492,8 @@ rm -rf conftest* break fi done - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 -printf "%s\n" "$ipv6type" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 +$as_echo "$ipv6type" >&6; } fi if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then @@ -12581,1633 +11512,591 @@ if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_FD_FRAMES" >&5 -printf %s "checking for CAN_RAW_FD_FRAMES... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_FD_FRAMES" >&5 +$as_echo_n "checking for CAN_RAW_FD_FRAMES... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* CAN_RAW_FD_FRAMES available check */ #include int -main (void) +main () { int can_raw_fd_frames = CAN_RAW_FD_FRAMES; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_LINUX_CAN_RAW_FD_FRAMES 1" >>confdefs.h +$as_echo "#define HAVE_LINUX_CAN_RAW_FD_FRAMES 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_JOIN_FILTERS" >&5 -printf %s "checking for CAN_RAW_JOIN_FILTERS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_JOIN_FILTERS" >&5 +$as_echo_n "checking for CAN_RAW_JOIN_FILTERS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int can_raw_join_filters = CAN_RAW_JOIN_FILTERS; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - -printf "%s\n" "#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -# Check for --with-doc-strings -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-doc-strings" >&5 -printf %s "checking for --with-doc-strings... " >&6; } - -# Check whether --with-doc-strings was given. -if test ${with_doc_strings+y} -then : - withval=$with_doc_strings; -fi - - -if test -z "$with_doc_strings" -then with_doc_strings="yes" -fi -if test "$with_doc_strings" != "no" -then - -printf "%s\n" "#define WITH_DOC_STRINGS 1" >>confdefs.h - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_doc_strings" >&5 -printf "%s\n" "$with_doc_strings" >&6; } - -# Check for Python-specific malloc support -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-pymalloc" >&5 -printf %s "checking for --with-pymalloc... " >&6; } - -# Check whether --with-pymalloc was given. -if test ${with_pymalloc+y} -then : - withval=$with_pymalloc; -fi - - -if test -z "$with_pymalloc" -then - with_pymalloc="yes" -fi -if test "$with_pymalloc" != "no" -then - -printf "%s\n" "#define WITH_PYMALLOC 1" >>confdefs.h - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_pymalloc" >&5 -printf "%s\n" "$with_pymalloc" >&6; } - -# Check for --with-c-locale-coercion -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-c-locale-coercion" >&5 -printf %s "checking for --with-c-locale-coercion... " >&6; } - -# Check whether --with-c-locale-coercion was given. -if test ${with_c_locale_coercion+y} -then : - withval=$with_c_locale_coercion; -fi - - -if test -z "$with_c_locale_coercion" -then - with_c_locale_coercion="yes" -fi -if test "$with_c_locale_coercion" != "no" -then - -printf "%s\n" "#define PY_COERCE_C_LOCALE 1" >>confdefs.h - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_coercion" >&5 -printf "%s\n" "$with_c_locale_coercion" >&6; } - -# Check for Valgrind support -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-valgrind" >&5 -printf %s "checking for --with-valgrind... " >&6; } - -# Check whether --with-valgrind was given. -if test ${with_valgrind+y} -then : - withval=$with_valgrind; -else $as_nop - with_valgrind=no -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_valgrind" >&5 -printf "%s\n" "$with_valgrind" >&6; } -if test "$with_valgrind" != no; then - ac_fn_c_check_header_compile "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default" -if test "x$ac_cv_header_valgrind_valgrind_h" = xyes -then : - -printf "%s\n" "#define WITH_VALGRIND 1" >>confdefs.h - -else $as_nop - as_fn_error $? "Valgrind support requested but headers not available" "$LINENO" 5 - -fi - - OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT" -fi - -# Check for DTrace support -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-dtrace" >&5 -printf %s "checking for --with-dtrace... " >&6; } - -# Check whether --with-dtrace was given. -if test ${with_dtrace+y} -then : - withval=$with_dtrace; -else $as_nop - with_dtrace=no -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_dtrace" >&5 -printf "%s\n" "$with_dtrace" >&6; } - - - - - -DTRACE= -DTRACE_HEADERS= -DTRACE_OBJS= - -if test "$with_dtrace" = "yes" -then - # Extract the first word of "dtrace", so it can be a program name with args. -set dummy dtrace; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DTRACE+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DTRACE in - [\\/]* | ?:[\\/]*) - ac_cv_path_DTRACE="$DTRACE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_DTRACE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_DTRACE" && ac_cv_path_DTRACE="not found" - ;; -esac -fi -DTRACE=$ac_cv_path_DTRACE -if test -n "$DTRACE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5 -printf "%s\n" "$DTRACE" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - if test "$DTRACE" = "not found"; then - as_fn_error $? "dtrace command not found on \$PATH" "$LINENO" 5 - fi - -printf "%s\n" "#define WITH_DTRACE 1" >>confdefs.h - - DTRACE_HEADERS="Include/pydtrace_probes.h" - - # On OS X, DTrace providers do not need to be explicitly compiled and - # linked into the binary. Correspondingly, dtrace(1) is missing the ELF - # generation flag '-G'. We check for presence of this flag, rather than - # hardcoding support by OS, in the interest of robustness. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether DTrace probes require linking" >&5 -printf %s "checking whether DTrace probes require linking... " >&6; } -if test ${ac_cv_dtrace_link+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_dtrace_link=no - echo 'BEGIN{}' > conftest.d - "$DTRACE" $DFLAGS -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \ - ac_cv_dtrace_link=yes - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dtrace_link" >&5 -printf "%s\n" "$ac_cv_dtrace_link" >&6; } - if test "$ac_cv_dtrace_link" = "yes"; then - DTRACE_OBJS="Python/pydtrace.o" - fi -fi - -# -I${DLINCLDIR} is added to the compile rule for importdl.o - -DLINCLDIR=. - -# the dlopen() function means we might want to use dynload_shlib.o. some -# platforms have dlopen(), but don't want to use it. -ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes -then : - printf "%s\n" "#define HAVE_DLOPEN 1" >>confdefs.h - -fi - - -# DYNLOADFILE specifies which dynload_*.o file we will use for dynamic -# loading of modules. - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking DYNLOADFILE" >&5 -printf %s "checking DYNLOADFILE... " >&6; } -if test -z "$DYNLOADFILE" -then - case $ac_sys_system/$ac_sys_release in - hp*|HP*) DYNLOADFILE="dynload_hpux.o";; - *) - # use dynload_shlib.c and dlopen() if we have it; otherwise stub - # out any dynamic loading - if test "$ac_cv_func_dlopen" = yes - then DYNLOADFILE="dynload_shlib.o" - else DYNLOADFILE="dynload_stub.o" - fi - ;; - esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DYNLOADFILE" >&5 -printf "%s\n" "$DYNLOADFILE" >&6; } -if test "$DYNLOADFILE" != "dynload_stub.o" -then - -printf "%s\n" "#define HAVE_DYNAMIC_LOADING 1" >>confdefs.h - -fi - -# MACHDEP_OBJS can be set to platform-specific object files needed by Python - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking MACHDEP_OBJS" >&5 -printf %s "checking MACHDEP_OBJS... " >&6; } -if test -z "$MACHDEP_OBJS" -then - MACHDEP_OBJS=$extra_machdep_objs -else - MACHDEP_OBJS="$MACHDEP_OBJS $extra_machdep_objs" -fi -if test -z "$MACHDEP_OBJS"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MACHDEP_OBJS" >&5 -printf "%s\n" "$MACHDEP_OBJS" >&6; } -fi - -# checks for library functions -ac_fn_c_check_func "$LINENO" "alarm" "ac_cv_func_alarm" -if test "x$ac_cv_func_alarm" = xyes -then : - printf "%s\n" "#define HAVE_ALARM 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "accept4" "ac_cv_func_accept4" -if test "x$ac_cv_func_accept4" = xyes -then : - printf "%s\n" "#define HAVE_ACCEPT4 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer" -if test "x$ac_cv_func_setitimer" = xyes -then : - printf "%s\n" "#define HAVE_SETITIMER 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getitimer" "ac_cv_func_getitimer" -if test "x$ac_cv_func_getitimer" = xyes -then : - printf "%s\n" "#define HAVE_GETITIMER 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" -if test "x$ac_cv_func_bind_textdomain_codeset" = xyes -then : - printf "%s\n" "#define HAVE_BIND_TEXTDOMAIN_CODESET 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "chown" "ac_cv_func_chown" -if test "x$ac_cv_func_chown" = xyes -then : - printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "clock" "ac_cv_func_clock" -if test "x$ac_cv_func_clock" = xyes -then : - printf "%s\n" "#define HAVE_CLOCK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr" -if test "x$ac_cv_func_confstr" = xyes -then : - printf "%s\n" "#define HAVE_CONFSTR 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "close_range" "ac_cv_func_close_range" -if test "x$ac_cv_func_close_range" = xyes -then : - printf "%s\n" "#define HAVE_CLOSE_RANGE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "copy_file_range" "ac_cv_func_copy_file_range" -if test "x$ac_cv_func_copy_file_range" = xyes -then : - printf "%s\n" "#define HAVE_COPY_FILE_RANGE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "ctermid" "ac_cv_func_ctermid" -if test "x$ac_cv_func_ctermid" = xyes -then : - printf "%s\n" "#define HAVE_CTERMID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" -if test "x$ac_cv_func_dup3" = xyes -then : - printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" -if test "x$ac_cv_func_execv" = xyes -then : - printf "%s\n" "#define HAVE_EXECV 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" -if test "x$ac_cv_func_explicit_bzero" = xyes -then : - printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "explicit_memset" "ac_cv_func_explicit_memset" -if test "x$ac_cv_func_explicit_memset" = xyes -then : - printf "%s\n" "#define HAVE_EXPLICIT_MEMSET 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" -if test "x$ac_cv_func_faccessat" = xyes -then : - printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" -if test "x$ac_cv_func_fchmod" = xyes -then : - printf "%s\n" "#define HAVE_FCHMOD 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fchmodat" "ac_cv_func_fchmodat" -if test "x$ac_cv_func_fchmodat" = xyes -then : - printf "%s\n" "#define HAVE_FCHMODAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" -if test "x$ac_cv_func_fchown" = xyes -then : - printf "%s\n" "#define HAVE_FCHOWN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fchownat" "ac_cv_func_fchownat" -if test "x$ac_cv_func_fchownat" = xyes -then : - printf "%s\n" "#define HAVE_FCHOWNAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fdwalk" "ac_cv_func_fdwalk" -if test "x$ac_cv_func_fdwalk" = xyes -then : - printf "%s\n" "#define HAVE_FDWALK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fexecve" "ac_cv_func_fexecve" -if test "x$ac_cv_func_fexecve" = xyes -then : - printf "%s\n" "#define HAVE_FEXECVE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fdopendir" "ac_cv_func_fdopendir" -if test "x$ac_cv_func_fdopendir" = xyes -then : - printf "%s\n" "#define HAVE_FDOPENDIR 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" -if test "x$ac_cv_func_fork" = xyes -then : - printf "%s\n" "#define HAVE_FORK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fpathconf" "ac_cv_func_fpathconf" -if test "x$ac_cv_func_fpathconf" = xyes -then : - printf "%s\n" "#define HAVE_FPATHCONF 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fstatat" "ac_cv_func_fstatat" -if test "x$ac_cv_func_fstatat" = xyes -then : - printf "%s\n" "#define HAVE_FSTATAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "ftime" "ac_cv_func_ftime" -if test "x$ac_cv_func_ftime" = xyes -then : - printf "%s\n" "#define HAVE_FTIME 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" -if test "x$ac_cv_func_ftruncate" = xyes -then : - printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "futimesat" "ac_cv_func_futimesat" -if test "x$ac_cv_func_futimesat" = xyes -then : - printf "%s\n" "#define HAVE_FUTIMESAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "futimens" "ac_cv_func_futimens" -if test "x$ac_cv_func_futimens" = xyes -then : - printf "%s\n" "#define HAVE_FUTIMENS 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "futimes" "ac_cv_func_futimes" -if test "x$ac_cv_func_futimes" = xyes -then : - printf "%s\n" "#define HAVE_FUTIMES 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "gai_strerror" "ac_cv_func_gai_strerror" -if test "x$ac_cv_func_gai_strerror" = xyes -then : - printf "%s\n" "#define HAVE_GAI_STRERROR 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" -if test "x$ac_cv_func_getentropy" = xyes -then : - printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r" -if test "x$ac_cv_func_getgrgid_r" = xyes -then : - printf "%s\n" "#define HAVE_GETGRGID_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getgrnam_r" "ac_cv_func_getgrnam_r" -if test "x$ac_cv_func_getgrnam_r" = xyes -then : - printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" -if test "x$ac_cv_func_getgrouplist" = xyes -then : - printf "%s\n" "#define HAVE_GETGROUPLIST 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" -if test "x$ac_cv_func_getgroups" = xyes -then : - printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getlogin" "ac_cv_func_getlogin" -if test "x$ac_cv_func_getlogin" = xyes -then : - printf "%s\n" "#define HAVE_GETLOGIN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getloadavg" "ac_cv_func_getloadavg" -if test "x$ac_cv_func_getloadavg" = xyes -then : - printf "%s\n" "#define HAVE_GETLOADAVG 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpeername" "ac_cv_func_getpeername" -if test "x$ac_cv_func_getpeername" = xyes -then : - printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpgid" "ac_cv_func_getpgid" -if test "x$ac_cv_func_getpgid" = xyes -then : - printf "%s\n" "#define HAVE_GETPGID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid" -if test "x$ac_cv_func_getpid" = xyes -then : - printf "%s\n" "#define HAVE_GETPID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpriority" "ac_cv_func_getpriority" -if test "x$ac_cv_func_getpriority" = xyes -then : - printf "%s\n" "#define HAVE_GETPRIORITY 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getresuid" "ac_cv_func_getresuid" -if test "x$ac_cv_func_getresuid" = xyes -then : - printf "%s\n" "#define HAVE_GETRESUID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getresgid" "ac_cv_func_getresgid" -if test "x$ac_cv_func_getresgid" = xyes -then : - printf "%s\n" "#define HAVE_GETRESGID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpwent" "ac_cv_func_getpwent" -if test "x$ac_cv_func_getpwent" = xyes -then : - printf "%s\n" "#define HAVE_GETPWENT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r" -if test "x$ac_cv_func_getpwnam_r" = xyes -then : - printf "%s\n" "#define HAVE_GETPWNAM_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r" -if test "x$ac_cv_func_getpwuid_r" = xyes -then : - printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getspnam" "ac_cv_func_getspnam" -if test "x$ac_cv_func_getspnam" = xyes -then : - printf "%s\n" "#define HAVE_GETSPNAM 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getspent" "ac_cv_func_getspent" -if test "x$ac_cv_func_getspent" = xyes -then : - printf "%s\n" "#define HAVE_GETSPENT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getsid" "ac_cv_func_getsid" -if test "x$ac_cv_func_getsid" = xyes -then : - printf "%s\n" "#define HAVE_GETSID 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "getwd" "ac_cv_func_getwd" -if test "x$ac_cv_func_getwd" = xyes -then : - printf "%s\n" "#define HAVE_GETWD 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "if_nameindex" "ac_cv_func_if_nameindex" -if test "x$ac_cv_func_if_nameindex" = xyes -then : - printf "%s\n" "#define HAVE_IF_NAMEINDEX 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups" -if test "x$ac_cv_func_initgroups" = xyes -then : - printf "%s\n" "#define HAVE_INITGROUPS 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "kill" "ac_cv_func_kill" -if test "x$ac_cv_func_kill" = xyes -then : - printf "%s\n" "#define HAVE_KILL 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg" -if test "x$ac_cv_func_killpg" = xyes -then : - printf "%s\n" "#define HAVE_KILLPG 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lchown" "ac_cv_func_lchown" -if test "x$ac_cv_func_lchown" = xyes -then : - printf "%s\n" "#define HAVE_LCHOWN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lockf" "ac_cv_func_lockf" -if test "x$ac_cv_func_lockf" = xyes -then : - printf "%s\n" "#define HAVE_LOCKF 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "linkat" "ac_cv_func_linkat" -if test "x$ac_cv_func_linkat" = xyes -then : - printf "%s\n" "#define HAVE_LINKAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" -if test "x$ac_cv_func_lstat" = xyes -then : - printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lutimes" "ac_cv_func_lutimes" -if test "x$ac_cv_func_lutimes" = xyes -then : - printf "%s\n" "#define HAVE_LUTIMES 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes -then : - printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr" -if test "x$ac_cv_func_memrchr" = xyes -then : - printf "%s\n" "#define HAVE_MEMRCHR 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc" -if test "x$ac_cv_func_mbrtowc" = xyes -then : - printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkdirat" "ac_cv_func_mkdirat" -if test "x$ac_cv_func_mkdirat" = xyes -then : - printf "%s\n" "#define HAVE_MKDIRAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo" -if test "x$ac_cv_func_mkfifo" = xyes -then : - printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "madvise" "ac_cv_func_madvise" -if test "x$ac_cv_func_madvise" = xyes -then : - printf "%s\n" "#define HAVE_MADVISE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkfifoat" "ac_cv_func_mkfifoat" -if test "x$ac_cv_func_mkfifoat" = xyes -then : - printf "%s\n" "#define HAVE_MKFIFOAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mknod" "ac_cv_func_mknod" -if test "x$ac_cv_func_mknod" = xyes -then : - printf "%s\n" "#define HAVE_MKNOD 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mknodat" "ac_cv_func_mknodat" -if test "x$ac_cv_func_mknodat" = xyes -then : - printf "%s\n" "#define HAVE_MKNODAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" -if test "x$ac_cv_func_mktime" = xyes -then : - printf "%s\n" "#define HAVE_MKTIME 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mremap" "ac_cv_func_mremap" -if test "x$ac_cv_func_mremap" = xyes -then : - printf "%s\n" "#define HAVE_MREMAP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "nice" "ac_cv_func_nice" -if test "x$ac_cv_func_nice" = xyes -then : - printf "%s\n" "#define HAVE_NICE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat" -if test "x$ac_cv_func_openat" = xyes -then : - printf "%s\n" "#define HAVE_OPENAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pathconf" "ac_cv_func_pathconf" -if test "x$ac_cv_func_pathconf" = xyes -then : - printf "%s\n" "#define HAVE_PATHCONF 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pause" "ac_cv_func_pause" -if test "x$ac_cv_func_pause" = xyes -then : - printf "%s\n" "#define HAVE_PAUSE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" -if test "x$ac_cv_func_pipe2" = xyes -then : - printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" -if test "x$ac_cv_func_plock" = xyes -then : - printf "%s\n" "#define HAVE_PLOCK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" -if test "x$ac_cv_func_poll" = xyes -then : - printf "%s\n" "#define HAVE_POLL 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_fallocate" "ac_cv_func_posix_fallocate" -if test "x$ac_cv_func_posix_fallocate" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_FALLOCATE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise" -if test "x$ac_cv_func_posix_fadvise" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_FADVISE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" -if test "x$ac_cv_func_posix_spawn" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_SPAWN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" -if test "x$ac_cv_func_posix_spawnp" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_SPAWNP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" -if test "x$ac_cv_func_pread" = xyes -then : - printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "preadv" "ac_cv_func_preadv" -if test "x$ac_cv_func_preadv" = xyes -then : - printf "%s\n" "#define HAVE_PREADV 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "preadv2" "ac_cv_func_preadv2" -if test "x$ac_cv_func_preadv2" = xyes -then : - printf "%s\n" "#define HAVE_PREADV2 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pthread_condattr_setclock" "ac_cv_func_pthread_condattr_setclock" -if test "x$ac_cv_func_pthread_condattr_setclock" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pthread_init" "ac_cv_func_pthread_init" -if test "x$ac_cv_func_pthread_init" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_INIT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" -if test "x$ac_cv_func_pthread_kill" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_KILL 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" -if test "x$ac_cv_func_pwrite" = xyes -then : - printf "%s\n" "#define HAVE_PWRITE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pwritev" "ac_cv_func_pwritev" -if test "x$ac_cv_func_pwritev" = xyes -then : - printf "%s\n" "#define HAVE_PWRITEV 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pwritev2" "ac_cv_func_pwritev2" -if test "x$ac_cv_func_pwritev2" = xyes -then : - printf "%s\n" "#define HAVE_PWRITEV2 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" -if test "x$ac_cv_func_readlink" = xyes -then : - printf "%s\n" "#define HAVE_READLINK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "readlinkat" "ac_cv_func_readlinkat" -if test "x$ac_cv_func_readlinkat" = xyes -then : - printf "%s\n" "#define HAVE_READLINKAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "readv" "ac_cv_func_readv" -if test "x$ac_cv_func_readv" = xyes -then : - printf "%s\n" "#define HAVE_READV 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" -if test "x$ac_cv_func_realpath" = xyes -then : - printf "%s\n" "#define HAVE_REALPATH 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "renameat" "ac_cv_func_renameat" -if test "x$ac_cv_func_renameat" = xyes -then : - printf "%s\n" "#define HAVE_RENAMEAT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "sem_open" "ac_cv_func_sem_open" -if test "x$ac_cv_func_sem_open" = xyes -then : - printf "%s\n" "#define HAVE_SEM_OPEN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "sem_timedwait" "ac_cv_func_sem_timedwait" -if test "x$ac_cv_func_sem_timedwait" = xyes -then : - printf "%s\n" "#define HAVE_SEM_TIMEDWAIT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "sem_getvalue" "ac_cv_func_sem_getvalue" -if test "x$ac_cv_func_sem_getvalue" = xyes -then : - printf "%s\n" "#define HAVE_SEM_GETVALUE 1" >>confdefs.h +if ac_fn_c_try_compile "$LINENO"; then : -fi -ac_fn_c_check_func "$LINENO" "sem_unlink" "ac_cv_func_sem_unlink" -if test "x$ac_cv_func_sem_unlink" = xyes -then : - printf "%s\n" "#define HAVE_SEM_UNLINK 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sendfile" "ac_cv_func_sendfile" -if test "x$ac_cv_func_sendfile" = xyes -then : - printf "%s\n" "#define HAVE_SENDFILE 1" >>confdefs.h +$as_echo "#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "setegid" "ac_cv_func_setegid" -if test "x$ac_cv_func_setegid" = xyes -then : - printf "%s\n" "#define HAVE_SETEGID 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -fi -ac_fn_c_check_func "$LINENO" "seteuid" "ac_cv_func_seteuid" -if test "x$ac_cv_func_seteuid" = xyes -then : - printf "%s\n" "#define HAVE_SETEUID 1" >>confdefs.h +else -fi -ac_fn_c_check_func "$LINENO" "setgid" "ac_cv_func_setgid" -if test "x$ac_cv_func_setgid" = xyes -then : - printf "%s\n" "#define HAVE_SETGID 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -ac_fn_c_check_func "$LINENO" "sethostname" "ac_cv_func_sethostname" -if test "x$ac_cv_func_sethostname" = xyes -then : - printf "%s\n" "#define HAVE_SETHOSTNAME 1" >>confdefs.h +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" -if test "x$ac_cv_func_setlocale" = xyes -then : - printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h +# Check for --with-doc-strings +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-doc-strings" >&5 +$as_echo_n "checking for --with-doc-strings... " >&6; } +# Check whether --with-doc-strings was given. +if test "${with_doc_strings+set}" = set; then : + withval=$with_doc_strings; fi -ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid" -if test "x$ac_cv_func_setregid" = xyes -then : - printf "%s\n" "#define HAVE_SETREGID 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid" -if test "x$ac_cv_func_setreuid" = xyes -then : - printf "%s\n" "#define HAVE_SETREUID 1" >>confdefs.h +if test -z "$with_doc_strings" +then with_doc_strings="yes" fi -ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid" -if test "x$ac_cv_func_setresuid" = xyes -then : - printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h +if test "$with_doc_strings" != "no" +then -fi -ac_fn_c_check_func "$LINENO" "setresgid" "ac_cv_func_setresgid" -if test "x$ac_cv_func_setresgid" = xyes -then : - printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h +$as_echo "#define WITH_DOC_STRINGS 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" -if test "x$ac_cv_func_setsid" = xyes -then : - printf "%s\n" "#define HAVE_SETSID 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_doc_strings" >&5 +$as_echo "$with_doc_strings" >&6; } -fi -ac_fn_c_check_func "$LINENO" "setpgid" "ac_cv_func_setpgid" -if test "x$ac_cv_func_setpgid" = xyes -then : - printf "%s\n" "#define HAVE_SETPGID 1" >>confdefs.h +# Check for Python-specific malloc support +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pymalloc" >&5 +$as_echo_n "checking for --with-pymalloc... " >&6; } +# Check whether --with-pymalloc was given. +if test "${with_pymalloc+set}" = set; then : + withval=$with_pymalloc; fi -ac_fn_c_check_func "$LINENO" "setpgrp" "ac_cv_func_setpgrp" -if test "x$ac_cv_func_setpgrp" = xyes -then : - printf "%s\n" "#define HAVE_SETPGRP 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "setpriority" "ac_cv_func_setpriority" -if test "x$ac_cv_func_setpriority" = xyes -then : - printf "%s\n" "#define HAVE_SETPRIORITY 1" >>confdefs.h +if test -z "$with_pymalloc" +then + with_pymalloc="yes" fi -ac_fn_c_check_func "$LINENO" "setuid" "ac_cv_func_setuid" -if test "x$ac_cv_func_setuid" = xyes -then : - printf "%s\n" "#define HAVE_SETUID 1" >>confdefs.h +if test "$with_pymalloc" != "no" +then -fi -ac_fn_c_check_func "$LINENO" "setvbuf" "ac_cv_func_setvbuf" -if test "x$ac_cv_func_setvbuf" = xyes -then : - printf "%s\n" "#define HAVE_SETVBUF 1" >>confdefs.h +$as_echo "#define WITH_PYMALLOC 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "sched_get_priority_max" "ac_cv_func_sched_get_priority_max" -if test "x$ac_cv_func_sched_get_priority_max" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_GET_PRIORITY_MAX 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_pymalloc" >&5 +$as_echo "$with_pymalloc" >&6; } -fi -ac_fn_c_check_func "$LINENO" "sched_setaffinity" "ac_cv_func_sched_setaffinity" -if test "x$ac_cv_func_sched_setaffinity" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_SETAFFINITY 1" >>confdefs.h +# Check for --with-c-locale-coercion +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-c-locale-coercion" >&5 +$as_echo_n "checking for --with-c-locale-coercion... " >&6; } +# Check whether --with-c-locale-coercion was given. +if test "${with_c_locale_coercion+set}" = set; then : + withval=$with_c_locale_coercion; fi -ac_fn_c_check_func "$LINENO" "sched_setscheduler" "ac_cv_func_sched_setscheduler" -if test "x$ac_cv_func_sched_setscheduler" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_SETSCHEDULER 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sched_setparam" "ac_cv_func_sched_setparam" -if test "x$ac_cv_func_sched_setparam" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_SETPARAM 1" >>confdefs.h +if test -z "$with_c_locale_coercion" +then + with_c_locale_coercion="yes" fi -ac_fn_c_check_func "$LINENO" "sched_rr_get_interval" "ac_cv_func_sched_rr_get_interval" -if test "x$ac_cv_func_sched_rr_get_interval" = xyes -then : - printf "%s\n" "#define HAVE_SCHED_RR_GET_INTERVAL 1" >>confdefs.h +if test "$with_c_locale_coercion" != "no" +then -fi -ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = xyes -then : - printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h +$as_echo "#define PY_COERCE_C_LOCALE 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "sigaltstack" "ac_cv_func_sigaltstack" -if test "x$ac_cv_func_sigaltstack" = xyes -then : - printf "%s\n" "#define HAVE_SIGALTSTACK 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_coercion" >&5 +$as_echo "$with_c_locale_coercion" >&6; } -fi -ac_fn_c_check_func "$LINENO" "sigfillset" "ac_cv_func_sigfillset" -if test "x$ac_cv_func_sigfillset" = xyes -then : - printf "%s\n" "#define HAVE_SIGFILLSET 1" >>confdefs.h +# Check for Valgrind support +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-valgrind" >&5 +$as_echo_n "checking for --with-valgrind... " >&6; } +# Check whether --with-valgrind was given. +if test "${with_valgrind+set}" = set; then : + withval=$with_valgrind; +else + with_valgrind=no fi -ac_fn_c_check_func "$LINENO" "siginterrupt" "ac_cv_func_siginterrupt" -if test "x$ac_cv_func_siginterrupt" = xyes -then : - printf "%s\n" "#define HAVE_SIGINTERRUPT 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sigpending" "ac_cv_func_sigpending" -if test "x$ac_cv_func_sigpending" = xyes -then : - printf "%s\n" "#define HAVE_SIGPENDING 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_valgrind" >&5 +$as_echo "$with_valgrind" >&6; } +if test "$with_valgrind" != no; then + ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default" +if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then : -fi -ac_fn_c_check_func "$LINENO" "sigrelse" "ac_cv_func_sigrelse" -if test "x$ac_cv_func_sigrelse" = xyes -then : - printf "%s\n" "#define HAVE_SIGRELSE 1" >>confdefs.h +$as_echo "#define WITH_VALGRIND 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sigtimedwait" "ac_cv_func_sigtimedwait" -if test "x$ac_cv_func_sigtimedwait" = xyes -then : - printf "%s\n" "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h +else + as_fn_error $? "Valgrind support requested but headers not available" "$LINENO" 5 fi -ac_fn_c_check_func "$LINENO" "sigwait" "ac_cv_func_sigwait" -if test "x$ac_cv_func_sigwait" = xyes -then : - printf "%s\n" "#define HAVE_SIGWAIT 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sigwaitinfo" "ac_cv_func_sigwaitinfo" -if test "x$ac_cv_func_sigwaitinfo" = xyes -then : - printf "%s\n" "#define HAVE_SIGWAITINFO 1" >>confdefs.h + OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT" fi -ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" -if test "x$ac_cv_func_snprintf" = xyes -then : - printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "splice" "ac_cv_func_splice" -if test "x$ac_cv_func_splice" = xyes -then : - printf "%s\n" "#define HAVE_SPLICE 1" >>confdefs.h +# Check for DTrace support +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-dtrace" >&5 +$as_echo_n "checking for --with-dtrace... " >&6; } +# Check whether --with-dtrace was given. +if test "${with_dtrace+set}" = set; then : + withval=$with_dtrace; +else + with_dtrace=no fi -ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = xyes -then : - printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" -if test "x$ac_cv_func_strlcpy" = xyes -then : - printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dtrace" >&5 +$as_echo "$with_dtrace" >&6; } -fi -ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" -if test "x$ac_cv_func_strsignal" = xyes -then : - printf "%s\n" "#define HAVE_STRSIGNAL 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "symlinkat" "ac_cv_func_symlinkat" -if test "x$ac_cv_func_symlinkat" = xyes -then : - printf "%s\n" "#define HAVE_SYMLINKAT 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sync" "ac_cv_func_sync" -if test "x$ac_cv_func_sync" = xyes -then : - printf "%s\n" "#define HAVE_SYNC 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" -if test "x$ac_cv_func_sysconf" = xyes -then : - printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "tcgetpgrp" "ac_cv_func_tcgetpgrp" -if test "x$ac_cv_func_tcgetpgrp" = xyes -then : - printf "%s\n" "#define HAVE_TCGETPGRP 1" >>confdefs.h +DTRACE= +DTRACE_HEADERS= +DTRACE_OBJS= -fi -ac_fn_c_check_func "$LINENO" "tcsetpgrp" "ac_cv_func_tcsetpgrp" -if test "x$ac_cv_func_tcsetpgrp" = xyes -then : - printf "%s\n" "#define HAVE_TCSETPGRP 1" >>confdefs.h +if test "$with_dtrace" = "yes" +then + # Extract the first word of "dtrace", so it can be a program name with args. +set dummy dtrace; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DTRACE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DTRACE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DTRACE="$DTRACE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DTRACE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + test -z "$ac_cv_path_DTRACE" && ac_cv_path_DTRACE="not found" + ;; +esac fi -ac_fn_c_check_func "$LINENO" "tempnam" "ac_cv_func_tempnam" -if test "x$ac_cv_func_tempnam" = xyes -then : - printf "%s\n" "#define HAVE_TEMPNAM 1" >>confdefs.h - +DTRACE=$ac_cv_path_DTRACE +if test -n "$DTRACE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5 +$as_echo "$DTRACE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" -if test "x$ac_cv_func_timegm" = xyes -then : - printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = xyes -then : - printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "tmpfile" "ac_cv_func_tmpfile" -if test "x$ac_cv_func_tmpfile" = xyes -then : - printf "%s\n" "#define HAVE_TMPFILE 1" >>confdefs.h + if test "$DTRACE" = "not found"; then + as_fn_error $? "dtrace command not found on \$PATH" "$LINENO" 5 + fi -fi -ac_fn_c_check_func "$LINENO" "tmpnam" "ac_cv_func_tmpnam" -if test "x$ac_cv_func_tmpnam" = xyes -then : - printf "%s\n" "#define HAVE_TMPNAM 1" >>confdefs.h +$as_echo "#define WITH_DTRACE 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "tmpnam_r" "ac_cv_func_tmpnam_r" -if test "x$ac_cv_func_tmpnam_r" = xyes -then : - printf "%s\n" "#define HAVE_TMPNAM_R 1" >>confdefs.h + DTRACE_HEADERS="Include/pydtrace_probes.h" -fi -ac_fn_c_check_func "$LINENO" "truncate" "ac_cv_func_truncate" -if test "x$ac_cv_func_truncate" = xyes -then : - printf "%s\n" "#define HAVE_TRUNCATE 1" >>confdefs.h + # On OS X, DTrace providers do not need to be explicitly compiled and + # linked into the binary. Correspondingly, dtrace(1) is missing the ELF + # generation flag '-G'. We check for presence of this flag, rather than + # hardcoding support by OS, in the interest of robustness. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether DTrace probes require linking" >&5 +$as_echo_n "checking whether DTrace probes require linking... " >&6; } +if ${ac_cv_dtrace_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_dtrace_link=no + echo 'BEGIN{}' > conftest.d + "$DTRACE" $DFLAGS -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \ + ac_cv_dtrace_link=yes fi -ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" -if test "x$ac_cv_func_uname" = xyes -then : - printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dtrace_link" >&5 +$as_echo "$ac_cv_dtrace_link" >&6; } + if test "$ac_cv_dtrace_link" = "yes"; then + DTRACE_OBJS="Python/pydtrace.o" + fi fi -ac_fn_c_check_func "$LINENO" "unlinkat" "ac_cv_func_unlinkat" -if test "x$ac_cv_func_unlinkat" = xyes -then : - printf "%s\n" "#define HAVE_UNLINKAT 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "utimensat" "ac_cv_func_utimensat" -if test "x$ac_cv_func_utimensat" = xyes -then : - printf "%s\n" "#define HAVE_UTIMENSAT 1" >>confdefs.h +# -I${DLINCLDIR} is added to the compile rule for importdl.o -fi -ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" -if test "x$ac_cv_func_utimes" = xyes -then : - printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h +DLINCLDIR=. -fi -ac_fn_c_check_func "$LINENO" "vfork" "ac_cv_func_vfork" -if test "x$ac_cv_func_vfork" = xyes -then : - printf "%s\n" "#define HAVE_VFORK 1" >>confdefs.h +# the dlopen() function means we might want to use dynload_shlib.o. some +# platforms have dlopen(), but don't want to use it. +for ac_func in dlopen +do : + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLOPEN 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid" -if test "x$ac_cv_func_waitid" = xyes -then : - printf "%s\n" "#define HAVE_WAITID 1" >>confdefs.h +done -fi -ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" -if test "x$ac_cv_func_waitpid" = xyes -then : - printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3" -if test "x$ac_cv_func_wait3" = xyes -then : - printf "%s\n" "#define HAVE_WAIT3 1" >>confdefs.h +# DYNLOADFILE specifies which dynload_*.o file we will use for dynamic +# loading of modules. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking DYNLOADFILE" >&5 +$as_echo_n "checking DYNLOADFILE... " >&6; } +if test -z "$DYNLOADFILE" +then + case $ac_sys_system/$ac_sys_release in + hp*|HP*) DYNLOADFILE="dynload_hpux.o";; + *) + # use dynload_shlib.c and dlopen() if we have it; otherwise stub + # out any dynamic loading + if test "$ac_cv_func_dlopen" = yes + then DYNLOADFILE="dynload_shlib.o" + else DYNLOADFILE="dynload_stub.o" + fi + ;; + esac fi -ac_fn_c_check_func "$LINENO" "wait4" "ac_cv_func_wait4" -if test "x$ac_cv_func_wait4" = xyes -then : - printf "%s\n" "#define HAVE_WAIT4 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DYNLOADFILE" >&5 +$as_echo "$DYNLOADFILE" >&6; } +if test "$DYNLOADFILE" != "dynload_stub.o" +then -fi -ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" -if test "x$ac_cv_func_wcscoll" = xyes -then : - printf "%s\n" "#define HAVE_WCSCOLL 1" >>confdefs.h +$as_echo "#define HAVE_DYNAMIC_LOADING 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "wcsftime" "ac_cv_func_wcsftime" -if test "x$ac_cv_func_wcsftime" = xyes -then : - printf "%s\n" "#define HAVE_WCSFTIME 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "wcsxfrm" "ac_cv_func_wcsxfrm" -if test "x$ac_cv_func_wcsxfrm" = xyes -then : - printf "%s\n" "#define HAVE_WCSXFRM 1" >>confdefs.h +# MACHDEP_OBJS can be set to platform-specific object files needed by Python -fi -ac_fn_c_check_func "$LINENO" "wmemcmp" "ac_cv_func_wmemcmp" -if test "x$ac_cv_func_wmemcmp" = xyes -then : - printf "%s\n" "#define HAVE_WMEMCMP 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MACHDEP_OBJS" >&5 +$as_echo_n "checking MACHDEP_OBJS... " >&6; } +if test -z "$MACHDEP_OBJS" +then + MACHDEP_OBJS=$extra_machdep_objs +else + MACHDEP_OBJS="$MACHDEP_OBJS $extra_machdep_objs" fi -ac_fn_c_check_func "$LINENO" "writev" "ac_cv_func_writev" -if test "x$ac_cv_func_writev" = xyes -then : - printf "%s\n" "#define HAVE_WRITEV 1" >>confdefs.h - +if test -z "$MACHDEP_OBJS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACHDEP_OBJS" >&5 +$as_echo "$MACHDEP_OBJS" >&6; } fi -ac_fn_c_check_func "$LINENO" "_getpty" "ac_cv_func__getpty" -if test "x$ac_cv_func__getpty" = xyes -then : - printf "%s\n" "#define HAVE__GETPTY 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "rtpSpawn" "ac_cv_func_rtpSpawn" -if test "x$ac_cv_func_rtpSpawn" = xyes -then : - printf "%s\n" "#define HAVE_RTPSPAWN 1" >>confdefs.h +# checks for library functions +for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ + clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \ + explicit_memset faccessat fchmod fchmodat fchown fchownat \ + fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \ + futimens futimes gai_strerror getentropy \ + getgrgid_r getgrnam_r \ + getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \ + getpriority getresuid getresgid getpwent getpwnam_r getpwuid_r getspnam getspent getsid getwd \ + if_nameindex \ + initgroups kill killpg lchown lockf linkat lstat lutimes mmap \ + memrchr mbrtowc mkdirat mkfifo \ + madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \ + posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \ + pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \ + readlink readlinkat readv realpath renameat \ + sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \ + setgid sethostname \ + setlocale setregid setreuid setresuid setresgid setsid setpgid setpgrp setpriority setuid setvbuf \ + sched_get_priority_max sched_setaffinity sched_setscheduler sched_setparam \ + sched_rr_get_interval \ + sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \ + sigtimedwait sigwait sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \ + sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ + truncate uname unlinkat utimensat utimes vfork waitid waitpid wait3 wait4 \ + wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi +done # Force lchmod off for Linux. Linux disallows changing the mode of symbolic # links. Some libc implementations have a stub lchmod implementation that always # returns an error. if test "$MACHDEP" != linux; then + for ac_func in lchmod +do : ac_fn_c_check_func "$LINENO" "lchmod" "ac_cv_func_lchmod" -if test "x$ac_cv_func_lchmod" = xyes -then : - printf "%s\n" "#define HAVE_LCHMOD 1" >>confdefs.h - -fi - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 -printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } -if test ${ac_cv_c_undeclared_builtin_options+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS - ac_cv_c_undeclared_builtin_options='cannot detect' - for ac_arg in '' -fno-builtin; do - CFLAGS="$ac_save_CFLAGS $ac_arg" - # This test program should *not* compile successfully. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -(void) strchr; - ; - return 0; -} +if test "x$ac_cv_func_lchmod" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LCHMOD 1 _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - # This test program should compile successfully. - # No library function is consistently available on - # freestanding implementations, so test against a dummy - # declaration. Include always-available headers on the - # off chance that they somehow elicit warnings. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -extern void ac_decl (int, char *); - -int -main (void) -{ -(void) ac_decl (0, (char *) 0); - (void) ac_decl; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - if test x"$ac_arg" = x -then : - ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg -fi - break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +done + fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - done - CFLAGS=$ac_save_CFLAGS - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 -printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } - case $ac_cv_c_undeclared_builtin_options in #( - 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( - 'none needed') : - ac_c_undeclared_builtin_options='' ;; #( - *) : - ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; -esac -ac_fn_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include +ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include #include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_dirfd" = xyes -then : +" +if test "x$ac_cv_have_decl_dirfd" = xyes; then : -printf "%s\n" "#define HAVE_DIRFD 1" >>confdefs.h +$as_echo "#define HAVE_DIRFD 1" >>confdefs.h fi + # For some functions, having a definition is not sufficient, since # we want to take their address. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chroot" >&5 -printf %s "checking for chroot... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chroot" >&5 +$as_echo_n "checking for chroot... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=chroot ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CHROOT 1" >>confdefs.h +$as_echo "#define HAVE_CHROOT 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for link" >&5 -printf %s "checking for link... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for link" >&5 +$as_echo_n "checking for link... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=link ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_LINK 1" >>confdefs.h +$as_echo "#define HAVE_LINK 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for symlink" >&5 -printf %s "checking for symlink... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for symlink" >&5 +$as_echo_n "checking for symlink... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=symlink ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_SYMLINK 1" >>confdefs.h +$as_echo "#define HAVE_SYMLINK 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fchdir" >&5 -printf %s "checking for fchdir... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fchdir" >&5 +$as_echo_n "checking for fchdir... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=fchdir ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_FCHDIR 1" >>confdefs.h +$as_echo "#define HAVE_FCHDIR 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fsync" >&5 -printf %s "checking for fsync... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fsync" >&5 +$as_echo_n "checking for fsync... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=fsync ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_FSYNC 1" >>confdefs.h +$as_echo "#define HAVE_FSYNC 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fdatasync" >&5 -printf %s "checking for fdatasync... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fdatasync" >&5 +$as_echo_n "checking for fdatasync... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=fdatasync ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_FDATASYNC 1" >>confdefs.h +$as_echo "#define HAVE_FDATASYNC 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoll" >&5 -printf %s "checking for epoll... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epoll" >&5 +$as_echo_n "checking for epoll... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=epoll_create ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_EPOLL 1" >>confdefs.h +$as_echo "#define HAVE_EPOLL 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoll_create1" >&5 -printf %s "checking for epoll_create1... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epoll_create1" >&5 +$as_echo_n "checking for epoll_create1... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=epoll_create1 ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_EPOLL_CREATE1 1" >>confdefs.h +$as_echo "#define HAVE_EPOLL_CREATE1 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kqueue" >&5 -printf %s "checking for kqueue... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kqueue" >&5 +$as_echo_n "checking for kqueue... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14215,28 +12104,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { int x=kqueue() ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_KQUEUE 1" >>confdefs.h +$as_echo "#define HAVE_KQUEUE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for prlimit" >&5 -printf %s "checking for prlimit... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prlimit" >&5 +$as_echo_n "checking for prlimit... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14244,55 +12132,53 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { void *x=prlimit ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_PRLIMIT 1" >>confdefs.h +$as_echo "#define HAVE_PRLIMIT 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5 -printf %s "checking for _dyld_shared_cache_contains_path... " >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5 +$as_echo_n "checking for _dyld_shared_cache_contains_path... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=_dyld_shared_cache_contains_path ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h +$as_echo "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5 -printf %s "checking for memfd_create... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5 +$as_echo_n "checking for memfd_create... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14304,29 +12190,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { void *x=memfd_create ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_MEMFD_CREATE 1" >>confdefs.h +$as_echo "#define HAVE_MEMFD_CREATE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for eventfd" >&5 -printf %s "checking for eventfd... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for eventfd" >&5 +$as_echo_n "checking for eventfd... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14335,26 +12220,25 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { int x = eventfd(0, EFD_CLOEXEC) ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_EVENTFD 1" >>confdefs.h +$as_echo "#define HAVE_EVENTFD 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # On some systems (eg. FreeBSD 5), we would find a definition of the # functions ctermid_r, setgroups in the library, but no prototype @@ -14362,46 +12246,44 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # address to avoid compiler warnings and potential miscompilations # because of the missing prototypes. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ctermid_r" >&5 -printf %s "checking for ctermid_r... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ctermid_r" >&5 +$as_echo_n "checking for ctermid_r... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void* p = ctermid_r ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CTERMID_R 1" >>confdefs.h +$as_echo "#define HAVE_CTERMID_R 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flock declaration" >&5 -printf %s "checking for flock declaration... " >&6; } -if test ${ac_cv_flock_decl+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flock declaration" >&5 +$as_echo_n "checking for flock declaration... " >&6; } +if ${ac_cv_flock_decl+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void* p = flock @@ -14409,34 +12291,32 @@ void* p = flock return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_flock_decl=yes -else $as_nop +else ac_cv_flock_decl=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_flock_decl" >&5 -printf "%s\n" "$ac_cv_flock_decl" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_flock_decl" >&5 +$as_echo "$ac_cv_flock_decl" >&6; } if test "x${ac_cv_flock_decl}" = xyes; then - for ac_func in flock do : ac_fn_c_check_func "$LINENO" "flock" "ac_cv_func_flock" -if test "x$ac_cv_func_flock" = xyes -then : - printf "%s\n" "#define HAVE_FLOCK 1" >>confdefs.h - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flock in -lbsd" >&5 -printf %s "checking for flock in -lbsd... " >&6; } -if test ${ac_cv_lib_bsd_flock+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_flock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FLOCK 1 +_ACEOF + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flock in -lbsd" >&5 +$as_echo_n "checking for flock in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_flock+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14445,111 +12325,109 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char flock (); int -main (void) +main () { return flock (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_flock=yes -else $as_nop +else ac_cv_lib_bsd_flock=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_flock" >&5 -printf "%s\n" "$ac_cv_lib_bsd_flock" >&6; } -if test "x$ac_cv_lib_bsd_flock" = xyes -then : - printf "%s\n" "#define HAVE_FLOCK 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_flock" >&5 +$as_echo "$ac_cv_lib_bsd_flock" >&6; } +if test "x$ac_cv_lib_bsd_flock" = xyes; then : + $as_echo "#define HAVE_FLOCK 1" >>confdefs.h -printf "%s\n" "#define FLOCK_NEEDS_LIBBSD 1" >>confdefs.h +$as_echo "#define FLOCK_NEEDS_LIBBSD 1" >>confdefs.h fi fi - done + fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 -printf %s "checking for getpagesize... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 +$as_echo_n "checking for getpagesize... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void* p = getpagesize ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h +$as_echo "#define HAVE_GETPAGESIZE 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken unsetenv" >&5 -printf %s "checking for broken unsetenv... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken unsetenv" >&5 +$as_echo_n "checking for broken unsetenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int res = unsetenv("DUMMY") ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -else $as_nop +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else -printf "%s\n" "#define HAVE_BROKEN_UNSETENV 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_UNSETENV 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext for ac_prog in true do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_TRUE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TRUE+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$TRUE"; then ac_cv_prog_TRUE="$TRUE" # Let the user override the test. else @@ -14557,15 +12435,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_TRUE="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14576,11 +12450,11 @@ fi fi TRUE=$ac_cv_prog_TRUE if test -n "$TRUE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TRUE" >&5 -printf "%s\n" "$TRUE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TRUE" >&5 +$as_echo "$TRUE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -14589,12 +12463,11 @@ done test -n "$TRUE" || TRUE="/bin/true" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lc" >&5 -printf %s "checking for inet_aton in -lc... " >&6; } -if test ${ac_cv_lib_c_inet_aton+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lc" >&5 +$as_echo_n "checking for inet_aton in -lc... " >&6; } +if ${ac_cv_lib_c_inet_aton+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14603,37 +12476,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char inet_aton (); int -main (void) +main () { return inet_aton (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_inet_aton=yes -else $as_nop +else ac_cv_lib_c_inet_aton=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_inet_aton" >&5 -printf "%s\n" "$ac_cv_lib_c_inet_aton" >&6; } -if test "x$ac_cv_lib_c_inet_aton" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_inet_aton" >&5 +$as_echo "$ac_cv_lib_c_inet_aton" >&6; } +if test "x$ac_cv_lib_c_inet_aton" = xyes; then : $ac_cv_prog_TRUE -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lresolv" >&5 -printf %s "checking for inet_aton in -lresolv... " >&6; } -if test ${ac_cv_lib_resolv_inet_aton+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lresolv" >&5 +$as_echo_n "checking for inet_aton in -lresolv... " >&6; } +if ${ac_cv_lib_resolv_inet_aton+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14642,30 +12515,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char inet_aton (); int -main (void) +main () { return inet_aton (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_resolv_inet_aton=yes -else $as_nop +else ac_cv_lib_resolv_inet_aton=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_inet_aton" >&5 -printf "%s\n" "$ac_cv_lib_resolv_inet_aton" >&6; } -if test "x$ac_cv_lib_resolv_inet_aton" = xyes -then : - printf "%s\n" "#define HAVE_LIBRESOLV 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_inet_aton" >&5 +$as_echo "$ac_cv_lib_resolv_inet_aton" >&6; } +if test "x$ac_cv_lib_resolv_inet_aton" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBRESOLV 1 +_ACEOF LIBS="-lresolv $LIBS" @@ -14677,16 +12553,14 @@ fi # On Tru64, chflags seems to be present, but calling it will # exit Python -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chflags" >&5 -printf %s "checking for chflags... " >&6; } -if test ${ac_cv_have_chflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chflags" >&5 +$as_echo_n "checking for chflags... " >&6; } +if ${ac_cv_have_chflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_have_chflags=cross -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14700,10 +12574,9 @@ int main(int argc, char*argv[]) } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_have_chflags=yes -else $as_nop +else ac_cv_have_chflags=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14712,34 +12585,31 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_chflags" >&5 -printf "%s\n" "$ac_cv_have_chflags" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_chflags" >&5 +$as_echo "$ac_cv_have_chflags" >&6; } if test "$ac_cv_have_chflags" = cross ; then ac_fn_c_check_func "$LINENO" "chflags" "ac_cv_func_chflags" -if test "x$ac_cv_func_chflags" = xyes -then : +if test "x$ac_cv_func_chflags" = xyes; then : ac_cv_have_chflags="yes" -else $as_nop +else ac_cv_have_chflags="no" fi fi if test "$ac_cv_have_chflags" = yes ; then -printf "%s\n" "#define HAVE_CHFLAGS 1" >>confdefs.h +$as_echo "#define HAVE_CHFLAGS 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lchflags" >&5 -printf %s "checking for lchflags... " >&6; } -if test ${ac_cv_have_lchflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lchflags" >&5 +$as_echo_n "checking for lchflags... " >&6; } +if ${ac_cv_have_lchflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_have_lchflags=cross -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14753,10 +12623,9 @@ int main(int argc, char*argv[]) } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_have_lchflags=yes -else $as_nop +else ac_cv_have_lchflags=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14765,21 +12634,20 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lchflags" >&5 -printf "%s\n" "$ac_cv_have_lchflags" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lchflags" >&5 +$as_echo "$ac_cv_have_lchflags" >&6; } if test "$ac_cv_have_lchflags" = cross ; then ac_fn_c_check_func "$LINENO" "lchflags" "ac_cv_func_lchflags" -if test "x$ac_cv_func_lchflags" = xyes -then : +if test "x$ac_cv_func_lchflags" = xyes; then : ac_cv_have_lchflags="yes" -else $as_nop +else ac_cv_have_lchflags="no" fi fi if test "$ac_cv_have_lchflags" = yes ; then -printf "%s\n" "#define HAVE_LCHFLAGS 1" >>confdefs.h +$as_echo "#define HAVE_LCHFLAGS 1" >>confdefs.h fi @@ -14792,12 +12660,11 @@ Darwin/*) ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 -printf %s "checking for inflateCopy in -lz... " >&6; } -if test ${ac_cv_lib_z_inflateCopy+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 +$as_echo_n "checking for inflateCopy in -lz... " >&6; } +if ${ac_cv_lib_z_inflateCopy+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14806,31 +12673,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char inflateCopy (); int -main (void) +main () { return inflateCopy (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_inflateCopy=yes -else $as_nop +else ac_cv_lib_z_inflateCopy=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 -printf "%s\n" "$ac_cv_lib_z_inflateCopy" >&6; } -if test "x$ac_cv_lib_z_inflateCopy" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 +$as_echo "$ac_cv_lib_z_inflateCopy" >&6; } +if test "x$ac_cv_lib_z_inflateCopy" = xyes; then : -printf "%s\n" "#define HAVE_ZLIB_COPY 1" >>confdefs.h +$as_echo "#define HAVE_ZLIB_COPY 1" >>confdefs.h fi @@ -14842,38 +12710,37 @@ Darwin/*) ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hstrerror" >&5 -printf %s "checking for hstrerror... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hstrerror" >&5 +$as_echo_n "checking for hstrerror... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void* p = hstrerror; hstrerror(0) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : -printf "%s\n" "#define HAVE_HSTRERROR 1" >>confdefs.h +$as_echo "#define HAVE_HSTRERROR 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 -printf %s "checking for inet_aton... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 +$as_echo_n "checking for inet_aton... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14883,30 +12750,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { void* p = inet_aton;inet_aton(0,0) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : -printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h +$as_echo "#define HAVE_INET_ATON 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5 -printf %s "checking for inet_pton... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton" >&5 +$as_echo_n "checking for inet_pton... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14916,30 +12782,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { void* p = inet_pton ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h +$as_echo "#define HAVE_INET_PTON 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # On some systems, setgroups is in unistd.h, on others, in grp.h -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setgroups" >&5 -printf %s "checking for setgroups... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for setgroups" >&5 +$as_echo_n "checking for setgroups... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14949,44 +12814,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { void* p = setgroups ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_SETGROUPS 1" >>confdefs.h +$as_echo "#define HAVE_SETGROUPS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # check for openpty and forkpty - - for ac_func in openpty +for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" -if test "x$ac_cv_func_openpty" = xyes -then : - printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 -printf %s "checking for openpty in -lutil... " >&6; } -if test ${ac_cv_lib_util_openpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_openpty" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_OPENPTY 1 +_ACEOF + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 +$as_echo_n "checking for openpty in -lutil... " >&6; } +if ${ac_cv_lib_util_openpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14995,38 +12858,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char openpty (); int -main (void) +main () { return openpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_openpty=yes -else $as_nop +else ac_cv_lib_util_openpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 -printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } -if test "x$ac_cv_lib_util_openpty" = xyes -then : - printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 +$as_echo "$ac_cv_lib_util_openpty" >&6; } +if test "x$ac_cv_lib_util_openpty" = xyes; then : + $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lbsd" >&5 -printf %s "checking for openpty in -lbsd... " >&6; } -if test ${ac_cv_lib_bsd_openpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lbsd" >&5 +$as_echo_n "checking for openpty in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_openpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15035,30 +12898,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char openpty (); int -main (void) +main () { return openpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_openpty=yes -else $as_nop +else ac_cv_lib_bsd_openpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_openpty" >&5 -printf "%s\n" "$ac_cv_lib_bsd_openpty" >&6; } -if test "x$ac_cv_lib_bsd_openpty" = xyes -then : - printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_openpty" >&5 +$as_echo "$ac_cv_lib_bsd_openpty" >&6; } +if test "x$ac_cv_lib_bsd_openpty" = xyes; then : + $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lbsd" fi @@ -15067,23 +12931,22 @@ fi fi - done - for ac_func in forkpty +for ac_func in forkpty do : ac_fn_c_check_func "$LINENO" "forkpty" "ac_cv_func_forkpty" -if test "x$ac_cv_func_forkpty" = xyes -then : - printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 -printf %s "checking for forkpty in -lutil... " >&6; } -if test ${ac_cv_lib_util_forkpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_forkpty" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FORKPTY 1 +_ACEOF + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 +$as_echo_n "checking for forkpty in -lutil... " >&6; } +if ${ac_cv_lib_util_forkpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15092,38 +12955,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char forkpty (); int -main (void) +main () { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_forkpty=yes -else $as_nop +else ac_cv_lib_util_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 -printf "%s\n" "$ac_cv_lib_util_forkpty" >&6; } -if test "x$ac_cv_lib_util_forkpty" = xyes -then : - printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 +$as_echo "$ac_cv_lib_util_forkpty" >&6; } +if test "x$ac_cv_lib_util_forkpty" = xyes; then : + $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h LIBS="$LIBS -lutil" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lbsd" >&5 -printf %s "checking for forkpty in -lbsd... " >&6; } -if test ${ac_cv_lib_bsd_forkpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lbsd" >&5 +$as_echo_n "checking for forkpty in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_forkpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15132,30 +12995,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char forkpty (); int -main (void) +main () { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_forkpty=yes -else $as_nop +else ac_cv_lib_bsd_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_forkpty" >&5 -printf "%s\n" "$ac_cv_lib_bsd_forkpty" >&6; } -if test "x$ac_cv_lib_bsd_forkpty" = xyes -then : - printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_forkpty" >&5 +$as_echo "$ac_cv_lib_bsd_forkpty" >&6; } +if test "x$ac_cv_lib_bsd_forkpty" = xyes; then : + $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h LIBS="$LIBS -lbsd" fi @@ -15164,54 +13028,28 @@ fi fi - done -# check for long file support functions -ac_fn_c_check_func "$LINENO" "fseek64" "ac_cv_func_fseek64" -if test "x$ac_cv_func_fseek64" = xyes -then : - printf "%s\n" "#define HAVE_FSEEK64 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko" -if test "x$ac_cv_func_fseeko" = xyes -then : - printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "fstatvfs" "ac_cv_func_fstatvfs" -if test "x$ac_cv_func_fstatvfs" = xyes -then : - printf "%s\n" "#define HAVE_FSTATVFS 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "ftell64" "ac_cv_func_ftell64" -if test "x$ac_cv_func_ftell64" = xyes -then : - printf "%s\n" "#define HAVE_FTELL64 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "ftello" "ac_cv_func_ftello" -if test "x$ac_cv_func_ftello" = xyes -then : - printf "%s\n" "#define HAVE_FTELLO 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "statvfs" "ac_cv_func_statvfs" -if test "x$ac_cv_func_statvfs" = xyes -then : - printf "%s\n" "#define HAVE_STATVFS 1" >>confdefs.h +# check for long file support functions +for ac_func in fseek64 fseeko fstatvfs ftell64 ftello statvfs +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi +done ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2" -if test "x$ac_cv_func_dup2" = xyes -then : - printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h +if test "x$ac_cv_func_dup2" = xyes; then : + $as_echo "#define HAVE_DUP2 1" >>confdefs.h -else $as_nop +else case " $LIBOBJS " in *" dup2.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dup2.$ac_objext" @@ -15221,72 +13059,70 @@ esac fi - for ac_func in getpgrp +for ac_func in getpgrp do : ac_fn_c_check_func "$LINENO" "getpgrp" "ac_cv_func_getpgrp" -if test "x$ac_cv_func_getpgrp" = xyes -then : - printf "%s\n" "#define HAVE_GETPGRP 1" >>confdefs.h +if test "x$ac_cv_func_getpgrp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPGRP 1 +_ACEOF cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { getpgrp(0); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define GETPGRP_HAVE_ARG 1" >>confdefs.h +$as_echo "#define GETPGRP_HAVE_ARG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - done - for ac_func in setpgrp +for ac_func in setpgrp do : ac_fn_c_check_func "$LINENO" "setpgrp" "ac_cv_func_setpgrp" -if test "x$ac_cv_func_setpgrp" = xyes -then : - printf "%s\n" "#define HAVE_SETPGRP 1" >>confdefs.h +if test "x$ac_cv_func_setpgrp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETPGRP 1 +_ACEOF cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { setpgrp(0,0); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define SETPGRP_HAVE_ARG 1" >>confdefs.h +$as_echo "#define SETPGRP_HAVE_ARG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - done + # We search for both crypt and crypt_r as one or the other may be defined # This gets us our -lcrypt in LIBS when required on the target platform. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 -printf %s "checking for library containing crypt... " >&6; } -if test ${ac_cv_search_crypt+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 +$as_echo_n "checking for library containing crypt... " >&6; } +if ${ac_cv_search_crypt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15294,58 +13130,55 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char crypt (); int -main (void) +main () { return crypt (); ; return 0; } _ACEOF -for ac_lib in '' crypt -do +for ac_lib in '' crypt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_crypt=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_crypt+y} -then : + if ${ac_cv_search_crypt+:} false; then : break fi done -if test ${ac_cv_search_crypt+y} -then : +if ${ac_cv_search_crypt+:} false; then : -else $as_nop +else ac_cv_search_crypt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 -printf "%s\n" "$ac_cv_search_crypt" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 +$as_echo "$ac_cv_search_crypt" >&6; } ac_res=$ac_cv_search_crypt -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5 -printf %s "checking for library containing crypt_r... " >&6; } -if test ${ac_cv_search_crypt_r+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt_r" >&5 +$as_echo_n "checking for library containing crypt_r... " >&6; } +if ${ac_cv_search_crypt_r+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15353,56 +13186,53 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char crypt_r (); int -main (void) +main () { return crypt_r (); ; return 0; } _ACEOF -for ac_lib in '' crypt -do +for ac_lib in '' crypt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_crypt_r=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_crypt_r+y} -then : + if ${ac_cv_search_crypt_r+:} false; then : break fi done -if test ${ac_cv_search_crypt_r+y} -then : +if ${ac_cv_search_crypt_r+:} false; then : -else $as_nop +else ac_cv_search_crypt_r=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5 -printf "%s\n" "$ac_cv_search_crypt_r" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt_r" >&5 +$as_echo "$ac_cv_search_crypt_r" >&6; } ac_res=$ac_cv_search_crypt_r -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "crypt_r" "ac_cv_func_crypt_r" -if test "x$ac_cv_func_crypt_r" = xyes -then : +if test "x$ac_cv_func_crypt_r" = xyes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15410,7 +13240,7 @@ then : #include int -main (void) +main () { struct crypt_data d; @@ -15420,33 +13250,31 @@ char *r = crypt_r("", "", &d); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CRYPT_R 1" >>confdefs.h +$as_echo "#define HAVE_CRYPT_R 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - - for ac_func in clock_gettime +for ac_func in clock_gettime do : ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" -if test "x$ac_cv_func_clock_gettime" = xyes -then : - printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 -printf %s "checking for clock_gettime in -lrt... " >&6; } -if test ${ac_cv_lib_rt_clock_gettime+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_GETTIME 1 +_ACEOF + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15455,60 +13283,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char clock_gettime (); int -main (void) +main () { return clock_gettime (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_clock_gettime=yes -else $as_nop +else ac_cv_lib_rt_clock_gettime=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 -printf "%s\n" "$ac_cv_lib_rt_clock_gettime" >&6; } -if test "x$ac_cv_lib_rt_clock_gettime" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : LIBS="$LIBS -lrt" - printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h + $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h -printf "%s\n" "#define TIMEMODULE_LIB rt" >>confdefs.h +$as_echo "#define TIMEMODULE_LIB rt" >>confdefs.h fi fi - done - for ac_func in clock_getres +for ac_func in clock_getres do : ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres" -if test "x$ac_cv_func_clock_getres" = xyes -then : - printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_getres in -lrt" >&5 -printf %s "checking for clock_getres in -lrt... " >&6; } -if test ${ac_cv_lib_rt_clock_getres+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_clock_getres" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_GETRES 1 +_ACEOF + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_getres in -lrt" >&5 +$as_echo_n "checking for clock_getres in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_getres+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15517,56 +13345,56 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char clock_getres (); int -main (void) +main () { return clock_getres (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_clock_getres=yes -else $as_nop +else ac_cv_lib_rt_clock_getres=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_getres" >&5 -printf "%s\n" "$ac_cv_lib_rt_clock_getres" >&6; } -if test "x$ac_cv_lib_rt_clock_getres" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_getres" >&5 +$as_echo "$ac_cv_lib_rt_clock_getres" >&6; } +if test "x$ac_cv_lib_rt_clock_getres" = xyes; then : - printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h + $as_echo "#define HAVE_CLOCK_GETRES 1" >>confdefs.h fi fi - done - for ac_func in clock_settime +for ac_func in clock_settime do : ac_fn_c_check_func "$LINENO" "clock_settime" "ac_cv_func_clock_settime" -if test "x$ac_cv_func_clock_settime" = xyes -then : - printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_settime in -lrt" >&5 -printf %s "checking for clock_settime in -lrt... " >&6; } -if test ${ac_cv_lib_rt_clock_settime+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_clock_settime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_SETTIME 1 +_ACEOF + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_settime in -lrt" >&5 +$as_echo_n "checking for clock_settime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_settime+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15575,42 +13403,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char clock_settime (); int -main (void) +main () { return clock_settime (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_clock_settime=yes -else $as_nop +else ac_cv_lib_rt_clock_settime=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_settime" >&5 -printf "%s\n" "$ac_cv_lib_rt_clock_settime" >&6; } -if test "x$ac_cv_lib_rt_clock_settime" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_settime" >&5 +$as_echo "$ac_cv_lib_rt_clock_settime" >&6; } +if test "x$ac_cv_lib_rt_clock_settime" = xyes; then : - printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h + $as_echo "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h fi fi - done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for major" >&5 -printf %s "checking for major... " >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for major" >&5 +$as_echo_n "checking for major... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15623,7 +13452,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main (void) +main () { makedev(major(0),minor(0)); @@ -15632,28 +13461,27 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : -printf "%s\n" "#define HAVE_DEVICE_MACROS 1" >>confdefs.h +$as_echo "#define HAVE_DEVICE_MACROS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # On OSF/1 V5.1, getaddrinfo is available, but a define # for [no]getaddrinfo in netdb.h. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5 -printf %s "checking for getaddrinfo... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5 +$as_echo_n "checking for getaddrinfo... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15663,40 +13491,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { getaddrinfo(NULL, NULL, NULL, NULL); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_getaddrinfo=yes -else $as_nop +else have_getaddrinfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5 -printf "%s\n" "$have_getaddrinfo" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getaddrinfo" >&5 +$as_echo "$have_getaddrinfo" >&6; } if test $have_getaddrinfo = yes then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getaddrinfo bug" >&5 -printf %s "checking getaddrinfo bug... " >&6; } - if test ${ac_cv_buggy_getaddrinfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking getaddrinfo bug" >&5 +$as_echo_n "checking getaddrinfo bug... " >&6; } + if ${ac_cv_buggy_getaddrinfo+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : if test "${enable_ipv6+set}" = set; then ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6" else ac_cv_buggy_getaddrinfo=yes fi -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15790,10 +13615,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_buggy_getaddrinfo=no -else $as_nop +else ac_cv_buggy_getaddrinfo=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15804,8 +13628,8 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_getaddrinfo" >&5 -printf "%s\n" "$ac_cv_buggy_getaddrinfo" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_getaddrinfo" >&5 +$as_echo "$ac_cv_buggy_getaddrinfo" >&6; } if test $have_getaddrinfo = no || test "$ac_cv_buggy_getaddrinfo" = yes then @@ -15817,42 +13641,70 @@ then fi else -printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h +$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" -if test "x$ac_cv_func_getnameinfo" = xyes -then : - printf "%s\n" "#define HAVE_GETNAMEINFO 1" >>confdefs.h +for ac_func in getnameinfo +do : + ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" +if test "x$ac_cv_func_getnameinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETNAMEINFO 1 +_ACEOF fi +done # checks for structures +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then -# Obsolete code to be removed. -if test $ac_cv_header_sys_time_h = yes; then - -printf "%s\n" "#define TIME_WITH_SYS_TIME 1" >>confdefs.h +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi -# End of obsolete code. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if test ${ac_cv_struct_tm+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if ${ac_cv_struct_tm+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main (void) +main () { struct tm tm; int *p = &tm.tm_sec; @@ -15861,19 +13713,18 @@ struct tm tm; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h -else $as_nop +else ac_cv_struct_tm=sys/time.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -printf "%s\n" "$ac_cv_struct_tm" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then -printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi @@ -15881,35 +13732,37 @@ ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_ #include <$ac_cv_struct_tm> " -if test "x$ac_cv_member_struct_tm_tm_zone" = xyes -then : +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TM_TM_ZONE 1 +_ACEOF fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then -printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h +$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h else - ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_tzname" = xyes -then : + ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include +" +if test "x$ac_cv_have_decl_tzname" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 -printf %s "checking for tzname... " >&6; } -if test ${ac_cv_var_tzname+y} -then : - printf %s "(cached) " >&6 -else $as_nop +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TZNAME $ac_have_decl +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 +$as_echo_n "checking for tzname... " >&6; } +if ${ac_cv_var_tzname+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -15918,81 +13771,86 @@ extern char *tzname[]; #endif int -main (void) +main () { return tzname[0][0]; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_var_tzname=yes -else $as_nop +else ac_cv_var_tzname=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 -printf "%s\n" "$ac_cv_var_tzname" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 +$as_echo "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then -printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h +$as_echo "#define HAVE_TZNAME 1" >>confdefs.h fi fi ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_rdev" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blksize" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLKSIZE 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_flags" "ac_cv_member_struct_stat_st_flags" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_flags" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_flags" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_FLAGS 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_FLAGS 1 +_ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_gen" "ac_cv_member_struct_stat_st_gen" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_gen" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_gen" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_GEN 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_GEN 1 +_ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtime" "ac_cv_member_struct_stat_st_birthtime" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1 +_ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes -then : +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF fi @@ -16002,10 +13860,11 @@ ac_fn_c_check_member "$LINENO" "struct passwd" "pw_gecos" "ac_cv_member_struct_p #include " -if test "x$ac_cv_member_struct_passwd_pw_gecos" = xyes -then : +if test "x$ac_cv_member_struct_passwd_pw_gecos" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_PASSWD_PW_GECOS 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PASSWD_PW_GECOS 1 +_ACEOF fi @@ -16014,10 +13873,11 @@ ac_fn_c_check_member "$LINENO" "struct passwd" "pw_passwd" "ac_cv_member_struct_ #include " -if test "x$ac_cv_member_struct_passwd_pw_passwd" = xyes -then : +if test "x$ac_cv_member_struct_passwd_pw_passwd" = xyes; then : -printf "%s\n" "#define HAVE_STRUCT_PASSWD_PW_PASSWD 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PASSWD_PW_PASSWD 1 +_ACEOF fi @@ -16025,54 +13885,53 @@ fi # Issue #21085: In Cygwin, siginfo_t does not have si_band field. ac_fn_c_check_member "$LINENO" "siginfo_t" "si_band" "ac_cv_member_siginfo_t_si_band" "#include " -if test "x$ac_cv_member_siginfo_t_si_band" = xyes -then : +if test "x$ac_cv_member_siginfo_t_si_band" = xyes; then : -printf "%s\n" "#define HAVE_SIGINFO_T_SI_BAND 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGINFO_T_SI_BAND 1 +_ACEOF fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for time.h that defines altzone" >&5 -printf %s "checking for time.h that defines altzone... " >&6; } -if test ${ac_cv_header_time_altzone+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for time.h that defines altzone" >&5 +$as_echo_n "checking for time.h that defines altzone... " >&6; } +if ${ac_cv_header_time_altzone+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { return altzone; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time_altzone=yes -else $as_nop +else ac_cv_header_time_altzone=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time_altzone" >&5 -printf "%s\n" "$ac_cv_header_time_altzone" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time_altzone" >&5 +$as_echo "$ac_cv_header_time_altzone" >&6; } if test $ac_cv_header_time_altzone = yes; then -printf "%s\n" "#define HAVE_ALTZONE 1" >>confdefs.h +$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h fi was_it_defined=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sys/select.h and sys/time.h may both be included" >&5 -printf %s "checking whether sys/select.h and sys/time.h may both be included... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/select.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether sys/select.h and sys/time.h may both be included... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16081,102 +13940,96 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { ; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define SYS_SELECT_WITH_SYS_TIME 1" >>confdefs.h +$as_echo "#define SYS_SELECT_WITH_SYS_TIME 1" >>confdefs.h was_it_defined=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 -printf "%s\n" "$was_it_defined" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $was_it_defined" >&5 +$as_echo "$was_it_defined" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for addrinfo" >&5 -printf %s "checking for addrinfo... " >&6; } -if test ${ac_cv_struct_addrinfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for addrinfo" >&5 +$as_echo_n "checking for addrinfo... " >&6; } +if ${ac_cv_struct_addrinfo+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { struct addrinfo a ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_addrinfo=yes -else $as_nop +else ac_cv_struct_addrinfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_addrinfo" >&5 -printf "%s\n" "$ac_cv_struct_addrinfo" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_addrinfo" >&5 +$as_echo "$ac_cv_struct_addrinfo" >&6; } if test $ac_cv_struct_addrinfo = yes; then -printf "%s\n" "#define HAVE_ADDRINFO 1" >>confdefs.h +$as_echo "#define HAVE_ADDRINFO 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sockaddr_storage" >&5 -printf %s "checking for sockaddr_storage... " >&6; } -if test ${ac_cv_struct_sockaddr_storage+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockaddr_storage" >&5 +$as_echo_n "checking for sockaddr_storage... " >&6; } +if ${ac_cv_struct_sockaddr_storage+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include # include int -main (void) +main () { struct sockaddr_storage s ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_sockaddr_storage=yes -else $as_nop +else ac_cv_struct_sockaddr_storage=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_storage" >&5 -printf "%s\n" "$ac_cv_struct_sockaddr_storage" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_storage" >&5 +$as_echo "$ac_cv_struct_sockaddr_storage" >&6; } if test $ac_cv_struct_sockaddr_storage = yes; then -printf "%s\n" "#define HAVE_SOCKADDR_STORAGE 1" >>confdefs.h +$as_echo "#define HAVE_SOCKADDR_STORAGE 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sockaddr_alg" >&5 -printf %s "checking for sockaddr_alg... " >&6; } -if test ${ac_cv_struct_sockaddr_alg+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockaddr_alg" >&5 +$as_echo_n "checking for sockaddr_alg... " >&6; } +if ${ac_cv_struct_sockaddr_alg+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16184,43 +14037,41 @@ else $as_nop # include # include int -main (void) +main () { struct sockaddr_alg s ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_sockaddr_alg=yes -else $as_nop +else ac_cv_struct_sockaddr_alg=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_alg" >&5 -printf "%s\n" "$ac_cv_struct_sockaddr_alg" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_alg" >&5 +$as_echo "$ac_cv_struct_sockaddr_alg" >&6; } if test $ac_cv_struct_sockaddr_alg = yes; then -printf "%s\n" "#define HAVE_SOCKADDR_ALG 1" >>confdefs.h +$as_echo "#define HAVE_SOCKADDR_ALG 1" >>confdefs.h fi # checks for compiler characteristics -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 -printf %s "checking whether char is unsigned... " >&6; } -if test ${ac_cv_c_char_unsigned+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 +$as_echo_n "checking whether char is unsigned... " >&6; } +if ${ac_cv_c_char_unsigned+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; @@ -16230,32 +14081,30 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_char_unsigned=no -else $as_nop +else ac_cv_c_char_unsigned=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 -printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } -if test $ac_cv_c_char_unsigned = yes; then - printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 +$as_echo "$ac_cv_c_char_unsigned" >&6; } +if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then + $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -printf %s "checking for an ANSI C-conforming const... " >&6; } -if test ${ac_cv_c_const+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __cplusplus @@ -16268,7 +14117,7 @@ main (void) /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; - /* IBM XL C 1.02.0.0 rejects this. + /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ @@ -16296,7 +14145,7 @@ main (void) iptr p = 0; ++p; } - { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; @@ -16312,78 +14161,75 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes -else $as_nop +else ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -printf "%s\n" "$ac_cv_c_const" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -printf "%s\n" "#define const /**/" >>confdefs.h +$as_echo "#define const /**/" >>confdefs.h fi works=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working signed char" >&5 -printf %s "checking for working signed char... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working signed char" >&5 +$as_echo_n "checking for working signed char... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { signed char c; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : works=yes -else $as_nop +else -printf "%s\n" "#define signed /**/" >>confdefs.h +$as_echo "#define signed /**/" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $works" >&5 -printf "%s\n" "$works" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $works" >&5 +$as_echo "$works" >&6; } have_prototypes=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for prototypes" >&5 -printf %s "checking for prototypes... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prototypes" >&5 +$as_echo_n "checking for prototypes... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(int x) { return 0; } int -main (void) +main () { return foo(10); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_PROTOTYPES 1" >>confdefs.h +$as_echo "#define HAVE_PROTOTYPES 1" >>confdefs.h have_prototypes=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_prototypes" >&5 -printf "%s\n" "$have_prototypes" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_prototypes" >&5 +$as_echo "$have_prototypes" >&6; } works=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable length prototypes and stdarg.h" >&5 -printf %s "checking for variable length prototypes and stdarg.h... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable length prototypes and stdarg.h" >&5 +$as_echo_n "checking for variable length prototypes and stdarg.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16398,29 +14244,28 @@ int foo(int x, ...) { } int -main (void) +main () { return foo(10, "", 3.14); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_STDARG_PROTOTYPES 1" >>confdefs.h +$as_echo "#define HAVE_STDARG_PROTOTYPES 1" >>confdefs.h works=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $works" >&5 -printf "%s\n" "$works" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $works" >&5 +$as_echo "$works" >&6; } # check for socketpair -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socketpair" >&5 -printf %s "checking for socketpair... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socketpair" >&5 +$as_echo_n "checking for socketpair... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16428,36 +14273,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main (void) +main () { void *x=socketpair ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_SOCKETPAIR 1" >>confdefs.h +$as_echo "#define HAVE_SOCKETPAIR 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # check if sockaddr has sa_len member -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sockaddr has sa_len member" >&5 -printf %s "checking if sockaddr has sa_len member... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sockaddr has sa_len member" >&5 +$as_echo_n "checking if sockaddr has sa_len member... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main (void) +main () { struct sockaddr x; x.sa_len = 0; @@ -16465,31 +14309,29 @@ x.sa_len = 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -printf "%s\n" "#define HAVE_SOCKADDR_SA_LEN 1" >>confdefs.h +$as_echo "#define HAVE_SOCKADDR_SA_LEN 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # sigh -- gethostbyname_r is a mess; it can have 3, 5 or 6 arguments :-( ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r" -if test "x$ac_cv_func_gethostbyname_r" = xyes -then : +if test "x$ac_cv_func_gethostbyname_r" = xyes; then : - printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 6 args" >&5 -printf %s "checking gethostbyname_r with 6 args... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 6 args" >&5 +$as_echo_n "checking gethostbyname_r with 6 args... " >&6; } OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16498,7 +14340,7 @@ printf %s "checking gethostbyname_r with 6 args... " >&6; } # include int -main (void) +main () { char *name; @@ -16513,30 +14355,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : - printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_6_ARG 1" >>confdefs.h +$as_echo "#define HAVE_GETHOSTBYNAME_R_6_ARG 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 5 args" >&5 -printf %s "checking gethostbyname_r with 5 args... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 5 args" >&5 +$as_echo_n "checking gethostbyname_r with 5 args... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include int -main (void) +main () { char *name; @@ -16551,30 +14392,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : - printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_5_ARG 1" >>confdefs.h +$as_echo "#define HAVE_GETHOSTBYNAME_R_5_ARG 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 3 args" >&5 -printf %s "checking gethostbyname_r with 3 args... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r with 3 args" >&5 +$as_echo_n "checking gethostbyname_r with 3 args... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include int -main (void) +main () { char *name; @@ -16587,40 +14427,43 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : - printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_3_ARG 1" >>confdefs.h +$as_echo "#define HAVE_GETHOSTBYNAME_R_3_ARG 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$OLD_CFLAGS -else $as_nop +else + for ac_func in gethostbyname +do : ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes -then : - printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h +if test "x$ac_cv_func_gethostbyname" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETHOSTBYNAME 1 +_ACEOF fi +done fi @@ -16636,16 +14479,14 @@ fi # Linux requires this for correct f.p. operations ac_fn_c_check_func "$LINENO" "__fpu_control" "ac_cv_func___fpu_control" -if test "x$ac_cv_func___fpu_control" = xyes -then : - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __fpu_control in -lieee" >&5 -printf %s "checking for __fpu_control in -lieee... " >&6; } -if test ${ac_cv_lib_ieee___fpu_control+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func___fpu_control" = xyes; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpu_control in -lieee" >&5 +$as_echo_n "checking for __fpu_control in -lieee... " >&6; } +if ${ac_cv_lib_ieee___fpu_control+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16654,30 +14495,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char __fpu_control (); int -main (void) +main () { return __fpu_control (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee___fpu_control=yes -else $as_nop +else ac_cv_lib_ieee___fpu_control=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee___fpu_control" >&5 -printf "%s\n" "$ac_cv_lib_ieee___fpu_control" >&6; } -if test "x$ac_cv_lib_ieee___fpu_control" = xyes -then : - printf "%s\n" "#define HAVE_LIBIEEE 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee___fpu_control" >&5 +$as_echo "$ac_cv_lib_ieee___fpu_control" >&6; } +if test "x$ac_cv_lib_ieee___fpu_control" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBIEEE 1 +_ACEOF LIBS="-lieee $LIBS" @@ -16693,51 +14537,49 @@ case $ac_sys_system in Darwin) ;; *) LIBM=-lm esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libm=STRING" >&5 -printf %s "checking for --with-libm=STRING... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libm=STRING" >&5 +$as_echo_n "checking for --with-libm=STRING... " >&6; } # Check whether --with-libm was given. -if test ${with_libm+y} -then : +if test "${with_libm+set}" = set; then : withval=$with_libm; if test "$withval" = no then LIBM= - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: force LIBM empty" >&5 -printf "%s\n" "force LIBM empty" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: force LIBM empty" >&5 +$as_echo "force LIBM empty" >&6; } elif test "$withval" != yes then LIBM=$withval - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: set LIBM=\"$withval\"" >&5 -printf "%s\n" "set LIBM=\"$withval\"" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: set LIBM=\"$withval\"" >&5 +$as_echo "set LIBM=\"$withval\"" >&6; } else as_fn_error $? "proper usage is --with-libm=STRING" "$LINENO" 5 fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default LIBM=\"$LIBM\"" >&5 -printf "%s\n" "default LIBM=\"$LIBM\"" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: default LIBM=\"$LIBM\"" >&5 +$as_echo "default LIBM=\"$LIBM\"" >&6; } fi # check for --with-libc=... -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-libc=STRING" >&5 -printf %s "checking for --with-libc=STRING... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-libc=STRING" >&5 +$as_echo_n "checking for --with-libc=STRING... " >&6; } # Check whether --with-libc was given. -if test ${with_libc+y} -then : +if test "${with_libc+set}" = set; then : withval=$with_libc; if test "$withval" = no then LIBC= - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: force LIBC empty" >&5 -printf "%s\n" "force LIBC empty" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: force LIBC empty" >&5 +$as_echo "force LIBC empty" >&6; } elif test "$withval" != yes then LIBC=$withval - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: set LIBC=\"$withval\"" >&5 -printf "%s\n" "set LIBC=\"$withval\"" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: set LIBC=\"$withval\"" >&5 +$as_echo "set LIBC=\"$withval\"" >&6; } else as_fn_error $? "proper usage is --with-libc=STRING" "$LINENO" 5 fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: default LIBC=\"$LIBC\"" >&5 -printf "%s\n" "default LIBC=\"$LIBC\"" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: default LIBC=\"$LIBC\"" >&5 +$as_echo "default LIBC=\"$LIBC\"" >&6; } fi @@ -16745,13 +14587,13 @@ fi # * Check for gcc x64 inline assembler * # ************************************** -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x64 gcc inline assembler" >&5 -printf %s "checking for x64 gcc inline assembler... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x64 gcc inline assembler" >&5 +$as_echo_n "checking for x64 gcc inline assembler... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { __asm__ __volatile__ ("movq %rcx, %rax"); @@ -16760,20 +14602,19 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_gcc_asm_for_x64=yes -else $as_nop +else have_gcc_asm_for_x64=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x64" >&5 -printf "%s\n" "$have_gcc_asm_for_x64" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x64" >&5 +$as_echo "$have_gcc_asm_for_x64" >&6; } if test "$have_gcc_asm_for_x64" = yes then -printf "%s\n" "#define HAVE_GCC_ASM_FOR_X64 1" >>confdefs.h +$as_echo "#define HAVE_GCC_ASM_FOR_X64 1" >>confdefs.h fi @@ -16781,12 +14622,11 @@ fi # * Check for various properties of floating point * # ************************************************** -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether float word ordering is bigendian" >&5 -printf %s "checking whether float word ordering is bigendian... " >&6; } -if test ${ax_cv_c_float_words_bigendian+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether float word ordering is bigendian" >&5 +$as_echo_n "checking whether float word ordering is bigendian... " >&6; } +if ${ax_cv_c_float_words_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_c_float_words_bigendian=unknown @@ -16798,8 +14638,7 @@ double d = 909042349670368103374704789055050114762116927356156320147971208440534 _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : if grep noonsees conftest.$ac_objext >/dev/null ; then @@ -16815,15 +14654,15 @@ fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_float_words_bigendian" >&5 -printf "%s\n" "$ax_cv_c_float_words_bigendian" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_float_words_bigendian" >&5 +$as_echo "$ax_cv_c_float_words_bigendian" >&6; } case $ax_cv_c_float_words_bigendian in yes) -printf "%s\n" "#define FLOAT_WORDS_BIGENDIAN 1" >>confdefs.h +$as_echo "#define FLOAT_WORDS_BIGENDIAN 1" >>confdefs.h ;; no) ;; @@ -16840,12 +14679,12 @@ esac if test "$ax_cv_c_float_words_bigendian" = "yes" then -printf "%s\n" "#define DOUBLE_IS_BIG_ENDIAN_IEEE754 1" >>confdefs.h +$as_echo "#define DOUBLE_IS_BIG_ENDIAN_IEEE754 1" >>confdefs.h elif test "$ax_cv_c_float_words_bigendian" = "no" then -printf "%s\n" "#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1" >>confdefs.h +$as_echo "#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1" >>confdefs.h else # Some ARM platforms use a mixed-endian representation for doubles. @@ -16855,7 +14694,7 @@ else # FLOAT_WORDS_BIGENDIAN doesnt actually detect this case, but if it's not big # or little, then it must be this? -printf "%s\n" "#define DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 1" >>confdefs.h +$as_echo "#define DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 1" >>confdefs.h fi @@ -16869,13 +14708,13 @@ fi # This inline assembler syntax may also work for suncc and icc, # so we try it on all platforms. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 -printf %s "checking whether we can use gcc inline assembler to get and set x87 control word... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set x87 control word" >&5 +$as_echo_n "checking whether we can use gcc inline assembler to get and set x87 control word... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { unsigned short cw; @@ -16886,30 +14725,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_gcc_asm_for_x87=yes -else $as_nop +else have_gcc_asm_for_x87=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x87" >&5 -printf "%s\n" "$have_gcc_asm_for_x87" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_x87" >&5 +$as_echo "$have_gcc_asm_for_x87" >&6; } if test "$have_gcc_asm_for_x87" = yes then -printf "%s\n" "#define HAVE_GCC_ASM_FOR_X87 1" >>confdefs.h +$as_echo "#define HAVE_GCC_ASM_FOR_X87 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set mc68881 fpcr" >&5 -printf %s "checking whether we can use gcc inline assembler to get and set mc68881 fpcr... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use gcc inline assembler to get and set mc68881 fpcr" >&5 +$as_echo_n "checking whether we can use gcc inline assembler to get and set mc68881 fpcr... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { unsigned int fpcr; @@ -16920,20 +14758,19 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_gcc_asm_for_mc68881=yes -else $as_nop +else have_gcc_asm_for_mc68881=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_mc68881" >&5 -printf "%s\n" "$have_gcc_asm_for_mc68881" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_asm_for_mc68881" >&5 +$as_echo "$have_gcc_asm_for_mc68881" >&6; } if test "$have_gcc_asm_for_mc68881" = yes then -printf "%s\n" "#define HAVE_GCC_ASM_FOR_MC68881 1" >>confdefs.h +$as_echo "#define HAVE_GCC_ASM_FOR_MC68881 1" >>confdefs.h fi @@ -16942,15 +14779,14 @@ fi # IEEE 754 platforms. On IEEE 754, test should return 1 if rounding # mode is round-to-nearest and double rounding issues are present, and # 0 otherwise. See http://bugs.python.org/issue2937 for more info. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x87-style double rounding" >&5 -printf %s "checking for x87-style double rounding... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x87-style double rounding" >&5 +$as_echo_n "checking for x87-style double rounding... " >&6; } # $BASECFLAGS may affect the result ac_save_cc="$CC" CC="$CC $BASECFLAGS" -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : ac_cv_x87_double_rounding=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -16974,10 +14810,9 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_x87_double_rounding=no -else $as_nop +else ac_cv_x87_double_rounding=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -16985,12 +14820,12 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CC="$ac_save_cc" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x87_double_rounding" >&5 -printf "%s\n" "$ac_cv_x87_double_rounding" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x87_double_rounding" >&5 +$as_echo "$ac_cv_x87_double_rounding" >&6; } if test "$ac_cv_x87_double_rounding" = yes then -printf "%s\n" "#define X87_DOUBLE_ROUNDING 1" >>confdefs.h +$as_echo "#define X87_DOUBLE_ROUNDING 1" >>confdefs.h fi @@ -17001,125 +14836,63 @@ fi LIBS_SAVE=$LIBS LIBS="$LIBS $LIBM" -ac_fn_c_check_func "$LINENO" "acosh" "ac_cv_func_acosh" -if test "x$ac_cv_func_acosh" = xyes -then : - printf "%s\n" "#define HAVE_ACOSH 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "asinh" "ac_cv_func_asinh" -if test "x$ac_cv_func_asinh" = xyes -then : - printf "%s\n" "#define HAVE_ASINH 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "atanh" "ac_cv_func_atanh" -if test "x$ac_cv_func_atanh" = xyes -then : - printf "%s\n" "#define HAVE_ATANH 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "copysign" "ac_cv_func_copysign" -if test "x$ac_cv_func_copysign" = xyes -then : - printf "%s\n" "#define HAVE_COPYSIGN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "erf" "ac_cv_func_erf" -if test "x$ac_cv_func_erf" = xyes -then : - printf "%s\n" "#define HAVE_ERF 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "erfc" "ac_cv_func_erfc" -if test "x$ac_cv_func_erfc" = xyes -then : - printf "%s\n" "#define HAVE_ERFC 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "expm1" "ac_cv_func_expm1" -if test "x$ac_cv_func_expm1" = xyes -then : - printf "%s\n" "#define HAVE_EXPM1 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "finite" "ac_cv_func_finite" -if test "x$ac_cv_func_finite" = xyes -then : - printf "%s\n" "#define HAVE_FINITE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "gamma" "ac_cv_func_gamma" -if test "x$ac_cv_func_gamma" = xyes -then : - printf "%s\n" "#define HAVE_GAMMA 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "hypot" "ac_cv_func_hypot" -if test "x$ac_cv_func_hypot" = xyes -then : - printf "%s\n" "#define HAVE_HYPOT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lgamma" "ac_cv_func_lgamma" -if test "x$ac_cv_func_lgamma" = xyes -then : - printf "%s\n" "#define HAVE_LGAMMA 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "log1p" "ac_cv_func_log1p" -if test "x$ac_cv_func_log1p" = xyes -then : - printf "%s\n" "#define HAVE_LOG1P 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "log2" "ac_cv_func_log2" -if test "x$ac_cv_func_log2" = xyes -then : - printf "%s\n" "#define HAVE_LOG2 1" >>confdefs.h +for ac_func in acosh asinh atanh copysign erf erfc expm1 finite gamma +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "round" "ac_cv_func_round" -if test "x$ac_cv_func_round" = xyes -then : - printf "%s\n" "#define HAVE_ROUND 1" >>confdefs.h +done -fi -ac_fn_c_check_func "$LINENO" "tgamma" "ac_cv_func_tgamma" -if test "x$ac_cv_func_tgamma" = xyes -then : - printf "%s\n" "#define HAVE_TGAMMA 1" >>confdefs.h +for ac_func in hypot lgamma log1p log2 round tgamma +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi +done -ac_fn_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_isinf" = xyes -then : +ac_fn_c_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include +" +if test "x$ac_cv_have_decl_isinf" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_ISINF $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "isnan" "ac_cv_have_decl_isnan" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_isnan" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISINF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "isnan" "ac_cv_have_decl_isnan" "#include +" +if test "x$ac_cv_have_decl_isnan" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_ISNAN $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "isfinite" "ac_cv_have_decl_isfinite" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_isfinite" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISNAN $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "isfinite" "ac_cv_have_decl_isfinite" "#include +" +if test "x$ac_cv_have_decl_isfinite" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_ISFINITE $ac_have_decl" >>confdefs.h + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISFINITE $ac_have_decl +_ACEOF # For multiprocessing module, check that sem_open @@ -17127,16 +14900,14 @@ printf "%s\n" "#define HAVE_DECL_ISFINITE $ac_have_decl" >>confdefs.h # the kernel module that provides POSIX semaphores # isn't loaded by default, so an attempt to call # sem_open results in a 'Signal 12' error. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX semaphores are enabled" >&5 -printf %s "checking whether POSIX semaphores are enabled... " >&6; } -if test ${ac_cv_posix_semaphores_enabled+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX semaphores are enabled" >&5 +$as_echo_n "checking whether POSIX semaphores are enabled... " >&6; } +if ${ac_cv_posix_semaphores_enabled+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_posix_semaphores_enabled=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17158,10 +14929,9 @@ int main(void) { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_posix_semaphores_enabled=yes -else $as_nop +else ac_cv_posix_semaphores_enabled=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17171,26 +14941,24 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_posix_semaphores_enabled" >&5 -printf "%s\n" "$ac_cv_posix_semaphores_enabled" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_posix_semaphores_enabled" >&5 +$as_echo "$ac_cv_posix_semaphores_enabled" >&6; } if test $ac_cv_posix_semaphores_enabled = no then -printf "%s\n" "#define POSIX_SEMAPHORES_NOT_ENABLED 1" >>confdefs.h +$as_echo "#define POSIX_SEMAPHORES_NOT_ENABLED 1" >>confdefs.h fi # Multiprocessing check for broken sem_getvalue -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken sem_getvalue" >&5 -printf %s "checking for broken sem_getvalue... " >&6; } -if test ${ac_cv_broken_sem_getvalue+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken sem_getvalue" >&5 +$as_echo_n "checking for broken sem_getvalue... " >&6; } +if ${ac_cv_broken_sem_getvalue+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_broken_sem_getvalue=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17216,10 +14984,9 @@ int main(void){ } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_broken_sem_getvalue=no -else $as_nop +else ac_cv_broken_sem_getvalue=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17229,95 +14996,110 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_sem_getvalue" >&5 -printf "%s\n" "$ac_cv_broken_sem_getvalue" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_sem_getvalue" >&5 +$as_echo "$ac_cv_broken_sem_getvalue" >&6; } if test $ac_cv_broken_sem_getvalue = yes then -printf "%s\n" "#define HAVE_BROKEN_SEM_GETVALUE 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_SEM_GETVALUE 1" >>confdefs.h fi -ac_fn_check_decl "$LINENO" "RTLD_LAZY" "ac_cv_have_decl_RTLD_LAZY" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_LAZY" = xyes -then : +ac_fn_c_check_decl "$LINENO" "RTLD_LAZY" "ac_cv_have_decl_RTLD_LAZY" "#include +" +if test "x$ac_cv_have_decl_RTLD_LAZY" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_LAZY $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_NOW" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_LAZY $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include +" +if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_NOW $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_NOW $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include +" +if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_LOCAL" "ac_cv_have_decl_RTLD_LOCAL" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_LOCAL" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_LOCAL" "ac_cv_have_decl_RTLD_LOCAL" "#include +" +if test "x$ac_cv_have_decl_RTLD_LOCAL" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_LOCAL $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_NODELETE" "ac_cv_have_decl_RTLD_NODELETE" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_NODELETE" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_LOCAL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_NODELETE" "ac_cv_have_decl_RTLD_NODELETE" "#include +" +if test "x$ac_cv_have_decl_RTLD_NODELETE" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_NODELETE $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_NOLOAD" "ac_cv_have_decl_RTLD_NOLOAD" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_NOLOAD" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_NODELETE $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_NOLOAD" "ac_cv_have_decl_RTLD_NOLOAD" "#include +" +if test "x$ac_cv_have_decl_RTLD_NOLOAD" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_NOLOAD $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_DEEPBIND" "ac_cv_have_decl_RTLD_DEEPBIND" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_DEEPBIND" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_NOLOAD $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_DEEPBIND" "ac_cv_have_decl_RTLD_DEEPBIND" "#include +" +if test "x$ac_cv_have_decl_RTLD_DEEPBIND" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_DEEPBIND $ac_have_decl" >>confdefs.h -ac_fn_check_decl "$LINENO" "RTLD_MEMBER" "ac_cv_have_decl_RTLD_MEMBER" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_RTLD_MEMBER" = xyes -then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_DEEPBIND $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "RTLD_MEMBER" "ac_cv_have_decl_RTLD_MEMBER" "#include +" +if test "x$ac_cv_have_decl_RTLD_MEMBER" = xyes; then : ac_have_decl=1 -else $as_nop +else ac_have_decl=0 fi -printf "%s\n" "#define HAVE_DECL_RTLD_MEMBER $ac_have_decl" >>confdefs.h + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_RTLD_MEMBER $ac_have_decl +_ACEOF # determine what size digit to use for Python's longs -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking digit size for Python's longs" >&5 -printf %s "checking digit size for Python's longs... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking digit size for Python's longs" >&5 +$as_echo_n "checking digit size for Python's longs... " >&6; } # Check whether --enable-big-digits was given. -if test ${enable_big_digits+y} -then : +if test "${enable_big_digits+set}" = set; then : enableval=$enable_big_digits; case $enable_big_digits in yes) enable_big_digits=30 ;; @@ -17328,34 +15110,36 @@ no) *) as_fn_error $? "bad value $enable_big_digits for --enable-big-digits; value should be 15 or 30" "$LINENO" 5 ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_big_digits" >&5 -printf "%s\n" "$enable_big_digits" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_big_digits" >&5 +$as_echo "$enable_big_digits" >&6; } -printf "%s\n" "#define PYLONG_BITS_IN_DIGIT $enable_big_digits" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PYLONG_BITS_IN_DIGIT $enable_big_digits +_ACEOF -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 -printf "%s\n" "no value specified" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 +$as_echo "no value specified" >&6; } fi # check for wchar.h -ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" -if test "x$ac_cv_header_wchar_h" = xyes -then : +ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" +if test "x$ac_cv_header_wchar_h" = xyes; then : -printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h +$as_echo "#define HAVE_WCHAR_H 1" >>confdefs.h wchar_h="yes" -else $as_nop +else wchar_h="no" fi + # determine wchar_t size if test "$wchar_h" = yes then @@ -17363,20 +15147,18 @@ then # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 -printf %s "checking size of wchar_t... " >&6; } -if test ${ac_cv_sizeof_wchar_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 +$as_echo_n "checking size of wchar_t... " >&6; } +if ${ac_cv_sizeof_wchar_t+:} false; then : + $as_echo_n "(cached) " >&6 +else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "#include -" -then : +"; then : -else $as_nop +else if test "$ac_cv_type_wchar_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (wchar_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -17385,18 +15167,20 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 -printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 +$as_echo "$ac_cv_sizeof_wchar_t" >&6; } -printf "%s\n" "#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t +_ACEOF fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for UCS-4 tcl" >&5 -printf %s "checking for UCS-4 tcl... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UCS-4 tcl" >&5 +$as_echo_n "checking for UCS-4 tcl... " >&6; } have_ucs4_tcl=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17406,41 +15190,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext # error "NOT UCS4_TCL" #endif int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_UCS4_TCL 1" >>confdefs.h +$as_echo "#define HAVE_UCS4_TCL 1" >>confdefs.h have_ucs4_tcl=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_ucs4_tcl" >&5 -printf "%s\n" "$have_ucs4_tcl" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ucs4_tcl" >&5 +$as_echo "$have_ucs4_tcl" >&6; } # check whether wchar_t is signed or not if test "$wchar_h" = yes then # check whether wchar_t is signed or not - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is signed" >&5 -printf %s "checking whether wchar_t is signed... " >&6; } - if test ${ac_cv_wchar_t_signed+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - if test "$cross_compiling" = yes -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is signed" >&5 +$as_echo_n "checking whether wchar_t is signed... " >&6; } + if ${ac_cv_wchar_t_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : ac_cv_wchar_t_signed=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17452,10 +15233,9 @@ else $as_nop } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_wchar_t_signed=yes -else $as_nop +else ac_cv_wchar_t_signed=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17464,33 +15244,32 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_wchar_t_signed" >&5 -printf "%s\n" "$ac_cv_wchar_t_signed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_wchar_t_signed" >&5 +$as_echo "$ac_cv_wchar_t_signed" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is usable" >&5 -printf %s "checking whether wchar_t is usable... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wchar_t is usable" >&5 +$as_echo_n "checking whether wchar_t is usable... " >&6; } # wchar_t is only usable if it maps to an unsigned type if test "$ac_cv_sizeof_wchar_t" -ge 2 \ -a "$ac_cv_wchar_t_signed" = "no" then -printf "%s\n" "#define HAVE_USABLE_WCHAR_T 1" >>confdefs.h +$as_echo "#define HAVE_USABLE_WCHAR_T 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # check for endianness - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -printf %s "checking whether byte ordering is bigendian... " >&6; } -if test ${ac_cv_c_bigendian+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17501,8 +15280,7 @@ else $as_nop typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -17526,7 +15304,7 @@ then : fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17535,7 +15313,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include int -main (void) +main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -17547,8 +15325,7 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17556,7 +15333,7 @@ then : #include int -main (void) +main () { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -17566,15 +15343,14 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes -else $as_nop +else ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -17583,7 +15359,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext #include int -main (void) +main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -17593,15 +15369,14 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef _BIG_ENDIAN not big endian @@ -17611,33 +15386,31 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes -else $as_nop +else ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -unsigned short int ascii_mm[] = +short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - unsigned short int ascii_ii[] = + short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - unsigned short int ebcdic_ii[] = + short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - unsigned short int ebcdic_mm[] = + short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -17645,15 +15418,14 @@ unsigned short int ascii_mm[] = extern int foo; int -main (void) +main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -17666,13 +15438,13 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main (void) +main () { /* Are we little or big endian? From Harbison&Steele. */ @@ -17688,10 +15460,9 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no -else $as_nop +else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17700,17 +15471,17 @@ fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -printf "%s\n" "$ac_cv_c_bigendian" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) -printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) @@ -17735,15 +15506,15 @@ printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h # In Python 3.2 and older, --with-wide-unicode added a 'u' flag. # In Python 3.7 and older, --with-pymalloc added a 'm' flag. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ABIFLAGS" >&5 -printf %s "checking ABIFLAGS... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ABIFLAGS" >&5 -printf "%s\n" "$ABIFLAGS" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SOABI" >&5 -printf %s "checking SOABI... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ABIFLAGS" >&5 +$as_echo_n "checking ABIFLAGS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ABIFLAGS" >&5 +$as_echo "$ABIFLAGS" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SOABI" >&5 +$as_echo_n "checking SOABI... " >&6; } SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5 -printf "%s\n" "$SOABI" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5 +$as_echo "$SOABI" >&6; } # Release and debug (Py_DEBUG) ABI are compatible, but not Py_TRACE_REFS ABI if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then @@ -17751,18 +15522,20 @@ if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then ALT_SOABI='cpython-'`echo $VERSION | tr -d .``echo $ABIFLAGS | tr -d d`${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET} -printf "%s\n" "#define ALT_SOABI \"${ALT_SOABI}\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define ALT_SOABI "${ALT_SOABI}" +_ACEOF fi EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LDVERSION" >&5 -printf %s "checking LDVERSION... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDVERSION" >&5 +$as_echo_n "checking LDVERSION... " >&6; } LDVERSION='$(VERSION)$(ABIFLAGS)' -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LDVERSION" >&5 -printf "%s\n" "$LDVERSION" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDVERSION" >&5 +$as_echo "$LDVERSION" >&6; } # On Android and Cygwin the shared libraries must be linked with libpython. @@ -17781,12 +15554,11 @@ BINLIBDEST='$(LIBDIR)/python$(VERSION)' # /usr/$LIDIRNAME/python$VERSION PLATLIBDIR="lib" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-platlibdir" >&5 -printf %s "checking for --with-platlibdir... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-platlibdir" >&5 +$as_echo_n "checking for --with-platlibdir... " >&6; } # Check whether --with-platlibdir was given. -if test ${with_platlibdir+y} -then : +if test "${with_platlibdir+set}" = set; then : withval=$with_platlibdir; # ignore 3 options: # --with-platlibdir @@ -17794,17 +15566,17 @@ then : # --without-platlibdir if test -n "$withval" -a "$withval" != yes -a "$withval" != no then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } PLATLIBDIR="$withval" BINLIBDEST='${exec_prefix}/${PLATLIBDIR}/python$(VERSION)' else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -17820,40 +15592,37 @@ fi # Check for --with-wheel-pkg-dir=PATH WHEEL_PKG_DIR="" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-wheel-pkg-dir" >&5 -printf %s "checking for --with-wheel-pkg-dir... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-wheel-pkg-dir" >&5 +$as_echo_n "checking for --with-wheel-pkg-dir... " >&6; } # Check whether --with-wheel-pkg-dir was given. -if test ${with_wheel_pkg_dir+y} -then : +if test "${with_wheel_pkg_dir+set}" = set; then : withval=$with_wheel_pkg_dir; if test -n "$withval"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } WHEEL_PKG_DIR="$withval" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Check whether right shifting a negative integer extends the sign bit # or fills with zeros (like the Cray J90, according to Tim Peters). -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether right shift extends the sign bit" >&5 -printf %s "checking whether right shift extends the sign bit... " >&6; } -if test ${ac_cv_rshift_extends_sign+y} -then : - printf %s "(cached) " >&6 -else $as_nop - -if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether right shift extends the sign bit" >&5 +$as_echo_n "checking whether right shift extends the sign bit... " >&6; } +if ${ac_cv_rshift_extends_sign+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : ac_cv_rshift_extends_sign=yes -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17863,10 +15632,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_rshift_extends_sign=yes -else $as_nop +else ac_cv_rshift_extends_sign=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17875,28 +15643,27 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rshift_extends_sign" >&5 -printf "%s\n" "$ac_cv_rshift_extends_sign" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rshift_extends_sign" >&5 +$as_echo "$ac_cv_rshift_extends_sign" >&6; } if test "$ac_cv_rshift_extends_sign" = no then -printf "%s\n" "#define SIGNED_RIGHT_SHIFT_ZERO_FILLS 1" >>confdefs.h +$as_echo "#define SIGNED_RIGHT_SHIFT_ZERO_FILLS 1" >>confdefs.h fi # check for getc_unlocked and related locking functions -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getc_unlocked() and friends" >&5 -printf %s "checking for getc_unlocked() and friends... " >&6; } -if test ${ac_cv_have_getc_unlocked+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getc_unlocked() and friends" >&5 +$as_echo_n "checking for getc_unlocked() and friends... " >&6; } +if ${ac_cv_have_getc_unlocked+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { FILE *f = fopen("/dev/null", "r"); @@ -17908,31 +15675,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_have_getc_unlocked=yes -else $as_nop +else ac_cv_have_getc_unlocked=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getc_unlocked" >&5 -printf "%s\n" "$ac_cv_have_getc_unlocked" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getc_unlocked" >&5 +$as_echo "$ac_cv_have_getc_unlocked" >&6; } if test "$ac_cv_have_getc_unlocked" = yes then -printf "%s\n" "#define HAVE_GETC_UNLOCKED 1" >>confdefs.h +$as_echo "#define HAVE_GETC_UNLOCKED 1" >>confdefs.h fi # Check whether --with-readline was given. -if test ${with_readline+y} -then : +if test "${with_readline+set}" = set; then : withval=$with_readline; -else $as_nop +else with_readline=yes fi @@ -17947,7 +15712,7 @@ if test "$with_readline" != no; then editline|edit) LIBREADLINE=edit -printf "%s\n" "#define WITH_EDITLINE 1" >>confdefs.h +$as_echo "#define WITH_EDITLINE 1" >>confdefs.h ;; yes|readline) @@ -17961,8 +15726,8 @@ printf "%s\n" "#define WITH_EDITLINE 1" >>confdefs.h # On some systems we need to link readline to a termcap compatible # library. NOTE: Keep the precedence of listed libraries synchronised # with setup.py. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 -printf %s "checking how to link readline libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 +$as_echo_n "checking how to link readline libs... " >&6; } for py_libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$py_libtermcap"; then READLINE_LIBS="-l$LIBREADLINE" @@ -17976,20 +15741,22 @@ printf %s "checking how to link readline libs... " >&6; } /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char readline (); int -main (void) +main () { return readline (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : py_cv_lib_readline=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $py_cv_lib_readline = yes; then break @@ -17999,20 +15766,20 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ # Uncomment this line if you want to use READLINE_LIBS in Makefile or scripts #AC_SUBST([READLINE_LIBS]) if test $py_cv_lib_readline = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 -printf "%s\n" "$READLINE_LIBS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 +$as_echo "$READLINE_LIBS" >&6; } -printf "%s\n" "#define HAVE_LIBREADLINE 1" >>confdefs.h +$as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h fi fi if test "$py_cv_lib_readline" = yes; then # check for readline 2.2 - ac_fn_check_decl "$LINENO" "rl_completion_append_character" "ac_cv_have_decl_rl_completion_append_character" " + ac_fn_c_check_decl "$LINENO" "rl_completion_append_character" "ac_cv_have_decl_rl_completion_append_character" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -18020,14 +15787,14 @@ if test "$py_cv_lib_readline" = yes; then # include #endif -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_rl_completion_append_character" = xyes -then : +" +if test "x$ac_cv_have_decl_rl_completion_append_character" = xyes; then : -printf "%s\n" "#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1" >>confdefs.h +$as_echo "#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1" >>confdefs.h fi - ac_fn_check_decl "$LINENO" "rl_completion_suppress_append" "ac_cv_have_decl_rl_completion_suppress_append" " + + ac_fn_c_check_decl "$LINENO" "rl_completion_suppress_append" "ac_cv_have_decl_rl_completion_suppress_append" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -18035,22 +15802,21 @@ fi # include #endif -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_rl_completion_suppress_append" = xyes -then : +" +if test "x$ac_cv_have_decl_rl_completion_suppress_append" = xyes; then : -printf "%s\n" "#define HAVE_RL_COMPLETION_SUPPRESS_APPEND 1" >>confdefs.h +$as_echo "#define HAVE_RL_COMPLETION_SUPPRESS_APPEND 1" >>confdefs.h fi + # check for readline 4.0 - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_pre_input_hook" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -l$LIBREADLINE" >&5 -printf %s "checking for rl_pre_input_hook in -l$LIBREADLINE... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_pre_input_hook" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -l$LIBREADLINE" >&5 +$as_echo_n "checking for rl_pre_input_hook in -l$LIBREADLINE... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18059,44 +15825,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char rl_pre_input_hook (); int -main (void) +main () { return rl_pre_input_hook (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : -printf "%s\n" "#define HAVE_RL_PRE_INPUT_HOOK 1" >>confdefs.h +$as_echo "#define HAVE_RL_PRE_INPUT_HOOK 1" >>confdefs.h fi # also in 4.0 - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_completion_display_matches_hook" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -l$LIBREADLINE" >&5 -printf %s "checking for rl_completion_display_matches_hook in -l$LIBREADLINE... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_completion_display_matches_hook" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -l$LIBREADLINE" >&5 +$as_echo_n "checking for rl_completion_display_matches_hook in -l$LIBREADLINE... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18105,44 +15871,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char rl_completion_display_matches_hook (); int -main (void) +main () { return rl_completion_display_matches_hook (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : -printf "%s\n" "#define HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK 1" >>confdefs.h +$as_echo "#define HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK 1" >>confdefs.h fi # also in 4.0, but not in editline - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_resize_terminal" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_resize_terminal in -l$LIBREADLINE" >&5 -printf %s "checking for rl_resize_terminal in -l$LIBREADLINE... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_resize_terminal" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_resize_terminal in -l$LIBREADLINE" >&5 +$as_echo_n "checking for rl_resize_terminal in -l$LIBREADLINE... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18151,44 +15917,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char rl_resize_terminal (); int -main (void) +main () { return rl_resize_terminal (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : -printf "%s\n" "#define HAVE_RL_RESIZE_TERMINAL 1" >>confdefs.h +$as_echo "#define HAVE_RL_RESIZE_TERMINAL 1" >>confdefs.h fi # check for readline 4.2 - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_rl_completion_matches" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -l$LIBREADLINE" >&5 -printf %s "checking for rl_completion_matches in -l$LIBREADLINE... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_rl_completion_matches" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -l$LIBREADLINE" >&5 +$as_echo_n "checking for rl_completion_matches in -l$LIBREADLINE... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18197,38 +15963,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char rl_completion_matches (); int -main (void) +main () { return rl_completion_matches (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : -printf "%s\n" "#define HAVE_RL_COMPLETION_MATCHES 1" >>confdefs.h +$as_echo "#define HAVE_RL_COMPLETION_MATCHES 1" >>confdefs.h fi # also in readline 4.2 - ac_fn_check_decl "$LINENO" "rl_catch_signals" "ac_cv_have_decl_rl_catch_signals" " + ac_fn_c_check_decl "$LINENO" "rl_catch_signals" "ac_cv_have_decl_rl_catch_signals" " #include /* Must be first for Gnu Readline */ #ifdef WITH_EDITLINE # include @@ -18236,21 +16003,20 @@ fi # include #endif -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_rl_catch_signals" = xyes -then : +" +if test "x$ac_cv_have_decl_rl_catch_signals" = xyes; then : -printf "%s\n" "#define HAVE_RL_CATCH_SIGNAL 1" >>confdefs.h +$as_echo "#define HAVE_RL_CATCH_SIGNAL 1" >>confdefs.h fi - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$LIBREADLINE""_append_history" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for append_history in -l$LIBREADLINE" >&5 -printf %s "checking for append_history in -l$LIBREADLINE... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + + as_ac_Lib=`$as_echo "ac_cv_lib_$LIBREADLINE''_append_history" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for append_history in -l$LIBREADLINE" >&5 +$as_echo_n "checking for append_history in -l$LIBREADLINE... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$LIBREADLINE $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18259,32 +16025,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char append_history (); int -main (void) +main () { return append_history (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : -printf "%s\n" "#define HAVE_RL_APPEND_HISTORY 1" >>confdefs.h +$as_echo "#define HAVE_RL_APPEND_HISTORY 1" >>confdefs.h fi @@ -18293,17 +16060,15 @@ fi # End of readline checks: restore LIBS LIBS=$LIBS_no_readline -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken nice()" >&5 -printf %s "checking for broken nice()... " >&6; } -if test ${ac_cv_broken_nice+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken nice()" >&5 +$as_echo_n "checking for broken nice()... " >&6; } +if ${ac_cv_broken_nice+:} false; then : + $as_echo_n "(cached) " >&6 +else -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : ac_cv_broken_nice=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18318,10 +16083,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_broken_nice=yes -else $as_nop +else ac_cv_broken_nice=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18330,25 +16094,23 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_nice" >&5 -printf "%s\n" "$ac_cv_broken_nice" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_nice" >&5 +$as_echo "$ac_cv_broken_nice" >&6; } if test "$ac_cv_broken_nice" = yes then -printf "%s\n" "#define HAVE_BROKEN_NICE 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_NICE 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken poll()" >&5 -printf %s "checking for broken poll()... " >&6; } -if test ${ac_cv_broken_poll+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken poll()" >&5 +$as_echo_n "checking for broken poll()... " >&6; } +if ${ac_cv_broken_poll+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_broken_poll=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18372,10 +16134,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_broken_poll=yes -else $as_nop +else ac_cv_broken_poll=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18384,27 +16145,25 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_poll" >&5 -printf "%s\n" "$ac_cv_broken_poll" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_poll" >&5 +$as_echo "$ac_cv_broken_poll" >&6; } if test "$ac_cv_broken_poll" = yes then -printf "%s\n" "#define HAVE_BROKEN_POLL 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_POLL 1" >>confdefs.h fi # check tzset(3) exists and works like we expect it to -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working tzset()" >&5 -printf %s "checking for working tzset()... " >&6; } -if test ${ac_cv_working_tzset+y} -then : - printf %s "(cached) " >&6 -else $as_nop - -if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working tzset()" >&5 +$as_echo_n "checking for working tzset()... " >&6; } +if ${ac_cv_working_tzset+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : ac_cv_working_tzset=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18472,10 +16231,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_working_tzset=yes -else $as_nop +else ac_cv_working_tzset=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18484,27 +16242,26 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_tzset" >&5 -printf "%s\n" "$ac_cv_working_tzset" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_tzset" >&5 +$as_echo "$ac_cv_working_tzset" >&6; } if test "$ac_cv_working_tzset" = yes then -printf "%s\n" "#define HAVE_WORKING_TZSET 1" >>confdefs.h +$as_echo "#define HAVE_WORKING_TZSET 1" >>confdefs.h fi # Look for subsecond timestamps in struct stat -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tv_nsec in struct stat" >&5 -printf %s "checking for tv_nsec in struct stat... " >&6; } -if test ${ac_cv_stat_tv_nsec+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tv_nsec in struct stat" >&5 +$as_echo_n "checking for tv_nsec in struct stat... " >&6; } +if ${ac_cv_stat_tv_nsec+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { struct stat st; @@ -18514,36 +16271,34 @@ st.st_mtim.tv_nsec = 1; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_stat_tv_nsec=yes -else $as_nop +else ac_cv_stat_tv_nsec=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec" >&5 -printf "%s\n" "$ac_cv_stat_tv_nsec" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec" >&5 +$as_echo "$ac_cv_stat_tv_nsec" >&6; } if test "$ac_cv_stat_tv_nsec" = yes then -printf "%s\n" "#define HAVE_STAT_TV_NSEC 1" >>confdefs.h +$as_echo "#define HAVE_STAT_TV_NSEC 1" >>confdefs.h fi # Look for BSD style subsecond timestamps in struct stat -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tv_nsec2 in struct stat" >&5 -printf %s "checking for tv_nsec2 in struct stat... " >&6; } -if test ${ac_cv_stat_tv_nsec2+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tv_nsec2 in struct stat" >&5 +$as_echo_n "checking for tv_nsec2 in struct stat... " >&6; } +if ${ac_cv_stat_tv_nsec2+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { struct stat st; @@ -18553,21 +16308,20 @@ st.st_mtimespec.tv_nsec = 1; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_stat_tv_nsec2=yes -else $as_nop +else ac_cv_stat_tv_nsec2=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec2" >&5 -printf "%s\n" "$ac_cv_stat_tv_nsec2" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_stat_tv_nsec2" >&5 +$as_echo "$ac_cv_stat_tv_nsec2" >&6; } if test "$ac_cv_stat_tv_nsec2" = yes then -printf "%s\n" "#define HAVE_STAT_TV_NSEC2 1" >>confdefs.h +$as_echo "#define HAVE_STAT_TV_NSEC2 1" >>confdefs.h fi @@ -18577,46 +16331,50 @@ if test "$cross_compiling" = no; then CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw" fi -ac_fn_c_check_header_compile "$LINENO" "curses.h" "ac_cv_header_curses_h" "$ac_includes_default" -if test "x$ac_cv_header_curses_h" = xyes -then : - printf "%s\n" "#define HAVE_CURSES_H 1" >>confdefs.h +for ac_header in curses.h ncurses.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" -if test "x$ac_cv_header_ncurses_h" = xyes -then : - printf "%s\n" "#define HAVE_NCURSES_H 1" >>confdefs.h -fi +done # On Solaris, term.h requires curses.h -ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" " +for ac_header in term.h +do : + ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" " #ifdef HAVE_CURSES_H #include #endif " -if test "x$ac_cv_header_term_h" = xyes -then : - printf "%s\n" "#define HAVE_TERM_H 1" >>confdefs.h +if test "x$ac_cv_header_term_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TERM_H 1 +_ACEOF fi +done + # On HP/UX 11.0, mvwdelch is a block with a return statement -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mvwdelch is an expression" >&5 -printf %s "checking whether mvwdelch is an expression... " >&6; } -if test ${ac_cv_mvwdelch_is_expression+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mvwdelch is an expression" >&5 +$as_echo_n "checking whether mvwdelch is an expression... " >&6; } +if ${ac_cv_mvwdelch_is_expression+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int rtn; @@ -18626,22 +16384,21 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_mvwdelch_is_expression=yes -else $as_nop +else ac_cv_mvwdelch_is_expression=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mvwdelch_is_expression" >&5 -printf "%s\n" "$ac_cv_mvwdelch_is_expression" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mvwdelch_is_expression" >&5 +$as_echo "$ac_cv_mvwdelch_is_expression" >&6; } if test "$ac_cv_mvwdelch_is_expression" = yes then -printf "%s\n" "#define MVWDELCH_IS_EXPRESSION 1" >>confdefs.h +$as_echo "#define MVWDELCH_IS_EXPRESSION 1" >>confdefs.h fi @@ -18649,12 +16406,11 @@ fi # structs since version 5.7. If the macro is defined as zero before including # [n]curses.h, ncurses will expose fields of the structs regardless of the # configuration. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether WINDOW has _flags" >&5 -printf %s "checking whether WINDOW has _flags... " >&6; } -if test ${ac_cv_window_has_flags+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether WINDOW has _flags" >&5 +$as_echo_n "checking whether WINDOW has _flags... " >&6; } +if ${ac_cv_window_has_flags+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18662,7 +16418,7 @@ else $as_nop #include int -main (void) +main () { WINDOW *w; @@ -18672,33 +16428,32 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_window_has_flags=yes -else $as_nop +else ac_cv_window_has_flags=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_window_has_flags" >&5 -printf "%s\n" "$ac_cv_window_has_flags" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_window_has_flags" >&5 +$as_echo "$ac_cv_window_has_flags" >&6; } if test "$ac_cv_window_has_flags" = yes then -printf "%s\n" "#define WINDOW_HAS_FLAGS 1" >>confdefs.h +$as_echo "#define WINDOW_HAS_FLAGS 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_pad" >&5 -printf %s "checking for is_pad... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_pad" >&5 +$as_echo_n "checking for is_pad... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef is_pad @@ -18709,108 +16464,104 @@ void *x=is_pad return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_IS_PAD 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_IS_PAD 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for is_term_resized" >&5 -printf %s "checking for is_term_resized... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_term_resized" >&5 +$as_echo_n "checking for is_term_resized... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=is_term_resized ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_IS_TERM_RESIZED 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_IS_TERM_RESIZED 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for resize_term" >&5 -printf %s "checking for resize_term... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for resize_term" >&5 +$as_echo_n "checking for resize_term... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=resize_term ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_RESIZE_TERM 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_RESIZE_TERM 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for resizeterm" >&5 -printf %s "checking for resizeterm... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for resizeterm" >&5 +$as_echo_n "checking for resizeterm... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { void *x=resizeterm ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_RESIZETERM 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_RESIZETERM 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for immedok" >&5 -printf %s "checking for immedok... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for immedok" >&5 +$as_echo_n "checking for immedok... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef immedok @@ -18821,27 +16572,26 @@ void *x=immedok return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_IMMEDOK 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_IMMEDOK 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for syncok" >&5 -printf %s "checking for syncok... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for syncok" >&5 +$as_echo_n "checking for syncok... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef syncok @@ -18852,27 +16602,26 @@ void *x=syncok return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_SYNCOK 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_SYNCOK 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5 -printf %s "checking for wchgat... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5 +$as_echo_n "checking for wchgat... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef wchgat @@ -18883,27 +16632,26 @@ void *x=wchgat return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for filter" >&5 -printf %s "checking for filter... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for filter" >&5 +$as_echo_n "checking for filter... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef filter @@ -18914,27 +16662,26 @@ void *x=filter return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_FILTER 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_FILTER 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for has_key" >&5 -printf %s "checking for has_key... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for has_key" >&5 +$as_echo_n "checking for has_key... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef has_key @@ -18945,27 +16692,26 @@ void *x=has_key return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_HAS_KEY 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_HAS_KEY 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for typeahead" >&5 -printf %s "checking for typeahead... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for typeahead" >&5 +$as_echo_n "checking for typeahead... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef typeahead @@ -18976,27 +16722,26 @@ void *x=typeahead return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_TYPEAHEAD 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_TYPEAHEAD 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for use_env" >&5 -printf %s "checking for use_env... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for use_env" >&5 +$as_echo_n "checking for use_env... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { #ifndef use_env @@ -19007,48 +16752,46 @@ void *x=use_env return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -printf "%s\n" "#define HAVE_CURSES_USE_ENV 1" >>confdefs.h +$as_echo "#define HAVE_CURSES_USE_ENV 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # last curses configure check CPPFLAGS=$ac_save_cppflags -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for device files" >&5 -printf "%s\n" "$as_me: checking for device files" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for device files" >&5 +$as_echo "$as_me: checking for device files" >&6;} if test "x$cross_compiling" = xyes; then if test "${ac_cv_file__dev_ptmx+set}" != set; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 -printf %s "checking for /dev/ptmx... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not set" >&5 -printf "%s\n" "not set" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 +$as_echo_n "checking for /dev/ptmx... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not set" >&5 +$as_echo "not set" >&6; } as_fn_error $? "set ac_cv_file__dev_ptmx to yes/no in your CONFIG_SITE file when cross compiling" "$LINENO" 5 fi if test "${ac_cv_file__dev_ptc+set}" != set; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 -printf %s "checking for /dev/ptc... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not set" >&5 -printf "%s\n" "not set" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 +$as_echo_n "checking for /dev/ptc... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not set" >&5 +$as_echo "not set" >&6; } as_fn_error $? "set ac_cv_file__dev_ptc to yes/no in your CONFIG_SITE file when cross compiling" "$LINENO" 5 fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 -printf %s "checking for /dev/ptmx... " >&6; } -if test ${ac_cv_file__dev_ptmx+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptmx" >&5 +$as_echo_n "checking for /dev/ptmx... " >&6; } +if ${ac_cv_file__dev_ptmx+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/ptmx"; then @@ -19057,24 +16800,22 @@ else ac_cv_file__dev_ptmx=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptmx" >&5 -printf "%s\n" "$ac_cv_file__dev_ptmx" >&6; } -if test "x$ac_cv_file__dev_ptmx" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptmx" >&5 +$as_echo "$ac_cv_file__dev_ptmx" >&6; } +if test "x$ac_cv_file__dev_ptmx" = xyes; then : fi if test "x$ac_cv_file__dev_ptmx" = xyes; then -printf "%s\n" "#define HAVE_DEV_PTMX 1" >>confdefs.h +$as_echo "#define HAVE_DEV_PTMX 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 -printf %s "checking for /dev/ptc... " >&6; } -if test ${ac_cv_file__dev_ptc+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc" >&5 +$as_echo_n "checking for /dev/ptc... " >&6; } +if ${ac_cv_file__dev_ptc+:} false; then : + $as_echo_n "(cached) " >&6 +else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/dev/ptc"; then @@ -19083,16 +16824,15 @@ else ac_cv_file__dev_ptc=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptc" >&5 -printf "%s\n" "$ac_cv_file__dev_ptc" >&6; } -if test "x$ac_cv_file__dev_ptc" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_ptc" >&5 +$as_echo "$ac_cv_file__dev_ptc" >&6; } +if test "x$ac_cv_file__dev_ptc" = xyes; then : fi if test "x$ac_cv_file__dev_ptc" = xyes; then -printf "%s\n" "#define HAVE_DEV_PTC 1" >>confdefs.h +$as_echo "#define HAVE_DEV_PTC 1" >>confdefs.h fi @@ -19101,17 +16841,15 @@ then LIBS="$LIBS -framework CoreFoundation" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for %zd printf() format support" >&5 -printf %s "checking for %zd printf() format support... " >&6; } -if test ${ac_cv_have_size_t_format+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for %zd printf() format support" >&5 +$as_echo_n "checking for %zd printf() format support... " >&6; } +if ${ac_cv_have_size_t_format+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_have_size_t_format="cross -- assuming yes" -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19151,10 +16889,9 @@ int main() } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_have_size_t_format=yes -else $as_nop +else ac_cv_have_size_t_format=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19162,11 +16899,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_size_t_format" >&5 -printf "%s\n" "$ac_cv_have_size_t_format" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_size_t_format" >&5 +$as_echo "$ac_cv_have_size_t_format" >&6; } if test "$ac_cv_have_size_t_format" != no ; then -printf "%s\n" "#define PY_FORMAT_SIZE_T \"z\"" >>confdefs.h +$as_echo "#define PY_FORMAT_SIZE_T \"z\"" >>confdefs.h fi @@ -19179,26 +16916,23 @@ ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " #endif " -if test "x$ac_cv_type_socklen_t" = xyes -then : +if test "x$ac_cv_type_socklen_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define socklen_t int" >>confdefs.h +$as_echo "#define socklen_t int" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken mbstowcs" >&5 -printf %s "checking for broken mbstowcs... " >&6; } -if test ${ac_cv_broken_mbstowcs+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken mbstowcs" >&5 +$as_echo_n "checking for broken mbstowcs... " >&6; } +if ${ac_cv_broken_mbstowcs+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : ac_cv_broken_mbstowcs=no -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19212,10 +16946,9 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_broken_mbstowcs=no -else $as_nop +else ac_cv_broken_mbstowcs=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19224,60 +16957,57 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_mbstowcs" >&5 -printf "%s\n" "$ac_cv_broken_mbstowcs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_broken_mbstowcs" >&5 +$as_echo "$ac_cv_broken_mbstowcs" >&6; } if test "$ac_cv_broken_mbstowcs" = yes then -printf "%s\n" "#define HAVE_BROKEN_MBSTOWCS 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_MBSTOWCS 1" >>confdefs.h fi # Check for --with-computed-gotos -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-computed-gotos" >&5 -printf %s "checking for --with-computed-gotos... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-computed-gotos" >&5 +$as_echo_n "checking for --with-computed-gotos... " >&6; } # Check whether --with-computed-gotos was given. -if test ${with_computed_gotos+y} -then : +if test "${with_computed_gotos+set}" = set; then : withval=$with_computed_gotos; if test "$withval" = yes then -printf "%s\n" "#define USE_COMPUTED_GOTOS 1" >>confdefs.h +$as_echo "#define USE_COMPUTED_GOTOS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi if test "$withval" = no then -printf "%s\n" "#define USE_COMPUTED_GOTOS 0" >>confdefs.h +$as_echo "#define USE_COMPUTED_GOTOS 0" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 -printf "%s\n" "no value specified" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no value specified" >&5 +$as_echo "no value specified" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports computed gotos" >&5 -printf %s "checking whether $CC supports computed gotos... " >&6; } -if test ${ac_cv_computed_gotos+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports computed gotos" >&5 +$as_echo_n "checking whether $CC supports computed gotos... " >&6; } +if ${ac_cv_computed_gotos+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : if test "${with_computed_gotos+set}" = set; then ac_cv_computed_gotos="$with_computed_gotos -- configured --with(out)-computed-gotos" else ac_cv_computed_gotos=no fi -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19293,10 +17023,9 @@ LABEL2: } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ac_cv_computed_gotos=yes -else $as_nop +else ac_cv_computed_gotos=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19305,18 +17034,18 @@ fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_computed_gotos" >&5 -printf "%s\n" "$ac_cv_computed_gotos" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_computed_gotos" >&5 +$as_echo "$ac_cv_computed_gotos" >&6; } case "$ac_cv_computed_gotos" in yes*) -printf "%s\n" "#define HAVE_COMPUTED_GOTOS 1" >>confdefs.h +$as_echo "#define HAVE_COMPUTED_GOTOS 1" >>confdefs.h esac case $ac_sys_system in AIX*) -printf "%s\n" "#define HAVE_BROKEN_PIPE_BUF 1" >>confdefs.h +$as_echo "#define HAVE_BROKEN_PIPE_BUF 1" >>confdefs.h ;; esac @@ -19330,26 +17059,26 @@ done SRCDIRS="Parser Objects Python Modules Modules/_io Programs" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5 -printf %s "checking for build directories... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5 +$as_echo_n "checking for build directories... " >&6; } for dir in $SRCDIRS; do if test ! -d $dir; then mkdir $dir fi done -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 -printf "%s\n" "done" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } # Availability of -O2: -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -O2" >&5 -printf %s "checking for -O2... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -O2" >&5 +$as_echo_n "checking for -O2... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { @@ -19357,30 +17086,28 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : have_O2=yes -else $as_nop +else have_O2=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_O2" >&5 -printf "%s\n" "$have_O2" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_O2" >&5 +$as_echo "$have_O2" >&6; } CFLAGS="$saved_cflags" # _FORTIFY_SOURCE wrappers for memmove and bcopy are incorrect: # http://sourceware.org/ml/libc-alpha/2010-12/msg00009.html -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glibc _FORTIFY_SOURCE/memmove bug" >&5 -printf %s "checking for glibc _FORTIFY_SOURCE/memmove bug... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glibc _FORTIFY_SOURCE/memmove bug" >&5 +$as_echo_n "checking for glibc _FORTIFY_SOURCE/memmove bug... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2 -D_FORTIFY_SOURCE=2" if test "$have_O2" = no; then CFLAGS="" fi -if test "$cross_compiling" = yes -then : +if test "$cross_compiling" = yes; then : have_glibc_memmove_bug=undefined -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19400,10 +17127,9 @@ int main() { } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : have_glibc_memmove_bug=no -else $as_nop +else have_glibc_memmove_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19411,11 +17137,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CFLAGS="$saved_cflags" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_glibc_memmove_bug" >&5 -printf "%s\n" "$have_glibc_memmove_bug" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_glibc_memmove_bug" >&5 +$as_echo "$have_glibc_memmove_bug" >&6; } if test "$have_glibc_memmove_bug" = yes; then -printf "%s\n" "#define HAVE_GLIBC_MEMMOVE_BUG 1" >>confdefs.h +$as_echo "#define HAVE_GLIBC_MEMMOVE_BUG 1" >>confdefs.h fi @@ -19425,14 +17151,13 @@ if test "$have_gcc_asm_for_x87" = yes; then # http://gcc.gnu.org/ml/gcc/2010-11/msg00366.html case $CC in *gcc*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc ipa-pure-const bug" >&5 -printf %s "checking for gcc ipa-pure-const bug... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc ipa-pure-const bug" >&5 +$as_echo_n "checking for gcc ipa-pure-const bug... " >&6; } saved_cflags="$CFLAGS" CFLAGS="-O2" - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : have_ipa_pure_const_bug=undefined -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19453,10 +17178,9 @@ else $as_nop } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : have_ipa_pure_const_bug=no -else $as_nop +else have_ipa_pure_const_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19464,11 +17188,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi CFLAGS="$saved_cflags" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_ipa_pure_const_bug" >&5 -printf "%s\n" "$have_ipa_pure_const_bug" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ipa_pure_const_bug" >&5 +$as_echo "$have_ipa_pure_const_bug" >&6; } if test "$have_ipa_pure_const_bug" = yes; then -printf "%s\n" "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h +$as_echo "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h fi ;; @@ -19476,8 +17200,8 @@ printf "%s\n" "#define HAVE_IPA_PURE_CONST_BUG 1" >>confdefs.h fi # Check for stdatomic.h -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdatomic.h" >&5 -printf %s "checking for stdatomic.h... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdatomic.h" >&5 +$as_echo_n "checking for stdatomic.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19494,27 +17218,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_stdatomic_h=yes -else $as_nop +else have_stdatomic_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_stdatomic_h" >&5 -printf "%s\n" "$have_stdatomic_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_stdatomic_h" >&5 +$as_echo "$have_stdatomic_h" >&6; } if test "$have_stdatomic_h" = yes; then -printf "%s\n" "#define HAVE_STD_ATOMIC 1" >>confdefs.h +$as_echo "#define HAVE_STD_ATOMIC 1" >>confdefs.h fi # Check for GCC >= 4.7 and clang __atomic builtin functions -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic_load_n and __atomic_store_n functions" >&5 -printf %s "checking for builtin __atomic_load_n and __atomic_store_n functions... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic_load_n and __atomic_store_n functions" >&5 +$as_echo_n "checking for builtin __atomic_load_n and __atomic_store_n functions... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19528,33 +17251,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_builtin_atomic=yes -else $as_nop +else have_builtin_atomic=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_builtin_atomic" >&5 -printf "%s\n" "$have_builtin_atomic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_builtin_atomic" >&5 +$as_echo "$have_builtin_atomic" >&6; } if test "$have_builtin_atomic" = yes; then -printf "%s\n" "#define HAVE_BUILTIN_ATOMIC 1" >>confdefs.h +$as_echo "#define HAVE_BUILTIN_ATOMIC 1" >>confdefs.h fi # ensurepip option -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ensurepip" >&5 -printf %s "checking for ensurepip... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ensurepip" >&5 +$as_echo_n "checking for ensurepip... " >&6; } # Check whether --with-ensurepip was given. -if test ${with_ensurepip+y} -then : +if test "${with_ensurepip+set}" = set; then : withval=$with_ensurepip; -else $as_nop +else with_ensurepip=upgrade fi @@ -19568,13 +17289,13 @@ case $with_ensurepip in #( *) : as_fn_error $? "--with-ensurepip=upgrade|install|no" "$LINENO" 5 ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ENSUREPIP" >&5 -printf "%s\n" "$ENSUREPIP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENSUREPIP" >&5 +$as_echo "$ENSUREPIP" >&6; } # check if the dirent structure of a d_type field and DT_UNKNOWN is defined -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the dirent structure of a d_type field" >&5 -printf %s "checking if the dirent structure of a d_type field... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the dirent structure of a d_type field" >&5 +$as_echo_n "checking if the dirent structure of a d_type field... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19588,26 +17309,25 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_dirent_d_type=yes -else $as_nop +else have_dirent_d_type=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_dirent_d_type" >&5 -printf "%s\n" "$have_dirent_d_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_dirent_d_type" >&5 +$as_echo "$have_dirent_d_type" >&6; } if test "$have_dirent_d_type" = yes; then -printf "%s\n" "#define HAVE_DIRENT_D_TYPE 1" >>confdefs.h +$as_echo "#define HAVE_DIRENT_D_TYPE 1" >>confdefs.h fi # check if the Linux getrandom() syscall is available -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Linux getrandom() syscall" >&5 -printf %s "checking for the Linux getrandom() syscall... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Linux getrandom() syscall" >&5 +$as_echo_n "checking for the Linux getrandom() syscall... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19627,27 +17347,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_getrandom_syscall=yes -else $as_nop +else have_getrandom_syscall=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getrandom_syscall" >&5 -printf "%s\n" "$have_getrandom_syscall" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getrandom_syscall" >&5 +$as_echo "$have_getrandom_syscall" >&6; } if test "$have_getrandom_syscall" = yes; then -printf "%s\n" "#define HAVE_GETRANDOM_SYSCALL 1" >>confdefs.h +$as_echo "#define HAVE_GETRANDOM_SYSCALL 1" >>confdefs.h fi # check if the getrandom() function is available # the test was written for the Solaris function of -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the getrandom() function" >&5 -printf %s "checking for the getrandom() function... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the getrandom() function" >&5 +$as_echo_n "checking for the getrandom() function... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19665,20 +17384,19 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : have_getrandom=yes -else $as_nop +else have_getrandom=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_getrandom" >&5 -printf "%s\n" "$have_getrandom" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_getrandom" >&5 +$as_echo "$have_getrandom" >&6; } if test "$have_getrandom" = yes; then -printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h +$as_echo "#define HAVE_GETRANDOM 1" >>confdefs.h fi @@ -19686,12 +17404,11 @@ fi # shm_* may only be available if linking against librt save_LIBS="$LIBS" save_includes_default="$ac_includes_default" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5 -printf %s "checking for library containing shm_open... " >&6; } -if test ${ac_cv_search_shm_open+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5 +$as_echo_n "checking for library containing shm_open... " >&6; } +if ${ac_cv_search_shm_open+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19699,64 +17416,67 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shm_open (); int -main (void) +main () { return shm_open (); ; return 0; } _ACEOF -for ac_lib in '' rt -do +for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shm_open=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_shm_open+y} -then : + if ${ac_cv_search_shm_open+:} false; then : break fi done -if test ${ac_cv_search_shm_open+y} -then : +if ${ac_cv_search_shm_open+:} false; then : -else $as_nop +else ac_cv_search_shm_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5 -printf "%s\n" "$ac_cv_search_shm_open" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5 +$as_echo "$ac_cv_search_shm_open" >&6; } ac_res=$ac_cv_search_shm_open -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$ac_cv_search_shm_open" = "-lrt"; then -printf "%s\n" "#define SHM_NEEDS_LIBRT 1" >>confdefs.h +$as_echo "#define SHM_NEEDS_LIBRT 1" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h +for ac_header in sys/mman.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_MMAN_H 1 +_ACEOF fi +done + # temporarily override ac_includes_default for AC_CHECK_FUNCS below ac_includes_default="\ ${ac_includes_default} @@ -19766,18 +17486,17 @@ ${ac_includes_default} # endif #endif " -ac_fn_c_check_func "$LINENO" "shm_open" "ac_cv_func_shm_open" -if test "x$ac_cv_func_shm_open" = xyes -then : - printf "%s\n" "#define HAVE_SHM_OPEN 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "shm_unlink" "ac_cv_func_shm_unlink" -if test "x$ac_cv_func_shm_unlink" = xyes -then : - printf "%s\n" "#define HAVE_SHM_UNLINK 1" >>confdefs.h +for ac_func in shm_open shm_unlink +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi +done # we don't want to link with librt always, restore LIBS LIBS="$save_LIBS" @@ -19788,8 +17507,7 @@ ac_includes_default="$save_includes_default" found=false # Check whether --with-openssl was given. -if test ${with_openssl+y} -then : +if test "${with_openssl+set}" = set; then : withval=$with_openssl; case "$withval" in "" | y | ye | yes | n | no) @@ -19799,19 +17517,18 @@ then : ;; esac -else $as_nop +else # if pkg-config is installed and openssl has installed a .pc file, # then use that information and don't search ssldirs if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_PKG_CONFIG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else @@ -19819,15 +17536,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19838,11 +17551,11 @@ fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -printf "%s\n" "$PKG_CONFIG" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -19851,12 +17564,11 @@ if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_PKG_CONFIG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else @@ -19864,15 +17576,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19883,11 +17591,11 @@ fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 -printf "%s\n" "$ac_ct_PKG_CONFIG" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 +$as_echo "$ac_ct_PKG_CONFIG" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_PKG_CONFIG" = x; then @@ -19895,8 +17603,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_ct_PKG_CONFIG @@ -19930,19 +17638,19 @@ fi if ! $found; then OPENSSL_INCLUDES= for ssldir in $ssldirs; do - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl/ssl.h in $ssldir" >&5 -printf %s "checking for openssl/ssl.h in $ssldir... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl/ssl.h in $ssldir" >&5 +$as_echo_n "checking for openssl/ssl.h in $ssldir... " >&6; } if test -f "$ssldir/include/openssl/ssl.h"; then OPENSSL_INCLUDES="-I$ssldir/include" OPENSSL_LDFLAGS="-L$ssldir/lib" OPENSSL_LIBS="-lssl -lcrypto" found=true - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done @@ -19953,8 +17661,8 @@ printf "%s\n" "no" >&6; } # try the preprocessor and linker with our new flags, # being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiling and linking against OpenSSL works" >&5 -printf %s "checking whether compiling and linking against OpenSSL works... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiling and linking against OpenSSL works" >&5 +$as_echo_n "checking whether compiling and linking against OpenSSL works... " >&6; } echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \ "OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&5 @@ -19968,28 +17676,27 @@ printf %s "checking whether compiling and linking against OpenSSL works... " >&6 /* end confdefs.h. */ #include int -main (void) +main () { SSL_new(NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } have_openssl=yes -else $as_nop +else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } have_openssl=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" @@ -20000,70 +17707,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ -if test "$have_openssl" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X509_VERIFY_PARAM_set1_host in libssl" >&5 -printf %s "checking for X509_VERIFY_PARAM_set1_host in libssl... " >&6; } - - save_LIBS="$LIBS" - save_LDFLAGS="$LDFLAGS" - save_CPPFLAGS="$CPPFLAGS" - LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS" - LIBS="$OPENSSL_LIBS $LIBS" - CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - X509_VERIFY_PARAM *p = X509_VERIFY_PARAM_new(); - X509_VERIFY_PARAM_set1_host(p, "localhost", 0); - X509_VERIFY_PARAM_set1_ip_asc(p, "127.0.0.1"); - X509_VERIFY_PARAM_set_hostflags(p, 0); - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - - ac_cv_has_x509_verify_param_set1_host=yes - -else $as_nop - - ac_cv_has_x509_verify_param_set1_host=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_x509_verify_param_set1_host" >&5 -printf "%s\n" "$ac_cv_has_x509_verify_param_set1_host" >&6; } - if test "$ac_cv_has_x509_verify_param_set1_host" = "yes"; then - -printf "%s\n" "#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1" >>confdefs.h - - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" -fi - # rpath to libssl and libcrypto -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-openssl-rpath" >&5 -printf %s "checking for --with-openssl-rpath... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openssl-rpath" >&5 +$as_echo_n "checking for --with-openssl-rpath... " >&6; } # Check whether --with-openssl-rpath was given. -if test ${with_openssl_rpath+y} -then : +if test "${with_openssl_rpath+set}" = set; then : withval=$with_openssl_rpath; -else $as_nop +else with_openssl_rpath=no fi @@ -20074,54 +17725,54 @@ case $with_openssl_rpath in #( no) : OPENSSL_RPATH= ;; #( *) : - if test -d "$with_openssl_rpath" -then : + if test -d "$with_openssl_rpath"; then : OPENSSL_RPATH="$with_openssl_rpath" -else $as_nop +else as_fn_error $? "--with-openssl-rpath \"$with_openssl_rpath\" is not a directory" "$LINENO" 5 fi ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OPENSSL_RPATH" >&5 -printf "%s\n" "$OPENSSL_RPATH" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENSSL_RPATH" >&5 +$as_echo "$OPENSSL_RPATH" >&6; } # ssl module default cipher suite string -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-ssl-default-suites" >&5 -printf %s "checking for --with-ssl-default-suites... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ssl-default-suites" >&5 +$as_echo_n "checking for --with-ssl-default-suites... " >&6; } # Check whether --with-ssl-default-suites was given. -if test ${with_ssl_default_suites+y} -then : +if test "${with_ssl_default_suites+set}" = set; then : withval=$with_ssl_default_suites; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } case "$withval" in python) - printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h + $as_echo "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h ;; openssl) - printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 2" >>confdefs.h + $as_echo "#define PY_SSL_DEFAULT_CIPHERS 2" >>confdefs.h ;; *) - printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 0" >>confdefs.h + $as_echo "#define PY_SSL_DEFAULT_CIPHERS 0" >>confdefs.h - printf "%s\n" "#define PY_SSL_DEFAULT_CIPHER_STRING \"$withval\"" >>confdefs.h + cat >>confdefs.h <<_ACEOF +#define PY_SSL_DEFAULT_CIPHER_STRING "$withval" +_ACEOF ;; esac -else $as_nop +else -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: python" >&5 -printf "%s\n" "python" >&6; } -printf "%s\n" "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: python" >&5 +$as_echo "python" >&6; } +$as_echo "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h fi @@ -20130,14 +17781,13 @@ fi # builtin hash modules default_hashlib_hashes="md5,sha1,sha256,sha512,sha3,blake2" -printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES /**/" >>confdefs.h +$as_echo "#define PY_BUILTIN_HASHLIB_HASHES /**/" >>confdefs.h -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-builtin-hashlib-hashes" >&5 -printf %s "checking for --with-builtin-hashlib-hashes... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-builtin-hashlib-hashes" >&5 +$as_echo_n "checking for --with-builtin-hashlib-hashes... " >&6; } # Check whether --with-builtin-hashlib-hashes was given. -if test ${with_builtin_hashlib_hashes+y} -then : +if test "${with_builtin_hashlib_hashes+set}" = set; then : withval=$with_builtin_hashlib_hashes; case "$withval" in yes) @@ -20147,16 +17797,20 @@ case "$withval" in withval="" ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -printf "%s\n" "$withval" >&6; } -printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES \"$withval\"" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } +cat >>confdefs.h <<_ACEOF +#define PY_BUILTIN_HASHLIB_HASHES "$withval" +_ACEOF -else $as_nop +else -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $default_hashlib_hashes" >&5 -printf "%s\n" "$default_hashlib_hashes" >&6; }; -printf "%s\n" "#define PY_BUILTIN_HASHLIB_HASHES \"$default_hashlib_hashes\"" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $default_hashlib_hashes" >&5 +$as_echo "$default_hashlib_hashes" >&6; }; +cat >>confdefs.h <<_ACEOF +#define PY_BUILTIN_HASHLIB_HASHES "$default_hashlib_hashes" +_ACEOF fi @@ -20164,50 +17818,48 @@ fi # --with-experimental-isolated-subinterpreters -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-experimental-isolated-subinterpreters" >&5 -printf %s "checking for --with-experimental-isolated-subinterpreters... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-experimental-isolated-subinterpreters" >&5 +$as_echo_n "checking for --with-experimental-isolated-subinterpreters... " >&6; } # Check whether --with-experimental-isolated-subinterpreters was given. -if test ${with_experimental_isolated_subinterpreters+y} -then : +if test "${with_experimental_isolated_subinterpreters+set}" = set; then : withval=$with_experimental_isolated_subinterpreters; if test "$withval" != no then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; }; - printf "%s\n" "#define EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; + $as_echo "#define EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 1" >>confdefs.h else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # --with-static-libpython STATIC_LIBPYTHON=1 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-static-libpython" >&5 -printf %s "checking for --with-static-libpython... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-static-libpython" >&5 +$as_echo_n "checking for --with-static-libpython... " >&6; } # Check whether --with-static-libpython was given. -if test ${with_static_libpython+y} -then : +if test "${with_static_libpython+set}" = set; then : withval=$with_static_libpython; if test "$withval" = no then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; STATIC_LIBPYTHON=0 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; }; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; fi -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)' @@ -20224,22 +17876,21 @@ fi # Check whether to disable test modules. Once set, setup.py will not build # test extension modules and "make install" will not install test suites. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --disable-test-modules" >&5 -printf %s "checking for --disable-test-modules... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --disable-test-modules" >&5 +$as_echo_n "checking for --disable-test-modules... " >&6; } # Check whether --enable-test-modules was given. -if test ${enable_test_modules+y} -then : +if test "${enable_test_modules+set}" = set; then : enableval=$enable_test_modules; fi if test "$enable_test_modules" = no; then TEST_MODULES=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else TEST_MODULES=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -20276,8 +17927,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -20307,15 +17958,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -20329,8 +17980,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20347,7 +17998,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -20364,8 +18015,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -20388,16 +18039,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -20407,46 +18056,46 @@ esac fi - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -20455,6 +18104,13 @@ if ${PATH_SEPARATOR+false} :; then fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -20463,12 +18119,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -20480,10 +18132,30 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -20496,14 +18168,13 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -20530,20 +18201,18 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset - # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -20555,13 +18224,12 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -20592,7 +18260,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -20614,10 +18282,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -20631,12 +18295,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -20678,7 +18336,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -20687,7 +18345,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -20750,7 +18408,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by python $as_me 3.10, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -20808,16 +18466,14 @@ $config_headers Report bugs to ." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ python config.status 3.10 -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -20856,15 +18512,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -20872,7 +18528,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -20881,7 +18537,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -20909,7 +18565,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -20923,7 +18579,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -20957,8 +18613,8 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree @@ -21294,7 +18950,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -21302,17 +18958,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -21329,7 +18985,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21353,9 +19009,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -21417,8 +19073,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -21462,9 +19118,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -21480,20 +19136,20 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi @@ -21539,8 +19195,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -21564,4 +19220,3 @@ if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then echo "" >&6 echo "" >&6 fi - diff --git a/configure.ac b/configure.ac index 8b3ab1e16f6af..3df9bd0acec62 100644 --- a/configure.ac +++ b/configure.ac @@ -5781,42 +5781,6 @@ ac_includes_default="$save_includes_default" # Check for usable OpenSSL AX_CHECK_OPENSSL([have_openssl=yes],[have_openssl=no]) -if test "$have_openssl" = yes; then - AC_MSG_CHECKING([for X509_VERIFY_PARAM_set1_host in libssl]) - - save_LIBS="$LIBS" - save_LDFLAGS="$LDFLAGS" - save_CPPFLAGS="$CPPFLAGS" - LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS" - LIBS="$OPENSSL_LIBS $LIBS" - CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS" - - AC_LINK_IFELSE([AC_LANG_PROGRAM([ - [#include ] - ], [ - [X509_VERIFY_PARAM *p = X509_VERIFY_PARAM_new();] - [X509_VERIFY_PARAM_set1_host(p, "localhost", 0);] - [X509_VERIFY_PARAM_set1_ip_asc(p, "127.0.0.1");] - [X509_VERIFY_PARAM_set_hostflags(p, 0);] - ]) - ], - [ - ac_cv_has_x509_verify_param_set1_host=yes - ], - [ - ac_cv_has_x509_verify_param_set1_host=no - ]) - AC_MSG_RESULT($ac_cv_has_x509_verify_param_set1_host) - if test "$ac_cv_has_x509_verify_param_set1_host" = "yes"; then - AC_DEFINE(HAVE_X509_VERIFY_PARAM_SET1_HOST, 1, - [Define if libssl has X509_VERIFY_PARAM_set1_host and related function]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" -fi - # rpath to libssl and libcrypto AC_MSG_CHECKING(for --with-openssl-rpath) AC_ARG_WITH(openssl-rpath, diff --git a/pyconfig.h.in b/pyconfig.h.in index 9b713ac93e75e..6e54d553b7750 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1356,9 +1356,6 @@ /* Define to 1 if you have the `writev' function. */ #undef HAVE_WRITEV -/* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ -#undef HAVE_X509_VERIFY_PARAM_SET1_HOST - /* Define if the zlib library has inflateCopy */ #undef HAVE_ZLIB_COPY diff --git a/setup.py b/setup.py index f8b7a17e772b1..605f7d628e733 100644 --- a/setup.py +++ b/setup.py @@ -551,10 +551,7 @@ def print_three_column(lst): for l in (self.missing, self.failed, self.failed_on_import)): print() print("Could not build the ssl module!") - print("Python requires an OpenSSL 1.0.2 or 1.1 compatible " - "libssl with X509_VERIFY_PARAM_set1_host().") - print("LibreSSL 2.6.4 and earlier do not provide the necessary " - "APIs, https://github.com/libressl-portable/portable/issues/381") + print("Python requires a OpenSSL 1.1.1 or newer") if sysconfig.get_config_var("OPENSSL_LDFLAGS"): print("Custom linker flags may require --with-openssl-rpath=auto") print() @@ -2431,13 +2428,13 @@ def split_var(name, sep): self.missing.extend(['_ssl', '_hashlib']) return None, None - # OpenSSL 1.0.2 uses Kerberos for KRB5 ciphers - krb5_h = find_file( - 'krb5.h', self.inc_dirs, - ['/usr/kerberos/include'] + self.add(Extension( + '_ssl', ['_ssl.c'], + include_dirs=openssl_includes, + library_dirs=openssl_libdirs, + libraries=openssl_libs, + depends=['socketmodule.h', '_ssl/debughelpers.c']) ) - if krb5_h: - ssl_incs.extend(krb5_h) if openssl_rpath == 'auto': runtime_library_dirs = openssl_libdirs[:] @@ -2468,24 +2465,14 @@ def split_var(name, sep): # don't link OpenSSL shared libraries. openssl_extension_kwargs["libraries"] = [] - if config_vars.get("HAVE_X509_VERIFY_PARAM_SET1_HOST"): - self.add( - Extension( - '_ssl', - ['_ssl.c'], - depends=[ - 'socketmodule.h', - '_ssl/debughelpers.c', - '_ssl_data.h', - '_ssl_data_111.h', - '_ssl_data_300.h', - ], - **openssl_extension_kwargs - ) + self.add( + Extension( + '_ssl', + ['_ssl.c'], + depends=['socketmodule.h', '_ssl/debughelpers.c'], + **openssl_extension_kwargs ) - else: - self.missing.append('_ssl') - + ) self.add( Extension( '_hashlib', From webhook-mailer at python.org Sat Apr 17 05:59:43 2021 From: webhook-mailer at python.org (vstinner) Date: Sat, 17 Apr 2021 09:59:43 -0000 Subject: [Python-checkins] Fix a typo in subprocess documentation (GH-25426) Message-ID: https://github.com/python/cpython/commit/ea39f82b97e0625334af560ef9876684d8e5abeb commit: ea39f82b97e0625334af560ef9876684d8e5abeb branch: master author: andrei kulakov committer: vstinner date: 2021-04-17T11:59:18+02:00 summary: Fix a typo in subprocess documentation (GH-25426) Fix a typo per conversation with vstinner on IRC: in posix => on posix. files: M Doc/library/subprocess.rst diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index 07b8ad77655db..b60db58d182e6 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -543,7 +543,7 @@ functions. If *cwd* is not ``None``, the function changes the working directory to *cwd* before executing the child. *cwd* can be a string, bytes or - :term:`path-like ` object. In POSIX, the function + :term:`path-like ` object. On POSIX, the function looks for *executable* (or for the first item in *args*) relative to *cwd* if the executable path is a relative path. From webhook-mailer at python.org Sat Apr 17 09:49:54 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 13:49:54 -0000 Subject: [Python-checkins] bpo-43669: Remove OpenSSL 0.9 to 1.1.0 specific documentation (GH-25453) Message-ID: https://github.com/python/cpython/commit/b8d0fa035d74ae6ae00794c9af636b427c5dc650 commit: b8d0fa035d74ae6ae00794c9af636b427c5dc650 branch: master author: Christian Heimes committer: tiran date: 2021-04-17T15:49:50+02:00 summary: bpo-43669: Remove OpenSSL 0.9 to 1.1.0 specific documentation (GH-25453) files: M Doc/library/hashlib.rst M Doc/library/ssl.rst M Modules/_ssl.c M Modules/clinic/_ssl.c.h diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 6f92152a77827..48c0bab1eb306 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -280,8 +280,6 @@ include a `salt `_. factor and *maxmem* limits memory (OpenSSL 1.1.0 defaults to 32 MiB). *dklen* is the length of the derived key. - .. availability:: OpenSSL 1.1+. - .. versionadded:: 3.6 diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index f7bdd56d2b31f..9f7459217a8fb 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -58,6 +58,11 @@ by SSL sockets created through the :meth:`SSLContext.wrap_socket` method. In the future the ssl module will require at least OpenSSL 1.0.2 or 1.1.0. +.. versionchanged:: 3.10 + + :pep:`644` has been implemented. The ssl module requires OpenSSL 1.1.1 + or newer. + Functions, Constants, and Exceptions ------------------------------------ @@ -325,19 +330,6 @@ Random generation :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random number generator. -.. function:: RAND_egd(path) - - If you are running an entropy-gathering daemon (EGD) somewhere, and *path* - is the pathname of a socket connection open to it, this will read 256 bytes - of randomness from the socket, and add it to the SSL pseudo-random number - generator to increase the security of generated secret keys. This is - typically only necessary on systems without better sources of randomness. - - See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources - of entropy-gathering daemons. - - .. availability:: not available with LibreSSL and OpenSSL > 1.1.0. - .. function:: RAND_add(bytes, entropy) Mix the given *bytes* into the SSL pseudo-random number generator. The @@ -879,8 +871,6 @@ Constants Disable compression on the SSL channel. This is useful if the application protocol supports its own compression scheme. - This option is only available with OpenSSL 1.0.0 and later. - .. versionadded:: 3.3 .. class:: Options @@ -1593,25 +1583,7 @@ to speed up repeated connections from the same clients. >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA') - >>> ctx.get_ciphers() # OpenSSL 1.0.x - [{'alg_bits': 256, - 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA ' - 'Enc=AESGCM(256) Mac=AEAD', - 'id': 50380848, - 'name': 'ECDHE-RSA-AES256-GCM-SHA384', - 'protocol': 'TLSv1/SSLv3', - 'strength_bits': 256}, - {'alg_bits': 128, - 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA ' - 'Enc=AESGCM(128) Mac=AEAD', - 'id': 50380847, - 'name': 'ECDHE-RSA-AES128-GCM-SHA256', - 'protocol': 'TLSv1/SSLv3', - 'strength_bits': 128}] - - On OpenSSL 1.1 and newer the cipher dict contains additional fields:: - - >>> ctx.get_ciphers() # OpenSSL 1.1+ + >>> ctx.get_ciphers() [{'aead': True, 'alg_bits': 256, 'auth': 'auth-rsa', @@ -1637,8 +1609,6 @@ to speed up repeated connections from the same clients. 'strength_bits': 128, 'symmetric': 'aes-128-gcm'}] - .. availability:: OpenSSL 1.0.2+. - .. versionadded:: 3.6 .. method:: SSLContext.set_default_verify_paths() @@ -1663,8 +1633,8 @@ to speed up repeated connections from the same clients. when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will give the currently selected cipher. - OpenSSL 1.1.1 has TLS 1.3 cipher suites enabled by default. The suites - cannot be disabled with :meth:`~SSLContext.set_ciphers`. + TLS 1.3 cipher suites cannot be disabled with + :meth:`~SSLContext.set_ciphers`. .. method:: SSLContext.set_alpn_protocols(protocols) @@ -1678,10 +1648,6 @@ to speed up repeated connections from the same clients. This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is ``False``. - OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError` - when both sides support ALPN but cannot agree on a protocol. 1.1.0f+ - behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None. - .. versionadded:: 3.5 .. method:: SSLContext.set_npn_protocols(protocols) @@ -1883,7 +1849,7 @@ to speed up repeated connections from the same clients. .. method:: SSLContext.session_stats() Get statistics about the SSL sessions created or managed by this context. - A dictionary is returned which maps the names of each `piece of information `_ to their + A dictionary is returned which maps the names of each `piece of information `_ to their numeric values. For example, here is the total number of hits and misses in the session cache since the context was created:: @@ -1926,10 +1892,6 @@ to speed up repeated connections from the same clients. :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously the same operation would have failed with a :exc:`ValueError`. - .. note:: - - This features requires OpenSSL 0.9.8f or newer. - .. attribute:: SSLContext.keylog_filename Write TLS keys to a keylog file, whenever key material is generated or @@ -1940,10 +1902,6 @@ to speed up repeated connections from the same clients. .. versionadded:: 3.8 - .. note:: - - This features requires OpenSSL 1.1.1 or newer. - .. attribute:: SSLContext.maximum_version A :class:`TLSVersion` enum member representing the highest supported @@ -1960,11 +1918,6 @@ to speed up repeated connections from the same clients. :attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2` will not be able to establish a TLS 1.2 connection. - .. note:: - - This attribute is not available unless the ssl module is compiled - with OpenSSL 1.1.0g or newer. - .. versionadded:: 3.7 .. attribute:: SSLContext.minimum_version @@ -1972,11 +1925,6 @@ to speed up repeated connections from the same clients. Like :attr:`SSLContext.maximum_version` except it is the lowest supported version or :attr:`TLSVersion.MINIMUM_SUPPORTED`. - .. note:: - - This attribute is not available unless the ssl module is compiled - with OpenSSL 1.1.0g or newer. - .. versionadded:: 3.7 .. attribute:: SSLContext.num_tickets @@ -1985,11 +1933,6 @@ to speed up repeated connections from the same clients. :attr:`TLS_PROTOCOL_SERVER` context. The setting has no impact on TLS 1.0 to 1.2 connections. - .. note:: - - This attribute is not available unless the ssl module is compiled - with OpenSSL 1.1.1 or newer. - .. versionadded:: 3.8 .. attribute:: SSLContext.options @@ -1998,11 +1941,6 @@ to speed up repeated connections from the same clients. The default value is :data:`OP_ALL`, but you can specify other options such as :data:`OP_NO_SSLv2` by ORing them together. - .. note:: - With versions of OpenSSL older than 0.9.8m, it is only possible - to set options, not to clear them. Attempting to clear an option - (by resetting the corresponding bits) will raise a :exc:`ValueError`. - .. versionchanged:: 3.6 :attr:`SSLContext.options` returns :class:`Options` flags: @@ -2025,10 +1963,6 @@ to speed up repeated connections from the same clients. :meth:`SSLSocket.verify_client_post_handshake` is called and some I/O is performed. - .. note:: - Only available with OpenSSL 1.1.1 and TLS 1.3 enabled. Without TLS 1.3 - support, the property value is None and can't be modified - .. versionadded:: 3.8 .. attribute:: SSLContext.protocol @@ -2042,9 +1976,6 @@ to speed up repeated connections from the same clients. subject common name in the absence of a subject alternative name extension (default: true). - .. note:: - Only writeable with OpenSSL 1.1.0 or higher. - .. versionadded:: 3.7 .. versionchanged:: 3.10 @@ -2058,8 +1989,6 @@ to speed up repeated connections from the same clients. `_ for the context. This attribute is read-only. - .. availability:: OpenSSL 1.1.0 or newer - .. versionadded:: 3.10 .. attribute:: SSLContext.verify_flags @@ -2067,7 +1996,6 @@ to speed up repeated connections from the same clients. The flags for certificate verification operations. You can set flags like :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL does neither require nor verify certificate revocation lists (CRLs). - Available only with openssl version 0.9.8+. .. versionadded:: 3.4 @@ -2733,9 +2661,8 @@ TLS 1.3 .. versionadded:: 3.7 -Python has provisional and experimental support for TLS 1.3 with OpenSSL -1.1.1. The new protocol behaves slightly differently than previous version -of TLS/SSL. Some new TLS 1.3 features are not yet available. +The TLS 1.3 protocol behaves slightly differently than previous version +of TLS/SSL. Some new TLS 1.3 features are not yet available. - TLS 1.3 uses a disjunct set of cipher suites. All AES-GCM and ChaCha20 cipher suites are enabled by default. The method @@ -2752,23 +2679,6 @@ of TLS/SSL. Some new TLS 1.3 features are not yet available. signature algorithm configuration, and rekeying are not supported yet. -.. _ssl-libressl: - -LibreSSL support ----------------- - -LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for -LibreSSL. Some features are not available when the ssl module is compiled -with LibreSSL. - -* LibreSSL >= 2.6.1 no longer supports NPN. The methods - :meth:`SSLContext.set_npn_protocols` and - :meth:`SSLSocket.selected_npn_protocol` are not available. -* :meth:`SSLContext.set_default_verify_paths` ignores the env vars - :envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although - :func:`get_default_verify_paths` still reports them. - - .. seealso:: Class :class:`socket.socket` diff --git a/Modules/_ssl.c b/Modules/_ssl.c index f441a16625bc7..92aabcb4fded9 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -4971,38 +4971,6 @@ _ssl_RAND_status_impl(PyObject *module) return PyLong_FromLong(RAND_status()); } -#ifndef OPENSSL_NO_EGD -/* LCOV_EXCL_START */ -/*[clinic input] -_ssl.RAND_egd - path: object(converter="PyUnicode_FSConverter") - / - -Queries the entropy gather daemon (EGD) on the socket named by 'path'. - -Returns number of bytes read. Raises SSLError if connection to EGD -fails or if it does not provide enough data to seed PRNG. -[clinic start generated code]*/ - -static PyObject * -_ssl_RAND_egd_impl(PyObject *module, PyObject *path) -/*[clinic end generated code: output=02a67c7c367f52fa input=1aeb7eb948312195]*/ -{ - int bytes = RAND_egd(PyBytes_AsString(path)); - Py_DECREF(path); - if (bytes == -1) { - PyErr_SetString(PySSLErrorObject, - "EGD connection failed or EGD did not return " - "enough data to seed the PRNG"); - return NULL; - } - return PyLong_FromLong(bytes); -} -/* LCOV_EXCL_STOP */ -#endif /* OPENSSL_NO_EGD */ - - - /*[clinic input] _ssl.get_default_verify_paths @@ -5445,7 +5413,6 @@ static PyMethodDef PySSL_methods[] = { _SSL_RAND_ADD_METHODDEF _SSL_RAND_BYTES_METHODDEF _SSL_RAND_PSEUDO_BYTES_METHODDEF - _SSL_RAND_EGD_METHODDEF _SSL_RAND_STATUS_METHODDEF _SSL_GET_DEFAULT_VERIFY_PATHS_METHODDEF _SSL_ENUM_CERTIFICATES_METHODDEF diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 95aad0c21df9a..74ab5a8244d49 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -1105,40 +1105,6 @@ _ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored)) return _ssl_RAND_status_impl(module); } -#if !defined(OPENSSL_NO_EGD) - -PyDoc_STRVAR(_ssl_RAND_egd__doc__, -"RAND_egd($module, path, /)\n" -"--\n" -"\n" -"Queries the entropy gather daemon (EGD) on the socket named by \'path\'.\n" -"\n" -"Returns number of bytes read. Raises SSLError if connection to EGD\n" -"fails or if it does not provide enough data to seed PRNG."); - -#define _SSL_RAND_EGD_METHODDEF \ - {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__}, - -static PyObject * -_ssl_RAND_egd_impl(PyObject *module, PyObject *path); - -static PyObject * -_ssl_RAND_egd(PyObject *module, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *path; - - if (!PyUnicode_FSConverter(arg, &path)) { - goto exit; - } - return_value = _ssl_RAND_egd_impl(module, path); - -exit: - return return_value; -} - -#endif /* !defined(OPENSSL_NO_EGD) */ - PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, "get_default_verify_paths($module, /)\n" "--\n" @@ -1351,10 +1317,6 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #endif /* defined(_MSC_VER) */ -#ifndef _SSL_RAND_EGD_METHODDEF - #define _SSL_RAND_EGD_METHODDEF -#endif /* !defined(_SSL_RAND_EGD_METHODDEF) */ - #ifndef _SSL_ENUM_CERTIFICATES_METHODDEF #define _SSL_ENUM_CERTIFICATES_METHODDEF #endif /* !defined(_SSL_ENUM_CERTIFICATES_METHODDEF) */ @@ -1362,4 +1324,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=9468e58904a565a2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ae3d1851daba6562 input=a9049054013a1b77]*/ From webhook-mailer at python.org Sat Apr 17 09:53:28 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 17 Apr 2021 13:53:28 -0000 Subject: [Python-checkins] Fix typo in a dataclasses comment. (GH-25454) Message-ID: https://github.com/python/cpython/commit/76beadb8ff86eb2bb248bf918bfb20c4069932f4 commit: 76beadb8ff86eb2bb248bf918bfb20c4069932f4 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-17T09:53:24-04:00 summary: Fix typo in a dataclasses comment. (GH-25454) files: M Lib/dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 3ccfbbd92035a..1b95bb961d9ec 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -718,7 +718,7 @@ def _get_field(cls, a_name, a_type): # In addition to checking for actual types here, also check for # string annotations. get_type_hints() won't always work for us # (see https://github.com/python/typing/issues/508 for example), - # plus it's expensive and would require an eval for every stirng + # plus it's expensive and would require an eval for every string # annotation. So, make a best effort to see if this is a ClassVar # or InitVar using regex's and checking that the thing referenced # is actually of the correct type. From webhook-mailer at python.org Sat Apr 17 10:11:24 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 17 Apr 2021 14:11:24 -0000 Subject: [Python-checkins] Fix typo in a dataclasses comment. (GH-25454) Message-ID: https://github.com/python/cpython/commit/303ffb74a38dfed5c62ca6d8a2d53d80b696feab commit: 303ffb74a38dfed5c62ca6d8a2d53d80b696feab branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-17T07:11:16-07:00 summary: Fix typo in a dataclasses comment. (GH-25454) (cherry picked from commit 76beadb8ff86eb2bb248bf918bfb20c4069932f4) Co-authored-by: Eric V. Smith files: M Lib/dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 5825e8e523053..c9a2186b6a8dc 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -694,7 +694,7 @@ def _get_field(cls, a_name, a_type): # In addition to checking for actual types here, also check for # string annotations. get_type_hints() won't always work for us # (see https://github.com/python/typing/issues/508 for example), - # plus it's expensive and would require an eval for every stirng + # plus it's expensive and would require an eval for every string # annotation. So, make a best effort to see if this is a ClassVar # or InitVar using regex's and checking that the thing referenced # is actually of the correct type. From webhook-mailer at python.org Sat Apr 17 10:13:48 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 17 Apr 2021 14:13:48 -0000 Subject: [Python-checkins] Fix typo in a dataclasses comment. (GH-25454) Message-ID: https://github.com/python/cpython/commit/0121f6792ab49c575e4c34f587d486e1fda85674 commit: 0121f6792ab49c575e4c34f587d486e1fda85674 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-17T07:13:44-07:00 summary: Fix typo in a dataclasses comment. (GH-25454) (cherry picked from commit 76beadb8ff86eb2bb248bf918bfb20c4069932f4) Co-authored-by: Eric V. Smith files: M Lib/dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index e015254df78b4..da7cb743b5647 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -696,7 +696,7 @@ def _get_field(cls, a_name, a_type): # In addition to checking for actual types here, also check for # string annotations. get_type_hints() won't always work for us # (see https://github.com/python/typing/issues/508 for example), - # plus it's expensive and would require an eval for every stirng + # plus it's expensive and would require an eval for every string # annotation. So, make a best effort to see if this is a ClassVar # or InitVar using regex's and checking that the thing referenced # is actually of the correct type. From webhook-mailer at python.org Sat Apr 17 14:06:42 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 17 Apr 2021 18:06:42 -0000 Subject: [Python-checkins] bpo-42333: Port _ssl extension to multiphase initialization (PEP 489) (GH-23253) Message-ID: https://github.com/python/cpython/commit/7f1305ef9ea7234e1a5aacbea17490232e9b7dc2 commit: 7f1305ef9ea7234e1a5aacbea17490232e9b7dc2 branch: master author: Christian Heimes committer: tiran date: 2021-04-17T20:06:38+02:00 summary: bpo-42333: Port _ssl extension to multiphase initialization (PEP 489) (GH-23253) - Introduce sslmodule_slots - Introduce sslmodulestate - Use sslmodulestate - Get rid of PyState_FindModule - Move new structs and helpers to header file - Use macros to access state - Keep a strong ref to socket type files: A Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst A Modules/_ssl.h M Modules/_ssl.c M Modules/_ssl/debughelpers.c M Modules/clinic/_ssl.c.h M setup.py diff --git a/Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst b/Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst new file mode 100644 index 0000000000000..da2df1f614c10 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst @@ -0,0 +1 @@ +Port ``_ssl`` extension module to multiphase initialization. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 92aabcb4fded9..376d3bb11a40b 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -25,6 +25,11 @@ #include "Python.h" +/* Include symbols from _socket module */ +#include "socketmodule.h" + +#include "_ssl.h" + /* Redefined below for Windows debug builds after important #includes */ #define _PySSL_FIX_ERRNO @@ -39,10 +44,6 @@ #define PySSL_UNBLOCK_THREADS PySSL_BEGIN_ALLOW_THREADS_S(_save); #define PySSL_END_ALLOW_THREADS PySSL_END_ALLOW_THREADS_S(_save); } -/* Include symbols from _socket module */ -#include "socketmodule.h" - -static PySocketModule_APIObject PySocketModule; #if defined(HAVE_POLL_H) #include @@ -66,24 +67,13 @@ static PySocketModule_APIObject PySocketModule; # error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL" #endif -/* SSL error object */ -static PyObject *PySSLErrorObject; -static PyObject *PySSLCertVerificationErrorObject; -static PyObject *PySSLZeroReturnErrorObject; -static PyObject *PySSLWantReadErrorObject; -static PyObject *PySSLWantWriteErrorObject; -static PyObject *PySSLSyscallErrorObject; -static PyObject *PySSLEOFErrorObject; -/* Error mappings */ -static PyObject *err_codes_to_names; -static PyObject *err_names_to_codes; -static PyObject *lib_codes_to_names; struct py_ssl_error_code { const char *mnemonic; int library, reason; }; + struct py_ssl_library_code { const char *library; int code; @@ -288,6 +278,8 @@ typedef struct { PyObject *msg_cb; PyObject *keylog_filename; BIO *keylog_bio; + /* Cached module state, also used in SSLSocket and SSLSession code. */ + _sslmodulestate *state; } PySSLContext; typedef struct { @@ -329,11 +321,6 @@ typedef struct { PySSLContext *ctx; } PySSLSession; -static PyTypeObject *PySSLContext_Type; -static PyTypeObject *PySSLSocket_Type; -static PyTypeObject *PySSLMemoryBIO_Type; -static PyTypeObject *PySSLSession_Type; - static inline _PySSLError _PySSL_errno(int failed, const SSL *ssl, int retcode) { _PySSLError err = { 0 }; @@ -350,12 +337,12 @@ static inline _PySSLError _PySSL_errno(int failed, const SSL *ssl, int retcode) /*[clinic input] module _ssl -class _ssl._SSLContext "PySSLContext *" "PySSLContext_Type" -class _ssl._SSLSocket "PySSLSocket *" "PySSLSocket_Type" -class _ssl.MemoryBIO "PySSLMemoryBIO *" "PySSLMemoryBIO_Type" -class _ssl.SSLSession "PySSLSession *" "PySSLSession_Type" +class _ssl._SSLContext "PySSLContext *" "get_state_type(type)->PySSLContext_Type" +class _ssl._SSLSocket "PySSLSocket *" "get_state_type(type)->PySSLSocket_Type" +class _ssl.MemoryBIO "PySSLMemoryBIO *" "get_state_type(type)->PySSLMemoryBIO_Type" +class _ssl.SSLSession "PySSLSession *" "get_state_type(type)->PySSLSession_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=cc4883756da17954]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=d293bed8bae240fd]*/ #include "clinic/_ssl.c.h" @@ -363,9 +350,6 @@ static int PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout); static int PySSL_set_owner(PySSLSocket *, PyObject *, void *); static int PySSL_set_session(PySSLSocket *, PyObject *, void *); -#define PySSLSocket_Check(v) Py_IS_TYPE(v, PySSLSocket_Type) -#define PySSLMemoryBIO_Check(v) Py_IS_TYPE(v, PySSLMemoryBIO_Type) -#define PySSLSession_Check(v) Py_IS_TYPE(v, PySSLSession_Type) typedef enum { SOCKET_IS_NONBLOCKING, @@ -443,7 +427,8 @@ static PyType_Spec sslerror_type_spec = { }; static void -fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, +fill_and_set_sslerror(_sslmodulestate *state, + PySSLSocket *sslsock, PyObject *type, int ssl_errno, const char *errstr, int lineno, unsigned long errcode) { PyObject *err_value = NULL, *reason_obj = NULL, *lib_obj = NULL; @@ -462,7 +447,7 @@ fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, key = Py_BuildValue("ii", lib, reason); if (key == NULL) goto fail; - reason_obj = PyDict_GetItemWithError(err_codes_to_names, key); + reason_obj = PyDict_GetItemWithError(state->err_codes_to_names, key); Py_DECREF(key); if (reason_obj == NULL && PyErr_Occurred()) { goto fail; @@ -470,7 +455,7 @@ fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, key = PyLong_FromLong(lib); if (key == NULL) goto fail; - lib_obj = PyDict_GetItemWithError(lib_codes_to_names, key); + lib_obj = PyDict_GetItemWithError(state->lib_codes_to_names, key); Py_DECREF(key); if (lib_obj == NULL && PyErr_Occurred()) { goto fail; @@ -482,7 +467,7 @@ fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, errstr = "unknown error"; /* verify code for cert validation error */ - if ((sslsock != NULL) && (type == PySSLCertVerificationErrorObject)) { + if ((sslsock != NULL) && (type == state->PySSLCertVerificationErrorObject)) { const char *verify_str = NULL; long verify_code; @@ -554,7 +539,7 @@ fill_and_set_sslerror(PySSLSocket *sslsock, PyObject *type, int ssl_errno, if (_PyObject_SetAttrId(err_value, &PyId_library, lib_obj)) goto fail; - if ((sslsock != NULL) && (type == PySSLCertVerificationErrorObject)) { + if ((sslsock != NULL) && (type == state->PySSLCertVerificationErrorObject)) { /* Only set verify code / message for SSLCertVerificationError */ if (_PyObject_SetAttrId(err_value, &PyId_verify_code, verify_code_obj)) @@ -585,12 +570,17 @@ PySSL_ChainExceptions(PySSLSocket *sslsock) { static PyObject * PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) { - PyObject *type = PySSLErrorObject; + PyObject *type; char *errstr = NULL; _PySSLError err; enum py_ssl_error p = PY_SSL_ERROR_NONE; unsigned long e = 0; + assert(sslsock != NULL); + + _sslmodulestate *state = get_state_sock(sslsock); + type = state->PySSLErrorObject; + assert(ret <= 0); e = ERR_peek_last_error(); @@ -600,17 +590,17 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) switch (err.ssl) { case SSL_ERROR_ZERO_RETURN: errstr = "TLS/SSL connection has been closed (EOF)"; - type = PySSLZeroReturnErrorObject; + type = state->PySSLZeroReturnErrorObject; p = PY_SSL_ERROR_ZERO_RETURN; break; case SSL_ERROR_WANT_READ: errstr = "The operation did not complete (read)"; - type = PySSLWantReadErrorObject; + type = state->PySSLWantReadErrorObject; p = PY_SSL_ERROR_WANT_READ; break; case SSL_ERROR_WANT_WRITE: p = PY_SSL_ERROR_WANT_WRITE; - type = PySSLWantWriteErrorObject; + type = state->PySSLWantWriteErrorObject; errstr = "The operation did not complete (write)"; break; case SSL_ERROR_WANT_X509_LOOKUP: @@ -627,7 +617,7 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) PySocketSockObject *s = GET_SOCKET(sslsock); if (ret == 0 || (((PyObject *)s) == Py_None)) { p = PY_SSL_ERROR_EOF; - type = PySSLEOFErrorObject; + type = state->PySSLEOFErrorObject; errstr = "EOF occurred in violation of protocol"; } else if (s && ret == -1) { /* underlying BIO reported an I/O error */ @@ -643,12 +633,12 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) } else { p = PY_SSL_ERROR_EOF; - type = PySSLEOFErrorObject; + type = state->PySSLEOFErrorObject; errstr = "EOF occurred in violation of protocol"; } } else { /* possible? */ p = PY_SSL_ERROR_SYSCALL; - type = PySSLSyscallErrorObject; + type = state->PySSLSyscallErrorObject; errstr = "Some I/O error occurred"; } } else { @@ -665,7 +655,7 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) } if (ERR_GET_LIB(e) == ERR_LIB_SSL && ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) { - type = PySSLCertVerificationErrorObject; + type = state->PySSLCertVerificationErrorObject; } break; } @@ -674,20 +664,20 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno) errstr = "Invalid error code"; } } - fill_and_set_sslerror(sslsock, type, p, errstr, lineno, e); + fill_and_set_sslerror(state, sslsock, type, p, errstr, lineno, e); ERR_clear_error(); PySSL_ChainExceptions(sslsock); return NULL; } static PyObject * -_setSSLError (const char *errstr, int errcode, const char *filename, int lineno) { - +_setSSLError (_sslmodulestate *state, const char *errstr, int errcode, const char *filename, int lineno) +{ if (errstr == NULL) errcode = ERR_peek_last_error(); else errcode = 0; - fill_and_set_sslerror(NULL, PySSLErrorObject, errcode, errstr, lineno, errcode); + fill_and_set_sslerror(state, NULL, state->PySSLErrorObject, errcode, errstr, lineno, errcode); ERR_clear_error(); return NULL; } @@ -734,7 +724,7 @@ _ssl_configure_hostname(PySSLSocket *self, const char* server_hostname) /* Only send SNI extension for non-IP hostnames */ if (ip == NULL) { if (!SSL_set_tlsext_host_name(self->ssl, server_hostname)) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); goto error; } } @@ -743,13 +733,13 @@ _ssl_configure_hostname(PySSLSocket *self, const char* server_hostname) if (ip == NULL) { if (!X509_VERIFY_PARAM_set1_host(param, server_hostname, strlen(server_hostname))) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); goto error; } } else { if (!X509_VERIFY_PARAM_set1_ip(param, ASN1_STRING_get0_data(ip), ASN1_STRING_length(ip))) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); goto error; } } @@ -773,7 +763,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, SSL_CTX *ctx = sslctx->ctx; _PySSLError err = { 0 }; - self = PyObject_New(PySSLSocket, PySSLSocket_Type); + self = PyObject_New(PySSLSocket, get_state_ctx(sslctx)->PySSLSocket_Type); if (self == NULL) return NULL; @@ -797,7 +787,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, PySSL_END_ALLOW_THREADS if (self->ssl == NULL) { Py_DECREF(self); - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); return NULL; } /* bpo43522 and OpenSSL < 1.1.1l: copy hostflags manually */ @@ -902,7 +892,8 @@ _ssl__SSLSocket_do_handshake_impl(PySSLSocket *self) if (sock) { if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", + _setSSLError(get_state_sock(self), + "Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; } @@ -947,11 +938,11 @@ _ssl__SSLSocket_do_handshake_impl(PySSLSocket *self) ERRSTR("The handshake operation timed out")); goto error; } else if (sockstate == SOCKET_HAS_BEEN_CLOSED) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, ERRSTR("Underlying socket has been closed.")); goto error; } else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, ERRSTR("Underlying socket too large for select().")); goto error; } else if (sockstate == SOCKET_IS_NONBLOCKING) { @@ -972,7 +963,7 @@ _ssl__SSLSocket_do_handshake_impl(PySSLSocket *self) } static PyObject * -_asn1obj2py(const ASN1_OBJECT *name, int no_name) +_asn1obj2py(_sslmodulestate *state, const ASN1_OBJECT *name, int no_name) { char buf[X509_NAME_MAXLEN]; char *namebuf = buf; @@ -981,7 +972,7 @@ _asn1obj2py(const ASN1_OBJECT *name, int no_name) buflen = OBJ_obj2txt(namebuf, X509_NAME_MAXLEN, name, no_name); if (buflen < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); return NULL; } /* initial buffer is too small for oid + terminating null byte */ @@ -996,7 +987,7 @@ _asn1obj2py(const ASN1_OBJECT *name, int no_name) } buflen = OBJ_obj2txt(namebuf, buflen + 1, name, no_name); if (buflen < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto done; } } @@ -1016,7 +1007,8 @@ _asn1obj2py(const ASN1_OBJECT *name, int no_name) } static PyObject * -_create_tuple_for_attribute(ASN1_OBJECT *name, ASN1_STRING *value) +_create_tuple_for_attribute(_sslmodulestate *state, + ASN1_OBJECT *name, ASN1_STRING *value) { Py_ssize_t buflen; unsigned char *valuebuf = NULL; @@ -1024,16 +1016,16 @@ _create_tuple_for_attribute(ASN1_OBJECT *name, ASN1_STRING *value) buflen = ASN1_STRING_to_UTF8(&valuebuf, value); if (buflen < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); return NULL; } - attr = Py_BuildValue("Ns#", _asn1obj2py(name, 0), valuebuf, buflen); + attr = Py_BuildValue("Ns#", _asn1obj2py(state, name, 0), valuebuf, buflen); OPENSSL_free(valuebuf); return attr; } static PyObject * -_create_tuple_for_X509_NAME (X509_NAME *xname) +_create_tuple_for_X509_NAME (_sslmodulestate *state, X509_NAME *xname) { PyObject *dn = NULL; /* tuple which represents the "distinguished name" */ PyObject *rdn = NULL; /* tuple to hold a "relative distinguished name" */ @@ -1085,7 +1077,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname) /* now add this attribute to the current RDN */ name = X509_NAME_ENTRY_get_object(entry); value = X509_NAME_ENTRY_get_data(entry); - attr = _create_tuple_for_attribute(name, value); + attr = _create_tuple_for_attribute(state, name, value); /* fprintf(stderr, "RDN level %d, attribute %s: %s\n", entry->set, @@ -1132,7 +1124,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname) } static PyObject * -_get_peer_alt_names (X509 *certificate) { +_get_peer_alt_names (_sslmodulestate *state, X509 *certificate) { /* this code follows the procedure outlined in OpenSSL's crypto/x509v3/v3_prn.c:X509v3_EXT_print() @@ -1156,7 +1148,7 @@ _get_peer_alt_names (X509 *certificate) { /* get a memory buffer */ biobuf = BIO_new(BIO_s_mem()); if (biobuf == NULL) { - PyErr_SetString(PySSLErrorObject, "failed to allocate BIO"); + PyErr_SetString(state->PySSLErrorObject, "failed to allocate BIO"); return NULL; } @@ -1193,7 +1185,7 @@ _get_peer_alt_names (X509 *certificate) { } PyTuple_SET_ITEM(t, 0, v); - v = _create_tuple_for_X509_NAME (name->d.dirn); + v = _create_tuple_for_X509_NAME(state, name->d.dirn); if (v == NULL) { Py_DECREF(t); goto fail; @@ -1252,7 +1244,7 @@ _get_peer_alt_names (X509 *certificate) { len = i2t_ASN1_OBJECT(buf, sizeof(buf)-1, name->d.rid); if (len < 0) { Py_DECREF(t); - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto fail; } else if (len >= (int)sizeof(buf)) { v = PyUnicode_FromString(""); @@ -1335,7 +1327,7 @@ _get_peer_alt_names (X509 *certificate) { GENERAL_NAME_print(biobuf, name); len = BIO_gets(biobuf, buf, sizeof(buf)-1); if (len < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto fail; } vptr = strchr(buf, ':'); @@ -1511,7 +1503,7 @@ _get_crl_dp(X509 *certificate) { } static PyObject * -_decode_certificate(X509 *certificate) { +_decode_certificate(_sslmodulestate *state, X509 *certificate) { PyObject *retval = NULL; BIO *biobuf = NULL; @@ -1532,6 +1524,7 @@ _decode_certificate(X509 *certificate) { return NULL; peer = _create_tuple_for_X509_NAME( + state, X509_get_subject_name(certificate)); if (peer == NULL) goto fail0; @@ -1542,6 +1535,7 @@ _decode_certificate(X509 *certificate) { Py_DECREF(peer); issuer = _create_tuple_for_X509_NAME( + state, X509_get_issuer_name(certificate)); if (issuer == NULL) goto fail0; @@ -1563,7 +1557,7 @@ _decode_certificate(X509 *certificate) { /* get a memory buffer */ biobuf = BIO_new(BIO_s_mem()); if (biobuf == NULL) { - PyErr_SetString(PySSLErrorObject, "failed to allocate BIO"); + PyErr_SetString(state->PySSLErrorObject, "failed to allocate BIO"); goto fail0; } @@ -1573,7 +1567,7 @@ _decode_certificate(X509 *certificate) { i2a_ASN1_INTEGER(biobuf, serialNumber); len = BIO_gets(biobuf, buf, sizeof(buf)-1); if (len < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto fail1; } sn_obj = PyUnicode_FromStringAndSize(buf, len); @@ -1590,7 +1584,7 @@ _decode_certificate(X509 *certificate) { ASN1_TIME_print(biobuf, notBefore); len = BIO_gets(biobuf, buf, sizeof(buf)-1); if (len < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto fail1; } pnotBefore = PyUnicode_FromStringAndSize(buf, len); @@ -1607,7 +1601,7 @@ _decode_certificate(X509 *certificate) { ASN1_TIME_print(biobuf, notAfter); len = BIO_gets(biobuf, buf, sizeof(buf)-1); if (len < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); goto fail1; } pnotAfter = PyUnicode_FromStringAndSize(buf, len); @@ -1621,7 +1615,7 @@ _decode_certificate(X509 *certificate) { /* Now look for subjectAltName */ - peer_alt_names = _get_peer_alt_names(certificate); + peer_alt_names = _get_peer_alt_names(state, certificate); if (peer_alt_names == NULL) goto fail1; else if (peer_alt_names != Py_None) { @@ -1680,7 +1674,7 @@ _decode_certificate(X509 *certificate) { } static PyObject * -_certificate_to_der(X509 *certificate) +_certificate_to_der(_sslmodulestate *state, X509 *certificate) { unsigned char *bytes_buf = NULL; int len; @@ -1689,7 +1683,7 @@ _certificate_to_der(X509 *certificate) bytes_buf = NULL; len = i2d_X509(certificate, &bytes_buf); if (len < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); return NULL; } /* this is actually an immutable bytes sequence */ @@ -1712,27 +1706,28 @@ _ssl__test_decode_cert_impl(PyObject *module, PyObject *path) PyObject *retval = NULL; X509 *x=NULL; BIO *cert; + _sslmodulestate *state = get_ssl_state(module); if ((cert=BIO_new(BIO_s_file())) == NULL) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(state->PySSLErrorObject, "Can't malloc memory to read file"); goto fail0; } if (BIO_read_filename(cert, PyBytes_AsString(path)) <= 0) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(state->PySSLErrorObject, "Can't open file"); goto fail0; } x = PEM_read_bio_X509(cert, NULL, NULL, NULL); if (x == NULL) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(state->PySSLErrorObject, "Error decoding PEM-encoded file"); goto fail0; } - retval = _decode_certificate(x); + retval = _decode_certificate(state, x); X509_free(x); fail0: @@ -1777,13 +1772,13 @@ _ssl__SSLSocket_getpeercert_impl(PySSLSocket *self, int binary_mode) if (binary_mode) { /* return cert in DER-encoded format */ - result = _certificate_to_der(peer_cert); + result = _certificate_to_der(get_state_sock(self), peer_cert); } else { verification = SSL_CTX_get_verify_mode(SSL_get_SSL_CTX(self->ssl)); if ((verification & SSL_VERIFY_PEER) == 0) result = PyDict_New(); else - result = _decode_certificate(peer_cert); + result = _decode_certificate(get_state_sock(self), peer_cert); } X509_free(peer_cert); return result; @@ -2002,7 +1997,7 @@ static PySSLContext *PySSL_get_context(PySSLSocket *self, void *closure) { static int PySSL_set_context(PySSLSocket *self, PyObject *value, void *closure) { - if (PyObject_TypeCheck(value, PySSLContext_Type)) { + if (PyObject_TypeCheck(value, self->ctx->state->PySSLContext_Type)) { Py_INCREF(value); Py_SETREF(self->ctx, (PySSLContext *)value); SSL_set_SSL_CTX(self->ssl, self->ctx->ctx); @@ -2201,7 +2196,8 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) if (sock != NULL) { if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", + _setSSLError(get_state_sock(self), + "Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; } @@ -2232,11 +2228,11 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) "The write operation timed out"); goto error; } else if (sockstate == SOCKET_HAS_BEEN_CLOSED) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, "Underlying socket has been closed."); goto error; } else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, "Underlying socket too large for select()."); goto error; } @@ -2267,7 +2263,7 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) "The write operation timed out"); goto error; } else if (sockstate == SOCKET_HAS_BEEN_CLOSED) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, "Underlying socket has been closed."); goto error; } else if (sockstate == SOCKET_IS_NONBLOCKING) { @@ -2346,7 +2342,8 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, if (sock != NULL) { if (((PyObject*)sock) == Py_None) { - _setSSLError("Underlying socket connection gone", + _setSSLError(get_state_sock(self), + "Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; } @@ -2472,7 +2469,8 @@ _ssl__SSLSocket_shutdown_impl(PySSLSocket *self) if (sock != NULL) { /* Guard against closed socket */ if ((((PyObject*)sock) == Py_None) || (sock->sock_fd == INVALID_SOCKET)) { - _setSSLError("Underlying socket connection gone", + _setSSLError(get_state_sock(self), + "Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; } @@ -2541,7 +2539,7 @@ _ssl__SSLSocket_shutdown_impl(PySSLSocket *self) goto error; } else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_sock(self)->PySSLErrorObject, "Underlying socket too large for select()."); goto error; } @@ -2626,7 +2624,7 @@ _ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self) #ifdef TLS1_3_VERSION int err = SSL_verify_client_post_handshake(self->ssl); if (err == 0) - return _setSSLError(NULL, 0, __FILE__, __LINE__); + return _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); else Py_RETURN_NONE; #else @@ -2698,7 +2696,7 @@ PySSL_get_session(PySSLSocket *self, void *closure) { if (session == NULL) { Py_RETURN_NONE; } - pysess = PyObject_GC_New(PySSLSession, PySSLSession_Type); + pysess = PyObject_GC_New(PySSLSession, self->ctx->state->PySSLSession_Type); if (pysess == NULL) { SSL_SESSION_free(session); return NULL; @@ -2719,7 +2717,7 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, SSL_SESSION *session; int result; - if (!PySSLSession_Check(value)) { + if (!Py_IS_TYPE(value, get_state_sock(self)->PySSLSession_Type)) { PyErr_SetString(PyExc_TypeError, "Value is not a SSLSession."); return -1; } @@ -2748,7 +2746,7 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, /* free duplicate, SSL_set_session() bumps ref count */ SSL_SESSION_free(session); if (result == 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); return -1; } return 0; @@ -2821,7 +2819,6 @@ static PyType_Spec PySSLSocket_spec = { PySSLSocket_slots, }; - /* * _SSLContext objects */ @@ -2874,6 +2871,15 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) X509_VERIFY_PARAM *params; int result; + /* slower approach, walk MRO and get borrowed reference to module. + * _PyType_GetModuleByDef is required for SSLContext subclasses */ + PyObject *module = _PyType_GetModuleByDef(type, &_sslmodule_def); + if (module == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "Cannot find internal module state"); + return NULL; + } + PySSL_BEGIN_ALLOW_THREADS switch(proto_version) { #if defined(SSL3_VERSION) && !defined(OPENSSL_NO_SSL3) @@ -2923,7 +2929,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) return NULL; } if (ctx == NULL) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_ssl_state(module), NULL, 0, __FILE__, __LINE__); return NULL; } @@ -2941,6 +2947,8 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) self->keylog_bio = NULL; self->alpn_protocols = NULL; self->set_sni_cb = NULL; + self->state = get_ssl_state(module); + /* Don't check host name by default */ if (proto_version == PY_SSL_VERSION_TLS_CLIENT) { self->check_hostname = 1; @@ -2997,7 +3005,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) if (result == 0) { Py_DECREF(self); ERR_clear_error(); - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "No cipher can be selected."); return NULL; } @@ -3077,7 +3085,7 @@ _ssl__SSLContext_set_ciphers_impl(PySSLContext *self, const char *cipherlist) otherwise the error will be reported again when another SSL call is done. */ ERR_clear_error(); - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "No cipher can be selected."); return NULL; } @@ -3100,7 +3108,7 @@ _ssl__SSLContext_get_ciphers_impl(PySSLContext *self) ssl = SSL_new(self->ctx); if (ssl == NULL) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); goto exit; } sk = SSL_get_ciphers(ssl); @@ -3209,7 +3217,7 @@ get_verify_mode(PySSLContext *self, void *c) case SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT: return PyLong_FromLong(PY_SSL_CERT_REQUIRED); } - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "invalid return value from SSL_CTX_get_verify_mode"); return NULL; } @@ -3254,13 +3262,13 @@ set_verify_flags(PySSLContext *self, PyObject *arg, void *c) set = ~flags & new_flags; if (clear) { if (!X509_VERIFY_PARAM_clear_flags(param, clear)) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); return -1; } } if (set) { if (!X509_VERIFY_PARAM_set_flags(param, set)) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); return -1; } } @@ -3675,7 +3683,7 @@ _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, PyErr_SetFromErrno(PyExc_OSError); } else { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); } goto error; } @@ -3696,7 +3704,7 @@ _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, PyErr_SetFromErrno(PyExc_OSError); } else { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); } goto error; } @@ -3704,7 +3712,7 @@ _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, r = SSL_CTX_check_private_key(self->ctx); PySSL_END_ALLOW_THREADS_S(pw_info.thread_state); if (r != 1) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); goto error; } SSL_CTX_set_default_passwd_cb(self->ctx, orig_passwd_cb); @@ -3745,7 +3753,7 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, biobuf = BIO_new_mem_buf(data, (int)len); if (biobuf == NULL) { - _setSSLError("Can't allocate buffer", 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), "Can't allocate buffer", 0, __FILE__, __LINE__); return -1; } @@ -3798,7 +3806,7 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, ERR_clear_error(); retval = 0; } else { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); retval = -1; } @@ -3915,7 +3923,7 @@ _ssl__SSLContext_load_verify_locations_impl(PySSLContext *self, PyErr_SetFromErrno(PyExc_OSError); } else { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); } goto error; } @@ -3963,13 +3971,13 @@ _ssl__SSLContext_load_dh_params(PySSLContext *self, PyObject *filepath) PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, filepath); } else { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); } return NULL; } if (!SSL_CTX_set_tmp_dh(self->ctx, dh)) { DH_free(dh); - return _setSSLError(NULL, 0, __FILE__, __LINE__); + return _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); } DH_free(dh); Py_RETURN_NONE; @@ -3977,7 +3985,7 @@ _ssl__SSLContext_load_dh_params(PySSLContext *self, PyObject *filepath) /*[clinic input] _ssl._SSLContext._wrap_socket - sock: object(subclass_of="PySocketModule.Sock_Type") + sock: object(subclass_of="get_state_ctx(self)->Sock_Type") server_side: int server_hostname as hostname_obj: object = None * @@ -3990,7 +3998,7 @@ static PyObject * _ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock, int server_side, PyObject *hostname_obj, PyObject *owner, PyObject *session) -/*[clinic end generated code: output=f103f238633940b4 input=957d5006183d1894]*/ +/*[clinic end generated code: output=f103f238633940b4 input=f5916eadbc6eae81]*/ { char *hostname = NULL; PyObject *res; @@ -4013,8 +4021,8 @@ _ssl__SSLContext__wrap_socket_impl(PySSLContext *self, PyObject *sock, /*[clinic input] _ssl._SSLContext._wrap_bio - incoming: object(subclass_of="PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") - outgoing: object(subclass_of="PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") + incoming: object(subclass_of="get_state_ctx(self)->PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") + outgoing: object(subclass_of="get_state_ctx(self)->PySSLMemoryBIO_Type", type="PySSLMemoryBIO *") server_side: int server_hostname as hostname_obj: object = None * @@ -4028,7 +4036,7 @@ _ssl__SSLContext__wrap_bio_impl(PySSLContext *self, PySSLMemoryBIO *incoming, PySSLMemoryBIO *outgoing, int server_side, PyObject *hostname_obj, PyObject *owner, PyObject *session) -/*[clinic end generated code: output=5c5d6d9b41f99332 input=63867b8f3e1a1aa3]*/ +/*[clinic end generated code: output=5c5d6d9b41f99332 input=331edeec9c738382]*/ { char *hostname = NULL; PyObject *res; @@ -4101,7 +4109,7 @@ _ssl__SSLContext_set_default_verify_paths_impl(PySSLContext *self) /*[clinic end generated code: output=0bee74e6e09deaaa input=35f3408021463d74]*/ { if (!SSL_CTX_set_default_verify_paths(self->ctx)) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); return NULL; } Py_RETURN_NONE; @@ -4134,7 +4142,7 @@ _ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name) } key = EC_KEY_new_by_curve_name(nid); if (key == NULL) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); return NULL; } SSL_CTX_set_tmp_ecdh(self->ctx, key); @@ -4146,7 +4154,7 @@ static int _servername_callback(SSL *s, int *al, void *args) { int ret; - PySSLContext *ssl_ctx = (PySSLContext *) args; + PySSLContext *sslctx = (PySSLContext *) args; PySSLSocket *ssl; PyObject *result; /* The high-level ssl.SSLSocket object */ @@ -4154,7 +4162,7 @@ _servername_callback(SSL *s, int *al, void *args) const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); PyGILState_STATE gstate = PyGILState_Ensure(); - if (ssl_ctx->set_sni_cb == NULL) { + if (sslctx->set_sni_cb == NULL) { /* remove race condition in this the call back while if removing the * callback is in progress */ PyGILState_Release(gstate); @@ -4162,7 +4170,7 @@ _servername_callback(SSL *s, int *al, void *args) } ssl = SSL_get_app_data(s); - assert(PySSLSocket_Check(ssl)); + assert(Py_IS_TYPE(ssl, get_state_ctx(sslctx)->PySSLSocket_Type)); /* The servername callback expects an argument that represents the current * SSL connection and that has a .context attribute that can be changed to @@ -4184,8 +4192,8 @@ _servername_callback(SSL *s, int *al, void *args) goto error; if (servername == NULL) { - result = PyObject_CallFunctionObjArgs(ssl_ctx->set_sni_cb, ssl_socket, - Py_None, ssl_ctx, NULL); + result = PyObject_CallFunctionObjArgs(sslctx->set_sni_cb, ssl_socket, + Py_None, sslctx, NULL); } else { PyObject *servername_bytes; @@ -4193,7 +4201,7 @@ _servername_callback(SSL *s, int *al, void *args) servername_bytes = PyBytes_FromString(servername); if (servername_bytes == NULL) { - PyErr_WriteUnraisable((PyObject *) ssl_ctx); + PyErr_WriteUnraisable((PyObject *) sslctx); goto error; } /* server_hostname was encoded to an A-label by our caller; put it @@ -4207,14 +4215,14 @@ _servername_callback(SSL *s, int *al, void *args) } Py_DECREF(servername_bytes); result = PyObject_CallFunctionObjArgs( - ssl_ctx->set_sni_cb, ssl_socket, servername_str, - ssl_ctx, NULL); + sslctx->set_sni_cb, ssl_socket, servername_str, + sslctx, NULL); Py_DECREF(servername_str); } Py_DECREF(ssl_socket); if (result == NULL) { - PyErr_WriteUnraisable(ssl_ctx->set_sni_cb); + PyErr_WriteUnraisable(sslctx->set_sni_cb); *al = SSL_AD_HANDSHAKE_FAILURE; ret = SSL_TLSEXT_ERR_ALERT_FATAL; } @@ -4380,9 +4388,9 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) continue; } if (binary_form) { - ci = _certificate_to_der(cert); + ci = _certificate_to_der(get_state_ctx(self), cert); } else { - ci = _decode_certificate(cert); + ci = _decode_certificate(get_state_ctx(self), cert); } if (ci == NULL) { goto error; @@ -4495,8 +4503,7 @@ _ssl_MemoryBIO_impl(PyTypeObject *type) bio = BIO_new(BIO_s_mem()); if (bio == NULL) { - PyErr_SetString(PySSLErrorObject, - "failed to allocate BIO"); + PyErr_SetString(PyExc_MemoryError, "failed to allocate BIO"); return NULL; } /* Since our BIO is non-blocking an empty read() does not indicate EOF, @@ -4575,8 +4582,9 @@ _ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len) nbytes = BIO_read(self->bio, PyBytes_AS_STRING(result), len); if (nbytes < 0) { + _sslmodulestate *state = get_state_mbio(self); Py_DECREF(result); - _setSSLError(NULL, 0, __FILE__, __LINE__); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); return NULL; } @@ -4611,14 +4619,18 @@ _ssl_MemoryBIO_write_impl(PySSLMemoryBIO *self, Py_buffer *b) } if (self->eof_written) { - PyErr_SetString(PySSLErrorObject, + PyObject *module = PyType_GetModule(Py_TYPE(self)); + if (module == NULL) + return NULL; + PyErr_SetString(get_ssl_state(module)->PySSLErrorObject, "cannot write() after write_eof()"); return NULL; } nbytes = BIO_write(self->bio, b->buf, (int)b->len); if (nbytes < 0) { - _setSSLError(NULL, 0, __FILE__, __LINE__); + _sslmodulestate *state = get_state_mbio(self); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); return NULL; } @@ -4699,13 +4711,14 @@ static PyObject * PySSLSession_richcompare(PyObject *left, PyObject *right, int op) { int result; + PyTypeObject *sesstype = ((PySSLSession*)left)->ctx->state->PySSLSession_Type; if (left == NULL || right == NULL) { PyErr_BadInternalCall(); return NULL; } - if (!PySSLSession_Check(left) || !PySSLSession_Check(right)) { + if (!Py_IS_TYPE(left, sesstype) || !Py_IS_TYPE(right, sesstype)) { Py_RETURN_NOTIMPLEMENTED; } @@ -4884,7 +4897,7 @@ _ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy) } static PyObject * -PySSL_RAND(int len, int pseudo) +PySSL_RAND(PyObject *module, int len, int pseudo) { int ok; PyObject *bytes; @@ -4916,7 +4929,7 @@ PySSL_RAND(int len, int pseudo) errstr = ERR_reason_error_string(err); v = Py_BuildValue("(ks)", err, errstr); if (v != NULL) { - PyErr_SetObject(PySSLErrorObject, v); + PyErr_SetObject(get_ssl_state(module)->PySSLErrorObject, v); Py_DECREF(v); } return NULL; @@ -4934,7 +4947,7 @@ static PyObject * _ssl_RAND_bytes_impl(PyObject *module, int n) /*[clinic end generated code: output=977da635e4838bc7 input=678ddf2872dfebfc]*/ { - return PySSL_RAND(n, 0); + return PySSL_RAND(module, n, 0); } /*[clinic input] @@ -4952,7 +4965,7 @@ static PyObject * _ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) /*[clinic end generated code: output=b1509e937000e52d input=58312bd53f9bbdd0]*/ { - return PySSL_RAND(n, 1); + return PySSL_RAND(module, n, 1); } /*[clinic input] @@ -5014,7 +5027,7 @@ _ssl_get_default_verify_paths_impl(PyObject *module) } static PyObject* -asn1obj2py(ASN1_OBJECT *obj) +asn1obj2py(_sslmodulestate *state, ASN1_OBJECT *obj) { int nid; const char *ln, *sn; @@ -5026,7 +5039,7 @@ asn1obj2py(ASN1_OBJECT *obj) } sn = OBJ_nid2sn(nid); ln = OBJ_nid2ln(nid); - return Py_BuildValue("issN", nid, sn, ln, _asn1obj2py(obj, 1)); + return Py_BuildValue("issN", nid, sn, ln, _asn1obj2py(state, obj, 1)); } /*[clinic input] @@ -5052,7 +5065,7 @@ _ssl_txt2obj_impl(PyObject *module, const char *txt, int name) PyErr_Format(PyExc_ValueError, "unknown object '%.100s'", txt); return NULL; } - result = asn1obj2py(obj); + result = asn1obj2py(get_ssl_state(module), obj); ASN1_OBJECT_free(obj); return result; } @@ -5081,7 +5094,7 @@ _ssl_nid2obj_impl(PyObject *module, int nid) PyErr_Format(PyExc_ValueError, "unknown NID %i", nid); return NULL; } - result = asn1obj2py(obj); + result = asn1obj2py(get_ssl_state(module), obj); ASN1_OBJECT_free(obj); return result; } @@ -5423,72 +5436,39 @@ static PyMethodDef PySSL_methods[] = { }; -static int -sslmodule_init_types(PyObject *module) -{ - PySSLContext_Type = (PyTypeObject *)PyType_FromModuleAndSpec( - module, &PySSLContext_spec, NULL - ); - if (PySSLContext_Type == NULL) - return -1; - - PySSLSocket_Type = (PyTypeObject *)PyType_FromModuleAndSpec( - module, &PySSLSocket_spec, NULL - ); - if (PySSLSocket_Type == NULL) - return -1; - - PySSLMemoryBIO_Type = (PyTypeObject *)PyType_FromModuleAndSpec( - module, &PySSLMemoryBIO_spec, NULL - ); - if (PySSLMemoryBIO_Type == NULL) - return -1; - - PySSLSession_Type = (PyTypeObject *)PyType_FromModuleAndSpec( - module, &PySSLSession_spec, NULL - ); - if (PySSLSession_Type == NULL) - return -1; - - if (PyModule_AddType(module, PySSLContext_Type)) - return -1; - if (PyModule_AddType(module, PySSLSocket_Type)) - return -1; - if (PyModule_AddType(module, PySSLMemoryBIO_Type)) - return -1; - if (PyModule_AddType(module, PySSLSession_Type)) - return -1; - - return 0; -} +PyDoc_STRVAR(module_doc, +"Implementation module for SSL socket operations. See the socket module\n\ +for documentation."); static int sslmodule_init_exceptions(PyObject *module) { + _sslmodulestate *state = get_ssl_state(module); PyObject *bases = NULL; -#define add_exception(exc, name, doc, base) \ -do { \ - (exc) = PyErr_NewExceptionWithDoc("ssl." name, (doc), (base), NULL); \ - if ((exc) == NULL) goto error; \ - if (PyModule_AddObjectRef(module, name, exc) < 0) goto error; \ +#define add_exception(exc, name, doc, base) \ +do { \ + (exc) = PyErr_NewExceptionWithDoc("ssl." name, (doc), (base), NULL); \ + if ((state) == NULL) goto error; \ + if (PyModule_AddObjectRef(module, name, exc) < 0) goto error; \ } while(0) - PySSLErrorObject = PyType_FromSpecWithBases(&sslerror_type_spec, PyExc_OSError); - if (PySSLErrorObject == NULL) { + state->PySSLErrorObject = PyType_FromSpecWithBases( + &sslerror_type_spec, PyExc_OSError); + if (state->PySSLErrorObject == NULL) { goto error; } - if (PyModule_AddObjectRef(module, "SSLError", PySSLErrorObject) < 0) { + if (PyModule_AddObjectRef(module, "SSLError", state->PySSLErrorObject) < 0) { goto error; } /* ssl.CertificateError used to be a subclass of ValueError */ - bases = PyTuple_Pack(2, PySSLErrorObject, PyExc_ValueError); + bases = PyTuple_Pack(2, state->PySSLErrorObject, PyExc_ValueError); if (bases == NULL) { goto error; } add_exception( - PySSLCertVerificationErrorObject, + state->PySSLCertVerificationErrorObject, "SSLCertVerificationError", SSLCertVerificationError_doc, bases @@ -5496,38 +5476,38 @@ do { \ Py_CLEAR(bases); add_exception( - PySSLZeroReturnErrorObject, + state->PySSLZeroReturnErrorObject, "SSLZeroReturnError", SSLZeroReturnError_doc, - PySSLErrorObject + state->PySSLErrorObject ); add_exception( - PySSLWantWriteErrorObject, + state->PySSLWantWriteErrorObject, "SSLWantWriteError", SSLWantWriteError_doc, - PySSLErrorObject + state->PySSLErrorObject ); add_exception( - PySSLWantReadErrorObject, + state->PySSLWantReadErrorObject, "SSLWantReadError", SSLWantReadError_doc, - PySSLErrorObject + state->PySSLErrorObject ); add_exception( - PySSLSyscallErrorObject, + state->PySSLSyscallErrorObject, "SSLSyscallError", SSLSyscallError_doc, - PySSLErrorObject + state->PySSLErrorObject ); add_exception( - PySSLEOFErrorObject, + state->PySSLEOFErrorObject, "SSLEOFError", SSLEOFError_doc, - PySSLErrorObject + state->PySSLErrorObject ); #undef add_exception @@ -5540,128 +5520,21 @@ do { \ static int sslmodule_init_socketapi(PyObject *module) { - PySocketModule_APIObject *socket_api; + _sslmodulestate *state = get_ssl_state(module); + PySocketModule_APIObject *sockmod = PySocketModule_ImportModuleAndAPI(); - /* Load _socket module and its C API */ - socket_api = PySocketModule_ImportModuleAndAPI(); - if (socket_api == NULL) + if ((sockmod == NULL) || (sockmod->Sock_Type == NULL)) { return -1; - PySocketModule = *socket_api; - - return 0; -} - -static int -sslmodule_init_errorcodes(PyObject *module) -{ - struct py_ssl_error_code *errcode; - struct py_ssl_library_code *libcode; - - /* Mappings for error codes */ - err_codes_to_names = PyDict_New(); - if (err_codes_to_names == NULL) - return -1; - err_names_to_codes = PyDict_New(); - if (err_names_to_codes == NULL) - return -1; - lib_codes_to_names = PyDict_New(); - if (lib_codes_to_names == NULL) - return -1; - - errcode = error_codes; - while (errcode->mnemonic != NULL) { - PyObject *mnemo, *key; - mnemo = PyUnicode_FromString(errcode->mnemonic); - key = Py_BuildValue("ii", errcode->library, errcode->reason); - if (mnemo == NULL || key == NULL) - return -1; - if (PyDict_SetItem(err_codes_to_names, key, mnemo)) - return -1; - if (PyDict_SetItem(err_names_to_codes, mnemo, key)) - return -1; - Py_DECREF(key); - Py_DECREF(mnemo); - errcode++; } - - libcode = library_codes; - while (libcode->library != NULL) { - PyObject *mnemo, *key; - key = PyLong_FromLong(libcode->code); - mnemo = PyUnicode_FromString(libcode->library); - if (key == NULL || mnemo == NULL) - return -1; - if (PyDict_SetItem(lib_codes_to_names, key, mnemo)) - return -1; - Py_DECREF(key); - Py_DECREF(mnemo); - libcode++; - } - - if (PyModule_AddObject(module, "err_codes_to_names", err_codes_to_names)) - return -1; - if (PyModule_AddObject(module, "err_names_to_codes", err_names_to_codes)) - return -1; - if (PyModule_AddObject(module, "lib_codes_to_names", lib_codes_to_names)) - return -1; - - return 0; -} - -static void -parse_openssl_version(unsigned long libver, - unsigned int *major, unsigned int *minor, - unsigned int *fix, unsigned int *patch, - unsigned int *status) -{ - *status = libver & 0xF; - libver >>= 4; - *patch = libver & 0xFF; - libver >>= 8; - *fix = libver & 0xFF; - libver >>= 8; - *minor = libver & 0xFF; - libver >>= 8; - *major = libver & 0xFF; -} - -static int -sslmodule_init_versioninfo(PyObject *m) -{ - PyObject *r; - unsigned long libver; - unsigned int major, minor, fix, patch, status; - - /* OpenSSL version */ - /* SSLeay() gives us the version of the library linked against, - which could be different from the headers version. - */ - libver = OpenSSL_version_num(); - r = PyLong_FromUnsignedLong(libver); - if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_NUMBER", r)) - return -1; - - parse_openssl_version(libver, &major, &minor, &fix, &patch, &status); - r = Py_BuildValue("IIIII", major, minor, fix, patch, status); - if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_INFO", r)) - return -1; - - r = PyUnicode_FromString(OpenSSL_version(OPENSSL_VERSION)); - if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION", r)) - return -1; - - libver = OPENSSL_VERSION_NUMBER; - parse_openssl_version(libver, &major, &minor, &fix, &patch, &status); - r = Py_BuildValue("IIIII", major, minor, fix, patch, status); - if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r)) - return -1; - + state->Sock_Type = sockmod->Sock_Type; + Py_INCREF(state->Sock_Type); return 0; } static int sslmodule_init_constants(PyObject *m) { + PyModule_AddStringConstant(m, "_DEFAULT_CIPHERS", PY_SSL_DEFAULT_CIPHER_STRING); @@ -5905,44 +5778,235 @@ sslmodule_init_constants(PyObject *m) return 0; } -PyDoc_STRVAR(module_doc, -"Implementation module for SSL socket operations. See the socket module\n\ -for documentation."); +static int +sslmodule_init_errorcodes(PyObject *module) +{ + _sslmodulestate *state = get_ssl_state(module); + struct py_ssl_error_code *errcode; + struct py_ssl_library_code *libcode; -static struct PyModuleDef _sslmodule = { - PyModuleDef_HEAD_INIT, - "_ssl", - module_doc, - -1, - PySSL_methods, - NULL, - NULL, - NULL, - NULL + /* Mappings for error codes */ + state->err_codes_to_names = PyDict_New(); + if (state->err_codes_to_names == NULL) + return -1; + state->err_names_to_codes = PyDict_New(); + if (state->err_names_to_codes == NULL) + return -1; + state->lib_codes_to_names = PyDict_New(); + if (state->lib_codes_to_names == NULL) + return -1; + + errcode = error_codes; + while (errcode->mnemonic != NULL) { + PyObject *mnemo, *key; + mnemo = PyUnicode_FromString(errcode->mnemonic); + key = Py_BuildValue("ii", errcode->library, errcode->reason); + if (mnemo == NULL || key == NULL) + return -1; + if (PyDict_SetItem(state->err_codes_to_names, key, mnemo)) + return -1; + if (PyDict_SetItem(state->err_names_to_codes, mnemo, key)) + return -1; + Py_DECREF(key); + Py_DECREF(mnemo); + errcode++; + } + + libcode = library_codes; + while (libcode->library != NULL) { + PyObject *mnemo, *key; + key = PyLong_FromLong(libcode->code); + mnemo = PyUnicode_FromString(libcode->library); + if (key == NULL || mnemo == NULL) + return -1; + if (PyDict_SetItem(state->lib_codes_to_names, key, mnemo)) + return -1; + Py_DECREF(key); + Py_DECREF(mnemo); + libcode++; + } + + if (PyModule_AddObjectRef(module, "err_codes_to_names", state->err_codes_to_names)) + return -1; + if (PyModule_AddObjectRef(module, "err_names_to_codes", state->err_names_to_codes)) + return -1; + if (PyModule_AddObjectRef(module, "lib_codes_to_names", state->lib_codes_to_names)) + return -1; + + return 0; +} + +static void +parse_openssl_version(unsigned long libver, + unsigned int *major, unsigned int *minor, + unsigned int *fix, unsigned int *patch, + unsigned int *status) +{ + *status = libver & 0xF; + libver >>= 4; + *patch = libver & 0xFF; + libver >>= 8; + *fix = libver & 0xFF; + libver >>= 8; + *minor = libver & 0xFF; + libver >>= 8; + *major = libver & 0xFF; +} + +static int +sslmodule_init_versioninfo(PyObject *m) +{ + PyObject *r; + unsigned long libver; + unsigned int major, minor, fix, patch, status; + + /* OpenSSL version */ + /* SSLeay() gives us the version of the library linked against, + which could be different from the headers version. + */ + libver = OpenSSL_version_num(); + r = PyLong_FromUnsignedLong(libver); + if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_NUMBER", r)) + return -1; + + parse_openssl_version(libver, &major, &minor, &fix, &patch, &status); + r = Py_BuildValue("IIIII", major, minor, fix, patch, status); + if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_INFO", r)) + return -1; + + r = PyUnicode_FromString(OpenSSL_version(OPENSSL_VERSION)); + if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION", r)) + return -1; + + libver = OPENSSL_VERSION_NUMBER; + parse_openssl_version(libver, &major, &minor, &fix, &patch, &status); + r = Py_BuildValue("IIIII", major, minor, fix, patch, status); + if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r)) + return -1; + + return 0; +} + +static int +sslmodule_init_types(PyObject *module) +{ + _sslmodulestate *state = get_ssl_state(module); + + state->PySSLContext_Type = (PyTypeObject *)PyType_FromModuleAndSpec( + module, &PySSLContext_spec, NULL + ); + if (state->PySSLContext_Type == NULL) + return -1; + + state->PySSLSocket_Type = (PyTypeObject *)PyType_FromModuleAndSpec( + module, &PySSLSocket_spec, NULL + ); + if (state->PySSLSocket_Type == NULL) + return -1; + + state->PySSLMemoryBIO_Type = (PyTypeObject *)PyType_FromModuleAndSpec( + module, &PySSLMemoryBIO_spec, NULL + ); + if (state->PySSLMemoryBIO_Type == NULL) + return -1; + + state->PySSLSession_Type = (PyTypeObject *)PyType_FromModuleAndSpec( + module, &PySSLSession_spec, NULL + ); + if (state->PySSLSession_Type == NULL) + return -1; + + if (PyModule_AddType(module, state->PySSLContext_Type)) + return -1; + if (PyModule_AddType(module, state->PySSLSocket_Type)) + return -1; + if (PyModule_AddType(module, state->PySSLMemoryBIO_Type)) + return -1; + if (PyModule_AddType(module, state->PySSLSession_Type)) + return -1; + + return 0; +} + +static PyModuleDef_Slot sslmodule_slots[] = { + {Py_mod_exec, sslmodule_init_types}, + {Py_mod_exec, sslmodule_init_exceptions}, + {Py_mod_exec, sslmodule_init_socketapi}, + {Py_mod_exec, sslmodule_init_errorcodes}, + {Py_mod_exec, sslmodule_init_constants}, + {Py_mod_exec, sslmodule_init_versioninfo}, + {0, NULL} }; -PyMODINIT_FUNC -PyInit__ssl(void) +static int +sslmodule_traverse(PyObject *m, visitproc visit, void *arg) { - PyObject *m; + _sslmodulestate *state = get_ssl_state(m); + + Py_VISIT(state->PySSLContext_Type); + Py_VISIT(state->PySSLSocket_Type); + Py_VISIT(state->PySSLMemoryBIO_Type); + Py_VISIT(state->PySSLSession_Type); + Py_VISIT(state->PySSLErrorObject); + Py_VISIT(state->PySSLCertVerificationErrorObject); + Py_VISIT(state->PySSLZeroReturnErrorObject); + Py_VISIT(state->PySSLWantReadErrorObject); + Py_VISIT(state->PySSLWantWriteErrorObject); + Py_VISIT(state->PySSLSyscallErrorObject); + Py_VISIT(state->PySSLEOFErrorObject); + Py_VISIT(state->err_codes_to_names); + Py_VISIT(state->err_names_to_codes); + Py_VISIT(state->lib_codes_to_names); + Py_VISIT(state->Sock_Type); - m = PyModule_Create(&_sslmodule); - if (m == NULL) - return NULL; + return 0; +} - if (sslmodule_init_types(m) != 0) - return NULL; - if (sslmodule_init_exceptions(m) != 0) - return NULL; - if (sslmodule_init_socketapi(m) != 0) - return NULL; - if (sslmodule_init_errorcodes(m) != 0) - return NULL; - if (sslmodule_init_constants(m) != 0) - return NULL; - if (sslmodule_init_versioninfo(m) != 0) - return NULL; +static int +sslmodule_clear(PyObject *m) +{ + _sslmodulestate *state = get_ssl_state(m); + + Py_CLEAR(state->PySSLContext_Type); + Py_CLEAR(state->PySSLSocket_Type); + Py_CLEAR(state->PySSLMemoryBIO_Type); + Py_CLEAR(state->PySSLSession_Type); + Py_CLEAR(state->PySSLErrorObject); + Py_CLEAR(state->PySSLCertVerificationErrorObject); + Py_CLEAR(state->PySSLZeroReturnErrorObject); + Py_CLEAR(state->PySSLWantReadErrorObject); + Py_CLEAR(state->PySSLWantWriteErrorObject); + Py_CLEAR(state->PySSLSyscallErrorObject); + Py_CLEAR(state->PySSLEOFErrorObject); + Py_CLEAR(state->err_codes_to_names); + Py_CLEAR(state->err_names_to_codes); + Py_CLEAR(state->lib_codes_to_names); + Py_CLEAR(state->Sock_Type); + + return 0; +} + +static void +sslmodule_free(void *m) +{ + sslmodule_clear((PyObject *)m); +} - return m; +static struct PyModuleDef _sslmodule_def = { + PyModuleDef_HEAD_INIT, + .m_name = "_ssl", + .m_doc = module_doc, + .m_size = sizeof(_sslmodulestate), + .m_methods = PySSL_methods, + .m_slots = sslmodule_slots, + .m_traverse = sslmodule_traverse, + .m_clear = sslmodule_clear, + .m_free = sslmodule_free +}; + +PyMODINIT_FUNC +PyInit__ssl(void) +{ + return PyModuleDef_Init(&_sslmodule_def); } diff --git a/Modules/_ssl.h b/Modules/_ssl.h new file mode 100644 index 0000000000000..3fd517b6d3683 --- /dev/null +++ b/Modules/_ssl.h @@ -0,0 +1,45 @@ +#ifndef Py_SSL_H +#define Py_SSL_H + +/* + * ssl module state + */ +typedef struct { + /* Types */ + PyTypeObject *PySSLContext_Type; + PyTypeObject *PySSLSocket_Type; + PyTypeObject *PySSLMemoryBIO_Type; + PyTypeObject *PySSLSession_Type; + /* SSL error object */ + PyObject *PySSLErrorObject; + PyObject *PySSLCertVerificationErrorObject; + PyObject *PySSLZeroReturnErrorObject; + PyObject *PySSLWantReadErrorObject; + PyObject *PySSLWantWriteErrorObject; + PyObject *PySSLSyscallErrorObject; + PyObject *PySSLEOFErrorObject; + /* Error mappings */ + PyObject *err_codes_to_names; + PyObject *err_names_to_codes; + PyObject *lib_codes_to_names; + /* socket type from module CAPI */ + PyTypeObject *Sock_Type; +} _sslmodulestate; + +static struct PyModuleDef _sslmodule_def; + +Py_LOCAL_INLINE(_sslmodulestate*) +get_ssl_state(PyObject *module) +{ + void *state = PyModule_GetState(module); + assert(state != NULL); + return (_sslmodulestate *)state; +} + +#define get_state_type(type) \ + (get_ssl_state(_PyType_GetModuleByDef(type, &_sslmodule_def))) +#define get_state_ctx(c) (((PySSLContext *)(c))->state) +#define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state) +#define get_state_mbio(b) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(b))) + +#endif /* Py_SSL_H */ diff --git a/Modules/_ssl/debughelpers.c b/Modules/_ssl/debughelpers.c index f39372ca53d9e..03c125eb44fd3 100644 --- a/Modules/_ssl/debughelpers.c +++ b/Modules/_ssl/debughelpers.c @@ -21,7 +21,7 @@ _PySSL_msg_callback(int write_p, int version, int content_type, threadstate = PyGILState_Ensure(); ssl_obj = (PySSLSocket *)SSL_get_app_data(ssl); - assert(PySSLSocket_Check(ssl_obj)); + assert(Py_IS_TYPE(ssl_obj, get_state_sock(ssl_obj)->PySSLSocket_Type)); if (ssl_obj->ctx->msg_cb == NULL) { PyGILState_Release(threadstate); return; @@ -125,7 +125,7 @@ _PySSL_keylog_callback(const SSL *ssl, const char *line) threadstate = PyGILState_Ensure(); ssl_obj = (PySSLSocket *)SSL_get_app_data(ssl); - assert(PySSLSocket_Check(ssl_obj)); + assert(Py_IS_TYPE(ssl_obj, get_state_sock(ssl_obj)->PySSLSocket_Type)); if (ssl_obj->ctx->keylog_bio == NULL) { return; } @@ -199,7 +199,7 @@ _PySSLContext_set_keylog_filename(PySSLContext *self, PyObject *arg, void *c) { self->keylog_bio = BIO_new_fp(fp, BIO_CLOSE | BIO_FP_TEXT); if (self->keylog_bio == NULL) { - PyErr_SetString(PySSLErrorObject, + PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "Can't malloc memory for keylog file"); return -1; } diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 74ab5a8244d49..45c3095a9f6f0 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -374,7 +374,7 @@ _ssl__SSLContext(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *return_value = NULL; int proto_version; - if ((type == PySSLContext_Type) && + if ((type == get_state_type(type)->PySSLContext_Type) && !_PyArg_NoKeywords("_SSLContext", kwargs)) { goto exit; } @@ -619,8 +619,8 @@ _ssl__SSLContext__wrap_socket(PySSLContext *self, PyObject *const *args, Py_ssiz if (!args) { goto exit; } - if (!PyObject_TypeCheck(args[0], PySocketModule.Sock_Type)) { - _PyArg_BadArgument("_wrap_socket", "argument 'sock'", (PySocketModule.Sock_Type)->tp_name, args[0]); + if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->Sock_Type)) { + _PyArg_BadArgument("_wrap_socket", "argument 'sock'", (get_state_ctx(self)->Sock_Type)->tp_name, args[0]); goto exit; } sock = args[0]; @@ -689,13 +689,13 @@ _ssl__SSLContext__wrap_bio(PySSLContext *self, PyObject *const *args, Py_ssize_t if (!args) { goto exit; } - if (!PyObject_TypeCheck(args[0], PySSLMemoryBIO_Type)) { - _PyArg_BadArgument("_wrap_bio", "argument 'incoming'", (PySSLMemoryBIO_Type)->tp_name, args[0]); + if (!PyObject_TypeCheck(args[0], get_state_ctx(self)->PySSLMemoryBIO_Type)) { + _PyArg_BadArgument("_wrap_bio", "argument 'incoming'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[0]); goto exit; } incoming = (PySSLMemoryBIO *)args[0]; - if (!PyObject_TypeCheck(args[1], PySSLMemoryBIO_Type)) { - _PyArg_BadArgument("_wrap_bio", "argument 'outgoing'", (PySSLMemoryBIO_Type)->tp_name, args[1]); + if (!PyObject_TypeCheck(args[1], get_state_ctx(self)->PySSLMemoryBIO_Type)) { + _PyArg_BadArgument("_wrap_bio", "argument 'outgoing'", (get_state_ctx(self)->PySSLMemoryBIO_Type)->tp_name, args[1]); goto exit; } outgoing = (PySSLMemoryBIO *)args[1]; @@ -850,11 +850,11 @@ _ssl_MemoryBIO(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; - if ((type == PySSLMemoryBIO_Type) && + if ((type == get_state_type(type)->PySSLMemoryBIO_Type) && !_PyArg_NoPositional("MemoryBIO", args)) { goto exit; } - if ((type == PySSLMemoryBIO_Type) && + if ((type == get_state_type(type)->PySSLMemoryBIO_Type) && !_PyArg_NoKeywords("MemoryBIO", kwargs)) { goto exit; } @@ -1324,4 +1324,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=ae3d1851daba6562 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=83e68c77bd96789a input=a9049054013a1b77]*/ diff --git a/setup.py b/setup.py index 605f7d628e733..af384409553eb 100644 --- a/setup.py +++ b/setup.py @@ -2428,14 +2428,6 @@ def split_var(name, sep): self.missing.extend(['_ssl', '_hashlib']) return None, None - self.add(Extension( - '_ssl', ['_ssl.c'], - include_dirs=openssl_includes, - library_dirs=openssl_libdirs, - libraries=openssl_libs, - depends=['socketmodule.h', '_ssl/debughelpers.c']) - ) - if openssl_rpath == 'auto': runtime_library_dirs = openssl_libdirs[:] elif not openssl_rpath: @@ -2469,7 +2461,7 @@ def split_var(name, sep): Extension( '_ssl', ['_ssl.c'], - depends=['socketmodule.h', '_ssl/debughelpers.c'], + depends=['socketmodule.h', '_ssl/debughelpers.c', '_ssl.h'], **openssl_extension_kwargs ) ) From webhook-mailer at python.org Sat Apr 17 17:27:07 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 17 Apr 2021 21:27:07 -0000 Subject: [Python-checkins] bpo-38530: Include builtins in NameError suggestions (GH-25460) Message-ID: https://github.com/python/cpython/commit/3ab4bea5a3ac28820781cf62a768c65370c9054c commit: 3ab4bea5a3ac28820781cf62a768c65370c9054c branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-17T22:26:54+01:00 summary: bpo-38530: Include builtins in NameError suggestions (GH-25460) files: M Lib/test/test_exceptions.py M Python/suggestions.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index bd20b232e541f..b730858a99735 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1477,6 +1477,16 @@ def func(): sys.__excepthook__(*sys.exc_info()) self.assertIn("global_for_suggestions?", err.getvalue()) + def test_name_error_suggestions_from_builtins(self): + def func(): + print(AttributeErrop) + try: + func() + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertIn("AttributeError?", err.getvalue()) + def test_name_error_suggestions_do_not_trigger_for_long_names(self): def f(): somethingverywronghehehehehehe = None @@ -1490,7 +1500,7 @@ def f(): self.assertNotIn("somethingverywronghehe", err.getvalue()) - def test_name_error_suggestions_do_not_trigger_for_big_dicts(self): + def test_name_error_suggestions_do_not_trigger_for_too_many_locals(self): def f(): # Mutating locals() is unreliable, so we need to do it by hand a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = a10 = a11 = a12 = a13 = \ @@ -1501,7 +1511,13 @@ def f(): a62 = a63 = a64 = a65 = a66 = a67 = a68 = a69 = a70 = a71 = a72 = a73 = \ a74 = a75 = a76 = a77 = a78 = a79 = a80 = a81 = a82 = a83 = a84 = a85 = \ a86 = a87 = a88 = a89 = a90 = a91 = a92 = a93 = a94 = a95 = a96 = a97 = \ - a98 = a99 = a100 = a101 = a102 = a103 = None + a98 = a99 = a100 = a101 = a102 = a103 = a104 = a105 = a106 = a107 = \ + a108 = a109 = a110 = a111 = a112 = a113 = a114 = a115 = a116 = a117 = \ + a118 = a119 = a120 = a121 = a122 = a123 = a124 = a125 = a126 = \ + a127 = a128 = a129 = a130 = a131 = a132 = a133 = a134 = a135 = a136 = \ + a137 = a138 = a139 = a140 = a141 = a142 = a143 = a144 = a145 = \ + a146 = a147 = a148 = a149 = a150 = a151 = a152 = a153 = a154 = a155 = \ + a156 = a157 = a158 = a159 = a160 = a161 = None print(a0) try: @@ -1510,7 +1526,7 @@ def f(): with support.captured_stderr() as err: sys.__excepthook__(*sys.exc_info()) - self.assertNotIn("a10", err.getvalue()) + self.assertNotIn("a1", err.getvalue()) def test_name_error_with_custom_exceptions(self): def f(): @@ -1643,7 +1659,7 @@ class A: blech = None # A class with a very big __dict__ will not be consider # for suggestions. - for index in range(101): + for index in range(160): setattr(A, f"index_{index}", None) try: diff --git a/Python/suggestions.c b/Python/suggestions.c index e422760920739..aa4870d13e1ab 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -4,7 +4,7 @@ #include "pycore_pyerrors.h" #define MAX_DISTANCE 3 -#define MAX_CANDIDATE_ITEMS 100 +#define MAX_CANDIDATE_ITEMS 160 #define MAX_STRING_SIZE 25 /* Calculate the Levenshtein distance between string1 and string2 */ @@ -171,6 +171,16 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { } suggestions = calculate_suggestions(dir, name); Py_DECREF(dir); + if (suggestions != NULL) { + return suggestions; + } + + dir = PySequence_List(frame->f_builtins); + if (dir == NULL) { + return NULL; + } + suggestions = calculate_suggestions(dir, name); + Py_DECREF(dir); return suggestions; } From webhook-mailer at python.org Sat Apr 17 17:27:16 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 17 Apr 2021 21:27:16 -0000 Subject: [Python-checkins] bpo-37630: Do not skip the sha3 tests in case of missing builtin sha3 module (GH-20986) Message-ID: https://github.com/python/cpython/commit/685719871ac3fb6aff3468b9c5328fc66f5486d7 commit: 685719871ac3fb6aff3468b9c5328fc66f5486d7 branch: master author: stratakis committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-17T14:27:07-07:00 summary: bpo-37630: Do not skip the sha3 tests in case of missing builtin sha3 module (GH-20986) Since we can use now the sha3 and shake algorithms from OpenSSL, we shouldn't skip the tests in case the builtin algorithm was not compiled or removed. files: M Lib/test/test_hashlib.py diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 0e06fdc9885dc..bf9f559400460 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -60,13 +60,6 @@ requires_blake2 = unittest.skipUnless(_blake2, 'requires _blake2') -try: - import _sha3 -except ImportError: - _sha3 = None - -requires_sha3 = unittest.skipUnless(_sha3, 'requires _sha3') - def hexstr(s): assert isinstance(s, bytes), repr(s) @@ -389,7 +382,6 @@ def test_no_unicode_blake2(self): self.check_no_unicode('blake2b') self.check_no_unicode('blake2s') - @requires_sha3 def test_no_unicode_sha3(self): self.check_no_unicode('sha3_224') self.check_no_unicode('sha3_256') @@ -425,7 +417,6 @@ def test_blocksize_name(self): self.check_blocksize_name('sha384', 128, 48) self.check_blocksize_name('sha512', 128, 64) - @requires_sha3 def test_blocksize_name_sha3(self): self.check_blocksize_name('sha3_224', 144, 28) self.check_blocksize_name('sha3_256', 136, 32) @@ -446,7 +437,6 @@ def check_sha3(self, name, capacity, rate, suffix): self.assertEqual(m._rate_bits, rate) self.assertEqual(m._suffix, suffix) - @requires_sha3 def test_extra_sha3(self): self.check_sha3('sha3_224', 448, 1152, b'\x06') self.check_sha3('sha3_256', 512, 1088, b'\x06') @@ -786,68 +776,56 @@ def test_blake2s_vectors(self): key = bytes.fromhex(key) self.check('blake2s', msg, md, key=key) - @requires_sha3 def test_case_sha3_224_0(self): self.check('sha3_224', b"", "6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7") - @requires_sha3 def test_case_sha3_224_vector(self): for msg, md in read_vectors('sha3_224'): self.check('sha3_224', msg, md) - @requires_sha3 def test_case_sha3_256_0(self): self.check('sha3_256', b"", "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a") - @requires_sha3 def test_case_sha3_256_vector(self): for msg, md in read_vectors('sha3_256'): self.check('sha3_256', msg, md) - @requires_sha3 def test_case_sha3_384_0(self): self.check('sha3_384', b"", "0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2a"+ "c3713831264adb47fb6bd1e058d5f004") - @requires_sha3 def test_case_sha3_384_vector(self): for msg, md in read_vectors('sha3_384'): self.check('sha3_384', msg, md) - @requires_sha3 def test_case_sha3_512_0(self): self.check('sha3_512', b"", "a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a6"+ "15b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26") - @requires_sha3 def test_case_sha3_512_vector(self): for msg, md in read_vectors('sha3_512'): self.check('sha3_512', msg, md) - @requires_sha3 def test_case_shake_128_0(self): self.check('shake_128', b"", "7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26", True) self.check('shake_128', b"", "7f9c", True) - @requires_sha3 def test_case_shake128_vector(self): for msg, md in read_vectors('shake_128'): self.check('shake_128', msg, md, True) - @requires_sha3 def test_case_shake_256_0(self): self.check('shake_256', b"", "46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762f", True) self.check('shake_256', b"", "46b9", True) - @requires_sha3 def test_case_shake256_vector(self): for msg, md in read_vectors('shake_256'): self.check('shake_256', msg, md, True) From webhook-mailer at python.org Sat Apr 17 17:41:54 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 17 Apr 2021 21:41:54 -0000 Subject: [Python-checkins] Small changes to the section about SyntaxErrors in the 3.10 What's New document (GH-25461) Message-ID: https://github.com/python/cpython/commit/8bf274a5002c013dd4086f6390fa19452b63ac1d commit: 8bf274a5002c013dd4086f6390fa19452b63ac1d branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-17T22:41:46+01:00 summary: Small changes to the section about SyntaxErrors in the 3.10 What's New document (GH-25461) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 0198b6e75deab..523668c765331 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -176,90 +176,102 @@ have been incorporated. Some of the most notable ones: * Missing ``:`` before blocks: -.. code-block:: python + .. code-block:: python - >>> if rocket.position > event_horizon - File "", line 1 - if rocket.position > event_horizon - ^ - SyntaxError: expected ':' + >>> if rocket.position > event_horizon + File "", line 1 + if rocket.position > event_horizon + ^ + SyntaxError: expected ':' + (Contributed by Pablo Galindo in :issue:`42997`) * Unparenthesised tuples in comprehensions targets: -.. code-block:: python + .. code-block:: python - >>> {x,y for x,y in range(100)} - File "", line 1 - {x,y for x,y in range(100)} - ^ - SyntaxError: did you forget parentheses around the comprehension target? + >>> {x,y for x,y in range(100)} + File "", line 1 + {x,y for x,y in range(100)} + ^ + SyntaxError: did you forget parentheses around the comprehension target? -* Missing commas in collection literals: + (Contributed by Pablo Galindo in :issue:`43017`) -.. code-block:: python +* Missing commas in collection literals and between expressions: + + .. code-block:: python - >>> items = { - ... x: 1, - ... y: 2 - ... z: 3, - File "", line 3 - y: 2 - ^ - SyntaxError: invalid syntax. Perhaps you forgot a comma? + >>> items = { + ... x: 1, + ... y: 2 + ... z: 3, + File "", line 3 + y: 2 + ^ + SyntaxError: invalid syntax. Perhaps you forgot a comma? + + (Contributed by Pablo Galindo in :issue:`43822`) * Exception groups without parentheses: -.. code-block:: python + .. code-block:: python - >>> try: - ... build_dyson_sphere() - ... except NotEnoughScienceError, NotEnoughResourcesError: - File "", line 3 - except NotEnoughScienceError, NotEnoughResourcesError: - ^ - SyntaxError: exception group must be parenthesized + >>> try: + ... build_dyson_sphere() + ... except NotEnoughScienceError, NotEnoughResourcesError: + File "", line 3 + except NotEnoughScienceError, NotEnoughResourcesError: + ^ + SyntaxError: exception group must be parenthesized + + (Contributed by Pablo Galindo in :issue:`43149`) * Missing ``:`` and values in dictionary literals: -.. code-block:: python + .. code-block:: python + + >>> values = { + ... x: 1, + ... y: 2, + ... z: + ... } + File "", line 4 + z: + ^ + SyntaxError: expression expected after dictionary key and ':' - >>> values = { - ... x: 1, - ... y: 2, - ... z: - ... } - File "", line 4 - z: - ^ - SyntaxError: expression expected after dictionary key and ':' - - >>> values = {x:1, y:2, z w:3} - File "", line 1 - values = {x:1, y:2, z w:3} - ^ - SyntaxError: ':' expected after dictionary key + >>> values = {x:1, y:2, z w:3} + File "", line 1 + values = {x:1, y:2, z w:3} + ^ + SyntaxError: ':' expected after dictionary key + + (Contributed by Pablo Galindo in :issue:`43823`) * Usage of ``=`` instead of ``==`` in comparisons: -.. code-block:: python + .. code-block:: python - >>> if rocket.position = event_horizon: - File "", line 1 - if rocket.position = event_horizon: - ^ - SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? + >>> if rocket.position = event_horizon: + File "", line 1 + if rocket.position = event_horizon: + ^ + SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? + + (Contributed by Pablo Galindo in :issue:`43797`) * Usage of ``*`` in f-strings: -.. code-block:: python + .. code-block:: python - >>> f"Black holes {*all_black_holes} and revelations" - File "", line 1 - (*all_black_holes) - ^ - SyntaxError: f-string: cannot use starred expression here + >>> f"Black holes {*all_black_holes} and revelations" + File "", line 1 + (*all_black_holes) + ^ + SyntaxError: f-string: cannot use starred expression here + (Contributed by Pablo Galindo in :issue:`41064`) AttributeErrors ~~~~~~~~~~~~~~~ From webhook-mailer at python.org Sat Apr 17 18:28:54 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 17 Apr 2021 22:28:54 -0000 Subject: [Python-checkins] bpo-38530: Cover more error paths in error suggestion functions (GH-25462) Message-ID: https://github.com/python/cpython/commit/0b1c169c4a009e1094fe5df938d2367e63ebeea0 commit: 0b1c169c4a009e1094fe5df938d2367e63ebeea0 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-17T23:28:45+01:00 summary: bpo-38530: Cover more error paths in error suggestion functions (GH-25462) files: M Lib/test/test_exceptions.py M Python/suggestions.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index b730858a99735..d1e1b196c4278 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1741,6 +1741,16 @@ def __dir__(self): self.assertNotIn("blech", err.getvalue()) self.assertNotIn("oh no!", err.getvalue()) + def test_attribute_error_with_bad_name(self): + try: + raise AttributeError(name=12, obj=23) + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("?", err.getvalue()) + + class ImportErrorTests(unittest.TestCase): def test_attributes(self): diff --git a/Python/suggestions.c b/Python/suggestions.c index aa4870d13e1ab..d4e9dc22bbc7b 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -8,7 +8,7 @@ #define MAX_STRING_SIZE 25 /* Calculate the Levenshtein distance between string1 and string2 */ -static size_t +static Py_ssize_t levenshtein_distance(const char *a, size_t a_size, const char *b, size_t b_size) { @@ -33,7 +33,7 @@ levenshtein_distance(const char *a, size_t a_size, size_t *buffer = PyMem_Calloc(a_size, sizeof(size_t)); if (buffer == NULL) { - return 0; + return -1; } // Initialize the buffer row @@ -99,6 +99,9 @@ calculate_suggestions(PyObject *dir, } Py_ssize_t current_distance = levenshtein_distance( name_str, name_size, item_str, item_size); + if (current_distance == -1) { + return NULL; + } if (current_distance == 0 || current_distance > MAX_DISTANCE) { continue; } From webhook-mailer at python.org Sat Apr 17 19:18:17 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 17 Apr 2021 23:18:17 -0000 Subject: [Python-checkins] Fix type group capture in the PEG highlight tool (GH-25464) Message-ID: https://github.com/python/cpython/commit/f5c5c0c362f84b3af168563ac9dec1d03cf8565a commit: f5c5c0c362f84b3af168563ac9dec1d03cf8565a branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-18T00:18:13+01:00 summary: Fix type group capture in the PEG highlight tool (GH-25464) files: M Doc/tools/extensions/peg_highlight.py diff --git a/Doc/tools/extensions/peg_highlight.py b/Doc/tools/extensions/peg_highlight.py index 4ade1bfeaa047..42101be10ea9b 100644 --- a/Doc/tools/extensions/peg_highlight.py +++ b/Doc/tools/extensions/peg_highlight.py @@ -42,14 +42,19 @@ class PEGLexer(RegexLexer): (r"(@\w+ '''(.|\n)+?''')", bygroups(None)), (r"^(@.*)$", bygroups(None)), ], - "actions": [(r"{(.|\n)+?}", bygroups(None)),], + "actions": [ + (r"{(.|\n)+?}", bygroups(None)), + ], "strings": [ (r"'\w+?'", Keyword), (r'"\w+?"', Keyword), (r"'\W+?'", Text), (r'"\W+?"', Text), ], - "variables": [(_name + _text_ws + r"(\[.*\])?" + _text_ws + "(=)", bygroups(None, None, None, None, None),),], + "variables": [ + (_name + _text_ws + "(=)", bygroups(None, None, None),), + (_name + _text_ws + r"(\[[\w\d_\*]+?\])" + _text_ws + "(=)", bygroups(None, None, None, None, None),), + ], "invalids": [ (r"^(\s+\|\s+invalid_\w+\s*\n)", bygroups(None)), (r"^(\s+\|\s+incorrect_\w+\s*\n)", bygroups(None)), From webhook-mailer at python.org Sun Apr 18 02:39:48 2021 From: webhook-mailer at python.org (tiran) Date: Sun, 18 Apr 2021 06:39:48 -0000 Subject: [Python-checkins] bpo-43362: Fix invalid free and return check in _sha3 module (GH-25463) Message-ID: https://github.com/python/cpython/commit/aa6da32edc3c6ddfda5e849561e20273b8d82771 commit: aa6da32edc3c6ddfda5e849561e20273b8d82771 branch: master author: Christian Heimes committer: tiran date: 2021-04-18T08:39:39+02:00 summary: bpo-43362: Fix invalid free and return check in _sha3 module (GH-25463) Commit 93d50a6a8d0c5d332c11aef267e66573a09765ac / GH-21855 changed the order of variable definitions, which introduced a potential invalid free bug. Py_buffer object is now initialized earlier and the result of Keccak initialize is verified. Co-authored-by: Alex Henrie Signed-off-by: Christian Heimes Co-authored-by: Alex Henrie files: A Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst M Modules/_sha3/sha3module.c diff --git a/Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst b/Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst new file mode 100644 index 0000000000000..713a683bc8eb3 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst @@ -0,0 +1,2 @@ +Fix invalid free in _sha3 module. The issue was introduced in 3.10.0a1. +Python 3.9 and earlier are not affected. diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index cae10f99d5b8d..27f69385cc3eb 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -193,15 +193,16 @@ static PyObject * py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity) /*[clinic end generated code: output=90409addc5d5e8b0 input=bcfcdf2e4368347a]*/ { + HashReturn res; + Py_buffer buf = {NULL, NULL}; + SHA3State *state = PyType_GetModuleState(type); SHA3object *self = newSHA3object(type); if (self == NULL) { goto error; } - SHA3State *state = PyType_GetModuleState(type); assert(state != NULL); - HashReturn res; if (type == state->sha3_224_type) { res = Keccak_HashInitialize_SHA3_224(&self->hash_state); } else if (type == state->sha3_256_type) { @@ -229,7 +230,12 @@ py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity) goto error; } - Py_buffer buf = {NULL, NULL}; + if (res != SUCCESS) { + PyErr_SetString(PyExc_RuntimeError, + "internal error in SHA3 initialize()"); + goto error; + } + if (data) { GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error); if (buf.len >= HASHLIB_GIL_MINSIZE) { From webhook-mailer at python.org Sun Apr 18 03:11:01 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 18 Apr 2021 07:11:01 -0000 Subject: [Python-checkins] bpo-43641: Stop stating that TLS 1.2 is the most modern version in docs (GH-25041) Message-ID: https://github.com/python/cpython/commit/2798f247c0747d28cb857fa80803797b24696cb6 commit: 2798f247c0747d28cb857fa80803797b24696cb6 branch: master author: Illia Volochii committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-18T00:10:53-07:00 summary: bpo-43641: Stop stating that TLS 1.2 is the most modern version in docs (GH-25041) Automerge-Triggered-By: GH:tiran files: M Doc/library/ssl.rst diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 9f7459217a8fb..9d5e063456ec2 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -732,9 +732,8 @@ Constants .. data:: PROTOCOL_TLSv1_2 - Selects TLS version 1.2 as the channel encryption protocol. This is the - most modern version, and probably the best choice for maximum protection, - if both sides can speak it. Available only with openssl version 1.0.1+. + Selects TLS version 1.2 as the channel encryption protocol. + Available only with openssl version 1.0.1+. .. versionadded:: 3.4 From webhook-mailer at python.org Sun Apr 18 07:11:52 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 18 Apr 2021 11:11:52 -0000 Subject: [Python-checkins] bpo-36076: Add SNI support to ssl.get_server_certificate. (GH-16820) Message-ID: https://github.com/python/cpython/commit/49fdf118aeda891401d638ac32296c7d55d54678 commit: 49fdf118aeda891401d638ac32296c7d55d54678 branch: master author: juhovh committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-18T04:11:48-07:00 summary: bpo-36076: Add SNI support to ssl.get_server_certificate. (GH-16820) Many servers in the cloud environment require SNI to be used during the SSL/TLS handshake, therefore it is not possible to fetch their certificates using the ssl.get_server_certificate interface. This change adds an additional optional hostname argument that can be used to set the SNI. Note that it is intentionally a separate argument instead of using the host part of the addr tuple, because one might want to explicitly fetch the default certificate or fetch a certificate from a specific IP address with the specified SNI hostname. A separate argument also works better for backwards compatibility. Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst M Lib/ssl.py M Lib/test/test_ssl.py M Misc/ACKS diff --git a/Lib/ssl.py b/Lib/ssl.py index 9c1ba581dd66f..99d0852dad18d 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -1475,7 +1475,7 @@ def get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None): cert_reqs=cert_reqs, cafile=ca_certs) with create_connection(addr) as sock: - with context.wrap_socket(sock) as sslsock: + with context.wrap_socket(sock, server_hostname=host) as sslsock: dercert = sslsock.getpeercert(True) return DER_cert_to_PEM_cert(dercert) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 3ad14c63968e6..403261dda9680 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1962,7 +1962,9 @@ class SimpleBackgroundTests(unittest.TestCase): """Tests that connect to a simple server running in the background""" def setUp(self): - server = ThreadedEchoServer(SIGNED_CERTFILE) + self.server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + self.server_context.load_cert_chain(SIGNED_CERTFILE) + server = ThreadedEchoServer(context=self.server_context) self.server_addr = (HOST, server.port) server.__enter__() self.addCleanup(server.__exit__, None, None, None) @@ -2143,6 +2145,28 @@ def test_non_blocking_handshake(self): def test_get_server_certificate(self): _test_get_server_certificate(self, *self.server_addr, cert=SIGNING_CA) + @needs_sni + def test_get_server_certificate_sni(self): + host, port = self.server_addr + server_names = [] + + # We store servername_cb arguments to make sure they match the host + def servername_cb(ssl_sock, server_name, initial_context): + server_names.append(server_name) + self.server_context.set_servername_callback(servername_cb) + + pem = ssl.get_server_certificate((host, port)) + if not pem: + self.fail("No server certificate on %s:%s!" % (host, port)) + + pem = ssl.get_server_certificate((host, port), ca_certs=SIGNING_CA) + if not pem: + self.fail("No server certificate on %s:%s!" % (host, port)) + if support.verbose: + sys.stdout.write("\nVerified certificate for %s:%s is\n%s\n" % (host, port, pem)) + + self.assertEqual(server_names, [host, host]) + def test_get_server_certificate_fail(self): # Connection failure crashes ThreadedEchoServer, so run this in an # independent test method diff --git a/Misc/ACKS b/Misc/ACKS index 20359762a5217..1eeae0caef50a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1803,6 +1803,7 @@ Michael Urman Hector Urtubia Elizabeth Uselton Lukas Vacek +Juho V?h?-Herttua Ville Vainio Yann Vaginay Andi Vajda diff --git a/Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst b/Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst new file mode 100644 index 0000000000000..7e9bc4e461e06 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst @@ -0,0 +1 @@ +Added SNI support to :func:`ssl.get_server_certificate`. From webhook-mailer at python.org Mon Apr 19 00:55:38 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 19 Apr 2021 04:55:38 -0000 Subject: [Python-checkins] bpo-42854: Use SSL_read/write_ex() (GH-25468) Message-ID: https://github.com/python/cpython/commit/89d1550d14ba689af12eeb726e4ff8ce73cee7e1 commit: 89d1550d14ba689af12eeb726e4ff8ce73cee7e1 branch: master author: Christian Heimes committer: tiran date: 2021-04-19T06:55:30+02:00 summary: bpo-42854: Use SSL_read/write_ex() (GH-25468) The ssl module now uses ``SSL_read_ex`` and ``SSL_write_ex`` internally. The functions support reading and writing of data larger than 2 GB. Writing zero-length data no longer fails with a protocol violation error. Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst M Doc/library/ssl.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 9d5e063456ec2..8bac365ffc0e4 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -1122,6 +1122,11 @@ SSL Sockets to create instances directly. This was never documented or officially supported. + .. versionchanged:: 3.10 + Python now uses ``SSL_read_ex`` and ``SSL_write_ex`` internally. The + functions support reading and writing of data larger than 2 GB. Writing + zero-length data no longer fails with a protocol violation error. + SSL sockets also have the following additional methods and attributes: .. method:: SSLSocket.read(len=1024, buffer=None) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 403261dda9680..7b70979026dcf 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1110,6 +1110,17 @@ def test_connect_ex_error(self): ) self.assertIn(rc, errors) + def test_read_write_zero(self): + # empty reads and writes now work, bpo-42854, bpo-31711 + client_context, server_context, hostname = testing_context() + server = ThreadedEchoServer(context=server_context) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.send(b""), 0) + class ContextTests(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst b/Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst new file mode 100644 index 0000000000000..3941fd85635f0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst @@ -0,0 +1,4 @@ +The :mod:`ssl` module now uses ``SSL_read_ex`` and ``SSL_write_ex`` +internally. The functions support reading and writing of data larger +than 2 GB. Writing zero-length data no longer fails with a protocol +violation error. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 376d3bb11a40b..f371d4210a488 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -2186,7 +2186,8 @@ static PyObject * _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) /*[clinic end generated code: output=aa7a6be5527358d8 input=77262d994fe5100a]*/ { - int len; + size_t count = 0; + int retval; int sockstate; _PySSLError err; int nonblocking; @@ -2204,12 +2205,6 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) Py_INCREF(sock); } - if (b->len > INT_MAX) { - PyErr_Format(PyExc_OverflowError, - "string longer than %d bytes", INT_MAX); - goto error; - } - if (sock != NULL) { /* just in case the blocking state of the socket has been changed */ nonblocking = (sock->sock_timeout >= 0); @@ -2239,8 +2234,8 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) do { PySSL_BEGIN_ALLOW_THREADS - len = SSL_write(self->ssl, b->buf, (int)b->len); - err = _PySSL_errno(len <= 0, self->ssl, len); + retval = SSL_write_ex(self->ssl, b->buf, (int)b->len, &count); + err = _PySSL_errno(retval == 0, self->ssl, retval); PySSL_END_ALLOW_THREADS self->err = err; @@ -2273,11 +2268,11 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b) err.ssl == SSL_ERROR_WANT_WRITE); Py_XDECREF(sock); - if (len <= 0) - return PySSL_SetError(self, len, __FILE__, __LINE__); + if (retval == 0) + return PySSL_SetError(self, retval, __FILE__, __LINE__); if (PySSL_ChainExceptions(self) < 0) return NULL; - return PyLong_FromLong(len); + return PyLong_FromSize_t(count); error: Py_XDECREF(sock); PySSL_ChainExceptions(self); @@ -2327,7 +2322,8 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, { PyObject *dest = NULL; char *mem; - int count; + size_t count = 0; + int retval; int sockstate; _PySSLError err; int nonblocking; @@ -2390,8 +2386,8 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, do { PySSL_BEGIN_ALLOW_THREADS - count = SSL_read(self->ssl, mem, len); - err = _PySSL_errno(count <= 0, self->ssl, count); + retval = SSL_read_ex(self->ssl, mem, len, &count); + err = _PySSL_errno(retval == 0, self->ssl, retval); PySSL_END_ALLOW_THREADS self->err = err; @@ -2424,8 +2420,8 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, } while (err.ssl == SSL_ERROR_WANT_READ || err.ssl == SSL_ERROR_WANT_WRITE); - if (count <= 0) { - PySSL_SetError(self, count, __FILE__, __LINE__); + if (retval == 0) { + PySSL_SetError(self, retval, __FILE__, __LINE__); goto error; } if (self->exc_type != NULL) @@ -2438,7 +2434,7 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, return dest; } else { - return PyLong_FromLong(count); + return PyLong_FromSize_t(count); } error: From webhook-mailer at python.org Mon Apr 19 01:27:19 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 19 Apr 2021 05:27:19 -0000 Subject: [Python-checkins] bpo-43880: Show DeprecationWarnings for deprecated ssl module features (GH-25455) Message-ID: https://github.com/python/cpython/commit/2875c603b2a7691b55c2046aca54831c91efda8e commit: 2875c603b2a7691b55c2046aca54831c91efda8e branch: master author: Christian Heimes committer: tiran date: 2021-04-19T07:27:10+02:00 summary: bpo-43880: Show DeprecationWarnings for deprecated ssl module features (GH-25455) * ssl.OP_NO_SSLv2 * ssl.OP_NO_SSLv3 * ssl.OP_NO_TLSv1 * ssl.OP_NO_TLSv1_1 * ssl.OP_NO_TLSv1_2 * ssl.OP_NO_TLSv1_3 * ssl.PROTOCOL_SSLv2 * ssl.PROTOCOL_SSLv3 * ssl.PROTOCOL_SSLv23 (alias for PROTOCOL_TLS) * ssl.PROTOCOL_TLS * ssl.PROTOCOL_TLSv1 * ssl.PROTOCOL_TLSv1_1 * ssl.PROTOCOL_TLSv1_2 * ssl.TLSVersion.SSLv3 * ssl.TLSVersion.TLSv1 * ssl.TLSVersion.TLSv1_1 * ssl.wrap_socket() * ssl.RAND_pseudo_bytes() * ssl.RAND_egd() (already removed since it's not supported by OpenSSL 1.1.1) * ssl.SSLContext() without a protocol argument * ssl.match_hostname() * hashlib.pbkdf2_hmac() (pure Python implementation, fast OpenSSL function will stay) Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst M Doc/library/hashlib.rst M Doc/library/ssl.rst M Lib/hashlib.py M Lib/ssl.py M Lib/test/pythoninfo.py M Lib/test/test_asyncio/utils.py M Lib/test/test_ftplib.py M Lib/test/test_hashlib.py M Lib/test/test_imaplib.py M Lib/test/test_nntplib.py M Lib/test/test_poplib.py M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 48c0bab1eb306..d77a2e5912d5e 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -266,6 +266,12 @@ include a `salt `_. Python implementation uses an inline version of :mod:`hmac`. It is about three times slower and doesn't release the GIL. + .. deprecated:: 3.10 + + Slow Python implementation of *pbkdf2_hmac* is deprecated. In the + future the function will only be available when Python is compiled + with OpenSSL. + .. function:: scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64) The function provides scrypt password-based key derivation function as diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 8bac365ffc0e4..c954d9c8febb0 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -25,8 +25,8 @@ probably additional platforms, as long as OpenSSL is installed on that platform. Some behavior may be platform dependent, since calls are made to the operating system socket APIs. The installed version of OpenSSL may also - cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with - openssl version 1.0.1. + cause variations in behavior. For example, TLSv1.3 with OpenSSL version + 1.1.1. .. warning:: Don't use this module without reading the :ref:`ssl-security`. Doing so @@ -63,6 +63,8 @@ by SSL sockets created through the :meth:`SSLContext.wrap_socket` method. :pep:`644` has been implemented. The ssl module requires OpenSSL 1.1.1 or newer. + Use of deprecated constants and functions result in deprecation warnings. + Functions, Constants, and Exceptions ------------------------------------ @@ -136,8 +138,9 @@ purposes. :const:`None`, this function can choose to trust the system's default CA certificates instead. - The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and - :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and + The settings are: :data:`PROTOCOL_TLS_CLIENT` or + :data:`PROTOCOL_TLS_SERVER`, :data:`OP_NO_SSLv2`, and :data:`OP_NO_SSLv3` + with high encryption cipher suites without RC4 and without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH` as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED` and either loads CA certificates (when at least one of *cafile*, *capath* or @@ -185,6 +188,12 @@ purposes. Support for key logging to :envvar:`SSLKEYLOGFILE` was added. + .. versionchanged:: 3.10 + + The context now uses :data:`PROTOCOL_TLS_CLIENT` or + :data:`PROTOCOL_TLS_SERVER` protocol instead of generic + :data:`PROTOCOL_TLS`. + Exceptions ^^^^^^^^^^ @@ -417,7 +426,7 @@ Certificate handling previously. Return an integer (no fractions of a second in the input format) -.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None) +.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None) Given the address ``addr`` of an SSL-protected server, as a (*hostname*, *port-number*) pair, fetches the server's certificate, and returns it as a @@ -654,6 +663,8 @@ Constants .. versionadded:: 3.6 + .. deprecated:: 3.10 + .. data:: PROTOCOL_TLS_CLIENT Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`, @@ -707,7 +718,10 @@ Constants .. deprecated:: 3.6 OpenSSL has deprecated all version specific protocols. Use the default - protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead. + protocol :data:`PROTOCOL_TLS_SERVER` or :data:`PROTOCOL_TLS_CLIENT` + with :attr:`SSLContext.minimum_version` and + :attr:`SSLContext.maximum_version` instead. + .. data:: PROTOCOL_TLSv1 @@ -715,8 +729,7 @@ Constants .. deprecated:: 3.6 - OpenSSL has deprecated all version specific protocols. Use the default - protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead. + OpenSSL has deprecated all version specific protocols. .. data:: PROTOCOL_TLSv1_1 @@ -727,8 +740,7 @@ Constants .. deprecated:: 3.6 - OpenSSL has deprecated all version specific protocols. Use the default - protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead. + OpenSSL has deprecated all version specific protocols. .. data:: PROTOCOL_TLSv1_2 @@ -739,8 +751,7 @@ Constants .. deprecated:: 3.6 - OpenSSL has deprecated all version specific protocols. Use the default - protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead. + OpenSSL has deprecated all version specific protocols. .. data:: OP_ALL @@ -762,7 +773,6 @@ Constants SSLv2 is deprecated - .. data:: OP_NO_SSLv3 Prevents an SSLv3 connection. This option is only applicable in @@ -1068,6 +1078,11 @@ Constants SSL 3.0 to TLS 1.3. + .. deprecated:: 3.10 + + All :class:`TLSVersion` members except :attr:`TLSVersion.TLSv1_2` and + :attr:`TLSVersion.TLSv1_3` are deprecated. + SSL Sockets ----------- @@ -1423,7 +1438,7 @@ such as SSL configuration options, certificate(s) and private key(s). It also manages a cache of SSL sessions for server-side sockets, in order to speed up repeated connections from the same clients. -.. class:: SSLContext(protocol=PROTOCOL_TLS) +.. class:: SSLContext(protocol=None) Create a new SSL context. You may pass *protocol* which must be one of the ``PROTOCOL_*`` constants defined in this module. The parameter @@ -1472,6 +1487,12 @@ to speed up repeated connections from the same clients. ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for :data:`PROTOCOL_SSLv2`). + .. deprecated:: 3.10 + + :class:`SSLContext` without protocol argument is deprecated. The + context class will either require :data:`PROTOCOL_TLS_CLIENT` or + :data:`PROTOCOL_TLS_SERVER` protocol in the future. + :class:`SSLContext` objects have the following methods and attributes: @@ -1934,7 +1955,7 @@ to speed up repeated connections from the same clients. .. attribute:: SSLContext.num_tickets Control the number of TLS 1.3 session tickets of a - :attr:`TLS_PROTOCOL_SERVER` context. The setting has no impact on TLS + :attr:`PROTOCOL_TLS_SERVER` context. The setting has no impact on TLS 1.0 to 1.2 connections. .. versionadded:: 3.8 @@ -1951,6 +1972,12 @@ to speed up repeated connections from the same clients. >>> ssl.create_default_context().options # doctest: +SKIP + .. deprecated:: 3.7 + + All ``OP_NO_SSL*`` and ``OP_NO_TLS*`` options have been deprecated since + Python 3.7. Use :attr:`SSLContext.minimum_version` and + :attr:`SSLContext.maximum_version` instead. + .. attribute:: SSLContext.post_handshake_auth Enable TLS 1.3 post-handshake client authentication. Post-handshake auth @@ -2623,8 +2650,8 @@ disabled by default. :: >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - >>> client_context.options |= ssl.OP_NO_TLSv1 - >>> client_context.options |= ssl.OP_NO_TLSv1_1 + >>> client_context.minimum_version = ssl.TLSVersion.TLSv1_3 + >>> client_context.maximum_version = ssl.TLSVersion.TLSv1_3 The SSL context created above will only allow TLSv1.2 and later (if diff --git a/Lib/hashlib.py b/Lib/hashlib.py index ffa3be049a4f3..21a73f3bf6cb6 100644 --- a/Lib/hashlib.py +++ b/Lib/hashlib.py @@ -181,6 +181,7 @@ def __hash_new(name, data=b'', **kwargs): # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA from _hashlib import pbkdf2_hmac except ImportError: + from warnings import warn as _warn _trans_5C = bytes((x ^ 0x5C) for x in range(256)) _trans_36 = bytes((x ^ 0x36) for x in range(256)) @@ -191,6 +192,11 @@ def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None): as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster for long passwords. """ + _warn( + "Python implementation of pbkdf2_hmac() is deprecated.", + category=DeprecationWarning, + stacklevel=2 + ) if not isinstance(hash_name, str): raise TypeError(hash_name) diff --git a/Lib/ssl.py b/Lib/ssl.py index 99d0852dad18d..d631805d6cabe 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -381,6 +381,11 @@ def match_hostname(cert, hostname): CertificateError is raised on failure. On success, the function returns nothing. """ + warnings.warn( + "ssl module: match_hostname() is deprecated", + category=DeprecationWarning, + stacklevel=2 + ) if not cert: raise ValueError("empty or no certificate, match_hostname needs a " "SSL socket or SSL context with either " @@ -479,7 +484,15 @@ class SSLContext(_SSLContext): sslsocket_class = None # SSLSocket is assigned later. sslobject_class = None # SSLObject is assigned later. - def __new__(cls, protocol=PROTOCOL_TLS, *args, **kwargs): + def __new__(cls, protocol=None, *args, **kwargs): + if protocol is None: + warnings.warn( + "ssl module: " + "SSLContext() without protocol argument is deprecated.", + category=DeprecationWarning, + stacklevel=2 + ) + protocol = PROTOCOL_TLS self = _SSLContext.__new__(cls, protocol) return self @@ -518,6 +531,7 @@ def wrap_bio(self, incoming, outgoing, server_side=False, ) def set_npn_protocols(self, npn_protocols): + warnings.warn("NPN is deprecated, use ALPN instead", stacklevel=2) protos = bytearray() for protocol in npn_protocols: b = bytes(protocol, 'ascii') @@ -734,12 +748,15 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE # by default. - context = SSLContext(PROTOCOL_TLS) - if purpose == Purpose.SERVER_AUTH: # verify certs and host name in client mode + context = SSLContext(PROTOCOL_TLS_CLIENT) context.verify_mode = CERT_REQUIRED context.check_hostname = True + elif purpose == Purpose.CLIENT_AUTH: + context = SSLContext(PROTOCOL_TLS_SERVER) + else: + raise ValueError(purpose) if cafile or capath or cadata: context.load_verify_locations(cafile, capath, cadata) @@ -755,7 +772,7 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, context.keylog_filename = keylogfile return context -def _create_unverified_context(protocol=PROTOCOL_TLS, *, cert_reqs=CERT_NONE, +def _create_unverified_context(protocol=None, *, cert_reqs=CERT_NONE, check_hostname=False, purpose=Purpose.SERVER_AUTH, certfile=None, keyfile=None, cafile=None, capath=None, cadata=None): @@ -772,10 +789,18 @@ def _create_unverified_context(protocol=PROTOCOL_TLS, *, cert_reqs=CERT_NONE, # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE # by default. - context = SSLContext(protocol) + if purpose == Purpose.SERVER_AUTH: + # verify certs and host name in client mode + if protocol is None: + protocol = PROTOCOL_TLS_CLIENT + elif purpose == Purpose.CLIENT_AUTH: + if protocol is None: + protocol = PROTOCOL_TLS_SERVER + else: + raise ValueError(purpose) - if not check_hostname: - context.check_hostname = False + context = SSLContext(protocol) + context.check_hostname = check_hostname if cert_reqs is not None: context.verify_mode = cert_reqs if check_hostname: @@ -909,6 +934,9 @@ def selected_npn_protocol(self): """Return the currently selected NPN protocol as a string, or ``None`` if a next protocol was not negotiated or if NPN is not supported by one of the peers.""" + warnings.warn( + "ssl module: NPN is deprecated, use ALPN instead", stacklevel=2 + ) def selected_alpn_protocol(self): """Return the currently selected ALPN protocol as a string, or ``None`` @@ -1123,6 +1151,9 @@ def getpeercert(self, binary_form=False): @_sslcopydoc def selected_npn_protocol(self): self._checkClosed() + warnings.warn( + "ssl module: NPN is deprecated, use ALPN instead", stacklevel=2 + ) return None @_sslcopydoc @@ -1382,7 +1413,11 @@ def wrap_socket(sock, keyfile=None, certfile=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None): - + warnings.warn( + "ssl module: wrap_socket is deprecated, use SSLContext.wrap_socket()", + category=DeprecationWarning, + stacklevel=2 + ) if server_side and not certfile: raise ValueError("certfile must be specified for server-side " "operations") @@ -1460,7 +1495,7 @@ def PEM_cert_to_DER_cert(pem_cert_string): d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -def get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None): +def get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None): """Retrieve the certificate from the server at the specified address, and return it as a PEM-encoded string. If 'ca_certs' is specified, validate the server cert against it. diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py index cc228fb3b54c9..278dfe7f7da7a 100644 --- a/Lib/test/pythoninfo.py +++ b/Lib/test/pythoninfo.py @@ -504,7 +504,7 @@ def format_attr(attr, value): copy_attributes(info_add, ssl, 'ssl.%s', attributes, formatter=format_attr) for name, ctx in ( - ('SSLContext', ssl.SSLContext()), + ('SSLContext', ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)), ('default_https_context', ssl._create_default_https_context()), ('stdlib_context', ssl._create_stdlib_context()), ): diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py index 0032c9a331f75..3765194cd0dd2 100644 --- a/Lib/test/test_asyncio/utils.py +++ b/Lib/test/test_asyncio/utils.py @@ -91,7 +91,7 @@ def dummy_ssl_context(): if ssl is None: return None else: - return ssl.SSLContext(ssl.PROTOCOL_TLS) + return simple_client_sslcontext(disable_verify=True) def run_briefly(loop): @@ -158,7 +158,7 @@ def finish_request(self, request, client_address): # contains the ssl key and certificate files) differs # between the stdlib and stand-alone asyncio. # Prefer our own if we can find it. - context = ssl.SSLContext() + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(ONLYCERT, ONLYKEY) ssock = context.wrap_socket(request, server_side=True) diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index 154dce15e2c37..a48b429ca3802 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -324,7 +324,7 @@ class SSLConnection(asyncore.dispatcher): _ssl_closing = False def secure_connection(self): - context = ssl.SSLContext() + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(CERTFILE) socket = context.wrap_socket(self.socket, suppress_ragged_eofs=False, diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index bf9f559400460..9e9c874445c27 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -21,6 +21,7 @@ from test.support import _4G, bigmemtest from test.support.import_helper import import_fresh_module from test.support import threading_helper +from test.support import warnings_helper from http.client import HTTPException # Were we compiled --with-pydebug or with #define Py_DEBUG? @@ -1021,7 +1022,10 @@ def _test_pbkdf2_hmac(self, pbkdf2, supported): @unittest.skipIf(builtin_hashlib is None, "test requires builtin_hashlib") def test_pbkdf2_hmac_py(self): - self._test_pbkdf2_hmac(builtin_hashlib.pbkdf2_hmac, builtin_hashes) + with warnings_helper.check_warnings(): + self._test_pbkdf2_hmac( + builtin_hashlib.pbkdf2_hmac, builtin_hashes + ) @unittest.skipUnless(hasattr(openssl_hashlib, 'pbkdf2_hmac'), ' test requires OpenSSL > 1.0') diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index 0cab7897a96dc..c2b935f58164e 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -96,7 +96,7 @@ class SecureTCPServer(socketserver.TCPServer): def get_request(self): newsocket, fromaddr = self.socket.accept() - context = ssl.SSLContext() + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(CERTFILE) connstream = context.wrap_socket(newsocket, server_side=True) return connstream, fromaddr diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py index 4dbf941036f09..230a444389467 100644 --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -1602,7 +1602,7 @@ def run_server(self, sock): elif cmd == b'STARTTLS\r\n': reader.close() client.sendall(b'382 Begin TLS negotiation now\r\n') - context = ssl.SSLContext() + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(certfile) client = context.wrap_socket( client, server_side=True) diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py index 548868362a397..c5ae9f77e4f00 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -155,7 +155,7 @@ def cmd_utf8(self, arg): def cmd_stls(self, arg): if self.tls_active is False: self.push('+OK Begin TLS negotiation') - context = ssl.SSLContext() + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(CERTFILE) tls_sock = context.wrap_socket(self.socket, server_side=True, diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 7b70979026dcf..a2c79ff5927f1 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -224,7 +224,7 @@ def has_tls_version(version): # check runtime and dynamic crypto policy settings. A TLS version may # be compiled in but disabled by a policy or config option. - ctx = ssl.SSLContext() + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) if ( hasattr(ctx, 'minimum_version') and ctx.minimum_version != ssl.TLSVersion.MINIMUM_SUPPORTED and @@ -306,12 +306,20 @@ def asn1time(cert_time): needs_sni = unittest.skipUnless(ssl.HAS_SNI, "SNI support needed for this test") +ignore_deprecation = warnings_helper.ignore_warnings( + category=DeprecationWarning +) + -def test_wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLS, *, +def test_wrap_socket(sock, *, cert_reqs=ssl.CERT_NONE, ca_certs=None, ciphers=None, certfile=None, keyfile=None, **kwargs): - context = ssl.SSLContext(ssl_version) + if not kwargs.get("server_side"): + kwargs["server_hostname"] = SIGNED_CERTFILE_HOSTNAME + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + else: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) if cert_reqs is not None: if cert_reqs == ssl.CERT_NONE: context.check_hostname = False @@ -378,8 +386,8 @@ def test_private_init(self): def test_str_for_enums(self): # Make sure that the PROTOCOL_* constants have enum-like string # reprs. - proto = ssl.PROTOCOL_TLS - self.assertEqual(str(proto), 'PROTOCOL_TLS') + proto = ssl.PROTOCOL_TLS_CLIENT + self.assertEqual(str(proto), 'PROTOCOL_TLS_CLIENT') ctx = ssl.SSLContext(proto) self.assertIs(ctx.protocol, proto) @@ -390,7 +398,8 @@ def test_random(self): % (v, (v and "sufficient randomness") or "insufficient randomness")) - data, is_cryptographic = ssl.RAND_pseudo_bytes(16) + with warnings_helper.check_warnings(): + data, is_cryptographic = ssl.RAND_pseudo_bytes(16) self.assertEqual(len(data), 16) self.assertEqual(is_cryptographic, v == 1) if v: @@ -401,48 +410,13 @@ def test_random(self): # negative num is invalid self.assertRaises(ValueError, ssl.RAND_bytes, -5) - self.assertRaises(ValueError, ssl.RAND_pseudo_bytes, -5) + with warnings_helper.check_warnings(): + self.assertRaises(ValueError, ssl.RAND_pseudo_bytes, -5) - if hasattr(ssl, 'RAND_egd'): - self.assertRaises(TypeError, ssl.RAND_egd, 1) - self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1) ssl.RAND_add("this is a random string", 75.0) ssl.RAND_add(b"this is a random bytes object", 75.0) ssl.RAND_add(bytearray(b"this is a random bytearray object"), 75.0) - @unittest.skipUnless(hasattr(os, 'fork'), 'need os.fork') - def test_random_fork(self): - status = ssl.RAND_status() - if not status: - self.fail("OpenSSL's PRNG has insufficient randomness") - - rfd, wfd = os.pipe() - pid = os.fork() - if pid == 0: - try: - os.close(rfd) - child_random = ssl.RAND_pseudo_bytes(16)[0] - self.assertEqual(len(child_random), 16) - os.write(wfd, child_random) - os.close(wfd) - except BaseException: - os._exit(1) - else: - os._exit(0) - else: - os.close(wfd) - self.addCleanup(os.close, rfd) - support.wait_process(pid, exitcode=0) - - child_random = os.read(rfd, 16) - self.assertEqual(len(child_random), 16) - parent_random = ssl.RAND_pseudo_bytes(16)[0] - self.assertEqual(len(parent_random), 16) - - self.assertNotEqual(child_random, parent_random) - - maxDiff = None - def test_parse_cert(self): # note that this uses an 'unofficial' function in _ssl.c, # provided solely for this test, to exercise the certificate @@ -624,6 +598,7 @@ def test_timeout(self): with test_wrap_socket(s) as ss: self.assertEqual(timeout, ss.gettimeout()) + @ignore_deprecation def test_errors_sslwrap(self): sock = socket.socket() self.assertRaisesRegex(ValueError, @@ -675,6 +650,7 @@ def test_malformed_key(self): """Wrapping with a badly formatted key (syntax error)""" self.bad_cert_test("badkey.pem") + @ignore_deprecation def test_match_hostname(self): def ok(cert, hostname): ssl.match_hostname(cert, hostname) @@ -1126,17 +1102,15 @@ class ContextTests(unittest.TestCase): def test_constructor(self): for protocol in PROTOCOLS: - ssl.SSLContext(protocol) - ctx = ssl.SSLContext() + with warnings_helper.check_warnings(): + ctx = ssl.SSLContext(protocol) + self.assertEqual(ctx.protocol, protocol) + with warnings_helper.check_warnings(): + ctx = ssl.SSLContext() self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) self.assertRaises(ValueError, ssl.SSLContext, -1) self.assertRaises(ValueError, ssl.SSLContext, 42) - def test_protocol(self): - for proto in PROTOCOLS: - ctx = ssl.SSLContext(proto) - self.assertEqual(ctx.protocol, proto) - def test_ciphers(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.set_ciphers("ALL") @@ -1174,16 +1148,19 @@ def test_options(self): OP_ENABLE_MIDDLEBOX_COMPAT | OP_IGNORE_UNEXPECTED_EOF) self.assertEqual(default, ctx.options) - ctx.options |= ssl.OP_NO_TLSv1 + with warnings_helper.check_warnings(): + ctx.options |= ssl.OP_NO_TLSv1 self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) - ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1) + with warnings_helper.check_warnings(): + ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1) self.assertEqual(default, ctx.options) ctx.options = 0 # Ubuntu has OP_NO_SSLv3 forced on by default self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3) def test_verify_mode_protocol(self): - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + with warnings_helper.check_warnings(): + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) # Default value self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) ctx.verify_mode = ssl.CERT_OPTIONAL @@ -1221,6 +1198,7 @@ def test_hostname_checks_common_name(self): @requires_minimum_version @unittest.skipIf(IS_LIBRESSL, "see bpo-34001") + @ignore_deprecation def test_min_max_version(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # OpenSSL default is MINIMUM_SUPPORTED, however some vendors like @@ -1304,7 +1282,7 @@ def test_min_max_version(self): "requires OpenSSL >= 1.1.0" ) def test_security_level(self): - ctx = ssl.SSLContext() + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) # The default security callback allows for levels between 0-5 # with OpenSSL defaulting to 1, however some vendors override the # default value (e.g. Debian defaults to 2) @@ -1513,7 +1491,7 @@ def test_load_dh_params(self): ctx.load_dh_params(CERTFILE) def test_session_stats(self): - for proto in PROTOCOLS: + for proto in {ssl.PROTOCOL_TLS_CLIENT, ssl.PROTOCOL_TLS_SERVER}: ctx = ssl.SSLContext(proto) self.assertEqual(ctx.session_stats(), { 'number': 0, @@ -1673,7 +1651,7 @@ def _assert_context_options(self, ctx): def test_create_default_context(self): ctx = ssl.create_default_context() - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_CLIENT) self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) self.assertTrue(ctx.check_hostname) self._assert_context_options(ctx) @@ -1682,42 +1660,49 @@ def test_create_default_context(self): cadata = f.read() ctx = ssl.create_default_context(cafile=SIGNING_CA, capath=CAPATH, cadata=cadata) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_CLIENT) self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) self._assert_context_options(ctx) ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_SERVER) self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) self._assert_context_options(ctx) + + def test__create_stdlib_context(self): ctx = ssl._create_stdlib_context() - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_CLIENT) self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) self.assertFalse(ctx.check_hostname) self._assert_context_options(ctx) - ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1) + with warnings_helper.check_warnings(): + ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1) self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1) self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) self._assert_context_options(ctx) - ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1, - cert_reqs=ssl.CERT_REQUIRED, - check_hostname=True) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1) + with warnings_helper.check_warnings(): + ctx = ssl._create_stdlib_context( + ssl.PROTOCOL_TLSv1_2, + cert_reqs=ssl.CERT_REQUIRED, + check_hostname=True + ) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1_2) self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) self.assertTrue(ctx.check_hostname) self._assert_context_options(ctx) ctx = ssl._create_stdlib_context(purpose=ssl.Purpose.CLIENT_AUTH) - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS_SERVER) self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) self._assert_context_options(ctx) def test_check_hostname(self): - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + with warnings_helper.check_warnings(): + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) self.assertFalse(ctx.check_hostname) self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) @@ -2042,7 +2027,9 @@ def test_non_blocking_connect_ex(self): def test_connect_with_context(self): # Same as test_connect, but with a separately created context - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE with ctx.wrap_socket(socket.socket(socket.AF_INET)) as s: s.connect(self.server_addr) self.assertEqual({}, s.getpeercert()) @@ -2062,9 +2049,11 @@ def test_connect_with_context_fail(self): # This should fail because we have no verification certs. Connection # failure crashes ThreadedEchoServer, so run this in an independent # test method. - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) - ctx.verify_mode = ssl.CERT_REQUIRED - s = ctx.wrap_socket(socket.socket(socket.AF_INET)) + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + s = ctx.wrap_socket( + socket.socket(socket.AF_INET), + server_hostname=SIGNED_CERTFILE_HOSTNAME + ) self.addCleanup(s.close) self.assertRaisesRegex(ssl.SSLError, "certificate verify failed", s.connect, self.server_addr) @@ -2075,19 +2064,19 @@ def test_connect_capath(self): # OpenSSL 0.9.8n and 1.0.0, as a result the capath directory must # contain both versions of each certificate (same content, different # filename) for this test to be portable across OpenSSL releases. - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) - ctx.verify_mode = ssl.CERT_REQUIRED + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(capath=CAPATH) - with ctx.wrap_socket(socket.socket(socket.AF_INET)) as s: + with ctx.wrap_socket(socket.socket(socket.AF_INET), + server_hostname=SIGNED_CERTFILE_HOSTNAME) as s: s.connect(self.server_addr) cert = s.getpeercert() self.assertTrue(cert) # Same with a bytes `capath` argument - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) - ctx.verify_mode = ssl.CERT_REQUIRED + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(capath=BYTES_CAPATH) - with ctx.wrap_socket(socket.socket(socket.AF_INET)) as s: + with ctx.wrap_socket(socket.socket(socket.AF_INET), + server_hostname=SIGNED_CERTFILE_HOSTNAME) as s: s.connect(self.server_addr) cert = s.getpeercert() self.assertTrue(cert) @@ -2096,19 +2085,19 @@ def test_connect_cadata(self): with open(SIGNING_CA) as f: pem = f.read() der = ssl.PEM_cert_to_DER_cert(pem) - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) - ctx.verify_mode = ssl.CERT_REQUIRED + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(cadata=pem) - with ctx.wrap_socket(socket.socket(socket.AF_INET)) as s: + with ctx.wrap_socket(socket.socket(socket.AF_INET), + server_hostname=SIGNED_CERTFILE_HOSTNAME) as s: s.connect(self.server_addr) cert = s.getpeercert() self.assertTrue(cert) # same with DER - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) - ctx.verify_mode = ssl.CERT_REQUIRED + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(cadata=der) - with ctx.wrap_socket(socket.socket(socket.AF_INET)) as s: + with ctx.wrap_socket(socket.socket(socket.AF_INET), + server_hostname=SIGNED_CERTFILE_HOSTNAME) as s: s.connect(self.server_addr) cert = s.getpeercert() self.assertTrue(cert) @@ -2302,7 +2291,8 @@ def test_bio_read_write_data(self): sock.connect(self.server_addr) incoming = ssl.MemoryBIO() outgoing = ssl.MemoryBIO() - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE sslobj = ctx.wrap_bio(incoming, outgoing, False) self.ssl_io_loop(sock, incoming, outgoing, sslobj.do_handshake) @@ -2384,7 +2374,6 @@ def wrap_conn(self): try: self.sslconn = self.server.context.wrap_socket( self.sock, server_side=True) - self.server.selected_npn_protocols.append(self.sslconn.selected_npn_protocol()) self.server.selected_alpn_protocols.append(self.sslconn.selected_alpn_protocol()) except (ConnectionResetError, BrokenPipeError, ConnectionAbortedError) as e: # We treat ConnectionResetError as though it were an @@ -2433,8 +2422,6 @@ def wrap_conn(self): cipher = self.sslconn.cipher() if support.verbose and self.server.chatty: sys.stdout.write(" server: connection cipher is now " + str(cipher) + "\n") - sys.stdout.write(" server: selected protocol is now " - + str(self.sslconn.selected_npn_protocol()) + "\n") return True def read(self): @@ -2562,7 +2549,7 @@ def run(self): def __init__(self, certificate=None, ssl_version=None, certreqs=None, cacerts=None, chatty=True, connectionchatty=False, starttls_server=False, - npn_protocols=None, alpn_protocols=None, + alpn_protocols=None, ciphers=None, context=None): if context: self.context = context @@ -2576,8 +2563,6 @@ def __init__(self, certificate=None, ssl_version=None, self.context.load_verify_locations(cacerts) if certificate: self.context.load_cert_chain(certificate) - if npn_protocols: - self.context.set_npn_protocols(npn_protocols) if alpn_protocols: self.context.set_alpn_protocols(alpn_protocols) if ciphers: @@ -2589,7 +2574,6 @@ def __init__(self, certificate=None, ssl_version=None, self.port = socket_helper.bind_port(self.sock) self.flag = None self.active = False - self.selected_npn_protocols = [] self.selected_alpn_protocols = [] self.shared_ciphers = [] self.conn_errors = [] @@ -2796,14 +2780,12 @@ def server_params_test(client_context, server_context, indata=b"FOO\n", 'cipher': s.cipher(), 'peercert': s.getpeercert(), 'client_alpn_protocol': s.selected_alpn_protocol(), - 'client_npn_protocol': s.selected_npn_protocol(), 'version': s.version(), 'session_reused': s.session_reused, 'session': s.session, }) s.close() stats['server_alpn_protocols'] = server.selected_alpn_protocols - stats['server_npn_protocols'] = server.selected_npn_protocols stats['server_shared_ciphers'] = server.shared_ciphers return stats @@ -2829,21 +2811,26 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success, (ssl.get_protocol_name(client_protocol), ssl.get_protocol_name(server_protocol), certtype)) - client_context = ssl.SSLContext(client_protocol) - client_context.options |= client_options - server_context = ssl.SSLContext(server_protocol) - server_context.options |= server_options + + with warnings_helper.check_warnings(): + # ignore Deprecation warnings + client_context = ssl.SSLContext(client_protocol) + client_context.options |= client_options + server_context = ssl.SSLContext(server_protocol) + server_context.options |= server_options min_version = PROTOCOL_TO_TLS_VERSION.get(client_protocol, None) if (min_version is not None - # SSLContext.minimum_version is only available on recent OpenSSL - # (setter added in OpenSSL 1.1.0, getter added in OpenSSL 1.1.1) - and hasattr(server_context, 'minimum_version') - and server_protocol == ssl.PROTOCOL_TLS - and server_context.minimum_version > min_version): + # SSLContext.minimum_version is only available on recent OpenSSL + # (setter added in OpenSSL 1.1.0, getter added in OpenSSL 1.1.1) + and hasattr(server_context, 'minimum_version') + and server_protocol == ssl.PROTOCOL_TLS + and server_context.minimum_version > min_version + ): # If OpenSSL configuration is strict and requires more recent TLS # version, we have to change the minimum to test old TLS versions. - server_context.minimum_version = min_version + with warnings_helper.check_warnings(): + server_context.minimum_version = min_version # NOTE: we must enable "ALL" ciphers on the client, otherwise an # SSLv23 client will send an SSLv3 hello (rather than SSLv2) @@ -2886,17 +2873,6 @@ def test_echo(self): """Basic test of an SSL client connecting to a server""" if support.verbose: sys.stdout.write("\n") - for protocol in PROTOCOLS: - if protocol in {ssl.PROTOCOL_TLS_CLIENT, ssl.PROTOCOL_TLS_SERVER}: - continue - if not has_tls_protocol(protocol): - continue - with self.subTest(protocol=ssl._PROTOCOL_NAMES[protocol]): - context = ssl.SSLContext(protocol) - context.load_cert_chain(CERTFILE) - seclevel_workaround(context) - server_params_test(context, context, - chatty=True, connectionchatty=True) client_context, server_context, hostname = testing_context() @@ -3565,8 +3541,7 @@ def test_recv_send(self): server_side=False, certfile=CERTFILE, ca_certs=CERTFILE, - cert_reqs=ssl.CERT_NONE, - ssl_version=ssl.PROTOCOL_TLS_CLIENT) + cert_reqs=ssl.CERT_NONE) s.connect((HOST, server.port)) # helper methods for standardising recv* method signatures def _recv_into(): @@ -3718,8 +3693,7 @@ def test_nonblocking_send(self): server_side=False, certfile=CERTFILE, ca_certs=CERTFILE, - cert_reqs=ssl.CERT_NONE, - ssl_version=ssl.PROTOCOL_TLS_CLIENT) + cert_reqs=ssl.CERT_NONE) s.connect((HOST, server.port)) s.setblocking(False) @@ -3788,14 +3762,11 @@ def serve(): def test_server_accept(self): # Issue #16357: accept() on a SSLSocket created through # SSLContext.wrap_socket(). - context = ssl.SSLContext(ssl.PROTOCOL_TLS) - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(SIGNING_CA) - context.load_cert_chain(SIGNED_CERTFILE) + client_ctx, server_ctx, hostname = testing_context() server = socket.socket(socket.AF_INET) host = "127.0.0.1" port = socket_helper.bind_port(server) - server = context.wrap_socket(server, server_side=True) + server = server_ctx.wrap_socket(server, server_side=True) self.assertTrue(server.server_side) evt = threading.Event() @@ -3813,8 +3784,10 @@ def serve(): t.start() # Client wait until server setup and perform a connect. evt.wait() - client = context.wrap_socket(socket.socket()) - client.connect((host, port)) + client = client_ctx.wrap_socket( + socket.socket(), server_hostname=hostname + ) + client.connect((hostname, port)) client.send(b'data') client.recv() client_addr = client.getsockname() @@ -3827,14 +3800,16 @@ def serve(): self.assertEqual(peer, client_addr) def test_getpeercert_enotconn(self): - context = ssl.SSLContext(ssl.PROTOCOL_TLS) + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.check_hostname = False with context.wrap_socket(socket.socket()) as sock: with self.assertRaises(OSError) as cm: sock.getpeercert() self.assertEqual(cm.exception.errno, errno.ENOTCONN) def test_do_handshake_enotconn(self): - context = ssl.SSLContext(ssl.PROTOCOL_TLS) + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.check_hostname = False with context.wrap_socket(socket.socket()) as sock: with self.assertRaises(OSError) as cm: sock.do_handshake() @@ -3875,13 +3850,11 @@ def test_version_basic(self): @requires_tls_version('TLSv1_3') def test_tls1_3(self): - context = ssl.SSLContext(ssl.PROTOCOL_TLS) - context.load_cert_chain(CERTFILE) - context.options |= ( - ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2 - ) - with ThreadedEchoServer(context=context) as server: - with context.wrap_socket(socket.socket()) as s: + client_context, server_context, hostname = testing_context() + client_context.minimum_version = ssl.TLSVersion.TLSv1_3 + with ThreadedEchoServer(context=server_context) as server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: s.connect((HOST, server.port)) self.assertIn(s.cipher()[0], { 'TLS_AES_256_GCM_SHA384', @@ -3892,6 +3865,8 @@ def test_tls1_3(self): @requires_minimum_version @requires_tls_version('TLSv1_2') + @requires_tls_version('TLSv1') + @ignore_deprecation def test_min_max_version_tlsv1_2(self): client_context, server_context, hostname = testing_context() # client TLSv1.0 to 1.2 @@ -3909,6 +3884,7 @@ def test_min_max_version_tlsv1_2(self): @requires_minimum_version @requires_tls_version('TLSv1_1') + @ignore_deprecation def test_min_max_version_tlsv1_1(self): client_context, server_context, hostname = testing_context() # client 1.0 to 1.2, server 1.0 to 1.1 @@ -3927,6 +3903,7 @@ def test_min_max_version_tlsv1_1(self): @requires_minimum_version @requires_tls_version('TLSv1_2') @requires_tls_version('TLSv1') + @ignore_deprecation def test_min_max_version_mismatch(self): client_context, server_context, hostname = testing_context() # client 1.0, server 1.2 (mismatch) @@ -3962,17 +3939,17 @@ def test_min_max_version_sslv3(self): def test_default_ecdh_curve(self): # Issue #21015: elliptic curve-based Diffie Hellman key exchange # should be enabled by default on SSL contexts. - context = ssl.SSLContext(ssl.PROTOCOL_TLS) - context.load_cert_chain(CERTFILE) + client_context, server_context, hostname = testing_context() # TLSv1.3 defaults to PFS key agreement and no longer has KEA in # cipher name. - context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 # Prior to OpenSSL 1.0.0, ECDH ciphers have to be enabled # explicitly using the 'ECCdraft' cipher alias. Otherwise, # our default cipher list should prefer ECDH-based ciphers # automatically. - with ThreadedEchoServer(context=context) as server: - with context.wrap_socket(socket.socket()) as s: + with ThreadedEchoServer(context=server_context) as server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: s.connect((HOST, server.port)) self.assertIn("ECDH", s.cipher()[0]) @@ -4159,14 +4136,6 @@ def test_alpn_protocols(self): self.assertEqual(server_result, expected, msg % (server_result, "server")) - def test_selected_npn_protocol(self): - # selected_npn_protocol() is None unless NPN is used - client_context, server_context, hostname = testing_context() - stats = server_params_test(client_context, server_context, - chatty=True, connectionchatty=True, - sni_name=hostname) - self.assertIs(stats['client_npn_protocol'], None) - def test_npn_protocols(self): assert not ssl.HAS_NPN @@ -4313,13 +4282,11 @@ def test_sendfile(self): with open(os_helper.TESTFN, 'wb') as f: f.write(TEST_DATA) self.addCleanup(os_helper.unlink, os_helper.TESTFN) - context = ssl.SSLContext(ssl.PROTOCOL_TLS) - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(SIGNING_CA) - context.load_cert_chain(SIGNED_CERTFILE) - server = ThreadedEchoServer(context=context, chatty=False) + client_context, server_context, hostname = testing_context() + server = ThreadedEchoServer(context=server_context, chatty=False) with server: - with context.wrap_socket(socket.socket()) as s: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: s.connect((HOST, server.port)) with open(os_helper.TESTFN, 'rb') as file: s.sendfile(file) @@ -4437,7 +4404,7 @@ def test_session_handling(self): class TestPostHandshakeAuth(unittest.TestCase): def test_pha_setter(self): protocols = [ - ssl.PROTOCOL_TLS, ssl.PROTOCOL_TLS_SERVER, ssl.PROTOCOL_TLS_CLIENT + ssl.PROTOCOL_TLS_SERVER, ssl.PROTOCOL_TLS_CLIENT ] for protocol in protocols: ctx = ssl.SSLContext(protocol) diff --git a/Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst b/Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst new file mode 100644 index 0000000000000..b50680afc23fd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst @@ -0,0 +1,3 @@ +:mod:`ssl` now raises DeprecationWarning for OP_NO_SSL/TLS* options, old TLS +versions, old protocols, and other features that have been deprecated since +Python 3.6, 3.7, or OpenSSL 1.1.0. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index f371d4210a488..934c59e26d2d4 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -682,6 +682,17 @@ _setSSLError (_sslmodulestate *state, const char *errstr, int errcode, const cha return NULL; } +static int +_ssl_deprecated(const char* name, int stacklevel) { + return PyErr_WarnFormat( + PyExc_DeprecationWarning, stacklevel, + "ssl module: %s is deprecated", name + ); +} + +#define PY_SSL_DEPRECATED(name, stacklevel, ret) \ + if (_ssl_deprecated((name), (stacklevel)) == -1) return (ret) + /* * SSL objects */ @@ -2863,6 +2874,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) { PySSLContext *self; long options; + const SSL_METHOD *method = NULL; SSL_CTX *ctx = NULL; X509_VERIFY_PARAM *params; int result; @@ -2876,54 +2888,62 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) return NULL; } - PySSL_BEGIN_ALLOW_THREADS switch(proto_version) { #if defined(SSL3_VERSION) && !defined(OPENSSL_NO_SSL3) case PY_SSL_VERSION_SSL3: - ctx = SSL_CTX_new(SSLv3_method()); + PY_SSL_DEPRECATED("PROTOCOL_SSLv3", 2, NULL); + method = SSLv3_method(); break; #endif #if (defined(TLS1_VERSION) && \ !defined(OPENSSL_NO_TLS1) && \ !defined(OPENSSL_NO_TLS1_METHOD)) case PY_SSL_VERSION_TLS1: - ctx = SSL_CTX_new(TLSv1_method()); + PY_SSL_DEPRECATED("PROTOCOL_TLSv1", 2, NULL); + method = TLSv1_method(); break; #endif #if (defined(TLS1_1_VERSION) && \ !defined(OPENSSL_NO_TLS1_1) && \ !defined(OPENSSL_NO_TLS1_1_METHOD)) case PY_SSL_VERSION_TLS1_1: - ctx = SSL_CTX_new(TLSv1_1_method()); + PY_SSL_DEPRECATED("PROTOCOL_TLSv1_1", 2, NULL); + method = TLSv1_1_method(); break; #endif #if (defined(TLS1_2_VERSION) && \ !defined(OPENSSL_NO_TLS1_2) && \ !defined(OPENSSL_NO_TLS1_2_METHOD)) case PY_SSL_VERSION_TLS1_2: - ctx = SSL_CTX_new(TLSv1_2_method()); + PY_SSL_DEPRECATED("PROTOCOL_TLSv1_2", 2, NULL); + method = TLSv1_2_method(); break; #endif case PY_SSL_VERSION_TLS: - /* SSLv23 */ - ctx = SSL_CTX_new(TLS_method()); + PY_SSL_DEPRECATED("PROTOCOL_TLS", 2, NULL); + method = TLS_method(); break; case PY_SSL_VERSION_TLS_CLIENT: - ctx = SSL_CTX_new(TLS_client_method()); + method = TLS_client_method(); break; case PY_SSL_VERSION_TLS_SERVER: - ctx = SSL_CTX_new(TLS_server_method()); + method = TLS_server_method(); break; default: - proto_version = -1; + method = NULL; } - PySSL_END_ALLOW_THREADS - if (proto_version == -1) { - PyErr_SetString(PyExc_ValueError, - "invalid or unsupported protocol version"); + if (method == NULL) { + PyErr_Format(PyExc_ValueError, + "invalid or unsupported protocol version %i", + proto_version); return NULL; } + + PySSL_BEGIN_ALLOW_THREADS + ctx = SSL_CTX_new(method); + PySSL_END_ALLOW_THREADS + if (ctx == NULL) { _setSSLError(get_ssl_state(module), NULL, 0, __FILE__, __LINE__); return NULL; @@ -3299,6 +3319,29 @@ set_min_max_proto_version(PySSLContext *self, PyObject *arg, int what) return -1; } + /* check for deprecations and supported values */ + switch(v) { + case PY_PROTO_SSLv3: + PY_SSL_DEPRECATED("TLSVersion.SSLv3", 2, -1); + break; + case PY_PROTO_TLSv1: + PY_SSL_DEPRECATED("TLSVersion.TLSv1", 2, -1); + break; + case PY_PROTO_TLSv1_1: + PY_SSL_DEPRECATED("TLSVersion.TLSv1_1", 2, -1); + break; + case PY_PROTO_MINIMUM_SUPPORTED: + case PY_PROTO_MAXIMUM_SUPPORTED: + case PY_PROTO_TLSv1_2: + case PY_PROTO_TLSv1_3: + /* ok */ + break; + default: + PyErr_Format(PyExc_ValueError, + "Unsupported TLS/SSL version 0x%x", v); + return -1; + } + if (what == 0) { switch(v) { case PY_PROTO_MINIMUM_SUPPORTED: @@ -3417,11 +3460,23 @@ static int set_options(PySSLContext *self, PyObject *arg, void *c) { long new_opts, opts, set, clear; + long opt_no = ( + SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | + SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_2 + ); + if (!PyArg_Parse(arg, "l", &new_opts)) return -1; opts = SSL_CTX_get_options(self->ctx); clear = opts & ~new_opts; set = ~opts & new_opts; + + if ((set & opt_no) != 0) { + if (_ssl_deprecated("Setting OP_NO_SSL* or SSL_NO_TLS* options is " + "deprecated", 2) < 0) { + return -1; + } + } if (clear) { SSL_CTX_clear_options(self->ctx, clear); } @@ -4961,6 +5016,7 @@ static PyObject * _ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) /*[clinic end generated code: output=b1509e937000e52d input=58312bd53f9bbdd0]*/ { + PY_SSL_DEPRECATED("RAND_pseudo_bytes", 1, NULL); return PySSL_RAND(module, n, 1); } From webhook-mailer at python.org Mon Apr 19 02:31:37 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 19 Apr 2021 06:31:37 -0000 Subject: [Python-checkins] bpo-43669: More test_ssl cleanups (GH-25470) Message-ID: https://github.com/python/cpython/commit/d37b74f341c5a215e2fdd5eb4f8c0182f327635c commit: d37b74f341c5a215e2fdd5eb4f8c0182f327635c branch: master author: Christian Heimes committer: tiran date: 2021-04-19T08:31:29+02:00 summary: bpo-43669: More test_ssl cleanups (GH-25470) Signed-off-by: Christian Heimes files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index a2c79ff5927f1..ae66c3e7d4a56 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -12,7 +12,6 @@ import socket import select import time -import datetime import gc import os import errno @@ -39,9 +38,7 @@ PROTOCOLS = sorted(ssl._PROTOCOL_NAMES) HOST = socket_helper.HOST -IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') -IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) -IS_OPENSSL_3_0_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) +IS_OPENSSL_3_0_0 = ssl.OPENSSL_VERSION_INFO >= (3, 0, 0) PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') PROTOCOL_TO_TLS_VERSION = {} @@ -258,31 +255,11 @@ def wrapper(*args, **kw): return decorator -requires_minimum_version = unittest.skipUnless( - hasattr(ssl.SSLContext, 'minimum_version'), - "required OpenSSL >= 1.1.0g" -) - - def handle_error(prefix): exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) if support.verbose: sys.stdout.write(prefix + exc_format) -def _have_secp_curves(): - if not ssl.HAS_ECDH: - return False - ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - try: - ctx.set_ecdh_curve("secp384r1") - except ValueError: - return False - else: - return True - - -HAVE_SECP_CURVES = _have_secp_curves() - def utc_offset(): #NOTE: ignore issues like #1647654 # local time = utc time + utc offset @@ -290,21 +267,6 @@ def utc_offset(): #NOTE: ignore issues like #1647654 return -time.altzone # seconds return -time.timezone -def asn1time(cert_time): - # Some versions of OpenSSL ignore seconds, see #18207 - # 0.9.8.i - if ssl._OPENSSL_API_VERSION == (0, 9, 8, 9, 15): - fmt = "%b %d %H:%M:%S %Y GMT" - dt = datetime.datetime.strptime(cert_time, fmt) - dt = dt.replace(second=0) - cert_time = dt.strftime(fmt) - # %d adds leading zero but ASN1_TIME_print() uses leading space - if cert_time[4] == "0": - cert_time = cert_time[:4] + " " + cert_time[5:] - - return cert_time - -needs_sni = unittest.skipUnless(ssl.HAS_SNI, "SNI support needed for this test") ignore_deprecation = warnings_helper.ignore_warnings( category=DeprecationWarning @@ -365,11 +327,12 @@ def test_constants(self): ssl.CERT_REQUIRED ssl.OP_CIPHER_SERVER_PREFERENCE ssl.OP_SINGLE_DH_USE - if ssl.HAS_ECDH: - ssl.OP_SINGLE_ECDH_USE + ssl.OP_SINGLE_ECDH_USE ssl.OP_NO_COMPRESSION - self.assertIn(ssl.HAS_SNI, {True, False}) - self.assertIn(ssl.HAS_ECDH, {True, False}) + self.assertEqual(ssl.HAS_SNI, True) + self.assertEqual(ssl.HAS_ECDH, True) + self.assertEqual(ssl.HAS_TLSv1_2, True) + self.assertEqual(ssl.HAS_TLSv1_3, True) ssl.OP_NO_SSLv2 ssl.OP_NO_SSLv3 ssl.OP_NO_TLSv1 @@ -537,8 +500,8 @@ def test_openssl_version(self): self.assertIsInstance(t, tuple) self.assertIsInstance(s, str) # Some sanity checks follow - # >= 0.9 - self.assertGreaterEqual(n, 0x900000) + # >= 1.1.1 + self.assertGreaterEqual(n, 0x10101000) # < 4.0 self.assertLess(n, 0x40000000) major, minor, fix, patch, status = t @@ -552,13 +515,13 @@ def test_openssl_version(self): self.assertLessEqual(patch, 63) self.assertGreaterEqual(status, 0) self.assertLessEqual(status, 15) - # Version string as returned by {Open,Libre}SSL, the format might change - if IS_LIBRESSL: - self.assertTrue(s.startswith("LibreSSL {:d}".format(major)), - (s, t, hex(n))) - else: - self.assertTrue(s.startswith("OpenSSL {:d}.{:d}.{:d}".format(major, minor, fix)), - (s, t, hex(n))) + + libressl_ver = f"LibreSSL {major:d}" + openssl_ver = f"OpenSSL {major:d}.{minor:d}.{fix:d}" + self.assertTrue( + s.startswith((openssl_ver, libressl_ver)), + (s, t, hex(n)) + ) @support.cpython_only def test_refcycle(self): @@ -1196,8 +1159,6 @@ def test_hostname_checks_common_name(self): with self.assertRaises(AttributeError): ctx.hostname_checks_common_name = True - @requires_minimum_version - @unittest.skipIf(IS_LIBRESSL, "see bpo-34001") @ignore_deprecation def test_min_max_version(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) @@ -1523,7 +1484,6 @@ def test_set_ecdh_curve(self): self.assertRaises(ValueError, ctx.set_ecdh_curve, "foo") self.assertRaises(ValueError, ctx.set_ecdh_curve, b"foo") - @needs_sni def test_sni_callback(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) @@ -1538,7 +1498,6 @@ def dummycallback(sock, servername, ctx): ctx.set_servername_callback(None) ctx.set_servername_callback(dummycallback) - @needs_sni def test_sni_callback_refcycle(self): # Reference cycles through the servername callback are detected # and cleared. @@ -1578,8 +1537,8 @@ def test_get_ca_certs(self): (('organizationalUnitName', 'http://www.cacert.org'),), (('commonName', 'CA Cert Signing Authority'),), (('emailAddress', 'support at cacert.org'),)), - 'notAfter': asn1time('Mar 29 12:29:49 2033 GMT'), - 'notBefore': asn1time('Mar 30 12:29:49 2003 GMT'), + 'notAfter': 'Mar 29 12:29:49 2033 GMT', + 'notBefore': 'Mar 30 12:29:49 2003 GMT', 'serialNumber': '00', 'crlDistributionPoints': ('https://www.cacert.org/revoke.crl',), 'subject': ((('organizationName', 'Root CA'),), @@ -1609,7 +1568,6 @@ def test_load_default_certs(self): self.assertRaises(TypeError, ctx.load_default_certs, 'SERVER_AUTH') @unittest.skipIf(sys.platform == "win32", "not-Windows specific") - @unittest.skipIf(IS_LIBRESSL, "LibreSSL doesn't support env vars") def test_load_default_certs_env(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) with os_helper.EnvironmentVarGuard() as env: @@ -2145,7 +2103,6 @@ def test_non_blocking_handshake(self): def test_get_server_certificate(self): _test_get_server_certificate(self, *self.server_addr, cert=SIGNING_CA) - @needs_sni def test_get_server_certificate_sni(self): host, port = self.server_addr server_names = [] @@ -2198,7 +2155,6 @@ def test_get_ca_certs_capath(self): self.assertTrue(cert) self.assertEqual(len(ctx.get_ca_certs()), 1) - @needs_sni def test_context_setget(self): # Check that the context of a connected socket can be replaced. ctx1 = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) @@ -3863,7 +3819,6 @@ def test_tls1_3(self): }) self.assertEqual(s.version(), 'TLSv1.3') - @requires_minimum_version @requires_tls_version('TLSv1_2') @requires_tls_version('TLSv1') @ignore_deprecation @@ -3882,7 +3837,6 @@ def test_min_max_version_tlsv1_2(self): s.connect((HOST, server.port)) self.assertEqual(s.version(), 'TLSv1.2') - @requires_minimum_version @requires_tls_version('TLSv1_1') @ignore_deprecation def test_min_max_version_tlsv1_1(self): @@ -3900,7 +3854,6 @@ def test_min_max_version_tlsv1_1(self): s.connect((HOST, server.port)) self.assertEqual(s.version(), 'TLSv1.1') - @requires_minimum_version @requires_tls_version('TLSv1_2') @requires_tls_version('TLSv1') @ignore_deprecation @@ -3920,7 +3873,6 @@ def test_min_max_version_mismatch(self): s.connect((HOST, server.port)) self.assertIn("alert", str(e.exception)) - @requires_minimum_version @requires_tls_version('SSLv3') def test_min_max_version_sslv3(self): client_context, server_context, hostname = testing_context() @@ -3935,7 +3887,6 @@ def test_min_max_version_sslv3(self): s.connect((HOST, server.port)) self.assertEqual(s.version(), 'SSLv3') - @unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled OpenSSL") def test_default_ecdh_curve(self): # Issue #21015: elliptic curve-based Diffie Hellman key exchange # should be enabled by default on SSL contexts. @@ -4050,15 +4001,13 @@ def test_dh_params(self): if "ADH" not in parts and "EDH" not in parts and "DHE" not in parts: self.fail("Non-DH cipher: " + cipher[0]) - @unittest.skipUnless(HAVE_SECP_CURVES, "needs secp384r1 curve support") - @unittest.skipIf(IS_OPENSSL_1_1_1, "TODO: Test doesn't work on 1.1.1") def test_ecdh_curve(self): # server secp384r1, client auto client_context, server_context, hostname = testing_context() server_context.set_ecdh_curve("secp384r1") server_context.set_ciphers("ECDHE:!eNULL:!aNULL") - server_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 + server_context.minimum_version = ssl.TLSVersion.TLSv1_2 stats = server_params_test(client_context, server_context, chatty=True, connectionchatty=True, sni_name=hostname) @@ -4067,7 +4016,7 @@ def test_ecdh_curve(self): client_context, server_context, hostname = testing_context() client_context.set_ecdh_curve("secp384r1") server_context.set_ciphers("ECDHE:!eNULL:!aNULL") - server_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 + server_context.minimum_version = ssl.TLSVersion.TLSv1_2 stats = server_params_test(client_context, server_context, chatty=True, connectionchatty=True, sni_name=hostname) @@ -4077,13 +4026,11 @@ def test_ecdh_curve(self): client_context.set_ecdh_curve("prime256v1") server_context.set_ecdh_curve("secp384r1") server_context.set_ciphers("ECDHE:!eNULL:!aNULL") - server_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 - try: + server_context.minimum_version = ssl.TLSVersion.TLSv1_2 + with self.assertRaises(ssl.SSLError): server_params_test(client_context, server_context, chatty=True, connectionchatty=True, sni_name=hostname) - except ssl.SSLError: - self.fail("mismatch curve did not fail") def test_selected_alpn_protocol(self): # selected_alpn_protocol() is None unless ALPN is used. @@ -4152,7 +4099,6 @@ def check_common_name(self, stats, name): cert = stats['peercert'] self.assertIn((('commonName', name),), cert['subject']) - @needs_sni def test_sni_callback(self): calls = [] server_context, other_context, client_context = self.sni_contexts() @@ -4193,7 +4139,6 @@ def servername_cb(ssl_sock, server_name, initial_context): self.check_common_name(stats, SIGNED_CERTFILE_HOSTNAME) self.assertEqual(calls, []) - @needs_sni def test_sni_callback_alert(self): # Returning a TLS alert is reflected to the connecting client server_context, other_context, client_context = self.sni_contexts() @@ -4207,7 +4152,6 @@ def cb_returning_alert(ssl_sock, server_name, initial_context): sni_name='supermessage') self.assertEqual(cm.exception.reason, 'TLSV1_ALERT_ACCESS_DENIED') - @needs_sni def test_sni_callback_raising(self): # Raising fails the connection with a TLS handshake failure alert. server_context, other_context, client_context = self.sni_contexts() @@ -4226,7 +4170,6 @@ def cb_raising(ssl_sock, server_name, initial_context): 'SSLV3_ALERT_HANDSHAKE_FAILURE') self.assertEqual(catch.unraisable.exc_type, ZeroDivisionError) - @needs_sni def test_sni_callback_wrong_return_type(self): # Returning the wrong return type terminates the TLS connection # with an internal error alert. From webhook-mailer at python.org Mon Apr 19 07:51:23 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 19 Apr 2021 11:51:23 -0000 Subject: [Python-checkins] bpo-40849: Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag (GH-20463) Message-ID: https://github.com/python/cpython/commit/64d975202f7a91cb8c61a050fafb4e934fcbaa4e commit: 64d975202f7a91cb8c61a050fafb4e934fcbaa4e branch: master author: l0x <37248016+l0x-c0d3z at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-19T04:51:18-07:00 summary: bpo-40849: Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag (GH-20463) This short PR exposes an openssl flag that wasn't exposed. I've also updated to doc to reflect the change. It's heavily inspired by 990fcaac3c428569697f62a80fd95ab4d4b93151. files: A Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst M Doc/library/ssl.rst M Misc/ACKS M Modules/_ssl.c diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index c954d9c8febb0..b9e54357bb969 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -650,6 +650,17 @@ Constants .. versionadded:: 3.4.4 +.. data:: VERIFY_X509_PARTIAL_CHAIN + + Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to + accept intermediate CAs in the trust store to be treated as trust-anchors, + in the same way as the self-signed root CA certificates. This makes it + possible to trust certificates issued by an intermediate CA without having + to trust its ancestor root CA. + + .. versionadded:: 3.10 + + .. class:: VerifyFlags :class:`enum.IntFlag` collection of VERIFY_* constants. diff --git a/Misc/ACKS b/Misc/ACKS index 1eeae0caef50a..e394ea6802fbe 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -157,6 +157,7 @@ Michel Van den Bergh Julian Berman Brice Berna Olivier Bernard +Vivien Bernet-Rollande Maxwell Bernstein Eric Beser Steven Bethard diff --git a/Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst b/Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst new file mode 100644 index 0000000000000..032a65d9963b7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst @@ -0,0 +1 @@ +Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 934c59e26d2d4..4b84014d008c1 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -5630,6 +5630,11 @@ sslmodule_init_constants(PyObject *m) PyModule_AddIntConstant(m, "VERIFY_X509_TRUSTED_FIRST", X509_V_FLAG_TRUSTED_FIRST); +#ifdef X509_V_FLAG_PARTIAL_CHAIN + PyModule_AddIntConstant(m, "VERIFY_X509_PARTIAL_CHAIN", + X509_V_FLAG_PARTIAL_CHAIN); +#endif + /* Alert Descriptions from ssl.h */ /* note RESERVED constants no longer intended for use have been removed */ /* http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6 */ From webhook-mailer at python.org Mon Apr 19 11:22:24 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 19 Apr 2021 15:22:24 -0000 Subject: [Python-checkins] bpo-43837: Reverse order of precedence table to show tightly binding operators first (GH-25469) Message-ID: https://github.com/python/cpython/commit/68ba0c67cac10c2545ea3b62d8b161e5b3594edd commit: 68ba0c67cac10c2545ea3b62d8b161e5b3594edd branch: master author: Ammar Askar committer: rhettinger date: 2021-04-19T08:22:03-07:00 summary: bpo-43837: Reverse order of precedence table to show tightly binding operators first (GH-25469) files: M Doc/reference/expressions.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 4b4c20b8d5e28..5b153762bf447 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1819,8 +1819,8 @@ Operator precedence .. index:: pair: operator; precedence -The following table summarizes the operator precedence in Python, from lowest -precedence (least binding) to highest precedence (most binding). Operators in +The following table summarizes the operator precedence in Python, from highest +precedence (most binding) to lowest precedence (least binding). Operators in the same box have the same precedence. Unless the syntax is explicitly given, operators are binary. Operators in the same box group left to right (except for exponentiation, which groups from right to left). @@ -1833,50 +1833,50 @@ precedence and have a left-to-right chaining feature as described in the +-----------------------------------------------+-------------------------------------+ | Operator | Description | +===============================================+=====================================+ -| ``:=`` | Assignment expression | -+-----------------------------------------------+-------------------------------------+ -| :keyword:`lambda` | Lambda expression | +| ``(expressions...)``, | Binding or parenthesized | +| | expression, | +| ``[expressions...]``, | list display, | +| ``{key: value...}``, | dictionary display, | +| ``{expressions...}`` | set display | +-----------------------------------------------+-------------------------------------+ -| :keyword:`if ` -- :keyword:`!else` | Conditional expression | +| ``x[index]``, ``x[index:index]``, | Subscription, slicing, | +| ``x(arguments...)``, ``x.attribute`` | call, attribute reference | +-----------------------------------------------+-------------------------------------+ -| :keyword:`or` | Boolean OR | +| :keyword:`await` ``x`` | Await expression | +-----------------------------------------------+-------------------------------------+ -| :keyword:`and` | Boolean AND | +| ``**`` | Exponentiation [#]_ | +-----------------------------------------------+-------------------------------------+ -| :keyword:`not` ``x`` | Boolean NOT | +| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +-----------------------------------------------+-------------------------------------+ -| :keyword:`in`, :keyword:`not in`, | Comparisons, including membership | -| :keyword:`is`, :keyword:`is not`, ``<``, | tests and identity tests | -| ``<=``, ``>``, ``>=``, ``!=``, ``==`` | | +| ``*``, ``@``, ``/``, ``//``, ``%`` | Multiplication, matrix | +| | multiplication, division, floor | +| | division, remainder [#]_ | +-----------------------------------------------+-------------------------------------+ -| ``|`` | Bitwise OR | +| ``+``, ``-`` | Addition and subtraction | +-----------------------------------------------+-------------------------------------+ -| ``^`` | Bitwise XOR | +| ``<<``, ``>>`` | Shifts | +-----------------------------------------------+-------------------------------------+ | ``&`` | Bitwise AND | +-----------------------------------------------+-------------------------------------+ -| ``<<``, ``>>`` | Shifts | +| ``^`` | Bitwise XOR | +-----------------------------------------------+-------------------------------------+ -| ``+``, ``-`` | Addition and subtraction | +| ``|`` | Bitwise OR | +-----------------------------------------------+-------------------------------------+ -| ``*``, ``@``, ``/``, ``//``, ``%`` | Multiplication, matrix | -| | multiplication, division, floor | -| | division, remainder [#]_ | +| :keyword:`in`, :keyword:`not in`, | Comparisons, including membership | +| :keyword:`is`, :keyword:`is not`, ``<``, | tests and identity tests | +| ``<=``, ``>``, ``>=``, ``!=``, ``==`` | | +-----------------------------------------------+-------------------------------------+ -| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +| :keyword:`not` ``x`` | Boolean NOT | +-----------------------------------------------+-------------------------------------+ -| ``**`` | Exponentiation [#]_ | +| :keyword:`and` | Boolean AND | +-----------------------------------------------+-------------------------------------+ -| :keyword:`await` ``x`` | Await expression | +| :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ -| ``x[index]``, ``x[index:index]``, | Subscription, slicing, | -| ``x(arguments...)``, ``x.attribute`` | call, attribute reference | +| :keyword:`if ` -- :keyword:`!else` | Conditional expression | +-----------------------------------------------+-------------------------------------+ -| ``(expressions...)``, | Binding or parenthesized | -| | expression, | -| ``[expressions...]``, | list display, | -| ``{key: value...}``, | dictionary display, | -| ``{expressions...}`` | set display | +| :keyword:`lambda` | Lambda expression | ++-----------------------------------------------+-------------------------------------+ +| ``:=`` | Assignment expression | +-----------------------------------------------+-------------------------------------+ From webhook-mailer at python.org Mon Apr 19 11:56:46 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 19 Apr 2021 15:56:46 -0000 Subject: [Python-checkins] bpo-43837: Reverse order of precedence table to show tightly binding operators first (GH-25469) (GH-25472) Message-ID: https://github.com/python/cpython/commit/072ec69af592611f36349f5048569ab7e72b8b61 commit: 072ec69af592611f36349f5048569ab7e72b8b61 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-19T08:56:38-07:00 summary: bpo-43837: Reverse order of precedence table to show tightly binding operators first (GH-25469) (GH-25472) files: M Doc/reference/expressions.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index e7b1d3838be359..3bb3834ce09dea 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1807,8 +1807,8 @@ Operator precedence .. index:: pair: operator; precedence -The following table summarizes the operator precedence in Python, from lowest -precedence (least binding) to highest precedence (most binding). Operators in +The following table summarizes the operator precedence in Python, from highest +precedence (most binding) to lowest precedence (least binding). Operators in the same box have the same precedence. Unless the syntax is explicitly given, operators are binary. Operators in the same box group left to right (except for exponentiation, which groups from right to left). @@ -1821,50 +1821,50 @@ precedence and have a left-to-right chaining feature as described in the +-----------------------------------------------+-------------------------------------+ | Operator | Description | +===============================================+=====================================+ -| ``:=`` | Assignment expression | -+-----------------------------------------------+-------------------------------------+ -| :keyword:`lambda` | Lambda expression | +| ``(expressions...)``, | Binding or parenthesized | +| | expression, | +| ``[expressions...]``, | list display, | +| ``{key: value...}``, | dictionary display, | +| ``{expressions...}`` | set display | +-----------------------------------------------+-------------------------------------+ -| :keyword:`if ` -- :keyword:`!else` | Conditional expression | +| ``x[index]``, ``x[index:index]``, | Subscription, slicing, | +| ``x(arguments...)``, ``x.attribute`` | call, attribute reference | +-----------------------------------------------+-------------------------------------+ -| :keyword:`or` | Boolean OR | +| :keyword:`await` ``x`` | Await expression | +-----------------------------------------------+-------------------------------------+ -| :keyword:`and` | Boolean AND | +| ``**`` | Exponentiation [#]_ | +-----------------------------------------------+-------------------------------------+ -| :keyword:`not` ``x`` | Boolean NOT | +| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +-----------------------------------------------+-------------------------------------+ -| :keyword:`in`, :keyword:`not in`, | Comparisons, including membership | -| :keyword:`is`, :keyword:`is not`, ``<``, | tests and identity tests | -| ``<=``, ``>``, ``>=``, ``!=``, ``==`` | | +| ``*``, ``@``, ``/``, ``//``, ``%`` | Multiplication, matrix | +| | multiplication, division, floor | +| | division, remainder [#]_ | +-----------------------------------------------+-------------------------------------+ -| ``|`` | Bitwise OR | +| ``+``, ``-`` | Addition and subtraction | +-----------------------------------------------+-------------------------------------+ -| ``^`` | Bitwise XOR | +| ``<<``, ``>>`` | Shifts | +-----------------------------------------------+-------------------------------------+ | ``&`` | Bitwise AND | +-----------------------------------------------+-------------------------------------+ -| ``<<``, ``>>`` | Shifts | +| ``^`` | Bitwise XOR | +-----------------------------------------------+-------------------------------------+ -| ``+``, ``-`` | Addition and subtraction | +| ``|`` | Bitwise OR | +-----------------------------------------------+-------------------------------------+ -| ``*``, ``@``, ``/``, ``//``, ``%`` | Multiplication, matrix | -| | multiplication, division, floor | -| | division, remainder [#]_ | +| :keyword:`in`, :keyword:`not in`, | Comparisons, including membership | +| :keyword:`is`, :keyword:`is not`, ``<``, | tests and identity tests | +| ``<=``, ``>``, ``>=``, ``!=``, ``==`` | | +-----------------------------------------------+-------------------------------------+ -| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +| :keyword:`not` ``x`` | Boolean NOT | +-----------------------------------------------+-------------------------------------+ -| ``**`` | Exponentiation [#]_ | +| :keyword:`and` | Boolean AND | +-----------------------------------------------+-------------------------------------+ -| :keyword:`await` ``x`` | Await expression | +| :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ -| ``x[index]``, ``x[index:index]``, | Subscription, slicing, | -| ``x(arguments...)``, ``x.attribute`` | call, attribute reference | +| :keyword:`if ` -- :keyword:`!else` | Conditional expression | +-----------------------------------------------+-------------------------------------+ -| ``(expressions...)``, | Binding or parenthesized | -| | expression, | -| ``[expressions...]``, | list display, | -| ``{key: value...}``, | dictionary display, | -| ``{expressions...}`` | set display | +| :keyword:`lambda` | Lambda expression | ++-----------------------------------------------+-------------------------------------+ +| ``:=`` | Assignment expression | +-----------------------------------------------+-------------------------------------+ From webhook-mailer at python.org Mon Apr 19 17:12:47 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 19 Apr 2021 21:12:47 -0000 Subject: [Python-checkins] Add doctests (GH-25474) Message-ID: https://github.com/python/cpython/commit/4f9ffa8f9c7c31ad9480dfe99e84089017127ec9 commit: 4f9ffa8f9c7c31ad9480dfe99e84089017127ec9 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-19T14:12:36-07:00 summary: Add doctests (GH-25474) files: M Doc/howto/sorting.rst diff --git a/Doc/howto/sorting.rst b/Doc/howto/sorting.rst index a8efe65353d6e..37328c82dff27 100644 --- a/Doc/howto/sorting.rst +++ b/Doc/howto/sorting.rst @@ -18,7 +18,9 @@ Sorting Basics ============== A simple ascending sort is very easy: just call the :func:`sorted` function. It -returns a new sorted list:: +returns a new sorted list: + +.. doctest:: >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] @@ -28,6 +30,8 @@ in-place (and returns ``None`` to avoid confusion). Usually it's less convenient than :func:`sorted` - but if you don't need the original list, it's slightly more efficient. +.. doctest:: + >>> a = [5, 2, 3, 1, 4] >>> a.sort() >>> a @@ -36,6 +40,8 @@ more efficient. Another difference is that the :meth:`list.sort` method is only defined for lists. In contrast, the :func:`sorted` function accepts any iterable. +.. doctest:: + >>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5] @@ -48,6 +54,8 @@ comparisons. For example, here's a case-insensitive string comparison: +.. doctest:: + >>> sorted("This is a test string from Andrew".split(), key=str.lower) ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This'] @@ -59,6 +67,8 @@ input record. A common pattern is to sort complex objects using some of the object's indices as keys. For example: +.. doctest:: + >>> student_tuples = [ ... ('john', 'A', 15), ... ('jane', 'B', 12), @@ -69,6 +79,8 @@ as keys. For example: The same technique works for objects with named attributes. For example: +.. doctest:: + >>> class Student: ... def __init__(self, name, grade, age): ... self.name = name @@ -95,6 +107,8 @@ convenience functions to make accessor functions easier and faster. The Using those functions, the above examples become simpler and faster: +.. doctest:: + >>> from operator import itemgetter, attrgetter >>> sorted(student_tuples, key=itemgetter(2)) @@ -106,6 +120,8 @@ Using those functions, the above examples become simpler and faster: The operator module functions allow multiple levels of sorting. For example, to sort by *grade* then by *age*: +.. doctest:: + >>> sorted(student_tuples, key=itemgetter(1,2)) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] @@ -119,6 +135,8 @@ Both :meth:`list.sort` and :func:`sorted` accept a *reverse* parameter with a boolean value. This is used to flag descending sorts. For example, to get the student data in reverse *age* order: +.. doctest:: + >>> sorted(student_tuples, key=itemgetter(2), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] @@ -132,6 +150,8 @@ Sorts are guaranteed to be `stable `_\. That means that when multiple records have the same key, their original order is preserved. +.. doctest:: + >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)] >>> sorted(data, key=itemgetter(0)) [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)] @@ -143,6 +163,8 @@ This wonderful property lets you build complex sorts in a series of sorting steps. For example, to sort the student data by descending *grade* and then ascending *age*, do the *age* sort first and then sort again using *grade*: +.. doctest:: + >>> s = sorted(student_objects, key=attrgetter('age')) # sort on secondary key >>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key, descending [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] @@ -150,6 +172,8 @@ ascending *age*, do the *age* sort first and then sort again using *grade*: This can be abstracted out into a wrapper function that can take a list and tuples of field and order to sort them on multiple passes. +.. doctest:: + >>> def multisort(xs, specs): ... for key, reverse in reversed(specs): ... xs.sort(key=attrgetter(key), reverse=reverse) @@ -220,6 +244,8 @@ comparisons. That function should take two arguments to be compared and then return a negative value for less-than, return zero if they are equal, or return a positive value for greater-than. For example, we can do: +.. doctest:: + >>> def numeric_compare(x, y): ... return x - y >>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) # doctest: +SKIP @@ -227,6 +253,8 @@ a positive value for greater-than. For example, we can do: Or you can reverse the order of comparison with: +.. doctest:: + >>> def reverse_numeric(x, y): ... return y - x >>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric) # doctest: +SKIP @@ -234,7 +262,9 @@ Or you can reverse the order of comparison with: When porting code from Python 2.x to 3.x, the situation can arise when you have the user supplying a comparison function and you need to convert that to a key -function. The following wrapper makes that easy to do:: +function. The following wrapper makes that easy to do: + +.. testcode:: def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' @@ -255,6 +285,12 @@ function. The following wrapper makes that easy to do:: return mycmp(self.obj, other.obj) != 0 return K +.. doctest:: + :hide: + + >>> sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric)) + [5, 4, 3, 2, 1] + To convert to a key function, just wrap the old comparison function: .. testsetup:: @@ -280,6 +316,8 @@ Odd and Ends simulated without the parameter by using the builtin :func:`reversed` function twice: + .. doctest:: + >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)] >>> standard_way = sorted(data, key=itemgetter(0), reverse=True) >>> double_reversed = list(reversed(sorted(reversed(data), key=itemgetter(0)))) @@ -289,7 +327,9 @@ Odd and Ends * The sort routines are guaranteed to use :meth:`__lt__` when making comparisons between two objects. So, it is easy to add a standard sort order to a class by - defining an :meth:`__lt__` method:: + defining an :meth:`__lt__` method: + + .. doctest:: >>> Student.__lt__ = lambda self, other: self.age < other.age >>> sorted(student_objects) @@ -300,6 +340,8 @@ Odd and Ends are stored in a dictionary, they can be used to sort a separate list of student names: + .. doctest:: + >>> students = ['dave', 'john', 'jane'] >>> newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'} >>> sorted(students, key=newgrades.__getitem__) From webhook-mailer at python.org Mon Apr 19 18:36:06 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 19 Apr 2021 22:36:06 -0000 Subject: [Python-checkins] bpo-25460: Surround suggestions by quotes (GH-25473) Message-ID: https://github.com/python/cpython/commit/7a041162468b83f6cad667b78ed5c786286aed2b commit: 7a041162468b83f6cad667b78ed5c786286aed2b branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-19T23:35:53+01:00 summary: bpo-25460: Surround suggestions by quotes (GH-25473) files: M Lib/test/test_exceptions.py M Python/pythonrun.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index d1e1b196c4278..d93b0f16c91d1 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1453,12 +1453,12 @@ def EliminationOverAddition(): bluc = None print(bluch) - for func, suggestion in [(Substitution, "blech?"), - (Elimination, "blch?"), - (Addition, "bluchin?"), - (EliminationOverAddition, "blucha?"), - (SubstitutionOverElimination, "blach?"), - (SubstitutionOverAddition, "blach?")]: + for func, suggestion in [(Substitution, "'blech'?"), + (Elimination, "'blch'?"), + (Addition, "'bluchin'?"), + (EliminationOverAddition, "'blucha'?"), + (SubstitutionOverElimination, "'blach'?"), + (SubstitutionOverAddition, "'blach'?")]: err = None try: func() @@ -1475,7 +1475,7 @@ def func(): except NameError as exc: with support.captured_stderr() as err: sys.__excepthook__(*sys.exc_info()) - self.assertIn("global_for_suggestions?", err.getvalue()) + self.assertIn("'global_for_suggestions'?", err.getvalue()) def test_name_error_suggestions_from_builtins(self): def func(): @@ -1485,7 +1485,7 @@ def func(): except NameError as exc: with support.captured_stderr() as err: sys.__excepthook__(*sys.exc_info()) - self.assertIn("AttributeError?", err.getvalue()) + self.assertIn("'AttributeError'?", err.getvalue()) def test_name_error_suggestions_do_not_trigger_for_long_names(self): def f(): @@ -1628,12 +1628,12 @@ class EliminationOverAddition: blucha = None bluc = None - for cls, suggestion in [(Substitution, "blech?"), - (Elimination, "blch?"), - (Addition, "bluchin?"), - (EliminationOverAddition, "bluc?"), - (SubstitutionOverElimination, "blach?"), - (SubstitutionOverAddition, "blach?")]: + for cls, suggestion in [(Substitution, "'blech'?"), + (Elimination, "'blch'?"), + (Addition, "'bluchin'?"), + (EliminationOverAddition, "'bluc'?"), + (SubstitutionOverElimination, "'blach'?"), + (SubstitutionOverAddition, "'blach'?")]: try: cls().bluch except AttributeError as exc: diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 6f84cab702e98..8bd31348b2676 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -956,10 +956,10 @@ print_exception(PyObject *f, PyObject *value) PyObject* suggestions = _Py_Offer_Suggestions(value); if (suggestions) { // Add a trailer ". Did you mean: (...)?" - err = PyFile_WriteString(". Did you mean: ", f); + err = PyFile_WriteString(". Did you mean: '", f); if (err == 0) { err = PyFile_WriteObject(suggestions, f, Py_PRINT_RAW); - err += PyFile_WriteString("?", f); + err += PyFile_WriteString("'?", f); } Py_DECREF(suggestions); } else if (PyErr_Occurred()) { From webhook-mailer at python.org Mon Apr 19 21:05:07 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 20 Apr 2021 01:05:07 -0000 Subject: [Python-checkins] bpo-38659: [Enum] add _simple_enum decorator (GH-25285) Message-ID: https://github.com/python/cpython/commit/dbac8f40e81eb0a29dc833e6409a1abf47467da6 commit: dbac8f40e81eb0a29dc833e6409a1abf47467da6 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-19T18:04:53-07:00 summary: bpo-38659: [Enum] add _simple_enum decorator (GH-25285) add: _simple_enum decorator to transform a normal class into an enum _test_simple_enum function to compare _old_convert_ to enable checking _convert_ generated enums _simple_enum takes a normal class and converts it into an enum: @simple_enum(Enum) class Color: RED = 1 GREEN = 2 BLUE = 3 _old_convert_ works much like _convert_ does, using the original logic: # in a test file import socket, enum CheckedAddressFamily = enum._old_convert_( enum.IntEnum, 'AddressFamily', 'socket', lambda C: C.isupper() and C.startswith('AF_'), source=_socket, ) test_simple_enum takes a traditional enum and a simple enum and compares the two: # in the REPL or the same module as Color class CheckedColor(Enum): RED = 1 GREEN = 2 BLUE = 3 _test_simple_enum(CheckedColor, Color) _test_simple_enum(CheckedAddressFamily, socket.AddressFamily) Any important differences will raise a TypeError files: A Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst M Doc/library/enum.rst M Lib/ast.py M Lib/enum.py M Lib/http/__init__.py M Lib/pstats.py M Lib/re.py M Lib/ssl.py M Lib/test/test_ast.py M Lib/test/test_enum.py M Lib/test/test_httplib.py M Lib/test/test_pstats.py M Lib/test/test_signal.py M Lib/test/test_socket.py M Lib/test/test_ssl.py M Lib/test/test_unicode.py M Lib/test/test_uuid.py M Lib/tkinter/__init__.py M Lib/tkinter/test/test_tkinter/test_misc.py M Lib/uuid.py diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index bc88303b789de..91c214eb668d1 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -621,4 +621,3 @@ Utilites and Decorators Traceback (most recent call last): ... ValueError: duplicate values found in : FOUR -> THREE - diff --git a/Lib/ast.py b/Lib/ast.py index e46ab43d5cfd3..703f68ace6068 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -27,7 +27,7 @@ import sys from _ast import * from contextlib import contextmanager, nullcontext -from enum import IntEnum, auto +from enum import IntEnum, auto, _simple_enum def parse(source, filename='', mode='exec', *, @@ -636,7 +636,8 @@ class Param(expr_context): # We unparse those infinities to INFSTR. _INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) -class _Precedence(IntEnum): + at _simple_enum(IntEnum) +class _Precedence: """Precedence table that originated from python grammar.""" TUPLE = auto() diff --git a/Lib/enum.py b/Lib/enum.py index 17deb4b9c05ae..742b99ba17817 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -391,13 +391,15 @@ def __prepare__(metacls, cls, bases, **kwds): ) return enum_dict - def __new__(metacls, cls, bases, classdict, boundary=None, **kwds): + def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **kwds): # an Enum class is final once enumeration items have been defined; it # cannot be mixed with other types (int, float, etc.) if it has an # inherited __new__ unless a new __new__ is defined (or the resulting # class will fail). # # remove any keys listed in _ignore_ + if _simple: + return super().__new__(metacls, cls, bases, classdict, **kwds) classdict.setdefault('_ignore_', []).append('_ignore_') ignore = classdict['_ignore_'] for key in ignore: @@ -695,7 +697,7 @@ def __setattr__(cls, name, value): """ member_map = cls.__dict__.get('_member_map_', {}) if name in member_map: - raise AttributeError('Cannot reassign members.') + raise AttributeError('Cannot reassign member %r.' % (name, )) super().__setattr__(name, value) def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1, boundary=None): @@ -750,7 +752,8 @@ def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, s return metacls.__new__(metacls, class_name, bases, classdict, boundary=boundary) - def _convert_(cls, name, module, filter, source=None, boundary=None): + def _convert_(cls, name, module, filter, source=None, *, boundary=None): + """ Create a new Enum subclass that replaces a collection of global constants """ @@ -777,7 +780,10 @@ def _convert_(cls, name, module, filter, source=None, boundary=None): except TypeError: # unless some values aren't comparable, in which case sort by name members.sort(key=lambda t: t[0]) - cls = cls(name, members, module=module, boundary=boundary or KEEP) + body = {t[0]: t[1] for t in members} + body['__module__'] = module + tmp_cls = type(name, (object, ), body) + cls = _simple_enum(etype=cls, boundary=boundary or KEEP)(tmp_cls) cls.__reduce_ex__ = _reduce_ex_by_name global_enum(cls) module_globals[name] = cls @@ -855,7 +861,7 @@ def _find_new_(classdict, member_type, first_enum): __new__ = classdict.get('__new__', None) # should __new__ be saved as __new_member__ later? - save_new = __new__ is not None + save_new = first_enum is not None and __new__ is not None if __new__ is None: # check all possibles for __new_member__ before falling back to @@ -879,7 +885,7 @@ def _find_new_(classdict, member_type, first_enum): # if a non-object.__new__ is used then whatever value/tuple was # assigned to the enum member name will be passed to __new__ and to the # new enum member's __init__ - if __new__ is object.__new__: + if first_enum is None or __new__ in (Enum.__new__, object.__new__): use_args = False else: use_args = True @@ -1189,7 +1195,7 @@ def _missing_(cls, value): pseudo_member = object.__new__(cls) else: pseudo_member = (__new__ or cls._member_type_.__new__)(cls, value) - if not hasattr(pseudo_member, 'value'): + if not hasattr(pseudo_member, '_value_'): pseudo_member._value_ = value if member_value: pseudo_member._name_ = '|'.join([ @@ -1383,3 +1389,309 @@ def global_enum(cls): cls.__repr__ = global_enum_repr sys.modules[cls.__module__].__dict__.update(cls.__members__) return cls + +def _simple_enum(etype=Enum, *, boundary=None, use_args=None): + """ + Class decorator that converts a normal class into an :class:`Enum`. No + safety checks are done, and some advanced behavior (such as + :func:`__init_subclass__`) is not available. Enum creation can be faster + using :func:`simple_enum`. + + >>> from enum import Enum, _simple_enum + >>> @_simple_enum(Enum) + ... class Color: + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> Color + + """ + def convert_class(cls): + nonlocal use_args + cls_name = cls.__name__ + if use_args is None: + use_args = etype._use_args_ + __new__ = cls.__dict__.get('__new__') + if __new__ is not None: + new_member = __new__.__func__ + else: + new_member = etype._member_type_.__new__ + attrs = {} + body = {} + if __new__ is not None: + body['__new_member__'] = new_member + body['_new_member_'] = new_member + body['_use_args_'] = use_args + body['_generate_next_value_'] = gnv = etype._generate_next_value_ + body['_member_names_'] = member_names = [] + body['_member_map_'] = member_map = {} + body['_value2member_map_'] = value2member_map = {} + body['_member_type_'] = member_type = etype._member_type_ + if issubclass(etype, Flag): + body['_boundary_'] = boundary or etype._boundary_ + body['_flag_mask_'] = None + body['_all_bits_'] = None + body['_inverted_'] = None + for name, obj in cls.__dict__.items(): + if name in ('__dict__', '__weakref__'): + continue + if _is_dunder(name) or _is_private(cls_name, name) or _is_sunder(name) or _is_descriptor(obj): + body[name] = obj + else: + attrs[name] = obj + if cls.__dict__.get('__doc__') is None: + body['__doc__'] = 'An enumeration.' + # + # double check that repr and friends are not the mixin's or various + # things break (such as pickle) + # however, if the method is defined in the Enum itself, don't replace + # it + enum_class = type(cls_name, (etype, ), body, boundary=boundary, _simple=True) + for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): + if name in body: + continue + class_method = getattr(enum_class, name) + obj_method = getattr(member_type, name, None) + enum_method = getattr(etype, name, None) + if obj_method is not None and obj_method is class_method: + setattr(enum_class, name, enum_method) + gnv_last_values = [] + if issubclass(enum_class, Flag): + # Flag / IntFlag + single_bits = multi_bits = 0 + for name, value in attrs.items(): + if isinstance(value, auto) and auto.value is _auto_null: + value = gnv(name, 1, len(member_names), gnv_last_values) + if value in value2member_map: + # an alias to an existing member + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = value2member_map[value] + else: + # create the member + if use_args: + if not isinstance(value, tuple): + value = (value, ) + member = new_member(enum_class, *value) + value = value[0] + else: + member = new_member(enum_class) + if __new__ is None: + member._value_ = value + member._name_ = name + member.__objclass__ = enum_class + member.__init__(value) + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = member + member._sort_order_ = len(member_names) + value2member_map[value] = member + if _is_single_bit(value): + # not a multi-bit alias, record in _member_names_ and _flag_mask_ + member_names.append(name) + single_bits |= value + else: + multi_bits |= value + gnv_last_values.append(value) + enum_class._flag_mask_ = single_bits + enum_class._all_bits_ = 2 ** ((single_bits|multi_bits).bit_length()) - 1 + # set correct __iter__ + member_list = [m._value_ for m in enum_class] + if member_list != sorted(member_list): + enum_class._iter_member_ = enum_class._iter_member_by_def_ + else: + # Enum / IntEnum / StrEnum + for name, value in attrs.items(): + if isinstance(value, auto): + if value.value is _auto_null: + value.value = gnv(name, 1, len(member_names), gnv_last_values) + value = value.value + if value in value2member_map: + # an alias to an existing member + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = value2member_map[value] + else: + # create the member + if use_args: + if not isinstance(value, tuple): + value = (value, ) + member = new_member(enum_class, *value) + value = value[0] + else: + member = new_member(enum_class) + if __new__ is None: + member._value_ = value + member._name_ = name + member.__objclass__ = enum_class + member.__init__(value) + member._sort_order_ = len(member_names) + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = member + value2member_map[value] = member + member_names.append(name) + gnv_last_values.append(value) + if '__new__' in body: + enum_class.__new_member__ = enum_class.__new__ + enum_class.__new__ = Enum.__new__ + return enum_class + return convert_class + +def _test_simple_enum(checked_enum, simple_enum): + """ + A function that can be used to test an enum created with :func:`_simple_enum` + against the version created by subclassing :class:`Enum`:: + + >>> from enum import Enum, _simple_enum, _test_simple_enum + >>> @_simple_enum(Enum) + ... class Color: + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> class CheckedColor(Enum): + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> _test_simple_enum(CheckedColor, Color) + + If differences are found, a :exc:`TypeError` is raised. + """ + failed = [] + if checked_enum.__dict__ != simple_enum.__dict__: + checked_dict = checked_enum.__dict__ + checked_keys = list(checked_dict.keys()) + simple_dict = simple_enum.__dict__ + simple_keys = list(simple_dict.keys()) + member_names = set( + list(checked_enum._member_map_.keys()) + + list(simple_enum._member_map_.keys()) + ) + for key in set(checked_keys + simple_keys): + if key in ('__module__', '_member_map_', '_value2member_map_'): + # keys known to be different + continue + elif key in member_names: + # members are checked below + continue + elif key not in simple_keys: + failed.append("missing key: %r" % (key, )) + elif key not in checked_keys: + failed.append("extra key: %r" % (key, )) + else: + checked_value = checked_dict[key] + simple_value = simple_dict[key] + if callable(checked_value): + continue + if key == '__doc__': + # remove all spaces/tabs + compressed_checked_value = checked_value.replace(' ','').replace('\t','') + compressed_simple_value = simple_value.replace(' ','').replace('\t','') + if compressed_checked_value != compressed_simple_value: + failed.append("%r:\n %s\n %s" % ( + key, + "checked -> %r" % (checked_value, ), + "simple -> %r" % (simple_value, ), + )) + elif checked_value != simple_value: + failed.append("%r:\n %s\n %s" % ( + key, + "checked -> %r" % (checked_value, ), + "simple -> %r" % (simple_value, ), + )) + failed.sort() + for name in member_names: + failed_member = [] + if name not in simple_keys: + failed.append('missing member from simple enum: %r' % name) + elif name not in checked_keys: + failed.append('extra member in simple enum: %r' % name) + else: + checked_member_dict = checked_enum[name].__dict__ + checked_member_keys = list(checked_member_dict.keys()) + simple_member_dict = simple_enum[name].__dict__ + simple_member_keys = list(simple_member_dict.keys()) + for key in set(checked_member_keys + simple_member_keys): + if key in ('__module__', '__objclass__'): + # keys known to be different + continue + elif key not in simple_member_keys: + failed_member.append("missing key %r not in the simple enum member %r" % (key, name)) + elif key not in checked_member_keys: + failed_member.append("extra key %r in simple enum member %r" % (key, name)) + else: + checked_value = checked_member_dict[key] + simple_value = simple_member_dict[key] + if checked_value != simple_value: + failed_member.append("%r:\n %s\n %s" % ( + key, + "checked member -> %r" % (checked_value, ), + "simple member -> %r" % (simple_value, ), + )) + if failed_member: + failed.append('%r member mismatch:\n %s' % ( + name, '\n '.join(failed_member), + )) + for method in ( + '__str__', '__repr__', '__reduce_ex__', '__format__', + '__getnewargs_ex__', '__getnewargs__', '__reduce_ex__', '__reduce__' + ): + if method in simple_keys and method in checked_keys: + # cannot compare functions, and it exists in both, so we're good + continue + elif method not in simple_keys and method not in checked_keys: + # method is inherited -- check it out + checked_method = getattr(checked_enum, method, None) + simple_method = getattr(simple_enum, method, None) + if hasattr(checked_method, '__func__'): + checked_method = checked_method.__func__ + simple_method = simple_method.__func__ + if checked_method != simple_method: + failed.append("%r: %-30s %s" % ( + method, + "checked -> %r" % (checked_method, ), + "simple -> %r" % (simple_method, ), + )) + else: + # if the method existed in only one of the enums, it will have been caught + # in the first checks above + pass + if failed: + raise TypeError('enum mismatch:\n %s' % '\n '.join(failed)) + +def _old_convert_(etype, name, module, filter, source=None, *, boundary=None): + """ + Create a new Enum subclass that replaces a collection of global constants + """ + # convert all constants from source (or module) that pass filter() to + # a new Enum called name, and export the enum and its members back to + # module; + # also, replace the __reduce_ex__ method so unpickling works in + # previous Python versions + module_globals = sys.modules[module].__dict__ + if source: + source = source.__dict__ + else: + source = module_globals + # _value2member_map_ is populated in the same order every time + # for a consistent reverse mapping of number to name when there + # are multiple names for the same number. + members = [ + (name, value) + for name, value in source.items() + if filter(name)] + try: + # sort by value + members.sort(key=lambda t: (t[1], t[0])) + except TypeError: + # unless some values aren't comparable, in which case sort by name + members.sort(key=lambda t: t[0]) + cls = etype(name, members, module=module, boundary=boundary or KEEP) + cls.__reduce_ex__ = _reduce_ex_by_name + cls.__repr__ = global_enum_repr + return cls + diff --git a/Lib/http/__init__.py b/Lib/http/__init__.py index 37be765349ea0..8b980e24a5603 100644 --- a/Lib/http/__init__.py +++ b/Lib/http/__init__.py @@ -1,8 +1,10 @@ -from enum import IntEnum +from enum import IntEnum, _simple_enum __all__ = ['HTTPStatus'] -class HTTPStatus(IntEnum): + + at _simple_enum(IntEnum) +class HTTPStatus: """HTTP status codes and reason phrases Status codes from the following RFCs are all observed: diff --git a/Lib/pstats.py b/Lib/pstats.py index 0f93ae02c9507..e77459d38b33e 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -26,14 +26,15 @@ import marshal import re -from enum import Enum +from enum import StrEnum, _simple_enum from functools import cmp_to_key from dataclasses import dataclass from typing import Dict __all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"] -class SortKey(str, Enum): + at _simple_enum(StrEnum) +class SortKey: CALLS = 'calls', 'ncalls' CUMULATIVE = 'cumulative', 'cumtime' FILENAME = 'filename', 'module' diff --git a/Lib/re.py b/Lib/re.py index 5e40c7b9bb17d..ea41217ce08c2 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -143,7 +143,8 @@ __version__ = "2.2.1" @enum.global_enum -class RegexFlag(enum.IntFlag, boundary=enum.KEEP): + at enum._simple_enum(enum.IntFlag, boundary=enum.KEEP) +class RegexFlag: ASCII = A = sre_compile.SRE_FLAG_ASCII # assume ascii "locale" IGNORECASE = I = sre_compile.SRE_FLAG_IGNORECASE # ignore case LOCALE = L = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale diff --git a/Lib/ssl.py b/Lib/ssl.py index d631805d6cabe..620ddaa93f962 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -94,6 +94,7 @@ import os from collections import namedtuple from enum import Enum as _Enum, IntEnum as _IntEnum, IntFlag as _IntFlag +from enum import _simple_enum, _test_simple_enum import _ssl # if we can't import it, let the error propagate @@ -155,7 +156,8 @@ _SSLv2_IF_EXISTS = getattr(_SSLMethod, 'PROTOCOL_SSLv2', None) -class TLSVersion(_IntEnum): + at _simple_enum(_IntEnum) +class TLSVersion: MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED SSLv3 = _ssl.PROTO_SSLv3 TLSv1 = _ssl.PROTO_TLSv1 @@ -165,7 +167,8 @@ class TLSVersion(_IntEnum): MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED -class _TLSContentType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSContentType: """Content types (record layer) See RFC 8446, section B.1 @@ -179,7 +182,8 @@ class _TLSContentType(_IntEnum): INNER_CONTENT_TYPE = 0x101 -class _TLSAlertType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSAlertType: """Alert types for TLSContentType.ALERT messages See RFC 8466, section B.2 @@ -220,7 +224,8 @@ class _TLSAlertType(_IntEnum): NO_APPLICATION_PROTOCOL = 120 -class _TLSMessageType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSMessageType: """Message types (handshake protocol) See RFC 8446, section B.3 diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 682495839966b..80d24e94040bc 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -1,6 +1,7 @@ import ast import builtins import dis +import enum import os import sys import types @@ -698,6 +699,35 @@ def test_constant_as_name(self): with self.assertRaisesRegex(ValueError, f"Name node can't be used with '{constant}' constant"): compile(expr, "", "eval") + def test_precedence_enum(self): + class _Precedence(enum.IntEnum): + """Precedence table that originated from python grammar.""" + TUPLE = enum.auto() + YIELD = enum.auto() # 'yield', 'yield from' + TEST = enum.auto() # 'if'-'else', 'lambda' + OR = enum.auto() # 'or' + AND = enum.auto() # 'and' + NOT = enum.auto() # 'not' + CMP = enum.auto() # '<', '>', '==', '>=', '<=', '!=', + # 'in', 'not in', 'is', 'is not' + EXPR = enum.auto() + BOR = EXPR # '|' + BXOR = enum.auto() # '^' + BAND = enum.auto() # '&' + SHIFT = enum.auto() # '<<', '>>' + ARITH = enum.auto() # '+', '-' + TERM = enum.auto() # '*', '@', '/', '%', '//' + FACTOR = enum.auto() # unary '+', '-', '~' + POWER = enum.auto() # '**' + AWAIT = enum.auto() # 'await' + ATOM = enum.auto() + def next(self): + try: + return self.__class__(self + 1) + except ValueError: + return self + enum._test_simple_enum(_Precedence, ast._Precedence) + class ASTHelpers_Test(unittest.TestCase): maxDiff = None diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index b9d7f96a3e948..f2340d874b1f8 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -8,7 +8,7 @@ import threading from collections import OrderedDict from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto -from enum import STRICT, CONFORM, EJECT, KEEP +from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum from io import StringIO from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL from test import support @@ -2511,10 +2511,13 @@ class Bizarre(Flag, boundary=KEEP): d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 7', Iron, 7) + # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) + # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) + # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3053,16 +3056,20 @@ class Space(IntFlag, boundary=EJECT): EIGHT = 8 self.assertIs(Space._boundary_, EJECT) # + # class Bizarre(IntFlag, boundary=KEEP): b = 3 c = 4 d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 5', Iron, 5) + # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) + # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) + # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3577,6 +3584,41 @@ def test_inspect_classify_class_attrs(self): if failed: self.fail("result does not equal expected, see print above") + def test_test_simple_enum(self): + @_simple_enum(Enum) + class SimpleColor: + RED = 1 + GREEN = 2 + BLUE = 3 + class CheckedColor(Enum): + RED = 1 + GREEN = 2 + BLUE = 3 + self.assertTrue(_test_simple_enum(CheckedColor, SimpleColor) is None) + SimpleColor.GREEN._value_ = 9 + self.assertRaisesRegex( + TypeError, "enum mismatch", + _test_simple_enum, CheckedColor, SimpleColor, + ) + class CheckedMissing(IntFlag, boundary=KEEP): + SIXTY_FOUR = 64 + ONE_TWENTY_EIGHT = 128 + TWENTY_FORTY_EIGHT = 2048 + ALL = 2048 + 128 + 64 + 12 + CM = CheckedMissing + self.assertEqual(list(CheckedMissing), [CM.SIXTY_FOUR, CM.ONE_TWENTY_EIGHT, CM.TWENTY_FORTY_EIGHT]) + # + @_simple_enum(IntFlag, boundary=KEEP) + class Missing: + SIXTY_FOUR = 64 + ONE_TWENTY_EIGHT = 128 + TWENTY_FORTY_EIGHT = 2048 + ALL = 2048 + 128 + 64 + 12 + M = Missing + self.assertEqual(list(CheckedMissing), [M.SIXTY_FOUR, M.ONE_TWENTY_EIGHT, M.TWENTY_FORTY_EIGHT]) + # + _test_simple_enum(CheckedMissing, Missing) + class MiscTestCase(unittest.TestCase): def test__all__(self): @@ -3592,6 +3634,13 @@ def test__all__(self): CONVERT_TEST_NAME_E = 5 CONVERT_TEST_NAME_F = 5 +CONVERT_STRING_TEST_NAME_D = 5 +CONVERT_STRING_TEST_NAME_C = 5 +CONVERT_STRING_TEST_NAME_B = 5 +CONVERT_STRING_TEST_NAME_A = 5 # This one should sort first. +CONVERT_STRING_TEST_NAME_E = 5 +CONVERT_STRING_TEST_NAME_F = 5 + class TestIntEnumConvert(unittest.TestCase): def test_convert_value_lookup_priority(self): test_type = enum.IntEnum._convert_( @@ -3639,14 +3688,16 @@ def test_convert_raise(self): filter=lambda x: x.startswith('CONVERT_TEST_')) def test_convert_repr_and_str(self): + # reset global constants, as previous tests could have converted the + # integer values to enums module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( 'UnittestConvert', module, - filter=lambda x: x.startswith('CONVERT_TEST_')) - self.assertEqual(repr(test_type.CONVERT_TEST_NAME_A), '%s.CONVERT_TEST_NAME_A' % module) - self.assertEqual(str(test_type.CONVERT_TEST_NAME_A), 'CONVERT_TEST_NAME_A') - self.assertEqual(format(test_type.CONVERT_TEST_NAME_A), '5') + filter=lambda x: x.startswith('CONVERT_STRING_TEST_')) + self.assertEqual(repr(test_type.CONVERT_STRING_TEST_NAME_A), '%s.CONVERT_STRING_TEST_NAME_A' % module) + self.assertEqual(str(test_type.CONVERT_STRING_TEST_NAME_A), 'CONVERT_STRING_TEST_NAME_A') + self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') # global names for StrEnum._convert_ test CONVERT_STR_TEST_2 = 'goodbye' diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 5fb45924e5082..438c2ebbb3d4d 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,3 +1,4 @@ +import enum import errno from http import client, HTTPStatus import io @@ -524,6 +525,150 @@ def test_dir_with_added_behavior_on_status(self): # see issue40084 self.assertTrue({'description', 'name', 'phrase', 'value'} <= set(dir(HTTPStatus(404)))) + def test_simple_httpstatus(self): + class CheckedHTTPStatus(enum.IntEnum): + """HTTP status codes and reason phrases + + Status codes from the following RFCs are all observed: + + * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616 + * RFC 6585: Additional HTTP Status Codes + * RFC 3229: Delta encoding in HTTP + * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518 + * RFC 5842: Binding Extensions to WebDAV + * RFC 7238: Permanent Redirect + * RFC 2295: Transparent Content Negotiation in HTTP + * RFC 2774: An HTTP Extension Framework + * RFC 7725: An HTTP Status Code to Report Legal Obstacles + * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) + * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) + * RFC 8297: An HTTP Status Code for Indicating Hints + * RFC 8470: Using Early Data in HTTP + """ + def __new__(cls, value, phrase, description=''): + obj = int.__new__(cls, value) + obj._value_ = value + + obj.phrase = phrase + obj.description = description + return obj + # informational + CONTINUE = 100, 'Continue', 'Request received, please continue' + SWITCHING_PROTOCOLS = (101, 'Switching Protocols', + 'Switching to new protocol; obey Upgrade header') + PROCESSING = 102, 'Processing' + EARLY_HINTS = 103, 'Early Hints' + # success + OK = 200, 'OK', 'Request fulfilled, document follows' + CREATED = 201, 'Created', 'Document created, URL follows' + ACCEPTED = (202, 'Accepted', + 'Request accepted, processing continues off-line') + NON_AUTHORITATIVE_INFORMATION = (203, + 'Non-Authoritative Information', 'Request fulfilled from cache') + NO_CONTENT = 204, 'No Content', 'Request fulfilled, nothing follows' + RESET_CONTENT = 205, 'Reset Content', 'Clear input form for further input' + PARTIAL_CONTENT = 206, 'Partial Content', 'Partial content follows' + MULTI_STATUS = 207, 'Multi-Status' + ALREADY_REPORTED = 208, 'Already Reported' + IM_USED = 226, 'IM Used' + # redirection + MULTIPLE_CHOICES = (300, 'Multiple Choices', + 'Object has several resources -- see URI list') + MOVED_PERMANENTLY = (301, 'Moved Permanently', + 'Object moved permanently -- see URI list') + FOUND = 302, 'Found', 'Object moved temporarily -- see URI list' + SEE_OTHER = 303, 'See Other', 'Object moved -- see Method and URL list' + NOT_MODIFIED = (304, 'Not Modified', + 'Document has not changed since given time') + USE_PROXY = (305, 'Use Proxy', + 'You must use proxy specified in Location to access this resource') + TEMPORARY_REDIRECT = (307, 'Temporary Redirect', + 'Object moved temporarily -- see URI list') + PERMANENT_REDIRECT = (308, 'Permanent Redirect', + 'Object moved permanently -- see URI list') + # client error + BAD_REQUEST = (400, 'Bad Request', + 'Bad request syntax or unsupported method') + UNAUTHORIZED = (401, 'Unauthorized', + 'No permission -- see authorization schemes') + PAYMENT_REQUIRED = (402, 'Payment Required', + 'No payment -- see charging schemes') + FORBIDDEN = (403, 'Forbidden', + 'Request forbidden -- authorization will not help') + NOT_FOUND = (404, 'Not Found', + 'Nothing matches the given URI') + METHOD_NOT_ALLOWED = (405, 'Method Not Allowed', + 'Specified method is invalid for this resource') + NOT_ACCEPTABLE = (406, 'Not Acceptable', + 'URI not available in preferred format') + PROXY_AUTHENTICATION_REQUIRED = (407, + 'Proxy Authentication Required', + 'You must authenticate with this proxy before proceeding') + REQUEST_TIMEOUT = (408, 'Request Timeout', + 'Request timed out; try again later') + CONFLICT = 409, 'Conflict', 'Request conflict' + GONE = (410, 'Gone', + 'URI no longer exists and has been permanently removed') + LENGTH_REQUIRED = (411, 'Length Required', + 'Client must specify Content-Length') + PRECONDITION_FAILED = (412, 'Precondition Failed', + 'Precondition in headers is false') + REQUEST_ENTITY_TOO_LARGE = (413, 'Request Entity Too Large', + 'Entity is too large') + REQUEST_URI_TOO_LONG = (414, 'Request-URI Too Long', + 'URI is too long') + UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type', + 'Entity body in unsupported format') + REQUESTED_RANGE_NOT_SATISFIABLE = (416, + 'Requested Range Not Satisfiable', + 'Cannot satisfy request range') + EXPECTATION_FAILED = (417, 'Expectation Failed', + 'Expect condition could not be satisfied') + IM_A_TEAPOT = (418, 'I\'m a Teapot', + 'Server refuses to brew coffee because it is a teapot.') + MISDIRECTED_REQUEST = (421, 'Misdirected Request', + 'Server is not able to produce a response') + UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity' + LOCKED = 423, 'Locked' + FAILED_DEPENDENCY = 424, 'Failed Dependency' + TOO_EARLY = 425, 'Too Early' + UPGRADE_REQUIRED = 426, 'Upgrade Required' + PRECONDITION_REQUIRED = (428, 'Precondition Required', + 'The origin server requires the request to be conditional') + TOO_MANY_REQUESTS = (429, 'Too Many Requests', + 'The user has sent too many requests in ' + 'a given amount of time ("rate limiting")') + REQUEST_HEADER_FIELDS_TOO_LARGE = (431, + 'Request Header Fields Too Large', + 'The server is unwilling to process the request because its header ' + 'fields are too large') + UNAVAILABLE_FOR_LEGAL_REASONS = (451, + 'Unavailable For Legal Reasons', + 'The server is denying access to the ' + 'resource as a consequence of a legal demand') + # server errors + INTERNAL_SERVER_ERROR = (500, 'Internal Server Error', + 'Server got itself in trouble') + NOT_IMPLEMENTED = (501, 'Not Implemented', + 'Server does not support this operation') + BAD_GATEWAY = (502, 'Bad Gateway', + 'Invalid responses from another server/proxy') + SERVICE_UNAVAILABLE = (503, 'Service Unavailable', + 'The server cannot process the request due to a high load') + GATEWAY_TIMEOUT = (504, 'Gateway Timeout', + 'The gateway server did not receive a timely response') + HTTP_VERSION_NOT_SUPPORTED = (505, 'HTTP Version Not Supported', + 'Cannot fulfill request') + VARIANT_ALSO_NEGOTIATES = 506, 'Variant Also Negotiates' + INSUFFICIENT_STORAGE = 507, 'Insufficient Storage' + LOOP_DETECTED = 508, 'Loop Detected' + NOT_EXTENDED = 510, 'Not Extended' + NETWORK_AUTHENTICATION_REQUIRED = (511, + 'Network Authentication Required', + 'The client needs to authenticate to gain network access') + enum._test_simple_enum(CheckedHTTPStatus, HTTPStatus) + + def test_status_lines(self): # Test HTTP status lines diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py index 4f78b99fd1cae..acc2fa5385d92 100644 --- a/Lib/test/test_pstats.py +++ b/Lib/test/test_pstats.py @@ -3,6 +3,7 @@ from test import support from io import StringIO from pstats import SortKey +from enum import StrEnum, _test_simple_enum import pstats import cProfile @@ -67,6 +68,25 @@ def test_sort_stats_enum(self): self.assertEqual( self.stats.sort_type, self.stats.sort_arg_dict_default[member.value][-1]) + class CheckedSortKey(StrEnum): + CALLS = 'calls', 'ncalls' + CUMULATIVE = 'cumulative', 'cumtime' + FILENAME = 'filename', 'module' + LINE = 'line' + NAME = 'name' + NFL = 'nfl' + PCALLS = 'pcalls' + STDNAME = 'stdname' + TIME = 'time', 'tottime' + def __new__(cls, *values): + value = values[0] + obj = str.__new__(cls, value) + obj._value_ = value + for other_value in values[1:]: + cls._value2member_map_[other_value] = obj + obj._all_values = values + return obj + _test_simple_enum(CheckedSortKey, SortKey) def test_sort_starts_mix(self): self.assertRaises(TypeError, self.stats.sort_stats, diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 8f943bedce395..06b644e764aa7 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -1,3 +1,4 @@ +import enum import errno import os import random @@ -33,6 +34,32 @@ def test_enums(self): self.assertIsInstance(sig, signal.Signals) self.assertEqual(sys.platform, "win32") + CheckedSignals = enum._old_convert_( + enum.IntEnum, 'Signals', 'signal', + lambda name: + name.isupper() + and (name.startswith('SIG') and not name.startswith('SIG_')) + or name.startswith('CTRL_'), + source=signal, + ) + enum._test_simple_enum(CheckedSignals, signal.Signals) + + CheckedHandlers = enum._old_convert_( + enum.IntEnum, 'Handlers', 'signal', + lambda name: name in ('SIG_DFL', 'SIG_IGN'), + source=signal, + ) + enum._test_simple_enum(CheckedHandlers, signal.Handlers) + + Sigmasks = getattr(signal, 'Sigmasks', None) + if Sigmasks is not None: + CheckedSigmasks = enum._old_convert_( + enum.IntEnum, 'Sigmasks', 'signal', + lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK'), + source=signal, + ) + enum._test_simple_enum(CheckedSigmasks, Sigmasks) + @unittest.skipIf(sys.platform == "win32", "Not valid on Windows") class PosixTests(unittest.TestCase): diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index f91e00059daaa..43a1d5bdcf536 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1941,6 +1941,41 @@ def test_socket_fileno_requires_socket_fd(self): fileno=afile.fileno()) self.assertEqual(cm.exception.errno, errno.ENOTSOCK) + def test_addressfamily_enum(self): + import _socket, enum + CheckedAddressFamily = enum._old_convert_( + enum.IntEnum, 'AddressFamily', 'socket', + lambda C: C.isupper() and C.startswith('AF_'), + source=_socket, + ) + enum._test_simple_enum(CheckedAddressFamily, socket.AddressFamily) + + def test_socketkind_enum(self): + import _socket, enum + CheckedSocketKind = enum._old_convert_( + enum.IntEnum, 'SocketKind', 'socket', + lambda C: C.isupper() and C.startswith('SOCK_'), + source=_socket, + ) + enum._test_simple_enum(CheckedSocketKind, socket.SocketKind) + + def test_msgflag_enum(self): + import _socket, enum + CheckedMsgFlag = enum._old_convert_( + enum.IntFlag, 'MsgFlag', 'socket', + lambda C: C.isupper() and C.startswith('MSG_'), + source=_socket, + ) + enum._test_simple_enum(CheckedMsgFlag, socket.MsgFlag) + + def test_addressinfo_enum(self): + import _socket, enum + CheckedAddressInfo = enum._old_convert_( + enum.IntFlag, 'AddressInfo', 'socket', + lambda C: C.isupper() and C.startswith('AI_'), + source=_socket) + enum._test_simple_enum(CheckedAddressInfo, socket.AddressInfo) + @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.') class BasicCANTest(unittest.TestCase): diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index ae66c3e7d4a56..a9f34288571ec 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -12,6 +12,8 @@ import socket import select import time +import datetime +import enum import gc import os import errno @@ -31,7 +33,7 @@ ssl = import_helper.import_module("ssl") -from ssl import TLSVersion, _TLSContentType, _TLSMessageType +from ssl import TLSVersion, _TLSContentType, _TLSMessageType, _TLSAlertType Py_DEBUG = hasattr(sys, 'gettotalrefcount') Py_DEBUG_WIN32 = Py_DEBUG and sys.platform == 'win32' @@ -4705,6 +4707,155 @@ def sni_cb(sock, servername, ctx): s.connect((HOST, server.port)) +class TestEnumerations(unittest.TestCase): + + def test_tlsversion(self): + class CheckedTLSVersion(enum.IntEnum): + MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED + SSLv3 = _ssl.PROTO_SSLv3 + TLSv1 = _ssl.PROTO_TLSv1 + TLSv1_1 = _ssl.PROTO_TLSv1_1 + TLSv1_2 = _ssl.PROTO_TLSv1_2 + TLSv1_3 = _ssl.PROTO_TLSv1_3 + MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED + enum._test_simple_enum(CheckedTLSVersion, TLSVersion) + + def test_tlscontenttype(self): + class Checked_TLSContentType(enum.IntEnum): + """Content types (record layer) + + See RFC 8446, section B.1 + """ + CHANGE_CIPHER_SPEC = 20 + ALERT = 21 + HANDSHAKE = 22 + APPLICATION_DATA = 23 + # pseudo content types + HEADER = 0x100 + INNER_CONTENT_TYPE = 0x101 + enum._test_simple_enum(Checked_TLSContentType, _TLSContentType) + + def test_tlsalerttype(self): + class Checked_TLSAlertType(enum.IntEnum): + """Alert types for TLSContentType.ALERT messages + + See RFC 8466, section B.2 + """ + CLOSE_NOTIFY = 0 + UNEXPECTED_MESSAGE = 10 + BAD_RECORD_MAC = 20 + DECRYPTION_FAILED = 21 + RECORD_OVERFLOW = 22 + DECOMPRESSION_FAILURE = 30 + HANDSHAKE_FAILURE = 40 + NO_CERTIFICATE = 41 + BAD_CERTIFICATE = 42 + UNSUPPORTED_CERTIFICATE = 43 + CERTIFICATE_REVOKED = 44 + CERTIFICATE_EXPIRED = 45 + CERTIFICATE_UNKNOWN = 46 + ILLEGAL_PARAMETER = 47 + UNKNOWN_CA = 48 + ACCESS_DENIED = 49 + DECODE_ERROR = 50 + DECRYPT_ERROR = 51 + EXPORT_RESTRICTION = 60 + PROTOCOL_VERSION = 70 + INSUFFICIENT_SECURITY = 71 + INTERNAL_ERROR = 80 + INAPPROPRIATE_FALLBACK = 86 + USER_CANCELED = 90 + NO_RENEGOTIATION = 100 + MISSING_EXTENSION = 109 + UNSUPPORTED_EXTENSION = 110 + CERTIFICATE_UNOBTAINABLE = 111 + UNRECOGNIZED_NAME = 112 + BAD_CERTIFICATE_STATUS_RESPONSE = 113 + BAD_CERTIFICATE_HASH_VALUE = 114 + UNKNOWN_PSK_IDENTITY = 115 + CERTIFICATE_REQUIRED = 116 + NO_APPLICATION_PROTOCOL = 120 + enum._test_simple_enum(Checked_TLSAlertType, _TLSAlertType) + + def test_tlsmessagetype(self): + class Checked_TLSMessageType(enum.IntEnum): + """Message types (handshake protocol) + + See RFC 8446, section B.3 + """ + HELLO_REQUEST = 0 + CLIENT_HELLO = 1 + SERVER_HELLO = 2 + HELLO_VERIFY_REQUEST = 3 + NEWSESSION_TICKET = 4 + END_OF_EARLY_DATA = 5 + HELLO_RETRY_REQUEST = 6 + ENCRYPTED_EXTENSIONS = 8 + CERTIFICATE = 11 + SERVER_KEY_EXCHANGE = 12 + CERTIFICATE_REQUEST = 13 + SERVER_DONE = 14 + CERTIFICATE_VERIFY = 15 + CLIENT_KEY_EXCHANGE = 16 + FINISHED = 20 + CERTIFICATE_URL = 21 + CERTIFICATE_STATUS = 22 + SUPPLEMENTAL_DATA = 23 + KEY_UPDATE = 24 + NEXT_PROTO = 67 + MESSAGE_HASH = 254 + CHANGE_CIPHER_SPEC = 0x0101 + enum._test_simple_enum(Checked_TLSMessageType, _TLSMessageType) + + def test_sslmethod(self): + Checked_SSLMethod = enum._old_convert_( + enum.IntEnum, '_SSLMethod', 'ssl', + lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', + source=ssl._ssl, + ) + enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) + + def test_options(self): + CheckedOptions = enum._old_convert_( + enum.FlagEnum, 'Options', 'ssl', + lambda name: name.startswith('OP_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedOptions, ssl.Options) + + + def test_alertdescription(self): + CheckedAlertDescription = enum._old_convert_( + enum.IntEnum, 'AlertDescription', 'ssl', + lambda name: name.startswith('ALERT_DESCRIPTION_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedAlertDescription, ssl.AlertDescription) + + def test_sslerrornumber(self): + Checked_SSLMethod = enum._old_convert_( + enum.IntEnum, '_SSLMethod', 'ssl', + lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', + source=ssl._ssl, + ) + enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) + + def test_verifyflags(self): + CheckedVerifyFlags = enum._old_convert_( + enum.FlagEnum, 'VerifyFlags', 'ssl', + lambda name: name.startswith('VERIFY_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedVerifyFlags, ssl.VerifyFlags) + + def test_verifymode(self): + CheckedVerifyMode = enum._old_convert_( + enum.IntEnum, 'VerifyMode', 'ssl', + lambda name: name.startswith('CERT_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedVerifyMode, ssl.VerifyMode) + def test_main(verbose=False): if support.verbose: plats = { diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index d47cf28782dd7..0e6cbb61b2298 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1463,20 +1463,21 @@ class Float(float, enum.Enum): PI = 3.1415926 class Int(enum.IntEnum): IDES = 15 - class Str(str, enum.Enum): + class Str(enum.StrEnum): + # StrEnum uses the value and not the name for %s etc. ABC = 'abc' # Testing Unicode formatting strings... self.assertEqual("%s, %s" % (Str.ABC, Str.ABC), - 'ABC, ABC') + 'abc, abc') self.assertEqual("%s, %s, %d, %i, %u, %f, %5.2f" % (Str.ABC, Str.ABC, Int.IDES, Int.IDES, Int.IDES, Float.PI, Float.PI), - 'ABC, ABC, 15, 15, 15, 3.141593, 3.14') + 'abc, abc, 15, 15, 15, 3.141593, 3.14') # formatting jobs delegated from the string implementation: self.assertEqual('...%(foo)s...' % {'foo':Str.ABC}, - '...ABC...') + '...abc...') self.assertEqual('...%(foo)s...' % {'foo':Int.IDES}, '...IDES...') self.assertEqual('...%(foo)i...' % {'foo':Int.IDES}, diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index d6a8333427a4a..3f56192c70e84 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -4,6 +4,7 @@ import builtins import contextlib import copy +import enum import io import os import pickle @@ -31,6 +32,13 @@ def get_command_stdout(command, args): class BaseTestUUID: uuid = None + def test_safe_uuid_enum(self): + class CheckedSafeUUID(enum.Enum): + safe = 0 + unsafe = -1 + unknown = None + enum._test_simple_enum(CheckedSafeUUID, py_uuid.SafeUUID) + def test_UUID(self): equal = self.assertEqual ascending = [] diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 01dce7eff25c5..369004c9d1b3d 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -144,7 +144,8 @@ def _splitdict(tk, v, cut_minus=True, conv=None): return dict -class EventType(enum.StrEnum): + at enum._simple_enum(enum.StrEnum) +class EventType: KeyPress = '2' Key = KeyPress KeyRelease = '3' @@ -185,8 +186,6 @@ class EventType(enum.StrEnum): Deactivate = '37' MouseWheel = '38' - __str__ = str.__str__ - class Event: """Container for the properties of an event. diff --git a/Lib/tkinter/test/test_tkinter/test_misc.py b/Lib/tkinter/test/test_tkinter/test_misc.py index f6e5b4db1ae1f..d4b7cbd867bc0 100644 --- a/Lib/tkinter/test/test_tkinter/test_misc.py +++ b/Lib/tkinter/test/test_tkinter/test_misc.py @@ -1,5 +1,6 @@ import unittest import tkinter +import enum from test import support from tkinter.test.support import AbstractTkTest, AbstractDefaultRootTest @@ -261,6 +262,49 @@ def test_event_repr(self): " num=3 delta=-1 focus=True" " x=10 y=20 width=300 height=200>") + def test_eventtype_enum(self): + class CheckedEventType(enum.StrEnum): + KeyPress = '2' + Key = KeyPress + KeyRelease = '3' + ButtonPress = '4' + Button = ButtonPress + ButtonRelease = '5' + Motion = '6' + Enter = '7' + Leave = '8' + FocusIn = '9' + FocusOut = '10' + Keymap = '11' # undocumented + Expose = '12' + GraphicsExpose = '13' # undocumented + NoExpose = '14' # undocumented + Visibility = '15' + Create = '16' + Destroy = '17' + Unmap = '18' + Map = '19' + MapRequest = '20' + Reparent = '21' + Configure = '22' + ConfigureRequest = '23' + Gravity = '24' + ResizeRequest = '25' + Circulate = '26' + CirculateRequest = '27' + Property = '28' + SelectionClear = '29' # undocumented + SelectionRequest = '30' # undocumented + Selection = '31' # undocumented + Colormap = '32' + ClientMessage = '33' # undocumented + Mapping = '34' # undocumented + VirtualEvent = '35' # undocumented + Activate = '36' + Deactivate = '37' + MouseWheel = '38' + enum._test_simple_enum(CheckedEventType, tkinter.EventType) + def test_getboolean(self): for v in 'true', 'yes', 'on', '1', 't', 'y', 1, True: self.assertIs(self.root.getboolean(v), True) diff --git a/Lib/uuid.py b/Lib/uuid.py index 5ae0a3e5fa449..67da88560cfb1 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -47,7 +47,7 @@ import os import sys -from enum import Enum +from enum import Enum, _simple_enum __author__ = 'Ka-Ping Yee ' @@ -75,7 +75,8 @@ bytes_ = bytes # The built-in bytes type -class SafeUUID(Enum): + at _simple_enum(Enum) +class SafeUUID: safe = 0 unsafe = -1 unknown = None diff --git a/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst b/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst new file mode 100644 index 0000000000000..822584be1b221 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst @@ -0,0 +1,4 @@ +A ``simple_enum`` decorator is added to the ``enum`` module to convert a +normal class into an Enum. ``test_simple_enum`` added to test simple enums +against a corresponding normal Enum. Standard library modules updated to +use ``simple_enum``. From webhook-mailer at python.org Mon Apr 19 22:12:34 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 20 Apr 2021 02:12:34 -0000 Subject: [Python-checkins] Revert "bpo-38659: [Enum] add _simple_enum decorator (GH-25285)" (GH-25476) Message-ID: https://github.com/python/cpython/commit/503cdc7c124cebbd777008bdf7bd9aa666b25f07 commit: 503cdc7c124cebbd777008bdf7bd9aa666b25f07 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-19T19:12:24-07:00 summary: Revert "bpo-38659: [Enum] add _simple_enum decorator (GH-25285)" (GH-25476) This reverts commit dbac8f40e81eb0a29dc833e6409a1abf47467da6. files: D Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst M Doc/library/enum.rst M Lib/ast.py M Lib/enum.py M Lib/http/__init__.py M Lib/pstats.py M Lib/re.py M Lib/ssl.py M Lib/test/test_ast.py M Lib/test/test_enum.py M Lib/test/test_httplib.py M Lib/test/test_pstats.py M Lib/test/test_signal.py M Lib/test/test_socket.py M Lib/test/test_ssl.py M Lib/test/test_unicode.py M Lib/test/test_uuid.py M Lib/tkinter/__init__.py M Lib/tkinter/test/test_tkinter/test_misc.py M Lib/uuid.py diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 91c214eb668d1..bc88303b789de 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -621,3 +621,4 @@ Utilites and Decorators Traceback (most recent call last): ... ValueError: duplicate values found in : FOUR -> THREE + diff --git a/Lib/ast.py b/Lib/ast.py index 703f68ace6068..e46ab43d5cfd3 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -27,7 +27,7 @@ import sys from _ast import * from contextlib import contextmanager, nullcontext -from enum import IntEnum, auto, _simple_enum +from enum import IntEnum, auto def parse(source, filename='', mode='exec', *, @@ -636,8 +636,7 @@ class Param(expr_context): # We unparse those infinities to INFSTR. _INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) - at _simple_enum(IntEnum) -class _Precedence: +class _Precedence(IntEnum): """Precedence table that originated from python grammar.""" TUPLE = auto() diff --git a/Lib/enum.py b/Lib/enum.py index 742b99ba17817..17deb4b9c05ae 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -391,15 +391,13 @@ def __prepare__(metacls, cls, bases, **kwds): ) return enum_dict - def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **kwds): + def __new__(metacls, cls, bases, classdict, boundary=None, **kwds): # an Enum class is final once enumeration items have been defined; it # cannot be mixed with other types (int, float, etc.) if it has an # inherited __new__ unless a new __new__ is defined (or the resulting # class will fail). # # remove any keys listed in _ignore_ - if _simple: - return super().__new__(metacls, cls, bases, classdict, **kwds) classdict.setdefault('_ignore_', []).append('_ignore_') ignore = classdict['_ignore_'] for key in ignore: @@ -697,7 +695,7 @@ def __setattr__(cls, name, value): """ member_map = cls.__dict__.get('_member_map_', {}) if name in member_map: - raise AttributeError('Cannot reassign member %r.' % (name, )) + raise AttributeError('Cannot reassign members.') super().__setattr__(name, value) def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1, boundary=None): @@ -752,8 +750,7 @@ def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, s return metacls.__new__(metacls, class_name, bases, classdict, boundary=boundary) - def _convert_(cls, name, module, filter, source=None, *, boundary=None): - + def _convert_(cls, name, module, filter, source=None, boundary=None): """ Create a new Enum subclass that replaces a collection of global constants """ @@ -780,10 +777,7 @@ def _convert_(cls, name, module, filter, source=None, *, boundary=None): except TypeError: # unless some values aren't comparable, in which case sort by name members.sort(key=lambda t: t[0]) - body = {t[0]: t[1] for t in members} - body['__module__'] = module - tmp_cls = type(name, (object, ), body) - cls = _simple_enum(etype=cls, boundary=boundary or KEEP)(tmp_cls) + cls = cls(name, members, module=module, boundary=boundary or KEEP) cls.__reduce_ex__ = _reduce_ex_by_name global_enum(cls) module_globals[name] = cls @@ -861,7 +855,7 @@ def _find_new_(classdict, member_type, first_enum): __new__ = classdict.get('__new__', None) # should __new__ be saved as __new_member__ later? - save_new = first_enum is not None and __new__ is not None + save_new = __new__ is not None if __new__ is None: # check all possibles for __new_member__ before falling back to @@ -885,7 +879,7 @@ def _find_new_(classdict, member_type, first_enum): # if a non-object.__new__ is used then whatever value/tuple was # assigned to the enum member name will be passed to __new__ and to the # new enum member's __init__ - if first_enum is None or __new__ in (Enum.__new__, object.__new__): + if __new__ is object.__new__: use_args = False else: use_args = True @@ -1195,7 +1189,7 @@ def _missing_(cls, value): pseudo_member = object.__new__(cls) else: pseudo_member = (__new__ or cls._member_type_.__new__)(cls, value) - if not hasattr(pseudo_member, '_value_'): + if not hasattr(pseudo_member, 'value'): pseudo_member._value_ = value if member_value: pseudo_member._name_ = '|'.join([ @@ -1389,309 +1383,3 @@ def global_enum(cls): cls.__repr__ = global_enum_repr sys.modules[cls.__module__].__dict__.update(cls.__members__) return cls - -def _simple_enum(etype=Enum, *, boundary=None, use_args=None): - """ - Class decorator that converts a normal class into an :class:`Enum`. No - safety checks are done, and some advanced behavior (such as - :func:`__init_subclass__`) is not available. Enum creation can be faster - using :func:`simple_enum`. - - >>> from enum import Enum, _simple_enum - >>> @_simple_enum(Enum) - ... class Color: - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> Color - - """ - def convert_class(cls): - nonlocal use_args - cls_name = cls.__name__ - if use_args is None: - use_args = etype._use_args_ - __new__ = cls.__dict__.get('__new__') - if __new__ is not None: - new_member = __new__.__func__ - else: - new_member = etype._member_type_.__new__ - attrs = {} - body = {} - if __new__ is not None: - body['__new_member__'] = new_member - body['_new_member_'] = new_member - body['_use_args_'] = use_args - body['_generate_next_value_'] = gnv = etype._generate_next_value_ - body['_member_names_'] = member_names = [] - body['_member_map_'] = member_map = {} - body['_value2member_map_'] = value2member_map = {} - body['_member_type_'] = member_type = etype._member_type_ - if issubclass(etype, Flag): - body['_boundary_'] = boundary or etype._boundary_ - body['_flag_mask_'] = None - body['_all_bits_'] = None - body['_inverted_'] = None - for name, obj in cls.__dict__.items(): - if name in ('__dict__', '__weakref__'): - continue - if _is_dunder(name) or _is_private(cls_name, name) or _is_sunder(name) or _is_descriptor(obj): - body[name] = obj - else: - attrs[name] = obj - if cls.__dict__.get('__doc__') is None: - body['__doc__'] = 'An enumeration.' - # - # double check that repr and friends are not the mixin's or various - # things break (such as pickle) - # however, if the method is defined in the Enum itself, don't replace - # it - enum_class = type(cls_name, (etype, ), body, boundary=boundary, _simple=True) - for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): - if name in body: - continue - class_method = getattr(enum_class, name) - obj_method = getattr(member_type, name, None) - enum_method = getattr(etype, name, None) - if obj_method is not None and obj_method is class_method: - setattr(enum_class, name, enum_method) - gnv_last_values = [] - if issubclass(enum_class, Flag): - # Flag / IntFlag - single_bits = multi_bits = 0 - for name, value in attrs.items(): - if isinstance(value, auto) and auto.value is _auto_null: - value = gnv(name, 1, len(member_names), gnv_last_values) - if value in value2member_map: - # an alias to an existing member - redirect = property() - redirect.__set_name__(enum_class, name) - setattr(enum_class, name, redirect) - member_map[name] = value2member_map[value] - else: - # create the member - if use_args: - if not isinstance(value, tuple): - value = (value, ) - member = new_member(enum_class, *value) - value = value[0] - else: - member = new_member(enum_class) - if __new__ is None: - member._value_ = value - member._name_ = name - member.__objclass__ = enum_class - member.__init__(value) - redirect = property() - redirect.__set_name__(enum_class, name) - setattr(enum_class, name, redirect) - member_map[name] = member - member._sort_order_ = len(member_names) - value2member_map[value] = member - if _is_single_bit(value): - # not a multi-bit alias, record in _member_names_ and _flag_mask_ - member_names.append(name) - single_bits |= value - else: - multi_bits |= value - gnv_last_values.append(value) - enum_class._flag_mask_ = single_bits - enum_class._all_bits_ = 2 ** ((single_bits|multi_bits).bit_length()) - 1 - # set correct __iter__ - member_list = [m._value_ for m in enum_class] - if member_list != sorted(member_list): - enum_class._iter_member_ = enum_class._iter_member_by_def_ - else: - # Enum / IntEnum / StrEnum - for name, value in attrs.items(): - if isinstance(value, auto): - if value.value is _auto_null: - value.value = gnv(name, 1, len(member_names), gnv_last_values) - value = value.value - if value in value2member_map: - # an alias to an existing member - redirect = property() - redirect.__set_name__(enum_class, name) - setattr(enum_class, name, redirect) - member_map[name] = value2member_map[value] - else: - # create the member - if use_args: - if not isinstance(value, tuple): - value = (value, ) - member = new_member(enum_class, *value) - value = value[0] - else: - member = new_member(enum_class) - if __new__ is None: - member._value_ = value - member._name_ = name - member.__objclass__ = enum_class - member.__init__(value) - member._sort_order_ = len(member_names) - redirect = property() - redirect.__set_name__(enum_class, name) - setattr(enum_class, name, redirect) - member_map[name] = member - value2member_map[value] = member - member_names.append(name) - gnv_last_values.append(value) - if '__new__' in body: - enum_class.__new_member__ = enum_class.__new__ - enum_class.__new__ = Enum.__new__ - return enum_class - return convert_class - -def _test_simple_enum(checked_enum, simple_enum): - """ - A function that can be used to test an enum created with :func:`_simple_enum` - against the version created by subclassing :class:`Enum`:: - - >>> from enum import Enum, _simple_enum, _test_simple_enum - >>> @_simple_enum(Enum) - ... class Color: - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> class CheckedColor(Enum): - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> _test_simple_enum(CheckedColor, Color) - - If differences are found, a :exc:`TypeError` is raised. - """ - failed = [] - if checked_enum.__dict__ != simple_enum.__dict__: - checked_dict = checked_enum.__dict__ - checked_keys = list(checked_dict.keys()) - simple_dict = simple_enum.__dict__ - simple_keys = list(simple_dict.keys()) - member_names = set( - list(checked_enum._member_map_.keys()) - + list(simple_enum._member_map_.keys()) - ) - for key in set(checked_keys + simple_keys): - if key in ('__module__', '_member_map_', '_value2member_map_'): - # keys known to be different - continue - elif key in member_names: - # members are checked below - continue - elif key not in simple_keys: - failed.append("missing key: %r" % (key, )) - elif key not in checked_keys: - failed.append("extra key: %r" % (key, )) - else: - checked_value = checked_dict[key] - simple_value = simple_dict[key] - if callable(checked_value): - continue - if key == '__doc__': - # remove all spaces/tabs - compressed_checked_value = checked_value.replace(' ','').replace('\t','') - compressed_simple_value = simple_value.replace(' ','').replace('\t','') - if compressed_checked_value != compressed_simple_value: - failed.append("%r:\n %s\n %s" % ( - key, - "checked -> %r" % (checked_value, ), - "simple -> %r" % (simple_value, ), - )) - elif checked_value != simple_value: - failed.append("%r:\n %s\n %s" % ( - key, - "checked -> %r" % (checked_value, ), - "simple -> %r" % (simple_value, ), - )) - failed.sort() - for name in member_names: - failed_member = [] - if name not in simple_keys: - failed.append('missing member from simple enum: %r' % name) - elif name not in checked_keys: - failed.append('extra member in simple enum: %r' % name) - else: - checked_member_dict = checked_enum[name].__dict__ - checked_member_keys = list(checked_member_dict.keys()) - simple_member_dict = simple_enum[name].__dict__ - simple_member_keys = list(simple_member_dict.keys()) - for key in set(checked_member_keys + simple_member_keys): - if key in ('__module__', '__objclass__'): - # keys known to be different - continue - elif key not in simple_member_keys: - failed_member.append("missing key %r not in the simple enum member %r" % (key, name)) - elif key not in checked_member_keys: - failed_member.append("extra key %r in simple enum member %r" % (key, name)) - else: - checked_value = checked_member_dict[key] - simple_value = simple_member_dict[key] - if checked_value != simple_value: - failed_member.append("%r:\n %s\n %s" % ( - key, - "checked member -> %r" % (checked_value, ), - "simple member -> %r" % (simple_value, ), - )) - if failed_member: - failed.append('%r member mismatch:\n %s' % ( - name, '\n '.join(failed_member), - )) - for method in ( - '__str__', '__repr__', '__reduce_ex__', '__format__', - '__getnewargs_ex__', '__getnewargs__', '__reduce_ex__', '__reduce__' - ): - if method in simple_keys and method in checked_keys: - # cannot compare functions, and it exists in both, so we're good - continue - elif method not in simple_keys and method not in checked_keys: - # method is inherited -- check it out - checked_method = getattr(checked_enum, method, None) - simple_method = getattr(simple_enum, method, None) - if hasattr(checked_method, '__func__'): - checked_method = checked_method.__func__ - simple_method = simple_method.__func__ - if checked_method != simple_method: - failed.append("%r: %-30s %s" % ( - method, - "checked -> %r" % (checked_method, ), - "simple -> %r" % (simple_method, ), - )) - else: - # if the method existed in only one of the enums, it will have been caught - # in the first checks above - pass - if failed: - raise TypeError('enum mismatch:\n %s' % '\n '.join(failed)) - -def _old_convert_(etype, name, module, filter, source=None, *, boundary=None): - """ - Create a new Enum subclass that replaces a collection of global constants - """ - # convert all constants from source (or module) that pass filter() to - # a new Enum called name, and export the enum and its members back to - # module; - # also, replace the __reduce_ex__ method so unpickling works in - # previous Python versions - module_globals = sys.modules[module].__dict__ - if source: - source = source.__dict__ - else: - source = module_globals - # _value2member_map_ is populated in the same order every time - # for a consistent reverse mapping of number to name when there - # are multiple names for the same number. - members = [ - (name, value) - for name, value in source.items() - if filter(name)] - try: - # sort by value - members.sort(key=lambda t: (t[1], t[0])) - except TypeError: - # unless some values aren't comparable, in which case sort by name - members.sort(key=lambda t: t[0]) - cls = etype(name, members, module=module, boundary=boundary or KEEP) - cls.__reduce_ex__ = _reduce_ex_by_name - cls.__repr__ = global_enum_repr - return cls - diff --git a/Lib/http/__init__.py b/Lib/http/__init__.py index 8b980e24a5603..37be765349ea0 100644 --- a/Lib/http/__init__.py +++ b/Lib/http/__init__.py @@ -1,10 +1,8 @@ -from enum import IntEnum, _simple_enum +from enum import IntEnum __all__ = ['HTTPStatus'] - - at _simple_enum(IntEnum) -class HTTPStatus: +class HTTPStatus(IntEnum): """HTTP status codes and reason phrases Status codes from the following RFCs are all observed: diff --git a/Lib/pstats.py b/Lib/pstats.py index e77459d38b33e..0f93ae02c9507 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -26,15 +26,14 @@ import marshal import re -from enum import StrEnum, _simple_enum +from enum import Enum from functools import cmp_to_key from dataclasses import dataclass from typing import Dict __all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"] - at _simple_enum(StrEnum) -class SortKey: +class SortKey(str, Enum): CALLS = 'calls', 'ncalls' CUMULATIVE = 'cumulative', 'cumtime' FILENAME = 'filename', 'module' diff --git a/Lib/re.py b/Lib/re.py index ea41217ce08c2..5e40c7b9bb17d 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -143,8 +143,7 @@ __version__ = "2.2.1" @enum.global_enum - at enum._simple_enum(enum.IntFlag, boundary=enum.KEEP) -class RegexFlag: +class RegexFlag(enum.IntFlag, boundary=enum.KEEP): ASCII = A = sre_compile.SRE_FLAG_ASCII # assume ascii "locale" IGNORECASE = I = sre_compile.SRE_FLAG_IGNORECASE # ignore case LOCALE = L = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale diff --git a/Lib/ssl.py b/Lib/ssl.py index 620ddaa93f962..d631805d6cabe 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -94,7 +94,6 @@ import os from collections import namedtuple from enum import Enum as _Enum, IntEnum as _IntEnum, IntFlag as _IntFlag -from enum import _simple_enum, _test_simple_enum import _ssl # if we can't import it, let the error propagate @@ -156,8 +155,7 @@ _SSLv2_IF_EXISTS = getattr(_SSLMethod, 'PROTOCOL_SSLv2', None) - at _simple_enum(_IntEnum) -class TLSVersion: +class TLSVersion(_IntEnum): MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED SSLv3 = _ssl.PROTO_SSLv3 TLSv1 = _ssl.PROTO_TLSv1 @@ -167,8 +165,7 @@ class TLSVersion: MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED - at _simple_enum(_IntEnum) -class _TLSContentType: +class _TLSContentType(_IntEnum): """Content types (record layer) See RFC 8446, section B.1 @@ -182,8 +179,7 @@ class _TLSContentType: INNER_CONTENT_TYPE = 0x101 - at _simple_enum(_IntEnum) -class _TLSAlertType: +class _TLSAlertType(_IntEnum): """Alert types for TLSContentType.ALERT messages See RFC 8466, section B.2 @@ -224,8 +220,7 @@ class _TLSAlertType: NO_APPLICATION_PROTOCOL = 120 - at _simple_enum(_IntEnum) -class _TLSMessageType: +class _TLSMessageType(_IntEnum): """Message types (handshake protocol) See RFC 8446, section B.3 diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 80d24e94040bc..682495839966b 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -1,7 +1,6 @@ import ast import builtins import dis -import enum import os import sys import types @@ -699,35 +698,6 @@ def test_constant_as_name(self): with self.assertRaisesRegex(ValueError, f"Name node can't be used with '{constant}' constant"): compile(expr, "", "eval") - def test_precedence_enum(self): - class _Precedence(enum.IntEnum): - """Precedence table that originated from python grammar.""" - TUPLE = enum.auto() - YIELD = enum.auto() # 'yield', 'yield from' - TEST = enum.auto() # 'if'-'else', 'lambda' - OR = enum.auto() # 'or' - AND = enum.auto() # 'and' - NOT = enum.auto() # 'not' - CMP = enum.auto() # '<', '>', '==', '>=', '<=', '!=', - # 'in', 'not in', 'is', 'is not' - EXPR = enum.auto() - BOR = EXPR # '|' - BXOR = enum.auto() # '^' - BAND = enum.auto() # '&' - SHIFT = enum.auto() # '<<', '>>' - ARITH = enum.auto() # '+', '-' - TERM = enum.auto() # '*', '@', '/', '%', '//' - FACTOR = enum.auto() # unary '+', '-', '~' - POWER = enum.auto() # '**' - AWAIT = enum.auto() # 'await' - ATOM = enum.auto() - def next(self): - try: - return self.__class__(self + 1) - except ValueError: - return self - enum._test_simple_enum(_Precedence, ast._Precedence) - class ASTHelpers_Test(unittest.TestCase): maxDiff = None diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index f2340d874b1f8..b9d7f96a3e948 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -8,7 +8,7 @@ import threading from collections import OrderedDict from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto -from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum +from enum import STRICT, CONFORM, EJECT, KEEP from io import StringIO from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL from test import support @@ -2511,13 +2511,10 @@ class Bizarre(Flag, boundary=KEEP): d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 7', Iron, 7) - # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) - # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) - # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3056,20 +3053,16 @@ class Space(IntFlag, boundary=EJECT): EIGHT = 8 self.assertIs(Space._boundary_, EJECT) # - # class Bizarre(IntFlag, boundary=KEEP): b = 3 c = 4 d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 5', Iron, 5) - # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) - # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) - # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3584,41 +3577,6 @@ def test_inspect_classify_class_attrs(self): if failed: self.fail("result does not equal expected, see print above") - def test_test_simple_enum(self): - @_simple_enum(Enum) - class SimpleColor: - RED = 1 - GREEN = 2 - BLUE = 3 - class CheckedColor(Enum): - RED = 1 - GREEN = 2 - BLUE = 3 - self.assertTrue(_test_simple_enum(CheckedColor, SimpleColor) is None) - SimpleColor.GREEN._value_ = 9 - self.assertRaisesRegex( - TypeError, "enum mismatch", - _test_simple_enum, CheckedColor, SimpleColor, - ) - class CheckedMissing(IntFlag, boundary=KEEP): - SIXTY_FOUR = 64 - ONE_TWENTY_EIGHT = 128 - TWENTY_FORTY_EIGHT = 2048 - ALL = 2048 + 128 + 64 + 12 - CM = CheckedMissing - self.assertEqual(list(CheckedMissing), [CM.SIXTY_FOUR, CM.ONE_TWENTY_EIGHT, CM.TWENTY_FORTY_EIGHT]) - # - @_simple_enum(IntFlag, boundary=KEEP) - class Missing: - SIXTY_FOUR = 64 - ONE_TWENTY_EIGHT = 128 - TWENTY_FORTY_EIGHT = 2048 - ALL = 2048 + 128 + 64 + 12 - M = Missing - self.assertEqual(list(CheckedMissing), [M.SIXTY_FOUR, M.ONE_TWENTY_EIGHT, M.TWENTY_FORTY_EIGHT]) - # - _test_simple_enum(CheckedMissing, Missing) - class MiscTestCase(unittest.TestCase): def test__all__(self): @@ -3634,13 +3592,6 @@ def test__all__(self): CONVERT_TEST_NAME_E = 5 CONVERT_TEST_NAME_F = 5 -CONVERT_STRING_TEST_NAME_D = 5 -CONVERT_STRING_TEST_NAME_C = 5 -CONVERT_STRING_TEST_NAME_B = 5 -CONVERT_STRING_TEST_NAME_A = 5 # This one should sort first. -CONVERT_STRING_TEST_NAME_E = 5 -CONVERT_STRING_TEST_NAME_F = 5 - class TestIntEnumConvert(unittest.TestCase): def test_convert_value_lookup_priority(self): test_type = enum.IntEnum._convert_( @@ -3688,16 +3639,14 @@ def test_convert_raise(self): filter=lambda x: x.startswith('CONVERT_TEST_')) def test_convert_repr_and_str(self): - # reset global constants, as previous tests could have converted the - # integer values to enums module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( 'UnittestConvert', module, - filter=lambda x: x.startswith('CONVERT_STRING_TEST_')) - self.assertEqual(repr(test_type.CONVERT_STRING_TEST_NAME_A), '%s.CONVERT_STRING_TEST_NAME_A' % module) - self.assertEqual(str(test_type.CONVERT_STRING_TEST_NAME_A), 'CONVERT_STRING_TEST_NAME_A') - self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') + filter=lambda x: x.startswith('CONVERT_TEST_')) + self.assertEqual(repr(test_type.CONVERT_TEST_NAME_A), '%s.CONVERT_TEST_NAME_A' % module) + self.assertEqual(str(test_type.CONVERT_TEST_NAME_A), 'CONVERT_TEST_NAME_A') + self.assertEqual(format(test_type.CONVERT_TEST_NAME_A), '5') # global names for StrEnum._convert_ test CONVERT_STR_TEST_2 = 'goodbye' diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 438c2ebbb3d4d..5fb45924e5082 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,4 +1,3 @@ -import enum import errno from http import client, HTTPStatus import io @@ -525,150 +524,6 @@ def test_dir_with_added_behavior_on_status(self): # see issue40084 self.assertTrue({'description', 'name', 'phrase', 'value'} <= set(dir(HTTPStatus(404)))) - def test_simple_httpstatus(self): - class CheckedHTTPStatus(enum.IntEnum): - """HTTP status codes and reason phrases - - Status codes from the following RFCs are all observed: - - * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616 - * RFC 6585: Additional HTTP Status Codes - * RFC 3229: Delta encoding in HTTP - * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518 - * RFC 5842: Binding Extensions to WebDAV - * RFC 7238: Permanent Redirect - * RFC 2295: Transparent Content Negotiation in HTTP - * RFC 2774: An HTTP Extension Framework - * RFC 7725: An HTTP Status Code to Report Legal Obstacles - * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) - * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) - * RFC 8297: An HTTP Status Code for Indicating Hints - * RFC 8470: Using Early Data in HTTP - """ - def __new__(cls, value, phrase, description=''): - obj = int.__new__(cls, value) - obj._value_ = value - - obj.phrase = phrase - obj.description = description - return obj - # informational - CONTINUE = 100, 'Continue', 'Request received, please continue' - SWITCHING_PROTOCOLS = (101, 'Switching Protocols', - 'Switching to new protocol; obey Upgrade header') - PROCESSING = 102, 'Processing' - EARLY_HINTS = 103, 'Early Hints' - # success - OK = 200, 'OK', 'Request fulfilled, document follows' - CREATED = 201, 'Created', 'Document created, URL follows' - ACCEPTED = (202, 'Accepted', - 'Request accepted, processing continues off-line') - NON_AUTHORITATIVE_INFORMATION = (203, - 'Non-Authoritative Information', 'Request fulfilled from cache') - NO_CONTENT = 204, 'No Content', 'Request fulfilled, nothing follows' - RESET_CONTENT = 205, 'Reset Content', 'Clear input form for further input' - PARTIAL_CONTENT = 206, 'Partial Content', 'Partial content follows' - MULTI_STATUS = 207, 'Multi-Status' - ALREADY_REPORTED = 208, 'Already Reported' - IM_USED = 226, 'IM Used' - # redirection - MULTIPLE_CHOICES = (300, 'Multiple Choices', - 'Object has several resources -- see URI list') - MOVED_PERMANENTLY = (301, 'Moved Permanently', - 'Object moved permanently -- see URI list') - FOUND = 302, 'Found', 'Object moved temporarily -- see URI list' - SEE_OTHER = 303, 'See Other', 'Object moved -- see Method and URL list' - NOT_MODIFIED = (304, 'Not Modified', - 'Document has not changed since given time') - USE_PROXY = (305, 'Use Proxy', - 'You must use proxy specified in Location to access this resource') - TEMPORARY_REDIRECT = (307, 'Temporary Redirect', - 'Object moved temporarily -- see URI list') - PERMANENT_REDIRECT = (308, 'Permanent Redirect', - 'Object moved permanently -- see URI list') - # client error - BAD_REQUEST = (400, 'Bad Request', - 'Bad request syntax or unsupported method') - UNAUTHORIZED = (401, 'Unauthorized', - 'No permission -- see authorization schemes') - PAYMENT_REQUIRED = (402, 'Payment Required', - 'No payment -- see charging schemes') - FORBIDDEN = (403, 'Forbidden', - 'Request forbidden -- authorization will not help') - NOT_FOUND = (404, 'Not Found', - 'Nothing matches the given URI') - METHOD_NOT_ALLOWED = (405, 'Method Not Allowed', - 'Specified method is invalid for this resource') - NOT_ACCEPTABLE = (406, 'Not Acceptable', - 'URI not available in preferred format') - PROXY_AUTHENTICATION_REQUIRED = (407, - 'Proxy Authentication Required', - 'You must authenticate with this proxy before proceeding') - REQUEST_TIMEOUT = (408, 'Request Timeout', - 'Request timed out; try again later') - CONFLICT = 409, 'Conflict', 'Request conflict' - GONE = (410, 'Gone', - 'URI no longer exists and has been permanently removed') - LENGTH_REQUIRED = (411, 'Length Required', - 'Client must specify Content-Length') - PRECONDITION_FAILED = (412, 'Precondition Failed', - 'Precondition in headers is false') - REQUEST_ENTITY_TOO_LARGE = (413, 'Request Entity Too Large', - 'Entity is too large') - REQUEST_URI_TOO_LONG = (414, 'Request-URI Too Long', - 'URI is too long') - UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type', - 'Entity body in unsupported format') - REQUESTED_RANGE_NOT_SATISFIABLE = (416, - 'Requested Range Not Satisfiable', - 'Cannot satisfy request range') - EXPECTATION_FAILED = (417, 'Expectation Failed', - 'Expect condition could not be satisfied') - IM_A_TEAPOT = (418, 'I\'m a Teapot', - 'Server refuses to brew coffee because it is a teapot.') - MISDIRECTED_REQUEST = (421, 'Misdirected Request', - 'Server is not able to produce a response') - UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity' - LOCKED = 423, 'Locked' - FAILED_DEPENDENCY = 424, 'Failed Dependency' - TOO_EARLY = 425, 'Too Early' - UPGRADE_REQUIRED = 426, 'Upgrade Required' - PRECONDITION_REQUIRED = (428, 'Precondition Required', - 'The origin server requires the request to be conditional') - TOO_MANY_REQUESTS = (429, 'Too Many Requests', - 'The user has sent too many requests in ' - 'a given amount of time ("rate limiting")') - REQUEST_HEADER_FIELDS_TOO_LARGE = (431, - 'Request Header Fields Too Large', - 'The server is unwilling to process the request because its header ' - 'fields are too large') - UNAVAILABLE_FOR_LEGAL_REASONS = (451, - 'Unavailable For Legal Reasons', - 'The server is denying access to the ' - 'resource as a consequence of a legal demand') - # server errors - INTERNAL_SERVER_ERROR = (500, 'Internal Server Error', - 'Server got itself in trouble') - NOT_IMPLEMENTED = (501, 'Not Implemented', - 'Server does not support this operation') - BAD_GATEWAY = (502, 'Bad Gateway', - 'Invalid responses from another server/proxy') - SERVICE_UNAVAILABLE = (503, 'Service Unavailable', - 'The server cannot process the request due to a high load') - GATEWAY_TIMEOUT = (504, 'Gateway Timeout', - 'The gateway server did not receive a timely response') - HTTP_VERSION_NOT_SUPPORTED = (505, 'HTTP Version Not Supported', - 'Cannot fulfill request') - VARIANT_ALSO_NEGOTIATES = 506, 'Variant Also Negotiates' - INSUFFICIENT_STORAGE = 507, 'Insufficient Storage' - LOOP_DETECTED = 508, 'Loop Detected' - NOT_EXTENDED = 510, 'Not Extended' - NETWORK_AUTHENTICATION_REQUIRED = (511, - 'Network Authentication Required', - 'The client needs to authenticate to gain network access') - enum._test_simple_enum(CheckedHTTPStatus, HTTPStatus) - - def test_status_lines(self): # Test HTTP status lines diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py index acc2fa5385d92..4f78b99fd1cae 100644 --- a/Lib/test/test_pstats.py +++ b/Lib/test/test_pstats.py @@ -3,7 +3,6 @@ from test import support from io import StringIO from pstats import SortKey -from enum import StrEnum, _test_simple_enum import pstats import cProfile @@ -68,25 +67,6 @@ def test_sort_stats_enum(self): self.assertEqual( self.stats.sort_type, self.stats.sort_arg_dict_default[member.value][-1]) - class CheckedSortKey(StrEnum): - CALLS = 'calls', 'ncalls' - CUMULATIVE = 'cumulative', 'cumtime' - FILENAME = 'filename', 'module' - LINE = 'line' - NAME = 'name' - NFL = 'nfl' - PCALLS = 'pcalls' - STDNAME = 'stdname' - TIME = 'time', 'tottime' - def __new__(cls, *values): - value = values[0] - obj = str.__new__(cls, value) - obj._value_ = value - for other_value in values[1:]: - cls._value2member_map_[other_value] = obj - obj._all_values = values - return obj - _test_simple_enum(CheckedSortKey, SortKey) def test_sort_starts_mix(self): self.assertRaises(TypeError, self.stats.sort_stats, diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 06b644e764aa7..8f943bedce395 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -1,4 +1,3 @@ -import enum import errno import os import random @@ -34,32 +33,6 @@ def test_enums(self): self.assertIsInstance(sig, signal.Signals) self.assertEqual(sys.platform, "win32") - CheckedSignals = enum._old_convert_( - enum.IntEnum, 'Signals', 'signal', - lambda name: - name.isupper() - and (name.startswith('SIG') and not name.startswith('SIG_')) - or name.startswith('CTRL_'), - source=signal, - ) - enum._test_simple_enum(CheckedSignals, signal.Signals) - - CheckedHandlers = enum._old_convert_( - enum.IntEnum, 'Handlers', 'signal', - lambda name: name in ('SIG_DFL', 'SIG_IGN'), - source=signal, - ) - enum._test_simple_enum(CheckedHandlers, signal.Handlers) - - Sigmasks = getattr(signal, 'Sigmasks', None) - if Sigmasks is not None: - CheckedSigmasks = enum._old_convert_( - enum.IntEnum, 'Sigmasks', 'signal', - lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK'), - source=signal, - ) - enum._test_simple_enum(CheckedSigmasks, Sigmasks) - @unittest.skipIf(sys.platform == "win32", "Not valid on Windows") class PosixTests(unittest.TestCase): diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 43a1d5bdcf536..f91e00059daaa 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1941,41 +1941,6 @@ def test_socket_fileno_requires_socket_fd(self): fileno=afile.fileno()) self.assertEqual(cm.exception.errno, errno.ENOTSOCK) - def test_addressfamily_enum(self): - import _socket, enum - CheckedAddressFamily = enum._old_convert_( - enum.IntEnum, 'AddressFamily', 'socket', - lambda C: C.isupper() and C.startswith('AF_'), - source=_socket, - ) - enum._test_simple_enum(CheckedAddressFamily, socket.AddressFamily) - - def test_socketkind_enum(self): - import _socket, enum - CheckedSocketKind = enum._old_convert_( - enum.IntEnum, 'SocketKind', 'socket', - lambda C: C.isupper() and C.startswith('SOCK_'), - source=_socket, - ) - enum._test_simple_enum(CheckedSocketKind, socket.SocketKind) - - def test_msgflag_enum(self): - import _socket, enum - CheckedMsgFlag = enum._old_convert_( - enum.IntFlag, 'MsgFlag', 'socket', - lambda C: C.isupper() and C.startswith('MSG_'), - source=_socket, - ) - enum._test_simple_enum(CheckedMsgFlag, socket.MsgFlag) - - def test_addressinfo_enum(self): - import _socket, enum - CheckedAddressInfo = enum._old_convert_( - enum.IntFlag, 'AddressInfo', 'socket', - lambda C: C.isupper() and C.startswith('AI_'), - source=_socket) - enum._test_simple_enum(CheckedAddressInfo, socket.AddressInfo) - @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.') class BasicCANTest(unittest.TestCase): diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index a9f34288571ec..ae66c3e7d4a56 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -12,8 +12,6 @@ import socket import select import time -import datetime -import enum import gc import os import errno @@ -33,7 +31,7 @@ ssl = import_helper.import_module("ssl") -from ssl import TLSVersion, _TLSContentType, _TLSMessageType, _TLSAlertType +from ssl import TLSVersion, _TLSContentType, _TLSMessageType Py_DEBUG = hasattr(sys, 'gettotalrefcount') Py_DEBUG_WIN32 = Py_DEBUG and sys.platform == 'win32' @@ -4707,155 +4705,6 @@ def sni_cb(sock, servername, ctx): s.connect((HOST, server.port)) -class TestEnumerations(unittest.TestCase): - - def test_tlsversion(self): - class CheckedTLSVersion(enum.IntEnum): - MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED - SSLv3 = _ssl.PROTO_SSLv3 - TLSv1 = _ssl.PROTO_TLSv1 - TLSv1_1 = _ssl.PROTO_TLSv1_1 - TLSv1_2 = _ssl.PROTO_TLSv1_2 - TLSv1_3 = _ssl.PROTO_TLSv1_3 - MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED - enum._test_simple_enum(CheckedTLSVersion, TLSVersion) - - def test_tlscontenttype(self): - class Checked_TLSContentType(enum.IntEnum): - """Content types (record layer) - - See RFC 8446, section B.1 - """ - CHANGE_CIPHER_SPEC = 20 - ALERT = 21 - HANDSHAKE = 22 - APPLICATION_DATA = 23 - # pseudo content types - HEADER = 0x100 - INNER_CONTENT_TYPE = 0x101 - enum._test_simple_enum(Checked_TLSContentType, _TLSContentType) - - def test_tlsalerttype(self): - class Checked_TLSAlertType(enum.IntEnum): - """Alert types for TLSContentType.ALERT messages - - See RFC 8466, section B.2 - """ - CLOSE_NOTIFY = 0 - UNEXPECTED_MESSAGE = 10 - BAD_RECORD_MAC = 20 - DECRYPTION_FAILED = 21 - RECORD_OVERFLOW = 22 - DECOMPRESSION_FAILURE = 30 - HANDSHAKE_FAILURE = 40 - NO_CERTIFICATE = 41 - BAD_CERTIFICATE = 42 - UNSUPPORTED_CERTIFICATE = 43 - CERTIFICATE_REVOKED = 44 - CERTIFICATE_EXPIRED = 45 - CERTIFICATE_UNKNOWN = 46 - ILLEGAL_PARAMETER = 47 - UNKNOWN_CA = 48 - ACCESS_DENIED = 49 - DECODE_ERROR = 50 - DECRYPT_ERROR = 51 - EXPORT_RESTRICTION = 60 - PROTOCOL_VERSION = 70 - INSUFFICIENT_SECURITY = 71 - INTERNAL_ERROR = 80 - INAPPROPRIATE_FALLBACK = 86 - USER_CANCELED = 90 - NO_RENEGOTIATION = 100 - MISSING_EXTENSION = 109 - UNSUPPORTED_EXTENSION = 110 - CERTIFICATE_UNOBTAINABLE = 111 - UNRECOGNIZED_NAME = 112 - BAD_CERTIFICATE_STATUS_RESPONSE = 113 - BAD_CERTIFICATE_HASH_VALUE = 114 - UNKNOWN_PSK_IDENTITY = 115 - CERTIFICATE_REQUIRED = 116 - NO_APPLICATION_PROTOCOL = 120 - enum._test_simple_enum(Checked_TLSAlertType, _TLSAlertType) - - def test_tlsmessagetype(self): - class Checked_TLSMessageType(enum.IntEnum): - """Message types (handshake protocol) - - See RFC 8446, section B.3 - """ - HELLO_REQUEST = 0 - CLIENT_HELLO = 1 - SERVER_HELLO = 2 - HELLO_VERIFY_REQUEST = 3 - NEWSESSION_TICKET = 4 - END_OF_EARLY_DATA = 5 - HELLO_RETRY_REQUEST = 6 - ENCRYPTED_EXTENSIONS = 8 - CERTIFICATE = 11 - SERVER_KEY_EXCHANGE = 12 - CERTIFICATE_REQUEST = 13 - SERVER_DONE = 14 - CERTIFICATE_VERIFY = 15 - CLIENT_KEY_EXCHANGE = 16 - FINISHED = 20 - CERTIFICATE_URL = 21 - CERTIFICATE_STATUS = 22 - SUPPLEMENTAL_DATA = 23 - KEY_UPDATE = 24 - NEXT_PROTO = 67 - MESSAGE_HASH = 254 - CHANGE_CIPHER_SPEC = 0x0101 - enum._test_simple_enum(Checked_TLSMessageType, _TLSMessageType) - - def test_sslmethod(self): - Checked_SSLMethod = enum._old_convert_( - enum.IntEnum, '_SSLMethod', 'ssl', - lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', - source=ssl._ssl, - ) - enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) - - def test_options(self): - CheckedOptions = enum._old_convert_( - enum.FlagEnum, 'Options', 'ssl', - lambda name: name.startswith('OP_'), - source=ssl._ssl, - ) - enum._test_simple_enum(CheckedOptions, ssl.Options) - - - def test_alertdescription(self): - CheckedAlertDescription = enum._old_convert_( - enum.IntEnum, 'AlertDescription', 'ssl', - lambda name: name.startswith('ALERT_DESCRIPTION_'), - source=ssl._ssl, - ) - enum._test_simple_enum(CheckedAlertDescription, ssl.AlertDescription) - - def test_sslerrornumber(self): - Checked_SSLMethod = enum._old_convert_( - enum.IntEnum, '_SSLMethod', 'ssl', - lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', - source=ssl._ssl, - ) - enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) - - def test_verifyflags(self): - CheckedVerifyFlags = enum._old_convert_( - enum.FlagEnum, 'VerifyFlags', 'ssl', - lambda name: name.startswith('VERIFY_'), - source=ssl._ssl, - ) - enum._test_simple_enum(CheckedVerifyFlags, ssl.VerifyFlags) - - def test_verifymode(self): - CheckedVerifyMode = enum._old_convert_( - enum.IntEnum, 'VerifyMode', 'ssl', - lambda name: name.startswith('CERT_'), - source=ssl._ssl, - ) - enum._test_simple_enum(CheckedVerifyMode, ssl.VerifyMode) - def test_main(verbose=False): if support.verbose: plats = { diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 0e6cbb61b2298..d47cf28782dd7 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1463,21 +1463,20 @@ class Float(float, enum.Enum): PI = 3.1415926 class Int(enum.IntEnum): IDES = 15 - class Str(enum.StrEnum): - # StrEnum uses the value and not the name for %s etc. + class Str(str, enum.Enum): ABC = 'abc' # Testing Unicode formatting strings... self.assertEqual("%s, %s" % (Str.ABC, Str.ABC), - 'abc, abc') + 'ABC, ABC') self.assertEqual("%s, %s, %d, %i, %u, %f, %5.2f" % (Str.ABC, Str.ABC, Int.IDES, Int.IDES, Int.IDES, Float.PI, Float.PI), - 'abc, abc, 15, 15, 15, 3.141593, 3.14') + 'ABC, ABC, 15, 15, 15, 3.141593, 3.14') # formatting jobs delegated from the string implementation: self.assertEqual('...%(foo)s...' % {'foo':Str.ABC}, - '...abc...') + '...ABC...') self.assertEqual('...%(foo)s...' % {'foo':Int.IDES}, '...IDES...') self.assertEqual('...%(foo)i...' % {'foo':Int.IDES}, diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index 3f56192c70e84..d6a8333427a4a 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -4,7 +4,6 @@ import builtins import contextlib import copy -import enum import io import os import pickle @@ -32,13 +31,6 @@ def get_command_stdout(command, args): class BaseTestUUID: uuid = None - def test_safe_uuid_enum(self): - class CheckedSafeUUID(enum.Enum): - safe = 0 - unsafe = -1 - unknown = None - enum._test_simple_enum(CheckedSafeUUID, py_uuid.SafeUUID) - def test_UUID(self): equal = self.assertEqual ascending = [] diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 369004c9d1b3d..01dce7eff25c5 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -144,8 +144,7 @@ def _splitdict(tk, v, cut_minus=True, conv=None): return dict - at enum._simple_enum(enum.StrEnum) -class EventType: +class EventType(enum.StrEnum): KeyPress = '2' Key = KeyPress KeyRelease = '3' @@ -186,6 +185,8 @@ class EventType: Deactivate = '37' MouseWheel = '38' + __str__ = str.__str__ + class Event: """Container for the properties of an event. diff --git a/Lib/tkinter/test/test_tkinter/test_misc.py b/Lib/tkinter/test/test_tkinter/test_misc.py index d4b7cbd867bc0..f6e5b4db1ae1f 100644 --- a/Lib/tkinter/test/test_tkinter/test_misc.py +++ b/Lib/tkinter/test/test_tkinter/test_misc.py @@ -1,6 +1,5 @@ import unittest import tkinter -import enum from test import support from tkinter.test.support import AbstractTkTest, AbstractDefaultRootTest @@ -262,49 +261,6 @@ def test_event_repr(self): " num=3 delta=-1 focus=True" " x=10 y=20 width=300 height=200>") - def test_eventtype_enum(self): - class CheckedEventType(enum.StrEnum): - KeyPress = '2' - Key = KeyPress - KeyRelease = '3' - ButtonPress = '4' - Button = ButtonPress - ButtonRelease = '5' - Motion = '6' - Enter = '7' - Leave = '8' - FocusIn = '9' - FocusOut = '10' - Keymap = '11' # undocumented - Expose = '12' - GraphicsExpose = '13' # undocumented - NoExpose = '14' # undocumented - Visibility = '15' - Create = '16' - Destroy = '17' - Unmap = '18' - Map = '19' - MapRequest = '20' - Reparent = '21' - Configure = '22' - ConfigureRequest = '23' - Gravity = '24' - ResizeRequest = '25' - Circulate = '26' - CirculateRequest = '27' - Property = '28' - SelectionClear = '29' # undocumented - SelectionRequest = '30' # undocumented - Selection = '31' # undocumented - Colormap = '32' - ClientMessage = '33' # undocumented - Mapping = '34' # undocumented - VirtualEvent = '35' # undocumented - Activate = '36' - Deactivate = '37' - MouseWheel = '38' - enum._test_simple_enum(CheckedEventType, tkinter.EventType) - def test_getboolean(self): for v in 'true', 'yes', 'on', '1', 't', 'y', 1, True: self.assertIs(self.root.getboolean(v), True) diff --git a/Lib/uuid.py b/Lib/uuid.py index 67da88560cfb1..5ae0a3e5fa449 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -47,7 +47,7 @@ import os import sys -from enum import Enum, _simple_enum +from enum import Enum __author__ = 'Ka-Ping Yee ' @@ -75,8 +75,7 @@ bytes_ = bytes # The built-in bytes type - at _simple_enum(Enum) -class SafeUUID: +class SafeUUID(Enum): safe = 0 unsafe = -1 unknown = None diff --git a/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst b/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst deleted file mode 100644 index 822584be1b221..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst +++ /dev/null @@ -1,4 +0,0 @@ -A ``simple_enum`` decorator is added to the ``enum`` module to convert a -normal class into an Enum. ``test_simple_enum`` added to test simple enums -against a corresponding normal Enum. Standard library modules updated to -use ``simple_enum``. From webhook-mailer at python.org Mon Apr 19 23:29:55 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 20 Apr 2021 03:29:55 -0000 Subject: [Python-checkins] Improve the error message for choices(population, 10) (GH-25267) Message-ID: https://github.com/python/cpython/commit/2a36b09ce7cd67503893412b53295717d66fee19 commit: 2a36b09ce7cd67503893412b53295717d66fee19 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-19T20:29:48-07:00 summary: Improve the error message for choices(population, 10) (GH-25267) files: M Lib/random.py diff --git a/Lib/random.py b/Lib/random.py index 0df26645d9e19..3a835aef0bc1d 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -518,7 +518,15 @@ def choices(self, population, weights=None, *, cum_weights=None, k=1): floor = _floor n += 0.0 # convert to float for a small speed improvement return [population[floor(random() * n)] for i in _repeat(None, k)] - cum_weights = list(_accumulate(weights)) + try: + cum_weights = list(_accumulate(weights)) + except TypeError: + if not isinstance(weights, int): + raise + k = weights + raise TypeError( + f'The number of choices must be a keyword argument: {k=}' + ) from None elif weights is not None: raise TypeError('Cannot specify both weights and cumulative weights') if len(cum_weights) != n: From webhook-mailer at python.org Tue Apr 20 02:15:58 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 20 Apr 2021 06:15:58 -0000 Subject: [Python-checkins] Improve the error message for choices(population, 10) (GH-25267) (GH-25477) Message-ID: https://github.com/python/cpython/commit/fa03efda3dc6ad118788bebc61079cd481c0b24c commit: fa03efda3dc6ad118788bebc61079cd481c0b24c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-19T23:15:50-07:00 summary: Improve the error message for choices(population, 10) (GH-25267) (GH-25477) files: M Lib/random.py diff --git a/Lib/random.py b/Lib/random.py index 36e16a9063b53..53252764a5b5d 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -485,7 +485,15 @@ def choices(self, population, weights=None, *, cum_weights=None, k=1): floor = _floor n += 0.0 # convert to float for a small speed improvement return [population[floor(random() * n)] for i in _repeat(None, k)] - cum_weights = list(_accumulate(weights)) + try: + cum_weights = list(_accumulate(weights)) + except TypeError: + if not isinstance(weights, int): + raise + k = weights + raise TypeError( + f'The number of choices must be a keyword argument: {k=}' + ) from None elif weights is not None: raise TypeError('Cannot specify both weights and cumulative weights') if len(cum_weights) != n: From webhook-mailer at python.org Tue Apr 20 10:34:26 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 20 Apr 2021 14:34:26 -0000 Subject: [Python-checkins] Document that random.gauss is normal distribution (GH-24935) Message-ID: https://github.com/python/cpython/commit/389212c5db81e6aeab660665d2c59843d8d36f8e commit: 389212c5db81e6aeab660665d2c59843d8d36f8e branch: master author: Joonas Paalasmaa committer: rhettinger date: 2021-04-20T07:33:54-07:00 summary: Document that random.gauss is normal distribution (GH-24935) files: M Doc/library/random.rst diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 9d85c2b9958eb..9f037a1a822ac 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -326,9 +326,9 @@ be found in any statistics text. .. function:: gauss(mu, sigma) - Gaussian distribution. *mu* is the mean, and *sigma* is the standard - deviation. This is slightly faster than the :func:`normalvariate` function - defined below. + Normal distribution, also called the Gaussian distribution. *mu* is the mean, + and *sigma* is the standard deviation. This is slightly faster than + the :func:`normalvariate` function defined below. Multithreading note: When two threads call this function simultaneously, it is possible that they will receive the From webhook-mailer at python.org Tue Apr 20 12:10:26 2021 From: webhook-mailer at python.org (tiran) Date: Tue, 20 Apr 2021 16:10:26 -0000 Subject: [Python-checkins] bpo-43799: Also define SSLv3_method() (GH-25481) Message-ID: https://github.com/python/cpython/commit/3309113d6131e4bbac570c4f54175ecca02d025a commit: 3309113d6131e4bbac570c4f54175ecca02d025a branch: master author: Christian Heimes committer: tiran date: 2021-04-20T18:10:10+02:00 summary: bpo-43799: Also define SSLv3_method() (GH-25481) Signed-off-by: Christian Heimes files: M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index ae66c3e7d4a56..697971e0a57d9 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -3245,10 +3245,6 @@ def test_protocol_sslv2(self): try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, False) try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLSv1, False) # SSLv23 client with specific SSL options - if no_sslv2_implies_sslv3_hello(): - # No SSLv2 => client will use an SSLv3 hello on recent OpenSSLs - try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLS, False, - client_options=ssl.OP_NO_SSLv2) try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLS, False, client_options=ssl.OP_NO_SSLv3) try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLS, False, @@ -3309,10 +3305,6 @@ def test_protocol_sslv3(self): try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLS, False, client_options=ssl.OP_NO_SSLv3) try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLSv1, False) - if no_sslv2_implies_sslv3_hello(): - # No SSLv2 => client will use an SSLv3 hello on recent OpenSSLs - try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLS, - False, client_options=ssl.OP_NO_SSLv2) @requires_tls_version('TLSv1') def test_protocol_tlsv1(self): diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4b84014d008c1..e28c1286784a4 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -123,6 +123,9 @@ static void _PySSLFixErrno(void) { #endif /* OpenSSL API 1.1.0+ does not include version methods */ +#ifndef OPENSSL_NO_SSL3_METHOD +extern const SSL_METHOD *SSLv3_method(void); +#endif #ifndef OPENSSL_NO_TLS1_METHOD extern const SSL_METHOD *TLSv1_method(void); #endif From webhook-mailer at python.org Tue Apr 20 12:45:51 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 20 Apr 2021 16:45:51 -0000 Subject: [Python-checkins] docs: clarify what patterns Path.glob accepts (GH-25486) Message-ID: https://github.com/python/cpython/commit/b2b6cd00c6329426fc3b34700f2e22155b44168c commit: b2b6cd00c6329426fc3b34700f2e22155b44168c branch: master author: Ned Batchelder committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-20T09:45:45-07:00 summary: docs: clarify what patterns Path.glob accepts (GH-25486) Automerge-Triggered-By: GH:Yhg1s files: M Doc/library/pathlib.rst diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index f15fed3f02a04..122642ad5a41e 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -798,8 +798,9 @@ call fails (for example because the path doesn't exist). >>> sorted(Path('.').glob('*/*.py')) [PosixPath('docs/conf.py')] - The "``**``" pattern means "this directory and all subdirectories, - recursively". In other words, it enables recursive globbing:: + Patterns are the same as for :mod:`fnmatch`, with the addition of "``**``" + which means "this directory and all subdirectories, recursively". In other + words, it enables recursive globbing:: >>> sorted(Path('.').glob('**/*.py')) [PosixPath('build/lib/pathlib.py'), From webhook-mailer at python.org Tue Apr 20 13:22:30 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 20 Apr 2021 17:22:30 -0000 Subject: [Python-checkins] bpo-43888: Reduce coverage collection timeout to 1h40m in GHA (GH-25471) Message-ID: https://github.com/python/cpython/commit/077a2e76649c2fc49ebb8982b6855bab09a85e8f commit: 077a2e76649c2fc49ebb8982b6855bab09a85e8f branch: master author: Sviatoslav Sydorenko committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-20T10:22:26-07:00 summary: bpo-43888: Reduce coverage collection timeout to 1h40m in GHA (GH-25471) Ref: Signed-off-by: Sviatoslav Sydorenko files: M .github/workflows/coverage.yml diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index d8d932a7652d1..1480a92b5c440 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -54,6 +54,7 @@ jobs: python -m test.pythoninfo export PYTHONPATH=`find .venv -name fullcoverage` - name: 'Tests with coverage' + timeout-minutes: 100 # 1h40m, ref https://bugs.python.org/issue43888 run: > source ./.venv/bin/activate && xvfb-run python -m coverage From webhook-mailer at python.org Tue Apr 20 14:58:07 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 20 Apr 2021 18:58:07 -0000 Subject: [Python-checkins] Update Sphinx directive for super from function to class (GH-25489) Message-ID: https://github.com/python/cpython/commit/d35eef3b904b62e9c775bf3764ab0a0611f5a860 commit: d35eef3b904b62e9c775bf3764ab0a0611f5a860 branch: master author: G?ry Ogam committer: rhettinger date: 2021-04-20T11:58:02-07:00 summary: Update Sphinx directive for super from function to class (GH-25489) files: M Doc/library/functions.rst diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 30f62e69e7fb9..72441f0dbfa57 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1677,7 +1677,7 @@ are always available. They are listed here in alphabetical order. .. versionchanged:: 3.8 The *start* parameter can be specified as a keyword argument. -.. function:: super([type[, object-or-type]]) +.. class:: super([type[, object-or-type]]) Return a proxy object that delegates method calls to a parent or sibling class of *type*. This is useful for accessing inherited methods that have From webhook-mailer at python.org Wed Apr 21 07:41:24 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 21 Apr 2021 11:41:24 -0000 Subject: [Python-checkins] bpo-38605: Revert making 'from __future__ import annotations' the default (GH-25490) Message-ID: https://github.com/python/cpython/commit/b0544ba77cf86074fb1adde00558c67ca75eeea1 commit: b0544ba77cf86074fb1adde00558c67ca75eeea1 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-21T12:41:19+01:00 summary: bpo-38605: Revert making 'from __future__ import annotations' the default (GH-25490) This reverts commits 044a1048ca93d466965afc027b91a5a9eb9ce23c and 1be456ae9d53bb1cba2b24fc86175c282d1c2169, adapting the code to changes that happened after it. files: A Lib/test/dataclass_module_1_str.py A Lib/test/dataclass_module_2_str.py A Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst D Lib/test/test_annotations.py M Doc/reference/compound_stmts.rst M Doc/reference/simple_stmts.rst M Doc/whatsnew/3.10.rst M Lib/dataclasses.py M Lib/importlib/_bootstrap_external.py M Lib/inspect.py M Lib/test/dataclass_module_1.py M Lib/test/dataclass_module_2.py M Lib/test/dataclass_textanno.py M Lib/test/test_coroutines.py M Lib/test/test_dataclasses.py M Lib/test/test_dis.py M Lib/test/test_functools.py M Lib/test/test_grammar.py M Lib/test/test_inspect.py M Lib/test/test_opcodes.py M Lib/test/test_positional_only_arg.py M Lib/test/test_pydoc.py M Lib/test/test_syntax.py M Lib/test/test_types.py M Lib/test/test_typing.py M Lib/typing.py M Python/ast_opt.c M Python/compile.c M Python/future.c M Python/importlib_external.h M Tools/peg_generator/pegen/grammar_parser.py M Tools/peg_generator/pegen/python_generator.py diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 8e68081270684..96bd9b028d504 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -1244,9 +1244,13 @@ following the parameter name. Any parameter may have an annotation, even those ``*identifier`` or ``**identifier``. Functions may have "return" annotation of the form "``-> expression``" after the parameter list. These annotations can be any valid Python expression. The presence of annotations does not change the -semantics of a function. The annotation values are available as string values -in a dictionary keyed by the parameters' names in the :attr:`__annotations__` -attribute of the function object. +semantics of a function. The annotation values are available as values of +a dictionary keyed by the parameters' names in the :attr:`__annotations__` +attribute of the function object. If the ``annotations`` import from +:mod:`__future__` is used, annotations are preserved as strings at runtime which +enables postponed evaluation. Otherwise, they are evaluated when the function +definition is executed. In this case annotations may be evaluated in +a different order than they appear in the source code. .. index:: pair: lambda; expression diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 941b3427d635e..3aba2700048bc 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -877,11 +877,14 @@ can appear before a future statement are: * blank lines, and * other future statements. +The only feature that requires using the future statement is +``annotations`` (see :pep:`563`). + All historical features enabled by the future statement are still recognized by Python 3. The list includes ``absolute_import``, ``division``, ``generators``, ``generator_stop``, ``unicode_literals``, -``print_function``, ``nested_scopes``, ``with_statement`` and ``annotations``. -They are all redundant because they are always enabled, and only kept for +``print_function``, ``nested_scopes`` and ``with_statement``. They are +all redundant because they are always enabled, and only kept for backwards compatibility. A future statement is recognized and treated specially at compile time: Changes diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 523668c765331..9ae9fe8d2d905 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -624,22 +624,6 @@ This section covers major changes affecting :pep:`484` type annotations and the :mod:`typing` module. -PEP 563: Postponed Evaluation of Annotations Becomes Default ------------------------------------------------------------- - -In Python 3.7, postponed evaluation of annotations was added, -to be enabled with a ``from __future__ import annotations`` -directive. In 3.10 this became the default behavior, even -without that future directive. With this being default, all -annotations stored in :attr:`__annotations__` will be strings. -If needed, annotations can be resolved at runtime using -:func:`typing.get_type_hints`. See :pep:`563` for a full -description. Also, the :func:`inspect.signature` will try to -resolve types from now on, and when it fails it will fall back to -showing the string annotations. (Contributed by Batuhan Taskaya -in :issue:`38605`.) - - PEP 604: New Type Union Operator -------------------------------- diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 1b95bb961d9ec..036349bfbda73 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -413,10 +413,8 @@ def _create_fn(name, args, body, *, globals=None, locals=None, ns = {} exec(txt, globals, ns) - func = ns['__create_fn__'](**locals) - for arg, annotation in func.__annotations__.copy().items(): - func.__annotations__[arg] = locals[annotation] - return func + return ns['__create_fn__'](**locals) + def _field_assign(frozen, name, value, self_name): # If we're a frozen class, then assign to our fields in __init__ @@ -667,11 +665,6 @@ def _is_type(annotation, cls, a_module, a_type, is_type_predicate): # a eval() penalty for every single field of every dataclass # that's defined. It was judged not worth it. - # Strip away the extra quotes as a result of double-stringifying when the - # 'annotations' feature became default. - if annotation.startswith(("'", '"')) and annotation.endswith(("'", '"')): - annotation = annotation[1:-1] - match = _MODULE_IDENTIFIER_RE.match(annotation) if match: ns = None @@ -1020,7 +1013,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, if not getattr(cls, '__doc__'): # Create a class doc-string. cls.__doc__ = (cls.__name__ + - str(inspect.signature(cls)).replace(' -> NoneType', '')) + str(inspect.signature(cls)).replace(' -> None', '')) if match_args: _set_new_attribute(cls, '__match_args__', diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 66ba7dceedc8b..6620b241fcf6c 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -349,6 +349,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10a6 3434 (PEP 634: Structural Pattern Matching) # Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). # Python 3.10b1 3436 (Add GEN_START bytecode #43683) +# Python 3.10b1 3437 (Undo making 'annotations' future by default - We like to dance among core devs!) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -358,7 +359,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3436).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3437).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/inspect.py b/Lib/inspect.py index d6d2ce6461777..b8e247ec252bb 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -45,7 +45,6 @@ import tokenize import token import types -import typing import warnings import functools import builtins @@ -1893,10 +1892,7 @@ def _signature_is_functionlike(obj): code = getattr(obj, '__code__', None) defaults = getattr(obj, '__defaults__', _void) # Important to use _void ... kwdefaults = getattr(obj, '__kwdefaults__', _void) # ... and not None here - try: - annotations = _get_type_hints(obj) - except AttributeError: - annotations = None + annotations = getattr(obj, '__annotations__', None) return (isinstance(code, types.CodeType) and isinstance(name, str) and @@ -2137,16 +2133,6 @@ def p(name_node, default_node, default=empty): return cls(parameters, return_annotation=cls.empty) -def _get_type_hints(func, **kwargs): - try: - return typing.get_type_hints(func, **kwargs) - except Exception: - # First, try to use the get_type_hints to resolve - # annotations. But for keeping the behavior intact - # if there was a problem with that (like the namespace - # can't resolve some annotation) continue to use - # string annotations - return func.__annotations__ def _signature_from_builtin(cls, func, skip_bound_arg=True): """Private helper function to get signature for @@ -2191,8 +2177,7 @@ def _signature_from_function(cls, func, skip_bound_arg=True, positional = arg_names[:pos_count] keyword_only_count = func_code.co_kwonlyargcount keyword_only = arg_names[pos_count:pos_count + keyword_only_count] - annotations = _get_type_hints(func, globalns=globalns, localns=localns) - + annotations = func.__annotations__ defaults = func.__defaults__ kwdefaults = func.__kwdefaults__ diff --git a/Lib/test/dataclass_module_1.py b/Lib/test/dataclass_module_1.py index 9f0aeda67f9ab..87a33f8191d3d 100644 --- a/Lib/test/dataclass_module_1.py +++ b/Lib/test/dataclass_module_1.py @@ -1,3 +1,9 @@ +#from __future__ import annotations +USING_STRINGS = False + +# dataclass_module_1.py and dataclass_module_1_str.py are identical +# except only the latter uses string annotations. + import dataclasses import typing diff --git a/Lib/test/dataclass_module_1_str.py b/Lib/test/dataclass_module_1_str.py new file mode 100644 index 0000000000000..6de490b7ad784 --- /dev/null +++ b/Lib/test/dataclass_module_1_str.py @@ -0,0 +1,32 @@ +from __future__ import annotations +USING_STRINGS = True + +# dataclass_module_1.py and dataclass_module_1_str.py are identical +# except only the latter uses string annotations. + +import dataclasses +import typing + +T_CV2 = typing.ClassVar[int] +T_CV3 = typing.ClassVar + +T_IV2 = dataclasses.InitVar[int] +T_IV3 = dataclasses.InitVar + + at dataclasses.dataclass +class CV: + T_CV4 = typing.ClassVar + cv0: typing.ClassVar[int] = 20 + cv1: typing.ClassVar = 30 + cv2: T_CV2 + cv3: T_CV3 + not_cv4: T_CV4 # When using string annotations, this field is not recognized as a ClassVar. + + at dataclasses.dataclass +class IV: + T_IV4 = dataclasses.InitVar + iv0: dataclasses.InitVar[int] + iv1: dataclasses.InitVar + iv2: T_IV2 + iv3: T_IV3 + not_iv4: T_IV4 # When using string annotations, this field is not recognized as an InitVar. diff --git a/Lib/test/dataclass_module_2.py b/Lib/test/dataclass_module_2.py index 8d120d181bd3d..68fb733e29925 100644 --- a/Lib/test/dataclass_module_2.py +++ b/Lib/test/dataclass_module_2.py @@ -1,3 +1,9 @@ +#from __future__ import annotations +USING_STRINGS = False + +# dataclass_module_2.py and dataclass_module_2_str.py are identical +# except only the latter uses string annotations. + from dataclasses import dataclass, InitVar from typing import ClassVar diff --git a/Lib/test/dataclass_module_2_str.py b/Lib/test/dataclass_module_2_str.py new file mode 100644 index 0000000000000..b363d17c176c2 --- /dev/null +++ b/Lib/test/dataclass_module_2_str.py @@ -0,0 +1,32 @@ +from __future__ import annotations +USING_STRINGS = True + +# dataclass_module_2.py and dataclass_module_2_str.py are identical +# except only the latter uses string annotations. + +from dataclasses import dataclass, InitVar +from typing import ClassVar + +T_CV2 = ClassVar[int] +T_CV3 = ClassVar + +T_IV2 = InitVar[int] +T_IV3 = InitVar + + at dataclass +class CV: + T_CV4 = ClassVar + cv0: ClassVar[int] = 20 + cv1: ClassVar = 30 + cv2: T_CV2 + cv3: T_CV3 + not_cv4: T_CV4 # When using string annotations, this field is not recognized as a ClassVar. + + at dataclass +class IV: + T_IV4 = InitVar + iv0: InitVar[int] + iv1: InitVar + iv2: T_IV2 + iv3: T_IV3 + not_iv4: T_IV4 # When using string annotations, this field is not recognized as an InitVar. diff --git a/Lib/test/dataclass_textanno.py b/Lib/test/dataclass_textanno.py index 589b60f0cd61d..3eb6c943d4c43 100644 --- a/Lib/test/dataclass_textanno.py +++ b/Lib/test/dataclass_textanno.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import dataclasses diff --git a/Lib/test/test_annotations.py b/Lib/test/test_annotations.py deleted file mode 100644 index 3e6b709fb4f1e..0000000000000 --- a/Lib/test/test_annotations.py +++ /dev/null @@ -1,228 +0,0 @@ -import unittest -import sys -from textwrap import dedent - -class PostponedAnnotationsTestCase(unittest.TestCase): - template = dedent( - """ - def f() -> {ann}: - ... - def g(arg: {ann}) -> None: - ... - async def f2() -> {ann}: - ... - async def g2(arg: {ann}) -> None: - ... - var: {ann} - var2: {ann} = None - """ - ) - - def getActual(self, annotation): - scope = {} - exec(self.template.format(ann=annotation), {}, scope) - func_ret_ann = scope['f'].__annotations__['return'] - func_arg_ann = scope['g'].__annotations__['arg'] - async_func_ret_ann = scope['f2'].__annotations__['return'] - async_func_arg_ann = scope['g2'].__annotations__['arg'] - var_ann1 = scope['__annotations__']['var'] - var_ann2 = scope['__annotations__']['var2'] - self.assertEqual(func_ret_ann, func_arg_ann) - self.assertEqual(func_ret_ann, async_func_ret_ann) - self.assertEqual(func_ret_ann, async_func_arg_ann) - self.assertEqual(func_ret_ann, var_ann1) - self.assertEqual(func_ret_ann, var_ann2) - return func_ret_ann - - def assertAnnotationEqual( - self, annotation, expected=None, drop_parens=False, is_tuple=False, - ): - actual = self.getActual(annotation) - if expected is None: - expected = annotation if not is_tuple else annotation[1:-1] - if drop_parens: - self.assertNotEqual(actual, expected) - actual = actual.replace("(", "").replace(")", "") - - self.assertEqual(actual, expected) - - def test_annotations(self): - eq = self.assertAnnotationEqual - eq('...') - eq("'some_string'") - eq("u'some_string'") - eq("b'\\xa3'") - eq('Name') - eq('None') - eq('True') - eq('False') - eq('1') - eq('1.0') - eq('1j') - eq('True or False') - eq('True or False or None') - eq('True and False') - eq('True and False and None') - eq('Name1 and Name2 or Name3') - eq('Name1 and (Name2 or Name3)') - eq('Name1 or Name2 and Name3') - eq('(Name1 or Name2) and Name3') - eq('Name1 and Name2 or Name3 and Name4') - eq('Name1 or Name2 and Name3 or Name4') - eq('a + b + (c + d)') - eq('a * b * (c * d)') - eq('(a ** b) ** c ** d') - eq('v1 << 2') - eq('1 >> v2') - eq('1 % finished') - eq('1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8') - eq('not great') - eq('not not great') - eq('~great') - eq('+value') - eq('++value') - eq('-1') - eq('~int and not v1 ^ 123 + v2 | True') - eq('a + (not b)') - eq('lambda: None') - eq('lambda arg: None') - eq('lambda a=True: a') - eq('lambda a, b, c=True: a') - eq("lambda a, b, c=True, *, d=1 << v2, e='str': a") - eq("lambda a, b, c=True, *vararg, d, e='str', **kwargs: a + b") - eq("lambda a, /, b, c=True, *vararg, d, e='str', **kwargs: a + b") - eq('lambda x, /: x') - eq('lambda x=1, /: x') - eq('lambda x, /, y: x + y') - eq('lambda x=1, /, y=2: x + y') - eq('lambda x, /, y=1: x + y') - eq('lambda x, /, y=1, *, z=3: x + y + z') - eq('lambda x=1, /, y=2, *, z=3: x + y + z') - eq('lambda x=1, /, y=2, *, z: x + y + z') - eq('lambda x=1, y=2, z=3, /, w=4, *, l, l2: x + y + z + w + l + l2') - eq('lambda x=1, y=2, z=3, /, w=4, *, l, l2, **kwargs: x + y + z + w + l + l2') - eq('lambda x, /, y=1, *, z: x + y + z') - eq('lambda x: lambda y: x + y') - eq('1 if True else 2') - eq('str or None if int or True else str or bytes or None') - eq('str or None if (1 if True else 2) else str or bytes or None') - eq("0 if not x else 1 if x > 0 else -1") - eq("(1 if x > 0 else -1) if x else 0") - eq("{'2.7': dead, '3.7': long_live or die_hard}") - eq("{'2.7': dead, '3.7': long_live or die_hard, **{'3.6': verygood}}") - eq("{**a, **b, **c}") - eq("{'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}") - eq("{*a, *b, *c}") - eq("({'a': 'b'}, True or False, +value, 'string', b'bytes') or None") - eq("()") - eq("(a,)") - eq("(a, b)") - eq("(a, b, c)") - eq("(*a, *b, *c)") - eq("[]") - eq("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]") - eq("[*a, *b, *c]") - eq("{i for i in (1, 2, 3)}") - eq("{i ** 2 for i in (1, 2, 3)}") - eq("{i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}") - eq("{i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)}") - eq("[i for i in (1, 2, 3)]") - eq("[i ** 2 for i in (1, 2, 3)]") - eq("[i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]") - eq("[i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)]") - eq("(i for i in (1, 2, 3))") - eq("(i ** 2 for i in (1, 2, 3))") - eq("(i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))") - eq("(i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3))") - eq("{i: 0 for i in (1, 2, 3)}") - eq("{i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}") - eq("[(x, y) for x, y in (a, b)]") - eq("[(x,) for x, in (a,)]") - eq("Python3 > Python2 > COBOL") - eq("Life is Life") - eq("call()") - eq("call(arg)") - eq("call(kwarg='hey')") - eq("call(arg, kwarg='hey')") - eq("call(arg, *args, another, kwarg='hey')") - eq("call(arg, another, kwarg='hey', **kwargs, kwarg2='ho')") - eq("lukasz.langa.pl") - eq("call.me(maybe)") - eq("1 .real") - eq("1.0.real") - eq("....__class__") - eq("list[str]") - eq("dict[str, int]") - eq("set[str,]") - eq("tuple[str, ...]") - eq("tuple[(str, *types)]") - eq("tuple[str, int, (str, int)]") - eq("tuple[(*int, str, str, (str, int))]") - eq("tuple[str, int, float, dict[str, int]]") - eq("slice[0]") - eq("slice[0:1]") - eq("slice[0:1:2]") - eq("slice[:]") - eq("slice[:-1]") - eq("slice[1:]") - eq("slice[::-1]") - eq("slice[:,]") - eq("slice[1:2,]") - eq("slice[1:2:3,]") - eq("slice[1:2, 1]") - eq("slice[1:2, 2, 3]") - eq("slice[()]") - eq("slice[a, b:c, d:e:f]") - eq("slice[(x for x in a)]") - eq('str or None if sys.version_info[0] > (3,) else str or bytes or None') - eq("f'f-string without formatted values is just a string'") - eq("f'{{NOT a formatted value}}'") - eq("f'some f-string with {a} {few():.2f} {formatted.values!r}'") - eq('''f"{f'{nested} inner'} outer"''') - eq("f'space between opening braces: { {a for a in (1, 2, 3)}}'") - eq("f'{(lambda x: x)}'") - eq("f'{(None if a else lambda x: x)}'") - eq("f'{x}'") - eq("f'{x!r}'") - eq("f'{x!a}'") - eq('(yield from outside_of_generator)') - eq('(yield)') - eq('(yield a + b)') - eq('await some.complicated[0].call(with_args=True or 1 is not 1)') - eq('[x for x in (a if b else c)]') - eq('[x for x in a if (b if c else d)]') - eq('f(x for x in a)') - eq('f(1, (x for x in a))') - eq('f((x for x in a), 2)') - eq('(((a)))', 'a') - eq('(((a, b)))', '(a, b)') - eq("(x := 10)") - eq("f'{(x := 10):=10}'") - eq("1 + 2") - eq("1 + 2 + 3") - - def test_fstring_debug_annotations(self): - # f-strings with '=' don't round trip very well, so set the expected - # result explicitely. - self.assertAnnotationEqual("f'{x=!r}'", expected="f'x={x!r}'") - self.assertAnnotationEqual("f'{x=:}'", expected="f'x={x:}'") - self.assertAnnotationEqual("f'{x=:.2f}'", expected="f'x={x:.2f}'") - self.assertAnnotationEqual("f'{x=!r}'", expected="f'x={x!r}'") - self.assertAnnotationEqual("f'{x=!a}'", expected="f'x={x!a}'") - self.assertAnnotationEqual("f'{x=!s:*^20}'", expected="f'x={x!s:*^20}'") - - def test_infinity_numbers(self): - inf = "1e" + repr(sys.float_info.max_10_exp + 1) - infj = f"{inf}j" - self.assertAnnotationEqual("1e1000", expected=inf) - self.assertAnnotationEqual("1e1000j", expected=infj) - self.assertAnnotationEqual("-1e1000", expected=f"-{inf}") - self.assertAnnotationEqual("3+1e1000j", expected=f"3 + {infj}") - self.assertAnnotationEqual("(1e1000, 1e1000j)", expected=f"({inf}, {infj})") - self.assertAnnotationEqual("'inf'") - self.assertAnnotationEqual("('inf', 1e1000, 'infxxx', 1e1000j)", expected=f"('inf', {inf}, 'infxxx', {infj})") - self.assertAnnotationEqual("(1e1000, (1e1000j,))", expected=f"({inf}, ({infj},))") - - -if __name__ == "__main__": - unittest.main() diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py index 40c2eb8d232dd..145adb6778170 100644 --- a/Lib/test/test_coroutines.py +++ b/Lib/test/test_coroutines.py @@ -91,6 +91,10 @@ def test_badsyntax_1(self): pass """, + """async def foo(a:await something()): + pass + """, + """async def foo(): def bar(): [i async for i in els] @@ -295,6 +299,10 @@ def bar(): pass """, + """async def foo(a:await b): + pass + """, + """def baz(): async def foo(a=await b): pass diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 4beed69e45bbb..f35f466125d1c 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -9,7 +9,6 @@ import inspect import builtins import unittest -from textwrap import dedent from unittest.mock import Mock from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional from typing import get_type_hints @@ -563,17 +562,17 @@ class C: self.assertEqual(len(the_fields), 3) self.assertEqual(the_fields[0].name, 'x') - self.assertEqual(the_fields[0].type, 'int') + self.assertEqual(the_fields[0].type, int) self.assertFalse(hasattr(C, 'x')) self.assertTrue (the_fields[0].init) self.assertTrue (the_fields[0].repr) self.assertEqual(the_fields[1].name, 'y') - self.assertEqual(the_fields[1].type, 'str') + self.assertEqual(the_fields[1].type, str) self.assertIsNone(getattr(C, 'y')) self.assertFalse(the_fields[1].init) self.assertTrue (the_fields[1].repr) self.assertEqual(the_fields[2].name, 'z') - self.assertEqual(the_fields[2].type, 'str') + self.assertEqual(the_fields[2].type, str) self.assertFalse(hasattr(C, 'z')) self.assertTrue (the_fields[2].init) self.assertFalse(the_fields[2].repr) @@ -759,11 +758,11 @@ class F: def validate_class(cls): # First, check __annotations__, even though they're not # function annotations. - self.assertEqual(cls.__annotations__['i'], 'int') - self.assertEqual(cls.__annotations__['j'], 'str') - self.assertEqual(cls.__annotations__['k'], 'F') - self.assertEqual(cls.__annotations__['l'], 'float') - self.assertEqual(cls.__annotations__['z'], 'complex') + self.assertEqual(cls.__annotations__['i'], int) + self.assertEqual(cls.__annotations__['j'], str) + self.assertEqual(cls.__annotations__['k'], F) + self.assertEqual(cls.__annotations__['l'], float) + self.assertEqual(cls.__annotations__['z'], complex) # Verify __init__. @@ -778,22 +777,22 @@ def validate_class(cls): self.assertEqual(param.name, 'self') param = next(params) self.assertEqual(param.name, 'i') - self.assertIs (param.annotation, 'int') + self.assertIs (param.annotation, int) self.assertEqual(param.default, inspect.Parameter.empty) self.assertEqual(param.kind, inspect.Parameter.POSITIONAL_OR_KEYWORD) param = next(params) self.assertEqual(param.name, 'j') - self.assertIs (param.annotation, 'str') + self.assertIs (param.annotation, str) self.assertEqual(param.default, inspect.Parameter.empty) self.assertEqual(param.kind, inspect.Parameter.POSITIONAL_OR_KEYWORD) param = next(params) self.assertEqual(param.name, 'k') - self.assertIs (param.annotation, 'F') + self.assertIs (param.annotation, F) # Don't test for the default, since it's set to MISSING. self.assertEqual(param.kind, inspect.Parameter.POSITIONAL_OR_KEYWORD) param = next(params) self.assertEqual(param.name, 'l') - self.assertIs (param.annotation, 'float') + self.assertIs (param.annotation, float) # Don't test for the default, since it's set to MISSING. self.assertEqual(param.kind, inspect.Parameter.POSITIONAL_OR_KEYWORD) self.assertRaises(StopIteration, next, params) @@ -2855,6 +2854,9 @@ class C: class TestStringAnnotations(unittest.TestCase): def test_classvar(self): + # Some expressions recognized as ClassVar really aren't. But + # if you're using string annotations, it's not an exact + # science. # These tests assume that both "import typing" and "from # typing import *" have been run in this file. for typestr in ('ClassVar[int]', @@ -2869,15 +2871,17 @@ def test_classvar(self): 'typing. ClassVar[str]', 'typing.ClassVar [str]', 'typing.ClassVar [ str]', - # Double stringified - '"typing.ClassVar[int]"', + # Not syntactically valid, but these will - # be treated as ClassVars. + # be treated as ClassVars. 'typing.ClassVar.[int]', 'typing.ClassVar+', ): with self.subTest(typestr=typestr): - C = dataclass(type("C", (), {"__annotations__": {"x": typestr}})) + @dataclass + class C: + x: typestr + # x is a ClassVar, so C() takes no args. C() @@ -2898,7 +2902,9 @@ def test_isnt_classvar(self): 'typingxClassVar[str]', ): with self.subTest(typestr=typestr): - C = dataclass(type("C", (), {"__annotations__": {"x": typestr}})) + @dataclass + class C: + x: typestr # x is not a ClassVar, so C() takes one arg. self.assertEqual(C(10).x, 10) @@ -2918,16 +2924,16 @@ def test_initvar(self): 'dataclasses. InitVar[str]', 'dataclasses.InitVar [str]', 'dataclasses.InitVar [ str]', - # Double stringified - '"dataclasses.InitVar[int]"', + # Not syntactically valid, but these will # be treated as InitVars. 'dataclasses.InitVar.[int]', 'dataclasses.InitVar+', ): with self.subTest(typestr=typestr): - C = dataclass(type("C", (), {"__annotations__": {"x": typestr}})) - + @dataclass + class C: + x: typestr # x is an InitVar, so doesn't create a member. with self.assertRaisesRegex(AttributeError, @@ -2941,22 +2947,30 @@ def test_isnt_initvar(self): 'typing.xInitVar[int]', ): with self.subTest(typestr=typestr): - C = dataclass(type("C", (), {"__annotations__": {"x": typestr}})) + @dataclass + class C: + x: typestr # x is not an InitVar, so there will be a member x. self.assertEqual(C(10).x, 10) def test_classvar_module_level_import(self): from test import dataclass_module_1 + from test import dataclass_module_1_str from test import dataclass_module_2 + from test import dataclass_module_2_str - for m in (dataclass_module_1, - dataclass_module_2): + for m in (dataclass_module_1, dataclass_module_1_str, + dataclass_module_2, dataclass_module_2_str, + ): with self.subTest(m=m): # There's a difference in how the ClassVars are # interpreted when using string annotations or # not. See the imported modules for details. - c = m.CV(10) + if m.USING_STRINGS: + c = m.CV(10) + else: + c = m.CV() self.assertEqual(c.cv0, 20) @@ -2972,9 +2986,14 @@ def test_classvar_module_level_import(self): # not an instance field. getattr(c, field_name) - # iv4 is interpreted as a normal field. - self.assertIn('not_iv4', c.__dict__) - self.assertEqual(c.not_iv4, 4) + if m.USING_STRINGS: + # iv4 is interpreted as a normal field. + self.assertIn('not_iv4', c.__dict__) + self.assertEqual(c.not_iv4, 4) + else: + # iv4 is interpreted as an InitVar, so it + # won't exist on the instance. + self.assertNotIn('not_iv4', c.__dict__) def test_text_annotations(self): from test import dataclass_textanno diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 19e5c0f633502..8e36ae266b94b 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -237,26 +237,28 @@ def bug42562(): 2 0 SETUP_ANNOTATIONS 2 LOAD_CONST 0 (1) 4 STORE_NAME 0 (x) - 6 LOAD_CONST 1 ('int') - 8 LOAD_NAME 1 (__annotations__) - 10 LOAD_CONST 2 ('x') + 6 LOAD_NAME 1 (int) + 8 LOAD_NAME 2 (__annotations__) + 10 LOAD_CONST 1 ('x') 12 STORE_SUBSCR - 3 14 LOAD_CONST 3 ('fun(1)') - 16 LOAD_NAME 1 (__annotations__) - 18 LOAD_CONST 4 ('y') - 20 STORE_SUBSCR - - 4 22 LOAD_CONST 0 (1) - 24 LOAD_NAME 2 (lst) - 26 LOAD_NAME 3 (fun) - 28 LOAD_CONST 5 (0) - 30 CALL_FUNCTION 1 - 32 STORE_SUBSCR - 34 LOAD_NAME 4 (int) - 36 POP_TOP - 38 LOAD_CONST 6 (None) - 40 RETURN_VALUE + 3 14 LOAD_NAME 3 (fun) + 16 LOAD_CONST 0 (1) + 18 CALL_FUNCTION 1 + 20 LOAD_NAME 2 (__annotations__) + 22 LOAD_CONST 2 ('y') + 24 STORE_SUBSCR + + 4 26 LOAD_CONST 0 (1) + 28 LOAD_NAME 4 (lst) + 30 LOAD_NAME 3 (fun) + 32 LOAD_CONST 3 (0) + 34 CALL_FUNCTION 1 + 36 STORE_SUBSCR + 38 LOAD_NAME 1 (int) + 40 POP_TOP + 42 LOAD_CONST 4 (None) + 44 RETURN_VALUE """ compound_stmt_str = """\ diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index caeeb2712a1a4..fba9281deb376 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -617,7 +617,7 @@ def check_wrapper(self, wrapper, wrapped, def _default_update(self): - def f(a: int): + def f(a:'This is a new annotation'): """This is a test""" pass f.attr = 'This is also a test' @@ -634,7 +634,7 @@ def test_default_update(self): self.assertEqual(wrapper.__name__, 'f') self.assertEqual(wrapper.__qualname__, f.__qualname__) self.assertEqual(wrapper.attr, 'This is also a test') - self.assertEqual(wrapper.__annotations__['a'], 'int') + self.assertEqual(wrapper.__annotations__['a'], 'This is a new annotation') self.assertNotIn('b', wrapper.__annotations__) @unittest.skipIf(sys.flags.optimize >= 2, diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index c15f10b8bc747..6f79e19a54435 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -363,7 +363,7 @@ class C: z = 2 def __init__(self, x): self.x: int = x - self.assertEqual(C.__annotations__, {'_C__foo': 'int', 's': 'str'}) + self.assertEqual(C.__annotations__, {'_C__foo': int, 's': str}) with self.assertRaises(NameError): class CBad: no_such_name_defined.attr: int = 0 @@ -379,15 +379,15 @@ def __prepare__(metacls, name, bases, **kwds): return {'__annotations__': CNS()} class CC(metaclass=CMeta): XX: 'ANNOT' - self.assertEqual(CC.__annotations__['xx'], repr('ANNOT')) + self.assertEqual(CC.__annotations__['xx'], 'ANNOT') def test_var_annot_module_semantics(self): with self.assertRaises(AttributeError): print(test.__annotations__) self.assertEqual(ann_module.__annotations__, - {1: 2, 'x': 'int', 'y': 'str', 'f': 'Tuple[int, int]'}) + {1: 2, 'x': int, 'y': str, 'f': typing.Tuple[int, int]}) self.assertEqual(ann_module.M.__annotations__, - {'123': 123, 'o': 'type'}) + {'123': 123, 'o': type}) self.assertEqual(ann_module2.__annotations__, {}) def test_var_annot_in_module(self): @@ -406,7 +406,7 @@ def test_var_annot_simple_exec(self): exec("'docstring'\n" "__annotations__[1] = 2\n" "x: int = 5\n", gns, lns) - self.assertEqual(lns["__annotations__"], {1: 2, 'x': 'int'}) + self.assertEqual(lns["__annotations__"], {1: 2, 'x': int}) with self.assertRaises(KeyError): gns['__annotations__'] @@ -414,8 +414,8 @@ def test_var_annot_custom_maps(self): # tests with custom locals() and __annotations__ ns = {'__annotations__': CNS()} exec('X: int; Z: str = "Z"; (w): complex = 1j', ns) - self.assertEqual(ns['__annotations__']['x'], 'int') - self.assertEqual(ns['__annotations__']['z'], 'str') + self.assertEqual(ns['__annotations__']['x'], int) + self.assertEqual(ns['__annotations__']['z'], str) with self.assertRaises(KeyError): ns['__annotations__']['w'] nonloc_ns = {} @@ -429,7 +429,7 @@ def __setitem__(self, item, value): def __getitem__(self, item): return self._dct[item] exec('x: int = 1', {}, CNS2()) - self.assertEqual(nonloc_ns['__annotations__']['x'], 'int') + self.assertEqual(nonloc_ns['__annotations__']['x'], int) def test_var_annot_refleak(self): # complex case: custom locals plus custom __annotations__ @@ -446,7 +446,7 @@ def __setitem__(self, item, value): def __getitem__(self, item): return self._dct[item] exec('X: str', {}, CNS2()) - self.assertEqual(nonloc_ns['__annotations__']['x'], 'str') + self.assertEqual(nonloc_ns['__annotations__']['x'], str) def test_var_annot_rhs(self): ns = {} @@ -626,46 +626,50 @@ def f(*args, **kwargs): # argument annotation tests def f(x) -> list: pass - self.assertEqual(f.__annotations__, {'return': 'list'}) + self.assertEqual(f.__annotations__, {'return': list}) def f(x: int): pass - self.assertEqual(f.__annotations__, {'x': 'int'}) + self.assertEqual(f.__annotations__, {'x': int}) def f(x: int, /): pass - self.assertEqual(f.__annotations__, {'x': 'int'}) + self.assertEqual(f.__annotations__, {'x': int}) def f(x: int = 34, /): pass - self.assertEqual(f.__annotations__, {'x': 'int'}) + self.assertEqual(f.__annotations__, {'x': int}) def f(*x: str): pass - self.assertEqual(f.__annotations__, {'x': 'str'}) + self.assertEqual(f.__annotations__, {'x': str}) def f(**x: float): pass - self.assertEqual(f.__annotations__, {'x': 'float'}) + self.assertEqual(f.__annotations__, {'x': float}) + def f(x, y: 1+2): pass + self.assertEqual(f.__annotations__, {'y': 3}) + def f(x, y: 1+2, /): pass + self.assertEqual(f.__annotations__, {'y': 3}) def f(a, b: 1, c: 2, d): pass - self.assertEqual(f.__annotations__, {'b': '1', 'c': '2'}) + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2}) def f(a, b: 1, /, c: 2, d): pass - self.assertEqual(f.__annotations__, {'b': '1', 'c': '2'}) + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2}) def f(a, b: 1, c: 2, d, e: 3 = 4, f=5, *g: 6): pass self.assertEqual(f.__annotations__, - {'b': '1', 'c': '2', 'e': '3', 'g': '6'}) + {'b': 1, 'c': 2, 'e': 3, 'g': 6}) def f(a, b: 1, c: 2, d, e: 3 = 4, f=5, *g: 6, h: 7, i=8, j: 9 = 10, **k: 11) -> 12: pass self.assertEqual(f.__annotations__, - {'b': '1', 'c': '2', 'e': '3', 'g': '6', 'h': '7', 'j': '9', - 'k': '11', 'return': '12'}) + {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9, + 'k': 11, 'return': 12}) def f(a, b: 1, c: 2, d, e: 3 = 4, f: int = 5, /, *g: 6, h: 7, i=8, j: 9 = 10, **k: 11) -> 12: pass self.assertEqual(f.__annotations__, - {'b': '1', 'c': '2', 'e': '3', 'f': 'int', 'g': '6', 'h': '7', 'j': '9', - 'k': '11', 'return': '12'}) + {'b': 1, 'c': 2, 'e': 3, 'f': int, 'g': 6, 'h': 7, 'j': 9, + 'k': 11, 'return': 12}) # Check for issue #20625 -- annotations mangling class Spam: def f(self, *, __kw: 1): pass class Ham(Spam): pass - self.assertEqual(Spam.f.__annotations__, {'_Spam__kw': '1'}) - self.assertEqual(Ham.f.__annotations__, {'_Spam__kw': '1'}) + self.assertEqual(Spam.f.__annotations__, {'_Spam__kw': 1}) + self.assertEqual(Ham.f.__annotations__, {'_Spam__kw': 1}) # Check for SF Bug #1697248 - mixing decorators and a return annotation def null(x): return x @null def f(x) -> list: pass - self.assertEqual(f.__annotations__, {'return': 'list'}) + self.assertEqual(f.__annotations__, {'return': list}) # Test expressions as decorators (PEP 614): @False or null @@ -1113,6 +1117,8 @@ def g(): rest = 4, 5, 6; yield 1, 2, 3, *rest # Not allowed at class scope check_syntax_error(self, "class foo:yield 1") check_syntax_error(self, "class foo:yield from ()") + # Check annotation refleak on SyntaxError + check_syntax_error(self, "def g(a:(yield)): pass") def test_yield_in_comprehensions(self): # Check yield in comprehensions diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 35ad0b93e7dc2..b32b3d3757750 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -888,7 +888,7 @@ def test_getfullargspec(self): self.assertFullArgSpecEquals(mod2.annotated, ['arg1'], ann_e={'arg1' : list}, - formatted="(arg1: list)") + formatted='(arg1: list)') self.assertFullArgSpecEquals(mod2.keyword_only_arg, [], kwonlyargs_e=['arg'], formatted='(*, arg)') @@ -2237,8 +2237,8 @@ def test(a, b:'foo') -> 123: pass self.assertEqual(self.signature(test), ((('a', ..., ..., "positional_or_keyword"), - ('b', ..., repr('foo'), "positional_or_keyword")), - '123')) + ('b', ..., 'foo', "positional_or_keyword")), + 123)) def test_signature_on_wkwonly(self): def test(*, a:float, b:str) -> int: @@ -2253,11 +2253,11 @@ def test(a, b:'foo'=10, *args:'bar', spam:'baz', ham=123, **kwargs:int): pass self.assertEqual(self.signature(test), ((('a', ..., ..., "positional_or_keyword"), - ('b', 10, repr('foo'), "positional_or_keyword"), - ('args', ..., repr('bar'), "var_positional"), - ('spam', ..., repr('baz'), "keyword_only"), + ('b', 10, 'foo', "positional_or_keyword"), + ('args', ..., 'bar', "var_positional"), + ('spam', ..., 'baz', "keyword_only"), ('ham', 123, ..., "keyword_only"), - ('kwargs', ..., 'int', "var_keyword")), + ('kwargs', ..., int, "var_keyword")), ...)) def test_signature_without_self(self): @@ -2666,12 +2666,12 @@ def test(a, b, c:int) -> 42: self.assertEqual(self.signature(partial(partial(test, 1))), ((('b', ..., ..., "positional_or_keyword"), - ('c', ..., 'int', "positional_or_keyword")), - '42')) + ('c', ..., int, "positional_or_keyword")), + 42)) self.assertEqual(self.signature(partial(partial(test, 1), 2)), - ((('c', ..., 'int', "positional_or_keyword"),), - '42')) + ((('c', ..., int, "positional_or_keyword"),), + 42)) psig = inspect.signature(partial(partial(test, 1), 2)) @@ -2790,12 +2790,12 @@ def test(it, a, *, c) -> 'spam': ((('it', ..., ..., 'positional_or_keyword'), ('a', ..., ..., 'positional_or_keyword'), ('c', 1, ..., 'keyword_only')), - repr('spam'))) + 'spam')) self.assertEqual(self.signature(Spam().ham), ((('a', ..., ..., 'positional_or_keyword'), ('c', 1, ..., 'keyword_only')), - repr('spam'))) + 'spam')) class Spam: def test(self: 'anno', x): @@ -2804,7 +2804,7 @@ def test(self: 'anno', x): g = partialmethod(test, 1) self.assertEqual(self.signature(Spam.g), - ((('self', ..., repr('anno'), 'positional_or_keyword'),), + ((('self', ..., 'anno', 'positional_or_keyword'),), ...)) def test_signature_on_fake_partialmethod(self): @@ -3142,16 +3142,20 @@ def foo(a={}): pass with self.assertRaisesRegex(TypeError, 'unhashable type'): hash(inspect.signature(foo)) + def foo(a) -> {}: pass + with self.assertRaisesRegex(TypeError, 'unhashable type'): + hash(inspect.signature(foo)) + def test_signature_str(self): def foo(a:int=1, *, b, c=None, **kwargs) -> 42: pass self.assertEqual(str(inspect.signature(foo)), - '(a: \'int\' = 1, *, b, c=None, **kwargs) -> \'42\'') + '(a: int = 1, *, b, c=None, **kwargs) -> 42') def foo(a:int=1, *args, b, c=None, **kwargs) -> 42: pass self.assertEqual(str(inspect.signature(foo)), - '(a: \'int\' = 1, *args, b, c=None, **kwargs) -> \'42\'') + '(a: int = 1, *args, b, c=None, **kwargs) -> 42') def foo(): pass @@ -3194,8 +3198,8 @@ def test() -> 42: self.assertIs(sig.return_annotation, None) sig = sig.replace(return_annotation=sig.empty) self.assertIs(sig.return_annotation, sig.empty) - sig = sig.replace(return_annotation='42') - self.assertEqual(sig.return_annotation, '42') + sig = sig.replace(return_annotation=42) + self.assertEqual(sig.return_annotation, 42) self.assertEqual(sig, inspect.signature(test)) def test_signature_on_mangled_parameters(self): @@ -3207,8 +3211,8 @@ class Ham(Spam): self.assertEqual(self.signature(Spam.foo), ((('self', ..., ..., "positional_or_keyword"), - ('_Spam__p1', 2, '1', "positional_or_keyword"), - ('_Spam__p2', 3, '2', "keyword_only")), + ('_Spam__p1', 2, 1, "positional_or_keyword"), + ('_Spam__p2', 3, 2, "keyword_only")), ...)) self.assertEqual(self.signature(Spam.foo), @@ -3253,13 +3257,13 @@ def test_signater_parameters_is_ordered(self): def test_signature_annotations_with_local_namespaces(self): class Foo: ... def func(foo: Foo) -> int: pass - def func2(foo: Foo, bar: Bar) -> int: pass + def func2(foo: Foo, bar: 'Bar') -> int: pass for signature_func in (inspect.signature, inspect.Signature.from_callable): with self.subTest(signature_func = signature_func): sig1 = signature_func(func) - self.assertEqual(sig1.return_annotation, 'int') - self.assertEqual(sig1.parameters['foo'].annotation, 'Foo') + self.assertEqual(sig1.return_annotation, int) + self.assertEqual(sig1.parameters['foo'].annotation, Foo) sig2 = signature_func(func, localns=locals()) self.assertEqual(sig2.return_annotation, int) @@ -3268,7 +3272,7 @@ def func2(foo: Foo, bar: Bar) -> int: pass sig3 = signature_func(func2, globalns={'Bar': int}, localns=locals()) self.assertEqual(sig3.return_annotation, int) self.assertEqual(sig3.parameters['foo'].annotation, Foo) - self.assertEqual(sig3.parameters['bar'].annotation, int) + self.assertEqual(sig3.parameters['bar'].annotation, 'Bar') class TestParameterObject(unittest.TestCase): diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py index 4be78a4e62b6d..d43a8303b1710 100644 --- a/Lib/test/test_opcodes.py +++ b/Lib/test/test_opcodes.py @@ -39,7 +39,7 @@ class C: pass def test_use_existing_annotations(self): ns = {'__annotations__': {1: 2}} exec('x: int', ns) - self.assertEqual(ns['__annotations__'], {'x': 'int', 1: 2}) + self.assertEqual(ns['__annotations__'], {'x': int, 1: 2}) def test_do_not_recreate_annotations(self): # Don't rely on the existence of the '__annotations__' global. diff --git a/Lib/test/test_positional_only_arg.py b/Lib/test/test_positional_only_arg.py index 1fe8256d46ea4..0a9503e2025d6 100644 --- a/Lib/test/test_positional_only_arg.py +++ b/Lib/test/test_positional_only_arg.py @@ -302,14 +302,14 @@ def inner_has_pos_only(): def f(x: int, /): ... return f - assert inner_has_pos_only().__annotations__ == {'x': 'int'} + assert inner_has_pos_only().__annotations__ == {'x': int} class Something: def method(self): def f(x: int, /): ... return f - assert Something().method().__annotations__ == {'x': 'int'} + assert Something().method().__annotations__ == {'x': int} def multiple_levels(): def inner_has_pos_only(): @@ -317,7 +317,7 @@ def f(x: int, /): ... return f return inner_has_pos_only() - assert multiple_levels().__annotations__ == {'x': 'int'} + assert multiple_levels().__annotations__ == {'x': int} def test_same_keyword_as_positional_with_kwargs(self): def f(something,/,**kwargs): @@ -429,6 +429,17 @@ def method(self, /): self.assertEqual(C().method(), sentinel) + def test_annotations_constant_fold(self): + def g(): + def f(x: not (int is int), /): ... + + # without constant folding we end up with + # COMPARE_OP(is), IS_OP (0) + # with constant folding we should expect a IS_OP (1) + codes = [(i.opname, i.argval) for i in dis.get_instructions(g)] + self.assertNotIn(('UNARY_NOT', None), codes) + self.assertIn(('IS_OP', 1), codes) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 9bde0c75bc906..c862a805bbcce 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -81,7 +81,7 @@ class B(builtins.object) |\x20\x20 | NO_MEANING = 'eggs' |\x20\x20 - | __annotations__ = {'NO_MEANING': 'str'} + | __annotations__ = {'NO_MEANING': } \x20\x20\x20\x20 class C(builtins.object) | Methods defined here: @@ -194,7 +194,7 @@ class C(builtins.object) Data and other attributes defined here:
NO_MEANING = 'eggs'
-
__annotations__ = {'NO_MEANING': 'str'}
+
__annotations__ = {'NO_MEANING': <class 'str'>}

diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 4d8198e5db605..5f622b092f98f 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1018,6 +1018,14 @@ Traceback (most recent call last): SyntaxError: cannot assign to __debug__ + >>> def f(*args:(lambda __debug__:0)): pass + Traceback (most recent call last): + SyntaxError: cannot assign to __debug__ + + >>> def f(**kwargs:(lambda __debug__:0)): pass + Traceback (most recent call last): + SyntaxError: cannot assign to __debug__ + >>> with (lambda *:0): pass Traceback (most recent call last): SyntaxError: named arguments must follow bare * diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index d8a48ce36f618..25ebec5fa5509 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -671,8 +671,8 @@ def test_or_type_operator_with_forward(self): ForwardBefore = 'Forward' | T def forward_after(x: ForwardAfter[int]) -> None: ... def forward_before(x: ForwardBefore[int]) -> None: ... - assert typing.get_args(typing.get_type_hints(forward_after, localns=locals())['x']) == (int, Forward) - assert typing.get_args(typing.get_type_hints(forward_before, localns=locals())['x']) == (int, Forward) + assert typing.get_args(typing.get_type_hints(forward_after)['x']) == (int, Forward) + assert typing.get_args(typing.get_type_hints(forward_before)['x']) == (int, Forward) def test_or_type_operator_with_Protocol(self): class Proto(typing.Protocol): diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 50723c4df1990..99417d7d36499 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -363,7 +363,7 @@ def test_empty(self): def test_no_eval_union(self): u = Union[int, str] def f(x: u): ... - self.assertIs(get_type_hints(f, globals(), locals())['x'], u) + self.assertIs(get_type_hints(f)['x'], u) def test_function_repr_union(self): def fun() -> int: ... @@ -2876,7 +2876,7 @@ def test_get_type_hints_classes(self): self.assertEqual(gth(HasForeignBaseClass), {'some_xrepr': XRepr, 'other_a': mod_generics_cache.A, 'some_b': mod_generics_cache.B}) - self.assertEqual(gth(XRepr), + self.assertEqual(gth(XRepr.__new__), {'x': int, 'y': int}) self.assertEqual(gth(mod_generics_cache.B), {'my_inner_a1': mod_generics_cache.B.A, @@ -3689,7 +3689,7 @@ def test_annotation_usage(self): self.assertEqual(tim.cool, 9000) self.assertEqual(CoolEmployee.__name__, 'CoolEmployee') self.assertEqual(CoolEmployee._fields, ('name', 'cool')) - self.assertEqual(gth(CoolEmployee), + self.assertEqual(CoolEmployee.__annotations__, collections.OrderedDict(name=str, cool=int)) def test_annotation_usage_with_default(self): @@ -3703,7 +3703,7 @@ def test_annotation_usage_with_default(self): self.assertEqual(CoolEmployeeWithDefault.__name__, 'CoolEmployeeWithDefault') self.assertEqual(CoolEmployeeWithDefault._fields, ('name', 'cool')) - self.assertEqual(gth(CoolEmployeeWithDefault), + self.assertEqual(CoolEmployeeWithDefault.__annotations__, dict(name=str, cool=int)) self.assertEqual(CoolEmployeeWithDefault._field_defaults, dict(cool=0)) @@ -3871,7 +3871,7 @@ def test_typeddict_errors(self): def test_py36_class_syntax_usage(self): self.assertEqual(LabelPoint2D.__name__, 'LabelPoint2D') self.assertEqual(LabelPoint2D.__module__, __name__) - self.assertEqual(gth(LabelPoint2D), {'x': int, 'y': int, 'label': str}) + self.assertEqual(LabelPoint2D.__annotations__, {'x': int, 'y': int, 'label': str}) self.assertEqual(LabelPoint2D.__bases__, (dict,)) self.assertEqual(LabelPoint2D.__total__, True) self.assertNotIsSubclass(LabelPoint2D, typing.Sequence) @@ -3934,11 +3934,11 @@ class Cat(Animal): assert BaseAnimal.__required_keys__ == frozenset(['name']) assert BaseAnimal.__optional_keys__ == frozenset([]) - assert gth(BaseAnimal) == {'name': str} + assert BaseAnimal.__annotations__ == {'name': str} assert Animal.__required_keys__ == frozenset(['name']) assert Animal.__optional_keys__ == frozenset(['tail', 'voice']) - assert gth(Animal) == { + assert Animal.__annotations__ == { 'name': str, 'tail': bool, 'voice': str, @@ -3946,7 +3946,7 @@ class Cat(Animal): assert Cat.__required_keys__ == frozenset(['name', 'fur_color']) assert Cat.__optional_keys__ == frozenset(['tail', 'voice']) - assert gth(Cat) == { + assert Cat.__annotations__ == { 'fur_color': str, 'name': str, 'tail': bool, @@ -3967,7 +3967,7 @@ def test_io(self): def stuff(a: IO) -> AnyStr: return a.readline() - a = gth(stuff)['a'] + a = stuff.__annotations__['a'] self.assertEqual(a.__parameters__, (AnyStr,)) def test_textio(self): @@ -3975,7 +3975,7 @@ def test_textio(self): def stuff(a: TextIO) -> str: return a.readline() - a = gth(stuff)['a'] + a = stuff.__annotations__['a'] self.assertEqual(a.__parameters__, ()) def test_binaryio(self): @@ -3983,7 +3983,7 @@ def test_binaryio(self): def stuff(a: BinaryIO) -> bytes: return a.readline() - a = gth(stuff)['a'] + a = stuff.__annotations__['a'] self.assertEqual(a.__parameters__, ()) def test_io_submodule(self): diff --git a/Lib/typing.py b/Lib/typing.py index ea66cf50a078f..9a3a6a7725a93 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -577,13 +577,6 @@ class ForwardRef(_Final, _root=True): def __init__(self, arg, is_argument=True): if not isinstance(arg, str): raise TypeError(f"Forward reference must be a string -- got {arg!r}") - - # Double-stringified forward references is a result of activating - # the 'annotations' future by default. This way, we eliminate them in - # the runtime. - if arg.startswith(("'", '\"')) and arg.endswith(("'", '"')): - arg = arg[1:-1] - try: code = compile(arg, '', 'eval') except SyntaxError: diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst new file mode 100644 index 0000000000000..d289424fda395 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst @@ -0,0 +1,5 @@ +Revert making ``from __future__ import annotations`` the default. This follows +the Steering Council decision to postpone PEP 563 changes to at least Python +3.11. See the original email for more information regarding the decision: +https://mail.python.org/archives/list/python-dev at python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/. +Patch by Pablo Galindo. diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 311e0c7a8aa38..dea20da07e69d 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -406,6 +406,7 @@ static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); +static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); @@ -625,11 +626,25 @@ astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { + CALL_SEQ(astfold_arg, arg, node_->posonlyargs); + CALL_SEQ(astfold_arg, arg, node_->args); + CALL_OPT(astfold_arg, arg_ty, node_->vararg); + CALL_SEQ(astfold_arg, arg, node_->kwonlyargs); CALL_SEQ(astfold_expr, expr, node_->kw_defaults); + CALL_OPT(astfold_arg, arg_ty, node_->kwarg); CALL_SEQ(astfold_expr, expr, node_->defaults); return 1; } +static int +astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) +{ + if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { + CALL_OPT(astfold_expr, expr_ty, node_->annotation); + } + return 1; +} + static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { @@ -638,11 +653,17 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args); CALL(astfold_body, asdl_seq, node_->v.FunctionDef.body); CALL_SEQ(astfold_expr, expr, node_->v.FunctionDef.decorator_list); + if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { + CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns); + } break; case AsyncFunctionDef_kind: CALL(astfold_arguments, arguments_ty, node_->v.AsyncFunctionDef.args); CALL(astfold_body, asdl_seq, node_->v.AsyncFunctionDef.body); CALL_SEQ(astfold_expr, expr, node_->v.AsyncFunctionDef.decorator_list); + if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { + CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns); + } break; case ClassDef_kind: CALL_SEQ(astfold_expr, expr, node_->v.ClassDef.bases); @@ -666,6 +687,9 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) break; case AnnAssign_kind: CALL(astfold_expr, expr_ty, node_->v.AnnAssign.target); + if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { + CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation); + } CALL_OPT(astfold_expr, expr_ty, node_->v.AnnAssign.value); break; case For_kind: diff --git a/Python/compile.c b/Python/compile.c index 496b4b0371f1d..49a713b2b0c36 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -2111,16 +2111,24 @@ static int compiler_visit_argannotation(struct compiler *c, identifier id, expr_ty annotation, Py_ssize_t *annotations_len) { - if (annotation) { - PyObject *mangled = _Py_Mangle(c->u->u_private, id); - if (!mangled) - return 0; + if (!annotation) { + return 1; + } + + PyObject *mangled = _Py_Mangle(c->u->u_private, id); + if (!mangled) { + return 0; + } + ADDOP_LOAD_CONST(c, mangled); + Py_DECREF(mangled); - ADDOP_LOAD_CONST(c, mangled); - Py_DECREF(mangled); - VISIT(c, annexpr, annotation); - *annotations_len += 2; + if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { + VISIT(c, annexpr, annotation) + } + else { + VISIT(c, expr, annotation); } + *annotations_len += 2; return 1; } @@ -5403,7 +5411,12 @@ compiler_annassign(struct compiler *c, stmt_ty s) if (s->v.AnnAssign.simple && (c->u->u_scope_type == COMPILER_SCOPE_MODULE || c->u->u_scope_type == COMPILER_SCOPE_CLASS)) { - VISIT(c, annexpr, s->v.AnnAssign.annotation); + if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { + VISIT(c, annexpr, s->v.AnnAssign.annotation) + } + else { + VISIT(c, expr, s->v.AnnAssign.annotation); + } ADDOP_NAME(c, LOAD_NAME, __annotations__, names); mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id); ADDOP_LOAD_CONST_NEW(c, mangled); diff --git a/Python/future.c b/Python/future.c index 05ade8e250ab3..d465608ca4549 100644 --- a/Python/future.c +++ b/Python/future.c @@ -37,7 +37,7 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) } else if (strcmp(feature, FUTURE_GENERATOR_STOP) == 0) { continue; } else if (strcmp(feature, FUTURE_ANNOTATIONS) == 0) { - continue; + ff->ff_features |= CO_FUTURE_ANNOTATIONS; } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); diff --git a/Python/importlib_external.h b/Python/importlib_external.h index e242c36aa39ce..c5d3450b7c438 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -359,7 +359,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,185,0,0,0,115,38,0,0,0,16,5,6,1,22,1, 4,255,2,2,14,3,24,1,16,128,18,1,12,1,2,1, 12,1,2,3,12,254,2,1,2,1,2,254,2,253,255,128, - 114,95,0,0,0,105,108,13,0,0,114,44,0,0,0,114, + 114,95,0,0,0,105,109,13,0,0,114,44,0,0,0,114, 32,0,0,0,115,2,0,0,0,13,10,90,11,95,95,112, 121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,3, 46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,41, @@ -473,7 +473,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, 109,101,218,8,102,105,108,101,110,97,109,101,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,17,99,97,99, - 104,101,95,102,114,111,109,95,115,111,117,114,99,101,121,1, + 104,101,95,102,114,111,109,95,115,111,117,114,99,101,122,1, 0,0,115,74,0,0,0,8,18,6,1,2,1,4,255,8, 2,4,1,8,1,12,1,10,1,12,1,16,1,8,1,8, 1,8,1,24,1,8,1,12,1,6,1,8,2,8,1,8, @@ -554,7 +554,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, 97,115,101,95,102,105,108,101,110,97,109,101,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,17,115,111,117, - 114,99,101,95,102,114,111,109,95,99,97,99,104,101,192,1, + 114,99,101,95,102,114,111,109,95,99,97,99,104,101,193,1, 0,0,115,62,0,0,0,12,9,8,1,10,1,12,1,4, 1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,8, 1,8,1,2,1,8,255,10,2,8,1,14,1,8,1,16, @@ -590,7 +590,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,112, 97,116,104,114,7,0,0,0,114,7,0,0,0,114,8,0, 0,0,218,15,95,103,101,116,95,115,111,117,114,99,101,102, - 105,108,101,232,1,0,0,115,24,0,0,0,12,7,4,1, + 105,108,101,233,1,0,0,115,24,0,0,0,12,7,4,1, 16,1,24,1,4,1,2,1,12,1,16,1,14,1,16,1, 2,254,255,128,114,135,0,0,0,99,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, @@ -603,7 +603,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,121,0,0,0,114,107,0,0,0,114,113,0, 0,0,41,1,114,120,0,0,0,114,7,0,0,0,114,7, 0,0,0,114,8,0,0,0,218,11,95,103,101,116,95,99, - 97,99,104,101,100,251,1,0,0,115,20,0,0,0,14,1, + 97,99,104,101,100,252,1,0,0,115,20,0,0,0,14,1, 2,1,10,1,12,1,6,1,14,1,4,1,4,2,2,251, 255,128,114,137,0,0,0,99,1,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,0, @@ -617,7 +617,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,233,128,0,0,0,78,41,3,114,75,0,0,0,114,77, 0,0,0,114,76,0,0,0,41,2,114,65,0,0,0,114, 78,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,7, + 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,8, 2,0,0,115,16,0,0,0,2,2,14,1,12,1,6,1, 8,3,4,1,2,251,255,128,114,139,0,0,0,99,1,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, @@ -655,7 +655,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,115, 169,1,218,6,109,101,116,104,111,100,114,7,0,0,0,114, 8,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, - 101,95,119,114,97,112,112,101,114,27,2,0,0,115,20,0, + 101,95,119,114,97,112,112,101,114,28,2,0,0,115,20,0, 0,0,8,1,8,1,10,1,4,1,8,1,2,255,2,1, 6,255,24,2,255,128,122,40,95,99,104,101,99,107,95,110, 97,109,101,46,60,108,111,99,97,108,115,62,46,95,99,104, @@ -673,7 +673,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, 111,108,100,114,85,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,5,95,119,114,97,112,40,2, + 0,0,114,8,0,0,0,218,5,95,119,114,97,112,41,2, 0,0,115,12,0,0,0,8,1,10,1,18,1,2,128,18, 1,255,128,122,26,95,99,104,101,99,107,95,110,97,109,101, 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,114, @@ -681,7 +681,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,112,114,158,0,0,0,41,3,114,147,0,0,0,114,148, 0,0,0,114,158,0,0,0,114,7,0,0,0,114,146,0, 0,0,114,8,0,0,0,218,11,95,99,104,101,99,107,95, - 110,97,109,101,19,2,0,0,115,14,0,0,0,14,8,8, + 110,97,109,101,20,2,0,0,115,14,0,0,0,14,8,8, 10,8,1,8,2,10,6,4,1,255,128,114,160,0,0,0, 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, 0,6,0,0,0,67,0,0,0,115,72,0,0,0,116,0, @@ -716,7 +716,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, 3,109,115,103,114,7,0,0,0,114,7,0,0,0,114,8, 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, - 101,95,115,104,105,109,50,2,0,0,115,18,0,0,0,6, + 101,95,115,104,105,109,51,2,0,0,115,18,0,0,0,6, 7,2,2,4,254,14,6,16,1,4,1,22,1,4,1,255, 128,114,167,0,0,0,99,3,0,0,0,0,0,0,0,0, 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, @@ -784,7 +784,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,90,5,109,97,103,105,99,114,117,0,0,0,114,16,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, 0,218,13,95,99,108,97,115,115,105,102,121,95,112,121,99, - 70,2,0,0,115,30,0,0,0,12,16,8,1,16,1,12, + 71,2,0,0,115,30,0,0,0,12,16,8,1,16,1,12, 1,16,1,12,1,10,1,12,1,8,1,16,1,8,2,16, 1,16,1,4,1,255,128,114,176,0,0,0,99,5,0,0, 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, @@ -839,7 +839,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,175,0,0,0,114,117,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,118, 97,108,105,100,97,116,101,95,116,105,109,101,115,116,97,109, - 112,95,112,121,99,103,2,0,0,115,20,0,0,0,24,19, + 112,95,112,121,99,104,2,0,0,115,20,0,0,0,24,19, 10,1,12,1,16,1,8,1,22,1,2,255,22,2,8,254, 255,128,114,180,0,0,0,99,4,0,0,0,0,0,0,0, 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, @@ -885,7 +885,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,114, 141,0,0,0,114,175,0,0,0,114,7,0,0,0,114,7, 0,0,0,114,8,0,0,0,218,18,95,118,97,108,105,100, - 97,116,101,95,104,97,115,104,95,112,121,99,131,2,0,0, + 97,116,101,95,104,97,115,104,95,112,121,99,132,2,0,0, 115,16,0,0,0,16,17,2,1,8,1,4,255,2,2,6, 254,4,255,255,128,114,182,0,0,0,99,4,0,0,0,0, 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, @@ -909,7 +909,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,41,0,0,0,114,141,0,0,0,114,132,0,0,0,114, 134,0,0,0,218,4,99,111,100,101,114,7,0,0,0,114, 7,0,0,0,114,8,0,0,0,218,17,95,99,111,109,112, - 105,108,101,95,98,121,116,101,99,111,100,101,155,2,0,0, + 105,108,101,95,98,121,116,101,99,111,100,101,156,2,0,0, 115,20,0,0,0,10,2,10,1,12,1,8,1,12,1,4, 1,10,2,4,1,6,255,255,128,114,189,0,0,0,99,3, 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, @@ -928,7 +928,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,179,0,0,0,114,41,0,0,0,114,7,0,0,0,114, 7,0,0,0,114,8,0,0,0,218,22,95,99,111,100,101, 95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,168,2,0,0,115,14,0,0,0,8,2,14,1,14,1, + 99,169,2,0,0,115,14,0,0,0,8,2,14,1,14,1, 14,1,16,1,4,1,255,128,114,194,0,0,0,84,99,3, 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, 0,0,0,67,0,0,0,115,80,0,0,0,116,0,116,1, @@ -946,7 +946,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,90,7,99,104,101,99,107,101,100,114,41,0,0,0, 114,16,0,0,0,114,7,0,0,0,114,7,0,0,0,114, 8,0,0,0,218,17,95,99,111,100,101,95,116,111,95,104, - 97,115,104,95,112,121,99,178,2,0,0,115,16,0,0,0, + 97,115,104,95,112,121,99,179,2,0,0,115,16,0,0,0, 8,2,12,1,14,1,16,1,10,1,16,1,4,1,255,128, 114,195,0,0,0,99,1,0,0,0,0,0,0,0,0,0, 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62, @@ -974,7 +974,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, 111,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,189,2,0,0,115,12,0,0,0,8,5,12,1,10, + 99,101,190,2,0,0,115,12,0,0,0,8,5,12,1,10, 1,12,1,20,1,255,128,114,200,0,0,0,169,2,114,164, 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, @@ -1039,7 +1039,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,90,7,100,105,114,110,97,109,101,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,23,115,112,101, 99,95,102,114,111,109,95,102,105,108,101,95,108,111,99,97, - 116,105,111,110,206,2,0,0,115,86,0,0,0,8,12,4, + 116,105,111,110,207,2,0,0,115,86,0,0,0,8,12,4, 4,10,1,2,2,14,1,12,1,4,1,2,251,10,7,8, 1,2,1,18,1,12,1,2,1,16,8,6,1,8,3,14, 1,14,1,10,1,6,1,4,1,2,253,4,5,8,3,10, @@ -1078,7 +1078,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,35,3,0,0,115,12,0,0,0, + 101,103,105,115,116,114,121,36,3,0,0,115,12,0,0,0, 2,2,16,1,12,1,18,1,2,255,255,128,122,36,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, @@ -1105,7 +1105,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,116,114,121,95,107,101,121,114,20,0,0,0,90,4,104, 107,101,121,218,8,102,105,108,101,112,97,116,104,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,115, - 101,97,114,99,104,95,114,101,103,105,115,116,114,121,42,3, + 101,97,114,99,104,95,114,101,103,105,115,116,114,121,43,3, 0,0,115,30,0,0,0,6,2,8,1,6,2,6,1,16, 1,6,255,2,2,12,1,26,1,18,128,4,3,12,254,6, 1,2,255,255,128,122,38,87,105,110,100,111,119,115,82,101, @@ -1128,7 +1128,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 65,0,0,0,218,6,116,97,114,103,101,116,114,222,0,0, 0,114,164,0,0,0,114,212,0,0,0,114,210,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 9,102,105,110,100,95,115,112,101,99,57,3,0,0,115,36, + 9,102,105,110,100,95,115,112,101,99,58,3,0,0,115,36, 0,0,0,10,2,8,1,4,1,2,1,12,1,12,1,6, 1,14,1,14,1,6,1,8,1,2,1,6,254,8,3,2, 252,4,255,2,254,255,128,122,31,87,105,110,100,111,119,115, @@ -1156,7 +1156,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,226,0,0,0,114,164,0,0,0,169,4,114,221, 0,0,0,114,163,0,0,0,114,65,0,0,0,114,210,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,102,105,110,100,95,109,111,100,117,108,101,73,3, + 0,218,11,102,105,110,100,95,109,111,100,117,108,101,74,3, 0,0,115,16,0,0,0,6,7,2,2,4,254,12,3,8, 1,6,1,4,2,255,128,122,33,87,105,110,100,111,119,115, 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, @@ -1170,7 +1170,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,115,115,109,101,116,104,111,100,114,223,0,0,0,114,226, 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, - 0,23,3,0,0,115,32,0,0,0,8,0,4,2,2,3, + 0,24,3,0,0,115,32,0,0,0,8,0,4,2,2,3, 2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1, 2,14,12,1,2,15,16,1,255,128,114,214,0,0,0,99, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1206,7 +1206,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,120,0,0,0,90,13,102,105,108,101,110,97, 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,206,0,0,0,95,3,0,0,115,10,0,0,0,18, + 0,114,206,0,0,0,96,3,0,0,115,10,0,0,0,18, 3,16,1,14,1,16,1,255,128,122,24,95,76,111,97,100, 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -1216,7 +1216,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, 114,7,0,0,0,169,2,114,143,0,0,0,114,210,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,103, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,104, 3,0,0,243,4,0,0,0,4,0,255,128,122,27,95,76, 111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97, 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, @@ -1237,7 +1237,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,41,3,114,143,0,0,0,218,6,109,111,100,117, 108,101,114,188,0,0,0,114,7,0,0,0,114,7,0,0, 0,114,8,0,0,0,218,11,101,120,101,99,95,109,111,100, - 117,108,101,106,3,0,0,115,14,0,0,0,12,2,8,1, + 117,108,101,107,3,0,0,115,14,0,0,0,12,2,8,1, 4,1,8,1,4,255,20,2,255,128,122,25,95,76,111,97, 100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,109, 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, @@ -1249,13 +1249,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 117,108,101,95,115,104,105,109,169,2,114,143,0,0,0,114, 163,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, - 114,3,0,0,115,4,0,0,0,12,3,255,128,122,25,95, + 115,3,0,0,115,4,0,0,0,12,3,255,128,122,25,95, 76,111,97,100,101,114,66,97,115,105,99,115,46,108,111,97, 100,95,109,111,100,117,108,101,78,41,8,114,150,0,0,0, 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, 206,0,0,0,114,239,0,0,0,114,245,0,0,0,114,248, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,235,0,0,0,90,3,0,0, + 0,0,114,8,0,0,0,114,235,0,0,0,91,3,0,0, 115,14,0,0,0,8,0,4,2,8,3,8,8,8,3,12, 8,255,128,114,235,0,0,0,99,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, @@ -1280,7 +1280,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,46,10,32,32,32,32,32,32,32,32,78,41,1,114,76, 0,0,0,169,2,114,143,0,0,0,114,65,0,0,0,114, 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, - 112,97,116,104,95,109,116,105,109,101,122,3,0,0,115,4, + 112,97,116,104,95,109,116,105,109,101,123,3,0,0,115,4, 0,0,0,4,6,255,128,122,23,83,111,117,114,99,101,76, 111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, @@ -1314,7 +1314,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, 32,114,193,0,0,0,78,41,1,114,251,0,0,0,114,250, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,10,112,97,116,104,95,115,116,97,116,115,130,3, + 0,0,218,10,112,97,116,104,95,115,116,97,116,115,131,3, 0,0,115,4,0,0,0,14,12,255,128,122,23,83,111,117, 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, @@ -1339,7 +1339,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 10,99,97,99,104,101,95,112,97,116,104,114,41,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, 15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, - 144,3,0,0,115,4,0,0,0,12,8,255,128,122,28,83, + 145,3,0,0,115,4,0,0,0,12,8,255,128,122,28,83, 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, 104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0, @@ -1355,7 +1355,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, 32,32,32,78,114,7,0,0,0,41,3,114,143,0,0,0, 114,65,0,0,0,114,41,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,253,0,0,0,154,3, + 7,0,0,0,114,8,0,0,0,114,253,0,0,0,155,3, 0,0,114,240,0,0,0,122,21,83,111,117,114,99,101,76, 111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2, 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,10, @@ -1375,7 +1375,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 142,0,0,0,114,200,0,0,0,41,5,114,143,0,0,0, 114,163,0,0,0,114,65,0,0,0,114,198,0,0,0,218, 3,101,120,99,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,161, + 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,162, 3,0,0,115,26,0,0,0,10,2,2,1,12,1,8,4, 14,253,4,1,2,1,4,255,2,1,2,255,8,128,2,255, 255,128,122,23,83,111,117,114,99,101,76,111,97,100,101,114, @@ -1398,7 +1398,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 7,99,111,109,112,105,108,101,41,4,114,143,0,0,0,114, 41,0,0,0,114,65,0,0,0,114,2,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,115, - 111,117,114,99,101,95,116,111,95,99,111,100,101,171,3,0, + 111,117,114,99,101,95,116,111,95,99,111,100,101,172,3,0, 0,115,8,0,0,0,12,5,4,1,6,255,255,128,122,27, 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, @@ -1475,7 +1475,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 16,0,0,0,90,10,98,121,116,101,115,95,100,97,116,97, 90,11,99,111,100,101,95,111,98,106,101,99,116,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, - 0,179,3,0,0,115,170,0,0,0,10,7,4,1,4,1, + 0,180,3,0,0,115,170,0,0,0,10,7,4,1,4,1, 4,1,4,1,4,1,2,1,12,1,14,1,8,1,2,2, 14,1,14,1,4,1,12,2,2,1,14,1,14,1,4,1, 2,3,2,1,6,254,2,4,12,1,16,1,12,1,4,1, @@ -1492,7 +1492,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,252,0,0,0,114,254,0,0,0,114,253,0,0, 0,114,1,1,0,0,114,5,1,0,0,114,241,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,249,0,0,0,120,3,0,0,115,18,0, + 8,0,0,0,114,249,0,0,0,121,3,0,0,115,18,0, 0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,10, 12,8,255,128,114,249,0,0,0,99,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, @@ -1520,7 +1520,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 102,105,110,100,101,114,46,78,114,183,0,0,0,41,3,114, 143,0,0,0,114,163,0,0,0,114,65,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,236,0, - 0,0,13,4,0,0,115,6,0,0,0,6,3,10,1,255, + 0,0,14,4,0,0,115,6,0,0,0,6,3,10,1,255, 128,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,243, @@ -1529,7 +1529,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,169,2,218,9,95,95,99,108,97,115,115,95,95,114,156, 0,0,0,169,2,114,143,0,0,0,90,5,111,116,104,101, 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,6,95,95,101,113,95,95,19,4,0,0,243,8,0,0, + 218,6,95,95,101,113,95,95,20,4,0,0,243,8,0,0, 0,12,1,10,1,2,255,255,128,122,17,70,105,108,101,76, 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, @@ -1538,7 +1538,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,169,3,218,4,104,97,115,104,114,141,0,0,0, 114,65,0,0,0,169,1,114,143,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,8,95,95,104, - 97,115,104,95,95,23,4,0,0,243,4,0,0,0,20,1, + 97,115,104,95,95,24,4,0,0,243,4,0,0,0,20,1, 255,128,122,19,70,105,108,101,76,111,97,100,101,114,46,95, 95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, @@ -1552,7 +1552,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, 218,5,115,117,112,101,114,114,11,1,0,0,114,248,0,0, 0,114,247,0,0,0,169,1,114,14,1,0,0,114,7,0, - 0,0,114,8,0,0,0,114,248,0,0,0,26,4,0,0, + 0,0,114,8,0,0,0,114,248,0,0,0,27,4,0,0, 115,4,0,0,0,16,10,255,128,122,22,70,105,108,101,76, 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, @@ -1563,7 +1563,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, 101,114,46,78,114,71,0,0,0,114,247,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,203,0, - 0,0,38,4,0,0,243,4,0,0,0,6,3,255,128,122, + 0,0,39,4,0,0,243,4,0,0,0,6,3,255,128,122, 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, @@ -1584,7 +1584,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,95,99,111,100,101,114,109,0,0,0,90,4,114,101,97, 100,114,92,0,0,0,41,3,114,143,0,0,0,114,65,0, 0,0,114,94,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,255,0,0,0,43,4,0,0,115, + 0,114,8,0,0,0,114,255,0,0,0,44,4,0,0,115, 16,0,0,0,14,2,16,1,22,1,20,128,14,2,22,1, 20,128,255,128,122,19,70,105,108,101,76,111,97,100,101,114, 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, @@ -1597,7 +1597,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,244,0,0,0,114,31,1,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,19,103,101,116, 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, - 52,4,0,0,115,6,0,0,0,12,2,8,1,255,128,122, + 53,4,0,0,115,6,0,0,0,12,2,8,1,255,128,122, 30,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,41, 13,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, @@ -1606,7 +1606,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,255,0,0,0,114,33,1,0,0,90,13,95, 95,99,108,97,115,115,99,101,108,108,95,95,114,7,0,0, 0,114,7,0,0,0,114,25,1,0,0,114,8,0,0,0, - 114,11,1,0,0,8,4,0,0,115,26,0,0,0,8,0, + 114,11,1,0,0,9,4,0,0,115,26,0,0,0,8,0, 4,2,8,3,8,6,8,4,2,3,14,1,2,11,10,1, 8,4,2,9,18,1,255,128,114,11,1,0,0,99,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, @@ -1629,7 +1629,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, 143,0,0,0,114,65,0,0,0,114,10,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,252,0, - 0,0,62,4,0,0,115,6,0,0,0,8,2,14,1,255, + 0,0,63,4,0,0,115,6,0,0,0,8,2,14,1,255, 128,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97, 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, @@ -1639,7 +1639,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 41,2,114,139,0,0,0,114,253,0,0,0,41,5,114,143, 0,0,0,114,134,0,0,0,114,132,0,0,0,114,41,0, 0,0,114,78,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,254,0,0,0,67,4,0,0,115, + 0,114,8,0,0,0,114,254,0,0,0,68,4,0,0,115, 6,0,0,0,8,2,16,1,255,128,122,32,83,111,117,114, 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, 99,104,101,95,98,121,116,101,99,111,100,101,114,87,0,0, @@ -1675,7 +1675,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 37,1,0,0,218,6,112,97,114,101,110,116,114,120,0,0, 0,114,63,0,0,0,114,68,0,0,0,114,0,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 253,0,0,0,72,4,0,0,115,58,0,0,0,12,2,4, + 253,0,0,0,73,4,0,0,115,58,0,0,0,12,2,4, 1,12,2,12,1,10,1,12,254,12,4,10,1,2,1,14, 1,12,1,4,2,14,1,6,3,4,1,4,255,16,2,8, 128,2,1,12,1,18,1,14,1,8,2,2,1,18,255,8, @@ -1685,7 +1685,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 151,0,0,0,114,152,0,0,0,114,252,0,0,0,114,254, 0,0,0,114,253,0,0,0,114,7,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,34,1,0, - 0,58,4,0,0,115,12,0,0,0,8,0,4,2,8,2, + 0,59,4,0,0,115,12,0,0,0,8,0,4,2,8,2, 8,5,18,5,255,128,114,34,1,0,0,99,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 64,0,0,0,115,32,0,0,0,101,0,90,1,100,0,90, @@ -1707,7 +1707,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,7,1,0,0,41,5,114,143,0,0,0,114,163,0, 0,0,114,65,0,0,0,114,41,0,0,0,114,175,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,241,0,0,0,107,4,0,0,115,24,0,0,0,10,1, + 114,241,0,0,0,108,4,0,0,115,24,0,0,0,10,1, 10,1,2,4,2,1,6,254,12,4,2,1,14,1,2,1, 2,1,6,253,255,128,122,29,83,111,117,114,99,101,108,101, 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, @@ -1717,14 +1717,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,101,32,97,115,32,116,104,101,114,101,32,105,115,32,110, 111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114, 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,1,1,0,0,123,4,0, + 0,0,0,114,8,0,0,0,114,1,1,0,0,124,4,0, 0,114,24,0,0,0,122,31,83,111,117,114,99,101,108,101, 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, 95,115,111,117,114,99,101,78,41,6,114,150,0,0,0,114, 149,0,0,0,114,151,0,0,0,114,152,0,0,0,114,241, 0,0,0,114,1,1,0,0,114,7,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,41,1,0, - 0,103,4,0,0,115,10,0,0,0,8,0,4,2,8,2, + 0,104,4,0,0,115,10,0,0,0,8,0,4,2,8,2, 12,16,255,128,114,41,1,0,0,99,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, 0,0,115,92,0,0,0,101,0,90,1,100,0,90,2,100, @@ -1745,20 +1745,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,95,1,100,0,83,0,114,69,0,0,0,114,183,0,0, 0,41,3,114,143,0,0,0,114,141,0,0,0,114,65,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,236,0,0,0,136,4,0,0,115,6,0,0,0,6, + 0,114,236,0,0,0,137,4,0,0,115,6,0,0,0,6, 1,10,1,255,128,122,28,69,120,116,101,110,115,105,111,110, 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, 116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,2,0,0,0,67,0,0,0,114,12,1,0, 0,114,69,0,0,0,114,13,1,0,0,114,15,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 16,1,0,0,140,4,0,0,114,17,1,0,0,122,26,69, + 16,1,0,0,141,4,0,0,114,17,1,0,0,122,26,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, 101,114,46,95,95,101,113,95,95,99,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, 0,0,114,18,1,0,0,114,69,0,0,0,114,19,1,0, 0,114,21,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,22,1,0,0,144,4,0,0,114,23, + 114,8,0,0,0,114,22,1,0,0,145,4,0,0,114,23, 1,0,0,122,28,69,120,116,101,110,115,105,111,110,70,105, 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, 95,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, @@ -1775,7 +1775,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,121,110,97,109,105,99,114,173,0,0,0,114,141,0,0, 0,114,65,0,0,0,41,3,114,143,0,0,0,114,210,0, 0,0,114,244,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,239,0,0,0,147,4,0,0,115, + 0,114,8,0,0,0,114,239,0,0,0,148,4,0,0,115, 16,0,0,0,4,2,6,1,4,255,6,2,8,1,4,255, 4,2,255,128,122,33,69,120,116,101,110,115,105,111,110,70, 105,108,101,76,111,97,100,101,114,46,99,114,101,97,116,101, @@ -1793,7 +1793,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,97,109,105,99,114,173,0,0,0,114,141,0,0,0,114, 65,0,0,0,169,2,114,143,0,0,0,114,244,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 245,0,0,0,155,4,0,0,115,10,0,0,0,14,2,6, + 245,0,0,0,156,4,0,0,115,10,0,0,0,14,2,6, 1,8,1,8,255,255,128,122,31,69,120,116,101,110,115,105, 111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,101, 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, @@ -1811,14 +1811,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,236,0,0,0,78,114,7,0,0,0,169,2,114,5,0, 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105, 108,101,95,110,97,109,101,114,7,0,0,0,114,8,0,0, - 0,114,9,0,0,0,164,4,0,0,115,8,0,0,0,6, + 0,114,9,0,0,0,165,4,0,0,115,8,0,0,0,6, 128,2,1,20,255,255,128,122,49,69,120,116,101,110,115,105, 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, 112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,62, 46,60,103,101,110,101,120,112,114,62,78,41,4,114,74,0, 0,0,114,65,0,0,0,218,3,97,110,121,114,232,0,0, 0,114,247,0,0,0,114,7,0,0,0,114,45,1,0,0, - 114,8,0,0,0,114,206,0,0,0,161,4,0,0,115,10, + 114,8,0,0,0,114,206,0,0,0,162,4,0,0,115,10, 0,0,0,14,2,12,1,2,1,8,255,255,128,122,30,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, @@ -1829,7 +1829,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32, 97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114, 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,241,0,0,0,167,4,0, + 0,0,0,114,8,0,0,0,114,241,0,0,0,168,4,0, 0,114,24,0,0,0,122,28,69,120,116,101,110,115,105,111, 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, @@ -1839,14 +1839,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,115, 111,117,114,99,101,32,99,111,100,101,46,78,114,7,0,0, 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,1,1,0,0,171,4,0,0,114,24, + 114,8,0,0,0,114,1,1,0,0,172,4,0,0,114,24, 0,0,0,122,30,69,120,116,101,110,115,105,111,110,70,105, 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,1,0,0,0,67,0,0,0,114,26,1,0, 0,114,27,1,0,0,114,71,0,0,0,114,247,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 203,0,0,0,175,4,0,0,114,28,1,0,0,122,32,69, + 203,0,0,0,176,4,0,0,114,28,1,0,0,122,32,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,78, 41,14,114,150,0,0,0,114,149,0,0,0,114,151,0,0, @@ -1855,7 +1855,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 206,0,0,0,114,241,0,0,0,114,1,1,0,0,114,160, 0,0,0,114,203,0,0,0,114,7,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,30,1,0, - 0,128,4,0,0,115,26,0,0,0,8,0,4,2,8,6, + 0,129,4,0,0,115,26,0,0,0,8,0,4,2,8,6, 8,4,8,4,8,3,8,8,8,6,8,6,8,4,2,4, 14,1,255,128,114,30,1,0,0,99,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, @@ -1897,7 +1897,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 112,97,116,104,95,102,105,110,100,101,114,169,4,114,143,0, 0,0,114,141,0,0,0,114,65,0,0,0,90,11,112,97, 116,104,95,102,105,110,100,101,114,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,236,0,0,0,188,4,0, + 0,0,0,114,8,0,0,0,114,236,0,0,0,189,4,0, 0,115,10,0,0,0,6,1,6,1,14,1,10,1,255,128, 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, @@ -1915,7 +1915,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,40,1,0,0,218,3,100,111,116,90,2,109, 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, 218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,112, - 97,116,104,95,110,97,109,101,115,194,4,0,0,115,10,0, + 97,116,104,95,110,97,109,101,115,195,4,0,0,115,10,0, 0,0,18,2,8,1,4,2,8,3,255,128,122,38,95,78, 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, @@ -1928,7 +1928,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 143,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, 116,116,114,95,110,97,109,101,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,50,1,0,0,204,4,0,0, + 0,0,114,8,0,0,0,114,50,1,0,0,205,4,0,0, 115,6,0,0,0,12,1,16,1,255,128,122,31,95,78,97, 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, 95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0, @@ -1944,7 +1944,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 202,0,0,0,114,49,1,0,0,41,3,114,143,0,0,0, 90,11,112,97,114,101,110,116,95,112,97,116,104,114,210,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,208, + 0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,209, 4,0,0,115,18,0,0,0,12,2,10,1,14,1,18,3, 6,1,8,1,6,1,6,1,255,128,122,27,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, @@ -1954,7 +1954,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,69,0,0,0,41,2,218,4,105,116,101,114,114,57, 1,0,0,114,21,1,0,0,114,7,0,0,0,114,7,0, 0,0,114,8,0,0,0,218,8,95,95,105,116,101,114,95, - 95,221,4,0,0,243,4,0,0,0,12,1,255,128,122,23, + 95,222,4,0,0,243,4,0,0,0,12,1,255,128,122,23, 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, 95,105,116,101,114,95,95,99,2,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, @@ -1962,7 +1962,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,69,0,0,0,169,1,114,57,1,0,0,41,2,114, 143,0,0,0,218,5,105,110,100,101,120,114,7,0,0,0, 114,7,0,0,0,114,8,0,0,0,218,11,95,95,103,101, - 116,105,116,101,109,95,95,224,4,0,0,114,61,1,0,0, + 116,105,116,101,109,95,95,225,4,0,0,114,61,1,0,0, 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, 46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, @@ -1971,14 +1971,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 49,1,0,0,41,3,114,143,0,0,0,114,63,1,0,0, 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, 8,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, - 95,227,4,0,0,115,4,0,0,0,14,1,255,128,122,26, + 95,228,4,0,0,115,4,0,0,0,14,1,255,128,122,26, 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, 95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, 0,0,0,114,58,1,0,0,114,69,0,0,0,41,2,114, 4,0,0,0,114,57,1,0,0,114,21,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,218,7,95, - 95,108,101,110,95,95,230,4,0,0,114,61,1,0,0,122, + 95,108,101,110,95,95,231,4,0,0,114,61,1,0,0,122, 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, @@ -1987,7 +1987,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 80,97,116,104,40,123,33,114,125,41,41,2,114,89,0,0, 0,114,49,1,0,0,114,21,1,0,0,114,7,0,0,0, 114,7,0,0,0,114,8,0,0,0,218,8,95,95,114,101, - 112,114,95,95,233,4,0,0,114,61,1,0,0,122,23,95, + 112,114,95,95,234,4,0,0,114,61,1,0,0,122,23,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, 114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, @@ -1995,7 +1995,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,69,0,0,0,114,62,1,0,0,169,2,114,143,0,0, 0,218,4,105,116,101,109,114,7,0,0,0,114,7,0,0, 0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,105, - 110,115,95,95,236,4,0,0,114,61,1,0,0,122,27,95, + 110,115,95,95,237,4,0,0,114,61,1,0,0,122,27,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, 99,111,110,116,97,105,110,115,95,95,99,2,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, @@ -2003,7 +2003,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, 49,1,0,0,114,61,0,0,0,114,69,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,61,0, - 0,0,239,4,0,0,243,4,0,0,0,16,1,255,128,122, + 0,0,240,4,0,0,243,4,0,0,0,16,1,255,128,122, 21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, 97,112,112,101,110,100,78,41,15,114,150,0,0,0,114,149, 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, @@ -2011,7 +2011,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,60,1,0,0,114,64,1,0,0,114,65,1,0,0, 114,66,1,0,0,114,68,1,0,0,114,71,1,0,0,114, 61,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,47,1,0,0,181,4,0, + 0,0,0,114,8,0,0,0,114,47,1,0,0,182,4,0, 0,115,28,0,0,0,8,0,4,1,8,6,8,6,8,10, 8,4,8,13,8,3,8,3,8,3,8,3,8,3,12,3, 255,128,114,47,1,0,0,99,0,0,0,0,0,0,0,0, @@ -2028,7 +2028,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,124,1,124,2,124,3,131,3,124,0,95,1,100,0,83, 0,114,69,0,0,0,41,2,114,47,1,0,0,114,49,1, 0,0,114,53,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,236,0,0,0,245,4,0,0,115, + 0,114,8,0,0,0,114,236,0,0,0,246,4,0,0,115, 4,0,0,0,18,1,255,128,122,25,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, @@ -2052,21 +2052,21 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 41,5,114,99,0,0,0,114,100,0,0,0,114,101,0,0, 0,114,89,0,0,0,114,150,0,0,0,41,1,114,244,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,109,111,100,117,108,101,95,114,101,112,114,248,4, + 0,218,11,109,111,100,117,108,101,95,114,101,112,114,249,4, 0,0,115,10,0,0,0,6,7,2,1,4,255,12,2,255, 128,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 1,0,0,0,67,0,0,0,114,23,0,0,0,41,2,78, 84,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,206,0,0,0,3, + 114,7,0,0,0,114,8,0,0,0,114,206,0,0,0,4, 5,0,0,243,4,0,0,0,4,1,255,128,122,27,95,78, 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,105, 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, 0,0,114,23,0,0,0,41,2,78,114,10,0,0,0,114, 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,1,1,0,0,6,5,0, + 0,0,0,114,8,0,0,0,114,1,1,0,0,7,5,0, 0,114,75,1,0,0,122,27,95,78,97,109,101,115,112,97, 99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -2076,20 +2076,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,103,62,114,243,0,0,0,84,41,1,114,3,1,0,0, 41,1,114,4,1,0,0,114,247,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,241,0,0,0, - 9,5,0,0,114,72,1,0,0,122,25,95,78,97,109,101, + 10,5,0,0,114,72,1,0,0,122,25,95,78,97,109,101, 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, 0,0,114,237,0,0,0,114,7,0,0,0,114,238,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,239,0,0,0,12,5,0,0,114,240,0,0,0,122,30, + 114,239,0,0,0,13,5,0,0,114,240,0,0,0,122,30, 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, 0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,0, 114,69,0,0,0,114,7,0,0,0,114,42,1,0,0,114, 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,245, - 0,0,0,15,5,0,0,114,75,1,0,0,122,28,95,78, + 0,0,0,16,5,0,0,114,75,1,0,0,122,28,95,78, 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, @@ -2107,7 +2107,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 78,41,4,114,159,0,0,0,114,173,0,0,0,114,49,1, 0,0,114,246,0,0,0,114,247,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,248,0,0,0, - 18,5,0,0,115,10,0,0,0,6,7,4,1,4,255,12, + 19,5,0,0,115,10,0,0,0,6,7,4,1,4,255,12, 3,255,128,122,28,95,78,97,109,101,115,112,97,99,101,76, 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, @@ -2118,7 +2118,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 41,3,114,32,1,0,0,114,76,1,0,0,114,49,1,0, 0,41,3,114,143,0,0,0,114,244,0,0,0,114,76,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,33,1,0,0,30,5,0,0,115,6,0,0,0,12, + 0,114,33,1,0,0,31,5,0,0,115,6,0,0,0,12, 1,10,1,255,128,122,36,95,78,97,109,101,115,112,97,99, 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, 117,114,99,101,95,114,101,97,100,101,114,78,41,13,114,150, @@ -2127,7 +2127,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,1,1,0,0,114,241,0,0,0,114,239,0,0,0, 114,245,0,0,0,114,248,0,0,0,114,33,1,0,0,114, 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,73,1,0,0,244,4,0,0,115,24,0,0, + 0,0,0,114,73,1,0,0,245,4,0,0,115,24,0,0, 0,8,0,8,1,2,3,10,1,8,10,8,3,8,3,8, 3,8,3,8,3,12,12,255,128,114,73,1,0,0,99,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, @@ -2164,7 +2164,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,97,99,104,101,218,5,105,116,101,109,115,114,153,0,0, 0,114,78,1,0,0,41,2,114,141,0,0,0,218,6,102, 105,110,100,101,114,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,78,1,0,0,41,5,0,0,115,16,0, + 8,0,0,0,114,78,1,0,0,42,5,0,0,115,16,0, 0,0,22,4,8,1,10,1,10,1,8,1,2,128,4,252, 255,128,122,28,80,97,116,104,70,105,110,100,101,114,46,105, 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, @@ -2184,7 +2184,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,162,0,0,0,114,142,0,0,0,41,2,114, 65,0,0,0,90,4,104,111,111,107,114,7,0,0,0,114, 7,0,0,0,114,8,0,0,0,218,11,95,112,97,116,104, - 95,104,111,111,107,115,51,5,0,0,115,20,0,0,0,16, + 95,104,111,111,107,115,52,5,0,0,115,20,0,0,0,16, 3,12,1,10,1,2,1,14,1,12,1,4,1,4,2,2, 253,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, @@ -2216,7 +2216,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,41,3,114,221,0,0,0,114,65,0,0,0,114,82,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, 0,218,20,95,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,64,5,0,0,115,30,0,0,0, + 114,95,99,97,99,104,101,65,5,0,0,115,30,0,0,0, 8,8,2,1,12,1,12,1,6,3,2,1,12,1,4,4, 12,253,10,1,12,1,4,1,2,253,2,250,255,128,122,31, 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, @@ -2247,7 +2247,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,166,0,0,0,114,164,0,0,0,114,165,0,0,0,114, 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, 0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,116, - 95,115,112,101,99,86,5,0,0,115,28,0,0,0,10,4, + 95,115,112,101,99,87,5,0,0,115,28,0,0,0,10,4, 16,1,12,2,16,1,16,2,12,2,10,1,4,1,8,1, 12,1,12,1,6,1,4,1,255,128,122,27,80,97,116,104, 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, @@ -2279,7 +2279,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 95,112,97,116,104,90,5,101,110,116,114,121,114,82,1,0, 0,114,210,0,0,0,114,165,0,0,0,114,7,0,0,0, 114,7,0,0,0,114,8,0,0,0,218,9,95,103,101,116, - 95,115,112,101,99,107,5,0,0,115,44,0,0,0,4,5, + 95,115,112,101,99,108,5,0,0,115,44,0,0,0,4,5, 8,1,14,1,2,1,10,1,8,1,10,1,14,1,12,2, 8,1,2,1,10,1,8,1,6,1,8,1,8,1,10,5, 2,128,12,2,6,1,4,1,255,128,122,20,80,97,116,104, @@ -2306,7 +2306,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,0,0,41,6,114,221,0,0,0,114,163,0,0,0,114, 65,0,0,0,114,225,0,0,0,114,210,0,0,0,114,90, 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,226,0,0,0,139,5,0,0,115,28,0,0,0, + 0,0,114,226,0,0,0,140,5,0,0,115,28,0,0,0, 8,6,6,1,14,1,8,1,4,1,10,1,6,1,4,1, 6,3,16,1,4,1,4,2,4,2,255,128,122,20,80,97, 116,104,70,105,110,100,101,114,46,102,105,110,100,95,115,112, @@ -2333,7 +2333,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, 114,227,0,0,0,114,228,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,229,0,0,0,163,5, + 7,0,0,0,114,8,0,0,0,114,229,0,0,0,164,5, 0,0,115,16,0,0,0,6,8,2,2,4,254,12,3,8, 1,4,1,6,1,255,128,122,22,80,97,116,104,70,105,110, 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, @@ -2366,7 +2366,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,116,114,105,98,117,116,105,111,110,115,41,3,114,144,0, 0,0,114,145,0,0,0,114,92,1,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,93,1,0,0, - 179,5,0,0,115,6,0,0,0,12,10,16,1,255,128,122, + 180,5,0,0,115,6,0,0,0,12,10,16,1,255,128,122, 29,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, 95,100,105,115,116,114,105,98,117,116,105,111,110,115,114,69, 0,0,0,114,230,0,0,0,41,14,114,150,0,0,0,114, @@ -2375,7 +2375,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,87,1,0,0,114,88,1,0,0,114,91,1,0, 0,114,226,0,0,0,114,229,0,0,0,114,93,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,77,1,0,0,37,5,0,0,115,38,0, + 8,0,0,0,114,77,1,0,0,38,5,0,0,115,38,0, 0,0,8,0,4,2,2,2,10,1,2,9,10,1,2,12, 10,1,2,21,10,1,2,20,12,1,2,31,12,1,2,23, 12,1,2,15,14,1,255,128,114,77,1,0,0,99,0,0, @@ -2422,7 +2422,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, 0,83,0,114,69,0,0,0,114,7,0,0,0,114,43,1, 0,0,169,1,114,164,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,9,0,0,0,208,5,0,0,115,6,0,0, + 0,0,0,114,9,0,0,0,209,5,0,0,115,6,0,0, 0,6,128,18,0,255,128,122,38,70,105,108,101,70,105,110, 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, @@ -2436,7 +2436,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 65,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, 97,105,108,115,90,7,108,111,97,100,101,114,115,114,212,0, 0,0,114,7,0,0,0,114,95,1,0,0,114,8,0,0, - 0,114,236,0,0,0,202,5,0,0,115,22,0,0,0,4, + 0,114,236,0,0,0,203,5,0,0,115,22,0,0,0,4, 4,12,1,26,1,6,1,10,2,10,1,18,1,6,1,8, 1,12,1,255,128,122,19,70,105,108,101,70,105,110,100,101, 114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, @@ -2446,7 +2446,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, 116,105,109,101,46,114,130,0,0,0,78,41,1,114,97,1, 0,0,114,21,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,78,1,0,0,218,5,0,0,114, + 0,114,8,0,0,0,114,78,1,0,0,219,5,0,0,114, 81,0,0,0,122,28,70,105,108,101,70,105,110,100,101,114, 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, 101,115,99,2,0,0,0,0,0,0,0,0,0,0,0,3, @@ -2477,7 +2477,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,101,0,0,0,114,226,0,0,0,114,164,0, 0,0,114,202,0,0,0,41,3,114,143,0,0,0,114,163, 0,0,0,114,210,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,161,0,0,0,224,5,0,0, + 0,0,114,8,0,0,0,114,161,0,0,0,225,5,0,0, 115,16,0,0,0,6,7,2,2,4,254,10,3,8,1,8, 1,16,1,255,128,122,22,70,105,108,101,70,105,110,100,101, 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, @@ -2488,7 +2488,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 213,0,0,0,41,7,114,143,0,0,0,114,211,0,0,0, 114,163,0,0,0,114,65,0,0,0,90,4,115,109,115,108, 114,225,0,0,0,114,164,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,91,1,0,0,239,5, + 7,0,0,0,114,8,0,0,0,114,91,1,0,0,240,5, 0,0,115,10,0,0,0,10,1,8,1,2,1,6,255,255, 128,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, @@ -2545,7 +2545,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, 101,90,9,102,117,108,108,95,112,97,116,104,114,210,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,226,0,0,0,244,5,0,0,115,88,0,0,0,4,5, + 114,226,0,0,0,245,5,0,0,115,88,0,0,0,4,5, 14,1,2,1,24,1,12,1,6,1,10,1,8,1,6,1, 6,2,6,1,10,1,6,2,4,1,8,2,12,1,14,1, 8,1,10,1,8,1,24,1,2,255,8,5,14,2,2,1, @@ -2577,7 +2577,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,93,6,125,1,124,1,160,0,161,0,146,2,113,2,83, 0,114,7,0,0,0,41,1,114,131,0,0,0,41,2,114, 5,0,0,0,90,2,102,110,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,13,0,0,0,68,6,0,0, + 0,0,114,8,0,0,0,114,13,0,0,0,69,6,0,0, 115,4,0,0,0,20,0,255,128,122,41,70,105,108,101,70, 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, 101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, @@ -2594,7 +2594,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 102,102,105,120,95,99,111,110,116,101,110,116,115,114,70,1, 0,0,114,141,0,0,0,114,54,1,0,0,114,44,1,0, 0,90,8,110,101,119,95,110,97,109,101,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,39, + 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,40, 6,0,0,115,40,0,0,0,6,2,2,1,22,1,18,1, 6,3,12,3,12,1,6,7,8,1,16,1,4,1,18,1, 4,2,12,1,6,1,12,1,20,1,4,255,2,233,255,128, @@ -2633,7 +2633,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,142,0,0,0,114,71,0,0,0,169,2,114, 221,0,0,0,114,101,1,0,0,114,7,0,0,0,114,8, 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,80,6,0, + 111,114,95,70,105,108,101,70,105,110,100,101,114,81,6,0, 0,115,8,0,0,0,8,2,12,1,16,1,255,128,122,54, 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, @@ -2641,7 +2641,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 70,105,110,100,101,114,78,114,7,0,0,0,41,3,114,221, 0,0,0,114,101,1,0,0,114,107,1,0,0,114,7,0, 0,0,114,106,1,0,0,114,8,0,0,0,218,9,112,97, - 116,104,95,104,111,111,107,70,6,0,0,115,6,0,0,0, + 116,104,95,104,111,111,107,71,6,0,0,115,6,0,0,0, 14,10,4,6,255,128,122,20,70,105,108,101,70,105,110,100, 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, @@ -2649,7 +2649,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, 2,114,89,0,0,0,114,65,0,0,0,114,21,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 68,1,0,0,88,6,0,0,114,61,1,0,0,122,19,70, + 68,1,0,0,89,6,0,0,114,61,1,0,0,122,19,70, 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, 95,95,114,69,0,0,0,41,15,114,150,0,0,0,114,149, 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, @@ -2657,7 +2657,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,161,0,0,0,114,91,1,0,0,114,226,0,0,0, 114,102,1,0,0,114,234,0,0,0,114,108,1,0,0,114, 68,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,94,1,0,0,193,5,0, + 0,0,0,114,8,0,0,0,114,94,1,0,0,194,5,0, 0,115,26,0,0,0,8,0,4,2,8,7,8,16,4,4, 8,2,8,15,10,5,8,51,2,31,10,1,12,17,255,128, 114,94,1,0,0,99,4,0,0,0,0,0,0,0,0,0, @@ -2681,7 +2681,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 109,101,90,9,99,112,97,116,104,110,97,109,101,114,164,0, 0,0,114,210,0,0,0,114,7,0,0,0,114,7,0,0, 0,114,8,0,0,0,218,14,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,94,6,0,0,115,38,0,0,0,10, + 109,111,100,117,108,101,95,6,0,0,115,38,0,0,0,10, 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, 2,2,254,255,128,114,113,1,0,0,99,0,0,0,0,0, @@ -2701,7 +2701,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,113,0,0,0,41,3,90,10,101,120,116,101,110,115, 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, 116,101,99,111,100,101,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,208,0,0,0,117,6,0,0,115,10, + 114,8,0,0,0,114,208,0,0,0,118,6,0,0,115,10, 0,0,0,12,5,8,1,8,1,10,1,255,128,114,208,0, 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, @@ -2709,7 +2709,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 159,0,0,0,41,1,218,17,95,98,111,111,116,115,116,114, 97,112,95,109,111,100,117,108,101,114,7,0,0,0,114,7, 0,0,0,114,8,0,0,0,218,21,95,115,101,116,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,128, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,129, 6,0,0,115,4,0,0,0,8,2,255,128,114,116,1,0, 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, @@ -2725,7 +2725,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 61,0,0,0,114,77,1,0,0,41,2,114,115,1,0,0, 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, 101,114,115,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,8,95,105,110,115,116,97,108,108,133,6,0,0, + 0,0,218,8,95,105,110,115,116,97,108,108,134,6,0,0, 115,10,0,0,0,8,2,6,1,20,1,16,1,255,128,114, 118,1,0,0,41,1,114,87,0,0,0,114,69,0,0,0, 41,3,78,78,78,41,2,114,0,0,0,0,114,0,0,0, @@ -2770,7 +2770,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4, 255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8, 30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8, - 8,10,5,10,22,0,127,16,27,12,1,4,2,4,1,6, + 8,10,5,10,22,0,127,16,28,12,1,4,2,4,1,6, 2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8, 40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10, 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, diff --git a/Tools/peg_generator/pegen/grammar_parser.py b/Tools/peg_generator/pegen/grammar_parser.py index d94f01ad1a00c..70fa5b001b5c1 100644 --- a/Tools/peg_generator/pegen/grammar_parser.py +++ b/Tools/peg_generator/pegen/grammar_parser.py @@ -2,7 +2,7 @@ # @generated by pegen from ./Tools/peg_generator/pegen/metagrammar.gram import ast -from typing import Optional +from typing import Optional, Any from pegen.parser import memoize, memoize_left_rec, logger, Parser from ast import literal_eval diff --git a/Tools/peg_generator/pegen/python_generator.py b/Tools/peg_generator/pegen/python_generator.py index 61827a6349b41..b500e3e204a5d 100644 --- a/Tools/peg_generator/pegen/python_generator.py +++ b/Tools/peg_generator/pegen/python_generator.py @@ -27,7 +27,7 @@ # @generated by pegen from {filename} import ast -from typing import Optional +from typing import Optional, Any from pegen.parser import memoize, memoize_left_rec, logger, Parser From webhook-mailer at python.org Wed Apr 21 10:28:43 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 21 Apr 2021 14:28:43 -0000 Subject: [Python-checkins] bpo-43859: Improve the error message for IndentationError exceptions (GH-25431) Message-ID: https://github.com/python/cpython/commit/56c95dfe271b1242bdc8163d4677e311552c00cb commit: 56c95dfe271b1242bdc8163d4677e311552c00cb branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-21T15:28:21+01:00 summary: bpo-43859: Improve the error message for IndentationError exceptions (GH-25431) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst M Doc/whatsnew/3.10.rst M Grammar/python.gram M Lib/test/test_exceptions.py M Lib/test/test_syntax.py M Parser/parser.c diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9ae9fe8d2d905..4695c0ec913ef 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -273,6 +273,23 @@ have been incorporated. Some of the most notable ones: (Contributed by Pablo Galindo in :issue:`41064`) +IndentationErrors +~~~~~~~~~~~~~~~~~ + +Many :exc:`IndentationError` exceptions now have more context regarding what kind of block +was expecting an indentation, including the location of the statement: + +.. code-block:: python + + >>> def foo(): + ... if lel: + ... x = 2 + File "", line 3 + x = 2 + ^ + IndentationError: expected an indented block after 'if' statement in line 2 + + AttributeErrors ~~~~~~~~~~~~~~~ diff --git a/Grammar/python.gram b/Grammar/python.gram index d91e887e04dc0..f03802196a4fd 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -164,22 +164,25 @@ dotted_name[expr_ty]: | NAME if_stmt[stmt_ty]: + | invalid_if_stmt | 'if' a=named_expression ':' b=block c=elif_stmt { _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } | 'if' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } - | invalid_if_stmt elif_stmt[stmt_ty]: + | invalid_elif_stmt | 'elif' a=named_expression ':' b=block c=elif_stmt { _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) } | 'elif' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) } - | invalid_elif_stmt -else_block[asdl_stmt_seq*]: 'else' &&':' b=block { b } +else_block[asdl_stmt_seq*]: + | invalid_else_stmt + | 'else' &&':' b=block { b } while_stmt[stmt_ty]: - | 'while' a=named_expression ':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } | invalid_while_stmt + | 'while' a=named_expression ':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } for_stmt[stmt_ty]: + | invalid_for_stmt | 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { _PyAST_For(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA) } | ASYNC 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { @@ -187,6 +190,7 @@ for_stmt[stmt_ty]: | invalid_for_target with_stmt[stmt_ty]: + | invalid_with_stmt_indent | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block { _PyAST_With(a, b, NULL, EXTRA) } | 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block { @@ -203,14 +207,18 @@ with_item[withitem_ty]: | e=expression { _PyAST_withitem(e, NULL, p->arena) } try_stmt[stmt_ty]: + | invalid_try_stmt | 'try' &&':' b=block f=finally_block { _PyAST_Try(b, NULL, NULL, f, EXTRA) } | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_block+ el=[else_block] f=[finally_block] { _PyAST_Try(b, ex, el, f, EXTRA) } except_block[excepthandler_ty]: + | invalid_except_stmt_indent | 'except' e=expression t=['as' z=NAME { z }] ':' b=block { _PyAST_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) } | 'except' ':' b=block { _PyAST_ExceptHandler(NULL, NULL, b, EXTRA) } - | invalid_except_block -finally_block[asdl_stmt_seq*]: 'finally' ':' a=block { a } + | invalid_except_stmt +finally_block[asdl_stmt_seq*]: + | invalid_finally_stmt + | 'finally' &&':' a=block { a } match_stmt[stmt_ty]: | "match" subject=subject_expr ':' NEWLINE INDENT cases[asdl_match_case_seq*]=case_block+ DEDENT { @@ -221,9 +229,9 @@ subject_expr[expr_ty]: _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, value, values)), Load, EXTRA) } | named_expression case_block[match_case_ty]: + | invalid_case_block | "case" pattern=patterns guard=guard? ':' body=block { _PyAST_match_case(pattern, guard, body, p->arena) } - | invalid_case_block guard[expr_ty]: 'if' guard=named_expression { guard } patterns[expr_ty]: @@ -334,6 +342,7 @@ function_def[stmt_ty]: | function_def_raw function_def_raw[stmt_ty]: + | invalid_def_raw | 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { _PyAST_FunctionDef(n->v.Name.id, (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), @@ -418,6 +427,7 @@ class_def[stmt_ty]: | a=decorators b=class_def_raw { _PyPegen_class_def_decorators(p, a, b) } | class_def_raw class_def_raw[stmt_ty]: + | invalid_class_def_raw | 'class' a=NAME b=['(' z=[arguments] ')' { z }] &&':' c=block { _PyAST_ClassDef(a->v.Name.id, (b) ? ((expr_ty) b)->v.Call.args : NULL, @@ -876,23 +886,59 @@ invalid_import_from_targets: invalid_with_stmt: | [ASYNC] 'with' ','.(expression ['as' star_target])+ &&':' | [ASYNC] 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':' - -invalid_except_block: +invalid_with_stmt_indent: + | [ASYNC] a='with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'with' statement on line %d", a->lineno) } + | [ASYNC] a='with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'with' statement on line %d", a->lineno) } + +invalid_try_stmt: + | a='try' ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'try' statement on line %d", a->lineno) } +invalid_except_stmt: | 'except' a=expression ',' expressions ['as' NAME ] ':' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "exception group must be parenthesized") } - | 'except' expression ['as' NAME ] &&':' - | 'except' &&':' - + | a='except' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } + | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } +invalid_finally_stmt: + | a='finally' ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'finally' statement on line %d", a->lineno) } +invalid_except_stmt_indent: + | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'except' statement on line %d", a->lineno) } + | a='except' ':' NEWLINE !INDENT { RAISE_SYNTAX_ERROR("expected an indented block after except statement on line %d", a->lineno) } invalid_match_stmt: | "match" subject_expr !':' { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) } + | a="match" subject=subject_expr ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'match' statement on line %d", a->lineno) } invalid_case_block: | "case" patterns guard? !':' { RAISE_SYNTAX_ERROR("expected ':'") } + | a="case" patterns guard? ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'case' statement on line %d", a->lineno) } invalid_if_stmt: | 'if' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } + | a='if' a=named_expression ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'if' statement on line %d", a->lineno) } invalid_elif_stmt: | 'elif' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } + | a='elif' named_expression ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'elif' statement on line %d", a->lineno) } +invalid_else_stmt: + | a='else' ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'else' statement on line %d", a->lineno) } invalid_while_stmt: | 'while' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } + | a='while' named_expression ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'while' statement on line %d", a->lineno) } +invalid_for_stmt: + | [ASYNC] a='for' star_targets 'in' star_expressions ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after 'for' statement on line %d", a->lineno) } +invalid_def_raw: + | [ASYNC] a='def' NAME '(' [params] ')' ['->' expression] ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after function definition on line %d", a->lineno) } +invalid_class_def_raw: + | a='class' NAME ['('[arguments] ')'] ':' NEWLINE !INDENT { + RAISE_INDENTATION_ERROR("expected an indented block after class definition on line %d", a->lineno) } invalid_double_starred_kvpairs: | ','.double_starred_kvpair+ ',' invalid_kvpair diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index d93b0f16c91d1..e0e819183830a 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -179,7 +179,7 @@ def ckmsg(src, msg, exception=SyntaxError): # should not apply to subclasses, see issue #31161 s = '''if True:\nprint "No indent"''' - ckmsg(s, "expected an indented block", IndentationError) + ckmsg(s, "expected an indented block after 'if' statement on line 1", IndentationError) s = '''if True:\n print()\n\texec "mixed tabs and spaces"''' ckmsg(s, "inconsistent use of tabs and spaces in indentation", TabError) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 5f622b092f98f..dc81964830a58 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -926,6 +926,138 @@ Traceback (most recent call last): SyntaxError: invalid syntax +Specialized indentation errors: + + >>> while condition: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'while' statement on line 1 + + >>> for x in range(10): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'for' statement on line 1 + + >>> for x in range(10): + ... pass + ... else: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'else' statement on line 3 + + >>> async for x in range(10): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'for' statement on line 1 + + >>> async for x in range(10): + ... pass + ... else: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'else' statement on line 3 + + >>> if something: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'if' statement on line 1 + + >>> if something: + ... pass + ... elif something_else: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'elif' statement on line 3 + + >>> if something: + ... pass + ... elif something_else: + ... pass + ... else: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'else' statement on line 5 + + >>> try: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'try' statement on line 1 + + >>> try: + ... something() + ... except A: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'except' statement on line 3 + + >>> try: + ... something() + ... except A: + ... pass + ... finally: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'finally' statement on line 5 + + >>> with A: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> with A as a, B as b: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> with (A as a, B as b): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> async with A: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> async with A as a, B as b: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> async with (A as a, B as b): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'with' statement on line 1 + + >>> def foo(x, /, y, *, z=2): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after function definition on line 1 + + >>> class Blech(A): + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after class definition on line 1 + + >>> match something: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'match' statement on line 1 + + >>> match something: + ... case []: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'case' statement on line 2 + + >>> match something: + ... case []: + ... ... + ... case {}: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'case' statement on line 4 + Make sure that the old "raise X, Y[, Z]" form is gone: >>> raise X, Y Traceback (most recent call last): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst new file mode 100644 index 0000000000000..c91f85b4338ab --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst @@ -0,0 +1,2 @@ +Improve the error message for :exc:`IndentationError` exceptions. Patch by +Pablo Galindo diff --git a/Parser/parser.c b/Parser/parser.c index e47093e1dca7d..0937717abecbb 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -269,203 +269,222 @@ static char *soft_keywords[] = { #define invalid_group_type 1195 #define invalid_import_from_targets_type 1196 #define invalid_with_stmt_type 1197 -#define invalid_except_block_type 1198 -#define invalid_match_stmt_type 1199 -#define invalid_case_block_type 1200 -#define invalid_if_stmt_type 1201 -#define invalid_elif_stmt_type 1202 -#define invalid_while_stmt_type 1203 -#define invalid_double_starred_kvpairs_type 1204 -#define invalid_kvpair_type 1205 -#define _loop0_1_type 1206 -#define _loop0_2_type 1207 -#define _loop0_4_type 1208 -#define _gather_3_type 1209 -#define _loop0_6_type 1210 -#define _gather_5_type 1211 -#define _loop0_8_type 1212 -#define _gather_7_type 1213 -#define _loop0_10_type 1214 -#define _gather_9_type 1215 -#define _loop1_11_type 1216 -#define _loop0_13_type 1217 -#define _gather_12_type 1218 -#define _tmp_14_type 1219 -#define _tmp_15_type 1220 -#define _tmp_16_type 1221 -#define _tmp_17_type 1222 -#define _tmp_18_type 1223 -#define _tmp_19_type 1224 -#define _tmp_20_type 1225 -#define _tmp_21_type 1226 -#define _loop1_22_type 1227 -#define _tmp_23_type 1228 -#define _tmp_24_type 1229 -#define _loop0_26_type 1230 -#define _gather_25_type 1231 -#define _loop0_28_type 1232 -#define _gather_27_type 1233 -#define _tmp_29_type 1234 -#define _tmp_30_type 1235 -#define _loop0_31_type 1236 -#define _loop1_32_type 1237 -#define _loop0_34_type 1238 -#define _gather_33_type 1239 -#define _tmp_35_type 1240 -#define _loop0_37_type 1241 -#define _gather_36_type 1242 -#define _tmp_38_type 1243 -#define _loop0_40_type 1244 -#define _gather_39_type 1245 -#define _loop0_42_type 1246 -#define _gather_41_type 1247 -#define _loop0_44_type 1248 -#define _gather_43_type 1249 -#define _loop0_46_type 1250 -#define _gather_45_type 1251 -#define _tmp_47_type 1252 -#define _loop1_48_type 1253 -#define _tmp_49_type 1254 -#define _loop1_50_type 1255 -#define _loop0_52_type 1256 -#define _gather_51_type 1257 -#define _tmp_53_type 1258 -#define _tmp_54_type 1259 -#define _tmp_55_type 1260 -#define _loop0_57_type 1261 -#define _gather_56_type 1262 -#define _tmp_58_type 1263 -#define _loop0_60_type 1264 -#define _gather_59_type 1265 -#define _tmp_61_type 1266 -#define _loop0_63_type 1267 -#define _gather_62_type 1268 -#define _loop0_65_type 1269 -#define _gather_64_type 1270 -#define _tmp_66_type 1271 -#define _tmp_67_type 1272 -#define _tmp_68_type 1273 -#define _tmp_69_type 1274 -#define _loop0_70_type 1275 -#define _loop0_71_type 1276 -#define _loop0_72_type 1277 -#define _loop1_73_type 1278 -#define _loop0_74_type 1279 -#define _loop1_75_type 1280 -#define _loop1_76_type 1281 -#define _loop1_77_type 1282 -#define _loop0_78_type 1283 -#define _loop1_79_type 1284 -#define _loop0_80_type 1285 -#define _loop1_81_type 1286 -#define _loop0_82_type 1287 -#define _loop1_83_type 1288 -#define _loop1_84_type 1289 -#define _tmp_85_type 1290 -#define _loop1_86_type 1291 -#define _loop0_88_type 1292 -#define _gather_87_type 1293 -#define _loop1_89_type 1294 -#define _loop0_90_type 1295 -#define _loop0_91_type 1296 -#define _loop0_92_type 1297 -#define _loop1_93_type 1298 -#define _loop0_94_type 1299 -#define _loop1_95_type 1300 -#define _loop1_96_type 1301 -#define _loop1_97_type 1302 -#define _loop0_98_type 1303 -#define _loop1_99_type 1304 -#define _loop0_100_type 1305 -#define _loop1_101_type 1306 -#define _loop0_102_type 1307 -#define _loop1_103_type 1308 -#define _loop1_104_type 1309 -#define _loop1_105_type 1310 -#define _loop1_106_type 1311 -#define _tmp_107_type 1312 -#define _loop0_109_type 1313 -#define _gather_108_type 1314 -#define _tmp_110_type 1315 -#define _tmp_111_type 1316 -#define _tmp_112_type 1317 -#define _tmp_113_type 1318 -#define _loop1_114_type 1319 -#define _tmp_115_type 1320 -#define _tmp_116_type 1321 -#define _loop0_118_type 1322 -#define _gather_117_type 1323 -#define _loop1_119_type 1324 -#define _loop0_120_type 1325 -#define _loop0_121_type 1326 -#define _loop0_123_type 1327 -#define _gather_122_type 1328 -#define _tmp_124_type 1329 -#define _loop0_126_type 1330 -#define _gather_125_type 1331 -#define _loop0_128_type 1332 -#define _gather_127_type 1333 -#define _loop0_130_type 1334 -#define _gather_129_type 1335 -#define _loop0_132_type 1336 -#define _gather_131_type 1337 -#define _loop0_133_type 1338 -#define _loop0_135_type 1339 -#define _gather_134_type 1340 -#define _loop1_136_type 1341 -#define _tmp_137_type 1342 -#define _loop0_139_type 1343 -#define _gather_138_type 1344 -#define _loop0_141_type 1345 -#define _gather_140_type 1346 -#define _tmp_142_type 1347 -#define _tmp_143_type 1348 -#define _tmp_144_type 1349 -#define _tmp_145_type 1350 -#define _tmp_146_type 1351 -#define _loop0_147_type 1352 -#define _loop0_148_type 1353 -#define _loop0_149_type 1354 -#define _tmp_150_type 1355 -#define _tmp_151_type 1356 -#define _tmp_152_type 1357 -#define _loop0_153_type 1358 -#define _loop1_154_type 1359 -#define _loop0_155_type 1360 -#define _loop1_156_type 1361 -#define _tmp_157_type 1362 -#define _tmp_158_type 1363 -#define _tmp_159_type 1364 -#define _loop0_161_type 1365 -#define _gather_160_type 1366 -#define _loop0_163_type 1367 -#define _gather_162_type 1368 -#define _tmp_164_type 1369 -#define _tmp_165_type 1370 -#define _loop0_167_type 1371 -#define _gather_166_type 1372 -#define _tmp_168_type 1373 -#define _tmp_169_type 1374 -#define _tmp_170_type 1375 -#define _tmp_171_type 1376 -#define _tmp_172_type 1377 -#define _tmp_173_type 1378 -#define _tmp_174_type 1379 -#define _tmp_175_type 1380 -#define _tmp_176_type 1381 -#define _tmp_177_type 1382 -#define _tmp_178_type 1383 -#define _tmp_179_type 1384 -#define _tmp_180_type 1385 -#define _tmp_181_type 1386 -#define _tmp_182_type 1387 -#define _tmp_183_type 1388 -#define _tmp_184_type 1389 -#define _tmp_185_type 1390 -#define _tmp_186_type 1391 -#define _tmp_187_type 1392 -#define _tmp_188_type 1393 -#define _tmp_189_type 1394 +#define invalid_with_stmt_indent_type 1198 +#define invalid_try_stmt_type 1199 +#define invalid_except_stmt_type 1200 +#define invalid_finally_stmt_type 1201 +#define invalid_except_stmt_indent_type 1202 +#define invalid_match_stmt_type 1203 +#define invalid_case_block_type 1204 +#define invalid_if_stmt_type 1205 +#define invalid_elif_stmt_type 1206 +#define invalid_else_stmt_type 1207 +#define invalid_while_stmt_type 1208 +#define invalid_for_stmt_type 1209 +#define invalid_def_raw_type 1210 +#define invalid_class_def_raw_type 1211 +#define invalid_double_starred_kvpairs_type 1212 +#define invalid_kvpair_type 1213 +#define _loop0_1_type 1214 +#define _loop0_2_type 1215 +#define _loop0_4_type 1216 +#define _gather_3_type 1217 +#define _loop0_6_type 1218 +#define _gather_5_type 1219 +#define _loop0_8_type 1220 +#define _gather_7_type 1221 +#define _loop0_10_type 1222 +#define _gather_9_type 1223 +#define _loop1_11_type 1224 +#define _loop0_13_type 1225 +#define _gather_12_type 1226 +#define _tmp_14_type 1227 +#define _tmp_15_type 1228 +#define _tmp_16_type 1229 +#define _tmp_17_type 1230 +#define _tmp_18_type 1231 +#define _tmp_19_type 1232 +#define _tmp_20_type 1233 +#define _tmp_21_type 1234 +#define _loop1_22_type 1235 +#define _tmp_23_type 1236 +#define _tmp_24_type 1237 +#define _loop0_26_type 1238 +#define _gather_25_type 1239 +#define _loop0_28_type 1240 +#define _gather_27_type 1241 +#define _tmp_29_type 1242 +#define _tmp_30_type 1243 +#define _loop0_31_type 1244 +#define _loop1_32_type 1245 +#define _loop0_34_type 1246 +#define _gather_33_type 1247 +#define _tmp_35_type 1248 +#define _loop0_37_type 1249 +#define _gather_36_type 1250 +#define _tmp_38_type 1251 +#define _loop0_40_type 1252 +#define _gather_39_type 1253 +#define _loop0_42_type 1254 +#define _gather_41_type 1255 +#define _loop0_44_type 1256 +#define _gather_43_type 1257 +#define _loop0_46_type 1258 +#define _gather_45_type 1259 +#define _tmp_47_type 1260 +#define _loop1_48_type 1261 +#define _tmp_49_type 1262 +#define _loop1_50_type 1263 +#define _loop0_52_type 1264 +#define _gather_51_type 1265 +#define _tmp_53_type 1266 +#define _tmp_54_type 1267 +#define _tmp_55_type 1268 +#define _loop0_57_type 1269 +#define _gather_56_type 1270 +#define _tmp_58_type 1271 +#define _loop0_60_type 1272 +#define _gather_59_type 1273 +#define _tmp_61_type 1274 +#define _loop0_63_type 1275 +#define _gather_62_type 1276 +#define _loop0_65_type 1277 +#define _gather_64_type 1278 +#define _tmp_66_type 1279 +#define _tmp_67_type 1280 +#define _tmp_68_type 1281 +#define _tmp_69_type 1282 +#define _loop0_70_type 1283 +#define _loop0_71_type 1284 +#define _loop0_72_type 1285 +#define _loop1_73_type 1286 +#define _loop0_74_type 1287 +#define _loop1_75_type 1288 +#define _loop1_76_type 1289 +#define _loop1_77_type 1290 +#define _loop0_78_type 1291 +#define _loop1_79_type 1292 +#define _loop0_80_type 1293 +#define _loop1_81_type 1294 +#define _loop0_82_type 1295 +#define _loop1_83_type 1296 +#define _loop1_84_type 1297 +#define _tmp_85_type 1298 +#define _loop1_86_type 1299 +#define _loop0_88_type 1300 +#define _gather_87_type 1301 +#define _loop1_89_type 1302 +#define _loop0_90_type 1303 +#define _loop0_91_type 1304 +#define _loop0_92_type 1305 +#define _loop1_93_type 1306 +#define _loop0_94_type 1307 +#define _loop1_95_type 1308 +#define _loop1_96_type 1309 +#define _loop1_97_type 1310 +#define _loop0_98_type 1311 +#define _loop1_99_type 1312 +#define _loop0_100_type 1313 +#define _loop1_101_type 1314 +#define _loop0_102_type 1315 +#define _loop1_103_type 1316 +#define _loop1_104_type 1317 +#define _loop1_105_type 1318 +#define _loop1_106_type 1319 +#define _tmp_107_type 1320 +#define _loop0_109_type 1321 +#define _gather_108_type 1322 +#define _tmp_110_type 1323 +#define _tmp_111_type 1324 +#define _tmp_112_type 1325 +#define _tmp_113_type 1326 +#define _loop1_114_type 1327 +#define _tmp_115_type 1328 +#define _tmp_116_type 1329 +#define _loop0_118_type 1330 +#define _gather_117_type 1331 +#define _loop1_119_type 1332 +#define _loop0_120_type 1333 +#define _loop0_121_type 1334 +#define _loop0_123_type 1335 +#define _gather_122_type 1336 +#define _tmp_124_type 1337 +#define _loop0_126_type 1338 +#define _gather_125_type 1339 +#define _loop0_128_type 1340 +#define _gather_127_type 1341 +#define _loop0_130_type 1342 +#define _gather_129_type 1343 +#define _loop0_132_type 1344 +#define _gather_131_type 1345 +#define _loop0_133_type 1346 +#define _loop0_135_type 1347 +#define _gather_134_type 1348 +#define _loop1_136_type 1349 +#define _tmp_137_type 1350 +#define _loop0_139_type 1351 +#define _gather_138_type 1352 +#define _loop0_141_type 1353 +#define _gather_140_type 1354 +#define _tmp_142_type 1355 +#define _tmp_143_type 1356 +#define _tmp_144_type 1357 +#define _tmp_145_type 1358 +#define _tmp_146_type 1359 +#define _loop0_147_type 1360 +#define _loop0_148_type 1361 +#define _loop0_149_type 1362 +#define _tmp_150_type 1363 +#define _tmp_151_type 1364 +#define _tmp_152_type 1365 +#define _loop0_153_type 1366 +#define _loop1_154_type 1367 +#define _loop0_155_type 1368 +#define _loop1_156_type 1369 +#define _tmp_157_type 1370 +#define _tmp_158_type 1371 +#define _tmp_159_type 1372 +#define _loop0_161_type 1373 +#define _gather_160_type 1374 +#define _loop0_163_type 1375 +#define _gather_162_type 1376 +#define _loop0_165_type 1377 +#define _gather_164_type 1378 +#define _loop0_167_type 1379 +#define _gather_166_type 1380 +#define _tmp_168_type 1381 +#define _tmp_169_type 1382 +#define _tmp_170_type 1383 +#define _tmp_171_type 1384 +#define _tmp_172_type 1385 +#define _loop0_174_type 1386 +#define _gather_173_type 1387 +#define _tmp_175_type 1388 +#define _tmp_176_type 1389 +#define _tmp_177_type 1390 +#define _tmp_178_type 1391 +#define _tmp_179_type 1392 +#define _tmp_180_type 1393 +#define _tmp_181_type 1394 +#define _tmp_182_type 1395 +#define _tmp_183_type 1396 +#define _tmp_184_type 1397 +#define _tmp_185_type 1398 +#define _tmp_186_type 1399 +#define _tmp_187_type 1400 +#define _tmp_188_type 1401 +#define _tmp_189_type 1402 +#define _tmp_190_type 1403 +#define _tmp_191_type 1404 +#define _tmp_192_type 1405 +#define _tmp_193_type 1406 +#define _tmp_194_type 1407 +#define _tmp_195_type 1408 +#define _tmp_196_type 1409 +#define _tmp_197_type 1410 +#define _tmp_198_type 1411 +#define _tmp_199_type 1412 +#define _tmp_200_type 1413 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -665,12 +684,20 @@ static void *invalid_for_target_rule(Parser *p); static void *invalid_group_rule(Parser *p); static void *invalid_import_from_targets_rule(Parser *p); static void *invalid_with_stmt_rule(Parser *p); -static void *invalid_except_block_rule(Parser *p); +static void *invalid_with_stmt_indent_rule(Parser *p); +static void *invalid_try_stmt_rule(Parser *p); +static void *invalid_except_stmt_rule(Parser *p); +static void *invalid_finally_stmt_rule(Parser *p); +static void *invalid_except_stmt_indent_rule(Parser *p); static void *invalid_match_stmt_rule(Parser *p); static void *invalid_case_block_rule(Parser *p); static void *invalid_if_stmt_rule(Parser *p); static void *invalid_elif_stmt_rule(Parser *p); +static void *invalid_else_stmt_rule(Parser *p); static void *invalid_while_stmt_rule(Parser *p); +static void *invalid_for_stmt_rule(Parser *p); +static void *invalid_def_raw_rule(Parser *p); +static void *invalid_class_def_raw_rule(Parser *p); static void *invalid_double_starred_kvpairs_rule(Parser *p); static void *invalid_kvpair_rule(Parser *p); static asdl_seq *_loop0_1_rule(Parser *p); @@ -836,8 +863,8 @@ static asdl_seq *_loop0_161_rule(Parser *p); static asdl_seq *_gather_160_rule(Parser *p); static asdl_seq *_loop0_163_rule(Parser *p); static asdl_seq *_gather_162_rule(Parser *p); -static void *_tmp_164_rule(Parser *p); -static void *_tmp_165_rule(Parser *p); +static asdl_seq *_loop0_165_rule(Parser *p); +static asdl_seq *_gather_164_rule(Parser *p); static asdl_seq *_loop0_167_rule(Parser *p); static asdl_seq *_gather_166_rule(Parser *p); static void *_tmp_168_rule(Parser *p); @@ -845,8 +872,8 @@ static void *_tmp_169_rule(Parser *p); static void *_tmp_170_rule(Parser *p); static void *_tmp_171_rule(Parser *p); static void *_tmp_172_rule(Parser *p); -static void *_tmp_173_rule(Parser *p); -static void *_tmp_174_rule(Parser *p); +static asdl_seq *_loop0_174_rule(Parser *p); +static asdl_seq *_gather_173_rule(Parser *p); static void *_tmp_175_rule(Parser *p); static void *_tmp_176_rule(Parser *p); static void *_tmp_177_rule(Parser *p); @@ -862,6 +889,17 @@ static void *_tmp_186_rule(Parser *p); static void *_tmp_187_rule(Parser *p); static void *_tmp_188_rule(Parser *p); static void *_tmp_189_rule(Parser *p); +static void *_tmp_190_rule(Parser *p); +static void *_tmp_191_rule(Parser *p); +static void *_tmp_192_rule(Parser *p); +static void *_tmp_193_rule(Parser *p); +static void *_tmp_194_rule(Parser *p); +static void *_tmp_195_rule(Parser *p); +static void *_tmp_196_rule(Parser *p); +static void *_tmp_197_rule(Parser *p); +static void *_tmp_198_rule(Parser *p); +static void *_tmp_199_rule(Parser *p); +static void *_tmp_200_rule(Parser *p); // file: statements? $ @@ -3771,9 +3809,9 @@ dotted_name_raw(Parser *p) } // if_stmt: +// | invalid_if_stmt // | 'if' named_expression ':' block elif_stmt // | 'if' named_expression ':' block else_block? -// | invalid_if_stmt static stmt_ty if_stmt_rule(Parser *p) { @@ -3793,6 +3831,25 @@ if_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_if_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + void *invalid_if_stmt_var; + if ( + (invalid_if_stmt_var = invalid_if_stmt_rule(p)) // invalid_if_stmt + ) + { + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + _res = invalid_if_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt")); + } { // 'if' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); @@ -3883,25 +3940,6 @@ if_stmt_rule(Parser *p) D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?")); } - if (p->call_invalid_rules) { // invalid_if_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); - void *invalid_if_stmt_var; - if ( - (invalid_if_stmt_var = invalid_if_stmt_rule(p)) // invalid_if_stmt - ) - { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); - _res = invalid_if_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt")); - } _res = NULL; done: D(p->level--); @@ -3909,9 +3947,9 @@ if_stmt_rule(Parser *p) } // elif_stmt: +// | invalid_elif_stmt // | 'elif' named_expression ':' block elif_stmt // | 'elif' named_expression ':' block else_block? -// | invalid_elif_stmt static stmt_ty elif_stmt_rule(Parser *p) { @@ -3931,6 +3969,25 @@ elif_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_elif_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + void *invalid_elif_stmt_var; + if ( + (invalid_elif_stmt_var = invalid_elif_stmt_rule(p)) // invalid_elif_stmt + ) + { + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + _res = invalid_elif_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt")); + } { // 'elif' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); @@ -4021,32 +4078,13 @@ elif_stmt_rule(Parser *p) D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?")); } - if (p->call_invalid_rules) { // invalid_elif_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); - void *invalid_elif_stmt_var; - if ( - (invalid_elif_stmt_var = invalid_elif_stmt_rule(p)) // invalid_elif_stmt - ) - { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); - _res = invalid_elif_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt")); - } _res = NULL; done: D(p->level--); return _res; } -// else_block: 'else' &&':' block +// else_block: invalid_else_stmt | 'else' &&':' block static asdl_stmt_seq* else_block_rule(Parser *p) { @@ -4057,6 +4095,25 @@ else_block_rule(Parser *p) } asdl_stmt_seq* _res = NULL; int _mark = p->mark; + if (p->call_invalid_rules) { // invalid_else_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); + void *invalid_else_stmt_var; + if ( + (invalid_else_stmt_var = invalid_else_stmt_rule(p)) // invalid_else_stmt + ) + { + D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); + _res = invalid_else_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_else_stmt")); + } { // 'else' &&':' block if (p->error_indicator) { D(p->level--); @@ -4093,7 +4150,7 @@ else_block_rule(Parser *p) return _res; } -// while_stmt: 'while' named_expression ':' block else_block? | invalid_while_stmt +// while_stmt: invalid_while_stmt | 'while' named_expression ':' block else_block? static stmt_ty while_stmt_rule(Parser *p) { @@ -4113,6 +4170,25 @@ while_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_while_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + void *invalid_while_stmt_var; + if ( + (invalid_while_stmt_var = invalid_while_stmt_rule(p)) // invalid_while_stmt + ) + { + D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + _res = invalid_while_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt")); + } { // 'while' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); @@ -4158,25 +4234,6 @@ while_stmt_rule(Parser *p) D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?")); } - if (p->call_invalid_rules) { // invalid_while_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); - void *invalid_while_stmt_var; - if ( - (invalid_while_stmt_var = invalid_while_stmt_rule(p)) // invalid_while_stmt - ) - { - D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); - _res = invalid_while_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt")); - } _res = NULL; done: D(p->level--); @@ -4184,6 +4241,7 @@ while_stmt_rule(Parser *p) } // for_stmt: +// | invalid_for_stmt // | 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? // | ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? // | invalid_for_target @@ -4206,6 +4264,25 @@ for_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_for_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); + void *invalid_for_stmt_var; + if ( + (invalid_for_stmt_var = invalid_for_stmt_rule(p)) // invalid_for_stmt + ) + { + D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); + _res = invalid_for_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_stmt")); + } { // 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? if (p->error_indicator) { D(p->level--); @@ -4357,6 +4434,7 @@ for_stmt_rule(Parser *p) } // with_stmt: +// | invalid_with_stmt_indent // | 'with' '(' ','.with_item+ ','? ')' ':' block // | 'with' ','.with_item+ ':' TYPE_COMMENT? block // | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block @@ -4381,6 +4459,25 @@ with_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_with_stmt_indent + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); + void *invalid_with_stmt_indent_var; + if ( + (invalid_with_stmt_indent_var = invalid_with_stmt_indent_rule(p)) // invalid_with_stmt_indent + ) + { + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); + _res = invalid_with_stmt_indent_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt_indent")); + } { // 'with' '(' ','.with_item+ ','? ')' ':' block if (p->error_indicator) { D(p->level--); @@ -4702,6 +4799,7 @@ with_item_rule(Parser *p) } // try_stmt: +// | invalid_try_stmt // | 'try' &&':' block finally_block // | 'try' &&':' block except_block+ else_block? finally_block? static stmt_ty @@ -4723,6 +4821,25 @@ try_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_try_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); + void *invalid_try_stmt_var; + if ( + (invalid_try_stmt_var = invalid_try_stmt_rule(p)) // invalid_try_stmt + ) + { + D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); + _res = invalid_try_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_try_stmt")); + } { // 'try' &&':' block finally_block if (p->error_indicator) { D(p->level--); @@ -4820,9 +4937,10 @@ try_stmt_rule(Parser *p) } // except_block: +// | invalid_except_stmt_indent // | 'except' expression ['as' NAME] ':' block // | 'except' ':' block -// | invalid_except_block +// | invalid_except_stmt static excepthandler_ty except_block_rule(Parser *p) { @@ -4842,6 +4960,25 @@ except_block_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_except_stmt_indent + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); + void *invalid_except_stmt_indent_var; + if ( + (invalid_except_stmt_indent_var = invalid_except_stmt_indent_rule(p)) // invalid_except_stmt_indent + ) + { + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); + _res = invalid_except_stmt_indent_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt_indent")); + } { // 'except' expression ['as' NAME] ':' block if (p->error_indicator) { D(p->level--); @@ -4926,24 +5063,24 @@ except_block_rule(Parser *p) D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block")); } - if (p->call_invalid_rules) { // invalid_except_block + if (p->call_invalid_rules) { // invalid_except_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_block")); - void *invalid_except_block_var; + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); + void *invalid_except_stmt_var; if ( - (invalid_except_block_var = invalid_except_block_rule(p)) // invalid_except_block + (invalid_except_stmt_var = invalid_except_stmt_rule(p)) // invalid_except_stmt ) { - D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_block")); - _res = invalid_except_block_var; + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); + _res = invalid_except_stmt_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_block")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt")); } _res = NULL; done: @@ -4951,7 +5088,7 @@ except_block_rule(Parser *p) return _res; } -// finally_block: 'finally' ':' block +// finally_block: invalid_finally_stmt | 'finally' &&':' block static asdl_stmt_seq* finally_block_rule(Parser *p) { @@ -4962,24 +5099,43 @@ finally_block_rule(Parser *p) } asdl_stmt_seq* _res = NULL; int _mark = p->mark; - { // 'finally' ':' block + if (p->call_invalid_rules) { // invalid_finally_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); + void *invalid_finally_stmt_var; + if ( + (invalid_finally_stmt_var = invalid_finally_stmt_rule(p)) // invalid_finally_stmt + ) + { + D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); + _res = invalid_finally_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_finally_stmt")); + } + { // 'finally' &&':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' block")); + D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); Token * _keyword; Token * _literal; asdl_stmt_seq* a; if ( (_keyword = _PyPegen_expect_token(p, 522)) // token='finally' && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && (a = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' ':' block")); + D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -4990,7 +5146,7 @@ finally_block_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' ':' block")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' &&':' block")); } _res = NULL; done: @@ -5180,7 +5336,7 @@ subject_expr_rule(Parser *p) return _res; } -// case_block: "case" patterns guard? ':' block | invalid_case_block +// case_block: invalid_case_block | "case" patterns guard? ':' block static match_case_ty case_block_rule(Parser *p) { @@ -5191,6 +5347,25 @@ case_block_rule(Parser *p) } match_case_ty _res = NULL; int _mark = p->mark; + if (p->call_invalid_rules) { // invalid_case_block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); + void *invalid_case_block_var; + if ( + (invalid_case_block_var = invalid_case_block_rule(p)) // invalid_case_block + ) + { + D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); + _res = invalid_case_block_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block")); + } { // "case" patterns guard? ':' block if (p->error_indicator) { D(p->level--); @@ -5227,25 +5402,6 @@ case_block_rule(Parser *p) D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block")); } - if (p->call_invalid_rules) { // invalid_case_block - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); - void *invalid_case_block_var; - if ( - (invalid_case_block_var = invalid_case_block_rule(p)) // invalid_case_block - ) - { - D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); - _res = invalid_case_block_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block")); - } _res = NULL; done: D(p->level--); @@ -7525,6 +7681,7 @@ function_def_rule(Parser *p) } // function_def_raw: +// | invalid_def_raw // | 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block // | ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block static stmt_ty @@ -7546,6 +7703,25 @@ function_def_raw_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_def_raw + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); + void *invalid_def_raw_var; + if ( + (invalid_def_raw_var = invalid_def_raw_rule(p)) // invalid_def_raw + ) + { + D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); + _res = invalid_def_raw_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw")); + } { // 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block if (p->error_indicator) { D(p->level--); @@ -8807,7 +8983,7 @@ class_def_rule(Parser *p) return _res; } -// class_def_raw: 'class' NAME ['(' arguments? ')'] &&':' block +// class_def_raw: invalid_class_def_raw | 'class' NAME ['(' arguments? ')'] &&':' block static stmt_ty class_def_raw_rule(Parser *p) { @@ -8827,6 +9003,25 @@ class_def_raw_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_class_def_raw + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); + void *invalid_class_def_raw_var; + if ( + (invalid_class_def_raw_var = invalid_class_def_raw_rule(p)) // invalid_class_def_raw + ) + { + D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); + _res = invalid_class_def_raw_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_def_raw")); + } { // 'class' NAME ['(' arguments? ')'] &&':' block if (p->error_indicator) { D(p->level--); @@ -18899,12 +19094,11 @@ invalid_with_stmt_rule(Parser *p) return _res; } -// invalid_except_block: -// | 'except' expression ',' expressions ['as' NAME] ':' -// | 'except' expression ['as' NAME] &&':' -// | 'except' &&':' +// invalid_with_stmt_indent: +// | ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT +// | ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT static void * -invalid_except_block_rule(Parser *p) +invalid_with_stmt_indent_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -18913,35 +19107,34 @@ invalid_except_block_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'except' expression ',' expressions ['as' NAME] ':' + { // ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); - Token * _keyword; + D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); + asdl_seq * _gather_164_var; Token * _literal; - Token * _literal_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - expr_ty a; - expr_ty expressions_var; + Token * a; + Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (a = expression_rule(p)) // expression + (a = _PyPegen_expect_token(p, 519)) // token='with' && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_gather_164_var = _gather_164_rule(p)) // ','.(expression ['as' star_target])+ && - (expressions_var = expressions_rule(p)) // expressions + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_opt_var = _tmp_164_rule(p), 1) // ['as' NAME] + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' && - (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "exception group must be parenthesized" ); + D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18950,59 +19143,57 @@ invalid_except_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); + D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); } - { // 'except' expression ['as' NAME] &&':' + { // ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] &&':'")); - Token * _keyword; + D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); + asdl_seq * _gather_166_var; Token * _literal; + Token * _literal_1; + Token * _literal_2; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - expr_ty expression_var; + void *_opt_var_1; + UNUSED(_opt_var_1); // Silence compiler warnings + Token * a; + Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (expression_var = expression_rule(p)) // expression + (a = _PyPegen_expect_token(p, 519)) // token='with' && - (_opt_var = _tmp_165_rule(p), 1) // ['as' NAME] + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - ) - { - D(fprintf(stderr, "%*c+ invalid_except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] &&':'")); - _res = _PyPegen_dummy_name(p, _keyword, expression_var, _opt_var, _literal); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] &&':'")); - } - { // 'except' &&':' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> invalid_except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' &&':'")); - Token * _keyword; - Token * _literal; - if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (_gather_166_var = _gather_166_rule(p)) // ','.(expressions ['as' star_target])+ && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_opt_var_1 = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + && + (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' &&':'")); - _res = _PyPegen_dummy_name(p, _keyword, _literal); + D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' &&':'")); + D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); } _res = NULL; done: @@ -19010,9 +19201,9 @@ invalid_except_block_rule(Parser *p) return _res; } -// invalid_match_stmt: "match" subject_expr !':' +// invalid_try_stmt: 'try' ':' NEWLINE !INDENT static void * -invalid_match_stmt_rule(Parser *p) +invalid_try_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -19021,24 +19212,27 @@ invalid_match_stmt_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // "match" subject_expr !':' + { // 'try' ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr !':'")); - expr_ty _keyword; - expr_ty subject_expr_var; + D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; + Token * newline_var; if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "match")) // soft_keyword='"match"' + (a = _PyPegen_expect_token(p, 511)) // token='try' && - (subject_expr_var = subject_expr_rule(p)) // subject_expr + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=':' + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr !':'")); - _res = CHECK_VERSION ( void * , 10 , "Pattern matching is" , RAISE_SYNTAX_ERROR ( "expected ':'" ) ); + D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'try' statement on line %d" , a -> lineno ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19047,8 +19241,8 @@ invalid_match_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr !':'")); + D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' NEWLINE !INDENT")); } _res = NULL; done: @@ -19056,9 +19250,12 @@ invalid_match_stmt_rule(Parser *p) return _res; } -// invalid_case_block: "case" patterns guard? !':' +// invalid_except_stmt: +// | 'except' expression ',' expressions ['as' NAME] ':' +// | 'except' expression ['as' NAME] NEWLINE +// | 'except' NEWLINE static void * -invalid_case_block_rule(Parser *p) +invalid_except_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -19067,28 +19264,35 @@ invalid_case_block_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // "case" patterns guard? !':' + { // 'except' expression ',' expressions ['as' NAME] ':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? !':'")); - expr_ty _keyword; + D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); + Token * _keyword; + Token * _literal; + Token * _literal_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - expr_ty patterns_var; + expr_ty a; + expr_ty expressions_var; if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' + (_keyword = _PyPegen_expect_token(p, 521)) // token='except' && - (patterns_var = patterns_rule(p)) // patterns + (a = expression_rule(p)) // expression && - (_opt_var = guard_rule(p), 1) // guard? + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=':' + (expressions_var = expressions_rule(p)) // expressions + && + (_opt_var = _tmp_168_rule(p), 1) // ['as' NAME] + && + (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? !':'")); - _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "exception group must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19097,44 +19301,31 @@ invalid_case_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? !':'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// invalid_if_stmt: 'if' named_expression NEWLINE -static void * -invalid_if_stmt_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); } - void * _res = NULL; - int _mark = p->mark; - { // 'if' named_expression NEWLINE + { // 'except' expression ['as' NAME] NEWLINE if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); - Token * _keyword; - expr_ty named_expression_var; + D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + Token * a; + expr_ty expression_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + (a = _PyPegen_expect_token(p, 521)) // token='except' && - (named_expression_var = named_expression_rule(p)) // named_expression + (expression_var = expression_rule(p)) // expression + && + (_opt_var = _tmp_169_rule(p), 1) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE")); _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -19144,44 +19335,24 @@ invalid_if_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression NEWLINE")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// invalid_elif_stmt: 'elif' named_expression NEWLINE -static void * -invalid_elif_stmt_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] NEWLINE")); } - void * _res = NULL; - int _mark = p->mark; - { // 'elif' named_expression NEWLINE + { // 'except' NEWLINE if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); - Token * _keyword; - expr_ty named_expression_var; + D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE")); + Token * a; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' - && - (named_expression_var = named_expression_rule(p)) // named_expression + (a = _PyPegen_expect_token(p, 521)) // token='except' && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE")); _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -19191,8 +19362,8 @@ invalid_elif_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression NEWLINE")); + D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' NEWLINE")); } _res = NULL; done: @@ -19200,9 +19371,9 @@ invalid_elif_stmt_rule(Parser *p) return _res; } -// invalid_while_stmt: 'while' named_expression NEWLINE +// invalid_finally_stmt: 'finally' ':' NEWLINE !INDENT static void * -invalid_while_stmt_rule(Parser *p) +invalid_finally_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -19211,25 +19382,27 @@ invalid_while_stmt_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'while' named_expression NEWLINE + { // 'finally' ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); - Token * _keyword; - expr_ty named_expression_var; + D(fprintf(stderr, "%*c> invalid_finally_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 512)) // token='while' + (a = _PyPegen_expect_token(p, 522)) // token='finally' && - (named_expression_var = named_expression_rule(p)) // named_expression + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); - _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + D(fprintf(stderr, "%*c+ invalid_finally_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'finally' statement on line %d" , a -> lineno ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19238,8 +19411,8 @@ invalid_while_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression NEWLINE")); + D(fprintf(stderr, "%*c%s invalid_finally_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' ':' NEWLINE !INDENT")); } _res = NULL; done: @@ -19247,12 +19420,11 @@ invalid_while_stmt_rule(Parser *p) return _res; } -// invalid_double_starred_kvpairs: -// | ','.double_starred_kvpair+ ',' invalid_kvpair -// | expression ':' '*' bitwise_or -// | expression ':' &('}' | ',') +// invalid_except_stmt_indent: +// | 'except' expression ['as' NAME] ':' NEWLINE !INDENT +// | 'except' ':' NEWLINE !INDENT static void * -invalid_double_starred_kvpairs_rule(Parser *p) +invalid_except_stmt_indent_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -19261,53 +19433,34 @@ invalid_double_starred_kvpairs_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ','.double_starred_kvpair+ ',' invalid_kvpair - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - asdl_seq * _gather_166_var; - Token * _literal; - void *invalid_kvpair_var; - if ( - (_gather_166_var = _gather_166_rule(p)) // ','.double_starred_kvpair+ - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (invalid_kvpair_var = invalid_kvpair_rule(p)) // invalid_kvpair - ) - { - D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - _res = _PyPegen_dummy_name(p, _gather_166_var, _literal, invalid_kvpair_var); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - } - { // expression ':' '*' bitwise_or + { // 'except' expression ['as' NAME] ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT")); Token * _literal; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings Token * a; - expr_ty bitwise_or_var; expr_ty expression_var; + Token * newline_var; if ( + (a = _PyPegen_expect_token(p, 521)) // token='except' + && (expression_var = expression_rule(p)) // expression && + (_opt_var = _tmp_170_rule(p), 1) // ['as' NAME] + && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (a = _PyPegen_expect_token(p, 16)) // token='*' + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' && - (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19316,27 +19469,30 @@ invalid_double_starred_kvpairs_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or")); + D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT")); } - { // expression ':' &('}' | ',') + { // 'except' ':' NEWLINE !INDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); + D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT")); + Token * _literal; Token * a; - expr_ty expression_var; + Token * newline_var; if ( - (expression_var = expression_rule(p)) // expression + (a = _PyPegen_expect_token(p, 521)) // token='except' && - (a = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' && - _PyPegen_lookahead(1, _tmp_168_rule, p) + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT ) { - D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" ); + D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT")); + _res = RAISE_SYNTAX_ERROR ( "expected an indented block after except statement on line %d" , a -> lineno ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19345,8 +19501,8 @@ invalid_double_starred_kvpairs_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')")); + D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' NEWLINE !INDENT")); } _res = NULL; done: @@ -19354,9 +19510,11 @@ invalid_double_starred_kvpairs_rule(Parser *p) return _res; } -// invalid_kvpair: expression !(':') | expression ':' '*' bitwise_or | expression ':' +// invalid_match_stmt: +// | "match" subject_expr !':' +// | "match" subject_expr ':' NEWLINE !INDENT static void * -invalid_kvpair_rule(Parser *p) +invalid_match_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -19365,19 +19523,788 @@ invalid_kvpair_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // expression !(':') + { // "match" subject_expr !':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')")); - expr_ty a; + D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr !':'")); + expr_ty _keyword; + expr_ty subject_expr_var; if ( - (a = expression_rule(p)) // expression + (_keyword = _PyPegen_expect_soft_keyword(p, "match")) // soft_keyword='"match"' && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=(':') - ) - { + (subject_expr_var = subject_expr_rule(p)) // subject_expr + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=':' + ) + { + D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr !':'")); + _res = CHECK_VERSION ( void * , 10 , "Pattern matching is" , RAISE_SYNTAX_ERROR ( "expected ':'" ) ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr !':'")); + } + { // "match" subject_expr ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT")); + Token * _literal; + expr_ty a; + Token * newline_var; + expr_ty subject; + if ( + (a = _PyPegen_expect_soft_keyword(p, "match")) // soft_keyword='"match"' + && + (subject = subject_expr_rule(p)) // subject_expr + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'match' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_case_block: +// | "case" patterns guard? !':' +// | "case" patterns guard? ':' NEWLINE !INDENT +static void * +invalid_case_block_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // "case" patterns guard? !':' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? !':'")); + expr_ty _keyword; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty patterns_var; + if ( + (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' + && + (patterns_var = patterns_rule(p)) // patterns + && + (_opt_var = guard_rule(p), 1) // guard? + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=':' + ) + { + D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? !':'")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? !':'")); + } + { // "case" patterns guard? ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT")); + Token * _literal; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty a; + Token * newline_var; + expr_ty patterns_var; + if ( + (a = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' + && + (patterns_var = patterns_rule(p)) // patterns + && + (_opt_var = guard_rule(p), 1) // guard? + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'case' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_if_stmt: +// | 'if' named_expression NEWLINE +// | 'if' named_expression ':' NEWLINE !INDENT +static void * +invalid_if_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'if' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression NEWLINE")); + } + { // 'if' named_expression ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; + expr_ty a_1; + Token * newline_var; + if ( + (a = _PyPegen_expect_token(p, 510)) // token='if' + && + (a_1 = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'if' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_elif_stmt: +// | 'elif' named_expression NEWLINE +// | 'elif' named_expression ':' NEWLINE !INDENT +static void * +invalid_elif_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'elif' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression NEWLINE")); + } + { // 'elif' named_expression ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; + expr_ty named_expression_var; + Token * newline_var; + if ( + (a = _PyPegen_expect_token(p, 515)) // token='elif' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'elif' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_else_stmt: 'else' ':' NEWLINE !INDENT +static void * +invalid_else_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'else' ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; + Token * newline_var; + if ( + (a = _PyPegen_expect_token(p, 516)) // token='else' + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'else' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_else_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_while_stmt: +// | 'while' named_expression NEWLINE +// | 'while' named_expression ':' NEWLINE !INDENT +static void * +invalid_while_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'while' named_expression NEWLINE + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); + Token * _keyword; + expr_ty named_expression_var; + Token * newline_var; + if ( + (_keyword = _PyPegen_expect_token(p, 512)) // token='while' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + ) + { + D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE")); + _res = RAISE_SYNTAX_ERROR ( "expected ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression NEWLINE")); + } + { // 'while' named_expression ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT")); + Token * _literal; + Token * a; + expr_ty named_expression_var; + Token * newline_var; + if ( + (a = _PyPegen_expect_token(p, 512)) // token='while' + && + (named_expression_var = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'while' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_for_stmt: ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT +static void * +invalid_for_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT")); + Token * _keyword; + Token * _literal; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + Token * a; + Token * newline_var; + expr_ty star_expressions_var; + expr_ty star_targets_var; + if ( + (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? + && + (a = _PyPegen_expect_token(p, 517)) // token='for' + && + (star_targets_var = star_targets_rule(p)) // star_targets + && + (_keyword = _PyPegen_expect_token(p, 518)) // token='in' + && + (star_expressions_var = star_expressions_rule(p)) // star_expressions + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'for' statement on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_def_raw: +// | ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT +static void * +invalid_def_raw_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT")); + Token * _literal; + Token * _literal_1; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + void *_opt_var_1; + UNUSED(_opt_var_1); // Silence compiler warnings + void *_opt_var_2; + UNUSED(_opt_var_2); // Silence compiler warnings + Token * a; + expr_ty name_var; + Token * newline_var; + if ( + (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? + && + (a = _PyPegen_expect_token(p, 526)) // token='def' + && + (name_var = _PyPegen_name_token(p)) // NAME + && + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (_opt_var_1 = params_rule(p), 1) // params? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + && + (_opt_var_2 = _tmp_171_rule(p), 1) // ['->' expression] + && + (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after function definition on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_class_def_raw: 'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT +static void * +invalid_class_def_raw_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT")); + Token * _literal; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + Token * a; + expr_ty name_var; + Token * newline_var; + if ( + (a = _PyPegen_expect_token(p, 527)) // token='class' + && + (name_var = _PyPegen_name_token(p)) // NAME + && + (_opt_var = _tmp_172_rule(p), 1) // ['(' arguments? ')'] + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT) // token=INDENT + ) + { + D(fprintf(stderr, "%*c+ invalid_class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT")); + _res = RAISE_INDENTATION_ERROR ( "expected an indented block after class definition on line %d" , a -> lineno ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_double_starred_kvpairs: +// | ','.double_starred_kvpair+ ',' invalid_kvpair +// | expression ':' '*' bitwise_or +// | expression ':' &('}' | ',') +static void * +invalid_double_starred_kvpairs_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // ','.double_starred_kvpair+ ',' invalid_kvpair + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + asdl_seq * _gather_173_var; + Token * _literal; + void *invalid_kvpair_var; + if ( + (_gather_173_var = _gather_173_rule(p)) // ','.double_starred_kvpair+ + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (invalid_kvpair_var = invalid_kvpair_rule(p)) // invalid_kvpair + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + _res = _PyPegen_dummy_name(p, _gather_173_var, _literal, invalid_kvpair_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); + } + { // expression ':' '*' bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + Token * _literal; + Token * a; + expr_ty bitwise_or_var; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (a = _PyPegen_expect_token(p, 16)) // token='*' + && + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or")); + } + { // expression ':' &('}' | ',') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); + Token * a; + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (a = _PyPegen_expect_token(p, 11)) // token=':' + && + _PyPegen_lookahead(1, _tmp_175_rule, p) + ) + { + D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// invalid_kvpair: expression !(':') | expression ':' '*' bitwise_or | expression ':' +static void * +invalid_kvpair_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // expression !(':') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')")); + expr_ty a; + if ( + (a = expression_rule(p)) // expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11) // token=(':') + ) + { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')")); _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , "':' expected after dictionary key" ); if (_res == NULL && PyErr_Occurred()) { @@ -20705,12 +21632,12 @@ _loop1_22_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_169_var; + void *_tmp_176_var; while ( - (_tmp_169_var = _tmp_169_rule(p)) // star_targets '=' + (_tmp_176_var = _tmp_176_rule(p)) // star_targets '=' ) { - _res = _tmp_169_var; + _res = _tmp_176_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -21213,12 +22140,12 @@ _loop0_31_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_170_var; + void *_tmp_177_var; while ( - (_tmp_170_var = _tmp_170_rule(p)) // '.' | '...' + (_tmp_177_var = _tmp_177_rule(p)) // '.' | '...' ) { - _res = _tmp_170_var; + _res = _tmp_177_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -21279,12 +22206,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_171_var; + void *_tmp_178_var; while ( - (_tmp_171_var = _tmp_171_rule(p)) // '.' | '...' + (_tmp_178_var = _tmp_178_rule(p)) // '.' | '...' ) { - _res = _tmp_171_var; + _res = _tmp_178_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24395,12 +25322,12 @@ _loop1_84_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_172_var; + void *_tmp_179_var; while ( - (_tmp_172_var = _tmp_172_rule(p)) // '@' named_expression NEWLINE + (_tmp_179_var = _tmp_179_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_172_var; + _res = _tmp_179_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24513,12 +25440,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_173_var; + void *_tmp_180_var; while ( - (_tmp_173_var = _tmp_173_rule(p)) // ',' star_expression + (_tmp_180_var = _tmp_180_rule(p)) // ',' star_expression ) { - _res = _tmp_173_var; + _res = _tmp_180_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24698,12 +25625,12 @@ _loop1_89_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_174_var; + void *_tmp_181_var; while ( - (_tmp_174_var = _tmp_174_rule(p)) // ',' expression + (_tmp_181_var = _tmp_181_rule(p)) // ',' expression ) { - _res = _tmp_174_var; + _res = _tmp_181_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25728,12 +26655,12 @@ _loop1_104_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_175_var; + void *_tmp_182_var; while ( - (_tmp_175_var = _tmp_175_rule(p)) // 'or' conjunction + (_tmp_182_var = _tmp_182_rule(p)) // 'or' conjunction ) { - _res = _tmp_175_var; + _res = _tmp_182_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25799,12 +26726,12 @@ _loop1_105_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_176_var; + void *_tmp_183_var; while ( - (_tmp_176_var = _tmp_176_rule(p)) // 'and' inversion + (_tmp_183_var = _tmp_183_rule(p)) // 'and' inversion ) { - _res = _tmp_176_var; + _res = _tmp_183_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26720,12 +27647,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_177_var; + void *_tmp_184_var; while ( - (_tmp_177_var = _tmp_177_rule(p)) // 'if' disjunction + (_tmp_184_var = _tmp_184_rule(p)) // 'if' disjunction ) { - _res = _tmp_177_var; + _res = _tmp_184_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26786,12 +27713,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_178_var; + void *_tmp_185_var; while ( - (_tmp_178_var = _tmp_178_rule(p)) // 'if' disjunction + (_tmp_185_var = _tmp_185_rule(p)) // 'if' disjunction ) { - _res = _tmp_178_var; + _res = _tmp_185_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26857,7 +27784,7 @@ _loop0_123_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_179_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_186_rule(p)) // starred_expression | direct_named_expression !'=' ) { _res = elem; @@ -26920,7 +27847,7 @@ _gather_122_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_179_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_186_rule(p)) // starred_expression | direct_named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) @@ -27466,12 +28393,12 @@ _loop0_133_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_180_var; + void *_tmp_187_var; while ( - (_tmp_180_var = _tmp_180_rule(p)) // ',' star_target + (_tmp_187_var = _tmp_187_rule(p)) // ',' star_target ) { - _res = _tmp_180_var; + _res = _tmp_187_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27646,12 +28573,12 @@ _loop1_136_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_181_var; + void *_tmp_188_var; while ( - (_tmp_181_var = _tmp_181_rule(p)) // ',' star_target + (_tmp_188_var = _tmp_188_rule(p)) // ',' star_target ) { - _res = _tmp_181_var; + _res = _tmp_188_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28444,12 +29371,12 @@ _loop0_148_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_182_var; + void *_tmp_189_var; while ( - (_tmp_182_var = _tmp_182_rule(p)) // star_targets '=' + (_tmp_189_var = _tmp_189_rule(p)) // star_targets '=' ) { - _res = _tmp_182_var; + _res = _tmp_189_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28510,12 +29437,12 @@ _loop0_149_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_183_var; + void *_tmp_190_var; while ( - (_tmp_183_var = _tmp_183_rule(p)) // star_targets '=' + (_tmp_190_var = _tmp_190_rule(p)) // star_targets '=' ) { - _res = _tmp_183_var; + _res = _tmp_190_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29044,15 +29971,15 @@ _tmp_157_rule(Parser *p) } D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_184_var; + void *_tmp_191_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_184_var = _tmp_184_rule(p)) // ')' | '**' + (_tmp_191_var = _tmp_191_rule(p)) // ')' | '**' ) { D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_184_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_191_var); goto done; } p->mark = _mark; @@ -29102,15 +30029,15 @@ _tmp_158_rule(Parser *p) } D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_185_var; + void *_tmp_192_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_185_var = _tmp_185_rule(p)) // ':' | '**' + (_tmp_192_var = _tmp_192_rule(p)) // ':' | '**' ) { D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_185_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_192_var); goto done; } p->mark = _mark; @@ -29123,73 +30050,301 @@ _tmp_158_rule(Parser *p) return _res; } -// _tmp_159: ',' | ')' | ':' -static void * -_tmp_159_rule(Parser *p) +// _tmp_159: ',' | ')' | ':' +static void * +_tmp_159_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // ',' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + ) + { + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); + } + { // ')' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 8)) // token=')' + ) + { + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); + } + { // ':' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + ) + { + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_161: ',' (expression ['as' star_target]) +static asdl_seq * +_loop0_161_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' (expression ['as' star_target]) + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + Token * _literal; + void *elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _tmp_193_rule(p)) // expression ['as' star_target] + ) + { + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_161_type, _seq); + D(p->level--); + return _seq; +} + +// _gather_160: (expression ['as' star_target]) _loop0_161 +static asdl_seq * +_gather_160_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // (expression ['as' star_target]) _loop0_161 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + void *elem; + asdl_seq * seq; + if ( + (elem = _tmp_193_rule(p)) // expression ['as' star_target] + && + (seq = _loop0_161_rule(p)) // _loop0_161 + ) + { + D(fprintf(stderr, "%*c+ _gather_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_160[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_163: ',' (expressions ['as' star_target]) +static asdl_seq * +_loop0_163_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // ',' + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' (expressions ['as' star_target]) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; - if ( + void *elem; + while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _tmp_194_rule(p)) // expressions ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); - _res = _literal; - goto done; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); + D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } - { // ')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 8)) // token=')' - ) - { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - { // ':' + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_163_type, _seq); + D(p->level--); + return _seq; +} + +// _gather_162: (expressions ['as' star_target]) _loop0_163 +static asdl_seq * +_gather_162_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // (expressions ['as' star_target]) _loop0_163 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); - Token * _literal; + D(fprintf(stderr, "%*c> _gather_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + void *elem; + asdl_seq * seq; if ( - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (elem = _tmp_194_rule(p)) // expressions ['as' star_target] + && + (seq = _loop0_163_rule(p)) // _loop0_163 ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); - _res = _literal; + D(fprintf(stderr, "%*c+ _gather_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c%s _gather_162[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); } _res = NULL; done: @@ -29197,9 +30352,9 @@ _tmp_159_rule(Parser *p) return _res; } -// _loop0_161: ',' (expression ['as' star_target]) +// _loop0_165: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_161_rule(Parser *p) +_loop0_165_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29223,13 +30378,13 @@ _loop0_161_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_186_rule(p)) // expression ['as' star_target] + (elem = _tmp_195_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -29254,7 +30409,7 @@ _loop0_161_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29267,14 +30422,14 @@ _loop0_161_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_161_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_165_type, _seq); D(p->level--); return _seq; } -// _gather_160: (expression ['as' star_target]) _loop0_161 +// _gather_164: (expression ['as' star_target]) _loop0_165 static asdl_seq * -_gather_160_rule(Parser *p) +_gather_164_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29283,27 +30438,27 @@ _gather_160_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_161 + { // (expression ['as' star_target]) _loop0_165 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c> _gather_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_186_rule(p)) // expression ['as' star_target] + (elem = _tmp_195_rule(p)) // expression ['as' star_target] && - (seq = _loop0_161_rule(p)) // _loop0_161 + (seq = _loop0_165_rule(p)) // _loop0_165 ) { - D(fprintf(stderr, "%*c+ _gather_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c+ _gather_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_160[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c%s _gather_164[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); } _res = NULL; done: @@ -29311,9 +30466,9 @@ _gather_160_rule(Parser *p) return _res; } -// _loop0_163: ',' (expressions ['as' star_target]) +// _loop0_167: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_163_rule(Parser *p) +_loop0_167_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29337,13 +30492,13 @@ _loop0_163_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_187_rule(p)) // expressions ['as' star_target] + (elem = _tmp_196_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -29368,7 +30523,7 @@ _loop0_163_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29381,14 +30536,14 @@ _loop0_163_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_163_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_167_type, _seq); D(p->level--); return _seq; } -// _gather_162: (expressions ['as' star_target]) _loop0_163 +// _gather_166: (expressions ['as' star_target]) _loop0_167 static asdl_seq * -_gather_162_rule(Parser *p) +_gather_166_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29397,27 +30552,144 @@ _gather_162_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_163 + { // (expressions ['as' star_target]) _loop0_167 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c> _gather_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_187_rule(p)) // expressions ['as' star_target] + (elem = _tmp_196_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_163_rule(p)) // _loop0_163 + (seq = _loop0_167_rule(p)) // _loop0_167 ) { - D(fprintf(stderr, "%*c+ _gather_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c+ _gather_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_162[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c%s _gather_166[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_168: 'as' NAME +static void * +_tmp_168_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty name_var; + if ( + (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + && + (name_var = _PyPegen_name_token(p)) // NAME + ) + { + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = _PyPegen_dummy_name(p, _keyword, name_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_169: 'as' NAME +static void * +_tmp_169_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty name_var; + if ( + (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + && + (name_var = _PyPegen_name_token(p)) // NAME + ) + { + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = _PyPegen_dummy_name(p, _keyword, name_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_170: 'as' NAME +static void * +_tmp_170_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty name_var; + if ( + (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + && + (name_var = _PyPegen_name_token(p)) // NAME + ) + { + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = _PyPegen_dummy_name(p, _keyword, name_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; done: @@ -29425,9 +30697,9 @@ _gather_162_rule(Parser *p) return _res; } -// _tmp_164: 'as' NAME +// _tmp_171: '->' expression static void * -_tmp_164_rule(Parser *p) +_tmp_171_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29436,27 +30708,27 @@ _tmp_164_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'as' NAME + { // '->' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - Token * _keyword; - expr_ty name_var; + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + Token * _literal; + expr_ty expression_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_literal = _PyPegen_expect_token(p, 51)) // token='->' && - (name_var = _PyPegen_name_token(p)) // NAME + (expression_var = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - _res = _PyPegen_dummy_name(p, _keyword, name_var); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + _res = _PyPegen_dummy_name(p, _literal, expression_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; done: @@ -29464,9 +30736,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: 'as' NAME +// _tmp_172: '(' arguments? ')' static void * -_tmp_165_rule(Parser *p) +_tmp_172_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29475,27 +30747,31 @@ _tmp_165_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'as' NAME + { // '(' arguments? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - Token * _keyword; - expr_ty name_var; + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + Token * _literal; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (name_var = _PyPegen_name_token(p)) // NAME + (_opt_var = arguments_rule(p), 1) // arguments? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - _res = _PyPegen_dummy_name(p, _keyword, name_var); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; done: @@ -29503,9 +30779,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _loop0_167: ',' double_starred_kvpair +// _loop0_174: ',' double_starred_kvpair static asdl_seq * -_loop0_167_rule(Parser *p) +_loop0_174_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29529,7 +30805,7 @@ _loop0_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -29560,7 +30836,7 @@ _loop0_167_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29573,14 +30849,14 @@ _loop0_167_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_167_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_174_type, _seq); D(p->level--); return _seq; } -// _gather_166: double_starred_kvpair _loop0_167 +// _gather_173: double_starred_kvpair _loop0_174 static asdl_seq * -_gather_166_rule(Parser *p) +_gather_173_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29589,27 +30865,27 @@ _gather_166_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_167 + { // double_starred_kvpair _loop0_174 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_167")); + D(fprintf(stderr, "%*c> _gather_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_174")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_167_rule(p)) // _loop0_167 + (seq = _loop0_174_rule(p)) // _loop0_174 ) { - D(fprintf(stderr, "%*c+ _gather_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_167")); + D(fprintf(stderr, "%*c+ _gather_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_174")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_166[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_167")); + D(fprintf(stderr, "%*c%s _gather_173[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_174")); } _res = NULL; done: @@ -29617,9 +30893,9 @@ _gather_166_rule(Parser *p) return _res; } -// _tmp_168: '}' | ',' +// _tmp_175: '}' | ',' static void * -_tmp_168_rule(Parser *p) +_tmp_175_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29633,18 +30909,18 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -29652,18 +30928,18 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -29672,9 +30948,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: star_targets '=' +// _tmp_176: star_targets '=' static void * -_tmp_169_rule(Parser *p) +_tmp_176_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29688,7 +30964,7 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -29697,7 +30973,7 @@ _tmp_169_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29707,7 +30983,7 @@ _tmp_169_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -29716,9 +30992,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: '.' | '...' +// _tmp_177: '.' | '...' static void * -_tmp_170_rule(Parser *p) +_tmp_177_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29732,18 +31008,18 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29751,18 +31027,18 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29771,9 +31047,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: '.' | '...' +// _tmp_178: '.' | '...' static void * -_tmp_171_rule(Parser *p) +_tmp_178_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29787,18 +31063,18 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -29806,18 +31082,18 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -29826,9 +31102,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: '@' named_expression NEWLINE +// _tmp_179: '@' named_expression NEWLINE static void * -_tmp_172_rule(Parser *p) +_tmp_179_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29842,7 +31118,7 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -29854,7 +31130,7 @@ _tmp_172_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29864,7 +31140,7 @@ _tmp_172_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -29873,9 +31149,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _tmp_173: ',' star_expression +// _tmp_180: ',' star_expression static void * -_tmp_173_rule(Parser *p) +_tmp_180_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29889,7 +31165,7 @@ _tmp_173_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -29898,7 +31174,7 @@ _tmp_173_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29908,7 +31184,7 @@ _tmp_173_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -29917,9 +31193,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _tmp_174: ',' expression +// _tmp_181: ',' expression static void * -_tmp_174_rule(Parser *p) +_tmp_181_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29933,7 +31209,7 @@ _tmp_174_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -29942,7 +31218,7 @@ _tmp_174_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29952,7 +31228,7 @@ _tmp_174_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -29961,9 +31237,9 @@ _tmp_174_rule(Parser *p) return _res; } -// _tmp_175: 'or' conjunction +// _tmp_182: 'or' conjunction static void * -_tmp_175_rule(Parser *p) +_tmp_182_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29977,7 +31253,7 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -29986,7 +31262,7 @@ _tmp_175_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -29996,7 +31272,7 @@ _tmp_175_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -30005,9 +31281,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: 'and' inversion +// _tmp_183: 'and' inversion static void * -_tmp_176_rule(Parser *p) +_tmp_183_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30021,7 +31297,7 @@ _tmp_176_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -30030,7 +31306,7 @@ _tmp_176_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30040,7 +31316,7 @@ _tmp_176_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -30049,9 +31325,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: 'if' disjunction +// _tmp_184: 'if' disjunction static void * -_tmp_177_rule(Parser *p) +_tmp_184_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30065,7 +31341,7 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -30074,7 +31350,7 @@ _tmp_177_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30084,7 +31360,7 @@ _tmp_177_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -30093,9 +31369,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: 'if' disjunction +// _tmp_185: 'if' disjunction static void * -_tmp_178_rule(Parser *p) +_tmp_185_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30109,7 +31385,7 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -30118,7 +31394,7 @@ _tmp_178_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30128,7 +31404,7 @@ _tmp_178_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -30137,9 +31413,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: starred_expression | direct_named_expression !'=' +// _tmp_186: starred_expression | direct_named_expression !'=' static void * -_tmp_179_rule(Parser *p) +_tmp_186_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30153,18 +31429,18 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // direct_named_expression !'=' @@ -30172,7 +31448,7 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); expr_ty direct_named_expression_var; if ( (direct_named_expression_var = direct_named_expression_rule(p)) // direct_named_expression @@ -30180,12 +31456,12 @@ _tmp_179_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); _res = direct_named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "direct_named_expression !'='")); } _res = NULL; @@ -30194,9 +31470,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: ',' star_target +// _tmp_187: ',' star_target static void * -_tmp_180_rule(Parser *p) +_tmp_187_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30210,7 +31486,7 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -30219,7 +31495,7 @@ _tmp_180_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30229,7 +31505,7 @@ _tmp_180_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -30238,9 +31514,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _tmp_181: ',' star_target +// _tmp_188: ',' star_target static void * -_tmp_181_rule(Parser *p) +_tmp_188_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30254,7 +31530,7 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -30263,7 +31539,7 @@ _tmp_181_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30273,7 +31549,7 @@ _tmp_181_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -30282,9 +31558,9 @@ _tmp_181_rule(Parser *p) return _res; } -// _tmp_182: star_targets '=' +// _tmp_189: star_targets '=' static void * -_tmp_182_rule(Parser *p) +_tmp_189_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30298,7 +31574,7 @@ _tmp_182_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -30307,12 +31583,12 @@ _tmp_182_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_189[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -30321,9 +31597,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: star_targets '=' +// _tmp_190: star_targets '=' static void * -_tmp_183_rule(Parser *p) +_tmp_190_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30337,7 +31613,7 @@ _tmp_183_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -30346,12 +31622,12 @@ _tmp_183_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_190[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_190[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -30360,9 +31636,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _tmp_184: ')' | '**' +// _tmp_191: ')' | '**' static void * -_tmp_184_rule(Parser *p) +_tmp_191_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30376,18 +31652,18 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -30395,18 +31671,18 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -30415,9 +31691,9 @@ _tmp_184_rule(Parser *p) return _res; } -// _tmp_185: ':' | '**' +// _tmp_192: ':' | '**' static void * -_tmp_185_rule(Parser *p) +_tmp_192_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30431,18 +31707,18 @@ _tmp_185_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -30450,18 +31726,18 @@ _tmp_185_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -30470,9 +31746,9 @@ _tmp_185_rule(Parser *p) return _res; } -// _tmp_186: expression ['as' star_target] +// _tmp_193: expression ['as' star_target] static void * -_tmp_186_rule(Parser *p) +_tmp_193_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30486,22 +31762,22 @@ _tmp_186_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_188_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_197_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -30510,9 +31786,9 @@ _tmp_186_rule(Parser *p) return _res; } -// _tmp_187: expressions ['as' star_target] +// _tmp_194: expressions ['as' star_target] static void * -_tmp_187_rule(Parser *p) +_tmp_194_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30526,22 +31802,22 @@ _tmp_187_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_189_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_198_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_194[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_194[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -30550,9 +31826,89 @@ _tmp_187_rule(Parser *p) return _res; } -// _tmp_188: 'as' star_target +// _tmp_195: expression ['as' star_target] static void * -_tmp_188_rule(Parser *p) +_tmp_195_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // expression ['as' star_target] + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty expression_var; + if ( + (expression_var = expression_rule(p)) // expression + && + (_opt_var = _tmp_199_rule(p), 1) // ['as' star_target] + ) + { + D(fprintf(stderr, "%*c+ _tmp_195[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + _res = _PyPegen_dummy_name(p, expression_var, _opt_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_195[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_196: expressions ['as' star_target] +static void * +_tmp_196_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // expressions ['as' star_target] + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty expressions_var; + if ( + (expressions_var = expressions_rule(p)) // expressions + && + (_opt_var = _tmp_200_rule(p), 1) // ['as' star_target] + ) + { + D(fprintf(stderr, "%*c+ _tmp_196[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_196[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_197: 'as' star_target +static void * +_tmp_197_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30566,7 +31922,7 @@ _tmp_188_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30575,12 +31931,12 @@ _tmp_188_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -30589,9 +31945,9 @@ _tmp_188_rule(Parser *p) return _res; } -// _tmp_189: 'as' star_target +// _tmp_198: 'as' star_target static void * -_tmp_189_rule(Parser *p) +_tmp_198_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30605,7 +31961,7 @@ _tmp_189_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -30614,12 +31970,90 @@ _tmp_189_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_189[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_199: 'as' star_target +static void * +_tmp_199_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' star_target + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + Token * _keyword; + expr_ty star_target_var; + if ( + (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + && + (star_target_var = star_target_rule(p)) // star_target + ) + { + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + _res = _PyPegen_dummy_name(p, _keyword, star_target_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_200: 'as' star_target +static void * +_tmp_200_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' star_target + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + Token * _keyword; + expr_ty star_target_var; + if ( + (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + && + (star_target_var = star_target_rule(p)) // star_target + ) + { + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + _res = _PyPegen_dummy_name(p, _keyword, star_target_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; From webhook-mailer at python.org Wed Apr 21 13:20:52 2021 From: webhook-mailer at python.org (ethanfurman) Date: Wed, 21 Apr 2021 17:20:52 -0000 Subject: [Python-checkins] bpo-38659: [Enum] add _simple_enum decorator (GH-25497) Message-ID: https://github.com/python/cpython/commit/a02cb474f9c097c83cd444a47e9fb5f99b4aaf45 commit: a02cb474f9c097c83cd444a47e9fb5f99b4aaf45 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-21T10:20:44-07:00 summary: bpo-38659: [Enum] add _simple_enum decorator (GH-25497) add: * `_simple_enum` decorator to transform a normal class into an enum * `_test_simple_enum` function to compare * `_old_convert_` to enable checking `_convert_` generated enums `_simple_enum` takes a normal class and converts it into an enum: @simple_enum(Enum) class Color: RED = 1 GREEN = 2 BLUE = 3 `_old_convert_` works much like` _convert_` does, using the original logic: # in a test file import socket, enum CheckedAddressFamily = enum._old_convert_( enum.IntEnum, 'AddressFamily', 'socket', lambda C: C.isupper() and C.startswith('AF_'), source=_socket, ) `_test_simple_enum` takes a traditional enum and a simple enum and compares the two: # in the REPL or the same module as Color class CheckedColor(Enum): RED = 1 GREEN = 2 BLUE = 3 _test_simple_enum(CheckedColor, Color) _test_simple_enum(CheckedAddressFamily, socket.AddressFamily) Any important differences will raise a TypeError files: A Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst M Doc/library/enum.rst M Lib/ast.py M Lib/enum.py M Lib/http/__init__.py M Lib/pstats.py M Lib/re.py M Lib/ssl.py M Lib/test/test_ast.py M Lib/test/test_enum.py M Lib/test/test_httplib.py M Lib/test/test_pstats.py M Lib/test/test_signal.py M Lib/test/test_socket.py M Lib/test/test_ssl.py M Lib/test/test_unicode.py M Lib/test/test_uuid.py M Lib/tkinter/__init__.py M Lib/tkinter/test/test_tkinter/test_misc.py M Lib/uuid.py diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index bc88303b789de..91c214eb668d1 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -621,4 +621,3 @@ Utilites and Decorators Traceback (most recent call last): ... ValueError: duplicate values found in : FOUR -> THREE - diff --git a/Lib/ast.py b/Lib/ast.py index e46ab43d5cfd3..703f68ace6068 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -27,7 +27,7 @@ import sys from _ast import * from contextlib import contextmanager, nullcontext -from enum import IntEnum, auto +from enum import IntEnum, auto, _simple_enum def parse(source, filename='', mode='exec', *, @@ -636,7 +636,8 @@ class Param(expr_context): # We unparse those infinities to INFSTR. _INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) -class _Precedence(IntEnum): + at _simple_enum(IntEnum) +class _Precedence: """Precedence table that originated from python grammar.""" TUPLE = auto() diff --git a/Lib/enum.py b/Lib/enum.py index 17deb4b9c05ae..82be1fbaf70b0 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -391,13 +391,15 @@ def __prepare__(metacls, cls, bases, **kwds): ) return enum_dict - def __new__(metacls, cls, bases, classdict, boundary=None, **kwds): + def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **kwds): # an Enum class is final once enumeration items have been defined; it # cannot be mixed with other types (int, float, etc.) if it has an # inherited __new__ unless a new __new__ is defined (or the resulting # class will fail). # # remove any keys listed in _ignore_ + if _simple: + return super().__new__(metacls, cls, bases, classdict, **kwds) classdict.setdefault('_ignore_', []).append('_ignore_') ignore = classdict['_ignore_'] for key in ignore: @@ -695,7 +697,7 @@ def __setattr__(cls, name, value): """ member_map = cls.__dict__.get('_member_map_', {}) if name in member_map: - raise AttributeError('Cannot reassign members.') + raise AttributeError('Cannot reassign member %r.' % (name, )) super().__setattr__(name, value) def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1, boundary=None): @@ -750,7 +752,8 @@ def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, s return metacls.__new__(metacls, class_name, bases, classdict, boundary=boundary) - def _convert_(cls, name, module, filter, source=None, boundary=None): + def _convert_(cls, name, module, filter, source=None, *, boundary=None): + """ Create a new Enum subclass that replaces a collection of global constants """ @@ -777,7 +780,10 @@ def _convert_(cls, name, module, filter, source=None, boundary=None): except TypeError: # unless some values aren't comparable, in which case sort by name members.sort(key=lambda t: t[0]) - cls = cls(name, members, module=module, boundary=boundary or KEEP) + body = {t[0]: t[1] for t in members} + body['__module__'] = module + tmp_cls = type(name, (object, ), body) + cls = _simple_enum(etype=cls, boundary=boundary or KEEP)(tmp_cls) cls.__reduce_ex__ = _reduce_ex_by_name global_enum(cls) module_globals[name] = cls @@ -855,7 +861,7 @@ def _find_new_(classdict, member_type, first_enum): __new__ = classdict.get('__new__', None) # should __new__ be saved as __new_member__ later? - save_new = __new__ is not None + save_new = first_enum is not None and __new__ is not None if __new__ is None: # check all possibles for __new_member__ before falling back to @@ -879,7 +885,7 @@ def _find_new_(classdict, member_type, first_enum): # if a non-object.__new__ is used then whatever value/tuple was # assigned to the enum member name will be passed to __new__ and to the # new enum member's __init__ - if __new__ is object.__new__: + if first_enum is None or __new__ in (Enum.__new__, object.__new__): use_args = False else: use_args = True @@ -1189,7 +1195,7 @@ def _missing_(cls, value): pseudo_member = object.__new__(cls) else: pseudo_member = (__new__ or cls._member_type_.__new__)(cls, value) - if not hasattr(pseudo_member, 'value'): + if not hasattr(pseudo_member, '_value_'): pseudo_member._value_ = value if member_value: pseudo_member._name_ = '|'.join([ @@ -1383,3 +1389,308 @@ def global_enum(cls): cls.__repr__ = global_enum_repr sys.modules[cls.__module__].__dict__.update(cls.__members__) return cls + +def _simple_enum(etype=Enum, *, boundary=None, use_args=None): + """ + Class decorator that converts a normal class into an :class:`Enum`. No + safety checks are done, and some advanced behavior (such as + :func:`__init_subclass__`) is not available. Enum creation can be faster + using :func:`simple_enum`. + + >>> from enum import Enum, _simple_enum + >>> @_simple_enum(Enum) + ... class Color: + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> Color + + """ + def convert_class(cls): + nonlocal use_args + cls_name = cls.__name__ + if use_args is None: + use_args = etype._use_args_ + __new__ = cls.__dict__.get('__new__') + if __new__ is not None: + new_member = __new__.__func__ + else: + new_member = etype._member_type_.__new__ + attrs = {} + body = {} + if __new__ is not None: + body['__new_member__'] = new_member + body['_new_member_'] = new_member + body['_use_args_'] = use_args + body['_generate_next_value_'] = gnv = etype._generate_next_value_ + body['_member_names_'] = member_names = [] + body['_member_map_'] = member_map = {} + body['_value2member_map_'] = value2member_map = {} + body['_member_type_'] = member_type = etype._member_type_ + if issubclass(etype, Flag): + body['_boundary_'] = boundary or etype._boundary_ + body['_flag_mask_'] = None + body['_all_bits_'] = None + body['_inverted_'] = None + for name, obj in cls.__dict__.items(): + if name in ('__dict__', '__weakref__'): + continue + if _is_dunder(name) or _is_private(cls_name, name) or _is_sunder(name) or _is_descriptor(obj): + body[name] = obj + else: + attrs[name] = obj + if cls.__dict__.get('__doc__') is None: + body['__doc__'] = 'An enumeration.' + # + # double check that repr and friends are not the mixin's or various + # things break (such as pickle) + # however, if the method is defined in the Enum itself, don't replace + # it + enum_class = type(cls_name, (etype, ), body, boundary=boundary, _simple=True) + for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): + if name in body: + continue + class_method = getattr(enum_class, name) + obj_method = getattr(member_type, name, None) + enum_method = getattr(etype, name, None) + if obj_method is not None and obj_method is class_method: + setattr(enum_class, name, enum_method) + gnv_last_values = [] + if issubclass(enum_class, Flag): + # Flag / IntFlag + single_bits = multi_bits = 0 + for name, value in attrs.items(): + if isinstance(value, auto) and auto.value is _auto_null: + value = gnv(name, 1, len(member_names), gnv_last_values) + if value in value2member_map: + # an alias to an existing member + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = value2member_map[value] + else: + # create the member + if use_args: + if not isinstance(value, tuple): + value = (value, ) + member = new_member(enum_class, *value) + value = value[0] + else: + member = new_member(enum_class) + if __new__ is None: + member._value_ = value + member._name_ = name + member.__objclass__ = enum_class + member.__init__(value) + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = member + member._sort_order_ = len(member_names) + value2member_map[value] = member + if _is_single_bit(value): + # not a multi-bit alias, record in _member_names_ and _flag_mask_ + member_names.append(name) + single_bits |= value + else: + multi_bits |= value + gnv_last_values.append(value) + enum_class._flag_mask_ = single_bits + enum_class._all_bits_ = 2 ** ((single_bits|multi_bits).bit_length()) - 1 + # set correct __iter__ + member_list = [m._value_ for m in enum_class] + if member_list != sorted(member_list): + enum_class._iter_member_ = enum_class._iter_member_by_def_ + else: + # Enum / IntEnum / StrEnum + for name, value in attrs.items(): + if isinstance(value, auto): + if value.value is _auto_null: + value.value = gnv(name, 1, len(member_names), gnv_last_values) + value = value.value + if value in value2member_map: + # an alias to an existing member + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = value2member_map[value] + else: + # create the member + if use_args: + if not isinstance(value, tuple): + value = (value, ) + member = new_member(enum_class, *value) + value = value[0] + else: + member = new_member(enum_class) + if __new__ is None: + member._value_ = value + member._name_ = name + member.__objclass__ = enum_class + member.__init__(value) + member._sort_order_ = len(member_names) + redirect = property() + redirect.__set_name__(enum_class, name) + setattr(enum_class, name, redirect) + member_map[name] = member + value2member_map[value] = member + member_names.append(name) + gnv_last_values.append(value) + if '__new__' in body: + enum_class.__new_member__ = enum_class.__new__ + enum_class.__new__ = Enum.__new__ + return enum_class + return convert_class + +def _test_simple_enum(checked_enum, simple_enum): + """ + A function that can be used to test an enum created with :func:`_simple_enum` + against the version created by subclassing :class:`Enum`:: + + >>> from enum import Enum, _simple_enum, _test_simple_enum + >>> @_simple_enum(Enum) + ... class Color: + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> class CheckedColor(Enum): + ... RED = auto() + ... GREEN = auto() + ... BLUE = auto() + >>> _test_simple_enum(CheckedColor, Color) + + If differences are found, a :exc:`TypeError` is raised. + """ + failed = [] + if checked_enum.__dict__ != simple_enum.__dict__: + checked_dict = checked_enum.__dict__ + checked_keys = list(checked_dict.keys()) + simple_dict = simple_enum.__dict__ + simple_keys = list(simple_dict.keys()) + member_names = set( + list(checked_enum._member_map_.keys()) + + list(simple_enum._member_map_.keys()) + ) + for key in set(checked_keys + simple_keys): + if key in ('__module__', '_member_map_', '_value2member_map_'): + # keys known to be different + continue + elif key in member_names: + # members are checked below + continue + elif key not in simple_keys: + failed.append("missing key: %r" % (key, )) + elif key not in checked_keys: + failed.append("extra key: %r" % (key, )) + else: + checked_value = checked_dict[key] + simple_value = simple_dict[key] + if callable(checked_value): + continue + if key == '__doc__': + # remove all spaces/tabs + compressed_checked_value = checked_value.replace(' ','').replace('\t','') + compressed_simple_value = simple_value.replace(' ','').replace('\t','') + if compressed_checked_value != compressed_simple_value: + failed.append("%r:\n %s\n %s" % ( + key, + "checked -> %r" % (checked_value, ), + "simple -> %r" % (simple_value, ), + )) + elif checked_value != simple_value: + failed.append("%r:\n %s\n %s" % ( + key, + "checked -> %r" % (checked_value, ), + "simple -> %r" % (simple_value, ), + )) + failed.sort() + for name in member_names: + failed_member = [] + if name not in simple_keys: + failed.append('missing member from simple enum: %r' % name) + elif name not in checked_keys: + failed.append('extra member in simple enum: %r' % name) + else: + checked_member_dict = checked_enum[name].__dict__ + checked_member_keys = list(checked_member_dict.keys()) + simple_member_dict = simple_enum[name].__dict__ + simple_member_keys = list(simple_member_dict.keys()) + for key in set(checked_member_keys + simple_member_keys): + if key in ('__module__', '__objclass__'): + # keys known to be different + continue + elif key not in simple_member_keys: + failed_member.append("missing key %r not in the simple enum member %r" % (key, name)) + elif key not in checked_member_keys: + failed_member.append("extra key %r in simple enum member %r" % (key, name)) + else: + checked_value = checked_member_dict[key] + simple_value = simple_member_dict[key] + if checked_value != simple_value: + failed_member.append("%r:\n %s\n %s" % ( + key, + "checked member -> %r" % (checked_value, ), + "simple member -> %r" % (simple_value, ), + )) + if failed_member: + failed.append('%r member mismatch:\n %s' % ( + name, '\n '.join(failed_member), + )) + for method in ( + '__str__', '__repr__', '__reduce_ex__', '__format__', + '__getnewargs_ex__', '__getnewargs__', '__reduce_ex__', '__reduce__' + ): + if method in simple_keys and method in checked_keys: + # cannot compare functions, and it exists in both, so we're good + continue + elif method not in simple_keys and method not in checked_keys: + # method is inherited -- check it out + checked_method = getattr(checked_enum, method, None) + simple_method = getattr(simple_enum, method, None) + if hasattr(checked_method, '__func__'): + checked_method = checked_method.__func__ + simple_method = simple_method.__func__ + if checked_method != simple_method: + failed.append("%r: %-30s %s" % ( + method, + "checked -> %r" % (checked_method, ), + "simple -> %r" % (simple_method, ), + )) + else: + # if the method existed in only one of the enums, it will have been caught + # in the first checks above + pass + if failed: + raise TypeError('enum mismatch:\n %s' % '\n '.join(failed)) + +def _old_convert_(etype, name, module, filter, source=None, *, boundary=None): + """ + Create a new Enum subclass that replaces a collection of global constants + """ + # convert all constants from source (or module) that pass filter() to + # a new Enum called name, and export the enum and its members back to + # module; + # also, replace the __reduce_ex__ method so unpickling works in + # previous Python versions + module_globals = sys.modules[module].__dict__ + if source: + source = source.__dict__ + else: + source = module_globals + # _value2member_map_ is populated in the same order every time + # for a consistent reverse mapping of number to name when there + # are multiple names for the same number. + members = [ + (name, value) + for name, value in source.items() + if filter(name)] + try: + # sort by value + members.sort(key=lambda t: (t[1], t[0])) + except TypeError: + # unless some values aren't comparable, in which case sort by name + members.sort(key=lambda t: t[0]) + cls = etype(name, members, module=module, boundary=boundary or KEEP) + cls.__reduce_ex__ = _reduce_ex_by_name + cls.__repr__ = global_enum_repr + return cls diff --git a/Lib/http/__init__.py b/Lib/http/__init__.py index 37be765349ea0..8b980e24a5603 100644 --- a/Lib/http/__init__.py +++ b/Lib/http/__init__.py @@ -1,8 +1,10 @@ -from enum import IntEnum +from enum import IntEnum, _simple_enum __all__ = ['HTTPStatus'] -class HTTPStatus(IntEnum): + + at _simple_enum(IntEnum) +class HTTPStatus: """HTTP status codes and reason phrases Status codes from the following RFCs are all observed: diff --git a/Lib/pstats.py b/Lib/pstats.py index 0f93ae02c9507..e77459d38b33e 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -26,14 +26,15 @@ import marshal import re -from enum import Enum +from enum import StrEnum, _simple_enum from functools import cmp_to_key from dataclasses import dataclass from typing import Dict __all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"] -class SortKey(str, Enum): + at _simple_enum(StrEnum) +class SortKey: CALLS = 'calls', 'ncalls' CUMULATIVE = 'cumulative', 'cumtime' FILENAME = 'filename', 'module' diff --git a/Lib/re.py b/Lib/re.py index 5e40c7b9bb17d..ea41217ce08c2 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -143,7 +143,8 @@ __version__ = "2.2.1" @enum.global_enum -class RegexFlag(enum.IntFlag, boundary=enum.KEEP): + at enum._simple_enum(enum.IntFlag, boundary=enum.KEEP) +class RegexFlag: ASCII = A = sre_compile.SRE_FLAG_ASCII # assume ascii "locale" IGNORECASE = I = sre_compile.SRE_FLAG_IGNORECASE # ignore case LOCALE = L = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale diff --git a/Lib/ssl.py b/Lib/ssl.py index d631805d6cabe..620ddaa93f962 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -94,6 +94,7 @@ import os from collections import namedtuple from enum import Enum as _Enum, IntEnum as _IntEnum, IntFlag as _IntFlag +from enum import _simple_enum, _test_simple_enum import _ssl # if we can't import it, let the error propagate @@ -155,7 +156,8 @@ _SSLv2_IF_EXISTS = getattr(_SSLMethod, 'PROTOCOL_SSLv2', None) -class TLSVersion(_IntEnum): + at _simple_enum(_IntEnum) +class TLSVersion: MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED SSLv3 = _ssl.PROTO_SSLv3 TLSv1 = _ssl.PROTO_TLSv1 @@ -165,7 +167,8 @@ class TLSVersion(_IntEnum): MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED -class _TLSContentType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSContentType: """Content types (record layer) See RFC 8446, section B.1 @@ -179,7 +182,8 @@ class _TLSContentType(_IntEnum): INNER_CONTENT_TYPE = 0x101 -class _TLSAlertType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSAlertType: """Alert types for TLSContentType.ALERT messages See RFC 8466, section B.2 @@ -220,7 +224,8 @@ class _TLSAlertType(_IntEnum): NO_APPLICATION_PROTOCOL = 120 -class _TLSMessageType(_IntEnum): + at _simple_enum(_IntEnum) +class _TLSMessageType: """Message types (handshake protocol) See RFC 8446, section B.3 diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 682495839966b..80d24e94040bc 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -1,6 +1,7 @@ import ast import builtins import dis +import enum import os import sys import types @@ -698,6 +699,35 @@ def test_constant_as_name(self): with self.assertRaisesRegex(ValueError, f"Name node can't be used with '{constant}' constant"): compile(expr, "", "eval") + def test_precedence_enum(self): + class _Precedence(enum.IntEnum): + """Precedence table that originated from python grammar.""" + TUPLE = enum.auto() + YIELD = enum.auto() # 'yield', 'yield from' + TEST = enum.auto() # 'if'-'else', 'lambda' + OR = enum.auto() # 'or' + AND = enum.auto() # 'and' + NOT = enum.auto() # 'not' + CMP = enum.auto() # '<', '>', '==', '>=', '<=', '!=', + # 'in', 'not in', 'is', 'is not' + EXPR = enum.auto() + BOR = EXPR # '|' + BXOR = enum.auto() # '^' + BAND = enum.auto() # '&' + SHIFT = enum.auto() # '<<', '>>' + ARITH = enum.auto() # '+', '-' + TERM = enum.auto() # '*', '@', '/', '%', '//' + FACTOR = enum.auto() # unary '+', '-', '~' + POWER = enum.auto() # '**' + AWAIT = enum.auto() # 'await' + ATOM = enum.auto() + def next(self): + try: + return self.__class__(self + 1) + except ValueError: + return self + enum._test_simple_enum(_Precedence, ast._Precedence) + class ASTHelpers_Test(unittest.TestCase): maxDiff = None diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index b9d7f96a3e948..d946dd520da95 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -8,7 +8,7 @@ import threading from collections import OrderedDict from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto -from enum import STRICT, CONFORM, EJECT, KEEP +from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum from io import StringIO from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL from test import support @@ -2511,10 +2511,13 @@ class Bizarre(Flag, boundary=KEEP): d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 7', Iron, 7) + # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) + # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) + # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3053,16 +3056,20 @@ class Space(IntFlag, boundary=EJECT): EIGHT = 8 self.assertIs(Space._boundary_, EJECT) # + # class Bizarre(IntFlag, boundary=KEEP): b = 3 c = 4 d = 6 # self.assertRaisesRegex(ValueError, 'invalid value: 5', Iron, 5) + # self.assertIs(Water(7), Water.ONE|Water.TWO) self.assertIs(Water(~9), Water.TWO) + # self.assertEqual(Space(7), 7) self.assertTrue(type(Space(7)) is int) + # self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) @@ -3577,6 +3584,41 @@ def test_inspect_classify_class_attrs(self): if failed: self.fail("result does not equal expected, see print above") + def test_test_simple_enum(self): + @_simple_enum(Enum) + class SimpleColor: + RED = 1 + GREEN = 2 + BLUE = 3 + class CheckedColor(Enum): + RED = 1 + GREEN = 2 + BLUE = 3 + self.assertTrue(_test_simple_enum(CheckedColor, SimpleColor) is None) + SimpleColor.GREEN._value_ = 9 + self.assertRaisesRegex( + TypeError, "enum mismatch", + _test_simple_enum, CheckedColor, SimpleColor, + ) + class CheckedMissing(IntFlag, boundary=KEEP): + SIXTY_FOUR = 64 + ONE_TWENTY_EIGHT = 128 + TWENTY_FORTY_EIGHT = 2048 + ALL = 2048 + 128 + 64 + 12 + CM = CheckedMissing + self.assertEqual(list(CheckedMissing), [CM.SIXTY_FOUR, CM.ONE_TWENTY_EIGHT, CM.TWENTY_FORTY_EIGHT]) + # + @_simple_enum(IntFlag, boundary=KEEP) + class Missing: + SIXTY_FOUR = 64 + ONE_TWENTY_EIGHT = 128 + TWENTY_FORTY_EIGHT = 2048 + ALL = 2048 + 128 + 64 + 12 + M = Missing + self.assertEqual(list(CheckedMissing), [M.SIXTY_FOUR, M.ONE_TWENTY_EIGHT, M.TWENTY_FORTY_EIGHT]) + # + _test_simple_enum(CheckedMissing, Missing) + class MiscTestCase(unittest.TestCase): def test__all__(self): @@ -3592,6 +3634,13 @@ def test__all__(self): CONVERT_TEST_NAME_E = 5 CONVERT_TEST_NAME_F = 5 +CONVERT_STRING_TEST_NAME_D = 5 +CONVERT_STRING_TEST_NAME_C = 5 +CONVERT_STRING_TEST_NAME_B = 5 +CONVERT_STRING_TEST_NAME_A = 5 # This one should sort first. +CONVERT_STRING_TEST_NAME_E = 5 +CONVERT_STRING_TEST_NAME_F = 5 + class TestIntEnumConvert(unittest.TestCase): def test_convert_value_lookup_priority(self): test_type = enum.IntEnum._convert_( @@ -3639,14 +3688,16 @@ def test_convert_raise(self): filter=lambda x: x.startswith('CONVERT_TEST_')) def test_convert_repr_and_str(self): + # reset global constants, as previous tests could have converted the + # integer values to enums module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( 'UnittestConvert', module, - filter=lambda x: x.startswith('CONVERT_TEST_')) - self.assertEqual(repr(test_type.CONVERT_TEST_NAME_A), '%s.CONVERT_TEST_NAME_A' % module) - self.assertEqual(str(test_type.CONVERT_TEST_NAME_A), 'CONVERT_TEST_NAME_A') - self.assertEqual(format(test_type.CONVERT_TEST_NAME_A), '5') + filter=lambda x: x.startswith('CONVERT_STRING_TEST_')) + self.assertEqual(repr(test_type.CONVERT_STRING_TEST_NAME_A), '%s.CONVERT_STRING_TEST_NAME_A' % module) + self.assertEqual(str(test_type.CONVERT_STRING_TEST_NAME_A), 'CONVERT_STRING_TEST_NAME_A') + self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') # global names for StrEnum._convert_ test CONVERT_STR_TEST_2 = 'goodbye' diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 5fb45924e5082..438c2ebbb3d4d 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,3 +1,4 @@ +import enum import errno from http import client, HTTPStatus import io @@ -524,6 +525,150 @@ def test_dir_with_added_behavior_on_status(self): # see issue40084 self.assertTrue({'description', 'name', 'phrase', 'value'} <= set(dir(HTTPStatus(404)))) + def test_simple_httpstatus(self): + class CheckedHTTPStatus(enum.IntEnum): + """HTTP status codes and reason phrases + + Status codes from the following RFCs are all observed: + + * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616 + * RFC 6585: Additional HTTP Status Codes + * RFC 3229: Delta encoding in HTTP + * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518 + * RFC 5842: Binding Extensions to WebDAV + * RFC 7238: Permanent Redirect + * RFC 2295: Transparent Content Negotiation in HTTP + * RFC 2774: An HTTP Extension Framework + * RFC 7725: An HTTP Status Code to Report Legal Obstacles + * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) + * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) + * RFC 8297: An HTTP Status Code for Indicating Hints + * RFC 8470: Using Early Data in HTTP + """ + def __new__(cls, value, phrase, description=''): + obj = int.__new__(cls, value) + obj._value_ = value + + obj.phrase = phrase + obj.description = description + return obj + # informational + CONTINUE = 100, 'Continue', 'Request received, please continue' + SWITCHING_PROTOCOLS = (101, 'Switching Protocols', + 'Switching to new protocol; obey Upgrade header') + PROCESSING = 102, 'Processing' + EARLY_HINTS = 103, 'Early Hints' + # success + OK = 200, 'OK', 'Request fulfilled, document follows' + CREATED = 201, 'Created', 'Document created, URL follows' + ACCEPTED = (202, 'Accepted', + 'Request accepted, processing continues off-line') + NON_AUTHORITATIVE_INFORMATION = (203, + 'Non-Authoritative Information', 'Request fulfilled from cache') + NO_CONTENT = 204, 'No Content', 'Request fulfilled, nothing follows' + RESET_CONTENT = 205, 'Reset Content', 'Clear input form for further input' + PARTIAL_CONTENT = 206, 'Partial Content', 'Partial content follows' + MULTI_STATUS = 207, 'Multi-Status' + ALREADY_REPORTED = 208, 'Already Reported' + IM_USED = 226, 'IM Used' + # redirection + MULTIPLE_CHOICES = (300, 'Multiple Choices', + 'Object has several resources -- see URI list') + MOVED_PERMANENTLY = (301, 'Moved Permanently', + 'Object moved permanently -- see URI list') + FOUND = 302, 'Found', 'Object moved temporarily -- see URI list' + SEE_OTHER = 303, 'See Other', 'Object moved -- see Method and URL list' + NOT_MODIFIED = (304, 'Not Modified', + 'Document has not changed since given time') + USE_PROXY = (305, 'Use Proxy', + 'You must use proxy specified in Location to access this resource') + TEMPORARY_REDIRECT = (307, 'Temporary Redirect', + 'Object moved temporarily -- see URI list') + PERMANENT_REDIRECT = (308, 'Permanent Redirect', + 'Object moved permanently -- see URI list') + # client error + BAD_REQUEST = (400, 'Bad Request', + 'Bad request syntax or unsupported method') + UNAUTHORIZED = (401, 'Unauthorized', + 'No permission -- see authorization schemes') + PAYMENT_REQUIRED = (402, 'Payment Required', + 'No payment -- see charging schemes') + FORBIDDEN = (403, 'Forbidden', + 'Request forbidden -- authorization will not help') + NOT_FOUND = (404, 'Not Found', + 'Nothing matches the given URI') + METHOD_NOT_ALLOWED = (405, 'Method Not Allowed', + 'Specified method is invalid for this resource') + NOT_ACCEPTABLE = (406, 'Not Acceptable', + 'URI not available in preferred format') + PROXY_AUTHENTICATION_REQUIRED = (407, + 'Proxy Authentication Required', + 'You must authenticate with this proxy before proceeding') + REQUEST_TIMEOUT = (408, 'Request Timeout', + 'Request timed out; try again later') + CONFLICT = 409, 'Conflict', 'Request conflict' + GONE = (410, 'Gone', + 'URI no longer exists and has been permanently removed') + LENGTH_REQUIRED = (411, 'Length Required', + 'Client must specify Content-Length') + PRECONDITION_FAILED = (412, 'Precondition Failed', + 'Precondition in headers is false') + REQUEST_ENTITY_TOO_LARGE = (413, 'Request Entity Too Large', + 'Entity is too large') + REQUEST_URI_TOO_LONG = (414, 'Request-URI Too Long', + 'URI is too long') + UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type', + 'Entity body in unsupported format') + REQUESTED_RANGE_NOT_SATISFIABLE = (416, + 'Requested Range Not Satisfiable', + 'Cannot satisfy request range') + EXPECTATION_FAILED = (417, 'Expectation Failed', + 'Expect condition could not be satisfied') + IM_A_TEAPOT = (418, 'I\'m a Teapot', + 'Server refuses to brew coffee because it is a teapot.') + MISDIRECTED_REQUEST = (421, 'Misdirected Request', + 'Server is not able to produce a response') + UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity' + LOCKED = 423, 'Locked' + FAILED_DEPENDENCY = 424, 'Failed Dependency' + TOO_EARLY = 425, 'Too Early' + UPGRADE_REQUIRED = 426, 'Upgrade Required' + PRECONDITION_REQUIRED = (428, 'Precondition Required', + 'The origin server requires the request to be conditional') + TOO_MANY_REQUESTS = (429, 'Too Many Requests', + 'The user has sent too many requests in ' + 'a given amount of time ("rate limiting")') + REQUEST_HEADER_FIELDS_TOO_LARGE = (431, + 'Request Header Fields Too Large', + 'The server is unwilling to process the request because its header ' + 'fields are too large') + UNAVAILABLE_FOR_LEGAL_REASONS = (451, + 'Unavailable For Legal Reasons', + 'The server is denying access to the ' + 'resource as a consequence of a legal demand') + # server errors + INTERNAL_SERVER_ERROR = (500, 'Internal Server Error', + 'Server got itself in trouble') + NOT_IMPLEMENTED = (501, 'Not Implemented', + 'Server does not support this operation') + BAD_GATEWAY = (502, 'Bad Gateway', + 'Invalid responses from another server/proxy') + SERVICE_UNAVAILABLE = (503, 'Service Unavailable', + 'The server cannot process the request due to a high load') + GATEWAY_TIMEOUT = (504, 'Gateway Timeout', + 'The gateway server did not receive a timely response') + HTTP_VERSION_NOT_SUPPORTED = (505, 'HTTP Version Not Supported', + 'Cannot fulfill request') + VARIANT_ALSO_NEGOTIATES = 506, 'Variant Also Negotiates' + INSUFFICIENT_STORAGE = 507, 'Insufficient Storage' + LOOP_DETECTED = 508, 'Loop Detected' + NOT_EXTENDED = 510, 'Not Extended' + NETWORK_AUTHENTICATION_REQUIRED = (511, + 'Network Authentication Required', + 'The client needs to authenticate to gain network access') + enum._test_simple_enum(CheckedHTTPStatus, HTTPStatus) + + def test_status_lines(self): # Test HTTP status lines diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py index 4f78b99fd1cae..acc2fa5385d92 100644 --- a/Lib/test/test_pstats.py +++ b/Lib/test/test_pstats.py @@ -3,6 +3,7 @@ from test import support from io import StringIO from pstats import SortKey +from enum import StrEnum, _test_simple_enum import pstats import cProfile @@ -67,6 +68,25 @@ def test_sort_stats_enum(self): self.assertEqual( self.stats.sort_type, self.stats.sort_arg_dict_default[member.value][-1]) + class CheckedSortKey(StrEnum): + CALLS = 'calls', 'ncalls' + CUMULATIVE = 'cumulative', 'cumtime' + FILENAME = 'filename', 'module' + LINE = 'line' + NAME = 'name' + NFL = 'nfl' + PCALLS = 'pcalls' + STDNAME = 'stdname' + TIME = 'time', 'tottime' + def __new__(cls, *values): + value = values[0] + obj = str.__new__(cls, value) + obj._value_ = value + for other_value in values[1:]: + cls._value2member_map_[other_value] = obj + obj._all_values = values + return obj + _test_simple_enum(CheckedSortKey, SortKey) def test_sort_starts_mix(self): self.assertRaises(TypeError, self.stats.sort_stats, diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 8f943bedce395..06b644e764aa7 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -1,3 +1,4 @@ +import enum import errno import os import random @@ -33,6 +34,32 @@ def test_enums(self): self.assertIsInstance(sig, signal.Signals) self.assertEqual(sys.platform, "win32") + CheckedSignals = enum._old_convert_( + enum.IntEnum, 'Signals', 'signal', + lambda name: + name.isupper() + and (name.startswith('SIG') and not name.startswith('SIG_')) + or name.startswith('CTRL_'), + source=signal, + ) + enum._test_simple_enum(CheckedSignals, signal.Signals) + + CheckedHandlers = enum._old_convert_( + enum.IntEnum, 'Handlers', 'signal', + lambda name: name in ('SIG_DFL', 'SIG_IGN'), + source=signal, + ) + enum._test_simple_enum(CheckedHandlers, signal.Handlers) + + Sigmasks = getattr(signal, 'Sigmasks', None) + if Sigmasks is not None: + CheckedSigmasks = enum._old_convert_( + enum.IntEnum, 'Sigmasks', 'signal', + lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK'), + source=signal, + ) + enum._test_simple_enum(CheckedSigmasks, Sigmasks) + @unittest.skipIf(sys.platform == "win32", "Not valid on Windows") class PosixTests(unittest.TestCase): diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index f91e00059daaa..43a1d5bdcf536 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1941,6 +1941,41 @@ def test_socket_fileno_requires_socket_fd(self): fileno=afile.fileno()) self.assertEqual(cm.exception.errno, errno.ENOTSOCK) + def test_addressfamily_enum(self): + import _socket, enum + CheckedAddressFamily = enum._old_convert_( + enum.IntEnum, 'AddressFamily', 'socket', + lambda C: C.isupper() and C.startswith('AF_'), + source=_socket, + ) + enum._test_simple_enum(CheckedAddressFamily, socket.AddressFamily) + + def test_socketkind_enum(self): + import _socket, enum + CheckedSocketKind = enum._old_convert_( + enum.IntEnum, 'SocketKind', 'socket', + lambda C: C.isupper() and C.startswith('SOCK_'), + source=_socket, + ) + enum._test_simple_enum(CheckedSocketKind, socket.SocketKind) + + def test_msgflag_enum(self): + import _socket, enum + CheckedMsgFlag = enum._old_convert_( + enum.IntFlag, 'MsgFlag', 'socket', + lambda C: C.isupper() and C.startswith('MSG_'), + source=_socket, + ) + enum._test_simple_enum(CheckedMsgFlag, socket.MsgFlag) + + def test_addressinfo_enum(self): + import _socket, enum + CheckedAddressInfo = enum._old_convert_( + enum.IntFlag, 'AddressInfo', 'socket', + lambda C: C.isupper() and C.startswith('AI_'), + source=_socket) + enum._test_simple_enum(CheckedAddressInfo, socket.AddressInfo) + @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.') class BasicCANTest(unittest.TestCase): diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 697971e0a57d9..0b8cef639961c 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -12,6 +12,8 @@ import socket import select import time +import datetime +import enum import gc import os import errno @@ -31,7 +33,7 @@ ssl = import_helper.import_module("ssl") -from ssl import TLSVersion, _TLSContentType, _TLSMessageType +from ssl import TLSVersion, _TLSContentType, _TLSMessageType, _TLSAlertType Py_DEBUG = hasattr(sys, 'gettotalrefcount') Py_DEBUG_WIN32 = Py_DEBUG and sys.platform == 'win32' @@ -4697,6 +4699,155 @@ def sni_cb(sock, servername, ctx): s.connect((HOST, server.port)) +class TestEnumerations(unittest.TestCase): + + def test_tlsversion(self): + class CheckedTLSVersion(enum.IntEnum): + MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED + SSLv3 = _ssl.PROTO_SSLv3 + TLSv1 = _ssl.PROTO_TLSv1 + TLSv1_1 = _ssl.PROTO_TLSv1_1 + TLSv1_2 = _ssl.PROTO_TLSv1_2 + TLSv1_3 = _ssl.PROTO_TLSv1_3 + MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED + enum._test_simple_enum(CheckedTLSVersion, TLSVersion) + + def test_tlscontenttype(self): + class Checked_TLSContentType(enum.IntEnum): + """Content types (record layer) + + See RFC 8446, section B.1 + """ + CHANGE_CIPHER_SPEC = 20 + ALERT = 21 + HANDSHAKE = 22 + APPLICATION_DATA = 23 + # pseudo content types + HEADER = 0x100 + INNER_CONTENT_TYPE = 0x101 + enum._test_simple_enum(Checked_TLSContentType, _TLSContentType) + + def test_tlsalerttype(self): + class Checked_TLSAlertType(enum.IntEnum): + """Alert types for TLSContentType.ALERT messages + + See RFC 8466, section B.2 + """ + CLOSE_NOTIFY = 0 + UNEXPECTED_MESSAGE = 10 + BAD_RECORD_MAC = 20 + DECRYPTION_FAILED = 21 + RECORD_OVERFLOW = 22 + DECOMPRESSION_FAILURE = 30 + HANDSHAKE_FAILURE = 40 + NO_CERTIFICATE = 41 + BAD_CERTIFICATE = 42 + UNSUPPORTED_CERTIFICATE = 43 + CERTIFICATE_REVOKED = 44 + CERTIFICATE_EXPIRED = 45 + CERTIFICATE_UNKNOWN = 46 + ILLEGAL_PARAMETER = 47 + UNKNOWN_CA = 48 + ACCESS_DENIED = 49 + DECODE_ERROR = 50 + DECRYPT_ERROR = 51 + EXPORT_RESTRICTION = 60 + PROTOCOL_VERSION = 70 + INSUFFICIENT_SECURITY = 71 + INTERNAL_ERROR = 80 + INAPPROPRIATE_FALLBACK = 86 + USER_CANCELED = 90 + NO_RENEGOTIATION = 100 + MISSING_EXTENSION = 109 + UNSUPPORTED_EXTENSION = 110 + CERTIFICATE_UNOBTAINABLE = 111 + UNRECOGNIZED_NAME = 112 + BAD_CERTIFICATE_STATUS_RESPONSE = 113 + BAD_CERTIFICATE_HASH_VALUE = 114 + UNKNOWN_PSK_IDENTITY = 115 + CERTIFICATE_REQUIRED = 116 + NO_APPLICATION_PROTOCOL = 120 + enum._test_simple_enum(Checked_TLSAlertType, _TLSAlertType) + + def test_tlsmessagetype(self): + class Checked_TLSMessageType(enum.IntEnum): + """Message types (handshake protocol) + + See RFC 8446, section B.3 + """ + HELLO_REQUEST = 0 + CLIENT_HELLO = 1 + SERVER_HELLO = 2 + HELLO_VERIFY_REQUEST = 3 + NEWSESSION_TICKET = 4 + END_OF_EARLY_DATA = 5 + HELLO_RETRY_REQUEST = 6 + ENCRYPTED_EXTENSIONS = 8 + CERTIFICATE = 11 + SERVER_KEY_EXCHANGE = 12 + CERTIFICATE_REQUEST = 13 + SERVER_DONE = 14 + CERTIFICATE_VERIFY = 15 + CLIENT_KEY_EXCHANGE = 16 + FINISHED = 20 + CERTIFICATE_URL = 21 + CERTIFICATE_STATUS = 22 + SUPPLEMENTAL_DATA = 23 + KEY_UPDATE = 24 + NEXT_PROTO = 67 + MESSAGE_HASH = 254 + CHANGE_CIPHER_SPEC = 0x0101 + enum._test_simple_enum(Checked_TLSMessageType, _TLSMessageType) + + def test_sslmethod(self): + Checked_SSLMethod = enum._old_convert_( + enum.IntEnum, '_SSLMethod', 'ssl', + lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', + source=ssl._ssl, + ) + enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) + + def test_options(self): + CheckedOptions = enum._old_convert_( + enum.FlagEnum, 'Options', 'ssl', + lambda name: name.startswith('OP_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedOptions, ssl.Options) + + + def test_alertdescription(self): + CheckedAlertDescription = enum._old_convert_( + enum.IntEnum, 'AlertDescription', 'ssl', + lambda name: name.startswith('ALERT_DESCRIPTION_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedAlertDescription, ssl.AlertDescription) + + def test_sslerrornumber(self): + Checked_SSLMethod = enum._old_convert_( + enum.IntEnum, '_SSLMethod', 'ssl', + lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', + source=ssl._ssl, + ) + enum._test_simple_enum(Checked_SSLMethod, ssl._SSLMethod) + + def test_verifyflags(self): + CheckedVerifyFlags = enum._old_convert_( + enum.FlagEnum, 'VerifyFlags', 'ssl', + lambda name: name.startswith('VERIFY_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedVerifyFlags, ssl.VerifyFlags) + + def test_verifymode(self): + CheckedVerifyMode = enum._old_convert_( + enum.IntEnum, 'VerifyMode', 'ssl', + lambda name: name.startswith('CERT_'), + source=ssl._ssl, + ) + enum._test_simple_enum(CheckedVerifyMode, ssl.VerifyMode) + def test_main(verbose=False): if support.verbose: plats = { diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index d47cf28782dd7..0e6cbb61b2298 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1463,20 +1463,21 @@ class Float(float, enum.Enum): PI = 3.1415926 class Int(enum.IntEnum): IDES = 15 - class Str(str, enum.Enum): + class Str(enum.StrEnum): + # StrEnum uses the value and not the name for %s etc. ABC = 'abc' # Testing Unicode formatting strings... self.assertEqual("%s, %s" % (Str.ABC, Str.ABC), - 'ABC, ABC') + 'abc, abc') self.assertEqual("%s, %s, %d, %i, %u, %f, %5.2f" % (Str.ABC, Str.ABC, Int.IDES, Int.IDES, Int.IDES, Float.PI, Float.PI), - 'ABC, ABC, 15, 15, 15, 3.141593, 3.14') + 'abc, abc, 15, 15, 15, 3.141593, 3.14') # formatting jobs delegated from the string implementation: self.assertEqual('...%(foo)s...' % {'foo':Str.ABC}, - '...ABC...') + '...abc...') self.assertEqual('...%(foo)s...' % {'foo':Int.IDES}, '...IDES...') self.assertEqual('...%(foo)i...' % {'foo':Int.IDES}, diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index d6a8333427a4a..3f56192c70e84 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -4,6 +4,7 @@ import builtins import contextlib import copy +import enum import io import os import pickle @@ -31,6 +32,13 @@ def get_command_stdout(command, args): class BaseTestUUID: uuid = None + def test_safe_uuid_enum(self): + class CheckedSafeUUID(enum.Enum): + safe = 0 + unsafe = -1 + unknown = None + enum._test_simple_enum(CheckedSafeUUID, py_uuid.SafeUUID) + def test_UUID(self): equal = self.assertEqual ascending = [] diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 01dce7eff25c5..369004c9d1b3d 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -144,7 +144,8 @@ def _splitdict(tk, v, cut_minus=True, conv=None): return dict -class EventType(enum.StrEnum): + at enum._simple_enum(enum.StrEnum) +class EventType: KeyPress = '2' Key = KeyPress KeyRelease = '3' @@ -185,8 +186,6 @@ class EventType(enum.StrEnum): Deactivate = '37' MouseWheel = '38' - __str__ = str.__str__ - class Event: """Container for the properties of an event. diff --git a/Lib/tkinter/test/test_tkinter/test_misc.py b/Lib/tkinter/test/test_tkinter/test_misc.py index f6e5b4db1ae1f..d4b7cbd867bc0 100644 --- a/Lib/tkinter/test/test_tkinter/test_misc.py +++ b/Lib/tkinter/test/test_tkinter/test_misc.py @@ -1,5 +1,6 @@ import unittest import tkinter +import enum from test import support from tkinter.test.support import AbstractTkTest, AbstractDefaultRootTest @@ -261,6 +262,49 @@ def test_event_repr(self): " num=3 delta=-1 focus=True" " x=10 y=20 width=300 height=200>") + def test_eventtype_enum(self): + class CheckedEventType(enum.StrEnum): + KeyPress = '2' + Key = KeyPress + KeyRelease = '3' + ButtonPress = '4' + Button = ButtonPress + ButtonRelease = '5' + Motion = '6' + Enter = '7' + Leave = '8' + FocusIn = '9' + FocusOut = '10' + Keymap = '11' # undocumented + Expose = '12' + GraphicsExpose = '13' # undocumented + NoExpose = '14' # undocumented + Visibility = '15' + Create = '16' + Destroy = '17' + Unmap = '18' + Map = '19' + MapRequest = '20' + Reparent = '21' + Configure = '22' + ConfigureRequest = '23' + Gravity = '24' + ResizeRequest = '25' + Circulate = '26' + CirculateRequest = '27' + Property = '28' + SelectionClear = '29' # undocumented + SelectionRequest = '30' # undocumented + Selection = '31' # undocumented + Colormap = '32' + ClientMessage = '33' # undocumented + Mapping = '34' # undocumented + VirtualEvent = '35' # undocumented + Activate = '36' + Deactivate = '37' + MouseWheel = '38' + enum._test_simple_enum(CheckedEventType, tkinter.EventType) + def test_getboolean(self): for v in 'true', 'yes', 'on', '1', 't', 'y', 1, True: self.assertIs(self.root.getboolean(v), True) diff --git a/Lib/uuid.py b/Lib/uuid.py index 5ae0a3e5fa449..67da88560cfb1 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -47,7 +47,7 @@ import os import sys -from enum import Enum +from enum import Enum, _simple_enum __author__ = 'Ka-Ping Yee ' @@ -75,7 +75,8 @@ bytes_ = bytes # The built-in bytes type -class SafeUUID(Enum): + at _simple_enum(Enum) +class SafeUUID: safe = 0 unsafe = -1 unknown = None diff --git a/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst b/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst new file mode 100644 index 0000000000000..822584be1b221 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst @@ -0,0 +1,4 @@ +A ``simple_enum`` decorator is added to the ``enum`` module to convert a +normal class into an Enum. ``test_simple_enum`` added to test simple enums +against a corresponding normal Enum. Standard library modules updated to +use ``simple_enum``. From webhook-mailer at python.org Wed Apr 21 13:34:13 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 21 Apr 2021 17:34:13 -0000 Subject: [Python-checkins] Fix typo in whatsnew/3.10.rst (GH-25498) Message-ID: https://github.com/python/cpython/commit/18e0d328043c7cc9e612e08d414c2a787cfe26c0 commit: 18e0d328043c7cc9e612e08d414c2a787cfe26c0 branch: master author: JunWei Song committer: pablogsal date: 2021-04-21T18:34:05+01:00 summary: Fix typo in whatsnew/3.10.rst (GH-25498) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 4695c0ec913ef..e77ae6068c30d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -171,7 +171,7 @@ These improvements are inspired by previous work in the PyPy interpreter. (Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in :issue:`40176`.) -A considerable ammount of new specialized messages for :exc:`SyntaxError` exceptions +A considerable amount of new specialized messages for :exc:`SyntaxError` exceptions have been incorporated. Some of the most notable ones: * Missing ``:`` before blocks: @@ -310,7 +310,7 @@ NameErrors ~~~~~~~~~~ When printing :exc:`NameError` raised by the interpreter, :c:func:`PyErr_Display` -will offer suggestions of simmilar variable names in the function that the exception +will offer suggestions of similar variable names in the function that the exception was raised from: .. code-block:: python From webhook-mailer at python.org Wed Apr 21 16:44:36 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 21 Apr 2021 20:44:36 -0000 Subject: [Python-checkins] doc: Sync some missing 3.10 changes with the What's New (GH-25503) Message-ID: https://github.com/python/cpython/commit/81fe01492c3b0892316719a07fe8b53f85f86a0a commit: 81fe01492c3b0892316719a07fe8b53f85f86a0a branch: master author: Batuhan Taskaya committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-21T13:44:27-07:00 summary: doc: Sync some missing 3.10 changes with the What's New (GH-25503) Automerge-Triggered-By: GH:isidentical files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index e77ae6068c30d..1c2919a06c4d3 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -776,6 +776,13 @@ New Modules Improved Modules ================ +asyncio +------- + +Added missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` +method. +(Contributed by Alex Gr?nholm in :issue:`41332`.) + argparse -------- @@ -795,6 +802,12 @@ base64 Add :func:`base64.b32hexencode` and :func:`base64.b32hexdecode` to support the Base32 Encoding with Extended Hex Alphabet. +bdb +--- + +Add :meth:`~bdb.Breakpoint.clearBreakpoints` to reset all set breakpoints. +(Contributed by Irit Katriel in :issue:`24160`.) + codecs ------ @@ -826,6 +839,9 @@ and objects representing asynchronously released resources. Add asynchronous context manager support to :func:`contextlib.nullcontext`. (Contributed by Tom Gringauz in :issue:`41543`.) +Add :class:`AsyncContextDecorator`, for supporting usage of async context managers +as decorators. + curses ------ @@ -880,6 +896,9 @@ enum module constants have a :func:`repr` of ``module_name.member_name``. (Contributed by Ethan Furman in :issue:`40066`.) +Add :class:`enum.StrEnum` for enums where all members are strings. +(Contributed by Ethan Furman in :issue:`41816`.) + fileinput --------- @@ -1089,6 +1108,10 @@ and to match the behavior of static type checkers specified in the PEP. (Contributed by Yurii Karabas in :issue:`42345`.) +Add new function :func:`typing.is_typeddict` to introspect if an annotation +is a :class:`typing.TypedDict`. +(Contributed by Patrick Reader in :issue:`41792`) + unittest -------- @@ -1121,7 +1144,10 @@ zipimport Add methods related to :pep:`451`: :meth:`~zipimport.zipimporter.find_spec`, :meth:`zipimport.zipimporter.create_module`, and :meth:`zipimport.zipimporter.exec_module`. -(Contributed by Brett Cannon in :issue:`42131`. +(Contributed by Brett Cannon in :issue:`42131`.) + +Add :meth:`~zipimport.zipimporter.invalidate_caches` method. +(Contributed by Desmond Cheong in :issue:`14678`.) Optimizations From webhook-mailer at python.org Wed Apr 21 17:36:44 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 21 Apr 2021 21:36:44 -0000 Subject: [Python-checkins] bpo-40137: _PyType_GetModuleByDef() doesn't check tp_flags (GH-25504) Message-ID: https://github.com/python/cpython/commit/d4aaa34798f0dd8402f412e2aa9d6fa2d6cff5fa commit: d4aaa34798f0dd8402f412e2aa9d6fa2d6cff5fa branch: master author: Victor Stinner committer: vstinner date: 2021-04-21T23:36:26+02:00 summary: bpo-40137: _PyType_GetModuleByDef() doesn't check tp_flags (GH-25504) _PyType_GetModuleByDef() no longer checks if types are heap types. _PyType_GetModuleByDef() must only be called on a heap type created by PyType_FromModuleAndSpec() or on its subclasses. type_ready_mro() ensures that a static type cannot inherit from a heap type. files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index a957c832b90bd6..ef3833155e01e1 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3590,24 +3590,23 @@ PyObject * _PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def) { assert(PyType_Check(type)); - assert(type->tp_mro); - int i; - for (i = 0; i < PyTuple_GET_SIZE(type->tp_mro); i++) { - PyObject *super = PyTuple_GET_ITEM(type->tp_mro, i); - if (!PyType_HasFeature((PyTypeObject *)super, Py_TPFLAGS_HEAPTYPE)) { - /* Currently, there's no way for static types to inherit - * from heap types, but to allow that possibility, - * we `continue` rather than `break`. - * We'll just potentially loop a few more times before throwing - * the error. - */ - continue; - } + PyObject *mro = type->tp_mro; + assert(mro != NULL); + for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mro); i++) { + PyObject *super = PyTuple_GET_ITEM(mro, i); + // _PyType_GetModuleByDef() must only be called on a heap type created + // by PyType_FromModuleAndSpec() or on its subclasses. + // type_ready_mro() ensures that a static type cannot inherit from a + // heap type. + assert(_PyType_HasFeature((PyTypeObject *)type, Py_TPFLAGS_HEAPTYPE)); + PyHeapTypeObject *ht = (PyHeapTypeObject*)super; - if (ht->ht_module && PyModule_GetDef(ht->ht_module) == def) { - return ht->ht_module; + PyObject *module = ht->ht_module; + if (module && PyModule_GetDef(module) == def) { + return module; } } + PyErr_Format( PyExc_TypeError, "_PyType_GetModuleByDef: No superclass of '%s' has the given module", From webhook-mailer at python.org Wed Apr 21 18:10:36 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 21 Apr 2021 22:10:36 -0000 Subject: [Python-checkins] bpo-40137: Optimize _PyType_GetModuleByDef() loop (GH-25505) Message-ID: https://github.com/python/cpython/commit/760da626ff4124e1344fd8b7dbeb83b2c4b7c12c commit: 760da626ff4124e1344fd8b7dbeb83b2c4b7c12c branch: master author: Victor Stinner committer: vstinner date: 2021-04-22T00:10:16+02:00 summary: bpo-40137: Optimize _PyType_GetModuleByDef() loop (GH-25505) PyType_Ready() now ensures that a type MRO cannot be empty. _PyType_GetModuleByDef() no longer checks "i < PyTuple_GET_SIZE(mro)" at the first loop iteration to optimize the most common case, when the argument is the defining class. files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index ef3833155e01e..03af2c5d75dd8 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1987,14 +1987,20 @@ mro_invoke(PyTypeObject *type) new_mro = PySequence_Tuple(mro_result); Py_DECREF(mro_result); - if (new_mro == NULL) + if (new_mro == NULL) { return NULL; + } - if (custom && mro_check(type, new_mro) < 0) { + if (PyTuple_GET_SIZE(new_mro) == 0) { Py_DECREF(new_mro); + PyErr_Format(PyExc_TypeError, "type MRO must not be empty"); return NULL; } + if (custom && mro_check(type, new_mro) < 0) { + Py_DECREF(new_mro); + return NULL; + } return new_mro; } @@ -2034,8 +2040,9 @@ mro_internal(PyTypeObject *type, PyObject **p_old_mro) new_mro = mro_invoke(type); /* might cause reentrance */ reent = (type->tp_mro != old_mro); Py_XDECREF(old_mro); - if (new_mro == NULL) + if (new_mro == NULL) { return -1; + } if (reent) { Py_DECREF(new_mro); @@ -3590,9 +3597,17 @@ PyObject * _PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def) { assert(PyType_Check(type)); + PyObject *mro = type->tp_mro; + // The type must be ready assert(mro != NULL); - for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mro); i++) { + assert(PyTuple_Check(mro)); + // mro_invoke() ensures that the type MRO cannot be empty, so we don't have + // to check i < PyTuple_GET_SIZE(mro) at the first loop iteration. + assert(PyTuple_GET_SIZE(mro) >= 1); + + Py_ssize_t i = 0; + do { PyObject *super = PyTuple_GET_ITEM(mro, i); // _PyType_GetModuleByDef() must only be called on a heap type created // by PyType_FromModuleAndSpec() or on its subclasses. @@ -3605,7 +3620,8 @@ _PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def) if (module && PyModule_GetDef(module) == def) { return module; } - } + i++; + } while (i < PyTuple_GET_SIZE(mro)); PyErr_Format( PyExc_TypeError, From webhook-mailer at python.org Wed Apr 21 18:22:30 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 21 Apr 2021 22:22:30 -0000 Subject: [Python-checkins] bpo-40137: Move state lookups out of the critical path (GH-25492) Message-ID: https://github.com/python/cpython/commit/139c232f3851b393798d0ea4e65f1298bfbcd9cf commit: 139c232f3851b393798d0ea4e65f1298bfbcd9cf branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-21T15:22:22-07:00 summary: bpo-40137: Move state lookups out of the critical path (GH-25492) files: M Modules/_functoolsmodule.c diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 1fcaf299e67bc6..f3ae3b62ae332c 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -12,18 +12,6 @@ All rights reserved. */ -/* partial object **********************************************************/ - -typedef struct { - PyObject_HEAD - PyObject *fn; - PyObject *args; - PyObject *kw; - PyObject *dict; /* __dict__ */ - PyObject *weakreflist; /* List of weak references */ - vectorcallfunc vectorcall; -} partialobject; - typedef struct _functools_state { /* this object is used delimit args and keywords in the cache keys */ PyObject *kwd_mark; @@ -40,6 +28,19 @@ get_functools_state(PyObject *module) return (_functools_state *)state; } + +/* partial object **********************************************************/ + +typedef struct { + PyObject_HEAD + PyObject *fn; + PyObject *args; + PyObject *kw; + PyObject *dict; /* __dict__ */ + PyObject *weakreflist; /* List of weak references */ + vectorcallfunc vectorcall; +} partialobject; + static void partial_setvectorcall(partialobject *pto); static struct PyModuleDef _functools_module; static PyObject * @@ -781,13 +782,16 @@ typedef struct lru_cache_object { PyObject *func; Py_ssize_t maxsize; Py_ssize_t misses; + /* the kwd_mark is used delimit args and keywords in the cache keys */ + PyObject *kwd_mark; + PyTypeObject *lru_list_elem_type; PyObject *cache_info_type; PyObject *dict; PyObject *weakreflist; } lru_cache_object; static PyObject * -lru_cache_make_key(_functools_state *state, PyObject *args, +lru_cache_make_key(PyObject *kwd_mark, PyObject *args, PyObject *kwds, int typed) { PyObject *key, *keyword, *value; @@ -827,8 +831,8 @@ lru_cache_make_key(_functools_state *state, PyObject *args, PyTuple_SET_ITEM(key, key_pos++, item); } if (kwds_size) { - Py_INCREF(state->kwd_mark); - PyTuple_SET_ITEM(key, key_pos++, state->kwd_mark); + Py_INCREF(kwd_mark); + PyTuple_SET_ITEM(key, key_pos++, kwd_mark); for (pos = 0; PyDict_Next(kwds, &pos, &keyword, &value);) { Py_INCREF(keyword); PyTuple_SET_ITEM(key, key_pos++, keyword); @@ -872,12 +876,7 @@ infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwd { PyObject *result; Py_hash_t hash; - _functools_state *state; - state = get_functools_state_by_type(Py_TYPE(self)); - if (state == NULL) { - return NULL; - } - PyObject *key = lru_cache_make_key(state, args, kwds, self->typed); + PyObject *key = lru_cache_make_key(self->kwd_mark, args, kwds, self->typed); if (!key) return NULL; hash = PyObject_Hash(key); @@ -977,13 +976,8 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds lru_list_elem *link; PyObject *key, *result, *testresult; Py_hash_t hash; - _functools_state *state; - state = get_functools_state_by_type(Py_TYPE(self)); - if (state == NULL) { - return NULL; - } - key = lru_cache_make_key(state, args, kwds, self->typed); + key = lru_cache_make_key(self->kwd_mark, args, kwds, self->typed); if (!key) return NULL; hash = PyObject_Hash(key); @@ -1038,7 +1032,7 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds { /* Cache is not full, so put the result in a new link */ link = (lru_list_elem *)PyObject_New(lru_list_elem, - state->lru_list_elem_type); + self->lru_list_elem_type); if (link == NULL) { Py_DECREF(key); Py_DECREF(result); @@ -1149,6 +1143,7 @@ lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) lru_cache_object *obj; Py_ssize_t maxsize; PyObject *(*wrapper)(lru_cache_object *, PyObject *, PyObject *); + _functools_state *state; static char *keywords[] = {"user_function", "maxsize", "typed", "cache_info_type", NULL}; @@ -1164,6 +1159,11 @@ lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) return NULL; } + state = get_functools_state_by_type(type); + if (state == NULL) { + return NULL; + } + /* select the caching function, and make/inc maxsize_O */ if (maxsize_O == Py_None) { wrapper = infinite_lru_cache_wrapper; @@ -1203,6 +1203,10 @@ lru_cache_new(PyTypeObject *type, PyObject *args, PyObject *kw) obj->func = func; obj->misses = obj->hits = 0; obj->maxsize = maxsize; + Py_INCREF(state->kwd_mark); + obj->kwd_mark = state->kwd_mark; + Py_INCREF(state->lru_list_elem_type); + obj->lru_list_elem_type = state->lru_list_elem_type; Py_INCREF(cache_info_type); obj->cache_info_type = cache_info_type; obj->dict = NULL; @@ -1238,6 +1242,8 @@ lru_cache_tp_clear(lru_cache_object *self) lru_list_elem *list = lru_cache_unlink_list(self); Py_CLEAR(self->func); Py_CLEAR(self->cache); + Py_CLEAR(self->kwd_mark); + Py_CLEAR(self->lru_list_elem_type); Py_CLEAR(self->cache_info_type); Py_CLEAR(self->dict); lru_cache_clear_list(list); @@ -1330,6 +1336,8 @@ lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg) } Py_VISIT(self->func); Py_VISIT(self->cache); + Py_VISIT(self->kwd_mark); + Py_VISIT(self->lru_list_elem_type); Py_VISIT(self->cache_info_type); Py_VISIT(self->dict); return 0; From webhook-mailer at python.org Wed Apr 21 18:34:38 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 21 Apr 2021 22:34:38 -0000 Subject: [Python-checkins] bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) Message-ID: https://github.com/python/cpython/commit/7b86e47617d81a4b14d929743425f448971e8c86 commit: 7b86e47617d81a4b14d929743425f448971e8c86 branch: master author: Steve Dower committer: zooba date: 2021-04-21T23:34:29+01:00 summary: bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) files: A Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst M Doc/library/sys.rst M Modules/_xxsubinterpretersmodule.c diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 721edd1495aa5b..e431d1b50309c3 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -26,12 +26,12 @@ always available. .. function:: addaudithook(hook) Append the callable *hook* to the list of active auditing hooks for the - current interpreter. + current (sub)interpreter. When an auditing event is raised through the :func:`sys.audit` function, each hook will be called in the order it was added with the event name and the tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are - called first, followed by hooks added in the current interpreter. Hooks + called first, followed by hooks added in the current (sub)interpreter. Hooks can then log the event, raise an exception to abort the operation, or terminate the process entirely. diff --git a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst new file mode 100644 index 00000000000000..e38dc169def96e --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst @@ -0,0 +1,3 @@ +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c index 8943ebf455df4b..b94b130d70df71 100644 --- a/Modules/_xxsubinterpretersmodule.c +++ b/Modules/_xxsubinterpretersmodule.c @@ -2025,7 +2025,7 @@ interp_create(PyObject *self, PyObject *args, PyObject *kwds) } // Create and initialize the new interpreter. - PyThreadState *save_tstate = PyThreadState_Swap(NULL); + PyThreadState *save_tstate = PyThreadState_Get(); // XXX Possible GILState issues? PyThreadState *tstate = _Py_NewInterpreter(isolated); PyThreadState_Swap(save_tstate); From webhook-mailer at python.org Wed Apr 21 18:43:04 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 21 Apr 2021 22:43:04 -0000 Subject: [Python-checkins] bpo-43756: Add new audit event for new arguments added to glob.glob (GH-25239) Message-ID: https://github.com/python/cpython/commit/a32f8fe7133aad4f3cf8946534e3b79a5f2659da commit: a32f8fe7133aad4f3cf8946534e3b79a5f2659da branch: master author: Saiyang Gou committer: zooba date: 2021-04-21T23:42:55+01:00 summary: bpo-43756: Add new audit event for new arguments added to glob.glob (GH-25239) files: A Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst M Doc/library/glob.rst M Lib/glob.py diff --git a/Doc/library/glob.rst b/Doc/library/glob.rst index 3fdba6937c1de..215f60d328c76 100644 --- a/Doc/library/glob.rst +++ b/Doc/library/glob.rst @@ -65,6 +65,7 @@ For example, ``'[?]'`` matches the character ``'?'``. match. .. audit-event:: glob.glob pathname,recursive glob.glob + .. audit-event:: glob.glob/2 pathname,recursive,root_dir,dir_fd glob.glob .. note:: Using the "``**``" pattern in large directory trees may consume @@ -83,6 +84,13 @@ For example, ``'[?]'`` matches the character ``'?'``. without actually storing them all simultaneously. .. audit-event:: glob.glob pathname,recursive glob.iglob + .. audit-event:: glob.glob/2 pathname,recursive,root_dir,dir_fd glob.iglob + + .. versionchanged:: 3.5 + Support for recursive globs using "``**``". + + .. versionchanged:: 3.10 + Added the *root_dir* and *dir_fd* parameters. .. function:: escape(pathname) @@ -128,4 +136,3 @@ default. For example, consider a directory containing :file:`card.gif` and Module :mod:`fnmatch` Shell-style filename (not path) expansion - diff --git a/Lib/glob.py b/Lib/glob.py index a491363f3f939..a6cff87350826 100644 --- a/Lib/glob.py +++ b/Lib/glob.py @@ -34,6 +34,7 @@ def iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False): zero or more directories and subdirectories. """ sys.audit("glob.glob", pathname, recursive) + sys.audit("glob.glob/2", pathname, recursive, root_dir, dir_fd) if root_dir is not None: root_dir = os.fspath(root_dir) else: diff --git a/Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst b/Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst new file mode 100644 index 0000000000000..e05fef2d5524f --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst @@ -0,0 +1,2 @@ +Add new audit event ``glob.glob/2`` to incorporate the new *root_dir* and +*dir_fd* arguments added to :func:`glob.glob` and :func:`glob.iglob`. From webhook-mailer at python.org Wed Apr 21 18:53:00 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 21 Apr 2021 22:53:00 -0000 Subject: [Python-checkins] bpo-40137: Add pycore_moduleobject.h internal header (GH-25507) Message-ID: https://github.com/python/cpython/commit/cdad2724e6f7426372901cc5dedd8a462ba046a6 commit: cdad2724e6f7426372901cc5dedd8a462ba046a6 branch: master author: Victor Stinner committer: vstinner date: 2021-04-22T00:52:52+02:00 summary: bpo-40137: Add pycore_moduleobject.h internal header (GH-25507) Add pycore_moduleobject.h internal header file with static inline functions to access module members: * _PyModule_GetDict() * _PyModule_GetDef() * _PyModule_GetState() These functions don't check at runtime if their argument has a valid type and can be inlined even if Python is not built with LTO. _PyType_GetModuleByDef() uses _PyModule_GetDef(). Replace PyModule_GetState() with _PyModule_GetState() in the extension modules, considered as performance sensitive: * _abc * _functools * _operator * _pickle * _queue * _random * _sre * _struct * _thread * _winapi * array * posix The following extensions are now built with the Py_BUILD_CORE_MODULE macro defined, to be able to use the internal pycore_moduleobject.h header: _abc, array, _operator, _queue, _sre, _struct. files: A Include/internal/pycore_moduleobject.h M Makefile.pre.in M Modules/Setup M Modules/_abc.c M Modules/_functoolsmodule.c M Modules/_operator.c M Modules/_pickle.c M Modules/_queuemodule.c M Modules/_randommodule.c M Modules/_sre.c M Modules/_struct.c M Modules/_threadmodule.c M Modules/_winapi.c M Modules/arraymodule.c M Modules/posixmodule.c M Objects/frameobject.c M Objects/moduleobject.c M Objects/typeobject.c M PCbuild/pythoncore.vcxproj M PCbuild/pythoncore.vcxproj.filters M setup.py diff --git a/Include/internal/pycore_moduleobject.h b/Include/internal/pycore_moduleobject.h new file mode 100644 index 00000000000000..e9978abd25b10a --- /dev/null +++ b/Include/internal/pycore_moduleobject.h @@ -0,0 +1,42 @@ +#ifndef Py_INTERNAL_MODULEOBJECT_H +#define Py_INTERNAL_MODULEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +typedef struct { + PyObject_HEAD + PyObject *md_dict; + struct PyModuleDef *md_def; + void *md_state; + PyObject *md_weaklist; + // for logging purposes after md_dict is cleared + PyObject *md_name; +} PyModuleObject; + +static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { + assert(PyModule_Check(mod)); + return ((PyModuleObject *)mod)->md_def; +} + +static inline void* _PyModule_GetState(PyObject* mod) { + assert(PyModule_Check(mod)); + return ((PyModuleObject *)mod)->md_state; +} + +static inline PyObject* _PyModule_GetDict(PyObject *mod) { + assert(PyModule_Check(mod)); + PyObject *dict = ((PyModuleObject *)mod) -> md_dict; + // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) + assert(dict != NULL); + return dict; +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_MODULEOBJECT_H */ diff --git a/Makefile.pre.in b/Makefile.pre.in index eccc72697704b8..4d9b760863ad59 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1161,6 +1161,7 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_interp.h \ $(srcdir)/Include/internal/pycore_list.h \ $(srcdir)/Include/internal/pycore_long.h \ + $(srcdir)/Include/internal/pycore_moduleobject.h \ $(srcdir)/Include/internal/pycore_object.h \ $(srcdir)/Include/internal/pycore_pathconfig.h \ $(srcdir)/Include/internal/pycore_pyarena.h \ diff --git a/Modules/Setup b/Modules/Setup index cce78582a1e28a..87c6a152f86eac 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -105,13 +105,13 @@ posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix errno errnomodule.c # posix (UNIX) errno values pwd pwdmodule.c # this is needed to find out the user's home dir # if $HOME is not set -_sre _sre.c # Fredrik Lundh's new regular expressions +_sre -DPy_BUILD_CORE_BUILTIN _sre.c # Fredrik Lundh's new regular expressions _codecs _codecsmodule.c # access to the builtin codecs and codec registry _weakref _weakref.c # weak references _functools -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _functoolsmodule.c # Tools for working with functions and callable objects -_operator _operator.c # operator.add() and similar goodies +_operator -DPy_BUILD_CORE_BUILTIN _operator.c # operator.add() and similar goodies _collections _collectionsmodule.c # Container types -_abc _abc.c # Abstract base classes +_abc -DPy_BUILD_CORE_BUILTIN _abc.c # Abstract base classes itertools itertoolsmodule.c # Functions creating iterators for efficient looping atexit atexitmodule.c # Register functions to be run at interpreter-shutdown _signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c @@ -166,17 +166,17 @@ _symtable symtablemodule.c # Modules that should always be present (non UNIX dependent): -#array arraymodule.c # array objects +#array -DPy_BUILD_CORE_MODULE arraymodule.c # array objects #cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions #math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin() #_contextvars _contextvarsmodule.c # Context Variables -#_struct _struct.c # binary structure packing/unpacking +#_struct -DPy_BUILD_CORE_MODULE _struct.c # binary structure packing/unpacking #_weakref _weakref.c # basic weak reference support #_testcapi _testcapimodule.c # Python C API test module #_testinternalcapi _testinternalcapi.c -I$(srcdir)/Include/internal -DPy_BUILD_CORE_MODULE # Python internal C API test module #_random _randommodule.c -DPy_BUILD_CORE_MODULE # Random number generator #_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator -#_pickle _pickle.c # pickle accelerator +#_pickle -DPy_BUILD_CORE_MODULE _pickle.c # pickle accelerator #_datetime _datetimemodule.c # datetime accelerator #_zoneinfo _zoneinfo.c -DPy_BUILD_CORE_MODULE # zoneinfo accelerator #_bisect _bisectmodule.c # Bisection algorithms diff --git a/Modules/_abc.c b/Modules/_abc.c index 7afaa759b2bfec..0ddc2abeee1e0e 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -1,6 +1,7 @@ /* ABCMeta implementation */ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "clinic/_abc.c.h" /*[clinic input] @@ -27,7 +28,7 @@ typedef struct { static inline _abcmodule_state* get_abc_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_abcmodule_state *)state; } diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index f3ae3b62ae332c..eea542e18c92d2 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1,5 +1,6 @@ #include "Python.h" #include "pycore_long.h" // _PyLong_GetZero() +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "pycore_object.h" // _PyObject_GC_TRACK #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_tuple.h" // _PyTuple_ITEMS() @@ -23,7 +24,7 @@ typedef struct _functools_state { static inline _functools_state * get_functools_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_functools_state *)state; } @@ -53,8 +54,7 @@ get_functools_state_by_type(PyTypeObject *type) if (module == NULL) { return NULL; } - _functools_state *state = get_functools_state(module); - return state; + return get_functools_state(module); } static PyObject * diff --git a/Modules/_operator.c b/Modules/_operator.c index da1e43158ee0ac..f55c2f1d1f415e 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -1,6 +1,5 @@ - #include "Python.h" - +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "clinic/_operator.c.h" typedef struct { @@ -12,7 +11,7 @@ typedef struct { static inline _operator_state* get_operator_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_operator_state *)state; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 5a8aad9de7679d..691d4a293e8498 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -9,6 +9,7 @@ #endif #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef PyDoc_STRVAR(pickle_module_doc, @@ -182,7 +183,7 @@ static struct PyModuleDef _picklemodule; static PickleState * _Pickle_GetState(PyObject *module) { - return (PickleState *)PyModule_GetState(module); + return (PickleState *)_PyModule_GetState(module); } /* Find the module instance imported in the currently running sub-interpreter diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index 7a52617ade5b09..c27fb1a001d21e 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -1,4 +1,5 @@ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include // offsetof() @@ -10,7 +11,7 @@ typedef struct { static simplequeue_state * simplequeue_get_state(PyObject *module) { - simplequeue_state *state = PyModule_GetState(module); + simplequeue_state *state = _PyModule_GetState(module); assert(state); return state; } diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 99be69c06556e6..cae49a009cbcc8 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -67,6 +67,7 @@ /* ---------------------------------------------------------------*/ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #ifdef HAVE_PROCESS_H # include // getpid() #endif @@ -86,7 +87,7 @@ typedef struct { static inline _randomstate* get_random_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_randomstate *)state; } @@ -538,7 +539,7 @@ random_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (PyTuple_GET_SIZE(args) == 1) arg = PyTuple_GET_ITEM(args, 0); - + tmp = random_seed(self, arg); if (tmp == NULL) { Py_DECREF(self); diff --git a/Modules/_sre.c b/Modules/_sre.c index 57faf7bdaae4e6..d4bfff6e849e37 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -42,6 +42,7 @@ static const char copyright[] = #include "Python.h" #include "pycore_long.h" // _PyLong_GetZero() +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include "sre.h" @@ -258,7 +259,7 @@ typedef struct { static _sremodulestate * get_sre_module_state(PyObject *m) { - _sremodulestate *state = (_sremodulestate *)PyModule_GetState(m); + _sremodulestate *state = (_sremodulestate *)_PyModule_GetState(m); assert(state); return state; } diff --git a/Modules/_struct.c b/Modules/_struct.c index 1a5e0ae28e876b..30ad9f2b79d8f3 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -6,6 +6,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include @@ -24,7 +25,7 @@ typedef struct { static inline _structmodulestate* get_struct_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_structmodulestate *)state; } diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 0613dfd3070c5c..7feb0b8a1f1f4d 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -3,8 +3,9 @@ /* Interface to Sjoerd's portable C thread library */ #include "Python.h" -#include "pycore_pylifecycle.h" #include "pycore_interp.h" // _PyInterpreterState.num_threads +#include "pycore_moduleobject.h" // _PyModule_GetState() +#include "pycore_pylifecycle.h" #include "pycore_pystate.h" // _PyThreadState_Init() #include // offsetof() #include "structmember.h" // PyMemberDef @@ -35,7 +36,7 @@ typedef struct { static inline thread_module_state* get_thread_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (thread_module_state *)state; } diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 7ba14095c96e19..9d5a45adac59d0 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -35,7 +35,7 @@ /* See http://www.python.org/2.4/license for licensing details. */ #include "Python.h" -#include "moduleobject.h" // PyModuleDef_Slot +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef @@ -87,7 +87,7 @@ typedef struct { static inline WinApiState* winapi_get_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (WinApiState *)state; } diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index fb9ebbe9f4870f..f5326789521d30 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -5,6 +5,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include // offsetof() @@ -63,7 +64,7 @@ typedef struct { static array_state * get_array_state(PyObject *module) { - return (array_state *)PyModule_GetState(module); + return (array_state *)_PyModule_GetState(module); } #define find_array_state_by_type(tp) \ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 65e8d5e7bd984d..8ce62c88216e3d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11,6 +11,7 @@ #include "Python.h" #include "pycore_fileutils.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #ifdef MS_WINDOWS /* include early to avoid conflict with pycore_condvar.h: @@ -994,7 +995,7 @@ typedef struct { static inline _posixstate* get_posix_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_posixstate *)state; } diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 9687ba5c7a93f8..b0487c2b68811b 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -2,6 +2,7 @@ #include "Python.h" #include "pycore_ceval.h" // _PyEval_BuiltinsFromGlobals() +#include "pycore_moduleobject.h" // _PyModule_GetDict() #include "pycore_object.h" // _PyObject_GC_UNTRACK() #include "frameobject.h" // PyFrameObject @@ -1176,7 +1177,7 @@ _PyEval_BuiltinsFromGlobals(PyThreadState *tstate, PyObject *globals) PyObject *builtins = _PyDict_GetItemIdWithError(globals, &PyId___builtins__); if (builtins) { if (PyModule_Check(builtins)) { - builtins = PyModule_GetDict(builtins); + builtins = _PyModule_GetDict(builtins); assert(builtins != NULL); } return builtins; diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index e57ea86e7694ce..a6eb85bdc2a962 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -4,6 +4,7 @@ #include "Python.h" #include "pycore_interp.h" // PyInterpreterState.importlib #include "pycore_pystate.h" // _PyInterpreterState_GET() +#include "pycore_moduleobject.h" // _PyModule_GetDef() #include "structmember.h" // PyMemberDef static Py_ssize_t max_module_number; @@ -12,15 +13,6 @@ _Py_IDENTIFIER(__doc__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__spec__); -typedef struct { - PyObject_HEAD - PyObject *md_dict; - struct PyModuleDef *md_def; - void *md_state; - PyObject *md_weaklist; - PyObject *md_name; /* for logging purposes after md_dict is cleared */ -} PyModuleObject; - static PyMemberDef module_members[] = { {"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY}, {0} @@ -469,14 +461,11 @@ PyModule_SetDocString(PyObject *m, const char *doc) PyObject * PyModule_GetDict(PyObject *m) { - PyObject *d; if (!PyModule_Check(m)) { PyErr_BadInternalCall(); return NULL; } - d = ((PyModuleObject *)m) -> md_dict; - assert(d != NULL); - return d; + return _PyModule_GetDict(m); } PyObject* @@ -556,7 +545,7 @@ PyModule_GetDef(PyObject* m) PyErr_BadArgument(); return NULL; } - return ((PyModuleObject *)m)->md_def; + return _PyModule_GetDef(m); } void* @@ -566,7 +555,7 @@ PyModule_GetState(PyObject* m) PyErr_BadArgument(); return NULL; } - return ((PyModuleObject *)m)->md_state; + return _PyModule_GetState(m); } void diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 03af2c5d75dd80..254d12cc970148 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4,6 +4,7 @@ #include "pycore_call.h" #include "pycore_compile.h" // _Py_Mangle() #include "pycore_initconfig.h" +#include "pycore_moduleobject.h" // _PyModule_GetDef() #include "pycore_object.h" #include "pycore_pyerrors.h" #include "pycore_pystate.h" // _PyThreadState_GET() @@ -3582,7 +3583,7 @@ PyType_GetModuleState(PyTypeObject *type) if (m == NULL) { return NULL; } - return PyModule_GetState(m); + return _PyModule_GetState(m); } @@ -3617,7 +3618,7 @@ _PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def) PyHeapTypeObject *ht = (PyHeapTypeObject*)super; PyObject *module = ht->ht_module; - if (module && PyModule_GetDef(module) == def) { + if (module && _PyModule_GetDef(module) == def) { return module; } i++; diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 3c4785c077e6a1..429d437c5ebc20 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -199,6 +199,7 @@ + diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters index 8c104bf7b31034..55b57ef29dc0c9 100644 --- a/PCbuild/pythoncore.vcxproj.filters +++ b/PCbuild/pythoncore.vcxproj.filters @@ -558,6 +558,9 @@ Include\internal + + Include\internal + Include\internal diff --git a/setup.py b/setup.py index af384409553eb8..df434d48768e98 100644 --- a/setup.py +++ b/setup.py @@ -869,7 +869,8 @@ def detect_simple_extensions(self): # # array objects - self.add(Extension('array', ['arraymodule.c'])) + self.add(Extension('array', ['arraymodule.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) # Context Variables self.add(Extension('_contextvars', ['_contextvarsmodule.c'])) @@ -934,9 +935,11 @@ def detect_simple_extensions(self): self.add(Extension("_asyncio", ["_asynciomodule.c"], extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) # _abc speedups - self.add(Extension("_abc", ["_abc.c"])) + self.add(Extension("_abc", ["_abc.c"], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) # _queue module - self.add(Extension("_queue", ["_queuemodule.c"])) + self.add(Extension("_queue", ["_queuemodule.c"], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) # _statistics module self.add(Extension("_statistics", ["_statisticsmodule.c"])) @@ -2696,7 +2699,8 @@ class DummyProcess: 'install_lib': PyBuildInstallLib}, # The struct module is defined here, because build_ext won't be # called unless there's at least one extension module defined. - ext_modules=[Extension('_struct', ['_struct.c'])], + ext_modules=[Extension('_struct', ['_struct.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])], # If you change the scripts installed here, you also need to # check the PyBuildScripts command above, and change the links From webhook-mailer at python.org Wed Apr 21 18:53:35 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 21 Apr 2021 22:53:35 -0000 Subject: [Python-checkins] bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) Message-ID: https://github.com/python/cpython/commit/602eefef0bd0187049c2ab9071390f8573fc299a commit: 602eefef0bd0187049c2ab9071390f8573fc299a branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-21T15:53:31-07:00 summary: bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) (cherry picked from commit 7b86e47617d81a4b14d929743425f448971e8c86) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst M Doc/library/sys.rst M Modules/_xxsubinterpretersmodule.c diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index def2d7ea63dcf1..95cbaf2f033ea1 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -26,12 +26,12 @@ always available. .. function:: addaudithook(hook) Append the callable *hook* to the list of active auditing hooks for the - current interpreter. + current (sub)interpreter. When an auditing event is raised through the :func:`sys.audit` function, each hook will be called in the order it was added with the event name and the tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are - called first, followed by hooks added in the current interpreter. Hooks + called first, followed by hooks added in the current (sub)interpreter. Hooks can then log the event, raise an exception to abort the operation, or terminate the process entirely. diff --git a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst new file mode 100644 index 00000000000000..e38dc169def96e --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst @@ -0,0 +1,3 @@ +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c index db1116ac6e352d..bda2a256ed9f7b 100644 --- a/Modules/_xxsubinterpretersmodule.c +++ b/Modules/_xxsubinterpretersmodule.c @@ -1993,7 +1993,7 @@ interp_create(PyObject *self, PyObject *args) } // Create and initialize the new interpreter. - PyThreadState *save_tstate = PyThreadState_Swap(NULL); + PyThreadState *save_tstate = PyThreadState_Get(); // XXX Possible GILState issues? PyThreadState *tstate = Py_NewInterpreter(); PyThreadState_Swap(save_tstate); From webhook-mailer at python.org Wed Apr 21 19:18:24 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 21 Apr 2021 23:18:24 -0000 Subject: [Python-checkins] bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) Message-ID: https://github.com/python/cpython/commit/dc516ef8395d15da0ab225eb0dceb2e0581f51ca commit: dc516ef8395d15da0ab225eb0dceb2e0581f51ca branch: master author: Steve Dower committer: zooba date: 2021-04-22T00:18:20+01:00 summary: bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) files: A Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst M Modules/socketmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst new file mode 100644 index 00000000000000..d6826fb39706bd --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst @@ -0,0 +1,2 @@ +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 23aab59d9749ad..79559c04d5104d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -5508,7 +5508,7 @@ sock_decode_hostname(const char *name) #ifdef MS_WINDOWS /* Issue #26227: gethostbyaddr() returns a string encoded * to the ANSI code page */ - return PyUnicode_DecodeFSDefault(name); + return PyUnicode_DecodeMBCS(name, strlen(name), "surrogatepass"); #else /* Decode from UTF-8 */ return PyUnicode_FromString(name); From webhook-mailer at python.org Wed Apr 21 19:36:43 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 21 Apr 2021 23:36:43 -0000 Subject: [Python-checkins] bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) Message-ID: https://github.com/python/cpython/commit/f7bc44170b4bdd16c46b4b6acf7673ffc24dfb19 commit: f7bc44170b4bdd16c46b4b6acf7673ffc24dfb19 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-21T16:36:36-07:00 summary: bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) (cherry picked from commit dc516ef8395d15da0ab225eb0dceb2e0581f51ca) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst M Modules/socketmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst new file mode 100644 index 00000000000000..d6826fb39706bd --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst @@ -0,0 +1,2 @@ +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 3e65dc027a38ca..5406f8b46f243f 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -5474,7 +5474,7 @@ sock_decode_hostname(const char *name) #ifdef MS_WINDOWS /* Issue #26227: gethostbyaddr() returns a string encoded * to the ANSI code page */ - return PyUnicode_DecodeFSDefault(name); + return PyUnicode_DecodeMBCS(name, strlen(name), "surrogatepass"); #else /* Decode from UTF-8 */ return PyUnicode_FromString(name); From webhook-mailer at python.org Wed Apr 21 19:43:44 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 21 Apr 2021 23:43:44 -0000 Subject: [Python-checkins] bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) Message-ID: https://github.com/python/cpython/commit/d8576b1d15155688a67baac24c15254700bdd3b7 commit: d8576b1d15155688a67baac24c15254700bdd3b7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-21T16:43:40-07:00 summary: bpo-26227: Fixes decoding of host names on Windows from ANSI instead of UTF-8 (GH-25510) (cherry picked from commit dc516ef8395d15da0ab225eb0dceb2e0581f51ca) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst M Modules/socketmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst new file mode 100644 index 00000000000000..d6826fb39706bd --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst @@ -0,0 +1,2 @@ +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index be75e681d45d99..89531851c85756 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -5557,7 +5557,7 @@ sock_decode_hostname(const char *name) #ifdef MS_WINDOWS /* Issue #26227: gethostbyaddr() returns a string encoded * to the ANSI code page */ - return PyUnicode_DecodeFSDefault(name); + return PyUnicode_DecodeMBCS(name, strlen(name), "surrogatepass"); #else /* Decode from UTF-8 */ return PyUnicode_FromString(name); From webhook-mailer at python.org Wed Apr 21 23:23:28 2021 From: webhook-mailer at python.org (ethanfurman) Date: Thu, 22 Apr 2021 03:23:28 -0000 Subject: [Python-checkins] bpo-38659: Properly re-intialize module variables in test_enum (GH-25516) Message-ID: https://github.com/python/cpython/commit/37b173c5231b7b202859af97c17bc3d04b1e4c75 commit: 37b173c5231b7b202859af97c17bc3d04b1e4c75 branch: master author: Ammar Askar committer: ethanfurman date: 2021-04-21T20:22:58-07:00 summary: bpo-38659: Properly re-intialize module variables in test_enum (GH-25516) Previously TestIntEnumConvert and TestStrEnumConvert would end up converting the module level variables from their regular int form to a `test.test_enum.X` instance after _convert would run. This meant that after a single test ran, the next set of _convert functions would be operating on the enum instances rather than ints. This would cause some tests such as the one involving format to fail when running under a mode that repeatedly runs test such as the refleak finder. files: M Lib/test/test_enum.py diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index d946dd520da95..4f28b80293d35 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3642,6 +3642,14 @@ def test__all__(self): CONVERT_STRING_TEST_NAME_F = 5 class TestIntEnumConvert(unittest.TestCase): + def setUp(self): + # Reset the module-level test variables to their original integer + # values, otherwise the already created enum values get converted + # instead. + for suffix in ['A', 'B', 'C', 'D', 'E', 'F']: + globals()[f'CONVERT_TEST_NAME_{suffix}'] = 5 + globals()[f'CONVERT_STRING_TEST_NAME_{suffix}'] = 5 + def test_convert_value_lookup_priority(self): test_type = enum.IntEnum._convert_( 'UnittestConvert', @@ -3688,8 +3696,6 @@ def test_convert_raise(self): filter=lambda x: x.startswith('CONVERT_TEST_')) def test_convert_repr_and_str(self): - # reset global constants, as previous tests could have converted the - # integer values to enums module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( 'UnittestConvert', @@ -3704,6 +3710,11 @@ def test_convert_repr_and_str(self): CONVERT_STR_TEST_1 = 'hello' class TestStrEnumConvert(unittest.TestCase): + def setUp(self): + global CONVERT_STR_TEST_1 + global CONVERT_STR_TEST_2 + CONVERT_STR_TEST_2 = 'goodbye' + CONVERT_STR_TEST_1 = 'hello' def test_convert(self): test_type = enum.StrEnum._convert_( From webhook-mailer at python.org Thu Apr 22 00:08:54 2021 From: webhook-mailer at python.org (methane) Date: Thu, 22 Apr 2021 04:08:54 -0000 Subject: [Python-checkins] bpo-28724: Doc: Move socket.send_fds and socket.recv_fds docs to right section (GH-22608) Message-ID: https://github.com/python/cpython/commit/660592f67c0d825b06eb4a38ccc04b34a1f01f00 commit: 660592f67c0d825b06eb4a38ccc04b34a1f01f00 branch: master author: Saiyang Gou committer: methane date: 2021-04-22T13:08:46+09:00 summary: bpo-28724: Doc: Move socket.send_fds and socket.recv_fds docs to right section (GH-22608) files: M Doc/library/socket.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 30b3c5e24eefc..8a1fc96e0362e 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -1143,6 +1143,32 @@ The :mod:`socket` module also offers various network-related services: "Interface name" is a name as documented in :func:`if_nameindex`. +.. function:: send_fds(sock, buffers, fds[, flags[, address]]) + + Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket *sock*. + The *fds* parameter is a sequence of file descriptors. + Consult :meth:`sendmsg` for the documentation of these parameters. + + .. availability:: Unix supporting :meth:`~socket.sendmsg` and :const:`SCM_RIGHTS` mechanism. + + .. versionadded:: 3.9 + + +.. function:: recv_fds(sock, bufsize, maxfds[, flags]) + + Receive up to *maxfds* file descriptors from an :const:`AF_UNIX` socket *sock*. + Return ``(msg, list(fds), flags, addr)``. + Consult :meth:`recvmsg` for the documentation of these parameters. + + .. availability:: Unix supporting :meth:`~socket.recvmsg` and :const:`SCM_RIGHTS` mechanism. + + .. versionadded:: 3.9 + + .. note:: + + Any truncated integers at the end of the list of file descriptors. + + .. _socket-objects: Socket Objects @@ -1637,29 +1663,6 @@ to sockets. .. versionadded:: 3.6 -.. method:: socket.send_fds(sock, buffers, fds[, flags[, address]]) - - Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket. - The *fds* parameter is a sequence of file descriptors. - Consult :meth:`sendmsg` for the documentation of these parameters. - - .. availability:: Unix supporting :meth:`~socket.sendmsg` and :const:`SCM_RIGHTS` mechanism. - - .. versionadded:: 3.9 - -.. method:: socket.recv_fds(sock, bufsize, maxfds[, flags]) - - Receive up to *maxfds* file descriptors. Return ``(msg, list(fds), flags, addr)``. Consult - :meth:`recvmsg` for the documentation of these parameters. - - .. availability:: Unix supporting :meth:`~socket.recvmsg` and :const:`SCM_RIGHTS` mechanism. - - .. versionadded:: 3.9 - - .. note:: - - Any truncated integers at the end of the list of file descriptors. - .. method:: socket.sendfile(file, offset=0, count=None) Send a file until EOF is reached by using high-performance diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 174d9e24be319..602ed065858ec 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -658,7 +658,7 @@ The socket module now supports the :data:`~socket.CAN_J1939` protocol on platforms that support it. (Contributed by Karl Ding in :issue:`40291`.) The socket module now has the :func:`socket.send_fds` and -:func:`socket.recv.fds` methods. (Contributed by Joannah Nanjekye, Shinya +:func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya Okano and Victor Stinner in :issue:`28724`.) From webhook-mailer at python.org Thu Apr 22 00:32:53 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 04:32:53 -0000 Subject: [Python-checkins] bpo-28724: Doc: Move socket.send_fds and socket.recv_fds docs to right section (GH-22608) Message-ID: https://github.com/python/cpython/commit/87a392db40d52cba18ffc67730856e11cb8cf945 commit: 87a392db40d52cba18ffc67730856e11cb8cf945 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-21T21:32:40-07:00 summary: bpo-28724: Doc: Move socket.send_fds and socket.recv_fds docs to right section (GH-22608) (cherry picked from commit 660592f67c0d825b06eb4a38ccc04b34a1f01f00) Co-authored-by: Saiyang Gou files: M Doc/library/socket.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 2fc170a0bc0bd3..26892c99268ba9 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -1139,6 +1139,32 @@ The :mod:`socket` module also offers various network-related services: "Interface name" is a name as documented in :func:`if_nameindex`. +.. function:: send_fds(sock, buffers, fds[, flags[, address]]) + + Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket *sock*. + The *fds* parameter is a sequence of file descriptors. + Consult :meth:`sendmsg` for the documentation of these parameters. + + .. availability:: Unix supporting :meth:`~socket.sendmsg` and :const:`SCM_RIGHTS` mechanism. + + .. versionadded:: 3.9 + + +.. function:: recv_fds(sock, bufsize, maxfds[, flags]) + + Receive up to *maxfds* file descriptors from an :const:`AF_UNIX` socket *sock*. + Return ``(msg, list(fds), flags, addr)``. + Consult :meth:`recvmsg` for the documentation of these parameters. + + .. availability:: Unix supporting :meth:`~socket.recvmsg` and :const:`SCM_RIGHTS` mechanism. + + .. versionadded:: 3.9 + + .. note:: + + Any truncated integers at the end of the list of file descriptors. + + .. _socket-objects: Socket Objects @@ -1633,29 +1659,6 @@ to sockets. .. versionadded:: 3.6 -.. method:: socket.send_fds(sock, buffers, fds[, flags[, address]]) - - Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket. - The *fds* parameter is a sequence of file descriptors. - Consult :meth:`sendmsg` for the documentation of these parameters. - - .. availability:: Unix supporting :meth:`~socket.sendmsg` and :const:`SCM_RIGHTS` mechanism. - - .. versionadded:: 3.9 - -.. method:: socket.recv_fds(sock, bufsize, maxfds[, flags]) - - Receive up to *maxfds* file descriptors. Return ``(msg, list(fds), flags, addr)``. Consult - :meth:`recvmsg` for the documentation of these parameters. - - .. availability:: Unix supporting :meth:`~socket.recvmsg` and :const:`SCM_RIGHTS` mechanism. - - .. versionadded:: 3.9 - - .. note:: - - Any truncated integers at the end of the list of file descriptors. - .. method:: socket.sendfile(file, offset=0, count=None) Send a file until EOF is reached by using high-performance diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index d5eaccacde67a9..b39fdb5efdf51a 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -658,7 +658,7 @@ The socket module now supports the :data:`~socket.CAN_J1939` protocol on platforms that support it. (Contributed by Karl Ding in :issue:`40291`.) The socket module now has the :func:`socket.send_fds` and -:func:`socket.recv.fds` methods. (Contributed by Joannah Nanjekye, Shinya +:func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya Okano and Victor Stinner in :issue:`28724`.) From webhook-mailer at python.org Thu Apr 22 10:36:41 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 14:36:41 -0000 Subject: [Python-checkins] Fix typo in the documentation (GH-24703) Message-ID: https://github.com/python/cpython/commit/accea7dc2bd30a6e8e1b0334acfca9585cbd7f8a commit: accea7dc2bd30a6e8e1b0334acfca9585cbd7f8a branch: master author: Alperen Serkan Aks?z <61659936+Sekomer at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T07:36:05-07:00 summary: Fix typo in the documentation (GH-24703) Missing multiply symbol added Automerge-Triggered-By: GH:merwok files: From webhook-mailer at python.org Thu Apr 22 11:35:20 2021 From: webhook-mailer at python.org (rhettinger) Date: Thu, 22 Apr 2021 15:35:20 -0000 Subject: [Python-checkins] bpo-43475: Fix worst case collision behavior for NaN instances (GH-25493) Message-ID: https://github.com/python/cpython/commit/a07da09ad5bd7d234ccd084a3a0933c290d1b592 commit: a07da09ad5bd7d234ccd084a3a0933c290d1b592 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-22T08:34:57-07:00 summary: bpo-43475: Fix worst case collision behavior for NaN instances (GH-25493) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst M Doc/library/stdtypes.rst M Doc/library/sys.rst M Include/pyhash.h M Lib/_pydecimal.py M Modules/_decimal/_decimal.c M Objects/complexobject.c M Objects/floatobject.c M Python/pyhash.c M Python/sysmodule.c diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index 68b60508b73d2f..b83d0d87f587fc 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -692,10 +692,9 @@ Here are the rules in detail: as ``-hash(-x)``. If the resulting hash is ``-1``, replace it with ``-2``. -- The particular values ``sys.hash_info.inf``, ``-sys.hash_info.inf`` - and ``sys.hash_info.nan`` are used as hash values for positive - infinity, negative infinity, or nans (respectively). (All hashable - nans have the same hash value.) +- The particular values ``sys.hash_info.inf`` and ``-sys.hash_info.inf`` + are used as hash values for positive + infinity or negative infinity (respectively). - For a :class:`complex` number ``z``, the hash values of the real and imaginary parts are combined by computing ``hash(z.real) + @@ -740,7 +739,7 @@ number, :class:`float`, or :class:`complex`:: """Compute the hash of a float x.""" if math.isnan(x): - return sys.hash_info.nan + return super().__hash__() elif math.isinf(x): return sys.hash_info.inf if x > 0 else -sys.hash_info.inf else: diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index e431d1b50309c3..fe1cca1436854e 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -855,7 +855,7 @@ always available. +---------------------+--------------------------------------------------+ | :const:`inf` | hash value returned for a positive infinity | +---------------------+--------------------------------------------------+ - | :const:`nan` | hash value returned for a nan | + | :const:`nan` | (this attribute is no longer used) | +---------------------+--------------------------------------------------+ | :const:`imag` | multiplier used for the imaginary part of a | | | complex number | diff --git a/Include/pyhash.h b/Include/pyhash.h index 4437b870332bde..728ef932a1accb 100644 --- a/Include/pyhash.h +++ b/Include/pyhash.h @@ -7,7 +7,7 @@ extern "C" { /* Helpers for hash functions */ #ifndef Py_LIMITED_API -PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double); +PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); PyAPI_FUNC(Py_hash_t) _Py_HashPointer(const void*); // Similar to _Py_HashPointer(), but don't replace -1 with -2 PyAPI_FUNC(Py_hash_t) _Py_HashPointerRaw(const void*); @@ -29,7 +29,6 @@ PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t); #define _PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1) #define _PyHASH_INF 314159 -#define _PyHASH_NAN 0 #define _PyHASH_IMAG _PyHASH_MULTIPLIER diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index ab989e5206a9e9..ff23322ed5603e 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -951,7 +951,7 @@ def __hash__(self): if self.is_snan(): raise TypeError('Cannot hash a signaling NaN value.') elif self.is_nan(): - return _PyHASH_NAN + return super().__hash__() else: if self._sign: return -_PyHASH_INF diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst new file mode 100644 index 00000000000000..73ed0222ba3b0c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst @@ -0,0 +1,3 @@ +Hashes of NaN values now depend on object identity. Formerly, they always +hashed to 0 even though NaN values are not equal to one another. Having the +same hash for unequal values caused pile-ups in hash tables. diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 9a4329f494f31b..9b89fa40c926b1 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -4536,7 +4536,6 @@ _dec_hash(PyDecObject *v) #error "No valid combination of CONFIG_64, CONFIG_32 and _PyHASH_BITS" #endif const Py_hash_t py_hash_inf = 314159; - const Py_hash_t py_hash_nan = 0; mpd_uint_t ten_data[1] = {10}; mpd_t ten = {MPD_POS|MPD_STATIC|MPD_CONST_DATA, 0, 2, 1, 1, ten_data}; @@ -4555,7 +4554,7 @@ _dec_hash(PyDecObject *v) return -1; } else if (mpd_isnan(MPD(v))) { - return py_hash_nan; + return _Py_HashPointer(v); } else { return py_hash_inf * mpd_arith_sign(MPD(v)); @@ -5939,5 +5938,3 @@ PyInit__decimal(void) return NULL; /* GCOV_NOT_REACHED */ } - - diff --git a/Objects/complexobject.c b/Objects/complexobject.c index a65ebdfa6cdf93..91e06a8c2c2ab7 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -412,10 +412,10 @@ static Py_hash_t complex_hash(PyComplexObject *v) { Py_uhash_t hashreal, hashimag, combined; - hashreal = (Py_uhash_t)_Py_HashDouble(v->cval.real); + hashreal = (Py_uhash_t)_Py_HashDouble((PyObject *) v, v->cval.real); if (hashreal == (Py_uhash_t)-1) return -1; - hashimag = (Py_uhash_t)_Py_HashDouble(v->cval.imag); + hashimag = (Py_uhash_t)_Py_HashDouble((PyObject *)v, v->cval.imag); if (hashimag == (Py_uhash_t)-1) return -1; /* Note: if the imaginary part is 0, hashimag is 0 now, diff --git a/Objects/floatobject.c b/Objects/floatobject.c index b3c41b1ca051d1..7e78132c01ca27 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -556,7 +556,7 @@ float_richcompare(PyObject *v, PyObject *w, int op) static Py_hash_t float_hash(PyFloatObject *v) { - return _Py_HashDouble(v->ob_fval); + return _Py_HashDouble((PyObject *)v, v->ob_fval); } static PyObject * diff --git a/Python/pyhash.c b/Python/pyhash.c index 3b6c34eefd515a..f0c82356f1e26c 100644 --- a/Python/pyhash.c +++ b/Python/pyhash.c @@ -56,8 +56,12 @@ static Py_ssize_t hashstats[Py_HASH_STATS_MAX + 1] = {0}; If the result of the reduction is infinity (this is impossible for integers, floats and Decimals) then use the predefined hash value _PyHASH_INF for x >= 0, or -_PyHASH_INF for x < 0, instead. - _PyHASH_INF, -_PyHASH_INF and _PyHASH_NAN are also used for the - hashes of float and Decimal infinities and nans. + _PyHASH_INF and -_PyHASH_INF are also used for the + hashes of float and Decimal infinities. + + NaNs hash with a pointer hash. Having distinct hash values prevents + catastrophic pileups from distinct NaN instances which used to always + have the same hash value but would compare unequal. A selling point for the above strategy is that it makes it possible to compute hashes of decimal and binary floating-point numbers @@ -82,8 +86,10 @@ static Py_ssize_t hashstats[Py_HASH_STATS_MAX + 1] = {0}; */ +Py_hash_t _Py_HashPointer(const void *); + Py_hash_t -_Py_HashDouble(double v) +_Py_HashDouble(PyObject *inst, double v) { int e, sign; double m; @@ -93,7 +99,7 @@ _Py_HashDouble(double v) if (Py_IS_INFINITY(v)) return v > 0 ? _PyHASH_INF : -_PyHASH_INF; else - return _PyHASH_NAN; + return _Py_HashPointer(inst); } m = frexp(v, &e); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index a36d90f9de1682..911c2d967b010a 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1405,7 +1405,7 @@ get_hash_info(PyThreadState *tstate) PyStructSequence_SET_ITEM(hash_info, field++, PyLong_FromLong(_PyHASH_INF)); PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(_PyHASH_NAN)); + PyLong_FromLong(0)); // This is no longer used PyStructSequence_SET_ITEM(hash_info, field++, PyLong_FromLong(_PyHASH_IMAG)); PyStructSequence_SET_ITEM(hash_info, field++, From webhook-mailer at python.org Thu Apr 22 12:43:57 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 16:43:57 -0000 Subject: [Python-checkins] bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) Message-ID: https://github.com/python/cpython/commit/2a3f4899c63806439e5bcea0c30f7e6a6295a763 commit: 2a3f4899c63806439e5bcea0c30f7e6a6295a763 branch: master author: Shreyan Avigyan committer: zooba date: 2021-04-22T17:43:37+01:00 summary: bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) The sys module uses the kernel32.dll version number, which can vary from the "actual" Windows version. Since the best option for getting the version is WMI (which is expensive), we switch back to launching cmd.exe (which is also expensive, but a lot less code on our part). sys.getwindowsversion() is not updated to avoid launching executables from that module. files: A Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst M Doc/library/sys.rst M Lib/platform.py diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index fe1cca1436854e..ec12e02fb37d45 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -796,11 +796,16 @@ always available. Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information about these fields. - *platform_version* returns the accurate major version, minor version and + *platform_version* returns the major version, minor version and build number of the current operating system, rather than the version that is being emulated for the process. It is intended for use in logging rather than for feature detection. + .. note:: + *platform_version* derives the version from kernel32.dll which can be of a different + version than the OS version. Please use :mod:`platform` module for achieving accurate + OS version. + .. availability:: Windows. .. versionchanged:: 3.2 diff --git a/Lib/platform.py b/Lib/platform.py index d567dd1a6e1ad7..d298a42edc8483 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -239,11 +239,9 @@ def _norm_version(version, build=''): if build: l.append(build) try: - ints = map(int, l) + strings = list(map(str, map(int, l))) except ValueError: strings = l - else: - strings = list(map(str, ints)) version = '.'.join(strings[:3]) return version @@ -365,17 +363,20 @@ def win32_ver(release='', version='', csd='', ptype=''): return release, version, csd, ptype winver = getwindowsversion() - maj, min, build = winver.platform_version or winver[:3] - version = '{0}.{1}.{2}'.format(maj, min, build) + try: + major, minor, build = map(int, _syscmd_ver()[2].split('.')) + except ValueError: + major, minor, build = winver.platform_version or winver[:3] + version = '{0}.{1}.{2}'.format(major, minor, build) - release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or - _WIN32_CLIENT_RELEASES.get((maj, None)) or + release = (_WIN32_CLIENT_RELEASES.get((major, minor)) or + _WIN32_CLIENT_RELEASES.get((major, None)) or release) # getwindowsversion() reflect the compatibility mode Python is # running under, and so the service pack value is only going to be # valid if the versions match. - if winver[:2] == (maj, min): + if winver[:2] == (major, minor): try: csd = 'SP{}'.format(winver.service_pack_major) except AttributeError: @@ -384,8 +385,8 @@ def win32_ver(release='', version='', csd='', ptype=''): # VER_NT_SERVER = 3 if getattr(winver, 'product_type', None) == 3: - release = (_WIN32_SERVER_RELEASES.get((maj, min)) or - _WIN32_SERVER_RELEASES.get((maj, None)) or + release = (_WIN32_SERVER_RELEASES.get((major, minor)) or + _WIN32_SERVER_RELEASES.get((major, None)) or release) try: diff --git a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst new file mode 100644 index 00000000000000..7e41016015efed --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst @@ -0,0 +1,6 @@ +platform.win32_ver derives the windows version from +sys.getwindowsversion().platform_version which in turn derives the version +from kernel32.dll (which can be of a different version than Windows itself). +Therefore change the platform.win32_ver to determine the version using the +platform module's _syscmd_ver private function to return an accurate +version. From webhook-mailer at python.org Thu Apr 22 13:03:45 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 17:03:45 -0000 Subject: [Python-checkins] bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) Message-ID: https://github.com/python/cpython/commit/ef63328b46fe7402794cde51008a47e79f37b153 commit: ef63328b46fe7402794cde51008a47e79f37b153 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T10:03:36-07:00 summary: bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) The sys module uses the kernel32.dll version number, which can vary from the "actual" Windows version. Since the best option for getting the version is WMI (which is expensive), we switch back to launching cmd.exe (which is also expensive, but a lot less code on our part). sys.getwindowsversion() is not updated to avoid launching executables from that module. (cherry picked from commit 2a3f4899c63806439e5bcea0c30f7e6a6295a763) Co-authored-by: Shreyan Avigyan files: A Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst M Doc/library/sys.rst M Lib/platform.py diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 95cbaf2f033ea1..7e11dc0c499d14 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -778,11 +778,16 @@ always available. Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information about these fields. - *platform_version* returns the accurate major version, minor version and + *platform_version* returns the major version, minor version and build number of the current operating system, rather than the version that is being emulated for the process. It is intended for use in logging rather than for feature detection. + .. note:: + *platform_version* derives the version from kernel32.dll which can be of a different + version than the OS version. Please use :mod:`platform` module for achieving accurate + OS version. + .. availability:: Windows. .. versionchanged:: 3.2 diff --git a/Lib/platform.py b/Lib/platform.py index 994d892c5e6166..b7e7bc439e0a90 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -236,11 +236,9 @@ def _norm_version(version, build=''): if build: l.append(build) try: - ints = map(int, l) + strings = list(map(str, map(int, l))) except ValueError: strings = l - else: - strings = list(map(str, ints)) version = '.'.join(strings[:3]) return version @@ -362,17 +360,20 @@ def win32_ver(release='', version='', csd='', ptype=''): return release, version, csd, ptype winver = getwindowsversion() - maj, min, build = winver.platform_version or winver[:3] - version = '{0}.{1}.{2}'.format(maj, min, build) + try: + major, minor, build = map(int, _syscmd_ver()[2].split('.')) + except ValueError: + major, minor, build = winver.platform_version or winver[:3] + version = '{0}.{1}.{2}'.format(major, minor, build) - release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or - _WIN32_CLIENT_RELEASES.get((maj, None)) or + release = (_WIN32_CLIENT_RELEASES.get((major, minor)) or + _WIN32_CLIENT_RELEASES.get((major, None)) or release) # getwindowsversion() reflect the compatibility mode Python is # running under, and so the service pack value is only going to be # valid if the versions match. - if winver[:2] == (maj, min): + if winver[:2] == (major, minor): try: csd = 'SP{}'.format(winver.service_pack_major) except AttributeError: @@ -381,8 +382,8 @@ def win32_ver(release='', version='', csd='', ptype=''): # VER_NT_SERVER = 3 if getattr(winver, 'product_type', None) == 3: - release = (_WIN32_SERVER_RELEASES.get((maj, min)) or - _WIN32_SERVER_RELEASES.get((maj, None)) or + release = (_WIN32_SERVER_RELEASES.get((major, minor)) or + _WIN32_SERVER_RELEASES.get((major, None)) or release) try: diff --git a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst new file mode 100644 index 00000000000000..7e41016015efed --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst @@ -0,0 +1,6 @@ +platform.win32_ver derives the windows version from +sys.getwindowsversion().platform_version which in turn derives the version +from kernel32.dll (which can be of a different version than Windows itself). +Therefore change the platform.win32_ver to determine the version using the +platform module's _syscmd_ver private function to return an accurate +version. From webhook-mailer at python.org Thu Apr 22 15:45:11 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 19:45:11 -0000 Subject: [Python-checkins] bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) Message-ID: https://github.com/python/cpython/commit/fe63a401a9b3ca1751b81b5d6ddb2beb7f3675c1 commit: fe63a401a9b3ca1751b81b5d6ddb2beb7f3675c1 branch: master author: Steve Dower committer: zooba date: 2021-04-22T20:45:02+01:00 summary: bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) It would just fail if the path was inaccessible and had a trailing slash. It should fall back to the parent directory's metadata. files: A Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst M Modules/posixmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst new file mode 100644 index 0000000000000..072a96989c3d0 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst @@ -0,0 +1,3 @@ +Fixed :func:`os.stat` failing on inaccessible directories with a trailing +slash, rather than falling back to the parent directory's metadata. This +implicitly affected :func:`os.path.exists` and :func:`os.path.isdir`. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 8ce62c88216e3..7a5a0e9e8dd24 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1851,9 +1851,28 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re { HANDLE hFindFile; WIN32_FIND_DATAW FileData; - hFindFile = FindFirstFileW(pszFile, &FileData); - if (hFindFile == INVALID_HANDLE_VALUE) + LPCWSTR filename = pszFile; + size_t n = wcslen(pszFile); + if (n && (pszFile[n - 1] == L'\\' || pszFile[n - 1] == L'/')) { + // cannot use PyMem_Malloc here because we do not hold the GIL + filename = (LPCWSTR)malloc((n + 1) * sizeof(filename[0])); + wcsncpy_s((LPWSTR)filename, n + 1, pszFile, n); + while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { + ((LPWSTR)filename)[n] = L'\0'; + } + if (!n || filename[n] == L':') { + // Nothing left te query + free((void *)filename); + return FALSE; + } + } + hFindFile = FindFirstFileW(filename, &FileData); + if (pszFile != filename) { + free((void *)filename); + } + if (hFindFile == INVALID_HANDLE_VALUE) { return FALSE; + } FindClose(hFindFile); find_data_to_file_info(&FileData, info, reparse_tag); return TRUE; From webhook-mailer at python.org Thu Apr 22 15:45:55 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 19:45:55 -0000 Subject: [Python-checkins] bpo-43915: Add PCbuild/blurb.bat to simplify Windows contributors (GH-25528) Message-ID: https://github.com/python/cpython/commit/a911bd15a19824c92af8e90b63af4a84a9670222 commit: a911bd15a19824c92af8e90b63af4a84a9670222 branch: master author: Steve Dower committer: zooba date: 2021-04-22T20:45:47+01:00 summary: bpo-43915: Add PCbuild/blurb.bat to simplify Windows contributors (GH-25528) files: A PCbuild/blurb.bat diff --git a/PCbuild/blurb.bat b/PCbuild/blurb.bat new file mode 100644 index 00000000000000..0be228a2cdeafd --- /dev/null +++ b/PCbuild/blurb.bat @@ -0,0 +1,28 @@ + at echo off +rem +rem Runs the blurb tool. If necessary, will install Python and/or blurb. +rem +rem Pass "--update"/"-U" as the first argument to update blurb. +rem + +call "%~dp0find_python.bat" %PYTHON% +if ERRORLEVEL 1 (echo Cannot locate python.exe on PATH or as PYTHON variable & exit /b 3) + +if "%1" EQU "--update" (%PYTHON% -m pip install -U blurb && shift) +if "%1" EQU "-U" (%PYTHON% -m pip install -U blurb && shift) + +%PYTHON% -m blurb %1 %2 %3 %4 %5 %6 %7 %8 %9 +if ERRORLEVEL 1 goto :install_and_retry +exit /B 0 + +:install_and_retry +rem Before reporting the error, make sure that blurb is actually installed. +rem If not, install it first and try again. +set _ERR=%ERRORLEVEL% +%PYTHON% -c "import blurb" +if NOT ERRORLEVEL 1 exit /B %_ERR% +echo Installing blurb... +%PYTHON% -m pip install blurb +if ERRORLEVEL 1 exit /B %ERRORLEVEL% +%PYTHON% -m blurb %* +exit /B From webhook-mailer at python.org Thu Apr 22 16:04:48 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 20:04:48 -0000 Subject: [Python-checkins] bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) Message-ID: https://github.com/python/cpython/commit/4696f1285d83dd7b69f459c63e14080b1f87f797 commit: 4696f1285d83dd7b69f459c63e14080b1f87f797 branch: master author: Steve Dower committer: zooba date: 2021-04-22T21:04:44+01:00 summary: bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) files: A Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 1518d49f2212b..ebc2c02ecc0dc 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -33,6 +33,7 @@ _IGNORED_WINERRORS = ( 21, # ERROR_NOT_READY - drive exists but is not accessible + 123, # ERROR_INVALID_NAME - fix for bpo-35306 1921, # ERROR_CANT_RESOLVE_FILENAME - fix for broken symlink pointing to itself ) diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst new file mode 100644 index 0000000000000..af41b3ceacb64 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst @@ -0,0 +1,2 @@ +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. From webhook-mailer at python.org Thu Apr 22 16:07:10 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 20:07:10 -0000 Subject: [Python-checkins] bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) Message-ID: https://github.com/python/cpython/commit/400bd9a3858ea28ea264682b7f050c69638b1ff1 commit: 400bd9a3858ea28ea264682b7f050c69638b1ff1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T13:07:02-07:00 summary: bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) It would just fail if the path was inaccessible and had a trailing slash. It should fall back to the parent directory's metadata. (cherry picked from commit fe63a401a9b3ca1751b81b5d6ddb2beb7f3675c1) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst M Modules/posixmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst new file mode 100644 index 0000000000000..072a96989c3d0 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst @@ -0,0 +1,3 @@ +Fixed :func:`os.stat` failing on inaccessible directories with a trailing +slash, rather than falling back to the parent directory's metadata. This +implicitly affected :func:`os.path.exists` and :func:`os.path.isdir`. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0ef75fa4486ff..e821f1a59bde8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1651,9 +1651,28 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re { HANDLE hFindFile; WIN32_FIND_DATAW FileData; - hFindFile = FindFirstFileW(pszFile, &FileData); - if (hFindFile == INVALID_HANDLE_VALUE) + LPCWSTR filename = pszFile; + size_t n = wcslen(pszFile); + if (n && (pszFile[n - 1] == L'\\' || pszFile[n - 1] == L'/')) { + // cannot use PyMem_Malloc here because we do not hold the GIL + filename = (LPCWSTR)malloc((n + 1) * sizeof(filename[0])); + wcsncpy_s((LPWSTR)filename, n + 1, pszFile, n); + while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { + ((LPWSTR)filename)[n] = L'\0'; + } + if (!n || filename[n] == L':') { + // Nothing left te query + free((void *)filename); + return FALSE; + } + } + hFindFile = FindFirstFileW(filename, &FileData); + if (pszFile != filename) { + free((void *)filename); + } + if (hFindFile == INVALID_HANDLE_VALUE) { return FALSE; + } FindClose(hFindFile); find_data_to_file_info(&FileData, info, reparse_tag); return TRUE; From webhook-mailer at python.org Thu Apr 22 16:10:05 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 20:10:05 -0000 Subject: [Python-checkins] bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) Message-ID: https://github.com/python/cpython/commit/8e7cebb497e6004715a5475f6b53d8ef9d30a9fa commit: 8e7cebb497e6004715a5475f6b53d8ef9d30a9fa branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T13:09:56-07:00 summary: bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527) It would just fail if the path was inaccessible and had a trailing slash. It should fall back to the parent directory's metadata. (cherry picked from commit fe63a401a9b3ca1751b81b5d6ddb2beb7f3675c1) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst M Modules/posixmodule.c diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst new file mode 100644 index 0000000000000..072a96989c3d0 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst @@ -0,0 +1,3 @@ +Fixed :func:`os.stat` failing on inaccessible directories with a trailing +slash, rather than falling back to the parent directory's metadata. This +implicitly affected :func:`os.path.exists` and :func:`os.path.isdir`. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 80f82be7be9d7..35d63188e02f7 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1799,9 +1799,28 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re { HANDLE hFindFile; WIN32_FIND_DATAW FileData; - hFindFile = FindFirstFileW(pszFile, &FileData); - if (hFindFile == INVALID_HANDLE_VALUE) + LPCWSTR filename = pszFile; + size_t n = wcslen(pszFile); + if (n && (pszFile[n - 1] == L'\\' || pszFile[n - 1] == L'/')) { + // cannot use PyMem_Malloc here because we do not hold the GIL + filename = (LPCWSTR)malloc((n + 1) * sizeof(filename[0])); + wcsncpy_s((LPWSTR)filename, n + 1, pszFile, n); + while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { + ((LPWSTR)filename)[n] = L'\0'; + } + if (!n || filename[n] == L':') { + // Nothing left te query + free((void *)filename); + return FALSE; + } + } + hFindFile = FindFirstFileW(filename, &FileData); + if (pszFile != filename) { + free((void *)filename); + } + if (hFindFile == INVALID_HANDLE_VALUE) { return FALSE; + } FindClose(hFindFile); find_data_to_file_info(&FileData, info, reparse_tag); return TRUE; From webhook-mailer at python.org Thu Apr 22 16:25:18 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 20:25:18 -0000 Subject: [Python-checkins] bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) Message-ID: https://github.com/python/cpython/commit/1575ea01059b3ba836cdb62f01f0b6584d7756a7 commit: 1575ea01059b3ba836cdb62f01f0b6584d7756a7 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T13:25:08-07:00 summary: bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) (cherry picked from commit 4696f1285d83dd7b69f459c63e14080b1f87f797) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 5e3940bccc8ff..350f27e4a06de 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -39,6 +39,7 @@ _IGNORED_WINERRORS = ( 21, # ERROR_NOT_READY - drive exists but is not accessible + 123, # ERROR_INVALID_NAME - fix for bpo-35306 1921, # ERROR_CANT_RESOLVE_FILENAME - fix for broken symlink pointing to itself ) diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst new file mode 100644 index 0000000000000..af41b3ceacb64 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst @@ -0,0 +1,2 @@ +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. From webhook-mailer at python.org Thu Apr 22 16:30:44 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 22 Apr 2021 20:30:44 -0000 Subject: [Python-checkins] bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) Message-ID: https://github.com/python/cpython/commit/ab5d78ce4141a6b3cd55588cdbe3cd3bd5242d5b commit: ab5d78ce4141a6b3cd55588cdbe3cd3bd5242d5b branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T13:30:29-07:00 summary: bpo-35306: Avoid raising OSError from pathlib.Path.exists when passed an invalid filename (GH-25529) (cherry picked from commit 4696f1285d83dd7b69f459c63e14080b1f87f797) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index da51a4f500e80a..756d389cfad378 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -39,6 +39,7 @@ _IGNORED_WINERRORS = ( 21, # ERROR_NOT_READY - drive exists but is not accessible + 123, # ERROR_INVALID_NAME - fix for bpo-35306 1921, # ERROR_CANT_RESOLVE_FILENAME - fix for broken symlink pointing to itself ) diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst new file mode 100644 index 00000000000000..af41b3ceacb648 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst @@ -0,0 +1,2 @@ +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. From webhook-mailer at python.org Thu Apr 22 19:30:45 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 23:30:45 -0000 Subject: [Python-checkins] bpo-38222: Check specifically for a drive, not just a colon (GH-25540) Message-ID: https://github.com/python/cpython/commit/e07d8098892e85ecc56969d2c9a5afb3ea33ce8f commit: e07d8098892e85ecc56969d2c9a5afb3ea33ce8f branch: master author: Steve Dower committer: zooba date: 2021-04-23T00:30:37+01:00 summary: bpo-38222: Check specifically for a drive, not just a colon (GH-25540) files: M Modules/posixmodule.c diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7a5a0e9e8dd24..85e1e6976da16 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1860,8 +1860,8 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { ((LPWSTR)filename)[n] = L'\0'; } - if (!n || filename[n] == L':') { - // Nothing left te query + if (!n || (n == 1 && filename[1] == L':')) { + // Nothing left to query free((void *)filename); return FALSE; } From webhook-mailer at python.org Thu Apr 22 19:48:51 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 23:48:51 -0000 Subject: [Python-checkins] bpo-38822: Check specifically for a drive, not just a colon (GH-25540) Message-ID: https://github.com/python/cpython/commit/9f0b3a9c8eedf694377d8638365fb9f385daa581 commit: 9f0b3a9c8eedf694377d8638365fb9f385daa581 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: zooba date: 2021-04-23T00:48:42+01:00 summary: bpo-38822: Check specifically for a drive, not just a colon (GH-25540) (cherry picked from commit e07d8098892e85ecc56969d2c9a5afb3ea33ce8f) Co-authored-by: Steve Dower files: M Modules/posixmodule.c diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e821f1a59bde8..d7edabe5da08d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1660,8 +1660,8 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { ((LPWSTR)filename)[n] = L'\0'; } - if (!n || filename[n] == L':') { - // Nothing left te query + if (!n || (n == 1 && filename[1] == L':')) { + // Nothing left to query free((void *)filename); return FALSE; } From webhook-mailer at python.org Thu Apr 22 19:56:53 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 22 Apr 2021 23:56:53 -0000 Subject: [Python-checkins] bpo-38822: Check specifically for a drive, not just a colon (GH-25540) Message-ID: https://github.com/python/cpython/commit/28575923a9ee40928a9d00a7ed997a6f6a09b8d1 commit: 28575923a9ee40928a9d00a7ed997a6f6a09b8d1 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: zooba date: 2021-04-23T00:56:45+01:00 summary: bpo-38822: Check specifically for a drive, not just a colon (GH-25540) (cherry picked from commit e07d8098892e85ecc56969d2c9a5afb3ea33ce8f) Co-authored-by: Steve Dower files: M Modules/posixmodule.c diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 35d63188e02f7..c984e2e93f3c0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1808,8 +1808,8 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) { ((LPWSTR)filename)[n] = L'\0'; } - if (!n || filename[n] == L':') { - // Nothing left te query + if (!n || (n == 1 && filename[1] == L':')) { + // Nothing left to query free((void *)filename); return FALSE; } From webhook-mailer at python.org Thu Apr 22 20:35:30 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 00:35:30 -0000 Subject: [Python-checkins] bpo-39572: Address typo in CHANGELOG. (GH-24999) Message-ID: https://github.com/python/cpython/commit/6afb0a8078ff3fc93adc4177565c56f820ca2880 commit: 6afb0a8078ff3fc93adc4177565c56f820ca2880 branch: master author: Simon Charette committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T17:35:11-07:00 summary: bpo-39572: Address typo in CHANGELOG. (GH-24999) files: M Misc/NEWS.d/3.9.0a4.rst diff --git a/Misc/NEWS.d/3.9.0a4.rst b/Misc/NEWS.d/3.9.0a4.rst index e91135deb6654..2aef8b26b0169 100644 --- a/Misc/NEWS.d/3.9.0a4.rst +++ b/Misc/NEWS.d/3.9.0a4.rst @@ -640,7 +640,7 @@ Adapted from a patch by Ethan Furman. .. nonce: CCtzy1 .. section: Documentation -Updated documentation of ``total`` flag of TypeDict. +Updated documentation of ``total`` flag of ``TypedDict``. .. From webhook-mailer at python.org Thu Apr 22 20:53:44 2021 From: webhook-mailer at python.org (rhettinger) Date: Fri, 23 Apr 2021 00:53:44 -0000 Subject: [Python-checkins] bpo-43917: Fix pure python equivalent for classmethod (GH-25544) Message-ID: https://github.com/python/cpython/commit/14092b5a4ae4caf1c77f685450016a0d1ad0bd6c commit: 14092b5a4ae4caf1c77f685450016a0d1ad0bd6c branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-22T17:53:36-07:00 summary: bpo-43917: Fix pure python equivalent for classmethod (GH-25544) Reported by Yahor Harunovich. files: M Doc/howto/descriptor.rst M Misc/ACKS diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index bf026f4b7e61be..074591ff54fb8d 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -1329,7 +1329,7 @@ Using the non-data descriptor protocol, a pure Python version of def __get__(self, obj, cls=None): if cls is None: cls = type(obj) - if hasattr(obj, '__get__'): + if hasattr(type(self.f), '__get__'): return self.f.__get__(cls) return MethodType(self.f, cls) @@ -1342,6 +1342,12 @@ Using the non-data descriptor protocol, a pure Python version of def cm(cls, x, y): return (cls, x, y) + @ClassMethod + @property + def __doc__(cls): + return f'A doc for {cls.__name__!r}' + + .. doctest:: :hide: @@ -1353,6 +1359,11 @@ Using the non-data descriptor protocol, a pure Python version of >>> t.cm(11, 22) (, 11, 22) + # Check the alternate path for chained descriptors + >>> T.__doc__ + "A doc for 'T'" + + The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and makes it possible for :func:`classmethod` to support chained decorators. For example, a classmethod and property could be chained together: diff --git a/Misc/ACKS b/Misc/ACKS index e394ea6802fbe2..760d6c79835f87 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -388,7 +388,7 @@ Brian Curtin Jason Curtis Hakan Celik Paul Dagnelie -Florian Dahlitz +Florian Dahlitz Lisandro Dalcin Darren Dale Andrew Dalke @@ -694,6 +694,7 @@ Michael Haubenwallner Janko Hauser Flavian Hautbois Rycharde Hawkes +Yahor Harunovich Ben Hayden Jochen Hayek Tim Heaney From webhook-mailer at python.org Thu Apr 22 20:58:50 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 00:58:50 -0000 Subject: [Python-checkins] bpo-39572: Address typo in CHANGELOG. (GH-24999) Message-ID: https://github.com/python/cpython/commit/bc5a1a7adf0d0154cb3f247da84146dd51997540 commit: bc5a1a7adf0d0154cb3f247da84146dd51997540 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T17:58:42-07:00 summary: bpo-39572: Address typo in CHANGELOG. (GH-24999) (cherry picked from commit 6afb0a8078ff3fc93adc4177565c56f820ca2880) Co-authored-by: Simon Charette files: M Misc/NEWS.d/3.9.0a4.rst diff --git a/Misc/NEWS.d/3.9.0a4.rst b/Misc/NEWS.d/3.9.0a4.rst index e91135deb6654..2aef8b26b0169 100644 --- a/Misc/NEWS.d/3.9.0a4.rst +++ b/Misc/NEWS.d/3.9.0a4.rst @@ -640,7 +640,7 @@ Adapted from a patch by Ethan Furman. .. nonce: CCtzy1 .. section: Documentation -Updated documentation of ``total`` flag of TypeDict. +Updated documentation of ``total`` flag of ``TypedDict``. .. From webhook-mailer at python.org Thu Apr 22 21:16:24 2021 From: webhook-mailer at python.org (rhettinger) Date: Fri, 23 Apr 2021 01:16:24 -0000 Subject: [Python-checkins] bpo-43917: Fix pure python equivalent for classmethod (GH-25544) (GH-25546) Message-ID: https://github.com/python/cpython/commit/34be48450f03b121be10a9f8e8989603478f0469 commit: 34be48450f03b121be10a9f8e8989603478f0469 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-22T18:16:16-07:00 summary: bpo-43917: Fix pure python equivalent for classmethod (GH-25544) (GH-25546) Reported by Yahor Harunovich. (cherry picked from commit 14092b5a4ae4caf1c77f685450016a0d1ad0bd6c) files: M Doc/howto/descriptor.rst M Misc/ACKS diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 93dd35441f41c2..eef6b2dfa00c26 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -1319,7 +1319,7 @@ Using the non-data descriptor protocol, a pure Python version of def __get__(self, obj, cls=None): if cls is None: cls = type(obj) - if hasattr(obj, '__get__'): + if hasattr(type(self.f), '__get__'): return self.f.__get__(cls) return MethodType(self.f, cls) @@ -1332,6 +1332,12 @@ Using the non-data descriptor protocol, a pure Python version of def cm(cls, x, y): return (cls, x, y) + @ClassMethod + @property + def __doc__(cls): + return f'A doc for {cls.__name__!r}' + + .. doctest:: :hide: @@ -1343,6 +1349,11 @@ Using the non-data descriptor protocol, a pure Python version of >>> t.cm(11, 22) (, 11, 22) + # Check the alternate path for chained descriptors + >>> T.__doc__ + "A doc for 'T'" + + The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and makes it possible for :func:`classmethod` to support chained decorators. For example, a classmethod and property could be chained together: diff --git a/Misc/ACKS b/Misc/ACKS index 4f7c92c9dc0f6a..ee2f3fa2e3aa58 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -380,7 +380,7 @@ Brian Curtin Jason Curtis Hakan Celik Paul Dagnelie -Florian Dahlitz +Florian Dahlitz Lisandro Dalcin Darren Dale Andrew Dalke @@ -684,6 +684,7 @@ Michael Haubenwallner Janko Hauser Flavian Hautbois Rycharde Hawkes +Yahor Harunovich Ben Hayden Jochen Hayek Tim Heaney From webhook-mailer at python.org Thu Apr 22 21:22:01 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 23 Apr 2021 01:22:01 -0000 Subject: [Python-checkins] Reformat idlelib colorizer (GH-25479) Message-ID: https://github.com/python/cpython/commit/702a0885ba3636959d4c176797814937c497b986 commit: 702a0885ba3636959d4c176797814937c497b986 branch: master author: E-Paine <63801254+E-Paine at users.noreply.github.com> committer: terryjreedy date: 2021-04-22T21:21:53-04:00 summary: Reformat idlelib colorizer (GH-25479) Also replace if-then and and-or with conditional expressions. Co-authored-by: Terry Jan Reedy files: M Lib/idlelib/colorizer.py diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index db1266fed3b691..0aae1778a580c0 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -8,15 +8,17 @@ DEBUG = False + def any(name, alternates): "Return a named group pattern matching list of alternates." return "(?P<%s>" % name + "|".join(alternates) + ")" + def make_pat(): kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b" builtinlist = [str(name) for name in dir(builtins) - if not name.startswith('_') and \ - name not in keyword.kwlist] + if not name.startswith('_') and + name not in keyword.kwlist] builtin = r"([^.'\"\\#]\b|^)" + any("BUILTIN", builtinlist) + r"\b" comment = any("COMMENT", [r"#[^\n]*"]) stringprefix = r"(?i:r|u|f|fr|rf|b|br|rb)?" @@ -25,12 +27,14 @@ def make_pat(): sq3string = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?" dq3string = stringprefix + r'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?' string = any("STRING", [sq3string, dq3string, sqstring, dqstring]) - return kw + "|" + builtin + "|" + comment + "|" + string +\ - "|" + any("SYNC", [r"\n"]) + return (kw + "|" + builtin + "|" + comment + "|" + string + + "|" + any("SYNC", [r"\n"])) + prog = re.compile(make_pat(), re.S) idprog = re.compile(r"\s+(\w+)", re.S) + def color_config(text): """Set color options of Text widget. @@ -49,7 +53,7 @@ def color_config(text): selectforeground=select_colors['foreground'], selectbackground=select_colors['background'], inactiveselectbackground=select_colors['background'], # new in 8.5 - ) + ) class ColorDelegator(Delegator): @@ -120,14 +124,17 @@ def LoadTagDefs(self): "BUILTIN": idleConf.GetHighlight(theme, "builtin"), "STRING": idleConf.GetHighlight(theme, "string"), "DEFINITION": idleConf.GetHighlight(theme, "definition"), - "SYNC": {'background':None,'foreground':None}, - "TODO": {'background':None,'foreground':None}, + "SYNC": {'background': None, 'foreground': None}, + "TODO": {'background': None, 'foreground': None}, "ERROR": idleConf.GetHighlight(theme, "error"), - # The following is used by ReplaceDialog: + # "hit" is used by ReplaceDialog to mark matches. It shouldn't be changed by Colorizer, but + # that currently isn't technically possible. This should be moved elsewhere in the future + # when fixing the "hit" tag's visibility, or when the replace dialog is replaced with a + # non-modal alternative. "hit": idleConf.GetHighlight(theme, "hit"), } - if DEBUG: print('tagdefs',self.tagdefs) + if DEBUG: print('tagdefs', self.tagdefs) def insert(self, index, chars, tags=None): "Insert chars into widget at index and mark for colorizing." @@ -184,8 +191,8 @@ def toggle_colorize_event(self, event=None): if self.allow_colorizing and not self.colorizing: self.after_id = self.after(1, self.recolorize) if DEBUG: - print("auto colorizing turned",\ - self.allow_colorizing and "on" or "off") + print("auto colorizing turned", + "on" if self.allow_colorizing else "off") return "break" def recolorize(self): @@ -232,10 +239,7 @@ def recolorize_main(self): head, tail = item self.tag_remove("SYNC", head, tail) item = self.tag_prevrange("SYNC", head) - if item: - head = item[1] - else: - head = "1.0" + head = item[1] if item else "1.0" chars = "" next = head @@ -307,7 +311,7 @@ def _color_delegator(parent): # htest # "elif False: print(0)\n" "else: float(None)\n" "if iF + If + IF: 'keyword matching must respect case'\n" - "if'': x or'' # valid string-keyword no-space combinations\n" + "if'': x or'' # valid keyword-string no-space combinations\n" "async def f(): await g()\n" "# All valid prefixes for unicode and byte strings should be colored.\n" "'x', '''x''', \"x\", \"\"\"x\"\"\"\n" From webhook-mailer at python.org Thu Apr 22 21:39:10 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 01:39:10 -0000 Subject: [Python-checkins] Reformat idlelib colorizer (GH-25479) Message-ID: https://github.com/python/cpython/commit/c6b50abc6b02a7dc2d9a81dd38d168448444e44d commit: c6b50abc6b02a7dc2d9a81dd38d168448444e44d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-22T18:38:59-07:00 summary: Reformat idlelib colorizer (GH-25479) Also replace if-then and and-or with conditional expressions. Co-authored-by: Terry Jan Reedy (cherry picked from commit 702a0885ba3636959d4c176797814937c497b986) Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> files: M Lib/idlelib/colorizer.py diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index db1266fed3b691..0aae1778a580c0 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -8,15 +8,17 @@ DEBUG = False + def any(name, alternates): "Return a named group pattern matching list of alternates." return "(?P<%s>" % name + "|".join(alternates) + ")" + def make_pat(): kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b" builtinlist = [str(name) for name in dir(builtins) - if not name.startswith('_') and \ - name not in keyword.kwlist] + if not name.startswith('_') and + name not in keyword.kwlist] builtin = r"([^.'\"\\#]\b|^)" + any("BUILTIN", builtinlist) + r"\b" comment = any("COMMENT", [r"#[^\n]*"]) stringprefix = r"(?i:r|u|f|fr|rf|b|br|rb)?" @@ -25,12 +27,14 @@ def make_pat(): sq3string = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?" dq3string = stringprefix + r'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?' string = any("STRING", [sq3string, dq3string, sqstring, dqstring]) - return kw + "|" + builtin + "|" + comment + "|" + string +\ - "|" + any("SYNC", [r"\n"]) + return (kw + "|" + builtin + "|" + comment + "|" + string + + "|" + any("SYNC", [r"\n"])) + prog = re.compile(make_pat(), re.S) idprog = re.compile(r"\s+(\w+)", re.S) + def color_config(text): """Set color options of Text widget. @@ -49,7 +53,7 @@ def color_config(text): selectforeground=select_colors['foreground'], selectbackground=select_colors['background'], inactiveselectbackground=select_colors['background'], # new in 8.5 - ) + ) class ColorDelegator(Delegator): @@ -120,14 +124,17 @@ def LoadTagDefs(self): "BUILTIN": idleConf.GetHighlight(theme, "builtin"), "STRING": idleConf.GetHighlight(theme, "string"), "DEFINITION": idleConf.GetHighlight(theme, "definition"), - "SYNC": {'background':None,'foreground':None}, - "TODO": {'background':None,'foreground':None}, + "SYNC": {'background': None, 'foreground': None}, + "TODO": {'background': None, 'foreground': None}, "ERROR": idleConf.GetHighlight(theme, "error"), - # The following is used by ReplaceDialog: + # "hit" is used by ReplaceDialog to mark matches. It shouldn't be changed by Colorizer, but + # that currently isn't technically possible. This should be moved elsewhere in the future + # when fixing the "hit" tag's visibility, or when the replace dialog is replaced with a + # non-modal alternative. "hit": idleConf.GetHighlight(theme, "hit"), } - if DEBUG: print('tagdefs',self.tagdefs) + if DEBUG: print('tagdefs', self.tagdefs) def insert(self, index, chars, tags=None): "Insert chars into widget at index and mark for colorizing." @@ -184,8 +191,8 @@ def toggle_colorize_event(self, event=None): if self.allow_colorizing and not self.colorizing: self.after_id = self.after(1, self.recolorize) if DEBUG: - print("auto colorizing turned",\ - self.allow_colorizing and "on" or "off") + print("auto colorizing turned", + "on" if self.allow_colorizing else "off") return "break" def recolorize(self): @@ -232,10 +239,7 @@ def recolorize_main(self): head, tail = item self.tag_remove("SYNC", head, tail) item = self.tag_prevrange("SYNC", head) - if item: - head = item[1] - else: - head = "1.0" + head = item[1] if item else "1.0" chars = "" next = head @@ -307,7 +311,7 @@ def _color_delegator(parent): # htest # "elif False: print(0)\n" "else: float(None)\n" "if iF + If + IF: 'keyword matching must respect case'\n" - "if'': x or'' # valid string-keyword no-space combinations\n" + "if'': x or'' # valid keyword-string no-space combinations\n" "async def f(): await g()\n" "# All valid prefixes for unicode and byte strings should be colored.\n" "'x', '''x''', \"x\", \"\"\"x\"\"\"\n" From webhook-mailer at python.org Thu Apr 22 23:03:02 2021 From: webhook-mailer at python.org (rhettinger) Date: Fri, 23 Apr 2021 03:03:02 -0000 Subject: [Python-checkins] Add more tests. Fix code excerpt. (GH-25549) Message-ID: https://github.com/python/cpython/commit/fe240882936d8b16b968b9a7adce6b2b3de4e7eb commit: fe240882936d8b16b968b9a7adce6b2b3de4e7eb branch: master author: Raymond Hettinger committer: rhettinger date: 2021-04-22T20:02:46-07:00 summary: Add more tests. Fix code excerpt. (GH-25549) files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index 074591ff54fb8..575caeb720f3d 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -953,6 +953,20 @@ The documentation shows a typical use to define a managed attribute ``x``: def delx(self): del self.__x x = property(getx, setx, delx, "I'm the 'x' property.") +.. doctest:: + :hide: + + >>> C.x.__doc__ + "I'm the 'x' property." + >>> c.x = 2.71828 + >>> c.x + 2.71828 + >>> del c.x + >>> c.x + Traceback (most recent call last): + ... + AttributeError: 'C' object has no attribute '_C__x' + To see how :func:`property` is implemented in terms of the descriptor protocol, here is a pure Python equivalent: @@ -1364,9 +1378,10 @@ Using the non-data descriptor protocol, a pure Python version of "A doc for 'T'" -The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and -makes it possible for :func:`classmethod` to support chained decorators. -For example, a classmethod and property could be chained together: +The code path for ``hasattr(type(self.f), '__get__')`` was added in +Python 3.9 and makes it possible for :func:`classmethod` to support +chained decorators. For example, a classmethod and property could be +chained together: .. testcode:: From webhook-mailer at python.org Thu Apr 22 23:27:12 2021 From: webhook-mailer at python.org (rhettinger) Date: Fri, 23 Apr 2021 03:27:12 -0000 Subject: [Python-checkins] Add more tests. Fix code excerpt. (GH-25549) (GH-25550) Message-ID: https://github.com/python/cpython/commit/8db72cd342917e68a42edcc41b25c58ac33ca928 commit: 8db72cd342917e68a42edcc41b25c58ac33ca928 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-04-22T20:26:56-07:00 summary: Add more tests. Fix code excerpt. (GH-25549) (GH-25550) files: M Doc/howto/descriptor.rst diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index eef6b2dfa00c2..9f0dd2f1f1550 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -953,6 +953,20 @@ The documentation shows a typical use to define a managed attribute ``x``: def delx(self): del self.__x x = property(getx, setx, delx, "I'm the 'x' property.") +.. doctest:: + :hide: + + >>> C.x.__doc__ + "I'm the 'x' property." + >>> c.x = 2.71828 + >>> c.x + 2.71828 + >>> del c.x + >>> c.x + Traceback (most recent call last): + ... + AttributeError: 'C' object has no attribute '_C__x' + To see how :func:`property` is implemented in terms of the descriptor protocol, here is a pure Python equivalent: @@ -1354,9 +1368,10 @@ Using the non-data descriptor protocol, a pure Python version of "A doc for 'T'" -The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and -makes it possible for :func:`classmethod` to support chained decorators. -For example, a classmethod and property could be chained together: +The code path for ``hasattr(type(self.f), '__get__')`` was added in +Python 3.9 and makes it possible for :func:`classmethod` to support +chained decorators. For example, a classmethod and property could be +chained together: .. testcode:: From webhook-mailer at python.org Thu Apr 22 23:32:41 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 23 Apr 2021 03:32:41 -0000 Subject: [Python-checkins] Reformat idlelib colorizer (GH-25479) Message-ID: https://github.com/python/cpython/commit/987b65e9563f46ec09915c52b73eeee992244ad4 commit: 987b65e9563f46ec09915c52b73eeee992244ad4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-22T23:32:33-04:00 summary: Reformat idlelib colorizer (GH-25479) Also replace if-then and and-or with conditional expressions. Co-authored-by: Terry Jan Reedy (cherry picked from commit 702a0885ba3636959d4c176797814937c497b986) Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> files: M Lib/idlelib/colorizer.py diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index db1266fed3b691..0aae1778a580c0 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -8,15 +8,17 @@ DEBUG = False + def any(name, alternates): "Return a named group pattern matching list of alternates." return "(?P<%s>" % name + "|".join(alternates) + ")" + def make_pat(): kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b" builtinlist = [str(name) for name in dir(builtins) - if not name.startswith('_') and \ - name not in keyword.kwlist] + if not name.startswith('_') and + name not in keyword.kwlist] builtin = r"([^.'\"\\#]\b|^)" + any("BUILTIN", builtinlist) + r"\b" comment = any("COMMENT", [r"#[^\n]*"]) stringprefix = r"(?i:r|u|f|fr|rf|b|br|rb)?" @@ -25,12 +27,14 @@ def make_pat(): sq3string = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?" dq3string = stringprefix + r'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?' string = any("STRING", [sq3string, dq3string, sqstring, dqstring]) - return kw + "|" + builtin + "|" + comment + "|" + string +\ - "|" + any("SYNC", [r"\n"]) + return (kw + "|" + builtin + "|" + comment + "|" + string + + "|" + any("SYNC", [r"\n"])) + prog = re.compile(make_pat(), re.S) idprog = re.compile(r"\s+(\w+)", re.S) + def color_config(text): """Set color options of Text widget. @@ -49,7 +53,7 @@ def color_config(text): selectforeground=select_colors['foreground'], selectbackground=select_colors['background'], inactiveselectbackground=select_colors['background'], # new in 8.5 - ) + ) class ColorDelegator(Delegator): @@ -120,14 +124,17 @@ def LoadTagDefs(self): "BUILTIN": idleConf.GetHighlight(theme, "builtin"), "STRING": idleConf.GetHighlight(theme, "string"), "DEFINITION": idleConf.GetHighlight(theme, "definition"), - "SYNC": {'background':None,'foreground':None}, - "TODO": {'background':None,'foreground':None}, + "SYNC": {'background': None, 'foreground': None}, + "TODO": {'background': None, 'foreground': None}, "ERROR": idleConf.GetHighlight(theme, "error"), - # The following is used by ReplaceDialog: + # "hit" is used by ReplaceDialog to mark matches. It shouldn't be changed by Colorizer, but + # that currently isn't technically possible. This should be moved elsewhere in the future + # when fixing the "hit" tag's visibility, or when the replace dialog is replaced with a + # non-modal alternative. "hit": idleConf.GetHighlight(theme, "hit"), } - if DEBUG: print('tagdefs',self.tagdefs) + if DEBUG: print('tagdefs', self.tagdefs) def insert(self, index, chars, tags=None): "Insert chars into widget at index and mark for colorizing." @@ -184,8 +191,8 @@ def toggle_colorize_event(self, event=None): if self.allow_colorizing and not self.colorizing: self.after_id = self.after(1, self.recolorize) if DEBUG: - print("auto colorizing turned",\ - self.allow_colorizing and "on" or "off") + print("auto colorizing turned", + "on" if self.allow_colorizing else "off") return "break" def recolorize(self): @@ -232,10 +239,7 @@ def recolorize_main(self): head, tail = item self.tag_remove("SYNC", head, tail) item = self.tag_prevrange("SYNC", head) - if item: - head = item[1] - else: - head = "1.0" + head = item[1] if item else "1.0" chars = "" next = head @@ -307,7 +311,7 @@ def _color_delegator(parent): # htest # "elif False: print(0)\n" "else: float(None)\n" "if iF + If + IF: 'keyword matching must respect case'\n" - "if'': x or'' # valid string-keyword no-space combinations\n" + "if'': x or'' # valid keyword-string no-space combinations\n" "async def f(): await g()\n" "# All valid prefixes for unicode and byte strings should be colored.\n" "'x', '''x''', \"x\", \"\"\"x\"\"\"\n" From webhook-mailer at python.org Fri Apr 23 02:46:25 2021 From: webhook-mailer at python.org (methane) Date: Fri, 23 Apr 2021 06:46:25 -0000 Subject: [Python-checkins] bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Message-ID: https://github.com/python/cpython/commit/d4fff1f580aed5d26b9b501d0e626f50da9f7bb7 commit: d4fff1f580aed5d26b9b501d0e626f50da9f7bb7 branch: 3.9 author: Jason R. Coombs committer: methane date: 2021-04-23T15:46:16+09:00 summary: bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Use a versionadded directive to generate the text "New in version 3.8." (to match with the documentation of other modules). Automerge-Triggered-By: GH:jaraco. (cherry picked from commit adf24bd835ed8f76dcc51aa98c8c54275e86965b) Co-authored-by: Zackery Spytz files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 0dd3daaa54892..2c8d7f81c835e 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -4,6 +4,8 @@ Using :mod:`!importlib.metadata` ================================= +.. versionadded:: 3.8 + .. note:: This functionality is provisional and may deviate from the usual version semantics of the standard library. From webhook-mailer at python.org Fri Apr 23 02:47:04 2021 From: webhook-mailer at python.org (methane) Date: Fri, 23 Apr 2021 06:47:04 -0000 Subject: [Python-checkins] bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Message-ID: https://github.com/python/cpython/commit/faad2bd87f9e1c24837dd772f0597f4ab9416c66 commit: faad2bd87f9e1c24837dd772f0597f4ab9416c66 branch: 3.8 author: Jason R. Coombs committer: methane date: 2021-04-23T15:47:00+09:00 summary: bpo-43856: Add a versionadded directive to the importlib.metadata docs (GH-25445) Use a versionadded directive to generate the text "New in version 3.8." (to match with the documentation of other modules). Automerge-Triggered-By: GH:jaraco (cherry picked from commit adf24bd835) Co-authored-by: Zackery Spytz files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index a057767ebd2f7..5d30b0fdb3e82 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -7,6 +7,8 @@ .. module:: importlib.metadata :synopsis: The implementation of the importlib metadata. +.. versionadded:: 3.8 + **Source code:** :source:`Lib/importlib/metadata.py` .. note:: From webhook-mailer at python.org Fri Apr 23 05:10:51 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 23 Apr 2021 09:10:51 -0000 Subject: [Python-checkins] bpo-37751: Document codecs.lookup() change in What's New in Python 3.9 (GH-23096) Message-ID: https://github.com/python/cpython/commit/32980fb669a6857276da18895fcc0cb6f6fbb544 commit: 32980fb669a6857276da18895fcc0cb6f6fbb544 branch: master author: Hai Shi committer: vstinner date: 2021-04-23T11:10:43+02:00 summary: bpo-37751: Document codecs.lookup() change in What's New in Python 3.9 (GH-23096) files: M Doc/whatsnew/3.9.rst diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 602ed065858ec..70809ff31c7f2 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1114,6 +1114,12 @@ Changes in the Python API compatible classes that don't inherit from those mentioned types. (Contributed by Roger Aiudi in :issue:`34775`). +* :func:`codecs.lookup` now normalizes the encoding name the same way as + :func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also + converts the name to lower case. For example, ``"latex+latin1"`` encoding + name is now normalized to ``"latex_latin1"``. + (Contributed by Jordon Xu in :issue:`37751`.) + Changes in the C API -------------------- From webhook-mailer at python.org Fri Apr 23 06:19:28 2021 From: webhook-mailer at python.org (matrixise) Date: Fri, 23 Apr 2021 10:19:28 -0000 Subject: [Python-checkins] bpo-37363: Add audit events to the `http.client` module (GH-21321) Message-ID: https://github.com/python/cpython/commit/927b841c215a1ca36c9b3203eadc67ce05b1ed07 commit: 927b841c215a1ca36c9b3203eadc67ce05b1ed07 branch: master author: Saiyang Gou committer: matrixise date: 2021-04-23T12:19:08+02:00 summary: bpo-37363: Add audit events to the `http.client` module (GH-21321) Add audit events to the `http.client` module Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> files: A Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst M Doc/library/http.client.rst M Lib/http/client.py M Lib/test/audit-tests.py M Lib/test/test_audit.py diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst index 56f4c0a0d772f4..e605f7b8b14172 100644 --- a/Doc/library/http.client.rst +++ b/Doc/library/http.client.rst @@ -368,6 +368,8 @@ HTTPConnection Objects this is called automatically when making a request if the client does not already have a connection. + .. audit-event:: http.client.connect self,host,port http.client.HTTPConnection.connect + .. method:: HTTPConnection.close() @@ -437,6 +439,8 @@ also send your request step by step, by using the four functions below. :meth:`endheaders` method has been called and before :meth:`getresponse` is called. + .. audit-event:: http.client.send self,data http.client.HTTPConnection.send + .. _httpresponse-objects: diff --git a/Lib/http/client.py b/Lib/http/client.py index c526380dcabfc9..4b1f692844474f 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -74,6 +74,7 @@ import io import re import socket +import sys import collections.abc from urllib.parse import urlsplit @@ -931,6 +932,7 @@ def _tunnel(self): def connect(self): """Connect to the host and port specified in __init__.""" + sys.audit("http.client.connect", self, self.host, self.port) self.sock = self._create_connection( (self.host,self.port), self.timeout, self.source_address) self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) @@ -978,8 +980,10 @@ def send(self, data): break if encode: datablock = datablock.encode("iso-8859-1") + sys.audit("http.client.send", self, datablock) self.sock.sendall(datablock) return + sys.audit("http.client.send", self, data) try: self.sock.sendall(data) except TypeError: diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py index 8e66594e52429b..2addf9762eae49 100644 --- a/Lib/test/audit-tests.py +++ b/Lib/test/audit-tests.py @@ -341,6 +341,24 @@ def hook(event, args): gc.get_referents(y) +def test_http_client(): + import http.client + + def hook(event, args): + if event.startswith("http.client."): + print(event, *args[1:]) + + sys.addaudithook(hook) + + conn = http.client.HTTPConnection('www.python.org') + try: + conn.request('GET', '/') + except OSError: + print('http.client.send', '[cannot send]') + finally: + conn.close() + + if __name__ == "__main__": from test.support import suppress_msvcrt_asserts diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py index 58180e147a49a3..456a5daceb9f10 100644 --- a/Lib/test/test_audit.py +++ b/Lib/test/test_audit.py @@ -130,6 +130,20 @@ def test_gc(self): ["gc.get_objects", "gc.get_referrers", "gc.get_referents"] ) + def test_http(self): + import_helper.import_module("http.client") + returncode, events, stderr = self.run_python("test_http_client") + if returncode: + self.fail(stderr) + + if support.verbose: + print(*events, sep='\n') + self.assertEqual(events[0][0], "http.client.connect") + self.assertEqual(events[0][2], "www.python.org 80") + self.assertEqual(events[1][0], "http.client.send") + if events[1][2] != '[cannot send]': + self.assertIn('HTTP', events[1][2]) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst b/Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst new file mode 100644 index 00000000000000..539084836dc4e5 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst @@ -0,0 +1 @@ +Add audit events to the :mod:`http.client` module. \ No newline at end of file From webhook-mailer at python.org Fri Apr 23 07:21:21 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Fri, 23 Apr 2021 11:21:21 -0000 Subject: [Python-checkins] bpo-43852: Improve tuple creation in sqlite3 (GH-25421) Message-ID: https://github.com/python/cpython/commit/e9194ea6eaa18299d6ccbd3555ce150fab0c6184 commit: e9194ea6eaa18299d6ccbd3555ce150fab0c6184 branch: master author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-04-23T14:21:08+03:00 summary: bpo-43852: Improve tuple creation in sqlite3 (GH-25421) files: M Modules/_sqlite/connection.c M Modules/_sqlite/cursor.c diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 93365495f58856..150291cb72396d 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -592,8 +592,7 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, goto error; } - PyTuple_SetItem(args, i, cur_py_value); - + PyTuple_SET_ITEM(args, i, cur_py_value); } return args; diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 09c9a8c92d1246..60dfc7dce8fb5e 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -357,7 +357,7 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self) if (!converted) { goto error; } - PyTuple_SetItem(row, i, converted); + PyTuple_SET_ITEM(row, i, converted); } if (PyErr_Occurred()) @@ -406,7 +406,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation PyObject* func_args; PyObject* result; int numcols; - PyObject* descriptor; PyObject* column_name; sqlite_int64 lastrowid; @@ -557,30 +556,24 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation goto error; } for (i = 0; i < numcols; i++) { - descriptor = PyTuple_New(7); - if (!descriptor) { - goto error; - } const char *colname; colname = sqlite3_column_name(self->statement->st, i); if (colname == NULL) { PyErr_NoMemory(); - Py_DECREF(descriptor); goto error; } column_name = _pysqlite_build_column_name(self, colname); if (column_name == NULL) { - Py_DECREF(descriptor); goto error; } - PyTuple_SetItem(descriptor, 0, column_name); - PyTuple_SetItem(descriptor, 1, Py_NewRef(Py_None)); - PyTuple_SetItem(descriptor, 2, Py_NewRef(Py_None)); - PyTuple_SetItem(descriptor, 3, Py_NewRef(Py_None)); - PyTuple_SetItem(descriptor, 4, Py_NewRef(Py_None)); - PyTuple_SetItem(descriptor, 5, Py_NewRef(Py_None)); - PyTuple_SetItem(descriptor, 6, Py_NewRef(Py_None)); - PyTuple_SetItem(self->description, i, descriptor); + PyObject *descriptor = PyTuple_Pack(7, column_name, + Py_None, Py_None, Py_None, + Py_None, Py_None, Py_None); + Py_DECREF(column_name); + if (descriptor == NULL) { + goto error; + } + PyTuple_SET_ITEM(self->description, i, descriptor); } } From webhook-mailer at python.org Fri Apr 23 07:51:45 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 11:51:45 -0000 Subject: [Python-checkins] bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) Message-ID: https://github.com/python/cpython/commit/b9ad88be0304136c3fe5959c65a5d2c75490cd80 commit: b9ad88be0304136c3fe5959c65a5d2c75490cd80 branch: master author: Christian Heimes committer: tiran date: 2021-04-23T13:51:40+02:00 summary: bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 0b8cef639961c..8c846574e1ab4 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1433,12 +1433,17 @@ def test_load_verify_cadata(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) self.assertRaises(TypeError, ctx.load_verify_locations, cadata=object) - with self.assertRaisesRegex(ssl.SSLError, "no start line"): + with self.assertRaisesRegex( + ssl.SSLError, + "no start line: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata="broken") - with self.assertRaisesRegex(ssl.SSLError, "not enough data"): + with self.assertRaisesRegex( + ssl.SSLError, + "not enough data: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata=b"broken") - @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows") def test_load_dh_params(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) diff --git a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst new file mode 100644 index 0000000000000..28ff0fb3afa9d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index e28c1286784a4..0daa13e92d6a7 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3791,7 +3791,7 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, { BIO *biobuf = NULL; X509_STORE *store; - int retval = 0, err, loaded = 0; + int retval = -1, err, loaded = 0; assert(filetype == SSL_FILETYPE_ASN1 || filetype == SSL_FILETYPE_PEM); @@ -3845,23 +3845,32 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, } err = ERR_peek_last_error(); - if ((filetype == SSL_FILETYPE_ASN1) && - (loaded > 0) && - (ERR_GET_LIB(err) == ERR_LIB_ASN1) && - (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { + if (loaded == 0) { + const char *msg = NULL; + if (filetype == SSL_FILETYPE_PEM) { + msg = "no start line: cadata does not contain a certificate"; + } else { + msg = "not enough data: cadata does not contain a certificate"; + } + _setSSLError(get_state_ctx(self), msg, 0, __FILE__, __LINE__); + retval = -1; + } else if ((filetype == SSL_FILETYPE_ASN1) && + (ERR_GET_LIB(err) == ERR_LIB_ASN1) && + (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { /* EOF ASN1 file, not an error */ ERR_clear_error(); retval = 0; } else if ((filetype == SSL_FILETYPE_PEM) && - (loaded > 0) && (ERR_GET_LIB(err) == ERR_LIB_PEM) && (ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) { /* EOF PEM file, not an error */ ERR_clear_error(); retval = 0; - } else { + } else if (err != 0) { _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__); retval = -1; + } else { + retval = 0; } BIO_free(biobuf); From webhook-mailer at python.org Fri Apr 23 08:02:48 2021 From: webhook-mailer at python.org (encukou) Date: Fri, 23 Apr 2021 12:02:48 -0000 Subject: [Python-checkins] bpo-41282: (PEP 632) Deprecate distutils.sysconfig (partial implementation of the PEP) (GH-23142) Message-ID: https://github.com/python/cpython/commit/90d02e5e63e2cb8f66a2c0dd2ea8d7d4f45f4ebf commit: 90d02e5e63e2cb8f66a2c0dd2ea8d7d4f45f4ebf branch: master author: Lum?r 'Frenzy' Balhar committer: encukou date: 2021-04-23T14:02:41+02:00 summary: bpo-41282: (PEP 632) Deprecate distutils.sysconfig (partial implementation of the PEP) (GH-23142) This change: * merges `distutils.sysconfig` into `sysconfig` while keeping the original functionality and * marks `distutils.sysconfig` as deprecated https://bugs.python.org/issue41282 files: A Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst M Doc/distutils/apiref.rst M Doc/library/sysconfig.rst M Lib/distutils/extension.py M Lib/distutils/sysconfig.py M Lib/distutils/tests/test_build_clib.py M Lib/distutils/tests/test_build_ext.py M Lib/distutils/tests/test_config_cmd.py M Lib/distutils/tests/test_install.py M Lib/distutils/tests/test_unixccompiler.py M Lib/distutils/tests/test_util.py M Lib/ensurepip/__init__.py M Lib/sysconfig.py M Lib/test/support/__init__.py M Lib/test/test_peg_generator/test_c_parser.py diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index 6c69c11ccaa9a8..e4437f4106b519 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1452,6 +1452,8 @@ name. .. module:: distutils.sysconfig :synopsis: Low-level access to configuration information of the Python interpreter. +.. deprecated:: 3.10 + :mod:`distutils.sysconfig` has been merged into :mod:`sysconfig`. .. moduleauthor:: Fred L. Drake, Jr. .. moduleauthor:: Greg Ward .. sectionauthor:: Fred L. Drake, Jr. @@ -1510,6 +1512,9 @@ for other parts of the :mod:`distutils` package. meaning for other platforms will vary. The file is a platform-specific text file, if it exists. This function is only useful on POSIX platforms. +The following functions are deprecated together with this module and they +have no direct replacement. + .. function:: get_python_inc([plat_specific[, prefix]]) diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst index c9306e9bf9de16..d4463f39fda24f 100644 --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -224,6 +224,7 @@ Other functions Return the path of :file:`Makefile`. + Using :mod:`sysconfig` as a script ---------------------------------- diff --git a/Lib/distutils/extension.py b/Lib/distutils/extension.py index c507da360aa3d9..e85032ece8916f 100644 --- a/Lib/distutils/extension.py +++ b/Lib/distutils/extension.py @@ -4,6 +4,7 @@ modules in setup scripts.""" import os +import re import warnings # This class is really only used by the "build_ext" command, so it might @@ -161,7 +162,7 @@ def read_setup_file(filename): line = file.readline() if line is None: # eof break - if _variable_rx.match(line): # VAR=VALUE, handled in first pass + if re.match(_variable_rx, line): # VAR=VALUE, handled in first pass continue if line[0] == line[-1] == "*": diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py index 37feae5df72c93..439040deb5619d 100644 --- a/Lib/distutils/sysconfig.py +++ b/Lib/distutils/sysconfig.py @@ -13,56 +13,71 @@ import os import re import sys +import warnings -from .errors import DistutilsPlatformError - -# These are needed in a couple of spots, so just compute them once. -PREFIX = os.path.normpath(sys.prefix) -EXEC_PREFIX = os.path.normpath(sys.exec_prefix) -BASE_PREFIX = os.path.normpath(sys.base_prefix) -BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) - -# Path to the base directory of the project. On Windows the binary may -# live in project/PCbuild/win32 or project/PCbuild/amd64. -# set for cross builds -if "_PYTHON_PROJECT_BASE" in os.environ: - project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"]) -else: - if sys.executable: - project_base = os.path.dirname(os.path.abspath(sys.executable)) - else: - # sys.executable can be empty if argv[0] has been changed and Python is - # unable to retrieve the real program name - project_base = os.getcwd() +from functools import partial +from .errors import DistutilsPlatformError -# python_build: (Boolean) if true, we're either building Python or -# building an extension with an un-installed Python, so we use -# different (hard-wired) directories. -def _is_python_source_dir(d): - for fn in ("Setup", "Setup.local"): - if os.path.isfile(os.path.join(d, "Modules", fn)): - return True - return False +from sysconfig import ( + _PREFIX as PREFIX, + _BASE_PREFIX as BASE_PREFIX, + _EXEC_PREFIX as EXEC_PREFIX, + _BASE_EXEC_PREFIX as BASE_EXEC_PREFIX, + _PROJECT_BASE as project_base, + _PYTHON_BUILD as python_build, + _init_posix as sysconfig_init_posix, + parse_config_h as sysconfig_parse_config_h, + _parse_makefile as sysconfig_parse_makefile, + + _init_non_posix, + _is_python_source_dir, + _sys_home, + + _variable_rx, + _findvar1_rx, + _findvar2_rx, + + expand_makefile_vars, + is_python_build, + get_config_h_filename, + get_config_var, + get_config_vars, + get_makefile_filename, + get_python_version, +) + +# This is better than +# from sysconfig import _CONFIG_VARS as _config_vars +# because it makes sure that the global dictionary is initialized +# which might not be true in the time of import. +_config_vars = get_config_vars() + +if os.name == "nt": + from sysconfig import _fix_pcbuild + +warnings.warn( + 'the distutils.sysconfig module is deprecated, use sysconfig instead', + DeprecationWarning, + stacklevel=2 +) + + +# Following functions are the same as in sysconfig but with different API +def parse_config_h(fp, g=None): + return sysconfig_parse_config_h(fp, vars=g) -_sys_home = getattr(sys, '_home', None) -if os.name == 'nt': - def _fix_pcbuild(d): - if d and os.path.normcase(d).startswith( - os.path.normcase(os.path.join(PREFIX, "PCbuild"))): - return PREFIX - return d - project_base = _fix_pcbuild(project_base) - _sys_home = _fix_pcbuild(_sys_home) +def parse_makefile(fn, g=None): + return sysconfig_parse_makefile(fn, vars=g, keep_unresolved=False) -def _python_build(): - if _sys_home: - return _is_python_source_dir(_sys_home) - return _is_python_source_dir(project_base) +_python_build = partial(is_python_build, check_home=True) +_init_posix = partial(sysconfig_init_posix, _config_vars) +_init_nt = partial(_init_non_posix, _config_vars) -python_build = _python_build() +# Following functions are deprecated together with this module and they +# have no direct replacement # Calculate the build qualifier flags if they are defined. Adding the flags # to the include and lib directories only makes sense for an installation, not @@ -76,12 +91,76 @@ def _python_build(): # this attribute, which is fine. pass -def get_python_version(): - """Return a string containing the major and minor Python version, - leaving off the patchlevel. Sample return values could be '1.5' - or '2.2'. + +def customize_compiler(compiler): + """Do any platform-specific customization of a CCompiler instance. + + Mainly needed on Unix, so we can plug in the information that + varies across Unices and is stored in Python's Makefile. """ - return '%d.%d' % sys.version_info[:2] + if compiler.compiler_type == "unix": + if sys.platform == "darwin": + # Perform first-time customization of compiler-related + # config vars on OS X now that we know we need a compiler. + # This is primarily to support Pythons from binary + # installers. The kind and paths to build tools on + # the user system may vary significantly from the system + # that Python itself was built on. Also the user OS + # version and build tools may not support the same set + # of CPU architectures for universal builds. + if not _config_vars.get('CUSTOMIZED_OSX_COMPILER'): + import _osx_support + _osx_support.customize_compiler(_config_vars) + _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' + + (cc, cxx, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ + get_config_vars('CC', 'CXX', 'CFLAGS', + 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') + + if 'CC' in os.environ: + newcc = os.environ['CC'] + if (sys.platform == 'darwin' + and 'LDSHARED' not in os.environ + and ldshared.startswith(cc)): + # On OS X, if CC is overridden, use that as the default + # command for LDSHARED as well + ldshared = newcc + ldshared[len(cc):] + cc = newcc + if 'CXX' in os.environ: + cxx = os.environ['CXX'] + if 'LDSHARED' in os.environ: + ldshared = os.environ['LDSHARED'] + if 'CPP' in os.environ: + cpp = os.environ['CPP'] + else: + cpp = cc + " -E" # not always + if 'LDFLAGS' in os.environ: + ldshared = ldshared + ' ' + os.environ['LDFLAGS'] + if 'CFLAGS' in os.environ: + cflags = cflags + ' ' + os.environ['CFLAGS'] + ldshared = ldshared + ' ' + os.environ['CFLAGS'] + if 'CPPFLAGS' in os.environ: + cpp = cpp + ' ' + os.environ['CPPFLAGS'] + cflags = cflags + ' ' + os.environ['CPPFLAGS'] + ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] + if 'AR' in os.environ: + ar = os.environ['AR'] + if 'ARFLAGS' in os.environ: + archiver = ar + ' ' + os.environ['ARFLAGS'] + else: + archiver = ar + ' ' + ar_flags + + cc_cmd = cc + ' ' + cflags + compiler.set_executables( + preprocessor=cpp, + compiler=cc_cmd, + compiler_so=cc_cmd + ' ' + ccshared, + compiler_cxx=cxx, + linker_so=ldshared, + linker_exe=cc, + archiver=archiver) + + compiler.shared_lib_extension = shlib_suffix def get_python_inc(plat_specific=0, prefix=None): @@ -167,389 +246,3 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): raise DistutilsPlatformError( "I don't know where Python installs its library " "on platform '%s'" % os.name) - - - -def customize_compiler(compiler): - """Do any platform-specific customization of a CCompiler instance. - - Mainly needed on Unix, so we can plug in the information that - varies across Unices and is stored in Python's Makefile. - """ - if compiler.compiler_type == "unix": - if sys.platform == "darwin": - # Perform first-time customization of compiler-related - # config vars on OS X now that we know we need a compiler. - # This is primarily to support Pythons from binary - # installers. The kind and paths to build tools on - # the user system may vary significantly from the system - # that Python itself was built on. Also the user OS - # version and build tools may not support the same set - # of CPU architectures for universal builds. - global _config_vars - # Use get_config_var() to ensure _config_vars is initialized. - if not get_config_var('CUSTOMIZED_OSX_COMPILER'): - import _osx_support - _osx_support.customize_compiler(_config_vars) - _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' - - (cc, cxx, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ - get_config_vars('CC', 'CXX', 'CFLAGS', - 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') - - if 'CC' in os.environ: - newcc = os.environ['CC'] - if (sys.platform == 'darwin' - and 'LDSHARED' not in os.environ - and ldshared.startswith(cc)): - # On OS X, if CC is overridden, use that as the default - # command for LDSHARED as well - ldshared = newcc + ldshared[len(cc):] - cc = newcc - if 'CXX' in os.environ: - cxx = os.environ['CXX'] - if 'LDSHARED' in os.environ: - ldshared = os.environ['LDSHARED'] - if 'CPP' in os.environ: - cpp = os.environ['CPP'] - else: - cpp = cc + " -E" # not always - if 'LDFLAGS' in os.environ: - ldshared = ldshared + ' ' + os.environ['LDFLAGS'] - if 'CFLAGS' in os.environ: - cflags = cflags + ' ' + os.environ['CFLAGS'] - ldshared = ldshared + ' ' + os.environ['CFLAGS'] - if 'CPPFLAGS' in os.environ: - cpp = cpp + ' ' + os.environ['CPPFLAGS'] - cflags = cflags + ' ' + os.environ['CPPFLAGS'] - ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] - if 'AR' in os.environ: - ar = os.environ['AR'] - if 'ARFLAGS' in os.environ: - archiver = ar + ' ' + os.environ['ARFLAGS'] - else: - archiver = ar + ' ' + ar_flags - - cc_cmd = cc + ' ' + cflags - compiler.set_executables( - preprocessor=cpp, - compiler=cc_cmd, - compiler_so=cc_cmd + ' ' + ccshared, - compiler_cxx=cxx, - linker_so=ldshared, - linker_exe=cc, - archiver=archiver) - - compiler.shared_lib_extension = shlib_suffix - - -def get_config_h_filename(): - """Return full pathname of installed pyconfig.h file.""" - if python_build: - if os.name == "nt": - inc_dir = os.path.join(_sys_home or project_base, "PC") - else: - inc_dir = _sys_home or project_base - else: - inc_dir = get_python_inc(plat_specific=1) - - return os.path.join(inc_dir, 'pyconfig.h') - - -def get_makefile_filename(): - """Return full pathname of installed Makefile from the Python build.""" - if python_build: - return os.path.join(_sys_home or project_base, "Makefile") - lib_dir = get_python_lib(plat_specific=0, standard_lib=1) - config_file = 'config-{}{}'.format(get_python_version(), build_flags) - if hasattr(sys.implementation, '_multiarch'): - config_file += '-%s' % sys.implementation._multiarch - return os.path.join(lib_dir, config_file, 'Makefile') - - -def parse_config_h(fp, g=None): - """Parse a config.h-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - if g is None: - g = {} - define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") - undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") - # - while True: - line = fp.readline() - if not line: - break - m = define_rx.match(line) - if m: - n, v = m.group(1, 2) - try: v = int(v) - except ValueError: pass - g[n] = v - else: - m = undef_rx.match(line) - if m: - g[m.group(1)] = 0 - return g - - -# Regexes needed for parsing Makefile (and similar syntaxes, -# like old-style Setup files). -_variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") -_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") -_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") - -def parse_makefile(fn, g=None): - """Parse a Makefile-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - from distutils.text_file import TextFile - fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1, errors="surrogateescape") - - if g is None: - g = {} - done = {} - notdone = {} - - while True: - line = fp.readline() - if line is None: # eof - break - m = _variable_rx.match(line) - if m: - n, v = m.group(1, 2) - v = v.strip() - # `$$' is a literal `$' in make - tmpv = v.replace('$$', '') - - if "$" in tmpv: - notdone[n] = v - else: - try: - v = int(v) - except ValueError: - # insert literal `$' - done[n] = v.replace('$$', '$') - else: - done[n] = v - - # Variables with a 'PY_' prefix in the makefile. These need to - # be made available without that prefix through sysconfig. - # Special care is needed to ensure that variable expansion works, even - # if the expansion uses the name without a prefix. - renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') - - # do variable interpolation here - while notdone: - for name in list(notdone): - value = notdone[name] - m = _findvar1_rx.search(value) or _findvar2_rx.search(value) - if m: - n = m.group(1) - found = True - if n in done: - item = str(done[n]) - elif n in notdone: - # get it on a subsequent round - found = False - elif n in os.environ: - # do it like make: fall back to environment - item = os.environ[n] - - elif n in renamed_variables: - if name.startswith('PY_') and name[3:] in renamed_variables: - item = "" - - elif 'PY_' + n in notdone: - found = False - - else: - item = str(done['PY_' + n]) - else: - done[n] = item = "" - if found: - after = value[m.end():] - value = value[:m.start()] + item + after - if "$" in after: - notdone[name] = value - else: - try: value = int(value) - except ValueError: - done[name] = value.strip() - else: - done[name] = value - del notdone[name] - - if name.startswith('PY_') \ - and name[3:] in renamed_variables: - - name = name[3:] - if name not in done: - done[name] = value - else: - # bogus variable reference; just drop it since we can't deal - del notdone[name] - - fp.close() - - # strip spurious spaces - for k, v in done.items(): - if isinstance(v, str): - done[k] = v.strip() - - # save the results in the global dictionary - g.update(done) - return g - - -def expand_makefile_vars(s, vars): - """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in - 'string' according to 'vars' (a dictionary mapping variable names to - values). Variables not present in 'vars' are silently expanded to the - empty string. The variable values in 'vars' should not contain further - variable expansions; if 'vars' is the output of 'parse_makefile()', - you're fine. Returns a variable-expanded version of 's'. - """ - - # This algorithm does multiple expansion, so if vars['foo'] contains - # "${bar}", it will expand ${foo} to ${bar}, and then expand - # ${bar}... and so forth. This is fine as long as 'vars' comes from - # 'parse_makefile()', which takes care of such expansions eagerly, - # according to make's variable expansion semantics. - - while True: - m = _findvar1_rx.search(s) or _findvar2_rx.search(s) - if m: - (beg, end) = m.span() - s = s[0:beg] + vars.get(m.group(1)) + s[end:] - else: - break - return s - - -_config_vars = None - -def _init_posix(): - """Initialize the module as appropriate for POSIX systems.""" - # _sysconfigdata is generated at build time, see the sysconfig module - name = os.environ.get('_PYTHON_SYSCONFIGDATA_NAME', - '_sysconfigdata_{abi}_{platform}_{multiarch}'.format( - abi=sys.abiflags, - platform=sys.platform, - multiarch=getattr(sys.implementation, '_multiarch', ''), - )) - _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0) - build_time_vars = _temp.build_time_vars - global _config_vars - _config_vars = {} - _config_vars.update(build_time_vars) - - -def _init_nt(): - """Initialize the module as appropriate for NT""" - g = {} - # set basic install directories - g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1) - g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1) - - # XXX hmmm.. a normal install puts include files here - g['INCLUDEPY'] = get_python_inc(plat_specific=0) - - g['EXT_SUFFIX'] = _imp.extension_suffixes()[0] - g['EXE'] = ".exe" - g['VERSION'] = get_python_version().replace(".", "") - g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) - - global _config_vars - _config_vars = g - - -def get_config_vars(*args): - """With no arguments, return a dictionary of all configuration - variables relevant for the current platform. Generally this includes - everything needed to build extensions and install both pure modules and - extensions. On Unix, this means every variable defined in Python's - installed Makefile; on Windows it's a much smaller set. - - With arguments, return a list of values that result from looking up - each argument in the configuration variable dictionary. - """ - global _config_vars - if _config_vars is None: - func = globals().get("_init_" + os.name) - if func: - func() - else: - _config_vars = {} - - # Normalized versions of prefix and exec_prefix are handy to have; - # in fact, these are the standard versions used most places in the - # Distutils. - _config_vars['prefix'] = PREFIX - _config_vars['exec_prefix'] = EXEC_PREFIX - - # For backward compatibility, see issue19555 - SO = _config_vars.get('EXT_SUFFIX') - if SO is not None: - _config_vars['SO'] = SO - - # Always convert srcdir to an absolute path - srcdir = _config_vars.get('srcdir', project_base) - if os.name == 'posix': - if python_build: - # If srcdir is a relative path (typically '.' or '..') - # then it should be interpreted relative to the directory - # containing Makefile. - base = os.path.dirname(get_makefile_filename()) - srcdir = os.path.join(base, srcdir) - else: - # srcdir is not meaningful since the installation is - # spread about the filesystem. We choose the - # directory containing the Makefile since we know it - # exists. - srcdir = os.path.dirname(get_makefile_filename()) - _config_vars['srcdir'] = os.path.abspath(os.path.normpath(srcdir)) - - # Convert srcdir into an absolute path if it appears necessary. - # Normally it is relative to the build directory. However, during - # testing, for example, we might be running a non-installed python - # from a different directory. - if python_build and os.name == "posix": - base = project_base - if (not os.path.isabs(_config_vars['srcdir']) and - base != os.getcwd()): - # srcdir is relative and we are not in the same directory - # as the executable. Assume executable is in the build - # directory and make srcdir absolute. - srcdir = os.path.join(base, _config_vars['srcdir']) - _config_vars['srcdir'] = os.path.normpath(srcdir) - - # OS X platforms require special customization to handle - # multi-architecture, multi-os-version installers - if sys.platform == 'darwin': - import _osx_support - _osx_support.customize_config_vars(_config_vars) - - if args: - vals = [] - for name in args: - vals.append(_config_vars.get(name)) - return vals - else: - return _config_vars - -def get_config_var(name): - """Return the value of a single variable using the dictionary - returned by 'get_config_vars()'. Equivalent to - get_config_vars().get(name) - """ - if name == 'SO': - import warnings - warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2) - return get_config_vars().get(name) diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py index abd8313770ef7a..19e012a58ce8cb 100644 --- a/Lib/distutils/tests/test_build_clib.py +++ b/Lib/distutils/tests/test_build_clib.py @@ -2,6 +2,7 @@ import unittest import os import sys +import sysconfig from test.support import run_unittest, missing_compiler_executable @@ -13,6 +14,15 @@ class BuildCLibTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): + def setUp(self): + super().setUp() + self._backup_CONFIG_VARS = dict(sysconfig._CONFIG_VARS) + + def tearDown(self): + super().tearDown() + sysconfig._CONFIG_VARS.clear() + sysconfig._CONFIG_VARS.update(self._backup_CONFIG_VARS) + def test_check_library_dist(self): pkg_dir, dist = self.create_dist() cmd = build_clib(dist) diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 90f7bb066917bc..8e7364d2a2cb5f 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -35,6 +35,7 @@ def setUp(self): site.USER_BASE = self.mkdtemp() from distutils.command import build_ext build_ext.USER_BASE = site.USER_BASE + self.old_config_vars = dict(sysconfig._config_vars) # bpo-30132: On Windows, a .pdb file may be created in the current # working directory. Create a temporary working directory to cleanup @@ -48,6 +49,8 @@ def tearDown(self): site.USER_BASE = self.old_user_base from distutils.command import build_ext build_ext.USER_BASE = self.old_user_base + sysconfig._config_vars.clear() + sysconfig._config_vars.update(self.old_config_vars) super(BuildExtTestCase, self).tearDown() def build_ext(self, *args, **kwargs): diff --git a/Lib/distutils/tests/test_config_cmd.py b/Lib/distutils/tests/test_config_cmd.py index 9aeab07b468361..0127ba71fc4bc4 100644 --- a/Lib/distutils/tests/test_config_cmd.py +++ b/Lib/distutils/tests/test_config_cmd.py @@ -2,6 +2,7 @@ import unittest import os import sys +import sysconfig from test.support import run_unittest, missing_compiler_executable from distutils.command.config import dump_file, config @@ -21,9 +22,12 @@ def setUp(self): self._logs = [] self.old_log = log.info log.info = self._info + self.old_config_vars = dict(sysconfig._CONFIG_VARS) def tearDown(self): log.info = self.old_log + sysconfig._CONFIG_VARS.clear() + sysconfig._CONFIG_VARS.update(self.old_config_vars) super(ConfigTestCase, self).tearDown() def test_dump_file(self): diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py index 21a7b7c85c49da..0632024b3585ce 100644 --- a/Lib/distutils/tests/test_install.py +++ b/Lib/distutils/tests/test_install.py @@ -29,6 +29,15 @@ class InstallTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): + def setUp(self): + super().setUp() + self._backup_config_vars = dict(sysconfig._config_vars) + + def tearDown(self): + super().tearDown() + sysconfig._config_vars.clear() + sysconfig._config_vars.update(self._backup_config_vars) + def test_home_installation_scheme(self): # This ensure two things: # - that --home generates the desired set of directory names diff --git a/Lib/distutils/tests/test_unixccompiler.py b/Lib/distutils/tests/test_unixccompiler.py index eefe4ba40291eb..24725ead1194ce 100644 --- a/Lib/distutils/tests/test_unixccompiler.py +++ b/Lib/distutils/tests/test_unixccompiler.py @@ -12,6 +12,7 @@ class UnixCCompilerTestCase(unittest.TestCase): def setUp(self): self._backup_platform = sys.platform self._backup_get_config_var = sysconfig.get_config_var + self._backup_config_vars = dict(sysconfig._config_vars) class CompilerWrapper(UnixCCompiler): def rpath_foo(self): return self.runtime_library_dir_option('/foo') @@ -20,6 +21,8 @@ def rpath_foo(self): def tearDown(self): sys.platform = self._backup_platform sysconfig.get_config_var = self._backup_get_config_var + sysconfig._config_vars.clear() + sysconfig._config_vars.update(self._backup_config_vars) @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") def test_runtime_libdir_option(self): diff --git a/Lib/distutils/tests/test_util.py b/Lib/distutils/tests/test_util.py index bf0d4333f9aeaa..d4a01c6e91ce2b 100644 --- a/Lib/distutils/tests/test_util.py +++ b/Lib/distutils/tests/test_util.py @@ -54,7 +54,8 @@ def tearDown(self): os.uname = self.uname else: del os.uname - sysconfig._config_vars = copy(self._config_vars) + sysconfig._config_vars.clear() + sysconfig._config_vars.update(self._config_vars) super(UtilTestCase, self).tearDown() def _set_uname(self, uname): diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 74530706be5c70..0f1df6e8a839d1 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -90,7 +90,8 @@ def _run_pip(args, additional_paths=None): sys.argv[1:] = {args} runpy.run_module("pip", run_name="__main__", alter_sys=True) """ - return subprocess.run([sys.executable, "-c", code], check=True).returncode + return subprocess.run([sys.executable, '-W', 'ignore::DeprecationWarning', + "-c", code], check=True).returncode def version(): diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index d056d2c3381608..0e0decd42716ed 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -130,6 +130,12 @@ def joinuser(*args): _CONFIG_VARS = None _USER_BASE = None +# Regexes needed for parsing Makefile (and similar syntaxes, +# like old-style Setup files). +_variable_rx = r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)" +_findvar1_rx = r"\$\(([A-Za-z][A-Za-z0-9_]*)\)" +_findvar2_rx = r"\${([A-Za-z][A-Za-z0-9_]*)}" + def _safe_realpath(path): try: @@ -215,19 +221,14 @@ def _get_default_scheme(): -def _parse_makefile(filename, vars=None): +def _parse_makefile(filename, vars=None, keep_unresolved=True): """Parse a Makefile-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. """ - # Regexes needed for parsing Makefile (and similar syntaxes, - # like old-style Setup files). import re - _variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") - _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") - _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") if vars is None: vars = {} @@ -241,7 +242,7 @@ def _parse_makefile(filename, vars=None): for line in lines: if line.startswith('#') or line.strip() == '': continue - m = _variable_rx.match(line) + m = re.match(_variable_rx, line) if m: n, v = m.group(1, 2) v = v.strip() @@ -274,8 +275,8 @@ def _parse_makefile(filename, vars=None): while len(variables) > 0: for name in tuple(variables): value = notdone[name] - m1 = _findvar1_rx.search(value) - m2 = _findvar2_rx.search(value) + m1 = re.search(_findvar1_rx, value) + m2 = re.search(_findvar2_rx, value) if m1 and m2: m = m1 if m1.start() < m2.start() else m2 else: @@ -330,9 +331,12 @@ def _parse_makefile(filename, vars=None): done[name] = value else: + # Adds unresolved variables to the done dict. + # This is disabled when called from distutils.sysconfig + if keep_unresolved: + done[name] = value # bogus variable reference (e.g. "prefix=$/opt/python"); # just drop it since we can't deal - done[name] = value variables.remove(name) # strip spurious spaces @@ -712,6 +716,32 @@ def get_python_version(): return _PY_VERSION_SHORT +def expand_makefile_vars(s, vars): + """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in + 'string' according to 'vars' (a dictionary mapping variable names to + values). Variables not present in 'vars' are silently expanded to the + empty string. The variable values in 'vars' should not contain further + variable expansions; if 'vars' is the output of 'parse_makefile()', + you're fine. Returns a variable-expanded version of 's'. + """ + import re + + # This algorithm does multiple expansion, so if vars['foo'] contains + # "${bar}", it will expand ${foo} to ${bar}, and then expand + # ${bar}... and so forth. This is fine as long as 'vars' comes from + # 'parse_makefile()', which takes care of such expansions eagerly, + # according to make's variable expansion semantics. + + while True: + m = re.search(_findvar1_rx, s) or re.search(_findvar2_rx, s) + if m: + (beg, end) = m.span() + s = s[0:beg] + vars.get(m.group(1)) + s[end:] + else: + break + return s + + def _print_dict(title, data): for index, (key, value) in enumerate(sorted(data.items())): if index == 0: diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 5a45d78be91663..80f3a04fcc6180 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1667,6 +1667,7 @@ def missing_compiler_executable(cmd_names=[]): missing. """ + # TODO (PEP 632): alternate check without using distutils from distutils import ccompiler, sysconfig, spawn, errors compiler = ccompiler.new_compiler() sysconfig.customize_compiler(compiler) diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py index b7e80f0d351a26..3852cfbc477b6b 100644 --- a/Lib/test/test_peg_generator/test_c_parser.py +++ b/Lib/test/test_peg_generator/test_c_parser.py @@ -70,6 +70,7 @@ def test_parse(self): class TestCParser(TempdirManager, unittest.TestCase): def setUp(self): + self._backup_config_vars = dict(sysconfig._CONFIG_VARS) cmd = support.missing_compiler_executable() if cmd is not None: self.skipTest("The %r command is not found" % cmd) @@ -81,6 +82,8 @@ def setUp(self): def tearDown(self): super(TestCParser, self).tearDown() + sysconfig._CONFIG_VARS.clear() + sysconfig._CONFIG_VARS.update(self._backup_config_vars) def build_extension(self, grammar_source): grammar = parse_string(grammar_source, GrammarParser) diff --git a/Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst b/Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst new file mode 100644 index 00000000000000..95ac1831dbf2d3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst @@ -0,0 +1 @@ +:mod:`distutils.sysconfig` has been merged to :mod:`sysconfig`. From webhook-mailer at python.org Fri Apr 23 08:14:08 2021 From: webhook-mailer at python.org (encukou) Date: Fri, 23 Apr 2021 12:14:08 -0000 Subject: [Python-checkins] bpo-43795: PEP-652: Simplify headers for easier static analysis (GH-25483) Message-ID: https://github.com/python/cpython/commit/e7cc64e297001cc79b9afab80f71d9e6d1267cb7 commit: e7cc64e297001cc79b9afab80f71d9e6d1267cb7 branch: master author: Petr Viktorin committer: encukou date: 2021-04-23T14:14:00+02:00 summary: bpo-43795: PEP-652: Simplify headers for easier static analysis (GH-25483) As part of the PEP-652 implementation, I'll tighten the CI check for functions/data defined with `Py_LIMITED_API`. Discussion in https://discuss.python.org/t/pep-652-maintaining-the-stable-abi/6986 suggests that parsing C headers is OK (though personally I'd rather generate it...), but writing a full C parser is a monumental task and adding an existing one as a dependency brings too many vendoring/bootstraping issues. So, for the check I'll use a "simple" regex on preprocessor output, and adapt the few trivial places where the regex won't work. - Keep declarations in the limited API to one item per line - Make it possible to override `_Py_NO_RETURN`, so the annotation can be removed from preprocessor output. https://bugs.python.org/issue43795 files: M Include/boolobject.h M Include/pyport.h diff --git a/Include/boolobject.h b/Include/boolobject.h index e1c8699ee70fa..cda6f89a99e9a 100644 --- a/Include/boolobject.h +++ b/Include/boolobject.h @@ -15,7 +15,8 @@ PyAPI_DATA(PyTypeObject) PyBool_Type; Don't forget to apply Py_INCREF() when returning either!!! */ /* Don't use these directly */ -PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; +PyAPI_DATA(struct _longobject) _Py_FalseStruct; +PyAPI_DATA(struct _longobject) _Py_TrueStruct; /* Use these macros */ #define Py_False ((PyObject *) &_Py_FalseStruct) diff --git a/Include/pyport.h b/Include/pyport.h index fe27fbc748322..6ab0ae4007922 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -861,6 +861,7 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); XLC support is intentionally omitted due to bpo-40244 */ +#ifndef _Py_NO_RETURN #if defined(__clang__) || \ (defined(__GNUC__) && \ ((__GNUC__ >= 3) || \ @@ -871,6 +872,7 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; #else # define _Py_NO_RETURN #endif +#endif // Preprocessor check for a builtin preprocessor function. Always return 0 From webhook-mailer at python.org Fri Apr 23 08:18:03 2021 From: webhook-mailer at python.org (encukou) Date: Fri, 23 Apr 2021 12:18:03 -0000 Subject: [Python-checkins] bpo-43795: PEP-652: Clean up the stable ABI/limited API (GH-25482) Message-ID: https://github.com/python/cpython/commit/9d6a2d0ee7e55402656e1dec46400591b62db331 commit: 9d6a2d0ee7e55402656e1dec46400591b62db331 branch: master author: Petr Viktorin committer: encukou date: 2021-04-23T14:17:58+02:00 summary: bpo-43795: PEP-652: Clean up the stable ABI/limited API (GH-25482) - `_Py_EncodeLocaleRaw`, which is private by name, undocumented, and wasn't exported in `python3.dll`, is moved to a private header. - `_Py_HashSecret_Initialized`, again private by name, undocumented, and not exported in `python3.dll`, is excluded with `Py_LIMITED_API`. - `PyMarshal_*` and `PyMember_*One` functions, declared in private headers and not exported in `python3.dll`, are removed from `Doc/data/stable_abi.dat`. - `PyMem_Calloc` which *was* exported in `python3dll.c`, is moved to public headers where it joins its other `PyMem_*` friends. Only the last change is documented in the blurb; others are not user-visible. (Nothing uses `Doc/data/stable_abi.dat` yet.) https://bugs.python.org/issue43795 files: A Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst M Doc/data/stable_abi.dat M Include/cpython/fileutils.h M Include/cpython/pymem.h M Include/fileutils.h M Include/pyhash.h M Include/pymem.h diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index b7e3ef4a676a8e..cdc7160250243b 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -351,16 +351,11 @@ PyMapping_Length PyMapping_SetItemString PyMapping_Size PyMapping_Values -PyMarshal_ReadObjectFromString -PyMarshal_WriteLongToFile -PyMarshal_WriteObjectToFile -PyMarshal_WriteObjectToString +PyMem_Calloc PyMem_Free PyMem_Malloc PyMem_Realloc PyMemberDescr_Type -PyMember_GetOne -PyMember_SetOne PyMemoryView_FromMemory PyMemoryView_FromObject PyMemoryView_GetContiguous diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h index 312fd958284788..954f078d25a77d 100644 --- a/Include/cpython/fileutils.h +++ b/Include/cpython/fileutils.h @@ -32,6 +32,9 @@ PyAPI_FUNC(int) _Py_EncodeLocaleEx( int current_locale, _Py_error_handler errors); +PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( + const wchar_t *text, + size_t *error_pos); PyAPI_FUNC(PyObject *) _Py_device_encoding(int); diff --git a/Include/cpython/pymem.h b/Include/cpython/pymem.h index 61d719584584e8..d1054d76520b9a 100644 --- a/Include/cpython/pymem.h +++ b/Include/cpython/pymem.h @@ -10,8 +10,6 @@ PyAPI_FUNC(void) PyMem_RawFree(void *ptr); /* Try to get the allocators name set by _PyMem_SetupAllocators(). */ PyAPI_FUNC(const char*) _PyMem_GetCurrentAllocatorName(void); -PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize); - /* strdup() using PyMem_RawMalloc() */ PyAPI_FUNC(char *) _PyMem_RawStrdup(const char *str); diff --git a/Include/fileutils.h b/Include/fileutils.h index 12bd071c49c04a..16f3b635deed89 100644 --- a/Include/fileutils.h +++ b/Include/fileutils.h @@ -12,10 +12,6 @@ PyAPI_FUNC(wchar_t *) Py_DecodeLocale( PyAPI_FUNC(char*) Py_EncodeLocale( const wchar_t *text, size_t *error_pos); - -PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( - const wchar_t *text, - size_t *error_pos); #endif #ifndef Py_LIMITED_API diff --git a/Include/pyhash.h b/Include/pyhash.h index 728ef932a1accb..a314ea907b7fe2 100644 --- a/Include/pyhash.h +++ b/Include/pyhash.h @@ -76,7 +76,6 @@ typedef union { } expat; } _Py_HashSecret_t; PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret; -#endif #ifdef Py_DEBUG PyAPI_DATA(int) _Py_HashSecret_Initialized; @@ -84,7 +83,6 @@ PyAPI_DATA(int) _Py_HashSecret_Initialized; /* hash function definition */ -#ifndef Py_LIMITED_API typedef struct { Py_hash_t (*const hash)(const void *, Py_ssize_t); const char *name; diff --git a/Include/pymem.h b/Include/pymem.h index 92cd5369589edb..2f770b1fbf183d 100644 --- a/Include/pymem.h +++ b/Include/pymem.h @@ -50,6 +50,7 @@ extern "C" { */ PyAPI_FUNC(void *) PyMem_Malloc(size_t size); +PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize); PyAPI_FUNC(void *) PyMem_Realloc(void *ptr, size_t new_size); PyAPI_FUNC(void) PyMem_Free(void *ptr); diff --git a/Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst b/Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst new file mode 100644 index 00000000000000..1dee6e2d69a1b4 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst @@ -0,0 +1,2 @@ +:c:func:`PyMem_Calloc` is now available in the limited C API +(``Py_LIMITED_API``). From webhook-mailer at python.org Fri Apr 23 08:19:25 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 12:19:25 -0000 Subject: [Python-checkins] bpo-38820: Test with OpenSSL 3.0.0-alpha15 (GH-25537) Message-ID: https://github.com/python/cpython/commit/dcf658157df11de198a98e3db2a3050dd4f6b973 commit: dcf658157df11de198a98e3db2a3050dd4f6b973 branch: master author: Christian Heimes committer: tiran date: 2021-04-23T14:19:21+02:00 summary: bpo-38820: Test with OpenSSL 3.0.0-alpha15 (GH-25537) Signed-off-by: Christian Heimes files: M .github/workflows/build.yml M Tools/ssl/multissltests.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 333c508ef53a79..c8fe8269e860e1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -177,7 +177,7 @@ jobs: strategy: fail-fast: false matrix: - openssl_ver: [1.1.1k, 3.0.0-alpha14] + openssl_ver: [1.1.1k, 3.0.0-alpha15] env: OPENSSL_VER: ${{ matrix.openssl_ver }} MULTISSL_DIR: ${{ github.workspace }}/multissl diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 90213b3dff5e18..dc47c5ce12cfa1 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -47,7 +47,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - "3.0.0-alpha14" + "3.0.0-alpha15" ] LIBRESSL_OLD_VERSIONS = [ From webhook-mailer at python.org Fri Apr 23 08:23:41 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 12:23:41 -0000 Subject: [Python-checkins] [3.9] bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) (GH-25555) Message-ID: https://github.com/python/cpython/commit/e259a77f21bdfc7d4195913b379cbd6daee45d0d commit: e259a77f21bdfc7d4195913b379cbd6daee45d0d branch: 3.9 author: Christian Heimes committer: tiran date: 2021-04-23T14:23:35+02:00 summary: [3.9] bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) (GH-25555) Signed-off-by: Christian Heimes . (cherry picked from commit b9ad88be0304136c3fe5959c65a5d2c75490cd80) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 15d6520229c925..c69f0d8bffc0a3 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1478,12 +1478,17 @@ def test_load_verify_cadata(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) self.assertRaises(TypeError, ctx.load_verify_locations, cadata=object) - with self.assertRaisesRegex(ssl.SSLError, "no start line"): + with self.assertRaisesRegex( + ssl.SSLError, + "no start line: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata="broken") - with self.assertRaisesRegex(ssl.SSLError, "not enough data"): + with self.assertRaisesRegex( + ssl.SSLError, + "not enough data: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata=b"broken") - @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows") def test_load_dh_params(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) diff --git a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst new file mode 100644 index 00000000000000..28ff0fb3afa9d3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 3f145900325c82..97e314b21fd1a5 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -4095,7 +4095,7 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, { BIO *biobuf = NULL; X509_STORE *store; - int retval = 0, err, loaded = 0; + int retval = -1, err, loaded = 0; assert(filetype == SSL_FILETYPE_ASN1 || filetype == SSL_FILETYPE_PEM); @@ -4149,23 +4149,32 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len, } err = ERR_peek_last_error(); - if ((filetype == SSL_FILETYPE_ASN1) && - (loaded > 0) && - (ERR_GET_LIB(err) == ERR_LIB_ASN1) && - (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { + if (loaded == 0) { + const char *msg = NULL; + if (filetype == SSL_FILETYPE_PEM) { + msg = "no start line: cadata does not contain a certificate"; + } else { + msg = "not enough data: cadata does not contain a certificate"; + } + _setSSLError(msg, 0, __FILE__, __LINE__); + retval = -1; + } else if ((filetype == SSL_FILETYPE_ASN1) && + (ERR_GET_LIB(err) == ERR_LIB_ASN1) && + (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { /* EOF ASN1 file, not an error */ ERR_clear_error(); retval = 0; } else if ((filetype == SSL_FILETYPE_PEM) && - (loaded > 0) && (ERR_GET_LIB(err) == ERR_LIB_PEM) && (ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) { /* EOF PEM file, not an error */ ERR_clear_error(); retval = 0; - } else { + } else if (err != 0) { _setSSLError(NULL, 0, __FILE__, __LINE__); retval = -1; + } else { + retval = 0; } BIO_free(biobuf); From webhook-mailer at python.org Fri Apr 23 08:23:42 2021 From: webhook-mailer at python.org (encukou) Date: Fri, 23 Apr 2021 12:23:42 -0000 Subject: [Python-checkins] bpo-43868: Remove PyOS_ReadlineFunctionPointer from the stable ABI list (GH-25442) Message-ID: https://github.com/python/cpython/commit/91b69b77cf5f78de6d35dea23098df34b6fd9e53 commit: 91b69b77cf5f78de6d35dea23098df34b6fd9e53 branch: master author: Petr Viktorin committer: encukou date: 2021-04-23T14:23:38+02:00 summary: bpo-43868: Remove PyOS_ReadlineFunctionPointer from the stable ABI list (GH-25442) The inclusion of PyOS_ReadlineFunctionPointer in python3dll.c was a mistake. According to PEP 384: > functions expecting FILE* are not part of the ABI, to avoid depending > on a specific version of the Microsoft C runtime DLL on Windows. https://bugs.python.org/issue43868 files: A Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst M Doc/whatsnew/3.10.rst M Include/cpython/pythonrun.h M Include/pythonrun.h M PC/python3dll.c diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1c2919a06c4d32..67e03f2f5efb0d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1740,6 +1740,12 @@ Removed Use Python :mod:`symtable` module instead. (Contributed by Victor Stinner in :issue:`43244`.) +* Remove :c:func:`PyOS_ReadlineFunctionPointer` from the limited C API headers + and from ``python3.dll``, the library that provides the stable ABI on + Windows. Since the function takes a ``FILE*`` argument, its ABI stability + cannot be guaranteed. + (Contributed by Petr Viktorin in :issue:`43868`.) + * Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. These functions were undocumented and excluded from the limited C API. Most names defined by these header files were not prefixed by ``Py`` and so diff --git a/Include/cpython/pythonrun.h b/Include/cpython/pythonrun.h index ffca0e457d58b5..2e72d0820d34f5 100644 --- a/Include/cpython/pythonrun.h +++ b/Include/cpython/pythonrun.h @@ -118,3 +118,4 @@ PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject /* Stuff with no proper home (yet) */ PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *); PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState; +PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); diff --git a/Include/pythonrun.h b/Include/pythonrun.h index b87bc738902420..b0a2fc3002d37d 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -16,7 +16,6 @@ PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); /* Stuff with no proper home (yet) */ PyAPI_DATA(int) (*PyOS_InputHook)(void); -PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); /* Stack size, in "pointers" (so we get extra safety margins on 64-bit platforms). On a 32-bit platform, this translates diff --git a/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst b/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst new file mode 100644 index 00000000000000..50888b8b37ab84 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst @@ -0,0 +1,3 @@ +:c:func:`PyOS_ReadlineFunctionPointer` is no longer exported by limited C API +headers and by ``python3.dll`` on Windows. Like any function that takes +``FILE*``, it is not part of the stable ABI. diff --git a/PC/python3dll.c b/PC/python3dll.c index 195c6531fdf887..e5a21ed7c022e7 100644 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -808,7 +808,6 @@ EXPORT_DATA(PyODictIter_Type) EXPORT_DATA(PyODictKeys_Type) EXPORT_DATA(PyODictValues_Type) EXPORT_DATA(PyOS_InputHook) -EXPORT_DATA(PyOS_ReadlineFunctionPointer) EXPORT_DATA(PyProperty_Type) EXPORT_DATA(PyRange_Type) EXPORT_DATA(PyRangeIter_Type) From webhook-mailer at python.org Fri Apr 23 09:27:26 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 23 Apr 2021 13:27:26 -0000 Subject: [Python-checkins] bpo-43914: Highlight invalid ranges in SyntaxErrors (#25525) Message-ID: https://github.com/python/cpython/commit/a77aac4fca9723b8fd52a832f3e9df13beb25113 commit: a77aac4fca9723b8fd52a832f3e9df13beb25113 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-23T14:27:05+01:00 summary: bpo-43914: Highlight invalid ranges in SyntaxErrors (#25525) To improve the user experience understanding what part of the error messages associated with SyntaxErrors is wrong, we can highlight the whole error range and not only place the caret at the first character. In this way: >>> foo(x, z for z in range(10), t, w) File "", line 1 foo(x, z for z in range(10), t, w) ^ SyntaxError: Generator expression must be parenthesized becomes >>> foo(x, z for z in range(10), t, w) File "", line 1 foo(x, z for z in range(10), t, w) ^^^^^^^^^^^^^^^^^^^^ SyntaxError: Generator expression must be parenthesized files: A Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst M Doc/library/exceptions.rst M Doc/whatsnew/3.10.rst M Grammar/python.gram M Include/cpython/pyerrors.h M Include/internal/pycore_symtable.h M Lib/test/test_cmd_line_script.py M Lib/test/test_exceptions.py M Lib/test/test_syntax.py M Objects/exceptions.c M Parser/parser.c M Parser/pegen.c M Parser/pegen.h M Python/compile.c M Python/errors.c M Python/pythonrun.c M Python/symtable.c diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index f4f5c478f2cb8..1b9a5facd87cd 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -436,6 +436,18 @@ The following exceptions are the exceptions that are usually raised. The source code text involved in the error. + .. attribute:: end_lineno + + Which line number in the file the error occurred ends in. This is + 1-indexed: the first line in the file has a ``lineno`` of 1. + + .. attribute:: end_offset + + The column in the end line where the error occurred finishes. This is + 1-indexed: the first character in the line has an ``offset`` of 1. + + .. versionchanged:: 3.10 + Added the :attr:`end_lineno` and :attr:`end_offset` attributes. .. exception:: IndentationError diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 67e03f2f5efb0..86cf11f796a66 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -171,6 +171,31 @@ These improvements are inspired by previous work in the PyPy interpreter. (Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in :issue:`40176`.) +:exc:`SyntaxError` exceptions raised by the intepreter will now highlight the +full error range of the expression that consistutes the syntax error itself, +instead of just where the problem is detected. In this way, instead of displaying +(before Python 3.10): + +.. code-block:: python + + >>> foo(x, z for z in range(10), t, w) + File "", line 1 + foo(x, z for z in range(10), t, w) + ^ + SyntaxError: Generator expression must be parenthesized + +now Python 3.10 will display the exception as: + +.. code-block:: python + + >>> foo(x, z for z in range(10), t, w) + File "", line 1 + foo(x, z for z in range(10), t, w) + ^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Generator expression must be parenthesized + +This improvement has been contributed by Pablo Galindo in :issue:`43914`. + A considerable amount of new specialized messages for :exc:`SyntaxError` exceptions have been incorporated. Some of the most notable ones: diff --git a/Grammar/python.gram b/Grammar/python.gram index f03802196a4fd..ca9bed3e4f20b 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -779,32 +779,32 @@ t_atom[expr_ty]: # From here on, there are rules for invalid syntax with specialised error messages invalid_arguments: - | args ',' '*' { RAISE_SYNTAX_ERROR("iterable argument unpacking follows keyword argument unpacking") } - | a=expression for_if_clauses ',' [args | expression for_if_clauses] { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") } + | a=args ',' '*' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "iterable argument unpacking follows keyword argument unpacking") } + | a=expression b=for_if_clauses ',' [args | expression for_if_clauses] { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, PyPegen_last_item(b, comprehension_ty)->target, "Generator expression must be parenthesized") } | a=args for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a) } - | args ',' a=expression for_if_clauses { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") } + | args ',' a=expression b=for_if_clauses { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, asdl_seq_GET(b, b->size-1)->target, "Generator expression must be parenthesized") } | a=args ',' args { _PyPegen_arguments_parsing_error(p, a) } invalid_kwarg: - | expression a='=' { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION( - a, "expression cannot contain assignment, perhaps you meant \"==\"?") } + | a=expression b='=' { + RAISE_SYNTAX_ERROR_KNOWN_RANGE( + a, b, "expression cannot contain assignment, perhaps you meant \"==\"?") } invalid_expression: # !(NAME STRING) is not matched so we don't show this error with some invalid string prefixes like: kf"dsfsdf" # Soft keywords need to also be ignored because they can be parsed as NAME NAME - | !(NAME STRING | SOFT_KEYWORD) a=disjunction expression { - RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, "invalid syntax. Perhaps you forgot a comma?") } + | !(NAME STRING | SOFT_KEYWORD) a=disjunction b=expression { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Perhaps you forgot a comma?") } invalid_named_expression: | a=expression ':=' expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( a, "cannot use assignment expressions with %s", _PyPegen_get_expr_name(a)) } - | a=NAME b='=' bitwise_or !('='|':='|',') { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?") } + | a=NAME '=' b=bitwise_or !('='|':='|',') { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?") } | !(list|tuple|genexp|'True'|'None'|'False') a=bitwise_or b='=' bitwise_or !('='|':='|',') { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(b, "cannot assign to %s here. Maybe you meant '==' instead of '='?", + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot assign to %s here. Maybe you meant '==' instead of '='?", _PyPegen_get_expr_name(a)) } invalid_assignment: @@ -841,25 +841,28 @@ invalid_primary: invalid_comprehension: | ('[' | '(' | '{') a=starred_expression for_if_clauses { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "iterable unpacking cannot be used in comprehension") } - | ('[' | '{') a=star_named_expression ',' [star_named_expressions] for_if_clauses { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "did you forget parentheses around the comprehension target?") } + | ('[' | '{') a=star_named_expression ',' b=star_named_expressions for_if_clauses { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, PyPegen_last_item(b, expr_ty), + "did you forget parentheses around the comprehension target?") } + | ('[' | '{') a=star_named_expression b=',' for_if_clauses { + RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "did you forget parentheses around the comprehension target?") } invalid_dict_comprehension: | '{' a='**' bitwise_or for_if_clauses '}' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") } invalid_parameters: - | param_no_default* invalid_parameters_helper param_no_default { - RAISE_SYNTAX_ERROR("non-default argument follows default argument") } + | param_no_default* invalid_parameters_helper a=param_no_default { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") } invalid_parameters_helper: # This is only there to avoid type errors | a=slash_with_default { _PyPegen_singleton_seq(p, a) } | param_with_default+ invalid_lambda_parameters: - | lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default { - RAISE_SYNTAX_ERROR("non-default argument follows default argument") } + | lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "non-default argument follows default argument") } invalid_lambda_parameters_helper: | a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) } | lambda_param_with_default+ invalid_star_etc: - | '*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") } + | a='*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "named arguments must follow bare *") } | '*' ',' TYPE_COMMENT { RAISE_SYNTAX_ERROR("bare * has associated type comment") } invalid_lambda_star_etc: | '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") } @@ -897,7 +900,7 @@ invalid_try_stmt: RAISE_INDENTATION_ERROR("expected an indented block after 'try' statement on line %d", a->lineno) } invalid_except_stmt: | 'except' a=expression ',' expressions ['as' NAME ] ':' { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "exception group must be parenthesized") } + RAISE_SYNTAX_ERROR_STARTING_FROM(a, "exception group must be parenthesized") } | a='except' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } invalid_finally_stmt: @@ -942,10 +945,10 @@ invalid_class_def_raw: invalid_double_starred_kvpairs: | ','.double_starred_kvpair+ ',' invalid_kvpair - | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } + | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") } | expression a=':' &('}'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } invalid_kvpair: | a=expression !(':') { - RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, "':' expected after dictionary key") } - | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use a starred expression in a dictionary value") } + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, a->end_lineno, -1, "':' expected after dictionary key") } + | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") } | expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index 9d88e6631f664..5e57129c3b82c 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -20,6 +20,8 @@ typedef struct { PyObject *filename; PyObject *lineno; PyObject *offset; + PyObject *end_lineno; + PyObject *end_offset; PyObject *text; PyObject *print_file_and_line; } PySyntaxErrorObject; @@ -148,6 +150,13 @@ PyAPI_FUNC(void) PyErr_SyntaxLocationObject( int lineno, int col_offset); +PyAPI_FUNC(void) PyErr_RangedSyntaxLocationObject( + PyObject *filename, + int lineno, + int col_offset, + int end_lineno, + int end_col_offset); + PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); diff --git a/Include/internal/pycore_symtable.h b/Include/internal/pycore_symtable.h index 5d34a6c951cab..22f5fcb7956bf 100644 --- a/Include/internal/pycore_symtable.h +++ b/Include/internal/pycore_symtable.h @@ -62,6 +62,8 @@ typedef struct _symtable_entry { int ste_comp_iter_expr; /* non-zero if visiting a comprehension range expression */ int ste_lineno; /* first line of block */ int ste_col_offset; /* offset of first line of block */ + int ste_end_lineno; /* end line of block */ + int ste_end_col_offset; /* end offset of first line of block */ int ste_opt_lineno; /* lineno of last exec or import * */ int ste_opt_col_offset; /* offset of last exec or import * */ struct symtable *ste_table; diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index 2e0b5f72c2229..af29c171d4282 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -601,7 +601,7 @@ def test_syntaxerror_unindented_caret_position(self): exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() # Confirm that the caret is located under the '=' sign - self.assertIn("\n 1 + 1 = 2\n ^\n", text) + self.assertIn("\n ^^^^^\n", text) def test_syntaxerror_indented_caret_position(self): script = textwrap.dedent("""\ @@ -612,8 +612,8 @@ def test_syntaxerror_indented_caret_position(self): script_name = _make_test_script(script_dir, 'script', script) exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() - # Confirm that the caret is located under the first 1 character - self.assertIn("\n 1 + 1 = 2\n ^\n", text) + # Confirm that the caret starts under the first 1 character + self.assertIn("\n 1 + 1 = 2\n ^^^^^\n", text) # Try the same with a form feed at the start of the indented line script = ( @@ -624,7 +624,7 @@ def test_syntaxerror_indented_caret_position(self): exitcode, stdout, stderr = assert_python_failure(script_name) text = io.TextIOWrapper(io.BytesIO(stderr), "ascii").read() self.assertNotIn("\f", text) - self.assertIn("\n 1 + 1 = 2\n ^\n", text) + self.assertIn("\n 1 + 1 = 2\n ^^^^^\n", text) def test_syntaxerror_multi_line_fstring(self): script = 'foo = f"""{}\nfoo"""\n' @@ -650,7 +650,7 @@ def test_syntaxerror_invalid_escape_sequence_multi_line(self): self.assertEqual( stderr.splitlines()[-3:], [ b' foo = """\\q"""', - b' ^', + b' ^^^^^^^^', b'SyntaxError: invalid escape sequence \\q' ], ) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index e0e819183830a..b3c00b04a3762 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -8,6 +8,7 @@ import pickle import weakref import errno +from textwrap import dedent from test.support import (captured_stderr, check_impl_detail, cpython_only, gc_collect, @@ -255,13 +256,13 @@ def baz(): check('from __future__ import doesnt_exist', 1, 1) check('from __future__ import braces', 1, 1) check('x=1\nfrom __future__ import division', 2, 1) - check('foo(1=2)', 1, 6) + check('foo(1=2)', 1, 5) check('def f():\n x, y: int', 2, 3) check('[*x for x in xs]', 1, 2) check('foo(x for x in range(10), 100)', 1, 5) check('for 1 in []: pass', 1, 5) - check('(yield i) = 2', 1, 11) - check('def f(*):\n pass', 1, 8) + check('(yield i) = 2', 1, 2) + check('def f(*):\n pass', 1, 7) @cpython_only def testSettingException(self): @@ -395,25 +396,31 @@ def testAttributes(self): 'filename' : 'filenameStr', 'filename2' : None}), (SyntaxError, (), {'msg' : None, 'text' : None, 'filename' : None, 'lineno' : None, 'offset' : None, - 'print_file_and_line' : None}), + 'end_offset': None, 'print_file_and_line' : None}), (SyntaxError, ('msgStr',), {'args' : ('msgStr',), 'text' : None, 'print_file_and_line' : None, 'msg' : 'msgStr', - 'filename' : None, 'lineno' : None, 'offset' : None}), + 'filename' : None, 'lineno' : None, 'offset' : None, + 'end_offset': None}), (SyntaxError, ('msgStr', ('filenameStr', 'linenoStr', 'offsetStr', - 'textStr')), + 'textStr', 'endLinenoStr', 'endOffsetStr')), {'offset' : 'offsetStr', 'text' : 'textStr', 'args' : ('msgStr', ('filenameStr', 'linenoStr', - 'offsetStr', 'textStr')), + 'offsetStr', 'textStr', + 'endLinenoStr', 'endOffsetStr')), 'print_file_and_line' : None, 'msg' : 'msgStr', - 'filename' : 'filenameStr', 'lineno' : 'linenoStr'}), + 'filename' : 'filenameStr', 'lineno' : 'linenoStr', + 'end_lineno': 'endLinenoStr', 'end_offset': 'endOffsetStr'}), (SyntaxError, ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr', - 'textStr', 'print_file_and_lineStr'), + 'textStr', 'endLinenoStr', 'endOffsetStr', + 'print_file_and_lineStr'), {'text' : None, 'args' : ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr', - 'textStr', 'print_file_and_lineStr'), + 'textStr', 'endLinenoStr', 'endOffsetStr', + 'print_file_and_lineStr'), 'print_file_and_line' : None, 'msg' : 'msgStr', - 'filename' : None, 'lineno' : None, 'offset' : None}), + 'filename' : None, 'lineno' : None, 'offset' : None, + 'end_lineno': None, 'end_offset': None}), (UnicodeError, (), {'args' : (),}), (UnicodeEncodeError, ('ascii', 'a', 0, 1, 'ordinal not in range'), @@ -459,7 +466,7 @@ def testAttributes(self): e = exc(*args) except: print("\nexc=%r, args=%r" % (exc, args), file=sys.stderr) - raise + # raise else: # Verify module name if not type(e).__name__.endswith('NaiveException'): @@ -1827,6 +1834,130 @@ def test_copy_pickle(self): self.assertEqual(exc.name, orig.name) self.assertEqual(exc.path, orig.path) +class SyntaxErrorTests(unittest.TestCase): + def test_range_of_offsets(self): + cases = [ + # Basic range from 2->7 + (("bad.py", 1, 2, "abcdefg", 1, 7), + dedent( + """ + File "bad.py", line 1 + abcdefg + ^^^^^ + SyntaxError: bad bad + """)), + # end_offset = start_offset + 1 + (("bad.py", 1, 2, "abcdefg", 1, 3), + dedent( + """ + File "bad.py", line 1 + abcdefg + ^ + SyntaxError: bad bad + """)), + # Negative end offset + (("bad.py", 1, 2, "abcdefg", 1, -2), + dedent( + """ + File "bad.py", line 1 + abcdefg + ^ + SyntaxError: bad bad + """)), + # end offset before starting offset + (("bad.py", 1, 4, "abcdefg", 1, 2), + dedent( + """ + File "bad.py", line 1 + abcdefg + ^ + SyntaxError: bad bad + """)), + # Both offsets negative + (("bad.py", 1, -4, "abcdefg", 1, -2), + dedent( + """ + File "bad.py", line 1 + abcdefg + SyntaxError: bad bad + """)), + # Both offsets negative and the end more negative + (("bad.py", 1, -4, "abcdefg", 1, -5), + dedent( + """ + File "bad.py", line 1 + abcdefg + SyntaxError: bad bad + """)), + # Both offsets 0 + (("bad.py", 1, 0, "abcdefg", 1, 0), + dedent( + """ + File "bad.py", line 1 + abcdefg + SyntaxError: bad bad + """)), + # Start offset 0 and end offset not 0 + (("bad.py", 1, 0, "abcdefg", 1, 5), + dedent( + """ + File "bad.py", line 1 + abcdefg + SyntaxError: bad bad + """)), + # End offset pass the source lenght + (("bad.py", 1, 2, "abcdefg", 1, 100), + dedent( + """ + File "bad.py", line 1 + abcdefg + ^^^^^^ + SyntaxError: bad bad + """)), + ] + for args, expected in cases: + with self.subTest(args=args): + try: + raise SyntaxError("bad bad", args) + except SyntaxError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + the_exception = exc + + def test_attributes_new_constructor(self): + args = ("bad.py", 1, 2, "abcdefg", 1, 100) + the_exception = SyntaxError("bad bad", args) + filename, lineno, offset, error, end_lineno, end_offset = args + self.assertEqual(filename, the_exception.filename) + self.assertEqual(lineno, the_exception.lineno) + self.assertEqual(end_lineno, the_exception.end_lineno) + self.assertEqual(offset, the_exception.offset) + self.assertEqual(end_offset, the_exception.end_offset) + self.assertEqual(error, the_exception.text) + self.assertEqual("bad bad", the_exception.msg) + + def test_attributes_old_constructor(self): + args = ("bad.py", 1, 2, "abcdefg") + the_exception = SyntaxError("bad bad", args) + filename, lineno, offset, error = args + self.assertEqual(filename, the_exception.filename) + self.assertEqual(lineno, the_exception.lineno) + self.assertEqual(None, the_exception.end_lineno) + self.assertEqual(offset, the_exception.offset) + self.assertEqual(None, the_exception.end_offset) + self.assertEqual(error, the_exception.text) + self.assertEqual("bad bad", the_exception.msg) + + def test_incorrect_constructor(self): + args = ("bad.py", 1, 2) + self.assertRaises(TypeError, SyntaxError, "bad bad", args) + + args = ("bad.py", 1, 2, 4, 5, 6, 7) + self.assertRaises(TypeError, SyntaxError, "bad bad", args) + + args = ("bad.py", 1, 2, "abcdefg", 1) + self.assertRaises(TypeError, SyntaxError, "bad bad", args) + class PEP626Tests(unittest.TestCase): diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index dc81964830a58..0a910bcf5bd77 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1212,7 +1212,7 @@ def test_expression_with_assignment(self): self._check_error( "print(end1 + end2 = ' ')", 'expression cannot contain assignment, perhaps you meant "=="?', - offset=19 + offset=7 ) def test_curly_brace_after_primary_raises_immediately(self): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst new file mode 100644 index 0000000000000..ce6747cb1d5d7 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst @@ -0,0 +1,3 @@ +:exc:`SyntaxError` exceptions raised by the intepreter will highlight the +full error range of the expression that consistutes the syntax error itself, +instead of just where the problem is detected. Patch by Pablo Galindo. diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 4a2fc27a8740c..95e6f21ae8217 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1494,30 +1494,33 @@ SyntaxError_init(PySyntaxErrorObject *self, PyObject *args, PyObject *kwds) if (lenargs == 2) { info = PyTuple_GET_ITEM(args, 1); info = PySequence_Tuple(info); - if (!info) + if (!info) { return -1; + } - if (PyTuple_GET_SIZE(info) != 4) { - /* not a very good error message, but it's what Python 2.4 gives */ - PyErr_SetString(PyExc_IndexError, "tuple index out of range"); + self->end_lineno = NULL; + self->end_offset = NULL; + if (!PyArg_ParseTuple(info, "OOOO|OO", + &self->filename, &self->lineno, + &self->offset, &self->text, + &self->end_lineno, &self->end_offset)) { Py_DECREF(info); return -1; - } - - Py_INCREF(PyTuple_GET_ITEM(info, 0)); - Py_XSETREF(self->filename, PyTuple_GET_ITEM(info, 0)); - - Py_INCREF(PyTuple_GET_ITEM(info, 1)); - Py_XSETREF(self->lineno, PyTuple_GET_ITEM(info, 1)); - - Py_INCREF(PyTuple_GET_ITEM(info, 2)); - Py_XSETREF(self->offset, PyTuple_GET_ITEM(info, 2)); - - Py_INCREF(PyTuple_GET_ITEM(info, 3)); - Py_XSETREF(self->text, PyTuple_GET_ITEM(info, 3)); + } + Py_INCREF(self->filename); + Py_INCREF(self->lineno); + Py_INCREF(self->offset); + Py_INCREF(self->text); + Py_XINCREF(self->end_lineno); + Py_XINCREF(self->end_offset); Py_DECREF(info); + if (self->end_lineno != NULL && self->end_offset == NULL) { + PyErr_SetString(PyExc_TypeError, "end_offset must be provided when end_lineno is provided"); + return -1; + } + /* * Issue #21669: Custom error for 'print' & 'exec' as statements * @@ -1540,6 +1543,8 @@ SyntaxError_clear(PySyntaxErrorObject *self) Py_CLEAR(self->filename); Py_CLEAR(self->lineno); Py_CLEAR(self->offset); + Py_CLEAR(self->end_lineno); + Py_CLEAR(self->end_offset); Py_CLEAR(self->text); Py_CLEAR(self->print_file_and_line); return BaseException_clear((PyBaseExceptionObject *)self); @@ -1560,6 +1565,8 @@ SyntaxError_traverse(PySyntaxErrorObject *self, visitproc visit, void *arg) Py_VISIT(self->filename); Py_VISIT(self->lineno); Py_VISIT(self->offset); + Py_VISIT(self->end_lineno); + Py_VISIT(self->end_offset); Py_VISIT(self->text); Py_VISIT(self->print_file_and_line); return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg); @@ -1650,6 +1657,10 @@ static PyMemberDef SyntaxError_members[] = { PyDoc_STR("exception offset")}, {"text", T_OBJECT, offsetof(PySyntaxErrorObject, text), 0, PyDoc_STR("exception text")}, + {"end_lineno", T_OBJECT, offsetof(PySyntaxErrorObject, end_lineno), 0, + PyDoc_STR("exception end lineno")}, + {"end_offset", T_OBJECT, offsetof(PySyntaxErrorObject, end_offset), 0, + PyDoc_STR("exception end offset")}, {"print_file_and_line", T_OBJECT, offsetof(PySyntaxErrorObject, print_file_and_line), 0, PyDoc_STR("exception print_file_and_line")}, diff --git a/Parser/parser.c b/Parser/parser.c index 0937717abecbb..e8328cee27552 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -437,29 +437,29 @@ static char *soft_keywords[] = { #define _tmp_150_type 1363 #define _tmp_151_type 1364 #define _tmp_152_type 1365 -#define _loop0_153_type 1366 -#define _loop1_154_type 1367 -#define _loop0_155_type 1368 -#define _loop1_156_type 1369 -#define _tmp_157_type 1370 +#define _tmp_153_type 1366 +#define _loop0_154_type 1367 +#define _loop1_155_type 1368 +#define _loop0_156_type 1369 +#define _loop1_157_type 1370 #define _tmp_158_type 1371 #define _tmp_159_type 1372 -#define _loop0_161_type 1373 -#define _gather_160_type 1374 -#define _loop0_163_type 1375 -#define _gather_162_type 1376 -#define _loop0_165_type 1377 -#define _gather_164_type 1378 -#define _loop0_167_type 1379 -#define _gather_166_type 1380 -#define _tmp_168_type 1381 +#define _tmp_160_type 1373 +#define _loop0_162_type 1374 +#define _gather_161_type 1375 +#define _loop0_164_type 1376 +#define _gather_163_type 1377 +#define _loop0_166_type 1378 +#define _gather_165_type 1379 +#define _loop0_168_type 1380 +#define _gather_167_type 1381 #define _tmp_169_type 1382 #define _tmp_170_type 1383 #define _tmp_171_type 1384 #define _tmp_172_type 1385 -#define _loop0_174_type 1386 -#define _gather_173_type 1387 -#define _tmp_175_type 1388 +#define _tmp_173_type 1386 +#define _loop0_175_type 1387 +#define _gather_174_type 1388 #define _tmp_176_type 1389 #define _tmp_177_type 1390 #define _tmp_178_type 1391 @@ -485,6 +485,7 @@ static char *soft_keywords[] = { #define _tmp_198_type 1411 #define _tmp_199_type 1412 #define _tmp_200_type 1413 +#define _tmp_201_type 1414 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -852,29 +853,29 @@ static asdl_seq *_loop0_149_rule(Parser *p); static void *_tmp_150_rule(Parser *p); static void *_tmp_151_rule(Parser *p); static void *_tmp_152_rule(Parser *p); -static asdl_seq *_loop0_153_rule(Parser *p); -static asdl_seq *_loop1_154_rule(Parser *p); -static asdl_seq *_loop0_155_rule(Parser *p); -static asdl_seq *_loop1_156_rule(Parser *p); -static void *_tmp_157_rule(Parser *p); +static void *_tmp_153_rule(Parser *p); +static asdl_seq *_loop0_154_rule(Parser *p); +static asdl_seq *_loop1_155_rule(Parser *p); +static asdl_seq *_loop0_156_rule(Parser *p); +static asdl_seq *_loop1_157_rule(Parser *p); static void *_tmp_158_rule(Parser *p); static void *_tmp_159_rule(Parser *p); -static asdl_seq *_loop0_161_rule(Parser *p); -static asdl_seq *_gather_160_rule(Parser *p); -static asdl_seq *_loop0_163_rule(Parser *p); -static asdl_seq *_gather_162_rule(Parser *p); -static asdl_seq *_loop0_165_rule(Parser *p); -static asdl_seq *_gather_164_rule(Parser *p); -static asdl_seq *_loop0_167_rule(Parser *p); -static asdl_seq *_gather_166_rule(Parser *p); -static void *_tmp_168_rule(Parser *p); +static void *_tmp_160_rule(Parser *p); +static asdl_seq *_loop0_162_rule(Parser *p); +static asdl_seq *_gather_161_rule(Parser *p); +static asdl_seq *_loop0_164_rule(Parser *p); +static asdl_seq *_gather_163_rule(Parser *p); +static asdl_seq *_loop0_166_rule(Parser *p); +static asdl_seq *_gather_165_rule(Parser *p); +static asdl_seq *_loop0_168_rule(Parser *p); +static asdl_seq *_gather_167_rule(Parser *p); static void *_tmp_169_rule(Parser *p); static void *_tmp_170_rule(Parser *p); static void *_tmp_171_rule(Parser *p); static void *_tmp_172_rule(Parser *p); -static asdl_seq *_loop0_174_rule(Parser *p); -static asdl_seq *_gather_173_rule(Parser *p); -static void *_tmp_175_rule(Parser *p); +static void *_tmp_173_rule(Parser *p); +static asdl_seq *_loop0_175_rule(Parser *p); +static asdl_seq *_gather_174_rule(Parser *p); static void *_tmp_176_rule(Parser *p); static void *_tmp_177_rule(Parser *p); static void *_tmp_178_rule(Parser *p); @@ -900,6 +901,7 @@ static void *_tmp_197_rule(Parser *p); static void *_tmp_198_rule(Parser *p); static void *_tmp_199_rule(Parser *p); static void *_tmp_200_rule(Parser *p); +static void *_tmp_201_rule(Parser *p); // file: statements? $ @@ -17475,9 +17477,9 @@ invalid_arguments_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' '*'")); Token * _literal; Token * _literal_1; - expr_ty args_var; + expr_ty a; if ( - (args_var = args_rule(p)) // args + (a = args_rule(p)) // args && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -17485,7 +17487,7 @@ invalid_arguments_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' '*'")); - _res = RAISE_SYNTAX_ERROR ( "iterable argument unpacking follows keyword argument unpacking" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "iterable argument unpacking follows keyword argument unpacking" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17507,11 +17509,11 @@ invalid_arguments_rule(Parser *p) void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty a; - asdl_comprehension_seq* for_if_clauses_var; + asdl_comprehension_seq* b; if ( (a = expression_rule(p)) // expression && - (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses + (b = for_if_clauses_rule(p)) // for_if_clauses && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -17519,7 +17521,7 @@ invalid_arguments_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "Generator expression must be parenthesized" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , comprehension_ty ) -> target , "Generator expression must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17567,7 +17569,7 @@ invalid_arguments_rule(Parser *p) Token * _literal; expr_ty a; expr_ty args_var; - asdl_comprehension_seq* for_if_clauses_var; + asdl_comprehension_seq* b; if ( (args_var = args_rule(p)) // args && @@ -17575,11 +17577,11 @@ invalid_arguments_rule(Parser *p) && (a = expression_rule(p)) // expression && - (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses + (b = for_if_clauses_rule(p)) // for_if_clauses ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "Generator expression must be parenthesized" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , asdl_seq_GET ( b , b -> size - 1 ) -> target , "Generator expression must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17644,16 +17646,16 @@ invalid_kwarg_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression '='")); - Token * a; - expr_ty expression_var; + expr_ty a; + Token * b; if ( - (expression_var = expression_rule(p)) // expression + (a = expression_rule(p)) // expression && - (a = _PyPegen_expect_token(p, 22)) // token='=' + (b = _PyPegen_expect_token(p, 22)) // token='=' ) { D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression '='")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression cannot contain assignment, perhaps you meant \"==\"?" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expression cannot contain assignment, perhaps you meant \"==\"?" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17689,17 +17691,17 @@ invalid_expression_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression")); expr_ty a; - expr_ty expression_var; + expr_ty b; if ( _PyPegen_lookahead(0, _tmp_143_rule, p) && (a = disjunction_rule(p)) // disjunction && - (expression_var = expression_rule(p)) // expression + (b = expression_rule(p)) // expression ) { D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression")); - _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , "invalid syntax. Perhaps you forgot a comma?" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Perhaps you forgot a comma?" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17767,21 +17769,21 @@ invalid_named_expression_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); + Token * _literal; expr_ty a; - Token * b; - expr_ty bitwise_or_var; + expr_ty b; if ( (a = _PyPegen_name_token(p)) // NAME && - (b = _PyPegen_expect_token(p, 22)) // token='=' + (_literal = _PyPegen_expect_token(p, 22)) // token='=' && - (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + (b = bitwise_or_rule(p)) // bitwise_or && _PyPegen_lookahead(0, _tmp_144_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=' | ',')")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17815,7 +17817,7 @@ invalid_named_expression_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=' | ',')")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( b , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18261,7 +18263,8 @@ invalid_primary_rule(Parser *p) // invalid_comprehension: // | ('[' | '(' | '{') starred_expression for_if_clauses -// | ('[' | '{') star_named_expression ',' star_named_expressions? for_if_clauses +// | ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses +// | ('[' | '{') star_named_expression ',' for_if_clauses static void * invalid_comprehension_rule(Parser *p) { @@ -18302,17 +18305,16 @@ invalid_comprehension_rule(Parser *p) D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses")); } - { // ('[' | '{') star_named_expression ',' star_named_expressions? for_if_clauses + { // ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions? for_if_clauses")); + D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); Token * _literal; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings void *_tmp_152_var; expr_ty a; + asdl_expr_seq* b; asdl_comprehension_seq* for_if_clauses_var; if ( (_tmp_152_var = _tmp_152_rule(p)) // '[' | '{' @@ -18321,13 +18323,46 @@ invalid_comprehension_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_opt_var = star_named_expressions_rule(p), 1) // star_named_expressions? + (b = star_named_expressions_rule(p)) // star_named_expressions + && + (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses + ) + { + D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , expr_ty ) , "did you forget parentheses around the comprehension target?" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); + } + { // ('[' | '{') star_named_expression ',' for_if_clauses + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); + void *_tmp_153_var; + expr_ty a; + Token * b; + asdl_comprehension_seq* for_if_clauses_var; + if ( + (_tmp_153_var = _tmp_153_rule(p)) // '[' | '{' + && + (a = star_named_expression_rule(p)) // star_named_expression + && + (b = _PyPegen_expect_token(p, 12)) // token=',' && (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses ) { - D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions? for_if_clauses")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "did you forget parentheses around the comprehension target?" ); + D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); + _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget parentheses around the comprehension target?" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18337,7 +18372,7 @@ invalid_comprehension_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions? for_if_clauses")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); } _res = NULL; done: @@ -18415,19 +18450,19 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_153_var; + asdl_seq * _loop0_154_var; + arg_ty a; void *invalid_parameters_helper_var; - arg_ty param_no_default_var; if ( - (_loop0_153_var = _loop0_153_rule(p)) // param_no_default* + (_loop0_154_var = _loop0_154_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && - (param_no_default_var = param_no_default_rule(p)) // param_no_default + (a = param_no_default_rule(p)) // param_no_default ) { D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* invalid_parameters_helper param_no_default")); - _res = RAISE_SYNTAX_ERROR ( "non-default argument follows default argument" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "non-default argument follows default argument" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18486,13 +18521,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_154_var; + asdl_seq * _loop1_155_var; if ( - (_loop1_154_var = _loop1_154_rule(p)) // param_with_default+ + (_loop1_155_var = _loop1_155_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_154_var; + _res = _loop1_155_var; goto done; } p->mark = _mark; @@ -18523,19 +18558,19 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_155_var; + asdl_seq * _loop0_156_var; + arg_ty a; void *invalid_lambda_parameters_helper_var; - arg_ty lambda_param_no_default_var; if ( - (_loop0_155_var = _loop0_155_rule(p)) // lambda_param_no_default* + (_loop0_156_var = _loop0_156_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && - (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default + (a = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - _res = RAISE_SYNTAX_ERROR ( "non-default argument follows default argument" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "non-default argument follows default argument" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18596,13 +18631,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_156_var; + asdl_seq * _loop1_157_var; if ( - (_loop1_156_var = _loop1_156_rule(p)) // lambda_param_with_default+ + (_loop1_157_var = _loop1_157_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_156_var; + _res = _loop1_157_var; goto done; } p->mark = _mark; @@ -18632,16 +18667,16 @@ invalid_star_etc_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); - Token * _literal; - void *_tmp_157_var; + void *_tmp_158_var; + Token * a; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_157_var = _tmp_157_rule(p)) // ')' | ',' (')' | '**') + (_tmp_158_var = _tmp_158_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); - _res = RAISE_SYNTAX_ERROR ( "named arguments must follow bare *" ); + _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named arguments must follow bare *" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -18707,11 +18742,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_158_var; + void *_tmp_159_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_158_var = _tmp_158_rule(p)) // ':' | ',' (':' | '**') + (_tmp_159_var = _tmp_159_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -18813,7 +18848,7 @@ invalid_with_item_rule(Parser *p) && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_159_rule, p) + _PyPegen_lookahead(1, _tmp_160_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -19026,7 +19061,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - asdl_seq * _gather_160_var; + asdl_seq * _gather_161_var; Token * _keyword; Token * _literal; void *_opt_var; @@ -19036,13 +19071,13 @@ invalid_with_stmt_rule(Parser *p) && (_keyword = _PyPegen_expect_token(p, 519)) // token='with' && - (_gather_160_var = _gather_160_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_161_var = _gather_161_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_160_var, _literal); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _gather_161_var, _literal); goto done; } p->mark = _mark; @@ -19055,7 +19090,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - asdl_seq * _gather_162_var; + asdl_seq * _gather_163_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -19071,7 +19106,7 @@ invalid_with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_162_var = _gather_162_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_163_var = _gather_163_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), 1) // ','? && @@ -19081,7 +19116,7 @@ invalid_with_stmt_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'")); - _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_162_var, _opt_var_1, _literal_1, _literal_2); + _res = _PyPegen_dummy_name(p, _opt_var, _keyword, _literal, _gather_163_var, _opt_var_1, _literal_1, _literal_2); goto done; } p->mark = _mark; @@ -19113,7 +19148,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); - asdl_seq * _gather_164_var; + asdl_seq * _gather_165_var; Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings @@ -19124,7 +19159,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (a = _PyPegen_expect_token(p, 519)) // token='with' && - (_gather_164_var = _gather_164_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_165_var = _gather_165_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -19152,7 +19187,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); - asdl_seq * _gather_166_var; + asdl_seq * _gather_167_var; Token * _literal; Token * _literal_1; Token * _literal_2; @@ -19169,7 +19204,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_166_var = _gather_166_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_167_var = _gather_167_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), 1) // ','? && @@ -19286,13 +19321,13 @@ invalid_except_stmt_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_168_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_169_rule(p), 1) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) { D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "exception group must be parenthesized" ); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "exception group must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19320,7 +19355,7 @@ invalid_except_stmt_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_169_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_170_rule(p), 1) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -19450,7 +19485,7 @@ invalid_except_stmt_indent_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_170_rule(p), 1) // ['as' NAME] + (_opt_var = _tmp_171_rule(p), 1) // ['as' NAME] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20090,7 +20125,7 @@ invalid_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_opt_var_2 = _tmp_171_rule(p), 1) // ['->' expression] + (_opt_var_2 = _tmp_172_rule(p), 1) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20146,7 +20181,7 @@ invalid_class_def_raw_rule(Parser *p) && (name_var = _PyPegen_name_token(p)) // NAME && - (_opt_var = _tmp_172_rule(p), 1) // ['(' arguments? ')'] + (_opt_var = _tmp_173_rule(p), 1) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20194,11 +20229,11 @@ invalid_double_starred_kvpairs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - asdl_seq * _gather_173_var; + asdl_seq * _gather_174_var; Token * _literal; void *invalid_kvpair_var; if ( - (_gather_173_var = _gather_173_rule(p)) // ','.double_starred_kvpair+ + (_gather_174_var = _gather_174_rule(p)) // ','.double_starred_kvpair+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -20206,7 +20241,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - _res = _PyPegen_dummy_name(p, _gather_173_var, _literal, invalid_kvpair_var); + _res = _PyPegen_dummy_name(p, _gather_174_var, _literal, invalid_kvpair_var); goto done; } p->mark = _mark; @@ -20234,7 +20269,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -20259,7 +20294,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_175_rule, p) + _PyPegen_lookahead(1, _tmp_176_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -20306,7 +20341,7 @@ invalid_kvpair_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')")); - _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , "':' expected after dictionary key" ); + _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , a -> end_lineno , - 1 , "':' expected after dictionary key" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -20339,7 +20374,7 @@ invalid_kvpair_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use a starred expression in a dictionary value" ); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -21632,12 +21667,12 @@ _loop1_22_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_176_var; + void *_tmp_177_var; while ( - (_tmp_176_var = _tmp_176_rule(p)) // star_targets '=' + (_tmp_177_var = _tmp_177_rule(p)) // star_targets '=' ) { - _res = _tmp_176_var; + _res = _tmp_177_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22140,12 +22175,12 @@ _loop0_31_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_177_var; + void *_tmp_178_var; while ( - (_tmp_177_var = _tmp_177_rule(p)) // '.' | '...' + (_tmp_178_var = _tmp_178_rule(p)) // '.' | '...' ) { - _res = _tmp_177_var; + _res = _tmp_178_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22206,12 +22241,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_178_var; + void *_tmp_179_var; while ( - (_tmp_178_var = _tmp_178_rule(p)) // '.' | '...' + (_tmp_179_var = _tmp_179_rule(p)) // '.' | '...' ) { - _res = _tmp_178_var; + _res = _tmp_179_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25322,12 +25357,12 @@ _loop1_84_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_179_var; + void *_tmp_180_var; while ( - (_tmp_179_var = _tmp_179_rule(p)) // '@' named_expression NEWLINE + (_tmp_180_var = _tmp_180_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_179_var; + _res = _tmp_180_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25440,12 +25475,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_180_var; + void *_tmp_181_var; while ( - (_tmp_180_var = _tmp_180_rule(p)) // ',' star_expression + (_tmp_181_var = _tmp_181_rule(p)) // ',' star_expression ) { - _res = _tmp_180_var; + _res = _tmp_181_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25625,12 +25660,12 @@ _loop1_89_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_181_var; + void *_tmp_182_var; while ( - (_tmp_181_var = _tmp_181_rule(p)) // ',' expression + (_tmp_182_var = _tmp_182_rule(p)) // ',' expression ) { - _res = _tmp_181_var; + _res = _tmp_182_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26655,12 +26690,12 @@ _loop1_104_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_182_var; + void *_tmp_183_var; while ( - (_tmp_182_var = _tmp_182_rule(p)) // 'or' conjunction + (_tmp_183_var = _tmp_183_rule(p)) // 'or' conjunction ) { - _res = _tmp_182_var; + _res = _tmp_183_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26726,12 +26761,12 @@ _loop1_105_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_183_var; + void *_tmp_184_var; while ( - (_tmp_183_var = _tmp_183_rule(p)) // 'and' inversion + (_tmp_184_var = _tmp_184_rule(p)) // 'and' inversion ) { - _res = _tmp_183_var; + _res = _tmp_184_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27647,12 +27682,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_184_var; + void *_tmp_185_var; while ( - (_tmp_184_var = _tmp_184_rule(p)) // 'if' disjunction + (_tmp_185_var = _tmp_185_rule(p)) // 'if' disjunction ) { - _res = _tmp_184_var; + _res = _tmp_185_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27713,12 +27748,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_185_var; + void *_tmp_186_var; while ( - (_tmp_185_var = _tmp_185_rule(p)) // 'if' disjunction + (_tmp_186_var = _tmp_186_rule(p)) // 'if' disjunction ) { - _res = _tmp_185_var; + _res = _tmp_186_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27784,7 +27819,7 @@ _loop0_123_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_186_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_187_rule(p)) // starred_expression | direct_named_expression !'=' ) { _res = elem; @@ -27847,7 +27882,7 @@ _gather_122_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_186_rule(p)) // starred_expression | direct_named_expression !'=' + (elem = _tmp_187_rule(p)) // starred_expression | direct_named_expression !'=' && (seq = _loop0_123_rule(p)) // _loop0_123 ) @@ -28393,12 +28428,12 @@ _loop0_133_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_187_var; + void *_tmp_188_var; while ( - (_tmp_187_var = _tmp_187_rule(p)) // ',' star_target + (_tmp_188_var = _tmp_188_rule(p)) // ',' star_target ) { - _res = _tmp_187_var; + _res = _tmp_188_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28573,12 +28608,12 @@ _loop1_136_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_188_var; + void *_tmp_189_var; while ( - (_tmp_188_var = _tmp_188_rule(p)) // ',' star_target + (_tmp_189_var = _tmp_189_rule(p)) // ',' star_target ) { - _res = _tmp_188_var; + _res = _tmp_189_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29371,12 +29406,12 @@ _loop0_148_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_189_var; + void *_tmp_190_var; while ( - (_tmp_189_var = _tmp_189_rule(p)) // star_targets '=' + (_tmp_190_var = _tmp_190_rule(p)) // star_targets '=' ) { - _res = _tmp_189_var; + _res = _tmp_190_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29437,12 +29472,12 @@ _loop0_149_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_190_var; + void *_tmp_191_var; while ( - (_tmp_190_var = _tmp_190_rule(p)) // star_targets '=' + (_tmp_191_var = _tmp_191_rule(p)) // star_targets '=' ) { - _res = _tmp_190_var; + _res = _tmp_191_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29660,9 +29695,64 @@ _tmp_152_rule(Parser *p) return _res; } -// _loop0_153: param_no_default +// _tmp_153: '[' | '{' +static void * +_tmp_153_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // '[' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 9)) // token='[' + ) + { + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); + } + { // '{' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + ) + { + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_154: param_no_default static asdl_seq * -_loop0_153_rule(Parser *p) +_loop0_154_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29686,7 +29776,7 @@ _loop0_153_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -29708,7 +29798,7 @@ _loop0_153_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29721,14 +29811,14 @@ _loop0_153_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_153_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_154_type, _seq); D(p->level--); return _seq; } -// _loop1_154: param_with_default +// _loop1_155: param_with_default static asdl_seq * -_loop1_154_rule(Parser *p) +_loop1_155_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29752,7 +29842,7 @@ _loop1_154_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -29774,7 +29864,7 @@ _loop1_154_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -29792,14 +29882,14 @@ _loop1_154_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_154_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_155_type, _seq); D(p->level--); return _seq; } -// _loop0_155: lambda_param_no_default +// _loop0_156: lambda_param_no_default static asdl_seq * -_loop0_155_rule(Parser *p) +_loop0_156_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29823,7 +29913,7 @@ _loop0_155_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -29845,7 +29935,7 @@ _loop0_155_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29858,14 +29948,14 @@ _loop0_155_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_155_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_156_type, _seq); D(p->level--); return _seq; } -// _loop1_156: lambda_param_with_default +// _loop1_157: lambda_param_with_default static asdl_seq * -_loop1_156_rule(Parser *p) +_loop1_157_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29889,7 +29979,7 @@ _loop1_156_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -29911,7 +30001,7 @@ _loop1_156_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -29929,14 +30019,14 @@ _loop1_156_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_156_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_157_type, _seq); D(p->level--); return _seq; } -// _tmp_157: ')' | ',' (')' | '**') +// _tmp_158: ')' | ',' (')' | '**') static void * -_tmp_157_rule(Parser *p) +_tmp_158_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29950,18 +30040,18 @@ _tmp_157_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -29969,21 +30059,21 @@ _tmp_157_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_191_var; + void *_tmp_192_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_191_var = _tmp_191_rule(p)) // ')' | '**' + (_tmp_192_var = _tmp_192_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_191_var); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_192_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -29992,9 +30082,9 @@ _tmp_157_rule(Parser *p) return _res; } -// _tmp_158: ':' | ',' (':' | '**') +// _tmp_159: ':' | ',' (':' | '**') static void * -_tmp_158_rule(Parser *p) +_tmp_159_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30008,18 +30098,18 @@ _tmp_158_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -30027,21 +30117,21 @@ _tmp_158_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_192_var; + void *_tmp_193_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_192_var = _tmp_192_rule(p)) // ':' | '**' + (_tmp_193_var = _tmp_193_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_192_var); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_193_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -30050,9 +30140,9 @@ _tmp_158_rule(Parser *p) return _res; } -// _tmp_159: ',' | ')' | ':' +// _tmp_160: ',' | ')' | ':' static void * -_tmp_159_rule(Parser *p) +_tmp_160_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30066,18 +30156,18 @@ _tmp_159_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -30085,18 +30175,18 @@ _tmp_159_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -30104,18 +30194,18 @@ _tmp_159_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -30124,9 +30214,9 @@ _tmp_159_rule(Parser *p) return _res; } -// _loop0_161: ',' (expression ['as' star_target]) +// _loop0_162: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_161_rule(Parser *p) +_loop0_162_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30150,13 +30240,13 @@ _loop0_161_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_193_rule(p)) // expression ['as' star_target] + (elem = _tmp_194_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -30181,7 +30271,7 @@ _loop0_161_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30194,14 +30284,14 @@ _loop0_161_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_161_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_162_type, _seq); D(p->level--); return _seq; } -// _gather_160: (expression ['as' star_target]) _loop0_161 +// _gather_161: (expression ['as' star_target]) _loop0_162 static asdl_seq * -_gather_160_rule(Parser *p) +_gather_161_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30210,27 +30300,27 @@ _gather_160_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_161 + { // (expression ['as' star_target]) _loop0_162 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c> _gather_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_162")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_193_rule(p)) // expression ['as' star_target] + (elem = _tmp_194_rule(p)) // expression ['as' star_target] && - (seq = _loop0_161_rule(p)) // _loop0_161 + (seq = _loop0_162_rule(p)) // _loop0_162 ) { - D(fprintf(stderr, "%*c+ _gather_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c+ _gather_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_162")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_160[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_161")); + D(fprintf(stderr, "%*c%s _gather_161[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_162")); } _res = NULL; done: @@ -30238,9 +30328,9 @@ _gather_160_rule(Parser *p) return _res; } -// _loop0_163: ',' (expressions ['as' star_target]) +// _loop0_164: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_163_rule(Parser *p) +_loop0_164_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30264,13 +30354,13 @@ _loop0_163_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_194_rule(p)) // expressions ['as' star_target] + (elem = _tmp_195_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -30295,7 +30385,7 @@ _loop0_163_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30308,14 +30398,14 @@ _loop0_163_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_163_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_164_type, _seq); D(p->level--); return _seq; } -// _gather_162: (expressions ['as' star_target]) _loop0_163 +// _gather_163: (expressions ['as' star_target]) _loop0_164 static asdl_seq * -_gather_162_rule(Parser *p) +_gather_163_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30324,27 +30414,27 @@ _gather_162_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_163 + { // (expressions ['as' star_target]) _loop0_164 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c> _gather_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_164")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_194_rule(p)) // expressions ['as' star_target] + (elem = _tmp_195_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_163_rule(p)) // _loop0_163 + (seq = _loop0_164_rule(p)) // _loop0_164 ) { - D(fprintf(stderr, "%*c+ _gather_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c+ _gather_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_164")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_162[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_163")); + D(fprintf(stderr, "%*c%s _gather_163[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_164")); } _res = NULL; done: @@ -30352,9 +30442,9 @@ _gather_162_rule(Parser *p) return _res; } -// _loop0_165: ',' (expression ['as' star_target]) +// _loop0_166: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_165_rule(Parser *p) +_loop0_166_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30378,13 +30468,13 @@ _loop0_165_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_195_rule(p)) // expression ['as' star_target] + (elem = _tmp_196_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -30409,7 +30499,7 @@ _loop0_165_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30422,14 +30512,14 @@ _loop0_165_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_165_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_166_type, _seq); D(p->level--); return _seq; } -// _gather_164: (expression ['as' star_target]) _loop0_165 +// _gather_165: (expression ['as' star_target]) _loop0_166 static asdl_seq * -_gather_164_rule(Parser *p) +_gather_165_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30438,27 +30528,27 @@ _gather_164_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_165 + { // (expression ['as' star_target]) _loop0_166 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); + D(fprintf(stderr, "%*c> _gather_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_166")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_195_rule(p)) // expression ['as' star_target] + (elem = _tmp_196_rule(p)) // expression ['as' star_target] && - (seq = _loop0_165_rule(p)) // _loop0_165 + (seq = _loop0_166_rule(p)) // _loop0_166 ) { - D(fprintf(stderr, "%*c+ _gather_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); + D(fprintf(stderr, "%*c+ _gather_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_166")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_164[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_165")); + D(fprintf(stderr, "%*c%s _gather_165[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_166")); } _res = NULL; done: @@ -30466,9 +30556,9 @@ _gather_164_rule(Parser *p) return _res; } -// _loop0_167: ',' (expressions ['as' star_target]) +// _loop0_168: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_167_rule(Parser *p) +_loop0_168_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30492,13 +30582,13 @@ _loop0_167_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_196_rule(p)) // expressions ['as' star_target] + (elem = _tmp_197_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -30523,7 +30613,7 @@ _loop0_167_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30536,14 +30626,14 @@ _loop0_167_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_167_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_168_type, _seq); D(p->level--); return _seq; } -// _gather_166: (expressions ['as' star_target]) _loop0_167 +// _gather_167: (expressions ['as' star_target]) _loop0_168 static asdl_seq * -_gather_166_rule(Parser *p) +_gather_167_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30552,27 +30642,27 @@ _gather_166_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_167 + { // (expressions ['as' star_target]) _loop0_168 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); + D(fprintf(stderr, "%*c> _gather_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_168")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_196_rule(p)) // expressions ['as' star_target] + (elem = _tmp_197_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_167_rule(p)) // _loop0_167 + (seq = _loop0_168_rule(p)) // _loop0_168 ) { - D(fprintf(stderr, "%*c+ _gather_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); + D(fprintf(stderr, "%*c+ _gather_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_168")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_166[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_167")); + D(fprintf(stderr, "%*c%s _gather_167[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_168")); } _res = NULL; done: @@ -30580,9 +30670,9 @@ _gather_166_rule(Parser *p) return _res; } -// _tmp_168: 'as' NAME +// _tmp_169: 'as' NAME static void * -_tmp_168_rule(Parser *p) +_tmp_169_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30596,7 +30686,7 @@ _tmp_168_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -30605,12 +30695,12 @@ _tmp_168_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -30619,9 +30709,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _tmp_169: 'as' NAME +// _tmp_170: 'as' NAME static void * -_tmp_169_rule(Parser *p) +_tmp_170_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30635,7 +30725,7 @@ _tmp_169_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -30644,12 +30734,12 @@ _tmp_169_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -30658,9 +30748,9 @@ _tmp_169_rule(Parser *p) return _res; } -// _tmp_170: 'as' NAME +// _tmp_171: 'as' NAME static void * -_tmp_170_rule(Parser *p) +_tmp_171_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30674,7 +30764,7 @@ _tmp_170_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -30683,12 +30773,12 @@ _tmp_170_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -30697,9 +30787,9 @@ _tmp_170_rule(Parser *p) return _res; } -// _tmp_171: '->' expression +// _tmp_172: '->' expression static void * -_tmp_171_rule(Parser *p) +_tmp_172_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30713,7 +30803,7 @@ _tmp_171_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty expression_var; if ( @@ -30722,12 +30812,12 @@ _tmp_171_rule(Parser *p) (expression_var = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = _PyPegen_dummy_name(p, _literal, expression_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -30736,9 +30826,9 @@ _tmp_171_rule(Parser *p) return _res; } -// _tmp_172: '(' arguments? ')' +// _tmp_173: '(' arguments? ')' static void * -_tmp_172_rule(Parser *p) +_tmp_173_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30752,7 +30842,7 @@ _tmp_172_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *_opt_var; @@ -30765,12 +30855,12 @@ _tmp_172_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -30779,9 +30869,9 @@ _tmp_172_rule(Parser *p) return _res; } -// _loop0_174: ',' double_starred_kvpair +// _loop0_175: ',' double_starred_kvpair static asdl_seq * -_loop0_174_rule(Parser *p) +_loop0_175_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30805,7 +30895,7 @@ _loop0_174_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -30836,7 +30926,7 @@ _loop0_174_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30849,14 +30939,14 @@ _loop0_174_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_174_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_175_type, _seq); D(p->level--); return _seq; } -// _gather_173: double_starred_kvpair _loop0_174 +// _gather_174: double_starred_kvpair _loop0_175 static asdl_seq * -_gather_173_rule(Parser *p) +_gather_174_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30865,27 +30955,27 @@ _gather_173_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_174 + { // double_starred_kvpair _loop0_175 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_174")); + D(fprintf(stderr, "%*c> _gather_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_175")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_174_rule(p)) // _loop0_174 + (seq = _loop0_175_rule(p)) // _loop0_175 ) { - D(fprintf(stderr, "%*c+ _gather_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_174")); + D(fprintf(stderr, "%*c+ _gather_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_175")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_173[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_174")); + D(fprintf(stderr, "%*c%s _gather_174[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_175")); } _res = NULL; done: @@ -30893,9 +30983,9 @@ _gather_173_rule(Parser *p) return _res; } -// _tmp_175: '}' | ',' +// _tmp_176: '}' | ',' static void * -_tmp_175_rule(Parser *p) +_tmp_176_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30909,18 +30999,18 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -30928,18 +31018,18 @@ _tmp_175_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -30948,9 +31038,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _tmp_176: star_targets '=' +// _tmp_177: star_targets '=' static void * -_tmp_176_rule(Parser *p) +_tmp_177_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -30964,7 +31054,7 @@ _tmp_176_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -30973,7 +31063,7 @@ _tmp_176_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30983,7 +31073,7 @@ _tmp_176_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -30992,9 +31082,9 @@ _tmp_176_rule(Parser *p) return _res; } -// _tmp_177: '.' | '...' +// _tmp_178: '.' | '...' static void * -_tmp_177_rule(Parser *p) +_tmp_178_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31008,18 +31098,18 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -31027,18 +31117,18 @@ _tmp_177_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -31047,9 +31137,9 @@ _tmp_177_rule(Parser *p) return _res; } -// _tmp_178: '.' | '...' +// _tmp_179: '.' | '...' static void * -_tmp_178_rule(Parser *p) +_tmp_179_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31063,18 +31153,18 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -31082,18 +31172,18 @@ _tmp_178_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -31102,9 +31192,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: '@' named_expression NEWLINE +// _tmp_180: '@' named_expression NEWLINE static void * -_tmp_179_rule(Parser *p) +_tmp_180_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31118,7 +31208,7 @@ _tmp_179_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -31130,7 +31220,7 @@ _tmp_179_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31140,7 +31230,7 @@ _tmp_179_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -31149,9 +31239,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: ',' star_expression +// _tmp_181: ',' star_expression static void * -_tmp_180_rule(Parser *p) +_tmp_181_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31165,7 +31255,7 @@ _tmp_180_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -31174,7 +31264,7 @@ _tmp_180_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31184,7 +31274,7 @@ _tmp_180_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -31193,9 +31283,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _tmp_181: ',' expression +// _tmp_182: ',' expression static void * -_tmp_181_rule(Parser *p) +_tmp_182_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31209,7 +31299,7 @@ _tmp_181_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -31218,7 +31308,7 @@ _tmp_181_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31228,7 +31318,7 @@ _tmp_181_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -31237,9 +31327,9 @@ _tmp_181_rule(Parser *p) return _res; } -// _tmp_182: 'or' conjunction +// _tmp_183: 'or' conjunction static void * -_tmp_182_rule(Parser *p) +_tmp_183_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31253,7 +31343,7 @@ _tmp_182_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -31262,7 +31352,7 @@ _tmp_182_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31272,7 +31362,7 @@ _tmp_182_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -31281,9 +31371,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: 'and' inversion +// _tmp_184: 'and' inversion static void * -_tmp_183_rule(Parser *p) +_tmp_184_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31297,7 +31387,7 @@ _tmp_183_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -31306,7 +31396,7 @@ _tmp_183_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31316,7 +31406,7 @@ _tmp_183_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -31325,9 +31415,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _tmp_184: 'if' disjunction +// _tmp_185: 'if' disjunction static void * -_tmp_184_rule(Parser *p) +_tmp_185_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31341,7 +31431,7 @@ _tmp_184_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -31350,7 +31440,7 @@ _tmp_184_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31360,7 +31450,7 @@ _tmp_184_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -31369,9 +31459,9 @@ _tmp_184_rule(Parser *p) return _res; } -// _tmp_185: 'if' disjunction +// _tmp_186: 'if' disjunction static void * -_tmp_185_rule(Parser *p) +_tmp_186_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31385,7 +31475,7 @@ _tmp_185_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -31394,7 +31484,7 @@ _tmp_185_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31404,7 +31494,7 @@ _tmp_185_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -31413,9 +31503,9 @@ _tmp_185_rule(Parser *p) return _res; } -// _tmp_186: starred_expression | direct_named_expression !'=' +// _tmp_187: starred_expression | direct_named_expression !'=' static void * -_tmp_186_rule(Parser *p) +_tmp_187_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31429,18 +31519,18 @@ _tmp_186_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // direct_named_expression !'=' @@ -31448,7 +31538,7 @@ _tmp_186_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); expr_ty direct_named_expression_var; if ( (direct_named_expression_var = direct_named_expression_rule(p)) // direct_named_expression @@ -31456,12 +31546,12 @@ _tmp_186_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_186[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "direct_named_expression !'='")); _res = direct_named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "direct_named_expression !'='")); } _res = NULL; @@ -31470,9 +31560,9 @@ _tmp_186_rule(Parser *p) return _res; } -// _tmp_187: ',' star_target +// _tmp_188: ',' star_target static void * -_tmp_187_rule(Parser *p) +_tmp_188_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31486,7 +31576,7 @@ _tmp_187_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -31495,7 +31585,7 @@ _tmp_187_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31505,7 +31595,7 @@ _tmp_187_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -31514,9 +31604,9 @@ _tmp_187_rule(Parser *p) return _res; } -// _tmp_188: ',' star_target +// _tmp_189: ',' star_target static void * -_tmp_188_rule(Parser *p) +_tmp_189_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31530,7 +31620,7 @@ _tmp_188_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -31539,7 +31629,7 @@ _tmp_188_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -31549,7 +31639,7 @@ _tmp_188_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_188[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_189[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -31558,9 +31648,9 @@ _tmp_188_rule(Parser *p) return _res; } -// _tmp_189: star_targets '=' +// _tmp_190: star_targets '=' static void * -_tmp_189_rule(Parser *p) +_tmp_190_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31574,7 +31664,7 @@ _tmp_189_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -31583,12 +31673,12 @@ _tmp_189_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_190[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_189[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_190[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -31597,9 +31687,9 @@ _tmp_189_rule(Parser *p) return _res; } -// _tmp_190: star_targets '=' +// _tmp_191: star_targets '=' static void * -_tmp_190_rule(Parser *p) +_tmp_191_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31613,7 +31703,7 @@ _tmp_190_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -31622,12 +31712,12 @@ _tmp_190_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_190[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_190[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -31636,9 +31726,9 @@ _tmp_190_rule(Parser *p) return _res; } -// _tmp_191: ')' | '**' +// _tmp_192: ')' | '**' static void * -_tmp_191_rule(Parser *p) +_tmp_192_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31652,18 +31742,18 @@ _tmp_191_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -31671,18 +31761,18 @@ _tmp_191_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -31691,9 +31781,9 @@ _tmp_191_rule(Parser *p) return _res; } -// _tmp_192: ':' | '**' +// _tmp_193: ':' | '**' static void * -_tmp_192_rule(Parser *p) +_tmp_193_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31707,18 +31797,18 @@ _tmp_192_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -31726,18 +31816,18 @@ _tmp_192_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -31746,9 +31836,9 @@ _tmp_192_rule(Parser *p) return _res; } -// _tmp_193: expression ['as' star_target] +// _tmp_194: expression ['as' star_target] static void * -_tmp_193_rule(Parser *p) +_tmp_194_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31762,22 +31852,22 @@ _tmp_193_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_197_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_198_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_194[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_194[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -31786,9 +31876,9 @@ _tmp_193_rule(Parser *p) return _res; } -// _tmp_194: expressions ['as' star_target] +// _tmp_195: expressions ['as' star_target] static void * -_tmp_194_rule(Parser *p) +_tmp_195_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31802,22 +31892,22 @@ _tmp_194_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_198_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_199_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_194[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_195[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_194[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_195[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -31826,9 +31916,9 @@ _tmp_194_rule(Parser *p) return _res; } -// _tmp_195: expression ['as' star_target] +// _tmp_196: expression ['as' star_target] static void * -_tmp_195_rule(Parser *p) +_tmp_196_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31842,22 +31932,22 @@ _tmp_195_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_199_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_200_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_195[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_196[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_195[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_196[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -31866,9 +31956,9 @@ _tmp_195_rule(Parser *p) return _res; } -// _tmp_196: expressions ['as' star_target] +// _tmp_197: expressions ['as' star_target] static void * -_tmp_196_rule(Parser *p) +_tmp_197_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31882,22 +31972,22 @@ _tmp_196_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_200_rule(p), 1) // ['as' star_target] + (_opt_var = _tmp_201_rule(p), 1) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_196[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_196[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -31906,9 +31996,9 @@ _tmp_196_rule(Parser *p) return _res; } -// _tmp_197: 'as' star_target +// _tmp_198: 'as' star_target static void * -_tmp_197_rule(Parser *p) +_tmp_198_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31922,7 +32012,7 @@ _tmp_197_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -31931,12 +32021,12 @@ _tmp_197_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -31945,9 +32035,9 @@ _tmp_197_rule(Parser *p) return _res; } -// _tmp_198: 'as' star_target +// _tmp_199: 'as' star_target static void * -_tmp_198_rule(Parser *p) +_tmp_199_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -31961,7 +32051,7 @@ _tmp_198_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -31970,12 +32060,12 @@ _tmp_198_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -31984,9 +32074,9 @@ _tmp_198_rule(Parser *p) return _res; } -// _tmp_199: 'as' star_target +// _tmp_200: 'as' star_target static void * -_tmp_199_rule(Parser *p) +_tmp_200_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -32000,7 +32090,7 @@ _tmp_199_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -32009,12 +32099,12 @@ _tmp_199_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -32023,9 +32113,9 @@ _tmp_199_rule(Parser *p) return _res; } -// _tmp_200: 'as' star_target +// _tmp_201: 'as' star_target static void * -_tmp_200_rule(Parser *p) +_tmp_201_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -32039,7 +32129,7 @@ _tmp_200_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -32048,12 +32138,12 @@ _tmp_200_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; diff --git a/Parser/pegen.c b/Parser/pegen.c index eb70ea7d24fec..ed989f5985c71 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -274,7 +274,7 @@ raise_unclosed_parentheses_error(Parser *p) { int error_lineno = p->tok->parenlinenostack[p->tok->level-1]; int error_col = p->tok->parencolstack[p->tok->level-1]; RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, - error_lineno, error_col, + error_lineno, error_col, error_lineno, -1, "'%c' was never closed", p->tok->parenstack[p->tok->level-1]); } @@ -366,7 +366,7 @@ tokenizer_error(Parser *p) msg = "unknown parsing error"; } - RAISE_ERROR_KNOWN_LOCATION(p, errtype, p->tok->lineno, col_offset, msg); + RAISE_ERROR_KNOWN_LOCATION(p, errtype, p->tok->lineno, col_offset, p->tok->lineno, -1, msg); return -1; } @@ -375,6 +375,7 @@ _PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...) { Token *t = p->known_err_token != NULL ? p->known_err_token : p->tokens[p->fill - 1]; Py_ssize_t col_offset; + Py_ssize_t end_col_offset = -1; if (t->col_offset == -1) { col_offset = Py_SAFE_DOWNCAST(p->tok->cur - p->tok->buf, intptr_t, int); @@ -382,10 +383,13 @@ _PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...) col_offset = t->col_offset + 1; } + if (t->end_col_offset != -1) { + end_col_offset = t->end_col_offset + 1; + } + va_list va; va_start(va, errmsg); - _PyPegen_raise_error_known_location(p, errtype, t->lineno, - col_offset, errmsg, va); + _PyPegen_raise_error_known_location(p, errtype, t->lineno, col_offset, t->end_lineno, end_col_offset, errmsg, va); va_end(va); return NULL; @@ -416,6 +420,7 @@ get_error_line(Parser *p, Py_ssize_t lineno) void * _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, Py_ssize_t lineno, Py_ssize_t col_offset, + Py_ssize_t end_lineno, Py_ssize_t end_col_offset, const char *errmsg, va_list va) { PyObject *value = NULL; @@ -424,6 +429,13 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, PyObject *tmp = NULL; p->error_indicator = 1; + if (end_lineno == CURRENT_POS) { + end_lineno = p->tok->lineno; + } + if (end_col_offset == CURRENT_POS) { + end_col_offset = p->tok->cur - p->tok->line_start; + } + if (p->start_rule == Py_fstring_input) { const char *fstring_msg = "f-string: "; Py_ssize_t len = strlen(fstring_msg) + strlen(errmsg); @@ -475,14 +487,19 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, if (p->start_rule == Py_fstring_input) { col_offset -= p->starting_col_offset; + end_col_offset -= p->starting_col_offset; } + Py_ssize_t col_number = col_offset; + Py_ssize_t end_col_number = end_col_offset; if (p->tok->encoding != NULL) { col_number = byte_offset_to_character_offset(error_line, col_offset); + end_col_number = end_col_number > 0 ? + byte_offset_to_character_offset(error_line, end_col_offset) : + end_col_number; } - - tmp = Py_BuildValue("(OiiN)", p->tok->filename, lineno, col_number, error_line); + tmp = Py_BuildValue("(OiiNii)", p->tok->filename, lineno, col_number, error_line, end_lineno, end_col_number); if (!tmp) { goto error; } @@ -1494,6 +1511,13 @@ _PyPegen_seq_flatten(Parser *p, asdl_seq *seqs) return flattened_seq; } +void * +_PyPegen_seq_last_item(asdl_seq *seq) +{ + Py_ssize_t len = asdl_seq_LEN(seq); + return asdl_seq_GET_UNTYPED(seq, len - 1); +} + /* Creates a new name of the form . */ expr_ty _PyPegen_join_names_with_dot(Parser *p, expr_ty first_name, expr_ty second_name) @@ -2398,7 +2422,7 @@ _PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args) return NULL; } - return RAISE_SYNTAX_ERROR_KNOWN_LOCATION( + return RAISE_SYNTAX_ERROR_STARTING_FROM( (expr_ty) asdl_seq_GET(args->v.Call.args, len - 1), "Generator expression must be parenthesized" ); diff --git a/Parser/pegen.h b/Parser/pegen.h index 9b218d4c59c4f..a8142a01236a7 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -136,30 +136,41 @@ const char *_PyPegen_get_expr_name(expr_ty); void *_PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...); void *_PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, Py_ssize_t lineno, Py_ssize_t col_offset, + Py_ssize_t end_lineno, Py_ssize_t end_col_offset, const char *errmsg, va_list va); void *_PyPegen_dummy_name(Parser *p, ...); +void * _PyPegen_seq_last_item(asdl_seq *seq); +#define PyPegen_last_item(seq, type) ((type)_PyPegen_seq_last_item((asdl_seq*)seq)) + +#define CURRENT_POS (-5) + Py_LOCAL_INLINE(void *) RAISE_ERROR_KNOWN_LOCATION(Parser *p, PyObject *errtype, Py_ssize_t lineno, Py_ssize_t col_offset, + Py_ssize_t end_lineno, Py_ssize_t end_col_offset, const char *errmsg, ...) { va_list va; va_start(va, errmsg); - _PyPegen_raise_error_known_location(p, errtype, lineno, col_offset + 1, - errmsg, va); + Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1); + Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1); + _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va); va_end(va); return NULL; } - #define UNUSED(expr) do { (void)(expr); } while (0) #define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena #define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena #define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, msg, ##__VA_ARGS__) #define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, msg, ##__VA_ARGS__) +#define RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, msg, ...) \ + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__) #define RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, msg, ...) \ - RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, msg, ##__VA_ARGS__) + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__) +#define RAISE_SYNTAX_ERROR_STARTING_FROM(a, msg, ...) \ + RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__) Py_LOCAL_INLINE(void *) CHECK_CALL(Parser *p, void *result) diff --git a/Python/compile.c b/Python/compile.c index 49a713b2b0c36..1b7a2e83b16ba 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -197,6 +197,8 @@ struct compiler_unit { int u_firstlineno; /* the first lineno of the block */ int u_lineno; /* the lineno for the current stmt */ int u_col_offset; /* the offset of the current stmt */ + int u_end_lineno; /* the end line of the current stmt */ + int u_end_col_offset; /* the end offset of the current stmt */ }; /* This struct captures the global state of a compilation. @@ -641,6 +643,8 @@ compiler_enter_scope(struct compiler *c, identifier name, u->u_firstlineno = lineno; u->u_lineno = 0; u->u_col_offset = 0; + u->u_end_lineno = 0; + u->u_end_col_offset = 0; u->u_consts = PyDict_New(); if (!u->u_consts) { compiler_unit_free(u); @@ -911,7 +915,9 @@ compiler_next_instr(basicblock *b) #define SET_LOC(c, x) \ (c)->u->u_lineno = (x)->lineno; \ - (c)->u->u_col_offset = (x)->col_offset; + (c)->u->u_col_offset = (x)->col_offset; \ + (c)->u->u_end_lineno = (x)->end_lineno; \ + (c)->u->u_end_col_offset = (x)->end_col_offset; /* Return the stack effect of opcode with argument oparg. @@ -5474,8 +5480,9 @@ compiler_error(struct compiler *c, const char *format, ...) Py_INCREF(Py_None); loc = Py_None; } - PyObject *args = Py_BuildValue("O(OiiO)", msg, c->c_filename, - c->u->u_lineno, c->u->u_col_offset + 1, loc); + PyObject *args = Py_BuildValue("O(OiiOii)", msg, c->c_filename, + c->u->u_lineno, c->u->u_col_offset + 1, loc, + c->u->u_end_lineno, c->u->u_end_col_offset + 1); Py_DECREF(msg); if (args == NULL) { goto exit; diff --git a/Python/errors.c b/Python/errors.c index d73ba93b02ece..f743d3089e20b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1545,14 +1545,17 @@ PyErr_SyntaxLocation(const char *filename, int lineno) If the exception is not a SyntaxError, also sets additional attributes to make printing of exceptions believe it is a syntax error. */ -void -PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) +static void +PyErr_SyntaxLocationObjectEx(PyObject *filename, int lineno, int col_offset, + int end_lineno, int end_col_offset) { PyObject *exc, *v, *tb, *tmp; _Py_IDENTIFIER(filename); _Py_IDENTIFIER(lineno); + _Py_IDENTIFIER(end_lineno); _Py_IDENTIFIER(msg); _Py_IDENTIFIER(offset); + _Py_IDENTIFIER(end_offset); _Py_IDENTIFIER(print_file_and_line); _Py_IDENTIFIER(text); PyThreadState *tstate = _PyThreadState_GET(); @@ -1582,6 +1585,32 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) _PyErr_Clear(tstate); } Py_XDECREF(tmp); + + tmp = NULL; + if (end_lineno >= 0) { + tmp = PyLong_FromLong(end_lineno); + if (tmp == NULL) { + _PyErr_Clear(tstate); + } + } + if (_PyObject_SetAttrId(v, &PyId_end_lineno, tmp ? tmp : Py_None)) { + _PyErr_Clear(tstate); + } + Py_XDECREF(tmp); + + tmp = NULL; + if (end_col_offset >= 0) { + tmp = PyLong_FromLong(end_col_offset); + if (tmp == NULL) { + _PyErr_Clear(tstate); + } + } + if (_PyObject_SetAttrId(v, &PyId_end_offset, tmp ? tmp : Py_None)) { + _PyErr_Clear(tstate); + } + Py_XDECREF(tmp); + + tmp = NULL; if (filename != NULL) { if (_PyObject_SetAttrId(v, &PyId_filename, filename)) { _PyErr_Clear(tstate); @@ -1633,6 +1662,17 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) _PyErr_Restore(tstate, exc, v, tb); } +void +PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) { + PyErr_SyntaxLocationObjectEx(filename, lineno, col_offset, lineno, -1); +} + +void +PyErr_RangedSyntaxLocationObject(PyObject *filename, int lineno, int col_offset, + int end_lineno, int end_col_offset) { + PyErr_SyntaxLocationObjectEx(filename, lineno, col_offset, end_lineno, end_col_offset); +} + void PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) { diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 8bd31348b2676..f00e3eb0de803 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -510,7 +510,9 @@ PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags) static int parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, - Py_ssize_t *lineno, Py_ssize_t *offset, PyObject **text) + Py_ssize_t *lineno, Py_ssize_t *offset, + Py_ssize_t* end_lineno, Py_ssize_t* end_offset, + PyObject **text) { Py_ssize_t hold; PyObject *v; @@ -518,6 +520,8 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, _Py_IDENTIFIER(filename); _Py_IDENTIFIER(lineno); _Py_IDENTIFIER(offset); + _Py_IDENTIFIER(end_lineno); + _Py_IDENTIFIER(end_offset); _Py_IDENTIFIER(text); *message = NULL; @@ -565,6 +569,44 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, *offset = hold; } + if (Py_TYPE(err) == (PyTypeObject*)PyExc_SyntaxError) { + v = _PyObject_GetAttrId(err, &PyId_end_lineno); + if (!v) { + PyErr_Clear(); + *end_lineno = *lineno; + } + else if (v == Py_None) { + *end_lineno = *lineno; + Py_DECREF(v); + } else { + hold = PyLong_AsSsize_t(v); + Py_DECREF(v); + if (hold < 0 && PyErr_Occurred()) + goto finally; + *end_lineno = hold; + } + + v = _PyObject_GetAttrId(err, &PyId_end_offset); + if (!v) { + PyErr_Clear(); + *end_offset = -1; + } + else if (v == Py_None) { + *end_offset = -1; + Py_DECREF(v); + } else { + hold = PyLong_AsSsize_t(v); + Py_DECREF(v); + if (hold < 0 && PyErr_Occurred()) + goto finally; + *end_offset = hold; + } + } else { + // SyntaxError subclasses + *end_lineno = *lineno; + *end_offset = -1; + } + v = _PyObject_GetAttrId(err, &PyId_text); if (!v) goto finally; @@ -584,8 +626,9 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, } static void -print_error_text(PyObject *f, Py_ssize_t offset, PyObject *text_obj) +print_error_text(PyObject *f, Py_ssize_t offset, Py_ssize_t end_offset, PyObject *text_obj) { + size_t caret_repetitions = (end_offset > 0 && end_offset > offset) ? end_offset - offset : 1; /* Convert text to a char pointer; return if error */ const char *text = PyUnicode_AsUTF8(text_obj); if (text == NULL) @@ -645,7 +688,10 @@ print_error_text(PyObject *f, Py_ssize_t offset, PyObject *text_obj) while (--offset >= 0) { PyFile_WriteString(" ", f); } - PyFile_WriteString("^\n", f); + for (size_t caret_iter=0; caret_iter < caret_repetitions ; caret_iter++) { + PyFile_WriteString("^", f); + } + PyFile_WriteString("\n", f); } @@ -865,11 +911,12 @@ print_exception(PyObject *f, PyObject *value) (err = _PyObject_LookupAttrId(value, &PyId_print_file_and_line, &tmp)) > 0) { PyObject *message, *filename, *text; - Py_ssize_t lineno, offset; + Py_ssize_t lineno, offset, end_lineno, end_offset; err = 0; Py_DECREF(tmp); if (!parse_syntax_error(value, &message, &filename, - &lineno, &offset, &text)) + &lineno, &offset, + &end_lineno, &end_offset, &text)) PyErr_Clear(); else { PyObject *line; @@ -886,7 +933,21 @@ print_exception(PyObject *f, PyObject *value) } if (text != NULL) { - print_error_text(f, offset, text); + Py_ssize_t line_size; + const char* error_line = PyUnicode_AsUTF8AndSize(text, &line_size); + // If the location of the error spawn multiple lines, we want + // to just print the first one and highlight everything until + // the end of that one since we don't support multi-line error + // messages. + if (end_lineno > lineno) { + end_offset = (error_line != NULL) ? line_size : -1; + } + // Limit the ammount of '^' that we can display to + // the size of the text in the source line. + if (error_line != NULL && end_offset > line_size + 1) { + end_offset = line_size + 1; + } + print_error_text(f, offset, end_offset, text); Py_DECREF(text); } diff --git a/Python/symtable.c b/Python/symtable.c index d148a563a3eb5..c6f86945782a9 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -47,7 +47,8 @@ static PySTEntryObject * ste_new(struct symtable *st, identifier name, _Py_block_ty block, - void *key, int lineno, int col_offset) + void *key, int lineno, int col_offset, + int end_lineno, int end_col_offset) { PySTEntryObject *ste = NULL; PyObject *k = NULL; @@ -81,6 +82,8 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_opt_col_offset = 0; ste->ste_lineno = lineno; ste->ste_col_offset = col_offset; + ste->ste_end_lineno = end_lineno; + ste->ste_end_col_offset = end_col_offset; if (st->st_cur != NULL && (st->st_cur->ste_nested || @@ -190,8 +193,9 @@ PyTypeObject PySTEntry_Type = { static int symtable_analyze(struct symtable *st); static int symtable_enter_block(struct symtable *st, identifier name, - _Py_block_ty block, void *ast, int lineno, - int col_offset); + _Py_block_ty block, void *ast, + int lineno, int col_offset, + int end_lineno, int end_col_offset); static int symtable_exit_block(struct symtable *st); static int symtable_visit_stmt(struct symtable *st, stmt_ty s); static int symtable_visit_expr(struct symtable *st, expr_ty s); @@ -296,7 +300,7 @@ _PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future) /* Make the initial symbol information gathering pass */ if (!GET_IDENTIFIER(top) || - !symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0, 0)) { + !symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0, 0, 0, 0)) { _PySymtable_Free(st); return NULL; } @@ -409,9 +413,11 @@ error_at_directive(PySTEntryObject *ste, PyObject *name) assert(PyTuple_CheckExact(data)); assert(PyUnicode_CheckExact(PyTuple_GET_ITEM(data, 0))); if (PyUnicode_Compare(PyTuple_GET_ITEM(data, 0), name) == 0) { - PyErr_SyntaxLocationObject(ste->ste_table->st_filename, - PyLong_AsLong(PyTuple_GET_ITEM(data, 1)), - PyLong_AsLong(PyTuple_GET_ITEM(data, 2)) + 1); + PyErr_RangedSyntaxLocationObject(ste->ste_table->st_filename, + PyLong_AsLong(PyTuple_GET_ITEM(data, 1)), + PyLong_AsLong(PyTuple_GET_ITEM(data, 2)) + 1, + PyLong_AsLong(PyTuple_GET_ITEM(data, 3)), + PyLong_AsLong(PyTuple_GET_ITEM(data, 4)) + 1); return 0; } @@ -958,11 +964,12 @@ symtable_exit_block(struct symtable *st) static int symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, - void *ast, int lineno, int col_offset) + void *ast, int lineno, int col_offset, + int end_lineno, int end_col_offset) { PySTEntryObject *prev = NULL, *ste; - ste = ste_new(st, name, block, ast, lineno, col_offset); + ste = ste_new(st, name, block, ast, lineno, col_offset, end_lineno, end_col_offset); if (ste == NULL) return 0; if (PyList_Append(st->st_stack, (PyObject *)ste) < 0) { @@ -1018,9 +1025,11 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s if ((flag & DEF_PARAM) && (val & DEF_PARAM)) { /* Is it better to use 'mangled' or 'name' here? */ PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name); - PyErr_SyntaxLocationObject(st->st_filename, - ste->ste_lineno, - ste->ste_col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + ste->ste_lineno, + ste->ste_col_offset + 1, + ste->ste_end_lineno, + ste->ste_end_col_offset + 1); goto error; } val |= flag; @@ -1040,9 +1049,11 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s if (val & (DEF_GLOBAL | DEF_NONLOCAL)) { PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_INNER_LOOP_CONFLICT, name); - PyErr_SyntaxLocationObject(st->st_filename, - ste->ste_lineno, - ste->ste_col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + ste->ste_lineno, + ste->ste_col_offset + 1, + ste->ste_end_lineno, + ste->ste_end_col_offset + 1); goto error; } val |= DEF_COMP_ITER; @@ -1141,7 +1152,8 @@ symtable_add_def(struct symtable *st, PyObject *name, int flag) { } static int -symtable_record_directive(struct symtable *st, identifier name, int lineno, int col_offset) +symtable_record_directive(struct symtable *st, identifier name, int lineno, + int col_offset, int end_lineno, int end_col_offset) { PyObject *data, *mangled; int res; @@ -1153,7 +1165,7 @@ symtable_record_directive(struct symtable *st, identifier name, int lineno, int mangled = _Py_Mangle(st->st_private, name); if (!mangled) return 0; - data = Py_BuildValue("(Nii)", mangled, lineno, col_offset); + data = Py_BuildValue("(Niiii)", mangled, lineno, col_offset, end_lineno, end_col_offset); if (!data) return 0; res = PyList_Append(st->st_cur->ste_directives, data); @@ -1184,8 +1196,9 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (s->v.FunctionDef.decorator_list) VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list); if (!symtable_enter_block(st, s->v.FunctionDef.name, - FunctionBlock, (void *)s, s->lineno, - s->col_offset)) + FunctionBlock, (void *)s, + s->lineno, s->col_offset, + s->end_lineno, s->end_col_offset)) VISIT_QUIT(st, 0); VISIT(st, arguments, s->v.FunctionDef.args); VISIT_SEQ(st, stmt, s->v.FunctionDef.body); @@ -1201,7 +1214,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (s->v.ClassDef.decorator_list) VISIT_SEQ(st, expr, s->v.ClassDef.decorator_list); if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock, - (void *)s, s->lineno, s->col_offset)) + (void *)s, s->lineno, s->col_offset, + s->end_lineno, s->end_col_offset)) VISIT_QUIT(st, 0); tmp = st->st_private; st->st_private = s->v.ClassDef.name; @@ -1237,9 +1251,11 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) PyErr_Format(PyExc_SyntaxError, cur & DEF_GLOBAL ? GLOBAL_ANNOT : NONLOCAL_ANNOT, e_name->v.Name.id); - PyErr_SyntaxLocationObject(st->st_filename, - s->lineno, - s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset + 1, + s->end_lineno, + s->end_col_offset + 1); VISIT_QUIT(st, 0); } if (s->v.AnnAssign.simple && @@ -1336,14 +1352,17 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) } PyErr_Format(PyExc_SyntaxError, msg, name); - PyErr_SyntaxLocationObject(st->st_filename, - s->lineno, - s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset + 1, + s->end_lineno, + s->end_col_offset + 1); VISIT_QUIT(st, 0); } if (!symtable_add_def(st, name, DEF_GLOBAL)) VISIT_QUIT(st, 0); - if (!symtable_record_directive(st, name, s->lineno, s->col_offset)) + if (!symtable_record_directive(st, name, s->lineno, s->col_offset, + s->end_lineno, s->end_col_offset)) VISIT_QUIT(st, 0); } break; @@ -1368,14 +1387,17 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) msg = NONLOCAL_AFTER_ASSIGN; } PyErr_Format(PyExc_SyntaxError, msg, name); - PyErr_SyntaxLocationObject(st->st_filename, - s->lineno, - s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset + 1, + s->end_lineno, + s->end_col_offset + 1); VISIT_QUIT(st, 0); } if (!symtable_add_def(st, name, DEF_NONLOCAL)) VISIT_QUIT(st, 0); - if (!symtable_record_directive(st, name, s->lineno, s->col_offset)) + if (!symtable_record_directive(st, name, s->lineno, s->col_offset, + s->end_lineno, s->end_col_offset)) VISIT_QUIT(st, 0); } break; @@ -1406,8 +1428,9 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (s->v.AsyncFunctionDef.decorator_list) VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.decorator_list); if (!symtable_enter_block(st, s->v.AsyncFunctionDef.name, - FunctionBlock, (void *)s, s->lineno, - s->col_offset)) + FunctionBlock, (void *)s, + s->lineno, s->col_offset, + s->end_lineno, s->end_col_offset)) VISIT_QUIT(st, 0); st->st_cur->ste_coroutine = 1; VISIT(st, arguments, s->v.AsyncFunctionDef.args); @@ -1453,9 +1476,11 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) long target_in_scope = _PyST_GetSymbol(ste, target_name); if (target_in_scope & DEF_COMP_ITER) { PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_CONFLICT, target_name); - PyErr_SyntaxLocationObject(st->st_filename, - e->lineno, - e->col_offset); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); VISIT_QUIT(st, 0); } continue; @@ -1471,7 +1496,8 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) if (!symtable_add_def(st, target_name, DEF_NONLOCAL)) VISIT_QUIT(st, 0); } - if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset)) + if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset, + e->end_lineno, e->end_col_offset)) VISIT_QUIT(st, 0); return symtable_add_def_helper(st, target_name, DEF_LOCAL, ste); @@ -1480,7 +1506,8 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) if (ste->ste_type == ModuleBlock) { if (!symtable_add_def(st, target_name, DEF_GLOBAL)) VISIT_QUIT(st, 0); - if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset)) + if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset, + e->end_lineno, e->end_col_offset)) VISIT_QUIT(st, 0); return symtable_add_def_helper(st, target_name, DEF_GLOBAL, ste); @@ -1488,9 +1515,11 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) /* Disallow usage in ClassBlock */ if (ste->ste_type == ClassBlock) { PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_IN_CLASS); - PyErr_SyntaxLocationObject(st->st_filename, - e->lineno, - e->col_offset); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); VISIT_QUIT(st, 0); } } @@ -1508,9 +1537,11 @@ symtable_handle_namedexpr(struct symtable *st, expr_ty e) if (st->st_cur->ste_comp_iter_expr > 0) { /* Assignment isn't allowed in a comprehension iterable expression */ PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_ITER_EXPR); - PyErr_SyntaxLocationObject(st->st_filename, - e->lineno, - e->col_offset); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); return 0; } if (st->st_cur->ste_comprehension) { @@ -1554,8 +1585,9 @@ symtable_visit_expr(struct symtable *st, expr_ty e) if (e->v.Lambda.args->kw_defaults) VISIT_SEQ_WITH_NULL(st, expr, e->v.Lambda.args->kw_defaults); if (!symtable_enter_block(st, lambda, - FunctionBlock, (void *)e, e->lineno, - e->col_offset)) + FunctionBlock, (void *)e, + e->lineno, e->col_offset, + e->end_lineno, e->end_col_offset)) VISIT_QUIT(st, 0); VISIT(st, arguments, e->v.Lambda.args); VISIT(st, expr, e->v.Lambda.body); @@ -1839,8 +1871,12 @@ symtable_visit_alias(struct symtable *st, alias_ty a) if (st->st_cur->ste_type != ModuleBlock) { int lineno = st->st_cur->ste_lineno; int col_offset = st->st_cur->ste_col_offset; + int end_lineno = st->st_cur->ste_end_lineno; + int end_col_offset = st->st_cur->ste_end_col_offset; PyErr_SetString(PyExc_SyntaxError, IMPORT_STAR_WARNING); - PyErr_SyntaxLocationObject(st->st_filename, lineno, col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + lineno, col_offset + 1, + end_lineno, end_col_offset + 1); Py_DECREF(store_name); return 0; } @@ -1890,7 +1926,8 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e, /* Create comprehension scope for the rest */ if (!scope_name || !symtable_enter_block(st, scope_name, FunctionBlock, (void *)e, - e->lineno, e->col_offset)) { + e->lineno, e->col_offset, + e->end_lineno, e->end_col_offset)) { return 0; } if (outermost->is_async) { @@ -1919,9 +1956,11 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e, (e->kind == SetComp_kind) ? "'yield' inside set comprehension" : (e->kind == DictComp_kind) ? "'yield' inside dict comprehension" : "'yield' inside generator expression"); - PyErr_SyntaxLocationObject(st->st_filename, - st->st_cur->ste_lineno, - st->st_cur->ste_col_offset + 1); + PyErr_RangedSyntaxLocationObject(st->st_filename, + st->st_cur->ste_lineno, + st->st_cur->ste_col_offset + 1, + st->st_cur->ste_end_lineno, + st->st_cur->ste_end_col_offset + 1); symtable_exit_block(st); return 0; } From webhook-mailer at python.org Fri Apr 23 10:37:17 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 14:37:17 -0000 Subject: [Python-checkins] [3.8] bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) (GH-25556) Message-ID: https://github.com/python/cpython/commit/82b6c0909aae423d9c8f4ff7d0e8df16106dbe28 commit: 82b6c0909aae423d9c8f4ff7d0e8df16106dbe28 branch: 3.8 author: Christian Heimes committer: tiran date: 2021-04-23T16:37:09+02:00 summary: [3.8] bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554) (GH-25556) Signed-off-by: Christian Heimes . (cherry picked from commit b9ad88be0304136c3fe5959c65a5d2c75490cd80) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst M Lib/test/test_ssl.py M Modules/_ssl.c diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 4ed1b3c999bdbf..1fa024191893e6 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1475,12 +1475,17 @@ def test_load_verify_cadata(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) self.assertRaises(TypeError, ctx.load_verify_locations, cadata=object) - with self.assertRaisesRegex(ssl.SSLError, "no start line"): + with self.assertRaisesRegex( + ssl.SSLError, + "no start line: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata="broken") - with self.assertRaisesRegex(ssl.SSLError, "not enough data"): + with self.assertRaisesRegex( + ssl.SSLError, + "not enough data: cadata does not contain a certificate" + ): ctx.load_verify_locations(cadata=b"broken") - def test_load_dh_params(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) ctx.load_dh_params(DHFILE) diff --git a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst new file mode 100644 index 00000000000000..28ff0fb3afa9d3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst @@ -0,0 +1,2 @@ +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index d275f224b39a4f..d6a2fb814adcd8 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -4097,7 +4097,7 @@ _add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len, { BIO *biobuf = NULL; X509_STORE *store; - int retval = 0, err, loaded = 0; + int retval = -1, err, loaded = 0; assert(filetype == SSL_FILETYPE_ASN1 || filetype == SSL_FILETYPE_PEM); @@ -4151,23 +4151,32 @@ _add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len, } err = ERR_peek_last_error(); - if ((filetype == SSL_FILETYPE_ASN1) && - (loaded > 0) && - (ERR_GET_LIB(err) == ERR_LIB_ASN1) && - (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { + if (loaded == 0) { + const char *msg = NULL; + if (filetype == SSL_FILETYPE_PEM) { + msg = "no start line: cadata does not contain a certificate"; + } else { + msg = "not enough data: cadata does not contain a certificate"; + } + _setSSLError(msg, 0, __FILE__, __LINE__); + retval = -1; + } else if ((filetype == SSL_FILETYPE_ASN1) && + (ERR_GET_LIB(err) == ERR_LIB_ASN1) && + (ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) { /* EOF ASN1 file, not an error */ ERR_clear_error(); retval = 0; } else if ((filetype == SSL_FILETYPE_PEM) && - (loaded > 0) && (ERR_GET_LIB(err) == ERR_LIB_PEM) && (ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) { /* EOF PEM file, not an error */ ERR_clear_error(); retval = 0; - } else { + } else if (err != 0) { _setSSLError(NULL, 0, __FILE__, __LINE__); retval = -1; + } else { + retval = 0; } BIO_free(biobuf); From webhook-mailer at python.org Fri Apr 23 12:08:03 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 16:08:03 -0000 Subject: [Python-checkins] bpo-35114: Make ssl.RAND_status() return a bool (GH-20063) Message-ID: https://github.com/python/cpython/commit/7d37b86ad48368cf93440ca220b758696730d0e5 commit: 7d37b86ad48368cf93440ca220b758696730d0e5 branch: master author: Zackery Spytz committer: tiran date: 2021-04-23T18:07:37+02:00 summary: bpo-35114: Make ssl.RAND_status() return a bool (GH-20063) files: A Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst M Modules/_ssl.c M Modules/clinic/_ssl.c.h diff --git a/Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst b/Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst new file mode 100644 index 00000000000000..e1d57f597bd466 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst @@ -0,0 +1,2 @@ +:func:`ssl.RAND_status` now returns a boolean value (as documented) instead +of ``1`` or ``0``. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 0daa13e92d6a7e..abc5c2cfa1a790 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -5035,7 +5035,7 @@ _ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) /*[clinic input] _ssl.RAND_status -Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not. +Returns True if the OpenSSL PRNG has been seeded with enough data and False if not. It is necessary to seed the PRNG with RAND_add() on some platforms before using the ssl() function. @@ -5043,9 +5043,9 @@ using the ssl() function. static PyObject * _ssl_RAND_status_impl(PyObject *module) -/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=8a774b02d1dc81f3]*/ +/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=d5ae5aea52f36e01]*/ { - return PyLong_FromLong(RAND_status()); + return PyBool_FromLong(RAND_status()); } /*[clinic input] diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 45c3095a9f6f00..c209c63c022565 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -1088,7 +1088,7 @@ PyDoc_STRVAR(_ssl_RAND_status__doc__, "RAND_status($module, /)\n" "--\n" "\n" -"Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n" +"Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.\n" "\n" "It is necessary to seed the PRNG with RAND_add() on some platforms before\n" "using the ssl() function."); @@ -1324,4 +1324,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=83e68c77bd96789a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8736d838c9059151 input=a9049054013a1b77]*/ From webhook-mailer at python.org Fri Apr 23 13:02:54 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 17:02:54 -0000 Subject: [Python-checkins] bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) Message-ID: https://github.com/python/cpython/commit/3513d55a617012002c3f82dbf3cec7ec1abd7090 commit: 3513d55a617012002c3f82dbf3cec7ec1abd7090 branch: master author: Steve Dower committer: zooba date: 2021-04-23T18:02:47+01:00 summary: bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) files: A Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst M Lib/nturl2path.py M Lib/test/test_urllib.py diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py index 853e6608380e9..61852aff58912 100644 --- a/Lib/nturl2path.py +++ b/Lib/nturl2path.py @@ -50,6 +50,14 @@ def pathname2url(p): # becomes # ///C:/foo/bar/spam.foo import urllib.parse + # First, clean up some special forms. We are going to sacrifice + # the additional information anyway + if p[:4] == '\\\\?\\': + p = p[4:] + if p[:4].upper() == 'UNC\\': + p = '\\' + p[4:] + elif p[1:2] != ':': + raise OSError('Bad path: ' + p) if not ':' in p: # No drive specifier, just convert slashes and quote the name if p[:2] == '\\\\': @@ -59,7 +67,7 @@ def pathname2url(p): p = '\\\\' + p components = p.split('\\') return urllib.parse.quote('/'.join(components)) - comp = p.split(':') + comp = p.split(':', maxsplit=2) if len(comp) != 2 or len(comp[0]) > 1: error = 'Bad path: ' + p raise OSError(error) diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index f41fa2a950686..82f1d9dc2e7bb 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -1526,6 +1526,24 @@ def test_quoting(self): "url2pathname() failed; %s != %s" % (expect, result)) + @unittest.skipUnless(sys.platform == 'win32', + 'test specific to the nturl2path functions.') + def test_prefixes(self): + # Test special prefixes are correctly handled in pathname2url() + given = '\\\\?\\C:\\dir' + expect = '///C:/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + given = '\\\\?\\unc\\server\\share\\dir' + expect = '/server/share/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + + @unittest.skipUnless(sys.platform == 'win32', 'test specific to the urllib.url2path function.') def test_ntpath(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst new file mode 100644 index 0000000000000..fa62846acaa98 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst @@ -0,0 +1,2 @@ +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. From webhook-mailer at python.org Fri Apr 23 13:03:22 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 17:03:22 -0000 Subject: [Python-checkins] bpo-43538: Add extra arguments to os.startfile (GH-25538) Message-ID: https://github.com/python/cpython/commit/019e9e816882f5c43c4b833f81844b8299e815fd commit: 019e9e816882f5c43c4b833f81844b8299e815fd branch: master author: Steve Dower committer: zooba date: 2021-04-23T18:03:17+01:00 summary: bpo-43538: Add extra arguments to os.startfile (GH-25538) files: A Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst A Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst D Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst M Doc/library/os.rst M Lib/test/test_startfile.py M Modules/clinic/posixmodule.c.h M Modules/posixmodule.c diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 371d59e9c31a45..41ef50d342df6e 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4155,7 +4155,7 @@ written in Python, such as a mail server's external command delivery program. .. availability:: Windows. -.. function:: startfile(path[, operation]) +.. function:: startfile(path, [operation], [arguments], [cwd], [show_cmd]) Start a file with its associated application. @@ -4169,13 +4169,25 @@ written in Python, such as a mail server's external command delivery program. ``'print'`` and ``'edit'`` (to be used on files) as well as ``'explore'`` and ``'find'`` (to be used on directories). + When launching an application, specify *arguments* to be passed as a single + string. This argument may have no effect when using this function to launch a + document. + + The default working directory is inherited, but may be overridden by the *cwd* + argument. This should be an absolute path. A relative *path* will be resolved + against this argument. + + Use *show_cmd* to override the default window style. Whether this has any + effect will depend on the application being launched. Values are integers as + supported by the Win32 :c:func:`ShellExecute` function. + :func:`startfile` returns as soon as the associated application is launched. There is no option to wait for the application to close, and no way to retrieve the application's exit status. The *path* parameter is relative to the current - directory. If you want to use an absolute path, make sure the first character - is not a slash (``'/'``); the underlying Win32 :c:func:`ShellExecute` function - doesn't work if it is. Use the :func:`os.path.normpath` function to ensure that - the path is properly encoded for Win32. + directory or *cwd*. If you want to use an absolute path, make sure the first + character is not a slash (``'/'``) Use :mod:`pathlib` or the + :func:`os.path.normpath` function to ensure that paths are properly encoded for + Win32. To reduce interpreter startup overhead, the Win32 :c:func:`ShellExecute` function is not resolved until this function is first called. If the function @@ -4183,8 +4195,14 @@ written in Python, such as a mail server's external command delivery program. .. audit-event:: os.startfile path,operation os.startfile + .. audit-event:: os.startfile/2 path,operation,arguments,cwd,show_cmd os.startfile + .. availability:: Windows. + .. versionchanged:: 3.10 + Added the *arguments*, *cwd* and *show_cmd* arguments, and the + ``os.startfile/2`` audit event. + .. function:: system(command) diff --git a/Lib/test/test_startfile.py b/Lib/test/test_startfile.py index 589ffa25244da9..8c642998625b04 100644 --- a/Lib/test/test_startfile.py +++ b/Lib/test/test_startfile.py @@ -18,11 +18,11 @@ startfile = support.get_attribute(os, 'startfile') + at unittest.skipIf(platform.win32_is_iot(), "starting files is not supported on Windows IoT Core or nanoserver") class TestCase(unittest.TestCase): def test_nonexisting(self): self.assertRaises(OSError, startfile, "nonexisting.vbs") - @unittest.skipIf(platform.win32_is_iot(), "starting files is not supported on Windows IoT Core or nanoserver") def test_empty(self): # We need to make sure the child process starts in a directory # we're not about to delete. If we're running under -j, that @@ -32,6 +32,14 @@ def test_empty(self): empty = path.join(path.dirname(__file__), "empty.vbs") startfile(empty) startfile(empty, "open") + startfile(empty, cwd=path.dirname(sys.executable)) + + def test_python(self): + # Passing "-V" ensures that it closes quickly, though still not + # quickly enough that we can run in the test directory + cwd, name = path.split(sys.executable) + startfile(name, arguments="-V", cwd=cwd) + startfile(name, arguments="-V", cwd=cwd, show_cmd=0) if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst similarity index 100% rename from Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst rename to Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst diff --git a/Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst b/Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst new file mode 100644 index 00000000000000..f1ee2def320070 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst @@ -0,0 +1 @@ +Adds additional arguments to :func:`os.startfile` function. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 36bb7c3ee2e300..7921c222b90091 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -7125,7 +7125,8 @@ os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) #if defined(MS_WINDOWS) PyDoc_STRVAR(os_startfile__doc__, -"startfile($module, /, filepath, operation=)\n" +"startfile($module, /, filepath, operation=,\n" +" arguments=, cwd=None, show_cmd=1)\n" "--\n" "\n" "Start a file with its associated application.\n" @@ -7137,6 +7138,16 @@ PyDoc_STRVAR(os_startfile__doc__, "When another \"operation\" is given, it specifies what should be done with\n" "the file. A typical operation is \"print\".\n" "\n" +"\"arguments\" is passed to the application, but should be omitted if the\n" +"file is a document.\n" +"\n" +"\"cwd\" is the working directory for the operation. If \"filepath\" is\n" +"relative, it will be resolved against this directory. This argument\n" +"should usually be an absolute path.\n" +"\n" +"\"show_cmd\" can be used to override the recommended visibility option.\n" +"See the Windows ShellExecute documentation for values.\n" +"\n" "startfile returns as soon as the associated application is launched.\n" "There is no option to wait for the application to close, and no way\n" "to retrieve the application\'s exit status.\n" @@ -7150,20 +7161,24 @@ PyDoc_STRVAR(os_startfile__doc__, static PyObject * os_startfile_impl(PyObject *module, path_t *filepath, - const Py_UNICODE *operation); + const Py_UNICODE *operation, const Py_UNICODE *arguments, + path_t *cwd, int show_cmd); static PyObject * os_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; - static const char * const _keywords[] = {"filepath", "operation", NULL}; + static const char * const _keywords[] = {"filepath", "operation", "arguments", "cwd", "show_cmd", NULL}; static _PyArg_Parser _parser = {NULL, _keywords, "startfile", 0}; - PyObject *argsbuf[2]; + PyObject *argsbuf[5]; Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; path_t filepath = PATH_T_INITIALIZE("startfile", "filepath", 0, 0); const Py_UNICODE *operation = NULL; + const Py_UNICODE *arguments = NULL; + path_t cwd = PATH_T_INITIALIZE("startfile", "cwd", 1, 0); + int show_cmd = 1; - args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf); + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 5, 0, argsbuf); if (!args) { goto exit; } @@ -7173,20 +7188,54 @@ os_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject if (!noptargs) { goto skip_optional_pos; } - if (!PyUnicode_Check(args[1])) { - _PyArg_BadArgument("startfile", "argument 'operation'", "str", args[1]); - goto exit; + if (args[1]) { + if (!PyUnicode_Check(args[1])) { + _PyArg_BadArgument("startfile", "argument 'operation'", "str", args[1]); + goto exit; + } + #if USE_UNICODE_WCHAR_CACHE + operation = _PyUnicode_AsUnicode(args[1]); + #else /* USE_UNICODE_WCHAR_CACHE */ + operation = PyUnicode_AsWideCharString(args[1], NULL); + #endif /* USE_UNICODE_WCHAR_CACHE */ + if (operation == NULL) { + goto exit; + } + if (!--noptargs) { + goto skip_optional_pos; + } } - #if USE_UNICODE_WCHAR_CACHE - operation = _PyUnicode_AsUnicode(args[1]); - #else /* USE_UNICODE_WCHAR_CACHE */ - operation = PyUnicode_AsWideCharString(args[1], NULL); - #endif /* USE_UNICODE_WCHAR_CACHE */ - if (operation == NULL) { + if (args[2]) { + if (!PyUnicode_Check(args[2])) { + _PyArg_BadArgument("startfile", "argument 'arguments'", "str", args[2]); + goto exit; + } + #if USE_UNICODE_WCHAR_CACHE + arguments = _PyUnicode_AsUnicode(args[2]); + #else /* USE_UNICODE_WCHAR_CACHE */ + arguments = PyUnicode_AsWideCharString(args[2], NULL); + #endif /* USE_UNICODE_WCHAR_CACHE */ + if (arguments == NULL) { + goto exit; + } + if (!--noptargs) { + goto skip_optional_pos; + } + } + if (args[3]) { + if (!path_converter(args[3], &cwd)) { + goto exit; + } + if (!--noptargs) { + goto skip_optional_pos; + } + } + show_cmd = _PyLong_AsInt(args[4]); + if (show_cmd == -1 && PyErr_Occurred()) { goto exit; } skip_optional_pos: - return_value = os_startfile_impl(module, &filepath, operation); + return_value = os_startfile_impl(module, &filepath, operation, arguments, &cwd, show_cmd); exit: /* Cleanup for filepath */ @@ -7195,6 +7244,12 @@ os_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject #if !USE_UNICODE_WCHAR_CACHE PyMem_Free((void *)operation); #endif /* USE_UNICODE_WCHAR_CACHE */ + /* Cleanup for arguments */ + #if !USE_UNICODE_WCHAR_CACHE + PyMem_Free((void *)arguments); + #endif /* USE_UNICODE_WCHAR_CACHE */ + /* Cleanup for cwd */ + path_cleanup(&cwd); return return_value; } @@ -9208,4 +9263,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=ede310b1d316d2b2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=65a85d7d3f2c487e input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 85e1e6976da16e..e754db7f2ce1a8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12485,6 +12485,9 @@ check_ShellExecute() os.startfile filepath: path_t operation: Py_UNICODE = NULL + arguments: Py_UNICODE = NULL + cwd: path_t(nullable=True) = None + show_cmd: int = 1 Start a file with its associated application. @@ -12495,6 +12498,16 @@ application (if any) its extension is associated. When another "operation" is given, it specifies what should be done with the file. A typical operation is "print". +"arguments" is passed to the application, but should be omitted if the +file is a document. + +"cwd" is the working directory for the operation. If "filepath" is +relative, it will be resolved against this directory. This argument +should usually be an absolute path. + +"show_cmd" can be used to override the recommended visibility option. +See the Windows ShellExecute documentation for values. + startfile returns as soon as the associated application is launched. There is no option to wait for the application to close, and no way to retrieve the application's exit status. @@ -12506,8 +12519,9 @@ the underlying Win32 ShellExecute function doesn't work if it is. static PyObject * os_startfile_impl(PyObject *module, path_t *filepath, - const Py_UNICODE *operation) -/*[clinic end generated code: output=66dc311c94d50797 input=c940888a5390f039]*/ + const Py_UNICODE *operation, const Py_UNICODE *arguments, + path_t *cwd, int show_cmd) +/*[clinic end generated code: output=3baa4f9795841880 input=8248997b80669622]*/ { HINSTANCE rc; @@ -12521,10 +12535,15 @@ os_startfile_impl(PyObject *module, path_t *filepath, if (PySys_Audit("os.startfile", "Ou", filepath->object, operation) < 0) { return NULL; } + if (PySys_Audit("os.startfile/2", "OuuOi", filepath->object, operation, + arguments, cwd->object ? cwd->object : Py_None, + show_cmd) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = Py_ShellExecuteW((HWND)0, operation, filepath->wide, - NULL, NULL, SW_SHOWNORMAL); + arguments, cwd->wide, show_cmd); Py_END_ALLOW_THREADS if (rc <= (HINSTANCE)32) { From webhook-mailer at python.org Fri Apr 23 13:28:10 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 17:28:10 -0000 Subject: [Python-checkins] bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) Message-ID: https://github.com/python/cpython/commit/04bcfe001cdf6290cb78fa4884002e5301e14c93 commit: 04bcfe001cdf6290cb78fa4884002e5301e14c93 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-23T10:28:05-07:00 summary: bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) (cherry picked from commit 3513d55a617012002c3f82dbf3cec7ec1abd7090) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst M Lib/nturl2path.py M Lib/test/test_urllib.py diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py index 853e6608380e9..61852aff58912 100644 --- a/Lib/nturl2path.py +++ b/Lib/nturl2path.py @@ -50,6 +50,14 @@ def pathname2url(p): # becomes # ///C:/foo/bar/spam.foo import urllib.parse + # First, clean up some special forms. We are going to sacrifice + # the additional information anyway + if p[:4] == '\\\\?\\': + p = p[4:] + if p[:4].upper() == 'UNC\\': + p = '\\' + p[4:] + elif p[1:2] != ':': + raise OSError('Bad path: ' + p) if not ':' in p: # No drive specifier, just convert slashes and quote the name if p[:2] == '\\\\': @@ -59,7 +67,7 @@ def pathname2url(p): p = '\\\\' + p components = p.split('\\') return urllib.parse.quote('/'.join(components)) - comp = p.split(':') + comp = p.split(':', maxsplit=2) if len(comp) != 2 or len(comp[0]) > 1: error = 'Bad path: ' + p raise OSError(error) diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index 68bb49efb2810..bf12f61e513c8 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -1524,6 +1524,24 @@ def test_quoting(self): "url2pathname() failed; %s != %s" % (expect, result)) + @unittest.skipUnless(sys.platform == 'win32', + 'test specific to the nturl2path functions.') + def test_prefixes(self): + # Test special prefixes are correctly handled in pathname2url() + given = '\\\\?\\C:\\dir' + expect = '///C:/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + given = '\\\\?\\unc\\server\\share\\dir' + expect = '/server/share/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + + @unittest.skipUnless(sys.platform == 'win32', 'test specific to the urllib.url2path function.') def test_ntpath(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst new file mode 100644 index 0000000000000..fa62846acaa98 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst @@ -0,0 +1,2 @@ +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. From webhook-mailer at python.org Fri Apr 23 14:03:34 2021 From: webhook-mailer at python.org (tiran) Date: Fri, 23 Apr 2021 18:03:34 -0000 Subject: [Python-checkins] bpo-43921: ignore failing test_wrong_cert_tls13 on Windows (GH-25561) Message-ID: https://github.com/python/cpython/commit/e047239eafefe8b19725efffe7756443495cf78b commit: e047239eafefe8b19725efffe7756443495cf78b branch: master author: Christian Heimes committer: tiran date: 2021-04-23T20:03:25+02:00 summary: bpo-43921: ignore failing test_wrong_cert_tls13 on Windows (GH-25561) test_wrong_cert_tls13 sometimes fails on some Windows buildbots. Turn failing test case into skipped test case until we have more time to investigate. Signed-off-by: Christian Heimes files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 8c846574e1ab4..e2d0def985767 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -3163,7 +3163,9 @@ def test_wrong_cert_tls13(self): s.connect((HOST, server.port)) try: s.write(b'data') - s.read(4) + s.read(1000) + s.write(b'should have failed already') + s.read(1000) except ssl.SSLError as e: if support.verbose: sys.stdout.write("\nSSLError is %r\n" % e) @@ -3173,7 +3175,13 @@ def test_wrong_cert_tls13(self): if support.verbose: sys.stdout.write("\nsocket.error is %r\n" % e) else: - self.fail("Use of invalid cert should have failed!") + if sys.platform == "win32": + self.skipTest( + "Ignoring failed test_wrong_cert_tls13 test case. " + "The test is flaky on Windows, see bpo-43921." + ) + else: + self.fail("Use of invalid cert should have failed!") def test_rude_shutdown(self): """A brutal shutdown of an SSL server should raise an OSError From webhook-mailer at python.org Fri Apr 23 14:09:25 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 18:09:25 -0000 Subject: [Python-checkins] bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) Message-ID: https://github.com/python/cpython/commit/52e9031fbd23c10668badc2a72ee5c203d6902c7 commit: 52e9031fbd23c10668badc2a72ee5c203d6902c7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: zooba date: 2021-04-23T19:09:20+01:00 summary: bpo-43284: Update platform.win32_ver to use _syscmd_ver instead of sys.getwindowsversion() (GH-25500) The sys module uses the kernel32.dll version number, which can vary from the "actual" Windows version. Since the best option for getting the version is WMI (which is expensive), we switch back to launching cmd.exe (which is also expensive, but a lot less code on our part). sys.getwindowsversion() is not updated to avoid launching executables from that module. (cherry picked from commit 2a3f4899c63806439e5bcea0c30f7e6a6295a763) Co-authored-by: Shreyan Avigyan files: A Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst M Doc/library/sys.rst M Lib/platform.py diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 3df529f8100eb..cb2f254b1fbe4 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -777,11 +777,16 @@ always available. Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information about these fields. - *platform_version* returns the accurate major version, minor version and + *platform_version* returns the major version, minor version and build number of the current operating system, rather than the version that is being emulated for the process. It is intended for use in logging rather than for feature detection. + .. note:: + *platform_version* derives the version from kernel32.dll which can be of a different + version than the OS version. Please use :mod:`platform` module for achieving accurate + OS version. + .. availability:: Windows. .. versionchanged:: 3.2 diff --git a/Lib/platform.py b/Lib/platform.py index 6258827d0e41f..0bce4381cca7f 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -239,11 +239,9 @@ def _norm_version(version, build=''): if build: l.append(build) try: - ints = map(int, l) + strings = list(map(str, map(int, l))) except ValueError: strings = l - else: - strings = list(map(str, ints)) version = '.'.join(strings[:3]) return version @@ -365,17 +363,20 @@ def win32_ver(release='', version='', csd='', ptype=''): return release, version, csd, ptype winver = getwindowsversion() - maj, min, build = winver.platform_version or winver[:3] - version = '{0}.{1}.{2}'.format(maj, min, build) + try: + major, minor, build = map(int, _syscmd_ver()[2].split('.')) + except ValueError: + major, minor, build = winver.platform_version or winver[:3] + version = '{0}.{1}.{2}'.format(major, minor, build) - release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or - _WIN32_CLIENT_RELEASES.get((maj, None)) or + release = (_WIN32_CLIENT_RELEASES.get((major, minor)) or + _WIN32_CLIENT_RELEASES.get((major, None)) or release) # getwindowsversion() reflect the compatibility mode Python is # running under, and so the service pack value is only going to be # valid if the versions match. - if winver[:2] == (maj, min): + if winver[:2] == (major, minor): try: csd = 'SP{}'.format(winver.service_pack_major) except AttributeError: @@ -384,8 +385,8 @@ def win32_ver(release='', version='', csd='', ptype=''): # VER_NT_SERVER = 3 if getattr(winver, 'product_type', None) == 3: - release = (_WIN32_SERVER_RELEASES.get((maj, min)) or - _WIN32_SERVER_RELEASES.get((maj, None)) or + release = (_WIN32_SERVER_RELEASES.get((major, minor)) or + _WIN32_SERVER_RELEASES.get((major, None)) or release) try: diff --git a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst new file mode 100644 index 0000000000000..7e41016015efe --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst @@ -0,0 +1,6 @@ +platform.win32_ver derives the windows version from +sys.getwindowsversion().platform_version which in turn derives the version +from kernel32.dll (which can be of a different version than Windows itself). +Therefore change the platform.win32_ver to determine the version using the +platform module's _syscmd_ver private function to return an accurate +version. From webhook-mailer at python.org Fri Apr 23 14:21:54 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 18:21:54 -0000 Subject: [Python-checkins] bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) Message-ID: https://github.com/python/cpython/commit/e92d1106291e5a7d4970372478f2882056b7eb3a commit: e92d1106291e5a7d4970372478f2882056b7eb3a branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: zooba date: 2021-04-23T19:21:45+01:00 summary: bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) (cherry picked from commit 3513d55a617012002c3f82dbf3cec7ec1abd7090) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst M Lib/nturl2path.py M Lib/test/test_urllib.py diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py index 853e6608380e9..61852aff58912 100644 --- a/Lib/nturl2path.py +++ b/Lib/nturl2path.py @@ -50,6 +50,14 @@ def pathname2url(p): # becomes # ///C:/foo/bar/spam.foo import urllib.parse + # First, clean up some special forms. We are going to sacrifice + # the additional information anyway + if p[:4] == '\\\\?\\': + p = p[4:] + if p[:4].upper() == 'UNC\\': + p = '\\' + p[4:] + elif p[1:2] != ':': + raise OSError('Bad path: ' + p) if not ':' in p: # No drive specifier, just convert slashes and quote the name if p[:2] == '\\\\': @@ -59,7 +67,7 @@ def pathname2url(p): p = '\\\\' + p components = p.split('\\') return urllib.parse.quote('/'.join(components)) - comp = p.split(':') + comp = p.split(':', maxsplit=2) if len(comp) != 2 or len(comp[0]) > 1: error = 'Bad path: ' + p raise OSError(error) diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index 8626687151185..b4e2f5fe00d6e 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -1489,6 +1489,24 @@ def test_quoting(self): "url2pathname() failed; %s != %s" % (expect, result)) + @unittest.skipUnless(sys.platform == 'win32', + 'test specific to the nturl2path functions.') + def test_prefixes(self): + # Test special prefixes are correctly handled in pathname2url() + given = '\\\\?\\C:\\dir' + expect = '///C:/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + given = '\\\\?\\unc\\server\\share\\dir' + expect = '/server/share/dir' + result = urllib.request.pathname2url(given) + self.assertEqual(expect, result, + "pathname2url() failed; %s != %s" % + (expect, result)) + + @unittest.skipUnless(sys.platform == 'win32', 'test specific to the urllib.url2path function.') def test_ntpath(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst new file mode 100644 index 0000000000000..fa62846acaa98 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst @@ -0,0 +1,2 @@ +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. From webhook-mailer at python.org Fri Apr 23 16:49:00 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 20:49:00 -0000 Subject: [Python-checkins] bpo-39950: add `pathlib.Path.hardlink_to()` method that supersedes `link_to()` (GH-18909) Message-ID: https://github.com/python/cpython/commit/f24e2e5464ba6498e7b8d73c3f9b417d59fd1b26 commit: f24e2e5464ba6498e7b8d73c3f9b417d59fd1b26 branch: master author: Barney Gale committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-23T13:48:52-07:00 summary: bpo-39950: add `pathlib.Path.hardlink_to()` method that supersedes `link_to()` (GH-18909) The argument order of `link_to()` is reversed compared to what one may expect, so: a.link_to(b) Might be expected to create *a* as a link to *b*, in fact it creates *b* as a link to *a*, making it function more like a "link from". This doesn't match `symlink_to()` nor the documentation and doesn't seem to be the original author's intent. This PR deprecates `link_to()` and introduces `hardlink_to()`, which has the same argument order as `symlink_to()`. files: A Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst M Doc/library/pathlib.rst M Doc/whatsnew/3.10.rst M Lib/pathlib.py M Lib/test/test_pathlib.py diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 122642ad5a41e..b6507eb4d6fa2 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -1140,6 +1140,15 @@ call fails (for example because the path doesn't exist). The order of arguments (link, target) is the reverse of :func:`os.symlink`'s. +.. method:: Path.hardlink_to(target) + + Make this path a hard link to the same file as *target*. + + .. note:: + The order of arguments (link, target) is the reverse + of :func:`os.link`'s. + + .. versionadded:: 3.10 .. method:: Path.link_to(target) @@ -1149,11 +1158,17 @@ call fails (for example because the path doesn't exist). This function does not make this path a hard link to *target*, despite the implication of the function and argument names. The argument order - (target, link) is the reverse of :func:`Path.symlink_to`, but matches - that of :func:`os.link`. + (target, link) is the reverse of :func:`Path.symlink_to` and + :func:`Path.hardlink_to`, but matches that of :func:`os.link`. .. versionadded:: 3.8 + .. deprecated:: 3.10 + + This method is deprecated in favor of :meth:`Path.hardlink_to`, as the + argument order of :meth:`Path.link_to` does not match that of + :meth:`Path.symlink_to`. + .. method:: Path.touch(mode=0o666, exist_ok=True) @@ -1246,7 +1261,7 @@ Below is a table mapping various :mod:`os` functions to their corresponding :func:`os.path.isdir` :meth:`Path.is_dir` :func:`os.path.isfile` :meth:`Path.is_file` :func:`os.path.islink` :meth:`Path.is_symlink` -:func:`os.link` :meth:`Path.link_to` +:func:`os.link` :meth:`Path.hardlink_to` :func:`os.symlink` :meth:`Path.symlink_to` :func:`os.readlink` :meth:`Path.readlink` :func:`os.path.relpath` :meth:`Path.relative_to` [#]_ diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 86cf11f796a66..247749a48a5f4 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1007,6 +1007,11 @@ Added negative indexing support to :attr:`PurePath.parents `. (Contributed by Yaroslav Pankovych in :issue:`21041`) +Added :meth:`Path.hardlink_to ` method that +supersedes :meth:`~pathlib.Path.link_to`. The new method has the same argument +order as :meth:`~pathlib.Path.symlink_to`. +(Contributed by Barney Gale in :issue:`39950`.) + platform -------- @@ -1363,6 +1368,10 @@ Deprecated (Contributed by Jelle Zijlstra in :issue:`21574`.) +* :meth:`pathlib.Path.link_to` is deprecated and slated for removal in + Python 3.12. Use :meth:`pathlib.Path.hardlink_to` instead. + (Contributed by Barney Gale in :issue:`39950`.) + Removed ======= diff --git a/Lib/pathlib.py b/Lib/pathlib.py index ebc2c02ecc0dc..37934c6038e1d 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -6,6 +6,7 @@ import posixpath import re import sys +import warnings from _collections_abc import Sequence from errno import EINVAL, ENOENT, ENOTDIR, EBADF, ELOOP from operator import attrgetter @@ -1306,6 +1307,14 @@ def symlink_to(self, target, target_is_directory=False): """ self._accessor.symlink(target, self, target_is_directory) + def hardlink_to(self, target): + """ + Make this path a hard link pointing to the same file as *target*. + + Note the order of arguments (self, target) is the reverse of os.link's. + """ + self._accessor.link(target, self) + def link_to(self, target): """ Make the target path a hard link pointing to this path. @@ -1315,7 +1324,13 @@ def link_to(self, target): of arguments (target, link) is the reverse of Path.symlink_to, but matches that of os.link. + Deprecated since Python 3.10 and scheduled for removal in Python 3.12. + Use `hardlink_to()` instead. """ + warnings.warn("pathlib.Path.link_to() is deprecated and is scheduled " + "for removal in Python 3.12. " + "Use pathlib.Path.hardlink_to() instead.", + DeprecationWarning) self._accessor.link(self, target) # Convenience functions for querying the stat results diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 0c89b6ef141d7..6ed08f7e70ce3 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1925,7 +1925,8 @@ def test_link_to(self): # linking to another path. q = P / 'dirA' / 'fileAA' try: - p.link_to(q) + with self.assertWarns(DeprecationWarning): + p.link_to(q) except PermissionError as e: self.skipTest('os.link(): %s' % e) self.assertEqual(q.stat().st_size, size) @@ -1937,6 +1938,24 @@ def test_link_to(self): self.assertEqual(os.stat(r).st_size, size) self.assertTrue(q.stat) + @unittest.skipUnless(hasattr(os, "link"), "os.link() is not present") + def test_hardlink_to(self): + P = self.cls(BASE) + target = P / 'fileA' + size = target.stat().st_size + # linking to another path. + link = P / 'dirA' / 'fileAA' + link.hardlink_to(target) + self.assertEqual(link.stat().st_size, size) + self.assertTrue(os.path.samefile(target, link)) + self.assertTrue(target.exists()) + # Linking to a str of a relative path. + link2 = P / 'dirA' / 'fileAAA' + target2 = rel_join('fileA') + link2.hardlink_to(target2) + self.assertEqual(os.stat(target2).st_size, size) + self.assertTrue(link2.exists()) + @unittest.skipIf(hasattr(os, "link"), "os.link() is present") def test_link_to_not_implemented(self): P = self.cls(BASE) diff --git a/Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst b/Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst new file mode 100644 index 0000000000000..33b8acf9c18fb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst @@ -0,0 +1,2 @@ +Add `pathlib.Path.hardlink_to()` method that supersedes `link_to()`. The new +method has the same argument order as `symlink_to()`. From webhook-mailer at python.org Fri Apr 23 17:27:32 2021 From: webhook-mailer at python.org (pitrou) Date: Fri, 23 Apr 2021 21:27:32 -0000 Subject: [Python-checkins] bpo-43907: add missing memoize call in pure python pickling of bytearray (GH-25501) Message-ID: https://github.com/python/cpython/commit/1e9f0933095403b215c2c4a0be7915d034ff7026 commit: 1e9f0933095403b215c2c4a0be7915d034ff7026 branch: master author: Carl Friedrich Bolz-Tereick committer: pitrou date: 2021-04-23T23:27:14+02:00 summary: bpo-43907: add missing memoize call in pure python pickling of bytearray (GH-25501) files: A Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst M Lib/pickle.py M Lib/test/pickletester.py diff --git a/Lib/pickle.py b/Lib/pickle.py index e63a8b6e4dbb7..5ab312f2acaee 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -818,6 +818,7 @@ def save_bytearray(self, obj): self._write_large_bytes(BYTEARRAY8 + pack(" https://github.com/python/cpython/commit/22556d84bca68a16e030e2337dcad80069d06f6b commit: 22556d84bca68a16e030e2337dcad80069d06f6b branch: master author: Brett Cannon committer: brettcannon date: 2021-04-23T14:40:18-07:00 summary: Silence find_module() DeprecationWarning on Windows tests (GH-25563) files: M Lib/test/test_importlib/test_windows.py diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index 802fb34d8199b0..b24383618c81f2 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -5,6 +5,7 @@ import re import sys import unittest +import warnings from test import support from test.support import import_helper from contextlib import contextmanager @@ -84,7 +85,9 @@ def test_find_spec_missing(self): self.assertIs(spec, None) def test_find_module_missing(self): - loader = self.machinery.WindowsRegistryFinder.find_module('spam') + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + loader = self.machinery.WindowsRegistryFinder.find_module('spam') self.assertIs(loader, None) def test_module_found(self): From webhook-mailer at python.org Fri Apr 23 17:40:50 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 21:40:50 -0000 Subject: [Python-checkins] bop-43652: Update Tcl and Tk to 8.6.11 in Windows installer (GH-25170) Message-ID: https://github.com/python/cpython/commit/6b59e662fa39a356d6eb03d349b140477857f4b1 commit: 6b59e662fa39a356d6eb03d349b140477857f4b1 branch: master author: Terry Jan Reedy committer: zooba date: 2021-04-23T22:40:42+01:00 summary: bop-43652: Update Tcl and Tk to 8.6.11 in Windows installer (GH-25170) files: A Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst M PCbuild/get_externals.bat M PCbuild/tcltk.props diff --git a/Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst b/Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst new file mode 100644 index 0000000000000..0ef44e28a9a1d --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst @@ -0,0 +1 @@ +Update Tcl and Tk to 8.6.11 in Windows installer. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index a8bb06f819987..d064a12a082ad 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -55,8 +55,8 @@ set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1k set libraries=%libraries% sqlite-3.34.0.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.10.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.10.0 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.11.0 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.11.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6 set libraries=%libraries% xz-5.2.2 set libraries=%libraries% zlib-1.2.11 @@ -78,7 +78,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1k-1 -if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.10.0 +if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.11.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 for %%b in (%binaries%) do ( diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props index fb61bee514721..1101796bb3604 100644 --- a/PCbuild/tcltk.props +++ b/PCbuild/tcltk.props @@ -4,7 +4,7 @@ 8 6 - 10 + 11 0 $(TclMajorVersion) $(TclMinorVersion) From webhook-mailer at python.org Fri Apr 23 18:00:38 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 23 Apr 2021 22:00:38 -0000 Subject: [Python-checkins] bpo-30555: Fix WindowsConsoleIO fails in the presence of fd redirection (GH-1927) Message-ID: https://github.com/python/cpython/commit/5e437fb872279960992c9a07f1a4c051b4948c53 commit: 5e437fb872279960992c9a07f1a4c051b4948c53 branch: master author: Segev Finer committer: zooba date: 2021-04-23T23:00:27+01:00 summary: bpo-30555: Fix WindowsConsoleIO fails in the presence of fd redirection (GH-1927) This works by not caching the handle and instead getting the handle from the file descriptor each time, so that if the actual handle changes by fd redirection closing/opening the console handle beneath our feet, we will keep working correctly. files: A Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst M Include/cpython/fileutils.h M Modules/_io/clinic/winconsoleio.c.h M Modules/_io/winconsoleio.c M Modules/mmapmodule.c M Modules/posixmodule.c M PC/_testconsole.c M PC/msvcrtmodule.c M Parser/myreadline.c M Python/fileutils.c diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h index 954f078d25a77d..ccf37e9468d615 100644 --- a/Include/cpython/fileutils.h +++ b/Include/cpython/fileutils.h @@ -161,4 +161,12 @@ PyAPI_FUNC(int) _Py_dup(int fd); PyAPI_FUNC(int) _Py_get_blocking(int fd); PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); -#endif /* !MS_WINDOWS */ +#else /* MS_WINDOWS */ +PyAPI_FUNC(void*) _Py_get_osfhandle_noraise(int fd); + +PyAPI_FUNC(void*) _Py_get_osfhandle(int fd); + +PyAPI_FUNC(int) _Py_open_osfhandle_noraise(void *handle, int flags); + +PyAPI_FUNC(int) _Py_open_osfhandle(void *handle, int flags); +#endif /* MS_WINDOWS */ diff --git a/Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst b/Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst new file mode 100644 index 00000000000000..2b0c2219539e9e --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst @@ -0,0 +1,2 @@ +Fix ``WindowsConsoleIO`` errors in the presence of fd redirection. Patch by +Segev Finer. diff --git a/Modules/_io/clinic/winconsoleio.c.h b/Modules/_io/clinic/winconsoleio.c.h index cf6ce603ff3fcc..84e73dcaf70d42 100644 --- a/Modules/_io/clinic/winconsoleio.c.h +++ b/Modules/_io/clinic/winconsoleio.c.h @@ -8,10 +8,10 @@ PyDoc_STRVAR(_io__WindowsConsoleIO_close__doc__, "close($self, /)\n" "--\n" "\n" -"Close the handle.\n" +"Close the console object.\n" "\n" -"A closed handle cannot be used for further I/O operations. close() may be\n" -"called more than once without error."); +"A closed console object cannot be used for further I/O operations.\n" +"close() may be called more than once without error."); #define _IO__WINDOWSCONSOLEIO_CLOSE_METHODDEF \ {"close", (PyCFunction)_io__WindowsConsoleIO_close, METH_NOARGS, _io__WindowsConsoleIO_close__doc__}, @@ -110,10 +110,7 @@ PyDoc_STRVAR(_io__WindowsConsoleIO_fileno__doc__, "fileno($self, /)\n" "--\n" "\n" -"Return the underlying file descriptor (an integer).\n" -"\n" -"fileno is only set when a file descriptor is used to open\n" -"one of the standard streams."); +"Return the underlying file descriptor (an integer)."); #define _IO__WINDOWSCONSOLEIO_FILENO_METHODDEF \ {"fileno", (PyCFunction)_io__WindowsConsoleIO_fileno, METH_NOARGS, _io__WindowsConsoleIO_fileno__doc__}, @@ -381,4 +378,4 @@ _io__WindowsConsoleIO_isatty(winconsoleio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #endif /* !defined(_IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF) */ -/*[clinic end generated code: output=a28b3120fa53b256 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=48080572ffee22f5 input=a9049054013a1b77]*/ diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index 4ccf0273403a11..460f2d3fa071a8 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -64,10 +64,7 @@ char _PyIO_get_console_type(PyObject *path_or_fd) { int fd = PyLong_AsLong(path_or_fd); PyErr_Clear(); if (fd >= 0) { - HANDLE handle; - _Py_BEGIN_SUPPRESS_IPH - handle = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH + HANDLE handle = _Py_get_osfhandle_noraise(fd); if (handle == INVALID_HANDLE_VALUE) return '\0'; return _get_console_type(handle); @@ -143,12 +140,11 @@ class _io._WindowsConsoleIO "winconsoleio *" "&PyWindowsConsoleIO_Type" typedef struct { PyObject_HEAD - HANDLE handle; int fd; unsigned int created : 1; unsigned int readable : 1; unsigned int writable : 1; - unsigned int closehandle : 1; + unsigned int closefd : 1; char finalizing; unsigned int blksize; PyObject *weakreflist; @@ -164,7 +160,7 @@ _Py_IDENTIFIER(name); int _PyWindowsConsoleIO_closed(PyObject *self) { - return ((winconsoleio *)self)->handle == INVALID_HANDLE_VALUE; + return ((winconsoleio *)self)->fd == -1; } @@ -172,16 +168,12 @@ _PyWindowsConsoleIO_closed(PyObject *self) static int internal_close(winconsoleio *self) { - if (self->handle != INVALID_HANDLE_VALUE) { - if (self->closehandle) { - if (self->fd >= 0) { - _Py_BEGIN_SUPPRESS_IPH - close(self->fd); - _Py_END_SUPPRESS_IPH - } - CloseHandle(self->handle); + if (self->fd != -1) { + if (self->closefd) { + _Py_BEGIN_SUPPRESS_IPH + close(self->fd); + _Py_END_SUPPRESS_IPH } - self->handle = INVALID_HANDLE_VALUE; self->fd = -1; } return 0; @@ -190,15 +182,15 @@ internal_close(winconsoleio *self) /*[clinic input] _io._WindowsConsoleIO.close -Close the handle. +Close the console object. -A closed handle cannot be used for further I/O operations. close() may be -called more than once without error. +A closed console object cannot be used for further I/O operations. +close() may be called more than once without error. [clinic start generated code]*/ static PyObject * _io__WindowsConsoleIO_close_impl(winconsoleio *self) -/*[clinic end generated code: output=27ef95b66c29057b input=185617e349ae4c7b]*/ +/*[clinic end generated code: output=27ef95b66c29057b input=68c4e5754f8136c2]*/ { PyObject *res; PyObject *exc, *val, *tb; @@ -206,8 +198,8 @@ _io__WindowsConsoleIO_close_impl(winconsoleio *self) _Py_IDENTIFIER(close); res = _PyObject_CallMethodIdOneArg((PyObject*)&PyRawIOBase_Type, &PyId_close, (PyObject*)self); - if (!self->closehandle) { - self->handle = INVALID_HANDLE_VALUE; + if (!self->closefd) { + self->fd = -1; return res; } if (res == NULL) @@ -229,12 +221,11 @@ winconsoleio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) self = (winconsoleio *) type->tp_alloc(type, 0); if (self != NULL) { - self->handle = INVALID_HANDLE_VALUE; self->fd = -1; self->created = 0; self->readable = 0; self->writable = 0; - self->closehandle = 0; + self->closefd = 0; self->blksize = 0; self->weakreflist = NULL; } @@ -269,16 +260,17 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, int rwa = 0; int fd = -1; int fd_is_own = 0; + HANDLE handle = NULL; assert(PyWindowsConsoleIO_Check(self)); - if (self->handle >= 0) { - if (self->closehandle) { + if (self->fd >= 0) { + if (self->closefd) { /* Have to close the existing file first. */ if (internal_close(self) < 0) return -1; } else - self->handle = INVALID_HANDLE_VALUE; + self->fd = -1; } fd = _PyLong_AsInt(nameobj); @@ -341,14 +333,12 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, goto bad_mode; if (fd >= 0) { - _Py_BEGIN_SUPPRESS_IPH - self->handle = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH - self->closehandle = 0; + handle = _Py_get_osfhandle_noraise(fd); + self->closefd = 0; } else { DWORD access = GENERIC_READ; - self->closehandle = 1; + self->closefd = 1; if (!closefd) { PyErr_SetString(PyExc_ValueError, "Cannot use closefd=False with file name"); @@ -363,21 +353,31 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj, on the specific access. This is required for modern names CONIN$ and CONOUT$, which allow reading/writing state as well as reading/writing content. */ - self->handle = CreateFileW(name, GENERIC_READ | GENERIC_WRITE, + handle = CreateFileW(name, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - if (self->handle == INVALID_HANDLE_VALUE) - self->handle = CreateFileW(name, access, + if (handle == INVALID_HANDLE_VALUE) + handle = CreateFileW(name, access, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); Py_END_ALLOW_THREADS - if (self->handle == INVALID_HANDLE_VALUE) { + if (handle == INVALID_HANDLE_VALUE) { PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, GetLastError(), nameobj); goto error; } + + if (self->writable) + self->fd = _Py_open_osfhandle_noraise(handle, _O_WRONLY | _O_BINARY); + else + self->fd = _Py_open_osfhandle_noraise(handle, _O_RDONLY | _O_BINARY); + if (self->fd < 0) { + CloseHandle(handle); + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); + goto error; + } } if (console_type == '\0') - console_type = _get_console_type(self->handle); + console_type = _get_console_type(handle); if (self->writable && console_type != 'w') { PyErr_SetString(PyExc_ValueError, @@ -460,25 +460,14 @@ _io._WindowsConsoleIO.fileno Return the underlying file descriptor (an integer). -fileno is only set when a file descriptor is used to open -one of the standard streams. - [clinic start generated code]*/ static PyObject * _io__WindowsConsoleIO_fileno_impl(winconsoleio *self) -/*[clinic end generated code: output=006fa74ce3b5cfbf input=079adc330ddaabe6]*/ +/*[clinic end generated code: output=006fa74ce3b5cfbf input=845c47ebbc3a2f67]*/ { - if (self->fd < 0 && self->handle != INVALID_HANDLE_VALUE) { - _Py_BEGIN_SUPPRESS_IPH - if (self->writable) - self->fd = _open_osfhandle((intptr_t)self->handle, _O_WRONLY | _O_BINARY); - else - self->fd = _open_osfhandle((intptr_t)self->handle, _O_RDONLY | _O_BINARY); - _Py_END_SUPPRESS_IPH - } if (self->fd < 0) - return err_mode("fileno"); + return err_closed(); return PyLong_FromLong(self->fd); } @@ -492,7 +481,7 @@ static PyObject * _io__WindowsConsoleIO_readable_impl(winconsoleio *self) /*[clinic end generated code: output=daf9cef2743becf0 input=6be9defb5302daae]*/ { - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); return PyBool_FromLong((long) self->readable); } @@ -507,7 +496,7 @@ static PyObject * _io__WindowsConsoleIO_writable_impl(winconsoleio *self) /*[clinic end generated code: output=e0a2ad7eae5abf67 input=cefbd8abc24df6a0]*/ { - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); return PyBool_FromLong((long) self->writable); } @@ -642,7 +631,7 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { static Py_ssize_t readinto(winconsoleio *self, char *buf, Py_ssize_t len) { - if (self->handle == INVALID_HANDLE_VALUE) { + if (self->fd == -1) { err_closed(); return -1; } @@ -657,6 +646,10 @@ readinto(winconsoleio *self, char *buf, Py_ssize_t len) return -1; } + HANDLE handle = _Py_get_osfhandle(self->fd); + if (handle == INVALID_HANDLE_VALUE) + return -1; + /* Each character may take up to 4 bytes in the final buffer. This is highly conservative, but necessary to avoid failure for any given Unicode input (e.g. \U0010ffff). @@ -678,7 +671,7 @@ readinto(winconsoleio *self, char *buf, Py_ssize_t len) return read_len; DWORD n; - wchar_t *wbuf = read_console_w(self->handle, wlen, &n); + wchar_t *wbuf = read_console_w(handle, wlen, &n); if (wbuf == NULL) return -1; if (n == 0) { @@ -784,10 +777,15 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) DWORD bufsize, n, len = 0; PyObject *bytes; DWORD bytes_size, rn; + HANDLE handle; - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); + handle = _Py_get_osfhandle(self->fd); + if (handle == INVALID_HANDLE_VALUE) + return NULL; + bufsize = BUFSIZ; buf = (wchar_t*)PyMem_Malloc((bufsize + 1) * sizeof(wchar_t)); @@ -819,7 +817,7 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) buf = tmp; } - subbuf = read_console_w(self->handle, bufsize - len, &n); + subbuf = read_console_w(handle, bufsize - len, &n); if (subbuf == NULL) { PyMem_Free(buf); @@ -909,7 +907,7 @@ _io__WindowsConsoleIO_read_impl(winconsoleio *self, Py_ssize_t size) PyObject *bytes; Py_ssize_t bytes_size; - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); if (!self->readable) return err_mode("reading"); @@ -959,12 +957,17 @@ _io__WindowsConsoleIO_write_impl(winconsoleio *self, Py_buffer *b) BOOL res = TRUE; wchar_t *wbuf; DWORD len, wlen, n = 0; + HANDLE handle; - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); if (!self->writable) return err_mode("writing"); + handle = _Py_get_osfhandle(self->fd); + if (handle == INVALID_HANDLE_VALUE) + return NULL; + if (!b->len) { return PyLong_FromLong(0); } @@ -995,7 +998,7 @@ _io__WindowsConsoleIO_write_impl(winconsoleio *self, Py_buffer *b) Py_BEGIN_ALLOW_THREADS wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, wbuf, wlen); if (wlen) { - res = WriteConsoleW(self->handle, wbuf, wlen, &n, NULL); + res = WriteConsoleW(handle, wbuf, wlen, &n, NULL); if (res && n < wlen) { /* Wrote fewer characters than expected, which means our * len value may be wrong. So recalculate it from the @@ -1027,15 +1030,15 @@ _io__WindowsConsoleIO_write_impl(winconsoleio *self, Py_buffer *b) static PyObject * winconsoleio_repr(winconsoleio *self) { - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return PyUnicode_FromFormat("<_io._WindowsConsoleIO [closed]>"); if (self->readable) return PyUnicode_FromFormat("<_io._WindowsConsoleIO mode='rb' closefd=%s>", - self->closehandle ? "True" : "False"); + self->closefd ? "True" : "False"); if (self->writable) return PyUnicode_FromFormat("<_io._WindowsConsoleIO mode='wb' closefd=%s>", - self->closehandle ? "True" : "False"); + self->closefd ? "True" : "False"); PyErr_SetString(PyExc_SystemError, "_WindowsConsoleIO has invalid mode"); return NULL; @@ -1051,7 +1054,7 @@ static PyObject * _io__WindowsConsoleIO_isatty_impl(winconsoleio *self) /*[clinic end generated code: output=9eac09d287c11bd7 input=9b91591dbe356f86]*/ { - if (self->handle == INVALID_HANDLE_VALUE) + if (self->fd == -1) return err_closed(); Py_RETURN_TRUE; @@ -1077,13 +1080,13 @@ static PyMethodDef winconsoleio_methods[] = { static PyObject * get_closed(winconsoleio *self, void *closure) { - return PyBool_FromLong((long)(self->handle == INVALID_HANDLE_VALUE)); + return PyBool_FromLong((long)(self->fd == -1)); } static PyObject * get_closefd(winconsoleio *self, void *closure) { - return PyBool_FromLong((long)(self->closehandle)); + return PyBool_FromLong((long)(self->closefd)); } static PyObject * diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 1e66962d37b0e0..9a2542f824c5c4 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1370,13 +1370,10 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) */ if (fileno != -1 && fileno != 0) { /* Ensure that fileno is within the CRT's valid range */ - _Py_BEGIN_SUPPRESS_IPH - fh = (HANDLE)_get_osfhandle(fileno); - _Py_END_SUPPRESS_IPH - if (fh==(HANDLE)-1) { - PyErr_SetFromErrno(PyExc_OSError); + fh = _Py_get_osfhandle(fileno); + if (fh == INVALID_HANDLE_VALUE) return NULL; - } + /* Win9x appears to need us seeked to zero */ lseek(fileno, 0, SEEK_SET); } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e754db7f2ce1a8..ecd210e4babf54 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -10098,18 +10098,16 @@ os_pipe_impl(PyObject *module) attr.bInheritHandle = FALSE; Py_BEGIN_ALLOW_THREADS - _Py_BEGIN_SUPPRESS_IPH ok = CreatePipe(&read, &write, &attr, 0); if (ok) { - fds[0] = _open_osfhandle((intptr_t)read, _O_RDONLY); - fds[1] = _open_osfhandle((intptr_t)write, _O_WRONLY); + fds[0] = _Py_open_osfhandle_noraise(read, _O_RDONLY); + fds[1] = _Py_open_osfhandle_noraise(write, _O_WRONLY); if (fds[0] == -1 || fds[1] == -1) { CloseHandle(read); CloseHandle(write); ok = 0; } } - _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (!ok) diff --git a/PC/_testconsole.c b/PC/_testconsole.c index b62f21c339aa41..db84f73c7744f3 100644 --- a/PC/_testconsole.c +++ b/PC/_testconsole.c @@ -13,10 +13,10 @@ #include /* The full definition is in iomodule. We reproduce - enough here to get the handle, which is all we want. */ + enough here to get the fd, which is all we want. */ typedef struct { PyObject_HEAD - HANDLE handle; + int fd; } winconsoleio; @@ -67,7 +67,10 @@ _testconsole_write_input_impl(PyObject *module, PyObject *file, prec->Event.KeyEvent.uChar.UnicodeChar = *p; } - HANDLE hInput = ((winconsoleio*)file)->handle; + HANDLE hInput = _Py_get_osfhandle(((winconsoleio*)file)->fd); + if (hInput == INVALID_HANDLE_VALUE) + goto error; + DWORD total = 0; while (total < size) { DWORD wrote; diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index b7ff20ab0fb1cc..0591497871cadc 100644 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -177,19 +177,11 @@ static long msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags) /*[clinic end generated code: output=b2fb97c4b515e4e6 input=d5db190a307cf4bb]*/ { - int fd; - if (PySys_Audit("msvcrt.open_osfhandle", "Ki", handle, flags) < 0) { return -1; } - _Py_BEGIN_SUPPRESS_IPH - fd = _open_osfhandle((intptr_t)handle, flags); - _Py_END_SUPPRESS_IPH - if (fd == -1) - PyErr_SetFromErrno(PyExc_OSError); - - return fd; + return _Py_open_osfhandle(handle, flags); } /*[clinic input] @@ -207,19 +199,11 @@ static void * msvcrt_get_osfhandle_impl(PyObject *module, int fd) /*[clinic end generated code: output=aca01dfe24637374 input=5fcfde9b17136aa2]*/ { - intptr_t handle = -1; - if (PySys_Audit("msvcrt.get_osfhandle", "(i)", fd) < 0) { return NULL; } - _Py_BEGIN_SUPPRESS_IPH - handle = _get_osfhandle(fd); - _Py_END_SUPPRESS_IPH - if (handle == -1) - PyErr_SetFromErrno(PyExc_OSError); - - return (HANDLE)handle; + return _Py_get_osfhandle(fd); } /* Console I/O */ diff --git a/Parser/myreadline.c b/Parser/myreadline.c index 143b41f1eab95e..e5e2fb1099d033 100644 --- a/Parser/myreadline.c +++ b/Parser/myreadline.c @@ -249,10 +249,8 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) { HANDLE hStdIn, hStdErr; - _Py_BEGIN_SUPPRESS_IPH - hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin)); - hStdErr = (HANDLE)_get_osfhandle(fileno(stderr)); - _Py_END_SUPPRESS_IPH + hStdIn = _Py_get_osfhandle_noraise(fileno(sys_stdin)); + hStdErr = _Py_get_osfhandle_noraise(fileno(stderr)); if (_get_console_type(hStdIn) == 'r') { fflush(sys_stdout); diff --git a/Python/fileutils.c b/Python/fileutils.c index 4997f922251c1e..2a079bbadcc5f6 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -1016,9 +1016,7 @@ _Py_fstat_noraise(int fd, struct _Py_stat_struct *status) HANDLE h; int type; - _Py_BEGIN_SUPPRESS_IPH - h = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH + h = _Py_get_osfhandle_noraise(fd); if (h == INVALID_HANDLE_VALUE) { /* errno is already set by _get_osfhandle, but we also set @@ -1157,9 +1155,7 @@ get_inheritable(int fd, int raise) HANDLE handle; DWORD flags; - _Py_BEGIN_SUPPRESS_IPH - handle = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH + handle = _Py_get_osfhandle_noraise(fd); if (handle == INVALID_HANDLE_VALUE) { if (raise) PyErr_SetFromErrno(PyExc_OSError); @@ -1230,9 +1226,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) } #ifdef MS_WINDOWS - _Py_BEGIN_SUPPRESS_IPH - handle = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH + handle = _Py_get_osfhandle_noraise(fd); if (handle == INVALID_HANDLE_VALUE) { if (raise) PyErr_SetFromErrno(PyExc_OSError); @@ -2006,13 +2000,9 @@ _Py_dup(int fd) assert(PyGILState_Check()); #ifdef MS_WINDOWS - _Py_BEGIN_SUPPRESS_IPH - handle = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH - if (handle == INVALID_HANDLE_VALUE) { - PyErr_SetFromErrno(PyExc_OSError); + handle = _Py_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) return -1; - } Py_BEGIN_ALLOW_THREADS _Py_BEGIN_SUPPRESS_IPH @@ -2122,8 +2112,47 @@ _Py_set_blocking(int fd, int blocking) PyErr_SetFromErrno(PyExc_OSError); return -1; } -#endif +#else /* MS_WINDOWS */ +void* +_Py_get_osfhandle_noraise(int fd) +{ + void *handle; + _Py_BEGIN_SUPPRESS_IPH + handle = (void*)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH + return handle; +} +void* +_Py_get_osfhandle(int fd) +{ + void *handle = _Py_get_osfhandle_noraise(fd); + if (handle == INVALID_HANDLE_VALUE) + PyErr_SetFromErrno(PyExc_OSError); + + return handle; +} + +int +_Py_open_osfhandle_noraise(void *handle, int flags) +{ + int fd; + _Py_BEGIN_SUPPRESS_IPH + fd = _open_osfhandle((intptr_t)handle, flags); + _Py_END_SUPPRESS_IPH + return fd; +} + +int +_Py_open_osfhandle(void *handle, int flags) +{ + int fd = _Py_open_osfhandle_noraise(handle, flags); + if (fd == -1) + PyErr_SetFromErrno(PyExc_OSError); + + return fd; +} +#endif /* MS_WINDOWS */ int _Py_GetLocaleconvNumeric(struct lconv *lc, From webhook-mailer at python.org Fri Apr 23 18:19:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 23 Apr 2021 22:19:03 -0000 Subject: [Python-checkins] Restrict GITHUB_TOKEN permissions for the 'stale' workflow (GH-25564) Message-ID: https://github.com/python/cpython/commit/481994078fbf61317fe35456e9a1b8a960e7dfa0 commit: 481994078fbf61317fe35456e9a1b8a960e7dfa0 branch: master author: Brett Cannon committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-23T15:18:50-07:00 summary: Restrict GITHUB_TOKEN permissions for the 'stale' workflow (GH-25564) It should only need write-level permissions to pull requests. files: M .github/workflows/stale.yml diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 58c9a4f21c30f..26806fad814f1 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -4,6 +4,9 @@ on: schedule: - cron: "0 0 * * *" +permissions: + pull-requests: write + jobs: stale: From webhook-mailer at python.org Fri Apr 23 22:08:41 2021 From: webhook-mailer at python.org (ethanfurman) Date: Sat, 24 Apr 2021 02:08:41 -0000 Subject: [Python-checkins] bpo-38659: [Enum] do not check '_inverted_' during simple test (GH-25566) Message-ID: https://github.com/python/cpython/commit/6c681e1a4aa2dbca61be9a26c9257d7d25fa29a7 commit: 6c681e1a4aa2dbca61be9a26c9257d7d25fa29a7 branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-23T19:08:22-07:00 summary: bpo-38659: [Enum] do not check '_inverted_' during simple test (GH-25566) Depending on usage, it's possible for Flag members to have the _inverted_ attribute when they are testing, while the Flag being testing against will not have that attribute on its members -- so skip that comparison. files: M Lib/enum.py diff --git a/Lib/enum.py b/Lib/enum.py index 82be1fbaf70b0..ca6aff6f82512 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1616,8 +1616,8 @@ def _test_simple_enum(checked_enum, simple_enum): simple_member_dict = simple_enum[name].__dict__ simple_member_keys = list(simple_member_dict.keys()) for key in set(checked_member_keys + simple_member_keys): - if key in ('__module__', '__objclass__'): - # keys known to be different + if key in ('__module__', '__objclass__', '_inverted_'): + # keys known to be different or absent continue elif key not in simple_member_keys: failed_member.append("missing key %r not in the simple enum member %r" % (key, name)) From webhook-mailer at python.org Sat Apr 24 00:46:09 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 24 Apr 2021 04:46:09 -0000 Subject: [Python-checkins] bpo-31870: Add a timeout parameter to ssl.get_server_certificate() (GH-22270) Message-ID: https://github.com/python/cpython/commit/b2fac1afaa7c0d41a263781fcf94d8a92dc31b48 commit: b2fac1afaa7c0d41a263781fcf94d8a92dc31b48 branch: master author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-23T21:46:01-07:00 summary: bpo-31870: Add a timeout parameter to ssl.get_server_certificate() (GH-22270) files: A Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst M Doc/library/ssl.rst M Doc/whatsnew/3.10.rst M Lib/ssl.py M Lib/test/test_ssl.py diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index b9e54357bb969..f7c49dc7c1ea7 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -426,7 +426,8 @@ Certificate handling previously. Return an integer (no fractions of a second in the input format) -.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None) +.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, \ + ca_certs=None[, timeout]) Given the address ``addr`` of an SSL-protected server, as a (*hostname*, *port-number*) pair, fetches the server's certificate, and returns it as a @@ -436,7 +437,8 @@ Certificate handling same format as used for the same parameter in :meth:`SSLContext.wrap_socket`. The call will attempt to validate the server certificate against that set of root certificates, and will fail - if the validation attempt fails. + if the validation attempt fails. A timeout can be specified with the + ``timeout`` parameter. .. versionchanged:: 3.3 This function is now IPv6-compatible. @@ -445,6 +447,9 @@ Certificate handling The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to :data:`PROTOCOL_TLS` for maximum compatibility with modern servers. + .. versionchanged:: 3.10 + The *timeout* parameter was added. + .. function:: DER_cert_to_PEM_cert(DER_cert_bytes) Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 247749a48a5f4..78f3c2d36b845 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1062,6 +1062,12 @@ The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. Added option to create MPTCP sockets with ``IPPROTO_MPTCP`` (Contributed by Rui Cunha in :issue:`43571`.) +ssl +--- + +Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. +(Contributed by Zackery Spytz in :issue:`31870`.) + sys --- diff --git a/Lib/ssl.py b/Lib/ssl.py index 620ddaa93f962..2b131de04306a 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -258,7 +258,7 @@ class _TLSMessageType: from _ssl import enum_certificates, enum_crls from socket import socket, SOCK_STREAM, create_connection -from socket import SOL_SOCKET, SO_TYPE +from socket import SOL_SOCKET, SO_TYPE, _GLOBAL_DEFAULT_TIMEOUT import socket as _socket import base64 # for DER-to-PEM translation import errno @@ -1500,11 +1500,14 @@ def PEM_cert_to_DER_cert(pem_cert_string): d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -def get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None): +def get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, + ca_certs=None, timeout=_GLOBAL_DEFAULT_TIMEOUT): """Retrieve the certificate from the server at the specified address, and return it as a PEM-encoded string. If 'ca_certs' is specified, validate the server cert against it. - If 'ssl_version' is specified, use it in the connection attempt.""" + If 'ssl_version' is specified, use it in the connection attempt. + If 'timeout' is specified, use it in the connection attempt. + """ host, port = addr if ca_certs is not None: @@ -1514,7 +1517,7 @@ def get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None) context = _create_stdlib_context(ssl_version, cert_reqs=cert_reqs, cafile=ca_certs) - with create_connection(addr) as sock: + with create_connection(addr, timeout=timeout) as sock: with context.wrap_socket(sock, server_hostname=host) as sslsock: dercert = sslsock.getpeercert(True) return DER_cert_to_PEM_cert(dercert) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index e2d0def985767..327a550645b4f 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2136,6 +2136,11 @@ def test_get_server_certificate_fail(self): # independent test method _test_get_server_certificate_fail(self, *self.server_addr) + def test_get_server_certificate_timeout(self): + with self.assertRaises(socket.timeout): + ssl.get_server_certificate(self.server_addr, ca_certs=SIGNING_CA, + timeout=0.0001) + def test_ciphers(self): with test_wrap_socket(socket.socket(socket.AF_INET), cert_reqs=ssl.CERT_NONE, ciphers="ALL") as s: diff --git a/Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst b/Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst new file mode 100644 index 0000000000000..6adf456d2d6cc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst @@ -0,0 +1,2 @@ +The :func:`ssl.get_server_certificate` function now has a *timeout* +parameter. From webhook-mailer at python.org Sat Apr 24 01:54:12 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 24 Apr 2021 05:54:12 -0000 Subject: [Python-checkins] bpo-31870: Fix test_get_server_certificate_timeout on Windows (GH-25570) Message-ID: https://github.com/python/cpython/commit/f05c2aed7e25087122613b51f152919c79641f66 commit: f05c2aed7e25087122613b51f152919c79641f66 branch: master author: Christian Heimes committer: tiran date: 2021-04-24T07:54:08+02:00 summary: bpo-31870: Fix test_get_server_certificate_timeout on Windows (GH-25570) Some OS do not support millisecond granularity in select(). Use 100ms timeout and a server callback with sleep to emulate a slow server. files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 327a550645b4f..31e1e7311daa5 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2137,9 +2137,13 @@ def test_get_server_certificate_fail(self): _test_get_server_certificate_fail(self, *self.server_addr) def test_get_server_certificate_timeout(self): + def servername_cb(ssl_sock, server_name, initial_context): + time.sleep(0.2) + self.server_context.set_servername_callback(servername_cb) + with self.assertRaises(socket.timeout): ssl.get_server_certificate(self.server_addr, ca_certs=SIGNING_CA, - timeout=0.0001) + timeout=0.1) def test_ciphers(self): with test_wrap_socket(socket.socket(socket.AF_INET), From webhook-mailer at python.org Sat Apr 24 03:18:00 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 24 Apr 2021 07:18:00 -0000 Subject: [Python-checkins] bpo-37322: Fix ResourceWarning and exception handling in test (GH-25553) Message-ID: https://github.com/python/cpython/commit/c8666cfa7cdc48915a14cd16095a69029720736a commit: c8666cfa7cdc48915a14cd16095a69029720736a branch: master author: Christian Heimes committer: tiran date: 2021-04-24T09:17:54+02:00 summary: bpo-37322: Fix ResourceWarning and exception handling in test (GH-25553) Revert 73ea546, increase logging, and improve stability of test. Handle all OSErrors in a single block. OSError also takes care of SSLError and socket's connection errors. Partly reverts commit fb7e750. The threaded connection handler must not raise an unhandled exception. files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 31e1e7311daa5..71260bd9827db 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2390,7 +2390,10 @@ def wrap_conn(self): sys.stdout.write(" client cert is " + pprint.pformat(cert) + "\n") cert_binary = self.sslconn.getpeercert(True) if support.verbose and self.server.chatty: - sys.stdout.write(" cert binary is " + str(len(cert_binary)) + " bytes\n") + if cert_binary is None: + sys.stdout.write(" client did not provide a cert\n") + else: + sys.stdout.write(f" cert binary is {len(cert_binary)}b\n") cipher = self.sslconn.cipher() if support.verbose and self.server.chatty: sys.stdout.write(" server: connection cipher is now " + str(cipher) + "\n") @@ -2486,31 +2489,22 @@ def run(self): sys.stdout.write(" server: read %r (%s), sending back %r (%s)...\n" % (msg, ctype, msg.lower(), ctype)) self.write(msg.lower()) - except (ConnectionResetError, ConnectionAbortedError): - # XXX: OpenSSL 1.1.1 sometimes raises ConnectionResetError - # when connection is not shut down gracefully. + except OSError as e: + # handles SSLError and socket errors if self.server.chatty and support.verbose: - sys.stdout.write( - " Connection reset by peer: {}\n".format( - self.addr) - ) - self.close() - self.running = False - except ssl.SSLError as err: - # On Windows sometimes test_pha_required_nocert receives the - # PEER_DID_NOT_RETURN_A_CERTIFICATE exception - # before the 'tlsv13 alert certificate required' exception. - # If the server is stopped when PEER_DID_NOT_RETURN_A_CERTIFICATE - # is received test_pha_required_nocert fails with ConnectionResetError - # because the underlying socket is closed - if 'PEER_DID_NOT_RETURN_A_CERTIFICATE' == err.reason: - if self.server.chatty and support.verbose: - sys.stdout.write(err.args[1]) - # test_pha_required_nocert is expecting this exception - raise ssl.SSLError('tlsv13 alert certificate required') - except OSError: - if self.server.chatty: - handle_error("Test server failure:\n") + if isinstance(e, ConnectionError): + # OpenSSL 1.1.1 sometimes raises + # ConnectionResetError when connection is not + # shut down gracefully. + print( + f" Connection reset by peer: {self.addr}" + ) + else: + handle_error("Test server failure:\n") + try: + self.write(b"ERROR\n") + except OSError: + pass self.close() self.running = False @@ -4416,24 +4410,30 @@ def test_pha_required_nocert(self): server_context.verify_mode = ssl.CERT_REQUIRED client_context.post_handshake_auth = True - # Ignore expected SSLError in ConnectionHandler of ThreadedEchoServer - # (it is only raised sometimes on Windows) - with threading_helper.catch_threading_exception() as cm: - server = ThreadedEchoServer(context=server_context, chatty=False) - with server: - with client_context.wrap_socket(socket.socket(), - server_hostname=hostname) as s: - s.connect((HOST, server.port)) - s.write(b'PHA') + def msg_cb(conn, direction, version, content_type, msg_type, data): + if support.verbose and content_type == _TLSContentType.ALERT: + info = (conn, direction, version, content_type, msg_type, data) + sys.stdout.write(f"TLS: {info!r}\n") + + server_context._msg_callback = msg_cb + client_context._msg_callback = msg_cb + + server = ThreadedEchoServer(context=server_context, chatty=True) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + s.write(b'PHA') + with self.assertRaisesRegex( + ssl.SSLError, + 'tlsv13 alert certificate required' + ): # receive CertificateRequest self.assertEqual(s.recv(1024), b'OK\n') # send empty Certificate + Finish s.write(b'HASCERT') # receive alert - with self.assertRaisesRegex( - ssl.SSLError, - 'tlsv13 alert certificate required'): - s.recv(1024) + s.recv(1024) def test_pha_optional(self): if support.verbose: From webhook-mailer at python.org Sat Apr 24 03:55:41 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 24 Apr 2021 07:55:41 -0000 Subject: [Python-checkins] bpo-41282: Consistent message and filter warning in setup.py (GH-25571) Message-ID: https://github.com/python/cpython/commit/a460ab3134cd5cf3932c2125aec012851268f0cc commit: a460ab3134cd5cf3932c2125aec012851268f0cc branch: master author: Christian Heimes committer: tiran date: 2021-04-24T09:55:15+02:00 summary: bpo-41282: Consistent message and filter warning in setup.py (GH-25571) Signed-off-by: Christian Heimes files: M Lib/distutils/sysconfig.py M setup.py diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py index 439040deb5619d..aa63093a3f0e6e 100644 --- a/Lib/distutils/sysconfig.py +++ b/Lib/distutils/sysconfig.py @@ -57,7 +57,7 @@ from sysconfig import _fix_pcbuild warnings.warn( - 'the distutils.sysconfig module is deprecated, use sysconfig instead', + 'The distutils.sysconfig module is deprecated, use sysconfig instead', DeprecationWarning, stacklevel=2 ) diff --git a/setup.py b/setup.py index df434d48768e98..4f4b42d1d9d6ac 100644 --- a/setup.py +++ b/setup.py @@ -33,8 +33,16 @@ with warnings.catch_warnings(): # bpo-41282 (PEP 632) deprecated distutils but setup.py still uses it - warnings.filterwarnings("ignore", "The distutils package is deprecated", - DeprecationWarning) + warnings.filterwarnings( + "ignore", + "The distutils package is deprecated", + DeprecationWarning + ) + warnings.filterwarnings( + "ignore", + "The distutils.sysconfig module is deprecated, use sysconfig instead", + DeprecationWarning + ) from distutils import log from distutils.command.build_ext import build_ext From webhook-mailer at python.org Sat Apr 24 09:08:17 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 24 Apr 2021 13:08:17 -0000 Subject: [Python-checkins] bpo-43921: also accept EOF in post-handshake auth test (GH-25574) Message-ID: https://github.com/python/cpython/commit/ce9a0643496ba802ea97a3da20eace3a1117ea48 commit: ce9a0643496ba802ea97a3da20eace3a1117ea48 branch: master author: Christian Heimes committer: tiran date: 2021-04-24T15:08:13+02:00 summary: bpo-43921: also accept EOF in post-handshake auth test (GH-25574) files: M Lib/test/test_ssl.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 71260bd9827db..15d7bfaeec9e0 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -4424,9 +4424,11 @@ def msg_cb(conn, direction, version, content_type, msg_type, data): server_hostname=hostname) as s: s.connect((HOST, server.port)) s.write(b'PHA') + # test sometimes fails with EOF error. Test passes as long as + # server aborts connection with an error. with self.assertRaisesRegex( ssl.SSLError, - 'tlsv13 alert certificate required' + '(certificate required|EOF occurred)' ): # receive CertificateRequest self.assertEqual(s.recv(1024), b'OK\n') From webhook-mailer at python.org Sat Apr 24 10:14:14 2021 From: webhook-mailer at python.org (jaraco) Date: Sat, 24 Apr 2021 14:14:14 -0000 Subject: [Python-checkins] bpo-43780: Sync with importlib_metadata 3.10 (GH-25297) Message-ID: https://github.com/python/cpython/commit/c6ca368867bd68d44f333df840aa85d425a51410 commit: c6ca368867bd68d44f333df840aa85d425a51410 branch: master author: Jason R. Coombs committer: jaraco date: 2021-04-24T10:13:51-04:00 summary: bpo-43780: Sync with importlib_metadata 3.10 (GH-25297) * bpo-43780: Sync with importlib_metadata 3.10. * Add blurb * Apply changes from importlib_metadata 3.10.1. files: A Lib/importlib/_collections.py A Lib/importlib/_functools.py A Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst M Lib/importlib/metadata.py M Lib/test/test_importlib/fixtures.py M Lib/test/test_importlib/test_metadata_api.py diff --git a/Lib/importlib/_collections.py b/Lib/importlib/_collections.py new file mode 100644 index 0000000000000..cf0954e1a3054 --- /dev/null +++ b/Lib/importlib/_collections.py @@ -0,0 +1,30 @@ +import collections + + +# from jaraco.collections 3.3 +class FreezableDefaultDict(collections.defaultdict): + """ + Often it is desirable to prevent the mutation of + a default dict after its initial construction, such + as to prevent mutation during iteration. + + >>> dd = FreezableDefaultDict(list) + >>> dd[0].append('1') + >>> dd.freeze() + >>> dd[1] + [] + >>> len(dd) + 1 + """ + + def __missing__(self, key): + return getattr(self, '_frozen', super().__missing__)(key) + + def freeze(self): + self._frozen = lambda key: self.default_factory() + + +class Pair(collections.namedtuple('Pair', 'name value')): + @classmethod + def parse(cls, text): + return cls(*map(str.strip, text.split("=", 1))) diff --git a/Lib/importlib/_functools.py b/Lib/importlib/_functools.py new file mode 100644 index 0000000000000..73f50d00bc04c --- /dev/null +++ b/Lib/importlib/_functools.py @@ -0,0 +1,85 @@ +import types +import functools + + +# from jaraco.functools 3.3 +def method_cache(method, cache_wrapper=None): + """ + Wrap lru_cache to support storing the cache data in the object instances. + + Abstracts the common paradigm where the method explicitly saves an + underscore-prefixed protected property on first call and returns that + subsequently. + + >>> class MyClass: + ... calls = 0 + ... + ... @method_cache + ... def method(self, value): + ... self.calls += 1 + ... return value + + >>> a = MyClass() + >>> a.method(3) + 3 + >>> for x in range(75): + ... res = a.method(x) + >>> a.calls + 75 + + Note that the apparent behavior will be exactly like that of lru_cache + except that the cache is stored on each instance, so values in one + instance will not flush values from another, and when an instance is + deleted, so are the cached values for that instance. + + >>> b = MyClass() + >>> for x in range(35): + ... res = b.method(x) + >>> b.calls + 35 + >>> a.method(0) + 0 + >>> a.calls + 75 + + Note that if method had been decorated with ``functools.lru_cache()``, + a.calls would have been 76 (due to the cached value of 0 having been + flushed by the 'b' instance). + + Clear the cache with ``.cache_clear()`` + + >>> a.method.cache_clear() + + Same for a method that hasn't yet been called. + + >>> c = MyClass() + >>> c.method.cache_clear() + + Another cache wrapper may be supplied: + + >>> cache = functools.lru_cache(maxsize=2) + >>> MyClass.method2 = method_cache(lambda self: 3, cache_wrapper=cache) + >>> a = MyClass() + >>> a.method2() + 3 + + Caution - do not subsequently wrap the method with another decorator, such + as ``@property``, which changes the semantics of the function. + + See also + http://code.activestate.com/recipes/577452-a-memoize-decorator-for-instance-methods/ + for another implementation and additional justification. + """ + cache_wrapper = cache_wrapper or functools.lru_cache() + + def wrapper(self, *args, **kwargs): + # it's the first call, replace the method with a cached, bound method + bound_method = types.MethodType(method, self) + cached_method = cache_wrapper(bound_method) + setattr(self, method.__name__, cached_method) + return cached_method(*args, **kwargs) + + # Support cache clear even before cache has been created. + wrapper.cache_clear = lambda: None + + return wrapper diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py index 53c1a145f5c43..7a427eb3b2870 100644 --- a/Lib/importlib/metadata.py +++ b/Lib/importlib/metadata.py @@ -7,15 +7,17 @@ import pathlib import zipfile import operator +import textwrap import warnings import functools import itertools import posixpath import collections +from ._collections import FreezableDefaultDict, Pair +from ._functools import method_cache from ._itertools import unique_everseen -from configparser import ConfigParser from contextlib import suppress from importlib import import_module from importlib.abc import MetaPathFinder @@ -51,6 +53,71 @@ def name(self): return name +class Sectioned: + """ + A simple entry point config parser for performance + + >>> for item in Sectioned.read(Sectioned._sample): + ... print(item) + Pair(name='sec1', value='# comments ignored') + Pair(name='sec1', value='a = 1') + Pair(name='sec1', value='b = 2') + Pair(name='sec2', value='a = 2') + + >>> res = Sectioned.section_pairs(Sectioned._sample) + >>> item = next(res) + >>> item.name + 'sec1' + >>> item.value + Pair(name='a', value='1') + >>> item = next(res) + >>> item.value + Pair(name='b', value='2') + >>> item = next(res) + >>> item.name + 'sec2' + >>> item.value + Pair(name='a', value='2') + >>> list(res) + [] + """ + + _sample = textwrap.dedent( + """ + [sec1] + # comments ignored + a = 1 + b = 2 + + [sec2] + a = 2 + """ + ).lstrip() + + @classmethod + def section_pairs(cls, text): + return ( + section._replace(value=Pair.parse(section.value)) + for section in cls.read(text, filter_=cls.valid) + if section.name is not None + ) + + @staticmethod + def read(text, filter_=None): + lines = filter(filter_, map(str.strip, text.splitlines())) + name = None + for value in lines: + section_match = value.startswith('[') and value.endswith(']') + if section_match: + name = value.strip('[]') + continue + yield Pair(name, value) + + @staticmethod + def valid(line): + return line and not line.startswith('#') + + class EntryPoint( collections.namedtuple('EntryPointBase', 'name value group')): """An entry point as defined by Python packaging conventions. @@ -108,22 +175,6 @@ def extras(self): match = self.pattern.match(self.value) return list(re.finditer(r'\w+', match.group('extras') or '')) - @classmethod - def _from_config(cls, config): - return ( - cls(name, value, group) - for group in config.sections() - for name, value in config.items(group) - ) - - @classmethod - def _from_text(cls, text): - config = ConfigParser(delimiters='=') - # case sensitive: https://stackoverflow.com/q/1611799/812183 - config.optionxform = str - config.read_string(text) - return cls._from_config(config) - def _for(self, dist): self.dist = dist return self @@ -193,7 +244,18 @@ def groups(self): @classmethod def _from_text_for(cls, text, dist): - return cls(ep._for(dist) for ep in EntryPoint._from_text(text)) + return cls(ep._for(dist) for ep in cls._from_text(text)) + + @classmethod + def _from_text(cls, text): + return itertools.starmap(EntryPoint, cls._parse_groups(text or '')) + + @staticmethod + def _parse_groups(text): + return ( + (item.value.name, item.value.value, item.name) + for item in Sectioned.section_pairs(text) + ) def flake8_bypass(func): @@ -259,7 +321,7 @@ def values(self): return super().values() -class SelectableGroups(dict): +class SelectableGroups(Deprecated, dict): """ A backward- and forward-compatible result from entry_points that fully implements the dict interface. @@ -277,7 +339,8 @@ def _all(self): """ Reconstruct a list of all entrypoints from the groups. """ - return EntryPoints(itertools.chain.from_iterable(self.values())) + groups = super(Deprecated, self).values() + return EntryPoints(itertools.chain.from_iterable(groups)) @property def groups(self): @@ -507,24 +570,7 @@ def _read_egg_info_reqs(self): @classmethod def _deps_from_requires_text(cls, source): - section_pairs = cls._read_sections(source.splitlines()) - sections = { - section: list(map(operator.itemgetter('line'), results)) - for section, results in itertools.groupby( - section_pairs, operator.itemgetter('section') - ) - } - return cls._convert_egg_info_reqs_to_simple_reqs(sections) - - @staticmethod - def _read_sections(lines): - section = None - for line in filter(None, lines): - section_match = re.match(r'\[(.*)\]$', line) - if section_match: - section = section_match.group(1) - continue - yield locals() + return cls._convert_egg_info_reqs_to_simple_reqs(Sectioned.read(source)) @staticmethod def _convert_egg_info_reqs_to_simple_reqs(sections): @@ -549,9 +595,8 @@ def parse_condition(section): conditions = list(filter(None, [markers, make_condition(extra)])) return '; ' + ' and '.join(conditions) if conditions else '' - for section, deps in sections.items(): - for dep in deps: - yield dep + parse_condition(section) + for section in sections: + yield section.value + parse_condition(section.name) class DistributionFinder(MetaPathFinder): @@ -607,6 +652,10 @@ class FastPath: children. """ + @functools.lru_cache() # type: ignore + def __new__(cls, root): + return super().__new__(cls) + def __init__(self, root): self.root = root self.base = os.path.basename(self.root).lower() @@ -629,11 +678,53 @@ def zip_children(self): return dict.fromkeys(child.split(posixpath.sep, 1)[0] for child in names) def search(self, name): - return ( - self.joinpath(child) - for child in self.children() - if name.matches(child, self.base) + return self.lookup(self.mtime).search(name) + + @property + def mtime(self): + with suppress(OSError): + return os.stat(self.root).st_mtime + self.lookup.cache_clear() + + @method_cache + def lookup(self, mtime): + return Lookup(self) + + +class Lookup: + def __init__(self, path: FastPath): + base = os.path.basename(path.root).lower() + base_is_egg = base.endswith(".egg") + self.infos = FreezableDefaultDict(list) + self.eggs = FreezableDefaultDict(list) + + for child in path.children(): + low = child.lower() + if low.endswith((".dist-info", ".egg-info")): + # rpartition is faster than splitext and suitable for this purpose. + name = low.rpartition(".")[0].partition("-")[0] + normalized = Prepared.normalize(name) + self.infos[normalized].append(path.joinpath(child)) + elif base_is_egg and low == "egg-info": + name = base.rpartition(".")[0].partition("-")[0] + legacy_normalized = Prepared.legacy_normalize(name) + self.eggs[legacy_normalized].append(path.joinpath(child)) + + self.infos.freeze() + self.eggs.freeze() + + def search(self, prepared): + infos = ( + self.infos[prepared.normalized] + if prepared + else itertools.chain.from_iterable(self.infos.values()) + ) + eggs = ( + self.eggs[prepared.legacy_normalized] + if prepared + else itertools.chain.from_iterable(self.eggs.values()) ) + return itertools.chain(infos, eggs) class Prepared: @@ -642,22 +733,14 @@ class Prepared: """ normalized = None - suffixes = 'dist-info', 'egg-info' - exact_matches = [''][:0] - egg_prefix = '' - versionless_egg_name = '' + legacy_normalized = None def __init__(self, name): self.name = name if name is None: return self.normalized = self.normalize(name) - self.exact_matches = [ - self.normalized + '.' + suffix for suffix in self.suffixes - ] - legacy_normalized = self.legacy_normalize(self.name) - self.egg_prefix = legacy_normalized + '-' - self.versionless_egg_name = legacy_normalized + '.egg' + self.legacy_normalized = self.legacy_normalize(name) @staticmethod def normalize(name): @@ -674,26 +757,8 @@ def legacy_normalize(name): """ return name.lower().replace('-', '_') - def matches(self, cand, base): - low = cand.lower() - # rpartition is faster than splitext and suitable for this purpose. - pre, _, ext = low.rpartition('.') - name, _, rest = pre.partition('-') - return ( - low in self.exact_matches - or ext in self.suffixes - and (not self.normalized or name.replace('.', '_') == self.normalized) - # legacy case: - or self.is_egg(base) - and low == 'egg-info' - ) - - def is_egg(self, base): - return ( - base == self.versionless_egg_name - or base.startswith(self.egg_prefix) - and base.endswith('.egg') - ) + def __bool__(self): + return bool(self.name) class MetadataPathFinder(DistributionFinder): @@ -718,6 +783,9 @@ def _search_paths(cls, name, paths): path.search(prepared) for path in map(FastPath, paths) ) + def invalidate_caches(cls): + FastPath.__new__.cache_clear() + class PathDistribution(Distribution): def __init__(self, path): diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index b50afda0f8f8f..1ae70c70f10a5 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -86,6 +86,10 @@ class DistInfoPkg(OnSysPath, SiteDir): Version: 1.0.0 Requires-Dist: wheel >= 1.0 Requires-Dist: pytest; extra == 'test' + Keywords: sample package + + Once upon a time + There was a distinfo pkg """, "RECORD": "mod.py,sha256=abc,20\n", "entry_points.txt": """ @@ -157,6 +161,9 @@ class EggInfoPkg(OnSysPath, SiteDir): Version: 1.0.0 Classifier: Intended Audience :: Developers Classifier: Topic :: Software Development :: Libraries + Keywords: sample package + Description: Once upon a time + There was an egginfo package """, "SOURCES.txt": """ mod.py diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index b54c3bd098d43..657c16603f668 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -2,6 +2,7 @@ import textwrap import unittest import warnings +import importlib from . import fixtures from importlib.metadata import ( @@ -260,3 +261,9 @@ def test_distribution_at_str(self): dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' dist = Distribution.at(str(dist_info_path)) assert dist.version == '1.0.0' + + +class InvalidateCache(unittest.TestCase): + def test_invalidate_cache(self): + # No externally observable behavior, but ensures test coverage... + importlib.invalidate_caches() diff --git a/Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst b/Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst new file mode 100644 index 0000000000000..3adbe50512bed --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst @@ -0,0 +1,3 @@ +In ``importlib.metadata``, incorporate changes from importlib_metadata 3.10: +Add mtime-based caching during distribution discovery. Flagged use of dict +result from ``entry_points()`` as deprecated. From webhook-mailer at python.org Sat Apr 24 12:21:54 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 24 Apr 2021 16:21:54 -0000 Subject: [Python-checkins] bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25576) Message-ID: https://github.com/python/cpython/commit/196983563d05e32d2dcf217e955a919f9e0c25e1 commit: 196983563d05e32d2dcf217e955a919f9e0c25e1 branch: master author: St?phane Bidoul committer: pfmoore date: 2021-04-24T17:21:50+01:00 summary: bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25576) Update bundled pip to 21.1 and setuptools to 56.0.0 files: A Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl A Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Lib/ensurepip/_bundled/pip-21.0.1-py3-none-any.whl D Lib/ensurepip/_bundled/setuptools-52.0.0-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 0f1df6e8a839d1..93d8ed5bdc8581 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -11,8 +11,8 @@ __all__ = ["version", "bootstrap"] _PACKAGE_NAMES = ('setuptools', 'pip') -_SETUPTOOLS_VERSION = "52.0.0" -_PIP_VERSION = "21.0.1" +_SETUPTOOLS_VERSION = "56.0.0" +_PIP_VERSION = "21.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), ("pip", _PIP_VERSION, "py3"), diff --git a/Lib/ensurepip/_bundled/pip-21.0.1-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.0.1-py3-none-any.whl deleted file mode 100644 index 6d55137b941255..00000000000000 Binary files a/Lib/ensurepip/_bundled/pip-21.0.1-py3-none-any.whl and /dev/null differ diff --git a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl new file mode 100644 index 00000000000000..59395be72f135f Binary files /dev/null and b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl differ diff --git a/Lib/ensurepip/_bundled/setuptools-52.0.0-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl similarity index 91% rename from Lib/ensurepip/_bundled/setuptools-52.0.0-py3-none-any.whl rename to Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl index 9eb776ecfba275..264ef10e826679 100644 Binary files a/Lib/ensurepip/_bundled/setuptools-52.0.0-py3-none-any.whl and b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst new file mode 100644 index 00000000000000..7dac21f3d9b197 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file From webhook-mailer at python.org Sat Apr 24 18:27:48 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 24 Apr 2021 22:27:48 -0000 Subject: [Python-checkins] [3.9] bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25578) Message-ID: https://github.com/python/cpython/commit/d962b00fcffa9070acdca850753f254828caa1d7 commit: d962b00fcffa9070acdca850753f254828caa1d7 branch: 3.9 author: St?phane Bidoul committer: pfmoore date: 2021-04-24T23:27:44+01:00 summary: [3.9] bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25578) (cherry picked from commit 196983563d05e32d2dcf217e955a919f9e0c25e1) files: A Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl A Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl D Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 97dfa7ea71f8ff..783b3232c80fc4 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -13,13 +13,13 @@ __all__ = ["version", "bootstrap"] -_SETUPTOOLS_VERSION = "49.2.1" +_SETUPTOOLS_VERSION = "56.0.0" -_PIP_VERSION = "20.2.3" +_PIP_VERSION = "21.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), - ("pip", _PIP_VERSION, "py2.py3"), + ("pip", _PIP_VERSION, "py3"), ] diff --git a/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl similarity index 51% rename from Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl rename to Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl index 7ebdc0f31d4e3e..59395be72f135f 100644 Binary files a/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl differ diff --git a/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl similarity index 66% rename from Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl rename to Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl index 308e2f2ed5ed9b..264ef10e826679 100644 Binary files a/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl and b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst new file mode 100644 index 00000000000000..7dac21f3d9b197 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file From webhook-mailer at python.org Sat Apr 24 18:28:59 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 24 Apr 2021 22:28:59 -0000 Subject: [Python-checkins] [3.8] bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25576) (GH-25579) Message-ID: https://github.com/python/cpython/commit/fc82f3f8fb36f88a4e7238a463812c2916bd4db0 commit: fc82f3f8fb36f88a4e7238a463812c2916bd4db0 branch: 3.8 author: St?phane Bidoul committer: pfmoore date: 2021-04-24T23:28:55+01:00 summary: [3.8] bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 (GH-25576) (GH-25579) Update bundled pip to 21.1 and setuptools to 56.0.0. (cherry picked from commit 196983563d05e32d2dcf217e955a919f9e0c25e1) Co-authored-by: St?phane Bidoul files: A Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl A Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl D Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 38bb42104b550f..d77987011d3a8b 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -9,14 +9,13 @@ __all__ = ["version", "bootstrap"] +_SETUPTOOLS_VERSION = "56.0.0" -_SETUPTOOLS_VERSION = "49.2.1" - -_PIP_VERSION = "20.2.3" +_PIP_VERSION = "21.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), - ("pip", _PIP_VERSION, "py2.py3"), + ("pip", _PIP_VERSION, "py3"), ] diff --git a/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl similarity index 51% rename from Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl rename to Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl index 7ebdc0f31d4e3e..59395be72f135f 100644 Binary files a/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl differ diff --git a/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl similarity index 66% rename from Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl rename to Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl index 308e2f2ed5ed9b..264ef10e826679 100644 Binary files a/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl and b/Lib/ensurepip/_bundled/setuptools-56.0.0-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst new file mode 100644 index 00000000000000..7dac21f3d9b197 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file From webhook-mailer at python.org Sat Apr 24 22:31:28 2021 From: webhook-mailer at python.org (isidentical) Date: Sun, 25 Apr 2021 02:31:28 -0000 Subject: [Python-checkins] bpo-42737: annotations with complex targets no longer causes any runtime effects (GH-23952) Message-ID: https://github.com/python/cpython/commit/8cc3cfa8afab1651c4f6e9ba43a7ab7f10f64c32 commit: 8cc3cfa8afab1651c4f6e9ba43a7ab7f10f64c32 branch: master author: Batuhan Taskaya committer: isidentical date: 2021-04-25T05:31:20+03:00 summary: bpo-42737: annotations with complex targets no longer causes any runtime effects (GH-23952) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst M Doc/whatsnew/3.10.rst M Lib/test/test_future.py M Python/compile.c diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 78f3c2d36b845..dac44cf03fa32 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -791,6 +791,10 @@ Other Language Changes Moreover, static methods are now callable as regular functions. (Contributed by Victor Stinner in :issue:`43682`.) +* Annotations for complex targets (everything beside ``simple name`` targets + defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``. + (Contributed by Batuhan Taskaya in :issue:`42737`.) + New Modules =========== diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py index e4715587d21cf..8a09853d1f78f 100644 --- a/Lib/test/test_future.py +++ b/Lib/test/test_future.py @@ -134,8 +134,12 @@ async def f2() -> {ann}: ... async def g2(arg: {ann}) -> None: ... + class H: + var: {ann} + object.attr: {ann} var: {ann} var2: {ann} = None + object.attr: {ann} """ ) @@ -343,6 +347,13 @@ def test_infinity_numbers(self): self.assertAnnotationEqual("('inf', 1e1000, 'infxxx', 1e1000j)", expected=f"('inf', {inf}, 'infxxx', {infj})") self.assertAnnotationEqual("(1e1000, (1e1000j,))", expected=f"({inf}, ({infj},))") + def test_annotation_with_complex_target(self): + with self.assertRaises(SyntaxError): + exec( + "from __future__ import annotations\n" + "object.__debug__: int" + ) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst new file mode 100644 index 0000000000000..e55db436896af --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst @@ -0,0 +1,2 @@ +Annotations for complex targets (everything beside simple names) no longer +cause any runtime effects with ``from __future__ import annotations``. diff --git a/Python/compile.c b/Python/compile.c index 1b7a2e83b16ba..2cf2f4a382457 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -5356,6 +5356,12 @@ check_ann_expr(struct compiler *c, expr_ty e) static int check_annotation(struct compiler *c, stmt_ty s) { + /* Annotations of complex targets does not produce anything + under annotations future */ + if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { + return 1; + } + /* Annotations are only evaluated in a module or class. */ if (c->u->u_scope_type == COMPILER_SCOPE_MODULE || c->u->u_scope_type == COMPILER_SCOPE_CLASS) { From webhook-mailer at python.org Sun Apr 25 06:08:02 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 10:08:02 -0000 Subject: [Python-checkins] bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (#25187) Message-ID: https://github.com/python/cpython/commit/3bb3fb3be09d472a43cdc3d9d9578bd49f3dfb8c commit: 3bb3fb3be09d472a43cdc3d9d9578bd49f3dfb8c branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T13:07:58+03:00 summary: bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (#25187) files: A Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst A Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst M Lib/idlelib/config_key.py M Lib/idlelib/query.py M Lib/idlelib/searchbase.py M Lib/tkinter/filedialog.py M Lib/tkinter/simpledialog.py diff --git a/Lib/idlelib/config_key.py b/Lib/idlelib/config_key.py index 7510aa9f3d878..9ca3a156f4b97 100644 --- a/Lib/idlelib/config_key.py +++ b/Lib/idlelib/config_key.py @@ -4,6 +4,7 @@ from tkinter import Toplevel, Listbox, StringVar, TclError from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar from tkinter import messagebox +from tkinter.simpledialog import _setup_dialog import string import sys @@ -63,6 +64,7 @@ def __init__(self, parent, title, action, current_key_sequences, self.resizable(height=False, width=False) self.title(title) self.transient(parent) + _setup_dialog(self) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.cancel) self.parent = parent diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py index 015fc7ade459d..fefa5aac1b7f5 100644 --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -28,6 +28,7 @@ from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton from tkinter import filedialog from tkinter.font import Font +from tkinter.simpledialog import _setup_dialog class Query(Toplevel): """Base class for getting verified answer from a user. @@ -60,13 +61,8 @@ def __init__(self, parent, title, message, *, text0='', used_names={}, if not _utest: # Otherwise fail when directly run unittest. self.grab_set() - windowingsystem = self.tk.call('tk', 'windowingsystem') - if windowingsystem == 'aqua': - try: - self.tk.call('::tk::unsupported::MacWindowStyle', 'style', - self._w, 'moveableModal', '') - except: - pass + _setup_dialog(self) + if self._windowingsystem == 'aqua': self.bind("", self.cancel) self.bind('', self.cancel) self.protocol("WM_DELETE_WINDOW", self.cancel) diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index fbef87aa2d3d0..64ed50c7364be 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -2,6 +2,7 @@ from tkinter import Toplevel from tkinter.ttk import Frame, Entry, Label, Button, Checkbutton, Radiobutton +from tkinter.simpledialog import _setup_dialog class SearchDialogBase: @@ -83,6 +84,7 @@ def create_widgets(self): top.protocol("WM_DELETE_WINDOW", self.close) top.wm_title(self.title) top.wm_iconname(self.icon) + _setup_dialog(top) self.top = top self.frame = Frame(top, padding="5px") self.frame.grid(sticky="nwes") diff --git a/Lib/tkinter/filedialog.py b/Lib/tkinter/filedialog.py index 3ed93eb8c163a..600d0bd49fe2c 100644 --- a/Lib/tkinter/filedialog.py +++ b/Lib/tkinter/filedialog.py @@ -24,6 +24,7 @@ ) from tkinter.dialog import Dialog from tkinter import commondialog +from tkinter.simpledialog import _setup_dialog dialogstates = {} @@ -62,6 +63,7 @@ def __init__(self, master, title=None): self.top = Toplevel(master) self.top.title(title) self.top.iconname(title) + _setup_dialog(self.top) self.botframe = Frame(self.top) self.botframe.pack(side=BOTTOM, fill=X) diff --git a/Lib/tkinter/simpledialog.py b/Lib/tkinter/simpledialog.py index a66fbd6cb9885..538bbfc318d70 100644 --- a/Lib/tkinter/simpledialog.py +++ b/Lib/tkinter/simpledialog.py @@ -40,6 +40,9 @@ def __init__(self, master, if title: self.root.title(title) self.root.iconname(title) + + _setup_dialog(self.root) + self.message = Message(self.root, text=text, aspect=400) self.message.pack(expand=1, fill=BOTH) self.frame = Frame(self.root) @@ -115,6 +118,8 @@ def __init__(self, parent, title = None): if title: self.title(title) + _setup_dialog(self) + self.parent = parent self.result = None @@ -252,6 +257,13 @@ def _place_window(w, parent=None): w.wm_deiconify() # Become visible at the desired location +def _setup_dialog(w): + if w._windowingsystem == "aqua": + w.tk.call("::tk::unsupported::MacWindowStyle", "style", + w, "moveableModal", "") + elif w._windowingsystem == "x11": + w.wm_attributes("-type", "dialog") + # -------------------------------------------------------------------- # convenience dialogues diff --git a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst new file mode 100644 index 0000000000000..105ec9281f005 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst @@ -0,0 +1,2 @@ +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. diff --git a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst new file mode 100644 index 0000000000000..7916d2248b231 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst @@ -0,0 +1,2 @@ +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. From webhook-mailer at python.org Sun Apr 25 06:16:54 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 10:16:54 -0000 Subject: [Python-checkins] bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) Message-ID: https://github.com/python/cpython/commit/b5adc8a7e5c13d175b4d3e53b37bc61de35b1457 commit: b5adc8a7e5c13d175b4d3e53b37bc61de35b1457 branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T13:16:49+03:00 summary: bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) files: A Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 81cfcfe8a7014..11429a62d9477 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -826,7 +826,7 @@ def textinput(self, title, prompt): >>> screen.textinput("NIM", "Name of first player:") """ - return simpledialog.askstring(title, prompt) + return simpledialog.askstring(title, prompt, parent=self.cv) def numinput(self, title, prompt, default=None, minval=None, maxval=None): """Pop up a dialog window for input of a number. @@ -847,7 +847,8 @@ def numinput(self, title, prompt, default=None, minval=None, maxval=None): """ return simpledialog.askfloat(title, prompt, initialvalue=default, - minvalue=minval, maxvalue=maxval) + minvalue=minval, maxvalue=maxval, + parent=self.cv) ############################################################################## diff --git a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst new file mode 100644 index 0000000000000..7f2e5a46add03 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst @@ -0,0 +1,2 @@ +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. From webhook-mailer at python.org Sun Apr 25 06:38:06 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 10:38:06 -0000 Subject: [Python-checkins] bpo-42609: Check recursion depth in the AST validator and optimizer (GH-23744) Message-ID: https://github.com/python/cpython/commit/face87c94e67ad9c72b9a3724f112fd76c1002b9 commit: face87c94e67ad9c72b9a3724f112fd76c1002b9 branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T13:38:00+03:00 summary: bpo-42609: Check recursion depth in the AST validator and optimizer (GH-23744) files: A Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst M Include/internal/pycore_compile.h M Lib/test/test_compile.py M Python/ast.c M Python/ast_opt.c diff --git a/Include/internal/pycore_compile.h b/Include/internal/pycore_compile.h index e8859bbec6daa..06a6082cddae6 100644 --- a/Include/internal/pycore_compile.h +++ b/Include/internal/pycore_compile.h @@ -28,6 +28,9 @@ extern PyObject* _Py_Mangle(PyObject *p, PyObject *name); typedef struct { int optimize; int ff_features; + + int recursion_depth; /* current recursion depth */ + int recursion_limit; /* recursion limit */ } _PyASTOptimizeState; extern int _PyAST_Optimize( diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index fd1ef612fd613..d40347c3c6bb3 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -543,21 +543,26 @@ def test_compiler_recursion_limit(self): # XXX (ncoghlan): duplicating the scaling factor here is a little # ugly. Perhaps it should be exposed somewhere... fail_depth = sys.getrecursionlimit() * 3 + crash_depth = sys.getrecursionlimit() * 300 success_depth = int(fail_depth * 0.75) - def check_limit(prefix, repeated): + def check_limit(prefix, repeated, mode="single"): expect_ok = prefix + repeated * success_depth - self.compile_single(expect_ok) - broken = prefix + repeated * fail_depth - details = "Compiling ({!r} + {!r} * {})".format( - prefix, repeated, fail_depth) - with self.assertRaises(RecursionError, msg=details): - self.compile_single(broken) + compile(expect_ok, '', mode) + for depth in (fail_depth, crash_depth): + broken = prefix + repeated * depth + details = "Compiling ({!r} + {!r} * {})".format( + prefix, repeated, depth) + with self.assertRaises(RecursionError, msg=details): + compile(broken, '', mode) check_limit("a", "()") check_limit("a", ".b") check_limit("a", "[0]") check_limit("a", "*a") + # XXX Crashes in the parser. + # check_limit("a", " if a else a") + # check_limit("if a: pass", "\nelif a: pass", mode="exec") def test_null_terminated(self): # The source code is null-terminated internally, but bytes-like diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst b/Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst new file mode 100644 index 0000000000000..d2b0c641b2ecc --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst @@ -0,0 +1,3 @@ +Prevented crashes in the AST validator and optimizer when compiling some +absurdly long expressions like ``"+0"*1000000``. :exc:`RecursionError` is +now raised instead. diff --git a/Python/ast.c b/Python/ast.c index c87795305e507..2b965434ef461 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -4,14 +4,20 @@ */ #include "Python.h" #include "pycore_ast.h" // asdl_stmt_seq +#include "pycore_pystate.h" // _PyThreadState_GET() #include -static int validate_stmts(asdl_stmt_seq *); -static int validate_exprs(asdl_expr_seq*, expr_context_ty, int); +struct validator { + int recursion_depth; /* current recursion depth */ + int recursion_limit; /* recursion limit */ +}; + +static int validate_stmts(struct validator *, asdl_stmt_seq *); +static int validate_exprs(struct validator *, asdl_expr_seq*, expr_context_ty, int); static int _validate_nonempty_seq(asdl_seq *, const char *, const char *); -static int validate_stmt(stmt_ty); -static int validate_expr(expr_ty, expr_context_ty); +static int validate_stmt(struct validator *, stmt_ty); +static int validate_expr(struct validator *, expr_ty, expr_context_ty); static int validate_name(PyObject *name) @@ -33,7 +39,7 @@ validate_name(PyObject *name) } static int -validate_comprehension(asdl_comprehension_seq *gens) +validate_comprehension(struct validator *state, asdl_comprehension_seq *gens) { Py_ssize_t i; if (!asdl_seq_LEN(gens)) { @@ -42,31 +48,31 @@ validate_comprehension(asdl_comprehension_seq *gens) } for (i = 0; i < asdl_seq_LEN(gens); i++) { comprehension_ty comp = asdl_seq_GET(gens, i); - if (!validate_expr(comp->target, Store) || - !validate_expr(comp->iter, Load) || - !validate_exprs(comp->ifs, Load, 0)) + if (!validate_expr(state, comp->target, Store) || + !validate_expr(state, comp->iter, Load) || + !validate_exprs(state, comp->ifs, Load, 0)) return 0; } return 1; } static int -validate_keywords(asdl_keyword_seq *keywords) +validate_keywords(struct validator *state, asdl_keyword_seq *keywords) { Py_ssize_t i; for (i = 0; i < asdl_seq_LEN(keywords); i++) - if (!validate_expr((asdl_seq_GET(keywords, i))->value, Load)) + if (!validate_expr(state, (asdl_seq_GET(keywords, i))->value, Load)) return 0; return 1; } static int -validate_args(asdl_arg_seq *args) +validate_args(struct validator *state, asdl_arg_seq *args) { Py_ssize_t i; for (i = 0; i < asdl_seq_LEN(args); i++) { arg_ty arg = asdl_seq_GET(args, i); - if (arg->annotation && !validate_expr(arg->annotation, Load)) + if (arg->annotation && !validate_expr(state, arg->annotation, Load)) return 0; } return 1; @@ -88,19 +94,19 @@ expr_context_name(expr_context_ty ctx) } static int -validate_arguments(arguments_ty args) +validate_arguments(struct validator *state, arguments_ty args) { - if (!validate_args(args->posonlyargs) || !validate_args(args->args)) { + if (!validate_args(state, args->posonlyargs) || !validate_args(state, args->args)) { return 0; } if (args->vararg && args->vararg->annotation - && !validate_expr(args->vararg->annotation, Load)) { + && !validate_expr(state, args->vararg->annotation, Load)) { return 0; } - if (!validate_args(args->kwonlyargs)) + if (!validate_args(state, args->kwonlyargs)) return 0; if (args->kwarg && args->kwarg->annotation - && !validate_expr(args->kwarg->annotation, Load)) { + && !validate_expr(state, args->kwarg->annotation, Load)) { return 0; } if (asdl_seq_LEN(args->defaults) > asdl_seq_LEN(args->posonlyargs) + asdl_seq_LEN(args->args)) { @@ -112,11 +118,11 @@ validate_arguments(arguments_ty args) "kw_defaults on arguments"); return 0; } - return validate_exprs(args->defaults, Load, 0) && validate_exprs(args->kw_defaults, Load, 1); + return validate_exprs(state, args->defaults, Load, 0) && validate_exprs(state, args->kw_defaults, Load, 1); } static int -validate_constant(PyObject *value) +validate_constant(struct validator *state, PyObject *value) { if (value == Py_None || value == Py_Ellipsis) return 1; @@ -130,9 +136,13 @@ validate_constant(PyObject *value) return 1; if (PyTuple_CheckExact(value) || PyFrozenSet_CheckExact(value)) { - PyObject *it; + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } - it = PyObject_GetIter(value); + PyObject *it = PyObject_GetIter(value); if (it == NULL) return 0; @@ -146,7 +156,7 @@ validate_constant(PyObject *value) break; } - if (!validate_constant(item)) { + if (!validate_constant(state, item)) { Py_DECREF(it); Py_DECREF(item); return 0; @@ -155,6 +165,7 @@ validate_constant(PyObject *value) } Py_DECREF(it); + --state->recursion_depth; return 1; } @@ -167,8 +178,14 @@ validate_constant(PyObject *value) } static int -validate_expr(expr_ty exp, expr_context_ty ctx) +validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx) { + int ret; + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } int check_ctx = 1; expr_context_ty actual_ctx; @@ -218,19 +235,24 @@ validate_expr(expr_ty exp, expr_context_ty ctx) PyErr_SetString(PyExc_ValueError, "BoolOp with less than 2 values"); return 0; } - return validate_exprs(exp->v.BoolOp.values, Load, 0); + ret = validate_exprs(state, exp->v.BoolOp.values, Load, 0); + break; case BinOp_kind: - return validate_expr(exp->v.BinOp.left, Load) && - validate_expr(exp->v.BinOp.right, Load); + ret = validate_expr(state, exp->v.BinOp.left, Load) && + validate_expr(state, exp->v.BinOp.right, Load); + break; case UnaryOp_kind: - return validate_expr(exp->v.UnaryOp.operand, Load); + ret = validate_expr(state, exp->v.UnaryOp.operand, Load); + break; case Lambda_kind: - return validate_arguments(exp->v.Lambda.args) && - validate_expr(exp->v.Lambda.body, Load); + ret = validate_arguments(state, exp->v.Lambda.args) && + validate_expr(state, exp->v.Lambda.body, Load); + break; case IfExp_kind: - return validate_expr(exp->v.IfExp.test, Load) && - validate_expr(exp->v.IfExp.body, Load) && - validate_expr(exp->v.IfExp.orelse, Load); + ret = validate_expr(state, exp->v.IfExp.test, Load) && + validate_expr(state, exp->v.IfExp.body, Load) && + validate_expr(state, exp->v.IfExp.orelse, Load); + break; case Dict_kind: if (asdl_seq_LEN(exp->v.Dict.keys) != asdl_seq_LEN(exp->v.Dict.values)) { PyErr_SetString(PyExc_ValueError, @@ -239,28 +261,35 @@ validate_expr(expr_ty exp, expr_context_ty ctx) } /* null_ok=1 for keys expressions to allow dict unpacking to work in dict literals, i.e. ``{**{a:b}}`` */ - return validate_exprs(exp->v.Dict.keys, Load, /*null_ok=*/ 1) && - validate_exprs(exp->v.Dict.values, Load, /*null_ok=*/ 0); + ret = validate_exprs(state, exp->v.Dict.keys, Load, /*null_ok=*/ 1) && + validate_exprs(state, exp->v.Dict.values, Load, /*null_ok=*/ 0); + break; case Set_kind: - return validate_exprs(exp->v.Set.elts, Load, 0); + ret = validate_exprs(state, exp->v.Set.elts, Load, 0); + break; #define COMP(NAME) \ case NAME ## _kind: \ - return validate_comprehension(exp->v.NAME.generators) && \ - validate_expr(exp->v.NAME.elt, Load); + ret = validate_comprehension(state, exp->v.NAME.generators) && \ + validate_expr(state, exp->v.NAME.elt, Load); \ + break; COMP(ListComp) COMP(SetComp) COMP(GeneratorExp) #undef COMP case DictComp_kind: - return validate_comprehension(exp->v.DictComp.generators) && - validate_expr(exp->v.DictComp.key, Load) && - validate_expr(exp->v.DictComp.value, Load); + ret = validate_comprehension(state, exp->v.DictComp.generators) && + validate_expr(state, exp->v.DictComp.key, Load) && + validate_expr(state, exp->v.DictComp.value, Load); + break; case Yield_kind: - return !exp->v.Yield.value || validate_expr(exp->v.Yield.value, Load); + ret = !exp->v.Yield.value || validate_expr(state, exp->v.Yield.value, Load); + break; case YieldFrom_kind: - return validate_expr(exp->v.YieldFrom.value, Load); + ret = validate_expr(state, exp->v.YieldFrom.value, Load); + break; case Await_kind: - return validate_expr(exp->v.Await.value, Load); + ret = validate_expr(state, exp->v.Await.value, Load); + break; case Compare_kind: if (!asdl_seq_LEN(exp->v.Compare.comparators)) { PyErr_SetString(PyExc_ValueError, "Compare with no comparators"); @@ -272,42 +301,56 @@ validate_expr(expr_ty exp, expr_context_ty ctx) "of comparators and operands"); return 0; } - return validate_exprs(exp->v.Compare.comparators, Load, 0) && - validate_expr(exp->v.Compare.left, Load); + ret = validate_exprs(state, exp->v.Compare.comparators, Load, 0) && + validate_expr(state, exp->v.Compare.left, Load); + break; case Call_kind: - return validate_expr(exp->v.Call.func, Load) && - validate_exprs(exp->v.Call.args, Load, 0) && - validate_keywords(exp->v.Call.keywords); + ret = validate_expr(state, exp->v.Call.func, Load) && + validate_exprs(state, exp->v.Call.args, Load, 0) && + validate_keywords(state, exp->v.Call.keywords); + break; case Constant_kind: - if (!validate_constant(exp->v.Constant.value)) { + if (!validate_constant(state, exp->v.Constant.value)) { return 0; } - return 1; + ret = 1; + break; case JoinedStr_kind: - return validate_exprs(exp->v.JoinedStr.values, Load, 0); + ret = validate_exprs(state, exp->v.JoinedStr.values, Load, 0); + break; case FormattedValue_kind: - if (validate_expr(exp->v.FormattedValue.value, Load) == 0) + if (validate_expr(state, exp->v.FormattedValue.value, Load) == 0) return 0; - if (exp->v.FormattedValue.format_spec) - return validate_expr(exp->v.FormattedValue.format_spec, Load); - return 1; + if (exp->v.FormattedValue.format_spec) { + ret = validate_expr(state, exp->v.FormattedValue.format_spec, Load); + break; + } + ret = 1; + break; case Attribute_kind: - return validate_expr(exp->v.Attribute.value, Load); + ret = validate_expr(state, exp->v.Attribute.value, Load); + break; case Subscript_kind: - return validate_expr(exp->v.Subscript.slice, Load) && - validate_expr(exp->v.Subscript.value, Load); + ret = validate_expr(state, exp->v.Subscript.slice, Load) && + validate_expr(state, exp->v.Subscript.value, Load); + break; case Starred_kind: - return validate_expr(exp->v.Starred.value, ctx); + ret = validate_expr(state, exp->v.Starred.value, ctx); + break; case Slice_kind: - return (!exp->v.Slice.lower || validate_expr(exp->v.Slice.lower, Load)) && - (!exp->v.Slice.upper || validate_expr(exp->v.Slice.upper, Load)) && - (!exp->v.Slice.step || validate_expr(exp->v.Slice.step, Load)); + ret = (!exp->v.Slice.lower || validate_expr(state, exp->v.Slice.lower, Load)) && + (!exp->v.Slice.upper || validate_expr(state, exp->v.Slice.upper, Load)) && + (!exp->v.Slice.step || validate_expr(state, exp->v.Slice.step, Load)); + break; case List_kind: - return validate_exprs(exp->v.List.elts, ctx, 0); + ret = validate_exprs(state, exp->v.List.elts, ctx, 0); + break; case Tuple_kind: - return validate_exprs(exp->v.Tuple.elts, ctx, 0); + ret = validate_exprs(state, exp->v.Tuple.elts, ctx, 0); + break; case NamedExpr_kind: - return validate_expr(exp->v.NamedExpr.value, Load); + ret = validate_expr(state, exp->v.NamedExpr.value, Load); + break; case MatchAs_kind: PyErr_SetString(PyExc_ValueError, "MatchAs is only valid in match_case patterns"); @@ -318,10 +361,14 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return 0; /* This last case doesn't have any checking. */ case Name_kind: - return 1; + ret = 1; + break; + default: + PyErr_SetString(PyExc_SystemError, "unexpected expression"); + return 0; } - PyErr_SetString(PyExc_SystemError, "unexpected expression"); - return 0; + state->recursion_depth--; + return ret; } static int @@ -342,44 +389,56 @@ _validate_nonempty_seq(asdl_seq *seq, const char *what, const char *owner) #define validate_nonempty_seq(seq, what, owner) _validate_nonempty_seq((asdl_seq*)seq, what, owner) static int -validate_assignlist(asdl_expr_seq *targets, expr_context_ty ctx) +validate_assignlist(struct validator *state, asdl_expr_seq *targets, expr_context_ty ctx) { return validate_nonempty_seq(targets, "targets", ctx == Del ? "Delete" : "Assign") && - validate_exprs(targets, ctx, 0); + validate_exprs(state, targets, ctx, 0); } static int -validate_body(asdl_stmt_seq *body, const char *owner) +validate_body(struct validator *state, asdl_stmt_seq *body, const char *owner) { - return validate_nonempty_seq(body, "body", owner) && validate_stmts(body); + return validate_nonempty_seq(body, "body", owner) && validate_stmts(state, body); } static int -validate_stmt(stmt_ty stmt) +validate_stmt(struct validator *state, stmt_ty stmt) { + int ret; Py_ssize_t i; + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } switch (stmt->kind) { case FunctionDef_kind: - return validate_body(stmt->v.FunctionDef.body, "FunctionDef") && - validate_arguments(stmt->v.FunctionDef.args) && - validate_exprs(stmt->v.FunctionDef.decorator_list, Load, 0) && + ret = validate_body(state, stmt->v.FunctionDef.body, "FunctionDef") && + validate_arguments(state, stmt->v.FunctionDef.args) && + validate_exprs(state, stmt->v.FunctionDef.decorator_list, Load, 0) && (!stmt->v.FunctionDef.returns || - validate_expr(stmt->v.FunctionDef.returns, Load)); + validate_expr(state, stmt->v.FunctionDef.returns, Load)); + break; case ClassDef_kind: - return validate_body(stmt->v.ClassDef.body, "ClassDef") && - validate_exprs(stmt->v.ClassDef.bases, Load, 0) && - validate_keywords(stmt->v.ClassDef.keywords) && - validate_exprs(stmt->v.ClassDef.decorator_list, Load, 0); + ret = validate_body(state, stmt->v.ClassDef.body, "ClassDef") && + validate_exprs(state, stmt->v.ClassDef.bases, Load, 0) && + validate_keywords(state, stmt->v.ClassDef.keywords) && + validate_exprs(state, stmt->v.ClassDef.decorator_list, Load, 0); + break; case Return_kind: - return !stmt->v.Return.value || validate_expr(stmt->v.Return.value, Load); + ret = !stmt->v.Return.value || validate_expr(state, stmt->v.Return.value, Load); + break; case Delete_kind: - return validate_assignlist(stmt->v.Delete.targets, Del); + ret = validate_assignlist(state, stmt->v.Delete.targets, Del); + break; case Assign_kind: - return validate_assignlist(stmt->v.Assign.targets, Store) && - validate_expr(stmt->v.Assign.value, Load); + ret = validate_assignlist(state, stmt->v.Assign.targets, Store) && + validate_expr(state, stmt->v.Assign.value, Load); + break; case AugAssign_kind: - return validate_expr(stmt->v.AugAssign.target, Store) && - validate_expr(stmt->v.AugAssign.value, Load); + ret = validate_expr(state, stmt->v.AugAssign.target, Store) && + validate_expr(state, stmt->v.AugAssign.value, Load); + break; case AnnAssign_kind: if (stmt->v.AnnAssign.target->kind != Name_kind && stmt->v.AnnAssign.simple) { @@ -387,74 +446,84 @@ validate_stmt(stmt_ty stmt) "AnnAssign with simple non-Name target"); return 0; } - return validate_expr(stmt->v.AnnAssign.target, Store) && + ret = validate_expr(state, stmt->v.AnnAssign.target, Store) && (!stmt->v.AnnAssign.value || - validate_expr(stmt->v.AnnAssign.value, Load)) && - validate_expr(stmt->v.AnnAssign.annotation, Load); + validate_expr(state, stmt->v.AnnAssign.value, Load)) && + validate_expr(state, stmt->v.AnnAssign.annotation, Load); + break; case For_kind: - return validate_expr(stmt->v.For.target, Store) && - validate_expr(stmt->v.For.iter, Load) && - validate_body(stmt->v.For.body, "For") && - validate_stmts(stmt->v.For.orelse); + ret = validate_expr(state, stmt->v.For.target, Store) && + validate_expr(state, stmt->v.For.iter, Load) && + validate_body(state, stmt->v.For.body, "For") && + validate_stmts(state, stmt->v.For.orelse); + break; case AsyncFor_kind: - return validate_expr(stmt->v.AsyncFor.target, Store) && - validate_expr(stmt->v.AsyncFor.iter, Load) && - validate_body(stmt->v.AsyncFor.body, "AsyncFor") && - validate_stmts(stmt->v.AsyncFor.orelse); + ret = validate_expr(state, stmt->v.AsyncFor.target, Store) && + validate_expr(state, stmt->v.AsyncFor.iter, Load) && + validate_body(state, stmt->v.AsyncFor.body, "AsyncFor") && + validate_stmts(state, stmt->v.AsyncFor.orelse); + break; case While_kind: - return validate_expr(stmt->v.While.test, Load) && - validate_body(stmt->v.While.body, "While") && - validate_stmts(stmt->v.While.orelse); + ret = validate_expr(state, stmt->v.While.test, Load) && + validate_body(state, stmt->v.While.body, "While") && + validate_stmts(state, stmt->v.While.orelse); + break; case If_kind: - return validate_expr(stmt->v.If.test, Load) && - validate_body(stmt->v.If.body, "If") && - validate_stmts(stmt->v.If.orelse); + ret = validate_expr(state, stmt->v.If.test, Load) && + validate_body(state, stmt->v.If.body, "If") && + validate_stmts(state, stmt->v.If.orelse); + break; case With_kind: if (!validate_nonempty_seq(stmt->v.With.items, "items", "With")) return 0; for (i = 0; i < asdl_seq_LEN(stmt->v.With.items); i++) { withitem_ty item = asdl_seq_GET(stmt->v.With.items, i); - if (!validate_expr(item->context_expr, Load) || - (item->optional_vars && !validate_expr(item->optional_vars, Store))) + if (!validate_expr(state, item->context_expr, Load) || + (item->optional_vars && !validate_expr(state, item->optional_vars, Store))) return 0; } - return validate_body(stmt->v.With.body, "With"); + ret = validate_body(state, stmt->v.With.body, "With"); + break; case AsyncWith_kind: if (!validate_nonempty_seq(stmt->v.AsyncWith.items, "items", "AsyncWith")) return 0; for (i = 0; i < asdl_seq_LEN(stmt->v.AsyncWith.items); i++) { withitem_ty item = asdl_seq_GET(stmt->v.AsyncWith.items, i); - if (!validate_expr(item->context_expr, Load) || - (item->optional_vars && !validate_expr(item->optional_vars, Store))) + if (!validate_expr(state, item->context_expr, Load) || + (item->optional_vars && !validate_expr(state, item->optional_vars, Store))) return 0; } - return validate_body(stmt->v.AsyncWith.body, "AsyncWith"); + ret = validate_body(state, stmt->v.AsyncWith.body, "AsyncWith"); + break; case Match_kind: - if (!validate_expr(stmt->v.Match.subject, Load) + if (!validate_expr(state, stmt->v.Match.subject, Load) || !validate_nonempty_seq(stmt->v.Match.cases, "cases", "Match")) { return 0; } for (i = 0; i < asdl_seq_LEN(stmt->v.Match.cases); i++) { match_case_ty m = asdl_seq_GET(stmt->v.Match.cases, i); if (!validate_pattern(m->pattern) - || (m->guard && !validate_expr(m->guard, Load)) - || !validate_body(m->body, "match_case")) { + || (m->guard && !validate_expr(state, m->guard, Load)) + || !validate_body(state, m->body, "match_case")) { return 0; } } - return 1; + ret = 1; + break; case Raise_kind: if (stmt->v.Raise.exc) { - return validate_expr(stmt->v.Raise.exc, Load) && - (!stmt->v.Raise.cause || validate_expr(stmt->v.Raise.cause, Load)); + ret = validate_expr(state, stmt->v.Raise.exc, Load) && + (!stmt->v.Raise.cause || validate_expr(state, stmt->v.Raise.cause, Load)); + break; } if (stmt->v.Raise.cause) { PyErr_SetString(PyExc_ValueError, "Raise with cause but no exception"); return 0; } - return 1; + ret = 1; + break; case Try_kind: - if (!validate_body(stmt->v.Try.body, "Try")) + if (!validate_body(state, stmt->v.Try.body, "Try")) return 0; if (!asdl_seq_LEN(stmt->v.Try.handlers) && !asdl_seq_LEN(stmt->v.Try.finalbody)) { @@ -469,55 +538,66 @@ validate_stmt(stmt_ty stmt) for (i = 0; i < asdl_seq_LEN(stmt->v.Try.handlers); i++) { excepthandler_ty handler = asdl_seq_GET(stmt->v.Try.handlers, i); if ((handler->v.ExceptHandler.type && - !validate_expr(handler->v.ExceptHandler.type, Load)) || - !validate_body(handler->v.ExceptHandler.body, "ExceptHandler")) + !validate_expr(state, handler->v.ExceptHandler.type, Load)) || + !validate_body(state, handler->v.ExceptHandler.body, "ExceptHandler")) return 0; } - return (!asdl_seq_LEN(stmt->v.Try.finalbody) || - validate_stmts(stmt->v.Try.finalbody)) && + ret = (!asdl_seq_LEN(stmt->v.Try.finalbody) || + validate_stmts(state, stmt->v.Try.finalbody)) && (!asdl_seq_LEN(stmt->v.Try.orelse) || - validate_stmts(stmt->v.Try.orelse)); + validate_stmts(state, stmt->v.Try.orelse)); + break; case Assert_kind: - return validate_expr(stmt->v.Assert.test, Load) && - (!stmt->v.Assert.msg || validate_expr(stmt->v.Assert.msg, Load)); + ret = validate_expr(state, stmt->v.Assert.test, Load) && + (!stmt->v.Assert.msg || validate_expr(state, stmt->v.Assert.msg, Load)); + break; case Import_kind: - return validate_nonempty_seq(stmt->v.Import.names, "names", "Import"); + ret = validate_nonempty_seq(stmt->v.Import.names, "names", "Import"); + break; case ImportFrom_kind: if (stmt->v.ImportFrom.level < 0) { PyErr_SetString(PyExc_ValueError, "Negative ImportFrom level"); return 0; } - return validate_nonempty_seq(stmt->v.ImportFrom.names, "names", "ImportFrom"); + ret = validate_nonempty_seq(stmt->v.ImportFrom.names, "names", "ImportFrom"); + break; case Global_kind: - return validate_nonempty_seq(stmt->v.Global.names, "names", "Global"); + ret = validate_nonempty_seq(stmt->v.Global.names, "names", "Global"); + break; case Nonlocal_kind: - return validate_nonempty_seq(stmt->v.Nonlocal.names, "names", "Nonlocal"); + ret = validate_nonempty_seq(stmt->v.Nonlocal.names, "names", "Nonlocal"); + break; case Expr_kind: - return validate_expr(stmt->v.Expr.value, Load); + ret = validate_expr(state, stmt->v.Expr.value, Load); + break; case AsyncFunctionDef_kind: - return validate_body(stmt->v.AsyncFunctionDef.body, "AsyncFunctionDef") && - validate_arguments(stmt->v.AsyncFunctionDef.args) && - validate_exprs(stmt->v.AsyncFunctionDef.decorator_list, Load, 0) && + ret = validate_body(state, stmt->v.AsyncFunctionDef.body, "AsyncFunctionDef") && + validate_arguments(state, stmt->v.AsyncFunctionDef.args) && + validate_exprs(state, stmt->v.AsyncFunctionDef.decorator_list, Load, 0) && (!stmt->v.AsyncFunctionDef.returns || - validate_expr(stmt->v.AsyncFunctionDef.returns, Load)); + validate_expr(state, stmt->v.AsyncFunctionDef.returns, Load)); + break; case Pass_kind: case Break_kind: case Continue_kind: - return 1; + ret = 1; + break; default: PyErr_SetString(PyExc_SystemError, "unexpected statement"); return 0; } + state->recursion_depth--; + return ret; } static int -validate_stmts(asdl_stmt_seq *seq) +validate_stmts(struct validator *state, asdl_stmt_seq *seq) { Py_ssize_t i; for (i = 0; i < asdl_seq_LEN(seq); i++) { stmt_ty stmt = asdl_seq_GET(seq, i); if (stmt) { - if (!validate_stmt(stmt)) + if (!validate_stmt(state, stmt)) return 0; } else { @@ -530,13 +610,13 @@ validate_stmts(asdl_stmt_seq *seq) } static int -validate_exprs(asdl_expr_seq *exprs, expr_context_ty ctx, int null_ok) +validate_exprs(struct validator *state, asdl_expr_seq *exprs, expr_context_ty ctx, int null_ok) { Py_ssize_t i; for (i = 0; i < asdl_seq_LEN(exprs); i++) { expr_ty expr = asdl_seq_GET(exprs, i); if (expr) { - if (!validate_expr(expr, ctx)) + if (!validate_expr(state, expr, ctx)) return 0; } else if (!null_ok) { @@ -549,26 +629,53 @@ validate_exprs(asdl_expr_seq *exprs, expr_context_ty ctx, int null_ok) return 1; } +/* See comments in symtable.c. */ +#define COMPILER_STACK_FRAME_SCALE 3 + int _PyAST_Validate(mod_ty mod) { int res = 0; + struct validator state; + PyThreadState *tstate; + int recursion_limit = Py_GetRecursionLimit(); + int starting_recursion_depth; + + /* Setup recursion depth check counters */ + tstate = _PyThreadState_GET(); + if (!tstate) { + return 0; + } + /* Be careful here to prevent overflow. */ + starting_recursion_depth = (tstate->recursion_depth < INT_MAX / COMPILER_STACK_FRAME_SCALE) ? + tstate->recursion_depth * COMPILER_STACK_FRAME_SCALE : tstate->recursion_depth; + state.recursion_depth = starting_recursion_depth; + state.recursion_limit = (recursion_limit < INT_MAX / COMPILER_STACK_FRAME_SCALE) ? + recursion_limit * COMPILER_STACK_FRAME_SCALE : recursion_limit; switch (mod->kind) { case Module_kind: - res = validate_stmts(mod->v.Module.body); + res = validate_stmts(&state, mod->v.Module.body); break; case Interactive_kind: - res = validate_stmts(mod->v.Interactive.body); + res = validate_stmts(&state, mod->v.Interactive.body); break; case Expression_kind: - res = validate_expr(mod->v.Expression.body, Load); + res = validate_expr(&state, mod->v.Expression.body, Load); break; default: PyErr_SetString(PyExc_SystemError, "impossible module node"); res = 0; break; } + + /* Check that the recursion depth counting balanced correctly */ + if (res && state.recursion_depth != starting_recursion_depth) { + PyErr_Format(PyExc_SystemError, + "AST validator recursion depth mismatch (before=%d, after=%d)", + starting_recursion_depth, state.recursion_depth); + return 0; + } return res; } diff --git a/Python/ast_opt.c b/Python/ast_opt.c index dea20da07e69d..6eb514e24f9d7 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -2,6 +2,7 @@ #include "Python.h" #include "pycore_ast.h" // _PyAST_GetDocString() #include "pycore_compile.h" // _PyASTOptimizeState +#include "pycore_pystate.h" // _PyThreadState_GET() static int @@ -488,6 +489,11 @@ astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } switch (node_->kind) { case BoolOp_kind: CALL_SEQ(astfold_expr, expr, node_->v.BoolOp.values); @@ -586,6 +592,7 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) case Name_kind: if (node_->v.Name.ctx == Load && _PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) { + state->recursion_depth--; return make_const(node_, PyBool_FromLong(!state->optimize), ctx_); } break; @@ -602,6 +609,7 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) // No default case, so the compiler will emit a warning if new expression // kinds are added without being handled here } + state->recursion_depth--; return 1; } @@ -648,6 +656,11 @@ astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } switch (node_->kind) { case FunctionDef_kind: CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args); @@ -757,6 +770,7 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) // No default case, so the compiler will emit a warning if new statement // kinds are added without being handled here } + state->recursion_depth--; return 1; } @@ -906,10 +920,38 @@ astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *stat #undef CALL_SEQ #undef CALL_INT_SEQ +/* See comments in symtable.c. */ +#define COMPILER_STACK_FRAME_SCALE 3 + int _PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state) { + PyThreadState *tstate; + int recursion_limit = Py_GetRecursionLimit(); + int starting_recursion_depth; + + /* Setup recursion depth check counters */ + tstate = _PyThreadState_GET(); + if (!tstate) { + return 0; + } + /* Be careful here to prevent overflow. */ + starting_recursion_depth = (tstate->recursion_depth < INT_MAX / COMPILER_STACK_FRAME_SCALE) ? + tstate->recursion_depth * COMPILER_STACK_FRAME_SCALE : tstate->recursion_depth; + state->recursion_depth = starting_recursion_depth; + state->recursion_limit = (recursion_limit < INT_MAX / COMPILER_STACK_FRAME_SCALE) ? + recursion_limit * COMPILER_STACK_FRAME_SCALE : recursion_limit; + int ret = astfold_mod(mod, arena, state); assert(ret || PyErr_Occurred()); + + /* Check that the recursion depth counting balanced correctly */ + if (ret && state->recursion_depth != starting_recursion_depth) { + PyErr_Format(PyExc_SystemError, + "AST optimizer recursion depth mismatch (before=%d, after=%d)", + starting_recursion_depth, state->recursion_depth); + return 0; + } + return ret; } From webhook-mailer at python.org Sun Apr 25 06:40:52 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 10:40:52 -0000 Subject: [Python-checkins] bpo-39529: Deprecate creating new event loop in asyncio.get_event_loop() (GH-23554) Message-ID: https://github.com/python/cpython/commit/172c0f2752d8708b6dda7b42e6c5a3519420a4e8 commit: 172c0f2752d8708b6dda7b42e6c5a3519420a4e8 branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T13:40:44+03:00 summary: bpo-39529: Deprecate creating new event loop in asyncio.get_event_loop() (GH-23554) asyncio.get_event_loop() emits now a deprecation warning when it creates a new event loop. In future releases it will became an alias of asyncio.get_running_loop(). files: A Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst M Doc/library/asyncio-eventloop.rst M Doc/library/asyncio-future.rst M Doc/library/asyncio-task.rst M Doc/whatsnew/3.10.rst M Lib/asyncio/events.py M Lib/asyncio/futures.py M Lib/asyncio/streams.py M Lib/asyncio/tasks.py M Lib/test/test_asyncio/test_events.py M Lib/test/test_asyncio/test_futures.py M Lib/test/test_asyncio/test_queues.py M Lib/test/test_asyncio/test_streams.py M Lib/test/test_asyncio/test_tasks.py M Modules/_asynciomodule.c M Modules/clinic/_asynciomodule.c.h diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst index 7de5a0ab2595c..ca91efec260db 100644 --- a/Doc/library/asyncio-eventloop.rst +++ b/Doc/library/asyncio-eventloop.rst @@ -53,6 +53,11 @@ an event loop: Consider also using the :func:`asyncio.run` function instead of using lower level functions to manually create and close an event loop. + .. deprecated:: 3.10 + Deprecation warning is emitted if there is no running event loop. + If future Python releases this function will be an alias of + :func:`get_running_loop`. + .. function:: set_event_loop(loop) Set *loop* as a current event loop for the current OS thread. diff --git a/Doc/library/asyncio-future.rst b/Doc/library/asyncio-future.rst index 939d4c1a84523..ef496a23f5cd4 100644 --- a/Doc/library/asyncio-future.rst +++ b/Doc/library/asyncio-future.rst @@ -57,12 +57,20 @@ Future Functions .. versionchanged:: 3.5.1 The function accepts any :term:`awaitable` object. + .. deprecated:: 3.10 + Deprecation warning is emitted if *obj* is not a Future-like object + and *loop* is not specified and there is no running event loop. + .. function:: wrap_future(future, *, loop=None) Wrap a :class:`concurrent.futures.Future` object in a :class:`asyncio.Future` object. + .. deprecated:: 3.10 + Deprecation warning is emitted if *future* is not a Future-like object + and *loop* is not specified and there is no running event loop. + Future Object ============= @@ -90,6 +98,10 @@ Future Object .. versionchanged:: 3.7 Added support for the :mod:`contextvars` module. + .. deprecated:: 3.10 + Deprecation warning is emitted if *loop* is not specified + and there is no running event loop. + .. method:: result() Return the result of the Future. diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 1ca1b4a06d7e8..3f54ecb08efc1 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -397,6 +397,11 @@ Running Tasks Concurrently If the *gather* itself is cancelled, the cancellation is propagated regardless of *return_exceptions*. + .. deprecated:: 3.10 + Deprecation warning is emitted if no positional arguments are provided + or not all positional arguments are Future-like objects + and there is no running event loop. + Shielding From Cancellation =========================== @@ -434,6 +439,10 @@ Shielding From Cancellation except CancelledError: res = None + .. deprecated:: 3.10 + Deprecation warning is emitted if *aw* is not Future-like object + and there is no running event loop. + Timeouts ======== @@ -593,6 +602,10 @@ Waiting Primitives earliest_result = await coro # ... + .. deprecated:: 3.10 + Deprecation warning is emitted if not all awaitable objects in the *aws* + iterable are Future-like objects and there is no running event loop. + Running in Threads ================== @@ -775,6 +788,10 @@ Task Object .. deprecated-removed:: 3.8 3.10 The *loop* parameter. + .. deprecated:: 3.10 + Deprecation warning is emitted if *loop* is not specified + and there is no running event loop. + .. method:: cancel(msg=None) Request the Task to be cancelled. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index dac44cf03fa32..ab0b46f9f2da4 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1349,6 +1349,19 @@ Deprecated scheduled for removal in Python 3.12. (Contributed by Erlend E. Aasland in :issue:`42264`.) +* :func:`asyncio.get_event_loop` emits now a deprecation warning if there is + no running event loop. In future it will be an alias of + :func:`~asyncio.get_running_loop`. + :mod:`asyncio` functions which implicitly create a :class:`~asyncio.Future` + or :class:`~asyncio.Task` objects emit now + a deprecation warning if there is no running event loop and no explicit + *loop* argument is passed: :func:`~asyncio.ensure_future`, + :func:`~asyncio.wrap_future`, :func:`~asyncio.gather`, + :func:`~asyncio.shield`, :func:`~asyncio.as_completed` and constructors of + :class:`~asyncio.Future`, :class:`~asyncio.Task`, + :class:`~asyncio.StreamReader`, :class:`~asyncio.StreamReaderProtocol`. + (Contributed by Serhiy Storchaka in :issue:`39529`.) + * The undocumented built-in function ``sqlite3.enable_shared_cache`` is now deprecated, scheduled for removal in Python 3.12. Its use is strongly discouraged by the SQLite3 documentation. See `the SQLite3 docs diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index 1a20f362ec386..b966ad26bf467 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -759,9 +759,16 @@ def get_event_loop(): the result of `get_event_loop_policy().get_event_loop()` call. """ # NOTE: this function is implemented in C (see _asynciomodule.c) + return _py__get_event_loop() + + +def _get_event_loop(stacklevel=3): current_loop = _get_running_loop() if current_loop is not None: return current_loop + import warnings + warnings.warn('There is no current event loop', + DeprecationWarning, stacklevel=stacklevel) return get_event_loop_policy().get_event_loop() @@ -791,6 +798,7 @@ def set_child_watcher(watcher): _py__set_running_loop = _set_running_loop _py_get_running_loop = get_running_loop _py_get_event_loop = get_event_loop +_py__get_event_loop = _get_event_loop try: @@ -798,7 +806,7 @@ def set_child_watcher(watcher): # functions in asyncio. Pure Python implementation is # about 4 times slower than C-accelerated. from _asyncio import (_get_running_loop, _set_running_loop, - get_running_loop, get_event_loop) + get_running_loop, get_event_loop, _get_event_loop) except ImportError: pass else: @@ -807,3 +815,4 @@ def set_child_watcher(watcher): _c__set_running_loop = _set_running_loop _c_get_running_loop = get_running_loop _c_get_event_loop = get_event_loop + _c__get_event_loop = _get_event_loop diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index 2d22ef66c9c42..10f8f0554e4b6 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -76,7 +76,7 @@ def __init__(self, *, loop=None): the default event loop. """ if loop is None: - self._loop = events.get_event_loop() + self._loop = events._get_event_loop() else: self._loop = loop self._callbacks = [] @@ -408,7 +408,7 @@ def wrap_future(future, *, loop=None): assert isinstance(future, concurrent.futures.Future), \ f'concurrent.futures.Future is expected, got {future!r}' if loop is None: - loop = events.get_event_loop() + loop = events._get_event_loop() new_future = loop.create_future() _chain_future(future, new_future) return new_future diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py index 96a9f97200d0d..080d8a62cde1e 100644 --- a/Lib/asyncio/streams.py +++ b/Lib/asyncio/streams.py @@ -125,7 +125,7 @@ class FlowControlMixin(protocols.Protocol): def __init__(self, loop=None): if loop is None: - self._loop = events.get_event_loop() + self._loop = events._get_event_loop(stacklevel=4) else: self._loop = loop self._paused = False @@ -283,9 +283,13 @@ def _get_close_waiter(self, stream): def __del__(self): # Prevent reports about unhandled exceptions. # Better than self._closed._log_traceback = False hack - closed = self._closed - if closed.done() and not closed.cancelled(): - closed.exception() + try: + closed = self._closed + except AttributeError: + pass # failed constructor + else: + if closed.done() and not closed.cancelled(): + closed.exception() class StreamWriter: @@ -381,7 +385,7 @@ def __init__(self, limit=_DEFAULT_LIMIT, loop=None): self._limit = limit if loop is None: - self._loop = events.get_event_loop() + self._loop = events._get_event_loop() else: self._loop = loop self._buffer = bytearray() diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index 52f1e6629e2fc..9a9d0d6e3cc26 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -549,7 +549,7 @@ def as_completed(fs, *, timeout=None): from .queues import Queue # Import here to avoid circular import problem. done = Queue() - loop = events.get_event_loop() + loop = events._get_event_loop() todo = {ensure_future(f, loop=loop) for f in set(fs)} timeout_handle = None @@ -616,23 +616,26 @@ def ensure_future(coro_or_future, *, loop=None): If the argument is a Future, it is returned directly. """ - if coroutines.iscoroutine(coro_or_future): - if loop is None: - loop = events.get_event_loop() - task = loop.create_task(coro_or_future) - if task._source_traceback: - del task._source_traceback[-1] - return task - elif futures.isfuture(coro_or_future): + return _ensure_future(coro_or_future, loop=loop) + + +def _ensure_future(coro_or_future, *, loop=None): + if futures.isfuture(coro_or_future): if loop is not None and loop is not futures._get_loop(coro_or_future): raise ValueError('The future belongs to a different loop than ' - 'the one specified as the loop argument') + 'the one specified as the loop argument') return coro_or_future - elif inspect.isawaitable(coro_or_future): - return ensure_future(_wrap_awaitable(coro_or_future), loop=loop) - else: - raise TypeError('An asyncio.Future, a coroutine or an awaitable is ' - 'required') + + if not coroutines.iscoroutine(coro_or_future): + if inspect.isawaitable(coro_or_future): + coro_or_future = _wrap_awaitable(coro_or_future) + else: + raise TypeError('An asyncio.Future, a coroutine or an awaitable ' + 'is required') + + if loop is None: + loop = events._get_event_loop(stacklevel=4) + return loop.create_task(coro_or_future) @types.coroutine @@ -655,7 +658,8 @@ class _GatheringFuture(futures.Future): cancelled. """ - def __init__(self, children, *, loop=None): + def __init__(self, children, *, loop): + assert loop is not None super().__init__(loop=loop) self._children = children self._cancel_requested = False @@ -706,7 +710,7 @@ def gather(*coros_or_futures, return_exceptions=False): gather won't cancel any other awaitables. """ if not coros_or_futures: - loop = events.get_event_loop() + loop = events._get_event_loop() outer = loop.create_future() outer.set_result([]) return outer @@ -773,7 +777,7 @@ def _done_callback(fut): loop = None for arg in coros_or_futures: if arg not in arg_to_fut: - fut = ensure_future(arg, loop=loop) + fut = _ensure_future(arg, loop=loop) if loop is None: loop = futures._get_loop(fut) if fut is not arg: @@ -823,7 +827,7 @@ def shield(arg): except CancelledError: res = None """ - inner = ensure_future(arg) + inner = _ensure_future(arg) if inner.done(): # Shortcut. return inner diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 5511407ba5395..55fc266cb714b 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -2702,14 +2702,18 @@ def get_event_loop(self): asyncio.set_event_loop_policy(Policy()) loop = asyncio.new_event_loop() - with self.assertRaises(TestError): - asyncio.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(TestError): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) asyncio.set_event_loop(None) - with self.assertRaises(TestError): - asyncio.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(TestError): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) with self.assertRaisesRegex(RuntimeError, 'no running'): - self.assertIs(asyncio.get_running_loop(), None) + asyncio.get_running_loop() self.assertIs(asyncio._get_running_loop(), None) async def func(): @@ -2720,12 +2724,16 @@ async def func(): loop.run_until_complete(func()) asyncio.set_event_loop(loop) - with self.assertRaises(TestError): - asyncio.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(TestError): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) asyncio.set_event_loop(None) - with self.assertRaises(TestError): - asyncio.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(TestError): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) finally: asyncio.set_event_loop_policy(old_policy) @@ -2733,7 +2741,56 @@ async def func(): loop.close() with self.assertRaisesRegex(RuntimeError, 'no running'): - self.assertIs(asyncio.get_running_loop(), None) + asyncio.get_running_loop() + + self.assertIs(asyncio._get_running_loop(), None) + + def test_get_event_loop_returns_running_loop2(self): + old_policy = asyncio.get_event_loop_policy() + try: + asyncio.set_event_loop_policy(asyncio.DefaultEventLoopPolicy()) + loop = asyncio.new_event_loop() + self.addCleanup(loop.close) + + with self.assertWarns(DeprecationWarning) as cm: + loop2 = asyncio.get_event_loop() + self.addCleanup(loop2.close) + self.assertEqual(cm.warnings[0].filename, __file__) + asyncio.set_event_loop(None) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'no current'): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) + + with self.assertRaisesRegex(RuntimeError, 'no running'): + asyncio.get_running_loop() + self.assertIs(asyncio._get_running_loop(), None) + + async def func(): + self.assertIs(asyncio.get_event_loop(), loop) + self.assertIs(asyncio.get_running_loop(), loop) + self.assertIs(asyncio._get_running_loop(), loop) + + loop.run_until_complete(func()) + + asyncio.set_event_loop(loop) + with self.assertWarns(DeprecationWarning) as cm: + self.assertIs(asyncio.get_event_loop(), loop) + self.assertEqual(cm.warnings[0].filename, __file__) + + asyncio.set_event_loop(None) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'no current'): + asyncio.get_event_loop() + self.assertEqual(cm.warnings[0].filename, __file__) + + finally: + asyncio.set_event_loop_policy(old_policy) + if loop is not None: + loop.close() + + with self.assertRaisesRegex(RuntimeError, 'no running'): + asyncio.get_running_loop() self.assertIs(asyncio._get_running_loop(), None) diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py index ec00896cc620b..fe3d44227c83c 100644 --- a/Lib/test/test_asyncio/test_futures.py +++ b/Lib/test/test_asyncio/test_futures.py @@ -139,9 +139,26 @@ def test_initial_state(self): f.cancel() self.assertTrue(f.cancelled()) - def test_init_constructor_default_loop(self): + def test_constructor_without_loop(self): + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + self._new_future() + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_constructor_use_running_loop(self): + async def test(): + return self._new_future() + f = self.loop.run_until_complete(test()) + self.assertIs(f._loop, self.loop) + self.assertIs(f.get_loop(), self.loop) + + def test_constructor_use_global_loop(self): + # Deprecated in 3.10 asyncio.set_event_loop(self.loop) - f = self._new_future() + self.addCleanup(asyncio.set_event_loop, None) + with self.assertWarns(DeprecationWarning) as cm: + f = self._new_future() + self.assertEqual(cm.warnings[0].filename, __file__) self.assertIs(f._loop, self.loop) self.assertIs(f.get_loop(), self.loop) @@ -472,16 +489,41 @@ def test_wrap_future_future(self): f2 = asyncio.wrap_future(f1) self.assertIs(f1, f2) + def test_wrap_future_without_loop(self): + def run(arg): + return (arg, threading.get_ident()) + ex = concurrent.futures.ThreadPoolExecutor(1) + f1 = ex.submit(run, 'oi') + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(RuntimeError): + asyncio.wrap_future(f1) + self.assertEqual(cm.warnings[0].filename, __file__) + ex.shutdown(wait=True) + + def test_wrap_future_use_running_loop(self): + def run(arg): + return (arg, threading.get_ident()) + ex = concurrent.futures.ThreadPoolExecutor(1) + f1 = ex.submit(run, 'oi') + async def test(): + return asyncio.wrap_future(f1) + f2 = self.loop.run_until_complete(test()) + self.assertIs(self.loop, f2._loop) + ex.shutdown(wait=True) + def test_wrap_future_use_global_loop(self): - with mock.patch('asyncio.futures.events') as events: - events.get_event_loop = lambda: self.loop - def run(arg): - return (arg, threading.get_ident()) - ex = concurrent.futures.ThreadPoolExecutor(1) - f1 = ex.submit(run, 'oi') + # Deprecated in 3.10 + asyncio.set_event_loop(self.loop) + self.addCleanup(asyncio.set_event_loop, None) + def run(arg): + return (arg, threading.get_ident()) + ex = concurrent.futures.ThreadPoolExecutor(1) + f1 = ex.submit(run, 'oi') + with self.assertWarns(DeprecationWarning) as cm: f2 = asyncio.wrap_future(f1) - self.assertIs(self.loop, f2._loop) - ex.shutdown(wait=True) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertIs(self.loop, f2._loop) + ex.shutdown(wait=True) def test_wrap_future_cancel(self): f1 = concurrent.futures.Future() diff --git a/Lib/test/test_asyncio/test_queues.py b/Lib/test/test_asyncio/test_queues.py index 0a0b529f621b2..63a9a5f270cc9 100644 --- a/Lib/test/test_asyncio/test_queues.py +++ b/Lib/test/test_asyncio/test_queues.py @@ -273,12 +273,12 @@ async def create_queue(): queue._get_loop() return queue - q = self.loop.run_until_complete(create_queue()) + async def test(): + q = await create_queue() + await asyncio.gather(producer(q, producer_num_items), + consumer(q, producer_num_items)) - self.loop.run_until_complete( - asyncio.gather(producer(q, producer_num_items), - consumer(q, producer_num_items)), - ) + self.loop.run_until_complete(test()) def test_cancelled_getters_not_being_held_in_self_getters(self): def a_generator(): @@ -516,11 +516,14 @@ async def getter(): for _ in range(num): item = queue.get_nowait() - t0 = putter(0) - t1 = putter(1) - t2 = putter(2) - t3 = putter(3) - self.loop.run_until_complete(asyncio.gather(getter(), t0, t1, t2, t3)) + async def test(): + t0 = putter(0) + t1 = putter(1) + t2 = putter(2) + t3 = putter(3) + await asyncio.gather(getter(), t0, t1, t2, t3) + + self.loop.run_until_complete(test()) def test_cancelled_puts_not_being_held_in_self_putters(self): def a_generator(): diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py index a075358903920..6eaa289944218 100644 --- a/Lib/test/test_asyncio/test_streams.py +++ b/Lib/test/test_asyncio/test_streams.py @@ -40,11 +40,6 @@ def tearDown(self): gc.collect() super().tearDown() - @mock.patch('asyncio.streams.events') - def test_ctor_global_loop(self, m_events): - stream = asyncio.StreamReader() - self.assertIs(stream._loop, m_events.get_event_loop.return_value) - def _basetest_open_connection(self, open_connection_fut): messages = [] self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx)) @@ -751,23 +746,59 @@ def test_read_all_from_pipe_reader(self): data = self.loop.run_until_complete(reader.read(-1)) self.assertEqual(data, b'data') - def test_streamreader_constructor(self): - self.addCleanup(asyncio.set_event_loop, None) - asyncio.set_event_loop(self.loop) + def test_streamreader_constructor_without_loop(self): + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + asyncio.StreamReader() + self.assertEqual(cm.warnings[0].filename, __file__) + def test_streamreader_constructor_use_running_loop(self): # asyncio issue #184: Ensure that StreamReaderProtocol constructor # retrieves the current loop if the loop parameter is not set - reader = asyncio.StreamReader() + async def test(): + return asyncio.StreamReader() + + reader = self.loop.run_until_complete(test()) self.assertIs(reader._loop, self.loop) - def test_streamreaderprotocol_constructor(self): + def test_streamreader_constructor_use_global_loop(self): + # asyncio issue #184: Ensure that StreamReaderProtocol constructor + # retrieves the current loop if the loop parameter is not set + # Deprecated in 3.10 self.addCleanup(asyncio.set_event_loop, None) asyncio.set_event_loop(self.loop) + with self.assertWarns(DeprecationWarning) as cm: + reader = asyncio.StreamReader() + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertIs(reader._loop, self.loop) + + def test_streamreaderprotocol_constructor_without_loop(self): + reader = mock.Mock() + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + asyncio.StreamReaderProtocol(reader) + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_streamreaderprotocol_constructor_use_running_loop(self): + # asyncio issue #184: Ensure that StreamReaderProtocol constructor + # retrieves the current loop if the loop parameter is not set + reader = mock.Mock() + async def test(): + return asyncio.StreamReaderProtocol(reader) + protocol = self.loop.run_until_complete(test()) + self.assertIs(protocol._loop, self.loop) + + def test_streamreaderprotocol_constructor_use_global_loop(self): # asyncio issue #184: Ensure that StreamReaderProtocol constructor # retrieves the current loop if the loop parameter is not set + # Deprecated in 3.10 + self.addCleanup(asyncio.set_event_loop, None) + asyncio.set_event_loop(self.loop) reader = mock.Mock() - protocol = asyncio.StreamReaderProtocol(reader) + with self.assertWarns(DeprecationWarning) as cm: + protocol = asyncio.StreamReaderProtocol(reader) + self.assertEqual(cm.warnings[0].filename, __file__) self.assertIs(protocol._loop, self.loop) def test_drain_raises(self): diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py index 7c2e85ceefde1..a9e4cf53566ca 100644 --- a/Lib/test/test_asyncio/test_tasks.py +++ b/Lib/test/test_asyncio/test_tasks.py @@ -200,22 +200,76 @@ async def notmuch(): loop.close() def test_ensure_future_coroutine(self): + async def notmuch(): + return 'ok' + t = asyncio.ensure_future(notmuch(), loop=self.loop) + self.assertIs(t._loop, self.loop) + self.loop.run_until_complete(t) + self.assertTrue(t.done()) + self.assertEqual(t.result(), 'ok') + + a = notmuch() + self.addCleanup(a.close) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + asyncio.ensure_future(a) + self.assertEqual(cm.warnings[0].filename, __file__) + + async def test(): + return asyncio.ensure_future(notmuch()) + t = self.loop.run_until_complete(test()) + self.assertIs(t._loop, self.loop) + self.loop.run_until_complete(t) + self.assertTrue(t.done()) + self.assertEqual(t.result(), 'ok') + + # Deprecated in 3.10 + asyncio.set_event_loop(self.loop) + self.addCleanup(asyncio.set_event_loop, None) + with self.assertWarns(DeprecationWarning) as cm: + t = asyncio.ensure_future(notmuch()) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertIs(t._loop, self.loop) + self.loop.run_until_complete(t) + self.assertTrue(t.done()) + self.assertEqual(t.result(), 'ok') + + def test_ensure_future_coroutine_2(self): with self.assertWarns(DeprecationWarning): @asyncio.coroutine def notmuch(): return 'ok' t = asyncio.ensure_future(notmuch(), loop=self.loop) + self.assertIs(t._loop, self.loop) self.loop.run_until_complete(t) self.assertTrue(t.done()) self.assertEqual(t.result(), 'ok') + + a = notmuch() + self.addCleanup(a.close) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + asyncio.ensure_future(a) + self.assertEqual(cm.warnings[0].filename, __file__) + + async def test(): + return asyncio.ensure_future(notmuch()) + t = self.loop.run_until_complete(test()) self.assertIs(t._loop, self.loop) + self.loop.run_until_complete(t) + self.assertTrue(t.done()) + self.assertEqual(t.result(), 'ok') - loop = asyncio.new_event_loop() - self.set_event_loop(loop) - t = asyncio.ensure_future(notmuch(), loop=loop) - self.assertIs(t._loop, loop) - loop.run_until_complete(t) - loop.close() + # Deprecated in 3.10 + asyncio.set_event_loop(self.loop) + self.addCleanup(asyncio.set_event_loop, None) + with self.assertWarns(DeprecationWarning) as cm: + t = asyncio.ensure_future(notmuch()) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertIs(t._loop, self.loop) + self.loop.run_until_complete(t) + self.assertTrue(t.done()) + self.assertEqual(t.result(), 'ok') def test_ensure_future_future(self): f_orig = self.new_future(self.loop) @@ -1078,33 +1132,6 @@ async def coro(): res = loop.run_until_complete(asyncio.wait_for(coro(), timeout=None)) self.assertEqual(res, 'done') - def test_wait_for_with_global_loop(self): - - def gen(): - when = yield - self.assertAlmostEqual(0.2, when) - when = yield 0 - self.assertAlmostEqual(0.01, when) - yield 0.01 - - loop = self.new_test_loop(gen) - - async def foo(): - await asyncio.sleep(0.2) - return 'done' - - asyncio.set_event_loop(loop) - try: - fut = self.new_task(loop, foo()) - with self.assertRaises(asyncio.TimeoutError): - loop.run_until_complete(asyncio.wait_for(fut, 0.01)) - finally: - asyncio.set_event_loop(None) - - self.assertAlmostEqual(0.01, loop.time()) - self.assertTrue(fut.done()) - self.assertTrue(fut.cancelled()) - def test_wait_for_race_condition(self): def gen(): @@ -1293,32 +1320,6 @@ async def foo(): self.assertAlmostEqual(0.15, loop.time()) self.assertEqual(res, 42) - def test_wait_with_global_loop(self): - - def gen(): - when = yield - self.assertAlmostEqual(0.01, when) - when = yield 0 - self.assertAlmostEqual(0.015, when) - yield 0.015 - - loop = self.new_test_loop(gen) - - a = self.new_task(loop, asyncio.sleep(0.01)) - b = self.new_task(loop, asyncio.sleep(0.015)) - - async def foo(): - done, pending = await asyncio.wait([b, a]) - self.assertEqual(done, set([a, b])) - self.assertEqual(pending, set()) - return 42 - - asyncio.set_event_loop(loop) - res = loop.run_until_complete( - self.new_task(loop, foo())) - - self.assertEqual(res, 42) - def test_wait_duplicate_coroutines(self): with self.assertWarns(DeprecationWarning): @@ -1679,22 +1680,24 @@ def gen(): yield 0 loop = self.new_test_loop(gen) - asyncio.set_event_loop(loop) a = asyncio.sleep(0.05, 'a') b = asyncio.sleep(0.10, 'b') fs = {a, b} - futs = list(asyncio.as_completed(fs)) - self.assertEqual(len(futs), 2) + async def test(): + futs = list(asyncio.as_completed(fs)) + self.assertEqual(len(futs), 2) + + x = await futs[1] + self.assertEqual(x, 'a') + self.assertAlmostEqual(0.05, loop.time()) + loop.advance_time(0.05) + y = await futs[0] + self.assertEqual(y, 'b') + self.assertAlmostEqual(0.10, loop.time()) - x = loop.run_until_complete(futs[1]) - self.assertEqual(x, 'a') - self.assertAlmostEqual(0.05, loop.time()) - loop.advance_time(0.05) - y = loop.run_until_complete(futs[0]) - self.assertEqual(y, 'b') - self.assertAlmostEqual(0.10, loop.time()) + loop.run_until_complete(test()) def test_as_completed_concurrent(self): @@ -1705,20 +1708,22 @@ def gen(): self.assertAlmostEqual(0.05, when) yield 0.05 - loop = self.new_test_loop(gen) - asyncio.set_event_loop(loop) - a = asyncio.sleep(0.05, 'a') b = asyncio.sleep(0.05, 'b') fs = {a, b} - futs = list(asyncio.as_completed(fs)) - self.assertEqual(len(futs), 2) - waiter = asyncio.wait(futs) - # Deprecation from passing coros in futs to asyncio.wait() - with self.assertWarns(DeprecationWarning): - done, pending = loop.run_until_complete(waiter) - self.assertEqual(set(f.result() for f in done), {'a', 'b'}) + async def test(): + futs = list(asyncio.as_completed(fs)) + self.assertEqual(len(futs), 2) + waiter = asyncio.wait(futs) + # Deprecation from passing coros in futs to asyncio.wait() + with self.assertWarns(DeprecationWarning) as cm: + done, pending = await waiter + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertEqual(set(f.result() for f in done), {'a', 'b'}) + + loop = self.new_test_loop(gen) + loop.run_until_complete(test()) def test_as_completed_duplicate_coroutines(self): @@ -1742,6 +1747,47 @@ def runner(): self.assertEqual(set(result), {'ham', 'spam'}) self.assertEqual(len(result), 2) + def test_as_completed_coroutine_without_loop(self): + async def coro(): + return 42 + + a = coro() + self.addCleanup(a.close) + + futs = asyncio.as_completed([a]) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + list(futs) + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_as_completed_coroutine_use_running_loop(self): + loop = self.new_test_loop() + + async def coro(): + return 42 + + async def test(): + futs = list(asyncio.as_completed([coro()])) + self.assertEqual(len(futs), 1) + self.assertEqual(await futs[0], 42) + + loop.run_until_complete(test()) + + def test_as_completed_coroutine_use_global_loop(self): + # Deprecated in 3.10 + async def coro(): + return 42 + + loop = self.new_test_loop() + asyncio.set_event_loop(loop) + self.addCleanup(asyncio.set_event_loop, None) + futs = asyncio.as_completed([coro()]) + with self.assertWarns(DeprecationWarning) as cm: + futs = list(futs) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertEqual(len(futs), 1) + self.assertEqual(loop.run_until_complete(futs[0]), 42) + def test_sleep(self): def gen(): @@ -2201,6 +2247,42 @@ def test_gather_shield(self): child2.set_result(2) test_utils.run_briefly(self.loop) + def test_shield_coroutine_without_loop(self): + async def coro(): + return 42 + + inner = coro() + self.addCleanup(inner.close) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'): + asyncio.shield(inner) + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_shield_coroutine_use_running_loop(self): + async def coro(): + return 42 + + async def test(): + return asyncio.shield(coro()) + outer = self.loop.run_until_complete(test()) + self.assertEqual(outer._loop, self.loop) + res = self.loop.run_until_complete(outer) + self.assertEqual(res, 42) + + def test_shield_coroutine_use_global_loop(self): + # Deprecated in 3.10 + async def coro(): + return 42 + + asyncio.set_event_loop(self.loop) + self.addCleanup(asyncio.set_event_loop, None) + with self.assertWarns(DeprecationWarning) as cm: + outer = asyncio.shield(coro()) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertEqual(outer._loop, self.loop) + res = self.loop.run_until_complete(outer) + self.assertEqual(res, 42) + def test_as_completed_invalid_args(self): fut = self.new_future(self.loop) @@ -2507,16 +2589,17 @@ def test_cancel_gather_1(self): """Ensure that a gathering future refuses to be cancelled once all children are done""" loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) self.addCleanup(loop.close) fut = self.new_future(loop) - # The indirection fut->child_coro is needed since otherwise the - # gathering task is done at the same time as the child future - def child_coro(): - return (yield from fut) - gather_future = asyncio.gather(child_coro()) - gather_task = asyncio.ensure_future(gather_future, loop=loop) + async def create(): + # The indirection fut->child_coro is needed since otherwise the + # gathering task is done at the same time as the child future + def child_coro(): + return (yield from fut) + gather_future = asyncio.gather(child_coro()) + return asyncio.ensure_future(gather_future) + gather_task = loop.run_until_complete(create()) cancel_result = None def cancelling_callback(_): @@ -3222,7 +3305,7 @@ def _run_loop(self, loop): def _check_success(self, **kwargs): a, b, c = [self.one_loop.create_future() for i in range(3)] - fut = asyncio.gather(*self.wrap_futures(a, b, c), **kwargs) + fut = self._gather(*self.wrap_futures(a, b, c), **kwargs) cb = test_utils.MockCallback() fut.add_done_callback(cb) b.set_result(1) @@ -3244,7 +3327,7 @@ def test_result_exception_success(self): def test_one_exception(self): a, b, c, d, e = [self.one_loop.create_future() for i in range(5)] - fut = asyncio.gather(*self.wrap_futures(a, b, c, d, e)) + fut = self._gather(*self.wrap_futures(a, b, c, d, e)) cb = test_utils.MockCallback() fut.add_done_callback(cb) exc = ZeroDivisionError() @@ -3262,8 +3345,8 @@ def test_one_exception(self): def test_return_exceptions(self): a, b, c, d = [self.one_loop.create_future() for i in range(4)] - fut = asyncio.gather(*self.wrap_futures(a, b, c, d), - return_exceptions=True) + fut = self._gather(*self.wrap_futures(a, b, c, d), + return_exceptions=True) cb = test_utils.MockCallback() fut.add_done_callback(cb) exc = ZeroDivisionError() @@ -3315,22 +3398,38 @@ class FutureGatherTests(GatherTestsBase, test_utils.TestCase): def wrap_futures(self, *futures): return futures - def _check_empty_sequence(self, seq_or_iter): + def _gather(self, *args, **kwargs): + return asyncio.gather(*args, **kwargs) + + def test_constructor_empty_sequence_without_loop(self): + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(RuntimeError): + asyncio.gather() + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_constructor_empty_sequence_use_running_loop(self): + async def gather(): + return asyncio.gather() + fut = self.one_loop.run_until_complete(gather()) + self.assertIsInstance(fut, asyncio.Future) + self.assertIs(fut._loop, self.one_loop) + self._run_loop(self.one_loop) + self.assertTrue(fut.done()) + self.assertEqual(fut.result(), []) + + def test_constructor_empty_sequence_use_global_loop(self): + # Deprecated in 3.10 asyncio.set_event_loop(self.one_loop) self.addCleanup(asyncio.set_event_loop, None) - fut = asyncio.gather(*seq_or_iter) + with self.assertWarns(DeprecationWarning) as cm: + fut = asyncio.gather() + self.assertEqual(cm.warnings[0].filename, __file__) self.assertIsInstance(fut, asyncio.Future) self.assertIs(fut._loop, self.one_loop) self._run_loop(self.one_loop) self.assertTrue(fut.done()) self.assertEqual(fut.result(), []) - def test_constructor_empty_sequence(self): - self._check_empty_sequence([]) - self._check_empty_sequence(()) - self._check_empty_sequence(set()) - self._check_empty_sequence(iter("")) - def test_constructor_heterogenous_futures(self): fut1 = self.one_loop.create_future() fut2 = self.other_loop.create_future() @@ -3392,10 +3491,6 @@ def test_result_exception_one_cancellation(self): class CoroutineGatherTests(GatherTestsBase, test_utils.TestCase): - def setUp(self): - super().setUp() - asyncio.set_event_loop(self.one_loop) - def wrap_futures(self, *futures): coros = [] for fut in futures: @@ -3404,22 +3499,47 @@ async def coro(fut=fut): coros.append(coro()) return coros - def test_constructor_loop_selection(self): + def _gather(self, *args, **kwargs): + async def coro(): + return asyncio.gather(*args, **kwargs) + return self.one_loop.run_until_complete(coro()) + + def test_constructor_without_loop(self): async def coro(): return 'abc' gen1 = coro() + self.addCleanup(gen1.close) gen2 = coro() - fut = asyncio.gather(gen1, gen2) + self.addCleanup(gen2.close) + with self.assertWarns(DeprecationWarning) as cm: + with self.assertRaises(RuntimeError): + asyncio.gather(gen1, gen2) + self.assertEqual(cm.warnings[0].filename, __file__) + + def test_constructor_use_running_loop(self): + async def coro(): + return 'abc' + gen1 = coro() + gen2 = coro() + async def gather(): + return asyncio.gather(gen1, gen2) + fut = self.one_loop.run_until_complete(gather()) self.assertIs(fut._loop, self.one_loop) self.one_loop.run_until_complete(fut) - self.set_event_loop(self.other_loop, cleanup=False) + def test_constructor_use_global_loop(self): + # Deprecated in 3.10 + async def coro(): + return 'abc' asyncio.set_event_loop(self.other_loop) - gen3 = coro() - gen4 = coro() - fut2 = asyncio.gather(gen3, gen4) - self.assertIs(fut2._loop, self.other_loop) - self.other_loop.run_until_complete(fut2) + self.addCleanup(asyncio.set_event_loop, None) + gen1 = coro() + gen2 = coro() + with self.assertWarns(DeprecationWarning) as cm: + fut = asyncio.gather(gen1, gen2) + self.assertEqual(cm.warnings[0].filename, __file__) + self.assertIs(fut._loop, self.other_loop) + self.other_loop.run_until_complete(fut) def test_duplicate_coroutines(self): with self.assertWarns(DeprecationWarning): @@ -3427,7 +3547,7 @@ def test_duplicate_coroutines(self): def coro(s): return s c = coro('abc') - fut = asyncio.gather(c, c, coro('def'), c) + fut = self._gather(c, c, coro('def'), c) self._run_loop(self.one_loop) self.assertEqual(fut.result(), ['abc', 'abc', 'def', 'abc']) diff --git a/Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst b/Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst new file mode 100644 index 0000000000000..bb1fd82c99e36 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst @@ -0,0 +1,9 @@ +Deprecated use of :func:`asyncio.get_event_loop` without running event loop. +Emit deprecation warning for :mod:`asyncio` functions which implicitly +create a :class:`~asyncio.Future` or :class:`~asyncio.Task` objects if there +is no running event loop and no explicit *loop* argument is passed: +:func:`~asyncio.ensure_future`, :func:`~asyncio.wrap_future`, +:func:`~asyncio.gather`, :func:`~asyncio.shield`, +:func:`~asyncio.as_completed` and constructors of :class:`~asyncio.Future`, +:class:`~asyncio.Task`, :class:`~asyncio.StreamReader`, +:class:`~asyncio.StreamReaderProtocol`. diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 01e36c656da8f..a4d5d4551e9b0 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -319,7 +319,7 @@ set_running_loop(PyObject *loop) static PyObject * -get_event_loop(void) +get_event_loop(int stacklevel) { PyObject *loop; PyObject *policy; @@ -331,6 +331,13 @@ get_event_loop(void) return loop; } + if (PyErr_WarnEx(PyExc_DeprecationWarning, + "There is no current event loop", + stacklevel)) + { + return NULL; + } + policy = PyObject_CallNoArgs(asyncio_get_event_loop_policy); if (policy == NULL) { return NULL; @@ -489,7 +496,7 @@ future_init(FutureObj *fut, PyObject *loop) fut->fut_blocking = 0; if (loop == Py_None) { - loop = get_event_loop(); + loop = get_event_loop(1); if (loop == NULL) { return -1; } @@ -3078,7 +3085,19 @@ static PyObject * _asyncio_get_event_loop_impl(PyObject *module) /*[clinic end generated code: output=2a2d8b2f824c648b input=9364bf2916c8655d]*/ { - return get_event_loop(); + return get_event_loop(1); +} + +/*[clinic input] +_asyncio._get_event_loop + stacklevel: int = 3 +[clinic start generated code]*/ + +static PyObject * +_asyncio__get_event_loop_impl(PyObject *module, int stacklevel) +/*[clinic end generated code: output=9c1d6d3c802e67c9 input=d17aebbd686f711d]*/ +{ + return get_event_loop(stacklevel-1); } /*[clinic input] @@ -3375,6 +3394,7 @@ PyDoc_STRVAR(module_doc, "Accelerator module for asyncio"); static PyMethodDef asyncio_methods[] = { _ASYNCIO_GET_EVENT_LOOP_METHODDEF + _ASYNCIO__GET_EVENT_LOOP_METHODDEF _ASYNCIO_GET_RUNNING_LOOP_METHODDEF _ASYNCIO__GET_RUNNING_LOOP_METHODDEF _ASYNCIO__SET_RUNNING_LOOP_METHODDEF diff --git a/Modules/clinic/_asynciomodule.c.h b/Modules/clinic/_asynciomodule.c.h index a071efc1e2be3..c472e652fb7c5 100644 --- a/Modules/clinic/_asynciomodule.c.h +++ b/Modules/clinic/_asynciomodule.c.h @@ -669,6 +669,45 @@ _asyncio_get_event_loop(PyObject *module, PyObject *Py_UNUSED(ignored)) return _asyncio_get_event_loop_impl(module); } +PyDoc_STRVAR(_asyncio__get_event_loop__doc__, +"_get_event_loop($module, /, stacklevel=3)\n" +"--\n" +"\n"); + +#define _ASYNCIO__GET_EVENT_LOOP_METHODDEF \ + {"_get_event_loop", (PyCFunction)(void(*)(void))_asyncio__get_event_loop, METH_FASTCALL|METH_KEYWORDS, _asyncio__get_event_loop__doc__}, + +static PyObject * +_asyncio__get_event_loop_impl(PyObject *module, int stacklevel); + +static PyObject * +_asyncio__get_event_loop(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"stacklevel", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "_get_event_loop", 0}; + PyObject *argsbuf[1]; + Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; + int stacklevel = 3; + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!noptargs) { + goto skip_optional_pos; + } + stacklevel = _PyLong_AsInt(args[0]); + if (stacklevel == -1 && PyErr_Occurred()) { + goto exit; + } +skip_optional_pos: + return_value = _asyncio__get_event_loop_impl(module, stacklevel); + +exit: + return return_value; +} + PyDoc_STRVAR(_asyncio_get_running_loop__doc__, "get_running_loop($module, /)\n" "--\n" @@ -832,4 +871,4 @@ _asyncio__leave_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs, exit: return return_value; } -/*[clinic end generated code: output=d0fc522bcbff9d61 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0d127162ac92e0c0 input=a9049054013a1b77]*/ From webhook-mailer at python.org Sun Apr 25 06:44:38 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 10:44:38 -0000 Subject: [Python-checkins] bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) Message-ID: https://github.com/python/cpython/commit/7248ce30bb84f2d5af855a867cc4e3cc40a07fb5 commit: 7248ce30bb84f2d5af855a867cc4e3cc40a07fb5 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T03:44:30-07:00 summary: bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) (cherry picked from commit b5adc8a7e5c13d175b4d3e53b37bc61de35b1457) Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index ba8288daf83f2..13f662a8c2108 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -826,7 +826,7 @@ def textinput(self, title, prompt): >>> screen.textinput("NIM", "Name of first player:") """ - return simpledialog.askstring(title, prompt) + return simpledialog.askstring(title, prompt, parent=self.cv) def numinput(self, title, prompt, default=None, minval=None, maxval=None): """Pop up a dialog window for input of a number. @@ -847,7 +847,8 @@ def numinput(self, title, prompt, default=None, minval=None, maxval=None): """ return simpledialog.askfloat(title, prompt, initialvalue=default, - minvalue=minval, maxvalue=maxval) + minvalue=minval, maxvalue=maxval, + parent=self.cv) ############################################################################## diff --git a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst new file mode 100644 index 0000000000000..7f2e5a46add03 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst @@ -0,0 +1,2 @@ +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. From webhook-mailer at python.org Sun Apr 25 06:45:24 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 10:45:24 -0000 Subject: [Python-checkins] bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) Message-ID: https://github.com/python/cpython/commit/c70f268523cb3213693710e14c0fcae81fd3fa7a commit: c70f268523cb3213693710e14c0fcae81fd3fa7a branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T03:45:20-07:00 summary: bpo-43534: Make dialogs in turtle.textinput() and turtle.numinput() transitient again (GH-24923) (cherry picked from commit b5adc8a7e5c13d175b4d3e53b37bc61de35b1457) Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index ba8288daf83f2..13f662a8c2108 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -826,7 +826,7 @@ def textinput(self, title, prompt): >>> screen.textinput("NIM", "Name of first player:") """ - return simpledialog.askstring(title, prompt) + return simpledialog.askstring(title, prompt, parent=self.cv) def numinput(self, title, prompt, default=None, minval=None, maxval=None): """Pop up a dialog window for input of a number. @@ -847,7 +847,8 @@ def numinput(self, title, prompt, default=None, minval=None, maxval=None): """ return simpledialog.askfloat(title, prompt, initialvalue=default, - minvalue=minval, maxvalue=maxval) + minvalue=minval, maxvalue=maxval, + parent=self.cv) ############################################################################## diff --git a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst new file mode 100644 index 0000000000000..7f2e5a46add03 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst @@ -0,0 +1,2 @@ +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. From webhook-mailer at python.org Sun Apr 25 06:49:35 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 10:49:35 -0000 Subject: [Python-checkins] [3.9] bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (GH-25187). (GH-25588) Message-ID: https://github.com/python/cpython/commit/9a165399aec930f27639dd173426ccc33586662b commit: 9a165399aec930f27639dd173426ccc33586662b branch: 3.9 author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T13:49:31+03:00 summary: [3.9] bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (GH-25187). (GH-25588) (cherry picked from commit 3bb3fb3be09d472a43cdc3d9d9578bd49f3dfb8c) files: A Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst A Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst M Lib/idlelib/config_key.py M Lib/idlelib/query.py M Lib/idlelib/searchbase.py M Lib/tkinter/filedialog.py M Lib/tkinter/simpledialog.py diff --git a/Lib/idlelib/config_key.py b/Lib/idlelib/config_key.py index 7510aa9f3d878..9ca3a156f4b97 100644 --- a/Lib/idlelib/config_key.py +++ b/Lib/idlelib/config_key.py @@ -4,6 +4,7 @@ from tkinter import Toplevel, Listbox, StringVar, TclError from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar from tkinter import messagebox +from tkinter.simpledialog import _setup_dialog import string import sys @@ -63,6 +64,7 @@ def __init__(self, parent, title, action, current_key_sequences, self.resizable(height=False, width=False) self.title(title) self.transient(parent) + _setup_dialog(self) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.cancel) self.parent = parent diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py index 015fc7ade459d..fefa5aac1b7f5 100644 --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -28,6 +28,7 @@ from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton from tkinter import filedialog from tkinter.font import Font +from tkinter.simpledialog import _setup_dialog class Query(Toplevel): """Base class for getting verified answer from a user. @@ -60,13 +61,8 @@ def __init__(self, parent, title, message, *, text0='', used_names={}, if not _utest: # Otherwise fail when directly run unittest. self.grab_set() - windowingsystem = self.tk.call('tk', 'windowingsystem') - if windowingsystem == 'aqua': - try: - self.tk.call('::tk::unsupported::MacWindowStyle', 'style', - self._w, 'moveableModal', '') - except: - pass + _setup_dialog(self) + if self._windowingsystem == 'aqua': self.bind("", self.cancel) self.bind('', self.cancel) self.protocol("WM_DELETE_WINDOW", self.cancel) diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index fbef87aa2d3d0..64ed50c7364be 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -2,6 +2,7 @@ from tkinter import Toplevel from tkinter.ttk import Frame, Entry, Label, Button, Checkbutton, Radiobutton +from tkinter.simpledialog import _setup_dialog class SearchDialogBase: @@ -83,6 +84,7 @@ def create_widgets(self): top.protocol("WM_DELETE_WINDOW", self.close) top.wm_title(self.title) top.wm_iconname(self.icon) + _setup_dialog(top) self.top = top self.frame = Frame(top, padding="5px") self.frame.grid(sticky="nwes") diff --git a/Lib/tkinter/filedialog.py b/Lib/tkinter/filedialog.py index 3ed93eb8c163a..600d0bd49fe2c 100644 --- a/Lib/tkinter/filedialog.py +++ b/Lib/tkinter/filedialog.py @@ -24,6 +24,7 @@ ) from tkinter.dialog import Dialog from tkinter import commondialog +from tkinter.simpledialog import _setup_dialog dialogstates = {} @@ -62,6 +63,7 @@ def __init__(self, master, title=None): self.top = Toplevel(master) self.top.title(title) self.top.iconname(title) + _setup_dialog(self.top) self.botframe = Frame(self.top) self.botframe.pack(side=BOTTOM, fill=X) diff --git a/Lib/tkinter/simpledialog.py b/Lib/tkinter/simpledialog.py index b882d47c961bd..802202560af52 100644 --- a/Lib/tkinter/simpledialog.py +++ b/Lib/tkinter/simpledialog.py @@ -39,6 +39,9 @@ def __init__(self, master, if title: self.root.title(title) self.root.iconname(title) + + _setup_dialog(self.root) + self.message = Message(self.root, text=text, aspect=400) self.message.pack(expand=1, fill=BOTH) self.frame = Frame(self.root) @@ -142,6 +145,8 @@ def __init__(self, parent, title = None): if title: self.title(title) + _setup_dialog(self) + self.parent = parent self.result = None @@ -251,6 +256,13 @@ def apply(self): pass # override +def _setup_dialog(w): + if w._windowingsystem == "aqua": + w.tk.call("::tk::unsupported::MacWindowStyle", "style", + w, "moveableModal", "") + elif w._windowingsystem == "x11": + w.wm_attributes("-type", "dialog") + # -------------------------------------------------------------------- # convenience dialogues diff --git a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst new file mode 100644 index 0000000000000..105ec9281f005 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst @@ -0,0 +1,2 @@ +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. diff --git a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst new file mode 100644 index 0000000000000..7916d2248b231 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst @@ -0,0 +1,2 @@ +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. From webhook-mailer at python.org Sun Apr 25 07:19:56 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 11:19:56 -0000 Subject: [Python-checkins] [3.9] bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (GH-25187). (GH-25588) (GH-25592) Message-ID: https://github.com/python/cpython/commit/6077efa2b2be17e736d061fe74f933dc616c64b2 commit: 6077efa2b2be17e736d061fe74f933dc616c64b2 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: serhiy-storchaka date: 2021-04-25T14:19:52+03:00 summary: [3.9] bpo-43655: Tkinter and IDLE dialog windows are now recognized as dialogs by window managers on macOS and X Window (GH-25187). (GH-25588) (GH-25592) (cherry picked from commit 3bb3fb3be09d472a43cdc3d9d9578bd49f3dfb8c) (cherry picked from commit 9a165399aec930f27639dd173426ccc33586662b) Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst A Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst M Lib/idlelib/config_key.py M Lib/idlelib/query.py M Lib/idlelib/searchbase.py M Lib/tkinter/filedialog.py M Lib/tkinter/simpledialog.py diff --git a/Lib/idlelib/config_key.py b/Lib/idlelib/config_key.py index 7510aa9f3d878..9ca3a156f4b97 100644 --- a/Lib/idlelib/config_key.py +++ b/Lib/idlelib/config_key.py @@ -4,6 +4,7 @@ from tkinter import Toplevel, Listbox, StringVar, TclError from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar from tkinter import messagebox +from tkinter.simpledialog import _setup_dialog import string import sys @@ -63,6 +64,7 @@ def __init__(self, parent, title, action, current_key_sequences, self.resizable(height=False, width=False) self.title(title) self.transient(parent) + _setup_dialog(self) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.cancel) self.parent = parent diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py index 015fc7ade459d..fefa5aac1b7f5 100644 --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -28,6 +28,7 @@ from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton from tkinter import filedialog from tkinter.font import Font +from tkinter.simpledialog import _setup_dialog class Query(Toplevel): """Base class for getting verified answer from a user. @@ -60,13 +61,8 @@ def __init__(self, parent, title, message, *, text0='', used_names={}, if not _utest: # Otherwise fail when directly run unittest. self.grab_set() - windowingsystem = self.tk.call('tk', 'windowingsystem') - if windowingsystem == 'aqua': - try: - self.tk.call('::tk::unsupported::MacWindowStyle', 'style', - self._w, 'moveableModal', '') - except: - pass + _setup_dialog(self) + if self._windowingsystem == 'aqua': self.bind("", self.cancel) self.bind('', self.cancel) self.protocol("WM_DELETE_WINDOW", self.cancel) diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index fbef87aa2d3d0..64ed50c7364be 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -2,6 +2,7 @@ from tkinter import Toplevel from tkinter.ttk import Frame, Entry, Label, Button, Checkbutton, Radiobutton +from tkinter.simpledialog import _setup_dialog class SearchDialogBase: @@ -83,6 +84,7 @@ def create_widgets(self): top.protocol("WM_DELETE_WINDOW", self.close) top.wm_title(self.title) top.wm_iconname(self.icon) + _setup_dialog(top) self.top = top self.frame = Frame(top, padding="5px") self.frame.grid(sticky="nwes") diff --git a/Lib/tkinter/filedialog.py b/Lib/tkinter/filedialog.py index 88d23476fde28..09ff1cb1cb63d 100644 --- a/Lib/tkinter/filedialog.py +++ b/Lib/tkinter/filedialog.py @@ -15,6 +15,7 @@ from tkinter import * from tkinter.dialog import Dialog from tkinter import commondialog +from tkinter.simpledialog import _setup_dialog import os import fnmatch @@ -56,6 +57,7 @@ def __init__(self, master, title=None): self.top = Toplevel(master) self.top.title(title) self.top.iconname(title) + _setup_dialog(self.top) self.botframe = Frame(self.top) self.botframe.pack(side=BOTTOM, fill=X) diff --git a/Lib/tkinter/simpledialog.py b/Lib/tkinter/simpledialog.py index b882d47c961bd..802202560af52 100644 --- a/Lib/tkinter/simpledialog.py +++ b/Lib/tkinter/simpledialog.py @@ -39,6 +39,9 @@ def __init__(self, master, if title: self.root.title(title) self.root.iconname(title) + + _setup_dialog(self.root) + self.message = Message(self.root, text=text, aspect=400) self.message.pack(expand=1, fill=BOTH) self.frame = Frame(self.root) @@ -142,6 +145,8 @@ def __init__(self, parent, title = None): if title: self.title(title) + _setup_dialog(self) + self.parent = parent self.result = None @@ -251,6 +256,13 @@ def apply(self): pass # override +def _setup_dialog(w): + if w._windowingsystem == "aqua": + w.tk.call("::tk::unsupported::MacWindowStyle", "style", + w, "moveableModal", "") + elif w._windowingsystem == "x11": + w.wm_attributes("-type", "dialog") + # -------------------------------------------------------------------- # convenience dialogues diff --git a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst new file mode 100644 index 0000000000000..105ec9281f005 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst @@ -0,0 +1,2 @@ +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. diff --git a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst new file mode 100644 index 0000000000000..7916d2248b231 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst @@ -0,0 +1,2 @@ +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. From webhook-mailer at python.org Sun Apr 25 07:45:23 2021 From: webhook-mailer at python.org (taleinat) Date: Sun, 25 Apr 2021 11:45:23 -0000 Subject: [Python-checkins] bpo-38490: statistics: Add covariance, Pearson's correlation, and simple linear regression (#16813) Message-ID: https://github.com/python/cpython/commit/09aa6f914dc313875ff18474770a0a7c13ea8dea commit: 09aa6f914dc313875ff18474770a0a7c13ea8dea branch: master author: Tymoteusz Wo?od?ko committer: taleinat <532281+taleinat at users.noreply.github.com> date: 2021-04-25T14:45:09+03:00 summary: bpo-38490: statistics: Add covariance, Pearson's correlation, and simple linear regression (#16813) Co-authored-by: Tymoteusz Wo?od?ko >> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] + >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] + >>> covariance(x, y) + 0.75 + >>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1] + >>> covariance(x, z) + -7.5 + >>> covariance(z, x) + -7.5 + + .. versionadded:: 3.10 + +.. function:: correlation(x, y, /) + + Return the `Pearson's correlation coefficient + `_ + for two inputs. Pearson's correlation coefficient *r* takes values + between -1 and +1. It measures the strength and direction of the linear + relationship, where +1 means very strong, positive linear relationship, + -1 very strong, negative linear relationship, and 0 no linear relationship. + + Both inputs must be of the same length (no less than two), and need + not to be constant, otherwise :exc:`StatisticsError` is raised. + + Examples: + + .. doctest:: + + >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] + >>> y = [9, 8, 7, 6, 5, 4, 3, 2, 1] + >>> correlation(x, x) + 1.0 + >>> correlation(x, y) + -1.0 + + .. versionadded:: 3.10 + +.. function:: linear_regression(regressor, dependent_variable) + + Return the intercept and slope of `simple linear regression + `_ + parameters estimated using ordinary least squares. Simple linear + regression describes relationship between *regressor* and + *dependent variable* in terms of linear function: + + *dependent_variable = intercept + slope \* regressor + noise* + + where ``intercept`` and ``slope`` are the regression parameters that are + estimated, and noise term is an unobserved random variable, for the + variability of the data that was not explained by the linear regression + (it is equal to the difference between prediction and the actual values + of dependent variable). + + Both inputs must be of the same length (no less than two), and regressor + needs not to be constant, otherwise :exc:`StatisticsError` is raised. + + For example, if we took the data on the data on `release dates of the Monty + Python films `_, and used + it to predict the cumulative number of Monty Python films produced, we could + predict what would be the number of films they could have made till year + 2019, assuming that they kept the pace. + + .. doctest:: + + >>> year = [1971, 1975, 1979, 1982, 1983] + >>> films_total = [1, 2, 3, 4, 5] + >>> intercept, slope = linear_regression(year, films_total) + >>> round(intercept + slope * 2019) + 16 + + We could also use it to "predict" how many Monty Python films existed when + Brian Cohen was born. + + .. doctest:: + + >>> round(intercept + slope * 1) + -610 + + .. versionadded:: 3.10 + Exceptions ---------- diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index ab0b46f9f2da4..1d9c03c439f33 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1051,6 +1051,14 @@ The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default instead of :mod:`pickle` protocol ``3`` when creating shelves. (Contributed by Zackery Spytz in :issue:`34204`.) +statistics +---------- + +Added :func:`~statistics.covariance`, Pearson's +:func:`~statistics.correlation`, and simple +:func:`~statistics.linear_regression` functions. +(Contributed by Tymoteusz Wo?od?ko in :issue:`38490`.) + site ---- diff --git a/Lib/statistics.py b/Lib/statistics.py index 2414869a7e6dc..673a162b3a79f 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -73,6 +73,30 @@ 2.5 +Statistics for relations between two inputs +------------------------------------------- + +================== ==================================================== +Function Description +================== ==================================================== +covariance Sample covariance for two variables. +correlation Pearson's correlation coefficient for two variables. +linear_regression Intercept and slope for simple linear regression. +================== ==================================================== + +Calculate covariance, Pearson's correlation, and simple linear regression +for two inputs: + +>>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] +>>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] +>>> covariance(x, y) +0.75 +>>> correlation(x, y) #doctest: +ELLIPSIS +0.31622776601... +>>> linear_regression(x, y) #doctest: +LinearRegression(intercept=1.5, slope=0.1) + + Exceptions ---------- @@ -98,6 +122,9 @@ 'quantiles', 'stdev', 'variance', + 'correlation', + 'covariance', + 'linear_regression', ] import math @@ -110,7 +137,7 @@ from bisect import bisect_left, bisect_right from math import hypot, sqrt, fabs, exp, erf, tau, log, fsum from operator import itemgetter -from collections import Counter +from collections import Counter, namedtuple # === Exceptions === @@ -826,6 +853,113 @@ def pstdev(data, mu=None): return math.sqrt(var) +# === Statistics for relations between two inputs === + +# See https://en.wikipedia.org/wiki/Covariance +# https://en.wikipedia.org/wiki/Pearson_correlation_coefficient +# https://en.wikipedia.org/wiki/Simple_linear_regression + + +def covariance(x, y, /): + """Covariance + + Return the sample covariance of two inputs *x* and *y*. Covariance + is a measure of the joint variability of two inputs. + + >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] + >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] + >>> covariance(x, y) + 0.75 + >>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1] + >>> covariance(x, z) + -7.5 + >>> covariance(z, x) + -7.5 + + """ + n = len(x) + if len(y) != n: + raise StatisticsError('covariance requires that both inputs have same number of data points') + if n < 2: + raise StatisticsError('covariance requires at least two data points') + xbar = mean(x) + ybar = mean(y) + total = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) + return total / (n - 1) + + +def correlation(x, y, /): + """Pearson's correlation coefficient + + Return the Pearson's correlation coefficient for two inputs. Pearson's + correlation coefficient *r* takes values between -1 and +1. It measures the + strength and direction of the linear relationship, where +1 means very + strong, positive linear relationship, -1 very strong, negative linear + relationship, and 0 no linear relationship. + + >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] + >>> y = [9, 8, 7, 6, 5, 4, 3, 2, 1] + >>> correlation(x, x) + 1.0 + >>> correlation(x, y) + -1.0 + + """ + n = len(x) + if len(y) != n: + raise StatisticsError('correlation requires that both inputs have same number of data points') + if n < 2: + raise StatisticsError('correlation requires at least two data points') + cov = covariance(x, y) + stdx = stdev(x) + stdy = stdev(y) + try: + return cov / (stdx * stdy) + except ZeroDivisionError: + raise StatisticsError('at least one of the inputs is constant') + + +LinearRegression = namedtuple('LinearRegression', ['intercept', 'slope']) + + +def linear_regression(regressor, dependent_variable, /): + """Intercept and slope for simple linear regression + + Return the intercept and slope of simple linear regression + parameters estimated using ordinary least squares. Simple linear + regression describes relationship between *regressor* and + *dependent variable* in terms of linear function:: + + dependent_variable = intercept + slope * regressor + noise + + where ``intercept`` and ``slope`` are the regression parameters that are + estimated, and noise term is an unobserved random variable, for the + variability of the data that was not explained by the linear regression + (it is equal to the difference between prediction and the actual values + of dependent variable). + + The parameters are returned as a named tuple. + + >>> regressor = [1, 2, 3, 4, 5] + >>> noise = NormalDist().samples(5, seed=42) + >>> dependent_variable = [2 + 3 * regressor[i] + noise[i] for i in range(5)] + >>> linear_regression(regressor, dependent_variable) #doctest: +ELLIPSIS + LinearRegression(intercept=1.75684970486..., slope=3.09078914170...) + + """ + n = len(regressor) + if len(dependent_variable) != n: + raise StatisticsError('linear regression requires that both inputs have same number of data points') + if n < 2: + raise StatisticsError('linear regression requires at least two data points') + try: + slope = covariance(regressor, dependent_variable) / variance(regressor) + except ZeroDivisionError: + raise StatisticsError('regressor is constant') + intercept = mean(dependent_variable) - slope * mean(regressor) + return LinearRegression(intercept=intercept, slope=slope) + + ## Normal Distribution ##################################################### diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py index 4b8686b681822..70d269dea732d 100644 --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -2407,6 +2407,84 @@ def test_error_cases(self): quantiles([10, None, 30], n=4) # data is non-numeric +class TestBivariateStatistics(unittest.TestCase): + + def test_unequal_size_error(self): + for x, y in [ + ([1, 2, 3], [1, 2]), + ([1, 2], [1, 2, 3]), + ]: + with self.assertRaises(statistics.StatisticsError): + statistics.covariance(x, y) + with self.assertRaises(statistics.StatisticsError): + statistics.correlation(x, y) + with self.assertRaises(statistics.StatisticsError): + statistics.linear_regression(x, y) + + def test_small_sample_error(self): + for x, y in [ + ([], []), + ([], [1, 2,]), + ([1, 2,], []), + ([1,], [1,]), + ([1,], [1, 2,]), + ([1, 2,], [1,]), + ]: + with self.assertRaises(statistics.StatisticsError): + statistics.covariance(x, y) + with self.assertRaises(statistics.StatisticsError): + statistics.correlation(x, y) + with self.assertRaises(statistics.StatisticsError): + statistics.linear_regression(x, y) + + +class TestCorrelationAndCovariance(unittest.TestCase): + + def test_results(self): + for x, y, result in [ + ([1, 2, 3], [1, 2, 3], 1), + ([1, 2, 3], [-1, -2, -3], -1), + ([1, 2, 3], [3, 2, 1], -1), + ([1, 2, 3], [1, 2, 1], 0), + ([1, 2, 3], [1, 3, 2], 0.5), + ]: + self.assertAlmostEqual(statistics.correlation(x, y), result) + self.assertAlmostEqual(statistics.covariance(x, y), result) + + def test_different_scales(self): + x = [1, 2, 3] + y = [10, 30, 20] + self.assertAlmostEqual(statistics.correlation(x, y), 0.5) + self.assertAlmostEqual(statistics.covariance(x, y), 5) + + y = [.1, .2, .3] + self.assertAlmostEqual(statistics.correlation(x, y), 1) + self.assertAlmostEqual(statistics.covariance(x, y), 0.1) + + +class TestLinearRegression(unittest.TestCase): + + def test_constant_input_error(self): + x = [1, 1, 1,] + y = [1, 2, 3,] + with self.assertRaises(statistics.StatisticsError): + statistics.linear_regression(x, y) + + def test_results(self): + for x, y, true_intercept, true_slope in [ + ([1, 2, 3], [0, 0, 0], 0, 0), + ([1, 2, 3], [1, 2, 3], 0, 1), + ([1, 2, 3], [100, 100, 100], 100, 0), + ([1, 2, 3], [12, 14, 16], 10, 2), + ([1, 2, 3], [-1, -2, -3], 0, -1), + ([1, 2, 3], [21, 22, 23], 20, 1), + ([1, 2, 3], [5.1, 5.2, 5.3], 5, 0.1), + ]: + intercept, slope = statistics.linear_regression(x, y) + self.assertAlmostEqual(intercept, true_intercept) + self.assertAlmostEqual(slope, true_slope) + + class TestNormalDist: # General note on precision: The pdf(), cdf(), and overlap() methods diff --git a/Misc/ACKS b/Misc/ACKS index 760d6c79835f8..7d9af855a744b 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1927,6 +1927,7 @@ David Wolever Klaus-Juergen Wolf Dan Wolfe Richard Wolff +Tymoteusz Wo?od?ko Adam Woodbeck William Woodruff Steven Work diff --git a/Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst b/Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst new file mode 100644 index 0000000000000..82b9e33be0e30 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst @@ -0,0 +1 @@ +Covariance, Pearson's correlation, and simple linear regression functionality was added to statistics module. Patch by Tymoteusz Wo?od?ko. \ No newline at end of file From webhook-mailer at python.org Sun Apr 25 10:49:40 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 25 Apr 2021 14:49:40 -0000 Subject: [Python-checkins] bpo-43534: Fix the turtle module working with multiple root windows (GH-25591) Message-ID: https://github.com/python/cpython/commit/8af929fc76f21fb123f6a47cb3ebcf4e5b758dea commit: 8af929fc76f21fb123f6a47cb3ebcf4e5b758dea branch: master author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-04-25T17:49:32+03:00 summary: bpo-43534: Fix the turtle module working with multiple root windows (GH-25591) files: A Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 11429a62d9477..08c5b473df287 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -464,20 +464,18 @@ class TurtleScreenBase(object): a corresponding TurtleScreenBase class has to be implemented. """ - @staticmethod - def _blankimage(): + def _blankimage(self): """return a blank image object """ - img = TK.PhotoImage(width=1, height=1) + img = TK.PhotoImage(width=1, height=1, master=self.cv) img.blank() return img - @staticmethod - def _image(filename): + def _image(self, filename): """return an image object containing the imagedata from a gif-file named filename. """ - return TK.PhotoImage(file=filename) + return TK.PhotoImage(file=filename, master=self.cv) def __init__(self, cv): self.cv = cv @@ -811,7 +809,7 @@ def mainloop(self): >>> screen.mainloop() """ - TK.mainloop() + self.cv.tk.mainloop() def textinput(self, title, prompt): """Pop up a dialog window for input of a string. @@ -966,6 +964,8 @@ class TurtleScreen(TurtleScreenBase): def __init__(self, cv, mode=_CFG["mode"], colormode=_CFG["colormode"], delay=_CFG["delay"]): + TurtleScreenBase.__init__(self, cv) + self._shapes = { "arrow" : Shape("polygon", ((-10,0), (10,0), (0,10))), "turtle" : Shape("polygon", ((0,16), (-2,14), (-1,10), (-4,7), @@ -989,7 +989,6 @@ def __init__(self, cv, mode=_CFG["mode"], self._bgpics = {"nopic" : ""} - TurtleScreenBase.__init__(self, cv) self._mode = mode self._delayvalue = delay self._colormode = _CFG["colormode"] diff --git a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst new file mode 100644 index 0000000000000..cb4d90b723d1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst @@ -0,0 +1 @@ +Fixed the :mod:`turtle` module working with non-default root window. From webhook-mailer at python.org Sun Apr 25 11:19:37 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 15:19:37 -0000 Subject: [Python-checkins] Improve CDN purge script (GH-25251) (#25254) Message-ID: https://github.com/python/cpython/commit/2178afffc0e94613ff41baf7ce2d4bea94278a47 commit: 2178afffc0e94613ff41baf7ce2d4bea94278a47 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T08:19:32-07:00 summary: Improve CDN purge script (GH-25251) (#25254) (cherry picked from commit e35dd556e1adb4fc8b83e5b75ac59e428a8b5460) Co-authored-by: Steve Dower Co-authored-by: Steve Dower files: M Tools/msi/purge.py diff --git a/Tools/msi/purge.py b/Tools/msi/purge.py index a8b8f4d8973c4..c543cac30aad3 100644 --- a/Tools/msi/purge.py +++ b/Tools/msi/purge.py @@ -65,7 +65,10 @@ "python-{}-webinstall.exe".format(m.group(0)), "python-{}-amd64.exe".format(m.group(0)), "python-{}-amd64-webinstall.exe".format(m.group(0)), + "python-{}-embed-amd64.zip".format(m.group(0)), + "python-{}-embed-win32.zip".format(m.group(0)), ] + ["win32{}/{}".format(REL, f) for f in FILES] + ["amd64{}/{}".format(REL, f) for f in FILES] +PATHS = PATHS + [p + ".asc" for p in PATHS] print('Purged:') for n in PATHS: From webhook-mailer at python.org Sun Apr 25 12:09:37 2021 From: webhook-mailer at python.org (pablogsal) Date: Sun, 25 Apr 2021 16:09:37 -0000 Subject: [Python-checkins] Set the release for `__future__.annotations` to 3.11 (#25596) Message-ID: https://github.com/python/cpython/commit/c9c27b8004f7a5dd214bb2608c3f5e2bbfec33ac commit: c9c27b8004f7a5dd214bb2608c3f5e2bbfec33ac branch: master author: Anthony Sottile committer: pablogsal date: 2021-04-25T17:09:24+01:00 summary: Set the release for `__future__.annotations` to 3.11 (#25596) files: M Lib/__future__.py diff --git a/Lib/__future__.py b/Lib/__future__.py index 326e2b24d1d04..97dc90c6e4644 100644 --- a/Lib/__future__.py +++ b/Lib/__future__.py @@ -143,5 +143,5 @@ def __repr__(self): CO_FUTURE_GENERATOR_STOP) annotations = _Feature((3, 7, 0, "beta", 1), - (3, 10, 0, "alpha", 0), + (3, 11, 0, "alpha", 0), CO_FUTURE_ANNOTATIONS) From webhook-mailer at python.org Sun Apr 25 13:08:33 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 17:08:33 -0000 Subject: [Python-checkins] BaseHTTPRequestHandler, that path includes query (#25597) Message-ID: https://github.com/python/cpython/commit/a89d8a94a0dd0bd45349efad6d5ad68641f4ff9a commit: a89d8a94a0dd0bd45349efad6d5ad68641f4ff9a branch: master author: Senthil Kumaran committer: orsenthil date: 2021-04-25T10:08:29-07:00 summary: BaseHTTPRequestHandler, that path includes query (#25597) * Clarify, for BaseHTTPRequestHandler, that path includes query Co-authored-by: David Jones files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 478a5b31475cf..729d7e37137a8 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -98,7 +98,9 @@ provides three different variants: .. attribute:: path - Contains the request path. + Contains the request path. If query component of the URL is present, + then ``path`` includes the query. Using the terminology of :rfc:`3986`, + ``path`` here includes ``hier-part`` and the ``query``. .. attribute:: request_version From webhook-mailer at python.org Sun Apr 25 13:17:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 17:17:11 -0000 Subject: [Python-checkins] BaseHTTPRequestHandler, that path includes query (GH-25597) Message-ID: https://github.com/python/cpython/commit/d6322c9c459e2a06a08d41f95f6686ca4fa406c9 commit: d6322c9c459e2a06a08d41f95f6686ca4fa406c9 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T10:17:05-07:00 summary: BaseHTTPRequestHandler, that path includes query (GH-25597) * Clarify, for BaseHTTPRequestHandler, that path includes query Co-authored-by: David Jones (cherry picked from commit a89d8a94a0dd0bd45349efad6d5ad68641f4ff9a) Co-authored-by: Senthil Kumaran files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index a367e373dc3c0..d54bd05cddded 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -98,7 +98,9 @@ provides three different variants: .. attribute:: path - Contains the request path. + Contains the request path. If query component of the URL is present, + then ``path`` includes the query. Using the terminology of :rfc:`3986`, + ``path`` here includes ``hier-part`` and the ``query``. .. attribute:: request_version From webhook-mailer at python.org Sun Apr 25 13:30:23 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 17:30:23 -0000 Subject: [Python-checkins] BaseHTTPRequestHandler, that path includes query (GH-25597) Message-ID: https://github.com/python/cpython/commit/2825f906c7aaa1a34793f628ae30a52ed9e9acb8 commit: 2825f906c7aaa1a34793f628ae30a52ed9e9acb8 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T10:30:15-07:00 summary: BaseHTTPRequestHandler, that path includes query (GH-25597) * Clarify, for BaseHTTPRequestHandler, that path includes query Co-authored-by: David Jones (cherry picked from commit a89d8a94a0dd0bd45349efad6d5ad68641f4ff9a) Co-authored-by: Senthil Kumaran files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 478a5b31475cf..729d7e37137a8 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -98,7 +98,9 @@ provides three different variants: .. attribute:: path - Contains the request path. + Contains the request path. If query component of the URL is present, + then ``path`` includes the query. Using the terminology of :rfc:`3986`, + ``path`` here includes ``hier-part`` and the ``query``. .. attribute:: request_version From webhook-mailer at python.org Sun Apr 25 13:45:26 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 17:45:26 -0000 Subject: [Python-checkins] fix typo in warning (#20620) Message-ID: https://github.com/python/cpython/commit/a31cf86bc2d9c0738b2a0251af766d6b247683fc commit: a31cf86bc2d9c0738b2a0251af766d6b247683fc branch: master author: Allen <64019758+aboddie at users.noreply.github.com> committer: orsenthil date: 2021-04-25T10:45:05-07:00 summary: fix typo in warning (#20620) * Add space after period to warning in _tzpath.py Currently: InvalidTZPathWarning: Invalid paths specified in PYTHONTZPATH environment variable.Paths should be absolute but found the following relative paths: ... * Update _tzpath.py files: M Lib/zoneinfo/_tzpath.py diff --git a/Lib/zoneinfo/_tzpath.py b/Lib/zoneinfo/_tzpath.py index 9513611c17738..672560b951442 100644 --- a/Lib/zoneinfo/_tzpath.py +++ b/Lib/zoneinfo/_tzpath.py @@ -42,7 +42,7 @@ def _parse_python_tzpath(env_var): msg = _get_invalid_paths_message(raw_tzpath) warnings.warn( - "Invalid paths specified in PYTHONTZPATH environment variable." + "Invalid paths specified in PYTHONTZPATH environment variable. " + msg, InvalidTZPathWarning, ) From webhook-mailer at python.org Sun Apr 25 15:25:58 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 19:25:58 -0000 Subject: [Python-checkins] [3.9] fix typo in warning (GH-20620) (#25601) Message-ID: https://github.com/python/cpython/commit/d2e2534751fd675c4d5d3adc208bf4fc984da7bf commit: d2e2534751fd675c4d5d3adc208bf4fc984da7bf branch: 3.9 author: Senthil Kumaran committer: orsenthil date: 2021-04-25T12:25:51-07:00 summary: [3.9] fix typo in warning (GH-20620) (#25601) * Add space after period to warning in _tzpath.py Currently: InvalidTZPathWarning: Invalid paths specified in PYTHONTZPATH environment variable.Paths should be absolute but found the following relative paths: ... * Update _tzpath.py (cherry picked from commit a31cf86bc2d9c0738b2a0251af766d6b247683fc) Co-authored-by: Allen <64019758+aboddie at users.noreply.github.com> files: M Lib/zoneinfo/_tzpath.py diff --git a/Lib/zoneinfo/_tzpath.py b/Lib/zoneinfo/_tzpath.py index 9513611c17738..672560b951442 100644 --- a/Lib/zoneinfo/_tzpath.py +++ b/Lib/zoneinfo/_tzpath.py @@ -42,7 +42,7 @@ def _parse_python_tzpath(env_var): msg = _get_invalid_paths_message(raw_tzpath) warnings.warn( - "Invalid paths specified in PYTHONTZPATH environment variable." + "Invalid paths specified in PYTHONTZPATH environment variable. " + msg, InvalidTZPathWarning, ) From webhook-mailer at python.org Sun Apr 25 15:49:50 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 19:49:50 -0000 Subject: [Python-checkins] bpo-38605: Update __future__ module doc as `annotations` is now "mandatory in 3.11" (GH-25602) Message-ID: https://github.com/python/cpython/commit/f84f1b5c638eeb6e13c287fe5ebf3a7d2fdb60e9 commit: f84f1b5c638eeb6e13c287fe5ebf3a7d2fdb60e9 branch: master author: Saiyang Gou committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T12:49:26-07:00 summary: bpo-38605: Update __future__ module doc as `annotations` is now "mandatory in 3.11" (GH-25602) files: M Doc/library/__future__.rst diff --git a/Doc/library/__future__.rst b/Doc/library/__future__.rst index 41399942d3030..24bbd90d02cf7 100644 --- a/Doc/library/__future__.rst +++ b/Doc/library/__future__.rst @@ -90,7 +90,7 @@ language using this mechanism: | generator_stop | 3.5.0b1 | 3.7 | :pep:`479`: | | | | | *StopIteration handling inside generators* | +------------------+-------------+--------------+---------------------------------------------+ -| annotations | 3.7.0b1 | 3.10 | :pep:`563`: | +| annotations | 3.7.0b1 | 3.11 | :pep:`563`: | | | | | *Postponed evaluation of annotations* | +------------------+-------------+--------------+---------------------------------------------+ From webhook-mailer at python.org Sun Apr 25 17:13:26 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 21:13:26 -0000 Subject: [Python-checkins] Fix a typo in datamodel reference document (GH-24930) Message-ID: https://github.com/python/cpython/commit/a1a5e3c4c83c3e3fe24c96ae22dfdedc7e23a1bb commit: a1a5e3c4c83c3e3fe24c96ae22dfdedc7e23a1bb branch: master author: G?ry Ogam committer: orsenthil date: 2021-04-25T14:13:19-07:00 summary: Fix a typo in datamodel reference document (GH-24930) files: M Doc/reference/datamodel.rst diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 3b8780d834bf0..1697330cb9153 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1772,7 +1772,7 @@ Super Binding immediately preceding ``B`` and then invokes the descriptor with the call: ``A.__dict__['m'].__get__(obj, obj.__class__)``. -For instance bindings, the precedence of descriptor invocation depends on the +For instance bindings, the precedence of descriptor invocation depends on which descriptor methods are defined. A descriptor can define any combination of :meth:`__get__`, :meth:`__set__` and :meth:`__delete__`. If it does not define :meth:`__get__`, then accessing the attribute will return the descriptor From webhook-mailer at python.org Sun Apr 25 17:22:46 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 21:22:46 -0000 Subject: [Python-checkins] Fix a typo in datamodel reference document (GH-24930) Message-ID: https://github.com/python/cpython/commit/c3b63a5caa1ae2bbfa9733f997b991ec1e0af63f commit: c3b63a5caa1ae2bbfa9733f997b991ec1e0af63f branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T14:22:36-07:00 summary: Fix a typo in datamodel reference document (GH-24930) (cherry picked from commit a1a5e3c4c83c3e3fe24c96ae22dfdedc7e23a1bb) Co-authored-by: G?ry Ogam files: M Doc/reference/datamodel.rst diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index a2b3d4e6b0c18..f71560d640c5b 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1768,7 +1768,7 @@ Super Binding immediately preceding ``B`` and then invokes the descriptor with the call: ``A.__dict__['m'].__get__(obj, obj.__class__)``. -For instance bindings, the precedence of descriptor invocation depends on the +For instance bindings, the precedence of descriptor invocation depends on which descriptor methods are defined. A descriptor can define any combination of :meth:`__get__`, :meth:`__set__` and :meth:`__delete__`. If it does not define :meth:`__get__`, then accessing the attribute will return the descriptor From webhook-mailer at python.org Sun Apr 25 17:24:46 2021 From: webhook-mailer at python.org (orsenthil) Date: Sun, 25 Apr 2021 21:24:46 -0000 Subject: [Python-checkins] Remove mention of dst parameter from description of os.lstat() (GH-24704) Message-ID: https://github.com/python/cpython/commit/7f8e072c6dc88d6973d81f8fd572c04c88e7e3d7 commit: 7f8e072c6dc88d6973d81f8fd572c04c88e7e3d7 branch: master author: Sergey Fedoseev committer: orsenthil date: 2021-04-25T14:24:41-07:00 summary: Remove mention of dst parameter from description of os.lstat() (GH-24704) It looks like it was accidentally copy-pasted in 6fa7aada9bd3616e0beeb266e818497b2ec1c859. files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 41ef50d342df6..574aa2e6471ae 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -2027,7 +2027,7 @@ features: Added the *dir_fd* parameter. .. versionchanged:: 3.6 - Accepts a :term:`path-like object` for *src* and *dst*. + Accepts a :term:`path-like object`. .. versionchanged:: 3.8 On Windows, now opens reparse points that represent another path From webhook-mailer at python.org Sun Apr 25 17:35:59 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 21:35:59 -0000 Subject: [Python-checkins] Remove mention of dst parameter from description of os.lstat() (GH-24704) Message-ID: https://github.com/python/cpython/commit/ff22c1bcfd224c114836b5803e1edb01e384e78d commit: ff22c1bcfd224c114836b5803e1edb01e384e78d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T14:35:55-07:00 summary: Remove mention of dst parameter from description of os.lstat() (GH-24704) It looks like it was accidentally copy-pasted in 6fa7aada9bd3616e0beeb266e818497b2ec1c859. (cherry picked from commit 7f8e072c6dc88d6973d81f8fd572c04c88e7e3d7) Co-authored-by: Sergey Fedoseev files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 45213a664e9f2..c80a3210d7d39 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1886,7 +1886,7 @@ features: Added the *dir_fd* parameter. .. versionchanged:: 3.6 - Accepts a :term:`path-like object` for *src* and *dst*. + Accepts a :term:`path-like object`. .. versionchanged:: 3.8 On Windows, now opens reparse points that represent another path From webhook-mailer at python.org Sun Apr 25 17:37:01 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 21:37:01 -0000 Subject: [Python-checkins] Fix a typo in datamodel reference document (GH-24930) Message-ID: https://github.com/python/cpython/commit/ab99b6a8baae33194de107685d5fd6d59d6eddf7 commit: ab99b6a8baae33194de107685d5fd6d59d6eddf7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T14:36:57-07:00 summary: Fix a typo in datamodel reference document (GH-24930) (cherry picked from commit a1a5e3c4c83c3e3fe24c96ae22dfdedc7e23a1bb) Co-authored-by: G?ry Ogam files: M Doc/reference/datamodel.rst diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 3b3bd5524ec5d..46ee8ec3cba6f 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1773,7 +1773,7 @@ Super Binding immediately preceding ``B`` and then invokes the descriptor with the call: ``A.__dict__['m'].__get__(obj, obj.__class__)``. -For instance bindings, the precedence of descriptor invocation depends on the +For instance bindings, the precedence of descriptor invocation depends on which descriptor methods are defined. A descriptor can define any combination of :meth:`__get__`, :meth:`__set__` and :meth:`__delete__`. If it does not define :meth:`__get__`, then accessing the attribute will return the descriptor From webhook-mailer at python.org Sun Apr 25 17:47:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 25 Apr 2021 21:47:58 -0000 Subject: [Python-checkins] Remove mention of dst parameter from description of os.lstat() (GH-24704) Message-ID: https://github.com/python/cpython/commit/9b2c5b20a58e71f1c0550f976a468c3cbcb4e64e commit: 9b2c5b20a58e71f1c0550f976a468c3cbcb4e64e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-25T14:47:54-07:00 summary: Remove mention of dst parameter from description of os.lstat() (GH-24704) It looks like it was accidentally copy-pasted in 6fa7aada9bd3616e0beeb266e818497b2ec1c859. (cherry picked from commit 7f8e072c6dc88d6973d81f8fd572c04c88e7e3d7) Co-authored-by: Sergey Fedoseev files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 9d206f46aebeb..2aea2105c3646 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1895,7 +1895,7 @@ features: Added the *dir_fd* parameter. .. versionchanged:: 3.6 - Accepts a :term:`path-like object` for *src* and *dst*. + Accepts a :term:`path-like object`. .. versionchanged:: 3.8 On Windows, now opens reparse points that represent another path From webhook-mailer at python.org Sun Apr 25 20:42:54 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 26 Apr 2021 00:42:54 -0000 Subject: [Python-checkins] Add keyword-only fields to dataclasses. (GH=25608) Message-ID: https://github.com/python/cpython/commit/c0280532dc8cab184a48c97e03e41cc8807f383d commit: c0280532dc8cab184a48c97e03e41cc8807f383d branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-25T20:42:39-04:00 summary: Add keyword-only fields to dataclasses. (GH=25608) files: A Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst M Doc/library/dataclasses.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 0c0c7a8ddabfc..e13685e207cd0 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -46,7 +46,7 @@ directly specified in the ``InventoryItem`` definition shown above. Module-level decorators, classes, and functions ----------------------------------------------- -.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) +.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) This function is a :term:`decorator` that is used to add generated :term:`special method`\s to classes, as described below. @@ -79,7 +79,7 @@ Module-level decorators, classes, and functions class C: ... - @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) + @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) class C: ... @@ -168,6 +168,10 @@ Module-level decorators, classes, and functions ``__match_args__`` is already defined in the class, then ``__match_args__`` will not be generated. + - ``kw_only``: If true (the default value is ``False``), then all + fields will be marked as keyword-only. See the :term:`parameter` + glossary entry for details. Also see the ``dataclasses.KW_ONLY`` + section. ``field``\s may optionally specify a default value, using normal Python syntax:: @@ -333,7 +337,7 @@ Module-level decorators, classes, and functions Raises :exc:`TypeError` if ``instance`` is not a dataclass instance. -.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True) +.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) Creates a new dataclass with name ``cls_name``, fields as defined in ``fields``, base classes as given in ``bases``, and initialized @@ -341,9 +345,9 @@ Module-level decorators, classes, and functions iterable whose elements are each either ``name``, ``(name, type)``, or ``(name, type, Field)``. If just ``name`` is supplied, ``typing.Any`` is used for ``type``. The values of ``init``, - ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``, and - ``match_args`` have the same meaning as they do in - :func:`dataclass`. + ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``, + ``match_args``, and ``kw_only`` have the same meaning as they do + in :func:`dataclass`. This function is not strictly required, because any Python mechanism for creating a new class with ``__annotations__`` can @@ -520,6 +524,32 @@ The generated :meth:`__init__` method for ``C`` will look like:: def __init__(self, x: int = 15, y: int = 0, z: int = 10): +Re-ordering of keyword-only parameters in __init__ +-------------------------------------------------- + +After the fields needed for :meth:`__init__` are computed, any +keyword-only fields are put after regular fields. In this example, +``Base.y`` and ``D.t`` are keyword-only fields:: + + @dataclass + class Base: + x: Any = 15.0 + _: KW_ONLY + y: int = 0 + + @dataclass + class D(Base): + z: int = 10 + t: int = field(kw_only=True, default=0) + +The generated :meth:`__init__` method for ``D`` will look like:: + + def __init__(self, x: Any = 15.0, z: int = 10, *, y: int = 0, t: int = 0): + +The relative ordering of keyword-only arguments is not changed from +the order they are in computed field :meth:`__init__` list. + + Default factory functions ------------------------- diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 036349bfbda73..3de50cf390cc3 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -16,6 +16,7 @@ 'Field', 'FrozenInstanceError', 'InitVar', + 'KW_ONLY', 'MISSING', # Helper functions. @@ -163,8 +164,8 @@ # +-------+-------+-------+ # | True | add | | <- the default # +=======+=======+=======+ -# __match_args__ is a tuple of __init__ parameter names; non-init fields must -# be matched by keyword. +# __match_args__ is always added unless the class already defines it. It is a +# tuple of __init__ parameter names; non-init fields must be matched by keyword. # Raised when an attempt is made to modify a frozen class. @@ -184,6 +185,12 @@ class _MISSING_TYPE: pass MISSING = _MISSING_TYPE() +# A sentinel object to indicate that following fields are keyword-only by +# default. Use a class to give it a better repr. +class _KW_ONLY_TYPE: + pass +KW_ONLY = _KW_ONLY_TYPE() + # Since most per-field metadata will be unused, create an empty # read-only proxy that can be shared among all fields. _EMPTY_METADATA = types.MappingProxyType({}) @@ -232,7 +239,6 @@ def __repr__(self): def __class_getitem__(cls, type): return InitVar(type) - # Instances of Field are only ever created from within this module, # and only from the field() function, although Field instances are # exposed externally as (conceptually) read-only objects. @@ -253,11 +259,12 @@ class Field: 'init', 'compare', 'metadata', + 'kw_only', '_field_type', # Private: not to be used by user code. ) def __init__(self, default, default_factory, init, repr, hash, compare, - metadata): + metadata, kw_only): self.name = None self.type = None self.default = default @@ -269,6 +276,7 @@ def __init__(self, default, default_factory, init, repr, hash, compare, self.metadata = (_EMPTY_METADATA if metadata is None else types.MappingProxyType(metadata)) + self.kw_only = kw_only self._field_type = None def __repr__(self): @@ -282,6 +290,7 @@ def __repr__(self): f'hash={self.hash!r},' f'compare={self.compare!r},' f'metadata={self.metadata!r},' + f'kw_only={self.kw_only!r},' f'_field_type={self._field_type}' ')') @@ -335,17 +344,19 @@ def __repr__(self): # so that a type checker can be told (via overloads) that this is a # function whose type depends on its parameters. def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): + hash=None, compare=True, metadata=None, kw_only=MISSING): """Return an object to identify dataclass fields. default is the default value of the field. default_factory is a 0-argument function called to initialize a field's value. If init - is True, the field will be a parameter to the class's __init__() - function. If repr is True, the field will be included in the - object's repr(). If hash is True, the field will be included in - the object's hash(). If compare is True, the field will be used - in comparison functions. metadata, if specified, must be a - mapping which is stored but not otherwise examined by dataclass. + is true, the field will be a parameter to the class's __init__() + function. If repr is true, the field will be included in the + object's repr(). If hash is true, the field will be included in the + object's hash(). If compare is true, the field will be used in + comparison functions. metadata, if specified, must be a mapping + which is stored but not otherwise examined by dataclass. If kw_only + is true, the field will become a keyword-only parameter to + __init__(). It is an error to specify both default and default_factory. """ @@ -353,7 +364,16 @@ def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, if default is not MISSING and default_factory is not MISSING: raise ValueError('cannot specify both default and default_factory') return Field(default, default_factory, init, repr, hash, compare, - metadata) + metadata, kw_only) + + +def _fields_in_init_order(fields): + # Returns the fields as __init__ will output them. It returns 2 tuples: + # the first for normal args, and the second for keyword args. + + return (tuple(f for f in fields if f.init and not f.kw_only), + tuple(f for f in fields if f.init and f.kw_only) + ) def _tuple_str(obj_name, fields): @@ -410,7 +430,6 @@ def _create_fn(name, args, body, *, globals=None, locals=None, local_vars = ', '.join(locals.keys()) txt = f"def __create_fn__({local_vars}):\n{txt}\n return {name}" - ns = {} exec(txt, globals, ns) return ns['__create_fn__'](**locals) @@ -501,7 +520,8 @@ def _init_param(f): return f'{f.name}:_type_{f.name}{default}' -def _init_fn(fields, frozen, has_post_init, self_name, globals): +def _init_fn(fields, std_fields, kw_only_fields, frozen, has_post_init, + self_name, globals): # fields contains both real fields and InitVar pseudo-fields. # Make sure we don't have fields without defaults following fields @@ -509,9 +529,10 @@ def _init_fn(fields, frozen, has_post_init, self_name, globals): # function source code, but catching it here gives a better error # message, and future-proofs us in case we build up the function # using ast. + seen_default = False - for f in fields: - # Only consider fields in the __init__ call. + for f in std_fields: + # Only consider the non-kw-only fields in the __init__ call. if f.init: if not (f.default is MISSING and f.default_factory is MISSING): seen_default = True @@ -543,8 +564,15 @@ def _init_fn(fields, frozen, has_post_init, self_name, globals): if not body_lines: body_lines = ['pass'] + _init_params = [_init_param(f) for f in std_fields] + if kw_only_fields: + # Add the keyword-only args. Because the * can only be added if + # there's at least one keyword-only arg, there needs to be a test here + # (instead of just concatenting the lists together). + _init_params += ['*'] + _init_params += [_init_param(f) for f in kw_only_fields] return _create_fn('__init__', - [self_name] + [_init_param(f) for f in fields if f.init], + [self_name] + _init_params, body_lines, locals=locals, globals=globals, @@ -623,6 +651,9 @@ def _is_initvar(a_type, dataclasses): return (a_type is dataclasses.InitVar or type(a_type) is dataclasses.InitVar) +def _is_kw_only(a_type, dataclasses): + return a_type is dataclasses.KW_ONLY + def _is_type(annotation, cls, a_module, a_type, is_type_predicate): # Given a type annotation string, does it refer to a_type in @@ -683,10 +714,11 @@ def _is_type(annotation, cls, a_module, a_type, is_type_predicate): return False -def _get_field(cls, a_name, a_type): - # Return a Field object for this field name and type. ClassVars - # and InitVars are also returned, but marked as such (see - # f._field_type). +def _get_field(cls, a_name, a_type, default_kw_only): + # Return a Field object for this field name and type. ClassVars and + # InitVars are also returned, but marked as such (see f._field_type). + # default_kw_only is the value of kw_only to use if there isn't a field() + # that defines it. # If the default value isn't derived from Field, then it's only a # normal default value. Convert it to a Field(). @@ -757,6 +789,19 @@ def _get_field(cls, a_name, a_type): # init=)? It makes no sense for # ClassVar and InitVar to specify init=. + # kw_only validation and assignment. + if f._field_type in (_FIELD, _FIELD_INITVAR): + # For real and InitVar fields, if kw_only wasn't specified use the + # default value. + if f.kw_only is MISSING: + f.kw_only = default_kw_only + else: + # Make sure kw_only isn't set for ClassVars + assert f._field_type is _FIELD_CLASSVAR + if f.kw_only is not MISSING: + raise TypeError(f'field {f.name} is a ClassVar but specifies ' + 'kw_only') + # For real fields, disallow mutable defaults for known types. if f._field_type is _FIELD and isinstance(f.default, (list, dict, set)): raise ValueError(f'mutable default {type(f.default)} for field ' @@ -829,7 +874,7 @@ def _hash_exception(cls, fields, globals): def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, - match_args): + match_args, kw_only): # Now that dicts retain insertion order, there's no reason to use # an ordered dict. I am leveraging that ordering here, because # derived class fields overwrite base class fields, but the order @@ -883,8 +928,22 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, # Now find fields in our class. While doing so, validate some # things, and set the default values (as class attributes) where # we can. - cls_fields = [_get_field(cls, name, type) - for name, type in cls_annotations.items()] + cls_fields = [] + # Get a reference to this module for the _is_kw_only() test. + dataclasses = sys.modules[__name__] + for name, type in cls_annotations.items(): + # See if this is a marker to change the value of kw_only. + if (_is_kw_only(type, dataclasses) + or (isinstance(type, str) + and _is_type(type, cls, dataclasses, dataclasses.KW_ONLY, + _is_kw_only))): + # Switch the default to kw_only=True, and ignore this + # annotation: it's not a real field. + kw_only = True + else: + # Otherwise it's a field of some type. + cls_fields.append(_get_field(cls, name, type, kw_only)) + for f in cls_fields: fields[f.name] = f @@ -939,15 +998,22 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, if order and not eq: raise ValueError('eq must be true if order is true') + # Include InitVars and regular fields (so, not ClassVars). This is + # initialized here, outside of the "if init:" test, because std_init_fields + # is used with match_args, below. + all_init_fields = [f for f in fields.values() + if f._field_type in (_FIELD, _FIELD_INITVAR)] + (std_init_fields, + kw_only_init_fields) = _fields_in_init_order(all_init_fields) + if init: # Does this class have a post-init function? has_post_init = hasattr(cls, _POST_INIT_NAME) - # Include InitVars and regular fields (so, not ClassVars). - flds = [f for f in fields.values() - if f._field_type in (_FIELD, _FIELD_INITVAR)] _set_new_attribute(cls, '__init__', - _init_fn(flds, + _init_fn(all_init_fields, + std_init_fields, + kw_only_init_fields, frozen, has_post_init, # The name to use for the "self" @@ -1016,8 +1082,9 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, str(inspect.signature(cls)).replace(' -> None', '')) if match_args: + # I could probably compute this once _set_new_attribute(cls, '__match_args__', - tuple(f.name for f in field_list if f.init)) + tuple(f.name for f in std_init_fields)) abc.update_abstractmethods(cls) @@ -1025,7 +1092,8 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False, match_args=True): + unsafe_hash=False, frozen=False, match_args=True, + kw_only=False): """Returns the same class as was passed in, with dunder methods added based on the fields defined in the class. @@ -1036,12 +1104,13 @@ def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, comparison dunder methods are added. If unsafe_hash is true, a __hash__() method function is added. If frozen is true, fields may not be assigned to after instance creation. If match_args is true, - the __match_args__ tuple is added. + the __match_args__ tuple is added. If kw_only is true, then by + default all fields are keyword-only. """ def wrap(cls): return _process_class(cls, init, repr, eq, order, unsafe_hash, - frozen, match_args) + frozen, match_args, kw_only) # See if we're being called as @dataclass or @dataclass(). if cls is None: diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index f35f466125d1c..edb08485be223 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -61,6 +61,7 @@ def test_field_repr(self): f"default=1,default_factory={MISSING!r}," \ "init=True,repr=False,hash=None," \ "compare=True,metadata=mappingproxy({})," \ + f"kw_only={MISSING!r}," \ "_field_type=None)" self.assertEqual(repr_output, expected_output) @@ -3501,5 +3502,163 @@ def test_make_dataclasses(self): self.assertEqual(C.__match_args__, ('z',)) +class TestKwArgs(unittest.TestCase): + def test_no_classvar_kwarg(self): + msg = 'field a is a ClassVar but specifies kw_only' + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: ClassVar[int] = field(kw_only=True) + + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: ClassVar[int] = field(kw_only=False) + + with self.assertRaisesRegex(TypeError, msg): + @dataclass(kw_only=True) + class A: + a: ClassVar[int] = field(kw_only=False) + + def test_field_marked_as_kwonly(self): + ####################### + # Using dataclass(kw_only=True) + @dataclass(kw_only=True) + class A: + a: int + self.assertTrue(fields(A)[0].kw_only) + + @dataclass(kw_only=True) + class A: + a: int = field(kw_only=True) + self.assertTrue(fields(A)[0].kw_only) + + @dataclass(kw_only=True) + class A: + a: int = field(kw_only=False) + self.assertFalse(fields(A)[0].kw_only) + + ####################### + # Using dataclass(kw_only=False) + @dataclass(kw_only=False) + class A: + a: int + self.assertFalse(fields(A)[0].kw_only) + + @dataclass(kw_only=False) + class A: + a: int = field(kw_only=True) + self.assertTrue(fields(A)[0].kw_only) + + @dataclass(kw_only=False) + class A: + a: int = field(kw_only=False) + self.assertFalse(fields(A)[0].kw_only) + + ####################### + # Not specifying dataclass(kw_only) + @dataclass + class A: + a: int + self.assertFalse(fields(A)[0].kw_only) + + @dataclass + class A: + a: int = field(kw_only=True) + self.assertTrue(fields(A)[0].kw_only) + + @dataclass + class A: + a: int = field(kw_only=False) + self.assertFalse(fields(A)[0].kw_only) + + def test_match_args(self): + # kw fields don't show up in __match_args__. + @dataclass(kw_only=True) + class C: + a: int + self.assertEqual(C(a=42).__match_args__, ()) + + @dataclass + class C: + a: int + b: int = field(kw_only=True) + self.assertEqual(C(42, b=10).__match_args__, ('a',)) + + def test_KW_ONLY(self): + @dataclass + class A: + a: int + _: KW_ONLY + b: int + c: int + A(3, c=5, b=4) + msg = "takes 2 positional arguments but 4 were given" + with self.assertRaisesRegex(TypeError, msg): + A(3, 4, 5) + + + @dataclass(kw_only=True) + class B: + a: int + _: KW_ONLY + b: int + c: int + B(a=3, b=4, c=5) + msg = "takes 1 positional argument but 4 were given" + with self.assertRaisesRegex(TypeError, msg): + B(3, 4, 5) + + # Explicitely make a field that follows KW_ONLY be non-keyword-only. + @dataclass + class C: + a: int + _: KW_ONLY + b: int + c: int = field(kw_only=False) + c = C(1, 2, b=3) + self.assertEqual(c.a, 1) + self.assertEqual(c.b, 3) + self.assertEqual(c.c, 2) + c = C(1, b=3, c=2) + self.assertEqual(c.a, 1) + self.assertEqual(c.b, 3) + self.assertEqual(c.c, 2) + c = C(1, b=3, c=2) + self.assertEqual(c.a, 1) + self.assertEqual(c.b, 3) + self.assertEqual(c.c, 2) + c = C(c=2, b=3, a=1) + self.assertEqual(c.a, 1) + self.assertEqual(c.b, 3) + self.assertEqual(c.c, 2) + + def test_post_init(self): + @dataclass + class A: + a: int + _: KW_ONLY + b: InitVar[int] + c: int + d: InitVar[int] + def __post_init__(self, b, d): + raise CustomError(f'{b=} {d=}') + with self.assertRaisesRegex(CustomError, 'b=3 d=4'): + A(1, c=2, b=3, d=4) + + @dataclass + class B: + a: int + _: KW_ONLY + b: InitVar[int] + c: int + d: InitVar[int] + def __post_init__(self, b, d): + self.a = b + self.c = d + b = B(1, c=2, b=3, d=4) + self.assertEqual(asdict(b), {'a': 3, 'c': 4}) + + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst b/Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst new file mode 100644 index 0000000000000..11ea5f916d173 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst @@ -0,0 +1,2 @@ +Add the ability to specify keyword-only fields to dataclasses. These fields +will become keyword-only arguments to the generated __init__. From webhook-mailer at python.org Sun Apr 25 21:10:12 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:10:12 -0000 Subject: [Python-checkins] Fix broken links and improve stand-alone tools list in FAQ GH-22124 Message-ID: https://github.com/python/cpython/commit/d28b34695301ec99a9334ad8d69b6092f4f703d5 commit: d28b34695301ec99a9334ad8d69b6092f4f703d5 branch: master author: Andre Delfino committer: orsenthil date: 2021-04-25T18:10:05-07:00 summary: Fix broken links and improve stand-alone tools list in FAQ GH-22124 files: M Doc/faq/programming.rst M Doc/faq/windows.rst M Doc/using/windows.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index ff78ca7320d7d8..d00be2462efc87 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -90,11 +90,12 @@ then compiles the generated C code and links it with the rest of the Python interpreter to form a self-contained binary which acts exactly like your script. Obviously, freeze requires a C compiler. There are several other utilities -which don't. One is Thomas Heller's py2exe (Windows only) at +which don't: - http://www.py2exe.org/ - -Another tool is Anthony Tuininga's `cx_Freeze `_. +* `py2exe `_ for Windows binaries +* `py2app `_ for Mac OS X binaries +* `cx_Freeze `_ for cross-platform + binaries Are there coding standards or a style guide for Python programs? diff --git a/Doc/faq/windows.rst b/Doc/faq/windows.rst index c8e9c5fb670301..186dac2e255b37 100644 --- a/Doc/faq/windows.rst +++ b/Doc/faq/windows.rst @@ -140,11 +140,9 @@ offender. How do I make an executable from a Python script? ------------------------------------------------- -See `cx_Freeze `_ for a distutils extension -that allows you to create console and GUI executables from Python code. -`py2exe `_, the most popular extension for building -Python 2.x-based executables, does not yet support Python 3 but a version that -does is in development. +See `cx_Freeze `_ and +`py2exe `_, both are distutils extensions +that allow you to create console and GUI executables from Python code. Is a ``*.pyd`` file the same as a DLL? diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index 3d638642f30080..68ee09c565e21f 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -1106,7 +1106,7 @@ shipped with PyWin32. It is an embeddable IDE with a built-in debugger. cx_Freeze --------- -`cx_Freeze `_ is a :mod:`distutils` +`cx_Freeze `_ is a :mod:`distutils` extension (see :ref:`extending-distutils`) which wraps Python scripts into executable Windows programs (:file:`{*}.exe` files). When you have done this, you can distribute your application without requiring your users to install From webhook-mailer at python.org Sun Apr 25 21:22:32 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:22:32 -0000 Subject: [Python-checkins] Fix copy.Error casing in documentation GH-22004 Message-ID: https://github.com/python/cpython/commit/0d930f108cb8ba66f54197175c1fba0c38253e4a commit: 0d930f108cb8ba66f54197175c1fba0c38253e4a branch: master author: Andre Delfino committer: orsenthil date: 2021-04-25T18:22:28-07:00 summary: Fix copy.Error casing in documentation GH-22004 files: M Doc/library/copy.rst diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index 176e01db6f9fa..01ebf198d7c50 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -27,7 +27,7 @@ Interface summary: Return a deep copy of *x*. -.. exception:: error +.. exception:: Error Raised for module specific errors. From webhook-mailer at python.org Sun Apr 25 21:38:19 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:38:19 -0000 Subject: [Python-checkins] Fix id of 'Internet Message Format' RFC in email doc (GH-24137) Message-ID: https://github.com/python/cpython/commit/cb5c802dcf8851663c4eac5d73f968f626a3a1dc commit: cb5c802dcf8851663c4eac5d73f968f626a3a1dc branch: master author: Denis Laxalde committer: orsenthil date: 2021-04-25T18:38:12-07:00 summary: Fix id of 'Internet Message Format' RFC in email doc (GH-24137) Previous ID (5233) refers to "Sieve Email Filtering: Subaddress Extension". It seems that the actual reference should be "Internet Message Format" RFC 5322 (https://tools.ietf.org/html/rfc5322). (The typo probably comes from commit 29d1bc0842 in which the ID of this RFC got updated from the obsolete 2822.) Co-authored-by: Ambrose Chua files: M Doc/library/email.compat32-message.rst M Doc/library/email.rst diff --git a/Doc/library/email.compat32-message.rst b/Doc/library/email.compat32-message.rst index 745b3a6a3ad42..c68e773b1688a 100644 --- a/Doc/library/email.compat32-message.rst +++ b/Doc/library/email.compat32-message.rst @@ -23,7 +23,7 @@ policy :attr:`~email.policy.Compat32`. If you are going to use another policy, you should be using the :class:`~email.message.EmailMessage` class instead. An email message consists of *headers* and a *payload*. Headers must be -:rfc:`5233` style names and values, where the field name and value are +:rfc:`5322` style names and values, where the field name and value are separated by a colon. The colon is not part of either the field name or the field value. The payload may be a simple text message, or a binary object, or a structured sequence of sub-messages each with their own set of headers and diff --git a/Doc/library/email.rst b/Doc/library/email.rst index fae99cf3e6abb..5eebcd9e896d9 100644 --- a/Doc/library/email.rst +++ b/Doc/library/email.rst @@ -16,7 +16,7 @@ The :mod:`email` package is a library for managing email messages. It is specifically *not* designed to do any sending of email messages to SMTP (:rfc:`2821`), NNTP, or other servers; those are functions of modules such as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package attempts to be as -RFC-compliant as possible, supporting :rfc:`5233` and :rfc:`6532`, as well as +RFC-compliant as possible, supporting :rfc:`5322` and :rfc:`6532`, as well as such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`, :rfc:`2183`, and :rfc:`2231`. From webhook-mailer at python.org Sun Apr 25 21:39:28 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:39:28 -0000 Subject: [Python-checkins] Fix copy.Error casing in documentation GH-22004 (#25611) Message-ID: https://github.com/python/cpython/commit/b861ed1006ab02e9d921a508139febd26d05b5c7 commit: b861ed1006ab02e9d921a508139febd26d05b5c7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:39:24-07:00 summary: Fix copy.Error casing in documentation GH-22004 (#25611) (cherry picked from commit 0d930f108cb8ba66f54197175c1fba0c38253e4a) Co-authored-by: Andre Delfino Co-authored-by: Andre Delfino files: M Doc/library/copy.rst diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index a8e8bfb1e832b..0eb5a793ad953 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -27,7 +27,7 @@ Interface summary: Return a deep copy of *x*. -.. exception:: error +.. exception:: Error Raised for module specific errors. From webhook-mailer at python.org Sun Apr 25 21:39:51 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:39:51 -0000 Subject: [Python-checkins] Fix copy.Error casing in documentation GH-22004 (#25612) Message-ID: https://github.com/python/cpython/commit/62e7646fe2cb0ca73103b71cec3eba1eb4f70cbb commit: 62e7646fe2cb0ca73103b71cec3eba1eb4f70cbb branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:39:47-07:00 summary: Fix copy.Error casing in documentation GH-22004 (#25612) (cherry picked from commit 0d930f108cb8ba66f54197175c1fba0c38253e4a) Co-authored-by: Andre Delfino files: M Doc/library/copy.rst diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index a8e8bfb1e832b..0eb5a793ad953 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -27,7 +27,7 @@ Interface summary: Return a deep copy of *x*. -.. exception:: error +.. exception:: Error Raised for module specific errors. From webhook-mailer at python.org Sun Apr 25 21:42:31 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:42:31 -0000 Subject: [Python-checkins] Fix id of 'Internet Message Format' RFC in email doc GH-25614 Message-ID: https://github.com/python/cpython/commit/28d3f7a3aff31c826e605d687256a95c7db373b1 commit: 28d3f7a3aff31c826e605d687256a95c7db373b1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:42:27-07:00 summary: Fix id of 'Internet Message Format' RFC in email doc GH-25614 Previous ID (5233) refers to "Sieve Email Filtering: Subaddress Extension". It seems that the actual reference should be "Internet Message Format" RFC 5322 (https://tools.ietf.org/html/rfc5322). (The typo probably comes from commit 29d1bc0842 in which the ID of this RFC got updated from the obsolete 2822.) Co-authored-by: Ambrose Chua (cherry picked from commit cb5c802dcf8851663c4eac5d73f968f626a3a1dc) Co-authored-by: Denis Laxalde files: M Doc/library/email.compat32-message.rst M Doc/library/email.rst diff --git a/Doc/library/email.compat32-message.rst b/Doc/library/email.compat32-message.rst index 745b3a6a3ad42..c68e773b1688a 100644 --- a/Doc/library/email.compat32-message.rst +++ b/Doc/library/email.compat32-message.rst @@ -23,7 +23,7 @@ policy :attr:`~email.policy.Compat32`. If you are going to use another policy, you should be using the :class:`~email.message.EmailMessage` class instead. An email message consists of *headers* and a *payload*. Headers must be -:rfc:`5233` style names and values, where the field name and value are +:rfc:`5322` style names and values, where the field name and value are separated by a colon. The colon is not part of either the field name or the field value. The payload may be a simple text message, or a binary object, or a structured sequence of sub-messages each with their own set of headers and diff --git a/Doc/library/email.rst b/Doc/library/email.rst index fae99cf3e6abb..5eebcd9e896d9 100644 --- a/Doc/library/email.rst +++ b/Doc/library/email.rst @@ -16,7 +16,7 @@ The :mod:`email` package is a library for managing email messages. It is specifically *not* designed to do any sending of email messages to SMTP (:rfc:`2821`), NNTP, or other servers; those are functions of modules such as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package attempts to be as -RFC-compliant as possible, supporting :rfc:`5233` and :rfc:`6532`, as well as +RFC-compliant as possible, supporting :rfc:`5322` and :rfc:`6532`, as well as such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`, :rfc:`2183`, and :rfc:`2231`. From webhook-mailer at python.org Sun Apr 25 21:43:00 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:43:00 -0000 Subject: [Python-checkins] Fix id of 'Internet Message Format' RFC in email doc GH-25613 Message-ID: https://github.com/python/cpython/commit/7349c124526fab9ad6b9d6bb85a1b15a662a22db commit: 7349c124526fab9ad6b9d6bb85a1b15a662a22db branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:42:56-07:00 summary: Fix id of 'Internet Message Format' RFC in email doc GH-25613 Previous ID (5233) refers to "Sieve Email Filtering: Subaddress Extension". It seems that the actual reference should be "Internet Message Format" RFC 5322 (https://tools.ietf.org/html/rfc5322). (The typo probably comes from commit 29d1bc0842 in which the ID of this RFC got updated from the obsolete 2822.) Co-authored-by: Ambrose Chua (cherry picked from commit cb5c802dcf8851663c4eac5d73f968f626a3a1dc) Co-authored-by: Denis Laxalde files: M Doc/library/email.compat32-message.rst M Doc/library/email.rst diff --git a/Doc/library/email.compat32-message.rst b/Doc/library/email.compat32-message.rst index 745b3a6a3ad42..c68e773b1688a 100644 --- a/Doc/library/email.compat32-message.rst +++ b/Doc/library/email.compat32-message.rst @@ -23,7 +23,7 @@ policy :attr:`~email.policy.Compat32`. If you are going to use another policy, you should be using the :class:`~email.message.EmailMessage` class instead. An email message consists of *headers* and a *payload*. Headers must be -:rfc:`5233` style names and values, where the field name and value are +:rfc:`5322` style names and values, where the field name and value are separated by a colon. The colon is not part of either the field name or the field value. The payload may be a simple text message, or a binary object, or a structured sequence of sub-messages each with their own set of headers and diff --git a/Doc/library/email.rst b/Doc/library/email.rst index fae99cf3e6abb..5eebcd9e896d9 100644 --- a/Doc/library/email.rst +++ b/Doc/library/email.rst @@ -16,7 +16,7 @@ The :mod:`email` package is a library for managing email messages. It is specifically *not* designed to do any sending of email messages to SMTP (:rfc:`2821`), NNTP, or other servers; those are functions of modules such as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package attempts to be as -RFC-compliant as possible, supporting :rfc:`5233` and :rfc:`6532`, as well as +RFC-compliant as possible, supporting :rfc:`5322` and :rfc:`6532`, as well as such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`, :rfc:`2183`, and :rfc:`2231`. From webhook-mailer at python.org Sun Apr 25 21:43:32 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:43:32 -0000 Subject: [Python-checkins] Fix broken links and improve stand-alone tools list in FAQ GH-25610 Message-ID: https://github.com/python/cpython/commit/f28a59c13efb3db021e1eb404f74bd10b0c8036e commit: f28a59c13efb3db021e1eb404f74bd10b0c8036e branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:43:28-07:00 summary: Fix broken links and improve stand-alone tools list in FAQ GH-25610 (cherry picked from commit d28b34695301ec99a9334ad8d69b6092f4f703d5) Co-authored-by: Andre Delfino files: M Doc/faq/programming.rst M Doc/faq/windows.rst M Doc/using/windows.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index b16b8c8d380599..cc597df6c5db0a 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -90,11 +90,12 @@ then compiles the generated C code and links it with the rest of the Python interpreter to form a self-contained binary which acts exactly like your script. Obviously, freeze requires a C compiler. There are several other utilities -which don't. One is Thomas Heller's py2exe (Windows only) at +which don't: - http://www.py2exe.org/ - -Another tool is Anthony Tuininga's `cx_Freeze `_. +* `py2exe `_ for Windows binaries +* `py2app `_ for Mac OS X binaries +* `cx_Freeze `_ for cross-platform + binaries Are there coding standards or a style guide for Python programs? diff --git a/Doc/faq/windows.rst b/Doc/faq/windows.rst index c8e9c5fb670301..186dac2e255b37 100644 --- a/Doc/faq/windows.rst +++ b/Doc/faq/windows.rst @@ -140,11 +140,9 @@ offender. How do I make an executable from a Python script? ------------------------------------------------- -See `cx_Freeze `_ for a distutils extension -that allows you to create console and GUI executables from Python code. -`py2exe `_, the most popular extension for building -Python 2.x-based executables, does not yet support Python 3 but a version that -does is in development. +See `cx_Freeze `_ and +`py2exe `_, both are distutils extensions +that allow you to create console and GUI executables from Python code. Is a ``*.pyd`` file the same as a DLL? diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index 12ec0fc90c0ff7..77af0e1995cee4 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -1118,7 +1118,7 @@ shipped with PyWin32. It is an embeddable IDE with a built-in debugger. cx_Freeze --------- -`cx_Freeze `_ is a :mod:`distutils` +`cx_Freeze `_ is a :mod:`distutils` extension (see :ref:`extending-distutils`) which wraps Python scripts into executable Windows programs (:file:`{*}.exe` files). When you have done this, you can distribute your application without requiring your users to install From webhook-mailer at python.org Sun Apr 25 21:43:47 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:43:47 -0000 Subject: [Python-checkins] Fix broken links and improve stand-alone tools list in FAQ GH-25609 Message-ID: https://github.com/python/cpython/commit/2b475dc1ffd9c221a137534bc8236818b166cb85 commit: 2b475dc1ffd9c221a137534bc8236818b166cb85 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:43:43-07:00 summary: Fix broken links and improve stand-alone tools list in FAQ GH-25609 (cherry picked from commit d28b34695301ec99a9334ad8d69b6092f4f703d5) Co-authored-by: Andre Delfino files: M Doc/faq/programming.rst M Doc/faq/windows.rst M Doc/using/windows.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 3c8aa14fad10af..eb8ac79c906602 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -90,11 +90,12 @@ then compiles the generated C code and links it with the rest of the Python interpreter to form a self-contained binary which acts exactly like your script. Obviously, freeze requires a C compiler. There are several other utilities -which don't. One is Thomas Heller's py2exe (Windows only) at +which don't: - http://www.py2exe.org/ - -Another tool is Anthony Tuininga's `cx_Freeze `_. +* `py2exe `_ for Windows binaries +* `py2app `_ for Mac OS X binaries +* `cx_Freeze `_ for cross-platform + binaries Are there coding standards or a style guide for Python programs? diff --git a/Doc/faq/windows.rst b/Doc/faq/windows.rst index c8e9c5fb670301..186dac2e255b37 100644 --- a/Doc/faq/windows.rst +++ b/Doc/faq/windows.rst @@ -140,11 +140,9 @@ offender. How do I make an executable from a Python script? ------------------------------------------------- -See `cx_Freeze `_ for a distutils extension -that allows you to create console and GUI executables from Python code. -`py2exe `_, the most popular extension for building -Python 2.x-based executables, does not yet support Python 3 but a version that -does is in development. +See `cx_Freeze `_ and +`py2exe `_, both are distutils extensions +that allow you to create console and GUI executables from Python code. Is a ``*.pyd`` file the same as a DLL? diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index 4699e37509e6f3..c04a34a62f62e2 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -1112,7 +1112,7 @@ shipped with PyWin32. It is an embeddable IDE with a built-in debugger. cx_Freeze --------- -`cx_Freeze `_ is a :mod:`distutils` +`cx_Freeze `_ is a :mod:`distutils` extension (see :ref:`extending-distutils`) which wraps Python scripts into executable Windows programs (:file:`{*}.exe` files). When you have done this, you can distribute your application without requiring your users to install From webhook-mailer at python.org Sun Apr 25 21:54:29 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:54:29 -0000 Subject: [Python-checkins] bpo-43534: Fix the turtle module working with multiple root windows GH-25594 Message-ID: https://github.com/python/cpython/commit/9ca20fdc4c27e31832adbd6d393a87e7d8953e3c commit: 9ca20fdc4c27e31832adbd6d393a87e7d8953e3c branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:54:25-07:00 summary: bpo-43534: Fix the turtle module working with multiple root windows GH-25594 (cherry picked from commit 8af929fc76f21fb123f6a47cb3ebcf4e5b758dea) Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 13f662a8c2108..024fed858f683 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -464,20 +464,18 @@ class TurtleScreenBase(object): a corresponding TurtleScreenBase class has to be implemented. """ - @staticmethod - def _blankimage(): + def _blankimage(self): """return a blank image object """ - img = TK.PhotoImage(width=1, height=1) + img = TK.PhotoImage(width=1, height=1, master=self.cv) img.blank() return img - @staticmethod - def _image(filename): + def _image(self, filename): """return an image object containing the imagedata from a gif-file named filename. """ - return TK.PhotoImage(file=filename) + return TK.PhotoImage(file=filename, master=self.cv) def __init__(self, cv): self.cv = cv @@ -811,7 +809,7 @@ def mainloop(self): >>> screen.mainloop() """ - TK.mainloop() + self.cv.tk.mainloop() def textinput(self, title, prompt): """Pop up a dialog window for input of a string. @@ -966,6 +964,8 @@ class TurtleScreen(TurtleScreenBase): def __init__(self, cv, mode=_CFG["mode"], colormode=_CFG["colormode"], delay=_CFG["delay"]): + TurtleScreenBase.__init__(self, cv) + self._shapes = { "arrow" : Shape("polygon", ((-10,0), (10,0), (0,10))), "turtle" : Shape("polygon", ((0,16), (-2,14), (-1,10), (-4,7), @@ -989,7 +989,6 @@ def __init__(self, cv, mode=_CFG["mode"], self._bgpics = {"nopic" : ""} - TurtleScreenBase.__init__(self, cv) self._mode = mode self._delayvalue = delay self._colormode = _CFG["colormode"] diff --git a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst new file mode 100644 index 0000000000000..cb4d90b723d1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst @@ -0,0 +1 @@ +Fixed the :mod:`turtle` module working with non-default root window. From webhook-mailer at python.org Sun Apr 25 21:54:45 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:54:45 -0000 Subject: [Python-checkins] bpo-43534: Fix the turtle module working with multiple root windows GH-25593 Message-ID: https://github.com/python/cpython/commit/b47f05157bd05c5825c26389af5be3064a2c1313 commit: b47f05157bd05c5825c26389af5be3064a2c1313 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:54:41-07:00 summary: bpo-43534: Fix the turtle module working with multiple root windows GH-25593 (cherry picked from commit 8af929fc76f21fb123f6a47cb3ebcf4e5b758dea) Co-authored-by: Serhiy Storchaka Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 13f662a8c2108..024fed858f683 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -464,20 +464,18 @@ class TurtleScreenBase(object): a corresponding TurtleScreenBase class has to be implemented. """ - @staticmethod - def _blankimage(): + def _blankimage(self): """return a blank image object """ - img = TK.PhotoImage(width=1, height=1) + img = TK.PhotoImage(width=1, height=1, master=self.cv) img.blank() return img - @staticmethod - def _image(filename): + def _image(self, filename): """return an image object containing the imagedata from a gif-file named filename. """ - return TK.PhotoImage(file=filename) + return TK.PhotoImage(file=filename, master=self.cv) def __init__(self, cv): self.cv = cv @@ -811,7 +809,7 @@ def mainloop(self): >>> screen.mainloop() """ - TK.mainloop() + self.cv.tk.mainloop() def textinput(self, title, prompt): """Pop up a dialog window for input of a string. @@ -966,6 +964,8 @@ class TurtleScreen(TurtleScreenBase): def __init__(self, cv, mode=_CFG["mode"], colormode=_CFG["colormode"], delay=_CFG["delay"]): + TurtleScreenBase.__init__(self, cv) + self._shapes = { "arrow" : Shape("polygon", ((-10,0), (10,0), (0,10))), "turtle" : Shape("polygon", ((0,16), (-2,14), (-1,10), (-4,7), @@ -989,7 +989,6 @@ def __init__(self, cv, mode=_CFG["mode"], self._bgpics = {"nopic" : ""} - TurtleScreenBase.__init__(self, cv) self._mode = mode self._delayvalue = delay self._colormode = _CFG["colormode"] diff --git a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst new file mode 100644 index 0000000000000..cb4d90b723d1f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst @@ -0,0 +1 @@ +Fixed the :mod:`turtle` module working with non-default root window. From webhook-mailer at python.org Sun Apr 25 21:56:41 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 01:56:41 -0000 Subject: [Python-checkins] Quick pydoc update to smtplib.py (GH-22292) Message-ID: https://github.com/python/cpython/commit/b3dec6f9ede35fc3bf7ae1baf0aa5f2ce1b6bf9d commit: b3dec6f9ede35fc3bf7ae1baf0aa5f2ce1b6bf9d branch: master author: uy-rrodriguez <5296200+uy-rrodriguez at users.noreply.github.com> committer: orsenthil date: 2021-04-25T18:56:37-07:00 summary: Quick pydoc update to smtplib.py (GH-22292) Fixing minor mistake in the quotes around a couple of arguments for the constructor of the class `SMTP`, in smtplib.py. files: M Lib/smtplib.py diff --git a/Lib/smtplib.py b/Lib/smtplib.py index 0317248b74988..bfba5c8f21be0 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -231,8 +231,8 @@ def __init__(self, host='', port=0, local_hostname=None, source_address=None): """Initialize a new instance. - If specified, `host' is the name of the remote host to which to - connect. If specified, `port' specifies the port to which to connect. + If specified, `host` is the name of the remote host to which to + connect. If specified, `port` specifies the port to which to connect. By default, smtplib.SMTP_PORT is used. If a host is specified the connect method is called, and if it returns anything other than a success code an SMTPConnectError is raised. If specified, From webhook-mailer at python.org Mon Apr 26 00:03:47 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:03:47 -0000 Subject: [Python-checkins] Quick pydoc update to smtplib.py (GH-22292) (GH-25616) Message-ID: https://github.com/python/cpython/commit/6d4556f375977f4555fc2ec05c84063a425197a1 commit: 6d4556f375977f4555fc2ec05c84063a425197a1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:03:43-07:00 summary: Quick pydoc update to smtplib.py (GH-22292) (GH-25616) Fixing minor mistake in the quotes around a couple of arguments for the constructor of the class `SMTP`, in smtplib.py. (cherry picked from commit b3dec6f9ede35fc3bf7ae1baf0aa5f2ce1b6bf9d) Co-authored-by: uy-rrodriguez <5296200+uy-rrodriguez at users.noreply.github.com> files: M Lib/smtplib.py diff --git a/Lib/smtplib.py b/Lib/smtplib.py index b7a2715cd5899..4c5ba7e10d0d9 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -231,8 +231,8 @@ def __init__(self, host='', port=0, local_hostname=None, source_address=None): """Initialize a new instance. - If specified, `host' is the name of the remote host to which to - connect. If specified, `port' specifies the port to which to connect. + If specified, `host` is the name of the remote host to which to + connect. If specified, `port` specifies the port to which to connect. By default, smtplib.SMTP_PORT is used. If a host is specified the connect method is called, and if it returns anything other than a success code an SMTPConnectError is raised. If specified, From webhook-mailer at python.org Mon Apr 26 00:03:58 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:03:58 -0000 Subject: [Python-checkins] Quick pydoc update to smtplib.py (GH-22292) (GH-25615) Message-ID: https://github.com/python/cpython/commit/a3c6752f7109420f43a31501ca3b7258d85462f0 commit: a3c6752f7109420f43a31501ca3b7258d85462f0 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:03:54-07:00 summary: Quick pydoc update to smtplib.py (GH-22292) (GH-25615) Fixing minor mistake in the quotes around a couple of arguments for the constructor of the class `SMTP`, in smtplib.py. (cherry picked from commit b3dec6f9ede35fc3bf7ae1baf0aa5f2ce1b6bf9d) Co-authored-by: uy-rrodriguez <5296200+uy-rrodriguez at users.noreply.github.com> files: M Lib/smtplib.py diff --git a/Lib/smtplib.py b/Lib/smtplib.py index 7b039692159bd..4a5ca669f6926 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -231,8 +231,8 @@ def __init__(self, host='', port=0, local_hostname=None, source_address=None): """Initialize a new instance. - If specified, `host' is the name of the remote host to which to - connect. If specified, `port' specifies the port to which to connect. + If specified, `host` is the name of the remote host to which to + connect. If specified, `port` specifies the port to which to connect. By default, smtplib.SMTP_PORT is used. If a host is specified the connect method is called, and if it returns anything other than a success code an SMTPConnectError is raised. If specified, From webhook-mailer at python.org Mon Apr 26 00:04:30 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:04:30 -0000 Subject: [Python-checkins] Fix documentation typos of argparse exit_on_error (GH-22706) Message-ID: https://github.com/python/cpython/commit/7be870f9456ad04c3b67881497de6346d83805d2 commit: 7be870f9456ad04c3b67881497de6346d83805d2 branch: master author: Taneli Hukkinen committer: orsenthil date: 2021-04-25T21:04:26-07:00 summary: Fix documentation typos of argparse exit_on_error (GH-22706) files: M Doc/library/argparse.rst diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 80e0f013df09e..d065487e281da 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -659,7 +659,7 @@ exit_on_error Normally, when you pass an invalid argument list to the :meth:`~ArgumentParser.parse_args` method of an :class:`ArgumentParser`, it will exit with error info. -If the user would like catch errors manually, the feature can be enable by setting +If the user would like to catch errors manually, the feature can be enabled by setting ``exit_on_error`` to ``False``:: >>> parser = argparse.ArgumentParser(exit_on_error=False) From webhook-mailer at python.org Mon Apr 26 00:06:59 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:06:59 -0000 Subject: [Python-checkins] Fix documentation typos of argparse exit_on_error (GH-22706) (GH-25617) Message-ID: https://github.com/python/cpython/commit/4cb98169b3e27f48c8d438acaf1944fd0e816127 commit: 4cb98169b3e27f48c8d438acaf1944fd0e816127 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:06:55-07:00 summary: Fix documentation typos of argparse exit_on_error (GH-22706) (GH-25617) (cherry picked from commit 7be870f9456ad04c3b67881497de6346d83805d2) Co-authored-by: Taneli Hukkinen files: M Doc/library/argparse.rst diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 4542961d7816e..75e083a2d9072 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -659,7 +659,7 @@ exit_on_error Normally, when you pass an invalid argument list to the :meth:`~ArgumentParser.parse_args` method of an :class:`ArgumentParser`, it will exit with error info. -If the user would like catch errors manually, the feature can be enable by setting +If the user would like to catch errors manually, the feature can be enabled by setting ``exit_on_error`` to ``False``:: >>> parser = argparse.ArgumentParser(exit_on_error=False) From webhook-mailer at python.org Mon Apr 26 00:21:54 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:21:54 -0000 Subject: [Python-checkins] documentation: clarification about the function remove in os library (GH-19024) Message-ID: https://github.com/python/cpython/commit/b6daab2f676de1773d8f35fb362fe4c57449301d commit: b6daab2f676de1773d8f35fb362fe4c57449301d branch: master author: Etienne Gautier committer: orsenthil date: 2021-04-25T21:21:50-07:00 summary: documentation: clarification about the function remove in os library (GH-19024) files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 574aa2e6471ae..b4c2ca9d4f660 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -2247,6 +2247,7 @@ features: Remove (delete) the file *path*. If *path* is a directory, an :exc:`IsADirectoryError` is raised. Use :func:`rmdir` to remove directories. + If the file does not exist, a :exc:`FileNotFoundError` is raised. This function can support :ref:`paths relative to directory descriptors `. From webhook-mailer at python.org Mon Apr 26 00:24:07 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:24:07 -0000 Subject: [Python-checkins] documentation: clarification about the function remove in os library (GH-19024) (GH-25618) Message-ID: https://github.com/python/cpython/commit/c5ce186e975c17470dfe234a2222c1f12ecc81e4 commit: c5ce186e975c17470dfe234a2222c1f12ecc81e4 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:24:03-07:00 summary: documentation: clarification about the function remove in os library (GH-19024) (GH-25618) (cherry picked from commit b6daab2f676de1773d8f35fb362fe4c57449301d) Co-authored-by: Etienne Gautier files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index c80a3210d7d39..719ea5b588f49 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -2106,6 +2106,7 @@ features: Remove (delete) the file *path*. If *path* is a directory, an :exc:`IsADirectoryError` is raised. Use :func:`rmdir` to remove directories. + If the file does not exist, a :exc:`FileNotFoundError` is raised. This function can support :ref:`paths relative to directory descriptors `. From webhook-mailer at python.org Mon Apr 26 00:30:36 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:30:36 -0000 Subject: [Python-checkins] [3.9] documentation: clarification about the function remove in os library (GH-19024) (GH-25620) Message-ID: https://github.com/python/cpython/commit/debb23fae6dd77d2f3b7d888f40c5f20fbc6ba72 commit: debb23fae6dd77d2f3b7d888f40c5f20fbc6ba72 branch: 3.9 author: Senthil Kumaran committer: orsenthil date: 2021-04-25T21:30:32-07:00 summary: [3.9] documentation: clarification about the function remove in os library (GH-19024) (GH-25620) (cherry picked from commit b6daab2f676de1773d8f35fb362fe4c57449301d) Co-authored-by: Etienne Gautier files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 2aea2105c3646..0c6f0b86cd74f 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -2115,6 +2115,7 @@ features: Remove (delete) the file *path*. If *path* is a directory, an :exc:`IsADirectoryError` is raised. Use :func:`rmdir` to remove directories. + If the file does not exist, a :exc:`FileNotFoundError` is raised. This function can support :ref:`paths relative to directory descriptors `. From webhook-mailer at python.org Mon Apr 26 00:38:40 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:38:40 -0000 Subject: [Python-checkins] Update asyncio-subprocess.rst (GH-21680) Message-ID: https://github.com/python/cpython/commit/3c4850e222388889426e250ff43308e4802dc582 commit: 3c4850e222388889426e250ff43308e4802dc582 branch: master author: Gabriel R F committer: orsenthil date: 2021-04-25T21:38:16-07:00 summary: Update asyncio-subprocess.rst (GH-21680) files: M Doc/library/asyncio-subprocess.rst diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst index f955a292e15d0..ef4d9bcc434c9 100644 --- a/Doc/library/asyncio-subprocess.rst +++ b/Doc/library/asyncio-subprocess.rst @@ -242,7 +242,7 @@ their completion. .. method:: kill() - Kill the child. + Kill the child process. On POSIX systems this method sends :py:data:`SIGKILL` to the child process. From webhook-mailer at python.org Mon Apr 26 00:47:03 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:47:03 -0000 Subject: [Python-checkins] Update asyncio-subprocess.rst (GH-21680) (GH-25622) Message-ID: https://github.com/python/cpython/commit/7b303485152c9943208d254c524b7837cfebeaee commit: 7b303485152c9943208d254c524b7837cfebeaee branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:46:55-07:00 summary: Update asyncio-subprocess.rst (GH-21680) (GH-25622) (cherry picked from commit 3c4850e222388889426e250ff43308e4802dc582) Co-authored-by: Gabriel R F files: M Doc/library/asyncio-subprocess.rst diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst index fb98552c86d4c..6ba24249f28d8 100644 --- a/Doc/library/asyncio-subprocess.rst +++ b/Doc/library/asyncio-subprocess.rst @@ -251,7 +251,7 @@ their completion. .. method:: kill() - Kill the child. + Kill the child process. On POSIX systems this method sends :py:data:`SIGKILL` to the child process. From webhook-mailer at python.org Mon Apr 26 00:47:09 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 04:47:09 -0000 Subject: [Python-checkins] Update asyncio-subprocess.rst (GH-21680) (GH-25621) Message-ID: https://github.com/python/cpython/commit/d7a1a815d9dbb9ea0bf791163cc135e9cff68add commit: d7a1a815d9dbb9ea0bf791163cc135e9cff68add branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-25T21:47:05-07:00 summary: Update asyncio-subprocess.rst (GH-21680) (GH-25621) (cherry picked from commit 3c4850e222388889426e250ff43308e4802dc582) Co-authored-by: Gabriel R F files: M Doc/library/asyncio-subprocess.rst diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst index fb98552c86d4c..6ba24249f28d8 100644 --- a/Doc/library/asyncio-subprocess.rst +++ b/Doc/library/asyncio-subprocess.rst @@ -251,7 +251,7 @@ their completion. .. method:: kill() - Kill the child. + Kill the child process. On POSIX systems this method sends :py:data:`SIGKILL` to the child process. From webhook-mailer at python.org Mon Apr 26 04:54:20 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 26 Apr 2021 08:54:20 -0000 Subject: [Python-checkins] bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) Message-ID: https://github.com/python/cpython/commit/3c586ca500854476e6eff06713236faff233d035 commit: 3c586ca500854476e6eff06713236faff233d035 branch: master author: Christian Heimes committer: tiran date: 2021-04-26T10:54:12+02:00 summary: bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) Signed-off-by: Christian Heimes files: M Tools/ssl/multissltests.py diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index dc47c5ce12cfa..24d70ac6e4015 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -33,6 +33,7 @@ from urllib.error import HTTPError except ImportError: from urllib2 import urlopen, HTTPError +import re import shutil import string import subprocess @@ -448,11 +449,14 @@ def _post_install_300(self): @property def short_version(self): """Short version for OpenSSL download URL""" - short_version = self.version.rstrip(string.ascii_letters) - if short_version.startswith("0.9"): - short_version = "0.9.x" - return short_version - + mo = re.search(r"^(\d+)\.(\d+)\.(\d+)", self.version) + parsed = tuple(int(m) for m in mo.groups()) + if parsed < (1, 0, 0): + return "0.9.x" + if parsed >= (3, 0, 0): + # OpenSSL 3.0.0 -> /old/3.0/ + parsed = parsed[:2] + return ".".join(str(i) for i in parsed) class BuildLibreSSL(AbstractBuilder): library = "LibreSSL" From webhook-mailer at python.org Mon Apr 26 05:35:40 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 26 Apr 2021 09:35:40 -0000 Subject: [Python-checkins] [3.8] bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) (GH-25627) Message-ID: https://github.com/python/cpython/commit/10ee2662dfeeb3b00d232f8f1c2eecc4d7e65244 commit: 10ee2662dfeeb3b00d232f8f1c2eecc4d7e65244 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-26T02:35:32-07:00 summary: [3.8] bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) (GH-25627) Signed-off-by: Christian Heimes (cherry picked from commit 3c586ca500854476e6eff06713236faff233d035) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: M Tools/ssl/multissltests.py diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 64afd6733f4e8..1904f3bf25bee 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -33,6 +33,7 @@ from urllib.error import HTTPError except ImportError: from urllib2 import urlopen, HTTPError +import re import shutil import string import subprocess @@ -434,11 +435,11 @@ def _post_install_300(self): self.openssl_cli, "fipsinstall", "-out", fipsinstall_cnf, "-module", fips_mod, - "-provider_name", "fips", - "-mac_name", "HMAC", - "-macopt", "digest:SHA256", - "-macopt", "hexkey:00", - "-section_name", "fips_sect" + # "-provider_name", "fips", + # "-mac_name", "HMAC", + # "-macopt", "digest:SHA256", + # "-macopt", "hexkey:00", + # "-section_name", "fips_sect" ] ) with open(openssl_fips_cnf, "w") as f: @@ -446,11 +447,14 @@ def _post_install_300(self): @property def short_version(self): """Short version for OpenSSL download URL""" - short_version = self.version.rstrip(string.ascii_letters) - if short_version.startswith("0.9"): - short_version = "0.9.x" - return short_version - + mo = re.search(r"^(\d+)\.(\d+)\.(\d+)", self.version) + parsed = tuple(int(m) for m in mo.groups()) + if parsed < (1, 0, 0): + return "0.9.x" + if parsed >= (3, 0, 0): + # OpenSSL 3.0.0 -> /old/3.0/ + parsed = parsed[:2] + return ".".join(str(i) for i in parsed) class BuildLibreSSL(AbstractBuilder): library = "LibreSSL" From webhook-mailer at python.org Mon Apr 26 09:01:44 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 26 Apr 2021 13:01:44 -0000 Subject: [Python-checkins] bpo-18233: Add internal methods to access peer chain (GH-25467) Message-ID: https://github.com/python/cpython/commit/666991fc598bc312d72aff0078ecb553f0a968f1 commit: 666991fc598bc312d72aff0078ecb553f0a968f1 branch: master author: Christian Heimes committer: tiran date: 2021-04-26T15:01:40+02:00 summary: bpo-18233: Add internal methods to access peer chain (GH-25467) The internal `_ssl._SSLSocket` object now provides methods to retrieve the peer cert chain and verified cert chain as a list of Certificate objects. Certificate objects have methods to convert the cert to a dict, PEM, or DER (ASN.1). These are private APIs for now. There is a slim chance to stabilize the approach and provide a public API for 3.10. Otherwise I'll provide a stable API in 3.11. Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst A Modules/_ssl/cert.c A Modules/_ssl/clinic/cert.c.h A Modules/_ssl/misc.c M Lib/test/test_ssl.py M Modules/_ssl.c M Modules/_ssl.h M Modules/clinic/_ssl.c.h M setup.py diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 15d7bfaeec9e0..f2b26c4b1405e 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -32,6 +32,7 @@ ctypes = None ssl = import_helper.import_module("ssl") +import _ssl from ssl import TLSVersion, _TLSContentType, _TLSMessageType, _TLSAlertType @@ -297,7 +298,7 @@ def test_wrap_socket(sock, *, return context.wrap_socket(sock, **kwargs) -def testing_context(server_cert=SIGNED_CERTFILE): +def testing_context(server_cert=SIGNED_CERTFILE, *, server_chain=True): """Create context client_context, server_context, hostname = testing_context() @@ -316,7 +317,8 @@ def testing_context(server_cert=SIGNED_CERTFILE): server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) server_context.load_cert_chain(server_cert) - server_context.load_verify_locations(SIGNING_CA) + if server_chain: + server_context.load_verify_locations(SIGNING_CA) return client_context, server_context, hostname @@ -2482,6 +2484,12 @@ def run(self): elif stripped == b'GETCERT': cert = self.sslconn.getpeercert() self.write(repr(cert).encode("us-ascii") + b"\n") + elif stripped == b'VERIFIEDCHAIN': + certs = self.sslconn._sslobj.get_verified_chain() + self.write(len(certs).to_bytes(1, "big") + b"\n") + elif stripped == b'UNVERIFIEDCHAIN': + certs = self.sslconn._sslobj.get_unverified_chain() + self.write(len(certs).to_bytes(1, "big") + b"\n") else: if (support.verbose and self.server.connectionchatty): @@ -4567,6 +4575,63 @@ def test_bpo37428_pha_cert_none(self): # server cert has not been validated self.assertEqual(s.getpeercert(), {}) + def test_internal_chain_client(self): + client_context, server_context, hostname = testing_context( + server_chain=False + ) + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with client_context.wrap_socket( + socket.socket(), + server_hostname=hostname + ) as s: + s.connect((HOST, server.port)) + vc = s._sslobj.get_verified_chain() + self.assertEqual(len(vc), 2) + ee, ca = vc + uvc = s._sslobj.get_unverified_chain() + self.assertEqual(len(uvc), 1) + + self.assertEqual(ee, uvc[0]) + self.assertEqual(hash(ee), hash(uvc[0])) + self.assertEqual(repr(ee), repr(uvc[0])) + + self.assertNotEqual(ee, ca) + self.assertNotEqual(hash(ee), hash(ca)) + self.assertNotEqual(repr(ee), repr(ca)) + self.assertNotEqual(ee.get_info(), ca.get_info()) + self.assertIn("CN=localhost", repr(ee)) + self.assertIn("CN=our-ca-server", repr(ca)) + + pem = ee.public_bytes(_ssl.ENCODING_PEM) + der = ee.public_bytes(_ssl.ENCODING_DER) + self.assertIsInstance(pem, str) + self.assertIn("-----BEGIN CERTIFICATE-----", pem) + self.assertIsInstance(der, bytes) + self.assertEqual( + ssl.PEM_cert_to_DER_cert(pem), der + ) + + def test_internal_chain_server(self): + client_context, server_context, hostname = testing_context() + client_context.load_cert_chain(SIGNED_CERTFILE) + server_context.verify_mode = ssl.CERT_REQUIRED + server_context.maximum_version = ssl.TLSVersion.TLSv1_2 + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with client_context.wrap_socket( + socket.socket(), + server_hostname=hostname + ) as s: + s.connect((HOST, server.port)) + s.write(b'VERIFIEDCHAIN\n') + res = s.recv(1024) + self.assertEqual(res, b'\x02\n') + s.write(b'UNVERIFIEDCHAIN\n') + res = s.recv(1024) + self.assertEqual(res, b'\x02\n') + HAS_KEYLOG = hasattr(ssl.SSLContext, 'keylog_filename') requires_keylog = unittest.skipUnless( diff --git a/Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst b/Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst new file mode 100644 index 0000000000000..1b97afbd2c40f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst @@ -0,0 +1,2 @@ +Certificate and PrivateKey classes were added to the ssl module. +Certificates and keys can now be loaded from memory buffer, too. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index abc5c2cfa1a79..65370c58a38b5 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1706,6 +1706,9 @@ _certificate_to_der(_sslmodulestate *state, X509 *certificate) return retval; } +#include "_ssl/misc.c" +#include "_ssl/cert.c" + /*[clinic input] _ssl._test_decode_cert path: object(converter="PyUnicode_FSConverter") @@ -1798,6 +1801,70 @@ _ssl__SSLSocket_getpeercert_impl(PySSLSocket *self, int binary_mode) return result; } +/*[clinic input] +_ssl._SSLSocket.get_verified_chain + +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_get_verified_chain_impl(PySSLSocket *self) +/*[clinic end generated code: output=802421163cdc3110 input=5fb0714f77e2bd51]*/ +{ + /* borrowed reference */ + STACK_OF(X509) *chain = SSL_get0_verified_chain(self->ssl); + if (chain == NULL) { + Py_RETURN_NONE; + } + return _PySSL_CertificateFromX509Stack(self->ctx->state, chain, 1); +} + +/*[clinic input] +_ssl._SSLSocket.get_unverified_chain + +[clinic start generated code]*/ + +static PyObject * +_ssl__SSLSocket_get_unverified_chain_impl(PySSLSocket *self) +/*[clinic end generated code: output=5acdae414e13f913 input=78c33c360c635cb5]*/ +{ + PyObject *retval; + /* borrowed reference */ + /* TODO: include SSL_get_peer_certificate() for server-side sockets */ + STACK_OF(X509) *chain = SSL_get_peer_cert_chain(self->ssl); + if (chain == NULL) { + Py_RETURN_NONE; + } + retval = _PySSL_CertificateFromX509Stack(self->ctx->state, chain, 1); + if (retval == NULL) { + return NULL; + } + /* OpenSSL does not include peer cert for server side connections */ + if (self->socket_type == PY_SSL_SERVER) { + PyObject *peerobj = NULL; + X509 *peer = SSL_get_peer_certificate(self->ssl); + + if (peer == NULL) { + peerobj = Py_None; + Py_INCREF(peerobj); + } else { + /* consume X509 reference on success */ + peerobj = _PySSL_CertificateFromX509(self->ctx->state, peer, 0); + if (peerobj == NULL) { + X509_free(peer); + Py_DECREF(retval); + return NULL; + } + } + int res = PyList_Insert(retval, 0, peerobj); + Py_DECREF(peerobj); + if (res < 0) { + Py_DECREF(retval); + return NULL; + } + } + return retval; +} + static PyObject * cipher_to_tuple(const SSL_CIPHER *cipher) { @@ -2809,6 +2876,8 @@ static PyMethodDef PySSLMethods[] = { _SSL__SSLSOCKET_COMPRESSION_METHODDEF _SSL__SSLSOCKET_SHUTDOWN_METHODDEF _SSL__SSLSOCKET_VERIFY_CLIENT_POST_HANDSHAKE_METHODDEF + _SSL__SSLSOCKET_GET_UNVERIFIED_CHAIN_METHODDEF + _SSL__SSLSOCKET_GET_VERIFIED_CHAIN_METHODDEF {NULL, NULL} }; @@ -5784,6 +5853,10 @@ sslmodule_init_constants(PyObject *m) X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS); #endif + /* file types */ + PyModule_AddIntConstant(m, "ENCODING_PEM", PY_SSL_ENCODING_PEM); + PyModule_AddIntConstant(m, "ENCODING_DER", PY_SSL_ENCODING_DER); + /* protocol versions */ PyModule_AddIntConstant(m, "PROTO_MINIMUM_SUPPORTED", PY_PROTO_MINIMUM_SUPPORTED); @@ -5986,6 +6059,12 @@ sslmodule_init_types(PyObject *module) if (state->PySSLSession_Type == NULL) return -1; + state->PySSLCertificate_Type = (PyTypeObject *)PyType_FromModuleAndSpec( + module, &PySSLCertificate_spec, NULL + ); + if (state->PySSLCertificate_Type == NULL) + return -1; + if (PyModule_AddType(module, state->PySSLContext_Type)) return -1; if (PyModule_AddType(module, state->PySSLSocket_Type)) @@ -5994,7 +6073,8 @@ sslmodule_init_types(PyObject *module) return -1; if (PyModule_AddType(module, state->PySSLSession_Type)) return -1; - + if (PyModule_AddType(module, state->PySSLCertificate_Type)) + return -1; return 0; } @@ -6017,6 +6097,7 @@ sslmodule_traverse(PyObject *m, visitproc visit, void *arg) Py_VISIT(state->PySSLSocket_Type); Py_VISIT(state->PySSLMemoryBIO_Type); Py_VISIT(state->PySSLSession_Type); + Py_VISIT(state->PySSLCertificate_Type); Py_VISIT(state->PySSLErrorObject); Py_VISIT(state->PySSLCertVerificationErrorObject); Py_VISIT(state->PySSLZeroReturnErrorObject); @@ -6041,6 +6122,7 @@ sslmodule_clear(PyObject *m) Py_CLEAR(state->PySSLSocket_Type); Py_CLEAR(state->PySSLMemoryBIO_Type); Py_CLEAR(state->PySSLSession_Type); + Py_CLEAR(state->PySSLCertificate_Type); Py_CLEAR(state->PySSLErrorObject); Py_CLEAR(state->PySSLCertVerificationErrorObject); Py_CLEAR(state->PySSLZeroReturnErrorObject); diff --git a/Modules/_ssl.h b/Modules/_ssl.h index 3fd517b6d3683..5fe6504a9dd7b 100644 --- a/Modules/_ssl.h +++ b/Modules/_ssl.h @@ -1,6 +1,10 @@ #ifndef Py_SSL_H #define Py_SSL_H +/* OpenSSL header files */ +#include "openssl/evp.h" +#include "openssl/x509.h" + /* * ssl module state */ @@ -10,6 +14,7 @@ typedef struct { PyTypeObject *PySSLSocket_Type; PyTypeObject *PySSLMemoryBIO_Type; PyTypeObject *PySSLSession_Type; + PyTypeObject *PySSLCertificate_Type; /* SSL error object */ PyObject *PySSLErrorObject; PyObject *PySSLCertVerificationErrorObject; @@ -40,6 +45,30 @@ get_ssl_state(PyObject *module) (get_ssl_state(_PyType_GetModuleByDef(type, &_sslmodule_def))) #define get_state_ctx(c) (((PySSLContext *)(c))->state) #define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state) -#define get_state_mbio(b) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(b))) +#define get_state_obj(o) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(o))) +#define get_state_mbio(b) get_state_obj(b) +#define get_state_cert(c) get_state_obj(c) + +/* ************************************************************************ + * certificate + */ + +enum py_ssl_encoding { + PY_SSL_ENCODING_PEM=X509_FILETYPE_PEM, + PY_SSL_ENCODING_DER=X509_FILETYPE_ASN1, + PY_SSL_ENCODING_PEM_AUX=X509_FILETYPE_PEM + 0x100, +}; + +typedef struct { + PyObject_HEAD + X509 *cert; + Py_hash_t hash; +} PySSLCertificate; + +/* ************************************************************************ + * helpers and utils + */ +static PyObject *_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio); +static PyObject *_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error); #endif /* Py_SSL_H */ diff --git a/Modules/_ssl/cert.c b/Modules/_ssl/cert.c new file mode 100644 index 0000000000000..d2c2680088115 --- /dev/null +++ b/Modules/_ssl/cert.c @@ -0,0 +1,245 @@ +#include "Python.h" +#include "../_ssl.h" + +#include "openssl/err.h" +#include "openssl/bio.h" +#include "openssl/pem.h" +#include "openssl/x509.h" + +/*[clinic input] +module _ssl +class _ssl.Certificate "PySSLCertificate *" "PySSLCertificate_Type" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=780fc647948cfffc]*/ + +#include "clinic/cert.c.h" + +static PyObject * +newCertificate(PyTypeObject *type, X509 *cert, int upref) +{ + PySSLCertificate *self; + + assert(type != NULL && type->tp_alloc != NULL); + assert(cert != NULL); + + self = (PySSLCertificate *) type->tp_alloc(type, 0); + if (self == NULL) { + return NULL; + } + if (upref == 1) { + X509_up_ref(cert); + } + self->cert = cert; + self->hash = -1; + + return (PyObject *) self; +} + +static PyObject * +_PySSL_CertificateFromX509(_sslmodulestate *state, X509 *cert, int upref) +{ + return newCertificate(state->PySSLCertificate_Type, cert, upref); +} + +static PyObject* +_PySSL_CertificateFromX509Stack(_sslmodulestate *state, STACK_OF(X509) *stack, int upref) +{ + int len, i; + PyObject *result = NULL; + + len = sk_X509_num(stack); + result = PyList_New(len); + if (result == NULL) { + return NULL; + } + for (i = 0; i < len; i++) { + X509 *cert = sk_X509_value(stack, i); + PyObject *ocert = _PySSL_CertificateFromX509(state, cert, upref); + if (ocert == NULL) { + Py_DECREF(result); + return NULL; + } + PyList_SetItem(result, i, ocert); + } + return result; +} + +/*[clinic input] +_ssl.Certificate.public_bytes + format: int(c_default="PY_SSL_ENCODING_PEM") = Encoding.PEM + +[clinic start generated code]*/ + +static PyObject * +_ssl_Certificate_public_bytes_impl(PySSLCertificate *self, int format) +/*[clinic end generated code: output=c01ddbb697429e12 input=4d38c45e874b0e64]*/ +{ + BIO *bio; + int retcode; + PyObject *result; + _sslmodulestate *state = get_state_cert(self); + + bio = BIO_new(BIO_s_mem()); + if (bio == NULL) { + PyErr_SetString(state->PySSLErrorObject, + "failed to allocate BIO"); + return NULL; + } + switch(format) { + case PY_SSL_ENCODING_PEM: + retcode = PEM_write_bio_X509(bio, self->cert); + break; + case PY_SSL_ENCODING_PEM_AUX: + retcode = PEM_write_bio_X509_AUX(bio, self->cert); + break; + case PY_SSL_ENCODING_DER: + retcode = i2d_X509_bio(bio, self->cert); + break; + default: + PyErr_SetString(PyExc_ValueError, "Unsupported format"); + BIO_free(bio); + return NULL; + } + if (retcode != 1) { + BIO_free(bio); + _setSSLError(state, NULL, 0, __FILE__, __LINE__); + return NULL; + } + if (format == PY_SSL_ENCODING_DER) { + result = _PySSL_BytesFromBIO(state, bio); + } else { + result = _PySSL_UnicodeFromBIO(state, bio, "error"); + } + BIO_free(bio); + return result; +} + + +/*[clinic input] +_ssl.Certificate.get_info + +[clinic start generated code]*/ + +static PyObject * +_ssl_Certificate_get_info_impl(PySSLCertificate *self) +/*[clinic end generated code: output=0f0deaac54f4408b input=ba2c1694b39d0778]*/ +{ + return _decode_certificate(get_state_cert(self), self->cert); +} + +static PyObject* +_x509name_print(_sslmodulestate *state, X509_NAME *name, int indent, unsigned long flags) +{ + PyObject *res; + BIO *biobuf; + + biobuf = BIO_new(BIO_s_mem()); + if (biobuf == NULL) { + PyErr_SetString(PyExc_MemoryError, "failed to allocate BIO"); + return NULL; + } + + if (X509_NAME_print_ex(biobuf, name, indent, flags) <= 0) { + _setSSLError(state, NULL, 0, __FILE__, __LINE__); + BIO_free(biobuf); + return NULL; + } + res = _PySSL_UnicodeFromBIO(state, biobuf, "strict"); + BIO_free(biobuf); + return res; +} + +/* ************************************************************************ + * PySSLCertificate_Type + */ + +static PyObject * +certificate_repr(PySSLCertificate *self) +{ + PyObject *osubject, *result; + + /* subject string is ASCII encoded, UTF-8 chars are quoted */ + osubject = _x509name_print( + get_state_cert(self), + X509_get_subject_name(self->cert), + 0, + XN_FLAG_RFC2253 + ); + if (osubject == NULL) + return NULL; + result = PyUnicode_FromFormat( + "<%s '%U'>", + Py_TYPE(self)->tp_name, osubject + ); + Py_DECREF(osubject); + return result; +} + +static Py_hash_t +certificate_hash(PySSLCertificate *self) +{ + if (self->hash == (Py_hash_t)-1) { + unsigned long hash; + hash = X509_subject_name_hash(self->cert); + if ((Py_hash_t)hash == (Py_hash_t)-1) { + self->hash = -2; + } else { + self->hash = (Py_hash_t)hash; + } + } + return self->hash; +} + +static PyObject * +certificate_richcompare(PySSLCertificate *self, PyObject *other, int op) +{ + int cmp; + _sslmodulestate *state = get_state_cert(self); + + if (Py_TYPE(other) != state->PySSLCertificate_Type) { + Py_RETURN_NOTIMPLEMENTED; + } + /* only support == and != */ + if ((op != Py_EQ) && (op != Py_NE)) { + Py_RETURN_NOTIMPLEMENTED; + } + cmp = X509_cmp(self->cert, ((PySSLCertificate*)other)->cert); + if (((op == Py_EQ) && (cmp == 0)) || ((op == Py_NE) && (cmp != 0))) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } +} + +static void +certificate_dealloc(PySSLCertificate *self) +{ + PyTypeObject *tp = Py_TYPE(self); + X509_free(self->cert); + Py_TYPE(self)->tp_free(self); + Py_DECREF(tp); +} + +static PyMethodDef certificate_methods[] = { + /* methods */ + _SSL_CERTIFICATE_PUBLIC_BYTES_METHODDEF + _SSL_CERTIFICATE_GET_INFO_METHODDEF + {NULL, NULL} +}; + +static PyType_Slot PySSLCertificate_slots[] = { + {Py_tp_dealloc, certificate_dealloc}, + {Py_tp_repr, certificate_repr}, + {Py_tp_hash, certificate_hash}, + {Py_tp_richcompare, certificate_richcompare}, + {Py_tp_methods, certificate_methods}, + {0, 0}, +}; + +static PyType_Spec PySSLCertificate_spec = { + "_ssl.Certificate", + sizeof(PySSLCertificate), + 0, + Py_TPFLAGS_DEFAULT, + PySSLCertificate_slots, +}; diff --git a/Modules/_ssl/clinic/cert.c.h b/Modules/_ssl/clinic/cert.c.h new file mode 100644 index 0000000000000..c4377128b36e2 --- /dev/null +++ b/Modules/_ssl/clinic/cert.c.h @@ -0,0 +1,60 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_ssl_Certificate_public_bytes__doc__, +"public_bytes($self, /, format=Encoding.PEM)\n" +"--\n" +"\n"); + +#define _SSL_CERTIFICATE_PUBLIC_BYTES_METHODDEF \ + {"public_bytes", (PyCFunction)(void(*)(void))_ssl_Certificate_public_bytes, METH_FASTCALL|METH_KEYWORDS, _ssl_Certificate_public_bytes__doc__}, + +static PyObject * +_ssl_Certificate_public_bytes_impl(PySSLCertificate *self, int format); + +static PyObject * +_ssl_Certificate_public_bytes(PySSLCertificate *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"format", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "public_bytes", 0}; + PyObject *argsbuf[1]; + Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; + int format = PY_SSL_ENCODING_PEM; + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!noptargs) { + goto skip_optional_pos; + } + format = _PyLong_AsInt(args[0]); + if (format == -1 && PyErr_Occurred()) { + goto exit; + } +skip_optional_pos: + return_value = _ssl_Certificate_public_bytes_impl(self, format); + +exit: + return return_value; +} + +PyDoc_STRVAR(_ssl_Certificate_get_info__doc__, +"get_info($self, /)\n" +"--\n" +"\n"); + +#define _SSL_CERTIFICATE_GET_INFO_METHODDEF \ + {"get_info", (PyCFunction)_ssl_Certificate_get_info, METH_NOARGS, _ssl_Certificate_get_info__doc__}, + +static PyObject * +_ssl_Certificate_get_info_impl(PySSLCertificate *self); + +static PyObject * +_ssl_Certificate_get_info(PySSLCertificate *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl_Certificate_get_info_impl(self); +} +/*[clinic end generated code: output=569d161749ead2da input=a9049054013a1b77]*/ diff --git a/Modules/_ssl/misc.c b/Modules/_ssl/misc.c new file mode 100644 index 0000000000000..4de091d57efef --- /dev/null +++ b/Modules/_ssl/misc.c @@ -0,0 +1,34 @@ +#include "Python.h" +#include "../_ssl.h" + +#include "openssl/bio.h" + +/* BIO_s_mem() to PyBytes + */ +static PyObject * +_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio) +{ + long size; + char *data = NULL; + size = BIO_get_mem_data(bio, &data); + if (data == NULL || size < 0) { + PyErr_SetString(PyExc_ValueError, "Not a memory BIO"); + return NULL; + } + return PyBytes_FromStringAndSize(data, size); +} + +/* BIO_s_mem() to PyUnicode + */ +static PyObject * +_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error) +{ + long size; + char *data = NULL; + size = BIO_get_mem_data(bio, &data); + if (data == NULL || size < 0) { + PyErr_SetString(PyExc_ValueError, "Not a memory BIO"); + return NULL; + } + return PyUnicode_DecodeUTF8(data, size, error); +} diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index c209c63c02256..b153c30cf39ae 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -88,6 +88,40 @@ _ssl__SSLSocket_getpeercert(PySSLSocket *self, PyObject *const *args, Py_ssize_t return return_value; } +PyDoc_STRVAR(_ssl__SSLSocket_get_verified_chain__doc__, +"get_verified_chain($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_GET_VERIFIED_CHAIN_METHODDEF \ + {"get_verified_chain", (PyCFunction)_ssl__SSLSocket_get_verified_chain, METH_NOARGS, _ssl__SSLSocket_get_verified_chain__doc__}, + +static PyObject * +_ssl__SSLSocket_get_verified_chain_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_get_verified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_get_verified_chain_impl(self); +} + +PyDoc_STRVAR(_ssl__SSLSocket_get_unverified_chain__doc__, +"get_unverified_chain($self, /)\n" +"--\n" +"\n"); + +#define _SSL__SSLSOCKET_GET_UNVERIFIED_CHAIN_METHODDEF \ + {"get_unverified_chain", (PyCFunction)_ssl__SSLSocket_get_unverified_chain, METH_NOARGS, _ssl__SSLSocket_get_unverified_chain__doc__}, + +static PyObject * +_ssl__SSLSocket_get_unverified_chain_impl(PySSLSocket *self); + +static PyObject * +_ssl__SSLSocket_get_unverified_chain(PySSLSocket *self, PyObject *Py_UNUSED(ignored)) +{ + return _ssl__SSLSocket_get_unverified_chain_impl(self); +} + PyDoc_STRVAR(_ssl__SSLSocket_shared_ciphers__doc__, "shared_ciphers($self, /)\n" "--\n" @@ -1324,4 +1358,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=8736d838c9059151 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3b6f4471fb187d85 input=a9049054013a1b77]*/ diff --git a/setup.py b/setup.py index 4f4b42d1d9d6a..27e5f392cfd33 100644 --- a/setup.py +++ b/setup.py @@ -2472,7 +2472,13 @@ def split_var(name, sep): Extension( '_ssl', ['_ssl.c'], - depends=['socketmodule.h', '_ssl/debughelpers.c', '_ssl.h'], + depends=[ + 'socketmodule.h', + '_ssl.h', + '_ssl/debughelpers.c', + '_ssl/misc.c', + '_ssl/cert.c', + ], **openssl_extension_kwargs ) ) From webhook-mailer at python.org Mon Apr 26 09:13:59 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 26 Apr 2021 13:13:59 -0000 Subject: [Python-checkins] bpo-43466: Link with libz in PY_UNSUPPORTED_OPENSSL_BUILD path (GH-25587) Message-ID: https://github.com/python/cpython/commit/5f87915d4af724f375b00dde2b948468d3e4ca97 commit: 5f87915d4af724f375b00dde2b948468d3e4ca97 branch: master author: Christian Heimes committer: tiran date: 2021-04-26T15:13:34+02:00 summary: bpo-43466: Link with libz in PY_UNSUPPORTED_OPENSSL_BUILD path (GH-25587) Some OpenSSL build flavors need libz for compression support. files: M setup.py diff --git a/setup.py b/setup.py index 27e5f392cfd33..ca0ed8363ef35 100644 --- a/setup.py +++ b/setup.py @@ -2466,7 +2466,8 @@ def split_var(name, sep): extra_linker_args.append(f"-Wl,--exclude-libs,lib{lib}.a") openssl_extension_kwargs["extra_link_args"] = extra_linker_args # don't link OpenSSL shared libraries. - openssl_extension_kwargs["libraries"] = [] + # include libz for OpenSSL build flavors with compression support + openssl_extension_kwargs["libraries"] = ["z"] self.add( Extension( From webhook-mailer at python.org Mon Apr 26 10:19:29 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 14:19:29 -0000 Subject: [Python-checkins] Doc: Fix the array.fromfile method doc (GH-22037) Message-ID: https://github.com/python/cpython/commit/bd25bcd37a3a41a0e08208e969f0c02287850c61 commit: bd25bcd37a3a41a0e08208e969f0c02287850c61 branch: master author: Adorilson Bezerra committer: orsenthil date: 2021-04-26T07:19:21-07:00 summary: Doc: Fix the array.fromfile method doc (GH-22037) The check about the f argument type was removed in this commit: https://github.com/python/cpython/commit/2c94aa567e525c82041ad68a3174d8c3acbf37e2 Thanks for Pedro Arthur Duarte (pedroarthur.jedi at gmail.com) by the help with this bug. files: M Doc/library/array.rst diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 18a768d7de26c..c7f137d15b4b8 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -160,8 +160,7 @@ The following data items and methods are also supported: Read *n* items (as machine values) from the :term:`file object` *f* and append them to the end of the array. If less than *n* items are available, :exc:`EOFError` is raised, but the items that were available are still - inserted into the array. *f* must be a real built-in file object; something - else with a :meth:`read` method won't do. + inserted into the array. .. method:: array.fromlist(list) From webhook-mailer at python.org Mon Apr 26 10:24:15 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 14:24:15 -0000 Subject: [Python-checkins] Doc: Fix the array.fromfile method doc (GH-22037) (GH-25631) Message-ID: https://github.com/python/cpython/commit/9b5f30efe40e8da4348cd24c0e1147fd79f0ff8a commit: 9b5f30efe40e8da4348cd24c0e1147fd79f0ff8a branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T07:24:07-07:00 summary: Doc: Fix the array.fromfile method doc (GH-22037) (GH-25631) The check about the f argument type was removed in this commit: https://github.com/python/cpython/commit/2c94aa567e525c82041ad68a3174d8c3acbf37e2 Thanks for Pedro Arthur Duarte (pedroarthur.jedi at gmail.com) by the help with this bug. (cherry picked from commit bd25bcd37a3a41a0e08208e969f0c02287850c61) Co-authored-by: Adorilson Bezerra Co-authored-by: Adorilson Bezerra files: M Doc/library/array.rst diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 6809c512b3f02..6658cca3bb514 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -159,8 +159,7 @@ The following data items and methods are also supported: Read *n* items (as machine values) from the :term:`file object` *f* and append them to the end of the array. If less than *n* items are available, :exc:`EOFError` is raised, but the items that were available are still - inserted into the array. *f* must be a real built-in file object; something - else with a :meth:`read` method won't do. + inserted into the array. .. method:: array.fromlist(list) From webhook-mailer at python.org Mon Apr 26 10:24:21 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 14:24:21 -0000 Subject: [Python-checkins] Doc: Fix the array.fromfile method doc (GH-22037) (GH-25630) Message-ID: https://github.com/python/cpython/commit/b348580da60cad723d34524e61b43703f0b2f0a8 commit: b348580da60cad723d34524e61b43703f0b2f0a8 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T07:24:17-07:00 summary: Doc: Fix the array.fromfile method doc (GH-22037) (GH-25630) The check about the f argument type was removed in this commit: https://github.com/python/cpython/commit/2c94aa567e525c82041ad68a3174d8c3acbf37e2 Thanks for Pedro Arthur Duarte (pedroarthur.jedi at gmail.com) by the help with this bug. (cherry picked from commit bd25bcd37a3a41a0e08208e969f0c02287850c61) Co-authored-by: Adorilson Bezerra Co-authored-by: Adorilson Bezerra files: M Doc/library/array.rst diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 78020738bf4f7..f2f7894e1bf0f 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -160,8 +160,7 @@ The following data items and methods are also supported: Read *n* items (as machine values) from the :term:`file object` *f* and append them to the end of the array. If less than *n* items are available, :exc:`EOFError` is raised, but the items that were available are still - inserted into the array. *f* must be a real built-in file object; something - else with a :meth:`read` method won't do. + inserted into the array. .. method:: array.fromlist(list) From webhook-mailer at python.org Mon Apr 26 11:12:47 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 26 Apr 2021 15:12:47 -0000 Subject: [Python-checkins] [3.9] bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) (GH-25626) Message-ID: https://github.com/python/cpython/commit/3b917d177452dcacf41605254fc299d051fbf75a commit: 3b917d177452dcacf41605254fc299d051fbf75a branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-26T08:12:37-07:00 summary: [3.9] bpo-38820: Old OpenSSL 3.0.0 releases are in /old/3.0/ (GH-25624) (GH-25626) Signed-off-by: Christian Heimes (cherry picked from commit 3c586ca500854476e6eff06713236faff233d035) Co-authored-by: Christian Heimes Automerge-Triggered-By: GH:tiran files: M Tools/ssl/multissltests.py diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 64afd6733f4e8..1904f3bf25bee 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -33,6 +33,7 @@ from urllib.error import HTTPError except ImportError: from urllib2 import urlopen, HTTPError +import re import shutil import string import subprocess @@ -434,11 +435,11 @@ def _post_install_300(self): self.openssl_cli, "fipsinstall", "-out", fipsinstall_cnf, "-module", fips_mod, - "-provider_name", "fips", - "-mac_name", "HMAC", - "-macopt", "digest:SHA256", - "-macopt", "hexkey:00", - "-section_name", "fips_sect" + # "-provider_name", "fips", + # "-mac_name", "HMAC", + # "-macopt", "digest:SHA256", + # "-macopt", "hexkey:00", + # "-section_name", "fips_sect" ] ) with open(openssl_fips_cnf, "w") as f: @@ -446,11 +447,14 @@ def _post_install_300(self): @property def short_version(self): """Short version for OpenSSL download URL""" - short_version = self.version.rstrip(string.ascii_letters) - if short_version.startswith("0.9"): - short_version = "0.9.x" - return short_version - + mo = re.search(r"^(\d+)\.(\d+)\.(\d+)", self.version) + parsed = tuple(int(m) for m in mo.groups()) + if parsed < (1, 0, 0): + return "0.9.x" + if parsed >= (3, 0, 0): + # OpenSSL 3.0.0 -> /old/3.0/ + parsed = parsed[:2] + return ".".join(str(i) for i in parsed) class BuildLibreSSL(AbstractBuilder): library = "LibreSSL" From webhook-mailer at python.org Mon Apr 26 13:14:36 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 26 Apr 2021 17:14:36 -0000 Subject: [Python-checkins] Add additional keyword-only tests. (GH-25633) Message-ID: https://github.com/python/cpython/commit/94549ee728cd88d1ef053aab50da422f9e99b434 commit: 94549ee728cd88d1ef053aab50da422f9e99b434 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-04-26T13:14:28-04:00 summary: Add additional keyword-only tests. (GH-25633) files: M Lib/test/test_dataclasses.py diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index edb08485be223..670648a1b112b 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3502,7 +3502,7 @@ def test_make_dataclasses(self): self.assertEqual(C.__match_args__, ('z',)) -class TestKwArgs(unittest.TestCase): +class TestKeywordArgs(unittest.TestCase): def test_no_classvar_kwarg(self): msg = 'field a is a ClassVar but specifies kw_only' with self.assertRaisesRegex(TypeError, msg): @@ -3659,6 +3659,34 @@ def __post_init__(self, b, d): b = B(1, c=2, b=3, d=4) self.assertEqual(asdict(b), {'a': 3, 'c': 4}) + def test_defaults(self): + # For kwargs, make sure we can have defaults after non-defaults. + @dataclass + class A: + a: int = 0 + _: KW_ONLY + b: int + c: int = 1 + d: int + + a = A(d=4, b=3) + self.assertEqual(a.a, 0) + self.assertEqual(a.b, 3) + self.assertEqual(a.c, 1) + self.assertEqual(a.d, 4) + + # Make sure we still check for non-kwarg non-defaults not following + # defaults. + err_regex = "non-default argument 'z' follows default argument" + with self.assertRaisesRegex(TypeError, err_regex): + @dataclass + class A: + a: int = 0 + z: int + _: KW_ONLY + b: int + c: int = 1 + d: int if __name__ == '__main__': unittest.main() From webhook-mailer at python.org Mon Apr 26 13:31:35 2021 From: webhook-mailer at python.org (gvanrossum) Date: Mon, 26 Apr 2021 17:31:35 -0000 Subject: [Python-checkins] bpo-42904: Change search order of typing.get_type_hints eval (#25632) Message-ID: https://github.com/python/cpython/commit/1b1f9852bda85c01ef124858f293e9c13e04ffce commit: 1b1f9852bda85c01ef124858f293e9c13e04ffce branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-26T10:31:21-07:00 summary: bpo-42904: Change search order of typing.get_type_hints eval (#25632) While surprising (searching globals before locals in one specific case), this is needed for backwards compatibility. files: A Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 99417d7d36499..c28f390df0207 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -3016,10 +3016,10 @@ def __iand__(self, other: Const["MySet[T]"]) -> "MySet[T]": {'other': MySet[T], 'return': MySet[T]} ) - def test_get_type_hints_classes(self): + def test_get_type_hints_classes_str_annotations(self): class Foo: y = str - x: y + x: 'y' # This previously raised an error under PEP 563. self.assertEqual(get_type_hints(Foo), {'x': str}) diff --git a/Lib/typing.py b/Lib/typing.py index 9a3a6a7725a93..762a98ab17193 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1604,7 +1604,8 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False): - If no dict arguments are passed, an attempt is made to use the globals from obj (or the respective module's globals for classes), and these are also used as the locals. If the object does not appear - to have globals, an empty dictionary is used. + to have globals, an empty dictionary is used. For classes, the search + order is globals first then locals. - If one dict argument is passed, it is used for both globals and locals. @@ -1628,6 +1629,14 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False): base_globals = globalns ann = base.__dict__.get('__annotations__', {}) base_locals = dict(vars(base)) if localns is None else localns + if localns is None and globalns is None: + # This is surprising, but required. Before Python 3.10, + # get_type_hints only evaluated the globalns of + # a class. To maintain backwards compatibility, we reverse + # the globalns and localns order so that eval() looks into + # *base_globals* first rather than *base_locals*. + # This only affects ForwardRefs. + base_globals, base_locals = base_locals, base_globals for name, value in ann.items(): if value is None: value = type(None) diff --git a/Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst b/Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst new file mode 100644 index 0000000000000..632941ac36267 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst @@ -0,0 +1,5 @@ +For backwards compatbility with previous minor versions of Python, +if :func:`typing.get_type_hints` receives no namespace dictionary arguments, +:func:`typing.get_type_hints` will search through the global then local +namespaces during evaluation of stringized type annotations +(string forward references) inside a class. From webhook-mailer at python.org Mon Apr 26 14:53:38 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 26 Apr 2021 18:53:38 -0000 Subject: [Python-checkins] bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) Message-ID: https://github.com/python/cpython/commit/8a307e488d596914a7a5df6b2fdd945f8ce81e69 commit: 8a307e488d596914a7a5df6b2fdd945f8ce81e69 branch: master author: Llandy Riveron Del Risco committer: ericvsmith date: 2021-04-26T14:53:28-04:00 summary: bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) files: A Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index e13685e207cd0..e4d2b57fd4292 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -631,4 +631,4 @@ Exceptions Raised when an implicitly defined :meth:`__setattr__` or :meth:`__delattr__` is called on a dataclass which was defined with - ``frozen=True``. + ``frozen=True``. It is a subclass of :exc:`AttributeError`. diff --git a/Misc/ACKS b/Misc/ACKS index 7d9af855a744b..a18ddc65b79e8 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1452,6 +1452,7 @@ Vlad Riscutia Wes Rishel Daniel Riti Juan M. Bello Rivas +Llandy Riveron Del Risco Mohd Sanad Zaki Rizvi Davide Rizzo Anthony Roach diff --git a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst new file mode 100644 index 0000000000000..dcf252e21bb9e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst @@ -0,0 +1,2 @@ +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. From webhook-mailer at python.org Mon Apr 26 15:11:52 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 26 Apr 2021 19:11:52 -0000 Subject: [Python-checkins] bpo-40432: Use python 3.8 or higher to compile CPython on Windows (#25389) Message-ID: https://github.com/python/cpython/commit/425434dadc30d96dc1c0c628f954f9b6f5edd2c9 commit: 425434dadc30d96dc1c0c628f954f9b6f5edd2c9 branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: zooba date: 2021-04-26T20:11:43+01:00 summary: bpo-40432: Use python 3.8 or higher to compile CPython on Windows (#25389) files: A Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst M PCbuild/find_python.bat diff --git a/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst b/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst new file mode 100644 index 0000000000000..6f8ce00bf99ec --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst @@ -0,0 +1,3 @@ +Updated pegen regeneration script on Windows to find and use Python 3.8 or +higher. Prior to this, pegen regeneration already required 3.8 or higher, +but the script may have used lower versions of Python. diff --git a/PCbuild/find_python.bat b/PCbuild/find_python.bat index 75413cdbfcf43..d0e4a86b01fd0 100644 --- a/PCbuild/find_python.bat +++ b/PCbuild/find_python.bat @@ -34,10 +34,10 @@ @if exist "%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe" (set PYTHON="%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe") & (set _Py_Python_Source=found in externals directory) & goto :found @rem If HOST_PYTHON is recent enough, use that - at if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -Ec "import sys; assert sys.version_info[:2] >= (3, 6)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found + at if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -Ec "import sys; assert sys.version_info[:2] >= (3, 8)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found @rem If py.exe finds a recent enough version, use that one - at for %%p in (3.8 3.7 3.6) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found + at for %%p in (3.9 3.8) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found @if NOT exist "%_Py_EXTERNALS_DIR%" mkdir "%_Py_EXTERNALS_DIR%" @set _Py_NUGET=%NUGET% From webhook-mailer at python.org Mon Apr 26 15:36:22 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 26 Apr 2021 19:36:22 -0000 Subject: [Python-checkins] bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) (GH-25636) Message-ID: https://github.com/python/cpython/commit/081bfe4eb58e107de0a38e98c44a3253e4ed1240 commit: 081bfe4eb58e107de0a38e98c44a3253e4ed1240 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-26T15:36:13-04:00 summary: bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) (GH-25636) (cherry picked from commit 8a307e488d596914a7a5df6b2fdd945f8ce81e69) Co-authored-by: Llandy Riveron Del Risco Co-authored-by: Llandy Riveron Del Risco files: A Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 24acd7417d84d..9b53372b3d3ab 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -592,4 +592,4 @@ Exceptions Raised when an implicitly defined :meth:`__setattr__` or :meth:`__delattr__` is called on a dataclass which was defined with - ``frozen=True``. + ``frozen=True``. It is a subclass of :exc:`AttributeError`. diff --git a/Misc/ACKS b/Misc/ACKS index 39aa954a7b449..b25bd20deeb2e 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1401,6 +1401,7 @@ Vlad Riscutia Wes Rishel Daniel Riti Juan M. Bello Rivas +Llandy Riveron Del Risco Mohd Sanad Zaki Rizvi Davide Rizzo Anthony Roach diff --git a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst new file mode 100644 index 0000000000000..dcf252e21bb9e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst @@ -0,0 +1,2 @@ +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. From webhook-mailer at python.org Mon Apr 26 15:36:28 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 26 Apr 2021 19:36:28 -0000 Subject: [Python-checkins] bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) (GH-25635) Message-ID: https://github.com/python/cpython/commit/c9c1dbd253d70665c1fd20e6341f9a08e21f37f4 commit: c9c1dbd253d70665c1fd20e6341f9a08e21f37f4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-04-26T15:36:23-04:00 summary: bpo-43938: improve dataclasses.FrozenInstanceError documentation (GH-25603) (GH-25635) (cherry picked from commit 8a307e488d596914a7a5df6b2fdd945f8ce81e69) Co-authored-by: Llandy Riveron Del Risco Co-authored-by: Llandy Riveron Del Risco files: A Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 133cc0a065cac..6cd8d8ed0c264 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -592,4 +592,4 @@ Exceptions Raised when an implicitly defined :meth:`__setattr__` or :meth:`__delattr__` is called on a dataclass which was defined with - ``frozen=True``. + ``frozen=True``. It is a subclass of :exc:`AttributeError`. diff --git a/Misc/ACKS b/Misc/ACKS index ee2f3fa2e3aa5..9d0dffe57652a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1431,6 +1431,7 @@ Vlad Riscutia Wes Rishel Daniel Riti Juan M. Bello Rivas +Llandy Riveron Del Risco Mohd Sanad Zaki Rizvi Davide Rizzo Anthony Roach diff --git a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst new file mode 100644 index 0000000000000..dcf252e21bb9e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst @@ -0,0 +1,2 @@ +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. From webhook-mailer at python.org Mon Apr 26 15:40:00 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:40:00 -0000 Subject: [Python-checkins] bpo-42924: Fix incorrect copy in bytearray_repeat (GH-24208) (#24211) Message-ID: https://github.com/python/cpython/commit/d0698c676ca1b7d34be4165a631bf4847583de76 commit: d0698c676ca1b7d34be4165a631bf4847583de76 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-04-26T21:39:51+02:00 summary: bpo-42924: Fix incorrect copy in bytearray_repeat (GH-24208) (#24211) Before, using the * operator to repeat a bytearray would copy data from the start of the internal buffer (ob_bytes) and not from the start of the actual data (ob_start). (cherry picked from commit 61d8c54f43a7871d016f98b38f86858817d927d5) Co-authored-by: Tobias Holl files: A Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst M Lib/test/test_bytes.py M Objects/bytearrayobject.c diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 05568f2c67971..227e6d7311ec8 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1664,6 +1664,16 @@ def test_iterator_length_hint(self): # Shouldn't raise an error self.assertEqual(list(it), []) + def test_repeat_after_setslice(self): + # bpo-42924: * used to copy from the wrong memory location + b = bytearray(b'abc') + b[:2] = b'x' + b1 = b * 1 + b3 = b * 3 + self.assertEqual(b1, b'xc') + self.assertEqual(b1, b) + self.assertEqual(b3, b'xcxcxc') + class AssortedBytesTest(unittest.TestCase): # diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst new file mode 100644 index 0000000000000..33fbb5235ddb6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst @@ -0,0 +1 @@ +Fix ``bytearray`` repetition incorrectly copying data from the start of the buffer, even if the data is offset within the buffer (e.g. after reassigning a slice at the start of the ``bytearray`` to a shorter byte string). diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 97d7796769f81..a1aa88086e8b3 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -329,6 +329,7 @@ bytearray_repeat(PyByteArrayObject *self, Py_ssize_t count) PyByteArrayObject *result; Py_ssize_t mysize; Py_ssize_t size; + const char *buf; if (count < 0) count = 0; @@ -337,13 +338,14 @@ bytearray_repeat(PyByteArrayObject *self, Py_ssize_t count) return PyErr_NoMemory(); size = mysize * count; result = (PyByteArrayObject *)PyByteArray_FromStringAndSize(NULL, size); + buf = PyByteArray_AS_STRING(self); if (result != NULL && size != 0) { if (mysize == 1) - memset(result->ob_bytes, self->ob_bytes[0], size); + memset(result->ob_bytes, buf[0], size); else { Py_ssize_t i; for (i = 0; i < count; i++) - memcpy(result->ob_bytes + i*mysize, self->ob_bytes, mysize); + memcpy(result->ob_bytes + i*mysize, buf, mysize); } } return (PyObject *)result; From webhook-mailer at python.org Mon Apr 26 15:40:47 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:40:47 -0000 Subject: [Python-checkins] bpo-42924: Fix incorrect copy in bytearray_repeat (GH-24208) (#24212) Message-ID: https://github.com/python/cpython/commit/e1203e8001432a08b87b54867490beb19a694069 commit: e1203e8001432a08b87b54867490beb19a694069 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-04-26T21:40:38+02:00 summary: bpo-42924: Fix incorrect copy in bytearray_repeat (GH-24208) (#24212) Before, using the * operator to repeat a bytearray would copy data from the start of the internal buffer (ob_bytes) and not from the start of the actual data (ob_start). (cherry picked from commit 61d8c54f43a7871d016f98b38f86858817d927d5) Co-authored-by: Tobias Holl files: A Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst M Lib/test/test_bytes.py M Objects/bytearrayobject.c diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index bbd45c75298e7..c2ec1201e8d6b 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1592,6 +1592,16 @@ def test_iterator_length_hint(self): # Shouldn't raise an error self.assertEqual(list(it), []) + def test_repeat_after_setslice(self): + # bpo-42924: * used to copy from the wrong memory location + b = bytearray(b'abc') + b[:2] = b'x' + b1 = b * 1 + b3 = b * 3 + self.assertEqual(b1, b'xc') + self.assertEqual(b1, b) + self.assertEqual(b3, b'xcxcxc') + class AssortedBytesTest(unittest.TestCase): # diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst new file mode 100644 index 0000000000000..33fbb5235ddb6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst @@ -0,0 +1 @@ +Fix ``bytearray`` repetition incorrectly copying data from the start of the buffer, even if the data is offset within the buffer (e.g. after reassigning a slice at the start of the ``bytearray`` to a shorter byte string). diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index d4d02336b6cf0..9812afd6f2c34 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -332,6 +332,7 @@ bytearray_repeat(PyByteArrayObject *self, Py_ssize_t count) PyByteArrayObject *result; Py_ssize_t mysize; Py_ssize_t size; + const char *buf; if (count < 0) count = 0; @@ -340,13 +341,14 @@ bytearray_repeat(PyByteArrayObject *self, Py_ssize_t count) return PyErr_NoMemory(); size = mysize * count; result = (PyByteArrayObject *)PyByteArray_FromStringAndSize(NULL, size); + buf = PyByteArray_AS_STRING(self); if (result != NULL && size != 0) { if (mysize == 1) - memset(result->ob_bytes, self->ob_bytes[0], size); + memset(result->ob_bytes, buf[0], size); else { Py_ssize_t i; for (i = 0; i < count; i++) - memcpy(result->ob_bytes + i*mysize, self->ob_bytes, mysize); + memcpy(result->ob_bytes + i*mysize, buf, mysize); } } return (PyObject *)result; From webhook-mailer at python.org Mon Apr 26 15:42:49 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:42:49 -0000 Subject: [Python-checkins] [3.8] bpo-34463: Make python tracebacks identical to C tracebacks for (#23899) Message-ID: https://github.com/python/cpython/commit/727bed675f1a47d12492efba0ca118707502d988 commit: 727bed675f1a47d12492efba0ca118707502d988 branch: 3.8 author: Irit Katriel committer: ambv date: 2021-04-26T21:42:40+02:00 summary: [3.8] bpo-34463: Make python tracebacks identical to C tracebacks for (#23899) * [3.8] bpo-34463: Make python tracebacks identical to C tracebacks for SyntaxErrors without a lineno (GH-23427) (cherry picked from commit 069560b1171eb6385121ff3b6331e8814a4e7454) Co-authored-by: Irit Katriel * ?? Added by blurb_it. * added missing newline in test Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst M Lib/test/test_traceback.py M Lib/traceback.py diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index a5ba6090cf08d..2ffb6fa6a79ca 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -679,6 +679,30 @@ def test_message_none(self): err = self.get_report(Exception('')) self.assertIn('Exception\n', err) + def test_syntax_error_no_lineno(self): + # See #34463. + + # Without filename + e = SyntaxError('bad syntax') + msg = self.get_report(e).splitlines() + self.assertEqual(msg, + ['SyntaxError: bad syntax']) + e.lineno = 100 + msg = self.get_report(e).splitlines() + self.assertEqual(msg, + [' File "", line 100', 'SyntaxError: bad syntax']) + + # With filename + e = SyntaxError('bad syntax') + e.filename = 'myfile.py' + + msg = self.get_report(e).splitlines() + self.assertEqual(msg, + ['SyntaxError: bad syntax (myfile.py)']) + e.lineno = 100 + msg = self.get_report(e).splitlines() + self.assertEqual(msg, + [' File "myfile.py", line 100', 'SyntaxError: bad syntax']) class PyExcReportingTests(BaseExceptionReportingTests, unittest.TestCase): # diff --git a/Lib/traceback.py b/Lib/traceback.py index 19de84b26bf35..f76bdcf0b7dd1 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -515,7 +515,8 @@ def __init__(self, exc_type, exc_value, exc_traceback, *, limit=None, if exc_type and issubclass(exc_type, SyntaxError): # Handle SyntaxError's specially self.filename = exc_value.filename - self.lineno = str(exc_value.lineno) + lno = exc_value.lineno + self.lineno = str(lno) if lno is not None else None self.text = exc_value.text self.offset = exc_value.offset self.msg = exc_value.msg @@ -569,9 +570,12 @@ def format_exception_only(self): return # It was a syntax error; show exactly where the problem was found. - filename = self.filename or "" - lineno = str(self.lineno) or '?' - yield ' File "{}", line {}\n'.format(filename, lineno) + filename_suffix = '' + if self.lineno is not None: + yield ' File "{}", line {}\n'.format( + self.filename or "", self.lineno) + elif self.filename is not None: + filename_suffix = ' ({})'.format(self.filename) badline = self.text offset = self.offset @@ -585,7 +589,7 @@ def format_exception_only(self): caretspace = ((c.isspace() and c or ' ') for c in caretspace) yield ' {}^\n'.format(''.join(caretspace)) msg = self.msg or "" - yield "{}: {}\n".format(stype, msg) + yield "{}: {}{}\n".format(stype, msg, filename_suffix) def format(self, *, chain=True): """Format the exception. diff --git a/Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst b/Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst new file mode 100644 index 0000000000000..d045fb7dbabfc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst @@ -0,0 +1 @@ +Fixed discrepancy between :mod:`traceback` and the interpreter in formatting of SyntaxError with lineno not set (:mod:`traceback` was changed to match interpreter). \ No newline at end of file From webhook-mailer at python.org Mon Apr 26 15:45:53 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:45:53 -0000 Subject: [Python-checkins] bpo-17305: Link to the third-party idna package. (GH-25208) (#25211) Message-ID: https://github.com/python/cpython/commit/2760a6711b0f510afbd09b19949bee786e098af9 commit: 2760a6711b0f510afbd09b19949bee786e098af9 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-04-26T21:45:45+02:00 summary: bpo-17305: Link to the third-party idna package. (GH-25208) (#25211) So long as we don't have idna2008 in the standard library, we should at least point people to the third-party solution. (cherry picked from commit 1d023e374cf96d143b065242131ddc9b889f9a1e) Co-authored-by: Gregory P. Smith files: M Doc/library/codecs.rst diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 992672e806f33..f09b0e1abdc42 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -1413,6 +1413,9 @@ Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)). It builds upon the ``punycode`` encoding and :mod:`stringprep`. +If you need the IDNA 2008 standard from :rfc:`5891` and :rfc:`5895`, use the +third-party `idna module _`. + These RFCs together define a protocol to support non-ASCII characters in domain names. A domain name containing non-ASCII characters (such as ``www.Alliancefran?aise.nu``) is converted into an ASCII-compatible encoding From webhook-mailer at python.org Mon Apr 26 15:46:18 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:46:18 -0000 Subject: [Python-checkins] bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) (#25367) Message-ID: https://github.com/python/cpython/commit/b570feaa9c6039b9d89cdf854a5fb388872eb38e commit: b570feaa9c6039b9d89cdf854a5fb388872eb38e branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-04-26T21:46:14+02:00 summary: bpo-41661: Document os.path.relpath() exception on Windows with different drives (GH-25346) (#25367) (cherry picked from commit 67c0b3d89c4da9750fdb43fc66d3924681b22d2e) Co-authored-by: Zackery Spytz files: M Doc/library/os.path.rst diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index 251df4d516eb5..d2fe494352453 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -366,7 +366,8 @@ the :mod:`glob` module.) Return a relative filepath to *path* either from the current directory or from an optional *start* directory. This is a path computation: the filesystem is not accessed to confirm the existence or nature of *path* or - *start*. + *start*. On Windows, :exc:`ValueError` is raised when *path* and *start* + are on different drives. *start* defaults to :attr:`os.curdir`. From webhook-mailer at python.org Mon Apr 26 15:48:24 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:48:24 -0000 Subject: [Python-checkins] Fix thread locks in zlib module may go wrong in rare case (#22132) Message-ID: https://github.com/python/cpython/commit/196b8f300479d4e4050d9af9ba4ed82ee1e81dc8 commit: 196b8f300479d4e4050d9af9ba4ed82ee1e81dc8 branch: 3.8 author: Ma Lin committer: ambv date: 2021-04-26T21:48:20+02:00 summary: Fix thread locks in zlib module may go wrong in rare case (#22132) Setting `next_in` before acquiring the thread lock may mix up compress/decompress state in other threads. files: A Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst M Modules/zlibmodule.c diff --git a/Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst b/Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst new file mode 100644 index 0000000000000..9e36435a364ea --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst @@ -0,0 +1 @@ +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index a3d9ed6646dec..d6b6b01d89a17 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -653,11 +653,11 @@ zlib_Compress_compress_impl(compobject *self, Py_buffer *data) Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; int err; + ENTER_ZLIB(self); + self->zst.next_in = data->buf; ibuflen = data->len; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); @@ -771,6 +771,8 @@ zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, else hard_limit = max_length; + ENTER_ZLIB(self); + self->zst.next_in = data->buf; ibuflen = data->len; @@ -778,8 +780,6 @@ zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, if (max_length && obuflen > max_length) obuflen = max_length; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); From webhook-mailer at python.org Mon Apr 26 15:50:41 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:50:41 -0000 Subject: [Python-checkins] Fix thread locks in zlib module may go wrong in rare case (#22130) Message-ID: https://github.com/python/cpython/commit/ba7338a46038bdb55159bf37e7ad83f177e5257b commit: ba7338a46038bdb55159bf37e7ad83f177e5257b branch: 3.9 author: Ma Lin committer: ambv date: 2021-04-26T21:50:33+02:00 summary: Fix thread locks in zlib module may go wrong in rare case (#22130) Setting `next_in` before acquiring the thread lock may mix up compress/decompress state in other threads. files: A Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst M Modules/zlibmodule.c diff --git a/Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst b/Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst new file mode 100644 index 0000000000000..9e36435a364ea --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst @@ -0,0 +1 @@ +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index fe27909ae8a75..6c14c3adbf268 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -667,11 +667,11 @@ zlib_Compress_compress_impl(compobject *self, Py_buffer *data) Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; int err; + ENTER_ZLIB(self); + self->zst.next_in = data->buf; ibuflen = data->len; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); @@ -785,6 +785,8 @@ zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, else hard_limit = max_length; + ENTER_ZLIB(self); + self->zst.next_in = data->buf; ibuflen = data->len; @@ -792,8 +794,6 @@ zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, if (max_length && obuflen > max_length) obuflen = max_length; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); From webhook-mailer at python.org Mon Apr 26 15:54:34 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:54:34 -0000 Subject: [Python-checkins] bpo-40432: Use python 3.8 or higher to compile CPython on Windows (GH-25389) (#25637) Message-ID: https://github.com/python/cpython/commit/f65f3f0e99b27e0a4ea6bb7e30c5bdb5832a76c6 commit: f65f3f0e99b27e0a4ea6bb7e30c5bdb5832a76c6 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-04-26T21:54:25+02:00 summary: bpo-40432: Use python 3.8 or higher to compile CPython on Windows (GH-25389) (#25637) (cherry picked from commit 425434dadc30d96dc1c0c628f954f9b6f5edd2c9) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst M PCbuild/find_python.bat diff --git a/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst b/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst new file mode 100644 index 0000000000000..6f8ce00bf99ec --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst @@ -0,0 +1,3 @@ +Updated pegen regeneration script on Windows to find and use Python 3.8 or +higher. Prior to this, pegen regeneration already required 3.8 or higher, +but the script may have used lower versions of Python. diff --git a/PCbuild/find_python.bat b/PCbuild/find_python.bat index 75413cdbfcf43..d0e4a86b01fd0 100644 --- a/PCbuild/find_python.bat +++ b/PCbuild/find_python.bat @@ -34,10 +34,10 @@ @if exist "%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe" (set PYTHON="%_Py_EXTERNALS_DIR%\pythonx86\tools\python.exe") & (set _Py_Python_Source=found in externals directory) & goto :found @rem If HOST_PYTHON is recent enough, use that - at if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -Ec "import sys; assert sys.version_info[:2] >= (3, 6)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found + at if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -Ec "import sys; assert sys.version_info[:2] >= (3, 8)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found @rem If py.exe finds a recent enough version, use that one - at for %%p in (3.8 3.7 3.6) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found + at for %%p in (3.9 3.8) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found @if NOT exist "%_Py_EXTERNALS_DIR%" mkdir "%_Py_EXTERNALS_DIR%" @set _Py_NUGET=%NUGET% From webhook-mailer at python.org Mon Apr 26 15:57:08 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 26 Apr 2021 19:57:08 -0000 Subject: [Python-checkins] [3.8] bpo-28577: Special case added to IP v4 and v6 hosts for /32 and /128 networks (GH-18757) (#25536) Message-ID: https://github.com/python/cpython/commit/10ad7eb2ef61a2ba99341c804c8c960e4f284621 commit: 10ad7eb2ef61a2ba99341c804c8c960e4f284621 branch: 3.8 author: Pete Wicken <2273100+JamoBox at users.noreply.github.com> committer: ambv date: 2021-04-26T21:57:04+02:00 summary: [3.8] bpo-28577: Special case added to IP v4 and v6 hosts for /32 and /128 networks (GH-18757) (#25536) The `.hosts()` method now returns the single address present in a /32 or /128 network.. (cherry picked from commit 8e9c47a947954c997d4b725f4551d50a1d896722) Co-authored-by: Pete Wicken <2273100+JamoBox at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst M Doc/library/ipaddress.rst M Lib/ipaddress.py M Lib/test/test_ipaddress.py M Misc/ACKS diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index 140401d2f3673..2cdfddb02e96c 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -487,7 +487,8 @@ dictionaries. hosts are all the IP addresses that belong to the network, except the network address itself and the network broadcast address. For networks with a mask length of 31, the network address and network broadcast - address are also included in the result. + address are also included in the result. Networks with a mask of 32 + will return a list containing the single host address. >>> list(ip_network('192.0.2.0/29').hosts()) #doctest: +NORMALIZE_WHITESPACE [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), @@ -495,6 +496,8 @@ dictionaries. IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] + >>> list(ip_network('192.0.2.1/32').hosts()) + [IPv4Address('192.0.2.1')] .. method:: overlaps(other) @@ -656,6 +659,8 @@ dictionaries. hosts are all the IP addresses that belong to the network, except the Subnet-Router anycast address. For networks with a mask length of 127, the Subnet-Router anycast address is also included in the result. + Networks with a mask of 128 will return a list containing the + single host address. .. method:: overlaps(other) .. method:: address_exclude(network) diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 1014eba551719..28b7b6159a62e 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1458,6 +1458,8 @@ def __init__(self, address, strict=True): if self._prefixlen == (self._max_prefixlen - 1): self.hosts = self.__iter__ + elif self._prefixlen == (self._max_prefixlen): + self.hosts = lambda: [IPv4Address(addr)] @property @functools.lru_cache() @@ -2110,6 +2112,8 @@ def __init__(self, address, strict=True): if self._prefixlen == (self._max_prefixlen - 1): self.hosts = self.__iter__ + elif self._prefixlen == self._max_prefixlen: + self.hosts = lambda: [IPv6Address(addr)] def hosts(self): """Generate Iterator over usable hosts in a network. diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 2eba740e5e7a4..2f1c5b6b6fb9c 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -1124,6 +1124,15 @@ def testHosts(self): self.assertEqual(list(ipaddress.ip_network(str_args).hosts()), list(ipaddress.ip_network(tpl_args).hosts())) + # special case where the network is a /32 + addrs = [ipaddress.IPv4Address('1.2.3.4')] + str_args = '1.2.3.4/32' + tpl_args = ('1.2.3.4', 32) + self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts())) + self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts())) + self.assertEqual(list(ipaddress.ip_network(str_args).hosts()), + list(ipaddress.ip_network(tpl_args).hosts())) + addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::'), ipaddress.IPv6Address('2001:658:22a:cafe::1')] str_args = '2001:658:22a:cafe::/127' @@ -1133,6 +1142,14 @@ def testHosts(self): self.assertEqual(list(ipaddress.ip_network(str_args).hosts()), list(ipaddress.ip_network(tpl_args).hosts())) + addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::1'), ] + str_args = '2001:658:22a:cafe::1/128' + tpl_args = ('2001:658:22a:cafe::1', 128) + self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts())) + self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts())) + self.assertEqual(list(ipaddress.ip_network(str_args).hosts()), + list(ipaddress.ip_network(tpl_args).hosts())) + def testFancySubnetting(self): self.assertEqual(sorted(self.ipv4_network.subnets(prefixlen_diff=3)), sorted(self.ipv4_network.subnets(new_prefix=27))) diff --git a/Misc/ACKS b/Misc/ACKS index b25bd20deeb2e..b5e5788bfc0f4 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1816,6 +1816,7 @@ Jeff Wheeler Christopher White David White Mats Wichmann +Pete Wicken Marcel Widjaja Truida Wiedijk Felix Wiemann diff --git a/Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst b/Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst new file mode 100644 index 0000000000000..de4c064378c24 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst @@ -0,0 +1 @@ +The hosts method on 32-bit prefix length IPv4Networks and 128-bit prefix IPv6Networks now returns a list containing the single Address instead of an empty list. From webhook-mailer at python.org Mon Apr 26 18:14:13 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 22:14:13 -0000 Subject: [Python-checkins] Use the zero argument form of super() in examples for Python3 docs. (GH-22314) Message-ID: https://github.com/python/cpython/commit/52cd6d5e1b2bece0d8efb58b1af41071c914ebe6 commit: 52cd6d5e1b2bece0d8efb58b1af41071c914ebe6 branch: master author: Andre Delfino committer: orsenthil date: 2021-04-26T15:13:54-07:00 summary: Use the zero argument form of super() in examples for Python3 docs. (GH-22314) files: M Doc/howto/logging-cookbook.rst M Doc/library/argparse.rst M Doc/library/contextlib.rst M Doc/library/multiprocessing.rst M Doc/library/unittest.mock-examples.rst M Doc/library/weakref.rst diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index de0f834551f5d..5777a4c5031f8 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -1188,7 +1188,7 @@ to the above, as in the following example:: class StyleAdapter(logging.LoggerAdapter): def __init__(self, logger, extra=None): - super(StyleAdapter, self).__init__(logger, extra or {}) + super().__init__(logger, extra or {}) def log(self, level, msg, /, *args, **kwargs): if self.isEnabledFor(level): @@ -1783,7 +1783,7 @@ as in the following complete example:: return tuple(o) elif isinstance(o, unicode): return o.encode('unicode_escape').decode('ascii') - return super(Encoder, self).default(o) + return super().default(o) class StructuredMessage: def __init__(self, message, /, **kwargs): @@ -2175,11 +2175,11 @@ class, as shown in the following example:: """ Format an exception so that it prints on a single line. """ - result = super(OneLineExceptionFormatter, self).formatException(exc_info) + result = super().formatException(exc_info) return repr(result) # or format into one line however you want to def format(self, record): - s = super(OneLineExceptionFormatter, self).format(record) + s = super().format(record) if record.exc_text: s = s.replace('\n', '') + '|' return s @@ -2813,7 +2813,7 @@ refer to the comments in the code snippet for more detailed information. # class QtHandler(logging.Handler): def __init__(self, slotfunc, *args, **kwargs): - super(QtHandler, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.signaller = Signaller() self.signaller.signal.connect(slotfunc) @@ -2883,7 +2883,7 @@ refer to the comments in the code snippet for more detailed information. } def __init__(self, app): - super(Window, self).__init__() + super().__init__() self.app = app self.textedit = te = QtWidgets.QPlainTextEdit(self) # Set whatever the default monospace font is for the platform diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index d065487e281da..b2eb9eff914c6 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -863,7 +863,7 @@ An example of a custom action:: ... def __init__(self, option_strings, dest, nargs=None, **kwargs): ... if nargs is not None: ... raise ValueError("nargs not allowed") - ... super(FooAction, self).__init__(option_strings, dest, **kwargs) + ... super().__init__(option_strings, dest, **kwargs) ... def __call__(self, parser, namespace, values, option_string=None): ... print('%r %r %r' % (namespace, values, option_string)) ... setattr(namespace, self.dest, values) diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst index 91edbba728347..b92f703509fca 100644 --- a/Doc/library/contextlib.rst +++ b/Doc/library/contextlib.rst @@ -753,7 +753,7 @@ even further by means of a small helper class:: class Callback(ExitStack): def __init__(self, callback, /, *args, **kwds): - super(Callback, self).__init__() + super().__init__() self.callback(callback, *args, **kwds) def cancel(self): diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index e109b1ebe1cee..ae4f7bf3b9621 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1926,7 +1926,7 @@ client to access it remotely:: >>> class Worker(Process): ... def __init__(self, q): ... self.q = q - ... super(Worker, self).__init__() + ... super().__init__() ... def run(self): ... self.q.put('local hello') ... diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst index e650bb1e23e03..24a18c6848468 100644 --- a/Doc/library/unittest.mock-examples.rst +++ b/Doc/library/unittest.mock-examples.rst @@ -893,7 +893,7 @@ Here's an example implementation: ... def __call__(self, /, *args, **kwargs): ... args = deepcopy(args) ... kwargs = deepcopy(kwargs) - ... return super(CopyingMock, self).__call__(*args, **kwargs) + ... return super().__call__(*args, **kwargs) ... >>> c = CopyingMock(return_value=None) >>> arg = set() diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst index d3c3a070f38af..b88543e445372 100644 --- a/Doc/library/weakref.rst +++ b/Doc/library/weakref.rst @@ -382,7 +382,7 @@ the referent is accessed:: class ExtendedRef(weakref.ref): def __init__(self, ob, callback=None, /, **annotations): - super(ExtendedRef, self).__init__(ob, callback) + super().__init__(ob, callback) self.__counter = 0 for k, v in annotations.items(): setattr(self, k, v) @@ -391,7 +391,7 @@ the referent is accessed:: """Return a pair containing the referent and the number of times the reference has been called. """ - ob = super(ExtendedRef, self).__call__() + ob = super().__call__() if ob is not None: self.__counter += 1 ob = (ob, self.__counter) From webhook-mailer at python.org Mon Apr 26 18:16:13 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 22:16:13 -0000 Subject: [Python-checkins] Use the zero argument form of super() in examples for Python3 docs. (GH-22314) (GH-25639) Message-ID: https://github.com/python/cpython/commit/a808aaba0537531395ed6162414c2d055d24f13b commit: a808aaba0537531395ed6162414c2d055d24f13b branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T15:16:08-07:00 summary: Use the zero argument form of super() in examples for Python3 docs. (GH-22314) (GH-25639) (cherry picked from commit 52cd6d5e1b2bece0d8efb58b1af41071c914ebe6) Co-authored-by: Andre Delfino files: M Doc/howto/logging-cookbook.rst M Doc/library/argparse.rst M Doc/library/contextlib.rst M Doc/library/multiprocessing.rst M Doc/library/unittest.mock-examples.rst M Doc/library/weakref.rst diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index de0f834551f5d..5777a4c5031f8 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -1188,7 +1188,7 @@ to the above, as in the following example:: class StyleAdapter(logging.LoggerAdapter): def __init__(self, logger, extra=None): - super(StyleAdapter, self).__init__(logger, extra or {}) + super().__init__(logger, extra or {}) def log(self, level, msg, /, *args, **kwargs): if self.isEnabledFor(level): @@ -1783,7 +1783,7 @@ as in the following complete example:: return tuple(o) elif isinstance(o, unicode): return o.encode('unicode_escape').decode('ascii') - return super(Encoder, self).default(o) + return super().default(o) class StructuredMessage: def __init__(self, message, /, **kwargs): @@ -2175,11 +2175,11 @@ class, as shown in the following example:: """ Format an exception so that it prints on a single line. """ - result = super(OneLineExceptionFormatter, self).formatException(exc_info) + result = super().formatException(exc_info) return repr(result) # or format into one line however you want to def format(self, record): - s = super(OneLineExceptionFormatter, self).format(record) + s = super().format(record) if record.exc_text: s = s.replace('\n', '') + '|' return s @@ -2813,7 +2813,7 @@ refer to the comments in the code snippet for more detailed information. # class QtHandler(logging.Handler): def __init__(self, slotfunc, *args, **kwargs): - super(QtHandler, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.signaller = Signaller() self.signaller.signal.connect(slotfunc) @@ -2883,7 +2883,7 @@ refer to the comments in the code snippet for more detailed information. } def __init__(self, app): - super(Window, self).__init__() + super().__init__() self.app = app self.textedit = te = QtWidgets.QPlainTextEdit(self) # Set whatever the default monospace font is for the platform diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 2ec7ea3ecb4e3..63648ed81d8c1 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -825,7 +825,7 @@ An example of a custom action:: ... def __init__(self, option_strings, dest, nargs=None, **kwargs): ... if nargs is not None: ... raise ValueError("nargs not allowed") - ... super(FooAction, self).__init__(option_strings, dest, **kwargs) + ... super().__init__(option_strings, dest, **kwargs) ... def __call__(self, parser, namespace, values, option_string=None): ... print('%r %r %r' % (namespace, values, option_string)) ... setattr(namespace, self.dest, values) diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst index 73b24e5f251a9..6b2286e8968eb 100644 --- a/Doc/library/contextlib.rst +++ b/Doc/library/contextlib.rst @@ -638,7 +638,7 @@ even further by means of a small helper class:: class Callback(ExitStack): def __init__(self, callback, /, *args, **kwds): - super(Callback, self).__init__() + super().__init__() self.callback(callback, *args, **kwds) def cancel(self): diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 041410900dff6..5777344953a77 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1916,7 +1916,7 @@ client to access it remotely:: >>> class Worker(Process): ... def __init__(self, q): ... self.q = q - ... super(Worker, self).__init__() + ... super().__init__() ... def run(self): ... self.q.put('local hello') ... diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst index e650bb1e23e03..24a18c6848468 100644 --- a/Doc/library/unittest.mock-examples.rst +++ b/Doc/library/unittest.mock-examples.rst @@ -893,7 +893,7 @@ Here's an example implementation: ... def __call__(self, /, *args, **kwargs): ... args = deepcopy(args) ... kwargs = deepcopy(kwargs) - ... return super(CopyingMock, self).__call__(*args, **kwargs) + ... return super().__call__(*args, **kwargs) ... >>> c = CopyingMock(return_value=None) >>> arg = set() diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst index 0d9f21d2e83a4..28f437e1a3a94 100644 --- a/Doc/library/weakref.rst +++ b/Doc/library/weakref.rst @@ -378,7 +378,7 @@ the referent is accessed:: class ExtendedRef(weakref.ref): def __init__(self, ob, callback=None, /, **annotations): - super(ExtendedRef, self).__init__(ob, callback) + super().__init__(ob, callback) self.__counter = 0 for k, v in annotations.items(): setattr(self, k, v) @@ -387,7 +387,7 @@ the referent is accessed:: """Return a pair containing the referent and the number of times the reference has been called. """ - ob = super(ExtendedRef, self).__call__() + ob = super().__call__() if ob is not None: self.__counter += 1 ob = (ob, self.__counter) From webhook-mailer at python.org Mon Apr 26 18:16:24 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 26 Apr 2021 22:16:24 -0000 Subject: [Python-checkins] Use the zero argument form of super() in examples for Python3 docs. (GH-22314) (GH-25638) Message-ID: https://github.com/python/cpython/commit/c816c1c77928f31768cb53cfee461ca67698bb1a commit: c816c1c77928f31768cb53cfee461ca67698bb1a branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T15:16:20-07:00 summary: Use the zero argument form of super() in examples for Python3 docs. (GH-22314) (GH-25638) (cherry picked from commit 52cd6d5e1b2bece0d8efb58b1af41071c914ebe6) Co-authored-by: Andre Delfino files: M Doc/howto/logging-cookbook.rst M Doc/library/argparse.rst M Doc/library/contextlib.rst M Doc/library/multiprocessing.rst M Doc/library/unittest.mock-examples.rst M Doc/library/weakref.rst diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index de0f834551f5d..5777a4c5031f8 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -1188,7 +1188,7 @@ to the above, as in the following example:: class StyleAdapter(logging.LoggerAdapter): def __init__(self, logger, extra=None): - super(StyleAdapter, self).__init__(logger, extra or {}) + super().__init__(logger, extra or {}) def log(self, level, msg, /, *args, **kwargs): if self.isEnabledFor(level): @@ -1783,7 +1783,7 @@ as in the following complete example:: return tuple(o) elif isinstance(o, unicode): return o.encode('unicode_escape').decode('ascii') - return super(Encoder, self).default(o) + return super().default(o) class StructuredMessage: def __init__(self, message, /, **kwargs): @@ -2175,11 +2175,11 @@ class, as shown in the following example:: """ Format an exception so that it prints on a single line. """ - result = super(OneLineExceptionFormatter, self).formatException(exc_info) + result = super().formatException(exc_info) return repr(result) # or format into one line however you want to def format(self, record): - s = super(OneLineExceptionFormatter, self).format(record) + s = super().format(record) if record.exc_text: s = s.replace('\n', '') + '|' return s @@ -2813,7 +2813,7 @@ refer to the comments in the code snippet for more detailed information. # class QtHandler(logging.Handler): def __init__(self, slotfunc, *args, **kwargs): - super(QtHandler, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.signaller = Signaller() self.signaller.signal.connect(slotfunc) @@ -2883,7 +2883,7 @@ refer to the comments in the code snippet for more detailed information. } def __init__(self, app): - super(Window, self).__init__() + super().__init__() self.app = app self.textedit = te = QtWidgets.QPlainTextEdit(self) # Set whatever the default monospace font is for the platform diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 75e083a2d9072..aa4713e75cd47 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -863,7 +863,7 @@ An example of a custom action:: ... def __init__(self, option_strings, dest, nargs=None, **kwargs): ... if nargs is not None: ... raise ValueError("nargs not allowed") - ... super(FooAction, self).__init__(option_strings, dest, **kwargs) + ... super().__init__(option_strings, dest, **kwargs) ... def __call__(self, parser, namespace, values, option_string=None): ... print('%r %r %r' % (namespace, values, option_string)) ... setattr(namespace, self.dest, values) diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst index 0aa4ad7652348..4c6c520713178 100644 --- a/Doc/library/contextlib.rst +++ b/Doc/library/contextlib.rst @@ -638,7 +638,7 @@ even further by means of a small helper class:: class Callback(ExitStack): def __init__(self, callback, /, *args, **kwds): - super(Callback, self).__init__() + super().__init__() self.callback(callback, *args, **kwds) def cancel(self): diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 352f48f513df9..def27bf07a03e 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1926,7 +1926,7 @@ client to access it remotely:: >>> class Worker(Process): ... def __init__(self, q): ... self.q = q - ... super(Worker, self).__init__() + ... super().__init__() ... def run(self): ... self.q.put('local hello') ... diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst index e650bb1e23e03..24a18c6848468 100644 --- a/Doc/library/unittest.mock-examples.rst +++ b/Doc/library/unittest.mock-examples.rst @@ -893,7 +893,7 @@ Here's an example implementation: ... def __call__(self, /, *args, **kwargs): ... args = deepcopy(args) ... kwargs = deepcopy(kwargs) - ... return super(CopyingMock, self).__call__(*args, **kwargs) + ... return super().__call__(*args, **kwargs) ... >>> c = CopyingMock(return_value=None) >>> arg = set() diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst index d3c3a070f38af..b88543e445372 100644 --- a/Doc/library/weakref.rst +++ b/Doc/library/weakref.rst @@ -382,7 +382,7 @@ the referent is accessed:: class ExtendedRef(weakref.ref): def __init__(self, ob, callback=None, /, **annotations): - super(ExtendedRef, self).__init__(ob, callback) + super().__init__(ob, callback) self.__counter = 0 for k, v in annotations.items(): setattr(self, k, v) @@ -391,7 +391,7 @@ the referent is accessed:: """Return a pair containing the referent and the number of times the reference has been called. """ - ob = super(ExtendedRef, self).__call__() + ob = super().__call__() if ob is not None: self.__counter += 1 ob = (ob, self.__counter) From webhook-mailer at python.org Mon Apr 26 19:16:50 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 26 Apr 2021 23:16:50 -0000 Subject: [Python-checkins] bpo-43762: Add audit events for loading of sqlite3 extensions (GH-25246) Message-ID: https://github.com/python/cpython/commit/7244c0060dc3ef909f34b0791c3e7490b0340d5e commit: 7244c0060dc3ef909f34b0791c3e7490b0340d5e branch: master author: Erlend Egeberg Aasland committer: zooba date: 2021-04-27T00:16:46+01:00 summary: bpo-43762: Add audit events for loading of sqlite3 extensions (GH-25246) files: A Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst M Doc/library/sqlite3.rst M Doc/whatsnew/3.10.rst M Lib/test/audit-tests.py M Lib/test/test_audit.py M Modules/_sqlite/connection.c M Modules/_sqlite/module.c diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 6bdf4ed0d81bcc..d0f28db12fda16 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -225,6 +225,7 @@ Module functions and constants be found in the `SQLite URI documentation `_. .. audit-event:: sqlite3.connect database sqlite3.connect + .. audit-event:: sqlite3.connect/handle connection_handle sqlite3.connect .. versionchanged:: 3.4 Added the *uri* parameter. @@ -232,6 +233,9 @@ Module functions and constants .. versionchanged:: 3.7 *database* can now also be a :term:`path-like object`, not only a string. + .. versionchanged:: 3.10 + Added the ``sqlite3.connect/handle`` auditing event. + .. function:: register_converter(typename, callable) @@ -467,8 +471,13 @@ Connection Objects Loadable extensions are disabled by default. See [#f1]_. + .. audit-event:: sqlite3.enable_load_extension connection,enabled sqlite3.enable_load_extension + .. versionadded:: 3.2 + .. versionchanged:: 3.10 + Added the ``sqlite3.enable_load_extension`` auditing event. + .. literalinclude:: ../includes/sqlite3/load_extension.py .. method:: load_extension(path) @@ -479,8 +488,13 @@ Connection Objects Loadable extensions are disabled by default. See [#f1]_. + .. audit-event:: sqlite3.load_extension connection,path sqlite3.load_extension + .. versionadded:: 3.2 + .. versionchanged:: 3.10 + Added the ``sqlite3.load_extension`` auditing event. + .. attribute:: row_factory You can change this attribute to a callable that accepts the cursor and the diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1d9c03c439f335..91ad8ec1adb6eb 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1080,6 +1080,14 @@ ssl Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. (Contributed by Zackery Spytz in :issue:`31870`.) +sqlite3 +------- + +Add audit events for :func:`~sqlite3.connect/handle`, +:meth:`~sqlite3.Connection.enable_load_extension`, and +:meth:`~sqlite3.Connection.load_extension`. +(Contributed by Erlend E. Aasland in :issue:`43762`.) + sys --- diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py index 2addf9762eae49..ed42451b8f08af 100644 --- a/Lib/test/audit-tests.py +++ b/Lib/test/audit-tests.py @@ -359,6 +359,27 @@ def hook(event, args): conn.close() +def test_sqlite3(): + import sqlite3 + + def hook(event, *args): + if event.startswith("sqlite3."): + print(event, *args) + + sys.addaudithook(hook) + cx = sqlite3.connect(":memory:") + + # Configured without --enable-loadable-sqlite-extensions + if hasattr(sqlite3.Connection, "enable_load_extension"): + cx.enable_load_extension(False) + try: + cx.load_extension("test") + except sqlite3.OperationalError: + pass + else: + raise RuntimeError("Expected sqlite3.load_extension to fail") + + if __name__ == "__main__": from test.support import suppress_msvcrt_asserts diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py index 456a5daceb9f10..4ba62c408526d3 100644 --- a/Lib/test/test_audit.py +++ b/Lib/test/test_audit.py @@ -130,6 +130,7 @@ def test_gc(self): ["gc.get_objects", "gc.get_referrers", "gc.get_referents"] ) + def test_http(self): import_helper.import_module("http.client") returncode, events, stderr = self.run_python("test_http_client") @@ -145,5 +146,27 @@ def test_http(self): self.assertIn('HTTP', events[1][2]) + def test_sqlite3(self): + try: + import sqlite3 + except ImportError: + return + returncode, events, stderr = self.run_python("test_sqlite3") + if returncode: + self.fail(stderr) + + if support.verbose: + print(*events, sep='\n') + actual = [ev[0] for ev in events] + expected = ["sqlite3.connect", "sqlite3.connect/handle"] + + if hasattr(sqlite3.Connection, "enable_load_extension"): + expected += [ + "sqlite3.enable_load_extension", + "sqlite3.load_extension", + ] + self.assertEqual(actual, expected) + + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst b/Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst new file mode 100644 index 00000000000000..aa392656807e11 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst @@ -0,0 +1,3 @@ +Add audit events for :func:`sqlite3.connect/handle`, +:meth:`sqlite3.Connection.enable_load_extension`, and +:meth:`sqlite3.Connection.load_extension`. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 150291cb72396d..5f8e41b6169a76 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1154,6 +1154,11 @@ pysqlite_connection_enable_load_extension_impl(pysqlite_Connection *self, { int rc; + if (PySys_Audit("sqlite3.enable_load_extension", + "OO", self, onoff ? Py_True : Py_False) < 0) { + return NULL; + } + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; } @@ -1185,6 +1190,10 @@ pysqlite_connection_load_extension_impl(pysqlite_Connection *self, int rc; char* errmsg; + if (PySys_Audit("sqlite3.load_extension", "Os", self, extension_name) < 0) { + return NULL; + } + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { return NULL; } diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 8dbfa7b38a1f9c..2f323fcd00141f 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -96,6 +96,14 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* } result = PyObject_Call(factory, args, kwargs); + if (result == NULL) { + return NULL; + } + + if (PySys_Audit("sqlite3.connect/handle", "O", self) < 0) { + Py_DECREF(result); + return NULL; + } return result; } From webhook-mailer at python.org Mon Apr 26 20:22:54 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 27 Apr 2021 00:22:54 -0000 Subject: [Python-checkins] bpo-38530: Require 50% similarity in NameError and AttributeError suggestions (GH-25584) Message-ID: https://github.com/python/cpython/commit/284c52da092438522949d6f96d8c1f9ff37f9f00 commit: 284c52da092438522949d6f96d8c1f9ff37f9f00 branch: master author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: pablogsal date: 2021-04-27T01:22:27+01:00 summary: bpo-38530: Require 50% similarity in NameError and AttributeError suggestions (GH-25584) files: M Lib/test/test_exceptions.py M Python/suggestions.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index b3c00b04a37621..590935cb6cd624 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1507,6 +1507,61 @@ def f(): self.assertNotIn("somethingverywronghehe", err.getvalue()) + def test_name_error_bad_suggestions_do_not_trigger_for_small_names(self): + vvv = mom = w = id = pytho = None + + with self.subTest(name="b"): + try: + b + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="v"): + try: + v + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="m"): + try: + m + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="py"): + try: + py + except NameError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + def test_name_error_suggestions_do_not_trigger_for_too_many_locals(self): def f(): # Mutating locals() is unreliable, so we need to do it by hand @@ -1661,6 +1716,63 @@ class A: self.assertNotIn("blech", err.getvalue()) + def test_getattr_error_bad_suggestions_do_not_trigger_for_small_names(self): + class MyClass: + vvv = mom = w = id = pytho = None + + with self.subTest(name="b"): + try: + MyClass.b + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="v"): + try: + MyClass.v + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="m"): + try: + MyClass.m + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + with self.subTest(name="py"): + try: + MyClass.py + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + self.assertNotIn("you mean", err.getvalue()) + self.assertNotIn("vvv", err.getvalue()) + self.assertNotIn("mom", err.getvalue()) + self.assertNotIn("'id'", err.getvalue()) + self.assertNotIn("'w'", err.getvalue()) + self.assertNotIn("'pytho'", err.getvalue()) + + def test_getattr_suggestions_do_not_trigger_for_big_dicts(self): class A: blech = None diff --git a/Python/suggestions.c b/Python/suggestions.c index d4e9dc22bbc7b9..2fd6714e847874 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -102,7 +102,10 @@ calculate_suggestions(PyObject *dir, if (current_distance == -1) { return NULL; } - if (current_distance == 0 || current_distance > MAX_DISTANCE) { + if (current_distance == 0 || + current_distance > MAX_DISTANCE || + current_distance * 2 > name_size) + { continue; } if (!suggestion || current_distance < suggestion_distance) { From webhook-mailer at python.org Mon Apr 26 23:46:33 2021 From: webhook-mailer at python.org (methane) Date: Tue, 27 Apr 2021 03:46:33 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in `pydoc`. (GH-25644) Message-ID: https://github.com/python/cpython/commit/9dfefbe3e2dc548ad306870b56cc0cb475aa20a2 commit: 9dfefbe3e2dc548ad306870b56cc0cb475aa20a2 branch: master author: Inada Naoki committer: methane date: 2021-04-27T12:46:20+09:00 summary: bpo-43651: Fix EncodingWarning in `pydoc`. (GH-25644) files: M Lib/pydoc.py diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 753ea97ba0c2a..8eecd66a2c2fb 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1594,9 +1594,10 @@ def plain(text): def pipepager(text, cmd): """Page through text by feeding it to another program.""" import subprocess - proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + errors='backslashreplace') try: - with io.TextIOWrapper(proc.stdin, errors='backslashreplace') as pipe: + with proc.stdin as pipe: try: pipe.write(text) except KeyboardInterrupt: From webhook-mailer at python.org Tue Apr 27 00:15:39 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 27 Apr 2021 04:15:39 -0000 Subject: [Python-checkins] [doc] Remove duplicated operator.itemgetter example (GH-24178) Message-ID: https://github.com/python/cpython/commit/743e2bae10d2010fd1e29b772c9da64efc7c9c47 commit: 743e2bae10d2010fd1e29b772c9da64efc7c9c47 branch: master author: Andre Delfino committer: orsenthil date: 2021-04-26T21:15:31-07:00 summary: [doc] Remove duplicated operator.itemgetter example (GH-24178) * Remove duplicated itemgetter example * Add spaces files: M Doc/library/operator.rst diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst index 36c53556c2685..0cdba68f3770e 100644 --- a/Doc/library/operator.rst +++ b/Doc/library/operator.rst @@ -319,15 +319,12 @@ expect a function argument. method. Dictionaries accept any hashable value. Lists, tuples, and strings accept an index or a slice: - >>> itemgetter('name')({'name': 'tu', 'age': 18}) - 'tu' >>> itemgetter(1)('ABCDEFG') 'B' - >>> itemgetter(1,3,5)('ABCDEFG') + >>> itemgetter(1, 3, 5)('ABCDEFG') ('B', 'D', 'F') - >>> itemgetter(slice(2,None))('ABCDEFG') + >>> itemgetter(slice(2, None))('ABCDEFG') 'CDEFG' - >>> soldier = dict(rank='captain', name='dotterbart') >>> itemgetter('rank')(soldier) 'captain' From webhook-mailer at python.org Tue Apr 27 00:16:32 2021 From: webhook-mailer at python.org (methane) Date: Tue, 27 Apr 2021 04:16:32 -0000 Subject: [Python-checkins] bpo-43651: PEP 597: Fix `socket.makefile()` (GH-25645) Message-ID: https://github.com/python/cpython/commit/cfe523b49280cdc8c239c807121ad3f33552f638 commit: cfe523b49280cdc8c239c807121ad3f33552f638 branch: master author: Inada Naoki committer: methane date: 2021-04-27T13:16:28+09:00 summary: bpo-43651: PEP 597: Fix `socket.makefile()` (GH-25645) files: M Lib/socket.py M Lib/test/test_socket.py diff --git a/Lib/socket.py b/Lib/socket.py index 5276cc8ba3d61..fc11eb783c3dd 100755 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -337,6 +337,7 @@ def makefile(self, mode="r", buffering=None, *, buffer = io.BufferedWriter(raw, buffering) if binary: return buffer + encoding = io.text_encoding(encoding) text = io.TextIOWrapper(buffer, encoding, errors, newline) text.mode = mode return text diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 43a1d5bdcf536..3c45278748a94 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1678,7 +1678,8 @@ def test_makefile_mode(self): for mode in 'r', 'rb', 'rw', 'w', 'wb': with self.subTest(mode=mode): with socket.socket() as sock: - with sock.makefile(mode) as fp: + encoding = None if "b" in mode else "utf-8" + with sock.makefile(mode, encoding=encoding) as fp: self.assertEqual(fp.mode, mode) def test_makefile_invalid_mode(self): @@ -5625,7 +5626,7 @@ def isTipcAvailable(): if not hasattr(socket, "AF_TIPC"): return False try: - f = open("/proc/modules") + f = open("/proc/modules", encoding="utf-8") except (FileNotFoundError, IsADirectoryError, PermissionError): # It's ok if the file does not exist, is a directory or if we # have not the permission to read it. @@ -6222,7 +6223,7 @@ def test_errors(self): meth = self.meth_from_sock(s) self.assertRaisesRegex( ValueError, "SOCK_STREAM", meth, file) - with open(os_helper.TESTFN, 'rt') as file: + with open(os_helper.TESTFN, encoding="utf-8") as file: with socket.socket() as s: meth = self.meth_from_sock(s) self.assertRaisesRegex( From webhook-mailer at python.org Tue Apr 27 00:16:37 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 27 Apr 2021 04:16:37 -0000 Subject: [Python-checkins] [doc] Remove duplicated operator.itemgetter example (GH-24178) (#25647) Message-ID: https://github.com/python/cpython/commit/1d7a53759ff41162aded89e8fd4e1867d8ba506b commit: 1d7a53759ff41162aded89e8fd4e1867d8ba506b branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T21:16:33-07:00 summary: [doc] Remove duplicated operator.itemgetter example (GH-24178) (#25647) * Remove duplicated itemgetter example * Add spaces (cherry picked from commit 743e2bae10d2010fd1e29b772c9da64efc7c9c47) Co-authored-by: Andre Delfino files: M Doc/library/operator.rst diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst index fa02bde84650e..f2fb084ac1720 100644 --- a/Doc/library/operator.rst +++ b/Doc/library/operator.rst @@ -315,15 +315,12 @@ expect a function argument. method. Dictionaries accept any hashable value. Lists, tuples, and strings accept an index or a slice: - >>> itemgetter('name')({'name': 'tu', 'age': 18}) - 'tu' >>> itemgetter(1)('ABCDEFG') 'B' - >>> itemgetter(1,3,5)('ABCDEFG') + >>> itemgetter(1, 3, 5)('ABCDEFG') ('B', 'D', 'F') - >>> itemgetter(slice(2,None))('ABCDEFG') + >>> itemgetter(slice(2, None))('ABCDEFG') 'CDEFG' - >>> soldier = dict(rank='captain', name='dotterbart') >>> itemgetter('rank')(soldier) 'captain' From webhook-mailer at python.org Tue Apr 27 00:16:45 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 27 Apr 2021 04:16:45 -0000 Subject: [Python-checkins] [doc] Remove duplicated operator.itemgetter example (GH-24178) (#25646) Message-ID: https://github.com/python/cpython/commit/4a3d73d8ad4e0a41adaf77577b0dfe62263c90d4 commit: 4a3d73d8ad4e0a41adaf77577b0dfe62263c90d4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-26T21:16:40-07:00 summary: [doc] Remove duplicated operator.itemgetter example (GH-24178) (#25646) * Remove duplicated itemgetter example * Add spaces (cherry picked from commit 743e2bae10d2010fd1e29b772c9da64efc7c9c47) Co-authored-by: Andre Delfino files: M Doc/library/operator.rst diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst index fa02bde84650e..f2fb084ac1720 100644 --- a/Doc/library/operator.rst +++ b/Doc/library/operator.rst @@ -315,15 +315,12 @@ expect a function argument. method. Dictionaries accept any hashable value. Lists, tuples, and strings accept an index or a slice: - >>> itemgetter('name')({'name': 'tu', 'age': 18}) - 'tu' >>> itemgetter(1)('ABCDEFG') 'B' - >>> itemgetter(1,3,5)('ABCDEFG') + >>> itemgetter(1, 3, 5)('ABCDEFG') ('B', 'D', 'F') - >>> itemgetter(slice(2,None))('ABCDEFG') + >>> itemgetter(slice(2, None))('ABCDEFG') 'CDEFG' - >>> soldier = dict(rank='captain', name='dotterbart') >>> itemgetter('rank')(soldier) 'captain' From webhook-mailer at python.org Tue Apr 27 01:43:09 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 27 Apr 2021 05:43:09 -0000 Subject: [Python-checkins] bpo-43945: [Enum] Deprecate non-standard mixin format() behavior (GH-25649) Message-ID: https://github.com/python/cpython/commit/5987b8c463892e0ab7a63cdae92f34b5eb79732d commit: 5987b8c463892e0ab7a63cdae92f34b5eb79732d branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-26T22:42:57-07:00 summary: bpo-43945: [Enum] Deprecate non-standard mixin format() behavior (GH-25649) In 3.12 the enum member, not the member's value, will be used for format() calls. Format specifiers can be used to retain the current display of enum members: Example enumeration: class Color(IntEnum): RED = 1 GREEN = 2 BLUE = 3 Current behavior: f'{Color.RED}' --> '1' Future behavior: f'{Color.RED}' --> 'RED' Using d specifier: f'{Color.RED:d}' --> '1' Using specifiers can be done now and is future-compatible. files: A Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst M Lib/enum.py M Lib/test/test_enum.py diff --git a/Lib/enum.py b/Lib/enum.py index ca6aff6f82512d..bcf411c6b6550c 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1005,6 +1005,14 @@ def __format__(self, format_spec): val = str(self) # mix-in branch else: + import warnings + warnings.warn( + "in 3.12 format() will use the enum member, not the enum member's value;\n" + "use a format specifier, such as :d for an IntEnum member, to maintain" + "the current display", + DeprecationWarning, + stacklevel=2, + ) cls = self._member_type_ val = self._value_ return cls.__format__(val, format_spec) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 4f28b80293d352..983c54b8711991 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -528,6 +528,14 @@ def __format__(self, spec): self.assertEqual(str(TestFloat.one), 'one') self.assertEqual('{}'.format(TestFloat.one), 'TestFloat success!') + @unittest.skipUnless( + sys.version_info[:2] < (3, 12), + 'mixin-format now uses member instead of member.value', + ) + def test_mixin_format_warning(self): + with self.assertWarns(DeprecationWarning): + self.assertEqual(f'{self.Grades.B}', '4') + def assertFormatIsValue(self, spec, member): self.assertEqual(spec.format(member), spec.format(member.value)) diff --git a/Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst b/Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst new file mode 100644 index 00000000000000..c01c200caa7801 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst @@ -0,0 +1,2 @@ +[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum +member, not the member's value, will be used for format() calls. From webhook-mailer at python.org Tue Apr 27 02:45:40 2021 From: webhook-mailer at python.org (methane) Date: Tue, 27 Apr 2021 06:45:40 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in zipfile (GH-25650) Message-ID: https://github.com/python/cpython/commit/caae717c2903fff4704b59714bc0c65d60108321 commit: caae717c2903fff4704b59714bc0c65d60108321 branch: master author: Inada Naoki committer: methane date: 2021-04-27T15:45:31+09:00 summary: bpo-43651: Fix EncodingWarning in zipfile (GH-25650) files: M Lib/test/test_zipfile.py M Lib/zipfile.py diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 7c09e2f51b005..bfc981c0d15d3 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -548,7 +548,7 @@ def test_append_to_concatenated_zip_file(self): def test_ignores_newline_at_end(self): with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp: zipfp.write(TESTFN, TESTFN) - with open(TESTFN2, 'a') as f: + with open(TESTFN2, 'a', encoding='utf-8') as f: f.write("\r\n\00\00\00") with zipfile.ZipFile(TESTFN2, "r") as zipfp: self.assertIsInstance(zipfp, zipfile.ZipFile) @@ -557,7 +557,7 @@ def test_ignores_stuff_appended_past_comments(self): with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp: zipfp.comment = b"this is a comment" zipfp.write(TESTFN, TESTFN) - with open(TESTFN2, 'a') as f: + with open(TESTFN2, 'a', encoding='utf-8') as f: f.write("abcdef\r\n") with zipfile.ZipFile(TESTFN2, "r") as zipfp: self.assertIsInstance(zipfp, zipfile.ZipFile) @@ -1245,13 +1245,13 @@ def test_write_with_optimization(self): def test_write_python_directory(self): os.mkdir(TESTFN2) try: - with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod1.py"), "w", encoding='utf-8') as fp: fp.write("print(42)\n") - with open(os.path.join(TESTFN2, "mod2.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod2.py"), "w", encoding='utf-8') as fp: fp.write("print(42 * 42)\n") - with open(os.path.join(TESTFN2, "mod2.txt"), "w") as fp: + with open(os.path.join(TESTFN2, "mod2.txt"), "w", encoding='utf-8') as fp: fp.write("bla bla bla\n") with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: @@ -1268,10 +1268,10 @@ def test_write_python_directory(self): def test_write_python_directory_filtered(self): os.mkdir(TESTFN2) try: - with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod1.py"), "w", encoding='utf-8') as fp: fp.write("print(42)\n") - with open(os.path.join(TESTFN2, "mod2.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod2.py"), "w", encoding='utf-8') as fp: fp.write("print(42 * 42)\n") with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: @@ -1287,7 +1287,7 @@ def test_write_python_directory_filtered(self): def test_write_non_pyfile(self): with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: - with open(TESTFN, 'w') as f: + with open(TESTFN, 'w', encoding='utf-8') as f: f.write('most definitely not a python file') self.assertRaises(RuntimeError, zipfp.writepy, TESTFN) unlink(TESTFN) @@ -1295,7 +1295,7 @@ def test_write_non_pyfile(self): def test_write_pyfile_bad_syntax(self): os.mkdir(TESTFN2) try: - with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod1.py"), "w", encoding='utf-8') as fp: fp.write("Bad syntax in python file\n") with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: @@ -1317,7 +1317,7 @@ def test_write_pyfile_bad_syntax(self): def test_write_pathlike(self): os.mkdir(TESTFN2) try: - with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp: + with open(os.path.join(TESTFN2, "mod1.py"), "w", encoding='utf-8') as fp: fp.write("print(42)\n") with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: @@ -1646,7 +1646,7 @@ def test_close_erroneous_file(self): # On Windows, this causes the os.unlink() call to fail because the # underlying file is still open. This is SF bug #412214. # - with open(TESTFN, "w") as fp: + with open(TESTFN, "w", encoding="utf-8") as fp: fp.write("this is not a legal zip file\n") try: zf = zipfile.ZipFile(TESTFN) @@ -1656,7 +1656,7 @@ def test_close_erroneous_file(self): def test_is_zip_erroneous_file(self): """Check that is_zipfile() correctly identifies non-zip files.""" # - passing a filename - with open(TESTFN, "w") as fp: + with open(TESTFN, "w", encoding='utf-8') as fp: fp.write("this is not a legal zip file\n") self.assertFalse(zipfile.is_zipfile(TESTFN)) # - passing a path-like object @@ -1719,11 +1719,11 @@ def test_non_existent_file_raises_OSError(self): self.assertRaises(OSError, zipfile.ZipFile, TESTFN) def test_empty_file_raises_BadZipFile(self): - f = open(TESTFN, 'w') + f = open(TESTFN, 'w', encoding='utf-8') f.close() self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN) - with open(TESTFN, 'w') as fp: + with open(TESTFN, 'w', encoding='utf-8') as fp: fp.write("short file") self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN) @@ -1741,7 +1741,7 @@ def test_closed_zip_raises_ValueError(self): self.assertRaises(ValueError, zipf.open, "foo.txt") self.assertRaises(ValueError, zipf.testzip) self.assertRaises(ValueError, zipf.writestr, "bogus.txt", "bogus") - with open(TESTFN, 'w') as f: + with open(TESTFN, 'w', encoding='utf-8') as f: f.write('zipfile test data') self.assertRaises(ValueError, zipf.write, TESTFN) @@ -1911,7 +1911,7 @@ def test_open_empty_file(self): # Issue 1710703: Check that opening a file with less than 22 bytes # raises a BadZipFile exception (rather than the previously unhelpful # OSError) - f = open(TESTFN, 'w') + f = open(TESTFN, 'w', encoding='utf-8') f.close() self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN, 'r') @@ -2532,7 +2532,7 @@ def test_many_opens(self): zipf.read('ones') with zipf.open('ones') as zopen1: pass - with open(os.devnull) as f: + with open(os.devnull, "rb") as f: self.assertLess(f.fileno(), 100) def test_write_while_reading(self): @@ -2695,11 +2695,11 @@ def test_list_command(self): @requires_zlib() def test_create_command(self): self.addCleanup(unlink, TESTFN) - with open(TESTFN, 'w') as f: + with open(TESTFN, 'w', encoding='utf-8') as f: f.write('test 1') os.mkdir(TESTFNDIR) self.addCleanup(rmtree, TESTFNDIR) - with open(os.path.join(TESTFNDIR, 'file.txt'), 'w') as f: + with open(os.path.join(TESTFNDIR, 'file.txt'), 'w', encoding='utf-8') as f: f.write('test 2') files = [TESTFN, TESTFNDIR] namelist = [TESTFN, TESTFNDIR + '/', TESTFNDIR + '/file.txt'] @@ -2911,7 +2911,7 @@ def test_subdir_is_dir(self, alpharep): def test_open(self, alpharep): root = zipfile.Path(alpharep) a, b, g = root.iterdir() - with a.open() as strm: + with a.open(encoding="utf-8") as strm: data = strm.read() assert data == "content of a" @@ -2923,7 +2923,7 @@ def test_open_write(self): zf = zipfile.Path(zipfile.ZipFile(io.BytesIO(), mode='w')) with zf.joinpath('file.bin').open('wb') as strm: strm.write(b'binary contents') - with zf.joinpath('file.txt').open('w') as strm: + with zf.joinpath('file.txt').open('w', encoding="utf-8") as strm: strm.write('text file') def test_open_extant_directory(self): @@ -2954,7 +2954,7 @@ def test_open_missing_directory(self): def test_read(self, alpharep): root = zipfile.Path(alpharep) a, b, g = root.iterdir() - assert a.read_text() == "content of a" + assert a.read_text(encoding="utf-8") == "content of a" assert a.read_bytes() == b"content of a" @pass_alpharep @@ -2963,13 +2963,13 @@ def test_joinpath(self, alpharep): a = root.joinpath("a.txt") assert a.is_file() e = root.joinpath("b").joinpath("d").joinpath("e.txt") - assert e.read_text() == "content of e" + assert e.read_text(encoding="utf-8") == "content of e" @pass_alpharep def test_joinpath_multiple(self, alpharep): root = zipfile.Path(alpharep) e = root.joinpath("b", "d", "e.txt") - assert e.read_text() == "content of e" + assert e.read_text(encoding="utf-8") == "content of e" @pass_alpharep def test_traverse_truediv(self, alpharep): @@ -2977,7 +2977,7 @@ def test_traverse_truediv(self, alpharep): a = root / "a.txt" assert a.is_file() e = root / "b" / "d" / "e.txt" - assert e.read_text() == "content of e" + assert e.read_text(encoding="utf-8") == "content of e" @pass_alpharep def test_traverse_simplediv(self, alpharep): @@ -3034,9 +3034,9 @@ def test_mutability(self, alpharep): alpharep.writestr('foo.txt', 'foo') alpharep.writestr('bar/baz.txt', 'baz') assert any(child.name == 'foo.txt' for child in root.iterdir()) - assert (root / 'foo.txt').read_text() == 'foo' + assert (root / 'foo.txt').read_text(encoding="utf-8") == 'foo' (baz,) = (root / 'bar').iterdir() - assert baz.read_text() == 'baz' + assert baz.read_text(encoding="utf-8") == 'baz' HUGE_ZIPFILE_NUM_ENTRIES = 2 ** 13 @@ -3070,7 +3070,7 @@ def test_read_does_not_close(self, alpharep): alpharep = self.zipfile_ondisk(alpharep) with zipfile.ZipFile(alpharep) as file: for rep in range(2): - zipfile.Path(file, 'a.txt').read_text() + zipfile.Path(file, 'a.txt').read_text(encoding="utf-8") @pass_alpharep def test_subclass(self, alpharep): diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 0eed4ce9a6344..d99c0d7697775 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -2334,6 +2334,8 @@ def open(self, mode='r', *args, pwd=None, **kwargs): if args or kwargs: raise ValueError("encoding args invalid for binary operation") return stream + else: + kwargs["encoding"] = io.text_encoding(kwargs.get("encoding")) return io.TextIOWrapper(stream, *args, **kwargs) @property @@ -2345,6 +2347,7 @@ def filename(self): return pathlib.Path(self.root.filename).joinpath(self.at) def read_text(self, *args, **kwargs): + kwargs["encoding"] = io.text_encoding(kwargs.get("encoding")) with self.open('r', *args, **kwargs) as strm: return strm.read() From webhook-mailer at python.org Tue Apr 27 02:47:24 2021 From: webhook-mailer at python.org (methane) Date: Tue, 27 Apr 2021 06:47:24 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in fileinput and its test (GH-25648) Message-ID: https://github.com/python/cpython/commit/878bc8b6c2051cf344c594636fa957ce6c9d2188 commit: 878bc8b6c2051cf344c594636fa957ce6c9d2188 branch: master author: Inada Naoki committer: methane date: 2021-04-27T15:47:16+09:00 summary: bpo-43651: Fix EncodingWarning in fileinput and its test (GH-25648) files: M Lib/fileinput.py M Lib/test/test_fileinput.py diff --git a/Lib/fileinput.py b/Lib/fileinput.py index 6218c4f4e2fdf..35347185da048 100644 --- a/Lib/fileinput.py +++ b/Lib/fileinput.py @@ -210,7 +210,8 @@ def __init__(self, files=None, inplace=False, backup="", *, # We can not use io.text_encoding() here because old openhook doesn't # take encoding parameter. - if "b" not in mode and encoding is None and sys.flags.warn_default_encoding: + if (sys.flags.warn_default_encoding and + "b" not in mode and encoding is None and openhook is None): import warnings warnings.warn("'encoding' argument not specified.", EncodingWarning, 2) @@ -330,6 +331,13 @@ def _readline(self): self._file = None self._isstdin = False self._backupfilename = 0 + + # EncodingWarning is emitted in __init__() already + if "b" not in self._mode: + encoding = self._encoding or "locale" + else: + encoding = None + if self._filename == '-': self._filename = '' if 'b' in self._mode: @@ -347,18 +355,18 @@ def _readline(self): pass # The next few lines may raise OSError os.rename(self._filename, self._backupfilename) - self._file = open(self._backupfilename, self._mode) + self._file = open(self._backupfilename, self._mode, encoding=encoding) try: perm = os.fstat(self._file.fileno()).st_mode except OSError: - self._output = open(self._filename, self._write_mode) + self._output = open(self._filename, self._write_mode, encoding=encoding) else: mode = os.O_CREAT | os.O_WRONLY | os.O_TRUNC if hasattr(os, 'O_BINARY'): mode |= os.O_BINARY fd = os.open(self._filename, mode, perm) - self._output = os.fdopen(fd, self._write_mode) + self._output = os.fdopen(fd, self._write_mode, encoding=encoding) try: os.chmod(self._filename, perm) except OSError: @@ -376,11 +384,6 @@ def _readline(self): self._file = self._openhook( self._filename, self._mode, encoding=self._encoding, errors=self._errors) else: - # EncodingWarning is emitted in __init__() already - if "b" not in self._mode: - encoding = self._encoding or "locale" - else: - encoding = None self._file = open(self._filename, self._mode, encoding=encoding, errors=self._errors) self._readline = self._file.readline # hide FileInput._readline return self._readline() diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index d01d39627219e..cae0eb1b5f657 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -44,7 +44,8 @@ class BaseTests: def writeTmp(self, content, *, mode='w'): # opening in text mode is the default fd, name = tempfile.mkstemp() self.addCleanup(os_helper.unlink, name) - with open(fd, mode) as f: + encoding = None if "b" in mode else "utf-8" + with open(fd, mode, encoding=encoding) as f: f.write(content) return name @@ -96,7 +97,7 @@ def test_buffer_sizes(self): if verbose: print('1. Simple iteration') - fi = FileInput(files=(t1, t2, t3, t4)) + fi = FileInput(files=(t1, t2, t3, t4), encoding="utf-8") lines = list(fi) fi.close() self.assertEqual(len(lines), 31) @@ -107,7 +108,7 @@ def test_buffer_sizes(self): if verbose: print('2. Status variables') - fi = FileInput(files=(t1, t2, t3, t4)) + fi = FileInput(files=(t1, t2, t3, t4), encoding="utf-8") s = "x" while s and s != 'Line 6 of file 2\n': s = fi.readline() @@ -126,7 +127,7 @@ def test_buffer_sizes(self): if verbose: print('4. Stdin') - fi = FileInput(files=(t1, t2, t3, t4, '-')) + fi = FileInput(files=(t1, t2, t3, t4, '-'), encoding="utf-8") savestdin = sys.stdin try: sys.stdin = StringIO("Line 1 of stdin\nLine 2 of stdin\n") @@ -140,7 +141,7 @@ def test_buffer_sizes(self): if verbose: print('5. Boundary conditions') - fi = FileInput(files=(t1, t2, t3, t4)) + fi = FileInput(files=(t1, t2, t3, t4), encoding="utf-8") self.assertEqual(fi.lineno(), 0) self.assertEqual(fi.filename(), None) fi.nextfile() @@ -151,7 +152,7 @@ def test_buffer_sizes(self): print('6. Inplace') savestdout = sys.stdout try: - fi = FileInput(files=(t1, t2, t3, t4), inplace=1) + fi = FileInput(files=(t1, t2, t3, t4), inplace=1, encoding="utf-8") for line in fi: line = line[:-1].upper() print(line) @@ -159,7 +160,7 @@ def test_buffer_sizes(self): finally: sys.stdout = savestdout - fi = FileInput(files=(t1, t2, t3, t4)) + fi = FileInput(files=(t1, t2, t3, t4), encoding="utf-8") for line in fi: self.assertEqual(line[-1], '\n') m = pat.match(line[:-1]) @@ -182,7 +183,7 @@ def test_zero_byte_files(self): t2 = self.writeTmp("") t3 = self.writeTmp("The only line there is.\n") t4 = self.writeTmp("") - fi = FileInput(files=(t1, t2, t3, t4)) + fi = FileInput(files=(t1, t2, t3, t4), encoding="utf-8") line = fi.readline() self.assertEqual(line, 'The only line there is.\n') @@ -200,7 +201,7 @@ def test_zero_byte_files(self): def test_files_that_dont_end_with_newline(self): t1 = self.writeTmp("A\nB\nC") t2 = self.writeTmp("D\nE\nF") - fi = FileInput(files=(t1, t2)) + fi = FileInput(files=(t1, t2), encoding="utf-8") lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"]) self.assertEqual(fi.filelineno(), 3) @@ -213,14 +214,14 @@ def test_files_that_dont_end_with_newline(self): ## encoding = sys.getfilesystemencoding() ## if encoding is None: ## encoding = 'ascii' -## fi = FileInput(files=str(t1, encoding)) +## fi = FileInput(files=str(t1, encoding), encoding="utf-8") ## lines = list(fi) ## self.assertEqual(lines, ["A\n", "B"]) def test_fileno(self): t1 = self.writeTmp("A\nB") t2 = self.writeTmp("C\nD") - fi = FileInput(files=(t1, t2)) + fi = FileInput(files=(t1, t2), encoding="utf-8") self.assertEqual(fi.fileno(), -1) line = next(fi) self.assertNotEqual(fi.fileno(), -1) @@ -232,7 +233,7 @@ def test_fileno(self): def test_opening_mode(self): try: # invalid mode, should raise ValueError - fi = FileInput(mode="w") + fi = FileInput(mode="w", encoding="utf-8") self.fail("FileInput should reject invalid mode argument") except ValueError: pass @@ -281,7 +282,7 @@ def __init__(self): self.invoked = False def __call__(self, *args, **kargs): self.invoked = True - return open(*args) + return open(*args, encoding="utf-8") t = self.writeTmp("\n") custom_open_hook = CustomOpenHook() @@ -346,7 +347,7 @@ def old_hook(filename, mode): def test_context_manager(self): t1 = self.writeTmp("A\nB\nC") t2 = self.writeTmp("D\nE\nF") - with FileInput(files=(t1, t2)) as fi: + with FileInput(files=(t1, t2), encoding="utf-8") as fi: lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"]) self.assertEqual(fi.filelineno(), 3) @@ -356,13 +357,13 @@ def test_context_manager(self): def test_close_on_exception(self): t1 = self.writeTmp("") try: - with FileInput(files=t1) as fi: + with FileInput(files=t1, encoding="utf-8") as fi: raise OSError except OSError: self.assertEqual(fi._files, ()) def test_empty_files_list_specified_to_constructor(self): - with FileInput(files=[]) as fi: + with FileInput(files=[], encoding="utf-8") as fi: self.assertEqual(fi._files, ('-',)) @warnings_helper.ignore_warnings(category=DeprecationWarning) @@ -370,7 +371,7 @@ def test__getitem__(self): """Tests invoking FileInput.__getitem__() with the current line number""" t = self.writeTmp("line1\nline2\n") - with FileInput(files=[t]) as fi: + with FileInput(files=[t], encoding="utf-8") as fi: retval1 = fi[0] self.assertEqual(retval1, "line1\n") retval2 = fi[1] @@ -388,7 +389,7 @@ def test__getitem__invalid_key(self): """Tests invoking FileInput.__getitem__() with an index unequal to the line number""" t = self.writeTmp("line1\nline2\n") - with FileInput(files=[t]) as fi: + with FileInput(files=[t], encoding="utf-8") as fi: with self.assertRaises(RuntimeError) as cm: fi[1] self.assertEqual(cm.exception.args, ("accessing lines out of order",)) @@ -398,7 +399,7 @@ def test__getitem__eof(self): """Tests invoking FileInput.__getitem__() with the line number but at end-of-input""" t = self.writeTmp('') - with FileInput(files=[t]) as fi: + with FileInput(files=[t], encoding="utf-8") as fi: with self.assertRaises(IndexError) as cm: fi[0] self.assertEqual(cm.exception.args, ("end of input reached",)) @@ -413,7 +414,7 @@ def test_nextfile_oserror_deleting_backup(self): try: t = self.writeTmp("\n") self.addCleanup(safe_unlink, t + '.bak') - with FileInput(files=[t], inplace=True) as fi: + with FileInput(files=[t], inplace=True, encoding="utf-8") as fi: next(fi) # make sure the file is opened os.unlink = os_unlink_replacement fi.nextfile() @@ -432,7 +433,7 @@ def test_readline_os_fstat_raises_OSError(self): os_fstat_replacement = UnconditionallyRaise(OSError) try: t = self.writeTmp("\n") - with FileInput(files=[t], inplace=True) as fi: + with FileInput(files=[t], inplace=True, encoding="utf-8") as fi: os.fstat = os_fstat_replacement fi.readline() finally: @@ -450,7 +451,7 @@ def test_readline_os_chmod_raises_OSError(self): os_chmod_replacement = UnconditionallyRaise(OSError) try: t = self.writeTmp("\n") - with FileInput(files=[t], inplace=True) as fi: + with FileInput(files=[t], inplace=True, encoding="utf-8") as fi: os.chmod = os_chmod_replacement fi.readline() finally: @@ -469,7 +470,7 @@ def fileno(self): unconditionally_raise_ValueError = FilenoRaisesValueError() t = self.writeTmp("\n") - with FileInput(files=[t]) as fi: + with FileInput(files=[t], encoding="utf-8") as fi: file_backup = fi._file try: fi._file = unconditionally_raise_ValueError @@ -517,7 +518,7 @@ def test_iteration_buffering(self): def test_pathlib_file(self): t1 = Path(self.writeTmp("Pathlib file.")) - with FileInput(t1) as fi: + with FileInput(t1, encoding="utf-8") as fi: line = fi.readline() self.assertEqual(line, 'Pathlib file.') self.assertEqual(fi.lineno(), 1) @@ -526,11 +527,11 @@ def test_pathlib_file(self): def test_pathlib_file_inplace(self): t1 = Path(self.writeTmp('Pathlib file.')) - with FileInput(t1, inplace=True) as fi: + with FileInput(t1, inplace=True, encoding="utf-8") as fi: line = fi.readline() self.assertEqual(line, 'Pathlib file.') print('Modified %s' % line) - with open(t1) as f: + with open(t1, encoding="utf-8") as f: self.assertEqual(f.read(), 'Modified Pathlib file.\n') From webhook-mailer at python.org Tue Apr 27 04:37:27 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 27 Apr 2021 08:37:27 -0000 Subject: [Python-checkins] Fix thread locks in zlib module may go wrong in rare case. (#22126) Message-ID: https://github.com/python/cpython/commit/93f411838a95f6acbcc29d16ecfd10093cfd5cfd commit: 93f411838a95f6acbcc29d16ecfd10093cfd5cfd branch: master author: Ma Lin committer: ambv date: 2021-04-27T10:37:11+02:00 summary: Fix thread locks in zlib module may go wrong in rare case. (#22126) Setting `next_in` before acquiring the thread lock may mix up compress/decompress state in other threads. files: A Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst M Modules/zlibmodule.c diff --git a/Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst b/Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst new file mode 100644 index 00000000000000..9e36435a364eaf --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst @@ -0,0 +1 @@ +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index a537087d19d835..1ddaefd8a6d792 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -10,10 +10,12 @@ #include "zlib.h" -#define ENTER_ZLIB(obj) \ - Py_BEGIN_ALLOW_THREADS; \ - PyThread_acquire_lock((obj)->lock, 1); \ - Py_END_ALLOW_THREADS; +#define ENTER_ZLIB(obj) do { \ + if (!PyThread_acquire_lock((obj)->lock, 0)) { \ + Py_BEGIN_ALLOW_THREADS \ + PyThread_acquire_lock((obj)->lock, 1); \ + Py_END_ALLOW_THREADS \ + } } while (0) #define LEAVE_ZLIB(obj) PyThread_release_lock((obj)->lock); #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1221 @@ -634,14 +636,13 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, PyObject *RetVal = NULL; Py_ssize_t obuflen = DEF_BUF_SIZE; int err; - zlibstate *state = PyType_GetModuleState(cls); + ENTER_ZLIB(self); + self->zst.next_in = data->buf; Py_ssize_t ibuflen = data->len; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); @@ -761,6 +762,8 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, else hard_limit = max_length; + ENTER_ZLIB(self); + self->zst.next_in = data->buf; ibuflen = data->len; @@ -768,8 +771,6 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, if (max_length && obuflen > max_length) obuflen = max_length; - ENTER_ZLIB(self); - do { arrange_input_buffer(&self->zst, &ibuflen); From webhook-mailer at python.org Tue Apr 27 04:46:05 2021 From: webhook-mailer at python.org (pfmoore) Date: Tue, 27 Apr 2021 08:46:05 -0000 Subject: [Python-checkins] bpo-43312: Functions returning default and preferred sysconfig schemes (GH-24644) Message-ID: https://github.com/python/cpython/commit/d92513390a1a0da781bb08c284136f4d7abea36d commit: d92513390a1a0da781bb08c284136f4d7abea36d branch: master author: Tzu-ping Chung committer: pfmoore date: 2021-04-27T09:45:55+01:00 summary: bpo-43312: Functions returning default and preferred sysconfig schemes (GH-24644) files: A Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst M Doc/library/sysconfig.rst M Lib/sysconfig.py M Lib/test/test_sysconfig.py diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst index d4463f39fda24..bb8e2d88c0fc9 100644 --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -107,6 +107,43 @@ identifier. Python currently uses eight paths: :mod:`sysconfig`. +.. function:: get_default_scheme() + + Return the default scheme name for the current platform. + + .. versionchanged:: 3.10 + This function was previously named ``_get_default_scheme()`` and + considered an implementation detail. + + +.. function:: get_preferred_scheme(key) + + Return a preferred scheme name for an installation layout specified by *key*. + + *key* must be either ``"prefix"``, ``"home"``, or ``"user"``. + + The return value is a scheme name listed in :func:`get_scheme_names`. It + can be passed to :mod:`sysconfig` functions that take a *scheme* argument, + such as :func:`get_paths`. + + .. versionadded:: 3.10 + + +.. function:: _get_preferred_schemes() + + Return a dict containing preferred scheme names on the current platform. + Python implementers and redistributors may add their preferred schemes to + the ``_INSTALL_SCHEMES`` module-level global value, and modify this function + to return those scheme names, to e.g. provide different schemes for system + and language package managers to use, so packages installed by either do not + mix with those by the other. + + End users should not use this function, but :func:`get_default_scheme` and + :func:`get_preferred_scheme()` instead. + + .. versionadded:: 3.10 + + .. function:: get_path_names() Return a tuple containing all path names currently supported in diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 0e0decd42716e..e8869af0b5cc9 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -79,7 +79,7 @@ def joinuser(*args): if sys.platform == "darwin" and sys._framework: return joinuser("~", "Library", sys._framework, - "%d.%d" % sys.version_info[:2]) + f"{sys.version_info[0]}.{sys.version_info[1]}") return joinuser("~", ".local") @@ -121,8 +121,8 @@ def joinuser(*args): 'scripts', 'data') _PY_VERSION = sys.version.split()[0] -_PY_VERSION_SHORT = '%d.%d' % sys.version_info[:2] -_PY_VERSION_SHORT_NO_DOT = '%d%d' % sys.version_info[:2] +_PY_VERSION_SHORT = f'{sys.version_info[0]}.{sys.version_info[1]}' +_PY_VERSION_SHORT_NO_DOT = f'{sys.version_info[0]}{sys.version_info[1]}' _PREFIX = os.path.normpath(sys.prefix) _BASE_PREFIX = os.path.normpath(sys.base_prefix) _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) @@ -189,7 +189,7 @@ def _subst_vars(s, local_vars): try: return s.format(**os.environ) except KeyError: - raise AttributeError('{%s}' % var) from None + raise AttributeError(f'{var}') from None def _extend_dict(target_dict, other_dict): target_keys = target_dict.keys() @@ -212,13 +212,38 @@ def _expand_vars(scheme, vars): return res -def _get_default_scheme(): - if os.name == 'posix': - # the default scheme for posix is posix_prefix - return 'posix_prefix' - return os.name +def _get_preferred_schemes(): + if os.name == 'nt': + return { + 'prefix': 'nt', + 'home': 'posix_home', + 'user': 'nt_user', + } + if sys.platform == 'darwin' and sys._framework: + return { + 'prefix': 'posix_prefix', + 'home': 'posix_home', + 'user': 'osx_framework_user', + } + return { + 'prefix': 'posix_prefix', + 'home': 'posix_home', + 'user': 'posix_user', + } + + +def get_preferred_scheme(key): + scheme = _get_preferred_schemes()[key] + if scheme not in _INSTALL_SCHEMES: + raise ValueError( + f"{key!r} returned {scheme!r}, which is not a valid scheme " + f"on this platform" + ) + return scheme +def get_default_scheme(): + return get_preferred_scheme('prefix') def _parse_makefile(filename, vars=None, keep_unresolved=True): @@ -354,21 +379,20 @@ def get_makefile_filename(): if _PYTHON_BUILD: return os.path.join(_sys_home or _PROJECT_BASE, "Makefile") if hasattr(sys, 'abiflags'): - config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) + config_dir_name = f'config-{_PY_VERSION_SHORT}{sys.abiflags}' else: config_dir_name = 'config' if hasattr(sys.implementation, '_multiarch'): - config_dir_name += '-%s' % sys.implementation._multiarch + config_dir_name += f'-{sys.implementation._multiarch}' return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') def _get_sysconfigdata_name(): - return os.environ.get('_PYTHON_SYSCONFIGDATA_NAME', - '_sysconfigdata_{abi}_{platform}_{multiarch}'.format( - abi=sys.abiflags, - platform=sys.platform, - multiarch=getattr(sys.implementation, '_multiarch', ''), - )) + multiarch = getattr(sys.implementation, '_multiarch', '') + return os.environ.get( + '_PYTHON_SYSCONFIGDATA_NAME', + f'_sysconfigdata_{sys.abiflags}_{sys.platform}_{multiarch}', + ) def _generate_posix_vars(): @@ -380,9 +404,9 @@ def _generate_posix_vars(): try: _parse_makefile(makefile, vars) except OSError as e: - msg = "invalid Python installation: unable to open %s" % makefile + msg = f"invalid Python installation: unable to open {makefile}" if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror + msg = f"{msg} ({e.strerror})" raise OSError(msg) # load the installed pyconfig.h: config_h = get_config_h_filename() @@ -390,9 +414,9 @@ def _generate_posix_vars(): with open(config_h, encoding="utf-8") as f: parse_config_h(f, vars) except OSError as e: - msg = "invalid Python installation: unable to open %s" % config_h + msg = f"invalid Python installation: unable to open {config_h}" if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror + msg = f"{msg} ({e.strerror})" raise OSError(msg) # On AIX, there are wrong paths to the linker scripts in the Makefile # -- these paths are relative to the Python source, but when installed @@ -418,7 +442,7 @@ def _generate_posix_vars(): module.build_time_vars = vars sys.modules[name] = module - pybuilddir = 'build/lib.%s-%s' % (get_platform(), _PY_VERSION_SHORT) + pybuilddir = f'build/lib.{get_platform()}-{_PY_VERSION_SHORT}' if hasattr(sys, "gettotalrefcount"): pybuilddir += '-pydebug' os.makedirs(pybuilddir, exist_ok=True) @@ -516,7 +540,7 @@ def get_path_names(): return _SCHEME_KEYS -def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): +def get_paths(scheme=get_default_scheme(), vars=None, expand=True): """Return a mapping containing an install scheme. ``scheme`` is the install scheme name. If not provided, it will @@ -528,7 +552,7 @@ def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): return _INSTALL_SCHEMES[scheme] -def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): +def get_path(name, scheme=get_default_scheme(), vars=None, expand=True): """Return a path corresponding to the scheme. ``scheme`` is the install scheme name. @@ -682,16 +706,16 @@ def get_platform(): # At least on Linux/Intel, 'machine' is the processor -- # i386, etc. # XXX what about Alpha, SPARC, etc? - return "%s-%s" % (osname, machine) + return f"{osname}-{machine}" elif osname[:5] == "sunos": if release[0] >= "5": # SunOS 5 == Solaris 2 osname = "solaris" - release = "%d.%s" % (int(release[0]) - 3, release[2:]) + release = f"{int(release[0]) - 3}.{release[2:]}" # We can't use "platform.architecture()[0]" because a # bootstrap problem. We use a dict to get an error # if some suspicious happens. bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} - machine += ".%s" % bitness[sys.maxsize] + machine += f".{bitness[sys.maxsize]}" # fall through to standard osname-release-machine representation elif osname[:3] == "aix": from _aix_support import aix_platform @@ -709,7 +733,7 @@ def get_platform(): get_config_vars(), osname, release, machine) - return "%s-%s-%s" % (osname, release, machine) + return f"{osname}-{release}-{machine}" def get_python_version(): @@ -745,8 +769,8 @@ def expand_makefile_vars(s, vars): def _print_dict(title, data): for index, (key, value) in enumerate(sorted(data.items())): if index == 0: - print('%s: ' % (title)) - print('\t%s = "%s"' % (key, value)) + print(f'{title}: ') + print(f'\t{key} = "{value}"') def _main(): @@ -754,9 +778,9 @@ def _main(): if '--generate-posix-vars' in sys.argv: _generate_posix_vars() return - print('Platform: "%s"' % get_platform()) - print('Python version: "%s"' % get_python_version()) - print('Current installation scheme: "%s"' % _get_default_scheme()) + print(f'Platform: "{get_platform()}"') + print(f'Python version: "{get_python_version()}"') + print(f'Current installation scheme: "{get_default_scheme()}"') print() _print_dict('Paths', get_paths()) print() diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index e279957e26ced..b8b9add36d766 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -14,8 +14,8 @@ import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, get_path, get_path_names, _INSTALL_SCHEMES, - _get_default_scheme, _expand_vars, - get_scheme_names, get_config_var, _main) + get_default_scheme, get_scheme_names, get_config_var, + _expand_vars, _get_preferred_schemes, _main) import _osx_support @@ -94,17 +94,46 @@ def test_get_path_names(self): def test_get_paths(self): scheme = get_paths() - default_scheme = _get_default_scheme() + default_scheme = get_default_scheme() wanted = _expand_vars(default_scheme, None) wanted = sorted(wanted.items()) scheme = sorted(scheme.items()) self.assertEqual(scheme, wanted) def test_get_path(self): - # XXX make real tests here + config_vars = get_config_vars() for scheme in _INSTALL_SCHEMES: for name in _INSTALL_SCHEMES[scheme]: - res = get_path(name, scheme) + expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) + self.assertEqual( + os.path.normpath(get_path(name, scheme)), + os.path.normpath(expected), + ) + + def test_get_default_scheme(self): + self.assertIn(get_default_scheme(), _INSTALL_SCHEMES) + + def test_get_preferred_schemes(self): + expected_schemes = {'prefix', 'home', 'user'} + + # Windows. + os.name = 'nt' + schemes = _get_preferred_schemes() + self.assertIsInstance(schemes, dict) + self.assertEqual(set(schemes), expected_schemes) + + # Mac and Linux, shared library build. + os.name = 'posix' + schemes = _get_preferred_schemes() + self.assertIsInstance(schemes, dict) + self.assertEqual(set(schemes), expected_schemes) + + # Mac, framework build. + os.name = 'posix' + sys.platform = 'darwin' + sys._framework = True + self.assertIsInstance(schemes, dict) + self.assertEqual(set(schemes), expected_schemes) def test_get_config_vars(self): cvars = get_config_vars() diff --git a/Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst b/Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst new file mode 100644 index 0000000000000..b8def9ceee64c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst @@ -0,0 +1,3 @@ +New functions :func:`sysconfig.get_preferred_scheme` and +:func:`sysconfig.get_default_scheme` are added to query a platform for its +preferred "user", "home", and "prefix" (default) scheme names. From webhook-mailer at python.org Tue Apr 27 10:25:31 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 27 Apr 2021 14:25:31 -0000 Subject: [Python-checkins] bpo-37751: Document codecs.lookup() change in What's New in Python 3.9 (GH-23096) (GH-25659) Message-ID: https://github.com/python/cpython/commit/531c81038e28b6cfa0f9791467bf671c88c6f4c4 commit: 531c81038e28b6cfa0f9791467bf671c88c6f4c4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-27T16:25:19+02:00 summary: bpo-37751: Document codecs.lookup() change in What's New in Python 3.9 (GH-23096) (GH-25659) (cherry picked from commit 32980fb669a6857276da18895fcc0cb6f6fbb544) Co-authored-by: Hai Shi Co-authored-by: Hai Shi files: M Doc/whatsnew/3.9.rst diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index b39fdb5efdf51..6ef0d2a5eff36 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1114,6 +1114,12 @@ Changes in the Python API compatible classes that don't inherit from those mentioned types. (Contributed by Roger Aiudi in :issue:`34775`). +* :func:`codecs.lookup` now normalizes the encoding name the same way as + :func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also + converts the name to lower case. For example, ``"latex+latin1"`` encoding + name is now normalized to ``"latex_latin1"``. + (Contributed by Jordon Xu in :issue:`37751`.) + Changes in the C API -------------------- From webhook-mailer at python.org Tue Apr 27 10:31:16 2021 From: webhook-mailer at python.org (gvanrossum) Date: Tue, 27 Apr 2021 14:31:16 -0000 Subject: [Python-checkins] bpo-43766: Implement PEP 647 (User-Defined Type Guards) in typing.py (#25282) Message-ID: https://github.com/python/cpython/commit/05ab4b60ab3dae61ee75692b6624537d4f3fdf85 commit: 05ab4b60ab3dae61ee75692b6624537d4f3fdf85 branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-27T07:31:04-07:00 summary: bpo-43766: Implement PEP 647 (User-Defined Type Guards) in typing.py (#25282) files: A Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst M Doc/library/typing.rst M Doc/whatsnew/3.10.rst M Lib/test/test_typing.py M Lib/typing.py diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index c0c6cdde221b0..cb9ba4599d7ea 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -933,6 +933,80 @@ These can be used as types in annotations using ``[]``, each having a unique syn .. versionadded:: 3.9 + +.. data:: TypeGuard + + Special typing form used to annotate the return type of a user-defined + type guard function. ``TypeGuard`` only accepts a single type argument. + At runtime, functions marked this way should return a boolean. + + ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static + type checkers to determine a more precise type of an expression within a + program's code flow. Usually type narrowing is done by analyzing + conditional code flow and applying the narrowing to a block of code. The + conditional expression here is sometimes referred to as a "type guard":: + + def is_str(val: Union[str, float]): + # "isinstance" type guard + if isinstance(val, str): + # Type of ``val`` is narrowed to ``str`` + ... + else: + # Else, type of ``val`` is narrowed to ``float``. + ... + + Sometimes it would be convenient to use a user-defined boolean function + as a type guard. Such a function should use ``TypeGuard[...]`` as its + return type to alert static type checkers to this intention. + + Using ``-> TypeGuard`` tells the static type checker that for a given + function: + + 1. The return value is a boolean. + 2. If the return value is ``True``, the type of its argument + is the type inside ``TypeGuard``. + + For example:: + + def is_str_list(val: List[object]) -> TypeGuard[List[str]]: + '''Determines whether all objects in the list are strings''' + return all(isinstance(x, str) for x in val) + + def func1(val: List[object]): + if is_str_list(val): + # Type of ``val`` is narrowed to List[str] + print(" ".join(val)) + else: + # Type of ``val`` remains as List[object] + print("Not a list of strings!") + + If ``is_str_list`` is a class or instance method, then the type in + ``TypeGuard`` maps to the type of the second parameter after ``cls`` or + ``self``. + + In short, the form ``def foo(arg: TypeA) -> TypeGuard[TypeB]: ...``, + means that if ``foo(arg)`` returns ``True``, then ``arg`` narrows from + ``TypeA`` to ``TypeB``. + + .. note:: + + ``TypeB`` need not be a narrower form of ``TypeA`` -- it can even be a + wider form. The main reason is to allow for things like + narrowing ``List[object]`` to ``List[str]`` even though the latter + is not a subtype of the former, since ``List`` is invariant. + The responsibility of + writing type-safe type guards is left to the user. Even if + the type guard function passes type checks, it may still fail at runtime. + The type guard function may perform erroneous checks and return wrong + booleans. Consequently, the type it promises in ``TypeGuard[TypeB]`` may + not hold. + + ``TypeGuard`` also works with type variables. For more information, see + :pep:`647` (User-Defined Type Guards). + + .. versionadded:: 3.10 + + Building generic types """""""""""""""""""""" diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 91ad8ec1adb6e..eeb0c291008e5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -743,6 +743,16 @@ See :pep:`613` for more details. (Contributed by Mikhail Golubev in :issue:`41923`.) +PEP 647: User-Defined Type Guards +--------------------------------- + +:data:`TypeGuard` has been added to the :mod:`typing` module to annotate +type guard functions and improve information provided to static type checkers +during type narrowing. For more information, please see :data:`TypeGuard`\ 's +documentation, and :pep:`647`. + +(Contributed by Ken Jin and Guido van Rossum in :issue:`43766`. +PEP written by Eric Traut.) Other Language Changes ====================== diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index c28f390df0207..47dc0b9358d7d 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -26,6 +26,7 @@ from typing import Annotated, ForwardRef from typing import TypeAlias from typing import ParamSpec, Concatenate, ParamSpecArgs, ParamSpecKwargs +from typing import TypeGuard import abc import typing import weakref @@ -4377,6 +4378,45 @@ def test_valid_uses(self): self.assertEqual(C4.__parameters__, (T, P)) +class TypeGuardTests(BaseTestCase): + def test_basics(self): + TypeGuard[int] # OK + + def foo(arg) -> TypeGuard[int]: ... + self.assertEqual(gth(foo), {'return': TypeGuard[int]}) + + def test_repr(self): + self.assertEqual(repr(TypeGuard), 'typing.TypeGuard') + cv = TypeGuard[int] + self.assertEqual(repr(cv), 'typing.TypeGuard[int]') + cv = TypeGuard[Employee] + self.assertEqual(repr(cv), 'typing.TypeGuard[%s.Employee]' % __name__) + cv = TypeGuard[tuple[int]] + self.assertEqual(repr(cv), 'typing.TypeGuard[tuple[int]]') + + def test_cannot_subclass(self): + with self.assertRaises(TypeError): + class C(type(TypeGuard)): + pass + with self.assertRaises(TypeError): + class C(type(TypeGuard[int])): + pass + + def test_cannot_init(self): + with self.assertRaises(TypeError): + TypeGuard() + with self.assertRaises(TypeError): + type(TypeGuard)() + with self.assertRaises(TypeError): + type(TypeGuard[Optional[int]])() + + def test_no_isinstance(self): + with self.assertRaises(TypeError): + isinstance(1, TypeGuard[int]) + with self.assertRaises(TypeError): + issubclass(int, TypeGuard) + + class AllTests(BaseTestCase): """Tests for __all__.""" diff --git a/Lib/typing.py b/Lib/typing.py index 762a98ab17193..d409517ff58e9 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -119,6 +119,7 @@ 'Text', 'TYPE_CHECKING', 'TypeAlias', + 'TypeGuard', ] # The pseudo-submodules 're' and 'io' are part of the public @@ -567,6 +568,54 @@ def Concatenate(self, parameters): return _ConcatenateGenericAlias(self, parameters) + at _SpecialForm +def TypeGuard(self, parameters): + """Special typing form used to annotate the return type of a user-defined + type guard function. ``TypeGuard`` only accepts a single type argument. + At runtime, functions marked this way should return a boolean. + + ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static + type checkers to determine a more precise type of an expression within a + program's code flow. Usually type narrowing is done by analyzing + conditional code flow and applying the narrowing to a block of code. The + conditional expression here is sometimes referred to as a "type guard". + + Sometimes it would be convenient to use a user-defined boolean function + as a type guard. Such a function should use ``TypeGuard[...]`` as its + return type to alert static type checkers to this intention. + + Using ``-> TypeGuard`` tells the static type checker that for a given + function: + + 1. The return value is a boolean. + 2. If the return value is ``True``, the type of its argument + is the type inside ``TypeGuard``. + + For example:: + + def is_str(val: Union[str, float]): + # "isinstance" type guard + if isinstance(val, str): + # Type of ``val`` is narrowed to ``str`` + ... + else: + # Else, type of ``val`` is narrowed to ``float``. + ... + + Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower + form of ``TypeA`` (it can even be a wider form) and this may lead to + type-unsafe results. The main reason is to allow for things like + narrowing ``List[object]`` to ``List[str]`` even though the latter is not + a subtype of the former, since ``List`` is invariant. The responsibility of + writing type-safe type guards is left to the user. + + ``TypeGuard`` also works with type variables. For more information, see + PEP 647 (User-Defined Type Guards). + """ + item = _type_check(parameters, f'{self} accepts only single type.') + return _GenericAlias(self, (item,)) + + class ForwardRef(_Final, _root=True): """Internal wrapper to hold a forward reference.""" diff --git a/Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst b/Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst new file mode 100644 index 0000000000000..4f039a7cebbf6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst @@ -0,0 +1,2 @@ +Implement :pep:`647` in the :mod:`typing` module by adding +:data:`TypeGuard`. From webhook-mailer at python.org Tue Apr 27 11:55:23 2021 From: webhook-mailer at python.org (gvanrossum) Date: Tue, 27 Apr 2021 15:55:23 -0000 Subject: [Python-checkins] bpo-43766: Fix TypeGuard docs (#25660) Message-ID: https://github.com/python/cpython/commit/99fdd782007db86f20aeb302b2ceaf79ce1ae2ba commit: 99fdd782007db86f20aeb302b2ceaf79ce1ae2ba branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-27T08:55:08-07:00 summary: bpo-43766: Fix TypeGuard docs (#25660) files: M Doc/library/typing.rst M Doc/tools/susp-ignored.csv diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index cb9ba4599d7ea..8b1ce34d98ec6 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -974,10 +974,10 @@ These can be used as types in annotations using ``[]``, each having a unique syn def func1(val: List[object]): if is_str_list(val): - # Type of ``val`` is narrowed to List[str] + # Type of ``val`` is narrowed to ``List[str]``. print(" ".join(val)) else: - # Type of ``val`` remains as List[object] + # Type of ``val`` remains as ``List[object]``. print("Not a list of strings!") If ``is_str_list`` is a class or instance method, then the type in @@ -994,12 +994,7 @@ These can be used as types in annotations using ``[]``, each having a unique syn wider form. The main reason is to allow for things like narrowing ``List[object]`` to ``List[str]`` even though the latter is not a subtype of the former, since ``List`` is invariant. - The responsibility of - writing type-safe type guards is left to the user. Even if - the type guard function passes type checks, it may still fail at runtime. - The type guard function may perform erroneous checks and return wrong - booleans. Consequently, the type it promises in ``TypeGuard[TypeB]`` may - not hold. + The responsibility of writing type-safe type guards is left to the user. ``TypeGuard`` also works with type variables. For more information, see :pep:`647` (User-Defined Type Guards). diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index b9e10678d4648..5a2d85d262b2e 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -370,3 +370,7 @@ library/importlib.metadata,,:main,"EntryPoint(name='wheel', value='wheel.cli:mai library/importlib.metadata,,`,loading the metadata for packages for the indicated ``context``. library/re,,`,"`" using/configure,84,:db2,=db1:db2:... +library/typing,1004,`,# Type of ``val`` is narrowed to ``str`` +library/typing,1004,`,"# Else, type of ``val`` is narrowed to ``float``." +library/typing,1004,`,# Type of ``val`` is narrowed to ``List[str]``. +library/typing,1004,`,# Type of ``val`` remains as ``List[object]``. From webhook-mailer at python.org Tue Apr 27 11:56:17 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 27 Apr 2021 15:56:17 -0000 Subject: [Python-checkins] bpo-43864: Silence deprecation warning in test_importlib.test_module_found and test_importlib.test_module_not_found (GH-25656) Message-ID: https://github.com/python/cpython/commit/e3bf179642a3445fb079454f382b93d0177f5012 commit: e3bf179642a3445fb079454f382b93d0177f5012 branch: master author: Shreyan Avigyan committer: zooba date: 2021-04-27T16:56:08+01:00 summary: bpo-43864: Silence deprecation warning in test_importlib.test_module_found and test_importlib.test_module_not_found (GH-25656) files: M Lib/test/test_importlib/test_windows.py diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index b24383618c81f..6f09c5a7a5a46 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -92,14 +92,18 @@ def test_find_module_missing(self): def test_module_found(self): with setup_module(self.machinery, self.test_module): - loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module) spec = self.machinery.WindowsRegistryFinder.find_spec(self.test_module) self.assertIsNot(loader, None) self.assertIsNot(spec, None) def test_module_not_found(self): with setup_module(self.machinery, self.test_module, path="."): - loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module) + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + loader = self.machinery.WindowsRegistryFinder.find_module(self.test_module) spec = self.machinery.WindowsRegistryFinder.find_spec(self.test_module) self.assertIsNone(loader) self.assertIsNone(spec) From webhook-mailer at python.org Tue Apr 27 12:24:13 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 27 Apr 2021 16:24:13 -0000 Subject: [Python-checkins] bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) Message-ID: https://github.com/python/cpython/commit/bf0c7c0147b73738cac63eb27ef48430284ff121 commit: bf0c7c0147b73738cac63eb27ef48430284ff121 branch: master author: Erlend Egeberg Aasland committer: zooba date: 2021-04-27T17:23:53+01:00 summary: bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) files: A Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst M PCbuild/get_externals.bat M PCbuild/python.props M PCbuild/readme.txt diff --git a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst new file mode 100644 index 0000000000000..93da1b6dec8e3 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst @@ -0,0 +1 @@ +Upgrade Windows installer to use SQLite 3.35.5. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index d064a12a082ad..63e3bb47672cc 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -54,7 +54,7 @@ set libraries= set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1k -set libraries=%libraries% sqlite-3.34.0.0 +set libraries=%libraries% sqlite-3.35.5.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.11.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.11.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6 diff --git a/PCbuild/python.props b/PCbuild/python.props index e056482c13f28..419d5ebe84c2d 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -56,7 +56,7 @@ $(EXTERNALS_DIR) $([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`)) $(ExternalsDir)\ - $(ExternalsDir)sqlite-3.34.0.0\ + $(ExternalsDir)sqlite-3.35.5.0\ $(ExternalsDir)bzip2-1.0.6\ $(ExternalsDir)xz-5.2.2\ $(ExternalsDir)libffi\ diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index 7518b8389f55c..6c25522ea48c0 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -188,7 +188,7 @@ _ssl again when building. _sqlite3 - Wraps SQLite 3.34.0, which is itself built by sqlite3.vcxproj + Wraps SQLite 3.35.5, which is itself built by sqlite3.vcxproj Homepage: http://www.sqlite.org/ _tkinter From webhook-mailer at python.org Tue Apr 27 13:19:25 2021 From: webhook-mailer at python.org (ned-deily) Date: Tue, 27 Apr 2021 17:19:25 -0000 Subject: [Python-checkins] bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) Message-ID: https://github.com/python/cpython/commit/ce827816442613f982c356aa2f434c3c8a0c8917 commit: ce827816442613f982c356aa2f434c3c8a0c8917 branch: master author: Erlend Egeberg Aasland committer: ned-deily date: 2021-04-27T13:19:14-04:00 summary: bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) files: A Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 25a6a24f56494..d7f4103766e78 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -354,9 +354,9 @@ def library_recipes(): ), ), dict( - name="SQLite 3.34.0", - url="https://sqlite.org/2020/sqlite-autoconf-3340000.tar.gz", - checksum='7f33c9db7b713957fcb9271fe9049fef', + name="SQLite 3.35.5", + url="https://sqlite.org/2021/sqlite-autoconf-3350500.tar.gz", + checksum='d1d1aba394c8e0443077dc9f1a681bb8', extra_cflags=('-Os ' '-DSQLITE_ENABLE_FTS5 ' '-DSQLITE_ENABLE_FTS4 ' diff --git a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst new file mode 100644 index 0000000000000..39f1537068816 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst @@ -0,0 +1 @@ +Update macOS installer to use SQLite 3.35.4. From webhook-mailer at python.org Tue Apr 27 13:23:47 2021 From: webhook-mailer at python.org (ned-deily) Date: Tue, 27 Apr 2021 17:23:47 -0000 Subject: [Python-checkins] Fix generated file name for installer builds on macOS 11+. (GH-25661) Message-ID: https://github.com/python/cpython/commit/8a37463989410a79f6d1131d08dc0165bcaa0f9d commit: 8a37463989410a79f6d1131d08dc0165bcaa0f9d branch: master author: Ned Deily committer: ned-deily date: 2021-04-27T13:23:39-04:00 summary: Fix generated file name for installer builds on macOS 11+. (GH-25661) files: M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index d7f4103766e78..b07def17476ac 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -1615,13 +1615,35 @@ def buildDMG(): # installer file name. With the introduction of weaklinked installer # variants, we may have two variants with the same file name, i.e. # both ending in '10.9'. To avoid this, we now use the major/minor - # version numbers of the macOS version we are building on, i.e. - # '10.9' as before for 10.9+ variant, '11.0' for universal2 11.0-. - # it's not ideal but should cause the least disruption to packaging - # workflows. - build_system_version = '.'.join(platform.mac_ver()[0].split('.')[0:2]) + # version numbers of the macOS version we are building on. + # Also, as of macOS 11, operating system version numbering has + # changed from three components to two, i.e. + # 10.14.1, 10.14.2, ... + # 10.15.1, 10.15.2, ... + # 11.1, 11.2, ... + # 12.1, 12.2, ... + # (A further twist is that, when running on macOS 11, binaries built + # on older systems may be shown an operating system version of 10.16 + # instead of 11. We should not run into that situation here.) + # Also we should use "macos" instead of "macosx" going forward. + # + # To maintain compability for legacy variants, the file name for + # builds on macOS 10.15 and earlier remains: + # python-3.x.y-macosx10.z.{dmg->pkg} + # e.g. python-3.9.4-macosx10.9.{dmg->pkg} + # and for builds on macOS 11+: + # python-3.x.y-macosz.{dmg->pkg} + # e.g. python-3.9.4-macos11.{dmg->pkg} + + build_tuple = getBuildTuple() + if build_tuple[0] < 11: + os_name = 'macosx' + build_system_version = '%s.%s' % build_tuple + else: + os_name = 'macos' + build_system_version = str(build_tuple[0]) imagepath = os.path.join(outdir, - 'python-%s-macosx%s'%(getFullVersion(),build_system_version)) + 'python-%s-%s%s'%(getFullVersion(),os_name,build_system_version)) if INCLUDE_TIMESTAMP: imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3]) imagepath = imagepath + '.dmg' From webhook-mailer at python.org Tue Apr 27 13:37:07 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 27 Apr 2021 17:37:07 -0000 Subject: [Python-checkins] bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) Message-ID: https://github.com/python/cpython/commit/e013d8df2c9b6ea5bc9ae92a10950157e6cb46d6 commit: e013d8df2c9b6ea5bc9ae92a10950157e6cb46d6 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-27T10:36:58-07:00 summary: bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) (cherry picked from commit ce827816442613f982c356aa2f434c3c8a0c8917) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index a2d9a5e7454d50..8e1fdd8778aaed 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -307,9 +307,9 @@ def library_recipes(): ), ), dict( - name="SQLite 3.34.0", - url="https://sqlite.org/2020/sqlite-autoconf-3340000.tar.gz", - checksum='7f33c9db7b713957fcb9271fe9049fef', + name="SQLite 3.35.5", + url="https://sqlite.org/2021/sqlite-autoconf-3350500.tar.gz", + checksum='d1d1aba394c8e0443077dc9f1a681bb8', extra_cflags=('-Os ' '-DSQLITE_ENABLE_FTS5 ' '-DSQLITE_ENABLE_FTS4 ' diff --git a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst new file mode 100644 index 00000000000000..39f15370688161 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst @@ -0,0 +1 @@ +Update macOS installer to use SQLite 3.35.4. From webhook-mailer at python.org Tue Apr 27 13:39:07 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 27 Apr 2021 17:39:07 -0000 Subject: [Python-checkins] bpo-8978: improve tarfile.open error message when lzma / bz2 are missing (GH-24850) Message-ID: https://github.com/python/cpython/commit/9aea31deddf7458be3546f72185740f3cd06687f commit: 9aea31deddf7458be3546f72185740f3cd06687f branch: master author: Anthony Sottile committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-27T10:39:01-07:00 summary: bpo-8978: improve tarfile.open error message when lzma / bz2 are missing (GH-24850) Automerge-Triggered-By: GH:pablogsal files: A Lib/test/testtar.tar.xz A Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst M Lib/tarfile.py M Lib/test/test_tarfile.py diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 395c0f1d30040..18d415adf5441 100755 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1604,17 +1604,20 @@ def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): # Find out which *open() is appropriate for opening the file. def not_compressed(comptype): return cls.OPEN_METH[comptype] == 'taropen' + error_msgs = [] for comptype in sorted(cls.OPEN_METH, key=not_compressed): func = getattr(cls, cls.OPEN_METH[comptype]) if fileobj is not None: saved_pos = fileobj.tell() try: return func(name, "r", fileobj, **kwargs) - except (ReadError, CompressionError): + except (ReadError, CompressionError) as e: + error_msgs.append(f'- method {comptype}: {e!r}') if fileobj is not None: fileobj.seek(saved_pos) continue - raise ReadError("file could not be opened successfully") + error_msgs_summary = '\n'.join(error_msgs) + raise ReadError(f"file could not be opened successfully:\n{error_msgs_summary}") elif ":" in mode: filemode, comptype = mode.split(":", 1) diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 77ad8305c3107..817e6f1799712 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -2283,6 +2283,18 @@ def test__all__(self): 'SubsequentHeaderError', 'ExFileObject', 'main'} support.check__all__(self, tarfile, not_exported=not_exported) + def test_useful_error_message_when_modules_missing(self): + fname = os.path.join(os.path.dirname(__file__), 'testtar.tar.xz') + with self.assertRaises(tarfile.ReadError) as excinfo: + error = tarfile.CompressionError('lzma module is not available'), + with unittest.mock.patch.object(tarfile.TarFile, 'xzopen', side_effect=error): + tarfile.open(fname) + + self.assertIn( + "\n- method xz: CompressionError('lzma module is not available')\n", + str(excinfo.exception), + ) + class CommandLineTest(unittest.TestCase): diff --git a/Lib/test/testtar.tar.xz b/Lib/test/testtar.tar.xz new file mode 100644 index 0000000000000..512fa149e6cfd Binary files /dev/null and b/Lib/test/testtar.tar.xz differ diff --git a/Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst b/Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst new file mode 100644 index 0000000000000..2da8874dc7f34 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst @@ -0,0 +1,2 @@ +Improve error message for :func:`tarfile.open` when :mod:`lzma` / :mod:`bz2` +are unavailable. Patch by Anthony Sottile. From webhook-mailer at python.org Tue Apr 27 13:42:20 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 27 Apr 2021 17:42:20 -0000 Subject: [Python-checkins] [3.9] bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) (GH-25662) Message-ID: https://github.com/python/cpython/commit/bf0736db455517412b0702b023dc71ed9de05d70 commit: bf0736db455517412b0702b023dc71ed9de05d70 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-27T10:42:15-07:00 summary: [3.9] bpo-43492: Update macOS installer to use SQLite 3.35.5 (GH-25640) (GH-25662) (cherry picked from commit ce827816442613f982c356aa2f434c3c8a0c8917) Co-authored-by: Erlend Egeberg Aasland Automerge-Triggered-By: GH:ned-deily files: A Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 25a6a24f564947..d7f4103766e782 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -354,9 +354,9 @@ def library_recipes(): ), ), dict( - name="SQLite 3.34.0", - url="https://sqlite.org/2020/sqlite-autoconf-3340000.tar.gz", - checksum='7f33c9db7b713957fcb9271fe9049fef', + name="SQLite 3.35.5", + url="https://sqlite.org/2021/sqlite-autoconf-3350500.tar.gz", + checksum='d1d1aba394c8e0443077dc9f1a681bb8', extra_cflags=('-Os ' '-DSQLITE_ENABLE_FTS5 ' '-DSQLITE_ENABLE_FTS4 ' diff --git a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst new file mode 100644 index 00000000000000..39f15370688161 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst @@ -0,0 +1 @@ +Update macOS installer to use SQLite 3.35.4. From webhook-mailer at python.org Tue Apr 27 14:20:50 2021 From: webhook-mailer at python.org (ned-deily) Date: Tue, 27 Apr 2021 18:20:50 -0000 Subject: [Python-checkins] Fix generated file name for installer builds on macOS 11+. (GH-25661) (GH-25664) Message-ID: https://github.com/python/cpython/commit/c9767e564b702e1f867516d14c72e339e78d5e7c commit: c9767e564b702e1f867516d14c72e339e78d5e7c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-04-27T14:20:41-04:00 summary: Fix generated file name for installer builds on macOS 11+. (GH-25661) (GH-25664) (cherry picked from commit 8a37463989410a79f6d1131d08dc0165bcaa0f9d) Co-authored-by: Ned Deily files: M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index d7f4103766e78..b07def17476ac 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -1615,13 +1615,35 @@ def buildDMG(): # installer file name. With the introduction of weaklinked installer # variants, we may have two variants with the same file name, i.e. # both ending in '10.9'. To avoid this, we now use the major/minor - # version numbers of the macOS version we are building on, i.e. - # '10.9' as before for 10.9+ variant, '11.0' for universal2 11.0-. - # it's not ideal but should cause the least disruption to packaging - # workflows. - build_system_version = '.'.join(platform.mac_ver()[0].split('.')[0:2]) + # version numbers of the macOS version we are building on. + # Also, as of macOS 11, operating system version numbering has + # changed from three components to two, i.e. + # 10.14.1, 10.14.2, ... + # 10.15.1, 10.15.2, ... + # 11.1, 11.2, ... + # 12.1, 12.2, ... + # (A further twist is that, when running on macOS 11, binaries built + # on older systems may be shown an operating system version of 10.16 + # instead of 11. We should not run into that situation here.) + # Also we should use "macos" instead of "macosx" going forward. + # + # To maintain compability for legacy variants, the file name for + # builds on macOS 10.15 and earlier remains: + # python-3.x.y-macosx10.z.{dmg->pkg} + # e.g. python-3.9.4-macosx10.9.{dmg->pkg} + # and for builds on macOS 11+: + # python-3.x.y-macosz.{dmg->pkg} + # e.g. python-3.9.4-macos11.{dmg->pkg} + + build_tuple = getBuildTuple() + if build_tuple[0] < 11: + os_name = 'macosx' + build_system_version = '%s.%s' % build_tuple + else: + os_name = 'macos' + build_system_version = str(build_tuple[0]) imagepath = os.path.join(outdir, - 'python-%s-macosx%s'%(getFullVersion(),build_system_version)) + 'python-%s-%s%s'%(getFullVersion(),os_name,build_system_version)) if INCLUDE_TIMESTAMP: imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3]) imagepath = imagepath + '.dmg' From webhook-mailer at python.org Tue Apr 27 15:57:13 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 27 Apr 2021 19:57:13 -0000 Subject: [Python-checkins] [3.9] bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) Message-ID: https://github.com/python/cpython/commit/5cadcec5ecf6f95cc771e509ad98c3e3533b32bb commit: 5cadcec5ecf6f95cc771e509ad98c3e3533b32bb branch: 3.9 author: Erlend Egeberg Aasland committer: zooba date: 2021-04-27T20:57:05+01:00 summary: [3.9] bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) (cherry picked from commit bf0c7c0147b73738cac63eb27ef48430284ff121) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst M PCbuild/get_externals.bat M PCbuild/python.props M PCbuild/readme.txt diff --git a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst new file mode 100644 index 00000000000000..93da1b6dec8e3b --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst @@ -0,0 +1 @@ +Upgrade Windows installer to use SQLite 3.35.5. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index bf3208d63bb927..b5a44e3e959b42 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -54,7 +54,7 @@ set libraries= set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1k -set libraries=%libraries% sqlite-3.34.0.0 +set libraries=%libraries% sqlite-3.35.5.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6 diff --git a/PCbuild/python.props b/PCbuild/python.props index e056482c13f28f..419d5ebe84c2d1 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -56,7 +56,7 @@ $(EXTERNALS_DIR) $([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`)) $(ExternalsDir)\ - $(ExternalsDir)sqlite-3.34.0.0\ + $(ExternalsDir)sqlite-3.35.5.0\ $(ExternalsDir)bzip2-1.0.6\ $(ExternalsDir)xz-5.2.2\ $(ExternalsDir)libffi\ diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index 3acd99aa107934..689fb8d8adafbc 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -185,7 +185,7 @@ _ssl again when building. _sqlite3 - Wraps SQLite 3.34.0, which is itself built by sqlite3.vcxproj + Wraps SQLite 3.35.5, which is itself built by sqlite3.vcxproj Homepage: http://www.sqlite.org/ _tkinter From webhook-mailer at python.org Tue Apr 27 15:57:29 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 27 Apr 2021 19:57:29 -0000 Subject: [Python-checkins] [3.8] bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) Message-ID: https://github.com/python/cpython/commit/7f7cfc41185b651be9cb4d2759c40c3abf738485 commit: 7f7cfc41185b651be9cb4d2759c40c3abf738485 branch: 3.8 author: Erlend Egeberg Aasland committer: zooba date: 2021-04-27T20:57:24+01:00 summary: [3.8] bpo-43492: Upgrade Windows installer to use SQLite 3.35.5 (GH-25641) (cherry picked from commit bf0c7c0147b73738cac63eb27ef48430284ff121) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst M PCbuild/get_externals.bat M PCbuild/python.props M PCbuild/readme.txt diff --git a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst new file mode 100644 index 00000000000000..93da1b6dec8e3b --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst @@ -0,0 +1 @@ +Upgrade Windows installer to use SQLite 3.35.5. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index abeed8324837af..d818f9d7006016 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -54,7 +54,7 @@ set libraries= set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0-rc0-r1 if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1k -set libraries=%libraries% sqlite-3.34.0.0 +set libraries=%libraries% sqlite-3.35.5.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6 diff --git a/PCbuild/python.props b/PCbuild/python.props index e056482c13f28f..419d5ebe84c2d1 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -56,7 +56,7 @@ $(EXTERNALS_DIR) $([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`)) $(ExternalsDir)\ - $(ExternalsDir)sqlite-3.34.0.0\ + $(ExternalsDir)sqlite-3.35.5.0\ $(ExternalsDir)bzip2-1.0.6\ $(ExternalsDir)xz-5.2.2\ $(ExternalsDir)libffi\ diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index d2dbc50690db79..e6b9a78ea8286c 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -184,7 +184,7 @@ _ssl again when building. _sqlite3 - Wraps SQLite 3.34.0, which is itself built by sqlite3.vcxproj + Wraps SQLite 3.35.5, which is itself built by sqlite3.vcxproj Homepage: http://www.sqlite.org/ _tkinter From webhook-mailer at python.org Tue Apr 27 16:05:16 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 27 Apr 2021 20:05:16 -0000 Subject: [Python-checkins] bpo-43957: [Enum] Deprecate ``TypeError`` from containment checks. (GH-25670) Message-ID: https://github.com/python/cpython/commit/6bd9288b805c765ec2433f66aa4d82e05767325f commit: 6bd9288b805c765ec2433f66aa4d82e05767325f branch: master author: Ethan Furman committer: ethanfurman date: 2021-04-27T13:05:08-07:00 summary: bpo-43957: [Enum] Deprecate ``TypeError`` from containment checks. (GH-25670) In 3.12 ``True`` or ``False`` will be returned for all containment checks, with ``True`` being returned if the value is either a member of that enum or one of its members' value. files: A Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst M Doc/library/enum.rst M Lib/enum.py M Lib/test/test_enum.py M Lib/test/test_signal.py diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 91c214eb668d1..b5f9c2f08b187 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -140,6 +140,12 @@ Data Types >>> some_var in Color True + .. note:: + + In Python 3.12 it will be possible to check for member values and not + just members; until then, a ``TypeError`` will be raised if a + non-Enum-member is used in a containment check. + .. method:: EnumType.__dir__(cls) Returns ``['__class__', '__doc__', '__members__', '__module__']`` and the diff --git a/Lib/enum.py b/Lib/enum.py index bcf411c6b6550..bccf024b520a9 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -280,7 +280,8 @@ def __set_name__(self, enum_class, member_name): # linear. enum_class._value2member_map_.setdefault(value, enum_member) except TypeError: - pass + # keep track of the value in a list so containment checks are quick + enum_class._unhashable_values_.append(value) class _EnumDict(dict): @@ -440,6 +441,7 @@ def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **k classdict['_member_names_'] = [] classdict['_member_map_'] = {} classdict['_value2member_map_'] = {} + classdict['_unhashable_values_'] = [] classdict['_member_type_'] = member_type # # Flag structures (will be removed if final class is not a Flag @@ -622,6 +624,13 @@ def __call__(cls, value, names=None, *, module=None, qualname=None, type=None, s def __contains__(cls, member): if not isinstance(member, Enum): + import warnings + warnings.warn( + "in 3.12 __contains__ will no longer raise TypeError, but will return True or\n" + "False depending on whether the value is a member or the value of a member", + DeprecationWarning, + stacklevel=2, + ) raise TypeError( "unsupported operand type(s) for 'in': '%s' and '%s'" % ( type(member).__qualname__, cls.__class__.__qualname__)) @@ -1005,14 +1014,15 @@ def __format__(self, format_spec): val = str(self) # mix-in branch else: - import warnings - warnings.warn( - "in 3.12 format() will use the enum member, not the enum member's value;\n" - "use a format specifier, such as :d for an IntEnum member, to maintain" - "the current display", - DeprecationWarning, - stacklevel=2, - ) + if not format_spec or format_spec in ('{}','{:}'): + import warnings + warnings.warn( + "in 3.12 format() will use the enum member, not the enum member's value;\n" + "use a format specifier, such as :d for an IntEnum member, to maintain" + "the current display", + DeprecationWarning, + stacklevel=2, + ) cls = self._member_type_ val = self._value_ return cls.__format__(val, format_spec) @@ -1434,6 +1444,7 @@ def convert_class(cls): body['_member_names_'] = member_names = [] body['_member_map_'] = member_map = {} body['_value2member_map_'] = value2member_map = {} + body['_unhashable_values_'] = [] body['_member_type_'] = member_type = etype._member_type_ if issubclass(etype, Flag): body['_boundary_'] = boundary or etype._boundary_ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 983c54b871199..e918b03cc6c52 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -16,6 +16,8 @@ from test.support import threading_helper from datetime import timedelta +python_version = sys.version_info[:2] + def load_tests(loader, tests, ignore): tests.addTests(doctest.DocTestSuite(enum)) if os.path.exists('Doc/library/enum.rst'): @@ -352,17 +354,38 @@ class IntLogic(int, Enum): self.assertTrue(IntLogic.true) self.assertFalse(IntLogic.false) - def test_contains(self): + @unittest.skipIf( + python_version >= (3, 12), + '__contains__ now returns True/False for all inputs', + ) + def test_contains_er(self): Season = self.Season self.assertIn(Season.AUTUMN, Season) with self.assertRaises(TypeError): - 3 in Season + with self.assertWarns(DeprecationWarning): + 3 in Season with self.assertRaises(TypeError): - 'AUTUMN' in Season - + with self.assertWarns(DeprecationWarning): + 'AUTUMN' in Season val = Season(3) self.assertIn(val, Season) + # + class OtherEnum(Enum): + one = 1; two = 2 + self.assertNotIn(OtherEnum.two, Season) + @unittest.skipIf( + python_version < (3, 12), + '__contains__ only works with enum memmbers before 3.12', + ) + def test_contains_tf(self): + Season = self.Season + self.assertIn(Season.AUTUMN, Season) + self.assertTrue(3 in Season) + self.assertFalse('AUTUMN' in Season) + val = Season(3) + self.assertIn(val, Season) + # class OtherEnum(Enum): one = 1; two = 2 self.assertNotIn(OtherEnum.two, Season) @@ -528,8 +551,16 @@ def __format__(self, spec): self.assertEqual(str(TestFloat.one), 'one') self.assertEqual('{}'.format(TestFloat.one), 'TestFloat success!') - @unittest.skipUnless( - sys.version_info[:2] < (3, 12), + @unittest.skipIf( + python_version < (3, 12), + 'mixin-format is still using member.value', + ) + def test_mixin_format_warning(self): + with self.assertWarns(DeprecationWarning): + self.assertEqual(f'{self.Grades.B}', 'Grades.B') + + @unittest.skipIf( + python_version >= (3, 12), 'mixin-format now uses member instead of member.value', ) def test_mixin_format_warning(self): @@ -537,7 +568,11 @@ def test_mixin_format_warning(self): self.assertEqual(f'{self.Grades.B}', '4') def assertFormatIsValue(self, spec, member): - self.assertEqual(spec.format(member), spec.format(member.value)) + if python_version < (3, 12) and (not spec or spec in ('{}','{:}')): + with self.assertWarns(DeprecationWarning): + self.assertEqual(spec.format(member), spec.format(member.value)) + else: + self.assertEqual(spec.format(member), spec.format(member.value)) def test_format_enum_date(self): Holiday = self.Holiday @@ -2202,7 +2237,7 @@ def __repr__(self): description = 'Bn$', 3 @unittest.skipUnless( - sys.version_info[:2] == (3, 9), + python_version == (3, 9), 'private variables are now normal attributes', ) def test_warning_for_private_variables(self): @@ -2225,7 +2260,7 @@ class Private(Enum): self.assertEqual(Private._Private__major_, 'Hoolihan') @unittest.skipUnless( - sys.version_info[:2] < (3, 12), + python_version < (3, 12), 'member-member access now raises an exception', ) def test_warning_for_member_from_member_access(self): @@ -2237,7 +2272,7 @@ class Di(Enum): self.assertIs(Di.NO, nope) @unittest.skipUnless( - sys.version_info[:2] >= (3, 12), + python_version >= (3, 12), 'member-member access currently issues a warning', ) def test_exception_for_member_from_member_access(self): @@ -2617,19 +2652,41 @@ def test_pickle(self): test_pickle_dump_load(self.assertIs, FlagStooges.CURLY|FlagStooges.MOE) test_pickle_dump_load(self.assertIs, FlagStooges) - def test_contains(self): + @unittest.skipIf( + python_version >= (3, 12), + '__contains__ now returns True/False for all inputs', + ) + def test_contains_er(self): Open = self.Open Color = self.Color self.assertFalse(Color.BLACK in Open) self.assertFalse(Open.RO in Color) with self.assertRaises(TypeError): - 'BLACK' in Color + with self.assertWarns(DeprecationWarning): + 'BLACK' in Color with self.assertRaises(TypeError): - 'RO' in Open + with self.assertWarns(DeprecationWarning): + 'RO' in Open with self.assertRaises(TypeError): - 1 in Color + with self.assertWarns(DeprecationWarning): + 1 in Color with self.assertRaises(TypeError): - 1 in Open + with self.assertWarns(DeprecationWarning): + 1 in Open + + @unittest.skipIf( + python_version < (3, 12), + '__contains__ only works with enum memmbers before 3.12', + ) + def test_contains_tf(self): + Open = self.Open + Color = self.Color + self.assertFalse(Color.BLACK in Open) + self.assertFalse(Open.RO in Color) + self.assertFalse('BLACK' in Color) + self.assertFalse('RO' in Open) + self.assertTrue(1 in Color) + self.assertTrue(1 in Open) def test_member_contains(self): Perm = self.Perm @@ -2954,10 +3011,15 @@ def test_repr(self): self.assertEqual(repr(~(Open.WO | Open.CE)), 'Open.RW') self.assertEqual(repr(Open(~4)), '-5') + @unittest.skipUnless( + python_version < (3, 12), + 'mixin-format now uses member instead of member.value', + ) def test_format(self): - Perm = self.Perm - self.assertEqual(format(Perm.R, ''), '4') - self.assertEqual(format(Perm.R | Perm.X, ''), '5') + with self.assertWarns(DeprecationWarning): + Perm = self.Perm + self.assertEqual(format(Perm.R, ''), '4') + self.assertEqual(format(Perm.R | Perm.X, ''), '5') def test_or(self): Perm = self.Perm @@ -3189,7 +3251,11 @@ def test_programatic_function_from_empty_tuple(self): self.assertEqual(len(lst), len(Thing)) self.assertEqual(len(Thing), 0, Thing) - def test_contains(self): + @unittest.skipIf( + python_version >= (3, 12), + '__contains__ now returns True/False for all inputs', + ) + def test_contains_er(self): Open = self.Open Color = self.Color self.assertTrue(Color.GREEN in Color) @@ -3197,13 +3263,33 @@ def test_contains(self): self.assertFalse(Color.GREEN in Open) self.assertFalse(Open.RW in Color) with self.assertRaises(TypeError): - 'GREEN' in Color + with self.assertWarns(DeprecationWarning): + 'GREEN' in Color with self.assertRaises(TypeError): - 'RW' in Open + with self.assertWarns(DeprecationWarning): + 'RW' in Open with self.assertRaises(TypeError): - 2 in Color + with self.assertWarns(DeprecationWarning): + 2 in Color with self.assertRaises(TypeError): - 2 in Open + with self.assertWarns(DeprecationWarning): + 2 in Open + + @unittest.skipIf( + python_version < (3, 12), + '__contains__ only works with enum memmbers before 3.12', + ) + def test_contains_tf(self): + Open = self.Open + Color = self.Color + self.assertTrue(Color.GREEN in Color) + self.assertTrue(Open.RW in Open) + self.assertTrue(Color.GREEN in Open) + self.assertTrue(Open.RW in Color) + self.assertFalse('GREEN' in Color) + self.assertFalse('RW' in Open) + self.assertTrue(2 in Color) + self.assertTrue(2 in Open) def test_member_contains(self): Perm = self.Perm @@ -3685,7 +3771,7 @@ def test_convert(self): if name[0:2] not in ('CO', '__')], [], msg='Names other than CONVERT_TEST_* found.') - @unittest.skipUnless(sys.version_info[:2] == (3, 8), + @unittest.skipUnless(python_version == (3, 8), '_convert was deprecated in 3.8') def test_convert_warn(self): with self.assertWarns(DeprecationWarning): @@ -3694,7 +3780,7 @@ def test_convert_warn(self): ('test.test_enum', '__main__')[__name__=='__main__'], filter=lambda x: x.startswith('CONVERT_TEST_')) - @unittest.skipUnless(sys.version_info >= (3, 9), + @unittest.skipUnless(python_version >= (3, 9), '_convert was removed in 3.9') def test_convert_raise(self): with self.assertRaises(AttributeError): @@ -3703,6 +3789,10 @@ def test_convert_raise(self): ('test.test_enum', '__main__')[__name__=='__main__'], filter=lambda x: x.startswith('CONVERT_TEST_')) + @unittest.skipUnless( + python_version < (3, 12), + 'mixin-format now uses member instead of member.value', + ) def test_convert_repr_and_str(self): module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( @@ -3711,7 +3801,8 @@ def test_convert_repr_and_str(self): filter=lambda x: x.startswith('CONVERT_STRING_TEST_')) self.assertEqual(repr(test_type.CONVERT_STRING_TEST_NAME_A), '%s.CONVERT_STRING_TEST_NAME_A' % module) self.assertEqual(str(test_type.CONVERT_STRING_TEST_NAME_A), 'CONVERT_STRING_TEST_NAME_A') - self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') + with self.assertWarns(DeprecationWarning): + self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') # global names for StrEnum._convert_ test CONVERT_STR_TEST_2 = 'goodbye' diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 06b644e764aa7..daecf196fa146 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -1323,7 +1323,7 @@ def cycle_handlers(): # race condition, check it. self.assertIsInstance(cm.unraisable.exc_value, OSError) self.assertIn( - f"Signal {signum} ignored due to race condition", + f"Signal {signum:d} ignored due to race condition", str(cm.unraisable.exc_value)) ignored = True diff --git a/Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst b/Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst new file mode 100644 index 0000000000000..c6d1ddef64ca3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst @@ -0,0 +1,4 @@ +[Enum] Deprecate ``TypeError`` when non-member is used in a containment +check; In 3.12 ``True`` or ``False`` will be returned instead, and +containment will return ``True`` if the value is either a member of that +enum or one of its members' value. From webhook-mailer at python.org Tue Apr 27 19:50:09 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 27 Apr 2021 23:50:09 -0000 Subject: [Python-checkins] bpo-43963: Fix import _signal in subinterpreters (GH-25674) Message-ID: https://github.com/python/cpython/commit/a09766deab5aff549f40f27080895e148af922ed commit: a09766deab5aff549f40f27080895e148af922ed branch: master author: Victor Stinner committer: vstinner date: 2021-04-28T01:50:04+02:00 summary: bpo-43963: Fix import _signal in subinterpreters (GH-25674) Importing the _signal module in a subinterpreter has no longer side effects. signal_module_exec() no longer modifies Handlers and no longer attempts to set SIGINT signal handler in subinterpreters. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst M Modules/signalmodule.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst new file mode 100644 index 0000000000000..1f8904338f26c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst @@ -0,0 +1,2 @@ +Importing the :mod:`_signal` module in a subinterpreter has no longer side +effects. diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 98a938f197673..861871332c2f9 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1544,33 +1544,8 @@ signal_add_constants(PyObject *module) static int -signal_module_exec(PyObject *m) +signal_get_set_handlers(PyObject *mod_dict) { - assert(!PyErr_Occurred()); - - if (signal_add_constants(m) < 0) { - return -1; - } - - /* Add some symbolic constants to the module */ - PyObject *d = PyModule_GetDict(m); - if (PyDict_SetItemString(d, "SIG_DFL", DefaultHandler) < 0) { - return -1; - } - if (PyDict_SetItemString(d, "SIG_IGN", IgnoreHandler) < 0) { - return -1; - } -#if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) - if (PyDict_SetItemString(d, "ItimerError", ItimerError) < 0) { - return -1; - } -#endif -#if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT) - if (PyModule_AddType(m, &SiginfoType) < 0) { - return -1; - } -#endif - // Get signal handlers for (int signum = 1; signum < NSIG; signum++) { void (*c_handler)(int) = PyOS_getsig(signum); @@ -1594,7 +1569,8 @@ signal_module_exec(PyObject *m) // Instal Python SIGINT handler which raises KeyboardInterrupt PyObject* sigint_func = get_handler(SIGINT); if (sigint_func == DefaultHandler) { - PyObject *int_handler = PyMapping_GetItemString(d, "default_int_handler"); + PyObject *int_handler = PyMapping_GetItemString(mod_dict, + "default_int_handler"); if (!int_handler) { return -1; } @@ -1603,6 +1579,44 @@ signal_module_exec(PyObject *m) Py_DECREF(sigint_func); PyOS_setsig(SIGINT, signal_handler); } + return 0; +} + + +static int +signal_module_exec(PyObject *m) +{ + assert(!PyErr_Occurred()); + + if (signal_add_constants(m) < 0) { + return -1; + } + + /* Add some symbolic constants to the module */ + PyObject *d = PyModule_GetDict(m); + if (PyDict_SetItemString(d, "SIG_DFL", DefaultHandler) < 0) { + return -1; + } + if (PyDict_SetItemString(d, "SIG_IGN", IgnoreHandler) < 0) { + return -1; + } +#if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) + if (PyDict_SetItemString(d, "ItimerError", ItimerError) < 0) { + return -1; + } +#endif +#if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT) + if (PyModule_AddType(m, &SiginfoType) < 0) { + return -1; + } +#endif + + PyThreadState *tstate = _PyThreadState_GET(); + if (_Py_IsMainInterpreter(tstate->interp)) { + if (signal_get_set_handlers(d) < 0) { + return -1; + } + } assert(!PyErr_Occurred()); return 0; From webhook-mailer at python.org Tue Apr 27 20:37:09 2021 From: webhook-mailer at python.org (methane) Date: Wed, 28 Apr 2021 00:37:09 -0000 Subject: [Python-checkins] bpo-37751: Update `codecs.register()` doc. (GH-25643) Message-ID: https://github.com/python/cpython/commit/5c84bb506aaca01f5f750116d8f7a41d41f8124d commit: 5c84bb506aaca01f5f750116d8f7a41d41f8124d branch: master author: Inada Naoki committer: methane date: 2021-04-28T09:37:02+09:00 summary: bpo-37751: Update `codecs.register()` doc. (GH-25643) files: M Doc/library/codecs.rst diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index b15d293e38f63..0dcd88f9fd5b7 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -159,9 +159,13 @@ function: .. function:: register(search_function) Register a codec search function. Search functions are expected to take one - argument, being the encoding name in all lower case letters, and return a - :class:`CodecInfo` object. In case a search function cannot find - a given encoding, it should return ``None``. + argument, being the encoding name in all lower case letters with hyphens + and spaces converted to underscores, and return a :class:`CodecInfo` object. + In case a search function cannot find a given encoding, it should return + ``None``. + + .. versionchanged:: 3.9 + Hyphens and spaces are converted to underscore. .. function:: unregister(search_function) From webhook-mailer at python.org Tue Apr 27 21:03:05 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 01:03:05 -0000 Subject: [Python-checkins] bpo-43963: Add _signal module state (GH-25676) Message-ID: https://github.com/python/cpython/commit/a5e64444e6df7d1d498576bab26deaddc288a7bd commit: a5e64444e6df7d1d498576bab26deaddc288a7bd branch: master author: Victor Stinner committer: vstinner date: 2021-04-28T03:02:55+02:00 summary: bpo-43963: Add _signal module state (GH-25676) * Add signal_state_t structure and signal_global_state variable. * Add a module state to the _signal module. * Move and rename variables: * DefaultHandler becomes state->default_handler * IgnoreHandler becomes state->ignore_handler * sigint_event becomes state->sigint_event * ItimerError becomes modstate->itimer_error * Rename SetHandler() to set_handler() to be consistent with get_handler(). files: M Modules/signalmodule.c diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 861871332c2f9..a4eeec9807c91 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -4,38 +4,39 @@ /* XXX Signals should be recorded per thread, now we have thread state. */ #include "Python.h" -#include "pycore_atomic.h" -#include "pycore_call.h" -#include "pycore_ceval.h" -#include "pycore_pyerrors.h" -#include "pycore_pylifecycle.h" -#include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_atomic.h" // _Py_atomic_int +#include "pycore_call.h" // _PyObject_Call() +#include "pycore_ceval.h" // _PyEval_SignalReceived() +#include "pycore_moduleobject.h" // _PyModule_GetState() +#include "pycore_pyerrors.h" // _PyErr_SetString() +#include "pycore_pylifecycle.h" // NSIG +#include "pycore_pystate.h" // _PyThreadState_GET() #ifndef MS_WINDOWS -#include "posixmodule.h" +# include "posixmodule.h" #endif #ifdef MS_WINDOWS -#include "socketmodule.h" /* needed for SOCKET_T */ +# include "socketmodule.h" /* needed for SOCKET_T */ #endif #ifdef MS_WINDOWS -#include -#ifdef HAVE_PROCESS_H -#include -#endif +# include +# ifdef HAVE_PROCESS_H +# include +# endif #endif #ifdef HAVE_SIGNAL_H -#include +# include #endif #ifdef HAVE_SYS_SYSCALL_H -#include +# include #endif #ifdef HAVE_SYS_STAT_H -#include +# include #endif #ifdef HAVE_SYS_TIME_H -#include +# include #endif #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) @@ -47,7 +48,7 @@ #endif #ifndef SIG_ERR -#define SIG_ERR ((PyOS_sighandler_t)(-1)) +# define SIG_ERR ((PyOS_sighandler_t)(-1)) #endif #include "clinic/signalmodule.c.h" @@ -124,27 +125,52 @@ static volatile struct { /* Speed up sigcheck() when none tripped */ static _Py_atomic_int is_tripped; -static PyObject *DefaultHandler; -static PyObject *IgnoreHandler; - +typedef struct { + PyObject *default_handler; + PyObject *ignore_handler; #ifdef MS_WINDOWS -static HANDLE sigint_event = NULL; + HANDLE sigint_event; #endif +} signal_state_t; + +// State shared by all Python interpreters +static signal_state_t signal_global_state = {0}; #if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) -static PyObject *ItimerError; +# define PYHAVE_ITIMER_ERROR #endif +typedef struct { + PyObject *default_handler; // borrowed ref (signal_global_state) + PyObject *ignore_handler; // borrowed ref (signal_global_state) +#ifdef PYHAVE_ITIMER_ERROR + PyObject *itimer_error; +#endif +} _signal_module_state; + + Py_LOCAL_INLINE(PyObject *) -get_handler(int i) { +get_handler(int i) +{ return (PyObject *)_Py_atomic_load(&Handlers[i].func); } Py_LOCAL_INLINE(void) -SetHandler(int i, PyObject* func) { +set_handler(int i, PyObject* func) +{ _Py_atomic_store(&Handlers[i].func, (uintptr_t)func); } + +static inline _signal_module_state* +get_signal_state(PyObject *module) +{ + void *state = _PyModule_GetState(module); + assert(state != NULL); + return (_signal_module_state *)state; +} + + #ifdef HAVE_GETITIMER /* auxiliary functions for setitimer */ static int @@ -359,8 +385,10 @@ signal_handler(int sig_num) errno = save_errno; #ifdef MS_WINDOWS - if (sig_num == SIGINT) - SetEvent(sigint_event); + if (sig_num == SIGINT) { + signal_state_t *state = &signal_global_state; + SetEvent(state->sigint_event); + } #endif } @@ -459,6 +487,7 @@ static PyObject * signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) /*[clinic end generated code: output=b44cfda43780f3a1 input=deee84af5fa0432c]*/ { + _signal_module_state *modstate = get_signal_state(module); PyObject *old_handler; void (*func)(int); #ifdef MS_WINDOWS @@ -493,10 +522,10 @@ signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) "signal number out of range"); return NULL; } - if (handler == IgnoreHandler) { + if (handler == modstate->ignore_handler) { func = SIG_IGN; } - else if (handler == DefaultHandler) { + else if (handler == modstate->default_handler) { func = SIG_DFL; } else if (!PyCallable_Check(handler)) { @@ -519,7 +548,7 @@ signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) } old_handler = get_handler(signalnum); - SetHandler(signalnum, Py_NewRef(handler)); + set_handler(signalnum, Py_NewRef(handler)); if (old_handler != NULL) { return old_handler; @@ -831,7 +860,6 @@ PySignal_SetWakeupFd(int fd) #ifdef HAVE_SETITIMER - /*[clinic input] signal.setitimer @@ -853,8 +881,9 @@ signal_setitimer_impl(PyObject *module, int which, PyObject *seconds, PyObject *interval) /*[clinic end generated code: output=65f9dcbddc35527b input=de43daf194e6f66f]*/ { - struct itimerval new; + _signal_module_state *modstate = get_signal_state(module); + struct itimerval new; if (timeval_from_double(seconds, &new.it_value) < 0) { return NULL; } @@ -865,18 +894,16 @@ signal_setitimer_impl(PyObject *module, int which, PyObject *seconds, /* Let OS check "which" value */ struct itimerval old; if (setitimer(which, &new, &old) != 0) { - PyErr_SetFromErrno(ItimerError); + PyErr_SetFromErrno(modstate->itimer_error); return NULL; } return itimer_retval(&old); } - -#endif +#endif // HAVE_SETITIMER #ifdef HAVE_GETITIMER - /*[clinic input] signal.getitimer @@ -890,17 +917,18 @@ static PyObject * signal_getitimer_impl(PyObject *module, int which) /*[clinic end generated code: output=9e053175d517db40 input=f7d21d38f3490627]*/ { - struct itimerval old; + _signal_module_state *modstate = get_signal_state(module); + struct itimerval old; if (getitimer(which, &old) != 0) { - PyErr_SetFromErrno(ItimerError); + PyErr_SetFromErrno(modstate->itimer_error); return NULL; } return itimer_retval(&old); } +#endif // HAVE_GETITIMER -#endif #if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGPENDING) static PyObject* @@ -1544,17 +1572,17 @@ signal_add_constants(PyObject *module) static int -signal_get_set_handlers(PyObject *mod_dict) +signal_get_set_handlers(signal_state_t *state, PyObject *mod_dict) { // Get signal handlers for (int signum = 1; signum < NSIG; signum++) { void (*c_handler)(int) = PyOS_getsig(signum); PyObject *func; if (c_handler == SIG_DFL) { - func = DefaultHandler; + func = state->default_handler; } else if (c_handler == SIG_IGN) { - func = IgnoreHandler; + func = state->ignore_handler; } else { func = Py_None; // None of our business @@ -1562,20 +1590,20 @@ signal_get_set_handlers(PyObject *mod_dict) // If signal_module_exec() is called more than one, we must // clear the strong reference to the previous function. PyObject* old_func = get_handler(signum); - SetHandler(signum, Py_NewRef(func)); + set_handler(signum, Py_NewRef(func)); Py_XDECREF(old_func); } // Instal Python SIGINT handler which raises KeyboardInterrupt PyObject* sigint_func = get_handler(SIGINT); - if (sigint_func == DefaultHandler) { + if (sigint_func == state->default_handler) { PyObject *int_handler = PyMapping_GetItemString(mod_dict, "default_int_handler"); if (!int_handler) { return -1; } - SetHandler(SIGINT, int_handler); + set_handler(SIGINT, int_handler); Py_DECREF(sigint_func); PyOS_setsig(SIGINT, signal_handler); } @@ -1588,20 +1616,34 @@ signal_module_exec(PyObject *m) { assert(!PyErr_Occurred()); + signal_state_t *state = &signal_global_state; + _signal_module_state *modstate = get_signal_state(m); + + modstate->default_handler = state->default_handler; // borrowed ref + modstate->ignore_handler = state->ignore_handler; // borrowed ref + +#ifdef PYHAVE_ITIMER_ERROR + modstate->itimer_error = PyErr_NewException("signal.itimer_error", + PyExc_OSError, NULL); + if (modstate->itimer_error == NULL) { + return -1; + } +#endif + if (signal_add_constants(m) < 0) { return -1; } /* Add some symbolic constants to the module */ PyObject *d = PyModule_GetDict(m); - if (PyDict_SetItemString(d, "SIG_DFL", DefaultHandler) < 0) { + if (PyDict_SetItemString(d, "SIG_DFL", state->default_handler) < 0) { return -1; } - if (PyDict_SetItemString(d, "SIG_IGN", IgnoreHandler) < 0) { + if (PyDict_SetItemString(d, "SIG_IGN", state->ignore_handler) < 0) { return -1; } -#if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) - if (PyDict_SetItemString(d, "ItimerError", ItimerError) < 0) { +#ifdef PYHAVE_ITIMER_ERROR + if (PyDict_SetItemString(d, "ItimerError", modstate->itimer_error) < 0) { return -1; } #endif @@ -1613,7 +1655,7 @@ signal_module_exec(PyObject *m) PyThreadState *tstate = _PyThreadState_GET(); if (_Py_IsMainInterpreter(tstate->interp)) { - if (signal_get_set_handlers(d) < 0) { + if (signal_get_set_handlers(state, d) < 0) { return -1; } } @@ -1623,6 +1665,31 @@ signal_module_exec(PyObject *m) } +#ifdef PYHAVE_ITIMER_ERROR +static int +_signal_module_traverse(PyObject *module, visitproc visit, void *arg) +{ + _signal_module_state *modstate = get_signal_state(module); + Py_VISIT(modstate->itimer_error); + return 0; +} + +static int +_signal_module_clear(PyObject *module) +{ + _signal_module_state *modstate = get_signal_state(module); + Py_CLEAR(modstate->itimer_error); + return 0; +} + +static void +_signal_module_free(void *module) +{ + _signal_module_clear((PyObject *)module); +} +#endif // PYHAVE_ITIMER_ERROR + + static PyModuleDef_Slot signal_slots[] = { {Py_mod_exec, signal_module_exec}, {0, NULL} @@ -1632,9 +1699,14 @@ static struct PyModuleDef signal_module = { PyModuleDef_HEAD_INIT, "_signal", .m_doc = module_doc, - .m_size = 0, + .m_size = sizeof(_signal_module_state), .m_methods = signal_methods, .m_slots = signal_slots, +#ifdef PYHAVE_ITIMER_ERROR + .m_traverse = _signal_module_traverse, + .m_clear = _signal_module_clear, + .m_free = _signal_module_free, +#endif }; @@ -1648,15 +1720,17 @@ PyInit__signal(void) void _PySignal_Fini(void) { + signal_state_t *state = &signal_global_state; + // Restore default signals and clear handlers for (int signum = 1; signum < NSIG; signum++) { PyObject *func = get_handler(signum); _Py_atomic_store_relaxed(&Handlers[signum].tripped, 0); - SetHandler(signum, NULL); + set_handler(signum, NULL); if (func != NULL && func != Py_None - && func != DefaultHandler - && func != IgnoreHandler) + && func != state->default_handler + && func != state->ignore_handler) { PyOS_setsig(signum, SIG_DFL); } @@ -1664,17 +1738,14 @@ _PySignal_Fini(void) } #ifdef MS_WINDOWS - if (sigint_event != NULL) { - CloseHandle(sigint_event); - sigint_event = NULL; + if (state->sigint_event != NULL) { + CloseHandle(state->sigint_event); + state->sigint_event = NULL; } #endif - Py_CLEAR(DefaultHandler); - Py_CLEAR(IgnoreHandler); -#if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) - Py_CLEAR(ItimerError); -#endif + Py_CLEAR(state->default_handler); + Py_CLEAR(state->ignore_handler); } @@ -1720,6 +1791,7 @@ _PyErr_CheckSignalsTstate(PyThreadState *tstate) frame = Py_None; } + signal_state_t *state = &signal_global_state; for (int i = 1; i < NSIG; i++) { if (!_Py_atomic_load_relaxed(&Handlers[i].tripped)) { continue; @@ -1733,8 +1805,8 @@ _PyErr_CheckSignalsTstate(PyThreadState *tstate) * (see bpo-43406). */ PyObject *func = get_handler(i); - if (func == NULL || func == Py_None || func == IgnoreHandler || - func == DefaultHandler) { + if (func == NULL || func == Py_None || func == state->ignore_handler || + func == state->default_handler) { /* No Python signal handler due to aforementioned race condition. * We can't call raise() as it would break the assumption * that PyErr_SetInterrupt() only *simulates* an incoming @@ -1791,8 +1863,10 @@ PyErr_SetInterruptEx(int signum) if (signum < 1 || signum >= NSIG) { return -1; } - PyObject* func = get_handler(signum); - if (func != IgnoreHandler && func != DefaultHandler) { + + signal_state_t *state = &signal_global_state; + PyObject *func = get_handler(signum); + if (func != state->ignore_handler && func != state->default_handler) { trip_signal(signum); } return 0; @@ -1854,28 +1928,22 @@ _Py_RestoreSignals(void) int _PySignal_Init(int install_signal_handlers) { - DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL); - if (!DefaultHandler) { - return -1; - } + signal_state_t *state = &signal_global_state; - IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN); - if (!IgnoreHandler) { + state->default_handler = PyLong_FromVoidPtr((void *)SIG_DFL); + if (state->default_handler == NULL) { return -1; } -#if defined(HAVE_GETITIMER) || defined(HAVE_SETITIMER) - ItimerError = PyErr_NewException("signal.ItimerError", - PyExc_OSError, NULL); - if (!ItimerError) { + state->ignore_handler = PyLong_FromVoidPtr((void *)SIG_IGN); + if (state->ignore_handler == NULL) { return -1; } -#endif #ifdef MS_WINDOWS /* Create manual-reset event, initially unset */ - sigint_event = CreateEvent(NULL, TRUE, FALSE, FALSE); - if (sigint_event == NULL) { + state->sigint_event = CreateEvent(NULL, TRUE, FALSE, FALSE); + if (state->sigint_event == NULL) { PyErr_SetFromWindowsErr(0); return -1; } @@ -1963,13 +2031,14 @@ _PyOS_IsMainThread(void) } #ifdef MS_WINDOWS +/* Returns a manual-reset event which gets tripped whenever + SIGINT is received. + + Python.h does not include windows.h so we do cannot use HANDLE + as the return type of this function. We use void* instead. */ void *_PyOS_SigintEvent(void) { - /* Returns a manual-reset event which gets tripped whenever - SIGINT is received. - - Python.h does not include windows.h so we do cannot use HANDLE - as the return type of this function. We use void* instead. */ - return sigint_event; + signal_state_t *state = &signal_global_state; + return state->sigint_event; } #endif From webhook-mailer at python.org Tue Apr 27 22:26:18 2021 From: webhook-mailer at python.org (methane) Date: Wed, 28 Apr 2021 02:26:18 -0000 Subject: [Python-checkins] bpo-37751: Update `codecs.register()` doc. (GH-25643) Message-ID: https://github.com/python/cpython/commit/cf9d65c5af7905d9e9945a297dbbf15d3bcace15 commit: cf9d65c5af7905d9e9945a297dbbf15d3bcace15 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: methane date: 2021-04-28T11:26:11+09:00 summary: bpo-37751: Update `codecs.register()` doc. (GH-25643) (cherry picked from commit 5c84bb506aaca01f5f750116d8f7a41d41f8124d) Co-authored-by: Inada Naoki files: M Doc/library/codecs.rst diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 32fbc831ca2c8..3338545e9267d 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -159,9 +159,13 @@ function: .. function:: register(search_function) Register a codec search function. Search functions are expected to take one - argument, being the encoding name in all lower case letters, and return a - :class:`CodecInfo` object. In case a search function cannot find - a given encoding, it should return ``None``. + argument, being the encoding name in all lower case letters with hyphens + and spaces converted to underscores, and return a :class:`CodecInfo` object. + In case a search function cannot find a given encoding, it should return + ``None``. + + .. versionchanged:: 3.9 + Hyphens and spaces are converted to underscore. .. note:: From webhook-mailer at python.org Wed Apr 28 02:59:02 2021 From: webhook-mailer at python.org (gpshead) Date: Wed, 28 Apr 2021 06:59:02 -0000 Subject: [Python-checkins] bpo-41486: Faster bz2/lzma/zlib via new output buffering (GH-21740) Message-ID: https://github.com/python/cpython/commit/f9bedb630e8a0b7d94e1c7e609b20dfaa2b22231 commit: f9bedb630e8a0b7d94e1c7e609b20dfaa2b22231 branch: master author: Ma Lin committer: gpshead date: 2021-04-27T23:58:54-07:00 summary: bpo-41486: Faster bz2/lzma/zlib via new output buffering (GH-21740) Faster bz2/lzma/zlib via new output buffering. Also adds .readall() function to _compression.DecompressReader class to take best advantage of this in the consume-all-output at once scenario. Often a 5-20% speedup in common scenarios due to less data copying. Contributed by Ma Lin. files: A Include/internal/pycore_blocks_output_buffer.h A Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst M Doc/whatsnew/3.10.rst M Lib/_compression.py M Modules/_bz2module.c M Modules/_lzmamodule.c M Modules/zlibmodule.c diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index eeb0c291008e5..2d8bb285fe981 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1243,6 +1243,12 @@ Optimizations for more details. (Contributed by Victor Stinner and Pablo Galindo in :issue:`38980`.) +* Use a new output buffer management code for :mod:`bz2` / :mod:`lzma` / + :mod:`zlib` modules, and add ``.readall()`` function to + ``_compression.DecompressReader`` class. bz2 decompression 1.09x ~ 1.17x + faster, lzma decompression 1.20x ~ 1.32x faster, ``GzipFile.read(-1)`` 1.11x + ~ 1.18x faster. (Contributed by Ma Lin, reviewed by Gregory P. Smith, in :issue:`41486`) + * Function parameters and their annotations are no longer computed at runtime, but rather at compilation time. They are stored as a tuple of strings at the bytecode level. It is now around 2 times faster to create a function with diff --git a/Include/internal/pycore_blocks_output_buffer.h b/Include/internal/pycore_blocks_output_buffer.h new file mode 100644 index 0000000000000..22546e9a32a80 --- /dev/null +++ b/Include/internal/pycore_blocks_output_buffer.h @@ -0,0 +1,317 @@ +/* + _BlocksOutputBuffer is used to maintain an output buffer + that has unpredictable size. Suitable for compression/decompression + API (bz2/lzma/zlib) that has stream->next_out and stream->avail_out: + + stream->next_out: point to the next output position. + stream->avail_out: the number of available bytes left in the buffer. + + It maintains a list of bytes object, so there is no overhead of resizing + the buffer. + + Usage: + + 1, Initialize the struct instance like this: + _BlocksOutputBuffer buffer = {.list = NULL}; + Set .list to NULL for _BlocksOutputBuffer_OnError() + + 2, Initialize the buffer use one of these functions: + _BlocksOutputBuffer_InitAndGrow() + _BlocksOutputBuffer_InitWithSize() + + 3, If (avail_out == 0), grow the buffer: + _BlocksOutputBuffer_Grow() + + 4, Get the current outputted data size: + _BlocksOutputBuffer_GetDataSize() + + 5, Finish the buffer, and return a bytes object: + _BlocksOutputBuffer_Finish() + + 6, Clean up the buffer when an error occurred: + _BlocksOutputBuffer_OnError() +*/ + +#ifndef Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H +#define Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "Python.h" + +typedef struct { + // List of bytes objects + PyObject *list; + // Number of whole allocated size + Py_ssize_t allocated; + // Max length of the buffer, negative number means unlimited length. + Py_ssize_t max_length; +} _BlocksOutputBuffer; + +static const char unable_allocate_msg[] = "Unable to allocate output buffer."; + +/* In 32-bit build, the max block size should <= INT32_MAX. */ +#define OUTPUT_BUFFER_MAX_BLOCK_SIZE (256*1024*1024) + +/* Block size sequence */ +#define KB (1024) +#define MB (1024*1024) +const Py_ssize_t BUFFER_BLOCK_SIZE[] = + { 32*KB, 64*KB, 256*KB, 1*MB, 4*MB, 8*MB, 16*MB, 16*MB, + 32*MB, 32*MB, 32*MB, 32*MB, 64*MB, 64*MB, 128*MB, 128*MB, + OUTPUT_BUFFER_MAX_BLOCK_SIZE }; +#undef KB +#undef MB + +/* According to the block sizes defined by BUFFER_BLOCK_SIZE, the whole + allocated size growth step is: + 1 32 KB +32 KB + 2 96 KB +64 KB + 3 352 KB +256 KB + 4 1.34 MB +1 MB + 5 5.34 MB +4 MB + 6 13.34 MB +8 MB + 7 29.34 MB +16 MB + 8 45.34 MB +16 MB + 9 77.34 MB +32 MB + 10 109.34 MB +32 MB + 11 141.34 MB +32 MB + 12 173.34 MB +32 MB + 13 237.34 MB +64 MB + 14 301.34 MB +64 MB + 15 429.34 MB +128 MB + 16 557.34 MB +128 MB + 17 813.34 MB +256 MB + 18 1069.34 MB +256 MB + 19 1325.34 MB +256 MB + 20 1581.34 MB +256 MB + 21 1837.34 MB +256 MB + 22 2093.34 MB +256 MB + ... +*/ + +/* Initialize the buffer, and grow the buffer. + + max_length: Max length of the buffer, -1 for unlimited length. + + On success, return allocated size (>=0) + On failure, return -1 +*/ +static inline Py_ssize_t +_BlocksOutputBuffer_InitAndGrow(_BlocksOutputBuffer *buffer, + const Py_ssize_t max_length, + void **next_out) +{ + PyObject *b; + Py_ssize_t block_size; + + // ensure .list was set to NULL + assert(buffer->list == NULL); + + // get block size + if (0 <= max_length && max_length < BUFFER_BLOCK_SIZE[0]) { + block_size = max_length; + } else { + block_size = BUFFER_BLOCK_SIZE[0]; + } + + // the first block + b = PyBytes_FromStringAndSize(NULL, block_size); + if (b == NULL) { + return -1; + } + + // create the list + buffer->list = PyList_New(1); + if (buffer->list == NULL) { + Py_DECREF(b); + return -1; + } + PyList_SET_ITEM(buffer->list, 0, b); + + // set variables + buffer->allocated = block_size; + buffer->max_length = max_length; + + *next_out = PyBytes_AS_STRING(b); + return block_size; +} + +/* Initialize the buffer, with an initial size. + + Check block size limit in the outer wrapper function. For example, some libs + accept UINT32_MAX as the maximum block size, then init_size should <= it. + + On success, return allocated size (>=0) + On failure, return -1 +*/ +static inline Py_ssize_t +_BlocksOutputBuffer_InitWithSize(_BlocksOutputBuffer *buffer, + const Py_ssize_t init_size, + void **next_out) +{ + PyObject *b; + + // ensure .list was set to NULL + assert(buffer->list == NULL); + + // the first block + b = PyBytes_FromStringAndSize(NULL, init_size); + if (b == NULL) { + PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); + return -1; + } + + // create the list + buffer->list = PyList_New(1); + if (buffer->list == NULL) { + Py_DECREF(b); + return -1; + } + PyList_SET_ITEM(buffer->list, 0, b); + + // set variables + buffer->allocated = init_size; + buffer->max_length = -1; + + *next_out = PyBytes_AS_STRING(b); + return init_size; +} + +/* Grow the buffer. The avail_out must be 0, please check it before calling. + + On success, return allocated size (>=0) + On failure, return -1 +*/ +static inline Py_ssize_t +_BlocksOutputBuffer_Grow(_BlocksOutputBuffer *buffer, + void **next_out, + const Py_ssize_t avail_out) +{ + PyObject *b; + const Py_ssize_t list_len = Py_SIZE(buffer->list); + Py_ssize_t block_size; + + // ensure no gaps in the data + if (avail_out != 0) { + PyErr_SetString(PyExc_SystemError, + "avail_out is non-zero in _BlocksOutputBuffer_Grow()."); + return -1; + } + + // get block size + if (list_len < (Py_ssize_t) Py_ARRAY_LENGTH(BUFFER_BLOCK_SIZE)) { + block_size = BUFFER_BLOCK_SIZE[list_len]; + } else { + block_size = BUFFER_BLOCK_SIZE[Py_ARRAY_LENGTH(BUFFER_BLOCK_SIZE) - 1]; + } + + // check max_length + if (buffer->max_length >= 0) { + // if (rest == 0), should not grow the buffer. + Py_ssize_t rest = buffer->max_length - buffer->allocated; + assert(rest > 0); + + // block_size of the last block + if (block_size > rest) { + block_size = rest; + } + } + + // check buffer->allocated overflow + if (block_size > PY_SSIZE_T_MAX - buffer->allocated) { + PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); + return -1; + } + + // create the block + b = PyBytes_FromStringAndSize(NULL, block_size); + if (b == NULL) { + PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); + return -1; + } + if (PyList_Append(buffer->list, b) < 0) { + Py_DECREF(b); + return -1; + } + Py_DECREF(b); + + // set variables + buffer->allocated += block_size; + + *next_out = PyBytes_AS_STRING(b); + return block_size; +} + +/* Return the current outputted data size. */ +static inline Py_ssize_t +_BlocksOutputBuffer_GetDataSize(_BlocksOutputBuffer *buffer, + const Py_ssize_t avail_out) +{ + return buffer->allocated - avail_out; +} + +/* Finish the buffer. + + Return a bytes object on success + Return NULL on failure +*/ +static inline PyObject * +_BlocksOutputBuffer_Finish(_BlocksOutputBuffer *buffer, + const Py_ssize_t avail_out) +{ + PyObject *result, *block; + const Py_ssize_t list_len = Py_SIZE(buffer->list); + + // fast path for single block + if ((list_len == 1 && avail_out == 0) || + (list_len == 2 && Py_SIZE(PyList_GET_ITEM(buffer->list, 1)) == avail_out)) + { + block = PyList_GET_ITEM(buffer->list, 0); + Py_INCREF(block); + + Py_CLEAR(buffer->list); + return block; + } + + // final bytes object + result = PyBytes_FromStringAndSize(NULL, buffer->allocated - avail_out); + if (result == NULL) { + PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); + return NULL; + } + + // memory copy + if (list_len > 0) { + char *posi = PyBytes_AS_STRING(result); + + // blocks except the last one + Py_ssize_t i = 0; + for (; i < list_len-1; i++) { + block = PyList_GET_ITEM(buffer->list, i); + memcpy(posi, PyBytes_AS_STRING(block), Py_SIZE(block)); + posi += Py_SIZE(block); + } + // the last block + block = PyList_GET_ITEM(buffer->list, i); + memcpy(posi, PyBytes_AS_STRING(block), Py_SIZE(block) - avail_out); + } else { + assert(Py_SIZE(result) == 0); + } + + Py_CLEAR(buffer->list); + return result; +} + +/* Clean up the buffer when an error occurred. */ +static inline void +_BlocksOutputBuffer_OnError(_BlocksOutputBuffer *buffer) +{ + Py_CLEAR(buffer->list); +} + +#ifdef __cplusplus +} +#endif +#endif /* Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H */ \ No newline at end of file diff --git a/Lib/_compression.py b/Lib/_compression.py index b00f31b400c3f..e8b70aa0a3e68 100644 --- a/Lib/_compression.py +++ b/Lib/_compression.py @@ -1,7 +1,7 @@ """Internal classes used by the gzip, lzma and bz2 modules""" import io - +import sys BUFFER_SIZE = io.DEFAULT_BUFFER_SIZE # Compressed data read chunk size @@ -110,6 +110,16 @@ def read(self, size=-1): self._pos += len(data) return data + def readall(self): + chunks = [] + # sys.maxsize means the max length of output buffer is unlimited, + # so that the whole input buffer can be decompressed within one + # .decompress() call. + while data := self.read(sys.maxsize): + chunks.append(data) + + return b"".join(chunks) + # Rewind the file to the beginning of the data stream. def _rewind(self): self._fp.seek(0) diff --git a/Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst b/Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst new file mode 100644 index 0000000000000..75de9f672ea5d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst @@ -0,0 +1,4 @@ +Use a new output buffer management code for :mod:`bz2` / :mod:`lzma` / +:mod:`zlib` modules, and add ``.readall()`` function to +``_compression.DecompressReader`` class. These bring some performance +improvements. Patch by Ma Lin. diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index bfcdac692461f..9893a63726291 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -8,6 +8,59 @@ #include #include +// Blocks output buffer wrappers +#include "pycore_blocks_output_buffer.h" + +#if OUTPUT_BUFFER_MAX_BLOCK_SIZE > UINT32_MAX + #error "The maximum block size accepted by libbzip2 is UINT32_MAX." +#endif + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + char **next_out, uint32_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_InitAndGrow( + buffer, max_length, (void**) next_out); + *avail_out = (uint32_t) allocated; + return allocated; +} + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_Grow(_BlocksOutputBuffer *buffer, + char **next_out, uint32_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_Grow( + buffer, (void**) next_out, (Py_ssize_t) *avail_out); + *avail_out = (uint32_t) allocated; + return allocated; +} + +static inline Py_ssize_t +Buffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) +{ + return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); +} + +static inline PyObject * +Buffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) +{ + return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); +} + +static inline void +Buffer_OnError(_BlocksOutputBuffer *buffer) +{ + _BlocksOutputBuffer_OnError(buffer); +} + #ifndef BZ_CONFIG_ERROR #define BZ2_bzCompress bzCompress @@ -115,52 +168,22 @@ catch_bz2_error(int bzerror) } } -#if BUFSIZ < 8192 -#define INITIAL_BUFFER_SIZE 8192 -#else -#define INITIAL_BUFFER_SIZE BUFSIZ -#endif - -static int -grow_buffer(PyObject **buf, Py_ssize_t max_length) -{ - /* Expand the buffer by an amount proportional to the current size, - giving us amortized linear-time behavior. Use a less-than-double - growth factor to avoid excessive allocation. */ - size_t size = PyBytes_GET_SIZE(*buf); - size_t new_size = size + (size >> 3) + 6; - - if (max_length > 0 && new_size > (size_t) max_length) - new_size = (size_t) max_length; - - if (new_size > size) { - return _PyBytes_Resize(buf, new_size); - } else { /* overflow */ - PyErr_SetString(PyExc_OverflowError, - "Unable to allocate buffer - output too large"); - return -1; - } -} - /* BZ2Compressor class. */ static PyObject * compress(BZ2Compressor *c, char *data, size_t len, int action) { - size_t data_size = 0; PyObject *result; + _BlocksOutputBuffer buffer = {.list = NULL}; - result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); - if (result == NULL) - return NULL; - + if (Buffer_InitAndGrow(&buffer, -1, &c->bzs.next_out, &c->bzs.avail_out) < 0) { + goto error; + } c->bzs.next_in = data; c->bzs.avail_in = 0; - c->bzs.next_out = PyBytes_AS_STRING(result); - c->bzs.avail_out = INITIAL_BUFFER_SIZE; + for (;;) { - char *this_out; int bzerror; /* On a 64-bit system, len might not fit in avail_in (an unsigned int). @@ -175,21 +198,15 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) break; if (c->bzs.avail_out == 0) { - size_t buffer_left = PyBytes_GET_SIZE(result) - data_size; - if (buffer_left == 0) { - if (grow_buffer(&result, -1) < 0) - goto error; - c->bzs.next_out = PyBytes_AS_STRING(result) + data_size; - buffer_left = PyBytes_GET_SIZE(result) - data_size; + if (Buffer_Grow(&buffer, &c->bzs.next_out, &c->bzs.avail_out) < 0) { + goto error; } - c->bzs.avail_out = (unsigned int)Py_MIN(buffer_left, UINT_MAX); } Py_BEGIN_ALLOW_THREADS - this_out = c->bzs.next_out; bzerror = BZ2_bzCompress(&c->bzs, action); - data_size += c->bzs.next_out - this_out; Py_END_ALLOW_THREADS + if (catch_bz2_error(bzerror)) goto error; @@ -197,13 +214,14 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) if (action == BZ_FINISH && bzerror == BZ_STREAM_END) break; } - if (data_size != (size_t)PyBytes_GET_SIZE(result)) - if (_PyBytes_Resize(&result, data_size) < 0) - goto error; - return result; + + result = Buffer_Finish(&buffer, c->bzs.avail_out); + if (result != NULL) { + return result; + } error: - Py_XDECREF(result); + Buffer_OnError(&buffer); return NULL; } @@ -420,36 +438,29 @@ decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length) /* data_size is strictly positive, but because we repeatedly have to compare against max_length and PyBytes_GET_SIZE we declare it as signed */ - Py_ssize_t data_size = 0; PyObject *result; + _BlocksOutputBuffer buffer = {.list = NULL}; bz_stream *bzs = &d->bzs; - if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) - result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); - else - result = PyBytes_FromStringAndSize(NULL, max_length); - if (result == NULL) - return NULL; + if (Buffer_InitAndGrow(&buffer, max_length, &bzs->next_out, &bzs->avail_out) < 0) { + goto error; + } - bzs->next_out = PyBytes_AS_STRING(result); for (;;) { int bzret; - size_t avail; - /* On a 64-bit system, buffer length might not fit in avail_out, so we do decompression in chunks of no more than UINT_MAX bytes each. Note that the expression for `avail` is guaranteed to be positive, so the cast is safe. */ - avail = (size_t) (PyBytes_GET_SIZE(result) - data_size); - bzs->avail_out = (unsigned int)Py_MIN(avail, UINT_MAX); bzs->avail_in = (unsigned int)Py_MIN(d->bzs_avail_in_real, UINT_MAX); d->bzs_avail_in_real -= bzs->avail_in; Py_BEGIN_ALLOW_THREADS bzret = BZ2_bzDecompress(bzs); - data_size = bzs->next_out - PyBytes_AS_STRING(result); - d->bzs_avail_in_real += bzs->avail_in; Py_END_ALLOW_THREADS + + d->bzs_avail_in_real += bzs->avail_in; + if (catch_bz2_error(bzret)) goto error; if (bzret == BZ_STREAM_END) { @@ -458,22 +469,21 @@ decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length) } else if (d->bzs_avail_in_real == 0) { break; } else if (bzs->avail_out == 0) { - if (data_size == max_length) + if (Buffer_GetDataSize(&buffer, bzs->avail_out) == max_length) break; - if (data_size == PyBytes_GET_SIZE(result) && - grow_buffer(&result, max_length) == -1) + if (Buffer_Grow(&buffer, &bzs->next_out, &bzs->avail_out) < 0) { goto error; - bzs->next_out = PyBytes_AS_STRING(result) + data_size; + } } } - if (data_size != PyBytes_GET_SIZE(result)) - if (_PyBytes_Resize(&result, data_size) == -1) - goto error; - return result; + result = Buffer_Finish(&buffer, bzs->avail_out); + if (result != NULL) { + return result; + } error: - Py_XDECREF(result); + Buffer_OnError(&buffer); return NULL; } @@ -668,7 +678,7 @@ static int _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs) { int return_value = -1; - + if (!_PyArg_NoPositional("BZ2Decompressor", args)) { goto exit; } diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index b01f630009813..0d6231953a3e7 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -15,6 +15,60 @@ #include +// Blocks output buffer wrappers +#include "pycore_blocks_output_buffer.h" + +#if OUTPUT_BUFFER_MAX_BLOCK_SIZE > SIZE_MAX + #error "The maximum block size accepted by liblzma is SIZE_MAX." +#endif + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + uint8_t **next_out, size_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_InitAndGrow( + buffer, max_length, (void**) next_out); + *avail_out = (size_t) allocated; + return allocated; +} + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_Grow(_BlocksOutputBuffer *buffer, + uint8_t **next_out, size_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_Grow( + buffer, (void**) next_out, (Py_ssize_t) *avail_out); + *avail_out = (size_t) allocated; + return allocated; +} + +static inline Py_ssize_t +Buffer_GetDataSize(_BlocksOutputBuffer *buffer, size_t avail_out) +{ + return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); +} + +static inline PyObject * +Buffer_Finish(_BlocksOutputBuffer *buffer, size_t avail_out) +{ + return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); +} + +static inline void +Buffer_OnError(_BlocksOutputBuffer *buffer) +{ + _BlocksOutputBuffer_OnError(buffer); +} + + #define ACQUIRE_LOCK(obj) do { \ if (!PyThread_acquire_lock((obj)->lock, 0)) { \ Py_BEGIN_ALLOW_THREADS \ @@ -128,25 +182,6 @@ PyLzma_Free(void *opaque, void *ptr) PyMem_RawFree(ptr); } -#if BUFSIZ < 8192 -#define INITIAL_BUFFER_SIZE 8192 -#else -#define INITIAL_BUFFER_SIZE BUFSIZ -#endif - -static int -grow_buffer(PyObject **buf, Py_ssize_t max_length) -{ - Py_ssize_t size = PyBytes_GET_SIZE(*buf); - Py_ssize_t newsize = size + (size >> 3) + 6; - - if (max_length > 0 && newsize > max_length) { - newsize = max_length; - } - - return _PyBytes_Resize(buf, newsize); -} - /* Some custom type conversions for PyArg_ParseTupleAndKeywords(), since the predefined conversion specifiers do not suit our needs: @@ -510,29 +545,27 @@ class lzma_filter_converter(CConverter): static PyObject * compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) { - Py_ssize_t data_size = 0; PyObject *result; + _BlocksOutputBuffer buffer = {.list = NULL}; _lzma_state *state = PyType_GetModuleState(Py_TYPE(c)); assert(state != NULL); - result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); - if (result == NULL) { - return NULL; + if (Buffer_InitAndGrow(&buffer, -1, &c->lzs.next_out, &c->lzs.avail_out) < 0) { + goto error; } c->lzs.next_in = data; c->lzs.avail_in = len; - c->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result); - c->lzs.avail_out = PyBytes_GET_SIZE(result); + for (;;) { lzma_ret lzret; Py_BEGIN_ALLOW_THREADS lzret = lzma_code(&c->lzs, action); - data_size = (char *)c->lzs.next_out - PyBytes_AS_STRING(result); + Py_END_ALLOW_THREADS + if (lzret == LZMA_BUF_ERROR && len == 0 && c->lzs.avail_out > 0) { lzret = LZMA_OK; /* That wasn't a real error */ } - Py_END_ALLOW_THREADS if (catch_lzma_error(state, lzret)) { goto error; } @@ -540,20 +573,19 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) (action == LZMA_FINISH && lzret == LZMA_STREAM_END)) { break; } else if (c->lzs.avail_out == 0) { - if (grow_buffer(&result, -1) == -1) + if (Buffer_Grow(&buffer, &c->lzs.next_out, &c->lzs.avail_out) < 0) { goto error; - c->lzs.next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size; - c->lzs.avail_out = PyBytes_GET_SIZE(result) - data_size; + } } } - if (data_size != PyBytes_GET_SIZE(result)) - if (_PyBytes_Resize(&result, data_size) == -1) { - goto error; - } - return result; + + result = Buffer_Finish(&buffer, c->lzs.avail_out); + if (result != NULL) { + return result; + } error: - Py_XDECREF(result); + Buffer_OnError(&buffer); return NULL; } @@ -896,36 +928,26 @@ static PyType_Spec lzma_compressor_type_spec = { static PyObject* decompress_buf(Decompressor *d, Py_ssize_t max_length) { - Py_ssize_t data_size = 0; PyObject *result; lzma_stream *lzs = &d->lzs; + _BlocksOutputBuffer buffer = {.list = NULL}; _lzma_state *state = PyType_GetModuleState(Py_TYPE(d)); assert(state != NULL); - if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) { - result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); - } - else { - result = PyBytes_FromStringAndSize(NULL, max_length); - } - if (result == NULL) { - return NULL; + if (Buffer_InitAndGrow(&buffer, max_length, &lzs->next_out, &lzs->avail_out) < 0) { + goto error; } - lzs->next_out = (uint8_t *)PyBytes_AS_STRING(result); - lzs->avail_out = PyBytes_GET_SIZE(result); - for (;;) { lzma_ret lzret; Py_BEGIN_ALLOW_THREADS lzret = lzma_code(lzs, LZMA_RUN); - data_size = (char *)lzs->next_out - PyBytes_AS_STRING(result); + Py_END_ALLOW_THREADS + if (lzret == LZMA_BUF_ERROR && lzs->avail_in == 0 && lzs->avail_out > 0) { lzret = LZMA_OK; /* That wasn't a real error */ } - Py_END_ALLOW_THREADS - if (catch_lzma_error(state, lzret)) { goto error; } @@ -940,28 +962,24 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) Maybe lzs's internal state still have a few bytes can be output, grow the output buffer and continue if max_lengh < 0. */ - if (data_size == max_length) { + if (Buffer_GetDataSize(&buffer, lzs->avail_out) == max_length) { break; } - if (grow_buffer(&result, max_length) == -1) { + if (Buffer_Grow(&buffer, &lzs->next_out, &lzs->avail_out) < 0) { goto error; } - lzs->next_out = (uint8_t *)PyBytes_AS_STRING(result) + data_size; - lzs->avail_out = PyBytes_GET_SIZE(result) - data_size; } else if (lzs->avail_in == 0) { break; } } - if (data_size != PyBytes_GET_SIZE(result)) { - if (_PyBytes_Resize(&result, data_size) == -1) { - goto error; - } - } - return result; + result = Buffer_Finish(&buffer, lzs->avail_out); + if (result != NULL) { + return result; + } error: - Py_XDECREF(result); + Buffer_OnError(&buffer); return NULL; } @@ -1042,7 +1060,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) be output, try to output them next time. */ d->needs_input = 0; - /* if max_length < 0, lzs->avail_out always > 0 */ + /* If max_length < 0, lzs->avail_out always > 0 */ assert(max_length >= 0); } else { /* Input buffer exhausted, output buffer has space. */ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 1ddaefd8a6d79..8a20dfcbf9e27 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -9,6 +9,79 @@ #include "structmember.h" // PyMemberDef #include "zlib.h" +// Blocks output buffer wrappers +#include "pycore_blocks_output_buffer.h" + +#if OUTPUT_BUFFER_MAX_BLOCK_SIZE > UINT32_MAX + #error "The maximum block size accepted by zlib is UINT32_MAX." +#endif + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + Bytef **next_out, uint32_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_InitAndGrow( + buffer, max_length, (void**) next_out); + *avail_out = (uint32_t) allocated; + return allocated; +} + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_InitWithSize(_BlocksOutputBuffer *buffer, Py_ssize_t init_size, + Bytef **next_out, uint32_t *avail_out) +{ + Py_ssize_t allocated; + + if (init_size < 0 || (size_t)init_size > UINT32_MAX) { + PyErr_SetString(PyExc_ValueError, + "Initial buffer size should (0 <= size <= UINT32_MAX)"); + return -1; + } + + allocated = _BlocksOutputBuffer_InitWithSize( + buffer, init_size, (void**) next_out); + *avail_out = (uint32_t) allocated; + return allocated; +} + +/* On success, return value >= 0 + On failure, return -1 */ +static inline Py_ssize_t +Buffer_Grow(_BlocksOutputBuffer *buffer, + Bytef **next_out, uint32_t *avail_out) +{ + Py_ssize_t allocated; + + allocated = _BlocksOutputBuffer_Grow( + buffer, (void**) next_out, (Py_ssize_t) *avail_out); + *avail_out = (uint32_t) allocated; + return allocated; +} + +static inline Py_ssize_t +Buffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) +{ + return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); +} + +static inline PyObject * +Buffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) +{ + return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); +} + +static inline void +Buffer_OnError(_BlocksOutputBuffer *buffer) +{ + _BlocksOutputBuffer_OnError(buffer); +} + #define ENTER_ZLIB(obj) do { \ if (!PyThread_acquire_lock((obj)->lock, 0)) { \ @@ -149,56 +222,6 @@ arrange_input_buffer(z_stream *zst, Py_ssize_t *remains) *remains -= zst->avail_in; } -static Py_ssize_t -arrange_output_buffer_with_maximum(z_stream *zst, PyObject **buffer, - Py_ssize_t length, - Py_ssize_t max_length) -{ - Py_ssize_t occupied; - - if (*buffer == NULL) { - if (!(*buffer = PyBytes_FromStringAndSize(NULL, length))) - return -1; - occupied = 0; - } - else { - occupied = zst->next_out - (Byte *)PyBytes_AS_STRING(*buffer); - - if (length == occupied) { - Py_ssize_t new_length; - assert(length <= max_length); - /* can not scale the buffer over max_length */ - if (length == max_length) - return -2; - if (length <= (max_length >> 1)) - new_length = length << 1; - else - new_length = max_length; - if (_PyBytes_Resize(buffer, new_length) < 0) - return -1; - length = new_length; - } - } - - zst->avail_out = (uInt)Py_MIN((size_t)(length - occupied), UINT_MAX); - zst->next_out = (Byte *)PyBytes_AS_STRING(*buffer) + occupied; - - return length; -} - -static Py_ssize_t -arrange_output_buffer(z_stream *zst, PyObject **buffer, Py_ssize_t length) -{ - Py_ssize_t ret; - - ret = arrange_output_buffer_with_maximum(zst, buffer, length, - PY_SSIZE_T_MAX); - if (ret == -2) - PyErr_NoMemory(); - - return ret; -} - /*[clinic input] zlib.compress @@ -215,16 +238,20 @@ static PyObject * zlib_compress_impl(PyObject *module, Py_buffer *data, int level) /*[clinic end generated code: output=d80906d73f6294c8 input=638d54b6315dbed3]*/ { - PyObject *RetVal = NULL; - Py_ssize_t obuflen = DEF_BUF_SIZE; + PyObject *RetVal; int flush; z_stream zst; + _BlocksOutputBuffer buffer = {.list = NULL}; zlibstate *state = get_zlib_state(module); Byte *ibuf = data->buf; Py_ssize_t ibuflen = data->len; + if (Buffer_InitAndGrow(&buffer, -1, &zst.next_out, &zst.avail_out) < 0) { + goto error; + } + zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; @@ -252,10 +279,11 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; do { - obuflen = arrange_output_buffer(&zst, &RetVal, obuflen); - if (obuflen < 0) { - deflateEnd(&zst); - goto error; + if (zst.avail_out == 0) { + if (Buffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { + deflateEnd(&zst); + goto error; + } } Py_BEGIN_ALLOW_THREADS @@ -276,15 +304,16 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) err = deflateEnd(&zst); if (err == Z_OK) { - if (_PyBytes_Resize(&RetVal, zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) < 0) + RetVal = Buffer_Finish(&buffer, zst.avail_out); + if (RetVal == NULL) { goto error; + } return RetVal; } else zlib_error(state, zst, err, "while finishing compression"); error: - Py_XDECREF(RetVal); + Buffer_OnError(&buffer); return NULL; } @@ -307,11 +336,12 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, Py_ssize_t bufsize) /*[clinic end generated code: output=77c7e35111dc8c42 input=a9ac17beff1f893f]*/ { - PyObject *RetVal = NULL; + PyObject *RetVal; Byte *ibuf; Py_ssize_t ibuflen; int err, flush; z_stream zst; + _BlocksOutputBuffer buffer = {.list = NULL}; zlibstate *state = get_zlib_state(module); @@ -322,6 +352,10 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, bufsize = 1; } + if (Buffer_InitWithSize(&buffer, bufsize, &zst.next_out, &zst.avail_out) < 0) { + goto error; + } + ibuf = data->buf; ibuflen = data->len; @@ -350,10 +384,11 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; do { - bufsize = arrange_output_buffer(&zst, &RetVal, bufsize); - if (bufsize < 0) { - inflateEnd(&zst); - goto error; + if (zst.avail_out == 0) { + if (Buffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { + inflateEnd(&zst); + goto error; + } } Py_BEGIN_ALLOW_THREADS @@ -393,14 +428,13 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, goto error; } - if (_PyBytes_Resize(&RetVal, zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) < 0) - goto error; - - return RetVal; + RetVal = Buffer_Finish(&buffer, zst.avail_out); + if (RetVal != NULL) { + return RetVal; + } error: - Py_XDECREF(RetVal); + Buffer_OnError(&buffer); return NULL; } @@ -633,9 +667,9 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, Py_buffer *data) /*[clinic end generated code: output=6731b3f0ff357ca6 input=04d00f65ab01d260]*/ { - PyObject *RetVal = NULL; - Py_ssize_t obuflen = DEF_BUF_SIZE; + PyObject *RetVal; int err; + _BlocksOutputBuffer buffer = {.list = NULL}; zlibstate *state = PyType_GetModuleState(cls); ENTER_ZLIB(self); @@ -643,13 +677,18 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, self->zst.next_in = data->buf; Py_ssize_t ibuflen = data->len; + if (Buffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto error; + } + do { arrange_input_buffer(&self->zst, &ibuflen); do { - obuflen = arrange_output_buffer(&self->zst, &RetVal, obuflen); - if (obuflen < 0) - goto error; + if (self->zst.avail_out == 0) { + if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) + goto error; + } Py_BEGIN_ALLOW_THREADS err = deflate(&self->zst, Z_NO_FLUSH); @@ -665,12 +704,14 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, } while (ibuflen != 0); - if (_PyBytes_Resize(&RetVal, self->zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + if (RetVal != NULL) { goto success; + } error: - Py_CLEAR(RetVal); + Buffer_OnError(&buffer); + RetVal = NULL; success: LEAVE_ZLIB(self); return RetVal; @@ -746,8 +787,9 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, /*[clinic end generated code: output=b024a93c2c922d57 input=bfb37b3864cfb606]*/ { int err = Z_OK; - Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE, hard_limit; - PyObject *RetVal = NULL; + Py_ssize_t ibuflen; + PyObject *RetVal; + _BlocksOutputBuffer buffer = {.list = NULL}; PyObject *module = PyType_GetModule(cls); if (module == NULL) @@ -758,33 +800,28 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, PyErr_SetString(PyExc_ValueError, "max_length must be non-negative"); return NULL; } else if (max_length == 0) - hard_limit = PY_SSIZE_T_MAX; - else - hard_limit = max_length; + max_length = -1; ENTER_ZLIB(self); self->zst.next_in = data->buf; ibuflen = data->len; - /* limit amount of data allocated to max_length */ - if (max_length && obuflen > max_length) - obuflen = max_length; + if (Buffer_InitAndGrow(&buffer, max_length, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto abort; + } do { arrange_input_buffer(&self->zst, &ibuflen); do { - obuflen = arrange_output_buffer_with_maximum(&self->zst, &RetVal, - obuflen, hard_limit); - if (obuflen == -2) { - if (max_length > 0) { + if (self->zst.avail_out == 0) { + if (Buffer_GetDataSize(&buffer, self->zst.avail_out) == max_length) { goto save; } - PyErr_NoMemory(); - } - if (obuflen < 0) { - goto abort; + if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto abort; + } } Py_BEGIN_ALLOW_THREADS @@ -828,12 +865,14 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, goto abort; } - if (_PyBytes_Resize(&RetVal, self->zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + if (RetVal != NULL) { goto success; + } abort: - Py_CLEAR(RetVal); + Buffer_OnError(&buffer); + RetVal = NULL; success: LEAVE_ZLIB(self); return RetVal; @@ -858,8 +897,8 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) /*[clinic end generated code: output=c7efd13efd62add2 input=286146e29442eb6c]*/ { int err; - Py_ssize_t length = DEF_BUF_SIZE; - PyObject *RetVal = NULL; + PyObject *RetVal; + _BlocksOutputBuffer buffer = {.list = NULL}; zlibstate *state = PyType_GetModuleState(cls); /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in @@ -872,11 +911,15 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) self->zst.avail_in = 0; + if (Buffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto error; + } + do { - length = arrange_output_buffer(&self->zst, &RetVal, length); - if (length < 0) { - Py_CLEAR(RetVal); - goto error; + if (self->zst.avail_out == 0) { + if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto error; + } } Py_BEGIN_ALLOW_THREADS @@ -885,7 +928,6 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) if (err == Z_STREAM_ERROR) { zlib_error(state, self->zst, err, "while flushing"); - Py_CLEAR(RetVal); goto error; } } while (self->zst.avail_out == 0); @@ -898,7 +940,6 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) err = deflateEnd(&self->zst); if (err != Z_OK) { zlib_error(state, self->zst, err, "while finishing compression"); - Py_CLEAR(RetVal); goto error; } else @@ -910,15 +951,18 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) */ } else if (err != Z_OK && err != Z_BUF_ERROR) { zlib_error(state, self->zst, err, "while flushing"); - Py_CLEAR(RetVal); goto error; } - if (_PyBytes_Resize(&RetVal, self->zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) < 0) - Py_CLEAR(RetVal); + RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + if (RetVal != NULL) { + goto success; + } - error: +error: + Buffer_OnError(&buffer); + RetVal = NULL; +success: LEAVE_ZLIB(self); return RetVal; } @@ -1120,8 +1164,9 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, { int err, flush; Py_buffer data; - PyObject *RetVal = NULL; + PyObject *RetVal; Py_ssize_t ibuflen; + _BlocksOutputBuffer buffer = {.list = NULL}; PyObject *module = PyType_GetModule(cls); if (module == NULL) { @@ -1144,14 +1189,19 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, self->zst.next_in = data.buf; ibuflen = data.len; + if (Buffer_InitWithSize(&buffer, length, &self->zst.next_out, &self->zst.avail_out) < 0) { + goto abort; + } + do { arrange_input_buffer(&self->zst, &ibuflen); flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; do { - length = arrange_output_buffer(&self->zst, &RetVal, length); - if (length < 0) - goto abort; + if (self->zst.avail_out == 0) { + if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) + goto abort; + } Py_BEGIN_ALLOW_THREADS err = inflate(&self->zst, flush); @@ -1193,13 +1243,14 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, } } - if (_PyBytes_Resize(&RetVal, self->zst.next_out - - (Byte *)PyBytes_AS_STRING(RetVal)) == 0) { + RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + if (RetVal != NULL) { goto success; } abort: - Py_CLEAR(RetVal); + Buffer_OnError(&buffer); + RetVal = NULL; success: PyBuffer_Release(&data); LEAVE_ZLIB(self); From webhook-mailer at python.org Wed Apr 28 04:16:45 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 28 Apr 2021 08:16:45 -0000 Subject: [Python-checkins] bpo-43776: Remove list call from args in Popen repr (GH-25338) Message-ID: https://github.com/python/cpython/commit/db0c5b786df961785ae8c803f5572ae0c8dadcc7 commit: db0c5b786df961785ae8c803f5572ae0c8dadcc7 branch: master author: M. Kocher committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-28T01:16:38-07:00 summary: bpo-43776: Remove list call from args in Popen repr (GH-25338) Removes the `list` call in the Popen `repr`. Current implementation: For cmd = `python --version`, with `shell=True`. ```bash ``` For `shell=False` and args=`['python', '--version']`, the output is correct: ```bash ``` With the new changes the `repr` yields: For cmd = `python --version`, with `shell=True`: ```bash ``` For `shell=False` and args=`['python', '--version']`, the output: ```bash ``` Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst M Lib/subprocess.py M Lib/test/test_subprocess.py diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 2b785496e4f5f..8203aded7d552 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1003,7 +1003,7 @@ def __init__(self, args, bufsize=-1, executable=None, def __repr__(self): obj_repr = ( f"<{self.__class__.__name__}: " - f"returncode: {self.returncode} args: {list(self.args)!r}>" + f"returncode: {self.returncode} args: {self.args!r}>" ) if len(obj_repr) > 80: obj_repr = obj_repr[:76] + "...>" diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 70b54f4155a9a..7c79365f41191 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -23,6 +23,7 @@ import gc import textwrap import json +import pathlib from test.support.os_helper import FakePath try: @@ -1442,28 +1443,23 @@ def test_communicate_epipe(self): p.communicate(b"x" * 2**20) def test_repr(self): - # Run a command that waits for user input, to check the repr() of - # a Proc object while and after the sub-process runs. - code = 'import sys; input(); sys.exit(57)' - cmd = [sys.executable, '-c', code] - result = "') - ) - - proc.communicate(input='exit...\n') - proc.wait() - - self.assertIsNotNone(proc.returncode) - self.assertTrue( - repr(proc).startswith(result.format(proc.returncode)) and - repr(proc).endswith('>') - ) + path_cmd = pathlib.Path("my-tool.py") + pathlib_cls = path_cmd.__class__.__name__ + + cases = [ + ("ls", True, 123, ""), + ('a' * 100, True, 0, + ""), + (["ls"], False, None, ""), + (["ls", '--my-opts', 'a' * 100], False, None, + ""), + (path_cmd, False, 7, f"") + ] + with unittest.mock.patch.object(subprocess.Popen, '_execute_child'): + for cmd, shell, code, sx in cases: + p = subprocess.Popen(cmd, shell=shell) + p.returncode = code + self.assertEqual(repr(p), sx) def test_communicate_epipe_only_stdin(self): # Issue 10963: communicate() should hide EPIPE diff --git a/Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst b/Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst new file mode 100644 index 0000000000000..51bc791f10d31 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst @@ -0,0 +1 @@ +When :class:`subprocess.Popen` args are provided as a string or as :class:`pathlib.Path`, the Popen instance repr now shows the right thing. \ No newline at end of file From webhook-mailer at python.org Wed Apr 28 06:38:58 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 10:38:58 -0000 Subject: [Python-checkins] bpo-43960: test_pdb resets breakpoints (GH-25673) Message-ID: https://github.com/python/cpython/commit/21b02b5f4018474620676be04310f7d230a464ea commit: 21b02b5f4018474620676be04310f7d230a464ea branch: master author: Irit Katriel committer: vstinner date: 2021-04-28T12:38:29+02:00 summary: bpo-43960: test_pdb resets breakpoints (GH-25673) Reset global breakpoint state at the beginning of test_pdb_next_command_in_generator_for_loop() to make it deterministic. files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index fb3941780b721..870eab4e33e63 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1192,6 +1192,7 @@ def test_pdb_next_command_in_generator_for_loop(): ... print('value', i) ... x = 123 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_gen', ... 'continue', ... 'next', From webhook-mailer at python.org Wed Apr 28 07:40:52 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 11:40:52 -0000 Subject: [Python-checkins] bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) Message-ID: https://github.com/python/cpython/commit/32c5a174445ec93747240cd8472012276ed27acf commit: 32c5a174445ec93747240cd8472012276ed27acf branch: master author: Victor Stinner committer: vstinner date: 2021-04-28T13:40:44+02:00 summary: bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) _PyInterpreterState_IDIncref() now calls _PyInterpreterState_IDInitref() and always increments id_refcount. files: A Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst M Include/internal/pycore_interp.h M Objects/interpreteridobject.c M Python/pystate.c diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index dbdd109bd78839..11d31da382958b 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -338,7 +338,7 @@ struct _xidregitem { PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(int64_t); PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); +PyAPI_FUNC(int) _PyInterpreterState_IDIncref(struct _is *); PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); #ifdef __cplusplus diff --git a/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst b/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst new file mode 100644 index 00000000000000..32164162f90ad0 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst @@ -0,0 +1,5 @@ +_PyInterpreterState_IDIncref() now calls _PyInterpreterState_IDInitref() and +always increments id_refcount. Previously, calling +_xxsubinterpreters.get_current() could create an id_refcount inconsistency +when a _xxsubinterpreters.InterpreterID object was deallocated. Patch by +Victor Stinner. diff --git a/Objects/interpreteridobject.c b/Objects/interpreteridobject.c index 39bde97269590b..46239100dcb7b7 100644 --- a/Objects/interpreteridobject.c +++ b/Objects/interpreteridobject.c @@ -24,15 +24,21 @@ newinterpid(PyTypeObject *cls, int64_t id, int force) } } + if (interp != NULL) { + if (_PyInterpreterState_IDIncref(interp) < 0) { + return NULL; + } + } + interpid *self = PyObject_New(interpid, cls); if (self == NULL) { + if (interp != NULL) { + _PyInterpreterState_IDDecref(interp); + } return NULL; } self->id = id; - if (interp != NULL) { - _PyInterpreterState_IDIncref(interp); - } return self; } diff --git a/Python/pystate.c b/Python/pystate.c index 436f874842cc84..81bcf68219a0e2 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -538,24 +538,25 @@ _PyInterpreterState_IDInitref(PyInterpreterState *interp) } -void +int _PyInterpreterState_IDIncref(PyInterpreterState *interp) { - if (interp->id_mutex == NULL) { - return; + if (_PyInterpreterState_IDInitref(interp) < 0) { + return -1; } + PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK); interp->id_refcount += 1; PyThread_release_lock(interp->id_mutex); + return 0; } void _PyInterpreterState_IDDecref(PyInterpreterState *interp) { - if (interp->id_mutex == NULL) { - return; - } + assert(interp->id_mutex != NULL); + struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate; PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK); assert(interp->id_refcount != 0); From webhook-mailer at python.org Wed Apr 28 09:47:01 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 13:47:01 -0000 Subject: [Python-checkins] bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) (GH-25686) Message-ID: https://github.com/python/cpython/commit/77db337f1e69213e62ba79a797540cc4ac23492e commit: 77db337f1e69213e62ba79a797540cc4ac23492e branch: 3.8 author: Victor Stinner committer: vstinner date: 2021-04-28T15:46:57+02:00 summary: bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683) (GH-25686) _PyInterpreterState_IDIncref() now calls _PyInterpreterState_IDInitref() and always increments id_refcount. (cherry picked from commit 32c5a174445ec93747240cd8472012276ed27acf) files: A Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst M Include/internal/pycore_pystate.h M Objects/interpreteridobject.c M Python/pystate.c diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 96d5e31d83a6e9..18105335363a45 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -140,7 +140,7 @@ struct _is { PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T); PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); +PyAPI_FUNC(int) _PyInterpreterState_IDIncref(struct _is *); PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); diff --git a/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst b/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst new file mode 100644 index 00000000000000..32164162f90ad0 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst @@ -0,0 +1,5 @@ +_PyInterpreterState_IDIncref() now calls _PyInterpreterState_IDInitref() and +always increments id_refcount. Previously, calling +_xxsubinterpreters.get_current() could create an id_refcount inconsistency +when a _xxsubinterpreters.InterpreterID object was deallocated. Patch by +Victor Stinner. diff --git a/Objects/interpreteridobject.c b/Objects/interpreteridobject.c index 94f5dd709bbda0..19e86a2e0b0f77 100644 --- a/Objects/interpreteridobject.c +++ b/Objects/interpreteridobject.c @@ -23,15 +23,21 @@ newinterpid(PyTypeObject *cls, int64_t id, int force) } } + if (interp != NULL) { + if (_PyInterpreterState_IDIncref(interp) < 0) { + return NULL; + } + } + interpid *self = PyObject_New(interpid, cls); if (self == NULL) { + if (interp != NULL) { + _PyInterpreterState_IDDecref(interp); + } return NULL; } self->id = id; - if (interp != NULL) { - _PyInterpreterState_IDIncref(interp); - } return self; } diff --git a/Python/pystate.c b/Python/pystate.c index b1d0f1cbec428a..56c184e43ae0ef 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -473,24 +473,25 @@ _PyInterpreterState_IDInitref(PyInterpreterState *interp) } -void +int _PyInterpreterState_IDIncref(PyInterpreterState *interp) { - if (interp->id_mutex == NULL) { - return; + if (_PyInterpreterState_IDInitref(interp) < 0) { + return -1; } + PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK); interp->id_refcount += 1; PyThread_release_lock(interp->id_mutex); + return 0; } void _PyInterpreterState_IDDecref(PyInterpreterState *interp) { - if (interp->id_mutex == NULL) { - return; - } + assert(interp->id_mutex != NULL); + struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate; PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK); assert(interp->id_refcount != 0); From webhook-mailer at python.org Wed Apr 28 09:47:16 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 13:47:16 -0000 Subject: [Python-checkins] bpo-43961: Fix test_logging.test_namer_rotator_inheritance() (GH-25684) Message-ID: https://github.com/python/cpython/commit/fe52eb62191e640e720d184a9a1a04e965b8a062 commit: fe52eb62191e640e720d184a9a1a04e965b8a062 branch: master author: Victor Stinner committer: vstinner date: 2021-04-28T15:47:10+02:00 summary: bpo-43961: Fix test_logging.test_namer_rotator_inheritance() (GH-25684) Fix test_logging.test_namer_rotator_inheritance() on Windows: use os.replace() rather than os.rename(). files: A Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index bb31e29ca76911..1d061e4993ce0e 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -5219,7 +5219,7 @@ def namer(self, name): def rotator(self, source, dest): if os.path.exists(source): - os.rename(source, dest + ".rotated") + os.replace(source, dest + ".rotated") rh = HandlerWithNamerAndRotator( self.fn, encoding="utf-8", backupCount=2, maxBytes=1) diff --git a/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst b/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst new file mode 100644 index 00000000000000..e56572f5170998 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst @@ -0,0 +1,2 @@ +Fix test_logging.test_namer_rotator_inheritance() on Windows: use +:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. From webhook-mailer at python.org Wed Apr 28 10:03:27 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 28 Apr 2021 14:03:27 -0000 Subject: [Python-checkins] bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) Message-ID: https://github.com/python/cpython/commit/4c49be766897968e509c41397e0e624c25b1675d commit: 4c49be766897968e509c41397e0e624c25b1675d branch: master author: scoder committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-28T07:03:19-07:00 summary: bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) Automerge-Triggered-By: GH:scoder files: A Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst M Doc/c-api/contextvars.rst diff --git a/Doc/c-api/contextvars.rst b/Doc/c-api/contextvars.rst index 9c088814314a81..d970f5443b1df5 100644 --- a/Doc/c-api/contextvars.rst +++ b/Doc/c-api/contextvars.rst @@ -107,9 +107,9 @@ Context variable functions: .. c:function:: PyObject *PyContextVar_New(const char *name, PyObject *def) Create a new ``ContextVar`` object. The *name* parameter is used - for introspection and debug purposes. The *def* parameter may optionally - specify the default value for the context variable. If an error has - occurred, this function returns ``NULL``. + for introspection and debug purposes. The *def* parameter specifies + a default value for the context variable, or ``NULL`` for no default. + If an error has occurred, this function returns ``NULL``. .. c:function:: int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value) @@ -124,13 +124,12 @@ Context variable functions: - the default value of *var*, if not ``NULL``; - ``NULL`` - If the value was found, the function will create a new reference to it. + Except for ``NULL``, the function returns a new reference. .. c:function:: PyObject *PyContextVar_Set(PyObject *var, PyObject *value) - Set the value of *var* to *value* in the current context. Returns a - pointer to a :c:type:`PyObject` object, or ``NULL`` if an error - has occurred. + Set the value of *var* to *value* in the current context. Returns + a new token object for this change, or ``NULL`` if an error has occurred. .. c:function:: int PyContextVar_Reset(PyObject *var, PyObject *token) diff --git a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst new file mode 100644 index 00000000000000..ba23ffd577b3d4 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst @@ -0,0 +1 @@ +The documentation on the PyContextVar C-API was clarified. From webhook-mailer at python.org Wed Apr 28 11:11:23 2021 From: webhook-mailer at python.org (scoder) Date: Wed, 28 Apr 2021 15:11:23 -0000 Subject: [Python-checkins] bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) (GH-25689) Message-ID: https://github.com/python/cpython/commit/fdb11897d7c8f9e6bdf96fcef802f784ef90f726 commit: fdb11897d7c8f9e6bdf96fcef802f784ef90f726 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: scoder date: 2021-04-28T17:11:15+02:00 summary: bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) (GH-25689) (cherry picked from commit 4c49be766897968e509c41397e0e624c25b1675d) files: A Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst M Doc/c-api/contextvars.rst diff --git a/Doc/c-api/contextvars.rst b/Doc/c-api/contextvars.rst index 9c088814314a81..d970f5443b1df5 100644 --- a/Doc/c-api/contextvars.rst +++ b/Doc/c-api/contextvars.rst @@ -107,9 +107,9 @@ Context variable functions: .. c:function:: PyObject *PyContextVar_New(const char *name, PyObject *def) Create a new ``ContextVar`` object. The *name* parameter is used - for introspection and debug purposes. The *def* parameter may optionally - specify the default value for the context variable. If an error has - occurred, this function returns ``NULL``. + for introspection and debug purposes. The *def* parameter specifies + a default value for the context variable, or ``NULL`` for no default. + If an error has occurred, this function returns ``NULL``. .. c:function:: int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value) @@ -124,13 +124,12 @@ Context variable functions: - the default value of *var*, if not ``NULL``; - ``NULL`` - If the value was found, the function will create a new reference to it. + Except for ``NULL``, the function returns a new reference. .. c:function:: PyObject *PyContextVar_Set(PyObject *var, PyObject *value) - Set the value of *var* to *value* in the current context. Returns a - pointer to a :c:type:`PyObject` object, or ``NULL`` if an error - has occurred. + Set the value of *var* to *value* in the current context. Returns + a new token object for this change, or ``NULL`` if an error has occurred. .. c:function:: int PyContextVar_Reset(PyObject *var, PyObject *token) diff --git a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst new file mode 100644 index 00000000000000..ba23ffd577b3d4 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst @@ -0,0 +1 @@ +The documentation on the PyContextVar C-API was clarified. From webhook-mailer at python.org Wed Apr 28 11:11:57 2021 From: webhook-mailer at python.org (scoder) Date: Wed, 28 Apr 2021 15:11:57 -0000 Subject: [Python-checkins] bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) (GH-25690) Message-ID: https://github.com/python/cpython/commit/ff7266efd0ef6b42dad30c9c0d210f843cc44f39 commit: ff7266efd0ef6b42dad30c9c0d210f843cc44f39 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: scoder date: 2021-04-28T17:11:53+02:00 summary: bpo-43959: clarify the documentation of the PyContextVar C-API (GH-25671) (GH-25690) (cherry picked from commit 4c49be766897968e509c41397e0e624c25b1675d) files: A Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst M Doc/c-api/contextvars.rst diff --git a/Doc/c-api/contextvars.rst b/Doc/c-api/contextvars.rst index 38256a3b0f2a06..314c8b7847e898 100644 --- a/Doc/c-api/contextvars.rst +++ b/Doc/c-api/contextvars.rst @@ -112,9 +112,9 @@ Context variable functions: .. c:function:: PyObject *PyContextVar_New(const char *name, PyObject *def) Create a new ``ContextVar`` object. The *name* parameter is used - for introspection and debug purposes. The *def* parameter may optionally - specify the default value for the context variable. If an error has - occurred, this function returns ``NULL``. + for introspection and debug purposes. The *def* parameter specifies + a default value for the context variable, or ``NULL`` for no default. + If an error has occurred, this function returns ``NULL``. .. c:function:: int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value) @@ -129,13 +129,12 @@ Context variable functions: - the default value of *var*, if not ``NULL``; - ``NULL`` - If the value was found, the function will create a new reference to it. + Except for ``NULL``, the function returns a new reference. .. c:function:: PyObject *PyContextVar_Set(PyObject *var, PyObject *value) - Set the value of *var* to *value* in the current context. Returns a - pointer to a :c:type:`PyObject` object, or ``NULL`` if an error - has occurred. + Set the value of *var* to *value* in the current context. Returns + a new token object for this change, or ``NULL`` if an error has occurred. .. c:function:: int PyContextVar_Reset(PyObject *var, PyObject *token) diff --git a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst new file mode 100644 index 00000000000000..ba23ffd577b3d4 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst @@ -0,0 +1 @@ +The documentation on the PyContextVar C-API was clarified. From webhook-mailer at python.org Wed Apr 28 11:21:21 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 15:21:21 -0000 Subject: [Python-checkins] bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691) Message-ID: https://github.com/python/cpython/commit/2dc6b1789ec86dc80ea290fe33edd61140e47f6f commit: 2dc6b1789ec86dc80ea290fe33edd61140e47f6f branch: 3.9 author: Irit Katriel committer: vstinner date: 2021-04-28T17:21:11+02:00 summary: bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691) files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 0da449e33e98b6..2523a5d691ac7e 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -17,6 +17,13 @@ from test.test_doctest import _FakeInput from unittest.mock import patch +from bdb import Breakpoint + +def reset_Breakpoint(): + Breakpoint.next = 1 + Breakpoint.bplist = {} + Breakpoint.bpbynumber = [None] + class PdbTestInput(object): """Context manager that makes testing Pdb in doctests easier.""" @@ -227,10 +234,7 @@ def test_pdb_breakpoint_commands(): First, need to clear bdb state that might be left over from previous tests. Otherwise, the new breakpoints might get assigned different numbers. - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 - >>> Breakpoint.bplist = {} - >>> Breakpoint.bpbynumber = [None] + >>> reset_Breakpoint() Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because the breakpoint list outputs a tab for the "stop only" and "ignore next" @@ -699,8 +703,7 @@ def test_next_until_return_at_return_event(): ... test_function_2() ... end = 1 - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_function_2', ... 'continue', ... 'return', @@ -1127,6 +1130,7 @@ def test_pdb_next_command_in_generator_for_loop(): ... print('value', i) ... x = 123 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_gen', ... 'continue', ... 'next', @@ -1137,7 +1141,7 @@ def test_pdb_next_command_in_generator_for_loop(): > (3)test_function() -> for i in test_gen(): (Pdb) break test_gen - Breakpoint 6 at :1 + Breakpoint 1 at :1 (Pdb) continue > (2)test_gen() -> yield 0 From webhook-mailer at python.org Wed Apr 28 11:21:59 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 28 Apr 2021 15:21:59 -0000 Subject: [Python-checkins] bpo-43955: Handle the case where the distutils warning has already been triggered (GH-25675) Message-ID: https://github.com/python/cpython/commit/c1a9535989cc7323099725503519a17f79d083f5 commit: c1a9535989cc7323099725503519a17f79d083f5 branch: master author: Steve Dower committer: zooba date: 2021-04-28T16:21:55+01:00 summary: bpo-43955: Handle the case where the distutils warning has already been triggered (GH-25675) files: M Lib/test/test_distutils.py diff --git a/Lib/test/test_distutils.py b/Lib/test/test_distutils.py index de94da54798ce..90bfc70a133ae 100644 --- a/Lib/test/test_distutils.py +++ b/Lib/test/test_distutils.py @@ -10,7 +10,7 @@ from test.support import warnings_helper with warnings_helper.check_warnings( - ("The distutils package is deprecated", DeprecationWarning)): + ("The distutils package is deprecated", DeprecationWarning), quiet=True): import distutils.tests From webhook-mailer at python.org Wed Apr 28 11:28:23 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 15:28:23 -0000 Subject: [Python-checkins] bpo-43961: Fix test_logging.test_namer_rotator_inheritance() (GH-25684) (GH-25688) Message-ID: https://github.com/python/cpython/commit/629ef0fb9cad6ac340d3be884af7b47fb393ae99 commit: 629ef0fb9cad6ac340d3be884af7b47fb393ae99 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-28T17:28:15+02:00 summary: bpo-43961: Fix test_logging.test_namer_rotator_inheritance() (GH-25684) (GH-25688) Fix test_logging.test_namer_rotator_inheritance() on Windows: use os.replace() rather than os.rename(). (cherry picked from commit fe52eb62191e640e720d184a9a1a04e965b8a062) Co-authored-by: Victor Stinner Co-authored-by: Victor Stinner files: A Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 1760e241d824c6..8a3ffb5584fb82 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -5102,7 +5102,7 @@ def namer(self, name): def rotator(self, source, dest): if os.path.exists(source): - os.rename(source, dest + ".rotated") + os.replace(source, dest + ".rotated") rh = HandlerWithNamerAndRotator( self.fn, backupCount=2, maxBytes=1) diff --git a/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst b/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst new file mode 100644 index 00000000000000..e56572f5170998 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst @@ -0,0 +1,2 @@ +Fix test_logging.test_namer_rotator_inheritance() on Windows: use +:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. From webhook-mailer at python.org Wed Apr 28 11:38:20 2021 From: webhook-mailer at python.org (gvanrossum) Date: Wed, 28 Apr 2021 15:38:20 -0000 Subject: [Python-checkins] bpo-41559: Change PEP 612 implementation to pure Python (#25449) Message-ID: https://github.com/python/cpython/commit/859577c24981d6b36960d309f99f7fc810fe75c2 commit: 859577c24981d6b36960d309f99f7fc810fe75c2 branch: master author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: gvanrossum date: 2021-04-28T08:38:14-07:00 summary: bpo-41559: Change PEP 612 implementation to pure Python (#25449) files: A Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst M Lib/_collections_abc.py M Lib/test/test_genericalias.py M Objects/genericaliasobject.c diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index 87302ac76d801..dddf8a23ff985 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -443,6 +443,18 @@ def __create_ga(cls, origin, args): ga_args = args return super().__new__(cls, origin, ga_args) + @property + def __parameters__(self): + params = [] + for arg in self.__args__: + # Looks like a genericalias + if hasattr(arg, "__parameters__") and isinstance(arg.__parameters__, tuple): + params.extend(arg.__parameters__) + else: + if _is_typevarlike(arg): + params.append(arg) + return tuple(dict.fromkeys(params)) + def __repr__(self): if _has_special_args(self.__args__): return super().__repr__() @@ -458,16 +470,50 @@ def __reduce__(self): def __getitem__(self, item): # Called during TypeVar substitution, returns the custom subclass - # rather than the default types.GenericAlias object. - ga = super().__getitem__(item) - args = ga.__args__ - # args[0] occurs due to things like Z[[int, str, bool]] from PEP 612 - if not isinstance(ga.__args__[0], tuple): - t_result = ga.__args__[-1] - t_args = ga.__args__[:-1] - args = (t_args, t_result) - return _CallableGenericAlias(Callable, args) + # rather than the default types.GenericAlias object. Most of the + # code is copied from typing's _GenericAlias and the builtin + # types.GenericAlias. + + # A special case in PEP 612 where if X = Callable[P, int], + # then X[int, str] == X[[int, str]]. + param_len = len(self.__parameters__) + if param_len == 0: + raise TypeError(f'There are no type or parameter specification' + f'variables left in {self}') + if (param_len == 1 + and isinstance(item, (tuple, list)) + and len(item) > 1) or not isinstance(item, tuple): + item = (item,) + item_len = len(item) + if item_len != param_len: + raise TypeError(f'Too {"many" if item_len > param_len else "few"}' + f' arguments for {self};' + f' actual {item_len}, expected {param_len}') + subst = dict(zip(self.__parameters__, item)) + new_args = [] + for arg in self.__args__: + if _is_typevarlike(arg): + arg = subst[arg] + # Looks like a GenericAlias + elif hasattr(arg, '__parameters__') and isinstance(arg.__parameters__, tuple): + subparams = arg.__parameters__ + if subparams: + subargs = tuple(subst[x] for x in subparams) + arg = arg[subargs] + new_args.append(arg) + # args[0] occurs due to things like Z[[int, str, bool]] from PEP 612 + if not isinstance(new_args[0], (tuple, list)): + t_result = new_args[-1] + t_args = new_args[:-1] + new_args = (t_args, t_result) + return _CallableGenericAlias(Callable, tuple(new_args)) + +def _is_typevarlike(arg): + obj = type(arg) + # looks like a TypeVar/ParamSpec + return (obj.__module__ == 'typing' + and obj.__name__ in {'ParamSpec', 'TypeVar'}) def _has_special_args(args): """Checks if args[0] matches either ``...``, ``ParamSpec`` or diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py index fd024dcec8208..9f927392fc874 100644 --- a/Lib/test/test_genericalias.py +++ b/Lib/test/test_genericalias.py @@ -353,6 +353,12 @@ def test_abc_callable(self): self.assertEqual(repr(C4[dict]).split(".")[-1], "Callable[[int, dict], str]") self.assertEqual(C4[dict], Callable[[int, dict], str]) + # substitute a nested GenericAlias (both typing and the builtin + # version) + C5 = Callable[[typing.List[T], tuple[K, T], V], int] + self.assertEqual(C5[int, str, float], + Callable[[typing.List[int], tuple[str, int], float], int]) + with self.subTest("Testing type erasure"): class C1(Callable): def __call__(self): @@ -391,5 +397,16 @@ def __call__(self): self.assertEqual(repr(C1), "collections.abc.Callable" "[typing.Concatenate[int, ~P], int]") + with self.subTest("Testing TypeErrors"): + with self.assertRaisesRegex(TypeError, "variables left in"): + alias[int] + P = typing.ParamSpec('P') + C1 = Callable[P, T] + with self.assertRaisesRegex(TypeError, "many arguments for"): + C1[int, str, str] + with self.assertRaisesRegex(TypeError, "few arguments for"): + C1[int] + + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst b/Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst new file mode 100644 index 0000000000000..11db42350eb7e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst @@ -0,0 +1,6 @@ +:pep:`612` is now implemented purely in Python; builtin ``types.GenericAlias`` +objects no longer include ``typing.ParamSpec`` in ``__parameters__`` +(with the exception of ``collections.abc.Callable``\ 's ``GenericAlias``). +This means previously invalid uses of ``ParamSpec`` (such as +``list[P]``) which worked in earlier versions of Python 3.10 alpha, +will now raise ``TypeError`` during substitution. diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c index 8fae83b27297d..756a7ce474aee 100644 --- a/Objects/genericaliasobject.c +++ b/Objects/genericaliasobject.c @@ -156,25 +156,13 @@ ga_repr(PyObject *self) return NULL; } -/* Checks if a variable number of names are from typing.py. -* If any one of the names are found, return 1, else 0. -**/ -static inline int -is_typing_name(PyObject *obj, int num, ...) +// isinstance(obj, TypeVar) without importing typing.py. +// Returns -1 for errors. +static int +is_typevar(PyObject *obj) { - va_list names; - va_start(names, num); - PyTypeObject *type = Py_TYPE(obj); - int hit = 0; - for (int i = 0; i < num; ++i) { - if (!strcmp(type->tp_name, va_arg(names, const char *))) { - hit = 1; - break; - } - } - va_end(names); - if (!hit) { + if (strcmp(type->tp_name, "TypeVar") != 0) { return 0; } PyObject *module = PyObject_GetAttrString((PyObject *)type, "__module__"); @@ -184,24 +172,9 @@ is_typing_name(PyObject *obj, int num, ...) int res = PyUnicode_Check(module) && _PyUnicode_EqualToASCIIString(module, "typing"); Py_DECREF(module); - return res; } -// isinstance(obj, (TypeVar, ParamSpec)) without importing typing.py. -// Returns -1 for errors. -static inline int -is_typevarlike(PyObject *obj) -{ - return is_typing_name(obj, 2, "TypeVar", "ParamSpec"); -} - -static inline int -is_paramspec(PyObject *obj) -{ - return is_typing_name(obj, 1, "ParamSpec"); -} - // Index of item in self[:len], or -1 if not found (self is a tuple) static Py_ssize_t tuple_index(PyObject *self, Py_ssize_t len, PyObject *item) @@ -236,7 +209,7 @@ make_parameters(PyObject *args) Py_ssize_t iparam = 0; for (Py_ssize_t iarg = 0; iarg < nargs; iarg++) { PyObject *t = PyTuple_GET_ITEM(args, iarg); - int typevar = is_typevarlike(t); + int typevar = is_typevar(t); if (typevar < 0) { Py_DECREF(parameters); return NULL; @@ -306,14 +279,7 @@ subs_tvars(PyObject *obj, PyObject *params, PyObject **argitems) if (iparam >= 0) { arg = argitems[iparam]; } - // convert all the lists inside args to tuples to help - // with caching in other libaries - if (PyList_CheckExact(arg)) { - arg = PyList_AsTuple(arg); - } - else { - Py_INCREF(arg); - } + Py_INCREF(arg); PyTuple_SET_ITEM(subargs, i, arg); } @@ -348,19 +314,11 @@ ga_getitem(PyObject *self, PyObject *item) int is_tuple = PyTuple_Check(item); Py_ssize_t nitems = is_tuple ? PyTuple_GET_SIZE(item) : 1; PyObject **argitems = is_tuple ? &PyTuple_GET_ITEM(item, 0) : &item; - // A special case in PEP 612 where if X = Callable[P, int], - // then X[int, str] == X[[int, str]]. - if (nparams == 1 && nitems > 1 && is_tuple && - is_paramspec(PyTuple_GET_ITEM(alias->parameters, 0))) { - argitems = &item; - } - else { - if (nitems != nparams) { - return PyErr_Format(PyExc_TypeError, - "Too %s arguments for %R", - nitems > nparams ? "many" : "few", - self); - } + if (nitems != nparams) { + return PyErr_Format(PyExc_TypeError, + "Too %s arguments for %R", + nitems > nparams ? "many" : "few", + self); } /* Replace all type variables (specified by alias->parameters) with corresponding values specified by argitems. @@ -375,7 +333,7 @@ ga_getitem(PyObject *self, PyObject *item) } for (Py_ssize_t iarg = 0; iarg < nargs; iarg++) { PyObject *arg = PyTuple_GET_ITEM(alias->args, iarg); - int typevar = is_typevarlike(arg); + int typevar = is_typevar(arg); if (typevar < 0) { Py_DECREF(newargs); return NULL; @@ -384,13 +342,7 @@ ga_getitem(PyObject *self, PyObject *item) Py_ssize_t iparam = tuple_index(alias->parameters, nparams, arg); assert(iparam >= 0); arg = argitems[iparam]; - // convert lists to tuples to help with caching in other libaries. - if (PyList_CheckExact(arg)) { - arg = PyList_AsTuple(arg); - } - else { - Py_INCREF(arg); - } + Py_INCREF(arg); } else { arg = subs_tvars(arg, alias->parameters, argitems); From webhook-mailer at python.org Wed Apr 28 11:43:11 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 15:43:11 -0000 Subject: [Python-checkins] bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691) (GH-25692) Message-ID: https://github.com/python/cpython/commit/b52cc7c5f1a6c5b48d51cd718719a766c37d6e38 commit: b52cc7c5f1a6c5b48d51cd718719a766c37d6e38 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-28T17:43:01+02:00 summary: bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691) (GH-25692) (cherry picked from commit 2dc6b1789ec86dc80ea290fe33edd61140e47f6f) Co-authored-by: Irit Katriel Co-authored-by: Irit Katriel files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index ac731fefdd24b2..cdee716d6ac0ec 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -17,6 +17,13 @@ from test.test_doctest import _FakeInput from unittest.mock import patch +from bdb import Breakpoint + +def reset_Breakpoint(): + Breakpoint.next = 1 + Breakpoint.bplist = {} + Breakpoint.bpbynumber = [None] + class PdbTestInput(object): """Context manager that makes testing Pdb in doctests easier.""" @@ -227,10 +234,7 @@ def test_pdb_breakpoint_commands(): First, need to clear bdb state that might be left over from previous tests. Otherwise, the new breakpoints might get assigned different numbers. - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 - >>> Breakpoint.bplist = {} - >>> Breakpoint.bpbynumber = [None] + >>> reset_Breakpoint() Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because the breakpoint list outputs a tab for the "stop only" and "ignore next" @@ -699,8 +703,7 @@ def test_next_until_return_at_return_event(): ... test_function_2() ... end = 1 - >>> from bdb import Breakpoint - >>> Breakpoint.next = 1 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_function_2', ... 'continue', ... 'return', @@ -1127,6 +1130,7 @@ def test_pdb_next_command_in_generator_for_loop(): ... print('value', i) ... x = 123 + >>> reset_Breakpoint() >>> with PdbTestInput(['break test_gen', ... 'continue', ... 'next', @@ -1137,7 +1141,7 @@ def test_pdb_next_command_in_generator_for_loop(): > (3)test_function() -> for i in test_gen(): (Pdb) break test_gen - Breakpoint 6 at :1 + Breakpoint 1 at :1 (Pdb) continue > (2)test_gen() -> yield 0 From webhook-mailer at python.org Wed Apr 28 11:50:26 2021 From: webhook-mailer at python.org (zooba) Date: Wed, 28 Apr 2021 15:50:26 -0000 Subject: [Python-checkins] bpo-43757: Make pathlib use os.path.realpath() to resolve symlinks in a path (GH-25264) Message-ID: https://github.com/python/cpython/commit/baecfbd849dbf42360d3a84af6cc13160838f24d commit: baecfbd849dbf42360d3a84af6cc13160838f24d branch: master author: Barney Gale committer: zooba date: 2021-04-28T16:50:17+01:00 summary: bpo-43757: Make pathlib use os.path.realpath() to resolve symlinks in a path (GH-25264) Also adds a new "strict" argument to realpath() to avoid changing the default behaviour of pathlib while sharing the implementation. files: A Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst M Doc/library/os.path.rst M Lib/ntpath.py M Lib/pathlib.py M Lib/posixpath.py M Lib/test/test_ntpath.py M Lib/test/test_posixpath.py diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index 4cab3113c9e4e..d06d9ce8c9e3d 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -344,15 +344,24 @@ the :mod:`glob` module.) Accepts a :term:`path-like object`. -.. function:: realpath(path) +.. function:: realpath(path, *, strict=False) Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path (if they are supported by the operating system). + If a path doesn't exist or a symlink loop is encountered, and *strict* is + ``True``, :exc:`OSError` is raised. If *strict* is ``False``, the path is + resolved as far as possible and any remainder is appended without checking + whether it exists. + .. note:: - When symbolic link cycles occur, the returned path will be one member of - the cycle, but no guarantee is made about which member that will be. + This function emulates the operating system's procedure for making a path + canonical, which differs slightly between Windows and UNIX with respect + to how links and subsequent path components interact. + + Operating system APIs make paths canonical as needed, so it's not + normally necessary to call this function. .. versionchanged:: 3.6 Accepts a :term:`path-like object`. @@ -360,6 +369,9 @@ the :mod:`glob` module.) .. versionchanged:: 3.8 Symbolic links and junctions are now resolved on Windows. + .. versionchanged:: 3.10 + The *strict* parameter was added. + .. function:: relpath(path, start=os.curdir) diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 5ae8079074cd9..527c7ae1938fb 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -635,7 +635,7 @@ def _getfinalpathname_nonstrict(path): tail = join(name, tail) if tail else name return tail - def realpath(path): + def realpath(path, *, strict=False): path = normpath(path) if isinstance(path, bytes): prefix = b'\\\\?\\' @@ -660,6 +660,8 @@ def realpath(path): path = _getfinalpathname(path) initial_winerror = 0 except OSError as ex: + if strict: + raise initial_winerror = ex.winerror path = _getfinalpathname_nonstrict(path) # The path returned by _getfinalpathname will always start with \\?\ - diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 37934c6038e1d..073fce82ad570 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -14,12 +14,6 @@ from urllib.parse import quote_from_bytes as urlquote_from_bytes -if os.name == 'nt': - from nt import _getfinalpathname -else: - _getfinalpathname = None - - __all__ = [ "PurePath", "PurePosixPath", "PureWindowsPath", "Path", "PosixPath", "WindowsPath", @@ -29,14 +23,17 @@ # Internals # +_WINERROR_NOT_READY = 21 # drive exists but is not accessible +_WINERROR_INVALID_NAME = 123 # fix for bpo-35306 +_WINERROR_CANT_RESOLVE_FILENAME = 1921 # broken symlink pointing to itself + # EBADF - guard against macOS `stat` throwing EBADF _IGNORED_ERROS = (ENOENT, ENOTDIR, EBADF, ELOOP) _IGNORED_WINERRORS = ( - 21, # ERROR_NOT_READY - drive exists but is not accessible - 123, # ERROR_INVALID_NAME - fix for bpo-35306 - 1921, # ERROR_CANT_RESOLVE_FILENAME - fix for broken symlink pointing to itself -) + _WINERROR_NOT_READY, + _WINERROR_INVALID_NAME, + _WINERROR_CANT_RESOLVE_FILENAME) def _ignore_error(exception): return (getattr(exception, 'errno', None) in _IGNORED_ERROS or @@ -186,30 +183,6 @@ def casefold_parts(self, parts): def compile_pattern(self, pattern): return re.compile(fnmatch.translate(pattern), re.IGNORECASE).fullmatch - def resolve(self, path, strict=False): - s = str(path) - if not s: - return path._accessor.getcwd() - previous_s = None - if _getfinalpathname is not None: - if strict: - return self._ext_to_normal(_getfinalpathname(s)) - else: - tail_parts = [] # End of the path after the first one not found - while True: - try: - s = self._ext_to_normal(_getfinalpathname(s)) - except FileNotFoundError: - previous_s = s - s, tail = os.path.split(s) - tail_parts.append(tail) - if previous_s == s: - return path - else: - return os.path.join(s, *reversed(tail_parts)) - # Means fallback on absolute - return None - def _split_extended_path(self, s, ext_prefix=ext_namespace_prefix): prefix = '' if s.startswith(ext_prefix): @@ -220,10 +193,6 @@ def _split_extended_path(self, s, ext_prefix=ext_namespace_prefix): s = '\\' + s[3:] return prefix, s - def _ext_to_normal(self, s): - # Turn back an extended path into a normal DOS-like path - return self._split_extended_path(s)[1] - def is_reserved(self, parts): # NOTE: the rules for reserved names seem somewhat complicated # (e.g. r"..\NUL" is reserved but not r"foo\NUL"). @@ -281,54 +250,6 @@ def casefold_parts(self, parts): def compile_pattern(self, pattern): return re.compile(fnmatch.translate(pattern)).fullmatch - def resolve(self, path, strict=False): - sep = self.sep - accessor = path._accessor - seen = {} - def _resolve(path, rest): - if rest.startswith(sep): - path = '' - - for name in rest.split(sep): - if not name or name == '.': - # current dir - continue - if name == '..': - # parent dir - path, _, _ = path.rpartition(sep) - continue - if path.endswith(sep): - newpath = path + name - else: - newpath = path + sep + name - if newpath in seen: - # Already seen this path - path = seen[newpath] - if path is not None: - # use cached value - continue - # The symlink is not resolved, so we must have a symlink loop. - raise RuntimeError("Symlink loop from %r" % newpath) - # Resolve the symbolic link - try: - target = accessor.readlink(newpath) - except OSError as e: - if e.errno != EINVAL and strict: - raise - # Not a symlink, or non-strict mode. We just leave the path - # untouched. - path = newpath - else: - seen[newpath] = None # not resolved symlink - path = _resolve(path, target) - seen[newpath] = path # resolved symlink - - return path - # NOTE: according to POSIX, getcwd() cannot contain path components - # which are symlinks. - base = '' if path.is_absolute() else accessor.getcwd() - return _resolve(base, str(path)) or sep - def is_reserved(self, parts): return False @@ -424,6 +345,8 @@ def group(self, path): expanduser = staticmethod(os.path.expanduser) + realpath = staticmethod(os.path.realpath) + _normal_accessor = _NormalAccessor() @@ -1132,15 +1055,27 @@ def resolve(self, strict=False): normalizing it (for example turning slashes into backslashes under Windows). """ - s = self._flavour.resolve(self, strict=strict) - if s is None: - # No symlink resolution => for consistency, raise an error if - # the path doesn't exist or is forbidden - self.stat() - s = str(self.absolute()) - # Now we have no symlinks in the path, it's safe to normalize it. - normed = self._flavour.pathmod.normpath(s) - return self._from_parts((normed,)) + + def check_eloop(e): + winerror = getattr(e, 'winerror', 0) + if e.errno == ELOOP or winerror == _WINERROR_CANT_RESOLVE_FILENAME: + raise RuntimeError("Symlink loop from %r" % e.filename) + + try: + s = self._accessor.realpath(self, strict=strict) + except OSError as e: + check_eloop(e) + raise + p = self._from_parts((s,)) + + # In non-strict mode, realpath() doesn't raise on symlink loops. + # Ensure we get an exception by calling stat() + if not strict: + try: + p.stat() + except OSError as e: + check_eloop(e) + return p def stat(self, *, follow_symlinks=True): """ diff --git a/Lib/posixpath.py b/Lib/posixpath.py index 62afbd0ccf0f0..259baa64b193b 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -387,16 +387,16 @@ def abspath(path): # Return a canonical path (i.e. the absolute location of a file on the # filesystem). -def realpath(filename): +def realpath(filename, *, strict=False): """Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path.""" filename = os.fspath(filename) - path, ok = _joinrealpath(filename[:0], filename, {}) + path, ok = _joinrealpath(filename[:0], filename, strict, {}) return abspath(path) # Join two paths, normalizing and eliminating any symbolic links # encountered in the second path. -def _joinrealpath(path, rest, seen): +def _joinrealpath(path, rest, strict, seen): if isinstance(path, bytes): sep = b'/' curdir = b'.' @@ -425,7 +425,15 @@ def _joinrealpath(path, rest, seen): path = pardir continue newpath = join(path, name) - if not islink(newpath): + try: + st = os.lstat(newpath) + except OSError: + if strict: + raise + is_link = False + else: + is_link = stat.S_ISLNK(st.st_mode) + if not is_link: path = newpath continue # Resolve the symbolic link @@ -436,10 +444,14 @@ def _joinrealpath(path, rest, seen): # use cached value continue # The symlink is not resolved, so we must have a symlink loop. - # Return already resolved part + rest of the path unchanged. - return join(newpath, rest), False + if strict: + # Raise OSError(errno.ELOOP) + os.stat(newpath) + else: + # Return already resolved part + rest of the path unchanged. + return join(newpath, rest), False seen[newpath] = None # not resolved symlink - path, ok = _joinrealpath(path, os.readlink(newpath), seen) + path, ok = _joinrealpath(path, os.readlink(newpath), strict, seen) if not ok: return join(path, rest), False seen[newpath] = path # resolved symlink diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py index f97aca5f94f57..661c59d617163 100644 --- a/Lib/test/test_ntpath.py +++ b/Lib/test/test_ntpath.py @@ -269,6 +269,17 @@ def test_realpath_basic(self): self.assertPathEqual(ntpath.realpath(os.fsencode(ABSTFN + "1")), os.fsencode(ABSTFN)) + @os_helper.skip_unless_symlink + @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') + def test_realpath_strict(self): + # Bug #43757: raise FileNotFoundError in strict mode if we encounter + # a path that does not exist. + ABSTFN = ntpath.abspath(os_helper.TESTFN) + os.symlink(ABSTFN + "1", ABSTFN) + self.addCleanup(os_helper.unlink, ABSTFN) + self.assertRaises(FileNotFoundError, ntpath.realpath, ABSTFN, strict=True) + self.assertRaises(FileNotFoundError, ntpath.realpath, ABSTFN + "2", strict=True) + @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_relative(self): @@ -340,8 +351,9 @@ def test_realpath_broken_symlinks(self): @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_symlink_loops(self): - # Symlink loops are non-deterministic as to which path is returned, but - # it will always be the fully resolved path of one member of the cycle + # Symlink loops in non-strict mode are non-deterministic as to which + # path is returned, but it will always be the fully resolved path of + # one member of the cycle ABSTFN = ntpath.abspath(os_helper.TESTFN) self.addCleanup(os_helper.unlink, ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN + "1") @@ -383,6 +395,50 @@ def test_realpath_symlink_loops(self): # Test using relative path as well. self.assertPathEqual(ntpath.realpath(ntpath.basename(ABSTFN)), ABSTFN) + @os_helper.skip_unless_symlink + @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') + def test_realpath_symlink_loops_strict(self): + # Symlink loops raise OSError in strict mode + ABSTFN = ntpath.abspath(os_helper.TESTFN) + self.addCleanup(os_helper.unlink, ABSTFN) + self.addCleanup(os_helper.unlink, ABSTFN + "1") + self.addCleanup(os_helper.unlink, ABSTFN + "2") + self.addCleanup(os_helper.unlink, ABSTFN + "y") + self.addCleanup(os_helper.unlink, ABSTFN + "c") + self.addCleanup(os_helper.unlink, ABSTFN + "a") + + os.symlink(ABSTFN, ABSTFN) + self.assertRaises(OSError, ntpath.realpath, ABSTFN, strict=True) + + os.symlink(ABSTFN + "1", ABSTFN + "2") + os.symlink(ABSTFN + "2", ABSTFN + "1") + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1", strict=True) + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "2", strict=True) + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\x", strict=True) + # Windows eliminates '..' components before resolving links, so the + # following call is not expected to raise. + self.assertPathEqual(ntpath.realpath(ABSTFN + "1\\..", strict=True), + ntpath.dirname(ABSTFN)) + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\..\\x", strict=True) + os.symlink(ABSTFN + "x", ABSTFN + "y") + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\..\\" + + ntpath.basename(ABSTFN) + "y", + strict=True) + self.assertRaises(OSError, ntpath.realpath, + ABSTFN + "1\\..\\" + ntpath.basename(ABSTFN) + "1", + strict=True) + + os.symlink(ntpath.basename(ABSTFN) + "a\\b", ABSTFN + "a") + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "a", strict=True) + + os.symlink("..\\" + ntpath.basename(ntpath.dirname(ABSTFN)) + + "\\" + ntpath.basename(ABSTFN) + "c", ABSTFN + "c") + self.assertRaises(OSError, ntpath.realpath, ABSTFN + "c", strict=True) + + # Test using relative path as well. + self.assertRaises(OSError, ntpath.realpath, ntpath.basename(ABSTFN), + strict=True) + @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_symlink_prefix(self): diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index e18d01f4635a3..8d398ec010354 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -355,6 +355,19 @@ def test_realpath_basic(self): finally: os_helper.unlink(ABSTFN) + @unittest.skipUnless(hasattr(os, "symlink"), + "Missing symlink implementation") + @skip_if_ABSTFN_contains_backslash + def test_realpath_strict(self): + # Bug #43757: raise FileNotFoundError in strict mode if we encounter + # a path that does not exist. + try: + os.symlink(ABSTFN+"1", ABSTFN) + self.assertRaises(FileNotFoundError, realpath, ABSTFN, strict=True) + self.assertRaises(FileNotFoundError, realpath, ABSTFN + "2", strict=True) + finally: + os_helper.unlink(ABSTFN) + @unittest.skipUnless(hasattr(os, "symlink"), "Missing symlink implementation") @skip_if_ABSTFN_contains_backslash @@ -370,7 +383,7 @@ def test_realpath_relative(self): @skip_if_ABSTFN_contains_backslash def test_realpath_symlink_loops(self): # Bug #930024, return the path unchanged if we get into an infinite - # symlink loop. + # symlink loop in non-strict mode (default). try: os.symlink(ABSTFN, ABSTFN) self.assertEqual(realpath(ABSTFN), ABSTFN) @@ -407,6 +420,48 @@ def test_realpath_symlink_loops(self): os_helper.unlink(ABSTFN+"c") os_helper.unlink(ABSTFN+"a") + @unittest.skipUnless(hasattr(os, "symlink"), + "Missing symlink implementation") + @skip_if_ABSTFN_contains_backslash + def test_realpath_symlink_loops_strict(self): + # Bug #43757, raise OSError if we get into an infinite symlink loop in + # strict mode. + try: + os.symlink(ABSTFN, ABSTFN) + self.assertRaises(OSError, realpath, ABSTFN, strict=True) + + os.symlink(ABSTFN+"1", ABSTFN+"2") + os.symlink(ABSTFN+"2", ABSTFN+"1") + self.assertRaises(OSError, realpath, ABSTFN+"1", strict=True) + self.assertRaises(OSError, realpath, ABSTFN+"2", strict=True) + + self.assertRaises(OSError, realpath, ABSTFN+"1/x", strict=True) + self.assertRaises(OSError, realpath, ABSTFN+"1/..", strict=True) + self.assertRaises(OSError, realpath, ABSTFN+"1/../x", strict=True) + os.symlink(ABSTFN+"x", ABSTFN+"y") + self.assertRaises(OSError, realpath, + ABSTFN+"1/../" + basename(ABSTFN) + "y", strict=True) + self.assertRaises(OSError, realpath, + ABSTFN+"1/../" + basename(ABSTFN) + "1", strict=True) + + os.symlink(basename(ABSTFN) + "a/b", ABSTFN+"a") + self.assertRaises(OSError, realpath, ABSTFN+"a", strict=True) + + os.symlink("../" + basename(dirname(ABSTFN)) + "/" + + basename(ABSTFN) + "c", ABSTFN+"c") + self.assertRaises(OSError, realpath, ABSTFN+"c", strict=True) + + # Test using relative path as well. + with os_helper.change_cwd(dirname(ABSTFN)): + self.assertRaises(OSError, realpath, basename(ABSTFN), strict=True) + finally: + os_helper.unlink(ABSTFN) + os_helper.unlink(ABSTFN+"1") + os_helper.unlink(ABSTFN+"2") + os_helper.unlink(ABSTFN+"y") + os_helper.unlink(ABSTFN+"c") + os_helper.unlink(ABSTFN+"a") + @unittest.skipUnless(hasattr(os, "symlink"), "Missing symlink implementation") @skip_if_ABSTFN_contains_backslash diff --git a/Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst b/Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst new file mode 100644 index 0000000000000..593846ec15c5b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst @@ -0,0 +1,3 @@ +:func:`os.path.realpath` now accepts a *strict* keyword-only argument. +When set to ``True``, :exc:`OSError` is raised if a path doesn't exist +or a symlink loop is encountered. From webhook-mailer at python.org Wed Apr 28 12:12:30 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 16:12:30 -0000 Subject: [Python-checkins] bpo-28254: Add a C-API for controlling the GC state (GH-25687) Message-ID: https://github.com/python/cpython/commit/3cc481b9de43c234889c8010e7da3af7c0f42319 commit: 3cc481b9de43c234889c8010e7da3af7c0f42319 branch: master author: scoder committer: vstinner date: 2021-04-28T18:12:16+02:00 summary: bpo-28254: Add a C-API for controlling the GC state (GH-25687) Add new C-API functions to control the state of the garbage collector: PyGC_Enable(), PyGC_Disable(), PyGC_IsEnabled(), corresponding to the functions in the gc module. Co-authored-by: Pablo Galindo Co-authored-by: Victor Stinner files: A Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst M Doc/c-api/gcsupport.rst M Doc/data/stable_abi.dat M Doc/whatsnew/3.10.rst M Include/objimpl.h M Modules/_testcapimodule.c M Modules/gcmodule.c diff --git a/Doc/c-api/gcsupport.rst b/Doc/c-api/gcsupport.rst index eee114c19d5904..55ed9d4f7fad48 100644 --- a/Doc/c-api/gcsupport.rst +++ b/Doc/c-api/gcsupport.rst @@ -173,3 +173,46 @@ if the object is immutable. this method (don't just call :c:func:`Py_DECREF` on a reference). The collector will call this method if it detects that this object is involved in a reference cycle. + + +Controlling the Garbage Collector State +--------------------------------------- + +The C-API provides the following functions for controlling +garbage collection runs. + +.. c:function:: Py_ssize_t PyGC_Collect(void) + + Perform a full garbage collection, if the garbage collector is enabled. + (Note that :func:`gc.collect` runs it unconditionally.) + + Returns the number of collected + unreachable objects which cannot + be collected. + If the garbage collector is disabled or already collecting, + returns ``0`` immediately. + Errors during garbage collection are passed to :data:`sys.unraisablehook`. + This function does not raise exceptions. + + +.. c:function:: int PyGC_Enable(void) + + Enable the garbage collector: similar to :func:`gc.enable`. + Returns the previous state, 0 for disabled and 1 for enabled. + + .. versionadded:: 3.10 + + +.. c:function:: int PyGC_Disable(void) + + Disable the garbage collector: similar to :func:`gc.disable`. + Returns the previous state, 0 for disabled and 1 for enabled. + + .. versionadded:: 3.10 + + +.. c:function:: int PyGC_IsEnabled(void) + + Query the state of the garbage collector: similar to :func:`gc.isenabled`. + Returns the current state, 0 for disabled and 1 for enabled. + + .. versionadded:: 3.10 diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index cdc7160250243b..491a5fbb96f5a5 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -268,6 +268,9 @@ PyFrame_GetLineNumber PyFrozenSet_New PyFrozenSet_Type PyGC_Collect +PyGC_Disable +PyGC_Enable +PyGC_IsEnabled PyGILState_Ensure PyGILState_GetThisThreadState PyGILState_Release diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 2d8bb285fe981b..37c1b8a0cb2ebc 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1697,6 +1697,13 @@ New Features singleton or the ``False`` singleton. (Contributed by Victor Stinner in :issue:`43753`.) +* Add new functions to quickly control the garbage collector from C code: + :c:func:`PyGC_Enable()`, + :c:func:`PyGC_Disable()`, + :c:func:`PyGC_IsEnabled()`. + These functions allow to activate, deactivate and query the state of the garbage collector from C code without + having to import the :mod:`gc` module. + Porting to Python 3.10 ---------------------- diff --git a/Include/objimpl.h b/Include/objimpl.h index 1408d051ba7efe..689c42b7475c89 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -150,8 +150,12 @@ PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); * ========================== */ -/* C equivalent of gc.collect() which ignores the state of gc.enabled. */ +/* C equivalent of gc.collect(). */ PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void); +/* C API for controlling the state of the garbage collector */ +PyAPI_FUNC(int) PyGC_Enable(void); +PyAPI_FUNC(int) PyGC_Disable(void); +PyAPI_FUNC(int) PyGC_IsEnabled(void); /* Test if a type has a GC head */ #define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) diff --git a/Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst b/Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst new file mode 100644 index 00000000000000..015acc9803d474 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst @@ -0,0 +1,3 @@ +Add new C-API functions to control the state of the garbage collector: +:c:func:`PyGC_Enable()`, :c:func:`PyGC_Disable()`, :c:func:`PyGC_IsEnabled()`, +corresponding to the functions in the :mod:`gc` module. diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index db62aea421c806..26ebacba642a4f 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -144,6 +144,67 @@ test_sizeof_c_types(PyObject *self, PyObject *Py_UNUSED(ignored)) #endif } +static PyObject* +test_gc_control(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + int orig_enabled = PyGC_IsEnabled(); + const char* msg = "ok"; + int old_state; + + old_state = PyGC_Enable(); + msg = "Enable(1)"; + if (old_state != orig_enabled) { + goto failed; + } + msg = "IsEnabled(1)"; + if (!PyGC_IsEnabled()) { + goto failed; + } + + old_state = PyGC_Disable(); + msg = "disable(2)"; + if (!old_state) { + goto failed; + } + msg = "IsEnabled(2)"; + if (PyGC_IsEnabled()) { + goto failed; + } + + old_state = PyGC_Enable(); + msg = "enable(3)"; + if (old_state) { + goto failed; + } + msg = "IsEnabled(3)"; + if (!PyGC_IsEnabled()) { + goto failed; + } + + if (!orig_enabled) { + old_state = PyGC_Disable(); + msg = "disable(4)"; + if (old_state) { + goto failed; + } + msg = "IsEnabled(4)"; + if (PyGC_IsEnabled()) { + goto failed; + } + } + + Py_RETURN_NONE; + +failed: + /* Try to clean up if we can. */ + if (orig_enabled) { + PyGC_Enable(); + } else { + PyGC_Disable(); + } + PyErr_Format(TestError, "GC control failed in %s", msg); + return NULL; +} static PyObject* test_list_api(PyObject *self, PyObject *Py_UNUSED(ignored)) @@ -5544,6 +5605,7 @@ static PyMethodDef TestMethods[] = { {"PyDateTime_DATE_GET", test_PyDateTime_DATE_GET, METH_O}, {"PyDateTime_TIME_GET", test_PyDateTime_TIME_GET, METH_O}, {"PyDateTime_DELTA_GET", test_PyDateTime_DELTA_GET, METH_O}, + {"test_gc_control", test_gc_control, METH_NOARGS}, {"test_list_api", test_list_api, METH_NOARGS}, {"test_dict_iteration", test_dict_iteration, METH_NOARGS}, {"dict_getitem_knownhash", dict_getitem_knownhash, METH_VARARGS}, diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index d6b51426c4e2d8..e5e5aa3287b0d6 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1484,8 +1484,7 @@ static PyObject * gc_enable_impl(PyObject *module) /*[clinic end generated code: output=45a427e9dce9155c input=81ac4940ca579707]*/ { - GCState *gcstate = get_gc_state(); - gcstate->enabled = 1; + PyGC_Enable(); Py_RETURN_NONE; } @@ -1499,8 +1498,7 @@ static PyObject * gc_disable_impl(PyObject *module) /*[clinic end generated code: output=97d1030f7aa9d279 input=8c2e5a14e800d83b]*/ { - GCState *gcstate = get_gc_state(); - gcstate->enabled = 0; + PyGC_Disable(); Py_RETURN_NONE; } @@ -1514,8 +1512,7 @@ static int gc_isenabled_impl(PyObject *module) /*[clinic end generated code: output=1874298331c49130 input=30005e0422373b31]*/ { - GCState *gcstate = get_gc_state(); - return gcstate->enabled; + return PyGC_IsEnabled(); } /*[clinic input] @@ -2053,6 +2050,32 @@ PyInit_gc(void) return PyModuleDef_Init(&gcmodule); } +/* C API for controlling the state of the garbage collector */ +int +PyGC_Enable(void) +{ + GCState *gcstate = get_gc_state(); + int old_state = gcstate->enabled; + gcstate->enabled = 1; + return old_state; +} + +int +PyGC_Disable(void) +{ + GCState *gcstate = get_gc_state(); + int old_state = gcstate->enabled; + gcstate->enabled = 0; + return old_state; +} + +int +PyGC_IsEnabled(void) +{ + GCState *gcstate = get_gc_state(); + return gcstate->enabled; +} + /* Public API to invoke gc.collect() from C */ Py_ssize_t PyGC_Collect(void) From webhook-mailer at python.org Wed Apr 28 12:20:50 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 16:20:50 -0000 Subject: [Python-checkins] bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) (GH-25508) Message-ID: https://github.com/python/cpython/commit/0252ce35712f4a12e824fb8b40a867ec3460443e commit: 0252ce35712f4a12e824fb8b40a867ec3460443e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: vstinner date: 2021-04-28T18:20:40+02:00 summary: bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) (GH-25508) (cherry picked from commit 7b86e47617d81a4b14d929743425f448971e8c86) Co-authored-by: Steve Dower Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst M Doc/library/sys.rst M Modules/_xxsubinterpretersmodule.c diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index cb2f254b1fbe4c..6b23b6f0ab74aa 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -26,12 +26,12 @@ always available. .. function:: addaudithook(hook) Append the callable *hook* to the list of active auditing hooks for the - current interpreter. + current (sub)interpreter. When an auditing event is raised through the :func:`sys.audit` function, each hook will be called in the order it was added with the event name and the tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are - called first, followed by hooks added in the current interpreter. Hooks + called first, followed by hooks added in the current (sub)interpreter. Hooks can then log the event, raise an exception to abort the operation, or terminate the process entirely. diff --git a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst new file mode 100644 index 00000000000000..e38dc169def96e --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst @@ -0,0 +1,3 @@ +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c index de11c090870f94..314059d10828cb 100644 --- a/Modules/_xxsubinterpretersmodule.c +++ b/Modules/_xxsubinterpretersmodule.c @@ -2010,7 +2010,7 @@ interp_create(PyObject *self, PyObject *args, PyObject *kwds) } // Create and initialize the new interpreter. - PyThreadState *save_tstate = PyThreadState_Swap(NULL); + PyThreadState *save_tstate = PyThreadState_Get(); // XXX Possible GILState issues? PyThreadState *tstate = _Py_NewInterpreter(isolated); PyThreadState_Swap(save_tstate); From webhook-mailer at python.org Wed Apr 28 13:02:51 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 17:02:51 -0000 Subject: [Python-checkins] bpo-43908: Add Py_TPFLAGS_IMMUTABLETYPE flag (GH-25520) Message-ID: https://github.com/python/cpython/commit/3b52c8d66b25415f09478ab43f93d59a3547dc13 commit: 3b52c8d66b25415f09478ab43f93d59a3547dc13 branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-28T19:02:42+02:00 summary: bpo-43908: Add Py_TPFLAGS_IMMUTABLETYPE flag (GH-25520) Introduce Py_TPFLAGS_IMMUTABLETYPE flag for immutable type objects, and modify PyType_Ready() to set it for static types. Co-authored-by: Victor Stinner files: A Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst M Doc/c-api/typeobj.rst M Include/object.h M Objects/typeobject.c diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 9efe3aac2e1c9..4c75a12194d18 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -1177,6 +1177,18 @@ and :c:type:`PyType_Type` effectively act as defaults.) .. versionadded:: 3.10 + .. data:: Py_TPFLAGS_IMMUTABLETYPE + + This bit is set for type objects that are immutable: type attributes cannot be set nor deleted. + + :c:func:`PyType_Ready` automatically applies this flag to static types. + + **Inheritance:** + + This flag is not inherited. + + .. versionadded:: 3.10 + .. c:member:: const char* PyTypeObject.tp_doc diff --git a/Include/object.h b/Include/object.h index 695f01564282c..d8476f9213760 100644 --- a/Include/object.h +++ b/Include/object.h @@ -320,6 +320,9 @@ Code can use PyType_HasFeature(type_ob, flag_value) to test whether the given type object has a specified feature. */ +/* Set if the type object is immutable: type attributes cannot be set nor deleted */ +#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8) + /* Set if the type object is dynamically allocated */ #define Py_TPFLAGS_HEAPTYPE (1UL << 9) diff --git a/Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst b/Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst new file mode 100644 index 0000000000000..0413c20a1b6b2 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst @@ -0,0 +1,3 @@ +Introduce :const:`Py_TPFLAGS_IMMUTABLETYPE` flag for immutable type objects, and +modify :c:func:`PyType_Ready` to set it for static types. Patch by +Erlend E. Aasland. diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 254d12cc97014..e1c8be4b81545 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3875,7 +3875,7 @@ static int type_setattro(PyTypeObject *type, PyObject *name, PyObject *value) { int res; - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + if (type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) { PyErr_Format( PyExc_TypeError, "can't set attributes of built-in/extension type '%s'", @@ -6229,6 +6229,11 @@ PyType_Ready(PyTypeObject *type) type->tp_flags |= Py_TPFLAGS_READYING; + /* Historically, all static types were immutable. See bpo-43908 */ + if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + type->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; + } + if (type_ready(type) < 0) { type->tp_flags &= ~Py_TPFLAGS_READYING; return -1; From webhook-mailer at python.org Wed Apr 28 13:09:34 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 28 Apr 2021 17:09:34 -0000 Subject: [Python-checkins] bpo-28254: _posixsubprocess uses PyGC_Enable/PyGC_Disable (GH-25693) Message-ID: https://github.com/python/cpython/commit/103d5e420dd90489933ad9da8bb1d6008773384d commit: 103d5e420dd90489933ad9da8bb1d6008773384d branch: master author: Victor Stinner committer: vstinner date: 2021-04-28T19:09:29+02:00 summary: bpo-28254: _posixsubprocess uses PyGC_Enable/PyGC_Disable (GH-25693) files: M Lib/test/test_subprocess.py M Modules/_posixsubprocess.c diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 7c79365f41191..27ccd3e5cb3a8 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -2147,8 +2147,6 @@ def raise_it(): def test_preexec_gc_module_failure(self): # This tests the code that disables garbage collection if the child # process will execute any Python. - def raise_runtime_error(): - raise RuntimeError("this shouldn't escape") enabled = gc.isenabled() orig_gc_disable = gc.disable orig_gc_isenabled = gc.isenabled @@ -2165,16 +2163,6 @@ def raise_runtime_error(): subprocess.call([sys.executable, '-c', ''], preexec_fn=lambda: None) self.assertTrue(gc.isenabled(), "Popen left gc disabled.") - - gc.disable = raise_runtime_error - self.assertRaises(RuntimeError, subprocess.Popen, - [sys.executable, '-c', ''], - preexec_fn=lambda: None) - - del gc.isenabled # force an AttributeError - self.assertRaises(AttributeError, subprocess.Popen, - [sys.executable, '-c', ''], - preexec_fn=lambda: None) finally: gc.disable = orig_gc_disable gc.isenabled = orig_gc_isenabled diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 3b0651620e551..a58159a277bea 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -69,47 +69,8 @@ #define POSIX_CALL(call) do { if ((call) == -1) goto error; } while (0) -typedef struct { - PyObject* disable; - PyObject* enable; - PyObject* isenabled; -} _posixsubprocessstate; - static struct PyModuleDef _posixsubprocessmodule; -static inline _posixsubprocessstate* -get_posixsubprocess_state(PyObject *module) -{ - void *state = PyModule_GetState(module); - assert(state != NULL); - return (_posixsubprocessstate *)state; -} - -/* If gc was disabled, call gc.enable(). Ignore errors. */ -static void -_enable_gc(int need_to_reenable_gc, PyObject *gc_module, _posixsubprocessstate *state) -{ - PyObject *result; - PyObject *exctype, *val, *tb; - - if (need_to_reenable_gc) { - PyErr_Fetch(&exctype, &val, &tb); - result = PyObject_CallMethodNoArgs( - gc_module, state->enable); - if (result == NULL) { - /* We might have created a child process at this point, we - * we have no good way to handle a failure to reenable GC - * and return information about the child process. */ - PyErr_Print(); - } - Py_XDECREF(result); - if (exctype != NULL) { - PyErr_Restore(exctype, val, tb); - } - } -} - - /* Convert ASCII to a positive int, no libc call. no overflow. -1 on error. */ static int _pos_int_from_ascii(const char *name) @@ -780,7 +741,6 @@ subprocess_fork_exec(PyObject *module, PyObject *args) Py_ssize_t arg_num, num_groups = 0; int need_after_fork = 0; int saved_errno = 0; - _posixsubprocessstate *state = get_posixsubprocess_state(module); if (!PyArg_ParseTuple( args, "OOpO!OOiiiiiiiiiiOOOiO:fork_exec", @@ -820,30 +780,7 @@ subprocess_fork_exec(PyObject *module, PyObject *args) /* We need to call gc.disable() when we'll be calling preexec_fn */ if (preexec_fn != Py_None) { - PyObject *result; - - gc_module = PyImport_ImportModule("gc"); - if (gc_module == NULL) - return NULL; - result = PyObject_CallMethodNoArgs( - gc_module, state->isenabled); - if (result == NULL) { - Py_DECREF(gc_module); - return NULL; - } - need_to_reenable_gc = PyObject_IsTrue(result); - Py_DECREF(result); - if (need_to_reenable_gc == -1) { - Py_DECREF(gc_module); - return NULL; - } - result = PyObject_CallMethodNoArgs( - gc_module, state->disable); - if (result == NULL) { - Py_DECREF(gc_module); - return NULL; - } - Py_DECREF(result); + need_to_reenable_gc = PyGC_Disable(); } exec_array = _PySequence_BytesToCharpArray(executable_list); @@ -1068,7 +1005,9 @@ subprocess_fork_exec(PyObject *module, PyObject *args) if (exec_array) _Py_FreeCharPArray(exec_array); - _enable_gc(need_to_reenable_gc, gc_module, state); + if (need_to_reenable_gc) { + PyGC_Enable(); + } Py_XDECREF(gc_module); return pid == -1 ? NULL : PyLong_FromPid(pid); @@ -1108,67 +1047,22 @@ Raises: Only on an error in the parent process.\n\ PyDoc_STRVAR(module_doc, "A POSIX helper for the subprocess module."); -static int -_posixsubprocess_exec(PyObject *module) -{ - _posixsubprocessstate *state = get_posixsubprocess_state(module); - - state->disable = PyUnicode_InternFromString("disable"); - if (state->disable == NULL) { - return -1; - } - - state->enable = PyUnicode_InternFromString("enable"); - if (state->enable == NULL) { - return -1; - } - - state->isenabled = PyUnicode_InternFromString("isenabled"); - if (state->isenabled == NULL) { - return -1; - } - - return 0; -} - static PyMethodDef module_methods[] = { {"fork_exec", subprocess_fork_exec, METH_VARARGS, subprocess_fork_exec_doc}, {NULL, NULL} /* sentinel */ }; static PyModuleDef_Slot _posixsubprocess_slots[] = { - {Py_mod_exec, _posixsubprocess_exec}, {0, NULL} }; -static int _posixsubprocess_traverse(PyObject *m, visitproc visit, void *arg) { - Py_VISIT(get_posixsubprocess_state(m)->disable); - Py_VISIT(get_posixsubprocess_state(m)->enable); - Py_VISIT(get_posixsubprocess_state(m)->isenabled); - return 0; -} - -static int _posixsubprocess_clear(PyObject *m) { - Py_CLEAR(get_posixsubprocess_state(m)->disable); - Py_CLEAR(get_posixsubprocess_state(m)->enable); - Py_CLEAR(get_posixsubprocess_state(m)->isenabled); - return 0; -} - -static void _posixsubprocess_free(void *m) { - _posixsubprocess_clear((PyObject *)m); -} - static struct PyModuleDef _posixsubprocessmodule = { PyModuleDef_HEAD_INIT, .m_name = "_posixsubprocess", .m_doc = module_doc, - .m_size = sizeof(_posixsubprocessstate), + .m_size = 0, .m_methods = module_methods, .m_slots = _posixsubprocess_slots, - .m_traverse = _posixsubprocess_traverse, - .m_clear = _posixsubprocess_clear, - .m_free = _posixsubprocess_free, }; PyMODINIT_FUNC From webhook-mailer at python.org Wed Apr 28 18:28:17 2021 From: webhook-mailer at python.org (terryjreedy) Date: Wed, 28 Apr 2021 22:28:17 -0000 Subject: [Python-checkins] bpo-37903: IDLE: Shell sidebar with prompts (GH-22682) Message-ID: https://github.com/python/cpython/commit/15d386185659683fc044ccaa300aa8cd7d49cc1a commit: 15d386185659683fc044ccaa300aa8cd7d49cc1a branch: master author: Tal Einat <532281+taleinat at users.noreply.github.com> committer: terryjreedy date: 2021-04-28T18:27:55-04:00 summary: bpo-37903: IDLE: Shell sidebar with prompts (GH-22682) The first followup will change shell indents to spaces. More are expected. Co-authored-by: Terry Jan Reedy files: A Lib/idlelib/idle_test/tkinter_testing_utils.py A Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst M Lib/idlelib/colorizer.py M Lib/idlelib/editor.py M Lib/idlelib/history.py M Lib/idlelib/idle_test/test_editor.py M Lib/idlelib/idle_test/test_pyshell.py M Lib/idlelib/idle_test/test_sidebar.py M Lib/idlelib/idle_test/test_squeezer.py M Lib/idlelib/percolator.py M Lib/idlelib/pyshell.py M Lib/idlelib/replace.py M Lib/idlelib/sidebar.py M Lib/idlelib/squeezer.py diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index 0aae1778a580c0..3c527409731afa 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -133,7 +133,6 @@ def LoadTagDefs(self): # non-modal alternative. "hit": idleConf.GetHighlight(theme, "hit"), } - if DEBUG: print('tagdefs', self.tagdefs) def insert(self, index, chars, tags=None): diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index b9cb50264ff06f..8b544407da2e0d 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -60,7 +60,6 @@ class EditorWindow: from idlelib.sidebar import LineNumbers from idlelib.format import FormatParagraph, FormatRegion, Indents, Rstrip from idlelib.parenmatch import ParenMatch - from idlelib.squeezer import Squeezer from idlelib.zoomheight import ZoomHeight filesystemencoding = sys.getfilesystemencoding() # for file names @@ -68,6 +67,7 @@ class EditorWindow: allow_code_context = True allow_line_numbers = True + user_input_insert_tags = None def __init__(self, flist=None, filename=None, key=None, root=None): # Delay import: runscript imports pyshell imports EditorWindow. @@ -784,9 +784,7 @@ def _addcolorizer(self): self.color = self.ColorDelegator() # can add more colorizers here... if self.color: - self.per.removefilter(self.undo) - self.per.insertfilter(self.color) - self.per.insertfilter(self.undo) + self.per.insertfilterafter(filter=self.color, after=self.undo) def _rmcolorizer(self): if not self.color: @@ -1303,8 +1301,6 @@ def smart_backspace_event(self, event): # Debug prompt is multilined.... ncharsdeleted = 0 while 1: - if chars == self.prompt_last_line: # '' unless PyShell - break chars = chars[:-1] ncharsdeleted = ncharsdeleted + 1 have = len(chars.expandtabs(tabwidth)) @@ -1313,7 +1309,8 @@ def smart_backspace_event(self, event): text.undo_block_start() text.delete("insert-%dc" % ncharsdeleted, "insert") if have < want: - text.insert("insert", ' ' * (want - have)) + text.insert("insert", ' ' * (want - have), + self.user_input_insert_tags) text.undo_block_stop() return "break" @@ -1346,7 +1343,7 @@ def smart_indent_event(self, event): effective = len(prefix.expandtabs(self.tabwidth)) n = self.indentwidth pad = ' ' * (n - effective % n) - text.insert("insert", pad) + text.insert("insert", pad, self.user_input_insert_tags) text.see("insert") return "break" finally: @@ -1377,13 +1374,14 @@ def newline_and_indent_event(self, event): if i == n: # The cursor is in or at leading indentation in a continuation # line; just inject an empty line at the start. - text.insert("insert linestart", '\n') + text.insert("insert linestart", '\n', + self.user_input_insert_tags) return "break" indent = line[:i] # Strip whitespace before insert point unless it's in the prompt. i = 0 - while line and line[-1] in " \t" and line != self.prompt_last_line: + while line and line[-1] in " \t": line = line[:-1] i += 1 if i: @@ -1394,7 +1392,7 @@ def newline_and_indent_event(self, event): text.delete("insert") # Insert new line. - text.insert("insert", '\n') + text.insert("insert", '\n', self.user_input_insert_tags) # Adjust indentation for continuations and block open/close. # First need to find the last statement. @@ -1430,7 +1428,7 @@ def newline_and_indent_event(self, event): elif c == pyparse.C_STRING_NEXT_LINES: # Inside a string which started before this line; # just mimic the current indent. - text.insert("insert", indent) + text.insert("insert", indent, self.user_input_insert_tags) elif c == pyparse.C_BRACKET: # Line up with the first (if any) element of the # last open bracket structure; else indent one @@ -1444,7 +1442,8 @@ def newline_and_indent_event(self, event): # beyond leftmost =; else to beyond first chunk of # non-whitespace on initial line. if y.get_num_lines_in_stmt() > 1: - text.insert("insert", indent) + text.insert("insert", indent, + self.user_input_insert_tags) else: self.reindent_to(y.compute_backslash_indent()) else: @@ -1455,7 +1454,7 @@ def newline_and_indent_event(self, event): # indentation of initial line of closest preceding # interesting statement. indent = y.get_base_indent_string() - text.insert("insert", indent) + text.insert("insert", indent, self.user_input_insert_tags) if y.is_block_opener(): self.smart_indent_event(event) elif indent and y.is_block_closer(): @@ -1502,7 +1501,8 @@ def reindent_to(self, column): if text.compare("insert linestart", "!=", "insert"): text.delete("insert linestart", "insert") if column: - text.insert("insert", self._make_blanks(column)) + text.insert("insert", self._make_blanks(column), + self.user_input_insert_tags) text.undo_block_stop() # Guess indentwidth from text content. diff --git a/Lib/idlelib/history.py b/Lib/idlelib/history.py index ad44a96a9de2c0..7ce09253eff5c9 100644 --- a/Lib/idlelib/history.py +++ b/Lib/idlelib/history.py @@ -74,13 +74,13 @@ def fetch(self, reverse): else: if self.text.get("iomark", "end-1c") != prefix: self.text.delete("iomark", "end-1c") - self.text.insert("iomark", prefix) + self.text.insert("iomark", prefix, "stdin") pointer = prefix = None break item = self.history[pointer] if item[:nprefix] == prefix and len(item) > nprefix: self.text.delete("iomark", "end-1c") - self.text.insert("iomark", item) + self.text.insert("iomark", item, "stdin") break self.text.see("insert") self.text.tag_remove("sel", "1.0", "end") diff --git a/Lib/idlelib/idle_test/test_editor.py b/Lib/idlelib/idle_test/test_editor.py index 443dcf021679fc..8665d680c0118f 100644 --- a/Lib/idlelib/idle_test/test_editor.py +++ b/Lib/idlelib/idle_test/test_editor.py @@ -167,7 +167,6 @@ def test_indent_and_newline_event(self): '2.end'), ) - w.prompt_last_line = '' for test in tests: with self.subTest(label=test.label): insert(text, test.text) @@ -182,13 +181,6 @@ def test_indent_and_newline_event(self): # Deletes selected text before adding new line. eq(get('1.0', 'end'), ' def f1(self, a,\n \n return a + b\n') - # Preserves the whitespace in shell prompt. - w.prompt_last_line = '>>> ' - insert(text, '>>> \t\ta =') - text.mark_set('insert', '1.5') - nl(None) - eq(get('1.0', 'end'), '>>> \na =\n') - class RMenuTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_pyshell.py b/Lib/idlelib/idle_test/test_pyshell.py index 4a096676f25796..706703965bffd6 100644 --- a/Lib/idlelib/idle_test/test_pyshell.py +++ b/Lib/idlelib/idle_test/test_pyshell.py @@ -60,5 +60,89 @@ def test_init(self): ## self.assertIsInstance(ps, pyshell.PyShell) +class PyShellRemoveLastNewlineAndSurroundingWhitespaceTest(unittest.TestCase): + regexp = pyshell.PyShell._last_newline_re + + def all_removed(self, text): + self.assertEqual('', self.regexp.sub('', text)) + + def none_removed(self, text): + self.assertEqual(text, self.regexp.sub('', text)) + + def check_result(self, text, expected): + self.assertEqual(expected, self.regexp.sub('', text)) + + def test_empty(self): + self.all_removed('') + + def test_newline(self): + self.all_removed('\n') + + def test_whitespace_no_newline(self): + self.all_removed(' ') + self.all_removed(' ') + self.all_removed(' ') + self.all_removed(' ' * 20) + self.all_removed('\t') + self.all_removed('\t\t') + self.all_removed('\t\t\t') + self.all_removed('\t' * 20) + self.all_removed('\t ') + self.all_removed(' \t') + self.all_removed(' \t \t ') + self.all_removed('\t \t \t') + + def test_newline_with_whitespace(self): + self.all_removed(' \n') + self.all_removed('\t\n') + self.all_removed(' \t\n') + self.all_removed('\t \n') + self.all_removed('\n ') + self.all_removed('\n\t') + self.all_removed('\n \t') + self.all_removed('\n\t ') + self.all_removed(' \n ') + self.all_removed('\t\n ') + self.all_removed(' \n\t') + self.all_removed('\t\n\t') + self.all_removed('\t \t \t\n') + self.all_removed(' \t \t \n') + self.all_removed('\n\t \t \t') + self.all_removed('\n \t \t ') + + def test_multiple_newlines(self): + self.check_result('\n\n', '\n') + self.check_result('\n' * 5, '\n' * 4) + self.check_result('\n' * 5 + '\t', '\n' * 4) + self.check_result('\n' * 20, '\n' * 19) + self.check_result('\n' * 20 + ' ', '\n' * 19) + self.check_result(' \n \n ', ' \n') + self.check_result(' \n\n ', ' \n') + self.check_result(' \n\n', ' \n') + self.check_result('\t\n\n', '\t\n') + self.check_result('\n\n ', '\n') + self.check_result('\n\n\t', '\n') + self.check_result(' \n \n ', ' \n') + self.check_result('\t\n\t\n\t', '\t\n') + + def test_non_whitespace(self): + self.none_removed('a') + self.check_result('a\n', 'a') + self.check_result('a\n ', 'a') + self.check_result('a \n ', 'a') + self.check_result('a \n\t', 'a') + self.none_removed('-') + self.check_result('-\n', '-') + self.none_removed('.') + self.check_result('.\n', '.') + + def test_unsupported_whitespace(self): + self.none_removed('\v') + self.none_removed('\n\v') + self.check_result('\v\n', '\v') + self.none_removed(' \n\v') + self.check_result('\v\n ', '\v') + + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_sidebar.py b/Lib/idlelib/idle_test/test_sidebar.py index 2974a9a7b09874..7228d0ee731fa5 100644 --- a/Lib/idlelib/idle_test/test_sidebar.py +++ b/Lib/idlelib/idle_test/test_sidebar.py @@ -1,13 +1,23 @@ -"""Test sidebar, coverage 93%""" -import idlelib.sidebar +"""Test sidebar, coverage 85%""" +from textwrap import dedent +import sys + from itertools import chain import unittest import unittest.mock -from test.support import requires +from test.support import requires, swap_attr import tkinter as tk +from .tkinter_testing_utils import run_in_tk_mainloop from idlelib.delegator import Delegator +from idlelib.editor import fixwordbreaks +from idlelib import macosx from idlelib.percolator import Percolator +import idlelib.pyshell +from idlelib.pyshell import fix_x11_paste, PyShell, PyShellFileList +from idlelib.run import fix_scaling +import idlelib.sidebar +from idlelib.sidebar import get_end_linenumber, get_lineno class Dummy_editwin: @@ -31,6 +41,7 @@ class LineNumbersTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = tk.Tk() + cls.root.withdraw() cls.text_frame = tk.Frame(cls.root) cls.text_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) @@ -154,7 +165,7 @@ def test_delete(self): self.assert_sidebar_n_lines(3) self.assert_state_disabled() - # Note: deleting up to "2.end" doesn't delete the final newline. + # Deleting up to "2.end" doesn't delete the final newline. self.text.delete('2.0', '2.end') self.assert_text_equals('fbarfoo\n\n\n') self.assert_sidebar_n_lines(3) @@ -165,7 +176,7 @@ def test_delete(self): self.assert_sidebar_n_lines(1) self.assert_state_disabled() - # Note: Text widgets always keep a single '\n' character at the end. + # Text widgets always keep a single '\n' character at the end. self.text.delete('1.0', 'end') self.assert_text_equals('\n') self.assert_sidebar_n_lines(1) @@ -234,11 +245,19 @@ def get_width(): self.assert_sidebar_n_lines(4) self.assertEqual(get_width(), 1) - # Note: Text widgets always keep a single '\n' character at the end. + # Text widgets always keep a single '\n' character at the end. self.text.delete('1.0', 'end -1c') self.assert_sidebar_n_lines(1) self.assertEqual(get_width(), 1) + # The following tests are temporarily disabled due to relying on + # simulated user input and inspecting which text is selected, which + # are fragile and can fail when several GUI tests are run in parallel + # or when the windows created by the test lose focus. + # + # TODO: Re-work these tests or remove them from the test suite. + + @unittest.skip('test disabled') def test_click_selection(self): self.linenumber.show_sidebar() self.text.insert('1.0', 'one\ntwo\nthree\nfour\n') @@ -252,6 +271,7 @@ def test_click_selection(self): self.assertEqual(self.get_selection(), ('2.0', '3.0')) + @unittest.skip('test disabled') def simulate_drag(self, start_line, end_line): start_x, start_y = self.get_line_screen_position(start_line) end_x, end_y = self.get_line_screen_position(end_line) @@ -277,6 +297,7 @@ def lerp(a, b, steps): x=end_x, y=end_y) self.root.update() + @unittest.skip('test disabled') def test_drag_selection_down(self): self.linenumber.show_sidebar() self.text.insert('1.0', 'one\ntwo\nthree\nfour\nfive\n') @@ -286,6 +307,7 @@ def test_drag_selection_down(self): self.simulate_drag(2, 4) self.assertEqual(self.get_selection(), ('2.0', '5.0')) + @unittest.skip('test disabled') def test_drag_selection_up(self): self.linenumber.show_sidebar() self.text.insert('1.0', 'one\ntwo\nthree\nfour\nfive\n') @@ -353,7 +375,7 @@ def assert_colors_are_equal(colors): ln.hide_sidebar() self.highlight_cfg = test_colors - # Nothing breaks with inactive code context. + # Nothing breaks with inactive line numbers. ln.update_colors() # Show line numbers, previous colors change is immediately effective. @@ -370,5 +392,319 @@ def assert_colors_are_equal(colors): assert_colors_are_equal(orig_colors) +class ShellSidebarTest(unittest.TestCase): + root: tk.Tk = None + shell: PyShell = None + + @classmethod + def setUpClass(cls): + requires('gui') + + cls.root = root = tk.Tk() + root.withdraw() + + fix_scaling(root) + fixwordbreaks(root) + fix_x11_paste(root) + + cls.flist = flist = PyShellFileList(root) + macosx.setupApp(root, flist) + root.update_idletasks() + + cls.init_shell() + + @classmethod + def tearDownClass(cls): + if cls.shell is not None: + cls.shell.executing = False + cls.shell.close() + cls.shell = None + cls.flist = None + cls.root.update_idletasks() + cls.root.destroy() + cls.root = None + + @classmethod + def init_shell(cls): + cls.shell = cls.flist.open_shell() + cls.shell.pollinterval = 10 + cls.root.update() + cls.n_preface_lines = get_lineno(cls.shell.text, 'end-1c') - 1 + + @classmethod + def reset_shell(cls): + cls.shell.per.bottom.delete(f'{cls.n_preface_lines+1}.0', 'end-1c') + cls.shell.shell_sidebar.update_sidebar() + cls.root.update() + + def setUp(self): + # In some test environments, e.g. Azure Pipelines (as of + # Apr. 2021), sys.stdout is changed between tests. However, + # PyShell relies on overriding sys.stdout when run without a + # sub-process (as done here; see setUpClass). + self._saved_stdout = None + if sys.stdout != self.shell.stdout: + self._saved_stdout = sys.stdout + sys.stdout = self.shell.stdout + + self.reset_shell() + + def tearDown(self): + if self._saved_stdout is not None: + sys.stdout = self._saved_stdout + + def get_sidebar_lines(self): + canvas = self.shell.shell_sidebar.canvas + texts = list(canvas.find(tk.ALL)) + texts_by_y_coords = { + canvas.bbox(text)[1]: canvas.itemcget(text, 'text') + for text in texts + } + line_y_coords = self.get_shell_line_y_coords() + return [texts_by_y_coords.get(y, None) for y in line_y_coords] + + def assert_sidebar_lines_end_with(self, expected_lines): + self.shell.shell_sidebar.update_sidebar() + self.assertEqual( + self.get_sidebar_lines()[-len(expected_lines):], + expected_lines, + ) + + def get_shell_line_y_coords(self): + text = self.shell.text + y_coords = [] + index = text.index("@0,0") + if index.split('.', 1)[1] != '0': + index = text.index(f"{index} +1line linestart") + while True: + lineinfo = text.dlineinfo(index) + if lineinfo is None: + break + y_coords.append(lineinfo[1]) + index = text.index(f"{index} +1line") + return y_coords + + def get_sidebar_line_y_coords(self): + canvas = self.shell.shell_sidebar.canvas + texts = list(canvas.find(tk.ALL)) + texts.sort(key=lambda text: canvas.bbox(text)[1]) + return [canvas.bbox(text)[1] for text in texts] + + def assert_sidebar_lines_synced(self): + self.assertLessEqual( + set(self.get_sidebar_line_y_coords()), + set(self.get_shell_line_y_coords()), + ) + + def do_input(self, input): + shell = self.shell + text = shell.text + for line_index, line in enumerate(input.split('\n')): + if line_index > 0: + text.event_generate('<>') + text.insert('insert', line, 'stdin') + + def test_initial_state(self): + sidebar_lines = self.get_sidebar_lines() + self.assertEqual( + sidebar_lines, + [None] * (len(sidebar_lines) - 1) + ['>>>'], + ) + self.assert_sidebar_lines_synced() + + @run_in_tk_mainloop + def test_single_empty_input(self): + self.do_input('\n') + yield + self.assert_sidebar_lines_end_with(['>>>', '>>>']) + + @run_in_tk_mainloop + def test_single_line_statement(self): + self.do_input('1\n') + yield + self.assert_sidebar_lines_end_with(['>>>', None, '>>>']) + + @run_in_tk_mainloop + def test_multi_line_statement(self): + # Block statements are not indented because IDLE auto-indents. + self.do_input(dedent('''\ + if True: + print(1) + + ''')) + yield + self.assert_sidebar_lines_end_with([ + '>>>', + '...', + '...', + '...', + None, + '>>>', + ]) + + @run_in_tk_mainloop + def test_single_long_line_wraps(self): + self.do_input('1' * 200 + '\n') + yield + self.assert_sidebar_lines_end_with(['>>>', None, '>>>']) + self.assert_sidebar_lines_synced() + + @run_in_tk_mainloop + def test_squeeze_multi_line_output(self): + shell = self.shell + text = shell.text + + self.do_input('print("a\\nb\\nc")\n') + yield + self.assert_sidebar_lines_end_with(['>>>', None, None, None, '>>>']) + + text.mark_set('insert', f'insert -1line linestart') + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with(['>>>', None, '>>>']) + self.assert_sidebar_lines_synced() + + shell.squeezer.expandingbuttons[0].expand() + yield + self.assert_sidebar_lines_end_with(['>>>', None, None, None, '>>>']) + self.assert_sidebar_lines_synced() + + @run_in_tk_mainloop + def test_interrupt_recall_undo_redo(self): + text = self.shell.text + # Block statements are not indented because IDLE auto-indents. + initial_sidebar_lines = self.get_sidebar_lines() + + self.do_input(dedent('''\ + if True: + print(1) + ''')) + yield + self.assert_sidebar_lines_end_with(['>>>', '...', '...']) + with_block_sidebar_lines = self.get_sidebar_lines() + self.assertNotEqual(with_block_sidebar_lines, initial_sidebar_lines) + + # Control-C + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with(['>>>', '...', '...', None, '>>>']) + + # Recall previous via history + text.event_generate('<>') + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with(['>>>', '...', None, '>>>']) + + # Recall previous via recall + text.mark_set('insert', text.index('insert -2l')) + text.event_generate('<>') + yield + + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with(['>>>']) + + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with(['>>>', '...']) + + text.event_generate('<>') + text.event_generate('<>') + yield + self.assert_sidebar_lines_end_with( + ['>>>', '...', '...', '...', None, '>>>'] + ) + + @run_in_tk_mainloop + def test_very_long_wrapped_line(self): + with swap_attr(self.shell, 'squeezer', None): + self.do_input('x = ' + '1'*10_000 + '\n') + yield + self.assertEqual(self.get_sidebar_lines(), ['>>>']) + + def test_font(self): + sidebar = self.shell.shell_sidebar + + test_font = 'TkTextFont' + + def mock_idleconf_GetFont(root, configType, section): + return test_font + GetFont_patcher = unittest.mock.patch.object( + idlelib.sidebar.idleConf, 'GetFont', mock_idleconf_GetFont) + GetFont_patcher.start() + def cleanup(): + GetFont_patcher.stop() + sidebar.update_font() + self.addCleanup(cleanup) + + def get_sidebar_font(): + canvas = sidebar.canvas + texts = list(canvas.find(tk.ALL)) + fonts = {canvas.itemcget(text, 'font') for text in texts} + self.assertEqual(len(fonts), 1) + return next(iter(fonts)) + + self.assertNotEqual(get_sidebar_font(), test_font) + sidebar.update_font() + self.assertEqual(get_sidebar_font(), test_font) + + def test_highlight_colors(self): + sidebar = self.shell.shell_sidebar + + test_colors = {"background": '#abcdef', "foreground": '#123456'} + + orig_idleConf_GetHighlight = idlelib.sidebar.idleConf.GetHighlight + def mock_idleconf_GetHighlight(theme, element): + if element in ['linenumber', 'console']: + return test_colors + return orig_idleConf_GetHighlight(theme, element) + GetHighlight_patcher = unittest.mock.patch.object( + idlelib.sidebar.idleConf, 'GetHighlight', + mock_idleconf_GetHighlight) + GetHighlight_patcher.start() + def cleanup(): + GetHighlight_patcher.stop() + sidebar.update_colors() + self.addCleanup(cleanup) + + def get_sidebar_colors(): + canvas = sidebar.canvas + texts = list(canvas.find(tk.ALL)) + fgs = {canvas.itemcget(text, 'fill') for text in texts} + self.assertEqual(len(fgs), 1) + fg = next(iter(fgs)) + bg = canvas.cget('background') + return {"background": bg, "foreground": fg} + + self.assertNotEqual(get_sidebar_colors(), test_colors) + sidebar.update_colors() + self.assertEqual(get_sidebar_colors(), test_colors) + + @run_in_tk_mainloop + def test_mousewheel(self): + sidebar = self.shell.shell_sidebar + text = self.shell.text + + # Enter a 100-line string to scroll the shell screen down. + self.do_input('x = """' + '\n'*100 + '"""\n') + yield + self.assertGreater(get_lineno(text, '@0,0'), 1) + + last_lineno = get_end_linenumber(text) + self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) + + # Scroll up using the event. + # The meaning delta is platform-dependant. + delta = -1 if sys.platform == 'darwin' else 120 + sidebar.canvas.event_generate('', x=0, y=0, delta=delta) + yield + self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) + + # Scroll back down using the event. + sidebar.canvas.event_generate('', x=0, y=0) + yield + self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) + + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_squeezer.py b/Lib/idlelib/idle_test/test_squeezer.py index ee1bbd76b50562..eaf81a5fc1a053 100644 --- a/Lib/idlelib/idle_test/test_squeezer.py +++ b/Lib/idlelib/idle_test/test_squeezer.py @@ -7,13 +7,12 @@ from test.support import requires from idlelib.config import idleConf +from idlelib.percolator import Percolator from idlelib.squeezer import count_lines_with_wrapping, ExpandingButton, \ Squeezer from idlelib import macosx from idlelib.textview import view_text from idlelib.tooltip import Hovertip -from idlelib.pyshell import PyShell - SENTINEL_VALUE = sentinel.SENTINEL_VALUE @@ -205,8 +204,8 @@ def test_auto_squeeze(self): self.assertEqual(text_widget.get('1.0', 'end'), '\n') self.assertEqual(len(squeezer.expandingbuttons), 1) - def test_squeeze_current_text_event(self): - """Test the squeeze_current_text event.""" + def test_squeeze_current_text(self): + """Test the squeeze_current_text method.""" # Squeezing text should work for both stdout and stderr. for tag_name in ["stdout", "stderr"]: editwin = self.make_mock_editor_window(with_text_widget=True) @@ -222,7 +221,7 @@ def test_squeeze_current_text_event(self): self.assertEqual(len(squeezer.expandingbuttons), 0) # Test squeezing the current text. - retval = squeezer.squeeze_current_text_event(event=Mock()) + retval = squeezer.squeeze_current_text() self.assertEqual(retval, "break") self.assertEqual(text_widget.get('1.0', 'end'), '\n\n') self.assertEqual(len(squeezer.expandingbuttons), 1) @@ -230,11 +229,11 @@ def test_squeeze_current_text_event(self): # Test that expanding the squeezed text works and afterwards # the Text widget contains the original text. - squeezer.expandingbuttons[0].expand(event=Mock()) + squeezer.expandingbuttons[0].expand() self.assertEqual(text_widget.get('1.0', 'end'), 'SOME\nTEXT\n\n') self.assertEqual(len(squeezer.expandingbuttons), 0) - def test_squeeze_current_text_event_no_allowed_tags(self): + def test_squeeze_current_text_no_allowed_tags(self): """Test that the event doesn't squeeze text without a relevant tag.""" editwin = self.make_mock_editor_window(with_text_widget=True) text_widget = editwin.text @@ -249,7 +248,7 @@ def test_squeeze_current_text_event_no_allowed_tags(self): self.assertEqual(len(squeezer.expandingbuttons), 0) # Test squeezing the current text. - retval = squeezer.squeeze_current_text_event(event=Mock()) + retval = squeezer.squeeze_current_text() self.assertEqual(retval, "break") self.assertEqual(text_widget.get('1.0', 'end'), 'SOME\nTEXT\n\n') self.assertEqual(len(squeezer.expandingbuttons), 0) @@ -264,13 +263,13 @@ def test_squeeze_text_before_existing_squeezed_text(self): # Prepare some text in the Text widget and squeeze it. text_widget.insert("1.0", "SOME\nTEXT\n", "stdout") text_widget.mark_set("insert", "1.0") - squeezer.squeeze_current_text_event(event=Mock()) + squeezer.squeeze_current_text() self.assertEqual(len(squeezer.expandingbuttons), 1) # Test squeezing the current text. text_widget.insert("1.0", "MORE\nSTUFF\n", "stdout") text_widget.mark_set("insert", "1.0") - retval = squeezer.squeeze_current_text_event(event=Mock()) + retval = squeezer.squeeze_current_text() self.assertEqual(retval, "break") self.assertEqual(text_widget.get('1.0', 'end'), '\n\n\n') self.assertEqual(len(squeezer.expandingbuttons), 2) @@ -311,6 +310,7 @@ def make_mock_squeezer(self): root = get_test_tk_root(self) squeezer = Mock() squeezer.editwin.text = Text(root) + squeezer.editwin.per = Percolator(squeezer.editwin.text) # Set default values for the configuration settings. squeezer.auto_squeeze_min_lines = 50 @@ -352,14 +352,9 @@ def test_expand(self): # Insert the button into the text widget # (this is normally done by the Squeezer class). - text_widget = expandingbutton.text + text_widget = squeezer.editwin.text text_widget.window_create("1.0", window=expandingbutton) - # Set base_text to the text widget, so that changes are actually - # made to it (by ExpandingButton) and we can inspect these - # changes afterwards. - expandingbutton.base_text = expandingbutton.text - # trigger the expand event retval = expandingbutton.expand(event=Mock()) self.assertEqual(retval, None) @@ -390,11 +385,6 @@ def test_expand_dangerous_oupput(self): text_widget = expandingbutton.text text_widget.window_create("1.0", window=expandingbutton) - # Set base_text to the text widget, so that changes are actually - # made to it (by ExpandingButton) and we can inspect these - # changes afterwards. - expandingbutton.base_text = expandingbutton.text - # Patch the message box module to always return False. with patch('idlelib.squeezer.messagebox') as mock_msgbox: mock_msgbox.askokcancel.return_value = False diff --git a/Lib/idlelib/idle_test/tkinter_testing_utils.py b/Lib/idlelib/idle_test/tkinter_testing_utils.py new file mode 100644 index 00000000000000..a9f8386e2cd9f6 --- /dev/null +++ b/Lib/idlelib/idle_test/tkinter_testing_utils.py @@ -0,0 +1,56 @@ +"""Utilities for testing with Tkinter""" +import functools + + +def run_in_tk_mainloop(test_method): + """Decorator for running a test method with a real Tk mainloop. + + This starts a Tk mainloop before running the test, and stops it + at the end. This is faster and more robust than the common + alternative method of calling .update() and/or .update_idletasks(). + + Test methods using this must be written as generator functions, + using "yield" to allow the mainloop to process events and "after" + callbacks, and then continue the test from that point. + + This also assumes that the test class has a .root attribute, + which is a tkinter.Tk object. + + For example (from test_sidebar.py): + + @run_test_with_tk_mainloop + def test_single_empty_input(self): + self.do_input('\n') + yield + self.assert_sidebar_lines_end_with(['>>>', '>>>']) + """ + @functools.wraps(test_method) + def new_test_method(self): + test_generator = test_method(self) + root = self.root + # Exceptions raised by self.assert...() need to be raised + # outside of the after() callback in order for the test + # harness to capture them. + exception = None + def after_callback(): + nonlocal exception + try: + next(test_generator) + except StopIteration: + root.quit() + except Exception as exc: + exception = exc + root.quit() + else: + # Schedule the Tk mainloop to call this function again, + # using a robust method of ensuring that it gets a + # chance to process queued events before doing so. + # See: https://stackoverflow.com/q/18499082#comment65004099_38817470 + root.after(1, root.after_idle, after_callback) + root.after(0, root.after_idle, after_callback) + root.mainloop() + + if exception: + raise exception + + return new_test_method diff --git a/Lib/idlelib/percolator.py b/Lib/idlelib/percolator.py index db70304f589159..1fe34d29f54eb2 100644 --- a/Lib/idlelib/percolator.py +++ b/Lib/idlelib/percolator.py @@ -38,6 +38,21 @@ def insertfilter(self, filter): filter.setdelegate(self.top) self.top = filter + def insertfilterafter(self, filter, after): + assert isinstance(filter, Delegator) + assert isinstance(after, Delegator) + assert filter.delegate is None + + f = self.top + f.resetcache() + while f is not after: + assert f is not self.bottom + f = f.delegate + f.resetcache() + + filter.setdelegate(f.delegate) + f.setdelegate(filter) + def removefilter(self, filter): # XXX Perhaps should only support popfilter()? assert isinstance(filter, Delegator) diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 0ee2254807fe8f..5830b7aa31a72c 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -48,15 +48,20 @@ from idlelib.colorizer import ColorDelegator from idlelib.config import idleConf +from idlelib.delegator import Delegator from idlelib import debugger from idlelib import debugger_r from idlelib.editor import EditorWindow, fixwordbreaks from idlelib.filelist import FileList from idlelib.outwin import OutputWindow +from idlelib import replace from idlelib import rpc from idlelib.run import idle_formatwarning, StdInputFile, StdOutputFile from idlelib.undo import UndoDelegator +# Default for testing; defaults to True in main() for running. +use_subprocess = False + HOST = '127.0.0.1' # python execution server on localhost loopback PORT = 0 # someday pass in host, port for remote debug capability @@ -335,34 +340,19 @@ def open_shell(self, event=None): class ModifiedColorDelegator(ColorDelegator): "Extend base class: colorizer for the shell window itself" - - def __init__(self): - ColorDelegator.__init__(self) - self.LoadTagDefs() - def recolorize_main(self): self.tag_remove("TODO", "1.0", "iomark") self.tag_add("SYNC", "1.0", "iomark") ColorDelegator.recolorize_main(self) - def LoadTagDefs(self): - ColorDelegator.LoadTagDefs(self) - theme = idleConf.CurrentTheme() - self.tagdefs.update({ - "stdin": {'background':None,'foreground':None}, - "stdout": idleConf.GetHighlight(theme, "stdout"), - "stderr": idleConf.GetHighlight(theme, "stderr"), - "console": idleConf.GetHighlight(theme, "console"), - }) - def removecolors(self): # Don't remove shell color tags before "iomark" for tag in self.tagdefs: self.tag_remove(tag, "iomark", "end") + class ModifiedUndoDelegator(UndoDelegator): "Extend base class: forbid insert/delete before the I/O mark" - def insert(self, index, chars, tags=None): try: if self.delegate.compare(index, "<", "iomark"): @@ -381,6 +371,27 @@ def delete(self, index1, index2=None): pass UndoDelegator.delete(self, index1, index2) + def undo_event(self, event): + # Temporarily monkey-patch the delegate's .insert() method to + # always use the "stdin" tag. This is needed for undo-ing + # deletions to preserve the "stdin" tag, because UndoDelegator + # doesn't preserve tags for deleted text. + orig_insert = self.delegate.insert + self.delegate.insert = \ + lambda index, chars: orig_insert(index, chars, "stdin") + try: + super().undo_event(event) + finally: + self.delegate.insert = orig_insert + + +class UserInputTaggingDelegator(Delegator): + """Delegator used to tag user input with "stdin".""" + def insert(self, index, chars, tags=None): + if tags is None: + tags = "stdin" + self.delegate.insert(index, chars, tags) + class MyRPCClient(rpc.RPCClient): @@ -832,6 +843,7 @@ def display_executing_dialog(self): class PyShell(OutputWindow): + from idlelib.squeezer import Squeezer shell_title = "IDLE Shell " + python_version() @@ -855,9 +867,11 @@ class PyShell(OutputWindow): ] allow_line_numbers = False + user_input_insert_tags = "stdin" # New classes from idlelib.history import History + from idlelib.sidebar import ShellSidebar def __init__(self, flist=None): if use_subprocess: @@ -871,6 +885,8 @@ def __init__(self, flist=None): root.withdraw() flist = PyShellFileList(root) + self.shell_sidebar = None # initialized below + OutputWindow.__init__(self, flist, None, None) self.usetabs = True @@ -893,9 +909,9 @@ def __init__(self, flist=None): if use_subprocess: text.bind("<>", self.view_restart_mark) text.bind("<>", self.restart_shell) - squeezer = self.Squeezer(self) + self.squeezer = self.Squeezer(self) text.bind("<>", - squeezer.squeeze_current_text_event) + self.squeeze_current_text_event) self.save_stdout = sys.stdout self.save_stderr = sys.stderr @@ -926,6 +942,40 @@ def __init__(self, flist=None): # self.pollinterval = 50 # millisec + self.shell_sidebar = self.ShellSidebar(self) + + # Insert UserInputTaggingDelegator at the top of the percolator, + # but make calls to text.insert() skip it. This causes only insert + # events generated in Tcl/Tk to go through this delegator. + self.text.insert = self.per.top.insert + self.per.insertfilter(UserInputTaggingDelegator()) + + def ResetFont(self): + super().ResetFont() + + if self.shell_sidebar is not None: + self.shell_sidebar.update_font() + + def ResetColorizer(self): + super().ResetColorizer() + + theme = idleConf.CurrentTheme() + tag_colors = { + "stdin": {'background': None, 'foreground': None}, + "stdout": idleConf.GetHighlight(theme, "stdout"), + "stderr": idleConf.GetHighlight(theme, "stderr"), + "console": idleConf.GetHighlight(theme, "normal"), + } + for tag, tag_colors_config in tag_colors.items(): + self.text.tag_configure(tag, **tag_colors_config) + + if self.shell_sidebar is not None: + self.shell_sidebar.update_colors() + + def replace_event(self, event): + replace.replace(self.text, insert_tags="stdin") + return "break" + def get_standard_extension_names(self): return idleConf.GetExtensions(shell_only=True) @@ -1166,13 +1216,30 @@ def enter_callback(self, event): # the current line, less a leading prompt, less leading or # trailing whitespace if self.text.compare("insert", "<", "iomark linestart"): - # Check if there's a relevant stdin range -- if so, use it + # Check if there's a relevant stdin range -- if so, use it. + # Note: "stdin" blocks may include several successive statements, + # so look for "console" tags on the newline before each statement + # (and possibly on prompts). prev = self.text.tag_prevrange("stdin", "insert") - if prev and self.text.compare("insert", "<", prev[1]): + if ( + prev and + self.text.compare("insert", "<", prev[1]) and + # The following is needed to handle empty statements. + "console" not in self.text.tag_names("insert") + ): + prev_cons = self.text.tag_prevrange("console", "insert") + if prev_cons and self.text.compare(prev_cons[1], ">=", prev[0]): + prev = (prev_cons[1], prev[1]) + next_cons = self.text.tag_nextrange("console", "insert") + if next_cons and self.text.compare(next_cons[0], "<", prev[1]): + prev = (prev[0], self.text.index(next_cons[0] + "+1c")) self.recall(self.text.get(prev[0], prev[1]), event) return "break" next = self.text.tag_nextrange("stdin", "insert") if next and self.text.compare("insert lineend", ">=", next[0]): + next_cons = self.text.tag_nextrange("console", "insert lineend") + if next_cons and self.text.compare(next_cons[0], "<", next[1]): + next = (next[0], self.text.index(next_cons[0] + "+1c")) self.recall(self.text.get(next[0], next[1]), event) return "break" # No stdin mark -- just get the current line, less any prompt @@ -1204,7 +1271,6 @@ def enter_callback(self, event): self.text.see("insert") else: self.newline_and_indent_event(event) - self.text.tag_add("stdin", "iomark", "end-1c") self.text.update_idletasks() if self.reading: self.top.quit() # Break out of recursive mainloop() @@ -1214,7 +1280,7 @@ def enter_callback(self, event): def recall(self, s, event): # remove leading and trailing empty or whitespace lines - s = re.sub(r'^\s*\n', '' , s) + s = re.sub(r'^\s*\n', '', s) s = re.sub(r'\n\s*$', '', s) lines = s.split('\n') self.text.undo_block_start() @@ -1225,7 +1291,8 @@ def recall(self, s, event): if prefix.rstrip().endswith(':'): self.newline_and_indent_event(event) prefix = self.text.get("insert linestart", "insert") - self.text.insert("insert", lines[0].strip()) + self.text.insert("insert", lines[0].strip(), + self.user_input_insert_tags) if len(lines) > 1: orig_base_indent = re.search(r'^([ \t]*)', lines[0]).group(0) new_base_indent = re.search(r'^([ \t]*)', prefix).group(0) @@ -1233,24 +1300,24 @@ def recall(self, s, event): if line.startswith(orig_base_indent): # replace orig base indentation with new indentation line = new_base_indent + line[len(orig_base_indent):] - self.text.insert('insert', '\n'+line.rstrip()) + self.text.insert('insert', '\n' + line.rstrip(), + self.user_input_insert_tags) finally: self.text.see("insert") self.text.undo_block_stop() + _last_newline_re = re.compile(r"[ \t]*(\n[ \t]*)?\Z") def runit(self): + index_before = self.text.index("end-2c") line = self.text.get("iomark", "end-1c") # Strip off last newline and surrounding whitespace. # (To allow you to hit return twice to end a statement.) - i = len(line) - while i > 0 and line[i-1] in " \t": - i = i-1 - if i > 0 and line[i-1] == "\n": - i = i-1 - while i > 0 and line[i-1] in " \t": - i = i-1 - line = line[:i] - self.interp.runsource(line) + line = self._last_newline_re.sub("", line) + input_is_complete = self.interp.runsource(line) + if not input_is_complete: + if self.text.get(index_before) == '\n': + self.text.tag_remove(self.user_input_insert_tags, index_before) + self.shell_sidebar.update_sidebar() def open_stack_viewer(self, event=None): if self.interp.rpcclt: @@ -1276,7 +1343,14 @@ def restart_shell(self, event=None): def showprompt(self): self.resetoutput() - self.console.write(self.prompt) + + prompt = self.prompt + if self.sys_ps1 and prompt.endswith(self.sys_ps1): + prompt = prompt[:-len(self.sys_ps1)] + self.text.tag_add("console", "iomark-1c") + self.console.write(prompt) + + self.shell_sidebar.update_sidebar() self.text.mark_set("insert", "end-1c") self.set_line_and_column() self.io.reset_undo() @@ -1326,6 +1400,13 @@ def rmenu_check_paste(self): return 'disabled' return super().rmenu_check_paste() + def squeeze_current_text_event(self, event=None): + self.squeezer.squeeze_current_text() + self.shell_sidebar.update_sidebar() + + def on_squeezed_expand(self, index, text, tags): + self.shell_sidebar.update_sidebar() + def fix_x11_paste(root): "Make paste replace selection on x11. See issue #5124." diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py index 6be034af9626b3..2f9ca231a05e49 100644 --- a/Lib/idlelib/replace.py +++ b/Lib/idlelib/replace.py @@ -11,7 +11,7 @@ from idlelib import searchengine -def replace(text): +def replace(text, insert_tags=None): """Create or reuse a singleton ReplaceDialog instance. The singleton dialog saves user entries and preferences @@ -25,7 +25,7 @@ def replace(text): if not hasattr(engine, "_replacedialog"): engine._replacedialog = ReplaceDialog(root, engine) dialog = engine._replacedialog - dialog.open(text) + dialog.open(text, insert_tags=insert_tags) class ReplaceDialog(SearchDialogBase): @@ -49,8 +49,9 @@ def __init__(self, root, engine): """ super().__init__(root, engine) self.replvar = StringVar(root) + self.insert_tags = None - def open(self, text): + def open(self, text, insert_tags=None): """Make dialog visible on top of others and ready to use. Also, highlight the currently selected text and set the @@ -72,6 +73,7 @@ def open(self, text): last = last or first self.show_hit(first, last) self.ok = True + self.insert_tags = insert_tags def create_entries(self): "Create base and additional label and text entry widgets." @@ -177,7 +179,7 @@ def replace_all(self, event=None): if first != last: text.delete(first, last) if new: - text.insert(first, new) + text.insert(first, new, self.insert_tags) col = i + len(new) ok = False text.undo_block_stop() @@ -231,7 +233,7 @@ def do_replace(self): if m.group(): text.delete(first, last) if new: - text.insert(first, new) + text.insert(first, new, self.insert_tags) text.undo_block_stop() self.show_hit(first, text.index("insert")) self.ok = False @@ -264,6 +266,7 @@ def close(self, event=None): "Close the dialog and remove hit tags." SearchDialogBase.close(self, event) self.text.tag_remove("hit", "1.0", "end") + self.insert_tags = None def _replace_dialog(parent): # htest # diff --git a/Lib/idlelib/sidebar.py b/Lib/idlelib/sidebar.py index 41c09684a20251..a947961b858d68 100644 --- a/Lib/idlelib/sidebar.py +++ b/Lib/idlelib/sidebar.py @@ -1,19 +1,33 @@ """Line numbering implementation for IDLE as an extension. Includes BaseSideBar which can be extended for other sidebar based extensions """ +import contextlib import functools import itertools import tkinter as tk +from tkinter.font import Font from idlelib.config import idleConf from idlelib.delegator import Delegator +def get_lineno(text, index): + """Return the line number of an index in a Tk text widget.""" + return int(float(text.index(index))) + + def get_end_linenumber(text): - """Utility to get the last line's number in a Tk text widget.""" - return int(float(text.index('end-1c'))) + """Return the number of the last line in a Tk text widget.""" + return get_lineno(text, 'end-1c') +def get_displaylines(text, index): + """Display height, in lines, of a logical line in a Tk text widget.""" + res = text.count(f"{index} linestart", + f"{index} lineend", + "displaylines") + return res[0] if res else 0 + def get_widget_padding(widget): """Get the total padding of a Tk widget, including its border.""" # TODO: use also in codecontext.py @@ -40,10 +54,17 @@ def get_widget_padding(widget): return padx, pady + at contextlib.contextmanager +def temp_enable_text_widget(text): + text.configure(state=tk.NORMAL) + try: + yield + finally: + text.configure(state=tk.DISABLED) + + class BaseSideBar: - """ - The base class for extensions which require a sidebar. - """ + """A base class for sidebars using Text.""" def __init__(self, editwin): self.editwin = editwin self.parent = editwin.text_frame @@ -119,14 +140,11 @@ def redirect_mousewheel_event(self, event): class EndLineDelegator(Delegator): - """Generate callbacks with the current end line number after - insert or delete operations""" + """Generate callbacks with the current end line number. + + The provided callback is called after every insert and delete. + """ def __init__(self, changed_callback): - """ - changed_callback - Callable, will be called after insert - or delete operations with the current - end line number. - """ Delegator.__init__(self) self.changed_callback = changed_callback @@ -159,16 +177,8 @@ def __init__(self, editwin): end_line_delegator = EndLineDelegator(self.update_sidebar_text) # Insert the delegator after the undo delegator, so that line numbers # are properly updated after undo and redo actions. - end_line_delegator.setdelegate(self.editwin.undo.delegate) - self.editwin.undo.setdelegate(end_line_delegator) - # Reset the delegator caches of the delegators "above" the - # end line delegator we just inserted. - delegator = self.editwin.per.top - while delegator is not end_line_delegator: - delegator.resetcache() - delegator = delegator.delegate - - self.is_shown = False + self.editwin.per.insertfilterafter(filter=end_line_delegator, + after=self.editwin.undo) def bind_events(self): # Ensure focus is always redirected to the main editor text widget. @@ -297,20 +307,209 @@ def update_sidebar_text(self, end): new_width = cur_width + width_difference self.sidebar_text['width'] = self._sidebar_width_type(new_width) - self.sidebar_text.config(state=tk.NORMAL) - if end > self.prev_end: - new_text = '\n'.join(itertools.chain( - [''], - map(str, range(self.prev_end + 1, end + 1)), - )) - self.sidebar_text.insert(f'end -1c', new_text, 'linenumber') - else: - self.sidebar_text.delete(f'{end+1}.0 -1c', 'end -1c') - self.sidebar_text.config(state=tk.DISABLED) + with temp_enable_text_widget(self.sidebar_text): + if end > self.prev_end: + new_text = '\n'.join(itertools.chain( + [''], + map(str, range(self.prev_end + 1, end + 1)), + )) + self.sidebar_text.insert(f'end -1c', new_text, 'linenumber') + else: + self.sidebar_text.delete(f'{end+1}.0 -1c', 'end -1c') self.prev_end = end +class WrappedLineHeightChangeDelegator(Delegator): + def __init__(self, callback): + """ + callback - Callable, will be called when an insert, delete or replace + action on the text widget may require updating the shell + sidebar. + """ + Delegator.__init__(self) + self.callback = callback + + def insert(self, index, chars, tags=None): + is_single_line = '\n' not in chars + if is_single_line: + before_displaylines = get_displaylines(self, index) + + self.delegate.insert(index, chars, tags) + + if is_single_line: + after_displaylines = get_displaylines(self, index) + if after_displaylines == before_displaylines: + return # no need to update the sidebar + + self.callback() + + def delete(self, index1, index2=None): + if index2 is None: + index2 = index1 + "+1c" + is_single_line = get_lineno(self, index1) == get_lineno(self, index2) + if is_single_line: + before_displaylines = get_displaylines(self, index1) + + self.delegate.delete(index1, index2) + + if is_single_line: + after_displaylines = get_displaylines(self, index1) + if after_displaylines == before_displaylines: + return # no need to update the sidebar + + self.callback() + + +class ShellSidebar: + """Sidebar for the PyShell window, for prompts etc.""" + def __init__(self, editwin): + self.editwin = editwin + self.parent = editwin.text_frame + self.text = editwin.text + + self.canvas = tk.Canvas(self.parent, width=30, + borderwidth=0, highlightthickness=0, + takefocus=False) + + self.bind_events() + + change_delegator = \ + WrappedLineHeightChangeDelegator(self.change_callback) + + # Insert the TextChangeDelegator after the last delegator, so that + # the sidebar reflects final changes to the text widget contents. + d = self.editwin.per.top + if d.delegate is not self.text: + while d.delegate is not self.editwin.per.bottom: + d = d.delegate + self.editwin.per.insertfilterafter(change_delegator, after=d) + + self.text['yscrollcommand'] = self.yscroll_event + + self.is_shown = False + + self.update_font() + self.update_colors() + self.update_sidebar() + self.canvas.grid(row=1, column=0, sticky=tk.NSEW, padx=2, pady=0) + self.is_shown = True + + def change_callback(self): + if self.is_shown: + self.update_sidebar() + + def update_sidebar(self): + text = self.text + text_tagnames = text.tag_names + canvas = self.canvas + + canvas.delete(tk.ALL) + + index = text.index("@0,0") + if index.split('.', 1)[1] != '0': + index = text.index(f'{index}+1line linestart') + while True: + lineinfo = text.dlineinfo(index) + if lineinfo is None: + break + y = lineinfo[1] + prev_newline_tagnames = text_tagnames(f"{index} linestart -1c") + prompt = ( + '>>>' if "console" in prev_newline_tagnames else + '...' if "stdin" in prev_newline_tagnames else + None + ) + if prompt: + canvas.create_text(2, y, anchor=tk.NW, text=prompt, + font=self.font, fill=self.colors[0]) + index = text.index(f'{index}+1line') + + def yscroll_event(self, *args, **kwargs): + """Redirect vertical scrolling to the main editor text widget. + + The scroll bar is also updated. + """ + self.editwin.vbar.set(*args) + self.change_callback() + return 'break' + + def update_font(self): + """Update the sidebar text font, usually after config changes.""" + font = idleConf.GetFont(self.text, 'main', 'EditorWindow') + tk_font = Font(self.text, font=font) + char_width = max(tk_font.measure(char) for char in ['>', '.']) + self.canvas.configure(width=char_width * 3 + 4) + self._update_font(font) + + def _update_font(self, font): + self.font = font + self.change_callback() + + def update_colors(self): + """Update the sidebar text colors, usually after config changes.""" + linenumbers_colors = idleConf.GetHighlight(idleConf.CurrentTheme(), 'linenumber') + prompt_colors = idleConf.GetHighlight(idleConf.CurrentTheme(), 'console') + self._update_colors(foreground=prompt_colors['foreground'], + background=linenumbers_colors['background']) + + def _update_colors(self, foreground, background): + self.colors = (foreground, background) + self.canvas.configure(background=self.colors[1]) + self.change_callback() + + def redirect_focusin_event(self, event): + """Redirect focus-in events to the main editor text widget.""" + self.text.focus_set() + return 'break' + + def redirect_mousebutton_event(self, event, event_name): + """Redirect mouse button events to the main editor text widget.""" + self.text.focus_set() + self.text.event_generate(event_name, x=0, y=event.y) + return 'break' + + def redirect_mousewheel_event(self, event): + """Redirect mouse wheel events to the editwin text widget.""" + self.text.event_generate('', + x=0, y=event.y, delta=event.delta) + return 'break' + + def bind_events(self): + # Ensure focus is always redirected to the main editor text widget. + self.canvas.bind('', self.redirect_focusin_event) + + # Redirect mouse scrolling to the main editor text widget. + # + # Note that without this, scrolling with the mouse only scrolls + # the line numbers. + self.canvas.bind('', self.redirect_mousewheel_event) + + # Redirect mouse button events to the main editor text widget, + # except for the left mouse button (1). + # + # Note: X-11 sends Button-4 and Button-5 events for the scroll wheel. + def bind_mouse_event(event_name, target_event_name): + handler = functools.partial(self.redirect_mousebutton_event, + event_name=target_event_name) + self.canvas.bind(event_name, handler) + + for button in [2, 3, 4, 5]: + for event_name in (f'', + f'', + f'', + ): + bind_mouse_event(event_name, target_event_name=event_name) + + # Convert double- and triple-click events to normal click events, + # since event_generate() doesn't allow generating such events. + for event_name in (f'', + f'', + ): + bind_mouse_event(event_name, + target_event_name=f'') + + def _linenumbers_drag_scrolling(parent): # htest # from idlelib.idle_test.test_sidebar import Dummy_editwin diff --git a/Lib/idlelib/squeezer.py b/Lib/idlelib/squeezer.py index 3046d803b74a4e..929c3fd3a507f4 100644 --- a/Lib/idlelib/squeezer.py +++ b/Lib/idlelib/squeezer.py @@ -160,8 +160,10 @@ def expand(self, event=None): if not confirm: return "break" - self.base_text.insert(self.text.index(self), self.s, self.tags) + index = self.text.index(self) + self.base_text.insert(index, self.s, self.tags) self.base_text.delete(self) + self.editwin.on_squeezed_expand(index, self.s, self.tags) self.squeezer.expandingbuttons.remove(self) def copy(self, event=None): @@ -285,12 +287,10 @@ def count_lines(self, s): """ return count_lines_with_wrapping(s, self.editwin.width) - def squeeze_current_text_event(self, event): - """squeeze-current-text event handler + def squeeze_current_text(self): + """Squeeze the text block where the insertion cursor is. - Squeeze the block of text inside which contains the "insert" cursor. - - If the insert cursor is not in a squeezable block of text, give the + If the cursor is not in a squeezable block of text, give the user a small warning and do nothing. """ # Set tag_name to the first valid tag found on the "insert" cursor. diff --git a/Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst b/Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst new file mode 100644 index 00000000000000..56b50e2e91e467 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst @@ -0,0 +1 @@ +IDLE's shell now shows prompts in a separate side-bar. From webhook-mailer at python.org Wed Apr 28 19:01:58 2021 From: webhook-mailer at python.org (ericvsmith) Date: Wed, 28 Apr 2021 23:01:58 -0000 Subject: [Python-checkins] bpo-43970: Optimize Path.cwd() in pathlib by not instantiating a class unnecessarily (GH-25699) Message-ID: https://github.com/python/cpython/commit/4a85718212fd032c922ca7d630b2602dd4b29a35 commit: 4a85718212fd032c922ca7d630b2602dd4b29a35 branch: master author: kfollstad committer: ericvsmith date: 2021-04-28T19:01:51-04:00 summary: bpo-43970: Optimize Path.cwd() in pathlib by not instantiating a class unnecessarily (GH-25699) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 073fce82ad570..cf40370c049a3 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -978,7 +978,7 @@ def cwd(cls): """Return a new path pointing to the current working directory (as returned by os.getcwd()). """ - return cls(cls()._accessor.getcwd()) + return cls(cls._accessor.getcwd()) @classmethod def home(cls): From webhook-mailer at python.org Wed Apr 28 19:27:47 2021 From: webhook-mailer at python.org (jaraco) Date: Wed, 28 Apr 2021 23:27:47 -0000 Subject: [Python-checkins] Document importlib.metadata.PackagePath.locate method (GH-25669) Message-ID: https://github.com/python/cpython/commit/b38b2fa0218911ccc20d576ff504f39c9c9d47ec commit: b38b2fa0218911ccc20d576ff504f39c9c9d47ec branch: master author: Paul Moore committer: jaraco date: 2021-04-28T19:27:37-04:00 summary: Document importlib.metadata.PackagePath.locate method (GH-25669) files: M Doc/library/importlib.metadata.rst diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 0f0a8dd91eea1..40e48d1beec0c 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -191,7 +191,7 @@ Distribution files You can also get the full set of files contained within a distribution. The ``files()`` function takes a distribution package name and returns all of the files installed by this distribution. Each file object returned is a -``PackagePath``, a :class:`pathlib.Path` derived object with additional ``dist``, +``PackagePath``, a :class:`pathlib.PurePath` derived object with additional ``dist``, ``size``, and ``hash`` properties as indicated by the metadata. For example:: >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0] # doctest: +SKIP @@ -215,6 +215,12 @@ Once you have the file, you can also read its contents:: return s.encode('utf-8') return s +You can also use the ``locate`` method to get a the absolute path to the +file:: + + >>> util.locate() # doctest: +SKIP + PosixPath('/home/gustav/example/lib/site-packages/wheel/util.py') + In the case where the metadata file listing files (RECORD or SOURCES.txt) is missing, ``files()`` will return ``None``. The caller may wish to wrap calls to From webhook-mailer at python.org Wed Apr 28 21:07:01 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:07:01 -0000 Subject: [Python-checkins] [doc] Do some polishing in IDEs section (GH-22070) Message-ID: https://github.com/python/cpython/commit/08a4803863856db47a1dde830e56f83e5c6811a2 commit: 08a4803863856db47a1dde830e56f83e5c6811a2 branch: master author: Andre Delfino committer: orsenthil date: 2021-04-28T18:06:53-07:00 summary: [doc] Do some polishing in IDEs section (GH-22070) files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index d00be2462efc87..ed03c494388805 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -29,26 +29,26 @@ Python distribution (normally available as Tools/scripts/idle), includes a graphical debugger. PythonWin is a Python IDE that includes a GUI debugger based on pdb. The -Pythonwin debugger colors breakpoints and has quite a few cool features such as -debugging non-Pythonwin programs. Pythonwin is available as part of the `Python -for Windows Extensions `__ project and -as a part of the ActivePython distribution (see -https://www.activestate.com/activepython\ ). +PythonWin debugger colors breakpoints and has quite a few cool features such as +debugging non-PythonWin programs. PythonWin is available as part of +`pywin32 `_ project and +as a part of the +`ActivePython `_ distribution. `Eric `_ is an IDE built on PyQt and the Scintilla editing component. -Pydb is a version of the standard Python debugger pdb, modified for use with DDD -(Data Display Debugger), a popular graphical debugger front end. Pydb can be -found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at -https://www.gnu.org/software/ddd. +`trepan3k `_ is a gdb-like debugger. + +`Visual Studio Code `_ is an IDE with debugging +tools that integrates with version-control software. There are a number of commercial Python IDEs that include graphical debuggers. They include: -* Wing IDE (https://wingware.com/) -* Komodo IDE (https://komodoide.com/) -* PyCharm (https://www.jetbrains.com/pycharm/) +* `Wing IDE `_ +* `Komodo IDE `_ +* `PyCharm `_ Are there tools to help find bugs or perform static analysis? From webhook-mailer at python.org Wed Apr 28 21:09:08 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:09:08 -0000 Subject: [Python-checkins] [doc] Do some polishing in IDEs section (GH-22070) (GH-25703) Message-ID: https://github.com/python/cpython/commit/c4e503ed809c3823d7cbc355b7dc44809be84228 commit: c4e503ed809c3823d7cbc355b7dc44809be84228 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-28T18:09:03-07:00 summary: [doc] Do some polishing in IDEs section (GH-22070) (GH-25703) (cherry picked from commit 08a4803863856db47a1dde830e56f83e5c6811a2) Co-authored-by: Andre Delfino Co-authored-by: Andre Delfino files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index eb8ac79c906602..f0784f07557115 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -29,26 +29,26 @@ Python distribution (normally available as Tools/scripts/idle), includes a graphical debugger. PythonWin is a Python IDE that includes a GUI debugger based on pdb. The -Pythonwin debugger colors breakpoints and has quite a few cool features such as -debugging non-Pythonwin programs. Pythonwin is available as part of the `Python -for Windows Extensions `__ project and -as a part of the ActivePython distribution (see -https://www.activestate.com/activepython\ ). +PythonWin debugger colors breakpoints and has quite a few cool features such as +debugging non-PythonWin programs. PythonWin is available as part of +`pywin32 `_ project and +as a part of the +`ActivePython `_ distribution. `Eric `_ is an IDE built on PyQt and the Scintilla editing component. -Pydb is a version of the standard Python debugger pdb, modified for use with DDD -(Data Display Debugger), a popular graphical debugger front end. Pydb can be -found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at -https://www.gnu.org/software/ddd. +`trepan3k `_ is a gdb-like debugger. + +`Visual Studio Code `_ is an IDE with debugging +tools that integrates with version-control software. There are a number of commercial Python IDEs that include graphical debuggers. They include: -* Wing IDE (https://wingware.com/) -* Komodo IDE (https://komodoide.com/) -* PyCharm (https://www.jetbrains.com/pycharm/) +* `Wing IDE `_ +* `Komodo IDE `_ +* `PyCharm `_ Are there tools to help find bugs or perform static analysis? From webhook-mailer at python.org Wed Apr 28 21:09:18 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:09:18 -0000 Subject: [Python-checkins] [doc] Do some polishing in IDEs section (GH-22070) (GH-25704) Message-ID: https://github.com/python/cpython/commit/cc1dcb6a5bff01ce73d1f836d9bb993c346900e0 commit: cc1dcb6a5bff01ce73d1f836d9bb993c346900e0 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-28T18:09:14-07:00 summary: [doc] Do some polishing in IDEs section (GH-22070) (GH-25704) (cherry picked from commit 08a4803863856db47a1dde830e56f83e5c6811a2) Co-authored-by: Andre Delfino Co-authored-by: Andre Delfino files: M Doc/faq/programming.rst diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index cc597df6c5db0a..4caff0dd287d69 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -29,26 +29,26 @@ Python distribution (normally available as Tools/scripts/idle), includes a graphical debugger. PythonWin is a Python IDE that includes a GUI debugger based on pdb. The -Pythonwin debugger colors breakpoints and has quite a few cool features such as -debugging non-Pythonwin programs. Pythonwin is available as part of the `Python -for Windows Extensions `__ project and -as a part of the ActivePython distribution (see -https://www.activestate.com/activepython\ ). +PythonWin debugger colors breakpoints and has quite a few cool features such as +debugging non-PythonWin programs. PythonWin is available as part of +`pywin32 `_ project and +as a part of the +`ActivePython `_ distribution. `Eric `_ is an IDE built on PyQt and the Scintilla editing component. -Pydb is a version of the standard Python debugger pdb, modified for use with DDD -(Data Display Debugger), a popular graphical debugger front end. Pydb can be -found at http://bashdb.sourceforge.net/pydb/ and DDD can be found at -https://www.gnu.org/software/ddd. +`trepan3k `_ is a gdb-like debugger. + +`Visual Studio Code `_ is an IDE with debugging +tools that integrates with version-control software. There are a number of commercial Python IDEs that include graphical debuggers. They include: -* Wing IDE (https://wingware.com/) -* Komodo IDE (https://komodoide.com/) -* PyCharm (https://www.jetbrains.com/pycharm/) +* `Wing IDE `_ +* `Komodo IDE `_ +* `PyCharm `_ Are there tools to help find bugs or perform static analysis? From webhook-mailer at python.org Wed Apr 28 21:12:23 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:12:23 -0000 Subject: [Python-checkins] [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) Message-ID: https://github.com/python/cpython/commit/69a733bda34d413d3ad545ef3132240e5d2a7c0c commit: 69a733bda34d413d3ad545ef3132240e5d2a7c0c branch: master author: Andre Delfino committer: orsenthil date: 2021-04-28T18:12:15-07:00 summary: [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) files: M Doc/library/functions.rst diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 72441f0dbfa57..7d8a669f9e16d 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1711,7 +1711,7 @@ are always available. They are listed here in alphabetical order. not found in statically compiled languages or languages that only support single inheritance. This makes it possible to implement "diamond diagrams" where multiple base classes implement the same method. Good design dictates - that this method have the same calling signature in every case (because the + that such implementations have the same calling signature in every case (because the order of calls is determined at runtime, because that order adapts to changes in the class hierarchy, and because that order can include sibling classes that are unknown prior to runtime). From webhook-mailer at python.org Wed Apr 28 21:13:20 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:13:20 -0000 Subject: [Python-checkins] [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) (GH-25706) Message-ID: https://github.com/python/cpython/commit/8d47f92d46a92a5931b8f3dcb4a484df672fc4de commit: 8d47f92d46a92a5931b8f3dcb4a484df672fc4de branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-28T18:13:12-07:00 summary: [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) (GH-25706) (cherry picked from commit 69a733bda34d413d3ad545ef3132240e5d2a7c0c) Co-authored-by: Andre Delfino Co-authored-by: Andre Delfino files: M Doc/library/functions.rst diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index ef51782205b45..3a222b1e67975 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1631,7 +1631,7 @@ are always available. They are listed here in alphabetical order. not found in statically compiled languages or languages that only support single inheritance. This makes it possible to implement "diamond diagrams" where multiple base classes implement the same method. Good design dictates - that this method have the same calling signature in every case (because the + that such implementations have the same calling signature in every case (because the order of calls is determined at runtime, because that order adapts to changes in the class hierarchy, and because that order can include sibling classes that are unknown prior to runtime). From webhook-mailer at python.org Wed Apr 28 21:13:24 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 01:13:24 -0000 Subject: [Python-checkins] [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) (GH-25707) Message-ID: https://github.com/python/cpython/commit/e01003130a2bf05efc0eccc1eebd21982a63aab1 commit: e01003130a2bf05efc0eccc1eebd21982a63aab1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-28T18:13:20-07:00 summary: [doc] Be more clear on super() regarding multiple base classes methods (GH-21789) (GH-25707) (cherry picked from commit 69a733bda34d413d3ad545ef3132240e5d2a7c0c) Co-authored-by: Andre Delfino Co-authored-by: Andre Delfino files: M Doc/library/functions.rst diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 00d40d65195200..036dca565783fe 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1627,7 +1627,7 @@ are always available. They are listed here in alphabetical order. not found in statically compiled languages or languages that only support single inheritance. This makes it possible to implement "diamond diagrams" where multiple base classes implement the same method. Good design dictates - that this method have the same calling signature in every case (because the + that such implementations have the same calling signature in every case (because the order of calls is determined at runtime, because that order adapts to changes in the class hierarchy, and because that order can include sibling classes that are unknown prior to runtime). From webhook-mailer at python.org Wed Apr 28 22:06:14 2021 From: webhook-mailer at python.org (methane) Date: Thu, 29 Apr 2021 02:06:14 -0000 Subject: [Python-checkins] bpo-24275: Don't downgrade unicode-only dicts to mixed on lookups (GH-25186) Message-ID: https://github.com/python/cpython/commit/8557edbfa8f74514de82feea4c62f5963e4e0aa7 commit: 8557edbfa8f74514de82feea4c62f5963e4e0aa7 branch: master author: Hristo Venev committer: methane date: 2021-04-29T11:06:03+09:00 summary: bpo-24275: Don't downgrade unicode-only dicts to mixed on lookups (GH-25186) files: M Lib/test/test_dict.py M Objects/dictobject.c diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 4b31cdc79415f..666cd81e68d81 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -1471,6 +1471,106 @@ def test_dict_items_result_gc(self): gc.collect() self.assertTrue(gc.is_tracked(next(it))) + def test_str_nonstr(self): + # cpython uses a different lookup function if the dict only contains + # `str` keys. Make sure the unoptimized path is used when a non-`str` + # key appears. + + class StrSub(str): + pass + + eq_count = 0 + # This class compares equal to the string 'key3' + class Key3: + def __hash__(self): + return hash('key3') + + def __eq__(self, other): + nonlocal eq_count + if isinstance(other, Key3) or isinstance(other, str) and other == 'key3': + eq_count += 1 + return True + return False + + key3_1 = StrSub('key3') + key3_2 = Key3() + key3_3 = Key3() + + dicts = [] + + # Create dicts of the form `{'key1': 42, 'key2': 43, key3: 44}` in a + # bunch of different ways. In all cases, `key3` is not of type `str`. + # `key3_1` is a `str` subclass and `key3_2` is a completely unrelated + # type. + for key3 in (key3_1, key3_2): + # A literal + dicts.append({'key1': 42, 'key2': 43, key3: 44}) + + # key3 inserted via `dict.__setitem__` + d = {'key1': 42, 'key2': 43} + d[key3] = 44 + dicts.append(d) + + # key3 inserted via `dict.setdefault` + d = {'key1': 42, 'key2': 43} + self.assertEqual(d.setdefault(key3, 44), 44) + dicts.append(d) + + # key3 inserted via `dict.update` + d = {'key1': 42, 'key2': 43} + d.update({key3: 44}) + dicts.append(d) + + # key3 inserted via `dict.__ior__` + d = {'key1': 42, 'key2': 43} + d |= {key3: 44} + dicts.append(d) + + # `dict(iterable)` + def make_pairs(): + yield ('key1', 42) + yield ('key2', 43) + yield (key3, 44) + d = dict(make_pairs()) + dicts.append(d) + + # `dict.copy` + d = d.copy() + dicts.append(d) + + # dict comprehension + d = {key: 42 + i for i,key in enumerate(['key1', 'key2', key3])} + dicts.append(d) + + for d in dicts: + with self.subTest(d=d): + self.assertEqual(d.get('key1'), 42) + + # Try to make an object that is of type `str` and is equal to + # `'key1'`, but (at least on cpython) is a different object. + noninterned_key1 = 'ke' + noninterned_key1 += 'y1' + if support.check_impl_detail(cpython=True): + # suppress a SyntaxWarning + interned_key1 = 'key1' + self.assertFalse(noninterned_key1 is interned_key1) + self.assertEqual(d.get(noninterned_key1), 42) + + self.assertEqual(d.get('key3'), 44) + self.assertEqual(d.get(key3_1), 44) + self.assertEqual(d.get(key3_2), 44) + + # `key3_3` itself is definitely not a dict key, so make sure + # that `__eq__` gets called. + # + # Note that this might not hold for `key3_1` and `key3_2` + # because they might be the same object as one of the dict keys, + # in which case implementations are allowed to skip the call to + # `__eq__`. + eq_count = 0 + self.assertEqual(d.get(key3_3), 44) + self.assertGreaterEqual(eq_count, 1) + class CAPITest(unittest.TestCase): diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 44796a6066728..0aeee7011e844 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -857,7 +857,6 @@ lookdict_unicode(PyDictObject *mp, PyObject *key, unicodes is to override __eq__, and for speed we don't cater to that here. */ if (!PyUnicode_CheckExact(key)) { - mp->ma_keys->dk_lookup = lookdict; return lookdict(mp, key, hash, value_addr); } @@ -900,7 +899,6 @@ lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key, unicodes is to override __eq__, and for speed we don't cater to that here. */ if (!PyUnicode_CheckExact(key)) { - mp->ma_keys->dk_lookup = lookdict; return lookdict(mp, key, hash, value_addr); } @@ -1084,7 +1082,6 @@ insertdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) if (ix == DKIX_ERROR) goto Fail; - assert(PyUnicode_CheckExact(key) || mp->ma_keys->dk_lookup == lookdict); MAINTAIN_TRACKING(mp, key, value); /* When insertion order is different from shared key, we can't share @@ -1106,6 +1103,9 @@ insertdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) if (insertion_resize(mp) < 0) goto Fail; } + if (!PyUnicode_CheckExact(key) && mp->ma_keys->dk_lookup != lookdict) { + mp->ma_keys->dk_lookup = lookdict; + } Py_ssize_t hashpos = find_empty_slot(mp->ma_keys, hash); ep = &DK_ENTRIES(mp->ma_keys)[mp->ma_keys->dk_nentries]; dictkeys_set_index(mp->ma_keys, hashpos, mp->ma_keys->dk_nentries); @@ -3068,6 +3068,9 @@ PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *defaultobj) return NULL; } } + if (!PyUnicode_CheckExact(key) && mp->ma_keys->dk_lookup != lookdict) { + mp->ma_keys->dk_lookup = lookdict; + } Py_ssize_t hashpos = find_empty_slot(mp->ma_keys, hash); ep0 = DK_ENTRIES(mp->ma_keys); ep = &ep0[mp->ma_keys->dk_nentries]; From webhook-mailer at python.org Wed Apr 28 22:35:07 2021 From: webhook-mailer at python.org (methane) Date: Thu, 29 Apr 2021 02:35:07 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in tests. (GH-25655) Message-ID: https://github.com/python/cpython/commit/fa51c0c448aca9fe5d4e8bc02e71de528931778b commit: fa51c0c448aca9fe5d4e8bc02e71de528931778b branch: master author: Inada Naoki committer: methane date: 2021-04-29T11:34:56+09:00 summary: bpo-43651: Fix EncodingWarning in tests. (GH-25655) * test_httplib * test_httpservers * test_logging files: M Lib/test/test_httplib.py M Lib/test/test_httpservers.py M Lib/test/test_logging.py diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 438c2ebbb3d4d..db41e29a4b839 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -2084,9 +2084,9 @@ def test_bytes_body(self): def test_text_file_body(self): self.addCleanup(os_helper.unlink, os_helper.TESTFN) - with open(os_helper.TESTFN, "w") as f: + with open(os_helper.TESTFN, "w", encoding="utf-8") as f: f.write("body") - with open(os_helper.TESTFN) as f: + with open(os_helper.TESTFN, encoding="utf-8") as f: self.conn.request("PUT", "/url", f) message, f = self.get_headers_and_fp() self.assertEqual("text/plain", message.get_content_type()) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index c3d7c8feb1ec0..12574a6025190 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -541,7 +541,7 @@ def test_html_escape_filename(self): fullpath = os.path.join(self.tempdir, filename) try: - open(fullpath, 'w').close() + open(fullpath, 'wb').close() except OSError: raise unittest.SkipTest('Can not create file %s on current file ' 'system' % filename) @@ -646,7 +646,7 @@ def setUp(self): self.skipTest("Python executable path is not encodable to utf-8") self.nocgi_path = os.path.join(self.parent_dir, 'nocgi.py') - with open(self.nocgi_path, 'w') as fp: + with open(self.nocgi_path, 'w', encoding='utf-8') as fp: fp.write(cgi_file1 % self.pythonexe) os.chmod(self.nocgi_path, 0o777) diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 1d061e4993ce0..0f1d2745dddbb 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1428,6 +1428,7 @@ class ConfigFileTest(BaseTest): class=FileHandler level=DEBUG args=("{tempfile}",) + kwargs={{"encoding": "utf-8"}} """ disable_test = """ @@ -1453,7 +1454,7 @@ class ConfigFileTest(BaseTest): def apply_config(self, conf, **kwargs): file = io.StringIO(textwrap.dedent(conf)) - logging.config.fileConfig(file, **kwargs) + logging.config.fileConfig(file, encoding="utf-8", **kwargs) def test_config0_ok(self): # A simple config file which overrides the default settings. @@ -1581,7 +1582,8 @@ def cleanup(h1, fn): h1.close() os.remove(fn) - with self.check_no_resource_warning(): + #with self.check_no_resource_warning(): + if 1: fd, fn = tempfile.mkstemp(".log", "test_logging-X-") os.close(fd) @@ -1659,6 +1661,7 @@ def test_defaults_do_no_interpolation(self): os.close(fd) logging.config.fileConfig( fn, + encoding="utf-8", defaults=dict( version=1, disable_existing_loggers=False, @@ -3204,7 +3207,8 @@ def cleanup(h1, fn): "handlers": { "file": { "class": "logging.FileHandler", - "filename": fn + "filename": fn, + "encoding": "utf-8", } }, "root": { @@ -5279,8 +5283,8 @@ def rotator(source, dest): class TimedRotatingFileHandlerTest(BaseFileTest): # other test methods added below def test_rollover(self): - fh = logging.handlers.TimedRotatingFileHandler(self.fn, 'S', - backupCount=1) + fh = logging.handlers.TimedRotatingFileHandler( + self.fn, 'S', encoding="utf-8", backupCount=1) fmt = logging.Formatter('%(asctime)s %(message)s') fh.setFormatter(fmt) r1 = logging.makeLogRecord({'msg': 'testing - initial'}) @@ -5323,18 +5327,18 @@ def test_rollover(self): def test_invalid(self): assertRaises = self.assertRaises assertRaises(ValueError, logging.handlers.TimedRotatingFileHandler, - self.fn, 'X', delay=True) + self.fn, 'X', encoding="utf-8", delay=True) assertRaises(ValueError, logging.handlers.TimedRotatingFileHandler, - self.fn, 'W', delay=True) + self.fn, 'W', encoding="utf-8", delay=True) assertRaises(ValueError, logging.handlers.TimedRotatingFileHandler, - self.fn, 'W7', delay=True) + self.fn, 'W7', encoding="utf-8", delay=True) def test_compute_rollover_daily_attime(self): currentTime = 0 atTime = datetime.time(12, 0, 0) rh = logging.handlers.TimedRotatingFileHandler( - self.fn, when='MIDNIGHT', interval=1, backupCount=0, utc=True, - atTime=atTime) + self.fn, encoding="utf-8", when='MIDNIGHT', interval=1, backupCount=0, + utc=True, atTime=atTime) try: actual = rh.computeRollover(currentTime) self.assertEqual(actual, currentTime + 12 * 60 * 60) @@ -5354,8 +5358,8 @@ def test_compute_rollover_weekly_attime(self): wday = time.gmtime(today).tm_wday for day in range(7): rh = logging.handlers.TimedRotatingFileHandler( - self.fn, when='W%d' % day, interval=1, backupCount=0, utc=True, - atTime=atTime) + self.fn, encoding="utf-8", when='W%d' % day, interval=1, backupCount=0, + utc=True, atTime=atTime) try: if wday > day: # The rollover day has already passed this week, so we @@ -5399,7 +5403,7 @@ def secs(**kw): ): def test_compute_rollover(self, when=when, exp=exp): rh = logging.handlers.TimedRotatingFileHandler( - self.fn, when=when, interval=1, backupCount=0, utc=True) + self.fn, encoding="utf-8", when=when, interval=1, backupCount=0, utc=True) currentTime = 0.0 actual = rh.computeRollover(currentTime) if exp != actual: From webhook-mailer at python.org Wed Apr 28 22:35:46 2021 From: webhook-mailer at python.org (methane) Date: Thu, 29 Apr 2021 02:35:46 -0000 Subject: [Python-checkins] bpo-43651: Fix EncodingWarning in `os.fdopen()` and test_os (GH-25654) Message-ID: https://github.com/python/cpython/commit/a69256527f93d2aa32e76658deab829e324d97b6 commit: a69256527f93d2aa32e76658deab829e324d97b6 branch: master author: Inada Naoki committer: methane date: 2021-04-29T11:35:36+09:00 summary: bpo-43651: Fix EncodingWarning in `os.fdopen()` and test_os (GH-25654) files: M Lib/os.py M Lib/test/test_os.py diff --git a/Lib/os.py b/Lib/os.py index ea09e8c7e1048..d26cfc99939f3 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -983,16 +983,16 @@ def popen(cmd, mode="r", buffering=-1): import subprocess, io if mode == "r": proc = subprocess.Popen(cmd, - shell=True, + shell=True, text=True, stdout=subprocess.PIPE, bufsize=buffering) - return _wrap_close(io.TextIOWrapper(proc.stdout), proc) + return _wrap_close(proc.stdout, proc) else: proc = subprocess.Popen(cmd, - shell=True, + shell=True, text=True, stdin=subprocess.PIPE, bufsize=buffering) - return _wrap_close(io.TextIOWrapper(proc.stdin), proc) + return _wrap_close(proc.stdin, proc) # Helper for popen() -- a proxy for a file whose close waits for the process class _wrap_close: diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 96fddc7d05766..8b3d1feb78fe3 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -269,7 +269,7 @@ def test_write_windows_console(self): def fdopen_helper(self, *args): fd = os.open(os_helper.TESTFN, os.O_RDONLY) - f = os.fdopen(fd, *args) + f = os.fdopen(fd, *args, encoding="utf-8") f.close() def test_fdopen(self): @@ -290,7 +290,7 @@ def test_replace(self): os.replace(os_helper.TESTFN, TESTFN2) self.assertRaises(FileNotFoundError, os.stat, os_helper.TESTFN) - with open(TESTFN2, 'r') as f: + with open(TESTFN2, 'r', encoding='utf-8') as f: self.assertEqual(f.read(), "1") def test_open_keywords(self): @@ -1627,7 +1627,7 @@ def test_exist_ok_s_isgid_directory(self): def test_exist_ok_existing_regular_file(self): base = os_helper.TESTFN path = os.path.join(os_helper.TESTFN, 'dir1') - with open(path, 'w') as f: + with open(path, 'w', encoding='utf-8') as f: f.write('abc') self.assertRaises(OSError, os.makedirs, path) self.assertRaises(OSError, os.makedirs, path, exist_ok=False) @@ -2094,7 +2094,7 @@ def test_chmod(self): class TestInvalidFD(unittest.TestCase): - singles = ["fchdir", "dup", "fdopen", "fdatasync", "fstat", + singles = ["fchdir", "dup", "fdatasync", "fstat", "fstatvfs", "fsync", "tcgetpgrp", "ttyname"] #singles.append("close") #We omit close because it doesn't raise an exception on some platforms @@ -2106,15 +2106,18 @@ def helper(self): for f in singles: locals()["test_"+f] = get_single(f) - def check(self, f, *args): + def check(self, f, *args, **kwargs): try: - f(os_helper.make_bad_fd(), *args) + f(os_helper.make_bad_fd(), *args, **kwargs) except OSError as e: self.assertEqual(e.errno, errno.EBADF) else: self.fail("%r didn't raise an OSError with a bad file descriptor" % f) + def test_fdopen(self): + self.check(os.fdopen, encoding="utf-8") + @unittest.skipUnless(hasattr(os, 'isatty'), 'test needs os.isatty()') def test_isatty(self): self.assertEqual(os.isatty(os_helper.make_bad_fd()), False) @@ -2210,7 +2213,7 @@ def _test_link(self, file1, file2): os.link(file1, file2) except PermissionError as e: self.skipTest('os.link(): %s' % e) - with open(file1, "r") as f1, open(file2, "r") as f2: + with open(file1, "rb") as f1, open(file2, "rb") as f2: self.assertTrue(os.path.sameopenfile(f1.fileno(), f2.fileno())) def test_link(self): @@ -3009,7 +3012,7 @@ def create_args(self, *, with_env=False, use_bytes=False): code = ('import sys, os; magic = os.environ[%r]; sys.exit(%s)' % (self.key, self.exitcode)) - with open(filename, "w") as fp: + with open(filename, "w", encoding="utf-8") as fp: fp.write(code) args = [sys.executable, filename] @@ -3149,7 +3152,7 @@ def _test_invalid_env(self, spawn): # equal character in the environment variable value filename = os_helper.TESTFN self.addCleanup(os_helper.unlink, filename) - with open(filename, "w") as fp: + with open(filename, "w", encoding="utf-8") as fp: fp.write('import sys, os\n' 'if os.getenv("FRUIT") != "orange=lemon":\n' ' raise AssertionError') From webhook-mailer at python.org Wed Apr 28 22:36:13 2021 From: webhook-mailer at python.org (methane) Date: Thu, 29 Apr 2021 02:36:13 -0000 Subject: [Python-checkins] bpo-41139: Deprecate `cgi.log()` (GH-25625) Message-ID: https://github.com/python/cpython/commit/e52ab42cedd2a5ef4c3c1a47d0cf96a8f06d051f commit: e52ab42cedd2a5ef4c3c1a47d0cf96a8f06d051f branch: master author: Inada Naoki committer: methane date: 2021-04-29T11:36:04+09:00 summary: bpo-41139: Deprecate `cgi.log()` (GH-25625) files: A Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst M Doc/whatsnew/3.10.rst M Lib/cgi.py M Lib/test/test_cgi.py diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 37c1b8a0cb2eb..fa99ce5792994 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1427,6 +1427,9 @@ Deprecated Python 3.12. Use :meth:`pathlib.Path.hardlink_to` instead. (Contributed by Barney Gale in :issue:`39950`.) +* ``cgi.log()`` is deprecated and slated for for removal in Python 3.12. + (Contributed by Inada Naoki in :issue:`41139`.) + Removed ======= diff --git a/Lib/cgi.py b/Lib/cgi.py index 6c72507c2087d..6cb8cf28bd664 100755 --- a/Lib/cgi.py +++ b/Lib/cgi.py @@ -41,6 +41,7 @@ import html import locale import tempfile +import warnings __all__ = ["MiniFieldStorage", "FieldStorage", "parse", "parse_multipart", "parse_header", "test", "print_exception", "print_environ", @@ -77,9 +78,11 @@ def initlog(*allargs): """ global log, logfile, logfp + warnings.warn("cgi.log() is deprecated as of 3.10. Use logging instead", + DeprecationWarning, stacklevel=2) if logfile and not logfp: try: - logfp = open(logfile, "a") + logfp = open(logfile, "a", encoding="locale") except OSError: pass if not logfp: diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py index 239d97589cac2..c1b893d3fe534 100644 --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -6,6 +6,7 @@ from collections import namedtuple from io import StringIO, BytesIO from test import support +from test.support import warnings_helper class HackedSysModule: # The regression test will have real values in sys.argv, which @@ -220,6 +221,7 @@ def test_separator(self): else: self.assertEqual(fs.getvalue(key), expect_val[0]) + @warnings_helper.ignore_warnings(category=DeprecationWarning) def test_log(self): cgi.log("Testing") diff --git a/Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst b/Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst new file mode 100644 index 0000000000000..5df8929891923 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst @@ -0,0 +1 @@ +Deprecate undocumented ``cgi.log()`` API. From webhook-mailer at python.org Thu Apr 29 01:59:05 2021 From: webhook-mailer at python.org (brandtbucher) Date: Thu, 29 Apr 2021 05:59:05 -0000 Subject: [Python-checkins] bpo-43892: Make match patterns explicit in the AST (GH-25585) Message-ID: https://github.com/python/cpython/commit/1e7b858575d0ad782939f86aae4a2fa1c29e9f14 commit: 1e7b858575d0ad782939f86aae4a2fa1c29e9f14 branch: master author: Nick Coghlan committer: brandtbucher date: 2021-04-28T22:58:44-07:00 summary: bpo-43892: Make match patterns explicit in the AST (GH-25585) Co-authored-by: Brandt Bucher files: A Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst M Doc/library/ast.rst M Grammar/python.gram M Include/internal/pycore_ast.h M Include/internal/pycore_ast_state.h M Include/internal/pycore_symtable.h M Lib/ast.py M Lib/test/test_patma.py M Lib/test/test_unparse.py M Parser/Python.asdl M Parser/parser.c M Parser/pegen.c M Parser/pegen.h M Python/Python-ast.c M Python/ast.c M Python/ast_opt.c M Python/ast_unparse.c M Python/bltinmodule.c M Python/compile.c M Python/symtable.c diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index ff3fd99f5d4f44..c7074c40f280c6 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -1245,23 +1245,28 @@ Control flow type_ignores=[]) +Pattern matching +^^^^^^^^^^^^^^^^ + + .. class:: Match(subject, cases) A ``match`` statement. ``subject`` holds the subject of the match (the object that is being matched against the cases) and ``cases`` contains an iterable of :class:`match_case` nodes with the different cases. - .. class:: match_case(pattern, guard, body) - A single case pattern in a ``match`` statement. ``pattern`` contains the - match pattern that will be used to match the subject against. Notice that - the meaning of the :class:`AST` nodes in this attribute have a different - meaning than in other places, as they represent patterns to match against. - The ``guard`` attribute contains an expression that will be evaluated if - the pattern matches the subject. If the pattern matches and the ``guard`` condition - is truthy, the body of the case shall be executed. ``body`` contains a list - of nodes to execute if the guard is truthy. + A single case pattern in a ``match`` statement. ``pattern`` contains the + match pattern that the subject will be matched against. Note that the + :class:`AST` nodes produced for patterns differ from those produced for + expressions, even when they share the same syntax. + + The ``guard`` attribute contains an expression that will be evaluated if + the pattern matches the subject. + + ``body`` contains a list of nodes to execute if the pattern matches and + the result of evaluating the guard expression is truthy. .. doctest:: @@ -1278,10 +1283,9 @@ Control flow subject=Name(id='x', ctx=Load()), cases=[ match_case( - pattern=List( - elts=[ - Name(id='x', ctx=Store())], - ctx=Load()), + pattern=MatchSequence( + patterns=[ + MatchAs(name='x')]), guard=Compare( left=Name(id='x', ctx=Load()), ops=[ @@ -1292,10 +1296,244 @@ Control flow Expr( value=Constant(value=Ellipsis))]), match_case( - pattern=Call( - func=Name(id='tuple', ctx=Load()), - args=[], - keywords=[]), + pattern=MatchClass( + cls=Name(id='tuple', ctx=Load()), + patterns=[], + kwd_attrs=[], + kwd_patterns=[]), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchValue(value) + + A match literal or value pattern that compares by equality. ``value`` is + an expression node. Permitted value nodes are restricted as described in + the match statement documentation. This pattern succeeds if the match + subject is equal to the evaluated value. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case "Relevant": + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchValue( + value=Constant(value='Relevant')), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchSingleton(value) + + A match literal pattern that compares by identity. ``value`` is the + singleton to be compared against: ``None``, ``True``, or ``False``. This + pattern succeeds if the match subject is the given constant. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case None: + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchSingleton(value=None), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchSequence(patterns) + + A match sequence pattern. ``patterns`` contains the patterns to be matched + against the subject elements if the subject is a sequence. Matches a variable + length sequence if one of the subpatterns is a ``MatchStar`` node, otherwise + matches a fixed length sequence. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case [1, 2]: + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchSequence( + patterns=[ + MatchValue( + value=Constant(value=1)), + MatchValue( + value=Constant(value=2))]), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchStar(name) + + Matches the rest of the sequence in a variable length match sequence pattern. + If ``name`` is not ``None``, a list containing the remaining sequence + elements is bound to that name if the overall sequence pattern is successful. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case [1, 2, *rest]: + ... ... + ... case [*_]: + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchSequence( + patterns=[ + MatchValue( + value=Constant(value=1)), + MatchValue( + value=Constant(value=2)), + MatchStar(name='rest')]), + body=[ + Expr( + value=Constant(value=Ellipsis))]), + match_case( + pattern=MatchSequence( + patterns=[ + MatchStar()]), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchMapping(keys, patterns, rest) + + A match mapping pattern. ``keys`` is a sequence of expression nodes. + ``patterns`` is a corresponding sequence of pattern nodes. ``rest`` is an + optional name that can be specified to capture the remaining mapping elements. + Permitted key expressions are restricted as described in the match statement + documentation. + + This pattern succeeds if the subject is a mapping, all evaluated key + expressions are present in the mapping, and the value corresponding to each + key matches the corresponding subpattern. If ``rest`` is not ``None``, a dict + containing the remaining mapping elements is bound to that name if the overall + mapping pattern is successful. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case {1: _, 2: _}: + ... ... + ... case {**rest}: + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchMapping( + keys=[ + Constant(value=1), + Constant(value=2)], + patterns=[ + MatchAs(), + MatchAs()]), + body=[ + Expr( + value=Constant(value=Ellipsis))]), + match_case( + pattern=MatchMapping(keys=[], patterns=[], rest='rest'), + body=[ + Expr( + value=Constant(value=Ellipsis))])])], + type_ignores=[]) + +.. class:: MatchClass(cls, patterns, kwd_attrs, kwd_patterns) + + A match class pattern. ``cls`` is an expression giving the nominal class to + be matched. ``patterns`` is a sequence of pattern nodes to be matched against + the class defined sequence of pattern matching attributes. ``kwd_attrs`` is a + sequence of additional attributes to be matched (specified as keyword arguments + in the class pattern), ``kwd_patterns`` are the corresponding patterns + (specified as keyword values in the class pattern). + + This pattern succeeds if the subject is an instance of the nominated class, + all positional patterns match the corresponding class-defined attributes, and + any specified keyword attributes match their corresponding pattern. + + Note: classes may define a property that returns self in order to match a + pattern node against the instance being matched. Several builtin types are + also matched that way, as described in the match statement documentation. + + .. doctest:: + + >>> print(ast.dump(ast.parse(""" + ... match x: + ... case Point2D(0, 0): + ... ... + ... case Point3D(x=0, y=0, z=0): + ... ... + ... """), indent=4)) + Module( + body=[ + Match( + subject=Name(id='x', ctx=Load()), + cases=[ + match_case( + pattern=MatchClass( + cls=Name(id='Point2D', ctx=Load()), + patterns=[ + MatchValue( + value=Constant(value=0)), + MatchValue( + value=Constant(value=0))], + kwd_attrs=[], + kwd_patterns=[]), + body=[ + Expr( + value=Constant(value=Ellipsis))]), + match_case( + pattern=MatchClass( + cls=Name(id='Point3D', ctx=Load()), + patterns=[], + kwd_attrs=[ + 'x', + 'y', + 'z'], + kwd_patterns=[ + MatchValue( + value=Constant(value=0)), + MatchValue( + value=Constant(value=0)), + MatchValue( + value=Constant(value=0))]), body=[ Expr( value=Constant(value=Ellipsis))])])], @@ -1303,10 +1541,14 @@ Control flow .. class:: MatchAs(pattern, name) - A match "as-pattern". The as-pattern matches whatever pattern is on its - left-hand side, but also binds the value to a name. ``pattern`` contains - the match pattern that will be used to match the subject agsinst. The ``name`` - attribute contains the name that will be binded if the pattern is successful. + A match "as-pattern", capture pattern or wildcard pattern. ``pattern`` + contains the match pattern that the subject will be matched against. + If the pattern is ``None``, the node represents a capture pattern (i.e a + bare name) and will always succeed. + + The ``name`` attribute contains the name that will be bound if the pattern + is successful. If ``name`` is ``None``, ``pattern`` must also be ``None`` + and the node represents the wildcard pattern. .. doctest:: @@ -1314,6 +1556,8 @@ Control flow ... match x: ... case [x] as y: ... ... + ... case _: + ... ... ... """), indent=4)) Module( body=[ @@ -1322,24 +1566,27 @@ Control flow cases=[ match_case( pattern=MatchAs( - pattern=List( - elts=[ - Name(id='x', ctx=Store())], - ctx=Load()), + pattern=MatchSequence( + patterns=[ + MatchAs(name='x')]), name='y'), + body=[ + Expr( + value=Constant(value=Ellipsis))]), + match_case( + pattern=MatchAs(), body=[ Expr( value=Constant(value=Ellipsis))])])], type_ignores=[]) - .. class:: MatchOr(patterns) - A match "or-pattern". An or-pattern matches each of its subpatterns in turn - to the subject, until one succeeds. The or-pattern is then deemed to - succeed. If none of the subpatterns succeed the or-pattern fails. The - ``patterns`` attribute contains a list of match patterns nodes that will be - matched against the subject. + A match "or-pattern". An or-pattern matches each of its subpatterns in turn + to the subject, until one succeeds. The or-pattern is then deemed to + succeed. If none of the subpatterns succeed the or-pattern fails. The + ``patterns`` attribute contains a list of match pattern nodes that will be + matched against the subject. .. doctest:: @@ -1356,11 +1603,10 @@ Control flow match_case( pattern=MatchOr( patterns=[ - List( - elts=[ - Name(id='x', ctx=Store())], - ctx=Load()), - Name(id='y', ctx=Store())]), + MatchSequence( + patterns=[ + MatchAs(name='x')]), + MatchAs(name='y')]), body=[ Expr( value=Constant(value=Ellipsis))])])], diff --git a/Grammar/python.gram b/Grammar/python.gram index ca9bed3e4f20b4..c8d765b632909c 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -234,20 +234,20 @@ case_block[match_case_ty]: _PyAST_match_case(pattern, guard, body, p->arena) } guard[expr_ty]: 'if' guard=named_expression { guard } -patterns[expr_ty]: - | values[asdl_expr_seq*]=open_sequence_pattern { - _PyAST_Tuple(values, Load, EXTRA) } +patterns[pattern_ty]: + | patterns[asdl_pattern_seq*]=open_sequence_pattern { + _PyAST_MatchSequence(patterns, EXTRA) } | pattern -pattern[expr_ty]: +pattern[pattern_ty]: | as_pattern | or_pattern -as_pattern[expr_ty]: - | pattern=or_pattern 'as' target=capture_pattern { +as_pattern[pattern_ty]: + | pattern=or_pattern 'as' target=pattern_capture_target { _PyAST_MatchAs(pattern, target->v.Name.id, EXTRA) } -or_pattern[expr_ty]: - | patterns[asdl_expr_seq*]='|'.closed_pattern+ { +or_pattern[pattern_ty]: + | patterns[asdl_pattern_seq*]='|'.closed_pattern+ { asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _PyAST_MatchOr(patterns, EXTRA) } -closed_pattern[expr_ty]: +closed_pattern[pattern_ty]: | literal_pattern | capture_pattern | wildcard_pattern @@ -257,27 +257,47 @@ closed_pattern[expr_ty]: | mapping_pattern | class_pattern -literal_pattern[expr_ty]: +# Literal patterns are used for equality and identity constraints +literal_pattern[pattern_ty]: + | value=signed_number !('+' | '-') { _PyAST_MatchValue(value, EXTRA) } + | value=complex_number { _PyAST_MatchValue(value, EXTRA) } + | value=strings { _PyAST_MatchValue(value, EXTRA) } + | 'None' { _PyAST_MatchSingleton(Py_None, EXTRA) } + | 'True' { _PyAST_MatchSingleton(Py_True, EXTRA) } + | 'False' { _PyAST_MatchSingleton(Py_False, EXTRA) } + +# Literal expressions are used to restrict permitted mapping pattern keys +literal_expr[expr_ty]: | signed_number !('+' | '-') - | real=signed_number '+' imag=NUMBER { _PyAST_BinOp(real, Add, imag, EXTRA) } - | real=signed_number '-' imag=NUMBER { _PyAST_BinOp(real, Sub, imag, EXTRA) } + | complex_number | strings | 'None' { _PyAST_Constant(Py_None, NULL, EXTRA) } | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) } | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) } + +complex_number[expr_ty]: + | real=signed_number '+' imag=imaginary_number { _PyAST_BinOp(real, Add, imag, EXTRA) } + | real=signed_number '-' imag=imaginary_number { _PyAST_BinOp(real, Sub, imag, EXTRA) } + signed_number[expr_ty]: | NUMBER | '-' number=NUMBER { _PyAST_UnaryOp(USub, number, EXTRA) } -capture_pattern[expr_ty]: +imaginary_number[expr_ty]: + | imag=NUMBER { _PyPegen_ensure_imaginary(p, imag) } + +capture_pattern[pattern_ty]: + | target=pattern_capture_target { _PyAST_MatchAs(NULL, target->v.Name.id, EXTRA) } + +pattern_capture_target[expr_ty]: | !"_" name=NAME !('.' | '(' | '=') { _PyPegen_set_expr_context(p, name, Store) } -wildcard_pattern[expr_ty]: - | "_" { _PyAST_Name(CHECK(PyObject*, _PyPegen_new_identifier(p, "_")), Store, EXTRA) } +wildcard_pattern[pattern_ty]: + | "_" { _PyAST_MatchAs(NULL, NULL, EXTRA) } -value_pattern[expr_ty]: - | attr=attr !('.' | '(' | '=') { attr } +value_pattern[pattern_ty]: + | attr=attr !('.' | '(' | '=') { _PyAST_MatchValue(attr, EXTRA) } attr[expr_ty]: | value=name_or_attr '.' attr=NAME { _PyAST_Attribute(value, attr->v.Name.id, Load, EXTRA) } @@ -285,50 +305,77 @@ name_or_attr[expr_ty]: | attr | NAME -group_pattern[expr_ty]: +group_pattern[pattern_ty]: | '(' pattern=pattern ')' { pattern } -sequence_pattern[expr_ty]: - | '[' values=maybe_sequence_pattern? ']' { _PyAST_List(values, Load, EXTRA) } - | '(' values=open_sequence_pattern? ')' { _PyAST_Tuple(values, Load, EXTRA) } +sequence_pattern[pattern_ty]: + | '[' patterns=maybe_sequence_pattern? ']' { _PyAST_MatchSequence(patterns, EXTRA) } + | '(' patterns=open_sequence_pattern? ')' { _PyAST_MatchSequence(patterns, EXTRA) } open_sequence_pattern[asdl_seq*]: - | value=maybe_star_pattern ',' values=maybe_sequence_pattern? { - _PyPegen_seq_insert_in_front(p, value, values) } + | pattern=maybe_star_pattern ',' patterns=maybe_sequence_pattern? { + _PyPegen_seq_insert_in_front(p, pattern, patterns) } maybe_sequence_pattern[asdl_seq*]: - | values=','.maybe_star_pattern+ ','? { values } -maybe_star_pattern[expr_ty]: + | patterns=','.maybe_star_pattern+ ','? { patterns } +maybe_star_pattern[pattern_ty]: | star_pattern | pattern -star_pattern[expr_ty]: - | '*' value=(capture_pattern | wildcard_pattern) { - _PyAST_Starred(value, Store, EXTRA) } - -mapping_pattern[expr_ty]: - | '{' items=items_pattern? '}' { - _PyAST_Dict(CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, items)), CHECK(asdl_expr_seq*, _PyPegen_get_values(p, items)), EXTRA) } +star_pattern[pattern_ty]: + | '*' target=pattern_capture_target { + _PyAST_MatchStar(target->v.Name.id, EXTRA) } + | '*' wildcard_pattern { + _PyAST_MatchStar(NULL, EXTRA) } + +mapping_pattern[pattern_ty]: + | '{' '}' { + _PyAST_MatchMapping(NULL, NULL, NULL, EXTRA) } + | '{' rest=double_star_pattern ','? '}' { + _PyAST_MatchMapping(NULL, NULL, rest->v.Name.id, EXTRA) } + | '{' items=items_pattern ',' rest=double_star_pattern ','? '}' { + _PyAST_MatchMapping( + CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, items)), + CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, items)), + rest->v.Name.id, + EXTRA) } + | '{' items=items_pattern ','? '}' { + _PyAST_MatchMapping( + CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, items)), + CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, items)), + NULL, + EXTRA) } items_pattern[asdl_seq*]: - | items=','.key_value_pattern+ ','? { items } -key_value_pattern[KeyValuePair*]: - | key=(literal_pattern | value_pattern) ':' value=pattern { - _PyPegen_key_value_pair(p, key, value) } - | double_star_pattern -double_star_pattern[KeyValuePair*]: - | '**' value=capture_pattern { _PyPegen_key_value_pair(p, NULL, value) } - -class_pattern[expr_ty]: - | func=name_or_attr '(' ')' { _PyAST_Call(func, NULL, NULL, EXTRA) } - | func=name_or_attr '(' args=positional_patterns ','? ')' { - _PyAST_Call(func, args, NULL, EXTRA) } - | func=name_or_attr '(' keywords=keyword_patterns ','? ')' { - _PyAST_Call(func, NULL, keywords, EXTRA) } - | func=name_or_attr '(' args=positional_patterns ',' keywords=keyword_patterns ','? ')' { - _PyAST_Call(func, args, keywords, EXTRA) } -positional_patterns[asdl_expr_seq*]: - | args[asdl_expr_seq*]=','.pattern+ { args } -keyword_patterns[asdl_keyword_seq*]: - | keywords[asdl_keyword_seq*]=','.keyword_pattern+ { keywords } -keyword_pattern[keyword_ty]: - | arg=NAME '=' value=pattern { _PyAST_keyword(arg->v.Name.id, value, EXTRA) } + | items=','.key_value_pattern+ { items } +key_value_pattern[KeyPatternPair*]: + | key=(literal_expr | attr) ':' pattern=pattern { + _PyPegen_key_pattern_pair(p, key, pattern) } +double_star_pattern[expr_ty]: + | '**' target=pattern_capture_target { target } + +class_pattern[pattern_ty]: + | cls=name_or_attr '(' ')' { + _PyAST_MatchClass(cls, NULL, NULL, NULL, EXTRA) } + | cls=name_or_attr '(' patterns=positional_patterns ','? ')' { + _PyAST_MatchClass(cls, patterns, NULL, NULL, EXTRA) } + | cls=name_or_attr '(' keywords=keyword_patterns ','? ')' { + _PyAST_MatchClass( + cls, NULL, + CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, + CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, keywords)))), + CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)), + EXTRA) } + | cls=name_or_attr '(' patterns=positional_patterns ',' keywords=keyword_patterns ','? ')' { + _PyAST_MatchClass( + cls, + patterns, + CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, + CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, keywords)))), + CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)), + EXTRA) } +positional_patterns[asdl_pattern_seq*]: + | args[asdl_pattern_seq*]=','.pattern+ { args } +keyword_patterns[asdl_seq*]: + | keywords[asdl_seq*]=','.keyword_pattern+ { keywords } +keyword_pattern[KeyPatternPair*]: + | arg=NAME '=' value=pattern { _PyPegen_key_pattern_pair(p, arg, value) } return_stmt[stmt_ty]: | 'return' a=[star_expressions] { _PyAST_Return(a, EXTRA) } diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h index 64d68b2b32d904..ebb6a90087bb52 100644 --- a/Include/internal/pycore_ast.h +++ b/Include/internal/pycore_ast.h @@ -47,6 +47,8 @@ typedef struct _withitem *withitem_ty; typedef struct _match_case *match_case_ty; +typedef struct _pattern *pattern_ty; + typedef struct _type_ignore *type_ignore_ty; @@ -130,6 +132,13 @@ typedef struct { asdl_match_case_seq *_Py_asdl_match_case_seq_new(Py_ssize_t size, PyArena *arena); +typedef struct { + _ASDL_SEQ_HEAD + pattern_ty typed_elements[1]; +} asdl_pattern_seq; + +asdl_pattern_seq *_Py_asdl_pattern_seq_new(Py_ssize_t size, PyArena *arena); + typedef struct { _ASDL_SEQ_HEAD type_ignore_ty typed_elements[1]; @@ -327,8 +336,7 @@ enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4, YieldFrom_kind=15, Compare_kind=16, Call_kind=17, FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20, Attribute_kind=21, Subscript_kind=22, Starred_kind=23, - Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27, - MatchAs_kind=28, MatchOr_kind=29}; + Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27}; struct _expr { enum _expr_kind kind; union { @@ -471,15 +479,6 @@ struct _expr { expr_ty step; } Slice; - struct { - expr_ty pattern; - identifier name; - } MatchAs; - - struct { - asdl_expr_seq *patterns; - } MatchOr; - } v; int lineno; int col_offset; @@ -555,11 +554,63 @@ struct _withitem { }; struct _match_case { - expr_ty pattern; + pattern_ty pattern; expr_ty guard; asdl_stmt_seq *body; }; +enum _pattern_kind {MatchValue_kind=1, MatchSingleton_kind=2, + MatchSequence_kind=3, MatchMapping_kind=4, + MatchClass_kind=5, MatchStar_kind=6, MatchAs_kind=7, + MatchOr_kind=8}; +struct _pattern { + enum _pattern_kind kind; + union { + struct { + expr_ty value; + } MatchValue; + + struct { + constant value; + } MatchSingleton; + + struct { + asdl_pattern_seq *patterns; + } MatchSequence; + + struct { + asdl_expr_seq *keys; + asdl_pattern_seq *patterns; + identifier rest; + } MatchMapping; + + struct { + expr_ty cls; + asdl_pattern_seq *patterns; + asdl_identifier_seq *kwd_attrs; + asdl_pattern_seq *kwd_patterns; + } MatchClass; + + struct { + identifier name; + } MatchStar; + + struct { + pattern_ty pattern; + identifier name; + } MatchAs; + + struct { + asdl_pattern_seq *patterns; + } MatchOr; + + } v; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; +}; + enum _type_ignore_kind {TypeIgnore_kind=1}; struct _type_ignore { enum _type_ignore_kind kind; @@ -733,11 +784,6 @@ expr_ty _PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int expr_ty _PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); comprehension_ty _PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async, PyArena *arena); @@ -760,8 +806,32 @@ alias_ty _PyAST_alias(identifier name, identifier asname, int lineno, int *arena); withitem_ty _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena); -match_case_ty _PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * - body, PyArena *arena); +match_case_ty _PyAST_match_case(pattern_ty pattern, expr_ty guard, + asdl_stmt_seq * body, PyArena *arena); +pattern_ty _PyAST_MatchValue(expr_ty value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +pattern_ty _PyAST_MatchSingleton(constant value, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena + *arena); +pattern_ty _PyAST_MatchSequence(asdl_pattern_seq * patterns, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +pattern_ty _PyAST_MatchMapping(asdl_expr_seq * keys, asdl_pattern_seq * + patterns, identifier rest, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +pattern_ty _PyAST_MatchClass(expr_ty cls, asdl_pattern_seq * patterns, + asdl_identifier_seq * kwd_attrs, asdl_pattern_seq + * kwd_patterns, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +pattern_ty _PyAST_MatchStar(identifier name, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena); +pattern_ty _PyAST_MatchAs(pattern_ty pattern, identifier name, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); +pattern_ty _PyAST_MatchOr(asdl_pattern_seq * patterns, int lineno, int + col_offset, int end_lineno, int end_col_offset, + PyArena *arena); type_ignore_ty _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena); diff --git a/Include/internal/pycore_ast_state.h b/Include/internal/pycore_ast_state.h index c5ae2242177920..882cd09c00628d 100644 --- a/Include/internal/pycore_ast_state.h +++ b/Include/internal/pycore_ast_state.h @@ -92,7 +92,13 @@ struct ast_state { PyObject *MatMult_singleton; PyObject *MatMult_type; PyObject *MatchAs_type; + PyObject *MatchClass_type; + PyObject *MatchMapping_type; PyObject *MatchOr_type; + PyObject *MatchSequence_type; + PyObject *MatchSingleton_type; + PyObject *MatchStar_type; + PyObject *MatchValue_type; PyObject *Match_type; PyObject *Mod_singleton; PyObject *Mod_type; @@ -159,6 +165,7 @@ struct ast_state { PyObject *boolop_type; PyObject *cases; PyObject *cause; + PyObject *cls; PyObject *cmpop_type; PyObject *col_offset; PyObject *comparators; @@ -194,6 +201,8 @@ struct ast_state { PyObject *kind; PyObject *kw_defaults; PyObject *kwarg; + PyObject *kwd_attrs; + PyObject *kwd_patterns; PyObject *kwonlyargs; PyObject *left; PyObject *level; @@ -212,8 +221,10 @@ struct ast_state { PyObject *optional_vars; PyObject *orelse; PyObject *pattern; + PyObject *pattern_type; PyObject *patterns; PyObject *posonlyargs; + PyObject *rest; PyObject *returns; PyObject *right; PyObject *simple; diff --git a/Include/internal/pycore_symtable.h b/Include/internal/pycore_symtable.h index 22f5fcb7956bf1..d6d90f6c26eb10 100644 --- a/Include/internal/pycore_symtable.h +++ b/Include/internal/pycore_symtable.h @@ -32,7 +32,6 @@ struct symtable { the symbol table */ int recursion_depth; /* current recursion depth */ int recursion_limit; /* recursion limit */ - int in_pattern; /* whether we are currently in a pattern */ }; typedef struct _symtable_entry { diff --git a/Lib/ast.py b/Lib/ast.py index 703f68ace6068f..0c53e5c5712f5e 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -798,6 +798,9 @@ def traverse(self, node): else: super().visit(node) + # Note: as visit() resets the output text, do NOT rely on + # NodeVisitor.generic_visit to handle any nodes (as it calls back in to + # the subclass visit() method, which resets self._source to an empty list) def visit(self, node): """Outputs a source code string that, if converted back to an ast (using ast.parse) will generate an AST equivalent to *node*""" @@ -1587,11 +1590,79 @@ def visit_match_case(self, node): with self.block(): self.traverse(node.body) + def visit_MatchValue(self, node): + self.traverse(node.value) + + def visit_MatchSingleton(self, node): + self._write_constant(node.value) + + def visit_MatchSequence(self, node): + with self.delimit("[", "]"): + self.interleave( + lambda: self.write(", "), self.traverse, node.patterns + ) + + def visit_MatchStar(self, node): + name = node.name + if name is None: + name = "_" + self.write(f"*{name}") + + def visit_MatchMapping(self, node): + def write_key_pattern_pair(pair): + k, p = pair + self.traverse(k) + self.write(": ") + self.traverse(p) + + with self.delimit("{", "}"): + keys = node.keys + self.interleave( + lambda: self.write(", "), + write_key_pattern_pair, + zip(keys, node.patterns, strict=True), + ) + rest = node.rest + if rest is not None: + if keys: + self.write(", ") + self.write(f"**{rest}") + + def visit_MatchClass(self, node): + self.set_precedence(_Precedence.ATOM, node.cls) + self.traverse(node.cls) + with self.delimit("(", ")"): + patterns = node.patterns + self.interleave( + lambda: self.write(", "), self.traverse, patterns + ) + attrs = node.kwd_attrs + if attrs: + def write_attr_pattern(pair): + attr, pattern = pair + self.write(f"{attr}=") + self.traverse(pattern) + + if patterns: + self.write(", ") + self.interleave( + lambda: self.write(", "), + write_attr_pattern, + zip(attrs, node.kwd_patterns, strict=True), + ) + def visit_MatchAs(self, node): - with self.require_parens(_Precedence.TEST, node): - self.set_precedence(_Precedence.BOR, node.pattern) - self.traverse(node.pattern) - self.write(f" as {node.name}") + name = node.name + pattern = node.pattern + if name is None: + self.write("_") + elif pattern is None: + self.write(node.name) + else: + with self.require_parens(_Precedence.TEST, node): + self.set_precedence(_Precedence.BOR, node.pattern) + self.traverse(node.pattern) + self.write(f" as {node.name}") def visit_MatchOr(self, node): with self.require_parens(_Precedence.BOR, node): diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index 40580be86b0848..f3275529f22dfa 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -2857,6 +2857,22 @@ class Class: self.assertIs(y, None) self.assertIs(z, None) + @no_perf + def test_patma_283(self): + self.assert_syntax_error(""" + match ...: + case {0+0: _}: + pass + """) + + @no_perf + def test_patma_284(self): + self.assert_syntax_error(""" + match ...: + case {f"": _}: + pass + """) + class PerfPatma(TestPatma): diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index ce03272ad30b2d..9f67b49f3a6b2b 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -518,7 +518,8 @@ class DirectoryTestCase(ASTTestCase): lib_dir = pathlib.Path(__file__).parent / ".." test_directories = (lib_dir, lib_dir / "test") run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py", - "test_ast.py", "test_asdl_parser.py", "test_fstring.py"} + "test_ast.py", "test_asdl_parser.py", "test_fstring.py", + "test_patma.py"} _files_to_test = None diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst new file mode 100644 index 00000000000000..69be1b243c7be5 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst @@ -0,0 +1,5 @@ +Match patterns now use new dedicated AST nodes (``MatchValue``, +``MatchSingleton``, ``MatchSequence``, ``MatchStar``, ``MatchMapping``, +``MatchClass``) rather than reusing expression AST nodes. ``MatchAs`` and +``MatchOr`` are now defined as pattern nodes rather than as expression nodes. +Patch by Nick Coghlan. diff --git a/Parser/Python.asdl b/Parser/Python.asdl index e224f5f4848dc1..85225fc88c5a54 100644 --- a/Parser/Python.asdl +++ b/Parser/Python.asdl @@ -89,10 +89,6 @@ module Python -- can appear only in Subscript | Slice(expr? lower, expr? upper, expr? step) - -- only used in patterns - | MatchAs(expr pattern, identifier name) - | MatchOr(expr* patterns) - -- col_offset is the byte offset in the utf8 string the parser uses attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset) @@ -128,7 +124,21 @@ module Python withitem = (expr context_expr, expr? optional_vars) - match_case = (expr pattern, expr? guard, stmt* body) + match_case = (pattern pattern, expr? guard, stmt* body) + + pattern = MatchValue(expr value) + | MatchSingleton(constant value) + | MatchSequence(pattern* patterns) + | MatchMapping(expr* keys, pattern* patterns, identifier? rest) + | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns) + + | MatchStar(identifier? name) + -- The optional "rest" MatchMapping parameter handles capturing extra mapping keys + + | MatchAs(pattern? pattern, identifier? name) + | MatchOr(pattern* patterns) + + attributes (int lineno, int col_offset, int end_lineno, int end_col_offset) type_ignore = TypeIgnore(int lineno, string tag) } diff --git a/Parser/parser.c b/Parser/parser.c index e8328cee275526..5baf82bc627d11 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -119,373 +119,377 @@ static char *soft_keywords[] = { #define or_pattern_type 1045 #define closed_pattern_type 1046 #define literal_pattern_type 1047 -#define signed_number_type 1048 -#define capture_pattern_type 1049 -#define wildcard_pattern_type 1050 -#define value_pattern_type 1051 -#define attr_type 1052 // Left-recursive -#define name_or_attr_type 1053 // Left-recursive -#define group_pattern_type 1054 -#define sequence_pattern_type 1055 -#define open_sequence_pattern_type 1056 -#define maybe_sequence_pattern_type 1057 -#define maybe_star_pattern_type 1058 -#define star_pattern_type 1059 -#define mapping_pattern_type 1060 -#define items_pattern_type 1061 -#define key_value_pattern_type 1062 -#define double_star_pattern_type 1063 -#define class_pattern_type 1064 -#define positional_patterns_type 1065 -#define keyword_patterns_type 1066 -#define keyword_pattern_type 1067 -#define return_stmt_type 1068 -#define raise_stmt_type 1069 -#define function_def_type 1070 -#define function_def_raw_type 1071 -#define func_type_comment_type 1072 -#define params_type 1073 -#define parameters_type 1074 -#define slash_no_default_type 1075 -#define slash_with_default_type 1076 -#define star_etc_type 1077 -#define kwds_type 1078 -#define param_no_default_type 1079 -#define param_with_default_type 1080 -#define param_maybe_default_type 1081 -#define param_type 1082 -#define annotation_type 1083 -#define default_type 1084 -#define decorators_type 1085 -#define class_def_type 1086 -#define class_def_raw_type 1087 -#define block_type 1088 -#define star_expressions_type 1089 -#define star_expression_type 1090 -#define star_named_expressions_type 1091 -#define star_named_expression_type 1092 -#define named_expression_type 1093 -#define direct_named_expression_type 1094 -#define annotated_rhs_type 1095 -#define expressions_type 1096 -#define expression_type 1097 -#define lambdef_type 1098 -#define lambda_params_type 1099 -#define lambda_parameters_type 1100 -#define lambda_slash_no_default_type 1101 -#define lambda_slash_with_default_type 1102 -#define lambda_star_etc_type 1103 -#define lambda_kwds_type 1104 -#define lambda_param_no_default_type 1105 -#define lambda_param_with_default_type 1106 -#define lambda_param_maybe_default_type 1107 -#define lambda_param_type 1108 -#define disjunction_type 1109 -#define conjunction_type 1110 -#define inversion_type 1111 -#define comparison_type 1112 -#define compare_op_bitwise_or_pair_type 1113 -#define eq_bitwise_or_type 1114 -#define noteq_bitwise_or_type 1115 -#define lte_bitwise_or_type 1116 -#define lt_bitwise_or_type 1117 -#define gte_bitwise_or_type 1118 -#define gt_bitwise_or_type 1119 -#define notin_bitwise_or_type 1120 -#define in_bitwise_or_type 1121 -#define isnot_bitwise_or_type 1122 -#define is_bitwise_or_type 1123 -#define bitwise_or_type 1124 // Left-recursive -#define bitwise_xor_type 1125 // Left-recursive -#define bitwise_and_type 1126 // Left-recursive -#define shift_expr_type 1127 // Left-recursive -#define sum_type 1128 // Left-recursive -#define term_type 1129 // Left-recursive -#define factor_type 1130 -#define power_type 1131 -#define await_primary_type 1132 -#define primary_type 1133 // Left-recursive -#define slices_type 1134 -#define slice_type 1135 -#define atom_type 1136 -#define strings_type 1137 -#define list_type 1138 -#define listcomp_type 1139 -#define tuple_type 1140 -#define group_type 1141 -#define genexp_type 1142 -#define set_type 1143 -#define setcomp_type 1144 -#define dict_type 1145 -#define dictcomp_type 1146 -#define double_starred_kvpairs_type 1147 -#define double_starred_kvpair_type 1148 -#define kvpair_type 1149 -#define for_if_clauses_type 1150 -#define for_if_clause_type 1151 -#define yield_expr_type 1152 -#define arguments_type 1153 -#define args_type 1154 -#define kwargs_type 1155 -#define starred_expression_type 1156 -#define kwarg_or_starred_type 1157 -#define kwarg_or_double_starred_type 1158 -#define star_targets_type 1159 -#define star_targets_list_seq_type 1160 -#define star_targets_tuple_seq_type 1161 -#define star_target_type 1162 -#define target_with_star_atom_type 1163 -#define star_atom_type 1164 -#define single_target_type 1165 -#define single_subscript_attribute_target_type 1166 -#define del_targets_type 1167 -#define del_target_type 1168 -#define del_t_atom_type 1169 -#define targets_type 1170 -#define target_type 1171 -#define t_primary_type 1172 // Left-recursive -#define t_lookahead_type 1173 -#define t_atom_type 1174 -#define invalid_arguments_type 1175 -#define invalid_kwarg_type 1176 -#define invalid_expression_type 1177 -#define invalid_named_expression_type 1178 -#define invalid_assignment_type 1179 -#define invalid_ann_assign_target_type 1180 -#define invalid_del_stmt_type 1181 -#define invalid_block_type 1182 -#define invalid_primary_type 1183 // Left-recursive -#define invalid_comprehension_type 1184 -#define invalid_dict_comprehension_type 1185 -#define invalid_parameters_type 1186 -#define invalid_parameters_helper_type 1187 -#define invalid_lambda_parameters_type 1188 -#define invalid_lambda_parameters_helper_type 1189 -#define invalid_star_etc_type 1190 -#define invalid_lambda_star_etc_type 1191 -#define invalid_double_type_comments_type 1192 -#define invalid_with_item_type 1193 -#define invalid_for_target_type 1194 -#define invalid_group_type 1195 -#define invalid_import_from_targets_type 1196 -#define invalid_with_stmt_type 1197 -#define invalid_with_stmt_indent_type 1198 -#define invalid_try_stmt_type 1199 -#define invalid_except_stmt_type 1200 -#define invalid_finally_stmt_type 1201 -#define invalid_except_stmt_indent_type 1202 -#define invalid_match_stmt_type 1203 -#define invalid_case_block_type 1204 -#define invalid_if_stmt_type 1205 -#define invalid_elif_stmt_type 1206 -#define invalid_else_stmt_type 1207 -#define invalid_while_stmt_type 1208 -#define invalid_for_stmt_type 1209 -#define invalid_def_raw_type 1210 -#define invalid_class_def_raw_type 1211 -#define invalid_double_starred_kvpairs_type 1212 -#define invalid_kvpair_type 1213 -#define _loop0_1_type 1214 -#define _loop0_2_type 1215 -#define _loop0_4_type 1216 -#define _gather_3_type 1217 -#define _loop0_6_type 1218 -#define _gather_5_type 1219 -#define _loop0_8_type 1220 -#define _gather_7_type 1221 -#define _loop0_10_type 1222 -#define _gather_9_type 1223 -#define _loop1_11_type 1224 -#define _loop0_13_type 1225 -#define _gather_12_type 1226 -#define _tmp_14_type 1227 -#define _tmp_15_type 1228 -#define _tmp_16_type 1229 -#define _tmp_17_type 1230 -#define _tmp_18_type 1231 -#define _tmp_19_type 1232 -#define _tmp_20_type 1233 -#define _tmp_21_type 1234 -#define _loop1_22_type 1235 -#define _tmp_23_type 1236 -#define _tmp_24_type 1237 -#define _loop0_26_type 1238 -#define _gather_25_type 1239 -#define _loop0_28_type 1240 -#define _gather_27_type 1241 -#define _tmp_29_type 1242 -#define _tmp_30_type 1243 -#define _loop0_31_type 1244 -#define _loop1_32_type 1245 -#define _loop0_34_type 1246 -#define _gather_33_type 1247 -#define _tmp_35_type 1248 -#define _loop0_37_type 1249 -#define _gather_36_type 1250 -#define _tmp_38_type 1251 -#define _loop0_40_type 1252 -#define _gather_39_type 1253 -#define _loop0_42_type 1254 -#define _gather_41_type 1255 -#define _loop0_44_type 1256 -#define _gather_43_type 1257 -#define _loop0_46_type 1258 -#define _gather_45_type 1259 -#define _tmp_47_type 1260 -#define _loop1_48_type 1261 -#define _tmp_49_type 1262 -#define _loop1_50_type 1263 -#define _loop0_52_type 1264 -#define _gather_51_type 1265 -#define _tmp_53_type 1266 -#define _tmp_54_type 1267 -#define _tmp_55_type 1268 -#define _loop0_57_type 1269 -#define _gather_56_type 1270 -#define _tmp_58_type 1271 -#define _loop0_60_type 1272 -#define _gather_59_type 1273 -#define _tmp_61_type 1274 -#define _loop0_63_type 1275 -#define _gather_62_type 1276 -#define _loop0_65_type 1277 -#define _gather_64_type 1278 -#define _tmp_66_type 1279 -#define _tmp_67_type 1280 -#define _tmp_68_type 1281 -#define _tmp_69_type 1282 -#define _loop0_70_type 1283 -#define _loop0_71_type 1284 -#define _loop0_72_type 1285 -#define _loop1_73_type 1286 -#define _loop0_74_type 1287 -#define _loop1_75_type 1288 -#define _loop1_76_type 1289 -#define _loop1_77_type 1290 -#define _loop0_78_type 1291 -#define _loop1_79_type 1292 -#define _loop0_80_type 1293 -#define _loop1_81_type 1294 -#define _loop0_82_type 1295 -#define _loop1_83_type 1296 -#define _loop1_84_type 1297 -#define _tmp_85_type 1298 -#define _loop1_86_type 1299 -#define _loop0_88_type 1300 -#define _gather_87_type 1301 -#define _loop1_89_type 1302 -#define _loop0_90_type 1303 -#define _loop0_91_type 1304 -#define _loop0_92_type 1305 -#define _loop1_93_type 1306 -#define _loop0_94_type 1307 -#define _loop1_95_type 1308 -#define _loop1_96_type 1309 -#define _loop1_97_type 1310 -#define _loop0_98_type 1311 -#define _loop1_99_type 1312 -#define _loop0_100_type 1313 -#define _loop1_101_type 1314 -#define _loop0_102_type 1315 -#define _loop1_103_type 1316 -#define _loop1_104_type 1317 -#define _loop1_105_type 1318 -#define _loop1_106_type 1319 -#define _tmp_107_type 1320 -#define _loop0_109_type 1321 -#define _gather_108_type 1322 -#define _tmp_110_type 1323 -#define _tmp_111_type 1324 -#define _tmp_112_type 1325 -#define _tmp_113_type 1326 -#define _loop1_114_type 1327 -#define _tmp_115_type 1328 -#define _tmp_116_type 1329 -#define _loop0_118_type 1330 -#define _gather_117_type 1331 -#define _loop1_119_type 1332 -#define _loop0_120_type 1333 -#define _loop0_121_type 1334 -#define _loop0_123_type 1335 -#define _gather_122_type 1336 -#define _tmp_124_type 1337 -#define _loop0_126_type 1338 -#define _gather_125_type 1339 -#define _loop0_128_type 1340 -#define _gather_127_type 1341 -#define _loop0_130_type 1342 -#define _gather_129_type 1343 -#define _loop0_132_type 1344 -#define _gather_131_type 1345 -#define _loop0_133_type 1346 -#define _loop0_135_type 1347 -#define _gather_134_type 1348 -#define _loop1_136_type 1349 -#define _tmp_137_type 1350 -#define _loop0_139_type 1351 -#define _gather_138_type 1352 -#define _loop0_141_type 1353 -#define _gather_140_type 1354 -#define _tmp_142_type 1355 -#define _tmp_143_type 1356 -#define _tmp_144_type 1357 -#define _tmp_145_type 1358 -#define _tmp_146_type 1359 -#define _loop0_147_type 1360 -#define _loop0_148_type 1361 -#define _loop0_149_type 1362 -#define _tmp_150_type 1363 -#define _tmp_151_type 1364 -#define _tmp_152_type 1365 -#define _tmp_153_type 1366 -#define _loop0_154_type 1367 -#define _loop1_155_type 1368 -#define _loop0_156_type 1369 -#define _loop1_157_type 1370 -#define _tmp_158_type 1371 -#define _tmp_159_type 1372 -#define _tmp_160_type 1373 -#define _loop0_162_type 1374 -#define _gather_161_type 1375 -#define _loop0_164_type 1376 -#define _gather_163_type 1377 -#define _loop0_166_type 1378 -#define _gather_165_type 1379 -#define _loop0_168_type 1380 -#define _gather_167_type 1381 -#define _tmp_169_type 1382 -#define _tmp_170_type 1383 -#define _tmp_171_type 1384 -#define _tmp_172_type 1385 -#define _tmp_173_type 1386 -#define _loop0_175_type 1387 -#define _gather_174_type 1388 -#define _tmp_176_type 1389 -#define _tmp_177_type 1390 -#define _tmp_178_type 1391 -#define _tmp_179_type 1392 -#define _tmp_180_type 1393 -#define _tmp_181_type 1394 -#define _tmp_182_type 1395 -#define _tmp_183_type 1396 -#define _tmp_184_type 1397 -#define _tmp_185_type 1398 -#define _tmp_186_type 1399 -#define _tmp_187_type 1400 -#define _tmp_188_type 1401 -#define _tmp_189_type 1402 -#define _tmp_190_type 1403 -#define _tmp_191_type 1404 -#define _tmp_192_type 1405 -#define _tmp_193_type 1406 -#define _tmp_194_type 1407 -#define _tmp_195_type 1408 -#define _tmp_196_type 1409 -#define _tmp_197_type 1410 -#define _tmp_198_type 1411 -#define _tmp_199_type 1412 -#define _tmp_200_type 1413 -#define _tmp_201_type 1414 +#define literal_expr_type 1048 +#define complex_number_type 1049 +#define signed_number_type 1050 +#define imaginary_number_type 1051 +#define capture_pattern_type 1052 +#define pattern_capture_target_type 1053 +#define wildcard_pattern_type 1054 +#define value_pattern_type 1055 +#define attr_type 1056 // Left-recursive +#define name_or_attr_type 1057 // Left-recursive +#define group_pattern_type 1058 +#define sequence_pattern_type 1059 +#define open_sequence_pattern_type 1060 +#define maybe_sequence_pattern_type 1061 +#define maybe_star_pattern_type 1062 +#define star_pattern_type 1063 +#define mapping_pattern_type 1064 +#define items_pattern_type 1065 +#define key_value_pattern_type 1066 +#define double_star_pattern_type 1067 +#define class_pattern_type 1068 +#define positional_patterns_type 1069 +#define keyword_patterns_type 1070 +#define keyword_pattern_type 1071 +#define return_stmt_type 1072 +#define raise_stmt_type 1073 +#define function_def_type 1074 +#define function_def_raw_type 1075 +#define func_type_comment_type 1076 +#define params_type 1077 +#define parameters_type 1078 +#define slash_no_default_type 1079 +#define slash_with_default_type 1080 +#define star_etc_type 1081 +#define kwds_type 1082 +#define param_no_default_type 1083 +#define param_with_default_type 1084 +#define param_maybe_default_type 1085 +#define param_type 1086 +#define annotation_type 1087 +#define default_type 1088 +#define decorators_type 1089 +#define class_def_type 1090 +#define class_def_raw_type 1091 +#define block_type 1092 +#define star_expressions_type 1093 +#define star_expression_type 1094 +#define star_named_expressions_type 1095 +#define star_named_expression_type 1096 +#define named_expression_type 1097 +#define direct_named_expression_type 1098 +#define annotated_rhs_type 1099 +#define expressions_type 1100 +#define expression_type 1101 +#define lambdef_type 1102 +#define lambda_params_type 1103 +#define lambda_parameters_type 1104 +#define lambda_slash_no_default_type 1105 +#define lambda_slash_with_default_type 1106 +#define lambda_star_etc_type 1107 +#define lambda_kwds_type 1108 +#define lambda_param_no_default_type 1109 +#define lambda_param_with_default_type 1110 +#define lambda_param_maybe_default_type 1111 +#define lambda_param_type 1112 +#define disjunction_type 1113 +#define conjunction_type 1114 +#define inversion_type 1115 +#define comparison_type 1116 +#define compare_op_bitwise_or_pair_type 1117 +#define eq_bitwise_or_type 1118 +#define noteq_bitwise_or_type 1119 +#define lte_bitwise_or_type 1120 +#define lt_bitwise_or_type 1121 +#define gte_bitwise_or_type 1122 +#define gt_bitwise_or_type 1123 +#define notin_bitwise_or_type 1124 +#define in_bitwise_or_type 1125 +#define isnot_bitwise_or_type 1126 +#define is_bitwise_or_type 1127 +#define bitwise_or_type 1128 // Left-recursive +#define bitwise_xor_type 1129 // Left-recursive +#define bitwise_and_type 1130 // Left-recursive +#define shift_expr_type 1131 // Left-recursive +#define sum_type 1132 // Left-recursive +#define term_type 1133 // Left-recursive +#define factor_type 1134 +#define power_type 1135 +#define await_primary_type 1136 +#define primary_type 1137 // Left-recursive +#define slices_type 1138 +#define slice_type 1139 +#define atom_type 1140 +#define strings_type 1141 +#define list_type 1142 +#define listcomp_type 1143 +#define tuple_type 1144 +#define group_type 1145 +#define genexp_type 1146 +#define set_type 1147 +#define setcomp_type 1148 +#define dict_type 1149 +#define dictcomp_type 1150 +#define double_starred_kvpairs_type 1151 +#define double_starred_kvpair_type 1152 +#define kvpair_type 1153 +#define for_if_clauses_type 1154 +#define for_if_clause_type 1155 +#define yield_expr_type 1156 +#define arguments_type 1157 +#define args_type 1158 +#define kwargs_type 1159 +#define starred_expression_type 1160 +#define kwarg_or_starred_type 1161 +#define kwarg_or_double_starred_type 1162 +#define star_targets_type 1163 +#define star_targets_list_seq_type 1164 +#define star_targets_tuple_seq_type 1165 +#define star_target_type 1166 +#define target_with_star_atom_type 1167 +#define star_atom_type 1168 +#define single_target_type 1169 +#define single_subscript_attribute_target_type 1170 +#define del_targets_type 1171 +#define del_target_type 1172 +#define del_t_atom_type 1173 +#define targets_type 1174 +#define target_type 1175 +#define t_primary_type 1176 // Left-recursive +#define t_lookahead_type 1177 +#define t_atom_type 1178 +#define invalid_arguments_type 1179 +#define invalid_kwarg_type 1180 +#define invalid_expression_type 1181 +#define invalid_named_expression_type 1182 +#define invalid_assignment_type 1183 +#define invalid_ann_assign_target_type 1184 +#define invalid_del_stmt_type 1185 +#define invalid_block_type 1186 +#define invalid_primary_type 1187 // Left-recursive +#define invalid_comprehension_type 1188 +#define invalid_dict_comprehension_type 1189 +#define invalid_parameters_type 1190 +#define invalid_parameters_helper_type 1191 +#define invalid_lambda_parameters_type 1192 +#define invalid_lambda_parameters_helper_type 1193 +#define invalid_star_etc_type 1194 +#define invalid_lambda_star_etc_type 1195 +#define invalid_double_type_comments_type 1196 +#define invalid_with_item_type 1197 +#define invalid_for_target_type 1198 +#define invalid_group_type 1199 +#define invalid_import_from_targets_type 1200 +#define invalid_with_stmt_type 1201 +#define invalid_with_stmt_indent_type 1202 +#define invalid_try_stmt_type 1203 +#define invalid_except_stmt_type 1204 +#define invalid_finally_stmt_type 1205 +#define invalid_except_stmt_indent_type 1206 +#define invalid_match_stmt_type 1207 +#define invalid_case_block_type 1208 +#define invalid_if_stmt_type 1209 +#define invalid_elif_stmt_type 1210 +#define invalid_else_stmt_type 1211 +#define invalid_while_stmt_type 1212 +#define invalid_for_stmt_type 1213 +#define invalid_def_raw_type 1214 +#define invalid_class_def_raw_type 1215 +#define invalid_double_starred_kvpairs_type 1216 +#define invalid_kvpair_type 1217 +#define _loop0_1_type 1218 +#define _loop0_2_type 1219 +#define _loop0_4_type 1220 +#define _gather_3_type 1221 +#define _loop0_6_type 1222 +#define _gather_5_type 1223 +#define _loop0_8_type 1224 +#define _gather_7_type 1225 +#define _loop0_10_type 1226 +#define _gather_9_type 1227 +#define _loop1_11_type 1228 +#define _loop0_13_type 1229 +#define _gather_12_type 1230 +#define _tmp_14_type 1231 +#define _tmp_15_type 1232 +#define _tmp_16_type 1233 +#define _tmp_17_type 1234 +#define _tmp_18_type 1235 +#define _tmp_19_type 1236 +#define _tmp_20_type 1237 +#define _tmp_21_type 1238 +#define _loop1_22_type 1239 +#define _tmp_23_type 1240 +#define _tmp_24_type 1241 +#define _loop0_26_type 1242 +#define _gather_25_type 1243 +#define _loop0_28_type 1244 +#define _gather_27_type 1245 +#define _tmp_29_type 1246 +#define _tmp_30_type 1247 +#define _loop0_31_type 1248 +#define _loop1_32_type 1249 +#define _loop0_34_type 1250 +#define _gather_33_type 1251 +#define _tmp_35_type 1252 +#define _loop0_37_type 1253 +#define _gather_36_type 1254 +#define _tmp_38_type 1255 +#define _loop0_40_type 1256 +#define _gather_39_type 1257 +#define _loop0_42_type 1258 +#define _gather_41_type 1259 +#define _loop0_44_type 1260 +#define _gather_43_type 1261 +#define _loop0_46_type 1262 +#define _gather_45_type 1263 +#define _tmp_47_type 1264 +#define _loop1_48_type 1265 +#define _tmp_49_type 1266 +#define _loop1_50_type 1267 +#define _loop0_52_type 1268 +#define _gather_51_type 1269 +#define _tmp_53_type 1270 +#define _tmp_54_type 1271 +#define _tmp_55_type 1272 +#define _tmp_56_type 1273 +#define _loop0_58_type 1274 +#define _gather_57_type 1275 +#define _loop0_60_type 1276 +#define _gather_59_type 1277 +#define _tmp_61_type 1278 +#define _loop0_63_type 1279 +#define _gather_62_type 1280 +#define _loop0_65_type 1281 +#define _gather_64_type 1282 +#define _tmp_66_type 1283 +#define _tmp_67_type 1284 +#define _tmp_68_type 1285 +#define _tmp_69_type 1286 +#define _loop0_70_type 1287 +#define _loop0_71_type 1288 +#define _loop0_72_type 1289 +#define _loop1_73_type 1290 +#define _loop0_74_type 1291 +#define _loop1_75_type 1292 +#define _loop1_76_type 1293 +#define _loop1_77_type 1294 +#define _loop0_78_type 1295 +#define _loop1_79_type 1296 +#define _loop0_80_type 1297 +#define _loop1_81_type 1298 +#define _loop0_82_type 1299 +#define _loop1_83_type 1300 +#define _loop1_84_type 1301 +#define _tmp_85_type 1302 +#define _loop1_86_type 1303 +#define _loop0_88_type 1304 +#define _gather_87_type 1305 +#define _loop1_89_type 1306 +#define _loop0_90_type 1307 +#define _loop0_91_type 1308 +#define _loop0_92_type 1309 +#define _loop1_93_type 1310 +#define _loop0_94_type 1311 +#define _loop1_95_type 1312 +#define _loop1_96_type 1313 +#define _loop1_97_type 1314 +#define _loop0_98_type 1315 +#define _loop1_99_type 1316 +#define _loop0_100_type 1317 +#define _loop1_101_type 1318 +#define _loop0_102_type 1319 +#define _loop1_103_type 1320 +#define _loop1_104_type 1321 +#define _loop1_105_type 1322 +#define _loop1_106_type 1323 +#define _tmp_107_type 1324 +#define _loop0_109_type 1325 +#define _gather_108_type 1326 +#define _tmp_110_type 1327 +#define _tmp_111_type 1328 +#define _tmp_112_type 1329 +#define _tmp_113_type 1330 +#define _loop1_114_type 1331 +#define _tmp_115_type 1332 +#define _tmp_116_type 1333 +#define _loop0_118_type 1334 +#define _gather_117_type 1335 +#define _loop1_119_type 1336 +#define _loop0_120_type 1337 +#define _loop0_121_type 1338 +#define _loop0_123_type 1339 +#define _gather_122_type 1340 +#define _tmp_124_type 1341 +#define _loop0_126_type 1342 +#define _gather_125_type 1343 +#define _loop0_128_type 1344 +#define _gather_127_type 1345 +#define _loop0_130_type 1346 +#define _gather_129_type 1347 +#define _loop0_132_type 1348 +#define _gather_131_type 1349 +#define _loop0_133_type 1350 +#define _loop0_135_type 1351 +#define _gather_134_type 1352 +#define _loop1_136_type 1353 +#define _tmp_137_type 1354 +#define _loop0_139_type 1355 +#define _gather_138_type 1356 +#define _loop0_141_type 1357 +#define _gather_140_type 1358 +#define _tmp_142_type 1359 +#define _tmp_143_type 1360 +#define _tmp_144_type 1361 +#define _tmp_145_type 1362 +#define _tmp_146_type 1363 +#define _loop0_147_type 1364 +#define _loop0_148_type 1365 +#define _loop0_149_type 1366 +#define _tmp_150_type 1367 +#define _tmp_151_type 1368 +#define _tmp_152_type 1369 +#define _tmp_153_type 1370 +#define _loop0_154_type 1371 +#define _loop1_155_type 1372 +#define _loop0_156_type 1373 +#define _loop1_157_type 1374 +#define _tmp_158_type 1375 +#define _tmp_159_type 1376 +#define _tmp_160_type 1377 +#define _loop0_162_type 1378 +#define _gather_161_type 1379 +#define _loop0_164_type 1380 +#define _gather_163_type 1381 +#define _loop0_166_type 1382 +#define _gather_165_type 1383 +#define _loop0_168_type 1384 +#define _gather_167_type 1385 +#define _tmp_169_type 1386 +#define _tmp_170_type 1387 +#define _tmp_171_type 1388 +#define _tmp_172_type 1389 +#define _tmp_173_type 1390 +#define _loop0_175_type 1391 +#define _gather_174_type 1392 +#define _tmp_176_type 1393 +#define _tmp_177_type 1394 +#define _tmp_178_type 1395 +#define _tmp_179_type 1396 +#define _tmp_180_type 1397 +#define _tmp_181_type 1398 +#define _tmp_182_type 1399 +#define _tmp_183_type 1400 +#define _tmp_184_type 1401 +#define _tmp_185_type 1402 +#define _tmp_186_type 1403 +#define _tmp_187_type 1404 +#define _tmp_188_type 1405 +#define _tmp_189_type 1406 +#define _tmp_190_type 1407 +#define _tmp_191_type 1408 +#define _tmp_192_type 1409 +#define _tmp_193_type 1410 +#define _tmp_194_type 1411 +#define _tmp_195_type 1412 +#define _tmp_196_type 1413 +#define _tmp_197_type 1414 +#define _tmp_198_type 1415 +#define _tmp_199_type 1416 +#define _tmp_200_type 1417 +#define _tmp_201_type 1418 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -529,32 +533,36 @@ static stmt_ty match_stmt_rule(Parser *p); static expr_ty subject_expr_rule(Parser *p); static match_case_ty case_block_rule(Parser *p); static expr_ty guard_rule(Parser *p); -static expr_ty patterns_rule(Parser *p); -static expr_ty pattern_rule(Parser *p); -static expr_ty as_pattern_rule(Parser *p); -static expr_ty or_pattern_rule(Parser *p); -static expr_ty closed_pattern_rule(Parser *p); -static expr_ty literal_pattern_rule(Parser *p); +static pattern_ty patterns_rule(Parser *p); +static pattern_ty pattern_rule(Parser *p); +static pattern_ty as_pattern_rule(Parser *p); +static pattern_ty or_pattern_rule(Parser *p); +static pattern_ty closed_pattern_rule(Parser *p); +static pattern_ty literal_pattern_rule(Parser *p); +static expr_ty literal_expr_rule(Parser *p); +static expr_ty complex_number_rule(Parser *p); static expr_ty signed_number_rule(Parser *p); -static expr_ty capture_pattern_rule(Parser *p); -static expr_ty wildcard_pattern_rule(Parser *p); -static expr_ty value_pattern_rule(Parser *p); +static expr_ty imaginary_number_rule(Parser *p); +static pattern_ty capture_pattern_rule(Parser *p); +static expr_ty pattern_capture_target_rule(Parser *p); +static pattern_ty wildcard_pattern_rule(Parser *p); +static pattern_ty value_pattern_rule(Parser *p); static expr_ty attr_rule(Parser *p); static expr_ty name_or_attr_rule(Parser *p); -static expr_ty group_pattern_rule(Parser *p); -static expr_ty sequence_pattern_rule(Parser *p); +static pattern_ty group_pattern_rule(Parser *p); +static pattern_ty sequence_pattern_rule(Parser *p); static asdl_seq* open_sequence_pattern_rule(Parser *p); static asdl_seq* maybe_sequence_pattern_rule(Parser *p); -static expr_ty maybe_star_pattern_rule(Parser *p); -static expr_ty star_pattern_rule(Parser *p); -static expr_ty mapping_pattern_rule(Parser *p); +static pattern_ty maybe_star_pattern_rule(Parser *p); +static pattern_ty star_pattern_rule(Parser *p); +static pattern_ty mapping_pattern_rule(Parser *p); static asdl_seq* items_pattern_rule(Parser *p); -static KeyValuePair* key_value_pattern_rule(Parser *p); -static KeyValuePair* double_star_pattern_rule(Parser *p); -static expr_ty class_pattern_rule(Parser *p); -static asdl_expr_seq* positional_patterns_rule(Parser *p); -static asdl_keyword_seq* keyword_patterns_rule(Parser *p); -static keyword_ty keyword_pattern_rule(Parser *p); +static KeyPatternPair* key_value_pattern_rule(Parser *p); +static expr_ty double_star_pattern_rule(Parser *p); +static pattern_ty class_pattern_rule(Parser *p); +static asdl_pattern_seq* positional_patterns_rule(Parser *p); +static asdl_seq* keyword_patterns_rule(Parser *p); +static KeyPatternPair* keyword_pattern_rule(Parser *p); static stmt_ty return_stmt_rule(Parser *p); static stmt_ty raise_stmt_rule(Parser *p); static stmt_ty function_def_rule(Parser *p); @@ -756,9 +764,9 @@ static asdl_seq *_gather_51_rule(Parser *p); static void *_tmp_53_rule(Parser *p); static void *_tmp_54_rule(Parser *p); static void *_tmp_55_rule(Parser *p); -static asdl_seq *_loop0_57_rule(Parser *p); -static asdl_seq *_gather_56_rule(Parser *p); -static void *_tmp_58_rule(Parser *p); +static void *_tmp_56_rule(Parser *p); +static asdl_seq *_loop0_58_rule(Parser *p); +static asdl_seq *_gather_57_rule(Parser *p); static asdl_seq *_loop0_60_rule(Parser *p); static asdl_seq *_gather_59_rule(Parser *p); static void *_tmp_61_rule(Parser *p); @@ -5378,7 +5386,7 @@ case_block_rule(Parser *p) Token * _literal; asdl_stmt_seq* body; void *guard; - expr_ty pattern; + pattern_ty pattern; if ( (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' && @@ -5455,7 +5463,7 @@ guard_rule(Parser *p) } // patterns: open_sequence_pattern | pattern -static expr_ty +static pattern_ty patterns_rule(Parser *p) { D(p->level++); @@ -5463,7 +5471,7 @@ patterns_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5480,9 +5488,9 @@ patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); - asdl_expr_seq* values; + asdl_pattern_seq* patterns; if ( - (values = (asdl_expr_seq*)open_sequence_pattern_rule(p)) // open_sequence_pattern + (patterns = (asdl_pattern_seq*)open_sequence_pattern_rule(p)) // open_sequence_pattern ) { D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); @@ -5495,7 +5503,7 @@ patterns_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( values , Load , EXTRA ); + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5513,7 +5521,7 @@ patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); - expr_ty pattern_var; + pattern_ty pattern_var; if ( (pattern_var = pattern_rule(p)) // pattern ) @@ -5533,7 +5541,7 @@ patterns_rule(Parser *p) } // pattern: as_pattern | or_pattern -static expr_ty +static pattern_ty pattern_rule(Parser *p) { D(p->level++); @@ -5541,7 +5549,7 @@ pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; { // as_pattern if (p->error_indicator) { @@ -5549,7 +5557,7 @@ pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern")); - expr_ty as_pattern_var; + pattern_ty as_pattern_var; if ( (as_pattern_var = as_pattern_rule(p)) // as_pattern ) @@ -5568,7 +5576,7 @@ pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern")); - expr_ty or_pattern_var; + pattern_ty or_pattern_var; if ( (or_pattern_var = or_pattern_rule(p)) // or_pattern ) @@ -5587,8 +5595,8 @@ pattern_rule(Parser *p) return _res; } -// as_pattern: or_pattern 'as' capture_pattern -static expr_ty +// as_pattern: or_pattern 'as' pattern_capture_target +static pattern_ty as_pattern_rule(Parser *p) { D(p->level++); @@ -5596,7 +5604,7 @@ as_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5607,24 +5615,24 @@ as_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // or_pattern 'as' capture_pattern + { // or_pattern 'as' pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' capture_pattern")); + D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); Token * _keyword; - expr_ty pattern; + pattern_ty pattern; expr_ty target; if ( (pattern = or_pattern_rule(p)) // or_pattern && (_keyword = _PyPegen_expect_token(p, 520)) // token='as' && - (target = capture_pattern_rule(p)) // capture_pattern + (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' capture_pattern")); + D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -5644,7 +5652,7 @@ as_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' capture_pattern")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' pattern_capture_target")); } _res = NULL; done: @@ -5653,7 +5661,7 @@ as_pattern_rule(Parser *p) } // or_pattern: '|'.closed_pattern+ -static expr_ty +static pattern_ty or_pattern_rule(Parser *p) { D(p->level++); @@ -5661,7 +5669,7 @@ or_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5678,9 +5686,9 @@ or_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); - asdl_expr_seq* patterns; + asdl_pattern_seq* patterns; if ( - (patterns = (asdl_expr_seq*)_gather_51_rule(p)) // '|'.closed_pattern+ + (patterns = (asdl_pattern_seq*)_gather_51_rule(p)) // '|'.closed_pattern+ ) { D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); @@ -5720,7 +5728,7 @@ or_pattern_rule(Parser *p) // | sequence_pattern // | mapping_pattern // | class_pattern -static expr_ty +static pattern_ty closed_pattern_rule(Parser *p) { D(p->level++); @@ -5728,7 +5736,7 @@ closed_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; { // literal_pattern if (p->error_indicator) { @@ -5736,7 +5744,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern")); - expr_ty literal_pattern_var; + pattern_ty literal_pattern_var; if ( (literal_pattern_var = literal_pattern_rule(p)) // literal_pattern ) @@ -5755,7 +5763,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern")); - expr_ty capture_pattern_var; + pattern_ty capture_pattern_var; if ( (capture_pattern_var = capture_pattern_rule(p)) // capture_pattern ) @@ -5774,7 +5782,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); - expr_ty wildcard_pattern_var; + pattern_ty wildcard_pattern_var; if ( (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern ) @@ -5793,7 +5801,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern")); - expr_ty value_pattern_var; + pattern_ty value_pattern_var; if ( (value_pattern_var = value_pattern_rule(p)) // value_pattern ) @@ -5812,7 +5820,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern")); - expr_ty group_pattern_var; + pattern_ty group_pattern_var; if ( (group_pattern_var = group_pattern_rule(p)) // group_pattern ) @@ -5831,7 +5839,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern")); - expr_ty sequence_pattern_var; + pattern_ty sequence_pattern_var; if ( (sequence_pattern_var = sequence_pattern_rule(p)) // sequence_pattern ) @@ -5850,7 +5858,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern")); - expr_ty mapping_pattern_var; + pattern_ty mapping_pattern_var; if ( (mapping_pattern_var = mapping_pattern_rule(p)) // mapping_pattern ) @@ -5869,7 +5877,7 @@ closed_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern")); - expr_ty class_pattern_var; + pattern_ty class_pattern_var; if ( (class_pattern_var = class_pattern_rule(p)) // class_pattern ) @@ -5890,13 +5898,12 @@ closed_pattern_rule(Parser *p) // literal_pattern: // | signed_number !('+' | '-') -// | signed_number '+' NUMBER -// | signed_number '-' NUMBER +// | complex_number // | strings // | 'None' // | 'True' // | 'False' -static expr_ty +static pattern_ty literal_pattern_rule(Parser *p) { D(p->level++); @@ -5904,7 +5911,7 @@ literal_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5921,39 +5928,14 @@ literal_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - expr_ty signed_number_var; + expr_ty value; if ( - (signed_number_var = signed_number_rule(p)) // signed_number + (value = signed_number_rule(p)) // signed_number && _PyPegen_lookahead(0, _tmp_53_rule, p) ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - _res = signed_number_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); - } - { // signed_number '+' NUMBER - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '+' NUMBER")); - Token * _literal; - expr_ty imag; - expr_ty real; - if ( - (real = signed_number_rule(p)) // signed_number - && - (_literal = _PyPegen_expect_token(p, 14)) // token='+' - && - (imag = _PyPegen_number_token(p)) // NUMBER - ) - { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '+' NUMBER")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -5963,7 +5945,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( real , Add , imag , EXTRA ); + _res = _PyAST_MatchValue ( value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5973,26 +5955,20 @@ literal_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '+' NUMBER")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); } - { // signed_number '-' NUMBER + { // complex_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '-' NUMBER")); - Token * _literal; - expr_ty imag; - expr_ty real; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); + expr_ty value; if ( - (real = signed_number_rule(p)) // signed_number - && - (_literal = _PyPegen_expect_token(p, 15)) // token='-' - && - (imag = _PyPegen_number_token(p)) // NUMBER + (value = complex_number_rule(p)) // complex_number ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '-' NUMBER")); + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6002,7 +5978,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( real , Sub , imag , EXTRA ); + _res = _PyAST_MatchValue ( value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6012,7 +5988,7 @@ literal_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '-' NUMBER")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); } { // strings if (p->error_indicator) { @@ -6020,13 +5996,27 @@ literal_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); - expr_ty strings_var; + expr_ty value; if ( - (strings_var = strings_rule(p)) // strings + (value = strings_rule(p)) // strings ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); - _res = strings_var; + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchValue ( value , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; @@ -6054,7 +6044,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); + _res = _PyAST_MatchSingleton ( Py_None , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6087,7 +6077,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); + _res = _PyAST_MatchSingleton ( Py_True , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6120,7 +6110,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); + _res = _PyAST_MatchSingleton ( Py_False , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6138,9 +6128,15 @@ literal_pattern_rule(Parser *p) return _res; } -// signed_number: NUMBER | '-' NUMBER +// literal_expr: +// | signed_number !('+' | '-') +// | complex_number +// | strings +// | 'None' +// | 'True' +// | 'False' static expr_ty -signed_number_rule(Parser *p) +literal_expr_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -6158,40 +6154,77 @@ signed_number_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NUMBER + { // signed_number !('+' | '-') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); - expr_ty number_var; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); + expr_ty signed_number_var; if ( - (number_var = _PyPegen_number_token(p)) // NUMBER + (signed_number_var = signed_number_rule(p)) // signed_number + && + _PyPegen_lookahead(0, _tmp_54_rule, p) ) { - D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); - _res = number_var; + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); + _res = signed_number_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); } - { // '-' NUMBER + { // complex_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); - Token * _literal; - expr_ty number; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); + expr_ty complex_number_var; if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' - && - (number = _PyPegen_number_token(p)) // NUMBER + (complex_number_var = complex_number_rule(p)) // complex_number ) { - D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); + _res = complex_number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); + } + { // strings + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); + expr_ty strings_var; + if ( + (strings_var = strings_rule(p)) // strings + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); + _res = strings_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings")); + } + { // 'None' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6201,7 +6234,7 @@ signed_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( USub , number , EXTRA ); + _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6210,43 +6243,64 @@ signed_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// capture_pattern: !"_" NAME !('.' | '(' | '=') -static expr_ty -capture_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + { // 'True' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 524)) // token='True' + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // !"_" NAME !('.' | '(' | '=') + { // 'False' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); - expr_ty name; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + Token * _keyword; if ( - _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_") - && - (name = _PyPegen_name_token(p)) // NAME - && - _PyPegen_lookahead(0, _tmp_54_rule, p) + (_keyword = _PyPegen_expect_token(p, 525)) // token='False' ) { - D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); - _res = _PyPegen_set_expr_context ( p , name , Store ); + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6255,8 +6309,8 @@ capture_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; done: @@ -6264,9 +6318,9 @@ capture_pattern_rule(Parser *p) return _res; } -// wildcard_pattern: "_" +// complex_number: signed_number '+' imaginary_number | signed_number '-' imaginary_number static expr_ty -wildcard_pattern_rule(Parser *p) +complex_number_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -6284,18 +6338,24 @@ wildcard_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // "_" + { // signed_number '+' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\"")); - expr_ty _keyword; + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '+' imaginary_number")); + Token * _literal; + expr_ty imag; + expr_ty real; if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' + (real = signed_number_rule(p)) // signed_number + && + (_literal = _PyPegen_expect_token(p, 14)) // token='+' + && + (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\"")); + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '+' imaginary_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6305,7 +6365,7 @@ wildcard_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Name ( CHECK ( PyObject * , _PyPegen_new_identifier ( p , "_" ) ) , Store , EXTRA ); + _res = _PyAST_BinOp ( real , Add , imag , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6314,49 +6374,391 @@ wildcard_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\"")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// value_pattern: attr !('.' | '(' | '=') -static expr_ty -value_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '+' imaginary_number")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // attr !('.' | '(' | '=') + { // signed_number '-' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); - expr_ty attr; + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '-' imaginary_number")); + Token * _literal; + expr_ty imag; + expr_ty real; if ( - (attr = attr_rule(p)) // attr + (real = signed_number_rule(p)) // signed_number && - _PyPegen_lookahead(0, _tmp_55_rule, p) + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + && + (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); - _res = attr; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '-' imaginary_number")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( real , Sub , imag , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '-' imaginary_number")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// signed_number: NUMBER | '-' NUMBER +static expr_ty +signed_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // NUMBER + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty number_var; + if ( + (number_var = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + { // '-' NUMBER + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + Token * _literal; + expr_ty number; + if ( + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + && + (number = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( USub , number , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// imaginary_number: NUMBER +static expr_ty +imaginary_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // NUMBER + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty imag; + if ( + (imag = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ imaginary_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = _PyPegen_ensure_imaginary ( p , imag ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s imaginary_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// capture_pattern: pattern_capture_target +static pattern_ty +capture_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // pattern_capture_target + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); + expr_ty target; + if ( + (target = pattern_capture_target_rule(p)) // pattern_capture_target + ) + { + D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern_capture_target")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// pattern_capture_target: !"_" NAME !('.' | '(' | '=') +static expr_ty +pattern_capture_target_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // !"_" NAME !('.' | '(' | '=') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + expr_ty name; + if ( + _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_") + && + (name = _PyPegen_name_token(p)) // NAME + && + _PyPegen_lookahead(0, _tmp_55_rule, p) + ) + { + D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + _res = _PyPegen_set_expr_context ( p , name , Store ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s pattern_capture_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// wildcard_pattern: "_" +static pattern_ty +wildcard_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // "_" + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\"")); + expr_ty _keyword; + if ( + (_keyword = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' + ) + { + D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\"")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchAs ( NULL , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\"")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// value_pattern: attr !('.' | '(' | '=') +static pattern_ty +value_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // attr !('.' | '(' | '=') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); + expr_ty attr; + if ( + (attr = attr_rule(p)) // attr + && + _PyPegen_lookahead(0, _tmp_56_rule, p) + ) + { + D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchValue ( attr , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; D(fprintf(stderr, "%*c%s value_pattern[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr !('.' | '(' | '=')")); } @@ -6520,7 +6922,7 @@ name_or_attr_rule(Parser *p) } // group_pattern: '(' pattern ')' -static expr_ty +static pattern_ty group_pattern_rule(Parser *p) { D(p->level++); @@ -6528,7 +6930,7 @@ group_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; { // '(' pattern ')' if (p->error_indicator) { @@ -6538,7 +6940,7 @@ group_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'")); Token * _literal; Token * _literal_1; - expr_ty pattern; + pattern_ty pattern; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && @@ -6567,7 +6969,7 @@ group_pattern_rule(Parser *p) } // sequence_pattern: '[' maybe_sequence_pattern? ']' | '(' open_sequence_pattern? ')' -static expr_ty +static pattern_ty sequence_pattern_rule(Parser *p) { D(p->level++); @@ -6575,7 +6977,7 @@ sequence_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6594,11 +6996,11 @@ sequence_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); Token * _literal; Token * _literal_1; - void *values; + void *patterns; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (values = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? + (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? && (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) @@ -6613,7 +7015,7 @@ sequence_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_List ( values , Load , EXTRA ); + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6633,11 +7035,11 @@ sequence_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'")); Token * _literal; Token * _literal_1; - void *values; + void *patterns; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (values = open_sequence_pattern_rule(p), 1) // open_sequence_pattern? + (patterns = open_sequence_pattern_rule(p), 1) // open_sequence_pattern? && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) @@ -6652,7 +7054,7 @@ sequence_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( values , Load , EXTRA ); + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6688,18 +7090,18 @@ open_sequence_pattern_rule(Parser *p) } D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); Token * _literal; - expr_ty value; - void *values; + pattern_ty pattern; + void *patterns; if ( - (value = maybe_star_pattern_rule(p)) // maybe_star_pattern + (pattern = maybe_star_pattern_rule(p)) // maybe_star_pattern && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (values = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? + (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? ) { D(fprintf(stderr, "%*c+ open_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); - _res = _PyPegen_seq_insert_in_front ( p , value , values ); + _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6736,15 +7138,15 @@ maybe_sequence_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - asdl_seq * values; + asdl_seq * patterns; if ( - (values = _gather_56_rule(p)) // ','.maybe_star_pattern+ + (patterns = _gather_57_rule(p)) // ','.maybe_star_pattern+ && (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { D(fprintf(stderr, "%*c+ maybe_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); - _res = values; + _res = patterns; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6763,7 +7165,7 @@ maybe_sequence_pattern_rule(Parser *p) } // maybe_star_pattern: star_pattern | pattern -static expr_ty +static pattern_ty maybe_star_pattern_rule(Parser *p) { D(p->level++); @@ -6771,7 +7173,7 @@ maybe_star_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; { // star_pattern if (p->error_indicator) { @@ -6779,7 +7181,7 @@ maybe_star_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern")); - expr_ty star_pattern_var; + pattern_ty star_pattern_var; if ( (star_pattern_var = star_pattern_rule(p)) // star_pattern ) @@ -6798,7 +7200,7 @@ maybe_star_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); - expr_ty pattern_var; + pattern_ty pattern_var; if ( (pattern_var = pattern_rule(p)) // pattern ) @@ -6817,8 +7219,8 @@ maybe_star_pattern_rule(Parser *p) return _res; } -// star_pattern: '*' (capture_pattern | wildcard_pattern) -static expr_ty +// star_pattern: '*' pattern_capture_target | '*' wildcard_pattern +static pattern_ty star_pattern_rule(Parser *p) { D(p->level++); @@ -6826,32 +7228,226 @@ star_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; D(p->level--); return NULL; } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '*' (capture_pattern | wildcard_pattern) + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '*' pattern_capture_target + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); + Token * _literal; + expr_ty target; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + && + (target = pattern_capture_target_rule(p)) // pattern_capture_target + ) + { + D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' pattern_capture_target")); + } + { // '*' wildcard_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); + Token * _literal; + pattern_ty wildcard_pattern_var; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + && + (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern + ) + { + D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchStar ( NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' wildcard_pattern")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// mapping_pattern: +// | '{' '}' +// | '{' double_star_pattern ','? '}' +// | '{' items_pattern ',' double_star_pattern ','? '}' +// | '{' items_pattern ','? '}' +static pattern_ty +mapping_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '{' '}' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'")); + Token * _literal; + Token * _literal_1; + if ( + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + ) + { + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'")); + } + { // '{' double_star_pattern ','? '}' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); + Token * _literal; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty rest; + if ( + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (rest = double_star_pattern_rule(p)) // double_star_pattern + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + ) + { + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_star_pattern ','? '}'")); + } + { // '{' items_pattern ',' double_star_pattern ','? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (capture_pattern | wildcard_pattern)")); + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); Token * _literal; - void *value; + Token * _literal_1; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq* items; + expr_ty rest; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (items = items_pattern_rule(p)) // items_pattern + && + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + && + (rest = double_star_pattern_rule(p)) // double_star_pattern + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? && - (value = _tmp_58_rule(p)) // capture_pattern | wildcard_pattern + (_literal_2 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (capture_pattern | wildcard_pattern)")); + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6861,7 +7457,7 @@ star_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Starred ( value , Store , EXTRA ); + _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6870,53 +7466,31 @@ star_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (capture_pattern | wildcard_pattern)")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// mapping_pattern: '{' items_pattern? '}' -static expr_ty -mapping_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' items_pattern? '}' + { // '{' items_pattern ','? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern? '}'")); + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); Token * _literal; Token * _literal_1; - void *items; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq* items; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (items = items_pattern_rule(p), 1) // items_pattern? + (items = items_pattern_rule(p)) // items_pattern + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? && (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern? '}'")); + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6926,7 +7500,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , items ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , items ) ) , EXTRA ); + _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6936,7 +7510,7 @@ mapping_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern? '}'")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ','? '}'")); } _res = NULL; done: @@ -6944,7 +7518,7 @@ mapping_pattern_rule(Parser *p) return _res; } -// items_pattern: ','.key_value_pattern+ ','? +// items_pattern: ','.key_value_pattern+ static asdl_seq* items_pattern_rule(Parser *p) { @@ -6955,22 +7529,18 @@ items_pattern_rule(Parser *p) } asdl_seq* _res = NULL; int _mark = p->mark; - { // ','.key_value_pattern+ ','? + { // ','.key_value_pattern+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings + D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); asdl_seq * items; if ( (items = _gather_59_rule(p)) // ','.key_value_pattern+ - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+ ','?")); + D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); _res = items; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -6981,7 +7551,7 @@ items_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s items_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+ ','?")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+")); } _res = NULL; done: @@ -6989,8 +7559,8 @@ items_pattern_rule(Parser *p) return _res; } -// key_value_pattern: (literal_pattern | value_pattern) ':' pattern | double_star_pattern -static KeyValuePair* +// key_value_pattern: (literal_expr | attr) ':' pattern +static KeyPatternPair* key_value_pattern_rule(Parser *p) { D(p->level++); @@ -6998,27 +7568,27 @@ key_value_pattern_rule(Parser *p) D(p->level--); return NULL; } - KeyValuePair* _res = NULL; + KeyPatternPair* _res = NULL; int _mark = p->mark; - { // (literal_pattern | value_pattern) ':' pattern + { // (literal_expr | attr) ':' pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_pattern | value_pattern) ':' pattern")); + D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); Token * _literal; void *key; - expr_ty value; + pattern_ty pattern; if ( - (key = _tmp_61_rule(p)) // literal_pattern | value_pattern + (key = _tmp_61_rule(p)) // literal_expr | attr && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (value = pattern_rule(p)) // pattern + (pattern = pattern_rule(p)) // pattern ) { - D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_pattern | value_pattern) ':' pattern")); - _res = _PyPegen_key_value_pair ( p , key , value ); + D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); + _res = _PyPegen_key_pattern_pair ( p , key , pattern ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7028,26 +7598,7 @@ key_value_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_pattern | value_pattern) ':' pattern")); - } - { // double_star_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_star_pattern")); - KeyValuePair* double_star_pattern_var; - if ( - (double_star_pattern_var = double_star_pattern_rule(p)) // double_star_pattern - ) - { - D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_star_pattern")); - _res = double_star_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_star_pattern")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_expr | attr) ':' pattern")); } _res = NULL; done: @@ -7055,8 +7606,8 @@ key_value_pattern_rule(Parser *p) return _res; } -// double_star_pattern: '**' capture_pattern -static KeyValuePair* +// double_star_pattern: '**' pattern_capture_target +static expr_ty double_star_pattern_rule(Parser *p) { D(p->level++); @@ -7064,24 +7615,24 @@ double_star_pattern_rule(Parser *p) D(p->level--); return NULL; } - KeyValuePair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // '**' capture_pattern + { // '**' pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' capture_pattern")); + D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); Token * _literal; - expr_ty value; + expr_ty target; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - (value = capture_pattern_rule(p)) // capture_pattern + (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' capture_pattern")); - _res = _PyPegen_key_value_pair ( p , NULL , value ); + D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); + _res = target; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7091,7 +7642,7 @@ double_star_pattern_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s double_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' capture_pattern")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' pattern_capture_target")); } _res = NULL; done: @@ -7104,7 +7655,7 @@ double_star_pattern_rule(Parser *p) // | name_or_attr '(' positional_patterns ','? ')' // | name_or_attr '(' keyword_patterns ','? ')' // | name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')' -static expr_ty +static pattern_ty class_pattern_rule(Parser *p) { D(p->level++); @@ -7112,7 +7663,7 @@ class_pattern_rule(Parser *p) D(p->level--); return NULL; } - expr_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7131,9 +7682,9 @@ class_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'")); Token * _literal; Token * _literal_1; - expr_ty func; + expr_ty cls; if ( - (func = name_or_attr_rule(p)) // name_or_attr + (cls = name_or_attr_rule(p)) // name_or_attr && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && @@ -7150,7 +7701,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( func , NULL , NULL , EXTRA ); + _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7172,14 +7723,14 @@ class_pattern_rule(Parser *p) Token * _literal_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - asdl_expr_seq* args; - expr_ty func; + expr_ty cls; + asdl_pattern_seq* patterns; if ( - (func = name_or_attr_rule(p)) // name_or_attr + (cls = name_or_attr_rule(p)) // name_or_attr && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (args = positional_patterns_rule(p)) // positional_patterns + (patterns = positional_patterns_rule(p)) // positional_patterns && (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? && @@ -7196,7 +7747,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( func , args , NULL , EXTRA ); + _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7218,10 +7769,10 @@ class_pattern_rule(Parser *p) Token * _literal_1; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - expr_ty func; - asdl_keyword_seq* keywords; + expr_ty cls; + asdl_seq* keywords; if ( - (func = name_or_attr_rule(p)) // name_or_attr + (cls = name_or_attr_rule(p)) // name_or_attr && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && @@ -7242,7 +7793,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( func , NULL , keywords , EXTRA ); + _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7265,15 +7816,15 @@ class_pattern_rule(Parser *p) Token * _literal_2; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - asdl_expr_seq* args; - expr_ty func; - asdl_keyword_seq* keywords; + expr_ty cls; + asdl_seq* keywords; + asdl_pattern_seq* patterns; if ( - (func = name_or_attr_rule(p)) // name_or_attr + (cls = name_or_attr_rule(p)) // name_or_attr && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (args = positional_patterns_rule(p)) // positional_patterns + (patterns = positional_patterns_rule(p)) // positional_patterns && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && @@ -7294,7 +7845,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( func , args , keywords , EXTRA ); + _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7313,7 +7864,7 @@ class_pattern_rule(Parser *p) } // positional_patterns: ','.pattern+ -static asdl_expr_seq* +static asdl_pattern_seq* positional_patterns_rule(Parser *p) { D(p->level++); @@ -7321,7 +7872,7 @@ positional_patterns_rule(Parser *p) D(p->level--); return NULL; } - asdl_expr_seq* _res = NULL; + asdl_pattern_seq* _res = NULL; int _mark = p->mark; { // ','.pattern+ if (p->error_indicator) { @@ -7329,9 +7880,9 @@ positional_patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+")); - asdl_expr_seq* args; + asdl_pattern_seq* args; if ( - (args = (asdl_expr_seq*)_gather_62_rule(p)) // ','.pattern+ + (args = (asdl_pattern_seq*)_gather_62_rule(p)) // ','.pattern+ ) { D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+")); @@ -7354,7 +7905,7 @@ positional_patterns_rule(Parser *p) } // keyword_patterns: ','.keyword_pattern+ -static asdl_keyword_seq* +static asdl_seq* keyword_patterns_rule(Parser *p) { D(p->level++); @@ -7362,7 +7913,7 @@ keyword_patterns_rule(Parser *p) D(p->level--); return NULL; } - asdl_keyword_seq* _res = NULL; + asdl_seq* _res = NULL; int _mark = p->mark; { // ','.keyword_pattern+ if (p->error_indicator) { @@ -7370,9 +7921,9 @@ keyword_patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - asdl_keyword_seq* keywords; + asdl_seq* keywords; if ( - (keywords = (asdl_keyword_seq*)_gather_64_rule(p)) // ','.keyword_pattern+ + (keywords = (asdl_seq*)_gather_64_rule(p)) // ','.keyword_pattern+ ) { D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); @@ -7395,7 +7946,7 @@ keyword_patterns_rule(Parser *p) } // keyword_pattern: NAME '=' pattern -static keyword_ty +static KeyPatternPair* keyword_pattern_rule(Parser *p) { D(p->level++); @@ -7403,17 +7954,8 @@ keyword_pattern_rule(Parser *p) D(p->level--); return NULL; } - keyword_ty _res = NULL; + KeyPatternPair* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro { // NAME '=' pattern if (p->error_indicator) { D(p->level--); @@ -7422,7 +7964,7 @@ keyword_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); Token * _literal; expr_ty arg; - expr_ty value; + pattern_ty value; if ( (arg = _PyPegen_name_token(p)) // NAME && @@ -7432,16 +7974,7 @@ keyword_pattern_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ keyword_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_keyword ( arg -> v . Name . id , value , EXTRA ); + _res = _PyPegen_key_pattern_pair ( p , arg , value ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -19650,7 +20183,7 @@ invalid_case_block_rule(Parser *p) expr_ty _keyword; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - expr_ty patterns_var; + pattern_ty patterns_var; if ( (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' && @@ -19685,7 +20218,7 @@ invalid_case_block_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings expr_ty a; Token * newline_var; - expr_ty patterns_var; + pattern_ty patterns_var; if ( (a = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' && @@ -23345,7 +23878,7 @@ _loop0_52_rule(Parser *p) } D(fprintf(stderr, "%*c> _loop0_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); Token * _literal; - expr_ty elem; + pattern_ty elem; while ( (_literal = _PyPegen_expect_token(p, 18)) // token='|' && @@ -23409,7 +23942,7 @@ _gather_51_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _gather_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_52")); - expr_ty elem; + pattern_ty elem; asdl_seq * seq; if ( (elem = closed_pattern_rule(p)) // closed_pattern @@ -23486,9 +24019,64 @@ _tmp_53_rule(Parser *p) return _res; } -// _tmp_54: '.' | '(' | '=' +// _tmp_54: '+' | '-' static void * _tmp_54_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // '+' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 14)) // token='+' + ) + { + D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); + } + { // '-' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + ) + { + D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_55: '.' | '(' | '=' +static void * +_tmp_55_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23502,18 +24090,18 @@ _tmp_54_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '(' @@ -23521,18 +24109,18 @@ _tmp_54_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '=' @@ -23540,18 +24128,18 @@ _tmp_54_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } _res = NULL; @@ -23560,9 +24148,9 @@ _tmp_54_rule(Parser *p) return _res; } -// _tmp_55: '.' | '(' | '=' +// _tmp_56: '.' | '(' | '=' static void * -_tmp_55_rule(Parser *p) +_tmp_56_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23576,18 +24164,18 @@ _tmp_55_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '(' @@ -23595,18 +24183,18 @@ _tmp_55_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '=' @@ -23614,18 +24202,18 @@ _tmp_55_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } _res = NULL; @@ -23634,9 +24222,9 @@ _tmp_55_rule(Parser *p) return _res; } -// _loop0_57: ',' maybe_star_pattern +// _loop0_58: ',' maybe_star_pattern static asdl_seq * -_loop0_57_rule(Parser *p) +_loop0_58_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23660,9 +24248,9 @@ _loop0_57_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); + D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); Token * _literal; - expr_ty elem; + pattern_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -23691,7 +24279,7 @@ _loop0_57_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_58[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -23704,14 +24292,14 @@ _loop0_57_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_57_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_58_type, _seq); D(p->level--); return _seq; } -// _gather_56: maybe_star_pattern _loop0_57 +// _gather_57: maybe_star_pattern _loop0_58 static asdl_seq * -_gather_56_rule(Parser *p) +_gather_57_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23720,82 +24308,27 @@ _gather_56_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // maybe_star_pattern _loop0_57 + { // maybe_star_pattern _loop0_58 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_57")); - expr_ty elem; + D(fprintf(stderr, "%*c> _gather_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_58")); + pattern_ty elem; asdl_seq * seq; if ( (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern && - (seq = _loop0_57_rule(p)) // _loop0_57 + (seq = _loop0_58_rule(p)) // _loop0_58 ) { - D(fprintf(stderr, "%*c+ _gather_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_57")); + D(fprintf(stderr, "%*c+ _gather_57[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_58")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_56[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_57")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_58: capture_pattern | wildcard_pattern -static void * -_tmp_58_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // capture_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern")); - expr_ty capture_pattern_var; - if ( - (capture_pattern_var = capture_pattern_rule(p)) // capture_pattern - ) - { - D(fprintf(stderr, "%*c+ _tmp_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "capture_pattern")); - _res = capture_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_58[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "capture_pattern")); - } - { // wildcard_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); - expr_ty wildcard_pattern_var; - if ( - (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern - ) - { - D(fprintf(stderr, "%*c+ _tmp_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); - _res = wildcard_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_58[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "wildcard_pattern")); + D(fprintf(stderr, "%*c%s _gather_57[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_58")); } _res = NULL; done: @@ -23831,7 +24364,7 @@ _loop0_60_rule(Parser *p) } D(fprintf(stderr, "%*c> _loop0_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); Token * _literal; - KeyValuePair* elem; + KeyPatternPair* elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -23895,7 +24428,7 @@ _gather_59_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _gather_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_60")); - KeyValuePair* elem; + KeyPatternPair* elem; asdl_seq * seq; if ( (elem = key_value_pattern_rule(p)) // key_value_pattern @@ -23917,7 +24450,7 @@ _gather_59_rule(Parser *p) return _res; } -// _tmp_61: literal_pattern | value_pattern +// _tmp_61: literal_expr | attr static void * _tmp_61_rule(Parser *p) { @@ -23928,43 +24461,43 @@ _tmp_61_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // literal_pattern + { // literal_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern")); - expr_ty literal_pattern_var; + D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); + expr_ty literal_expr_var; if ( - (literal_pattern_var = literal_pattern_rule(p)) // literal_pattern + (literal_expr_var = literal_expr_rule(p)) // literal_expr ) { - D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_pattern")); - _res = literal_pattern_var; + D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); + _res = literal_expr_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_61[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_pattern")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr")); } - { // value_pattern + { // attr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern")); - expr_ty value_pattern_var; + D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); + expr_ty attr_var; if ( - (value_pattern_var = value_pattern_rule(p)) // value_pattern + (attr_var = attr_rule(p)) // attr ) { - D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "value_pattern")); - _res = value_pattern_var; + D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); + _res = attr_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_61[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "value_pattern")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); } _res = NULL; done: @@ -24000,7 +24533,7 @@ _loop0_63_rule(Parser *p) } D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); Token * _literal; - expr_ty elem; + pattern_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -24064,7 +24597,7 @@ _gather_62_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _gather_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_63")); - expr_ty elem; + pattern_ty elem; asdl_seq * seq; if ( (elem = pattern_rule(p)) // pattern @@ -24114,7 +24647,7 @@ _loop0_65_rule(Parser *p) } D(fprintf(stderr, "%*c> _loop0_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); Token * _literal; - keyword_ty elem; + KeyPatternPair* elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -24178,7 +24711,7 @@ _gather_64_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _gather_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_65")); - keyword_ty elem; + KeyPatternPair* elem; asdl_seq * seq; if ( (elem = keyword_pattern_rule(p)) // keyword_pattern diff --git a/Parser/pegen.c b/Parser/pegen.c index ed989f5985c711..4d6e69edc23304 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1,5 +1,5 @@ #include -#include "pycore_ast.h" // _PyAST_Validate() +#include "pycore_ast.h" // _PyAST_Validate(), #include #include "tokenizer.h" @@ -1818,6 +1818,51 @@ _PyPegen_get_values(Parser *p, asdl_seq *seq) return new_seq; } +/* Constructs a KeyPatternPair that is used when parsing mapping & class patterns */ +KeyPatternPair * +_PyPegen_key_pattern_pair(Parser *p, expr_ty key, pattern_ty pattern) +{ + KeyPatternPair *a = _PyArena_Malloc(p->arena, sizeof(KeyPatternPair)); + if (!a) { + return NULL; + } + a->key = key; + a->pattern = pattern; + return a; +} + +/* Extracts all keys from an asdl_seq* of KeyPatternPair*'s */ +asdl_expr_seq * +_PyPegen_get_pattern_keys(Parser *p, asdl_seq *seq) +{ + Py_ssize_t len = asdl_seq_LEN(seq); + asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena); + if (!new_seq) { + return NULL; + } + for (Py_ssize_t i = 0; i < len; i++) { + KeyPatternPair *pair = asdl_seq_GET_UNTYPED(seq, i); + asdl_seq_SET(new_seq, i, pair->key); + } + return new_seq; +} + +/* Extracts all patterns from an asdl_seq* of KeyPatternPair*'s */ +asdl_pattern_seq * +_PyPegen_get_patterns(Parser *p, asdl_seq *seq) +{ + Py_ssize_t len = asdl_seq_LEN(seq); + asdl_pattern_seq *new_seq = _Py_asdl_pattern_seq_new(len, p->arena); + if (!new_seq) { + return NULL; + } + for (Py_ssize_t i = 0; i < len; i++) { + KeyPatternPair *pair = asdl_seq_GET_UNTYPED(seq, i); + asdl_seq_SET(new_seq, i, pair->pattern); + } + return new_seq; +} + /* Constructs a NameDefaultPair */ NameDefaultPair * _PyPegen_name_default_pair(Parser *p, arg_ty arg, expr_ty value, Token *tc) @@ -2303,6 +2348,16 @@ _PyPegen_concatenate_strings(Parser *p, asdl_seq *strings) return NULL; } +expr_ty +_PyPegen_ensure_imaginary(Parser *p, expr_ty exp) +{ + if (exp->kind != Constant_kind || !PyComplex_CheckExact(exp->v.Constant.value)) { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "Imaginary number required in complex literal"); + return NULL; + } + return exp; +} + mod_ty _PyPegen_make_module(Parser *p, asdl_stmt_seq *a) { asdl_type_ignore_seq *type_ignores = NULL; diff --git a/Parser/pegen.h b/Parser/pegen.h index a8142a01236a70..2af551b706993f 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -86,6 +86,11 @@ typedef struct { expr_ty value; } KeyValuePair; +typedef struct { + expr_ty key; + pattern_ty pattern; +} KeyPatternPair; + typedef struct { arg_ty arg; expr_ty value; @@ -259,6 +264,9 @@ expr_ty _PyPegen_set_expr_context(Parser *, expr_ty, expr_context_ty); KeyValuePair *_PyPegen_key_value_pair(Parser *, expr_ty, expr_ty); asdl_expr_seq *_PyPegen_get_keys(Parser *, asdl_seq *); asdl_expr_seq *_PyPegen_get_values(Parser *, asdl_seq *); +KeyPatternPair *_PyPegen_key_pattern_pair(Parser *, expr_ty, pattern_ty); +asdl_expr_seq *_PyPegen_get_pattern_keys(Parser *, asdl_seq *); +asdl_pattern_seq *_PyPegen_get_patterns(Parser *, asdl_seq *); NameDefaultPair *_PyPegen_name_default_pair(Parser *, arg_ty, expr_ty, Token *); SlashWithDefault *_PyPegen_slash_with_default(Parser *, asdl_arg_seq *, asdl_seq *); StarEtc *_PyPegen_star_etc(Parser *, arg_ty, asdl_seq *, arg_ty); @@ -275,6 +283,7 @@ expr_ty _PyPegen_collect_call_seqs(Parser *, asdl_expr_seq *, asdl_seq *, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); expr_ty _PyPegen_concatenate_strings(Parser *p, asdl_seq *); +expr_ty _PyPegen_ensure_imaginary(Parser *p, expr_ty); asdl_seq *_PyPegen_join_sequences(Parser *, asdl_seq *, asdl_seq *); int _PyPegen_check_barry_as_flufl(Parser *, Token *); mod_ty _PyPegen_make_module(Parser *, asdl_stmt_seq *); diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 779ee3e48946d5..5d7a0aed9beffc 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -106,7 +106,13 @@ void _PyAST_Fini(PyInterpreterState *interp) Py_CLEAR(state->MatMult_singleton); Py_CLEAR(state->MatMult_type); Py_CLEAR(state->MatchAs_type); + Py_CLEAR(state->MatchClass_type); + Py_CLEAR(state->MatchMapping_type); Py_CLEAR(state->MatchOr_type); + Py_CLEAR(state->MatchSequence_type); + Py_CLEAR(state->MatchSingleton_type); + Py_CLEAR(state->MatchStar_type); + Py_CLEAR(state->MatchValue_type); Py_CLEAR(state->Match_type); Py_CLEAR(state->Mod_singleton); Py_CLEAR(state->Mod_type); @@ -173,6 +179,7 @@ void _PyAST_Fini(PyInterpreterState *interp) Py_CLEAR(state->boolop_type); Py_CLEAR(state->cases); Py_CLEAR(state->cause); + Py_CLEAR(state->cls); Py_CLEAR(state->cmpop_type); Py_CLEAR(state->col_offset); Py_CLEAR(state->comparators); @@ -208,6 +215,8 @@ void _PyAST_Fini(PyInterpreterState *interp) Py_CLEAR(state->kind); Py_CLEAR(state->kw_defaults); Py_CLEAR(state->kwarg); + Py_CLEAR(state->kwd_attrs); + Py_CLEAR(state->kwd_patterns); Py_CLEAR(state->kwonlyargs); Py_CLEAR(state->left); Py_CLEAR(state->level); @@ -226,8 +235,10 @@ void _PyAST_Fini(PyInterpreterState *interp) Py_CLEAR(state->optional_vars); Py_CLEAR(state->orelse); Py_CLEAR(state->pattern); + Py_CLEAR(state->pattern_type); Py_CLEAR(state->patterns); Py_CLEAR(state->posonlyargs); + Py_CLEAR(state->rest); Py_CLEAR(state->returns); Py_CLEAR(state->right); Py_CLEAR(state->simple); @@ -276,6 +287,7 @@ static int init_identifiers(struct ast_state *state) if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0; if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0; if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0; + if ((state->cls = PyUnicode_InternFromString("cls")) == NULL) return 0; if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0; if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0; if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0; @@ -305,6 +317,8 @@ static int init_identifiers(struct ast_state *state) if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0; if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0; if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0; + if ((state->kwd_attrs = PyUnicode_InternFromString("kwd_attrs")) == NULL) return 0; + if ((state->kwd_patterns = PyUnicode_InternFromString("kwd_patterns")) == NULL) return 0; if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0; if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0; if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0; @@ -322,6 +336,7 @@ static int init_identifiers(struct ast_state *state) if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return 0; if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return 0; if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0; + if ((state->rest = PyUnicode_InternFromString("rest")) == NULL) return 0; if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0; if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0; if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0; @@ -353,6 +368,7 @@ GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty) GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty) GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty) GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty) +GENERATE_ASDL_SEQ_CONSTRUCTOR(pattern, pattern_ty) GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty) static PyObject* ast2obj_mod(struct ast_state *state, void*); @@ -610,13 +626,6 @@ static const char * const Slice_fields[]={ "upper", "step", }; -static const char * const MatchAs_fields[]={ - "pattern", - "name", -}; -static const char * const MatchOr_fields[]={ - "patterns", -}; static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty); static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty); static PyObject* ast2obj_operator(struct ast_state *state, operator_ty); @@ -696,6 +705,43 @@ static const char * const match_case_fields[]={ "guard", "body", }; +static const char * const pattern_attributes[] = { + "lineno", + "col_offset", + "end_lineno", + "end_col_offset", +}; +static PyObject* ast2obj_pattern(struct ast_state *state, void*); +static const char * const MatchValue_fields[]={ + "value", +}; +static const char * const MatchSingleton_fields[]={ + "value", +}; +static const char * const MatchSequence_fields[]={ + "patterns", +}; +static const char * const MatchMapping_fields[]={ + "keys", + "patterns", + "rest", +}; +static const char * const MatchClass_fields[]={ + "cls", + "patterns", + "kwd_attrs", + "kwd_patterns", +}; +static const char * const MatchStar_fields[]={ + "name", +}; +static const char * const MatchAs_fields[]={ + "pattern", + "name", +}; +static const char * const MatchOr_fields[]={ + "patterns", +}; static PyObject* ast2obj_type_ignore(struct ast_state *state, void*); static const char * const TypeIgnore_fields[]={ "lineno", @@ -1275,9 +1321,7 @@ init_types(struct ast_state *state) " | Name(identifier id, expr_context ctx)\n" " | List(expr* elts, expr_context ctx)\n" " | Tuple(expr* elts, expr_context ctx)\n" - " | Slice(expr? lower, expr? upper, expr? step)\n" - " | MatchAs(expr pattern, identifier name)\n" - " | MatchOr(expr* patterns)"); + " | Slice(expr? lower, expr? upper, expr? step)"); if (!state->expr_type) return 0; if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0; if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1) @@ -1410,14 +1454,6 @@ init_types(struct ast_state *state) return 0; if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1) return 0; - state->MatchAs_type = make_type(state, "MatchAs", state->expr_type, - MatchAs_fields, 2, - "MatchAs(expr pattern, identifier name)"); - if (!state->MatchAs_type) return 0; - state->MatchOr_type = make_type(state, "MatchOr", state->expr_type, - MatchOr_fields, 1, - "MatchOr(expr* patterns)"); - if (!state->MatchOr_type) return 0; state->expr_context_type = make_type(state, "expr_context", state->AST_type, NULL, 0, "expr_context = Load | Store | Del"); @@ -1732,11 +1768,68 @@ init_types(struct ast_state *state) return 0; state->match_case_type = make_type(state, "match_case", state->AST_type, match_case_fields, 3, - "match_case(expr pattern, expr? guard, stmt* body)"); + "match_case(pattern pattern, expr? guard, stmt* body)"); if (!state->match_case_type) return 0; if (!add_attributes(state, state->match_case_type, NULL, 0)) return 0; if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1) return 0; + state->pattern_type = make_type(state, "pattern", state->AST_type, NULL, 0, + "pattern = MatchValue(expr value)\n" + " | MatchSingleton(constant value)\n" + " | MatchSequence(pattern* patterns)\n" + " | MatchMapping(expr* keys, pattern* patterns, identifier? rest)\n" + " | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)\n" + " | MatchStar(identifier? name)\n" + " | MatchAs(pattern? pattern, identifier? name)\n" + " | MatchOr(pattern* patterns)"); + if (!state->pattern_type) return 0; + if (!add_attributes(state, state->pattern_type, pattern_attributes, 4)) + return 0; + state->MatchValue_type = make_type(state, "MatchValue", + state->pattern_type, MatchValue_fields, + 1, + "MatchValue(expr value)"); + if (!state->MatchValue_type) return 0; + state->MatchSingleton_type = make_type(state, "MatchSingleton", + state->pattern_type, + MatchSingleton_fields, 1, + "MatchSingleton(constant value)"); + if (!state->MatchSingleton_type) return 0; + state->MatchSequence_type = make_type(state, "MatchSequence", + state->pattern_type, + MatchSequence_fields, 1, + "MatchSequence(pattern* patterns)"); + if (!state->MatchSequence_type) return 0; + state->MatchMapping_type = make_type(state, "MatchMapping", + state->pattern_type, + MatchMapping_fields, 3, + "MatchMapping(expr* keys, pattern* patterns, identifier? rest)"); + if (!state->MatchMapping_type) return 0; + if (PyObject_SetAttr(state->MatchMapping_type, state->rest, Py_None) == -1) + return 0; + state->MatchClass_type = make_type(state, "MatchClass", + state->pattern_type, MatchClass_fields, + 4, + "MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)"); + if (!state->MatchClass_type) return 0; + state->MatchStar_type = make_type(state, "MatchStar", state->pattern_type, + MatchStar_fields, 1, + "MatchStar(identifier? name)"); + if (!state->MatchStar_type) return 0; + if (PyObject_SetAttr(state->MatchStar_type, state->name, Py_None) == -1) + return 0; + state->MatchAs_type = make_type(state, "MatchAs", state->pattern_type, + MatchAs_fields, 2, + "MatchAs(pattern? pattern, identifier? name)"); + if (!state->MatchAs_type) return 0; + if (PyObject_SetAttr(state->MatchAs_type, state->pattern, Py_None) == -1) + return 0; + if (PyObject_SetAttr(state->MatchAs_type, state->name, Py_None) == -1) + return 0; + state->MatchOr_type = make_type(state, "MatchOr", state->pattern_type, + MatchOr_fields, 1, + "MatchOr(pattern* patterns)"); + if (!state->MatchOr_type) return 0; state->type_ignore_type = make_type(state, "type_ignore", state->AST_type, NULL, 0, "type_ignore = TypeIgnore(int lineno, string tag)"); @@ -1784,6 +1877,8 @@ static int obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out, PyArena* arena); static int obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, PyArena* arena); +static int obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* + out, PyArena* arena); static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* out, PyArena* arena); @@ -3127,51 +3222,6 @@ _PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int return p; } -expr_ty -_PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena) -{ - expr_ty p; - if (!pattern) { - PyErr_SetString(PyExc_ValueError, - "field 'pattern' is required for MatchAs"); - return NULL; - } - if (!name) { - PyErr_SetString(PyExc_ValueError, - "field 'name' is required for MatchAs"); - return NULL; - } - p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); - if (!p) - return NULL; - p->kind = MatchAs_kind; - p->v.MatchAs.pattern = pattern; - p->v.MatchAs.name = name; - p->lineno = lineno; - p->col_offset = col_offset; - p->end_lineno = end_lineno; - p->end_col_offset = end_col_offset; - return p; -} - -expr_ty -_PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena) -{ - expr_ty p; - p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); - if (!p) - return NULL; - p->kind = MatchOr_kind; - p->v.MatchOr.patterns = patterns; - p->lineno = lineno; - p->col_offset = col_offset; - p->end_lineno = end_lineno; - p->end_col_offset = end_col_offset; - return p; -} - comprehension_ty _PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async, PyArena *arena) @@ -3322,8 +3372,8 @@ _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) } match_case_ty -_PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena - *arena) +_PyAST_match_case(pattern_ty pattern, expr_ty guard, asdl_stmt_seq * body, + PyArena *arena) { match_case_ty p; if (!pattern) { @@ -3340,6 +3390,166 @@ _PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena return p; } +pattern_ty +_PyAST_MatchValue(expr_ty value, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) +{ + pattern_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field 'value' is required for MatchValue"); + return NULL; + } + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchValue_kind; + p->v.MatchValue.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchSingleton(constant value, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) +{ + pattern_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field 'value' is required for MatchSingleton"); + return NULL; + } + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchSingleton_kind; + p->v.MatchSingleton.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchSequence(asdl_pattern_seq * patterns, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) +{ + pattern_ty p; + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchSequence_kind; + p->v.MatchSequence.patterns = patterns; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchMapping(asdl_expr_seq * keys, asdl_pattern_seq * patterns, + identifier rest, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) +{ + pattern_ty p; + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchMapping_kind; + p->v.MatchMapping.keys = keys; + p->v.MatchMapping.patterns = patterns; + p->v.MatchMapping.rest = rest; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchClass(expr_ty cls, asdl_pattern_seq * patterns, asdl_identifier_seq + * kwd_attrs, asdl_pattern_seq * kwd_patterns, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena) +{ + pattern_ty p; + if (!cls) { + PyErr_SetString(PyExc_ValueError, + "field 'cls' is required for MatchClass"); + return NULL; + } + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchClass_kind; + p->v.MatchClass.cls = cls; + p->v.MatchClass.patterns = patterns; + p->v.MatchClass.kwd_attrs = kwd_attrs; + p->v.MatchClass.kwd_patterns = kwd_patterns; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchStar(identifier name, int lineno, int col_offset, int end_lineno, + int end_col_offset, PyArena *arena) +{ + pattern_ty p; + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchStar_kind; + p->v.MatchStar.name = name; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchAs(pattern_ty pattern, identifier name, int lineno, int col_offset, + int end_lineno, int end_col_offset, PyArena *arena) +{ + pattern_ty p; + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchAs_kind; + p->v.MatchAs.pattern = pattern; + p->v.MatchAs.name = name; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + +pattern_ty +_PyAST_MatchOr(asdl_pattern_seq * patterns, int lineno, int col_offset, int + end_lineno, int end_col_offset, PyArena *arena) +{ + pattern_ty p; + p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = MatchOr_kind; + p->v.MatchOr.patterns = patterns; + p->lineno = lineno; + p->col_offset = col_offset; + p->end_lineno = end_lineno; + p->end_col_offset = end_col_offset; + return p; +} + type_ignore_ty _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena) { @@ -4410,32 +4620,6 @@ ast2obj_expr(struct ast_state *state, void* _o) goto failed; Py_DECREF(value); break; - case MatchAs_kind: - tp = (PyTypeObject *)state->MatchAs_type; - result = PyType_GenericNew(tp, NULL, NULL); - if (!result) goto failed; - value = ast2obj_expr(state, o->v.MatchAs.pattern); - if (!value) goto failed; - if (PyObject_SetAttr(result, state->pattern, value) == -1) - goto failed; - Py_DECREF(value); - value = ast2obj_identifier(state, o->v.MatchAs.name); - if (!value) goto failed; - if (PyObject_SetAttr(result, state->name, value) == -1) - goto failed; - Py_DECREF(value); - break; - case MatchOr_kind: - tp = (PyTypeObject *)state->MatchOr_type; - result = PyType_GenericNew(tp, NULL, NULL); - if (!result) goto failed; - value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns, - ast2obj_expr); - if (!value) goto failed; - if (PyObject_SetAttr(result, state->patterns, value) == -1) - goto failed; - Py_DECREF(value); - break; } value = ast2obj_int(state, o->lineno); if (!value) goto failed; @@ -4935,7 +5119,7 @@ ast2obj_match_case(struct ast_state *state, void* _o) tp = (PyTypeObject *)state->match_case_type; result = PyType_GenericNew(tp, NULL, NULL); if (!result) return NULL; - value = ast2obj_expr(state, o->pattern); + value = ast2obj_pattern(state, o->pattern); if (!value) goto failed; if (PyObject_SetAttr(result, state->pattern, value) == -1) goto failed; @@ -4958,63 +5142,218 @@ ast2obj_match_case(struct ast_state *state, void* _o) } PyObject* -ast2obj_type_ignore(struct ast_state *state, void* _o) +ast2obj_pattern(struct ast_state *state, void* _o) { - type_ignore_ty o = (type_ignore_ty)_o; + pattern_ty o = (pattern_ty)_o; PyObject *result = NULL, *value = NULL; PyTypeObject *tp; if (!o) { Py_RETURN_NONE; } switch (o->kind) { - case TypeIgnore_kind: - tp = (PyTypeObject *)state->TypeIgnore_type; + case MatchValue_kind: + tp = (PyTypeObject *)state->MatchValue_type; result = PyType_GenericNew(tp, NULL, NULL); if (!result) goto failed; - value = ast2obj_int(state, o->v.TypeIgnore.lineno); + value = ast2obj_expr(state, o->v.MatchValue.value); if (!value) goto failed; - if (PyObject_SetAttr(result, state->lineno, value) == -1) + if (PyObject_SetAttr(result, state->value, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_string(state, o->v.TypeIgnore.tag); + break; + case MatchSingleton_kind: + tp = (PyTypeObject *)state->MatchSingleton_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_constant(state, o->v.MatchSingleton.value); if (!value) goto failed; - if (PyObject_SetAttr(result, state->tag, value) == -1) + if (PyObject_SetAttr(result, state->value, value) == -1) goto failed; Py_DECREF(value); break; - } - return result; -failed: - Py_XDECREF(value); - Py_XDECREF(result); - return NULL; -} - - -int -obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) -{ - int isinstance; - - PyObject *tmp = NULL; - PyObject *tp; - - if (obj == Py_None) { - *out = NULL; - return 0; - } - tp = state->Module_type; - isinstance = PyObject_IsInstance(obj, tp); - if (isinstance == -1) { - return 1; - } - if (isinstance) { - asdl_stmt_seq* body; - asdl_type_ignore_seq* type_ignores; - - if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { - return 1; - } + case MatchSequence_kind: + tp = (PyTypeObject *)state->MatchSequence_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_list(state, (asdl_seq*)o->v.MatchSequence.patterns, + ast2obj_pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->patterns, value) == -1) + goto failed; + Py_DECREF(value); + break; + case MatchMapping_kind: + tp = (PyTypeObject *)state->MatchMapping_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.keys, + ast2obj_expr); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->keys, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.patterns, + ast2obj_pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->patterns, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_identifier(state, o->v.MatchMapping.rest); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->rest, value) == -1) + goto failed; + Py_DECREF(value); + break; + case MatchClass_kind: + tp = (PyTypeObject *)state->MatchClass_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(state, o->v.MatchClass.cls); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->cls, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.patterns, + ast2obj_pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->patterns, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_attrs, + ast2obj_identifier); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->kwd_attrs, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_patterns, + ast2obj_pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->kwd_patterns, value) == -1) + goto failed; + Py_DECREF(value); + break; + case MatchStar_kind: + tp = (PyTypeObject *)state->MatchStar_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_identifier(state, o->v.MatchStar.name); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->name, value) == -1) + goto failed; + Py_DECREF(value); + break; + case MatchAs_kind: + tp = (PyTypeObject *)state->MatchAs_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_pattern(state, o->v.MatchAs.pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->pattern, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_identifier(state, o->v.MatchAs.name); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->name, value) == -1) + goto failed; + Py_DECREF(value); + break; + case MatchOr_kind: + tp = (PyTypeObject *)state->MatchOr_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns, + ast2obj_pattern); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->patterns, value) == -1) + goto failed; + Py_DECREF(value); + break; + } + value = ast2obj_int(state, o->lineno); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->col_offset); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->col_offset, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->end_lineno); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->end_lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(state, o->end_col_offset); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) + goto failed; + Py_DECREF(value); + return result; +failed: + Py_XDECREF(value); + Py_XDECREF(result); + return NULL; +} + +PyObject* +ast2obj_type_ignore(struct ast_state *state, void* _o) +{ + type_ignore_ty o = (type_ignore_ty)_o; + PyObject *result = NULL, *value = NULL; + PyTypeObject *tp; + if (!o) { + Py_RETURN_NONE; + } + switch (o->kind) { + case TypeIgnore_kind: + tp = (PyTypeObject *)state->TypeIgnore_type; + result = PyType_GenericNew(tp, NULL, NULL); + if (!result) goto failed; + value = ast2obj_int(state, o->v.TypeIgnore.lineno); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->lineno, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_string(state, o->v.TypeIgnore.tag); + if (!value) goto failed; + if (PyObject_SetAttr(result, state->tag, value) == -1) + goto failed; + Py_DECREF(value); + break; + } + return result; +failed: + Py_XDECREF(value); + Py_XDECREF(result); + return NULL; +} + + +int +obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) +{ + int isinstance; + + PyObject *tmp = NULL; + PyObject *tp; + + if (obj == Py_None) { + *out = NULL; + return 0; + } + tp = state->Module_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_stmt_seq* body; + asdl_type_ignore_seq* type_ignores; + + if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { + return 1; + } if (tmp == NULL) { PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module"); return 1; @@ -8689,92 +9028,6 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* if (*out == NULL) goto failed; return 0; } - tp = state->MatchAs_type; - isinstance = PyObject_IsInstance(obj, tp); - if (isinstance == -1) { - return 1; - } - if (isinstance) { - expr_ty pattern; - identifier name; - - if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) { - return 1; - } - if (tmp == NULL) { - PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from MatchAs"); - return 1; - } - else { - int res; - res = obj2ast_expr(state, tmp, &pattern, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } - if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { - return 1; - } - if (tmp == NULL) { - PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from MatchAs"); - return 1; - } - else { - int res; - res = obj2ast_identifier(state, tmp, &name, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } - *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno, - end_col_offset, arena); - if (*out == NULL) goto failed; - return 0; - } - tp = state->MatchOr_type; - isinstance = PyObject_IsInstance(obj, tp); - if (isinstance == -1) { - return 1; - } - if (isinstance) { - asdl_expr_seq* patterns; - - if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) { - return 1; - } - if (tmp == NULL) { - PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr"); - return 1; - } - else { - int res; - Py_ssize_t len; - Py_ssize_t i; - if (!PyList_Check(tmp)) { - PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); - goto failed; - } - len = PyList_GET_SIZE(tmp); - patterns = _Py_asdl_expr_seq_new(len, arena); - if (patterns == NULL) goto failed; - for (i = 0; i < len; i++) { - expr_ty val; - PyObject *tmp2 = PyList_GET_ITEM(tmp, i); - Py_INCREF(tmp2); - res = obj2ast_expr(state, tmp2, &val, arena); - Py_DECREF(tmp2); - if (res != 0) goto failed; - if (len != PyList_GET_SIZE(tmp)) { - PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration"); - goto failed; - } - asdl_seq_SET(patterns, i, val); - } - Py_CLEAR(tmp); - } - *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno, - end_col_offset, arena); - if (*out == NULL) goto failed; - return 0; - } PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj); failed: @@ -9897,7 +10150,7 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, PyArena* arena) { PyObject* tmp = NULL; - expr_ty pattern; + pattern_ty pattern; expr_ty guard; asdl_stmt_seq* body; @@ -9910,7 +10163,7 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, } else { int res; - res = obj2ast_expr(state, tmp, &pattern, arena); + res = obj2ast_pattern(state, tmp, &pattern, arena); if (res != 0) goto failed; Py_CLEAR(tmp); } @@ -9968,32 +10221,541 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, } int -obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* - out, PyArena* arena) +obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out, + PyArena* arena) { int isinstance; PyObject *tmp = NULL; PyObject *tp; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; if (obj == Py_None) { *out = NULL; return 0; } - tp = state->TypeIgnore_type; - isinstance = PyObject_IsInstance(obj, tp); - if (isinstance == -1) { + if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { return 1; } - if (isinstance) { - int lineno; - string tag; - - if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { - return 1; - } - if (tmp == NULL) { - PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore"); + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from pattern"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &lineno, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from pattern"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &col_offset, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"end_lineno\" missing from pattern"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &end_lineno, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"end_col_offset\" missing from pattern"); + return 1; + } + else { + int res; + res = obj2ast_int(state, tmp, &end_col_offset, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + tp = state->MatchValue_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + expr_ty value; + + if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from MatchValue"); + return 1; + } + else { + int res; + res = obj2ast_expr(state, tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_MatchValue(value, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchSingleton_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + constant value; + + if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from MatchSingleton"); + return 1; + } + else { + int res; + res = obj2ast_constant(state, tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_MatchSingleton(value, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchSequence_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_pattern_seq* patterns; + + if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchSequence"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchSequence field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + patterns = _Py_asdl_pattern_seq_new(len, arena); + if (patterns == NULL) goto failed; + for (i = 0; i < len; i++) { + pattern_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_pattern(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchSequence field \"patterns\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(patterns, i, val); + } + Py_CLEAR(tmp); + } + *out = _PyAST_MatchSequence(patterns, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchMapping_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_expr_seq* keys; + asdl_pattern_seq* patterns; + identifier rest; + + if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from MatchMapping"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchMapping field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + keys = _Py_asdl_expr_seq_new(len, arena); + if (keys == NULL) goto failed; + for (i = 0; i < len; i++) { + expr_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_expr(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchMapping field \"keys\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(keys, i, val); + } + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchMapping"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchMapping field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + patterns = _Py_asdl_pattern_seq_new(len, arena); + if (patterns == NULL) goto failed; + for (i = 0; i < len; i++) { + pattern_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_pattern(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchMapping field \"patterns\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(patterns, i, val); + } + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->rest, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + rest = NULL; + } + else { + int res; + res = obj2ast_identifier(state, tmp, &rest, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_MatchMapping(keys, patterns, rest, lineno, col_offset, + end_lineno, end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchClass_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + expr_ty cls; + asdl_pattern_seq* patterns; + asdl_identifier_seq* kwd_attrs; + asdl_pattern_seq* kwd_patterns; + + if (_PyObject_LookupAttr(obj, state->cls, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"cls\" missing from MatchClass"); + return 1; + } + else { + int res; + res = obj2ast_expr(state, tmp, &cls, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchClass"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchClass field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + patterns = _Py_asdl_pattern_seq_new(len, arena); + if (patterns == NULL) goto failed; + for (i = 0; i < len; i++) { + pattern_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_pattern(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"patterns\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(patterns, i, val); + } + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->kwd_attrs, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"kwd_attrs\" missing from MatchClass"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchClass field \"kwd_attrs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + kwd_attrs = _Py_asdl_identifier_seq_new(len, arena); + if (kwd_attrs == NULL) goto failed; + for (i = 0; i < len; i++) { + identifier val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_identifier(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"kwd_attrs\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(kwd_attrs, i, val); + } + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->kwd_patterns, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"kwd_patterns\" missing from MatchClass"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchClass field \"kwd_patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + kwd_patterns = _Py_asdl_pattern_seq_new(len, arena); + if (kwd_patterns == NULL) goto failed; + for (i = 0; i < len; i++) { + pattern_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_pattern(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"kwd_patterns\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(kwd_patterns, i, val); + } + Py_CLEAR(tmp); + } + *out = _PyAST_MatchClass(cls, patterns, kwd_attrs, kwd_patterns, + lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchStar_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + identifier name; + + if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + name = NULL; + } + else { + int res; + res = obj2ast_identifier(state, tmp, &name, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_MatchStar(name, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchAs_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + pattern_ty pattern; + identifier name; + + if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + pattern = NULL; + } + else { + int res; + res = obj2ast_pattern(state, tmp, &pattern, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { + return 1; + } + if (tmp == NULL || tmp == Py_None) { + Py_CLEAR(tmp); + name = NULL; + } + else { + int res; + res = obj2ast_identifier(state, tmp, &name, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } + *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + tp = state->MatchOr_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_pattern_seq* patterns; + + if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr"); + return 1; + } + else { + int res; + Py_ssize_t len; + Py_ssize_t i; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); + goto failed; + } + len = PyList_GET_SIZE(tmp); + patterns = _Py_asdl_pattern_seq_new(len, arena); + if (patterns == NULL) goto failed; + for (i = 0; i < len; i++) { + pattern_ty val; + PyObject *tmp2 = PyList_GET_ITEM(tmp, i); + Py_INCREF(tmp2); + res = obj2ast_pattern(state, tmp2, &val, arena); + Py_DECREF(tmp2); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(patterns, i, val); + } + Py_CLEAR(tmp); + } + *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno, + end_col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + + PyErr_Format(PyExc_TypeError, "expected some sort of pattern, but got %R", obj); + failed: + Py_XDECREF(tmp); + return 1; +} + +int +obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* + out, PyArena* arena) +{ + int isinstance; + + PyObject *tmp = NULL; + PyObject *tp; + + if (obj == Py_None) { + *out = NULL; + return 0; + } + tp = state->TypeIgnore_type; + isinstance = PyObject_IsInstance(obj, tp); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + int lineno; + string tag; + + if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { + return 1; + } + if (tmp == NULL) { + PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore"); return 1; } else { @@ -10230,12 +10992,6 @@ astmodule_exec(PyObject *m) if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) { return -1; } - if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) { - return -1; - } - if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) { - return -1; - } if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0) { return -1; @@ -10378,6 +11134,36 @@ astmodule_exec(PyObject *m) if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) { return -1; } + if (PyModule_AddObjectRef(m, "pattern", state->pattern_type) < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchValue", state->MatchValue_type) < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchSingleton", state->MatchSingleton_type) + < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchSequence", state->MatchSequence_type) < + 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchMapping", state->MatchMapping_type) < 0) + { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchClass", state->MatchClass_type) < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchStar", state->MatchStar_type) < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) { + return -1; + } + if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) { + return -1; + } if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) { return -1; } diff --git a/Python/ast.c b/Python/ast.c index 2b965434ef4616..1fc83f6301962d 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -7,6 +7,7 @@ #include "pycore_pystate.h" // _PyThreadState_GET() #include +#include struct validator { int recursion_depth; /* current recursion depth */ @@ -18,6 +19,7 @@ static int validate_exprs(struct validator *, asdl_expr_seq*, expr_context_ty, i static int _validate_nonempty_seq(asdl_seq *, const char *, const char *); static int validate_stmt(struct validator *, stmt_ty); static int validate_expr(struct validator *, expr_ty, expr_context_ty); +static int validate_pattern(struct validator *, pattern_ty); static int validate_name(PyObject *name) @@ -88,9 +90,9 @@ expr_context_name(expr_context_ty ctx) return "Store"; case Del: return "Del"; - default: - Py_UNREACHABLE(); + // No default case so compiler emits warning for unhandled cases } + Py_UNREACHABLE(); } static int @@ -180,7 +182,7 @@ validate_constant(struct validator *state, PyObject *value) static int validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx) { - int ret; + int ret = -1; if (++state->recursion_depth > state->recursion_limit) { PyErr_SetString(PyExc_RecursionError, "maximum recursion depth exceeded during compilation"); @@ -351,33 +353,215 @@ validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx) case NamedExpr_kind: ret = validate_expr(state, exp->v.NamedExpr.value, Load); break; - case MatchAs_kind: - PyErr_SetString(PyExc_ValueError, - "MatchAs is only valid in match_case patterns"); - return 0; - case MatchOr_kind: - PyErr_SetString(PyExc_ValueError, - "MatchOr is only valid in match_case patterns"); - return 0; /* This last case doesn't have any checking. */ case Name_kind: ret = 1; break; - default: + // No default case so compiler emits warning for unhandled cases + } + if (ret < 0) { PyErr_SetString(PyExc_SystemError, "unexpected expression"); - return 0; + ret = 0; } state->recursion_depth--; return ret; } + +// Note: the ensure_literal_* functions are only used to validate a restricted +// set of non-recursive literals that have already been checked with +// validate_expr, so they don't accept the validator state +static int +ensure_literal_number(expr_ty exp, bool allow_real, bool allow_imaginary) +{ + assert(exp->kind == Constant_kind); + PyObject *value = exp->v.Constant.value; + return (allow_real && PyFloat_CheckExact(value)) || + (allow_real && PyLong_CheckExact(value)) || + (allow_imaginary && PyComplex_CheckExact(value)); +} + static int -validate_pattern(expr_ty p) +ensure_literal_negative(expr_ty exp, bool allow_real, bool allow_imaginary) { - // Coming soon (thanks Batuhan)! + assert(exp->kind == UnaryOp_kind); + // Must be negation ... + if (exp->v.UnaryOp.op != USub) { + return 0; + } + // ... of a constant ... + expr_ty operand = exp->v.UnaryOp.operand; + if (operand->kind != Constant_kind) { + return 0; + } + // ... number + return ensure_literal_number(operand, allow_real, allow_imaginary); +} + +static int +ensure_literal_complex(expr_ty exp) +{ + assert(exp->kind == BinOp_kind); + expr_ty left = exp->v.BinOp.left; + expr_ty right = exp->v.BinOp.right; + // Ensure op is addition or subtraction + if (exp->v.BinOp.op != Add && exp->v.BinOp.op != Sub) { + return 0; + } + // Check LHS is a real number (potentially signed) + switch (left->kind) + { + case Constant_kind: + if (!ensure_literal_number(left, /*real=*/true, /*imaginary=*/false)) { + return 0; + } + break; + case UnaryOp_kind: + if (!ensure_literal_negative(left, /*real=*/true, /*imaginary=*/false)) { + return 0; + } + break; + default: + return 0; + } + // Check RHS is an imaginary number (no separate sign allowed) + switch (right->kind) + { + case Constant_kind: + if (!ensure_literal_number(right, /*real=*/false, /*imaginary=*/true)) { + return 0; + } + break; + default: + return 0; + } return 1; } +static int +validate_pattern_match_value(struct validator *state, expr_ty exp) +{ + if (!validate_expr(state, exp, Load)) { + return 0; + } + + switch (exp->kind) + { + case Constant_kind: + case Attribute_kind: + // Constants and attribute lookups are always permitted + return 1; + case UnaryOp_kind: + // Negated numbers are permitted (whether real or imaginary) + // Compiler will complain if AST folding doesn't create a constant + if (ensure_literal_negative(exp, /*real=*/true, /*imaginary=*/true)) { + return 1; + } + break; + case BinOp_kind: + // Complex literals are permitted + // Compiler will complain if AST folding doesn't create a constant + if (ensure_literal_complex(exp)) { + return 1; + } + break; + default: + break; + } + PyErr_SetString(PyExc_SyntaxError, + "patterns may only match literals and attribute lookups"); + return 0; +} + +static int +validate_pattern(struct validator *state, pattern_ty p) +{ + int ret = -1; + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + return 0; + } + // Coming soon: https://bugs.python.org/issue43897 (thanks Batuhan)! + // TODO: Ensure no subnodes use "_" as an ordinary identifier + switch (p->kind) { + case MatchValue_kind: + ret = validate_pattern_match_value(state, p->v.MatchValue.value); + break; + case MatchSingleton_kind: + // TODO: Check constant is specifically None, True, or False + ret = validate_constant(state, p->v.MatchSingleton.value); + break; + case MatchSequence_kind: + // TODO: Validate all subpatterns + // return validate_patterns(state, p->v.MatchSequence.patterns); + ret = 1; + break; + case MatchMapping_kind: + // TODO: check "rest" target name is valid + if (asdl_seq_LEN(p->v.MatchMapping.keys) != asdl_seq_LEN(p->v.MatchMapping.patterns)) { + PyErr_SetString(PyExc_ValueError, + "MatchMapping doesn't have the same number of keys as patterns"); + return 0; + } + // null_ok=0 for key expressions, as rest-of-mapping is captured in "rest" + // TODO: replace with more restrictive expression validator, as per MatchValue above + if (!validate_exprs(state, p->v.MatchMapping.keys, Load, /*null_ok=*/ 0)) { + return 0; + } + // TODO: Validate all subpatterns + // ret = validate_patterns(state, p->v.MatchMapping.patterns); + ret = 1; + break; + case MatchClass_kind: + if (asdl_seq_LEN(p->v.MatchClass.kwd_attrs) != asdl_seq_LEN(p->v.MatchClass.kwd_patterns)) { + PyErr_SetString(PyExc_ValueError, + "MatchClass doesn't have the same number of keyword attributes as patterns"); + return 0; + } + // TODO: Restrict cls lookup to being a name or attribute + if (!validate_expr(state, p->v.MatchClass.cls, Load)) { + return 0; + } + // TODO: Validate all subpatterns + // return validate_patterns(state, p->v.MatchClass.patterns) && + // validate_patterns(state, p->v.MatchClass.kwd_patterns); + ret = 1; + break; + case MatchStar_kind: + // TODO: check target name is valid + ret = 1; + break; + case MatchAs_kind: + // TODO: check target name is valid + if (p->v.MatchAs.pattern == NULL) { + ret = 1; + } + else if (p->v.MatchAs.name == NULL) { + PyErr_SetString(PyExc_ValueError, + "MatchAs must specify a target name if a pattern is given"); + return 0; + } + else { + ret = validate_pattern(state, p->v.MatchAs.pattern); + } + break; + case MatchOr_kind: + // TODO: Validate all subpatterns + // return validate_patterns(state, p->v.MatchOr.patterns); + ret = 1; + break; + // No default case, so the compiler will emit a warning if new pattern + // kinds are added without being handled here + } + if (ret < 0) { + PyErr_SetString(PyExc_SystemError, "unexpected pattern"); + ret = 0; + } + state->recursion_depth--; + return ret; +} + static int _validate_nonempty_seq(asdl_seq *seq, const char *what, const char *owner) { @@ -404,7 +588,7 @@ validate_body(struct validator *state, asdl_stmt_seq *body, const char *owner) static int validate_stmt(struct validator *state, stmt_ty stmt) { - int ret; + int ret = -1; Py_ssize_t i; if (++state->recursion_depth > state->recursion_limit) { PyErr_SetString(PyExc_RecursionError, @@ -502,7 +686,7 @@ validate_stmt(struct validator *state, stmt_ty stmt) } for (i = 0; i < asdl_seq_LEN(stmt->v.Match.cases); i++) { match_case_ty m = asdl_seq_GET(stmt->v.Match.cases, i); - if (!validate_pattern(m->pattern) + if (!validate_pattern(state, m->pattern) || (m->guard && !validate_expr(state, m->guard, Load)) || !validate_body(state, m->body, "match_case")) { return 0; @@ -582,9 +766,11 @@ validate_stmt(struct validator *state, stmt_ty stmt) case Continue_kind: ret = 1; break; - default: + // No default case so compiler emits warning for unhandled cases + } + if (ret < 0) { PyErr_SetString(PyExc_SystemError, "unexpected statement"); - return 0; + ret = 0; } state->recursion_depth--; return ret; @@ -635,7 +821,7 @@ validate_exprs(struct validator *state, asdl_expr_seq *exprs, expr_context_ty ct int _PyAST_Validate(mod_ty mod) { - int res = 0; + int res = -1; struct validator state; PyThreadState *tstate; int recursion_limit = Py_GetRecursionLimit(); @@ -663,10 +849,16 @@ _PyAST_Validate(mod_ty mod) case Expression_kind: res = validate_expr(&state, mod->v.Expression.body, Load); break; - default: - PyErr_SetString(PyExc_SystemError, "impossible module node"); - res = 0; + case FunctionType_kind: + res = validate_exprs(&state, mod->v.FunctionType.argtypes, Load, /*null_ok=*/0) && + validate_expr(&state, mod->v.FunctionType.returns, Load); break; + // No default case so compiler emits warning for unhandled cases + } + + if (res < 0) { + PyErr_SetString(PyExc_SystemError, "impossible module node"); + return 0; } /* Check that the recursion depth counting balanced correctly */ diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 6eb514e24f9d7e..254dd646c467ba 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -411,7 +411,7 @@ static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); -static int astfold_pattern(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); +static int astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); #define CALL(FUNC, TYPE, ARG) \ if (!FUNC((ARG), ctx_, state)) \ @@ -602,10 +602,6 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) case Constant_kind: // Already a constant, nothing further to do break; - case MatchAs_kind: - case MatchOr_kind: - // These can't occur outside of patterns. - Py_UNREACHABLE(); // No default case, so the compiler will emit a warning if new expression // kinds are added without being handled here } @@ -797,112 +793,48 @@ astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) } static int -astfold_pattern_negative(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) +astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { - assert(node_->kind == UnaryOp_kind); - assert(node_->v.UnaryOp.op == USub); - assert(node_->v.UnaryOp.operand->kind == Constant_kind); - PyObject *value = node_->v.UnaryOp.operand->v.Constant.value; - assert(PyComplex_CheckExact(value) || - PyFloat_CheckExact(value) || - PyLong_CheckExact(value)); - PyObject *negated = PyNumber_Negative(value); - if (negated == NULL) { - return 0; - } - assert(PyComplex_CheckExact(negated) || - PyFloat_CheckExact(negated) || - PyLong_CheckExact(negated)); - return make_const(node_, negated, ctx_); -} - -static int -astfold_pattern_complex(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) -{ - expr_ty left = node_->v.BinOp.left; - expr_ty right = node_->v.BinOp.right; - if (left->kind == UnaryOp_kind) { - CALL(astfold_pattern_negative, expr_ty, left); - } - assert(left->kind = Constant_kind); - assert(right->kind = Constant_kind); - // LHS must be real, RHS must be imaginary: - if (!(PyFloat_CheckExact(left->v.Constant.value) || - PyLong_CheckExact(left->v.Constant.value)) || - !PyComplex_CheckExact(right->v.Constant.value)) - { - // Not actually valid, but it's the compiler's job to complain: - return 1; - } - PyObject *new; - if (node_->v.BinOp.op == Add) { - new = PyNumber_Add(left->v.Constant.value, right->v.Constant.value); - } - else { - assert(node_->v.BinOp.op == Sub); - new = PyNumber_Subtract(left->v.Constant.value, right->v.Constant.value); - } - if (new == NULL) { + // Currently, this is really only used to form complex/negative numeric + // constants in MatchValue and MatchMapping nodes + // We still recurse into all subexpressions and subpatterns anyway + if (++state->recursion_depth > state->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); return 0; } - assert(PyComplex_CheckExact(new)); - return make_const(node_, new, ctx_); -} - -static int -astfold_pattern_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) -{ - CALL(astfold_pattern, expr_ty, node_->value); - return 1; -} - -static int -astfold_pattern(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) -{ - // Don't blindly optimize the pattern as an expr; it plays by its own rules! - // Currently, this is only used to form complex/negative numeric constants. switch (node_->kind) { - case Attribute_kind: + case MatchValue_kind: + CALL(astfold_expr, expr_ty, node_->v.MatchValue.value); break; - case BinOp_kind: - CALL(astfold_pattern_complex, expr_ty, node_); + case MatchSingleton_kind: break; - case Call_kind: - CALL_SEQ(astfold_pattern, expr, node_->v.Call.args); - CALL_SEQ(astfold_pattern_keyword, keyword, node_->v.Call.keywords); + case MatchSequence_kind: + CALL_SEQ(astfold_pattern, pattern, node_->v.MatchSequence.patterns); break; - case Constant_kind: + case MatchMapping_kind: + CALL_SEQ(astfold_expr, expr, node_->v.MatchMapping.keys); + CALL_SEQ(astfold_pattern, pattern, node_->v.MatchMapping.patterns); break; - case Dict_kind: - CALL_SEQ(astfold_pattern, expr, node_->v.Dict.keys); - CALL_SEQ(astfold_pattern, expr, node_->v.Dict.values); + case MatchClass_kind: + CALL(astfold_expr, expr_ty, node_->v.MatchClass.cls); + CALL_SEQ(astfold_pattern, pattern, node_->v.MatchClass.patterns); + CALL_SEQ(astfold_pattern, pattern, node_->v.MatchClass.kwd_patterns); break; - // Not actually valid, but it's the compiler's job to complain: - case JoinedStr_kind: - break; - case List_kind: - CALL_SEQ(astfold_pattern, expr, node_->v.List.elts); + case MatchStar_kind: break; case MatchAs_kind: - CALL(astfold_pattern, expr_ty, node_->v.MatchAs.pattern); + if (node_->v.MatchAs.pattern) { + CALL(astfold_pattern, expr_ty, node_->v.MatchAs.pattern); + } break; case MatchOr_kind: - CALL_SEQ(astfold_pattern, expr, node_->v.MatchOr.patterns); - break; - case Name_kind: - break; - case Starred_kind: - CALL(astfold_pattern, expr_ty, node_->v.Starred.value); + CALL_SEQ(astfold_pattern, pattern, node_->v.MatchOr.patterns); break; - case Tuple_kind: - CALL_SEQ(astfold_pattern, expr, node_->v.Tuple.elts); - break; - case UnaryOp_kind: - CALL(astfold_pattern_negative, expr_ty, node_); - break; - default: - Py_UNREACHABLE(); + // No default case, so the compiler will emit a warning if new pattern + // kinds are added without being handled here } + state->recursion_depth--; return 1; } diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c index 5276b2fcd6698b..126e9047d58d64 100644 --- a/Python/ast_unparse.c +++ b/Python/ast_unparse.c @@ -3,6 +3,11 @@ #include // DBL_MAX_10_EXP #include +/* This limited unparser is used to convert annotations back to strings + * during compilation rather than being a full AST unparser. + * See ast.unparse for a full unparser (written in Python) + */ + static PyObject *_str_open_br; static PyObject *_str_dbl_open_br; static PyObject *_str_close_br; @@ -912,11 +917,11 @@ append_ast_expr(_PyUnicodeWriter *writer, expr_ty e, int level) return append_ast_tuple(writer, e, level); case NamedExpr_kind: return append_named_expr(writer, e, level); - default: - PyErr_SetString(PyExc_SystemError, - "unknown expression kind"); - return -1; + // No default so compiler emits a warning for unhandled cases } + PyErr_SetString(PyExc_SystemError, + "unknown expression kind"); + return -1; } static int diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 3b0e59a6d18c36..66a74cbdef6104 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -831,11 +831,7 @@ builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, if (arena == NULL) goto error; mod = PyAST_obj2mod(source, arena, compile_mode); - if (mod == NULL) { - _PyArena_Free(arena); - goto error; - } - if (!_PyAST_Validate(mod)) { + if (mod == NULL || !_PyAST_Validate(mod)) { _PyArena_Free(arena); goto error; } diff --git a/Python/compile.c b/Python/compile.c index 2cf2f4a3824570..3cf61221967593 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -280,9 +280,9 @@ static int compiler_async_comprehension_generator( int depth, expr_ty elt, expr_ty val, int type); -static int compiler_pattern(struct compiler *, expr_ty, pattern_context *); +static int compiler_pattern(struct compiler *, pattern_ty, pattern_context *); static int compiler_match(struct compiler *, stmt_ty); -static int compiler_pattern_subpattern(struct compiler *, expr_ty, +static int compiler_pattern_subpattern(struct compiler *, pattern_ty, pattern_context *); static PyCodeObject *assemble(struct compiler *, int addNone); @@ -5263,10 +5263,6 @@ compiler_visit_expr1(struct compiler *c, expr_ty e) return compiler_list(c, e); case Tuple_kind: return compiler_tuple(c, e); - case MatchAs_kind: - case MatchOr_kind: - // Can only occur in patterns, which are handled elsewhere. - Py_UNREACHABLE(); } return 1; } @@ -5600,16 +5596,22 @@ compiler_slice(struct compiler *c, expr_ty s) // that it's much easier to smooth out any redundant pushing, popping, and // jumping in the peephole optimizer than to detect or predict it here. - #define WILDCARD_CHECK(N) \ - ((N)->kind == Name_kind && \ - _PyUnicode_EqualToASCIIString((N)->v.Name.id, "_")) + ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name) +#define WILDCARD_STAR_CHECK(N) \ + ((N)->kind == MatchStar_kind && !(N)->v.MatchStar.name) + +// Limit permitted subexpressions, even if the parser & AST validator let them through +#define MATCH_VALUE_EXPR(N) \ + ((N)->kind == Constant_kind || (N)->kind == Attribute_kind) static int pattern_helper_store_name(struct compiler *c, identifier n, pattern_context *pc) { - assert(!_PyUnicode_EqualToASCIIString(n, "_")); + if (forbidden_name(c, n, Store)) { + return 0; + } // Can't assign to the same name twice: if (pc->stores == NULL) { RETURN_IF_FALSE(pc->stores = PySet_New(NULL)); @@ -5631,16 +5633,43 @@ pattern_helper_store_name(struct compiler *c, identifier n, pattern_context *pc) static int -pattern_helper_sequence_unpack(struct compiler *c, asdl_expr_seq *values, +pattern_unpack_helper(struct compiler *c, asdl_pattern_seq *elts) +{ + Py_ssize_t n = asdl_seq_LEN(elts); + int seen_star = 0; + for (Py_ssize_t i = 0; i < n; i++) { + pattern_ty elt = asdl_seq_GET(elts, i); + if (elt->kind == MatchStar_kind && !seen_star) { + if ((i >= (1 << 8)) || + (n-i-1 >= (INT_MAX >> 8))) + return compiler_error(c, + "too many expressions in " + "star-unpacking sequence pattern"); + ADDOP_I(c, UNPACK_EX, (i + ((n-i-1) << 8))); + seen_star = 1; + } + else if (elt->kind == MatchStar_kind) { + return compiler_error(c, + "multiple starred expressions in sequence pattern"); + } + } + if (!seen_star) { + ADDOP_I(c, UNPACK_SEQUENCE, n); + } + return 1; +} + +static int +pattern_helper_sequence_unpack(struct compiler *c, asdl_pattern_seq *patterns, Py_ssize_t star, pattern_context *pc) { - RETURN_IF_FALSE(unpack_helper(c, values)); + RETURN_IF_FALSE(pattern_unpack_helper(c, patterns)); // We've now got a bunch of new subjects on the stack. If any of them fail // to match, we need to pop everything else off, then finally push False. // fails is an array of blocks that correspond to the necessary amount of // popping for each element: basicblock **fails; - Py_ssize_t size = asdl_seq_LEN(values); + Py_ssize_t size = asdl_seq_LEN(patterns); fails = (basicblock **)PyObject_Malloc(sizeof(basicblock*) * size); if (fails == NULL) { PyErr_NoMemory(); @@ -5655,12 +5684,9 @@ pattern_helper_sequence_unpack(struct compiler *c, asdl_expr_seq *values, } } for (Py_ssize_t i = 0; i < size; i++) { - expr_ty value = asdl_seq_GET(values, i); - if (i == star) { - assert(value->kind == Starred_kind); - value = value->v.Starred.value; - } - if (!compiler_pattern_subpattern(c, value, pc) || + pattern_ty pattern = asdl_seq_GET(patterns, i); + assert((i == star) == (pattern->kind == MatchStar_kind)); + if (!compiler_pattern_subpattern(c, pattern, pc) || !compiler_addop_j(c, POP_JUMP_IF_FALSE, fails[i]) || compiler_next_block(c) == NULL) { @@ -5703,21 +5729,20 @@ pattern_helper_sequence_unpack(struct compiler *c, asdl_expr_seq *values, // UNPACK_SEQUENCE / UNPACK_EX. This is more efficient for patterns with a // starred wildcard like [first, *_] / [first, *_, last] / [*_, last] / etc. static int -pattern_helper_sequence_subscr(struct compiler *c, asdl_expr_seq *values, +pattern_helper_sequence_subscr(struct compiler *c, asdl_pattern_seq *patterns, Py_ssize_t star, pattern_context *pc) { basicblock *end, *fail_pop_1; RETURN_IF_FALSE(end = compiler_new_block(c)); RETURN_IF_FALSE(fail_pop_1 = compiler_new_block(c)); - Py_ssize_t size = asdl_seq_LEN(values); + Py_ssize_t size = asdl_seq_LEN(patterns); for (Py_ssize_t i = 0; i < size; i++) { - expr_ty value = asdl_seq_GET(values, i); - if (WILDCARD_CHECK(value)) { + pattern_ty pattern = asdl_seq_GET(patterns, i); + if (WILDCARD_CHECK(pattern)) { continue; } if (i == star) { - assert(value->kind == Starred_kind); - assert(WILDCARD_CHECK(value->v.Starred.value)); + assert(WILDCARD_STAR_CHECK(pattern)); continue; } ADDOP(c, DUP_TOP); @@ -5732,7 +5757,7 @@ pattern_helper_sequence_subscr(struct compiler *c, asdl_expr_seq *values, ADDOP(c, BINARY_SUBTRACT); } ADDOP(c, BINARY_SUBSCR); - RETURN_IF_FALSE(compiler_pattern_subpattern(c, value, pc)); + RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); NEXT_BLOCK(c); } @@ -5746,10 +5771,9 @@ pattern_helper_sequence_subscr(struct compiler *c, asdl_expr_seq *values, return 1; } - // Like compiler_pattern, but turn off checks for irrefutability. static int -compiler_pattern_subpattern(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_subpattern(struct compiler *c, pattern_ty p, pattern_context *pc) { int allow_irrefutable = pc->allow_irrefutable; pc->allow_irrefutable = 1; @@ -5758,11 +5782,43 @@ compiler_pattern_subpattern(struct compiler *c, expr_ty p, pattern_context *pc) return 1; } +static int +compiler_pattern_capture(struct compiler *c, identifier n, pattern_context *pc) +{ + RETURN_IF_FALSE(pattern_helper_store_name(c, n, pc)); + ADDOP_LOAD_CONST(c, Py_True); + return 1; +} static int -compiler_pattern_as(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_wildcard(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchAs_kind); + if (!pc->allow_irrefutable) { + // Whoops, can't have a wildcard here! + const char *e = "wildcard makes remaining patterns unreachable"; + return compiler_error(c, e); + } + ADDOP(c, POP_TOP); + ADDOP_LOAD_CONST(c, Py_True); + return 1; +} + +static int +compiler_pattern_as(struct compiler *c, pattern_ty p, pattern_context *pc) +{ + assert(p->kind == MatchAs_kind); + if (p->v.MatchAs.name == NULL) { + return compiler_pattern_wildcard(c, p, pc); + } + if (p->v.MatchAs.pattern == NULL) { + if (!pc->allow_irrefutable) { + // Whoops, can't have a name capture here! + const char *e = "name capture %R makes remaining patterns unreachable"; + return compiler_error(c, e, p->v.MatchAs.name); + } + return compiler_pattern_capture(c, p->v.MatchAs.name, pc); + } basicblock *end, *fail_pop_1; RETURN_IF_FALSE(end = compiler_new_block(c)); RETURN_IF_FALSE(fail_pop_1 = compiler_new_block(c)); @@ -5782,71 +5838,101 @@ compiler_pattern_as(struct compiler *c, expr_ty p, pattern_context *pc) return 1; } - static int -compiler_pattern_capture(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_star(struct compiler *c, pattern_ty p, pattern_context *pc) { - assert(p->kind == Name_kind); - assert(p->v.Name.ctx == Store); - assert(!WILDCARD_CHECK(p)); + assert(p->kind == MatchStar_kind); if (!pc->allow_irrefutable) { - // Whoops, can't have a name capture here! - const char *e = "name capture %R makes remaining patterns unreachable"; - return compiler_error(c, e, p->v.Name.id); + // Whoops, can't have a star capture here! + const char *e = "star captures are only allowed as part of sequence patterns"; + return compiler_error(c, e); } - RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.Name.id, pc)); - ADDOP_LOAD_CONST(c, Py_True); - return 1; + return compiler_pattern_capture(c, p->v.MatchStar.name, pc); } +static int +validate_kwd_attrs(struct compiler *c, asdl_identifier_seq *attrs, asdl_pattern_seq* patterns) +{ + // Any errors will point to the pattern rather than the arg name as the + // parser is only supplying identifiers rather than Name or keyword nodes + Py_ssize_t nattrs = asdl_seq_LEN(attrs); + for (Py_ssize_t i = 0; i < nattrs; i++) { + identifier attr = ((identifier)asdl_seq_GET(attrs, i)); + c->u->u_col_offset = ((pattern_ty) asdl_seq_GET(patterns, i))->col_offset; + if (forbidden_name(c, attr, Store)) { + return -1; + } + for (Py_ssize_t j = i + 1; j < nattrs; j++) { + identifier other = ((identifier)asdl_seq_GET(attrs, j)); + if (!PyUnicode_Compare(attr, other)) { + c->u->u_col_offset = ((pattern_ty) asdl_seq_GET(patterns, j))->col_offset; + compiler_error(c, "attribute name repeated in class pattern: %U", attr); + return -1; + } + } + } + return 0; +} static int -compiler_pattern_class(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) { - asdl_expr_seq *args = p->v.Call.args; - asdl_keyword_seq *kwargs = p->v.Call.keywords; - Py_ssize_t nargs = asdl_seq_LEN(args); - Py_ssize_t nkwargs = asdl_seq_LEN(kwargs); - if (INT_MAX < nargs || INT_MAX < nargs + nkwargs - 1) { + assert(p->kind == MatchClass_kind); + asdl_pattern_seq *patterns = p->v.MatchClass.patterns; + asdl_identifier_seq *kwd_attrs = p->v.MatchClass.kwd_attrs; + asdl_pattern_seq *kwd_patterns = p->v.MatchClass.kwd_patterns; + Py_ssize_t nargs = asdl_seq_LEN(patterns); + Py_ssize_t nattrs = asdl_seq_LEN(kwd_attrs); + Py_ssize_t nkwd_patterns = asdl_seq_LEN(kwd_patterns); + if (nattrs != nkwd_patterns) { + // AST validator shouldn't let this happen, but if it does, + // just fail, don't crash out of the interpreter + const char * e = "kwd_attrs (%d) / kwd_patterns (%d) length mismatch in class pattern"; + return compiler_error(c, e, nattrs, nkwd_patterns); + } + if (INT_MAX < nargs || INT_MAX < nargs + nattrs - 1) { const char *e = "too many sub-patterns in class pattern %R"; - return compiler_error(c, e, p->v.Call.func); + return compiler_error(c, e, p->v.MatchClass.cls); + } + if (nattrs) { + RETURN_IF_FALSE(!validate_kwd_attrs(c, kwd_attrs, kwd_patterns)); + c->u->u_col_offset = p->col_offset; // validate_kwd_attrs moves this } - RETURN_IF_FALSE(!validate_keywords(c, kwargs)); basicblock *end, *fail_pop_1; RETURN_IF_FALSE(end = compiler_new_block(c)); RETURN_IF_FALSE(fail_pop_1 = compiler_new_block(c)); - VISIT(c, expr, p->v.Call.func); - PyObject *kwnames; - RETURN_IF_FALSE(kwnames = PyTuple_New(nkwargs)); + VISIT(c, expr, p->v.MatchClass.cls); + PyObject *attr_names; + RETURN_IF_FALSE(attr_names = PyTuple_New(nattrs)); Py_ssize_t i; - for (i = 0; i < nkwargs; i++) { - PyObject *name = ((keyword_ty) asdl_seq_GET(kwargs, i))->arg; + for (i = 0; i < nattrs; i++) { + PyObject *name = asdl_seq_GET(kwd_attrs, i); Py_INCREF(name); - PyTuple_SET_ITEM(kwnames, i, name); + PyTuple_SET_ITEM(attr_names, i, name); } - ADDOP_LOAD_CONST_NEW(c, kwnames); + ADDOP_LOAD_CONST_NEW(c, attr_names); ADDOP_I(c, MATCH_CLASS, nargs); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); NEXT_BLOCK(c); // TOS is now a tuple of (nargs + nkwargs) attributes. - for (i = 0; i < nargs + nkwargs; i++) { - expr_ty arg; + for (i = 0; i < nargs + nattrs; i++) { + pattern_ty pattern; if (i < nargs) { // Positional: - arg = asdl_seq_GET(args, i); + pattern = asdl_seq_GET(patterns, i); } else { // Keyword: - arg = ((keyword_ty) asdl_seq_GET(kwargs, i - nargs))->value; + pattern = asdl_seq_GET(kwd_patterns, i - nargs); } - if (WILDCARD_CHECK(arg)) { + if (WILDCARD_CHECK(pattern)) { continue; } // Get the i-th attribute, and match it against the i-th pattern: ADDOP(c, DUP_TOP); ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(i)); ADDOP(c, BINARY_SUBSCR); - RETURN_IF_FALSE(compiler_pattern_subpattern(c, arg, pc)); + RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); NEXT_BLOCK(c); } @@ -5861,36 +5947,30 @@ compiler_pattern_class(struct compiler *c, expr_ty p, pattern_context *pc) return 1; } - static int -compiler_pattern_literal(struct compiler *c, expr_ty p, pattern_context *pc) -{ - assert(p->kind == Constant_kind); - PyObject *v = p->v.Constant.value; - ADDOP_LOAD_CONST(c, v); - // Literal True, False, and None are compared by identity. All others use - // equality: - ADDOP_COMPARE(c, (v == Py_None || PyBool_Check(v)) ? Is : Eq); - return 1; -} - - -static int -compiler_pattern_mapping(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) { + assert(p->kind == MatchMapping_kind); basicblock *end, *fail_pop_1, *fail_pop_3; RETURN_IF_FALSE(end = compiler_new_block(c)); RETURN_IF_FALSE(fail_pop_1 = compiler_new_block(c)); RETURN_IF_FALSE(fail_pop_3 = compiler_new_block(c)); - asdl_expr_seq *keys = p->v.Dict.keys; - asdl_expr_seq *values = p->v.Dict.values; - Py_ssize_t size = asdl_seq_LEN(values); - // A starred pattern will be a keyless value. It is guaranteed to be last: - int star = size ? !asdl_seq_GET(keys, size - 1) : 0; + asdl_expr_seq *keys = p->v.MatchMapping.keys; + asdl_pattern_seq *patterns = p->v.MatchMapping.patterns; + Py_ssize_t size = asdl_seq_LEN(keys); + Py_ssize_t npatterns = asdl_seq_LEN(patterns); + if (size != npatterns) { + // AST validator shouldn't let this happen, but if it does, + // just fail, don't crash out of the interpreter + const char * e = "keys (%d) / patterns (%d) length mismatch in mapping pattern"; + return compiler_error(c, e, size, npatterns); + } + // We have a double-star target if "rest" is set + PyObject *star_target = p->v.MatchMapping.rest; ADDOP(c, MATCH_MAPPING); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); NEXT_BLOCK(c); - if (!size) { + if (!size && !star_target) { // If the pattern is just "{}", we're done! ADDOP(c, POP_TOP); ADDOP_LOAD_CONST(c, Py_True); @@ -5901,53 +5981,57 @@ compiler_pattern_mapping(struct compiler *c, expr_ty p, pattern_context *pc) compiler_use_next_block(c, end); return 1; } - if (size - star) { + if (size) { // If the pattern has any keys in it, perform a length check: ADDOP(c, GET_LEN); - ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(size - star)); + ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(size)); ADDOP_COMPARE(c, GtE); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); NEXT_BLOCK(c); } - if (INT_MAX < size - star - 1) { + if (INT_MAX < size - 1) { return compiler_error(c, "too many sub-patterns in mapping pattern"); } // Collect all of the keys into a tuple for MATCH_KEYS and // COPY_DICT_WITHOUT_KEYS. They can either be dotted names or literals: - for (Py_ssize_t i = 0; i < size - star; i++) { + for (Py_ssize_t i = 0; i < size; i++) { expr_ty key = asdl_seq_GET(keys, i); if (key == NULL) { - const char *e = "can't use starred name here " - "(consider moving to end)"; + const char *e = "can't use NULL keys in MatchMapping " + "(set 'rest' parameter instead)"; + c->u->u_col_offset = ((pattern_ty) asdl_seq_GET(patterns, i))->col_offset; + return compiler_error(c, e); + } + if (!MATCH_VALUE_EXPR(key)) { + const char *e = "mapping pattern keys may only match literals and attribute lookups"; return compiler_error(c, e); } VISIT(c, expr, key); } - ADDOP_I(c, BUILD_TUPLE, size - star); + ADDOP_I(c, BUILD_TUPLE, size); ADDOP(c, MATCH_KEYS); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_3); NEXT_BLOCK(c); // So far so good. There's now a tuple of values on the stack to match // sub-patterns against: - for (Py_ssize_t i = 0; i < size - star; i++) { - expr_ty value = asdl_seq_GET(values, i); - if (WILDCARD_CHECK(value)) { + for (Py_ssize_t i = 0; i < size; i++) { + pattern_ty pattern = asdl_seq_GET(patterns, i); + if (WILDCARD_CHECK(pattern)) { continue; } ADDOP(c, DUP_TOP); ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(i)); ADDOP(c, BINARY_SUBSCR); - RETURN_IF_FALSE(compiler_pattern_subpattern(c, value, pc)); + RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_3); NEXT_BLOCK(c); } // If we get this far, it's a match! We're done with that tuple of values. ADDOP(c, POP_TOP); - if (star) { - // If we had a starred name, bind a dict of remaining items to it: + if (star_target) { + // If we have a starred name, bind a dict of remaining items to it: ADDOP(c, COPY_DICT_WITHOUT_KEYS); - PyObject *id = asdl_seq_GET(values, size - 1)->v.Name.id; - RETURN_IF_FALSE(pattern_helper_store_name(c, id, pc)); + RETURN_IF_FALSE(pattern_helper_store_name(c, star_target, pc)); } else { // Otherwise, we don't care about this tuple of keys anymore: @@ -5970,9 +6054,8 @@ compiler_pattern_mapping(struct compiler *c, expr_ty p, pattern_context *pc) return 1; } - static int -compiler_pattern_or(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_or(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchOr_kind); // control is the set of names bound by the first alternative. If all of the @@ -5988,7 +6071,7 @@ compiler_pattern_or(struct compiler *c, expr_ty p, pattern_context *pc) int allow_irrefutable = pc->allow_irrefutable; for (Py_ssize_t i = 0; i < size; i++) { // NOTE: Can't use our nice returning macros in here: they'll leak sets! - expr_ty alt = asdl_seq_GET(p->v.MatchOr.patterns, i); + pattern_ty alt = asdl_seq_GET(p->v.MatchOr.patterns, i); pc->stores = PySet_New(stores_init); // An irrefutable sub-pattern must be last, if it is allowed at all: int is_last = i == size - 1; @@ -6044,28 +6127,28 @@ compiler_pattern_or(struct compiler *c, expr_ty p, pattern_context *pc) static int -compiler_pattern_sequence(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_sequence(struct compiler *c, pattern_ty p, pattern_context *pc) { - assert(p->kind == List_kind || p->kind == Tuple_kind); - asdl_expr_seq *values = (p->kind == Tuple_kind) ? p->v.Tuple.elts - : p->v.List.elts; - Py_ssize_t size = asdl_seq_LEN(values); + assert(p->kind == MatchSequence_kind); + asdl_pattern_seq *patterns = p->v.MatchSequence.patterns; + Py_ssize_t size = asdl_seq_LEN(patterns); Py_ssize_t star = -1; int only_wildcard = 1; int star_wildcard = 0; // Find a starred name, if it exists. There may be at most one: for (Py_ssize_t i = 0; i < size; i++) { - expr_ty value = asdl_seq_GET(values, i); - if (value->kind == Starred_kind) { - value = value->v.Starred.value; + pattern_ty pattern = asdl_seq_GET(patterns, i); + if (pattern->kind == MatchStar_kind) { if (star >= 0) { const char *e = "multiple starred names in sequence pattern"; return compiler_error(c, e); } - star_wildcard = WILDCARD_CHECK(value); + star_wildcard = WILDCARD_STAR_CHECK(pattern); + only_wildcard &= star_wildcard; star = i; + continue; } - only_wildcard &= WILDCARD_CHECK(value); + only_wildcard &= WILDCARD_CHECK(pattern); } basicblock *end, *fail_pop_1; RETURN_IF_FALSE(end = compiler_new_block(c)); @@ -6095,10 +6178,10 @@ compiler_pattern_sequence(struct compiler *c, expr_ty p, pattern_context *pc) ADDOP_LOAD_CONST(c, Py_True); } else if (star_wildcard) { - RETURN_IF_FALSE(pattern_helper_sequence_subscr(c, values, star, pc)); + RETURN_IF_FALSE(pattern_helper_sequence_subscr(c, patterns, star, pc)); } else { - RETURN_IF_FALSE(pattern_helper_sequence_unpack(c, values, star, pc)); + RETURN_IF_FALSE(pattern_helper_sequence_unpack(c, patterns, star, pc)); } ADDOP_JUMP(c, JUMP_FORWARD, end); compiler_use_next_block(c, fail_pop_1); @@ -6108,72 +6191,57 @@ compiler_pattern_sequence(struct compiler *c, expr_ty p, pattern_context *pc) return 1; } - static int -compiler_pattern_value(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_value(struct compiler *c, pattern_ty p, pattern_context *pc) { - assert(p->kind == Attribute_kind); - assert(p->v.Attribute.ctx == Load); - VISIT(c, expr, p); + assert(p->kind == MatchValue_kind); + expr_ty value = p->v.MatchValue.value; + if (!MATCH_VALUE_EXPR(value)) { + const char *e = "patterns may only match literals and attribute lookups"; + return compiler_error(c, e); + } + VISIT(c, expr, value); ADDOP_COMPARE(c, Eq); return 1; } - static int -compiler_pattern_wildcard(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern_constant(struct compiler *c, pattern_ty p, pattern_context *pc) { - assert(p->kind == Name_kind); - assert(p->v.Name.ctx == Store); - assert(WILDCARD_CHECK(p)); - if (!pc->allow_irrefutable) { - // Whoops, can't have a wildcard here! - const char *e = "wildcard makes remaining patterns unreachable"; - return compiler_error(c, e); - } - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); + assert(p->kind == MatchSingleton_kind); + ADDOP_LOAD_CONST(c, p->v.MatchSingleton.value); + ADDOP_COMPARE(c, Is); return 1; } - static int -compiler_pattern(struct compiler *c, expr_ty p, pattern_context *pc) +compiler_pattern(struct compiler *c, pattern_ty p, pattern_context *pc) { SET_LOC(c, p); switch (p->kind) { - case Attribute_kind: + case MatchValue_kind: return compiler_pattern_value(c, p, pc); - case BinOp_kind: - // Because we allow "2+2j", things like "2+2" make it this far: - return compiler_error(c, "patterns cannot include operators"); - case Call_kind: - return compiler_pattern_class(c, p, pc); - case Constant_kind: - return compiler_pattern_literal(c, p, pc); - case Dict_kind: - return compiler_pattern_mapping(c, p, pc); - case JoinedStr_kind: - // Because we allow strings, f-strings make it this far: - return compiler_error(c, "patterns cannot include f-strings"); - case List_kind: - case Tuple_kind: + case MatchSingleton_kind: + return compiler_pattern_constant(c, p, pc); + case MatchSequence_kind: return compiler_pattern_sequence(c, p, pc); + case MatchMapping_kind: + return compiler_pattern_mapping(c, p, pc); + case MatchClass_kind: + return compiler_pattern_class(c, p, pc); + case MatchStar_kind: + return compiler_pattern_star(c, p, pc); case MatchAs_kind: return compiler_pattern_as(c, p, pc); case MatchOr_kind: return compiler_pattern_or(c, p, pc); - case Name_kind: - if (WILDCARD_CHECK(p)) { - return compiler_pattern_wildcard(c, p, pc); - } - return compiler_pattern_capture(c, p, pc); - default: - Py_UNREACHABLE(); } + // AST validator shouldn't let this happen, but if it does, + // just fail, don't crash out of the interpreter + const char *e = "invalid match pattern node in AST (kind=%d)"; + return compiler_error(c, e, p->kind); } - static int compiler_match(struct compiler *c, stmt_ty s) { @@ -6181,7 +6249,7 @@ compiler_match(struct compiler *c, stmt_ty s) basicblock *next, *end; RETURN_IF_FALSE(end = compiler_new_block(c)); Py_ssize_t cases = asdl_seq_LEN(s->v.Match.cases); - assert(cases); + assert(cases > 0); pattern_context pc; // We use pc.stores to track: // - Repeated name assignments in the same pattern. @@ -6235,9 +6303,8 @@ compiler_match(struct compiler *c, stmt_ty s) return 1; } - #undef WILDCARD_CHECK - +#undef WILDCARD_STAR_CHECK /* End of the compiler section, beginning of the assembler section */ diff --git a/Python/symtable.c b/Python/symtable.c index c6f86945782a95..e620f1ecc1bc2d 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -214,6 +214,7 @@ static int symtable_implicit_arg(struct symtable *st, int pos); static int symtable_visit_annotations(struct symtable *st, arguments_ty, expr_ty); static int symtable_visit_withitem(struct symtable *st, withitem_ty item); static int symtable_visit_match_case(struct symtable *st, match_case_ty m); +static int symtable_visit_pattern(struct symtable *st, pattern_ty s); static identifier top = NULL, lambda = NULL, genexpr = NULL, @@ -246,7 +247,6 @@ symtable_new(void) goto fail; st->st_cur = NULL; st->st_private = NULL; - st->in_pattern = 0; return st; fail: _PySymtable_Free(st); @@ -1676,13 +1676,6 @@ symtable_visit_expr(struct symtable *st, expr_ty e) VISIT(st, expr, e->v.Slice.step) break; case Name_kind: - // Don't make "_" a local when used in a pattern: - if (st->in_pattern && - e->v.Name.ctx == Store && - _PyUnicode_EqualToASCIIString(e->v.Name.id, "_")) - { - break; - } if (!symtable_add_def(st, e->v.Name.id, e->v.Name.ctx == Load ? USE : DEF_LOCAL)) VISIT_QUIT(st, 0); @@ -1702,12 +1695,55 @@ symtable_visit_expr(struct symtable *st, expr_ty e) case Tuple_kind: VISIT_SEQ(st, expr, e->v.Tuple.elts); break; + } + VISIT_QUIT(st, 1); +} + +static int +symtable_visit_pattern(struct symtable *st, pattern_ty p) +{ + if (++st->recursion_depth > st->recursion_limit) { + PyErr_SetString(PyExc_RecursionError, + "maximum recursion depth exceeded during compilation"); + VISIT_QUIT(st, 0); + } + switch (p->kind) { + case MatchValue_kind: + VISIT(st, expr, p->v.MatchValue.value); + break; + case MatchSingleton_kind: + /* Nothing to do here. */ + break; + case MatchSequence_kind: + VISIT_SEQ(st, pattern, p->v.MatchSequence.patterns); + break; + case MatchStar_kind: + if (p->v.MatchStar.name) { + symtable_add_def(st, p->v.MatchStar.name, DEF_LOCAL); + } + break; + case MatchMapping_kind: + VISIT_SEQ(st, expr, p->v.MatchMapping.keys); + VISIT_SEQ(st, pattern, p->v.MatchMapping.patterns); + if (p->v.MatchMapping.rest) { + symtable_add_def(st, p->v.MatchMapping.rest, DEF_LOCAL); + } + break; + case MatchClass_kind: + VISIT(st, expr, p->v.MatchClass.cls); + VISIT_SEQ(st, pattern, p->v.MatchClass.patterns); + VISIT_SEQ(st, pattern, p->v.MatchClass.kwd_patterns); + break; case MatchAs_kind: - VISIT(st, expr, e->v.MatchAs.pattern); - symtable_add_def(st, e->v.MatchAs.name, DEF_LOCAL); + if (p->v.MatchAs.pattern) { + VISIT(st, pattern, p->v.MatchAs.pattern); + } + if (p->v.MatchAs.name) { + symtable_add_def(st, p->v.MatchAs.name, DEF_LOCAL); + } break; case MatchOr_kind: - VISIT_SEQ(st, expr, e->v.MatchOr.patterns); + VISIT_SEQ(st, pattern, p->v.MatchOr.patterns); break; } VISIT_QUIT(st, 1); @@ -1830,11 +1866,7 @@ symtable_visit_withitem(struct symtable *st, withitem_ty item) static int symtable_visit_match_case(struct symtable *st, match_case_ty m) { - assert(!st->in_pattern); - st->in_pattern = 1; - VISIT(st, expr, m->pattern); - assert(st->in_pattern); - st->in_pattern = 0; + VISIT(st, pattern, m->pattern); if (m->guard) { VISIT(st, expr, m->guard); } From webhook-mailer at python.org Thu Apr 29 02:47:19 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 06:47:19 -0000 Subject: [Python-checkins] bpo-43908: Make re types immutable (GH-25697) Message-ID: https://github.com/python/cpython/commit/5daf70b22e72ea1a88c05975f69120b8c4e4927f commit: 5daf70b22e72ea1a88c05975f69120b8c4e4927f branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-29T08:47:11+02:00 summary: bpo-43908: Make re types immutable (GH-25697) Co-authored-by: Victor Stinner files: A Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst M Lib/test/test_re.py M Modules/_sre.c diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index bd689582523c3..96d0cdb17a7ee 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -2190,6 +2190,18 @@ class ImplementationTest(unittest.TestCase): Test implementation details of the re module. """ + @cpython_only + def test_immutable(self): + # bpo-43908: check that re types are immutable + with self.assertRaises(TypeError): + re.Match.foo = 1 + with self.assertRaises(TypeError): + re.Pattern.foo = 1 + with self.assertRaises(TypeError): + pat = re.compile("") + tp = type(pat.scanner("")) + tp.foo = 1 + def test_overlap_table(self): f = sre_compile._generate_overlap_table self.assertEqual(f(""), []) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst new file mode 100644 index 0000000000000..1709351726f96 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst @@ -0,0 +1,2 @@ +Make :mod:`re` types immutable. Patch by +Erlend E. Aasland. diff --git a/Modules/_sre.c b/Modules/_sre.c index d4bfff6e849e3..59f7551a227cd 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2690,7 +2690,7 @@ static PyType_Spec pattern_spec = { .name = "re.Pattern", .basicsize = sizeof(PatternObject), .itemsize = sizeof(SRE_CODE), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, .slots = pattern_slots, }; @@ -2755,7 +2755,7 @@ static PyType_Spec match_spec = { .name = "re.Match", .basicsize = sizeof(MatchObject), .itemsize = sizeof(Py_ssize_t), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, .slots = match_slots, }; @@ -2781,7 +2781,7 @@ static PyType_Slot scanner_slots[] = { static PyType_Spec scanner_spec = { .name = "_" SRE_MODULE ".SRE_Scanner", .basicsize = sizeof(ScannerObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, .slots = scanner_slots, }; From webhook-mailer at python.org Thu Apr 29 02:47:55 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 06:47:55 -0000 Subject: [Python-checkins] bpo-43908: Make array.array type immutable (GH-25696) Message-ID: https://github.com/python/cpython/commit/c6ad03fddf4b04c60dca4327140e59fb2dcca8e5 commit: c6ad03fddf4b04c60dca4327140e59fb2dcca8e5 branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-29T08:47:48+02:00 summary: bpo-43908: Make array.array type immutable (GH-25696) Co-authored-by: Victor Stinner files: A Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst M Lib/test/test_array.py M Modules/arraymodule.c diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index bdcd1254b304f..11184add6d399 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -40,6 +40,12 @@ def test_bad_constructor(self): self.assertRaises(TypeError, array.array, 'xx') self.assertRaises(ValueError, array.array, 'x') + @support.cpython_only + def test_immutable(self): + # bpo-43908: check that array.array is immutable + with self.assertRaises(TypeError): + array.array.foo = 1 + def test_empty(self): # Exercise code for handling zero-length arrays a = array.array('B') diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst new file mode 100644 index 0000000000000..07303b99d1f95 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst @@ -0,0 +1,2 @@ +Make the :class:`array.array` type immutable. Patch by +Erlend E. Aasland. diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index f5326789521d3..367621fd03b88 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2847,7 +2847,8 @@ static PyType_Slot array_slots[] = { static PyType_Spec array_spec = { .name = "array.array", .basicsize = sizeof(arrayobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_IMMUTABLETYPE), .slots = array_slots, }; From webhook-mailer at python.org Thu Apr 29 04:26:38 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 08:26:38 -0000 Subject: [Python-checkins] bpo-43908: Document Static Types in the C API (GH-25710) Message-ID: https://github.com/python/cpython/commit/5bd0619533ed6587ce76402e9b0b118eb4d4dd09 commit: 5bd0619533ed6587ce76402e9b0b118eb4d4dd09 branch: master author: Victor Stinner committer: vstinner date: 2021-04-29T10:26:34+02:00 summary: bpo-43908: Document Static Types in the C API (GH-25710) Update also PyTypeObject structure definition in the doc. files: M Doc/c-api/type.rst M Doc/c-api/typeobj.rst M Doc/includes/typestruct.h M Doc/whatsnew/3.10.rst M Doc/whatsnew/3.8.rst M Doc/whatsnew/3.9.rst M Include/cpython/object.h diff --git a/Doc/c-api/type.rst b/Doc/c-api/type.rst index b9bfa554e8143a..bdb636dff326f2 100644 --- a/Doc/c-api/type.rst +++ b/Doc/c-api/type.rst @@ -111,7 +111,7 @@ Type Objects .. versionchanged:: 3.10 :c:func:`PyType_GetSlot` can now accept all types. - Previously, it was limited to heap types. + Previously, it was limited to :ref:`heap types `. .. c:function:: PyObject* PyType_GetModule(PyTypeObject *type) @@ -153,7 +153,7 @@ The following functions and structs are used to create .. c:function:: PyObject* PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) - Creates and returns a heap type object from the *spec* + Creates and returns a :ref:`heap type ` from the *spec* (:const:`Py_TPFLAGS_HEAPTYPE`). The *bases* argument can be used to specify base classes; it can either diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 4c75a12194d185..2af3b9a2e9d445 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -486,12 +486,16 @@ type objects) *must* have the :attr:`ob_size` field. PyObject* PyObject._ob_prev These fields are only present when the macro ``Py_TRACE_REFS`` is defined. - Their initialization to ``NULL`` is taken care of by the ``PyObject_HEAD_INIT`` - macro. For statically allocated objects, these fields always remain ``NULL``. - For dynamically allocated objects, these two fields are used to link the object - into a doubly-linked list of *all* live objects on the heap. This could be used - for various debugging purposes; currently the only use is to print the objects - that are still alive at the end of a run when the environment variable + + Their initialization to ``NULL`` is taken care of by the + ``PyObject_HEAD_INIT`` macro. For :ref:`statically allocated objects + `, these fields always remain ``NULL``. For :ref:`dynamically + allocated objects `, these two fields are used to link the + object into a doubly-linked list of *all* live objects on the heap. + + This could be used for various debugging purposes; currently the only uses + are the :func:`sys.getobjects` function and to print the objects that are + still alive at the end of a run when the environment variable :envvar:`PYTHONDUMPREFS` is set. **Inheritance:** @@ -502,10 +506,11 @@ type objects) *must* have the :attr:`ob_size` field. .. c:member:: Py_ssize_t PyObject.ob_refcnt This is the type object's reference count, initialized to ``1`` by the - ``PyObject_HEAD_INIT`` macro. Note that for statically allocated type objects, - the type's instances (objects whose :attr:`ob_type` points back to the type) do - *not* count as references. But for dynamically allocated type objects, the - instances *do* count as references. + ``PyObject_HEAD_INIT`` macro. Note that for :ref:`statically allocated type + objects `, the type's instances (objects whose :attr:`ob_type` + points back to the type) do *not* count as references. But for + :ref:`dynamically allocated type objects `, the instances *do* + count as references. **Inheritance:** @@ -540,8 +545,9 @@ PyVarObject Slots .. c:member:: Py_ssize_t PyVarObject.ob_size - For statically allocated type objects, this should be initialized to zero. For - dynamically allocated type objects, this field has a special internal meaning. + For :ref:`statically allocated type objects `, this should be + initialized to zero. For :ref:`dynamically allocated type objects + `, this field has a special internal meaning. **Inheritance:** @@ -566,11 +572,13 @@ and :c:type:`PyType_Type` effectively act as defaults.) :class:`T` defined in module :mod:`M` in subpackage :mod:`Q` in package :mod:`P` should have the :c:member:`~PyTypeObject.tp_name` initializer ``"P.Q.M.T"``. - For dynamically allocated type objects, this should just be the type name, and + For :ref:`dynamically allocated type objects `, + this should just be the type name, and the module name explicitly stored in the type dict as the value for key ``'__module__'``. - For statically allocated type objects, the tp_name field should contain a dot. + For :ref:`statically allocated type objects `, + the *tp_name* field should contain a dot. Everything before the last dot is made accessible as the :attr:`__module__` attribute, and everything after the last dot is made accessible as the :attr:`~definition.__name__` attribute. @@ -725,7 +733,7 @@ and :c:type:`PyType_Type` effectively act as defaults.) always inherited. If it's not, then the subclass won't use :ref:`vectorcall `, except when :c:func:`PyVectorcall_Call` is explicitly called. - This is in particular the case for `heap types`_ + This is in particular the case for :ref:`heap types ` (including subclasses defined in Python). @@ -1116,7 +1124,7 @@ and :c:type:`PyType_Type` effectively act as defaults.) **Inheritance:** - This flag is never inherited by heap types. + This flag is never inherited by :ref:`heap types `. For extension types, it is inherited whenever :c:member:`~PyTypeObject.tp_descr_get` is inherited. @@ -1163,9 +1171,9 @@ and :c:type:`PyType_Type` effectively act as defaults.) **Inheritance:** - This bit is inherited for *static* subtypes if + This bit is inherited for :ref:`static subtypes ` if :c:member:`~PyTypeObject.tp_call` is also inherited. - `Heap types`_ do not inherit ``Py_TPFLAGS_HAVE_VECTORCALL``. + :ref:`Heap types ` do not inherit ``Py_TPFLAGS_HAVE_VECTORCALL``. .. versionadded:: 3.9 @@ -1181,7 +1189,8 @@ and :c:type:`PyType_Type` effectively act as defaults.) This bit is set for type objects that are immutable: type attributes cannot be set nor deleted. - :c:func:`PyType_Ready` automatically applies this flag to static types. + :c:func:`PyType_Ready` automatically applies this flag to + :ref:`static types `. **Inheritance:** @@ -1250,9 +1259,8 @@ and :c:type:`PyType_Type` effectively act as defaults.) :c:func:`local_traverse` to have these specific names; don't name them just anything. - Heap-allocated types (:const:`Py_TPFLAGS_HEAPTYPE`, such as those created - with :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their - type. Their traversal function must therefore either visit + Instances of :ref:`heap-allocated types ` hold a reference to + their type. Their traversal function must therefore either visit :c:func:`Py_TYPE(self) `, or delegate this responsibility by calling ``tp_traverse`` of another heap-allocated type (such as a heap-allocated superclass). @@ -1667,8 +1675,8 @@ and :c:type:`PyType_Type` effectively act as defaults.) **Default:** - This slot has no default. For static types, if the field is - ``NULL`` then no :attr:`__dict__` gets created for instances. + This slot has no default. For :ref:`static types `, if the + field is ``NULL`` then no :attr:`__dict__` gets created for instances. .. c:member:: initproc PyTypeObject.tp_init @@ -1703,7 +1711,7 @@ and :c:type:`PyType_Type` effectively act as defaults.) **Default:** - For static types this field does not have a default. + For :ref:`static types ` this field does not have a default. .. c:member:: allocfunc PyTypeObject.tp_alloc @@ -1754,14 +1762,15 @@ and :c:type:`PyType_Type` effectively act as defaults.) **Inheritance:** - This field is inherited by subtypes, except it is not inherited by static types - whose :c:member:`~PyTypeObject.tp_base` is ``NULL`` or ``&PyBaseObject_Type``. + This field is inherited by subtypes, except it is not inherited by + :ref:`static types ` whose :c:member:`~PyTypeObject.tp_base` + is ``NULL`` or ``&PyBaseObject_Type``. **Default:** - For static types this field has no default. This means if the - slot is defined as ``NULL``, the type cannot be called to create new - instances; presumably there is some other way to create + For :ref:`static types ` this field has no default. + This means if the slot is defined as ``NULL``, the type cannot be called + to create new instances; presumably there is some other way to create instances, like a factory function. @@ -1803,7 +1812,7 @@ and :c:type:`PyType_Type` effectively act as defaults.) (The only example of this are types themselves. The metatype, :c:data:`PyType_Type`, defines this function to distinguish between statically - and dynamically allocated types.) + and :ref:`dynamically allocated types `.) **Inheritance:** @@ -1949,10 +1958,10 @@ objects on the thread which called tp_dealloc will not violate any assumptions of the library. -.. _heap-types: +.. _static-types: -Heap Types ----------- +Static Types +------------ Traditionally, types defined in C code are *static*, that is, a static :c:type:`PyTypeObject` structure is defined directly in code @@ -1972,12 +1981,20 @@ Also, since :c:type:`PyTypeObject` is not part of the :ref:`stable ABI ` any extension modules using static types must be compiled for a specific Python minor version. -An alternative to static types is *heap-allocated types*, or *heap types* -for short, which correspond closely to classes created by Python's -``class`` statement. + +.. _heap-types: + +Heap Types +---------- + +An alternative to :ref:`static types ` is *heap-allocated types*, +or *heap types* for short, which correspond closely to classes created by +Python's ``class`` statement. Heap types have the :const:`Py_TPFLAGS_HEAPTYPE` +flag set. This is done by filling a :c:type:`PyType_Spec` structure and calling -:c:func:`PyType_FromSpecWithBases`. +:c:func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases`, +or :c:func:`PyType_FromModuleAndSpec`. .. _number-structs: @@ -2489,7 +2506,7 @@ include common usage you may encounter. Some demonstrate tricky corner cases. For more examples, practical info, and a tutorial, see :ref:`defining-new-types` and :ref:`new-types-topics`. -A basic static type:: +A basic :ref:`static type `:: typedef struct { PyObject_HEAD @@ -2596,7 +2613,7 @@ to create instances (e.g. uses a separate factory func):: .tp_repr = (reprfunc)myobj_repr, }; -The simplest static type (with fixed-length instances):: +The simplest :ref:`static type ` with fixed-length instances:: typedef struct { PyObject_HEAD @@ -2607,7 +2624,7 @@ The simplest static type (with fixed-length instances):: .tp_name = "mymod.MyObject", }; -The simplest static type (with variable-length instances):: +The simplest :ref:`static type ` with variable-length instances:: typedef struct { PyObject_VAR_HEAD diff --git a/Doc/includes/typestruct.h b/Doc/includes/typestruct.h index 9ada03cfc4a4cb..02f8ccfe4438a5 100644 --- a/Doc/includes/typestruct.h +++ b/Doc/includes/typestruct.h @@ -35,12 +35,14 @@ typedef struct _typeobject { const char *tp_doc; /* Documentation string */ + /* Assigned meaning in release 2.0 */ /* call function for all accessible objects */ traverseproc tp_traverse; /* delete references to contained objects */ inquiry tp_clear; + /* Assigned meaning in release 2.1 */ /* rich comparisons */ richcmpfunc tp_richcompare; @@ -55,6 +57,7 @@ typedef struct _typeobject { struct PyMethodDef *tp_methods; struct PyMemberDef *tp_members; struct PyGetSetDef *tp_getset; + // Strong reference on a heap type, borrowed reference on a static type struct _typeobject *tp_base; PyObject *tp_dict; descrgetfunc tp_descr_get; @@ -76,5 +79,5 @@ typedef struct _typeobject { unsigned int tp_version_tag; destructor tp_finalize; - + vectorcallfunc tp_vectorcall; } PyTypeObject; diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index fa99ce57929943..2580a0368d0b34 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1668,7 +1668,8 @@ New Features slot. (Contributed by Hai Shi in :issue:`41832`.) -* The :c:func:`PyType_GetSlot` function can accept static types. +* The :c:func:`PyType_GetSlot` function can accept + :ref:`static types `. (Contributed by Hai Shi and Petr Viktorin in :issue:`41073`.) * Add a new :c:func:`PySet_CheckExact` function to the C-API to check if an diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index b1ecaae6c29ad4..c958bf4db09e53 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -352,7 +352,8 @@ PEP 590: Vectorcall: a fast calling protocol for CPython :ref:`vectorcall` is added to the Python/C API. It is meant to formalize existing optimizations which were already done for various classes. -Any static type implementing a callable can use this protocol. +Any :ref:`static type ` implementing a callable can use this +protocol. This is currently provisional. The aim is to make it fully public in Python 3.9. @@ -2040,7 +2041,7 @@ Changes in the C API This makes types created through :c:func:`PyType_FromSpec` behave like other classes in managed code. - Statically allocated types are not affected. + :ref:`Statically allocated types ` are not affected. For the vast majority of cases, there should be no side effect. However, types that manually increase the reference count after allocating diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 70809ff31c7f21..9a7f2cd3843c9d 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1124,7 +1124,7 @@ Changes in the Python API Changes in the C API -------------------- -* Instances of heap-allocated types (such as those created with +* Instances of :ref:`heap-allocated types ` (such as those created with :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their type object since Python 3.8. As indicated in the "Changes in the C API" of Python 3.8, for the vast majority of cases, there should be no side effect but for @@ -1147,7 +1147,8 @@ Changes in the C API If your traverse function delegates to ``tp_traverse`` of its base class (or another type), ensure that ``Py_TYPE(self)`` is visited only once. - Note that only heap types are expected to visit the type in ``tp_traverse``. + Note that only :ref:`heap type ` are expected to visit the type + in ``tp_traverse``. For example, if your ``tp_traverse`` function includes: @@ -1160,7 +1161,7 @@ Changes in the C API .. code-block:: c #if PY_VERSION_HEX >= 0x03090000 - // This was not needed before Python 3.9 (Python issue 35810 and 40217) + // This was not needed before Python 3.9 (bpo-35810 and bpo-40217) if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) { // a heap type's tp_traverse already visited Py_TYPE(self) } else { diff --git a/Include/cpython/object.h b/Include/cpython/object.h index 58e4d2b11b93f9..84c60e55d5c9df 100644 --- a/Include/cpython/object.h +++ b/Include/cpython/object.h @@ -186,6 +186,8 @@ typedef struct { * backwards-compatibility */ typedef Py_ssize_t printfunc; +// If this structure is modified, Doc/includes/typestruct.h should be updated +// as well. struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "." */ From webhook-mailer at python.org Thu Apr 29 04:26:57 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 08:26:57 -0000 Subject: [Python-checkins] bpo-28254: Cleanup test_subprocess.test_preexec_gc_module_failure() (GH-25709) Message-ID: https://github.com/python/cpython/commit/b1f413e6cf63a1c5704fcb47f2095ef5db8970bb commit: b1f413e6cf63a1c5704fcb47f2095ef5db8970bb branch: master author: Victor Stinner committer: vstinner date: 2021-04-29T10:26:53+02:00 summary: bpo-28254: Cleanup test_subprocess.test_preexec_gc_module_failure() (GH-25709) Saving/restoring gc.disable and gc.isenabled is no longer needed. files: M Lib/test/test_subprocess.py diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 27ccd3e5cb3a8..f0f0e6f6069da 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -2148,8 +2148,6 @@ def test_preexec_gc_module_failure(self): # This tests the code that disables garbage collection if the child # process will execute any Python. enabled = gc.isenabled() - orig_gc_disable = gc.disable - orig_gc_isenabled = gc.isenabled try: gc.disable() self.assertFalse(gc.isenabled()) @@ -2164,8 +2162,6 @@ def test_preexec_gc_module_failure(self): preexec_fn=lambda: None) self.assertTrue(gc.isenabled(), "Popen left gc disabled.") finally: - gc.disable = orig_gc_disable - gc.isenabled = orig_gc_isenabled if not enabled: gc.disable() From webhook-mailer at python.org Thu Apr 29 04:47:52 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 08:47:52 -0000 Subject: [Python-checkins] bpo-43774: Remove unused PYMALLOC_DEBUG macro (GH-25711) Message-ID: https://github.com/python/cpython/commit/645ed62fb4c09b7e23887fcca0767b0f2d7d3fd6 commit: 645ed62fb4c09b7e23887fcca0767b0f2d7d3fd6 branch: master author: Victor Stinner committer: vstinner date: 2021-04-29T10:47:47+02:00 summary: bpo-43774: Remove unused PYMALLOC_DEBUG macro (GH-25711) Enhance also the documentation of debug hooks on memory allocators. files: A Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst M Doc/c-api/init_config.rst M Doc/c-api/memory.rst M Doc/using/cmdline.rst M Include/Python.h M Include/objimpl.h M Include/pymem.h M Misc/SpecialBuilds.txt diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index 325e60706167e4..de85029481185a 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -229,17 +229,20 @@ PyPreConfig Name of the Python memory allocators: * ``PYMEM_ALLOCATOR_NOT_SET`` (``0``): don't change memory allocators - (use defaults) - * ``PYMEM_ALLOCATOR_DEFAULT`` (``1``): default memory allocators - * ``PYMEM_ALLOCATOR_DEBUG`` (``2``): default memory allocators with - debug hooks - * ``PYMEM_ALLOCATOR_MALLOC`` (``3``): force usage of ``malloc()`` + (use defaults). + * ``PYMEM_ALLOCATOR_DEFAULT`` (``1``): :ref:`default memory allocators + `. + * ``PYMEM_ALLOCATOR_DEBUG`` (``2``): :ref:`default memory allocators + ` with :ref:`debug hooks + `. + * ``PYMEM_ALLOCATOR_MALLOC`` (``3``): use ``malloc()`` of the C library. * ``PYMEM_ALLOCATOR_MALLOC_DEBUG`` (``4``): force usage of - ``malloc()`` with debug hooks + ``malloc()`` with :ref:`debug hooks `. * ``PYMEM_ALLOCATOR_PYMALLOC`` (``5``): :ref:`Python pymalloc memory - allocator ` + allocator `. * ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` (``6``): :ref:`Python pymalloc - memory allocator ` with debug hooks + memory allocator ` with :ref:`debug hooks + `. ``PYMEM_ALLOCATOR_PYMALLOC`` and ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` are not supported if Python is :option:`configured using --without-pymalloc diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst index b945429d87da81..1cb0990f5d0115 100644 --- a/Doc/c-api/memory.rst +++ b/Doc/c-api/memory.rst @@ -389,7 +389,8 @@ Legend: * ``malloc``: system allocators from the standard C library, C functions: :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. * ``pymalloc``: :ref:`pymalloc memory allocator `. -* "+ debug": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks`. +* "+ debug": with :ref:`debug hooks on the Python memory allocators + `. * "Debug build": :ref:`Python build in debug mode `. .. _customize-memory-allocators: @@ -478,45 +479,113 @@ Customize Memory Allocators .. c:function:: void PyMem_SetupDebugHooks(void) - Setup hooks to detect bugs in the Python memory allocator functions. + Setup :ref:`debug hooks in the Python memory allocators ` + to detect memory errors. + + +.. _pymem-debug-hooks: + +Debug hooks on the Python memory allocators +=========================================== + +When :ref:`Python is built is debug mode `, the +:c:func:`PyMem_SetupDebugHooks` function is called at the :ref:`Python +preinitialization ` to setup debug hooks on Python memory allocators +to detect memory errors. + +The :envvar:`PYTHONMALLOC` environment variable can be used to install debug +hooks on a Python compiled in release mode (ex: ``PYTHONMALLOC=debug``). + +The :c:func:`PyMem_SetupDebugHooks` function can be used to set debug hooks +after calling :c:func:`PyMem_SetAllocator`. + +These debug hooks fill dynamically allocated memory blocks with special, +recognizable bit patterns. Newly allocated memory is filled with the byte +``0xCD`` (``PYMEM_CLEANBYTE``), freed memory is filled with the byte ``0xDD`` +(``PYMEM_DEADBYTE``). Memory blocks are surrounded by "forbidden bytes" +filled with the byte ``0xFD`` (``PYMEM_FORBIDDENBYTE``). Strings of these bytes +are unlikely to be valid addresses, floats, or ASCII strings. + +Runtime checks: + +- Detect API violations. For example, detect if :c:func:`PyObject_Free` is + called on a memory block allocated by :c:func:`PyMem_Malloc`. +- Detect write before the start of the buffer (buffer underflow). +- Detect write after the end of the buffer (buffer overflow). +- Check that the :term:`GIL ` is held when + allocator functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: + :c:func:`PyObject_Malloc`) and :c:data:`PYMEM_DOMAIN_MEM` (ex: + :c:func:`PyMem_Malloc`) domains are called. + +On error, the debug hooks use the :mod:`tracemalloc` module to get the +traceback where a memory block was allocated. The traceback is only displayed +if :mod:`tracemalloc` is tracing Python memory allocations and the memory block +was traced. + +Let *S* = ``sizeof(size_t)``. ``2*S`` bytes are added at each end of each block +of *N* bytes requested. The memory layout is like so, where p represents the +address returned by a malloc-like or realloc-like function (``p[i:j]`` means +the slice of bytes from ``*(p+i)`` inclusive up to ``*(p+j)`` exclusive; note +that the treatment of negative indices differs from a Python slice): + +``p[-2*S:-S]`` + Number of bytes originally asked for. This is a size_t, big-endian (easier + to read in a memory dump). +``p[-S]`` + API identifier (ASCII character): + + * ``'r'`` for :c:data:`PYMEM_DOMAIN_RAW`. + * ``'m'`` for :c:data:`PYMEM_DOMAIN_MEM`. + * ``'o'`` for :c:data:`PYMEM_DOMAIN_OBJ`. + +``p[-S+1:0]`` + Copies of PYMEM_FORBIDDENBYTE. Used to catch under- writes and reads. + +``p[0:N]`` + The requested memory, filled with copies of PYMEM_CLEANBYTE, used to catch + reference to uninitialized memory. When a realloc-like function is called + requesting a larger memory block, the new excess bytes are also filled with + PYMEM_CLEANBYTE. When a free-like function is called, these are + overwritten with PYMEM_DEADBYTE, to catch reference to freed memory. When + a realloc- like function is called requesting a smaller memory block, the + excess old bytes are also filled with PYMEM_DEADBYTE. + +``p[N:N+S]`` + Copies of PYMEM_FORBIDDENBYTE. Used to catch over- writes and reads. + +``p[N+S:N+2*S]`` + Only used if the ``PYMEM_DEBUG_SERIALNO`` macro is defined (not defined by + default). + + A serial number, incremented by 1 on each call to a malloc-like or + realloc-like function. Big-endian ``size_t``. If "bad memory" is detected + later, the serial number gives an excellent way to set a breakpoint on the + next run, to capture the instant at which this block was passed out. The + static function bumpserialno() in obmalloc.c is the only place the serial + number is incremented, and exists so you can set such a breakpoint easily. + +A realloc-like or free-like function first checks that the PYMEM_FORBIDDENBYTE +bytes at each end are intact. If they've been altered, diagnostic output is +written to stderr, and the program is aborted via Py_FatalError(). The other +main failure mode is provoking a memory error when a program reads up one of +the special bit patterns and tries to use it as an address. If you get in a +debugger then and look at the object, you're likely to see that it's entirely +filled with PYMEM_DEADBYTE (meaning freed memory is getting used) or +PYMEM_CLEANBYTE (meaning uninitialized memory is getting used). - Newly allocated memory is filled with the byte ``0xCD`` (``CLEANBYTE``), - freed memory is filled with the byte ``0xDD`` (``DEADBYTE``). Memory blocks - are surrounded by "forbidden bytes" (``FORBIDDENBYTE``: byte ``0xFD``). - - Runtime checks: - - - Detect API violations, ex: :c:func:`PyObject_Free` called on a buffer - allocated by :c:func:`PyMem_Malloc` - - Detect write before the start of the buffer (buffer underflow) - - Detect write after the end of the buffer (buffer overflow) - - Check that the :term:`GIL ` is held when - allocator functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: - :c:func:`PyObject_Malloc`) and :c:data:`PYMEM_DOMAIN_MEM` (ex: - :c:func:`PyMem_Malloc`) domains are called - - On error, the debug hooks use the :mod:`tracemalloc` module to get the - traceback where a memory block was allocated. The traceback is only - displayed if :mod:`tracemalloc` is tracing Python memory allocations and the - memory block was traced. - - These hooks are :ref:`installed by default ` if - :ref:`Python is built in debug mode `. - The :envvar:`PYTHONMALLOC` environment variable can be used to install - debug hooks on a Python compiled in release mode. - - .. versionchanged:: 3.6 - This function now also works on Python compiled in release mode. - On error, the debug hooks now use :mod:`tracemalloc` to get the traceback - where a memory block was allocated. The debug hooks now also check - if the GIL is held when functions of :c:data:`PYMEM_DOMAIN_OBJ` and - :c:data:`PYMEM_DOMAIN_MEM` domains are called. +.. versionchanged:: 3.6 + The :c:func:`PyMem_SetupDebugHooks` function now also works on Python + compiled in release mode. On error, the debug hooks now use + :mod:`tracemalloc` to get the traceback where a memory block was allocated. + The debug hooks now also check if the GIL is held when functions of + :c:data:`PYMEM_DOMAIN_OBJ` and :c:data:`PYMEM_DOMAIN_MEM` domains are + called. - .. versionchanged:: 3.8 - Byte patterns ``0xCB`` (``CLEANBYTE``), ``0xDB`` (``DEADBYTE``) and - ``0xFB`` (``FORBIDDENBYTE``) have been replaced with ``0xCD``, ``0xDD`` - and ``0xFD`` to use the same values than Windows CRT debug ``malloc()`` - and ``free()``. +.. versionchanged:: 3.8 + Byte patterns ``0xCB`` (``PYMEM_CLEANBYTE``), ``0xDB`` (``PYMEM_DEADBYTE``) + and ``0xFB`` (``PYMEM_FORBIDDENBYTE``) have been replaced with ``0xCD``, + ``0xDD`` and ``0xFD`` to use the same values than Windows CRT debug + ``malloc()`` and ``free()``. .. _pymalloc: @@ -539,6 +608,10 @@ The arena allocator uses the following functions: * :c:func:`mmap` and :c:func:`munmap` if available, * :c:func:`malloc` and :c:func:`free` otherwise. +This allocator is disabled if Python is configured with the +:option:`--without-pymalloc` option. It can also be disabled at runtime using +the :envvar:`PYTHONMALLOC` environment variable (ex: ``PYTHONMALLOC=malloc``). + Customize pymalloc Arena Allocator ---------------------------------- diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index 09d8fa97f08455..25e05d413de877 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -799,17 +799,13 @@ conflict. :c:data:`PYMEM_DOMAIN_MEM` and :c:data:`PYMEM_DOMAIN_OBJ` domains and use the :c:func:`malloc` function for the :c:data:`PYMEM_DOMAIN_RAW` domain. - Install debug hooks: + Install :ref:`debug hooks `: * ``debug``: install debug hooks on top of the :ref:`default memory allocators `. * ``malloc_debug``: same as ``malloc`` but also install debug hooks. * ``pymalloc_debug``: same as ``pymalloc`` but also install debug hooks. - See the :ref:`default memory allocators ` and the - :c:func:`PyMem_SetupDebugHooks` function (install debug hooks on Python - memory allocators). - .. versionchanged:: 3.7 Added the ``"default"`` allocator. diff --git a/Include/Python.h b/Include/Python.h index 1df2fd5343b23a..4d0335d3c52c36 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -72,15 +72,6 @@ # endif #endif -/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. - * PYMALLOC_DEBUG is in error if pymalloc is not in use. - */ -#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG) -#define PYMALLOC_DEBUG -#endif -#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC) -#error "PYMALLOC_DEBUG requires WITH_PYMALLOC" -#endif #include "pymath.h" #include "pymem.h" diff --git a/Include/objimpl.h b/Include/objimpl.h index 689c42b7475c89..450befad679e70 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -48,8 +48,8 @@ Functions and macros for modules that implement new object types. Note that objects created with PyObject_{New, NewVar} are allocated using the specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is -enabled. In addition, a special debugging allocator is used if PYMALLOC_DEBUG -is also #defined. +enabled. In addition, a special debugging allocator is used if Py_DEBUG +macro is also defined. In case a specific form of memory management is needed (for example, if you must use the platform malloc heap(s), or shared memory, or C++ local storage or diff --git a/Include/pymem.h b/Include/pymem.h index 2f770b1fbf183d..66cdb0d2973cd0 100644 --- a/Include/pymem.h +++ b/Include/pymem.h @@ -25,8 +25,8 @@ extern "C" { heap used by the Python DLL; it could be a disaster if you free()'ed that directly in your own extension. Using PyMem_Free instead ensures Python can return the memory to the proper heap. As another example, in - PYMALLOC_DEBUG mode, Python wraps all calls to all PyMem_ and PyObject_ - memory functions in special debugging wrappers that add additional + a debug build (Py_DEBUG macro), Python wraps all calls to all PyMem_ and + PyObject_ memory functions in special debugging wrappers that add additional debugging info to dynamic memory blocks. The system routines have no idea what to do with that stuff, and the Python wrappers have no idea what to do with raw blocks obtained directly by the system routines then. diff --git a/Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst b/Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst new file mode 100644 index 00000000000000..9664b552717bbb --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst @@ -0,0 +1,5 @@ +Remove the now unused ``PYMALLOC_DEBUG`` macro. Debug hooks on memory +allocators are now installed by default if Python is built in debug mode (if +``Py_DEBUG`` macro is defined). Moreover, they can now be used on Python +build in release mode (ex: using ``PYTHONMALLOC=debug`` environment +variable). diff --git a/Misc/SpecialBuilds.txt b/Misc/SpecialBuilds.txt index 27369abfb37b35..a7cee8098e9c0f 100644 --- a/Misc/SpecialBuilds.txt +++ b/Misc/SpecialBuilds.txt @@ -77,90 +77,14 @@ envvar PYTHONDUMPREFS combinerefs.py, were new in Python 2.3b1. -PYMALLOC_DEBUG --------------- - -When pymalloc is enabled (WITH_PYMALLOC is defined), calls to the PyObject_ -memory routines are handled by Python's own small-object allocator, while calls -to the PyMem_ memory routines are directed to the system malloc/ realloc/free. -If PYMALLOC_DEBUG is also defined, calls to both PyObject_ and PyMem_ memory -routines are directed to a special debugging mode of Python's small-object -allocator. - -This mode fills dynamically allocated memory blocks with special, recognizable -bit patterns, and adds debugging info on each end of dynamically allocated -memory blocks. The special bit patterns are: - -#define CLEANBYTE 0xCB /* clean (newly allocated) memory */ -#define DEADBYTE 0xDB /* dead (newly freed) memory */ -#define FORBIDDENBYTE 0xFB /* forbidden -- untouchable bytes */ - -Strings of these bytes are unlikely to be valid addresses, floats, or 7-bit -ASCII strings. - -Let S = sizeof(size_t). 2*S bytes are added at each end of each block of N bytes -requested. The memory layout is like so, where p represents the address -returned by a malloc-like or realloc-like function (p[i:j] means the slice of -bytes from *(p+i) inclusive up to *(p+j) exclusive; note that the treatment of -negative indices differs from a Python slice): - -p[-2*S:-S] - Number of bytes originally asked for. This is a size_t, big-endian (easier - to read in a memory dump). -p[-S] - API ID. See PEP 445. This is a character, but seems undocumented. -p[-S+1:0] - Copies of FORBIDDENBYTE. Used to catch under- writes and reads. -p[0:N] - The requested memory, filled with copies of CLEANBYTE, used to catch - reference to uninitialized memory. When a realloc-like function is called - requesting a larger memory block, the new excess bytes are also filled with - CLEANBYTE. When a free-like function is called, these are overwritten with - DEADBYTE, to catch reference to freed memory. When a realloc- like function - is called requesting a smaller memory block, the excess old bytes are also - filled with DEADBYTE. -p[N:N+S] - Copies of FORBIDDENBYTE. Used to catch over- writes and reads. -p[N+S:N+2*S] - A serial number, incremented by 1 on each call to a malloc-like or - realloc-like function. Big-endian size_t. If "bad memory" is detected - later, the serial number gives an excellent way to set a breakpoint on the - next run, to capture the instant at which this block was passed out. The - static function bumpserialno() in obmalloc.c is the only place the serial - number is incremented, and exists so you can set such a breakpoint easily. - -A realloc-like or free-like function first checks that the FORBIDDENBYTEs at -each end are intact. If they've been altered, diagnostic output is written to -stderr, and the program is aborted via Py_FatalError(). The other main failure -mode is provoking a memory error when a program reads up one of the special bit -patterns and tries to use it as an address. If you get in a debugger then and -look at the object, you're likely to see that it's entirely filled with 0xDB -(meaning freed memory is getting used) or 0xCB (meaning uninitialized memory is -getting used). - -Note that PYMALLOC_DEBUG requires WITH_PYMALLOC. Py_DEBUG implies -PYMALLOC_DEBUG (if WITH_PYMALLOC is enabled). - -Special gimmicks: - -envvar PYTHONMALLOCSTATS - If this envvar exists, a report of pymalloc summary statistics is printed to - stderr whenever a new arena is allocated, and also by Py_FinalizeEx(). - -Changed in 2.5: The number of extra bytes allocated is 4*sizeof(size_t). -Before it was 16 on all boxes, reflecting that Python couldn't make use of -allocations >= 2**32 bytes even on 64-bit boxes before 2.5. - - Py_DEBUG -------- This is what is generally meant by "a debug build" of Python. -Py_DEBUG implies LLTRACE, Py_REF_DEBUG, and PYMALLOC_DEBUG (if -WITH_PYMALLOC is enabled). In addition, C assert()s are enabled (via the C way: -by not defining NDEBUG), and some routines do additional sanity checks inside -"#ifdef Py_DEBUG" blocks. +Py_DEBUG implies LLTRACE and Py_REF_DEBUG. In addition, C assert()s are enabled +(via the C way: by not defining NDEBUG), and some routines do additional sanity +checks inside "#ifdef Py_DEBUG" blocks. LLTRACE From webhook-mailer at python.org Thu Apr 29 05:33:24 2021 From: webhook-mailer at python.org (encukou) Date: Thu, 29 Apr 2021 09:33:24 -0000 Subject: [Python-checkins] bpo-43795: Generate python3dll.c and doc data from manifest (PEP 652) (GH-25315) Message-ID: https://github.com/python/cpython/commit/f6ee4dad589c0953283dacb577a2d808fda7aae9 commit: f6ee4dad589c0953283dacb577a2d808fda7aae9 branch: master author: Petr Viktorin committer: encukou date: 2021-04-29T11:33:14+02:00 summary: bpo-43795: Generate python3dll.c and doc data from manifest (PEP 652) (GH-25315) files: A Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst A Misc/stable_abi.txt M Doc/data/stable_abi.dat M Makefile.pre.in M PC/python3dll.c M Tools/scripts/README M Tools/scripts/stable_abi.py diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 491a5fbb96f5a5..833228f7fd755d 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -1,5 +1,13 @@ -# File generated by 'make regen-limited-abi' -# This is NOT an authoritative list of stable ABI symbols +# Generated by Tools/scripts/stable_abi.py + +METH_CLASS +METH_COEXIST +METH_FASTCALL +METH_METHOD +METH_NOARGS +METH_O +METH_STATIC +METH_VARARGS PyAiter_Check PyArg_Parse PyArg_ParseTuple @@ -33,6 +41,8 @@ PyBytes_FromStringAndSize PyBytes_Repr PyBytes_Size PyBytes_Type +PyCFunction +PyCFunctionWithKeywords PyCFunction_Call PyCFunction_GetFlags PyCFunction_GetFunction @@ -44,6 +54,7 @@ PyCMethod_New PyCallIter_New PyCallIter_Type PyCallable_Check +PyCapsule_Destructor PyCapsule_GetContext PyCapsule_GetDestructor PyCapsule_GetName @@ -138,11 +149,17 @@ PyErr_PrintEx PyErr_ProgramText PyErr_ResourceWarning PyErr_Restore +PyErr_SetExcFromWindowsErr +PyErr_SetExcFromWindowsErrWithFilename +PyErr_SetExcFromWindowsErrWithFilenameObject +PyErr_SetExcFromWindowsErrWithFilenameObjects PyErr_SetExcInfo PyErr_SetFromErrno PyErr_SetFromErrnoWithFilename PyErr_SetFromErrnoWithFilenameObject PyErr_SetFromErrnoWithFilenameObjects +PyErr_SetFromWindowsErr +PyErr_SetFromWindowsErrWithFilename PyErr_SetImportError PyErr_SetImportErrorSubclass PyErr_SetInterrupt @@ -243,6 +260,7 @@ PyExc_UnicodeWarning PyExc_UserWarning PyExc_ValueError PyExc_Warning +PyExc_WindowsError PyExc_ZeroDivisionError PyExceptionClass_Name PyException_GetCause @@ -274,6 +292,8 @@ PyGC_IsEnabled PyGILState_Ensure PyGILState_GetThisThreadState PyGILState_Release +PyGILState_STATE +PyGetSetDef PyGetSetDescr_Type PyImport_AddModule PyImport_AddModuleObject @@ -296,6 +316,7 @@ PyImport_ImportModuleLevelObject PyImport_ImportModuleNoBlock PyImport_ReloadModule PyIndex_Check +PyInterpreterState PyInterpreterState_Clear PyInterpreterState_Delete PyInterpreterState_Get @@ -319,6 +340,7 @@ PyList_SetSlice PyList_Size PyList_Sort PyList_Type +PyLongObject PyLongRangeIter_Type PyLong_AsDouble PyLong_AsLong @@ -358,12 +380,16 @@ PyMem_Calloc PyMem_Free PyMem_Malloc PyMem_Realloc +PyMemberDef PyMemberDescr_Type PyMemoryView_FromMemory PyMemoryView_FromObject PyMemoryView_GetContiguous PyMemoryView_Type +PyMethodDef PyMethodDescr_Type +PyModuleDef +PyModuleDef_Base PyModuleDef_Init PyModuleDef_Type PyModule_AddFunctions @@ -427,18 +453,22 @@ PyOS_AfterFork PyOS_AfterFork_Child PyOS_AfterFork_Parent PyOS_BeforeFork +PyOS_CheckStack PyOS_FSPath +PyOS_InputHook PyOS_InterruptOccurred PyOS_double_to_string PyOS_getsig PyOS_mystricmp PyOS_mystrnicmp PyOS_setsig +PyOS_sighandler_t PyOS_snprintf PyOS_string_to_double PyOS_strtol PyOS_strtoul PyOS_vsnprintf +PyObject PyObject_ASCII PyObject_AsFileDescriptor PyObject_Bytes @@ -537,6 +567,8 @@ PySlice_Unpack PyState_AddModule PyState_FindModule PyState_RemoveModule +PyStructSequence_Desc +PyStructSequence_Field PyStructSequence_GetItem PyStructSequence_New PyStructSequence_NewType @@ -557,6 +589,7 @@ PySys_SetObject PySys_SetPath PySys_WriteStderr PySys_WriteStdout +PyThreadState PyThreadState_Clear PyThreadState_Delete PyThreadState_Get @@ -604,6 +637,7 @@ PyTuple_Pack PyTuple_SetItem PyTuple_Size PyTuple_Type +PyTypeObject PyType_ClearCache PyType_FromModuleAndSpec PyType_FromSpec @@ -617,6 +651,8 @@ PyType_GetSlot PyType_IsSubtype PyType_Modified PyType_Ready +PyType_Slot +PyType_Spec PyType_Type PyUnicodeDecodeError_Create PyUnicodeDecodeError_GetEncoding @@ -653,6 +689,7 @@ PyUnicode_AsEncodedObject PyUnicode_AsEncodedString PyUnicode_AsEncodedUnicode PyUnicode_AsLatin1String +PyUnicode_AsMBCSString PyUnicode_AsRawUnicodeEscapeString PyUnicode_AsUCS4 PyUnicode_AsUCS4Copy @@ -672,11 +709,14 @@ PyUnicode_Count PyUnicode_Decode PyUnicode_DecodeASCII PyUnicode_DecodeCharmap +PyUnicode_DecodeCodePageStateful PyUnicode_DecodeFSDefault PyUnicode_DecodeFSDefaultAndSize PyUnicode_DecodeLatin1 PyUnicode_DecodeLocale PyUnicode_DecodeLocaleAndSize +PyUnicode_DecodeMBCS +PyUnicode_DecodeMBCSStateful PyUnicode_DecodeRawUnicodeEscape PyUnicode_DecodeUTF16 PyUnicode_DecodeUTF16Stateful @@ -687,6 +727,7 @@ PyUnicode_DecodeUTF7Stateful PyUnicode_DecodeUTF8 PyUnicode_DecodeUTF8Stateful PyUnicode_DecodeUnicodeEscape +PyUnicode_EncodeCodePage PyUnicode_EncodeFSDefault PyUnicode_EncodeLocale PyUnicode_FSConverter @@ -724,6 +765,8 @@ PyUnicode_Tailmatch PyUnicode_Translate PyUnicode_Type PyUnicode_WriteChar +PyVarObject +PyWeakReference PyWeakref_GetObject PyWeakref_NewProxy PyWeakref_NewRef @@ -732,11 +775,14 @@ PyWrapper_New PyZip_Type Py_AddPendingCall Py_AtExit +Py_BEGIN_ALLOW_THREADS +Py_BLOCK_THREADS Py_BuildValue Py_BytesMain Py_CompileString Py_DecRef Py_DecodeLocale +Py_END_ALLOW_THREADS Py_EncodeLocale Py_EndInterpreter Py_EnterRecursiveCall @@ -781,6 +827,127 @@ Py_SetPath Py_SetProgramName Py_SetPythonHome Py_SetRecursionLimit +Py_TPFLAGS_BASETYPE +Py_TPFLAGS_DEFAULT +Py_TPFLAGS_HAVE_GC +Py_TPFLAGS_METHOD_DESCRIPTOR +Py_UCS4 +Py_UNBLOCK_THREADS Py_UTF8Mode Py_VaBuildValue Py_XNewRef +Py_am_aiter +Py_am_anext +Py_am_await +Py_am_send +Py_intptr_t +Py_mp_ass_subscript +Py_mp_length +Py_mp_subscript +Py_nb_absolute +Py_nb_add +Py_nb_and +Py_nb_bool +Py_nb_divmod +Py_nb_float +Py_nb_floor_divide +Py_nb_index +Py_nb_inplace_add +Py_nb_inplace_and +Py_nb_inplace_floor_divide +Py_nb_inplace_lshift +Py_nb_inplace_matrix_multiply +Py_nb_inplace_multiply +Py_nb_inplace_or +Py_nb_inplace_power +Py_nb_inplace_remainder +Py_nb_inplace_rshift +Py_nb_inplace_subtract +Py_nb_inplace_true_divide +Py_nb_inplace_xor +Py_nb_int +Py_nb_invert +Py_nb_lshift +Py_nb_matrix_multiply +Py_nb_multiply +Py_nb_negative +Py_nb_or +Py_nb_positive +Py_nb_power +Py_nb_remainder +Py_nb_rshift +Py_nb_subtract +Py_nb_true_divide +Py_nb_xor +Py_sq_ass_item +Py_sq_concat +Py_sq_contains +Py_sq_inplace_concat +Py_sq_inplace_repeat +Py_sq_item +Py_sq_length +Py_sq_repeat +Py_ssize_t +Py_tp_alloc +Py_tp_base +Py_tp_bases +Py_tp_call +Py_tp_clear +Py_tp_dealloc +Py_tp_del +Py_tp_descr_get +Py_tp_descr_set +Py_tp_doc +Py_tp_finalize +Py_tp_free +Py_tp_getattr +Py_tp_getattro +Py_tp_getset +Py_tp_hash +Py_tp_init +Py_tp_is_gc +Py_tp_iter +Py_tp_iternext +Py_tp_members +Py_tp_methods +Py_tp_new +Py_tp_repr +Py_tp_richcompare +Py_tp_setattr +Py_tp_setattro +Py_tp_str +Py_tp_traverse +Py_uintptr_t +_frame +_node +allocfunc +binaryfunc +descrgetfunc +descrsetfunc +destructor +getattrfunc +getattrofunc +getiterfunc +getter +hashfunc +initproc +inquiry +iternextfunc +lenfunc +newfunc +objobjargproc +objobjproc +reprfunc +richcmpfunc +setattrfunc +setattrofunc +setter +ssizeargfunc +ssizeobjargproc +ssizessizeargfunc +ssizessizeobjargproc +symtable +ternaryfunc +traverseproc +unaryfunc +visitproc diff --git a/Makefile.pre.in b/Makefile.pre.in index 4d9b760863ad59..72ccbcf7c2a091 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -752,10 +752,7 @@ regen-importlib: Programs/_freeze_importlib regen-limited-abi: all - @$(MKDIR_P) $(srcdir)/Doc/data/ - $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py generate $(srcdir)/Doc/data/stable_abi.dat.new - $(UPDATE_FILE) $(srcdir)/Doc/data/stable_abi.dat \ - $(srcdir)/Doc/data/stable_abi.dat.new + $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --generate-all $(srcdir)/Misc/stable_abi.txt ############################################################################ @@ -1983,7 +1980,7 @@ patchcheck: @DEF_MAKE_RULE@ $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/patchcheck.py check-limited-abi: all - $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py check $(srcdir)/Doc/data/stable_abi.dat + $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --all $(srcdir)/Misc/stable_abi.txt # Dependencies diff --git a/Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst b/Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst new file mode 100644 index 00000000000000..5153c336777187 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst @@ -0,0 +1,2 @@ +Stable ABI and limited API definitions are generated from a central manifest +(:pep:`652`). diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt new file mode 100644 index 00000000000000..efb2731f595a22 --- /dev/null +++ b/Misc/stable_abi.txt @@ -0,0 +1,2144 @@ +# This file lists the contents of the Limited API and Stable ABI. +# Please append new items at the end. + +# The syntax of this file is not fixed. +# It is designed to be read only by Tools/stable_abi.py, which can change +# without notice. + +# For the history of the stable ABI prior to this file, +# see the history of PC/python3dll.c and before that, PC/python3.def, +# and PC/pythonXYstub.def + + +# Mentioned in PEP 384: + +struct PyObject + added 3.2 +struct PyVarObject + added 3.2 +struct PyMethodDef + added 3.2 +struct PyMemberDef + added 3.2 +struct PyGetSetDef + added 3.2 +struct PyModuleDef_Base + added 3.2 +struct PyModuleDef + added 3.2 +struct PyStructSequence_Field + added 3.2 +struct PyStructSequence_Desc + added 3.2 +struct PyType_Slot + added 3.2 +struct PyType_Spec + added 3.2 +struct PyThreadState + added 3.2 +struct PyInterpreterState + added 3.2 +struct _frame + added 3.2 +struct symtable + added 3.2 +struct _node + added 3.2 +struct PyWeakReference + added 3.2 +struct PyLongObject + added 3.2 +struct PyTypeObject + added 3.2 + +function PyType_FromSpec + added 3.2 + +const Py_tp_dealloc + added 3.2 +const Py_tp_getattr + added 3.2 +const Py_tp_setattr + added 3.2 +const Py_tp_repr + added 3.2 +const Py_tp_hash + added 3.2 +const Py_tp_call + added 3.2 +const Py_tp_str + added 3.2 +const Py_tp_getattro + added 3.2 +const Py_tp_setattro + added 3.2 +const Py_tp_doc + added 3.2 +const Py_tp_traverse + added 3.2 +const Py_tp_clear + added 3.2 +const Py_tp_richcompare + added 3.2 +const Py_tp_iter + added 3.2 +const Py_tp_iternext + added 3.2 +const Py_tp_methods + added 3.2 +const Py_tp_base + added 3.2 +const Py_tp_descr_get + added 3.2 +const Py_tp_descr_set + added 3.2 +const Py_tp_init + added 3.2 +const Py_tp_alloc + added 3.2 +const Py_tp_new + added 3.2 +const Py_tp_members + added 3.2 +const Py_tp_getset + added 3.2 +const Py_tp_free + added 3.2 +const Py_tp_is_gc + added 3.2 +const Py_tp_bases + added 3.2 +const Py_tp_del + added 3.2 +const Py_nb_add + added 3.2 +const Py_nb_subtract + added 3.2 +const Py_nb_multiply + added 3.2 +const Py_nb_remainder + added 3.2 +const Py_nb_divmod + added 3.2 +const Py_nb_power + added 3.2 +const Py_nb_negative + added 3.2 +const Py_nb_positive + added 3.2 +const Py_nb_absolute + added 3.2 +const Py_nb_bool + added 3.2 +const Py_nb_invert + added 3.2 +const Py_nb_lshift + added 3.2 +const Py_nb_rshift + added 3.2 +const Py_nb_and + added 3.2 +const Py_nb_xor + added 3.2 +const Py_nb_or + added 3.2 +const Py_nb_int + added 3.2 +const Py_nb_float + added 3.2 +const Py_nb_inplace_add + added 3.2 +const Py_nb_inplace_subtract + added 3.2 +const Py_nb_inplace_multiply + added 3.2 +const Py_nb_inplace_remainder + added 3.2 +const Py_nb_inplace_power + added 3.2 +const Py_nb_inplace_lshift + added 3.2 +const Py_nb_inplace_rshift + added 3.2 +const Py_nb_inplace_and + added 3.2 +const Py_nb_inplace_xor + added 3.2 +const Py_nb_inplace_or + added 3.2 +const Py_nb_floor_divide + added 3.2 +const Py_nb_true_divide + added 3.2 +const Py_nb_inplace_floor_divide + added 3.2 +const Py_nb_inplace_true_divide + added 3.2 +const Py_nb_index + added 3.2 +const Py_sq_length + added 3.2 +const Py_sq_concat + added 3.2 +const Py_sq_repeat + added 3.2 +const Py_sq_item + added 3.2 +const Py_sq_ass_item + added 3.2 +const Py_sq_contains + added 3.2 +const Py_sq_inplace_concat + added 3.2 +const Py_sq_inplace_repeat + added 3.2 +const Py_mp_length + added 3.2 +const Py_mp_subscript + added 3.2 +const Py_mp_ass_subscript + added 3.2 + +typedef Py_uintptr_t + added 3.2 +typedef Py_intptr_t + added 3.2 +typedef Py_ssize_t + added 3.2 +typedef unaryfunc + added 3.2 +typedef binaryfunc + added 3.2 +typedef ternaryfunc + added 3.2 +typedef inquiry + added 3.2 +typedef lenfunc + added 3.2 +typedef ssizeargfunc + added 3.2 +typedef ssizessizeargfunc + added 3.2 +typedef ssizeobjargproc + added 3.2 +typedef ssizessizeobjargproc + added 3.2 +typedef objobjargproc + added 3.2 +typedef objobjproc + added 3.2 +typedef visitproc + added 3.2 +typedef traverseproc + added 3.2 +typedef destructor + added 3.2 +typedef getattrfunc + added 3.2 +typedef getattrofunc + added 3.2 +typedef setattrfunc + added 3.2 +typedef setattrofunc + added 3.2 +typedef reprfunc + added 3.2 +typedef hashfunc + added 3.2 +typedef richcmpfunc + added 3.2 +typedef getiterfunc + added 3.2 +typedef iternextfunc + added 3.2 +typedef descrgetfunc + added 3.2 +typedef descrsetfunc + added 3.2 +typedef initproc + added 3.2 +typedef newfunc + added 3.2 +typedef allocfunc + added 3.2 +struct PyCFunction + added 3.2 +struct PyCFunctionWithKeywords + added 3.2 +struct PyCapsule_Destructor + added 3.2 +typedef getter + added 3.2 +typedef setter + added 3.2 +typedef PyOS_sighandler_t + added 3.2 +typedef PyGILState_STATE + added 3.2 +typedef Py_UCS4 + added 3.2 + +macro Py_BEGIN_ALLOW_THREADS + added 3.2 +macro Py_BLOCK_THREADS + added 3.2 +macro Py_UNBLOCK_THREADS + added 3.2 +macro Py_END_ALLOW_THREADS + added 3.2 + +# The following were added in PC/python3.def in the intial stable ABI commit, +# 4d0d471a8031de90a2b1ce99c4ac4780e60b3bc9, +# and later amendments in 3.2: +# 0d012f284be829c6217f60523db0e1671b7db9d9 +# c83bc3c1fbed14d27a5de3032e24d2cf006a7c4b + +function PyArg_Parse + added 3.2 +function PyArg_ParseTuple + added 3.2 +function PyArg_ParseTupleAndKeywords + added 3.2 +function PyArg_UnpackTuple + added 3.2 +function PyArg_VaParse + added 3.2 +function PyArg_VaParseTupleAndKeywords + added 3.2 +function PyArg_ValidateKeywordArguments + added 3.2 +data PyBaseObject_Type + added 3.2 +function PyBool_FromLong + added 3.2 +data PyBool_Type + added 3.2 +data PyByteArrayIter_Type + added 3.2 +function PyByteArray_AsString + added 3.2 +function PyByteArray_Concat + added 3.2 +function PyByteArray_FromObject + added 3.2 +function PyByteArray_FromStringAndSize + added 3.2 +function PyByteArray_Resize + added 3.2 +function PyByteArray_Size + added 3.2 +data PyByteArray_Type + added 3.2 +data PyBytesIter_Type + added 3.2 +function PyBytes_AsString + added 3.2 +function PyBytes_AsStringAndSize + added 3.2 +function PyBytes_Concat + added 3.2 +function PyBytes_ConcatAndDel + added 3.2 +function PyBytes_DecodeEscape + added 3.2 +function PyBytes_FromFormat + added 3.2 +function PyBytes_FromFormatV + added 3.2 +function PyBytes_FromObject + added 3.2 +function PyBytes_FromString + added 3.2 +function PyBytes_FromStringAndSize + added 3.2 +function PyBytes_Repr + added 3.2 +function PyBytes_Size + added 3.2 +data PyBytes_Type + added 3.2 +function PyCFunction_Call + added 3.2 +function PyCFunction_GetFlags + added 3.2 +function PyCFunction_GetFunction + added 3.2 +function PyCFunction_GetSelf + added 3.2 +function PyCFunction_NewEx + added 3.2 +data PyCFunction_Type + added 3.2 +function PyCallIter_New + added 3.2 +data PyCallIter_Type + added 3.2 +function PyCallable_Check + added 3.2 +function PyCapsule_GetContext + added 3.2 +function PyCapsule_GetDestructor + added 3.2 +function PyCapsule_GetName + added 3.2 +function PyCapsule_GetPointer + added 3.2 +function PyCapsule_Import + added 3.2 +function PyCapsule_IsValid + added 3.2 +function PyCapsule_New + added 3.2 +function PyCapsule_SetContext + added 3.2 +function PyCapsule_SetDestructor + added 3.2 +function PyCapsule_SetName + added 3.2 +function PyCapsule_SetPointer + added 3.2 +data PyCapsule_Type + added 3.2 +data PyClassMethodDescr_Type + added 3.2 +function PyCodec_BackslashReplaceErrors + added 3.2 +function PyCodec_Decode + added 3.2 +function PyCodec_Decoder + added 3.2 +function PyCodec_Encode + added 3.2 +function PyCodec_Encoder + added 3.2 +function PyCodec_IgnoreErrors + added 3.2 +function PyCodec_IncrementalDecoder + added 3.2 +function PyCodec_IncrementalEncoder + added 3.2 +function PyCodec_KnownEncoding + added 3.2 +function PyCodec_LookupError + added 3.2 +function PyCodec_Register + added 3.2 +function PyCodec_RegisterError + added 3.2 +function PyCodec_ReplaceErrors + added 3.2 +function PyCodec_StreamReader + added 3.2 +function PyCodec_StreamWriter + added 3.2 +function PyCodec_StrictErrors + added 3.2 +function PyCodec_XMLCharRefReplaceErrors + added 3.2 +function PyComplex_FromDoubles + added 3.2 +function PyComplex_ImagAsDouble + added 3.2 +function PyComplex_RealAsDouble + added 3.2 +data PyComplex_Type + added 3.2 +function PyDescr_NewClassMethod + added 3.2 +function PyDescr_NewGetSet + added 3.2 +function PyDescr_NewMember + added 3.2 +function PyDescr_NewMethod + added 3.2 +data PyDictItems_Type + added 3.2 +data PyDictIterItem_Type + added 3.2 +data PyDictIterKey_Type + added 3.2 +data PyDictIterValue_Type + added 3.2 +data PyDictKeys_Type + added 3.2 +function PyDictProxy_New + added 3.2 +data PyDictProxy_Type + added 3.2 +data PyDictValues_Type + added 3.2 +function PyDict_Clear + added 3.2 +function PyDict_Contains + added 3.2 +function PyDict_Copy + added 3.2 +function PyDict_DelItem + added 3.2 +function PyDict_DelItemString + added 3.2 +function PyDict_GetItem + added 3.2 +function PyDict_GetItemString + added 3.2 +function PyDict_GetItemWithError + added 3.2 +function PyDict_Items + added 3.2 +function PyDict_Keys + added 3.2 +function PyDict_Merge + added 3.2 +function PyDict_MergeFromSeq2 + added 3.2 +function PyDict_New + added 3.2 +function PyDict_Next + added 3.2 +function PyDict_SetItem + added 3.2 +function PyDict_SetItemString + added 3.2 +function PyDict_Size + added 3.2 +data PyDict_Type + added 3.2 +function PyDict_Update + added 3.2 +function PyDict_Values + added 3.2 +data PyEllipsis_Type + added 3.2 +data PyEnum_Type + added 3.2 +function PyErr_BadArgument + added 3.2 +function PyErr_BadInternalCall + added 3.2 +function PyErr_CheckSignals + added 3.2 +function PyErr_Clear + added 3.2 +function PyErr_Display + added 3.2 +function PyErr_ExceptionMatches + added 3.2 +function PyErr_Fetch + added 3.2 +function PyErr_Format + added 3.2 +function PyErr_GivenExceptionMatches + added 3.2 +function PyErr_NewException + added 3.2 +function PyErr_NewExceptionWithDoc + added 3.2 +function PyErr_NoMemory + added 3.2 +function PyErr_NormalizeException + added 3.2 +function PyErr_Occurred + added 3.2 +function PyErr_Print + added 3.2 +function PyErr_PrintEx + added 3.2 +function PyErr_ProgramText + added 3.2 +function PyErr_Restore + added 3.2 +function PyErr_SetFromErrno + added 3.2 +function PyErr_SetFromErrnoWithFilename + added 3.2 +function PyErr_SetFromErrnoWithFilenameObject + added 3.2 +function PyErr_SetInterrupt + added 3.2 +function PyErr_SetNone + added 3.2 +function PyErr_SetObject + added 3.2 +function PyErr_SetString + added 3.2 +function PyErr_SyntaxLocation + added 3.2 +function PyErr_WarnEx + added 3.2 +function PyErr_WarnExplicit + added 3.2 +function PyErr_WarnFormat + added 3.2 +function PyErr_WriteUnraisable + added 3.2 +function PyEval_AcquireLock + added 3.2 +function PyEval_AcquireThread + added 3.2 +function PyEval_CallFunction + added 3.2 +function PyEval_CallMethod + added 3.2 +function PyEval_CallObjectWithKeywords + added 3.2 +function PyEval_EvalCode + added 3.2 +function PyEval_EvalCodeEx + added 3.2 +function PyEval_EvalFrame + added 3.2 +function PyEval_EvalFrameEx + added 3.2 +function PyEval_GetBuiltins + added 3.2 +function PyEval_GetFrame + added 3.2 +function PyEval_GetFuncDesc + added 3.2 +function PyEval_GetFuncName + added 3.2 +function PyEval_GetGlobals + added 3.2 +function PyEval_GetLocals + added 3.2 +function PyEval_InitThreads + added 3.2 +function PyEval_ReleaseLock + added 3.2 +function PyEval_ReleaseThread + added 3.2 +function PyEval_RestoreThread + added 3.2 +function PyEval_SaveThread + added 3.2 +function PyEval_ThreadsInitialized + added 3.2 +data PyExc_ArithmeticError + added 3.2 +data PyExc_AssertionError + added 3.2 +data PyExc_AttributeError + added 3.2 +data PyExc_BaseException + added 3.2 +data PyExc_BufferError + added 3.2 +data PyExc_BytesWarning + added 3.2 +data PyExc_DeprecationWarning + added 3.2 +data PyExc_EOFError + added 3.2 +data PyExc_EnvironmentError + added 3.2 +data PyExc_Exception + added 3.2 +data PyExc_FloatingPointError + added 3.2 +data PyExc_FutureWarning + added 3.2 +data PyExc_GeneratorExit + added 3.2 +data PyExc_IOError + added 3.2 +data PyExc_ImportError + added 3.2 +data PyExc_ImportWarning + added 3.2 +data PyExc_IndentationError + added 3.2 +data PyExc_IndexError + added 3.2 +data PyExc_KeyError + added 3.2 +data PyExc_KeyboardInterrupt + added 3.2 +data PyExc_LookupError + added 3.2 +data PyExc_MemoryError + added 3.2 +data PyExc_NameError + added 3.2 +data PyExc_NotImplementedError + added 3.2 +data PyExc_OSError + added 3.2 +data PyExc_OverflowError + added 3.2 +data PyExc_PendingDeprecationWarning + added 3.2 +data PyExc_ReferenceError + added 3.2 +data PyExc_RuntimeError + added 3.2 +data PyExc_RuntimeWarning + added 3.2 +data PyExc_StopIteration + added 3.2 +data PyExc_SyntaxError + added 3.2 +data PyExc_SyntaxWarning + added 3.2 +data PyExc_SystemError + added 3.2 +data PyExc_SystemExit + added 3.2 +data PyExc_TabError + added 3.2 +data PyExc_TypeError + added 3.2 +data PyExc_UnboundLocalError + added 3.2 +data PyExc_UnicodeDecodeError + added 3.2 +data PyExc_UnicodeEncodeError + added 3.2 +data PyExc_UnicodeError + added 3.2 +data PyExc_UnicodeTranslateError + added 3.2 +data PyExc_UnicodeWarning + added 3.2 +data PyExc_UserWarning + added 3.2 +data PyExc_ValueError + added 3.2 +data PyExc_Warning + added 3.2 +data PyExc_ZeroDivisionError + added 3.2 +function PyException_GetCause + added 3.2 +function PyException_GetContext + added 3.2 +function PyException_GetTraceback + added 3.2 +function PyException_SetCause + added 3.2 +function PyException_SetContext + added 3.2 +function PyException_SetTraceback + added 3.2 +function PyFile_FromFd + added 3.2 +function PyFile_GetLine + added 3.2 +function PyFile_WriteObject + added 3.2 +function PyFile_WriteString + added 3.2 +data PyFilter_Type + added 3.2 +function PyFloat_AsDouble + added 3.2 +function PyFloat_FromDouble + added 3.2 +function PyFloat_FromString + added 3.2 +function PyFloat_GetInfo + added 3.2 +function PyFloat_GetMax + added 3.2 +function PyFloat_GetMin + added 3.2 +data PyFloat_Type + added 3.2 +function PyFrozenSet_New + added 3.2 +data PyFrozenSet_Type + added 3.2 +function PyGC_Collect + added 3.2 +function PyGILState_Ensure + added 3.2 +function PyGILState_GetThisThreadState + added 3.2 +function PyGILState_Release + added 3.2 +data PyGetSetDescr_Type + added 3.2 +function PyImport_AddModule + added 3.2 +function PyImport_AppendInittab + added 3.2 +function PyImport_ExecCodeModule + added 3.2 +function PyImport_ExecCodeModuleEx + added 3.2 +function PyImport_ExecCodeModuleWithPathnames + added 3.2 +function PyImport_GetImporter + added 3.2 +function PyImport_GetMagicNumber + added 3.2 +function PyImport_GetMagicTag + added 3.2 +function PyImport_GetModuleDict + added 3.2 +function PyImport_Import + added 3.2 +function PyImport_ImportFrozenModule + added 3.2 +function PyImport_ImportModule + added 3.2 +function PyImport_ImportModuleLevel + added 3.2 +function PyImport_ImportModuleNoBlock + added 3.2 +function PyImport_ReloadModule + added 3.2 +function PyInterpreterState_Clear + added 3.2 +function PyInterpreterState_Delete + added 3.2 +function PyInterpreterState_New + added 3.2 +function PyIter_Next + added 3.2 +data PyListIter_Type + added 3.2 +data PyListRevIter_Type + added 3.2 +function PyList_Append + added 3.2 +function PyList_AsTuple + added 3.2 +function PyList_GetItem + added 3.2 +function PyList_GetSlice + added 3.2 +function PyList_Insert + added 3.2 +function PyList_New + added 3.2 +function PyList_Reverse + added 3.2 +function PyList_SetItem + added 3.2 +function PyList_SetSlice + added 3.2 +function PyList_Size + added 3.2 +function PyList_Sort + added 3.2 +data PyList_Type + added 3.2 +data PyLongRangeIter_Type + added 3.2 +function PyLong_AsDouble + added 3.2 +function PyLong_AsLong + added 3.2 +function PyLong_AsLongAndOverflow + added 3.2 +function PyLong_AsLongLong + added 3.2 +function PyLong_AsLongLongAndOverflow + added 3.2 +function PyLong_AsSize_t + added 3.2 +function PyLong_AsSsize_t + added 3.2 +function PyLong_AsUnsignedLong + added 3.2 +function PyLong_AsUnsignedLongLong + added 3.2 +function PyLong_AsUnsignedLongLongMask + added 3.2 +function PyLong_AsUnsignedLongMask + added 3.2 +function PyLong_AsVoidPtr + added 3.2 +function PyLong_FromDouble + added 3.2 +function PyLong_FromLong + added 3.2 +function PyLong_FromLongLong + added 3.2 +function PyLong_FromSize_t + added 3.2 +function PyLong_FromSsize_t + added 3.2 +function PyLong_FromString + added 3.2 +function PyLong_FromUnsignedLong + added 3.2 +function PyLong_FromUnsignedLongLong + added 3.2 +function PyLong_FromVoidPtr + added 3.2 +function PyLong_GetInfo + added 3.2 +data PyLong_Type + added 3.2 +data PyMap_Type + added 3.2 +function PyMapping_Check + added 3.2 +function PyMapping_GetItemString + added 3.2 +function PyMapping_HasKey + added 3.2 +function PyMapping_HasKeyString + added 3.2 +function PyMapping_Items + added 3.2 +function PyMapping_Keys + added 3.2 +function PyMapping_Length + added 3.2 +function PyMapping_SetItemString + added 3.2 +function PyMapping_Size + added 3.2 +function PyMapping_Values + added 3.2 +function PyMem_Free + added 3.2 +function PyMem_Malloc + added 3.2 +function PyMem_Realloc + added 3.2 +data PyMemberDescr_Type + added 3.2 +function PyMemoryView_FromObject + added 3.2 +function PyMemoryView_GetContiguous + added 3.2 +data PyMemoryView_Type + added 3.2 +data PyMethodDescr_Type + added 3.2 +function PyModule_AddIntConstant + added 3.2 +function PyModule_AddObject + added 3.2 +function PyModule_AddStringConstant + added 3.2 +function PyModule_Create2 + added 3.2 +function PyModule_GetDef + added 3.2 +function PyModule_GetDict + added 3.2 +function PyModule_GetFilename + added 3.2 +function PyModule_GetFilenameObject + added 3.2 +function PyModule_GetName + added 3.2 +function PyModule_GetState + added 3.2 +function PyModule_New + added 3.2 +data PyModule_Type + added 3.2 +function PyNumber_Absolute + added 3.2 +function PyNumber_Add + added 3.2 +function PyNumber_And + added 3.2 +function PyNumber_AsSsize_t + added 3.2 +function PyNumber_Check + added 3.2 +function PyNumber_Divmod + added 3.2 +function PyNumber_Float + added 3.2 +function PyNumber_FloorDivide + added 3.2 +function PyNumber_InPlaceAdd + added 3.2 +function PyNumber_InPlaceAnd + added 3.2 +function PyNumber_InPlaceFloorDivide + added 3.2 +function PyNumber_InPlaceLshift + added 3.2 +function PyNumber_InPlaceMultiply + added 3.2 +function PyNumber_InPlaceOr + added 3.2 +function PyNumber_InPlacePower + added 3.2 +function PyNumber_InPlaceRemainder + added 3.2 +function PyNumber_InPlaceRshift + added 3.2 +function PyNumber_InPlaceSubtract + added 3.2 +function PyNumber_InPlaceTrueDivide + added 3.2 +function PyNumber_InPlaceXor + added 3.2 +function PyNumber_Index + added 3.2 +function PyNumber_Invert + added 3.2 +function PyNumber_Long + added 3.2 +function PyNumber_Lshift + added 3.2 +function PyNumber_Multiply + added 3.2 +function PyNumber_Negative + added 3.2 +function PyNumber_Or + added 3.2 +function PyNumber_Positive + added 3.2 +function PyNumber_Power + added 3.2 +function PyNumber_Remainder + added 3.2 +function PyNumber_Rshift + added 3.2 +function PyNumber_Subtract + added 3.2 +function PyNumber_ToBase + added 3.2 +function PyNumber_TrueDivide + added 3.2 +function PyNumber_Xor + added 3.2 +function PyOS_AfterFork + added 3.2 + ifdef HAVE_FORK +data PyOS_InputHook + added 3.2 +function PyOS_InterruptOccurred + added 3.2 +function PyOS_double_to_string + added 3.2 +function PyOS_getsig + added 3.2 +function PyOS_mystricmp + added 3.2 +function PyOS_mystrnicmp + added 3.2 +function PyOS_setsig + added 3.2 +function PyOS_snprintf + added 3.2 +function PyOS_string_to_double + added 3.2 +function PyOS_strtol + added 3.2 +function PyOS_strtoul + added 3.2 +function PyOS_vsnprintf + added 3.2 +function PyObject_ASCII + added 3.2 +function PyObject_AsFileDescriptor + added 3.2 +function PyObject_Bytes + added 3.2 +function PyObject_Call + added 3.2 +function PyObject_CallFunction + added 3.2 +function PyObject_CallFunctionObjArgs + added 3.2 +function PyObject_CallMethod + added 3.2 +function PyObject_CallMethodObjArgs + added 3.2 +function PyObject_CallObject + added 3.2 +function PyObject_ClearWeakRefs + added 3.2 +function PyObject_DelItem + added 3.2 +function PyObject_DelItemString + added 3.2 +function PyObject_Dir + added 3.2 +function PyObject_Format + added 3.2 +function PyObject_Free + added 3.2 +function PyObject_GC_Del + added 3.2 +function PyObject_GC_Track + added 3.2 +function PyObject_GC_UnTrack + added 3.2 +function PyObject_GenericGetAttr + added 3.2 +function PyObject_GenericSetAttr + added 3.2 +function PyObject_GetAttr + added 3.2 +function PyObject_GetAttrString + added 3.2 +function PyObject_GetItem + added 3.2 +function PyObject_GetIter + added 3.2 +function PyObject_HasAttr + added 3.2 +function PyObject_HasAttrString + added 3.2 +function PyObject_Hash + added 3.2 +function PyObject_HashNotImplemented + added 3.2 +function PyObject_Init + added 3.2 +function PyObject_InitVar + added 3.2 +function PyObject_IsInstance + added 3.2 +function PyObject_IsSubclass + added 3.2 +function PyObject_IsTrue + added 3.2 +function PyObject_Length + added 3.2 +function PyObject_Malloc + added 3.2 +function PyObject_Not + added 3.2 +function PyObject_Realloc + added 3.2 +function PyObject_Repr + added 3.2 +function PyObject_RichCompare + added 3.2 +function PyObject_RichCompareBool + added 3.2 +function PyObject_SelfIter + added 3.2 +function PyObject_SetAttr + added 3.2 +function PyObject_SetAttrString + added 3.2 +function PyObject_SetItem + added 3.2 +function PyObject_Size + added 3.2 +function PyObject_Str + added 3.2 +function PyObject_Type + added 3.2 +data PyProperty_Type + added 3.2 +data PyRangeIter_Type + added 3.2 +data PyRange_Type + added 3.2 +data PyReversed_Type + added 3.2 +function PySeqIter_New + added 3.2 +data PySeqIter_Type + added 3.2 +function PySequence_Check + added 3.2 +function PySequence_Concat + added 3.2 +function PySequence_Contains + added 3.2 +function PySequence_Count + added 3.2 +function PySequence_DelItem + added 3.2 +function PySequence_DelSlice + added 3.2 +function PySequence_Fast + added 3.2 +function PySequence_GetItem + added 3.2 +function PySequence_GetSlice + added 3.2 +function PySequence_In + added 3.2 +function PySequence_InPlaceConcat + added 3.2 +function PySequence_InPlaceRepeat + added 3.2 +function PySequence_Index + added 3.2 +function PySequence_Length + added 3.2 +function PySequence_List + added 3.2 +function PySequence_Repeat + added 3.2 +function PySequence_SetItem + added 3.2 +function PySequence_SetSlice + added 3.2 +function PySequence_Size + added 3.2 +function PySequence_Tuple + added 3.2 +data PySetIter_Type + added 3.2 +function PySet_Add + added 3.2 +function PySet_Clear + added 3.2 +function PySet_Contains + added 3.2 +function PySet_Discard + added 3.2 +function PySet_New + added 3.2 +function PySet_Pop + added 3.2 +function PySet_Size + added 3.2 +data PySet_Type + added 3.2 +function PySlice_GetIndices + added 3.2 +function PySlice_GetIndicesEx + added 3.2 +function PySlice_New + added 3.2 +data PySlice_Type + added 3.2 +function PyState_FindModule + added 3.2 +function PyStructSequence_GetItem + added 3.2 +function PyStructSequence_New + added 3.2 +function PyStructSequence_NewType + added 3.2 +function PyStructSequence_SetItem + added 3.2 +data PySuper_Type + added 3.2 +function PySys_AddWarnOption + added 3.2 +function PySys_AddWarnOptionUnicode + added 3.2 +function PySys_FormatStderr + added 3.2 +function PySys_FormatStdout + added 3.2 +function PySys_GetObject + added 3.2 +function PySys_HasWarnOptions + added 3.2 +function PySys_ResetWarnOptions + added 3.2 +function PySys_SetArgv + added 3.2 +function PySys_SetArgvEx + added 3.2 +function PySys_SetObject + added 3.2 +function PySys_SetPath + added 3.2 +function PySys_WriteStderr + added 3.2 +function PySys_WriteStdout + added 3.2 +function PyThreadState_Clear + added 3.2 +function PyThreadState_Delete + added 3.2 +function PyThreadState_DeleteCurrent + added 3.2 + abi_only +function PyThreadState_Get + added 3.2 +function PyThreadState_GetDict + added 3.2 +function PyThreadState_New + added 3.2 +function PyThreadState_SetAsyncExc + added 3.2 +function PyThreadState_Swap + added 3.2 +function PyTraceBack_Here + added 3.2 +function PyTraceBack_Print + added 3.2 +data PyTraceBack_Type + added 3.2 +data PyTupleIter_Type + added 3.2 +function PyTuple_GetItem + added 3.2 +function PyTuple_GetSlice + added 3.2 +function PyTuple_New + added 3.2 +function PyTuple_Pack + added 3.2 +function PyTuple_SetItem + added 3.2 +function PyTuple_Size + added 3.2 +data PyTuple_Type + added 3.2 +function PyType_ClearCache + added 3.2 +function PyType_GenericAlloc + added 3.2 +function PyType_GenericNew + added 3.2 +function PyType_GetFlags + added 3.2 +function PyType_IsSubtype + added 3.2 +function PyType_Modified + added 3.2 +function PyType_Ready + added 3.2 +data PyType_Type + added 3.2 +function PyUnicodeDecodeError_Create + added 3.2 +function PyUnicodeDecodeError_GetEncoding + added 3.2 +function PyUnicodeDecodeError_GetEnd + added 3.2 +function PyUnicodeDecodeError_GetObject + added 3.2 +function PyUnicodeDecodeError_GetReason + added 3.2 +function PyUnicodeDecodeError_GetStart + added 3.2 +function PyUnicodeDecodeError_SetEnd + added 3.2 +function PyUnicodeDecodeError_SetReason + added 3.2 +function PyUnicodeDecodeError_SetStart + added 3.2 +function PyUnicodeEncodeError_GetEncoding + added 3.2 +function PyUnicodeEncodeError_GetEnd + added 3.2 +function PyUnicodeEncodeError_GetObject + added 3.2 +function PyUnicodeEncodeError_GetReason + added 3.2 +function PyUnicodeEncodeError_GetStart + added 3.2 +function PyUnicodeEncodeError_SetEnd + added 3.2 +function PyUnicodeEncodeError_SetReason + added 3.2 +function PyUnicodeEncodeError_SetStart + added 3.2 +data PyUnicodeIter_Type + added 3.2 +function PyUnicodeTranslateError_GetEnd + added 3.2 +function PyUnicodeTranslateError_GetObject + added 3.2 +function PyUnicodeTranslateError_GetReason + added 3.2 +function PyUnicodeTranslateError_GetStart + added 3.2 +function PyUnicodeTranslateError_SetEnd + added 3.2 +function PyUnicodeTranslateError_SetReason + added 3.2 +function PyUnicodeTranslateError_SetStart + added 3.2 +function PyUnicode_Append + added 3.2 +function PyUnicode_AppendAndDel + added 3.2 +function PyUnicode_AsASCIIString + added 3.2 +function PyUnicode_AsCharmapString + added 3.2 +function PyUnicode_AsDecodedObject + added 3.2 +function PyUnicode_AsDecodedUnicode + added 3.2 +function PyUnicode_AsEncodedObject + added 3.2 +function PyUnicode_AsEncodedString + added 3.2 +function PyUnicode_AsEncodedUnicode + added 3.2 +function PyUnicode_AsLatin1String + added 3.2 +function PyUnicode_AsRawUnicodeEscapeString + added 3.2 +function PyUnicode_AsUTF16String + added 3.2 +function PyUnicode_AsUTF32String + added 3.2 +function PyUnicode_AsUTF8String + added 3.2 +function PyUnicode_AsUnicodeEscapeString + added 3.2 +function PyUnicode_AsWideChar + added 3.2 +function PyUnicode_Compare + added 3.2 +function PyUnicode_Concat + added 3.2 +function PyUnicode_Contains + added 3.2 +function PyUnicode_Count + added 3.2 +function PyUnicode_Decode + added 3.2 +function PyUnicode_DecodeASCII + added 3.2 +function PyUnicode_DecodeCharmap + added 3.2 +function PyUnicode_DecodeFSDefault + added 3.2 +function PyUnicode_DecodeFSDefaultAndSize + added 3.2 +function PyUnicode_DecodeLatin1 + added 3.2 +function PyUnicode_DecodeRawUnicodeEscape + added 3.2 +function PyUnicode_DecodeUTF16 + added 3.2 +function PyUnicode_DecodeUTF16Stateful + added 3.2 +function PyUnicode_DecodeUTF32 + added 3.2 +function PyUnicode_DecodeUTF32Stateful + added 3.2 +function PyUnicode_DecodeUTF8 + added 3.2 +function PyUnicode_DecodeUTF8Stateful + added 3.2 +function PyUnicode_DecodeUnicodeEscape + added 3.2 +function PyUnicode_FSConverter + added 3.2 +function PyUnicode_FSDecoder + added 3.2 +function PyUnicode_Find + added 3.2 +function PyUnicode_Format + added 3.2 +function PyUnicode_FromEncodedObject + added 3.2 +function PyUnicode_FromFormat + added 3.2 +function PyUnicode_FromFormatV + added 3.2 +function PyUnicode_FromObject + added 3.2 +function PyUnicode_FromOrdinal + added 3.2 +function PyUnicode_FromString + added 3.2 +function PyUnicode_FromStringAndSize + added 3.2 +function PyUnicode_FromWideChar + added 3.2 +function PyUnicode_GetDefaultEncoding + added 3.2 +function PyUnicode_GetSize + added 3.2 +function PyUnicode_IsIdentifier + added 3.2 +function PyUnicode_Join + added 3.2 +function PyUnicode_Partition + added 3.2 +function PyUnicode_RPartition + added 3.2 +function PyUnicode_RSplit + added 3.2 +function PyUnicode_Replace + added 3.2 +function PyUnicode_Resize + added 3.2 +function PyUnicode_RichCompare + added 3.2 +function PyUnicode_Split + added 3.2 +function PyUnicode_Splitlines + added 3.2 +function PyUnicode_Tailmatch + added 3.2 +function PyUnicode_Translate + added 3.2 +function PyUnicode_BuildEncodingMap + added 3.2 +function PyUnicode_CompareWithASCIIString + added 3.2 +function PyUnicode_DecodeUTF7 + added 3.2 +function PyUnicode_DecodeUTF7Stateful + added 3.2 +function PyUnicode_EncodeFSDefault + added 3.2 +function PyUnicode_InternFromString + added 3.2 +function PyUnicode_InternImmortal + added 3.2 +function PyUnicode_InternInPlace + added 3.2 +data PyUnicode_Type + added 3.2 +function PyWeakref_GetObject + added 3.2 +function PyWeakref_NewProxy + added 3.2 +function PyWeakref_NewRef + added 3.2 +data PyWrapperDescr_Type + added 3.2 +function PyWrapper_New + added 3.2 +data PyZip_Type + added 3.2 +function Py_AddPendingCall + added 3.2 +function Py_AtExit + added 3.2 +function Py_BuildValue + added 3.2 +function Py_CompileString + added 3.2 +function Py_DecRef + added 3.2 +function Py_EndInterpreter + added 3.2 +function Py_Exit + added 3.2 +function Py_FatalError + added 3.2 +data Py_FileSystemDefaultEncoding + added 3.2 +function Py_Finalize + added 3.2 +function Py_GetBuildInfo + added 3.2 +function Py_GetCompiler + added 3.2 +function Py_GetCopyright + added 3.2 +function Py_GetExecPrefix + added 3.2 +function Py_GetPath + added 3.2 +function Py_GetPlatform + added 3.2 +function Py_GetPrefix + added 3.2 +function Py_GetProgramFullPath + added 3.2 +function Py_GetProgramName + added 3.2 +function Py_GetPythonHome + added 3.2 +function Py_GetRecursionLimit + added 3.2 +function Py_GetVersion + added 3.2 +data Py_HasFileSystemDefaultEncoding + added 3.2 +function Py_IncRef + added 3.2 +function Py_Initialize + added 3.2 +function Py_InitializeEx + added 3.2 +function Py_IsInitialized + added 3.2 +function Py_Main + added 3.2 +function Py_MakePendingCalls + added 3.2 +function Py_NewInterpreter + added 3.2 +function Py_ReprEnter + added 3.2 +function Py_ReprLeave + added 3.2 +function Py_SetProgramName + added 3.2 +function Py_SetPythonHome + added 3.2 +function Py_SetRecursionLimit + added 3.2 +function Py_VaBuildValue + added 3.2 + +function _PyErr_BadInternalCall + added 3.2 + abi_only +function _PyObject_CallFunction_SizeT + added 3.2 + abi_only +function _PyObject_CallMethod_SizeT + added 3.2 + abi_only +function _PyObject_GC_Malloc + added 3.2 + abi_only +function _PyObject_GC_New + added 3.2 + abi_only +function _PyObject_GC_NewVar + added 3.2 + abi_only +function _PyObject_GC_Resize + added 3.2 + abi_only +function _PyObject_New + added 3.2 + abi_only +function _PyObject_NewVar + added 3.2 + abi_only +function _PyState_AddModule + added 3.2 + abi_only +function _PyThreadState_Init + added 3.2 + abi_only +function _PyThreadState_Prealloc + added 3.2 + abi_only +function _PyTrash_deposit_object + added 3.2 + abi_only +function _PyTrash_destroy_chain + added 3.2 + abi_only +data _PyWeakref_CallableProxyType + added 3.2 + abi_only +data _PyWeakref_ProxyType + added 3.2 + abi_only +data _PyWeakref_RefType + added 3.2 + abi_only +function _Py_BuildValue_SizeT + added 3.2 + abi_only +function _Py_CheckRecursiveCall + added 3.2 + abi_only +function _Py_Dealloc + added 3.2 + abi_only +data _Py_EllipsisObject + added 3.2 + abi_only +data _Py_FalseStruct + added 3.2 + abi_only +data _Py_NoneStruct + added 3.2 + abi_only +data _Py_NotImplementedStruct + added 3.2 + abi_only +data _Py_SwappedOp + added 3.2 + abi_only +data _Py_TrueStruct + added 3.2 + abi_only +function _Py_VaBuildValue_SizeT + added 3.2 + abi_only + +# Flags are implicitly part of the ABI: + +const Py_TPFLAGS_DEFAULT + added 3.2 +const Py_TPFLAGS_BASETYPE + added 3.2 +const Py_TPFLAGS_HAVE_GC + added 3.2 + +const METH_VARARGS + added 3.2 +const METH_NOARGS + added 3.2 +const METH_O + added 3.2 +const METH_CLASS + added 3.2 +const METH_STATIC + added 3.2 +const METH_COEXIST + added 3.2 +# METH_STACKLESS is undocumented +# METH_FASTCALL is not part of limited API. + +# The following are defined in private headers, but historically +# they were exported as part of the stable ABI. +function PyMarshal_ReadObjectFromString + added 3.2 + abi_only +function PyMarshal_WriteObjectToString + added 3.2 + abi_only +function PyMember_GetOne + added 3.2 + abi_only +function PyMember_SetOne + added 3.2 + abi_only + +# TLS api is deprecated; superseded by TSS API + +function PyThread_ReInitTLS + added 3.2 +function PyThread_create_key + added 3.2 +function PyThread_delete_key + added 3.2 +function PyThread_set_key_value + added 3.2 +function PyThread_get_key_value + added 3.2 +function PyThread_delete_key_value + added 3.2 +function PyThread_acquire_lock + added 3.2 +function PyThread_acquire_lock_timed + added 3.2 +function PyThread_allocate_lock + added 3.2 +function PyThread_exit_thread + added 3.2 +function PyThread_free_lock + added 3.2 +function PyThread_get_stacksize + added 3.2 +function PyThread_get_thread_ident + added 3.2 +function PyThread_get_thread_native_id + added 3.2 +function PyThread_init_thread + added 3.2 +function PyThread_release_lock + added 3.2 +function PyThread_set_stacksize + added 3.2 +function PyThread_start_new_thread + added 3.2 + +# The following were added in PC/python3.def in Python 3.3: +# 7800f75827b1be557be16f3b18f5170fbf9fae08 +# 9c56409d3353b8cd4cfc19e0467bbe23fd34fc92 +# 75aeaa9b18667219bbacbc58ba6efecccef9dfbd + +function PyState_AddModule + added 3.3 +function PyState_RemoveModule + added 3.3 +function PyType_FromSpecWithBases + added 3.3 +function _PyArg_Parse_SizeT + added 3.3 + abi_only +function _PyArg_ParseTuple_SizeT + added 3.3 + abi_only +function _PyArg_ParseTupleAndKeywords_SizeT + added 3.3 + abi_only +function _PyArg_VaParse_SizeT + added 3.3 + abi_only +function _PyArg_VaParseTupleAndKeywords_SizeT + added 3.3 + abi_only +function PyThread_GetInfo + added 3.3 + +# The following were added in PC/python3.def in Python 3.4: +# 3ba3a3ee56c142e93d6bbe20ff6bf939212a30f0 + +function PyCFunction_New + added 3.4 +function PyType_GetSlot + added 3.4 + +# The following were added in PC/python3.def in Python 3.5: +# 11d7b1423fc44d764eba7065ea5eba58ed748b21 +# f3b73ad51da3097d7915796fdc62608b1ab90c0a + +function PyErr_FormatV + added 3.5 +function PyModuleDef_Init + added 3.5 +data PyModuleDef_Type + added 3.5 + +# New slots in 3.5: +# d51374ed78a3e3145911a16cdf3b9b84b3ba7d15 - Matrix multiplication (PEP 465) +# 7544508f0245173bff5866aa1598c8f6cce1fc5f - Async iterators (PEP 492) +# 0969a9f8abcf98bb43ea77b1dd050426adcfb4f7 - tp_finalize + +const Py_nb_matrix_multiply + added 3.5 +const Py_nb_inplace_matrix_multiply + added 3.5 +const Py_am_await + added 3.5 +const Py_am_aiter + added 3.5 +const Py_am_anext + added 3.5 +const Py_tp_finalize + added 3.5 + +# The following were added in PC/python3.def in Python 3.6: + +function Py_FinalizeEx + added 3.6 + +function PyOS_FSPath + added 3.6 +function PyErr_ResourceWarning + added 3.6 +function PyErr_SetImportErrorSubclass + added 3.6 +data PyExc_ModuleNotFoundError + added 3.6 + +# The following were added in PC/python3.def in Python 3.6.1 and 3.5.3/3.5.4: + +function PyCodec_NameReplaceErrors + added 3.7 # (and 3.6.1 and 3.5.3) +function PyErr_GetExcInfo + added 3.7 # (and 3.6.1 and 3.5.3) +function PyErr_SetExcInfo + added 3.7 # (and 3.6.1 and 3.5.3) +function PyErr_SetFromErrnoWithFilenameObjects + added 3.7 # (and 3.6.1 and 3.5.3) +function PyErr_SetImportError + added 3.7 # (and 3.6.1 and 3.5.3) +function PyErr_SyntaxLocationEx + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_BlockingIOError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_BrokenPipeError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ChildProcessError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ConnectionAbortedError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ConnectionError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ConnectionRefusedError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ConnectionResetError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_FileExistsError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_FileNotFoundError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_InterruptedError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_IsADirectoryError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_NotADirectoryError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_PermissionError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ProcessLookupError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_RecursionError + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_ResourceWarning + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_StopAsyncIteration + added 3.7 # (and 3.6.1 and 3.5.3) +data PyExc_TimeoutError + added 3.7 # (and 3.6.1 and 3.5.3) +function PyImport_AddModuleObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyImport_ExecCodeModuleObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyImport_ImportFrozenModuleObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyImport_ImportModuleLevelObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyMem_Calloc + added 3.7 # (and 3.6.1 and 3.5.3) +function PyMemoryView_FromMemory + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_AddFunctions + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_ExecDef + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_FromDefAndSpec2 + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_GetNameObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_NewObject + added 3.7 # (and 3.6.1 and 3.5.3) +function PyModule_SetDocString + added 3.7 # (and 3.6.1 and 3.5.3) +function PyNumber_InPlaceMatrixMultiply + added 3.7 # (and 3.6.1 and 3.5.3) +function PyNumber_MatrixMultiply + added 3.7 # (and 3.6.1 and 3.5.3) +function PyObject_Calloc + added 3.7 # (and 3.6.1 and 3.5.3) +function PyObject_GenericSetDict + added 3.7 # (and 3.6.1 and 3.5.3) +function PySys_AddXOption + added 3.7 # (and 3.6.1 and 3.5.3) +function PySys_GetXOptions + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_AsUCS4 + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_AsUCS4Copy + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_AsWideCharString + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_DecodeLocale + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_DecodeLocaleAndSize + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_EncodeLocale + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_FindChar + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_GetLength + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_ReadChar + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_Substring + added 3.7 # (and 3.6.1 and 3.5.3) +function PyUnicode_WriteChar + added 3.7 # (and 3.6.1 and 3.5.3) +function Py_DecodeLocale + added 3.7 # (and 3.6.1 and 3.5.3) +function Py_EncodeLocale + added 3.7 # (and 3.6.1 and 3.5.3) +function Py_SetPath + added 3.7 # (and 3.6.1 and 3.5.3) +function _PyTrash_thread_deposit_object + added 3.7 # (and 3.6.1 and 3.5.3) + abi_only +function _PyTrash_thread_destroy_chain + added 3.7 # (and 3.6.1 and 3.5.3) + abi_only +function PyErr_SetExcFromWindowsErr + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyErr_SetExcFromWindowsErrWithFilename + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyErr_SetExcFromWindowsErrWithFilenameObject + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyErr_SetExcFromWindowsErrWithFilenameObjects + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyErr_SetFromWindowsErr + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyErr_SetFromWindowsErrWithFilename + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +data PyExc_WindowsError + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyOS_CheckStack + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef USE_STACKCHECK +function PyUnicode_AsMBCSString + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyUnicode_DecodeCodePageStateful + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyUnicode_DecodeMBCS + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyUnicode_DecodeMBCSStateful + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS +function PyUnicode_EncodeCodePage + added 3.7 # (and 3.6.1 and 3.5.3) + ifdef MS_WINDOWS + +# 3.5.4: +function PySlice_AdjustIndices + added 3.7 # (and 3.6.1 and 3.5.4) +function PySlice_Unpack + added 3.7 # (and 3.6.1 and 3.5.4) + +# The following were added in PC/python3.def in Python 3.7: + +function PyInterpreterState_GetID + added 3.7 +function PyThread_tss_alloc + added 3.7 +function PyThread_tss_create + added 3.7 +function PyThread_tss_delete + added 3.7 +function PyThread_tss_free + added 3.7 +function PyThread_tss_get + added 3.7 +function PyThread_tss_is_created + added 3.7 +function PyThread_tss_set + added 3.7 +function PyOS_BeforeFork + added 3.7 + ifdef HAVE_FORK +function PyOS_AfterFork_Parent + added 3.7 + ifdef HAVE_FORK +function PyOS_AfterFork_Child + added 3.7 + ifdef HAVE_FORK + +# New method flags in 3.7 (PEP 590): + +const METH_FASTCALL + added 3.7 +const METH_METHOD + added 3.7 + +# The following were added in PC/python3.def in Python 3.8: + +function PyImport_GetModule + added 3.8 +data Py_UTF8Mode + added 3.8 +function PyExceptionClass_Name + added 3.8 +function PyIndex_Check + added 3.8 +function PyIter_Check + added 3.8 +data PyDictRevIterItem_Type + added 3.8 +data PyDictRevIterKey_Type + added 3.8 +data PyDictRevIterValue_Type + added 3.8 +function PyInterpreterState_GetDict + added 3.8 +function Py_BytesMain + added 3.8 + +# New type flag (PEP 590): + +const Py_TPFLAGS_METHOD_DESCRIPTOR + added 3.8 + +# The following were added in PC/python3.def in Python 3.9: + +function Py_EnterRecursiveCall + added 3.9 +function Py_LeaveRecursiveCall + added 3.9 +function Py_GenericAlias + added 3.9 +function Py_GenericAliasType + added 3.9 +function PyCMethod_New + added 3.9 # Windows: 3.10 & 3.9.2 -- https://bugs.python.org/issue43155 +function PyInterpreterState_Get + added 3.9 +function PyObject_GC_IsFinalized + added 3.9 +function PyObject_GC_IsTracked + added 3.9 + +# The following were added in PC/python3.def in Python 3.10: + +function Py_GetArgcArgv + added 3.10 + abi_only +function PyIter_Send + added 3.10 +function PyUnicode_AsUTF8AndSize + added 3.10 +function PyObject_GenericGetDict + added 3.10 +function Py_NewRef + added 3.10 +function Py_XNewRef + added 3.10 +function PyModule_AddType + added 3.10 +function PyType_FromModuleAndSpec + added 3.10 +function PyType_GetModule + added 3.10 +function PyType_GetModuleState + added 3.10 +function Py_FrozenMain + added 3.10 +function PyFrame_GetLineNumber + added 3.10 +function PyFrame_GetCode + added 3.10 +function PyObject_CallNoArgs + added 3.10 +function PyThreadState_GetFrame + added 3.10 +function PyThreadState_GetID + added 3.10 +function PyThreadState_GetInterpreter + added 3.10 +function PyModule_AddObjectRef + added 3.10 +data Py_FileSystemDefaultEncodeErrors + added 3.10 +data PyCodec_Unregister + added 3.10 +function PyErr_SetInterruptEx + added 3.10 +function Py_Is + added 3.10 +function Py_IsTrue + added 3.10 +function Py_IsFalse + added 3.10 +function Py_IsNone + added 3.10 +function _Py_IncRef + added 3.10 + abi_only +function _Py_DecRef + added 3.10 + abi_only +function PyAiter_Check + added 3.10 +function PyObject_GetAiter + added 3.10 +data PyExc_EncodingWarning + added 3.10 + +# Support for Stable ABI in debug builds + +data _Py_RefTotal + added 3.10 + abi_only + ifdef Py_REF_DEBUG +function _Py_NegativeRefcount + added 3.10 + abi_only + ifdef Py_REF_DEBUG + +# New slots in 3.10: + +const Py_am_send + added 3.10 + + +# (Detailed comments aren't really needed for further entries: from here on +# we can use version control logs.) + diff --git a/PC/python3dll.c b/PC/python3dll.c old mode 100644 new mode 100755 index e5a21ed7c022e7..a53ec63e038f9f --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -1,4 +1,7 @@ -/* Re-export stable Python API */ + +/* Re-export stable Python ABI */ + +/* Generated by Tools/scripts/stable_abi.py */ #ifdef _M_IX86 #define DECORATE "_" @@ -41,6 +44,7 @@ EXPORT_FUNC(_PyTrash_thread_destroy_chain) EXPORT_FUNC(Py_AddPendingCall) EXPORT_FUNC(Py_AtExit) EXPORT_FUNC(Py_BuildValue) +EXPORT_FUNC(Py_BytesMain) EXPORT_FUNC(Py_CompileString) EXPORT_FUNC(Py_DecodeLocale) EXPORT_FUNC(Py_DecRef) @@ -70,7 +74,11 @@ EXPORT_FUNC(Py_GetVersion) EXPORT_FUNC(Py_IncRef) EXPORT_FUNC(Py_Initialize) EXPORT_FUNC(Py_InitializeEx) +EXPORT_FUNC(Py_Is) +EXPORT_FUNC(Py_IsFalse) EXPORT_FUNC(Py_IsInitialized) +EXPORT_FUNC(Py_IsNone) +EXPORT_FUNC(Py_IsTrue) EXPORT_FUNC(Py_LeaveRecursiveCall) EXPORT_FUNC(Py_Main) EXPORT_FUNC(Py_MakePendingCalls) @@ -84,6 +92,7 @@ EXPORT_FUNC(Py_SetPythonHome) EXPORT_FUNC(Py_SetRecursionLimit) EXPORT_FUNC(Py_VaBuildValue) EXPORT_FUNC(Py_XNewRef) +EXPORT_FUNC(PyAiter_Check) EXPORT_FUNC(PyArg_Parse) EXPORT_FUNC(PyArg_ParseTuple) EXPORT_FUNC(PyArg_ParseTupleAndKeywords) @@ -230,14 +239,12 @@ EXPORT_FUNC(PyEval_EvalCodeEx) EXPORT_FUNC(PyEval_EvalFrame) EXPORT_FUNC(PyEval_EvalFrameEx) EXPORT_FUNC(PyEval_GetBuiltins) -EXPORT_FUNC(PyEval_GetCallStats) EXPORT_FUNC(PyEval_GetFrame) EXPORT_FUNC(PyEval_GetFuncDesc) EXPORT_FUNC(PyEval_GetFuncName) EXPORT_FUNC(PyEval_GetGlobals) EXPORT_FUNC(PyEval_GetLocals) EXPORT_FUNC(PyEval_InitThreads) -EXPORT_FUNC(PyEval_ReInitThreads) EXPORT_FUNC(PyEval_ReleaseLock) EXPORT_FUNC(PyEval_ReleaseThread) EXPORT_FUNC(PyEval_RestoreThread) @@ -270,7 +277,6 @@ EXPORT_FUNC(PyGILState_Release) EXPORT_FUNC(PyImport_AddModule) EXPORT_FUNC(PyImport_AddModuleObject) EXPORT_FUNC(PyImport_AppendInittab) -EXPORT_FUNC(PyImport_Cleanup) EXPORT_FUNC(PyImport_ExecCodeModule) EXPORT_FUNC(PyImport_ExecCodeModuleEx) EXPORT_FUNC(PyImport_ExecCodeModuleObject) @@ -291,6 +297,8 @@ EXPORT_FUNC(PyImport_ReloadModule) EXPORT_FUNC(PyIndex_Check) EXPORT_FUNC(PyInterpreterState_Clear) EXPORT_FUNC(PyInterpreterState_Delete) +EXPORT_FUNC(PyInterpreterState_Get) +EXPORT_FUNC(PyInterpreterState_GetDict) EXPORT_FUNC(PyInterpreterState_GetID) EXPORT_FUNC(PyInterpreterState_New) EXPORT_FUNC(PyIter_Check) @@ -339,10 +347,14 @@ EXPORT_FUNC(PyMapping_Length) EXPORT_FUNC(PyMapping_SetItemString) EXPORT_FUNC(PyMapping_Size) EXPORT_FUNC(PyMapping_Values) +EXPORT_FUNC(PyMarshal_ReadObjectFromString) +EXPORT_FUNC(PyMarshal_WriteObjectToString) EXPORT_FUNC(PyMem_Calloc) EXPORT_FUNC(PyMem_Free) EXPORT_FUNC(PyMem_Malloc) EXPORT_FUNC(PyMem_Realloc) +EXPORT_FUNC(PyMember_GetOne) +EXPORT_FUNC(PyMember_SetOne) EXPORT_FUNC(PyMemoryView_FromMemory) EXPORT_FUNC(PyMemoryView_FromObject) EXPORT_FUNC(PyMemoryView_GetContiguous) @@ -421,12 +433,15 @@ EXPORT_FUNC(PyObject_Dir) EXPORT_FUNC(PyObject_Format) EXPORT_FUNC(PyObject_Free) EXPORT_FUNC(PyObject_GC_Del) +EXPORT_FUNC(PyObject_GC_IsFinalized) +EXPORT_FUNC(PyObject_GC_IsTracked) EXPORT_FUNC(PyObject_GC_Track) EXPORT_FUNC(PyObject_GC_UnTrack) EXPORT_FUNC(PyObject_GenericGetAttr) EXPORT_FUNC(PyObject_GenericGetDict) EXPORT_FUNC(PyObject_GenericSetAttr) EXPORT_FUNC(PyObject_GenericSetDict) +EXPORT_FUNC(PyObject_GetAiter) EXPORT_FUNC(PyObject_GetAttr) EXPORT_FUNC(PyObject_GetAttrString) EXPORT_FUNC(PyObject_GetItem) @@ -454,11 +469,6 @@ EXPORT_FUNC(PyObject_SetItem) EXPORT_FUNC(PyObject_Size) EXPORT_FUNC(PyObject_Str) EXPORT_FUNC(PyObject_Type) -EXPORT_FUNC(PyODict_DelItem) -EXPORT_FUNC(PyODict_New) -EXPORT_FUNC(PyODict_SetItem) -EXPORT_FUNC(PyOS_AfterFork) -EXPORT_FUNC(PyOS_CheckStack) EXPORT_FUNC(PyOS_double_to_string) EXPORT_FUNC(PyOS_FSPath) EXPORT_FUNC(PyOS_getsig) @@ -471,9 +481,6 @@ EXPORT_FUNC(PyOS_string_to_double) EXPORT_FUNC(PyOS_strtol) EXPORT_FUNC(PyOS_strtoul) EXPORT_FUNC(PyOS_vsnprintf) -EXPORT_FUNC(PyParser_SimpleParseFileFlags) -EXPORT_FUNC(PyParser_SimpleParseStringFlags) -EXPORT_FUNC(PyParser_SimpleParseStringFlagsFilename) EXPORT_FUNC(PySeqIter_New) EXPORT_FUNC(PySequence_Check) EXPORT_FUNC(PySequence_Concat) @@ -529,6 +536,25 @@ EXPORT_FUNC(PySys_SetObject) EXPORT_FUNC(PySys_SetPath) EXPORT_FUNC(PySys_WriteStderr) EXPORT_FUNC(PySys_WriteStdout) +EXPORT_FUNC(PyThread_acquire_lock) +EXPORT_FUNC(PyThread_acquire_lock_timed) +EXPORT_FUNC(PyThread_allocate_lock) +EXPORT_FUNC(PyThread_create_key) +EXPORT_FUNC(PyThread_delete_key) +EXPORT_FUNC(PyThread_delete_key_value) +EXPORT_FUNC(PyThread_exit_thread) +EXPORT_FUNC(PyThread_free_lock) +EXPORT_FUNC(PyThread_get_key_value) +EXPORT_FUNC(PyThread_get_stacksize) +EXPORT_FUNC(PyThread_get_thread_ident) +EXPORT_FUNC(PyThread_get_thread_native_id) +EXPORT_FUNC(PyThread_GetInfo) +EXPORT_FUNC(PyThread_init_thread) +EXPORT_FUNC(PyThread_ReInitTLS) +EXPORT_FUNC(PyThread_release_lock) +EXPORT_FUNC(PyThread_set_key_value) +EXPORT_FUNC(PyThread_set_stacksize) +EXPORT_FUNC(PyThread_start_new_thread) EXPORT_FUNC(PyThread_tss_alloc) EXPORT_FUNC(PyThread_tss_create) EXPORT_FUNC(PyThread_tss_delete) @@ -688,8 +714,6 @@ EXPORT_DATA(_Py_NoneStruct) EXPORT_DATA(_Py_NotImplementedStruct) EXPORT_DATA(_Py_SwappedOp) EXPORT_DATA(_Py_TrueStruct) -EXPORT_DATA(_PyTrash_delete_later) -EXPORT_DATA(_PyTrash_delete_nesting) EXPORT_DATA(_PyWeakref_CallableProxyType) EXPORT_DATA(_PyWeakref_ProxyType) EXPORT_DATA(_PyWeakref_RefType) @@ -707,6 +731,7 @@ EXPORT_DATA(PyCallIter_Type) EXPORT_DATA(PyCapsule_Type) EXPORT_DATA(PyCFunction_Type) EXPORT_DATA(PyClassMethodDescr_Type) +EXPORT_DATA(PyCodec_Unregister) EXPORT_DATA(PyComplex_Type) EXPORT_DATA(PyDict_Type) EXPORT_DATA(PyDictItems_Type) @@ -715,6 +740,9 @@ EXPORT_DATA(PyDictIterKey_Type) EXPORT_DATA(PyDictIterValue_Type) EXPORT_DATA(PyDictKeys_Type) EXPORT_DATA(PyDictProxy_Type) +EXPORT_DATA(PyDictRevIterItem_Type) +EXPORT_DATA(PyDictRevIterKey_Type) +EXPORT_DATA(PyDictRevIterValue_Type) EXPORT_DATA(PyDictValues_Type) EXPORT_DATA(PyEllipsis_Type) EXPORT_DATA(PyEnum_Type) @@ -801,12 +829,6 @@ EXPORT_DATA(PyMemoryView_Type) EXPORT_DATA(PyMethodDescr_Type) EXPORT_DATA(PyModule_Type) EXPORT_DATA(PyModuleDef_Type) -EXPORT_DATA(PyNullImporter_Type) -EXPORT_DATA(PyODict_Type) -EXPORT_DATA(PyODictItems_Type) -EXPORT_DATA(PyODictIter_Type) -EXPORT_DATA(PyODictKeys_Type) -EXPORT_DATA(PyODictValues_Type) EXPORT_DATA(PyOS_InputHook) EXPORT_DATA(PyProperty_Type) EXPORT_DATA(PyRange_Type) @@ -816,7 +838,6 @@ EXPORT_DATA(PySeqIter_Type) EXPORT_DATA(PySet_Type) EXPORT_DATA(PySetIter_Type) EXPORT_DATA(PySlice_Type) -EXPORT_DATA(PySortWrapper_Type) EXPORT_DATA(PySuper_Type) EXPORT_DATA(PyTraceBack_Type) EXPORT_DATA(PyTuple_Type) diff --git a/Tools/scripts/README b/Tools/scripts/README index 7fc51a10ee902c..ba0f662c45f0c5 100644 --- a/Tools/scripts/README +++ b/Tools/scripts/README @@ -58,6 +58,7 @@ reindent-rst.py Fix-up reStructuredText file whitespace rgrep.py Reverse grep through a file (useful for big logfiles) run_tests.py Run the test suite with more sensible default options serve.py Small wsgiref-based web server, used in make serve in Doc +stable_abi.py Stable ABI checks and file generators. suff.py Sort a list of files by suffix texi2html.py Convert GNU texinfo files into HTML untabify.py Replace tabs with spaces in argument files diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 1690cfce1727d7..399153db81c254 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -1,13 +1,28 @@ -#!/usr/bin/env python +"""Check the stable ABI manifest or generate files from it +By default, the tool only checks existing files/libraries. +Pass --generate to recreate auto-generated files instead. + +For actions that take a FILENAME, the filename can be left out to use a default +(relative to the manifest file, as they appear in the CPython codebase). +""" + +from functools import partial +from pathlib import Path +import dataclasses +import subprocess +import sysconfig import argparse -import glob +import textwrap +import difflib +import shutil +import sys +import os import os.path -import pathlib +import io import re -import subprocess -import sys -import sysconfig + +MISSING = object() EXCLUDED_HEADERS = { "bytes_methods.h", @@ -27,10 +42,303 @@ "token.h", "ucnhash.h", } - MACOS = (sys.platform == "darwin") +UNIXY = MACOS or (sys.platform == "linux") # XXX should this be "not Windows"? + + +# The stable ABI manifest (Misc/stable_abi.txt) exists only to fill the +# following dataclasses. +# Feel free to change its syntax (and the `parse_manifest` function) +# to better serve that purpose (while keeping it human-readable). + + at dataclasses.dataclass +class Manifest: + """Collection of `ABIItem`s forming the stable ABI/limited API.""" + + kind = 'manifest' + contents: dict = dataclasses.field(default_factory=dict) + + def add(self, item): + if item.name in self.contents: + # We assume that stable ABI items do not share names, + # even if they're diferent kinds (e.g. function vs. macro). + raise ValueError(f'duplicate ABI item {item.name}') + self.contents[item.name] = item + + @property + def feature_defines(self): + """Return all feature defines which affect what's available + + These are e.g. HAVE_FORK and MS_WINDOWS. + """ + return set(item.ifdef for item in self.contents.values()) - {None} + + def select(self, kinds, *, include_abi_only=True, ifdef=None): + """Yield selected items of the manifest + + kinds: set of requested kinds, e.g. {'function', 'macro'} + include_abi_only: if True (default), include all items of the + stable ABI. + If False, include only items from the limited API + (i.e. items people should use today) + ifdef: set of feature defines (e.g. {'HAVE_FORK', 'MS_WINDOWS'}). + If None (default), items are not filtered by this. (This is + different from the empty set, which filters out all such + conditional items.) + """ + for name, item in sorted(self.contents.items()): + if item.kind not in kinds: + continue + if item.abi_only and not include_abi_only: + continue + if (ifdef is not None + and item.ifdef is not None + and item.ifdef not in ifdef): + continue + yield item + + def dump(self): + """Yield lines to recreate the manifest file (sans comments/newlines)""" + # Recursive in preparation for struct member & function argument nodes + for item in self.contents.values(): + yield from item.dump(indent=0) + + at dataclasses.dataclass +class ABIItem: + """Information on one item (function, macro, struct, etc.)""" + + kind: str + name: str + added: str = None + contents: list = dataclasses.field(default_factory=list) + abi_only: bool = False + ifdef: str = None + + KINDS = frozenset({ + 'struct', 'function', 'macro', 'data', 'const', 'typedef', + }) + + def dump(self, indent=0): + yield f"{' ' * indent}{self.kind} {self.name}" + if self.added: + yield f"{' ' * (indent+1)}added {self.added}" + if self.ifdef: + yield f"{' ' * (indent+1)}ifdef {self.ifdef}" + if self.abi_only: + yield f"{' ' * (indent+1)}abi_only" + +def parse_manifest(file): + """Parse the given file (iterable of lines) to a Manifest""" + + LINE_RE = re.compile('(?P[ ]*)(?P[^ ]+)[ ]*(?P.*)') + manifest = Manifest() + + # parents of currently processed line, each with its indentation level + levels = [(manifest, -1)] + + def raise_error(msg): + raise SyntaxError(f'line {lineno}: {msg}') + + for lineno, line in enumerate(file, start=1): + line, sep, comment = line.partition('#') + line = line.rstrip() + if not line: + continue + match = LINE_RE.fullmatch(line) + if not match: + raise_error(f'invalid syntax: {line}') + level = len(match['indent']) + kind = match['kind'] + content = match['content'] + while level <= levels[-1][1]: + levels.pop() + parent = levels[-1][0] + entry = None + if kind in ABIItem.KINDS: + if parent.kind not in {'manifest'}: + raise_error(f'{kind} cannot go in {parent.kind}') + entry = ABIItem(kind, content) + parent.add(entry) + elif kind in {'added', 'ifdef'}: + if parent.kind not in ABIItem.KINDS: + raise_error(f'{kind} cannot go in {parent.kind}') + setattr(parent, kind, content) + elif kind in {'abi_only'}: + if parent.kind not in {'function', 'data'}: + raise_error(f'{kind} cannot go in {parent.kind}') + parent.abi_only = True + else: + raise_error(f"unknown kind {kind!r}") + levels.append((entry, level)) + return manifest + +# The tool can run individual "actions". +# Most actions are "generators", which generate a single file from the +# manifest. (Checking works by generating a temp file & comparing.) +# Other actions, like "--unixy-check", don't work on a single file. + +generators = [] +def generator(var_name, default_path): + """Decorates a file generator: function that writes to a file""" + def _decorator(func): + func.var_name = var_name + func.arg_name = '--' + var_name.replace('_', '-') + func.default_path = default_path + generators.append(func) + return func + return _decorator + + + at generator("python3dll", 'PC/python3dll.c') +def gen_python3dll(manifest, args, outfile): + """Generate/check the source for the Windows stable ABI library""" + write = partial(print, file=outfile) + write(textwrap.dedent(r""" + /* Re-export stable Python ABI */ + + /* Generated by Tools/scripts/stable_abi.py */ + + #ifdef _M_IX86 + #define DECORATE "_" + #else + #define DECORATE + #endif + + #define EXPORT_FUNC(name) \ + __pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name)) + #define EXPORT_DATA(name) \ + __pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name ",DATA")) + """)) + + def sort_key(item): + return item.name.lower() + + for item in sorted( + manifest.select( + {'function'}, include_abi_only=True, ifdef={'MS_WINDOWS'}), + key=sort_key): + write(f'EXPORT_FUNC({item.name})') + + write() + + for item in sorted( + manifest.select( + {'data'}, include_abi_only=True, ifdef={'MS_WINDOWS'}), + key=sort_key): + write(f'EXPORT_DATA({item.name})') + + + at generator("doc_list", 'Doc/data/stable_abi.dat') +def gen_doc_annotations(manifest, args, outfile): + """Generate/check the stable ABI list for documentation annotations""" + write = partial(print, file=outfile) + write("# Generated by Tools/scripts/stable_abi.py") + write() + for item in manifest.select(ABIItem.KINDS, include_abi_only=False): + write(item.name) + + +def generate_or_check(manifest, args, path, func): + """Generate/check a file with a single generator + + Return True if successful; False if a comparison failed. + """ + + outfile = io.StringIO() + func(manifest, args, outfile) + generated = outfile.getvalue() + existing = path.read_text() + + if generated != existing: + if args.generate: + path.write_text(generated) + else: + print(f'File {path} differs from expected!') + diff = difflib.unified_diff( + generated.splitlines(), existing.splitlines(), + str(path), '', + lineterm='', + ) + for line in diff: + print(line) + return False + return True + + +def do_unixy_check(manifest, args): + """Check headers & library using "Unixy" tools (GCC/clang, binutils)""" + okay = True -def get_exported_symbols(library, dynamic=False): + # Get all macros first: we'll need feature macros like HAVE_FORK and + # MS_WINDOWS for everything else + present_macros = gcc_get_limited_api_macros(['Include/Python.h']) + feature_defines = manifest.feature_defines & present_macros + + # Check that we have all neded macros + expected_macros = set( + item.name for item in manifest.select({'macro'}) + ) + missing_macros = expected_macros - present_macros + okay &= _report_unexpected_items( + missing_macros, + 'Some macros from are not defined from "Include/Python.h"' + + 'with Py_LIMITED_API:') + + expected_symbols = set(item.name for item in manifest.select( + {'function', 'data'}, include_abi_only=True, ifdef=feature_defines, + )) + + # Check the static library (*.a) + LIBRARY = sysconfig.get_config_var("LIBRARY") + if not LIBRARY: + raise Exception("failed to get LIBRARY variable from sysconfig") + if os.path.exists(LIBRARY): + okay &= binutils_check_library( + manifest, LIBRARY, expected_symbols, dynamic=False) + + # Check the dynamic library (*.so) + LDLIBRARY = sysconfig.get_config_var("LDLIBRARY") + if not LDLIBRARY: + raise Exception("failed to get LDLIBRARY variable from sysconfig") + okay &= binutils_check_library( + manifest, LDLIBRARY, expected_symbols, dynamic=False) + + # Check definitions in the header files + expected_defs = set(item.name for item in manifest.select( + {'function', 'data'}, include_abi_only=False, ifdef=feature_defines, + )) + found_defs = gcc_get_limited_api_definitions(['Include/Python.h']) + missing_defs = expected_defs - found_defs + okay &= _report_unexpected_items( + missing_defs, + 'Some expected declarations were not declared in ' + + '"Include/Python.h" with Py_LIMITED_API:') + + # Some Limited API macros are defined in terms of private symbols. + # These are not part of Limited API (even though they're defined with + # Py_LIMITED_API). They must be part of the Stable ABI, though. + private_symbols = {n for n in expected_symbols if n.startswith('_')} + extra_defs = found_defs - expected_defs - private_symbols + okay &= _report_unexpected_items( + extra_defs, + 'Some extra declarations were found in "Include/Python.h" ' + + 'with Py_LIMITED_API:') + + return okay + + +def _report_unexpected_items(items, msg): + """If there are any `items`, report them using "msg" and return false""" + if items: + print(msg, file=sys.stderr) + for item in sorted(items): + print(' -', item, file=sys.stderr) + return False + return True + + +def binutils_get_exported_symbols(library, dynamic=False): + """Retrieve exported symbols using the nm(1) tool from binutils""" # Only look at dynamic symbols args = ["nm", "--no-sort"] if dynamic: @@ -61,86 +369,89 @@ def get_exported_symbols(library, dynamic=False): yield symbol -def check_library(stable_abi_file, library, abi_funcs, dynamic=False): - available_symbols = set(get_exported_symbols(library, dynamic)) - missing_symbols = abi_funcs - available_symbols +def binutils_check_library(manifest, library, expected_symbols, dynamic): + """Check that library exports all expected_symbols""" + available_symbols = set(binutils_get_exported_symbols(library, dynamic)) + missing_symbols = expected_symbols - available_symbols if missing_symbols: - raise Exception( - f"""\ -Some symbols from the limited API are missing: {', '.join(missing_symbols)} + print(textwrap.dedent(f"""\ + Some symbols from the limited API are missing from {library}: + {', '.join(missing_symbols)} -This error means that there are some missing symbols among the ones exported -in the Python library ("libpythonx.x.a" or "libpythonx.x.so"). This normally -means that some symbol, function implementation or a prototype, belonging to -a symbol in the limited API has been deleted or is missing. + This error means that there are some missing symbols among the + ones exported in the library. + This normally means that some symbol, function implementation or + a prototype belonging to a symbol in the limited API has been + deleted or is missing. + """), file=sys.stderr) + return False + return True -Check if this was a mistake and if not, update the file containing the limited -API symbols. This file is located at: -{stable_abi_file} +def gcc_get_limited_api_macros(headers): + """Get all limited API macros from headers. -You can read more about the limited API and its contracts at: - -https://docs.python.org/3/c-api/stable.html - -And in PEP 384: - -https://www.python.org/dev/peps/pep-0384/ -""" - ) + Runs the preprocesor over all the header files in "Include" setting + "-DPy_LIMITED_API" to the correct value for the running version of the + interpreter and extracting all macro definitions (via adding -dM to the + compiler arguments). + Requires Python built with a GCC-compatible compiler. (clang might work) + """ -def generate_limited_api_symbols(args): - library = sysconfig.get_config_var("LIBRARY") - ldlibrary = sysconfig.get_config_var("LDLIBRARY") - if ldlibrary != library: - raise Exception("Limited ABI symbols can only be generated from a static build") - available_symbols = { - symbol for symbol in get_exported_symbols(library) if symbol.startswith("Py") - } + api_hexversion = sys.version_info.major << 24 | sys.version_info.minor << 16 - headers = [ - file - for file in pathlib.Path("Include").glob("*.h") - if file.name not in EXCLUDED_HEADERS - ] - stable_data, stable_exported_data, stable_functions = get_limited_api_definitions( - headers + preprocesor_output_with_macros = subprocess.check_output( + sysconfig.get_config_var("CC").split() + + [ + # Prevent the expansion of the exported macros so we can + # capture them later + "-DSIZEOF_WCHAR_T=4", # The actual value is not important + f"-DPy_LIMITED_API={api_hexversion}", + "-I.", + "-I./Include", + "-dM", + "-E", + ] + + [str(file) for file in headers], + text=True, ) - stable_symbols = { - symbol - for symbol in (stable_functions | stable_exported_data | stable_data) - if symbol.startswith("Py") and symbol in available_symbols - } - with open(args.output_file, "w") as output_file: - output_file.write(f"# File generated by 'make regen-limited-abi'\n") - output_file.write( - f"# This is NOT an authoritative list of stable ABI symbols\n" + return { + target + for target in re.findall( + r"#define (\w+)", preprocesor_output_with_macros ) - for symbol in sorted(stable_symbols): - output_file.write(f"{symbol}\n") + } -def get_limited_api_definitions(headers): - """Run the preprocesor over all the header files in "Include" setting - "-DPy_LIMITED_API" to the correct value for the running version of the interpreter. +def gcc_get_limited_api_definitions(headers): + """Get all limited API definitions from headers. - The limited API symbols will be extracted from the output of this command as it includes - the prototypes and definitions of all the exported symbols that are in the limited api. + Run the preprocesor over all the header files in "Include" setting + "-DPy_LIMITED_API" to the correct value for the running version of the + interpreter. + + The limited API symbols will be extracted from the output of this command + as it includes the prototypes and definitions of all the exported symbols + that are in the limited api. This function does *NOT* extract the macros defined on the limited API + + Requires Python built with a GCC-compatible compiler. (clang might work) """ + api_hexversion = sys.version_info.major << 24 | sys.version_info.minor << 16 preprocesor_output = subprocess.check_output( sysconfig.get_config_var("CC").split() + [ - # Prevent the expansion of the exported macros so we can capture them later + # Prevent the expansion of the exported macros so we can capture + # them later "-DPyAPI_FUNC=__PyAPI_FUNC", "-DPyAPI_DATA=__PyAPI_DATA", "-DEXPORT_DATA=__EXPORT_DATA", "-D_Py_NO_RETURN=", "-DSIZEOF_WCHAR_T=4", # The actual value is not important - f"-DPy_LIMITED_API={sys.version_info.major << 24 | sys.version_info.minor << 16}", + f"-DPy_LIMITED_API={api_hexversion}", "-I.", "-I./Include", "-E", @@ -156,64 +467,126 @@ def get_limited_api_definitions(headers): re.findall(r"__EXPORT_DATA\((.*?)\)", preprocesor_output) ) stable_data = set( - re.findall(r"__PyAPI_DATA\(.*?\)\s*\(?(.*?)\)?\s*;", preprocesor_output) + re.findall(r"__PyAPI_DATA\(.*?\)[\s\*\(]*([^);]*)\)?.*;", preprocesor_output) ) - return stable_data, stable_exported_data, stable_functions - - -def check_symbols(parser_args): - with open(parser_args.stable_abi_file, "r") as filename: - abi_funcs = { - symbol - for symbol in filename.read().splitlines() - if symbol and not symbol.startswith("#") - } - - try: - # static library - LIBRARY = sysconfig.get_config_var("LIBRARY") - if not LIBRARY: - raise Exception("failed to get LIBRARY variable from sysconfig") - if os.path.exists(LIBRARY): - check_library(parser_args.stable_abi_file, LIBRARY, abi_funcs) - - # dynamic library - LDLIBRARY = sysconfig.get_config_var("LDLIBRARY") - if not LDLIBRARY: - raise Exception("failed to get LDLIBRARY variable from sysconfig") - if LDLIBRARY != LIBRARY: - check_library( - parser_args.stable_abi_file, LDLIBRARY, abi_funcs, dynamic=True - ) - except Exception as e: - print(e, file=sys.stderr) - sys.exit(1) + return stable_data | stable_exported_data | stable_functions def main(): - parser = argparse.ArgumentParser(description="Process some integers.") - subparsers = parser.add_subparsers() - check_parser = subparsers.add_parser( - "check", help="Check the exported symbols against a given ABI file" + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "file", type=Path, metavar='FILE', + help="file with the stable abi manifest", ) - check_parser.add_argument( - "stable_abi_file", type=str, help="File with the stable abi functions" + parser.add_argument( + "--generate", action='store_true', + help="generate file(s), rather than just checking them", ) - check_parser.set_defaults(func=check_symbols) - generate_parser = subparsers.add_parser( - "generate", - help="Generate symbols from the header files and the exported symbols", + parser.add_argument( + "--generate-all", action='store_true', + help="as --generate, but generate all file(s) using default filenames." + + " (unlike --all, does not run any extra checks)", ) - generate_parser.add_argument( - "output_file", type=str, help="File to dump the symbols to" + parser.add_argument( + "-a", "--all", action='store_true', + help="run all available checks using default filenames", + ) + parser.add_argument( + "-l", "--list", action='store_true', + help="list available generators and their default filenames; then exit", + ) + parser.add_argument( + "--dump", action='store_true', + help="dump the manifest contents (used for debugging the parser)", + ) + + actions_group = parser.add_argument_group('actions') + for gen in generators: + actions_group.add_argument( + gen.arg_name, dest=gen.var_name, + type=str, nargs="?", default=MISSING, + metavar='FILENAME', + help=gen.__doc__, + ) + actions_group.add_argument( + '--unixy-check', action='store_true', + help=do_unixy_check.__doc__, ) - generate_parser.set_defaults(func=generate_limited_api_symbols) args = parser.parse_args() - if "func" not in args: - parser.error("Either 'check' or 'generate' must be used") - sys.exit(1) - args.func(args) + base_path = args.file.parent.parent + + if args.list: + for gen in generators: + print(f'{gen.arg_name}: {base_path / gen.default_path}') + sys.exit(0) + + run_all_generators = args.generate_all + + if args.generate_all: + args.generate = True + + if args.all: + run_all_generators = True + args.unixy_check = True + + with args.file.open() as file: + manifest = parse_manifest(file) + + # Remember results of all actions (as booleans). + # At the end we'll check that at least one action was run, + # and also fail if any are false. + results = {} + + if args.dump: + for line in manifest.dump(): + print(line) + results['dump'] = True + + for gen in generators: + filename = getattr(args, gen.var_name) + if filename is None or (run_all_generators and filename is MISSING): + filename = base_path / gen.default_path + elif filename is MISSING: + continue + + results[gen.var_name] = generate_or_check(manifest, args, filename, gen) + + if args.unixy_check: + results['unixy_check'] = do_unixy_check(manifest, args) + + if not results: + if args.generate: + parser.error('No file specified. Use --help for usage.') + parser.error('No check specified. Use --help for usage.') + + failed_results = [name for name, result in results.items() if not result] + + if failed_results: + raise Exception(f""" + These checks related to the stable ABI did not succeed: + {', '.join(failed_results)} + + If you see diffs in the output, files derived from the stable + ABI manifest the were not regenerated. + Run `make regen-limited-abi` to fix this. + + Otherwise, see the error(s) above. + + The stable ABI manifest is at: {args.file} + Note that there is a process to follow when modifying it. + + You can read more about the limited API and its contracts at: + + https://docs.python.org/3/c-api/stable.html + + And in PEP 384: + + https://www.python.org/dev/peps/pep-0384/ + """) if __name__ == "__main__": From webhook-mailer at python.org Thu Apr 29 06:48:26 2021 From: webhook-mailer at python.org (terryjreedy) Date: Thu, 29 Apr 2021 10:48:26 -0000 Subject: [Python-checkins] bpo-37892: Use space indents in IDLE Shell (GH-25678) Message-ID: https://github.com/python/cpython/commit/8ec2f0dc0cd096b7a851b1a41e458daa23bf1ffc commit: 8ec2f0dc0cd096b7a851b1a41e458daa23bf1ffc branch: master author: Terry Jan Reedy committer: terryjreedy date: 2021-04-29T06:48:18-04:00 summary: bpo-37892: Use space indents in IDLE Shell (GH-25678) Adding a newline to the prompt moves it out of the way of user code input, which now starts at the left margin, along with continuation lines. files: A Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst M Lib/idlelib/NEWS.txt M Lib/idlelib/pyshell.py diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index ca4280ff4cff8d..83afe3ecac908c 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -4,6 +4,13 @@ Released on 2021-10-04? ========================= +bpo-37892: Change Shell input indents from tabs to spaces. + +bpo-37903: Move the Shell input prompt to a side bar. + +bpo-43655: Make window managers on macOS and X Window recognize +IDLE dialog windows as dialogs. + bpo-43283: Document why printing to IDLE's Shell is often slower than printing to a system terminal and that it can be made faster by pre-formatting a single string before printing. diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 5830b7aa31a72c..447e9ec3e47563 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -889,11 +889,11 @@ def __init__(self, flist=None): OutputWindow.__init__(self, flist, None, None) - self.usetabs = True + self.usetabs = False # indentwidth must be 8 when using tabs. See note in EditorWindow: - self.indentwidth = 8 + self.indentwidth = 4 - self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>> ' + self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>>\n' self.prompt_last_line = self.sys_ps1.split('\n')[-1] self.prompt = self.sys_ps1 # Changes when debug active diff --git a/Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst b/Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst new file mode 100644 index 00000000000000..c8bb84bb400413 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst @@ -0,0 +1 @@ +Indent IDLE Shell input with spaces instead of tabs From webhook-mailer at python.org Thu Apr 29 07:07:13 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 29 Apr 2021 11:07:13 -0000 Subject: [Python-checkins] bpo-43774: Enhance debug build documentation (GH-25712) Message-ID: https://github.com/python/cpython/commit/abfd6388cdba376a72686df52a9a98b2d558271b commit: abfd6388cdba376a72686df52a9a98b2d558271b branch: master author: Victor Stinner committer: vstinner date: 2021-04-29T13:06:59+02:00 summary: bpo-43774: Enhance debug build documentation (GH-25712) * Add also references to --with-trace-refs option. * Move _ob_next and _ob_prev at the end, since they don't exist by default and are related to debug. files: M Doc/c-api/intro.rst M Doc/c-api/typeobj.rst M Doc/using/configure.rst M Doc/whatsnew/3.8.rst diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst index 1223059ce9aca..2d85d30702df9 100644 --- a/Doc/c-api/intro.rst +++ b/Doc/c-api/intro.rst @@ -749,34 +749,12 @@ It is also implied by the presence of the not-Python-specific :c:macro:`_DEBUG` macro. When :c:macro:`Py_DEBUG` is enabled in the Unix build, compiler optimization is disabled. -In addition to the reference count debugging described below, the following -extra checks are performed: +In addition to the reference count debugging described below, extra checks are +performed, see :ref:`Python Debug Build `. -* Extra checks are added to the object allocator. - -* Extra checks are added to the parser and compiler. - -* Downcasts from wide types to narrow types are checked for loss of information. - -* A number of assertions are added to the dictionary and set implementations. - In addition, the set object acquires a :meth:`test_c_api` method. - -* Sanity checks of the input arguments are added to frame creation. - -* The storage for ints is initialized with a known invalid pattern to catch - reference to uninitialized digits. - -* Low-level tracing and extra exception checking are added to the runtime - virtual machine. - -* Extra checks are added to the memory arena implementation. - -* Extra debugging is added to the thread module. - -There may be additional checks not mentioned here. - -Defining :c:macro:`Py_TRACE_REFS` enables reference tracing. When defined, a -circular doubly linked list of active objects is maintained by adding two extra +Defining :c:macro:`Py_TRACE_REFS` enables reference tracing +(see the :option:`configure --with-trace-refs option <--with-trace-refs>`). +When defined, a circular doubly linked list of active objects is maintained by adding two extra fields to every :c:type:`PyObject`. Total allocations are tracked as well. Upon exit, all existing references are printed. (In interactive mode this happens after every statement run by the interpreter.) diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 2af3b9a2e9d44..85f0262d10138 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -482,27 +482,6 @@ metatype) initializes :c:member:`~PyTypeObject.tp_itemsize`, which means that it type objects) *must* have the :attr:`ob_size` field. -.. c:member:: PyObject* PyObject._ob_next - PyObject* PyObject._ob_prev - - These fields are only present when the macro ``Py_TRACE_REFS`` is defined. - - Their initialization to ``NULL`` is taken care of by the - ``PyObject_HEAD_INIT`` macro. For :ref:`statically allocated objects - `, these fields always remain ``NULL``. For :ref:`dynamically - allocated objects `, these two fields are used to link the - object into a doubly-linked list of *all* live objects on the heap. - - This could be used for various debugging purposes; currently the only uses - are the :func:`sys.getobjects` function and to print the objects that are - still alive at the end of a run when the environment variable - :envvar:`PYTHONDUMPREFS` is set. - - **Inheritance:** - - These fields are not inherited by subtypes. - - .. c:member:: Py_ssize_t PyObject.ob_refcnt This is the type object's reference count, initialized to ``1`` by the @@ -540,6 +519,28 @@ type objects) *must* have the :attr:`ob_size` field. This field is inherited by subtypes. +.. c:member:: PyObject* PyObject._ob_next + PyObject* PyObject._ob_prev + + These fields are only present when the macro ``Py_TRACE_REFS`` is defined + (see the :option:`configure --with-trace-refs option <--with-trace-refs>`). + + Their initialization to ``NULL`` is taken care of by the + ``PyObject_HEAD_INIT`` macro. For :ref:`statically allocated objects + `, these fields always remain ``NULL``. For :ref:`dynamically + allocated objects `, these two fields are used to link the + object into a doubly-linked list of *all* live objects on the heap. + + This could be used for various debugging purposes; currently the only uses + are the :func:`sys.getobjects` function and to print the objects that are + still alive at the end of a run when the environment variable + :envvar:`PYTHONDUMPREFS` is set. + + **Inheritance:** + + These fields are not inherited by subtypes. + + PyVarObject Slots ----------------- diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index e7fad7f2e622b..4f3953ea5d758 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -208,43 +208,48 @@ recommended for best performance. .. _debug-build: -Debug build ------------ +Python Debug Build +------------------ A debug build is Python built with the :option:`--with-pydebug` configure option. Effects of a debug build: -* Define ``Py_DEBUG`` and ``Py_REF_DEBUG`` macros. +* Display all warnings by default: the list of default warning filters is empty + in the :mod:`warnings` module. * Add ``d`` to :data:`sys.abiflags`. * Add :func:`sys.gettotalrefcount` function. * Add :option:`-X showrefcount <-X>` command line option. * Add :envvar:`PYTHONTHREADDEBUG` environment variable. * Add support for the ``__ltrace__`` variable: enable low-level tracing in the bytecode evaluation loop if the variable is defined. -* The list of default warning filters is empty in the :mod:`warnings` module. -* Install debug hooks on memory allocators to detect buffer overflow and other - memory errors: see :c:func:`PyMem_SetupDebugHooks`. -* Build Python with assertions (don't set ``NDEBUG`` macro): - ``assert(...);`` and ``_PyObject_ASSERT(...);``. - See also the :option:`--with-assertions` configure option. -* Unicode and int objects are created with their memory filled with a pattern - to help detecting uninitialized bytes. -* Many functions ensure that are not called with an exception raised, since - they can clear or replace the current exception. -* The garbage collector (:func:`gc.collect` function) runs some basic checks on - objects consistency. -* More generally, add runtime checks, code surroundeded by ``#ifdef Py_DEBUG`` - and ``#endif``. +* Install :ref:`debug hooks on memory allocators ` + to detect buffer overflow and other memory errors. +* Define ``Py_DEBUG`` and ``Py_REF_DEBUG`` macros. +* Add runtime checks: code surroundeded by ``#ifdef Py_DEBUG`` and ``#endif``. + Enable ``assert(...)`` and ``_PyObject_ASSERT(...)`` assertions: don't set + the ``NDEBUG`` macro (see also the :option:`--with-assertions` configure + option). Main runtime checks: + + * Add sanity checks on the function arguments. + * Unicode and int objects are created with their memory filled with a pattern + to detect usage of uninitialized objects. + * Ensure that functions which can clear or replace the current exception are + not called with an exception raised. + * The garbage collector (:func:`gc.collect` function) runs some basic checks + on objects consistency. + * The :c:macro:`Py_SAFE_DOWNCAST()` macro checks for integer underflow and + overflow when downcasting from wide types to narrow types. See also the :ref:`Python Development Mode ` and the :option:`--with-trace-refs` configure option. .. versionchanged:: 3.8 Release builds and debug builds are now ABI compatible: defining the - ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which - introduces the only ABI incompatibility. + ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro (see the + :option:`--with-trace-refs` option), which introduces the only ABI + incompatibility. Debug options diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index c958bf4db09e5..f1a903624f4c2 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -215,8 +215,8 @@ Release builds and :ref:`debug builds ` are now ABI compatible: def ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` macro, which adds the :func:`sys.getobjects` function and the :envvar:`PYTHONDUMPREFS` -environment variable, can be set using the new ``./configure --with-trace-refs`` -build option. +environment variable, can be set using the new :option:`./configure +--with-trace-refs <--with-trace-refs>` build option. (Contributed by Victor Stinner in :issue:`36465`.) On Unix, C extensions are no longer linked to libpython except on Android From webhook-mailer at python.org Thu Apr 29 07:37:42 2021 From: webhook-mailer at python.org (methane) Date: Thu, 29 Apr 2021 11:37:42 -0000 Subject: [Python-checkins] bpo-43651: Fix test_logging (GH-25715) Message-ID: https://github.com/python/cpython/commit/53dd6c99b39d90935c00bc1558582e494641248e commit: 53dd6c99b39d90935c00bc1558582e494641248e branch: master author: Inada Naoki committer: methane date: 2021-04-29T20:37:32+09:00 summary: bpo-43651: Fix test_logging (GH-25715) files: M Lib/test/test_logging.py diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 0f1d2745dddbb..ee00a32026f65 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1582,8 +1582,7 @@ def cleanup(h1, fn): h1.close() os.remove(fn) - #with self.check_no_resource_warning(): - if 1: + with self.check_no_resource_warning(): fd, fn = tempfile.mkstemp(".log", "test_logging-X-") os.close(fd) From webhook-mailer at python.org Thu Apr 29 08:13:00 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 29 Apr 2021 12:13:00 -0000 Subject: [Python-checkins] bpo-42739: Don't use sentinels to mark end of line table. (GH-25657) Message-ID: https://github.com/python/cpython/commit/c76da79b37d2bcbe575cc927ba0a9b7a9ce465db commit: c76da79b37d2bcbe575cc927ba0a9b7a9ce465db branch: master author: Mark Shannon committer: markshannon date: 2021-04-29T13:12:51+01:00 summary: bpo-42739: Don't use sentinels to mark end of line table. (GH-25657) * Add length parameter to PyLineTable_InitAddressRange and doen't use sentinel values at end of table. Makes the line number table more robust. * Update PyCodeAddressRange to match PEP 626. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst M Include/cpython/code.h M Lib/ctypes/test/test_values.py M Lib/importlib/_bootstrap_external.py M Lib/test/test_code.py M Lib/test/test_dis.py M Objects/codeobject.c M Objects/lnotab_notes.txt M Python/compile.c M Python/frozen_hello.h M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h diff --git a/Include/cpython/code.h b/Include/cpython/code.h index c3065bb8c4ee87..e810eb4f816f3a 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -135,12 +135,17 @@ PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); /* for internal use only */ +struct _opaque { + int computed_line; + char *lo_next; + char *limit; +}; + typedef struct _line_offsets { int ar_start; int ar_end; int ar_line; - int ar_computed_line; - char *lo_next; + struct _opaque opaque; } PyCodeAddressRange; /* Update *bounds to describe the first and one-past-the-last instructions in the @@ -170,7 +175,7 @@ PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds); /** Out of process API for initializing the line number table. */ -void PyLineTable_InitAddressRange(char *linetable, int firstlineno, PyCodeAddressRange *range); +void PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range); /** API for traversing the line number table. */ int PyLineTable_NextAddressRange(PyCodeAddressRange *range); diff --git a/Lib/ctypes/test/test_values.py b/Lib/ctypes/test/test_values.py index b38b63f870a653..7514fe84ff53c8 100644 --- a/Lib/ctypes/test/test_values.py +++ b/Lib/ctypes/test/test_values.py @@ -80,9 +80,9 @@ class struct_frozen(Structure): continue items.append((entry.name.decode("ascii"), entry.size)) - expected = [("__hello__", 139), - ("__phello__", -139), - ("__phello__.spam", 139), + expected = [("__hello__", 137), + ("__phello__", -137), + ("__phello__.spam", 137), ] self.assertEqual(items, expected, "PyImport_FrozenModules example " "in Doc/library/ctypes.rst may be out of date") diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 6620b241fcf6ca..2b2818715e9e6a 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -350,6 +350,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). # Python 3.10b1 3436 (Add GEN_START bytecode #43683) # Python 3.10b1 3437 (Undo making 'annotations' future by default - We like to dance among core devs!) +# Python 3.10b1 3438 Safer line number table handling. # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -359,7 +360,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3437).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3438).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 467e8e5e337f10..6aaf04ca6dde5e 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -264,6 +264,12 @@ def func2(): new_code = code.replace(**{attr: value}) self.assertEqual(getattr(new_code, attr), value) + def test_empty_linetable(self): + def func(): + pass + new_code = code = func.__code__.replace(co_linetable=b'') + self.assertEqual(list(new_code.co_lines()), []) + def isinterned(s): return s is sys.intern(('_' + s + '_')[1:-1]) diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 8e36ae266b94b1..8d059352bc6d10 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -172,7 +172,7 @@ def bug42562(): # Set line number for 'pass' to None -bug42562.__code__ = bug42562.__code__.replace(co_linetable=b'\x04\x80\xff\x80') +bug42562.__code__ = bug42562.__code__.replace(co_linetable=b'\x04\x80') dis_bug42562 = """\ diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst new file mode 100644 index 00000000000000..b59f3e1b6ccc5d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst @@ -0,0 +1,4 @@ +The internal representation of line number tables is changed to not use +sentinels, and an explicit length parameter is added to the out of process +API function ``PyLineTable_InitAddressRange``. This makes the handling of +line number tables more robust in some circumstances. diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 9bb49f108be0c6..c76ac900b3a5e8 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -456,15 +456,15 @@ code_getlnotab(PyCodeObject *code, void *closure) } _PyCode_InitAddressRange(code, &bounds); while (PyLineTable_NextAddressRange(&bounds)) { - if (bounds.ar_computed_line != line) { + if (bounds.opaque.computed_line != line) { int bdelta = bounds.ar_start - code_offset; - int ldelta = bounds.ar_computed_line - line; + int ldelta = bounds.opaque.computed_line - line; if (!emit_delta(&bytes, bdelta, ldelta, &table_offset)) { Py_DECREF(bytes); return NULL; } code_offset = bounds.ar_start; - line = bounds.ar_computed_line; + line = bounds.opaque.computed_line; } } _PyBytes_Resize(&bytes, table_offset); @@ -1120,20 +1120,20 @@ code_linesiterator(PyCodeObject *code, PyObject *Py_UNUSED(args)) static void retreat(PyCodeAddressRange *bounds) { - int ldelta = ((signed char *)bounds->lo_next)[-1]; + int ldelta = ((signed char *)bounds->opaque.lo_next)[-1]; if (ldelta == -128) { ldelta = 0; } - bounds->ar_computed_line -= ldelta; - bounds->lo_next -= 2; + bounds->opaque.computed_line -= ldelta; + bounds->opaque.lo_next -= 2; bounds->ar_end = bounds->ar_start; - bounds->ar_start -= ((unsigned char *)bounds->lo_next)[-2]; - ldelta = ((signed char *)bounds->lo_next)[-1]; + bounds->ar_start -= ((unsigned char *)bounds->opaque.lo_next)[-2]; + ldelta = ((signed char *)bounds->opaque.lo_next)[-1]; if (ldelta == -128) { bounds->ar_line = -1; } else { - bounds->ar_line = bounds->ar_computed_line; + bounds->ar_line = bounds->opaque.computed_line; } } @@ -1141,23 +1141,22 @@ static void advance(PyCodeAddressRange *bounds) { bounds->ar_start = bounds->ar_end; - int delta = ((unsigned char *)bounds->lo_next)[0]; - assert (delta < 255); + int delta = ((unsigned char *)bounds->opaque.lo_next)[0]; bounds->ar_end += delta; - int ldelta = ((signed char *)bounds->lo_next)[1]; - bounds->lo_next += 2; + int ldelta = ((signed char *)bounds->opaque.lo_next)[1]; + bounds->opaque.lo_next += 2; if (ldelta == -128) { bounds->ar_line = -1; } else { - bounds->ar_computed_line += ldelta; - bounds->ar_line = bounds->ar_computed_line; + bounds->opaque.computed_line += ldelta; + bounds->ar_line = bounds->opaque.computed_line; } } static inline int at_end(PyCodeAddressRange *bounds) { - return ((unsigned char *)bounds->lo_next)[0] == 255; + return bounds->opaque.lo_next >= bounds->opaque.limit; } int @@ -1256,12 +1255,13 @@ PyCode_Addr2Line(PyCodeObject *co, int addrq) } void -PyLineTable_InitAddressRange(char *linetable, int firstlineno, PyCodeAddressRange *range) +PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range) { - range->lo_next = linetable; + range->opaque.lo_next = linetable; + range->opaque.limit = range->opaque.lo_next + length; range->ar_start = -1; range->ar_end = 0; - range->ar_computed_line = firstlineno; + range->opaque.computed_line = firstlineno; range->ar_line = -1; } @@ -1269,7 +1269,8 @@ int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds) { char *linetable = PyBytes_AS_STRING(co->co_linetable); - PyLineTable_InitAddressRange(linetable, co->co_firstlineno, bounds); + Py_ssize_t length = PyBytes_GET_SIZE(co->co_linetable); + PyLineTable_InitAddressRange(linetable, length, co->co_firstlineno, bounds); return bounds->ar_line; } diff --git a/Objects/lnotab_notes.txt b/Objects/lnotab_notes.txt index 59c65257082ccb..f482310a34dd3a 100644 --- a/Objects/lnotab_notes.txt +++ b/Objects/lnotab_notes.txt @@ -39,7 +39,6 @@ Note that the end - start value is always positive. Finally, in order to fit into a single byte we need to convert start deltas to the range 0 <= delta <= 254, and line deltas to the range -127 <= delta <= 127. A line delta of -128 is used to indicate no line number. -A start delta of 255 is used as a sentinel to mark the end of the table. Also note that a delta of zero indicates that there are no bytecodes in the given range, which means we can use an invalid line number for that range. @@ -54,7 +53,6 @@ Final form: 16 +1 0 +127 (line 135, but the range is empty as no bytecodes are at line 135) 4 +73 - 255 (end mark) --- Iterating over the table. ------------------------- @@ -68,8 +66,6 @@ def co_lines(code): end = 0 table_iter = iter(code.internal_line_table): for sdelta, ldelta in table_iter: - if sdelta == 255: - break if ldelta == 0: # No change to line number, just accumulate changes to end end += odelta continue diff --git a/Python/compile.c b/Python/compile.c index 3cf61221967593..1349a852a26a11 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6959,10 +6959,6 @@ assemble(struct compiler *c, int addNone) if (!assemble_line_range(&a)) { return 0; } - /* Emit sentinel at end of line number table */ - if (!assemble_emit_linetable_pair(&a, 255, -128)) { - goto error; - } if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0) { goto error; diff --git a/Python/frozen_hello.h b/Python/frozen_hello.h index c2101f425b41e3..5448c80daa4292 100644 --- a/Python/frozen_hello.h +++ b/Python/frozen_hello.h @@ -8,5 +8,5 @@ const unsigned char _Py_M__hello[] = { 5,112,114,105,110,116,169,0,114,1,0,0,0,114,1,0, 0,0,122,14,60,102,114,111,122,101,110,32,104,101,108,108, 111,62,218,8,60,109,111,100,117,108,101,62,1,0,0,0, - 115,6,0,0,0,4,0,12,1,255,128, + 115,4,0,0,0,4,0,12,1, }; diff --git a/Python/importlib.h b/Python/importlib.h index ea00ff36d73916..19d3c45b6581e2 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -63,152 +63,151 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 98,106,169,0,114,5,0,0,0,250,29,60,102,114,111,122, 101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,111, 111,116,115,116,114,97,112,62,218,12,95,111,98,106,101,99, - 116,95,110,97,109,101,23,0,0,0,115,12,0,0,0,2, - 1,8,1,12,1,14,1,2,255,255,128,114,7,0,0,0, - 78,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,7,0,0,0,67,0,0,0,115,56,0,0,0,100, - 1,68,0,93,16,125,2,116,0,124,1,124,2,131,2,114, - 18,116,1,124,0,124,2,116,2,124,1,124,2,131,2,131, - 3,1,0,113,2,124,0,106,3,160,4,124,1,106,3,161, - 1,1,0,100,2,83,0,41,3,122,47,83,105,109,112,108, - 101,32,115,117,98,115,116,105,116,117,116,101,32,102,111,114, - 32,102,117,110,99,116,111,111,108,115,46,117,112,100,97,116, - 101,95,119,114,97,112,112,101,114,46,41,4,218,10,95,95, - 109,111,100,117,108,101,95,95,218,8,95,95,110,97,109,101, - 95,95,114,1,0,0,0,218,7,95,95,100,111,99,95,95, - 78,41,5,218,7,104,97,115,97,116,116,114,218,7,115,101, - 116,97,116,116,114,218,7,103,101,116,97,116,116,114,218,8, - 95,95,100,105,99,116,95,95,218,6,117,112,100,97,116,101, - 41,3,90,3,110,101,119,90,3,111,108,100,218,7,114,101, - 112,108,97,99,101,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,5,95,119,114,97,112,40,0,0,0,115, - 12,0,0,0,8,2,10,1,18,1,2,128,18,1,255,128, - 114,17,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,12, - 0,0,0,116,0,116,1,131,1,124,0,131,1,83,0,114, - 0,0,0,0,41,2,114,3,0,0,0,218,3,115,121,115, - 169,1,218,4,110,97,109,101,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,11,95,110,101,119,95,109,111, - 100,117,108,101,48,0,0,0,115,4,0,0,0,12,1,255, - 128,114,21,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,115, - 12,0,0,0,101,0,90,1,100,0,90,2,100,1,83,0, - 41,2,218,14,95,68,101,97,100,108,111,99,107,69,114,114, - 111,114,78,41,3,114,9,0,0,0,114,8,0,0,0,114, - 1,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,22,0,0,0,61,0,0, - 0,115,6,0,0,0,8,0,4,1,255,128,114,22,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,64,0,0,0,115,56,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, - 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, - 0,90,6,100,8,100,9,132,0,90,7,100,10,100,11,132, - 0,90,8,100,12,83,0,41,13,218,11,95,77,111,100,117, - 108,101,76,111,99,107,122,169,65,32,114,101,99,117,114,115, - 105,118,101,32,108,111,99,107,32,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,32,119,104,105,99,104,32,105,115, - 32,97,98,108,101,32,116,111,32,100,101,116,101,99,116,32, - 100,101,97,100,108,111,99,107,115,10,32,32,32,32,40,101, - 46,103,46,32,116,104,114,101,97,100,32,49,32,116,114,121, - 105,110,103,32,116,111,32,116,97,107,101,32,108,111,99,107, - 115,32,65,32,116,104,101,110,32,66,44,32,97,110,100,32, - 116,104,114,101,97,100,32,50,32,116,114,121,105,110,103,32, - 116,111,10,32,32,32,32,116,97,107,101,32,108,111,99,107, - 115,32,66,32,116,104,101,110,32,65,41,46,10,32,32,32, - 32,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,48,0,0,0,116, - 0,160,1,161,0,124,0,95,2,116,0,160,1,161,0,124, - 0,95,3,124,1,124,0,95,4,100,0,124,0,95,5,100, - 1,124,0,95,6,100,1,124,0,95,7,100,0,83,0,169, - 2,78,233,0,0,0,0,41,8,218,7,95,116,104,114,101, - 97,100,90,13,97,108,108,111,99,97,116,101,95,108,111,99, - 107,218,4,108,111,99,107,218,6,119,97,107,101,117,112,114, - 20,0,0,0,218,5,111,119,110,101,114,218,5,99,111,117, - 110,116,218,7,119,97,105,116,101,114,115,169,2,218,4,115, - 101,108,102,114,20,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,8,95,95,105,110,105,116,95, - 95,71,0,0,0,115,14,0,0,0,10,1,10,1,6,1, - 6,1,6,1,10,1,255,128,122,20,95,77,111,100,117,108, - 101,76,111,99,107,46,95,95,105,110,105,116,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,67,0,0,0,115,86,0,0,0,116,0,160,1, - 161,0,125,1,124,0,106,2,125,2,116,3,131,0,125,3, - 9,0,116,4,160,5,124,2,161,1,125,4,124,4,100,0, - 117,0,114,22,100,2,83,0,124,4,106,2,125,2,124,2, - 124,1,107,2,114,31,100,1,83,0,124,2,124,3,118,0, - 114,37,100,2,83,0,124,3,160,6,124,2,161,1,1,0, - 113,11,41,3,78,84,70,41,7,114,26,0,0,0,218,9, - 103,101,116,95,105,100,101,110,116,114,29,0,0,0,218,3, - 115,101,116,218,12,95,98,108,111,99,107,105,110,103,95,111, - 110,218,3,103,101,116,218,3,97,100,100,41,5,114,33,0, - 0,0,90,2,109,101,218,3,116,105,100,90,4,115,101,101, - 110,114,27,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,218,12,104,97,115,95,100,101,97,100,108, - 111,99,107,79,0,0,0,115,30,0,0,0,8,2,6,1, - 6,1,2,1,10,1,8,1,4,1,6,1,8,1,4,1, - 8,1,4,6,10,1,2,242,255,128,122,24,95,77,111,100, - 117,108,101,76,111,99,107,46,104,97,115,95,100,101,97,100, - 108,111,99,107,99,1,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,8,0,0,0,67,0,0,0,115,198,0, - 0,0,116,0,160,1,161,0,125,1,124,0,116,2,124,1, - 60,0,122,86,9,0,124,0,106,3,143,63,1,0,124,0, - 106,4,100,2,107,2,115,24,124,0,106,5,124,1,107,2, - 114,46,124,1,124,0,95,5,124,0,4,0,106,4,100,3, - 55,0,2,0,95,4,87,0,100,4,4,0,4,0,131,3, - 1,0,87,0,116,2,124,1,61,0,100,1,83,0,124,0, - 160,6,161,0,114,56,116,7,100,5,124,0,22,0,131,1, - 130,1,124,0,106,8,160,9,100,6,161,1,114,69,124,0, - 4,0,106,10,100,3,55,0,2,0,95,10,87,0,100,4, - 4,0,4,0,131,3,1,0,110,8,49,0,115,79,119,1, - 1,0,1,0,1,0,89,0,1,0,124,0,106,8,160,9, - 161,0,1,0,124,0,106,8,160,11,161,0,1,0,113,10, - 116,2,124,1,61,0,119,0,41,7,122,185,10,32,32,32, - 32,32,32,32,32,65,99,113,117,105,114,101,32,116,104,101, - 32,109,111,100,117,108,101,32,108,111,99,107,46,32,32,73, - 102,32,97,32,112,111,116,101,110,116,105,97,108,32,100,101, - 97,100,108,111,99,107,32,105,115,32,100,101,116,101,99,116, - 101,100,44,10,32,32,32,32,32,32,32,32,97,32,95,68, - 101,97,100,108,111,99,107,69,114,114,111,114,32,105,115,32, - 114,97,105,115,101,100,46,10,32,32,32,32,32,32,32,32, - 79,116,104,101,114,119,105,115,101,44,32,116,104,101,32,108, - 111,99,107,32,105,115,32,97,108,119,97,121,115,32,97,99, - 113,117,105,114,101,100,32,97,110,100,32,84,114,117,101,32, - 105,115,32,114,101,116,117,114,110,101,100,46,10,32,32,32, - 32,32,32,32,32,84,114,25,0,0,0,233,1,0,0,0, - 78,122,23,100,101,97,100,108,111,99,107,32,100,101,116,101, - 99,116,101,100,32,98,121,32,37,114,70,41,12,114,26,0, - 0,0,114,35,0,0,0,114,37,0,0,0,114,27,0,0, - 0,114,30,0,0,0,114,29,0,0,0,114,41,0,0,0, - 114,22,0,0,0,114,28,0,0,0,218,7,97,99,113,117, - 105,114,101,114,31,0,0,0,218,7,114,101,108,101,97,115, - 101,169,2,114,33,0,0,0,114,40,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,43,0,0, - 0,100,0,0,0,115,40,0,0,0,8,6,8,1,2,1, - 2,1,8,1,20,1,6,1,14,1,14,1,10,9,8,248, - 12,1,12,1,14,1,30,128,10,2,10,1,2,244,8,14, - 255,128,122,19,95,77,111,100,117,108,101,76,111,99,107,46, - 97,99,113,117,105,114,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,0, - 115,144,0,0,0,116,0,160,1,161,0,125,1,124,0,106, - 2,143,55,1,0,124,0,106,3,124,1,107,3,114,17,116, - 4,100,1,131,1,130,1,124,0,106,5,100,2,107,4,115, - 24,74,0,130,1,124,0,4,0,106,5,100,3,56,0,2, - 0,95,5,124,0,106,5,100,2,107,2,114,54,100,0,124, - 0,95,3,124,0,106,6,114,54,124,0,4,0,106,6,100, - 3,56,0,2,0,95,6,124,0,106,7,160,8,161,0,1, - 0,87,0,100,0,4,0,4,0,131,3,1,0,100,0,83, - 0,49,0,115,65,119,1,1,0,1,0,1,0,89,0,1, - 0,100,0,83,0,41,4,78,250,31,99,97,110,110,111,116, - 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, - 105,114,101,100,32,108,111,99,107,114,25,0,0,0,114,42, - 0,0,0,41,9,114,26,0,0,0,114,35,0,0,0,114, - 27,0,0,0,114,29,0,0,0,218,12,82,117,110,116,105, - 109,101,69,114,114,111,114,114,30,0,0,0,114,31,0,0, - 0,114,28,0,0,0,114,44,0,0,0,114,45,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 44,0,0,0,125,0,0,0,115,26,0,0,0,8,1,8, - 1,10,1,8,1,14,1,14,1,10,1,6,1,6,1,14, - 1,10,1,36,128,255,128,122,19,95,77,111,100,117,108,101, + 116,95,110,97,109,101,23,0,0,0,115,10,0,0,0,2, + 1,8,1,12,1,14,1,2,255,114,7,0,0,0,78,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 7,0,0,0,67,0,0,0,115,56,0,0,0,100,1,68, + 0,93,16,125,2,116,0,124,1,124,2,131,2,114,18,116, + 1,124,0,124,2,116,2,124,1,124,2,131,2,131,3,1, + 0,113,2,124,0,106,3,160,4,124,1,106,3,161,1,1, + 0,100,2,83,0,41,3,122,47,83,105,109,112,108,101,32, + 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, + 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, + 119,114,97,112,112,101,114,46,41,4,218,10,95,95,109,111, + 100,117,108,101,95,95,218,8,95,95,110,97,109,101,95,95, + 114,1,0,0,0,218,7,95,95,100,111,99,95,95,78,41, + 5,218,7,104,97,115,97,116,116,114,218,7,115,101,116,97, + 116,116,114,218,7,103,101,116,97,116,116,114,218,8,95,95, + 100,105,99,116,95,95,218,6,117,112,100,97,116,101,41,3, + 90,3,110,101,119,90,3,111,108,100,218,7,114,101,112,108, + 97,99,101,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,218,5,95,119,114,97,112,40,0,0,0,115,10,0, + 0,0,8,2,10,1,18,1,2,128,18,1,114,17,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,116,1,131,1,124,0,131,1,83,0,114,0,0,0,0, + 41,2,114,3,0,0,0,218,3,115,121,115,169,1,218,4, + 110,97,109,101,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, + 48,0,0,0,115,2,0,0,0,12,1,114,21,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,64,0,0,0,115,12,0,0,0,101,0, + 90,1,100,0,90,2,100,1,83,0,41,2,218,14,95,68, + 101,97,100,108,111,99,107,69,114,114,111,114,78,41,3,114, + 9,0,0,0,114,8,0,0,0,114,1,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,22,0,0,0,61,0,0,0,115,4,0,0,0, + 8,0,4,1,114,22,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,56,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, + 0,90,7,100,10,100,11,132,0,90,8,100,12,83,0,41, + 13,218,11,95,77,111,100,117,108,101,76,111,99,107,122,169, + 65,32,114,101,99,117,114,115,105,118,101,32,108,111,99,107, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 119,104,105,99,104,32,105,115,32,97,98,108,101,32,116,111, + 32,100,101,116,101,99,116,32,100,101,97,100,108,111,99,107, + 115,10,32,32,32,32,40,101,46,103,46,32,116,104,114,101, + 97,100,32,49,32,116,114,121,105,110,103,32,116,111,32,116, + 97,107,101,32,108,111,99,107,115,32,65,32,116,104,101,110, + 32,66,44,32,97,110,100,32,116,104,114,101,97,100,32,50, + 32,116,114,121,105,110,103,32,116,111,10,32,32,32,32,116, + 97,107,101,32,108,111,99,107,115,32,66,32,116,104,101,110, + 32,65,41,46,10,32,32,32,32,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,48,0,0,0,116,0,160,1,161,0,124,0,95, + 2,116,0,160,1,161,0,124,0,95,3,124,1,124,0,95, + 4,100,0,124,0,95,5,100,1,124,0,95,6,100,1,124, + 0,95,7,100,0,83,0,169,2,78,233,0,0,0,0,41, + 8,218,7,95,116,104,114,101,97,100,90,13,97,108,108,111, + 99,97,116,101,95,108,111,99,107,218,4,108,111,99,107,218, + 6,119,97,107,101,117,112,114,20,0,0,0,218,5,111,119, + 110,101,114,218,5,99,111,117,110,116,218,7,119,97,105,116, + 101,114,115,169,2,218,4,115,101,108,102,114,20,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 8,95,95,105,110,105,116,95,95,71,0,0,0,115,12,0, + 0,0,10,1,10,1,6,1,6,1,6,1,10,1,122,20, + 95,77,111,100,117,108,101,76,111,99,107,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,3,0,0,0,67,0,0,0,115,86,0, + 0,0,116,0,160,1,161,0,125,1,124,0,106,2,125,2, + 116,3,131,0,125,3,9,0,116,4,160,5,124,2,161,1, + 125,4,124,4,100,0,117,0,114,22,100,2,83,0,124,4, + 106,2,125,2,124,2,124,1,107,2,114,31,100,1,83,0, + 124,2,124,3,118,0,114,37,100,2,83,0,124,3,160,6, + 124,2,161,1,1,0,113,11,41,3,78,84,70,41,7,114, + 26,0,0,0,218,9,103,101,116,95,105,100,101,110,116,114, + 29,0,0,0,218,3,115,101,116,218,12,95,98,108,111,99, + 107,105,110,103,95,111,110,218,3,103,101,116,218,3,97,100, + 100,41,5,114,33,0,0,0,90,2,109,101,218,3,116,105, + 100,90,4,115,101,101,110,114,27,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,12,104,97,115, + 95,100,101,97,100,108,111,99,107,79,0,0,0,115,28,0, + 0,0,8,2,6,1,6,1,2,1,10,1,8,1,4,1, + 6,1,8,1,4,1,8,1,4,6,10,1,2,242,122,24, + 95,77,111,100,117,108,101,76,111,99,107,46,104,97,115,95, + 100,101,97,100,108,111,99,107,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,8,0,0,0,67,0,0, + 0,115,198,0,0,0,116,0,160,1,161,0,125,1,124,0, + 116,2,124,1,60,0,122,86,9,0,124,0,106,3,143,63, + 1,0,124,0,106,4,100,2,107,2,115,24,124,0,106,5, + 124,1,107,2,114,46,124,1,124,0,95,5,124,0,4,0, + 106,4,100,3,55,0,2,0,95,4,87,0,100,4,4,0, + 4,0,131,3,1,0,87,0,116,2,124,1,61,0,100,1, + 83,0,124,0,160,6,161,0,114,56,116,7,100,5,124,0, + 22,0,131,1,130,1,124,0,106,8,160,9,100,6,161,1, + 114,69,124,0,4,0,106,10,100,3,55,0,2,0,95,10, + 87,0,100,4,4,0,4,0,131,3,1,0,110,8,49,0, + 115,79,119,1,1,0,1,0,1,0,89,0,1,0,124,0, + 106,8,160,9,161,0,1,0,124,0,106,8,160,11,161,0, + 1,0,113,10,116,2,124,1,61,0,119,0,41,7,122,185, + 10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,101, + 32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107, + 46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,97, + 108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,101, + 116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,32, + 97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,32, + 32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,116, + 104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,121, + 115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,84, + 114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,46, + 10,32,32,32,32,32,32,32,32,84,114,25,0,0,0,233, + 1,0,0,0,78,122,23,100,101,97,100,108,111,99,107,32, + 100,101,116,101,99,116,101,100,32,98,121,32,37,114,70,41, + 12,114,26,0,0,0,114,35,0,0,0,114,37,0,0,0, + 114,27,0,0,0,114,30,0,0,0,114,29,0,0,0,114, + 41,0,0,0,114,22,0,0,0,114,28,0,0,0,218,7, + 97,99,113,117,105,114,101,114,31,0,0,0,218,7,114,101, + 108,101,97,115,101,169,2,114,33,0,0,0,114,40,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,43,0,0,0,100,0,0,0,115,38,0,0,0,8,6, + 8,1,2,1,2,1,8,1,20,1,6,1,14,1,14,1, + 10,9,8,248,12,1,12,1,14,1,30,128,10,2,10,1, + 2,244,8,14,122,19,95,77,111,100,117,108,101,76,111,99, + 107,46,97,99,113,117,105,114,101,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0, + 0,0,115,144,0,0,0,116,0,160,1,161,0,125,1,124, + 0,106,2,143,55,1,0,124,0,106,3,124,1,107,3,114, + 17,116,4,100,1,131,1,130,1,124,0,106,5,100,2,107, + 4,115,24,74,0,130,1,124,0,4,0,106,5,100,3,56, + 0,2,0,95,5,124,0,106,5,100,2,107,2,114,54,100, + 0,124,0,95,3,124,0,106,6,114,54,124,0,4,0,106, + 6,100,3,56,0,2,0,95,6,124,0,106,7,160,8,161, + 0,1,0,87,0,100,0,4,0,4,0,131,3,1,0,100, + 0,83,0,49,0,115,65,119,1,1,0,1,0,1,0,89, + 0,1,0,100,0,83,0,41,4,78,250,31,99,97,110,110, + 111,116,32,114,101,108,101,97,115,101,32,117,110,45,97,99, + 113,117,105,114,101,100,32,108,111,99,107,114,25,0,0,0, + 114,42,0,0,0,41,9,114,26,0,0,0,114,35,0,0, + 0,114,27,0,0,0,114,29,0,0,0,218,12,82,117,110, + 116,105,109,101,69,114,114,111,114,114,30,0,0,0,114,31, + 0,0,0,114,28,0,0,0,114,44,0,0,0,114,45,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,44,0,0,0,125,0,0,0,115,24,0,0,0,8, + 1,8,1,10,1,8,1,14,1,14,1,10,1,6,1,6, + 1,14,1,10,1,36,128,122,19,95,77,111,100,117,108,101, 76,111,99,107,46,114,101,108,101,97,115,101,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0, 0,67,0,0,0,243,18,0,0,0,100,1,160,0,124,0, @@ -218,250 +217,248 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 97,116,114,20,0,0,0,218,2,105,100,169,1,114,33,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, 0,218,8,95,95,114,101,112,114,95,95,138,0,0,0,243, - 4,0,0,0,18,1,255,128,122,20,95,77,111,100,117,108, - 101,76,111,99,107,46,95,95,114,101,112,114,95,95,78,41, - 9,114,9,0,0,0,114,8,0,0,0,114,1,0,0,0, - 114,10,0,0,0,114,34,0,0,0,114,41,0,0,0,114, - 43,0,0,0,114,44,0,0,0,114,53,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,23,0,0,0,65,0,0,0,115,16,0,0,0, - 8,0,4,1,8,5,8,8,8,21,8,25,12,13,255,128, - 114,23,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,48, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, - 10,83,0,41,11,218,16,95,68,117,109,109,121,77,111,100, - 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, - 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, - 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, - 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, - 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, - 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,124, - 0,95,0,100,1,124,0,95,1,100,0,83,0,114,24,0, - 0,0,41,2,114,20,0,0,0,114,30,0,0,0,114,32, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,34,0,0,0,146,0,0,0,243,6,0,0,0, - 6,1,10,1,255,128,122,25,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,46,95,95,105,110,105,116,95, - 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,124, - 0,4,0,106,0,100,1,55,0,2,0,95,0,100,2,83, - 0,41,3,78,114,42,0,0,0,84,41,1,114,30,0,0, - 0,114,52,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,43,0,0,0,150,0,0,0,115,6, - 0,0,0,14,1,4,1,255,128,122,24,95,68,117,109,109, - 121,77,111,100,117,108,101,76,111,99,107,46,97,99,113,117, - 105,114,101,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,36,0,0, - 0,124,0,106,0,100,1,107,2,114,9,116,1,100,2,131, - 1,130,1,124,0,4,0,106,0,100,3,56,0,2,0,95, - 0,100,0,83,0,41,4,78,114,25,0,0,0,114,46,0, - 0,0,114,42,0,0,0,41,2,114,30,0,0,0,114,47, - 0,0,0,114,52,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,44,0,0,0,154,0,0,0, - 115,8,0,0,0,10,1,8,1,18,1,255,128,122,24,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, - 114,101,108,101,97,115,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,0, - 114,48,0,0,0,41,2,78,122,28,95,68,117,109,109,121, - 77,111,100,117,108,101,76,111,99,107,40,123,33,114,125,41, - 32,97,116,32,123,125,114,49,0,0,0,114,52,0,0,0, + 2,0,0,0,18,1,122,20,95,77,111,100,117,108,101,76, + 111,99,107,46,95,95,114,101,112,114,95,95,78,41,9,114, + 9,0,0,0,114,8,0,0,0,114,1,0,0,0,114,10, + 0,0,0,114,34,0,0,0,114,41,0,0,0,114,43,0, + 0,0,114,44,0,0,0,114,53,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,23,0,0,0,65,0,0,0,115,14,0,0,0,8,0, + 4,1,8,5,8,8,8,21,8,25,12,13,114,23,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,64,0,0,0,115,48,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, + 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, + 0,90,6,100,8,100,9,132,0,90,7,100,10,83,0,41, + 11,218,16,95,68,117,109,109,121,77,111,100,117,108,101,76, + 111,99,107,122,86,65,32,115,105,109,112,108,101,32,95,77, + 111,100,117,108,101,76,111,99,107,32,101,113,117,105,118,97, + 108,101,110,116,32,102,111,114,32,80,121,116,104,111,110,32, + 98,117,105,108,100,115,32,119,105,116,104,111,117,116,10,32, + 32,32,32,109,117,108,116,105,45,116,104,114,101,97,100,105, + 110,103,32,115,117,112,112,111,114,116,46,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,100, + 1,124,0,95,1,100,0,83,0,114,24,0,0,0,41,2, + 114,20,0,0,0,114,30,0,0,0,114,32,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,34, + 0,0,0,146,0,0,0,243,4,0,0,0,6,1,10,1, + 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, + 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,18,0,0,0,124,0,4,0,106,0,100, + 1,55,0,2,0,95,0,100,2,83,0,41,3,78,114,42, + 0,0,0,84,41,1,114,30,0,0,0,114,52,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 53,0,0,0,159,0,0,0,114,54,0,0,0,122,25,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, - 95,95,114,101,112,114,95,95,78,41,8,114,9,0,0,0, - 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, - 34,0,0,0,114,43,0,0,0,114,44,0,0,0,114,53, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,55,0,0,0,142,0,0,0, - 115,14,0,0,0,8,0,4,1,8,3,8,4,8,4,12, - 5,255,128,114,55,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,36,0,0,0,101,0,90,1,100,0,90,2,100,1, - 100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5, - 100,6,132,0,90,5,100,7,83,0,41,8,218,18,95,77, - 111,100,117,108,101,76,111,99,107,77,97,110,97,103,101,114, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, - 124,0,95,0,100,0,124,0,95,1,100,0,83,0,114,0, - 0,0,0,41,2,218,5,95,110,97,109,101,218,5,95,108, - 111,99,107,114,32,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,34,0,0,0,165,0,0,0, - 114,56,0,0,0,122,27,95,77,111,100,117,108,101,76,111, - 99,107,77,97,110,97,103,101,114,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,26,0,0,0, - 116,0,124,0,106,1,131,1,124,0,95,2,124,0,106,2, - 160,3,161,0,1,0,100,0,83,0,114,0,0,0,0,41, - 4,218,16,95,103,101,116,95,109,111,100,117,108,101,95,108, - 111,99,107,114,58,0,0,0,114,59,0,0,0,114,43,0, - 0,0,114,52,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,218,9,95,95,101,110,116,101,114,95, - 95,169,0,0,0,115,6,0,0,0,12,1,14,1,255,128, - 122,28,95,77,111,100,117,108,101,76,111,99,107,77,97,110, - 97,103,101,114,46,95,95,101,110,116,101,114,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2, - 0,0,0,79,0,0,0,115,14,0,0,0,124,0,106,0, - 160,1,161,0,1,0,100,0,83,0,114,0,0,0,0,41, - 2,114,59,0,0,0,114,44,0,0,0,41,3,114,33,0, - 0,0,218,4,97,114,103,115,90,6,107,119,97,114,103,115, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 8,95,95,101,120,105,116,95,95,173,0,0,0,115,4,0, - 0,0,14,1,255,128,122,27,95,77,111,100,117,108,101,76, + 43,0,0,0,150,0,0,0,115,4,0,0,0,14,1,4, + 1,122,24,95,68,117,109,109,121,77,111,100,117,108,101,76, + 111,99,107,46,97,99,113,117,105,114,101,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,36,0,0,0,124,0,106,0,100,1,107, + 2,114,9,116,1,100,2,131,1,130,1,124,0,4,0,106, + 0,100,3,56,0,2,0,95,0,100,0,83,0,41,4,78, + 114,25,0,0,0,114,46,0,0,0,114,42,0,0,0,41, + 2,114,30,0,0,0,114,47,0,0,0,114,52,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 44,0,0,0,154,0,0,0,115,6,0,0,0,10,1,8, + 1,18,1,122,24,95,68,117,109,109,121,77,111,100,117,108, + 101,76,111,99,107,46,114,101,108,101,97,115,101,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0, + 0,0,67,0,0,0,114,48,0,0,0,41,2,78,122,28, + 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, + 40,123,33,114,125,41,32,97,116,32,123,125,114,49,0,0, + 0,114,52,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,53,0,0,0,159,0,0,0,114,54, + 0,0,0,122,25,95,68,117,109,109,121,77,111,100,117,108, + 101,76,111,99,107,46,95,95,114,101,112,114,95,95,78,41, + 8,114,9,0,0,0,114,8,0,0,0,114,1,0,0,0, + 114,10,0,0,0,114,34,0,0,0,114,43,0,0,0,114, + 44,0,0,0,114,53,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,55,0, + 0,0,142,0,0,0,115,12,0,0,0,8,0,4,1,8, + 3,8,4,8,4,12,5,114,55,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,36,0,0,0,101,0,90,1,100,0, + 90,2,100,1,100,2,132,0,90,3,100,3,100,4,132,0, + 90,4,100,5,100,6,132,0,90,5,100,7,83,0,41,8, + 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, + 97,103,101,114,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,124,0,95,0,100,0,124,0,95,1,100,0, + 83,0,114,0,0,0,0,41,2,218,5,95,110,97,109,101, + 218,5,95,108,111,99,107,114,32,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,34,0,0,0, + 165,0,0,0,114,56,0,0,0,122,27,95,77,111,100,117, + 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 26,0,0,0,116,0,124,0,106,1,131,1,124,0,95,2, + 124,0,106,2,160,3,161,0,1,0,100,0,83,0,114,0, + 0,0,0,41,4,218,16,95,103,101,116,95,109,111,100,117, + 108,101,95,108,111,99,107,114,58,0,0,0,114,59,0,0, + 0,114,43,0,0,0,114,52,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,9,95,95,101,110, + 116,101,114,95,95,169,0,0,0,115,4,0,0,0,12,1, + 14,1,122,28,95,77,111,100,117,108,101,76,111,99,107,77, + 97,110,97,103,101,114,46,95,95,101,110,116,101,114,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,79,0,0,0,115,14,0,0,0,124,0, + 106,0,160,1,161,0,1,0,100,0,83,0,114,0,0,0, + 0,41,2,114,59,0,0,0,114,44,0,0,0,41,3,114, + 33,0,0,0,218,4,97,114,103,115,90,6,107,119,97,114, + 103,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,8,95,95,101,120,105,116,95,95,173,0,0,0,115, + 2,0,0,0,14,1,122,27,95,77,111,100,117,108,101,76, 111,99,107,77,97,110,97,103,101,114,46,95,95,101,120,105, 116,95,95,78,41,6,114,9,0,0,0,114,8,0,0,0, 114,1,0,0,0,114,34,0,0,0,114,61,0,0,0,114, 63,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, 0,0,0,114,6,0,0,0,114,57,0,0,0,163,0,0, - 0,115,10,0,0,0,8,0,8,2,8,4,12,4,255,128, - 114,57,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,132, - 0,0,0,116,0,160,1,161,0,1,0,122,55,122,7,116, - 2,124,0,25,0,131,0,125,1,87,0,110,9,4,0,116, - 3,121,65,1,0,1,0,1,0,100,1,125,1,89,0,124, - 1,100,1,117,0,114,53,116,4,100,1,117,0,114,35,116, - 5,124,0,131,1,125,1,110,4,116,6,124,0,131,1,125, - 1,124,0,102,1,100,2,100,3,132,1,125,2,116,7,160, - 8,124,1,124,2,161,2,116,2,124,0,60,0,87,0,116, - 0,160,9,161,0,1,0,124,1,83,0,116,0,160,9,161, - 0,1,0,119,0,119,0,41,4,122,139,71,101,116,32,111, - 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, - 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, - 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, - 46,10,10,32,32,32,32,65,99,113,117,105,114,101,47,114, - 101,108,101,97,115,101,32,105,110,116,101,114,110,97,108,108, - 121,32,116,104,101,32,103,108,111,98,97,108,32,105,109,112, - 111,114,116,32,108,111,99,107,32,116,111,32,112,114,111,116, - 101,99,116,10,32,32,32,32,95,109,111,100,117,108,101,95, - 108,111,99,107,115,46,78,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,8,0,0,0,83,0,0,0, - 115,54,0,0,0,116,0,160,1,161,0,1,0,122,17,116, - 2,160,3,124,1,161,1,124,0,117,0,114,15,116,2,124, - 1,61,0,87,0,116,0,160,4,161,0,1,0,100,0,83, - 0,116,0,160,4,161,0,1,0,119,0,114,0,0,0,0, - 41,5,218,4,95,105,109,112,218,12,97,99,113,117,105,114, - 101,95,108,111,99,107,218,13,95,109,111,100,117,108,101,95, - 108,111,99,107,115,114,38,0,0,0,218,12,114,101,108,101, - 97,115,101,95,108,111,99,107,41,2,218,3,114,101,102,114, - 20,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,218,2,99,98,198,0,0,0,115,14,0,0,0, - 8,1,2,1,14,4,6,1,2,128,22,2,255,128,122,28, - 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, - 46,60,108,111,99,97,108,115,62,46,99,98,41,10,114,64, - 0,0,0,114,65,0,0,0,114,66,0,0,0,218,8,75, - 101,121,69,114,114,111,114,114,26,0,0,0,114,55,0,0, - 0,114,23,0,0,0,218,8,95,119,101,97,107,114,101,102, - 114,68,0,0,0,114,67,0,0,0,41,3,114,20,0,0, - 0,114,27,0,0,0,114,69,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,60,0,0,0,179, - 0,0,0,115,36,0,0,0,8,6,2,1,2,1,14,1, - 12,1,6,1,8,2,8,1,10,1,8,2,12,2,16,11, - 2,128,8,2,4,2,10,254,2,234,255,128,114,60,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,8,0,0,0,67,0,0,0,115,54,0,0,0,116, - 0,124,0,131,1,125,1,122,6,124,1,160,1,161,0,1, - 0,87,0,110,9,4,0,116,2,121,26,1,0,1,0,1, - 0,89,0,100,1,83,0,124,1,160,3,161,0,1,0,100, - 1,83,0,119,0,41,2,122,189,65,99,113,117,105,114,101, - 115,32,116,104,101,110,32,114,101,108,101,97,115,101,115,32, - 116,104,101,32,109,111,100,117,108,101,32,108,111,99,107,32, - 102,111,114,32,97,32,103,105,118,101,110,32,109,111,100,117, - 108,101,32,110,97,109,101,46,10,10,32,32,32,32,84,104, - 105,115,32,105,115,32,117,115,101,100,32,116,111,32,101,110, - 115,117,114,101,32,97,32,109,111,100,117,108,101,32,105,115, - 32,99,111,109,112,108,101,116,101,108,121,32,105,110,105,116, - 105,97,108,105,122,101,100,44,32,105,110,32,116,104,101,10, - 32,32,32,32,101,118,101,110,116,32,105,116,32,105,115,32, - 98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,98, - 121,32,97,110,111,116,104,101,114,32,116,104,114,101,97,100, - 46,10,32,32,32,32,78,41,4,114,60,0,0,0,114,43, - 0,0,0,114,22,0,0,0,114,44,0,0,0,41,2,114, - 20,0,0,0,114,27,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,19,95,108,111,99,107,95, - 117,110,108,111,99,107,95,109,111,100,117,108,101,216,0,0, - 0,115,16,0,0,0,8,6,2,1,12,1,12,1,6,3, - 12,2,2,251,255,128,114,72,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 79,0,0,0,115,14,0,0,0,124,0,124,1,105,0,124, - 2,164,1,142,1,83,0,41,2,97,46,1,0,0,114,101, - 109,111,118,101,95,105,109,112,111,114,116,108,105,98,95,102, - 114,97,109,101,115,32,105,110,32,105,109,112,111,114,116,46, - 99,32,119,105,108,108,32,97,108,119,97,121,115,32,114,101, - 109,111,118,101,32,115,101,113,117,101,110,99,101,115,10,32, - 32,32,32,111,102,32,105,109,112,111,114,116,108,105,98,32, - 102,114,97,109,101,115,32,116,104,97,116,32,101,110,100,32, - 119,105,116,104,32,97,32,99,97,108,108,32,116,111,32,116, - 104,105,115,32,102,117,110,99,116,105,111,110,10,10,32,32, - 32,32,85,115,101,32,105,116,32,105,110,115,116,101,97,100, - 32,111,102,32,97,32,110,111,114,109,97,108,32,99,97,108, - 108,32,105,110,32,112,108,97,99,101,115,32,119,104,101,114, - 101,32,105,110,99,108,117,100,105,110,103,32,116,104,101,32, - 105,109,112,111,114,116,108,105,98,10,32,32,32,32,102,114, - 97,109,101,115,32,105,110,116,114,111,100,117,99,101,115,32, - 117,110,119,97,110,116,101,100,32,110,111,105,115,101,32,105, - 110,116,111,32,116,104,101,32,116,114,97,99,101,98,97,99, - 107,32,40,101,46,103,46,32,119,104,101,110,32,101,120,101, - 99,117,116,105,110,103,10,32,32,32,32,109,111,100,117,108, - 101,32,99,111,100,101,41,10,32,32,32,32,78,114,5,0, - 0,0,41,3,218,1,102,114,62,0,0,0,90,4,107,119, - 100,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,25,95,99,97,108,108,95,119,105,116,104,95,102,114, - 97,109,101,115,95,114,101,109,111,118,101,100,233,0,0,0, - 115,4,0,0,0,14,8,255,128,114,74,0,0,0,114,42, - 0,0,0,41,1,218,9,118,101,114,98,111,115,105,116,121, - 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,4,0,0,0,71,0,0,0,115,58,0,0,0,116,0, - 106,1,106,2,124,1,107,5,114,27,124,0,160,3,100,1, - 161,1,115,15,100,2,124,0,23,0,125,0,116,4,124,0, - 106,5,124,2,142,0,116,0,106,6,100,3,141,2,1,0, - 100,4,83,0,100,4,83,0,41,5,122,61,80,114,105,110, - 116,32,116,104,101,32,109,101,115,115,97,103,101,32,116,111, - 32,115,116,100,101,114,114,32,105,102,32,45,118,47,80,89, - 84,72,79,78,86,69,82,66,79,83,69,32,105,115,32,116, - 117,114,110,101,100,32,111,110,46,41,2,250,1,35,122,7, - 105,109,112,111,114,116,32,122,2,35,32,41,1,90,4,102, - 105,108,101,78,41,7,114,18,0,0,0,218,5,102,108,97, - 103,115,218,7,118,101,114,98,111,115,101,218,10,115,116,97, - 114,116,115,119,105,116,104,218,5,112,114,105,110,116,114,50, - 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, - 101,115,115,97,103,101,114,75,0,0,0,114,62,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, - 101,244,0,0,0,115,12,0,0,0,12,2,10,1,8,1, - 24,1,4,253,255,128,114,83,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 3,0,0,0,243,26,0,0,0,135,0,102,1,100,1,100, - 2,132,8,125,1,116,0,124,1,136,0,131,2,1,0,124, - 1,83,0,41,4,122,49,68,101,99,111,114,97,116,111,114, - 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, - 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, - 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,19,0,0, - 0,115,38,0,0,0,124,1,116,0,106,1,118,1,114,14, - 116,2,100,1,160,3,124,1,161,1,124,1,100,2,141,2, - 130,1,136,0,124,0,124,1,131,2,83,0,41,3,78,250, - 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,19, - 0,0,0,41,4,114,18,0,0,0,218,20,98,117,105,108, - 116,105,110,95,109,111,100,117,108,101,95,110,97,109,101,115, - 218,11,73,109,112,111,114,116,69,114,114,111,114,114,50,0, - 0,0,169,2,114,33,0,0,0,218,8,102,117,108,108,110, - 97,109,101,169,1,218,3,102,120,110,114,5,0,0,0,114, - 6,0,0,0,218,25,95,114,101,113,117,105,114,101,115,95, - 98,117,105,108,116,105,110,95,119,114,97,112,112,101,114,254, - 0,0,0,243,12,0,0,0,10,1,10,1,2,1,6,255, - 10,2,255,128,122,52,95,114,101,113,117,105,114,101,115,95, - 98,117,105,108,116,105,110,46,60,108,111,99,97,108,115,62, - 46,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, - 105,110,95,119,114,97,112,112,101,114,78,169,1,114,17,0, - 0,0,41,2,114,91,0,0,0,114,92,0,0,0,114,5, - 0,0,0,114,90,0,0,0,114,6,0,0,0,218,17,95, - 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, - 252,0,0,0,243,8,0,0,0,12,2,10,5,4,1,255, - 128,114,95,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,115,8,0,0,0,8,0,8,2,8,4,12,4,114,57, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,8,0,0,0,67,0,0,0,115,132,0,0, + 0,116,0,160,1,161,0,1,0,122,55,122,7,116,2,124, + 0,25,0,131,0,125,1,87,0,110,9,4,0,116,3,121, + 65,1,0,1,0,1,0,100,1,125,1,89,0,124,1,100, + 1,117,0,114,53,116,4,100,1,117,0,114,35,116,5,124, + 0,131,1,125,1,110,4,116,6,124,0,131,1,125,1,124, + 0,102,1,100,2,100,3,132,1,125,2,116,7,160,8,124, + 1,124,2,161,2,116,2,124,0,60,0,87,0,116,0,160, + 9,161,0,1,0,124,1,83,0,116,0,160,9,161,0,1, + 0,119,0,119,0,41,4,122,139,71,101,116,32,111,114,32, + 99,114,101,97,116,101,32,116,104,101,32,109,111,100,117,108, + 101,32,108,111,99,107,32,102,111,114,32,97,32,103,105,118, + 101,110,32,109,111,100,117,108,101,32,110,97,109,101,46,10, + 10,32,32,32,32,65,99,113,117,105,114,101,47,114,101,108, + 101,97,115,101,32,105,110,116,101,114,110,97,108,108,121,32, + 116,104,101,32,103,108,111,98,97,108,32,105,109,112,111,114, + 116,32,108,111,99,107,32,116,111,32,112,114,111,116,101,99, + 116,10,32,32,32,32,95,109,111,100,117,108,101,95,108,111, + 99,107,115,46,78,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,83,0,0,0,115,54, + 0,0,0,116,0,160,1,161,0,1,0,122,17,116,2,160, + 3,124,1,161,1,124,0,117,0,114,15,116,2,124,1,61, + 0,87,0,116,0,160,4,161,0,1,0,100,0,83,0,116, + 0,160,4,161,0,1,0,119,0,114,0,0,0,0,41,5, + 218,4,95,105,109,112,218,12,97,99,113,117,105,114,101,95, + 108,111,99,107,218,13,95,109,111,100,117,108,101,95,108,111, + 99,107,115,114,38,0,0,0,218,12,114,101,108,101,97,115, + 101,95,108,111,99,107,41,2,218,3,114,101,102,114,20,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,218,2,99,98,198,0,0,0,115,12,0,0,0,8,1, + 2,1,14,4,6,1,2,128,22,2,122,28,95,103,101,116, + 95,109,111,100,117,108,101,95,108,111,99,107,46,60,108,111, + 99,97,108,115,62,46,99,98,41,10,114,64,0,0,0,114, + 65,0,0,0,114,66,0,0,0,218,8,75,101,121,69,114, + 114,111,114,114,26,0,0,0,114,55,0,0,0,114,23,0, + 0,0,218,8,95,119,101,97,107,114,101,102,114,68,0,0, + 0,114,67,0,0,0,41,3,114,20,0,0,0,114,27,0, + 0,0,114,69,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,60,0,0,0,179,0,0,0,115, + 34,0,0,0,8,6,2,1,2,1,14,1,12,1,6,1, + 8,2,8,1,10,1,8,2,12,2,16,11,2,128,8,2, + 4,2,10,254,2,234,114,60,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0, + 67,0,0,0,115,54,0,0,0,116,0,124,0,131,1,125, + 1,122,6,124,1,160,1,161,0,1,0,87,0,110,9,4, + 0,116,2,121,26,1,0,1,0,1,0,89,0,100,1,83, + 0,124,1,160,3,161,0,1,0,100,1,83,0,119,0,41, + 2,122,189,65,99,113,117,105,114,101,115,32,116,104,101,110, + 32,114,101,108,101,97,115,101,115,32,116,104,101,32,109,111, + 100,117,108,101,32,108,111,99,107,32,102,111,114,32,97,32, + 103,105,118,101,110,32,109,111,100,117,108,101,32,110,97,109, + 101,46,10,10,32,32,32,32,84,104,105,115,32,105,115,32, + 117,115,101,100,32,116,111,32,101,110,115,117,114,101,32,97, + 32,109,111,100,117,108,101,32,105,115,32,99,111,109,112,108, + 101,116,101,108,121,32,105,110,105,116,105,97,108,105,122,101, + 100,44,32,105,110,32,116,104,101,10,32,32,32,32,101,118, + 101,110,116,32,105,116,32,105,115,32,98,101,105,110,103,32, + 105,109,112,111,114,116,101,100,32,98,121,32,97,110,111,116, + 104,101,114,32,116,104,114,101,97,100,46,10,32,32,32,32, + 78,41,4,114,60,0,0,0,114,43,0,0,0,114,22,0, + 0,0,114,44,0,0,0,41,2,114,20,0,0,0,114,27, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, + 95,109,111,100,117,108,101,216,0,0,0,115,14,0,0,0, + 8,6,2,1,12,1,12,1,6,3,12,2,2,251,114,72, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,4,0,0,0,79,0,0,0,115,14,0,0, + 0,124,0,124,1,105,0,124,2,164,1,142,1,83,0,41, + 2,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, + 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, + 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, + 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, + 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, + 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, + 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, + 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, + 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, + 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, + 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, + 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, + 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, + 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, + 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, + 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, + 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, + 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, + 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, + 32,32,32,32,78,114,5,0,0,0,41,3,218,1,102,114, + 62,0,0,0,90,4,107,119,100,115,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,25,95,99,97,108,108, + 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, + 111,118,101,100,233,0,0,0,115,2,0,0,0,14,8,114, + 74,0,0,0,114,42,0,0,0,41,1,218,9,118,101,114, + 98,111,115,105,116,121,99,1,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, + 58,0,0,0,116,0,106,1,106,2,124,1,107,5,114,27, + 124,0,160,3,100,1,161,1,115,15,100,2,124,0,23,0, + 125,0,116,4,124,0,106,5,124,2,142,0,116,0,106,6, + 100,3,141,2,1,0,100,4,83,0,100,4,83,0,41,5, + 122,61,80,114,105,110,116,32,116,104,101,32,109,101,115,115, + 97,103,101,32,116,111,32,115,116,100,101,114,114,32,105,102, + 32,45,118,47,80,89,84,72,79,78,86,69,82,66,79,83, + 69,32,105,115,32,116,117,114,110,101,100,32,111,110,46,41, + 2,250,1,35,122,7,105,109,112,111,114,116,32,122,2,35, + 32,41,1,90,4,102,105,108,101,78,41,7,114,18,0,0, + 0,218,5,102,108,97,103,115,218,7,118,101,114,98,111,115, + 101,218,10,115,116,97,114,116,115,119,105,116,104,218,5,112, + 114,105,110,116,114,50,0,0,0,218,6,115,116,100,101,114, + 114,41,3,218,7,109,101,115,115,97,103,101,114,75,0,0, + 0,114,62,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,218,16,95,118,101,114,98,111,115,101,95, + 109,101,115,115,97,103,101,244,0,0,0,115,10,0,0,0, + 12,2,10,1,8,1,24,1,4,253,114,83,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,3,0,0,0,243,26,0,0,0,135,0,102, + 1,100,1,100,2,132,8,125,1,116,0,124,1,136,0,131, + 2,1,0,124,1,83,0,41,4,122,49,68,101,99,111,114, + 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, + 104,101,32,110,97,109,101,100,32,109,111,100,117,108,101,32, + 105,115,32,98,117,105,108,116,45,105,110,46,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,19,0,0,0,115,38,0,0,0,124,1,116,0,106,1, + 118,1,114,14,116,2,100,1,160,3,124,1,161,1,124,1, + 100,2,141,2,130,1,136,0,124,0,124,1,131,2,83,0, + 41,3,78,250,29,123,33,114,125,32,105,115,32,110,111,116, + 32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117, + 108,101,114,19,0,0,0,41,4,114,18,0,0,0,218,20, + 98,117,105,108,116,105,110,95,109,111,100,117,108,101,95,110, + 97,109,101,115,218,11,73,109,112,111,114,116,69,114,114,111, + 114,114,50,0,0,0,169,2,114,33,0,0,0,218,8,102, + 117,108,108,110,97,109,101,169,1,218,3,102,120,110,114,5, + 0,0,0,114,6,0,0,0,218,25,95,114,101,113,117,105, + 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, + 112,101,114,254,0,0,0,243,10,0,0,0,10,1,10,1, + 2,1,6,255,10,2,122,52,95,114,101,113,117,105,114,101, + 115,95,98,117,105,108,116,105,110,46,60,108,111,99,97,108, + 115,62,46,95,114,101,113,117,105,114,101,115,95,98,117,105, + 108,116,105,110,95,119,114,97,112,112,101,114,78,169,1,114, + 17,0,0,0,41,2,114,91,0,0,0,114,92,0,0,0, + 114,5,0,0,0,114,90,0,0,0,114,6,0,0,0,218, + 17,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, + 105,110,252,0,0,0,243,6,0,0,0,12,2,10,5,4, + 1,114,95,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,114, 84,0,0,0,41,4,122,47,68,101,99,111,114,97,116,111, 114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,32, @@ -516,423 +513,421 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,218,3,109,115,103,218,4,115,112,101,99,218,6,109,111, 100,117,108,101,114,5,0,0,0,114,5,0,0,0,114,6, 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,19,1,0,0,115,18,0,0,0,4, - 6,12,2,10,1,10,1,10,1,10,1,10,1,8,2,255, - 128,114,111,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,8,0,0,0,67,0,0,0,115, - 184,0,0,0,116,0,124,0,100,1,100,2,131,3,125,1, - 116,0,124,0,100,3,100,2,131,3,4,0,125,2,114,18, - 116,1,124,2,131,1,83,0,116,2,124,1,100,4,131,2, - 114,37,122,6,124,1,160,3,124,0,161,1,87,0,83,0, - 4,0,116,4,121,91,1,0,1,0,1,0,89,0,122,5, - 124,0,106,5,125,3,87,0,110,9,4,0,116,6,121,90, - 1,0,1,0,1,0,100,5,125,3,89,0,122,5,124,0, - 106,7,125,4,87,0,110,25,4,0,116,6,121,89,1,0, - 1,0,1,0,124,1,100,2,117,0,114,75,100,6,160,8, - 124,3,161,1,6,0,89,0,83,0,100,7,160,8,124,3, - 124,1,161,2,6,0,89,0,83,0,100,8,160,8,124,3, - 124,4,161,2,83,0,119,0,119,0,119,0,41,9,122,44, - 84,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,77,111,100,117,108,101,84,121,112,101, - 46,95,95,114,101,112,114,95,95,40,41,46,218,10,95,95, - 108,111,97,100,101,114,95,95,78,218,8,95,95,115,112,101, - 99,95,95,218,11,109,111,100,117,108,101,95,114,101,112,114, - 250,1,63,250,13,60,109,111,100,117,108,101,32,123,33,114, - 125,62,250,20,60,109,111,100,117,108,101,32,123,33,114,125, - 32,40,123,33,114,125,41,62,250,23,60,109,111,100,117,108, - 101,32,123,33,114,125,32,102,114,111,109,32,123,33,114,125, - 62,41,9,114,13,0,0,0,218,22,95,109,111,100,117,108, - 101,95,114,101,112,114,95,102,114,111,109,95,115,112,101,99, - 114,11,0,0,0,114,114,0,0,0,218,9,69,120,99,101, - 112,116,105,111,110,114,9,0,0,0,114,2,0,0,0,218, - 8,95,95,102,105,108,101,95,95,114,50,0,0,0,41,5, - 114,110,0,0,0,218,6,108,111,97,100,101,114,114,109,0, - 0,0,114,20,0,0,0,218,8,102,105,108,101,110,97,109, - 101,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,12,95,109,111,100,117,108,101,95,114,101,112,114,38,1, - 0,0,115,46,0,0,0,12,2,16,1,8,1,10,1,2, - 1,12,1,12,1,2,1,2,2,10,1,12,1,6,1,2, - 1,10,1,12,1,8,1,14,1,16,2,12,2,2,250,2, - 252,2,251,255,128,114,124,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, - 0,0,0,115,114,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,100,2,100,2,100,3,156,3,100,4, - 100,5,132,2,90,4,100,6,100,7,132,0,90,5,100,8, - 100,9,132,0,90,6,101,7,100,10,100,11,132,0,131,1, - 90,8,101,8,106,9,100,12,100,11,132,0,131,1,90,8, - 101,7,100,13,100,14,132,0,131,1,90,10,101,7,100,15, - 100,16,132,0,131,1,90,11,101,11,106,9,100,17,100,16, - 132,0,131,1,90,11,100,2,83,0,41,18,218,10,77,111, - 100,117,108,101,83,112,101,99,97,208,5,0,0,84,104,101, - 32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102, - 111,114,32,97,32,109,111,100,117,108,101,44,32,117,115,101, - 100,32,102,111,114,32,108,111,97,100,105,110,103,46,10,10, - 32,32,32,32,65,32,109,111,100,117,108,101,39,115,32,115, - 112,101,99,32,105,115,32,116,104,101,32,115,111,117,114,99, - 101,32,102,111,114,32,105,110,102,111,114,109,97,116,105,111, - 110,32,97,98,111,117,116,32,116,104,101,32,109,111,100,117, - 108,101,46,32,32,70,111,114,10,32,32,32,32,100,97,116, - 97,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116, - 104,32,116,104,101,32,109,111,100,117,108,101,44,32,105,110, - 99,108,117,100,105,110,103,32,115,111,117,114,99,101,44,32, - 117,115,101,32,116,104,101,32,115,112,101,99,39,115,10,32, - 32,32,32,108,111,97,100,101,114,46,10,10,32,32,32,32, - 96,110,97,109,101,96,32,105,115,32,116,104,101,32,97,98, - 115,111,108,117,116,101,32,110,97,109,101,32,111,102,32,116, - 104,101,32,109,111,100,117,108,101,46,32,32,96,108,111,97, - 100,101,114,96,32,105,115,32,116,104,101,32,108,111,97,100, - 101,114,10,32,32,32,32,116,111,32,117,115,101,32,119,104, - 101,110,32,108,111,97,100,105,110,103,32,116,104,101,32,109, - 111,100,117,108,101,46,32,32,96,112,97,114,101,110,116,96, - 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32, - 116,104,101,10,32,32,32,32,112,97,99,107,97,103,101,32, - 116,104,101,32,109,111,100,117,108,101,32,105,115,32,105,110, - 46,32,32,84,104,101,32,112,97,114,101,110,116,32,105,115, - 32,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104, - 101,32,110,97,109,101,46,10,10,32,32,32,32,96,105,115, - 95,112,97,99,107,97,103,101,96,32,100,101,116,101,114,109, - 105,110,101,115,32,105,102,32,116,104,101,32,109,111,100,117, - 108,101,32,105,115,32,99,111,110,115,105,100,101,114,101,100, - 32,97,32,112,97,99,107,97,103,101,32,111,114,10,32,32, - 32,32,110,111,116,46,32,32,79,110,32,109,111,100,117,108, - 101,115,32,116,104,105,115,32,105,115,32,114,101,102,108,101, - 99,116,101,100,32,98,121,32,116,104,101,32,96,95,95,112, - 97,116,104,95,95,96,32,97,116,116,114,105,98,117,116,101, - 46,10,10,32,32,32,32,96,111,114,105,103,105,110,96,32, - 105,115,32,116,104,101,32,115,112,101,99,105,102,105,99,32, - 108,111,99,97,116,105,111,110,32,117,115,101,100,32,98,121, - 32,116,104,101,32,108,111,97,100,101,114,32,102,114,111,109, - 32,119,104,105,99,104,32,116,111,10,32,32,32,32,108,111, - 97,100,32,116,104,101,32,109,111,100,117,108,101,44,32,105, - 102,32,116,104,97,116,32,105,110,102,111,114,109,97,116,105, - 111,110,32,105,115,32,97,118,97,105,108,97,98,108,101,46, - 32,32,87,104,101,110,32,102,105,108,101,110,97,109,101,32, - 105,115,10,32,32,32,32,115,101,116,44,32,111,114,105,103, - 105,110,32,119,105,108,108,32,109,97,116,99,104,46,10,10, - 32,32,32,32,96,104,97,115,95,108,111,99,97,116,105,111, - 110,96,32,105,110,100,105,99,97,116,101,115,32,116,104,97, - 116,32,97,32,115,112,101,99,39,115,32,34,111,114,105,103, - 105,110,34,32,114,101,102,108,101,99,116,115,32,97,32,108, - 111,99,97,116,105,111,110,46,10,32,32,32,32,87,104,101, - 110,32,116,104,105,115,32,105,115,32,84,114,117,101,44,32, - 96,95,95,102,105,108,101,95,95,96,32,97,116,116,114,105, - 98,117,116,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,32,105,115,32,115,101,116,46,10,10,32,32,32,32, - 96,99,97,99,104,101,100,96,32,105,115,32,116,104,101,32, - 108,111,99,97,116,105,111,110,32,111,102,32,116,104,101,32, - 99,97,99,104,101,100,32,98,121,116,101,99,111,100,101,32, - 102,105,108,101,44,32,105,102,32,97,110,121,46,32,32,73, - 116,10,32,32,32,32,99,111,114,114,101,115,112,111,110,100, - 115,32,116,111,32,116,104,101,32,96,95,95,99,97,99,104, - 101,100,95,95,96,32,97,116,116,114,105,98,117,116,101,46, - 10,10,32,32,32,32,96,115,117,98,109,111,100,117,108,101, - 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, - 115,96,32,105,115,32,116,104,101,32,115,101,113,117,101,110, - 99,101,32,111,102,32,112,97,116,104,32,101,110,116,114,105, - 101,115,32,116,111,10,32,32,32,32,115,101,97,114,99,104, - 32,119,104,101,110,32,105,109,112,111,114,116,105,110,103,32, - 115,117,98,109,111,100,117,108,101,115,46,32,32,73,102,32, - 115,101,116,44,32,105,115,95,112,97,99,107,97,103,101,32, - 115,104,111,117,108,100,32,98,101,10,32,32,32,32,84,114, - 117,101,45,45,97,110,100,32,70,97,108,115,101,32,111,116, - 104,101,114,119,105,115,101,46,10,10,32,32,32,32,80,97, - 99,107,97,103,101,115,32,97,114,101,32,115,105,109,112,108, - 121,32,109,111,100,117,108,101,115,32,116,104,97,116,32,40, - 109,97,121,41,32,104,97,118,101,32,115,117,98,109,111,100, - 117,108,101,115,46,32,32,73,102,32,97,32,115,112,101,99, - 10,32,32,32,32,104,97,115,32,97,32,110,111,110,45,78, - 111,110,101,32,118,97,108,117,101,32,105,110,32,96,115,117, + 101,95,115,104,105,109,19,1,0,0,115,16,0,0,0,4, + 6,12,2,10,1,10,1,10,1,10,1,10,1,8,2,114, + 111,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,8,0,0,0,67,0,0,0,115,184,0, + 0,0,116,0,124,0,100,1,100,2,131,3,125,1,116,0, + 124,0,100,3,100,2,131,3,4,0,125,2,114,18,116,1, + 124,2,131,1,83,0,116,2,124,1,100,4,131,2,114,37, + 122,6,124,1,160,3,124,0,161,1,87,0,83,0,4,0, + 116,4,121,91,1,0,1,0,1,0,89,0,122,5,124,0, + 106,5,125,3,87,0,110,9,4,0,116,6,121,90,1,0, + 1,0,1,0,100,5,125,3,89,0,122,5,124,0,106,7, + 125,4,87,0,110,25,4,0,116,6,121,89,1,0,1,0, + 1,0,124,1,100,2,117,0,114,75,100,6,160,8,124,3, + 161,1,6,0,89,0,83,0,100,7,160,8,124,3,124,1, + 161,2,6,0,89,0,83,0,100,8,160,8,124,3,124,4, + 161,2,83,0,119,0,119,0,119,0,41,9,122,44,84,104, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,77,111,100,117,108,101,84,121,112,101,46,95, + 95,114,101,112,114,95,95,40,41,46,218,10,95,95,108,111, + 97,100,101,114,95,95,78,218,8,95,95,115,112,101,99,95, + 95,218,11,109,111,100,117,108,101,95,114,101,112,114,250,1, + 63,250,13,60,109,111,100,117,108,101,32,123,33,114,125,62, + 250,20,60,109,111,100,117,108,101,32,123,33,114,125,32,40, + 123,33,114,125,41,62,250,23,60,109,111,100,117,108,101,32, + 123,33,114,125,32,102,114,111,109,32,123,33,114,125,62,41, + 9,114,13,0,0,0,218,22,95,109,111,100,117,108,101,95, + 114,101,112,114,95,102,114,111,109,95,115,112,101,99,114,11, + 0,0,0,114,114,0,0,0,218,9,69,120,99,101,112,116, + 105,111,110,114,9,0,0,0,114,2,0,0,0,218,8,95, + 95,102,105,108,101,95,95,114,50,0,0,0,41,5,114,110, + 0,0,0,218,6,108,111,97,100,101,114,114,109,0,0,0, + 114,20,0,0,0,218,8,102,105,108,101,110,97,109,101,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,12, + 95,109,111,100,117,108,101,95,114,101,112,114,38,1,0,0, + 115,44,0,0,0,12,2,16,1,8,1,10,1,2,1,12, + 1,12,1,2,1,2,2,10,1,12,1,6,1,2,1,10, + 1,12,1,8,1,14,1,16,2,12,2,2,250,2,252,2, + 251,114,124,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, + 114,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,100,2,100,2,100,3,156,3,100,4,100,5,132,2, + 90,4,100,6,100,7,132,0,90,5,100,8,100,9,132,0, + 90,6,101,7,100,10,100,11,132,0,131,1,90,8,101,8, + 106,9,100,12,100,11,132,0,131,1,90,8,101,7,100,13, + 100,14,132,0,131,1,90,10,101,7,100,15,100,16,132,0, + 131,1,90,11,101,11,106,9,100,17,100,16,132,0,131,1, + 90,11,100,2,83,0,41,18,218,10,77,111,100,117,108,101, + 83,112,101,99,97,208,5,0,0,84,104,101,32,115,112,101, + 99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,97, + 32,109,111,100,117,108,101,44,32,117,115,101,100,32,102,111, + 114,32,108,111,97,100,105,110,103,46,10,10,32,32,32,32, + 65,32,109,111,100,117,108,101,39,115,32,115,112,101,99,32, + 105,115,32,116,104,101,32,115,111,117,114,99,101,32,102,111, + 114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98, + 111,117,116,32,116,104,101,32,109,111,100,117,108,101,46,32, + 32,70,111,114,10,32,32,32,32,100,97,116,97,32,97,115, + 115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104, + 101,32,109,111,100,117,108,101,44,32,105,110,99,108,117,100, + 105,110,103,32,115,111,117,114,99,101,44,32,117,115,101,32, + 116,104,101,32,115,112,101,99,39,115,10,32,32,32,32,108, + 111,97,100,101,114,46,10,10,32,32,32,32,96,110,97,109, + 101,96,32,105,115,32,116,104,101,32,97,98,115,111,108,117, + 116,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, + 111,100,117,108,101,46,32,32,96,108,111,97,100,101,114,96, + 32,105,115,32,116,104,101,32,108,111,97,100,101,114,10,32, + 32,32,32,116,111,32,117,115,101,32,119,104,101,110,32,108, + 111,97,100,105,110,103,32,116,104,101,32,109,111,100,117,108, + 101,46,32,32,96,112,97,114,101,110,116,96,32,105,115,32, + 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,10, + 32,32,32,32,112,97,99,107,97,103,101,32,116,104,101,32, + 109,111,100,117,108,101,32,105,115,32,105,110,46,32,32,84, + 104,101,32,112,97,114,101,110,116,32,105,115,32,100,101,114, + 105,118,101,100,32,102,114,111,109,32,116,104,101,32,110,97, + 109,101,46,10,10,32,32,32,32,96,105,115,95,112,97,99, + 107,97,103,101,96,32,100,101,116,101,114,109,105,110,101,115, + 32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,105, + 115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,112, + 97,99,107,97,103,101,32,111,114,10,32,32,32,32,110,111, + 116,46,32,32,79,110,32,109,111,100,117,108,101,115,32,116, + 104,105,115,32,105,115,32,114,101,102,108,101,99,116,101,100, + 32,98,121,32,116,104,101,32,96,95,95,112,97,116,104,95, + 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, + 32,32,32,96,111,114,105,103,105,110,96,32,105,115,32,116, + 104,101,32,115,112,101,99,105,102,105,99,32,108,111,99,97, + 116,105,111,110,32,117,115,101,100,32,98,121,32,116,104,101, + 32,108,111,97,100,101,114,32,102,114,111,109,32,119,104,105, + 99,104,32,116,111,10,32,32,32,32,108,111,97,100,32,116, + 104,101,32,109,111,100,117,108,101,44,32,105,102,32,116,104, + 97,116,32,105,110,102,111,114,109,97,116,105,111,110,32,105, + 115,32,97,118,97,105,108,97,98,108,101,46,32,32,87,104, + 101,110,32,102,105,108,101,110,97,109,101,32,105,115,10,32, + 32,32,32,115,101,116,44,32,111,114,105,103,105,110,32,119, + 105,108,108,32,109,97,116,99,104,46,10,10,32,32,32,32, + 96,104,97,115,95,108,111,99,97,116,105,111,110,96,32,105, + 110,100,105,99,97,116,101,115,32,116,104,97,116,32,97,32, + 115,112,101,99,39,115,32,34,111,114,105,103,105,110,34,32, + 114,101,102,108,101,99,116,115,32,97,32,108,111,99,97,116, + 105,111,110,46,10,32,32,32,32,87,104,101,110,32,116,104, + 105,115,32,105,115,32,84,114,117,101,44,32,96,95,95,102, + 105,108,101,95,95,96,32,97,116,116,114,105,98,117,116,101, + 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,105, + 115,32,115,101,116,46,10,10,32,32,32,32,96,99,97,99, + 104,101,100,96,32,105,115,32,116,104,101,32,108,111,99,97, + 116,105,111,110,32,111,102,32,116,104,101,32,99,97,99,104, + 101,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 44,32,105,102,32,97,110,121,46,32,32,73,116,10,32,32, + 32,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111, + 32,116,104,101,32,96,95,95,99,97,99,104,101,100,95,95, + 96,32,97,116,116,114,105,98,117,116,101,46,10,10,32,32, + 32,32,96,115,117,98,109,111,100,117,108,101,95,115,101,97, + 114,99,104,95,108,111,99,97,116,105,111,110,115,96,32,105, + 115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,111, + 102,32,112,97,116,104,32,101,110,116,114,105,101,115,32,116, + 111,10,32,32,32,32,115,101,97,114,99,104,32,119,104,101, + 110,32,105,109,112,111,114,116,105,110,103,32,115,117,98,109, + 111,100,117,108,101,115,46,32,32,73,102,32,115,101,116,44, + 32,105,115,95,112,97,99,107,97,103,101,32,115,104,111,117, + 108,100,32,98,101,10,32,32,32,32,84,114,117,101,45,45, + 97,110,100,32,70,97,108,115,101,32,111,116,104,101,114,119, + 105,115,101,46,10,10,32,32,32,32,80,97,99,107,97,103, + 101,115,32,97,114,101,32,115,105,109,112,108,121,32,109,111, + 100,117,108,101,115,32,116,104,97,116,32,40,109,97,121,41, + 32,104,97,118,101,32,115,117,98,109,111,100,117,108,101,115, + 46,32,32,73,102,32,97,32,115,112,101,99,10,32,32,32, + 32,104,97,115,32,97,32,110,111,110,45,78,111,110,101,32, + 118,97,108,117,101,32,105,110,32,96,115,117,98,109,111,100, + 117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,116, + 105,111,110,115,96,44,32,116,104,101,32,105,109,112,111,114, + 116,10,32,32,32,32,115,121,115,116,101,109,32,119,105,108, + 108,32,99,111,110,115,105,100,101,114,32,109,111,100,117,108, + 101,115,32,108,111,97,100,101,100,32,102,114,111,109,32,116, + 104,101,32,115,112,101,99,32,97,115,32,112,97,99,107,97, + 103,101,115,46,10,10,32,32,32,32,79,110,108,121,32,102, + 105,110,100,101,114,115,32,40,115,101,101,32,105,109,112,111, + 114,116,108,105,98,46,97,98,99,46,77,101,116,97,80,97, + 116,104,70,105,110,100,101,114,32,97,110,100,10,32,32,32, + 32,105,109,112,111,114,116,108,105,98,46,97,98,99,46,80, + 97,116,104,69,110,116,114,121,70,105,110,100,101,114,41,32, + 115,104,111,117,108,100,32,109,111,100,105,102,121,32,77,111, + 100,117,108,101,83,112,101,99,32,105,110,115,116,97,110,99, + 101,115,46,10,10,32,32,32,32,78,41,3,218,6,111,114, + 105,103,105,110,218,12,108,111,97,100,101,114,95,115,116,97, + 116,101,218,10,105,115,95,112,97,99,107,97,103,101,99,3, + 0,0,0,0,0,0,0,3,0,0,0,6,0,0,0,2, + 0,0,0,67,0,0,0,115,54,0,0,0,124,1,124,0, + 95,0,124,2,124,0,95,1,124,3,124,0,95,2,124,4, + 124,0,95,3,124,5,114,16,103,0,110,1,100,0,124,0, + 95,4,100,1,124,0,95,5,100,0,124,0,95,6,100,0, + 83,0,41,2,78,70,41,7,114,20,0,0,0,114,122,0, + 0,0,114,126,0,0,0,114,127,0,0,0,218,26,115,117, 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, - 111,99,97,116,105,111,110,115,96,44,32,116,104,101,32,105, - 109,112,111,114,116,10,32,32,32,32,115,121,115,116,101,109, - 32,119,105,108,108,32,99,111,110,115,105,100,101,114,32,109, - 111,100,117,108,101,115,32,108,111,97,100,101,100,32,102,114, - 111,109,32,116,104,101,32,115,112,101,99,32,97,115,32,112, - 97,99,107,97,103,101,115,46,10,10,32,32,32,32,79,110, - 108,121,32,102,105,110,100,101,114,115,32,40,115,101,101,32, - 105,109,112,111,114,116,108,105,98,46,97,98,99,46,77,101, - 116,97,80,97,116,104,70,105,110,100,101,114,32,97,110,100, - 10,32,32,32,32,105,109,112,111,114,116,108,105,98,46,97, - 98,99,46,80,97,116,104,69,110,116,114,121,70,105,110,100, - 101,114,41,32,115,104,111,117,108,100,32,109,111,100,105,102, - 121,32,77,111,100,117,108,101,83,112,101,99,32,105,110,115, - 116,97,110,99,101,115,46,10,10,32,32,32,32,78,41,3, - 218,6,111,114,105,103,105,110,218,12,108,111,97,100,101,114, - 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, - 103,101,99,3,0,0,0,0,0,0,0,3,0,0,0,6, - 0,0,0,2,0,0,0,67,0,0,0,115,54,0,0,0, - 124,1,124,0,95,0,124,2,124,0,95,1,124,3,124,0, - 95,2,124,4,124,0,95,3,124,5,114,16,103,0,110,1, - 100,0,124,0,95,4,100,1,124,0,95,5,100,0,124,0, - 95,6,100,0,83,0,41,2,78,70,41,7,114,20,0,0, - 0,114,122,0,0,0,114,126,0,0,0,114,127,0,0,0, - 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, - 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, - 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, - 99,104,101,100,41,6,114,33,0,0,0,114,20,0,0,0, - 114,122,0,0,0,114,126,0,0,0,114,127,0,0,0,114, - 128,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,34,0,0,0,101,1,0,0,115,16,0,0, - 0,6,2,6,1,6,1,6,1,14,1,6,3,10,1,255, - 128,122,19,77,111,100,117,108,101,83,112,101,99,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, - 102,0,0,0,100,1,160,0,124,0,106,1,161,1,100,2, - 160,0,124,0,106,2,161,1,103,2,125,1,124,0,106,3, - 100,0,117,1,114,26,124,1,160,4,100,3,160,0,124,0, - 106,3,161,1,161,1,1,0,124,0,106,5,100,0,117,1, - 114,40,124,1,160,4,100,4,160,0,124,0,106,5,161,1, - 161,1,1,0,100,5,160,0,124,0,106,6,106,7,100,6, - 160,8,124,1,161,1,161,2,83,0,41,7,78,122,9,110, - 97,109,101,61,123,33,114,125,122,11,108,111,97,100,101,114, - 61,123,33,114,125,122,11,111,114,105,103,105,110,61,123,33, - 114,125,122,29,115,117,98,109,111,100,117,108,101,95,115,101, - 97,114,99,104,95,108,111,99,97,116,105,111,110,115,61,123, - 125,122,6,123,125,40,123,125,41,122,2,44,32,41,9,114, - 50,0,0,0,114,20,0,0,0,114,122,0,0,0,114,126, - 0,0,0,218,6,97,112,112,101,110,100,114,129,0,0,0, - 218,9,95,95,99,108,97,115,115,95,95,114,9,0,0,0, - 218,4,106,111,105,110,41,2,114,33,0,0,0,114,62,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,53,0,0,0,113,1,0,0,115,22,0,0,0,10, - 1,10,1,4,255,10,2,18,1,10,1,6,1,8,1,4, - 255,22,2,255,128,122,19,77,111,100,117,108,101,83,112,101, - 99,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, - 0,0,0,115,102,0,0,0,124,0,106,0,125,2,122,36, - 124,0,106,1,124,1,106,1,107,2,111,38,124,0,106,2, - 124,1,106,2,107,2,111,38,124,0,106,3,124,1,106,3, - 107,2,111,38,124,2,124,1,106,0,107,2,111,38,124,0, - 106,4,124,1,106,4,107,2,111,38,124,0,106,5,124,1, - 106,5,107,2,87,0,83,0,4,0,116,6,121,50,1,0, - 1,0,1,0,116,7,6,0,89,0,83,0,119,0,114,0, - 0,0,0,41,8,114,129,0,0,0,114,20,0,0,0,114, - 122,0,0,0,114,126,0,0,0,218,6,99,97,99,104,101, - 100,218,12,104,97,115,95,108,111,99,97,116,105,111,110,114, - 2,0,0,0,218,14,78,111,116,73,109,112,108,101,109,101, - 110,116,101,100,41,3,114,33,0,0,0,90,5,111,116,104, - 101,114,90,4,115,109,115,108,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,6,95,95,101,113,95,95,123, - 1,0,0,115,34,0,0,0,6,1,2,1,12,1,10,1, - 2,255,10,2,2,254,8,3,2,253,10,4,2,252,10,5, - 4,251,12,6,8,1,2,255,255,128,122,17,77,111,100,117, - 108,101,83,112,101,99,46,95,95,101,113,95,95,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, - 0,0,67,0,0,0,115,58,0,0,0,124,0,106,0,100, - 0,117,0,114,26,124,0,106,1,100,0,117,1,114,26,124, - 0,106,2,114,26,116,3,100,0,117,0,114,19,116,4,130, - 1,116,3,160,5,124,0,106,1,161,1,124,0,95,0,124, - 0,106,0,83,0,114,0,0,0,0,41,6,114,131,0,0, - 0,114,126,0,0,0,114,130,0,0,0,218,19,95,98,111, - 111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,108, - 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, - 69,114,114,111,114,90,11,95,103,101,116,95,99,97,99,104, - 101,100,114,52,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,135,0,0,0,135,1,0,0,115, - 14,0,0,0,10,2,16,1,8,1,4,1,14,1,6,1, - 255,128,122,17,77,111,100,117,108,101,83,112,101,99,46,99, - 97,99,104,101,100,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,10, - 0,0,0,124,1,124,0,95,0,100,0,83,0,114,0,0, - 0,0,41,1,114,131,0,0,0,41,2,114,33,0,0,0, - 114,135,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,135,0,0,0,144,1,0,0,115,4,0, - 0,0,10,2,255,128,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 32,0,0,0,124,0,106,0,100,1,117,0,114,13,124,0, - 106,1,160,2,100,2,161,1,100,3,25,0,83,0,124,0, - 106,1,83,0,41,4,122,32,84,104,101,32,110,97,109,101, - 32,111,102,32,116,104,101,32,109,111,100,117,108,101,39,115, - 32,112,97,114,101,110,116,46,78,218,1,46,114,25,0,0, - 0,41,3,114,129,0,0,0,114,20,0,0,0,218,10,114, - 112,97,114,116,105,116,105,111,110,114,52,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,6,112, - 97,114,101,110,116,148,1,0,0,115,8,0,0,0,10,3, - 16,1,6,2,255,128,122,17,77,111,100,117,108,101,83,112, + 111,99,97,116,105,111,110,115,218,13,95,115,101,116,95,102, + 105,108,101,97,116,116,114,218,7,95,99,97,99,104,101,100, + 41,6,114,33,0,0,0,114,20,0,0,0,114,122,0,0, + 0,114,126,0,0,0,114,127,0,0,0,114,128,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 34,0,0,0,101,1,0,0,115,14,0,0,0,6,2,6, + 1,6,1,6,1,14,1,6,3,10,1,122,19,77,111,100, + 117,108,101,83,112,101,99,46,95,95,105,110,105,116,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,6,0,0,0,67,0,0,0,115,102,0,0,0,100,1, + 160,0,124,0,106,1,161,1,100,2,160,0,124,0,106,2, + 161,1,103,2,125,1,124,0,106,3,100,0,117,1,114,26, + 124,1,160,4,100,3,160,0,124,0,106,3,161,1,161,1, + 1,0,124,0,106,5,100,0,117,1,114,40,124,1,160,4, + 100,4,160,0,124,0,106,5,161,1,161,1,1,0,100,5, + 160,0,124,0,106,6,106,7,100,6,160,8,124,1,161,1, + 161,2,83,0,41,7,78,122,9,110,97,109,101,61,123,33, + 114,125,122,11,108,111,97,100,101,114,61,123,33,114,125,122, + 11,111,114,105,103,105,110,61,123,33,114,125,122,29,115,117, + 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, + 111,99,97,116,105,111,110,115,61,123,125,122,6,123,125,40, + 123,125,41,122,2,44,32,41,9,114,50,0,0,0,114,20, + 0,0,0,114,122,0,0,0,114,126,0,0,0,218,6,97, + 112,112,101,110,100,114,129,0,0,0,218,9,95,95,99,108, + 97,115,115,95,95,114,9,0,0,0,218,4,106,111,105,110, + 41,2,114,33,0,0,0,114,62,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,53,0,0,0, + 113,1,0,0,115,20,0,0,0,10,1,10,1,4,255,10, + 2,18,1,10,1,6,1,8,1,4,255,22,2,122,19,77, + 111,100,117,108,101,83,112,101,99,46,95,95,114,101,112,114, + 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,8,0,0,0,67,0,0,0,115,102,0,0,0, + 124,0,106,0,125,2,122,36,124,0,106,1,124,1,106,1, + 107,2,111,38,124,0,106,2,124,1,106,2,107,2,111,38, + 124,0,106,3,124,1,106,3,107,2,111,38,124,2,124,1, + 106,0,107,2,111,38,124,0,106,4,124,1,106,4,107,2, + 111,38,124,0,106,5,124,1,106,5,107,2,87,0,83,0, + 4,0,116,6,121,50,1,0,1,0,1,0,116,7,6,0, + 89,0,83,0,119,0,114,0,0,0,0,41,8,114,129,0, + 0,0,114,20,0,0,0,114,122,0,0,0,114,126,0,0, + 0,218,6,99,97,99,104,101,100,218,12,104,97,115,95,108, + 111,99,97,116,105,111,110,114,2,0,0,0,218,14,78,111, + 116,73,109,112,108,101,109,101,110,116,101,100,41,3,114,33, + 0,0,0,90,5,111,116,104,101,114,90,4,115,109,115,108, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 6,95,95,101,113,95,95,123,1,0,0,115,32,0,0,0, + 6,1,2,1,12,1,10,1,2,255,10,2,2,254,8,3, + 2,253,10,4,2,252,10,5,4,251,12,6,8,1,2,255, + 122,17,77,111,100,117,108,101,83,112,101,99,46,95,95,101, + 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,58,0,0, + 0,124,0,106,0,100,0,117,0,114,26,124,0,106,1,100, + 0,117,1,114,26,124,0,106,2,114,26,116,3,100,0,117, + 0,114,19,116,4,130,1,116,3,160,5,124,0,106,1,161, + 1,124,0,95,0,124,0,106,0,83,0,114,0,0,0,0, + 41,6,114,131,0,0,0,114,126,0,0,0,114,130,0,0, + 0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101, + 109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101, + 116,95,99,97,99,104,101,100,114,52,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,135,0,0, + 0,135,1,0,0,115,12,0,0,0,10,2,16,1,8,1, + 4,1,14,1,6,1,122,17,77,111,100,117,108,101,83,112, + 101,99,46,99,97,99,104,101,100,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,10,0,0,0,124,1,124,0,95,0,100,0,83, + 0,114,0,0,0,0,41,1,114,131,0,0,0,41,2,114, + 33,0,0,0,114,135,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,135,0,0,0,144,1,0, + 0,115,2,0,0,0,10,2,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,32,0,0,0,124,0,106,0,100,1,117,0,114,13, + 124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0, + 124,0,106,1,83,0,41,4,122,32,84,104,101,32,110,97, + 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, + 39,115,32,112,97,114,101,110,116,46,78,218,1,46,114,25, + 0,0,0,41,3,114,129,0,0,0,114,20,0,0,0,218, + 10,114,112,97,114,116,105,116,105,111,110,114,52,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 6,112,97,114,101,110,116,148,1,0,0,115,6,0,0,0, + 10,3,16,1,6,2,122,17,77,111,100,117,108,101,83,112, 101,99,46,112,97,114,101,110,116,99,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, 0,0,115,6,0,0,0,124,0,106,0,83,0,114,0,0, 0,0,41,1,114,130,0,0,0,114,52,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,6,0,0,0,114,136,0, - 0,0,156,1,0,0,115,4,0,0,0,6,2,255,128,122, - 23,77,111,100,117,108,101,83,112,101,99,46,104,97,115,95, - 108,111,99,97,116,105,111,110,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,115,14,0,0,0,116,0,124,1,131,1,124,0,95,1, - 100,0,83,0,114,0,0,0,0,41,2,218,4,98,111,111, - 108,114,130,0,0,0,41,2,114,33,0,0,0,218,5,118, - 97,108,117,101,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,136,0,0,0,160,1,0,0,115,4,0,0, - 0,14,2,255,128,41,12,114,9,0,0,0,114,8,0,0, - 0,114,1,0,0,0,114,10,0,0,0,114,34,0,0,0, - 114,53,0,0,0,114,138,0,0,0,218,8,112,114,111,112, - 101,114,116,121,114,135,0,0,0,218,6,115,101,116,116,101, - 114,114,143,0,0,0,114,136,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 125,0,0,0,64,1,0,0,115,36,0,0,0,8,0,4, - 1,4,36,2,1,12,255,8,12,8,10,2,12,10,1,4, - 8,10,1,2,3,10,1,2,7,10,1,4,3,14,1,255, - 128,114,125,0,0,0,169,2,114,126,0,0,0,114,128,0, - 0,0,99,2,0,0,0,0,0,0,0,2,0,0,0,6, - 0,0,0,8,0,0,0,67,0,0,0,115,150,0,0,0, - 116,0,124,1,100,1,131,2,114,37,116,1,100,2,117,0, - 114,11,116,2,130,1,116,1,106,3,125,4,124,3,100,2, - 117,0,114,24,124,4,124,0,124,1,100,3,141,2,83,0, - 124,3,114,28,103,0,110,1,100,2,125,5,124,4,124,0, - 124,1,124,5,100,4,141,3,83,0,124,3,100,2,117,0, - 114,66,116,0,124,1,100,5,131,2,114,64,122,7,124,1, - 160,4,124,0,161,1,125,3,87,0,110,12,4,0,116,5, - 121,74,1,0,1,0,1,0,100,2,125,3,89,0,110,2, - 100,6,125,3,116,6,124,0,124,1,124,2,124,3,100,7, - 141,4,83,0,119,0,41,8,122,53,82,101,116,117,114,110, - 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, - 97,115,101,100,32,111,110,32,118,97,114,105,111,117,115,32, - 108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,90, - 12,103,101,116,95,102,105,108,101,110,97,109,101,78,41,1, - 114,122,0,0,0,41,2,114,122,0,0,0,114,129,0,0, - 0,114,128,0,0,0,70,114,148,0,0,0,41,7,114,11, - 0,0,0,114,139,0,0,0,114,140,0,0,0,218,23,115, - 112,101,99,95,102,114,111,109,95,102,105,108,101,95,108,111, - 99,97,116,105,111,110,114,128,0,0,0,114,87,0,0,0, - 114,125,0,0,0,41,6,114,20,0,0,0,114,122,0,0, - 0,114,126,0,0,0,114,128,0,0,0,114,149,0,0,0, - 90,6,115,101,97,114,99,104,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,104,0,0,0,165,1,0,0, - 115,40,0,0,0,10,2,8,1,4,1,6,1,8,2,12, - 1,12,1,6,1,2,1,6,255,8,3,10,1,2,1,14, - 1,12,1,8,1,4,3,16,2,2,250,255,128,114,104,0, - 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,8, - 0,0,0,8,0,0,0,67,0,0,0,115,30,1,0,0, - 122,5,124,0,106,0,125,3,87,0,110,8,4,0,116,1, - 121,142,1,0,1,0,1,0,89,0,110,6,124,3,100,0, - 117,1,114,20,124,3,83,0,124,0,106,2,125,4,124,1, - 100,0,117,0,114,40,122,5,124,0,106,3,125,1,87,0, - 110,7,4,0,116,1,121,141,1,0,1,0,1,0,89,0, - 122,5,124,0,106,4,125,5,87,0,110,9,4,0,116,1, - 121,140,1,0,1,0,1,0,100,0,125,5,89,0,124,2, - 100,0,117,0,114,81,124,5,100,0,117,0,114,79,122,5, - 124,1,106,5,125,2,87,0,110,12,4,0,116,1,121,139, - 1,0,1,0,1,0,100,0,125,2,89,0,110,2,124,5, - 125,2,122,5,124,0,106,6,125,6,87,0,110,9,4,0, - 116,1,121,138,1,0,1,0,1,0,100,0,125,6,89,0, - 122,7,116,7,124,0,106,8,131,1,125,7,87,0,110,9, - 4,0,116,1,121,137,1,0,1,0,1,0,100,0,125,7, - 89,0,116,9,124,4,124,1,124,2,100,1,141,3,125,3, - 124,5,100,0,117,0,114,126,100,2,110,1,100,3,124,3, - 95,10,124,6,124,3,95,11,124,7,124,3,95,12,124,3, - 83,0,119,0,119,0,119,0,119,0,119,0,119,0,41,4, - 78,169,1,114,126,0,0,0,70,84,41,13,114,113,0,0, - 0,114,2,0,0,0,114,9,0,0,0,114,112,0,0,0, - 114,121,0,0,0,218,7,95,79,82,73,71,73,78,218,10, - 95,95,99,97,99,104,101,100,95,95,218,4,108,105,115,116, - 218,8,95,95,112,97,116,104,95,95,114,125,0,0,0,114, - 130,0,0,0,114,135,0,0,0,114,129,0,0,0,41,8, - 114,110,0,0,0,114,122,0,0,0,114,126,0,0,0,114, - 109,0,0,0,114,20,0,0,0,90,8,108,111,99,97,116, - 105,111,110,114,135,0,0,0,114,129,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,17,95,115, - 112,101,99,95,102,114,111,109,95,109,111,100,117,108,101,191, - 1,0,0,115,86,0,0,0,2,2,10,1,12,1,4,1, - 8,2,4,1,6,2,8,1,2,1,10,1,12,1,2,2, - 2,1,10,1,12,1,6,1,8,1,8,1,2,1,10,1, - 12,1,8,1,4,2,2,1,10,1,12,1,6,1,2,1, - 14,1,12,1,6,1,14,2,18,1,6,1,6,1,4,1, - 2,249,2,252,2,250,2,250,2,251,2,246,255,128,114,155, - 0,0,0,70,169,1,218,8,111,118,101,114,114,105,100,101, - 99,2,0,0,0,0,0,0,0,1,0,0,0,5,0,0, - 0,8,0,0,0,67,0,0,0,115,178,1,0,0,124,2, - 115,10,116,0,124,1,100,1,100,0,131,3,100,0,117,0, - 114,24,122,6,124,0,106,1,124,1,95,2,87,0,110,7, - 4,0,116,3,121,216,1,0,1,0,1,0,89,0,124,2, - 115,34,116,0,124,1,100,2,100,0,131,3,100,0,117,0, - 114,83,124,0,106,4,125,3,124,3,100,0,117,0,114,70, - 124,0,106,5,100,0,117,1,114,70,116,6,100,0,117,0, - 114,52,116,7,130,1,116,6,106,8,125,4,124,4,160,9, - 124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3, - 124,0,95,4,100,0,124,1,95,11,122,5,124,3,124,1, - 95,12,87,0,110,7,4,0,116,3,121,215,1,0,1,0, - 1,0,89,0,124,2,115,93,116,0,124,1,100,3,100,0, - 131,3,100,0,117,0,114,107,122,6,124,0,106,13,124,1, - 95,14,87,0,110,7,4,0,116,3,121,214,1,0,1,0, - 1,0,89,0,122,5,124,0,124,1,95,15,87,0,110,7, - 4,0,116,3,121,213,1,0,1,0,1,0,89,0,124,2, - 115,130,116,0,124,1,100,4,100,0,131,3,100,0,117,0, - 114,149,124,0,106,5,100,0,117,1,114,149,122,6,124,0, - 106,5,124,1,95,16,87,0,110,7,4,0,116,3,121,212, - 1,0,1,0,1,0,89,0,124,0,106,17,114,208,124,2, - 115,162,116,0,124,1,100,5,100,0,131,3,100,0,117,0, - 114,176,122,6,124,0,106,18,124,1,95,11,87,0,110,7, - 4,0,116,3,121,211,1,0,1,0,1,0,89,0,124,2, - 115,186,116,0,124,1,100,6,100,0,131,3,100,0,117,0, - 114,208,124,0,106,19,100,0,117,1,114,208,122,7,124,0, - 106,19,124,1,95,20,87,0,124,1,83,0,4,0,116,3, - 121,210,1,0,1,0,1,0,89,0,124,1,83,0,124,1, - 83,0,119,0,119,0,119,0,119,0,119,0,119,0,119,0, - 41,7,78,114,9,0,0,0,114,112,0,0,0,218,11,95, - 95,112,97,99,107,97,103,101,95,95,114,154,0,0,0,114, - 121,0,0,0,114,152,0,0,0,41,21,114,13,0,0,0, - 114,20,0,0,0,114,9,0,0,0,114,2,0,0,0,114, - 122,0,0,0,114,129,0,0,0,114,139,0,0,0,114,140, - 0,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,218,7,95,95,110,101,119,95,95,90,5, - 95,112,97,116,104,114,121,0,0,0,114,112,0,0,0,114, - 143,0,0,0,114,158,0,0,0,114,113,0,0,0,114,154, - 0,0,0,114,136,0,0,0,114,126,0,0,0,114,135,0, - 0,0,114,152,0,0,0,41,5,114,109,0,0,0,114,110, - 0,0,0,114,157,0,0,0,114,122,0,0,0,114,159,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,18,95,105,110,105,116,95,109,111,100,117,108,101,95, - 97,116,116,114,115,236,1,0,0,115,114,0,0,0,20,4, - 2,1,12,1,12,1,2,1,20,2,6,1,8,1,10,2, - 8,1,4,1,6,1,10,2,8,1,6,1,6,11,2,1, - 10,1,12,1,2,1,20,2,2,1,12,1,12,1,2,1, - 2,2,10,1,12,1,2,1,20,2,10,1,2,1,12,1, - 12,1,2,1,6,2,20,1,2,1,12,1,12,1,2,1, - 20,2,10,1,2,1,10,1,4,3,12,254,2,1,8,1, - 2,254,2,249,2,249,2,249,2,251,2,250,2,228,255,128, - 114,161,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,82, - 0,0,0,100,1,125,1,116,0,124,0,106,1,100,2,131, - 2,114,15,124,0,106,1,160,2,124,0,161,1,125,1,110, - 10,116,0,124,0,106,1,100,3,131,2,114,25,116,3,100, - 4,131,1,130,1,124,1,100,1,117,0,114,34,116,4,124, - 0,106,5,131,1,125,1,116,6,124,0,124,1,131,2,1, - 0,124,1,83,0,41,5,122,43,67,114,101,97,116,101,32, - 97,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, - 110,32,116,104,101,32,112,114,111,118,105,100,101,100,32,115, - 112,101,99,46,78,218,13,99,114,101,97,116,101,95,109,111, - 100,117,108,101,218,11,101,120,101,99,95,109,111,100,117,108, - 101,122,66,108,111,97,100,101,114,115,32,116,104,97,116,32, - 100,101,102,105,110,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,109,117,115,116,32,97,108,115,111,32,100, - 101,102,105,110,101,32,99,114,101,97,116,101,95,109,111,100, - 117,108,101,40,41,41,7,114,11,0,0,0,114,122,0,0, - 0,114,162,0,0,0,114,87,0,0,0,114,21,0,0,0, - 114,20,0,0,0,114,161,0,0,0,169,2,114,109,0,0, - 0,114,110,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,218,16,109,111,100,117,108,101,95,102,114, - 111,109,95,115,112,101,99,52,2,0,0,115,20,0,0,0, - 4,3,12,1,14,3,12,1,8,1,8,2,10,1,10,1, - 4,1,255,128,114,165,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,100,0,0,0,124,0,106,0,100,1,117,0,114, - 7,100,2,110,2,124,0,106,0,125,1,124,0,106,1,100, - 1,117,0,114,32,124,0,106,2,100,1,117,0,114,25,100, - 3,160,3,124,1,161,1,83,0,100,4,160,3,124,1,124, - 0,106,2,161,2,83,0,124,0,106,4,114,42,100,5,160, - 3,124,1,124,0,106,1,161,2,83,0,100,6,160,3,124, - 0,106,0,124,0,106,1,161,2,83,0,41,7,122,38,82, - 101,116,117,114,110,32,116,104,101,32,114,101,112,114,32,116, - 111,32,117,115,101,32,102,111,114,32,116,104,101,32,109,111, - 100,117,108,101,46,78,114,115,0,0,0,114,116,0,0,0, - 114,117,0,0,0,114,118,0,0,0,250,18,60,109,111,100, - 117,108,101,32,123,33,114,125,32,40,123,125,41,62,41,5, - 114,20,0,0,0,114,126,0,0,0,114,122,0,0,0,114, - 50,0,0,0,114,136,0,0,0,41,2,114,109,0,0,0, - 114,20,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,119,0,0,0,69,2,0,0,115,18,0, - 0,0,20,3,10,1,10,1,10,1,14,2,6,2,14,1, - 16,2,255,128,114,119,0,0,0,99,2,0,0,0,0,0, + 0,0,156,1,0,0,115,2,0,0,0,6,2,122,23,77, + 111,100,117,108,101,83,112,101,99,46,104,97,115,95,108,111, + 99,97,116,105,111,110,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, + 14,0,0,0,116,0,124,1,131,1,124,0,95,1,100,0, + 83,0,114,0,0,0,0,41,2,218,4,98,111,111,108,114, + 130,0,0,0,41,2,114,33,0,0,0,218,5,118,97,108, + 117,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,136,0,0,0,160,1,0,0,115,2,0,0,0,14, + 2,41,12,114,9,0,0,0,114,8,0,0,0,114,1,0, + 0,0,114,10,0,0,0,114,34,0,0,0,114,53,0,0, + 0,114,138,0,0,0,218,8,112,114,111,112,101,114,116,121, + 114,135,0,0,0,218,6,115,101,116,116,101,114,114,143,0, + 0,0,114,136,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,125,0,0,0, + 64,1,0,0,115,34,0,0,0,8,0,4,1,4,36,2, + 1,12,255,8,12,8,10,2,12,10,1,4,8,10,1,2, + 3,10,1,2,7,10,1,4,3,14,1,114,125,0,0,0, + 169,2,114,126,0,0,0,114,128,0,0,0,99,2,0,0, + 0,0,0,0,0,2,0,0,0,6,0,0,0,8,0,0, + 0,67,0,0,0,115,150,0,0,0,116,0,124,1,100,1, + 131,2,114,37,116,1,100,2,117,0,114,11,116,2,130,1, + 116,1,106,3,125,4,124,3,100,2,117,0,114,24,124,4, + 124,0,124,1,100,3,141,2,83,0,124,3,114,28,103,0, + 110,1,100,2,125,5,124,4,124,0,124,1,124,5,100,4, + 141,3,83,0,124,3,100,2,117,0,114,66,116,0,124,1, + 100,5,131,2,114,64,122,7,124,1,160,4,124,0,161,1, + 125,3,87,0,110,12,4,0,116,5,121,74,1,0,1,0, + 1,0,100,2,125,3,89,0,110,2,100,6,125,3,116,6, + 124,0,124,1,124,2,124,3,100,7,141,4,83,0,119,0, + 41,8,122,53,82,101,116,117,114,110,32,97,32,109,111,100, + 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, + 110,32,118,97,114,105,111,117,115,32,108,111,97,100,101,114, + 32,109,101,116,104,111,100,115,46,90,12,103,101,116,95,102, + 105,108,101,110,97,109,101,78,41,1,114,122,0,0,0,41, + 2,114,122,0,0,0,114,129,0,0,0,114,128,0,0,0, + 70,114,148,0,0,0,41,7,114,11,0,0,0,114,139,0, + 0,0,114,140,0,0,0,218,23,115,112,101,99,95,102,114, + 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, + 114,128,0,0,0,114,87,0,0,0,114,125,0,0,0,41, + 6,114,20,0,0,0,114,122,0,0,0,114,126,0,0,0, + 114,128,0,0,0,114,149,0,0,0,90,6,115,101,97,114, + 99,104,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,104,0,0,0,165,1,0,0,115,38,0,0,0,10, + 2,8,1,4,1,6,1,8,2,12,1,12,1,6,1,2, + 1,6,255,8,3,10,1,2,1,14,1,12,1,8,1,4, + 3,16,2,2,250,114,104,0,0,0,99,3,0,0,0,0, + 0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,67, + 0,0,0,115,30,1,0,0,122,5,124,0,106,0,125,3, + 87,0,110,8,4,0,116,1,121,142,1,0,1,0,1,0, + 89,0,110,6,124,3,100,0,117,1,114,20,124,3,83,0, + 124,0,106,2,125,4,124,1,100,0,117,0,114,40,122,5, + 124,0,106,3,125,1,87,0,110,7,4,0,116,1,121,141, + 1,0,1,0,1,0,89,0,122,5,124,0,106,4,125,5, + 87,0,110,9,4,0,116,1,121,140,1,0,1,0,1,0, + 100,0,125,5,89,0,124,2,100,0,117,0,114,81,124,5, + 100,0,117,0,114,79,122,5,124,1,106,5,125,2,87,0, + 110,12,4,0,116,1,121,139,1,0,1,0,1,0,100,0, + 125,2,89,0,110,2,124,5,125,2,122,5,124,0,106,6, + 125,6,87,0,110,9,4,0,116,1,121,138,1,0,1,0, + 1,0,100,0,125,6,89,0,122,7,116,7,124,0,106,8, + 131,1,125,7,87,0,110,9,4,0,116,1,121,137,1,0, + 1,0,1,0,100,0,125,7,89,0,116,9,124,4,124,1, + 124,2,100,1,141,3,125,3,124,5,100,0,117,0,114,126, + 100,2,110,1,100,3,124,3,95,10,124,6,124,3,95,11, + 124,7,124,3,95,12,124,3,83,0,119,0,119,0,119,0, + 119,0,119,0,119,0,41,4,78,169,1,114,126,0,0,0, + 70,84,41,13,114,113,0,0,0,114,2,0,0,0,114,9, + 0,0,0,114,112,0,0,0,114,121,0,0,0,218,7,95, + 79,82,73,71,73,78,218,10,95,95,99,97,99,104,101,100, + 95,95,218,4,108,105,115,116,218,8,95,95,112,97,116,104, + 95,95,114,125,0,0,0,114,130,0,0,0,114,135,0,0, + 0,114,129,0,0,0,41,8,114,110,0,0,0,114,122,0, + 0,0,114,126,0,0,0,114,109,0,0,0,114,20,0,0, + 0,90,8,108,111,99,97,116,105,111,110,114,135,0,0,0, + 114,129,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,17,95,115,112,101,99,95,102,114,111,109, + 95,109,111,100,117,108,101,191,1,0,0,115,84,0,0,0, + 2,2,10,1,12,1,4,1,8,2,4,1,6,2,8,1, + 2,1,10,1,12,1,2,2,2,1,10,1,12,1,6,1, + 8,1,8,1,2,1,10,1,12,1,8,1,4,2,2,1, + 10,1,12,1,6,1,2,1,14,1,12,1,6,1,14,2, + 18,1,6,1,6,1,4,1,2,249,2,252,2,250,2,250, + 2,251,2,246,114,155,0,0,0,70,169,1,218,8,111,118, + 101,114,114,105,100,101,99,2,0,0,0,0,0,0,0,1, + 0,0,0,5,0,0,0,8,0,0,0,67,0,0,0,115, + 178,1,0,0,124,2,115,10,116,0,124,1,100,1,100,0, + 131,3,100,0,117,0,114,24,122,6,124,0,106,1,124,1, + 95,2,87,0,110,7,4,0,116,3,121,216,1,0,1,0, + 1,0,89,0,124,2,115,34,116,0,124,1,100,2,100,0, + 131,3,100,0,117,0,114,83,124,0,106,4,125,3,124,3, + 100,0,117,0,114,70,124,0,106,5,100,0,117,1,114,70, + 116,6,100,0,117,0,114,52,116,7,130,1,116,6,106,8, + 125,4,124,4,160,9,124,4,161,1,125,3,124,0,106,5, + 124,3,95,10,124,3,124,0,95,4,100,0,124,1,95,11, + 122,5,124,3,124,1,95,12,87,0,110,7,4,0,116,3, + 121,215,1,0,1,0,1,0,89,0,124,2,115,93,116,0, + 124,1,100,3,100,0,131,3,100,0,117,0,114,107,122,6, + 124,0,106,13,124,1,95,14,87,0,110,7,4,0,116,3, + 121,214,1,0,1,0,1,0,89,0,122,5,124,0,124,1, + 95,15,87,0,110,7,4,0,116,3,121,213,1,0,1,0, + 1,0,89,0,124,2,115,130,116,0,124,1,100,4,100,0, + 131,3,100,0,117,0,114,149,124,0,106,5,100,0,117,1, + 114,149,122,6,124,0,106,5,124,1,95,16,87,0,110,7, + 4,0,116,3,121,212,1,0,1,0,1,0,89,0,124,0, + 106,17,114,208,124,2,115,162,116,0,124,1,100,5,100,0, + 131,3,100,0,117,0,114,176,122,6,124,0,106,18,124,1, + 95,11,87,0,110,7,4,0,116,3,121,211,1,0,1,0, + 1,0,89,0,124,2,115,186,116,0,124,1,100,6,100,0, + 131,3,100,0,117,0,114,208,124,0,106,19,100,0,117,1, + 114,208,122,7,124,0,106,19,124,1,95,20,87,0,124,1, + 83,0,4,0,116,3,121,210,1,0,1,0,1,0,89,0, + 124,1,83,0,124,1,83,0,119,0,119,0,119,0,119,0, + 119,0,119,0,119,0,41,7,78,114,9,0,0,0,114,112, + 0,0,0,218,11,95,95,112,97,99,107,97,103,101,95,95, + 114,154,0,0,0,114,121,0,0,0,114,152,0,0,0,41, + 21,114,13,0,0,0,114,20,0,0,0,114,9,0,0,0, + 114,2,0,0,0,114,122,0,0,0,114,129,0,0,0,114, + 139,0,0,0,114,140,0,0,0,218,16,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,218,7,95,95,110, + 101,119,95,95,90,5,95,112,97,116,104,114,121,0,0,0, + 114,112,0,0,0,114,143,0,0,0,114,158,0,0,0,114, + 113,0,0,0,114,154,0,0,0,114,136,0,0,0,114,126, + 0,0,0,114,135,0,0,0,114,152,0,0,0,41,5,114, + 109,0,0,0,114,110,0,0,0,114,157,0,0,0,114,122, + 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,18,95,105,110,105,116,95,109, + 111,100,117,108,101,95,97,116,116,114,115,236,1,0,0,115, + 112,0,0,0,20,4,2,1,12,1,12,1,2,1,20,2, + 6,1,8,1,10,2,8,1,4,1,6,1,10,2,8,1, + 6,1,6,11,2,1,10,1,12,1,2,1,20,2,2,1, + 12,1,12,1,2,1,2,2,10,1,12,1,2,1,20,2, + 10,1,2,1,12,1,12,1,2,1,6,2,20,1,2,1, + 12,1,12,1,2,1,20,2,10,1,2,1,10,1,4,3, + 12,254,2,1,8,1,2,254,2,249,2,249,2,249,2,251, + 2,250,2,228,114,161,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,82,0,0,0,100,1,125,1,116,0,124,0,106, + 1,100,2,131,2,114,15,124,0,106,1,160,2,124,0,161, + 1,125,1,110,10,116,0,124,0,106,1,100,3,131,2,114, + 25,116,3,100,4,131,1,130,1,124,1,100,1,117,0,114, + 34,116,4,124,0,106,5,131,1,125,1,116,6,124,0,124, + 1,131,2,1,0,124,1,83,0,41,5,122,43,67,114,101, + 97,116,101,32,97,32,109,111,100,117,108,101,32,98,97,115, + 101,100,32,111,110,32,116,104,101,32,112,114,111,118,105,100, + 101,100,32,115,112,101,99,46,78,218,13,99,114,101,97,116, + 101,95,109,111,100,117,108,101,218,11,101,120,101,99,95,109, + 111,100,117,108,101,122,66,108,111,97,100,101,114,115,32,116, + 104,97,116,32,100,101,102,105,110,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,109,117,115,116,32,97,108, + 115,111,32,100,101,102,105,110,101,32,99,114,101,97,116,101, + 95,109,111,100,117,108,101,40,41,41,7,114,11,0,0,0, + 114,122,0,0,0,114,162,0,0,0,114,87,0,0,0,114, + 21,0,0,0,114,20,0,0,0,114,161,0,0,0,169,2, + 114,109,0,0,0,114,110,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,16,109,111,100,117,108, + 101,95,102,114,111,109,95,115,112,101,99,52,2,0,0,115, + 18,0,0,0,4,3,12,1,14,3,12,1,8,1,8,2, + 10,1,10,1,4,1,114,165,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 67,0,0,0,115,100,0,0,0,124,0,106,0,100,1,117, + 0,114,7,100,2,110,2,124,0,106,0,125,1,124,0,106, + 1,100,1,117,0,114,32,124,0,106,2,100,1,117,0,114, + 25,100,3,160,3,124,1,161,1,83,0,100,4,160,3,124, + 1,124,0,106,2,161,2,83,0,124,0,106,4,114,42,100, + 5,160,3,124,1,124,0,106,1,161,2,83,0,100,6,160, + 3,124,0,106,0,124,0,106,1,161,2,83,0,41,7,122, + 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, + 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, + 109,111,100,117,108,101,46,78,114,115,0,0,0,114,116,0, + 0,0,114,117,0,0,0,114,118,0,0,0,250,18,60,109, + 111,100,117,108,101,32,123,33,114,125,32,40,123,125,41,62, + 41,5,114,20,0,0,0,114,126,0,0,0,114,122,0,0, + 0,114,50,0,0,0,114,136,0,0,0,41,2,114,109,0, + 0,0,114,20,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,119,0,0,0,69,2,0,0,115, + 16,0,0,0,20,3,10,1,10,1,10,1,14,2,6,2, + 14,1,16,2,114,119,0,0,0,99,2,0,0,0,0,0, 0,0,0,0,0,0,4,0,0,0,10,0,0,0,67,0, 0,0,115,24,1,0,0,124,0,106,0,125,2,116,1,124, 2,131,1,143,123,1,0,116,2,106,3,160,4,124,2,161, @@ -974,202 +969,201 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 112,41,4,114,109,0,0,0,114,110,0,0,0,114,20,0, 0,0,114,108,0,0,0,114,5,0,0,0,114,5,0,0, 0,114,6,0,0,0,114,106,0,0,0,86,2,0,0,115, - 50,0,0,0,6,2,10,1,16,1,10,1,12,1,2,1, + 48,0,0,0,6,2,10,1,16,1,10,1,12,1,2,1, 10,1,10,1,14,1,16,2,14,2,12,1,16,1,12,2, 14,1,12,2,2,128,14,4,14,1,14,255,26,1,4,1, - 16,128,4,0,255,128,114,106,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0, - 67,0,0,0,115,10,1,0,0,122,9,124,0,106,0,160, - 1,124,0,106,2,161,1,1,0,87,0,110,23,1,0,1, - 0,1,0,124,0,106,2,116,3,106,4,118,0,114,32,116, - 3,106,4,160,5,124,0,106,2,161,1,125,1,124,1,116, - 3,106,4,124,0,106,2,60,0,130,0,116,3,106,4,160, - 5,124,0,106,2,161,1,125,1,124,1,116,3,106,4,124, - 0,106,2,60,0,116,6,124,1,100,1,100,0,131,3,100, - 0,117,0,114,68,122,6,124,0,106,0,124,1,95,7,87, - 0,110,7,4,0,116,8,121,132,1,0,1,0,1,0,89, - 0,116,6,124,1,100,2,100,0,131,3,100,0,117,0,114, - 104,122,20,124,1,106,9,124,1,95,10,116,11,124,1,100, - 3,131,2,115,95,124,0,106,2,160,12,100,4,161,1,100, - 5,25,0,124,1,95,10,87,0,110,7,4,0,116,8,121, - 131,1,0,1,0,1,0,89,0,116,6,124,1,100,6,100, - 0,131,3,100,0,117,0,114,128,122,6,124,0,124,1,95, - 13,87,0,124,1,83,0,4,0,116,8,121,130,1,0,1, - 0,1,0,89,0,124,1,83,0,124,1,83,0,119,0,119, - 0,119,0,41,7,78,114,112,0,0,0,114,158,0,0,0, - 114,154,0,0,0,114,141,0,0,0,114,25,0,0,0,114, - 113,0,0,0,41,14,114,122,0,0,0,114,170,0,0,0, - 114,20,0,0,0,114,18,0,0,0,114,105,0,0,0,114, - 171,0,0,0,114,13,0,0,0,114,112,0,0,0,114,2, - 0,0,0,114,9,0,0,0,114,158,0,0,0,114,11,0, - 0,0,114,142,0,0,0,114,113,0,0,0,114,164,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,25,95,108,111,97,100,95,98,97,99,107,119,97,114,100, - 95,99,111,109,112,97,116,105,98,108,101,116,2,0,0,115, - 66,0,0,0,2,3,18,1,6,1,12,1,14,1,12,1, - 2,1,14,3,12,1,16,1,2,1,12,1,12,1,2,1, - 16,1,2,1,8,4,10,1,18,1,4,128,12,1,2,1, - 16,1,2,1,8,1,4,3,12,254,2,1,8,1,2,254, - 2,251,2,246,255,128,114,172,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, - 67,0,0,0,115,242,0,0,0,124,0,106,0,100,0,117, - 1,114,29,116,1,124,0,106,0,100,1,131,2,115,29,116, - 2,124,0,106,0,131,1,155,0,100,2,157,2,125,1,116, - 3,160,4,124,1,116,5,161,2,1,0,116,6,124,0,131, - 1,83,0,116,7,124,0,131,1,125,2,100,3,124,0,95, - 8,122,79,124,2,116,9,106,10,124,0,106,11,60,0,122, - 26,124,0,106,0,100,0,117,0,114,62,124,0,106,12,100, - 0,117,0,114,61,116,13,100,4,124,0,106,11,100,5,141, - 2,130,1,110,6,124,0,106,0,160,14,124,2,161,1,1, - 0,87,0,110,19,1,0,1,0,1,0,122,7,116,9,106, - 10,124,0,106,11,61,0,87,0,130,0,4,0,116,15,121, - 120,1,0,1,0,1,0,89,0,130,0,116,9,106,10,160, - 16,124,0,106,11,161,1,125,2,124,2,116,9,106,10,124, - 0,106,11,60,0,116,17,100,6,124,0,106,11,124,0,106, - 0,131,3,1,0,87,0,100,7,124,0,95,8,124,2,83, - 0,100,7,124,0,95,8,119,0,119,0,41,8,78,114,163, - 0,0,0,114,168,0,0,0,84,114,167,0,0,0,114,19, - 0,0,0,122,18,105,109,112,111,114,116,32,123,33,114,125, - 32,35,32,123,33,114,125,70,41,18,114,122,0,0,0,114, - 11,0,0,0,114,7,0,0,0,114,101,0,0,0,114,102, - 0,0,0,114,169,0,0,0,114,172,0,0,0,114,165,0, - 0,0,90,13,95,105,110,105,116,105,97,108,105,122,105,110, - 103,114,18,0,0,0,114,105,0,0,0,114,20,0,0,0, - 114,129,0,0,0,114,87,0,0,0,114,163,0,0,0,114, - 70,0,0,0,114,171,0,0,0,114,83,0,0,0,41,3, - 114,109,0,0,0,114,108,0,0,0,114,110,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,14, - 95,108,111,97,100,95,117,110,108,111,99,107,101,100,152,2, - 0,0,115,62,0,0,0,10,2,12,2,16,1,12,2,8, - 1,8,2,6,5,2,1,12,1,2,1,10,1,10,1,14, - 1,2,255,12,4,4,128,6,1,2,1,12,1,2,3,12, - 254,2,1,2,1,14,5,12,1,18,1,6,2,4,2,8, - 254,2,245,255,128,114,173,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,67, - 0,0,0,115,54,0,0,0,116,0,124,0,106,1,131,1, - 143,12,1,0,116,2,124,0,131,1,87,0,2,0,100,1, - 4,0,4,0,131,3,1,0,83,0,49,0,115,20,119,1, - 1,0,1,0,1,0,89,0,1,0,100,1,83,0,41,2, - 122,191,82,101,116,117,114,110,32,97,32,110,101,119,32,109, - 111,100,117,108,101,32,111,98,106,101,99,116,44,32,108,111, - 97,100,101,100,32,98,121,32,116,104,101,32,115,112,101,99, - 39,115,32,108,111,97,100,101,114,46,10,10,32,32,32,32, - 84,104,101,32,109,111,100,117,108,101,32,105,115,32,110,111, - 116,32,97,100,100,101,100,32,116,111,32,105,116,115,32,112, - 97,114,101,110,116,46,10,10,32,32,32,32,73,102,32,97, - 32,109,111,100,117,108,101,32,105,115,32,97,108,114,101,97, - 100,121,32,105,110,32,115,121,115,46,109,111,100,117,108,101, - 115,44,32,116,104,97,116,32,101,120,105,115,116,105,110,103, - 32,109,111,100,117,108,101,32,103,101,116,115,10,32,32,32, - 32,99,108,111,98,98,101,114,101,100,46,10,10,32,32,32, - 32,78,41,3,114,57,0,0,0,114,20,0,0,0,114,173, - 0,0,0,169,1,114,109,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,114,107,0,0,0,197,2, - 0,0,115,8,0,0,0,12,9,22,1,20,128,255,128,114, - 107,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,64,0,0,0,115,140,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,7, - 100,20,100,6,100,7,132,1,131,1,90,8,101,7,100,21, - 100,8,100,9,132,1,131,1,90,9,101,5,100,10,100,11, - 132,0,131,1,90,10,101,5,100,12,100,13,132,0,131,1, - 90,11,101,7,101,12,100,14,100,15,132,0,131,1,131,1, - 90,13,101,7,101,12,100,16,100,17,132,0,131,1,131,1, - 90,14,101,7,101,12,100,18,100,19,132,0,131,1,131,1, - 90,15,101,7,101,16,131,1,90,17,100,5,83,0,41,22, - 218,15,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,122,144,77,101,116,97,32,112,97,116,104,32,105,109,112, - 111,114,116,32,102,111,114,32,98,117,105,108,116,45,105,110, - 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, - 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, - 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, - 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, - 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, - 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, - 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, - 32,32,32,122,8,98,117,105,108,116,45,105,110,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0, - 0,0,67,0,0,0,115,34,0,0,0,116,0,160,1,100, - 1,116,2,161,2,1,0,100,2,124,0,106,3,155,2,100, - 3,116,4,106,5,155,0,100,4,157,5,83,0,41,6,250, - 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, - 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,84,104,101,32,105,109,112,111,114,116,32,109,97,99,104, - 105,110,101,114,121,32,100,111,101,115,32,116,104,101,32,106, - 111,98,32,105,116,115,101,108,102,46,10,10,32,32,32,32, - 32,32,32,32,122,81,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, - 114,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, - 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, - 111,110,32,51,46,49,50,122,8,60,109,111,100,117,108,101, - 32,122,2,32,40,122,2,41,62,78,41,6,114,101,0,0, - 0,114,102,0,0,0,114,103,0,0,0,114,9,0,0,0, - 114,175,0,0,0,114,151,0,0,0,169,1,114,110,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,114,0,0,0,223,2,0,0,115,10,0,0,0,6,7, - 2,1,4,255,22,2,255,128,122,27,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, - 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, - 42,0,0,0,124,2,100,0,117,1,114,6,100,0,83,0, - 116,0,160,1,124,1,161,1,114,19,116,2,124,1,124,0, - 124,0,106,3,100,1,141,3,83,0,100,0,83,0,169,2, - 78,114,150,0,0,0,41,4,114,64,0,0,0,90,10,105, - 115,95,98,117,105,108,116,105,110,114,104,0,0,0,114,151, - 0,0,0,169,4,218,3,99,108,115,114,89,0,0,0,218, - 4,112,97,116,104,218,6,116,97,114,103,101,116,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,9,102,105, - 110,100,95,115,112,101,99,234,2,0,0,115,12,0,0,0, - 8,2,4,1,10,1,16,1,4,2,255,128,122,25,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105, - 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,42,0,0,0,116,0,160,1,100,1,116,2,161,2,1, - 0,124,0,160,3,124,1,124,2,161,2,125,3,124,3,100, - 2,117,1,114,19,124,3,106,4,83,0,100,2,83,0,41, - 3,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, - 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, - 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, - 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, - 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, - 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, - 32,32,122,106,66,117,105,108,116,105,110,73,109,112,111,114, - 116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,40, - 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, - 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, - 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, - 32,51,46,49,50,59,32,117,115,101,32,102,105,110,100,95, - 115,112,101,99,40,41,32,105,110,115,116,101,97,100,78,41, - 5,114,101,0,0,0,114,102,0,0,0,114,103,0,0,0, - 114,183,0,0,0,114,122,0,0,0,41,4,114,180,0,0, - 0,114,89,0,0,0,114,181,0,0,0,114,109,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,243,2,0,0, - 115,12,0,0,0,6,9,2,2,4,254,12,3,18,1,255, - 128,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,67,0,0,0,115,46,0,0,0,124,0,106,0, - 116,1,106,2,118,1,114,17,116,3,100,1,160,4,124,0, - 106,0,161,1,124,0,106,0,100,2,141,2,130,1,116,5, - 116,6,106,7,124,0,131,2,83,0,41,4,122,24,67,114, - 101,97,116,101,32,97,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,114,85,0,0,0,114,19,0,0,0, - 78,41,8,114,20,0,0,0,114,18,0,0,0,114,86,0, - 0,0,114,87,0,0,0,114,50,0,0,0,114,74,0,0, - 0,114,64,0,0,0,90,14,99,114,101,97,116,101,95,98, - 117,105,108,116,105,110,114,174,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,162,0,0,0,2, - 3,0,0,115,12,0,0,0,12,3,12,1,4,1,6,255, - 12,2,255,128,122,29,66,117,105,108,116,105,110,73,109,112, + 16,128,4,0,114,106,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0, + 0,0,115,10,1,0,0,122,9,124,0,106,0,160,1,124, + 0,106,2,161,1,1,0,87,0,110,23,1,0,1,0,1, + 0,124,0,106,2,116,3,106,4,118,0,114,32,116,3,106, + 4,160,5,124,0,106,2,161,1,125,1,124,1,116,3,106, + 4,124,0,106,2,60,0,130,0,116,3,106,4,160,5,124, + 0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,106, + 2,60,0,116,6,124,1,100,1,100,0,131,3,100,0,117, + 0,114,68,122,6,124,0,106,0,124,1,95,7,87,0,110, + 7,4,0,116,8,121,132,1,0,1,0,1,0,89,0,116, + 6,124,1,100,2,100,0,131,3,100,0,117,0,114,104,122, + 20,124,1,106,9,124,1,95,10,116,11,124,1,100,3,131, + 2,115,95,124,0,106,2,160,12,100,4,161,1,100,5,25, + 0,124,1,95,10,87,0,110,7,4,0,116,8,121,131,1, + 0,1,0,1,0,89,0,116,6,124,1,100,6,100,0,131, + 3,100,0,117,0,114,128,122,6,124,0,124,1,95,13,87, + 0,124,1,83,0,4,0,116,8,121,130,1,0,1,0,1, + 0,89,0,124,1,83,0,124,1,83,0,119,0,119,0,119, + 0,41,7,78,114,112,0,0,0,114,158,0,0,0,114,154, + 0,0,0,114,141,0,0,0,114,25,0,0,0,114,113,0, + 0,0,41,14,114,122,0,0,0,114,170,0,0,0,114,20, + 0,0,0,114,18,0,0,0,114,105,0,0,0,114,171,0, + 0,0,114,13,0,0,0,114,112,0,0,0,114,2,0,0, + 0,114,9,0,0,0,114,158,0,0,0,114,11,0,0,0, + 114,142,0,0,0,114,113,0,0,0,114,164,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,25, + 95,108,111,97,100,95,98,97,99,107,119,97,114,100,95,99, + 111,109,112,97,116,105,98,108,101,116,2,0,0,115,64,0, + 0,0,2,3,18,1,6,1,12,1,14,1,12,1,2,1, + 14,3,12,1,16,1,2,1,12,1,12,1,2,1,16,1, + 2,1,8,4,10,1,18,1,4,128,12,1,2,1,16,1, + 2,1,8,1,4,3,12,254,2,1,8,1,2,254,2,251, + 2,246,114,172,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,11,0,0,0,67,0,0,0, + 115,242,0,0,0,124,0,106,0,100,0,117,1,114,29,116, + 1,124,0,106,0,100,1,131,2,115,29,116,2,124,0,106, + 0,131,1,155,0,100,2,157,2,125,1,116,3,160,4,124, + 1,116,5,161,2,1,0,116,6,124,0,131,1,83,0,116, + 7,124,0,131,1,125,2,100,3,124,0,95,8,122,79,124, + 2,116,9,106,10,124,0,106,11,60,0,122,26,124,0,106, + 0,100,0,117,0,114,62,124,0,106,12,100,0,117,0,114, + 61,116,13,100,4,124,0,106,11,100,5,141,2,130,1,110, + 6,124,0,106,0,160,14,124,2,161,1,1,0,87,0,110, + 19,1,0,1,0,1,0,122,7,116,9,106,10,124,0,106, + 11,61,0,87,0,130,0,4,0,116,15,121,120,1,0,1, + 0,1,0,89,0,130,0,116,9,106,10,160,16,124,0,106, + 11,161,1,125,2,124,2,116,9,106,10,124,0,106,11,60, + 0,116,17,100,6,124,0,106,11,124,0,106,0,131,3,1, + 0,87,0,100,7,124,0,95,8,124,2,83,0,100,7,124, + 0,95,8,119,0,119,0,41,8,78,114,163,0,0,0,114, + 168,0,0,0,84,114,167,0,0,0,114,19,0,0,0,122, + 18,105,109,112,111,114,116,32,123,33,114,125,32,35,32,123, + 33,114,125,70,41,18,114,122,0,0,0,114,11,0,0,0, + 114,7,0,0,0,114,101,0,0,0,114,102,0,0,0,114, + 169,0,0,0,114,172,0,0,0,114,165,0,0,0,90,13, + 95,105,110,105,116,105,97,108,105,122,105,110,103,114,18,0, + 0,0,114,105,0,0,0,114,20,0,0,0,114,129,0,0, + 0,114,87,0,0,0,114,163,0,0,0,114,70,0,0,0, + 114,171,0,0,0,114,83,0,0,0,41,3,114,109,0,0, + 0,114,108,0,0,0,114,110,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,14,95,108,111,97, + 100,95,117,110,108,111,99,107,101,100,152,2,0,0,115,60, + 0,0,0,10,2,12,2,16,1,12,2,8,1,8,2,6, + 5,2,1,12,1,2,1,10,1,10,1,14,1,2,255,12, + 4,4,128,6,1,2,1,12,1,2,3,12,254,2,1,2, + 1,14,5,12,1,18,1,6,2,4,2,8,254,2,245,114, + 173,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,8,0,0,0,67,0,0,0,115,54,0, + 0,0,116,0,124,0,106,1,131,1,143,12,1,0,116,2, + 124,0,131,1,87,0,2,0,100,1,4,0,4,0,131,3, + 1,0,83,0,49,0,115,20,119,1,1,0,1,0,1,0, + 89,0,1,0,100,1,83,0,41,2,122,191,82,101,116,117, + 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, + 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, + 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, + 100,101,114,46,10,10,32,32,32,32,84,104,101,32,109,111, + 100,117,108,101,32,105,115,32,110,111,116,32,97,100,100,101, + 100,32,116,111,32,105,116,115,32,112,97,114,101,110,116,46, + 10,10,32,32,32,32,73,102,32,97,32,109,111,100,117,108, + 101,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32, + 115,121,115,46,109,111,100,117,108,101,115,44,32,116,104,97, + 116,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108, + 101,32,103,101,116,115,10,32,32,32,32,99,108,111,98,98, + 101,114,101,100,46,10,10,32,32,32,32,78,41,3,114,57, + 0,0,0,114,20,0,0,0,114,173,0,0,0,169,1,114, + 109,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,107,0,0,0,197,2,0,0,115,6,0,0, + 0,12,9,22,1,20,128,114,107,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,140,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,90,4,101,5,100,3,100,4, + 132,0,131,1,90,6,101,7,100,20,100,6,100,7,132,1, + 131,1,90,8,101,7,100,21,100,8,100,9,132,1,131,1, + 90,9,101,5,100,10,100,11,132,0,131,1,90,10,101,5, + 100,12,100,13,132,0,131,1,90,11,101,7,101,12,100,14, + 100,15,132,0,131,1,131,1,90,13,101,7,101,12,100,16, + 100,17,132,0,131,1,131,1,90,14,101,7,101,12,100,18, + 100,19,132,0,131,1,131,1,90,15,101,7,101,16,131,1, + 90,17,100,5,83,0,41,22,218,15,66,117,105,108,116,105, + 110,73,109,112,111,114,116,101,114,122,144,77,101,116,97,32, + 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, + 46,10,10,32,32,32,32,65,108,108,32,109,101,116,104,111, + 100,115,32,97,114,101,32,101,105,116,104,101,114,32,99,108, + 97,115,115,32,111,114,32,115,116,97,116,105,99,32,109,101, + 116,104,111,100,115,32,116,111,32,97,118,111,105,100,32,116, + 104,101,32,110,101,101,100,32,116,111,10,32,32,32,32,105, + 110,115,116,97,110,116,105,97,116,101,32,116,104,101,32,99, + 108,97,115,115,46,10,10,32,32,32,32,122,8,98,117,105, + 108,116,45,105,110,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,34, + 0,0,0,116,0,160,1,100,1,116,2,161,2,1,0,100, + 2,124,0,106,3,155,2,100,3,116,4,106,5,155,0,100, + 4,157,5,83,0,41,6,250,115,82,101,116,117,114,110,32, + 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, + 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, + 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, + 102,46,10,10,32,32,32,32,32,32,32,32,122,81,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,109,111, + 100,117,108,101,95,114,101,112,114,40,41,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, + 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, + 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,122, + 8,60,109,111,100,117,108,101,32,122,2,32,40,122,2,41, + 62,78,41,6,114,101,0,0,0,114,102,0,0,0,114,103, + 0,0,0,114,9,0,0,0,114,175,0,0,0,114,151,0, + 0,0,169,1,114,110,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,114,0,0,0,223,2,0, + 0,115,8,0,0,0,6,7,2,1,4,255,22,2,122,27, + 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, + 109,111,100,117,108,101,95,114,101,112,114,78,99,4,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0, + 0,67,0,0,0,115,42,0,0,0,124,2,100,0,117,1, + 114,6,100,0,83,0,116,0,160,1,124,1,161,1,114,19, + 116,2,124,1,124,0,124,0,106,3,100,1,141,3,83,0, + 100,0,83,0,169,2,78,114,150,0,0,0,41,4,114,64, + 0,0,0,90,10,105,115,95,98,117,105,108,116,105,110,114, + 104,0,0,0,114,151,0,0,0,169,4,218,3,99,108,115, + 114,89,0,0,0,218,4,112,97,116,104,218,6,116,97,114, + 103,101,116,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,234,2,0, + 0,115,10,0,0,0,8,2,4,1,10,1,16,1,4,2, + 122,25,66,117,105,108,116,105,110,73,109,112,111,114,116,101, + 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 67,0,0,0,115,42,0,0,0,116,0,160,1,100,1,116, + 2,161,2,1,0,124,0,160,3,124,1,124,2,161,2,125, + 3,124,3,100,2,117,1,114,19,124,3,106,4,83,0,100, + 2,83,0,41,3,122,175,70,105,110,100,32,116,104,101,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,39,112,97, + 116,104,39,32,105,115,32,101,118,101,114,32,115,112,101,99, + 105,102,105,101,100,32,116,104,101,110,32,116,104,101,32,115, + 101,97,114,99,104,32,105,115,32,99,111,110,115,105,100,101, + 114,101,100,32,97,32,102,97,105,108,117,114,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, + 32,32,32,32,32,32,122,106,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,46,102,105,110,100,95,109,111,100, + 117,108,101,40,41,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, + 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, + 116,104,111,110,32,51,46,49,50,59,32,117,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,78,41,5,114,101,0,0,0,114,102,0,0,0,114, + 103,0,0,0,114,183,0,0,0,114,122,0,0,0,41,4, + 114,180,0,0,0,114,89,0,0,0,114,181,0,0,0,114, + 109,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, + 243,2,0,0,115,10,0,0,0,6,9,2,2,4,254,12, + 3,18,1,122,27,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,115,46,0,0,0,124,0, + 106,0,116,1,106,2,118,1,114,17,116,3,100,1,160,4, + 124,0,106,0,161,1,124,0,106,0,100,2,141,2,130,1, + 116,5,116,6,106,7,124,0,131,2,83,0,41,4,122,24, + 67,114,101,97,116,101,32,97,32,98,117,105,108,116,45,105, + 110,32,109,111,100,117,108,101,114,85,0,0,0,114,19,0, + 0,0,78,41,8,114,20,0,0,0,114,18,0,0,0,114, + 86,0,0,0,114,87,0,0,0,114,50,0,0,0,114,74, + 0,0,0,114,64,0,0,0,90,14,99,114,101,97,116,101, + 95,98,117,105,108,116,105,110,114,174,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,162,0,0, + 0,2,3,0,0,115,10,0,0,0,12,3,12,1,4,1, + 6,255,12,2,122,29,66,117,105,108,116,105,110,73,109,112, 111,114,116,101,114,46,99,114,101,97,116,101,95,109,111,100, 117,108,101,99,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, @@ -1179,148 +1173,147 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,114,64,0,0,0,90,12,101,120,101,99,95,98, 117,105,108,116,105,110,114,177,0,0,0,114,5,0,0,0, 114,5,0,0,0,114,6,0,0,0,114,163,0,0,0,10, - 3,0,0,115,4,0,0,0,16,3,255,128,122,27,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,243,4,0,0,0,100,1,83,0,41,2,122,57,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100, - 111,32,110,111,116,32,104,97,118,101,32,99,111,100,101,32, - 111,98,106,101,99,116,115,46,78,114,5,0,0,0,169,2, - 114,180,0,0,0,114,89,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,8,103,101,116,95,99, - 111,100,101,15,3,0,0,243,4,0,0,0,4,4,255,128, - 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,114,185,0,0,0,41,2,122,56,82,101,116,117, - 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, - 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, - 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, - 111,100,101,46,78,114,5,0,0,0,114,186,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, - 103,101,116,95,115,111,117,114,99,101,21,3,0,0,114,188, - 0,0,0,122,26,66,117,105,108,116,105,110,73,109,112,111, - 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,185,0,0,0,41,3,122, - 52,82,101,116,117,114,110,32,70,97,108,115,101,32,97,115, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 115,32,97,114,101,32,110,101,118,101,114,32,112,97,99,107, - 97,103,101,115,46,70,78,114,5,0,0,0,114,186,0,0, + 3,0,0,115,2,0,0,0,16,3,122,27,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,101,120,101,99, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 243,4,0,0,0,100,1,83,0,41,2,122,57,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,115,32,100,111,32, + 110,111,116,32,104,97,118,101,32,99,111,100,101,32,111,98, + 106,101,99,116,115,46,78,114,5,0,0,0,169,2,114,180, + 0,0,0,114,89,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,8,103,101,116,95,99,111,100, + 101,15,3,0,0,243,2,0,0,0,4,4,122,24,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, + 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, + 185,0,0,0,41,2,122,56,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, + 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 78,114,5,0,0,0,114,186,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, + 115,111,117,114,99,101,21,3,0,0,114,188,0,0,0,122, + 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, + 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,114,185,0,0,0,41,3,122,52,82,101,116, + 117,114,110,32,70,97,108,115,101,32,97,115,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,115,32,97,114, + 101,32,110,101,118,101,114,32,112,97,99,107,97,103,101,115, + 46,70,78,114,5,0,0,0,114,186,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,128,0,0, + 0,27,3,0,0,114,188,0,0,0,122,26,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,105,115,95,112, + 97,99,107,97,103,101,169,2,78,78,114,0,0,0,0,41, + 18,114,9,0,0,0,114,8,0,0,0,114,1,0,0,0, + 114,10,0,0,0,114,151,0,0,0,218,12,115,116,97,116, + 105,99,109,101,116,104,111,100,114,114,0,0,0,218,11,99, + 108,97,115,115,109,101,116,104,111,100,114,183,0,0,0,114, + 184,0,0,0,114,162,0,0,0,114,163,0,0,0,114,95, + 0,0,0,114,187,0,0,0,114,189,0,0,0,114,128,0, + 0,0,114,111,0,0,0,114,170,0,0,0,114,5,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,128,0,0,0,27,3,0,0,114,188,0,0,0,122,26, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 105,115,95,112,97,99,107,97,103,101,169,2,78,78,114,0, - 0,0,0,41,18,114,9,0,0,0,114,8,0,0,0,114, - 1,0,0,0,114,10,0,0,0,114,151,0,0,0,218,12, - 115,116,97,116,105,99,109,101,116,104,111,100,114,114,0,0, - 0,218,11,99,108,97,115,115,109,101,116,104,111,100,114,183, - 0,0,0,114,184,0,0,0,114,162,0,0,0,114,163,0, - 0,0,114,95,0,0,0,114,187,0,0,0,114,189,0,0, - 0,114,128,0,0,0,114,111,0,0,0,114,170,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,175,0,0,0,212,2,0,0,115,48,0, - 0,0,8,0,4,2,4,7,2,2,10,1,2,10,12,1, - 2,8,12,1,2,14,10,1,2,7,10,1,2,4,2,1, - 12,1,2,4,2,1,12,1,2,4,2,1,12,1,12,4, - 255,128,114,175,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, - 115,144,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,90,4,101,5,100,3,100,4,132,0,131,1,90, - 6,101,7,100,22,100,6,100,7,132,1,131,1,90,8,101, - 7,100,23,100,8,100,9,132,1,131,1,90,9,101,5,100, - 10,100,11,132,0,131,1,90,10,101,5,100,12,100,13,132, - 0,131,1,90,11,101,7,100,14,100,15,132,0,131,1,90, - 12,101,7,101,13,100,16,100,17,132,0,131,1,131,1,90, - 14,101,7,101,13,100,18,100,19,132,0,131,1,131,1,90, - 15,101,7,101,13,100,20,100,21,132,0,131,1,131,1,90, - 16,100,5,83,0,41,24,218,14,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,122,142,77,101,116,97,32,112,97, - 116,104,32,105,109,112,111,114,116,32,102,111,114,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,115,46,10,10,32, - 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, - 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, - 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, - 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, - 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, - 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, - 46,10,10,32,32,32,32,90,6,102,114,111,122,101,110,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,160, - 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106, - 4,116,5,106,6,161,2,83,0,41,4,114,176,0,0,0, - 122,80,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 46,109,111,100,117,108,101,95,114,101,112,114,40,41,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, - 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, - 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, - 49,50,114,166,0,0,0,78,41,7,114,101,0,0,0,114, - 102,0,0,0,114,103,0,0,0,114,50,0,0,0,114,9, - 0,0,0,114,193,0,0,0,114,151,0,0,0,41,1,218, - 1,109,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,114,0,0,0,47,3,0,0,115,10,0,0,0,6, - 7,2,1,4,255,16,2,255,128,122,26,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, - 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, - 30,0,0,0,116,0,160,1,124,1,161,1,114,13,116,2, - 124,1,124,0,124,0,106,3,100,1,141,3,83,0,100,0, - 83,0,114,178,0,0,0,41,4,114,64,0,0,0,114,98, - 0,0,0,114,104,0,0,0,114,151,0,0,0,114,179,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,183,0,0,0,58,3,0,0,115,8,0,0,0,10, - 2,16,1,4,2,255,128,122,24,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, - 99,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,116, - 0,160,1,100,1,116,2,161,2,1,0,116,3,160,4,124, - 1,161,1,114,13,124,0,83,0,100,2,83,0,41,3,122, - 93,70,105,110,100,32,97,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,105, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,40,41,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,32,97,110,100,32,115, - 108,97,116,101,100,32,102,111,114,32,114,101,109,111,118,97, - 108,32,105,110,32,80,121,116,104,111,110,32,51,46,49,50, - 59,32,117,115,101,32,102,105,110,100,95,115,112,101,99,40, - 41,32,105,110,115,116,101,97,100,78,41,5,114,101,0,0, - 0,114,102,0,0,0,114,103,0,0,0,114,64,0,0,0, - 114,98,0,0,0,41,3,114,180,0,0,0,114,89,0,0, - 0,114,181,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,184,0,0,0,65,3,0,0,115,10, - 0,0,0,6,7,2,2,4,254,18,3,255,128,122,26,70, + 114,175,0,0,0,212,2,0,0,115,46,0,0,0,8,0, + 4,2,4,7,2,2,10,1,2,10,12,1,2,8,12,1, + 2,14,10,1,2,7,10,1,2,4,2,1,12,1,2,4, + 2,1,12,1,2,4,2,1,12,1,12,4,114,175,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,64,0,0,0,115,144,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,101, + 5,100,3,100,4,132,0,131,1,90,6,101,7,100,22,100, + 6,100,7,132,1,131,1,90,8,101,7,100,23,100,8,100, + 9,132,1,131,1,90,9,101,5,100,10,100,11,132,0,131, + 1,90,10,101,5,100,12,100,13,132,0,131,1,90,11,101, + 7,100,14,100,15,132,0,131,1,90,12,101,7,101,13,100, + 16,100,17,132,0,131,1,131,1,90,14,101,7,101,13,100, + 18,100,19,132,0,131,1,131,1,90,15,101,7,101,13,100, + 20,100,21,132,0,131,1,131,1,90,16,100,5,83,0,41, + 24,218,14,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,122,142,77,101,116,97,32,112,97,116,104,32,105,109,112, + 111,114,116,32,102,111,114,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108, + 32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116, + 104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97, + 116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97, + 118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111, + 10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101, + 32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32, + 32,90,6,102,114,111,122,101,110,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, + 0,0,115,28,0,0,0,116,0,160,1,100,1,116,2,161, + 2,1,0,100,2,160,3,124,0,106,4,116,5,106,6,161, + 2,83,0,41,4,114,176,0,0,0,122,80,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,109,111,100,117,108, + 101,95,114,101,112,114,40,41,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,32,97,110,100,32,115,108,97,116,101, + 100,32,102,111,114,32,114,101,109,111,118,97,108,32,105,110, + 32,80,121,116,104,111,110,32,51,46,49,50,114,166,0,0, + 0,78,41,7,114,101,0,0,0,114,102,0,0,0,114,103, + 0,0,0,114,50,0,0,0,114,9,0,0,0,114,193,0, + 0,0,114,151,0,0,0,41,1,218,1,109,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,114,0,0,0, + 47,3,0,0,115,8,0,0,0,6,7,2,1,4,255,16, + 2,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, + 0,0,0,67,0,0,0,115,30,0,0,0,116,0,160,1, + 124,1,161,1,114,13,116,2,124,1,124,0,124,0,106,3, + 100,1,141,3,83,0,100,0,83,0,114,178,0,0,0,41, + 4,114,64,0,0,0,114,98,0,0,0,114,104,0,0,0, + 114,151,0,0,0,114,179,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,183,0,0,0,58,3, + 0,0,115,6,0,0,0,10,2,16,1,4,2,122,24,70, 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, - 0,0,114,185,0,0,0,41,2,122,42,85,115,101,32,100, - 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, - 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, - 116,105,111,110,46,78,114,5,0,0,0,114,174,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 162,0,0,0,77,3,0,0,115,4,0,0,0,4,0,255, - 128,122,28,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, - 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,124,0,106, - 0,106,1,125,1,116,2,160,3,124,1,161,1,115,18,116, - 4,100,1,160,5,124,1,161,1,124,1,100,2,141,2,130, - 1,116,6,116,2,106,7,124,1,131,2,125,2,116,8,124, - 2,124,0,106,9,131,2,1,0,100,0,83,0,114,97,0, - 0,0,41,10,114,113,0,0,0,114,20,0,0,0,114,64, - 0,0,0,114,98,0,0,0,114,87,0,0,0,114,50,0, - 0,0,114,74,0,0,0,218,17,103,101,116,95,102,114,111, - 122,101,110,95,111,98,106,101,99,116,218,4,101,120,101,99, - 114,14,0,0,0,41,3,114,110,0,0,0,114,20,0,0, - 0,218,4,99,111,100,101,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,163,0,0,0,81,3,0,0,115, - 16,0,0,0,8,2,10,1,10,1,2,1,6,255,12,2, - 16,1,255,128,122,26,70,114,111,122,101,110,73,109,112,111, + 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, + 115,30,0,0,0,116,0,160,1,100,1,116,2,161,2,1, + 0,116,3,160,4,124,1,161,1,114,13,124,0,83,0,100, + 2,83,0,41,3,122,93,70,105,110,100,32,97,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,105,70,114,111,122,101,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, + 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, + 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, + 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, + 41,5,114,101,0,0,0,114,102,0,0,0,114,103,0,0, + 0,114,64,0,0,0,114,98,0,0,0,41,3,114,180,0, + 0,0,114,89,0,0,0,114,181,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,184,0,0,0, + 65,3,0,0,115,8,0,0,0,6,7,2,2,4,254,18, + 3,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,102,105,110,100,95,109,111,100,117,108,101,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,67,0,0,0,114,185,0,0,0,41,2,122,42,85, + 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, + 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, + 99,114,101,97,116,105,111,110,46,78,114,5,0,0,0,114, + 174,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,162,0,0,0,77,3,0,0,115,2,0,0, + 0,4,0,122,28,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,64,0,0,0,124, + 0,106,0,106,1,125,1,116,2,160,3,124,1,161,1,115, + 18,116,4,100,1,160,5,124,1,161,1,124,1,100,2,141, + 2,130,1,116,6,116,2,106,7,124,1,131,2,125,2,116, + 8,124,2,124,0,106,9,131,2,1,0,100,0,83,0,114, + 97,0,0,0,41,10,114,113,0,0,0,114,20,0,0,0, + 114,64,0,0,0,114,98,0,0,0,114,87,0,0,0,114, + 50,0,0,0,114,74,0,0,0,218,17,103,101,116,95,102, + 114,111,122,101,110,95,111,98,106,101,99,116,218,4,101,120, + 101,99,114,14,0,0,0,41,3,114,110,0,0,0,114,20, + 0,0,0,218,4,99,111,100,101,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,163,0,0,0,81,3,0, + 0,115,14,0,0,0,8,2,10,1,10,1,2,1,6,255, + 12,2,16,1,122,26,70,114,111,122,101,110,73,109,112,111, 114,116,101,114,46,101,120,101,99,95,109,111,100,117,108,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, 0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,0, @@ -1333,164 +1326,163 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 46,10,10,32,32,32,32,32,32,32,32,78,41,1,114,111, 0,0,0,114,186,0,0,0,114,5,0,0,0,114,5,0, 0,0,114,6,0,0,0,114,170,0,0,0,90,3,0,0, - 115,4,0,0,0,10,8,255,128,122,26,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,108,111,97,100,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,243,10, - 0,0,0,116,0,160,1,124,1,161,1,83,0,41,2,122, - 45,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,46,78,41, - 2,114,64,0,0,0,114,195,0,0,0,114,186,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 187,0,0,0,100,3,0,0,243,4,0,0,0,10,4,255, - 128,122,23,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,114,185,0,0,0,41,2,122,54,82,101,116,117, - 114,110,32,78,111,110,101,32,97,115,32,102,114,111,122,101, - 110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,116, - 32,104,97,118,101,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,5,0,0,0,114,186,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,189,0,0, - 0,106,3,0,0,114,188,0,0,0,122,25,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,115, - 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,114,198, - 0,0,0,41,2,122,46,82,101,116,117,114,110,32,84,114, - 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, - 107,97,103,101,46,78,41,2,114,64,0,0,0,90,17,105, - 115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,101, - 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,128,0,0,0,112,3,0,0,114,199,0, - 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,105,115,95,112,97,99,107,97,103,101,114,190,0, - 0,0,114,0,0,0,0,41,17,114,9,0,0,0,114,8, - 0,0,0,114,1,0,0,0,114,10,0,0,0,114,151,0, - 0,0,114,191,0,0,0,114,114,0,0,0,114,192,0,0, - 0,114,183,0,0,0,114,184,0,0,0,114,162,0,0,0, - 114,163,0,0,0,114,170,0,0,0,114,100,0,0,0,114, - 187,0,0,0,114,189,0,0,0,114,128,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,193,0,0,0,36,3,0,0,115,50,0,0,0, - 8,0,4,2,4,7,2,2,10,1,2,10,12,1,2,6, - 12,1,2,11,10,1,2,3,10,1,2,8,10,1,2,9, - 2,1,12,1,2,4,2,1,12,1,2,4,2,1,16,1, - 255,128,114,193,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, - 115,32,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,83,0,41,7,218,18,95,73,109,112,111,114,116, - 76,111,99,107,67,111,110,116,101,120,116,122,36,67,111,110, - 116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114, + 115,2,0,0,0,10,8,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,243,10,0,0, + 0,116,0,160,1,124,1,161,1,83,0,41,2,122,45,82, + 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, + 98,106,101,99,116,32,102,111,114,32,116,104,101,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,46,78,41,2,114, + 64,0,0,0,114,195,0,0,0,114,186,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,187,0, + 0,0,100,3,0,0,243,2,0,0,0,10,4,122,23,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101, + 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, + 185,0,0,0,41,2,122,54,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,102,114,111,122,101,110,32,109,111, + 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118, + 101,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114, + 5,0,0,0,114,186,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,189,0,0,0,106,3,0, + 0,114,188,0,0,0,122,25,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,99, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,114,198,0,0,0,41, + 2,122,46,82,101,116,117,114,110,32,84,114,117,101,32,105, + 102,32,116,104,101,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, + 46,78,41,2,114,64,0,0,0,90,17,105,115,95,102,114, + 111,122,101,110,95,112,97,99,107,97,103,101,114,186,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,128,0,0,0,112,3,0,0,114,199,0,0,0,122,25, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,105, + 115,95,112,97,99,107,97,103,101,114,190,0,0,0,114,0, + 0,0,0,41,17,114,9,0,0,0,114,8,0,0,0,114, + 1,0,0,0,114,10,0,0,0,114,151,0,0,0,114,191, + 0,0,0,114,114,0,0,0,114,192,0,0,0,114,183,0, + 0,0,114,184,0,0,0,114,162,0,0,0,114,163,0,0, + 0,114,170,0,0,0,114,100,0,0,0,114,187,0,0,0, + 114,189,0,0,0,114,128,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,193, + 0,0,0,36,3,0,0,115,48,0,0,0,8,0,4,2, + 4,7,2,2,10,1,2,10,12,1,2,6,12,1,2,11, + 10,1,2,3,10,1,2,8,10,1,2,9,2,1,12,1, + 2,4,2,1,12,1,2,4,2,1,16,1,114,193,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,64,0,0,0,115,32,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, + 0,90,4,100,4,100,5,132,0,90,5,100,6,83,0,41, + 7,218,18,95,73,109,112,111,114,116,76,111,99,107,67,111, + 110,116,101,120,116,122,36,67,111,110,116,101,120,116,32,109, + 97,110,97,103,101,114,32,102,111,114,32,116,104,101,32,105, + 109,112,111,114,116,32,108,111,99,107,46,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 67,0,0,0,243,12,0,0,0,116,0,160,1,161,0,1, + 0,100,1,83,0,41,2,122,24,65,99,113,117,105,114,101, 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, - 46,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,243,12,0,0,0,116, - 0,160,1,161,0,1,0,100,1,83,0,41,2,122,24,65, - 99,113,117,105,114,101,32,116,104,101,32,105,109,112,111,114, - 116,32,108,111,99,107,46,78,41,2,114,64,0,0,0,114, - 65,0,0,0,114,52,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,61,0,0,0,125,3,0, - 0,243,4,0,0,0,12,2,255,128,122,28,95,73,109,112, - 111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95, - 95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,2,0,0,0,67,0,0, - 0,114,201,0,0,0,41,2,122,60,82,101,108,101,97,115, - 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, - 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, - 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, - 116,105,111,110,115,46,78,41,2,114,64,0,0,0,114,67, - 0,0,0,41,4,114,33,0,0,0,218,8,101,120,99,95, - 116,121,112,101,218,9,101,120,99,95,118,97,108,117,101,218, - 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,63,0, - 0,0,129,3,0,0,114,202,0,0,0,122,27,95,73,109, - 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, - 95,95,101,120,105,116,95,95,78,41,6,114,9,0,0,0, - 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, - 61,0,0,0,114,63,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,200,0, - 0,0,121,3,0,0,115,10,0,0,0,8,0,4,2,8, - 2,12,4,255,128,114,200,0,0,0,99,3,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,64,0,0,0,124,1,160,0,100,1,124,2, - 100,2,24,0,161,2,125,3,116,1,124,3,131,1,124,2, - 107,0,114,18,116,2,100,3,131,1,130,1,124,3,100,4, - 25,0,125,4,124,0,114,30,100,5,160,3,124,4,124,0, - 161,2,83,0,124,4,83,0,41,7,122,50,82,101,115,111, - 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, - 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, - 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,141, - 0,0,0,114,42,0,0,0,122,50,97,116,116,101,109,112, - 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, - 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, - 101,118,101,108,32,112,97,99,107,97,103,101,114,25,0,0, - 0,250,5,123,125,46,123,125,78,41,4,218,6,114,115,112, - 108,105,116,218,3,108,101,110,114,87,0,0,0,114,50,0, - 0,0,41,5,114,20,0,0,0,218,7,112,97,99,107,97, - 103,101,218,5,108,101,118,101,108,90,4,98,105,116,115,90, - 4,98,97,115,101,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,13,95,114,101,115,111,108,118,101,95,110, - 97,109,101,134,3,0,0,115,12,0,0,0,16,2,12,1, - 8,1,8,1,20,1,255,128,114,211,0,0,0,99,3,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, - 0,0,67,0,0,0,115,60,0,0,0,116,0,124,0,131, - 1,155,0,100,1,157,2,125,3,116,1,160,2,124,3,116, - 3,161,2,1,0,124,0,160,4,124,1,124,2,161,2,125, - 4,124,4,100,0,117,0,114,25,100,0,83,0,116,5,124, - 1,124,4,131,2,83,0,41,2,78,122,53,46,102,105,110, - 100,95,115,112,101,99,40,41,32,110,111,116,32,102,111,117, - 110,100,59,32,102,97,108,108,105,110,103,32,98,97,99,107, - 32,116,111,32,102,105,110,100,95,109,111,100,117,108,101,40, - 41,41,6,114,7,0,0,0,114,101,0,0,0,114,102,0, - 0,0,114,169,0,0,0,114,184,0,0,0,114,104,0,0, - 0,41,5,218,6,102,105,110,100,101,114,114,20,0,0,0, - 114,181,0,0,0,114,108,0,0,0,114,122,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, - 95,102,105,110,100,95,115,112,101,99,95,108,101,103,97,99, - 121,143,3,0,0,115,14,0,0,0,14,1,12,2,12,1, - 8,1,4,1,10,1,255,128,114,213,0,0,0,99,3,0, - 0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0, - 0,0,67,0,0,0,115,24,1,0,0,116,0,106,1,125, - 3,124,3,100,1,117,0,114,11,116,2,100,2,131,1,130, - 1,124,3,115,19,116,3,160,4,100,3,116,5,161,2,1, - 0,124,0,116,0,106,6,118,0,125,4,124,3,68,0,93, - 109,125,5,116,7,131,0,143,46,1,0,122,5,124,5,106, - 8,125,6,87,0,110,26,4,0,116,9,121,139,1,0,1, - 0,1,0,116,10,124,5,124,0,124,1,131,3,125,7,124, - 7,100,1,117,0,114,62,89,0,87,0,100,1,4,0,4, - 0,131,3,1,0,113,26,89,0,110,6,124,6,124,0,124, - 1,124,2,131,3,125,7,87,0,100,1,4,0,4,0,131, - 3,1,0,110,8,49,0,115,80,119,1,1,0,1,0,1, - 0,89,0,1,0,124,7,100,1,117,1,114,135,124,4,115, - 131,124,0,116,0,106,6,118,0,114,131,116,0,106,6,124, - 0,25,0,125,8,122,5,124,8,106,11,125,9,87,0,110, - 12,4,0,116,9,121,138,1,0,1,0,1,0,124,7,6, - 0,89,0,2,0,1,0,83,0,124,9,100,1,117,0,114, - 127,124,7,2,0,1,0,83,0,124,9,2,0,1,0,83, - 0,124,7,2,0,1,0,83,0,113,26,100,1,83,0,119, - 0,119,0,41,4,122,21,70,105,110,100,32,97,32,109,111, - 100,117,108,101,39,115,32,115,112,101,99,46,78,122,53,115, - 121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,32, - 78,111,110,101,44,32,80,121,116,104,111,110,32,105,115,32, - 108,105,107,101,108,121,32,115,104,117,116,116,105,110,103,32, - 100,111,119,110,122,22,115,121,115,46,109,101,116,97,95,112, - 97,116,104,32,105,115,32,101,109,112,116,121,41,12,114,18, - 0,0,0,218,9,109,101,116,97,95,112,97,116,104,114,87, - 0,0,0,114,101,0,0,0,114,102,0,0,0,114,169,0, - 0,0,114,105,0,0,0,114,200,0,0,0,114,183,0,0, - 0,114,2,0,0,0,114,213,0,0,0,114,113,0,0,0, - 41,10,114,20,0,0,0,114,181,0,0,0,114,182,0,0, - 0,114,214,0,0,0,90,9,105,115,95,114,101,108,111,97, - 100,114,212,0,0,0,114,183,0,0,0,114,109,0,0,0, - 114,110,0,0,0,114,113,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,10,95,102,105,110,100, - 95,115,112,101,99,153,3,0,0,115,66,0,0,0,6,2, - 8,1,8,2,4,3,12,1,10,5,8,1,8,1,2,1, - 10,1,12,1,12,1,8,1,16,1,4,255,12,3,30,128, - 8,1,14,2,10,1,2,1,10,1,12,1,12,4,8,2, - 8,1,8,2,8,2,2,239,4,19,2,243,2,244,255,128, + 46,78,41,2,114,64,0,0,0,114,65,0,0,0,114,52, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,61,0,0,0,125,3,0,0,243,2,0,0,0, + 12,2,122,28,95,73,109,112,111,114,116,76,111,99,107,67, + 111,110,116,101,120,116,46,95,95,101,110,116,101,114,95,95, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,2,0,0,0,67,0,0,0,114,201,0,0,0,41,2, + 122,60,82,101,108,101,97,115,101,32,116,104,101,32,105,109, + 112,111,114,116,32,108,111,99,107,32,114,101,103,97,114,100, + 108,101,115,115,32,111,102,32,97,110,121,32,114,97,105,115, + 101,100,32,101,120,99,101,112,116,105,111,110,115,46,78,41, + 2,114,64,0,0,0,114,67,0,0,0,41,4,114,33,0, + 0,0,218,8,101,120,99,95,116,121,112,101,218,9,101,120, + 99,95,118,97,108,117,101,218,13,101,120,99,95,116,114,97, + 99,101,98,97,99,107,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,63,0,0,0,129,3,0,0,114,202, + 0,0,0,122,27,95,73,109,112,111,114,116,76,111,99,107, + 67,111,110,116,101,120,116,46,95,95,101,120,105,116,95,95, + 78,41,6,114,9,0,0,0,114,8,0,0,0,114,1,0, + 0,0,114,10,0,0,0,114,61,0,0,0,114,63,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,200,0,0,0,121,3,0,0,115,8, + 0,0,0,8,0,4,2,8,2,12,4,114,200,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,64,0,0,0,124,1, + 160,0,100,1,124,2,100,2,24,0,161,2,125,3,116,1, + 124,3,131,1,124,2,107,0,114,18,116,2,100,3,131,1, + 130,1,124,3,100,4,25,0,125,4,124,0,114,30,100,5, + 160,3,124,4,124,0,161,2,83,0,124,4,83,0,41,7, + 122,50,82,101,115,111,108,118,101,32,97,32,114,101,108,97, + 116,105,118,101,32,109,111,100,117,108,101,32,110,97,109,101, + 32,116,111,32,97,110,32,97,98,115,111,108,117,116,101,32, + 111,110,101,46,114,141,0,0,0,114,42,0,0,0,122,50, + 97,116,116,101,109,112,116,101,100,32,114,101,108,97,116,105, + 118,101,32,105,109,112,111,114,116,32,98,101,121,111,110,100, + 32,116,111,112,45,108,101,118,101,108,32,112,97,99,107,97, + 103,101,114,25,0,0,0,250,5,123,125,46,123,125,78,41, + 4,218,6,114,115,112,108,105,116,218,3,108,101,110,114,87, + 0,0,0,114,50,0,0,0,41,5,114,20,0,0,0,218, + 7,112,97,99,107,97,103,101,218,5,108,101,118,101,108,90, + 4,98,105,116,115,90,4,98,97,115,101,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,13,95,114,101,115, + 111,108,118,101,95,110,97,109,101,134,3,0,0,115,10,0, + 0,0,16,2,12,1,8,1,8,1,20,1,114,211,0,0, + 0,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,4,0,0,0,67,0,0,0,115,60,0,0,0,116, + 0,124,0,131,1,155,0,100,1,157,2,125,3,116,1,160, + 2,124,3,116,3,161,2,1,0,124,0,160,4,124,1,124, + 2,161,2,125,4,124,4,100,0,117,0,114,25,100,0,83, + 0,116,5,124,1,124,4,131,2,83,0,41,2,78,122,53, + 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, + 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, + 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, + 117,108,101,40,41,41,6,114,7,0,0,0,114,101,0,0, + 0,114,102,0,0,0,114,169,0,0,0,114,184,0,0,0, + 114,104,0,0,0,41,5,218,6,102,105,110,100,101,114,114, + 20,0,0,0,114,181,0,0,0,114,108,0,0,0,114,122, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,218,17,95,102,105,110,100,95,115,112,101,99,95,108, + 101,103,97,99,121,143,3,0,0,115,12,0,0,0,14,1, + 12,2,12,1,8,1,4,1,10,1,114,213,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, + 10,0,0,0,67,0,0,0,115,24,1,0,0,116,0,106, + 1,125,3,124,3,100,1,117,0,114,11,116,2,100,2,131, + 1,130,1,124,3,115,19,116,3,160,4,100,3,116,5,161, + 2,1,0,124,0,116,0,106,6,118,0,125,4,124,3,68, + 0,93,109,125,5,116,7,131,0,143,46,1,0,122,5,124, + 5,106,8,125,6,87,0,110,26,4,0,116,9,121,139,1, + 0,1,0,1,0,116,10,124,5,124,0,124,1,131,3,125, + 7,124,7,100,1,117,0,114,62,89,0,87,0,100,1,4, + 0,4,0,131,3,1,0,113,26,89,0,110,6,124,6,124, + 0,124,1,124,2,131,3,125,7,87,0,100,1,4,0,4, + 0,131,3,1,0,110,8,49,0,115,80,119,1,1,0,1, + 0,1,0,89,0,1,0,124,7,100,1,117,1,114,135,124, + 4,115,131,124,0,116,0,106,6,118,0,114,131,116,0,106, + 6,124,0,25,0,125,8,122,5,124,8,106,11,125,9,87, + 0,110,12,4,0,116,9,121,138,1,0,1,0,1,0,124, + 7,6,0,89,0,2,0,1,0,83,0,124,9,100,1,117, + 0,114,127,124,7,2,0,1,0,83,0,124,9,2,0,1, + 0,83,0,124,7,2,0,1,0,83,0,113,26,100,1,83, + 0,119,0,119,0,41,4,122,21,70,105,110,100,32,97,32, + 109,111,100,117,108,101,39,115,32,115,112,101,99,46,78,122, + 53,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, + 115,32,78,111,110,101,44,32,80,121,116,104,111,110,32,105, + 115,32,108,105,107,101,108,121,32,115,104,117,116,116,105,110, + 103,32,100,111,119,110,122,22,115,121,115,46,109,101,116,97, + 95,112,97,116,104,32,105,115,32,101,109,112,116,121,41,12, + 114,18,0,0,0,218,9,109,101,116,97,95,112,97,116,104, + 114,87,0,0,0,114,101,0,0,0,114,102,0,0,0,114, + 169,0,0,0,114,105,0,0,0,114,200,0,0,0,114,183, + 0,0,0,114,2,0,0,0,114,213,0,0,0,114,113,0, + 0,0,41,10,114,20,0,0,0,114,181,0,0,0,114,182, + 0,0,0,114,214,0,0,0,90,9,105,115,95,114,101,108, + 111,97,100,114,212,0,0,0,114,183,0,0,0,114,109,0, + 0,0,114,110,0,0,0,114,113,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,10,95,102,105, + 110,100,95,115,112,101,99,153,3,0,0,115,64,0,0,0, + 6,2,8,1,8,2,4,3,12,1,10,5,8,1,8,1, + 2,1,10,1,12,1,12,1,8,1,16,1,4,255,12,3, + 30,128,8,1,14,2,10,1,2,1,10,1,12,1,12,4, + 8,2,8,1,8,2,8,2,2,239,4,19,2,243,2,244, 114,215,0,0,0,99,3,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,110, 0,0,0,116,0,124,0,116,1,131,2,115,14,116,2,100, @@ -1519,267 +1511,266 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,169,3,114,20,0,0,0,114,209,0,0,0,114,210,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, 0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,107, - 200,3,0,0,115,26,0,0,0,10,2,18,1,8,1,8, + 200,3,0,0,115,24,0,0,0,10,2,18,1,8,1,8, 1,8,1,10,1,8,1,4,1,8,1,12,2,8,1,8, - 255,255,128,114,221,0,0,0,122,16,78,111,32,109,111,100, - 117,108,101,32,110,97,109,101,100,32,122,4,123,33,114,125, - 99,2,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,8,0,0,0,67,0,0,0,115,16,1,0,0,100,0, - 125,2,124,0,160,0,100,1,161,1,100,2,25,0,125,3, - 124,3,114,63,124,3,116,1,106,2,118,1,114,21,116,3, - 124,1,124,3,131,2,1,0,124,0,116,1,106,2,118,0, - 114,31,116,1,106,2,124,0,25,0,83,0,116,1,106,2, - 124,3,25,0,125,4,122,5,124,4,106,4,125,2,87,0, - 110,21,4,0,116,5,121,135,1,0,1,0,1,0,116,6, - 100,3,23,0,160,7,124,0,124,3,161,2,125,5,116,8, - 124,5,124,0,100,4,141,2,100,0,130,2,116,9,124,0, - 124,2,131,2,125,6,124,6,100,0,117,0,114,81,116,8, - 116,6,160,7,124,0,161,1,124,0,100,4,141,2,130,1, - 116,10,124,6,131,1,125,7,124,3,114,132,116,1,106,2, - 124,3,25,0,125,4,124,0,160,0,100,1,161,1,100,5, - 25,0,125,8,122,9,116,11,124,4,124,8,124,7,131,3, - 1,0,87,0,124,7,83,0,4,0,116,5,121,134,1,0, - 1,0,1,0,100,6,124,3,155,2,100,7,124,8,155,2, - 157,4,125,5,116,12,160,13,124,5,116,14,161,2,1,0, - 89,0,124,7,83,0,124,7,83,0,119,0,119,0,41,8, - 78,114,141,0,0,0,114,25,0,0,0,122,23,59,32,123, - 33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99, - 107,97,103,101,114,19,0,0,0,233,2,0,0,0,122,27, - 67,97,110,110,111,116,32,115,101,116,32,97,110,32,97,116, - 116,114,105,98,117,116,101,32,111,110,32,122,18,32,102,111, - 114,32,99,104,105,108,100,32,109,111,100,117,108,101,32,41, - 15,114,142,0,0,0,114,18,0,0,0,114,105,0,0,0, - 114,74,0,0,0,114,154,0,0,0,114,2,0,0,0,218, - 8,95,69,82,82,95,77,83,71,114,50,0,0,0,218,19, - 77,111,100,117,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,114,215,0,0,0,114,173,0,0,0,114,12,0, - 0,0,114,101,0,0,0,114,102,0,0,0,114,169,0,0, - 0,41,9,114,20,0,0,0,218,7,105,109,112,111,114,116, - 95,114,181,0,0,0,114,143,0,0,0,90,13,112,97,114, - 101,110,116,95,109,111,100,117,108,101,114,108,0,0,0,114, - 109,0,0,0,114,110,0,0,0,90,5,99,104,105,108,100, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 23,95,102,105,110,100,95,97,110,100,95,108,111,97,100,95, - 117,110,108,111,99,107,101,100,219,3,0,0,115,60,0,0, - 0,4,1,14,1,4,1,10,1,10,1,10,2,10,1,10, - 1,2,1,10,1,12,1,16,1,14,1,10,1,8,1,18, - 1,8,2,4,1,10,2,14,1,2,1,14,1,4,4,12, - 253,16,1,14,1,8,1,2,253,2,242,255,128,114,226,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,8,0,0,0,67,0,0,0,115,128,0,0,0, - 116,0,124,0,131,1,143,31,1,0,116,1,106,2,160,3, - 124,0,116,4,161,2,125,2,124,2,116,4,117,0,114,28, - 116,5,124,0,124,1,131,2,87,0,2,0,100,1,4,0, - 4,0,131,3,1,0,83,0,87,0,100,1,4,0,4,0, - 131,3,1,0,110,8,49,0,115,38,119,1,1,0,1,0, - 1,0,89,0,1,0,124,2,100,1,117,0,114,58,100,2, - 160,6,124,0,161,1,125,3,116,7,124,3,124,0,100,3, - 141,2,130,1,116,8,124,0,131,1,1,0,124,2,83,0, - 41,4,122,25,70,105,110,100,32,97,110,100,32,108,111,97, - 100,32,116,104,101,32,109,111,100,117,108,101,46,78,122,40, - 105,109,112,111,114,116,32,111,102,32,123,125,32,104,97,108, - 116,101,100,59,32,78,111,110,101,32,105,110,32,115,121,115, - 46,109,111,100,117,108,101,115,114,19,0,0,0,41,9,114, - 57,0,0,0,114,18,0,0,0,114,105,0,0,0,114,38, - 0,0,0,218,14,95,78,69,69,68,83,95,76,79,65,68, - 73,78,71,114,226,0,0,0,114,50,0,0,0,114,224,0, - 0,0,114,72,0,0,0,41,4,114,20,0,0,0,114,225, - 0,0,0,114,110,0,0,0,114,82,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,218,14,95,102, - 105,110,100,95,97,110,100,95,108,111,97,100,254,3,0,0, - 115,28,0,0,0,10,2,14,1,8,1,24,1,14,255,16, - 128,8,3,2,1,6,1,2,255,12,2,8,2,4,1,255, - 128,114,228,0,0,0,114,25,0,0,0,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 67,0,0,0,115,42,0,0,0,116,0,124,0,124,1,124, - 2,131,3,1,0,124,2,100,1,107,4,114,16,116,1,124, - 0,124,1,124,2,131,3,125,0,116,2,124,0,116,3,131, - 2,83,0,41,3,97,50,1,0,0,73,109,112,111,114,116, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, - 105,116,115,32,110,97,109,101,44,32,116,104,101,32,112,97, - 99,107,97,103,101,32,116,104,101,32,99,97,108,108,32,105, - 115,10,32,32,32,32,98,101,105,110,103,32,109,97,100,101, - 32,102,114,111,109,44,32,97,110,100,32,116,104,101,32,108, - 101,118,101,108,32,97,100,106,117,115,116,109,101,110,116,46, - 10,10,32,32,32,32,84,104,105,115,32,102,117,110,99,116, - 105,111,110,32,114,101,112,114,101,115,101,110,116,115,32,116, - 104,101,32,103,114,101,97,116,101,115,116,32,99,111,109,109, - 111,110,32,100,101,110,111,109,105,110,97,116,111,114,32,111, - 102,32,102,117,110,99,116,105,111,110,97,108,105,116,121,10, - 32,32,32,32,98,101,116,119,101,101,110,32,105,109,112,111, - 114,116,95,109,111,100,117,108,101,32,97,110,100,32,95,95, - 105,109,112,111,114,116,95,95,46,32,84,104,105,115,32,105, - 110,99,108,117,100,101,115,32,115,101,116,116,105,110,103,32, - 95,95,112,97,99,107,97,103,101,95,95,32,105,102,10,32, - 32,32,32,116,104,101,32,108,111,97,100,101,114,32,100,105, - 100,32,110,111,116,46,10,10,32,32,32,32,114,25,0,0, - 0,78,41,4,114,221,0,0,0,114,211,0,0,0,114,228, - 0,0,0,218,11,95,103,99,100,95,105,109,112,111,114,116, - 114,220,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,229,0,0,0,14,4,0,0,115,10,0, - 0,0,12,9,8,1,12,1,10,1,255,128,114,229,0,0, - 0,169,1,218,9,114,101,99,117,114,115,105,118,101,99,3, - 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,11, - 0,0,0,67,0,0,0,115,218,0,0,0,124,1,68,0, - 93,103,125,4,116,0,124,4,116,1,131,2,115,32,124,3, - 114,17,124,0,106,2,100,1,23,0,125,5,110,2,100,2, - 125,5,116,3,100,3,124,5,155,0,100,4,116,4,124,4, - 131,1,106,2,155,0,157,4,131,1,130,1,124,4,100,5, - 107,2,114,53,124,3,115,52,116,5,124,0,100,6,131,2, - 114,52,116,6,124,0,124,0,106,7,124,2,100,7,100,8, - 141,4,1,0,113,2,116,5,124,0,124,4,131,2,115,105, - 100,9,160,8,124,0,106,2,124,4,161,2,125,6,122,7, - 116,9,124,2,124,6,131,2,1,0,87,0,113,2,4,0, - 116,10,121,108,1,0,125,7,1,0,122,21,124,7,106,11, - 124,6,107,2,114,100,116,12,106,13,160,14,124,6,116,15, - 161,2,100,10,117,1,114,100,87,0,89,0,100,10,125,7, - 126,7,113,2,130,0,100,10,125,7,126,7,119,1,113,2, - 124,0,83,0,119,0,41,11,122,238,70,105,103,117,114,101, - 32,111,117,116,32,119,104,97,116,32,95,95,105,109,112,111, - 114,116,95,95,32,115,104,111,117,108,100,32,114,101,116,117, - 114,110,46,10,10,32,32,32,32,84,104,101,32,105,109,112, - 111,114,116,95,32,112,97,114,97,109,101,116,101,114,32,105, - 115,32,97,32,99,97,108,108,97,98,108,101,32,119,104,105, - 99,104,32,116,97,107,101,115,32,116,104,101,32,110,97,109, - 101,32,111,102,32,109,111,100,117,108,101,32,116,111,10,32, - 32,32,32,105,109,112,111,114,116,46,32,73,116,32,105,115, - 32,114,101,113,117,105,114,101,100,32,116,111,32,100,101,99, - 111,117,112,108,101,32,116,104,101,32,102,117,110,99,116,105, - 111,110,32,102,114,111,109,32,97,115,115,117,109,105,110,103, - 32,105,109,112,111,114,116,108,105,98,39,115,10,32,32,32, - 32,105,109,112,111,114,116,32,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,32,105,115,32,100,101,115,105,114,101, - 100,46,10,10,32,32,32,32,122,8,46,95,95,97,108,108, - 95,95,122,13,96,96,102,114,111,109,32,108,105,115,116,39, - 39,122,8,73,116,101,109,32,105,110,32,122,18,32,109,117, - 115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,250, - 1,42,218,7,95,95,97,108,108,95,95,84,114,230,0,0, - 0,114,206,0,0,0,78,41,16,114,216,0,0,0,114,217, - 0,0,0,114,9,0,0,0,114,218,0,0,0,114,3,0, - 0,0,114,11,0,0,0,218,16,95,104,97,110,100,108,101, - 95,102,114,111,109,108,105,115,116,114,233,0,0,0,114,50, - 0,0,0,114,74,0,0,0,114,224,0,0,0,114,20,0, - 0,0,114,18,0,0,0,114,105,0,0,0,114,38,0,0, - 0,114,227,0,0,0,41,8,114,110,0,0,0,218,8,102, - 114,111,109,108,105,115,116,114,225,0,0,0,114,231,0,0, - 0,218,1,120,90,5,119,104,101,114,101,90,9,102,114,111, - 109,95,110,97,109,101,90,3,101,120,99,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,234,0,0,0,29, - 4,0,0,115,58,0,0,0,8,10,10,1,4,1,12,1, - 4,2,10,1,8,1,8,255,8,2,14,1,10,1,2,1, - 6,255,2,128,10,2,14,1,2,1,14,1,14,1,10,4, - 16,1,2,255,12,2,2,1,8,128,2,245,4,12,2,248, - 255,128,114,234,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,0, - 115,146,0,0,0,124,0,160,0,100,1,161,1,125,1,124, - 0,160,0,100,2,161,1,125,2,124,1,100,3,117,1,114, - 41,124,2,100,3,117,1,114,39,124,1,124,2,106,1,107, - 3,114,39,116,2,106,3,100,4,124,1,155,2,100,5,124, - 2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,141, - 3,1,0,124,1,83,0,124,2,100,3,117,1,114,48,124, - 2,106,1,83,0,116,2,106,3,100,9,116,4,100,7,100, - 8,141,3,1,0,124,0,100,10,25,0,125,1,100,11,124, - 0,118,1,114,71,124,1,160,5,100,12,161,1,100,13,25, - 0,125,1,124,1,83,0,41,14,122,167,67,97,108,99,117, - 108,97,116,101,32,119,104,97,116,32,95,95,112,97,99,107, - 97,103,101,95,95,32,115,104,111,117,108,100,32,98,101,46, - 10,10,32,32,32,32,95,95,112,97,99,107,97,103,101,95, - 95,32,105,115,32,110,111,116,32,103,117,97,114,97,110,116, - 101,101,100,32,116,111,32,98,101,32,100,101,102,105,110,101, - 100,32,111,114,32,99,111,117,108,100,32,98,101,32,115,101, - 116,32,116,111,32,78,111,110,101,10,32,32,32,32,116,111, - 32,114,101,112,114,101,115,101,110,116,32,116,104,97,116,32, - 105,116,115,32,112,114,111,112,101,114,32,118,97,108,117,101, - 32,105,115,32,117,110,107,110,111,119,110,46,10,10,32,32, - 32,32,114,158,0,0,0,114,113,0,0,0,78,122,32,95, - 95,112,97,99,107,97,103,101,95,95,32,33,61,32,95,95, - 115,112,101,99,95,95,46,112,97,114,101,110,116,32,40,122, - 4,32,33,61,32,250,1,41,233,3,0,0,0,41,1,90, - 10,115,116,97,99,107,108,101,118,101,108,122,89,99,97,110, - 39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97, - 103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95, - 32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44, - 32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110, - 32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95, - 112,97,116,104,95,95,114,9,0,0,0,114,154,0,0,0, - 114,141,0,0,0,114,25,0,0,0,41,6,114,38,0,0, - 0,114,143,0,0,0,114,101,0,0,0,114,102,0,0,0, - 114,169,0,0,0,114,142,0,0,0,41,3,218,7,103,108, - 111,98,97,108,115,114,209,0,0,0,114,109,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, - 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95, - 95,66,4,0,0,115,44,0,0,0,10,7,10,1,8,1, - 18,1,6,1,2,1,4,255,4,1,6,255,4,2,6,254, - 4,3,8,1,6,1,6,2,4,2,6,254,8,3,8,1, - 14,1,4,1,255,128,114,240,0,0,0,114,5,0,0,0, - 99,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,5,0,0,0,67,0,0,0,115,174,0,0,0,124,4, - 100,1,107,2,114,9,116,0,124,0,131,1,125,5,110,18, - 124,1,100,2,117,1,114,15,124,1,110,1,105,0,125,6, - 116,1,124,6,131,1,125,7,116,0,124,0,124,7,124,4, - 131,3,125,5,124,3,115,74,124,4,100,1,107,2,114,42, - 116,0,124,0,160,2,100,3,161,1,100,1,25,0,131,1, - 83,0,124,0,115,46,124,5,83,0,116,3,124,0,131,1, - 116,3,124,0,160,2,100,3,161,1,100,1,25,0,131,1, - 24,0,125,8,116,4,106,5,124,5,106,6,100,2,116,3, - 124,5,106,6,131,1,124,8,24,0,133,2,25,0,25,0, - 83,0,116,7,124,5,100,4,131,2,114,85,116,8,124,5, - 124,3,116,0,131,3,83,0,124,5,83,0,41,5,97,215, - 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, - 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, - 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, - 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, - 116,32,105,115,32,111,99,99,117,114,114,105,110,103,32,102, - 114,111,109,10,32,32,32,32,116,111,32,104,97,110,100,108, - 101,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, - 116,115,46,32,84,104,101,32,39,108,111,99,97,108,115,39, - 32,97,114,103,117,109,101,110,116,32,105,115,32,105,103,110, - 111,114,101,100,46,32,84,104,101,10,32,32,32,32,39,102, - 114,111,109,108,105,115,116,39,32,97,114,103,117,109,101,110, - 116,32,115,112,101,99,105,102,105,101,115,32,119,104,97,116, - 32,115,104,111,117,108,100,32,101,120,105,115,116,32,97,115, - 32,97,116,116,114,105,98,117,116,101,115,32,111,110,32,116, - 104,101,32,109,111,100,117,108,101,10,32,32,32,32,98,101, - 105,110,103,32,105,109,112,111,114,116,101,100,32,40,101,46, - 103,46,32,96,96,102,114,111,109,32,109,111,100,117,108,101, - 32,105,109,112,111,114,116,32,60,102,114,111,109,108,105,115, - 116,62,96,96,41,46,32,32,84,104,101,32,39,108,101,118, - 101,108,39,10,32,32,32,32,97,114,103,117,109,101,110,116, - 32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32, - 112,97,99,107,97,103,101,32,108,111,99,97,116,105,111,110, - 32,116,111,32,105,109,112,111,114,116,32,102,114,111,109,32, - 105,110,32,97,32,114,101,108,97,116,105,118,101,10,32,32, - 32,32,105,109,112,111,114,116,32,40,101,46,103,46,32,96, - 96,102,114,111,109,32,46,46,112,107,103,32,105,109,112,111, - 114,116,32,109,111,100,96,96,32,119,111,117,108,100,32,104, - 97,118,101,32,97,32,39,108,101,118,101,108,39,32,111,102, - 32,50,41,46,10,10,32,32,32,32,114,25,0,0,0,78, - 114,141,0,0,0,114,154,0,0,0,41,9,114,229,0,0, - 0,114,240,0,0,0,218,9,112,97,114,116,105,116,105,111, - 110,114,208,0,0,0,114,18,0,0,0,114,105,0,0,0, - 114,9,0,0,0,114,11,0,0,0,114,234,0,0,0,41, - 9,114,20,0,0,0,114,239,0,0,0,218,6,108,111,99, - 97,108,115,114,235,0,0,0,114,210,0,0,0,114,110,0, - 0,0,90,8,103,108,111,98,97,108,115,95,114,209,0,0, - 0,90,7,99,117,116,95,111,102,102,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,10,95,95,105,109,112, - 111,114,116,95,95,93,4,0,0,115,32,0,0,0,8,11, - 10,1,16,2,8,1,12,1,4,1,8,3,18,1,4,1, - 4,1,26,4,30,3,10,1,12,1,4,2,255,128,114,243, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,38,0,0, - 0,116,0,160,1,124,0,161,1,125,1,124,1,100,0,117, - 0,114,15,116,2,100,1,124,0,23,0,131,1,130,1,116, - 3,124,1,131,1,83,0,41,2,78,122,25,110,111,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,32,110, - 97,109,101,100,32,41,4,114,175,0,0,0,114,183,0,0, - 0,114,87,0,0,0,114,173,0,0,0,41,2,114,20,0, - 0,0,114,109,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,218,18,95,98,117,105,108,116,105,110, - 95,102,114,111,109,95,110,97,109,101,130,4,0,0,115,10, - 0,0,0,10,1,8,1,12,1,8,1,255,128,114,244,0, + 255,114,221,0,0,0,122,16,78,111,32,109,111,100,117,108, + 101,32,110,97,109,101,100,32,122,4,123,33,114,125,99,2, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,8, + 0,0,0,67,0,0,0,115,16,1,0,0,100,0,125,2, + 124,0,160,0,100,1,161,1,100,2,25,0,125,3,124,3, + 114,63,124,3,116,1,106,2,118,1,114,21,116,3,124,1, + 124,3,131,2,1,0,124,0,116,1,106,2,118,0,114,31, + 116,1,106,2,124,0,25,0,83,0,116,1,106,2,124,3, + 25,0,125,4,122,5,124,4,106,4,125,2,87,0,110,21, + 4,0,116,5,121,135,1,0,1,0,1,0,116,6,100,3, + 23,0,160,7,124,0,124,3,161,2,125,5,116,8,124,5, + 124,0,100,4,141,2,100,0,130,2,116,9,124,0,124,2, + 131,2,125,6,124,6,100,0,117,0,114,81,116,8,116,6, + 160,7,124,0,161,1,124,0,100,4,141,2,130,1,116,10, + 124,6,131,1,125,7,124,3,114,132,116,1,106,2,124,3, + 25,0,125,4,124,0,160,0,100,1,161,1,100,5,25,0, + 125,8,122,9,116,11,124,4,124,8,124,7,131,3,1,0, + 87,0,124,7,83,0,4,0,116,5,121,134,1,0,1,0, + 1,0,100,6,124,3,155,2,100,7,124,8,155,2,157,4, + 125,5,116,12,160,13,124,5,116,14,161,2,1,0,89,0, + 124,7,83,0,124,7,83,0,119,0,119,0,41,8,78,114, + 141,0,0,0,114,25,0,0,0,122,23,59,32,123,33,114, + 125,32,105,115,32,110,111,116,32,97,32,112,97,99,107,97, + 103,101,114,19,0,0,0,233,2,0,0,0,122,27,67,97, + 110,110,111,116,32,115,101,116,32,97,110,32,97,116,116,114, + 105,98,117,116,101,32,111,110,32,122,18,32,102,111,114,32, + 99,104,105,108,100,32,109,111,100,117,108,101,32,41,15,114, + 142,0,0,0,114,18,0,0,0,114,105,0,0,0,114,74, + 0,0,0,114,154,0,0,0,114,2,0,0,0,218,8,95, + 69,82,82,95,77,83,71,114,50,0,0,0,218,19,77,111, + 100,117,108,101,78,111,116,70,111,117,110,100,69,114,114,111, + 114,114,215,0,0,0,114,173,0,0,0,114,12,0,0,0, + 114,101,0,0,0,114,102,0,0,0,114,169,0,0,0,41, + 9,114,20,0,0,0,218,7,105,109,112,111,114,116,95,114, + 181,0,0,0,114,143,0,0,0,90,13,112,97,114,101,110, + 116,95,109,111,100,117,108,101,114,108,0,0,0,114,109,0, + 0,0,114,110,0,0,0,90,5,99,104,105,108,100,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,23,95, + 102,105,110,100,95,97,110,100,95,108,111,97,100,95,117,110, + 108,111,99,107,101,100,219,3,0,0,115,58,0,0,0,4, + 1,14,1,4,1,10,1,10,1,10,2,10,1,10,1,2, + 1,10,1,12,1,16,1,14,1,10,1,8,1,18,1,8, + 2,4,1,10,2,14,1,2,1,14,1,4,4,12,253,16, + 1,14,1,8,1,2,253,2,242,114,226,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8, + 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, + 131,1,143,31,1,0,116,1,106,2,160,3,124,0,116,4, + 161,2,125,2,124,2,116,4,117,0,114,28,116,5,124,0, + 124,1,131,2,87,0,2,0,100,1,4,0,4,0,131,3, + 1,0,83,0,87,0,100,1,4,0,4,0,131,3,1,0, + 110,8,49,0,115,38,119,1,1,0,1,0,1,0,89,0, + 1,0,124,2,100,1,117,0,114,58,100,2,160,6,124,0, + 161,1,125,3,116,7,124,3,124,0,100,3,141,2,130,1, + 116,8,124,0,131,1,1,0,124,2,83,0,41,4,122,25, + 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104, + 101,32,109,111,100,117,108,101,46,78,122,40,105,109,112,111, + 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, + 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,114,19,0,0,0,41,9,114,57,0,0,0, + 114,18,0,0,0,114,105,0,0,0,114,38,0,0,0,218, + 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, + 226,0,0,0,114,50,0,0,0,114,224,0,0,0,114,72, + 0,0,0,41,4,114,20,0,0,0,114,225,0,0,0,114, + 110,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,14,95,102,105,110,100,95, + 97,110,100,95,108,111,97,100,254,3,0,0,115,26,0,0, + 0,10,2,14,1,8,1,24,1,14,255,16,128,8,3,2, + 1,6,1,2,255,12,2,8,2,4,1,114,228,0,0,0, + 114,25,0,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,42, + 0,0,0,116,0,124,0,124,1,124,2,131,3,1,0,124, + 2,100,1,107,4,114,16,116,1,124,0,124,1,124,2,131, + 3,125,0,116,2,124,0,116,3,131,2,83,0,41,3,97, + 50,1,0,0,73,109,112,111,114,116,32,97,110,100,32,114, + 101,116,117,114,110,32,116,104,101,32,109,111,100,117,108,101, + 32,98,97,115,101,100,32,111,110,32,105,116,115,32,110,97, + 109,101,44,32,116,104,101,32,112,97,99,107,97,103,101,32, + 116,104,101,32,99,97,108,108,32,105,115,10,32,32,32,32, + 98,101,105,110,103,32,109,97,100,101,32,102,114,111,109,44, + 32,97,110,100,32,116,104,101,32,108,101,118,101,108,32,97, + 100,106,117,115,116,109,101,110,116,46,10,10,32,32,32,32, + 84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101, + 112,114,101,115,101,110,116,115,32,116,104,101,32,103,114,101, + 97,116,101,115,116,32,99,111,109,109,111,110,32,100,101,110, + 111,109,105,110,97,116,111,114,32,111,102,32,102,117,110,99, + 116,105,111,110,97,108,105,116,121,10,32,32,32,32,98,101, + 116,119,101,101,110,32,105,109,112,111,114,116,95,109,111,100, + 117,108,101,32,97,110,100,32,95,95,105,109,112,111,114,116, + 95,95,46,32,84,104,105,115,32,105,110,99,108,117,100,101, + 115,32,115,101,116,116,105,110,103,32,95,95,112,97,99,107, + 97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101, + 32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46, + 10,10,32,32,32,32,114,25,0,0,0,78,41,4,114,221, + 0,0,0,114,211,0,0,0,114,228,0,0,0,218,11,95, + 103,99,100,95,105,109,112,111,114,116,114,220,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,229, + 0,0,0,14,4,0,0,115,8,0,0,0,12,9,8,1, + 12,1,10,1,114,229,0,0,0,169,1,218,9,114,101,99, + 117,114,115,105,118,101,99,3,0,0,0,0,0,0,0,1, + 0,0,0,8,0,0,0,11,0,0,0,67,0,0,0,115, + 218,0,0,0,124,1,68,0,93,103,125,4,116,0,124,4, + 116,1,131,2,115,32,124,3,114,17,124,0,106,2,100,1, + 23,0,125,5,110,2,100,2,125,5,116,3,100,3,124,5, + 155,0,100,4,116,4,124,4,131,1,106,2,155,0,157,4, + 131,1,130,1,124,4,100,5,107,2,114,53,124,3,115,52, + 116,5,124,0,100,6,131,2,114,52,116,6,124,0,124,0, + 106,7,124,2,100,7,100,8,141,4,1,0,113,2,116,5, + 124,0,124,4,131,2,115,105,100,9,160,8,124,0,106,2, + 124,4,161,2,125,6,122,7,116,9,124,2,124,6,131,2, + 1,0,87,0,113,2,4,0,116,10,121,108,1,0,125,7, + 1,0,122,21,124,7,106,11,124,6,107,2,114,100,116,12, + 106,13,160,14,124,6,116,15,161,2,100,10,117,1,114,100, + 87,0,89,0,100,10,125,7,126,7,113,2,130,0,100,10, + 125,7,126,7,119,1,113,2,124,0,83,0,119,0,41,11, + 122,238,70,105,103,117,114,101,32,111,117,116,32,119,104,97, + 116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,111, + 117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,32, + 32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,114, + 97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,108, + 97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,115, + 32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,100, + 117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,114, + 116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,101, + 100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,104, + 101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,32, + 97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,108, + 105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,105, + 115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,32, + 122,8,46,95,95,97,108,108,95,95,122,13,96,96,102,114, + 111,109,32,108,105,115,116,39,39,122,8,73,116,101,109,32, + 105,110,32,122,18,32,109,117,115,116,32,98,101,32,115,116, + 114,44,32,110,111,116,32,250,1,42,218,7,95,95,97,108, + 108,95,95,84,114,230,0,0,0,114,206,0,0,0,78,41, + 16,114,216,0,0,0,114,217,0,0,0,114,9,0,0,0, + 114,218,0,0,0,114,3,0,0,0,114,11,0,0,0,218, + 16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, + 116,114,233,0,0,0,114,50,0,0,0,114,74,0,0,0, + 114,224,0,0,0,114,20,0,0,0,114,18,0,0,0,114, + 105,0,0,0,114,38,0,0,0,114,227,0,0,0,41,8, + 114,110,0,0,0,218,8,102,114,111,109,108,105,115,116,114, + 225,0,0,0,114,231,0,0,0,218,1,120,90,5,119,104, + 101,114,101,90,9,102,114,111,109,95,110,97,109,101,90,3, + 101,120,99,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,234,0,0,0,29,4,0,0,115,56,0,0,0, + 8,10,10,1,4,1,12,1,4,2,10,1,8,1,8,255, + 8,2,14,1,10,1,2,1,6,255,2,128,10,2,14,1, + 2,1,14,1,14,1,10,4,16,1,2,255,12,2,2,1, + 8,128,2,245,4,12,2,248,114,234,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0, + 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100, + 1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124, + 1,100,3,117,1,114,41,124,2,100,3,117,1,114,39,124, + 1,124,2,106,1,107,3,114,39,116,2,106,3,100,4,124, + 1,155,2,100,5,124,2,106,1,155,2,100,6,157,5,116, + 4,100,7,100,8,141,3,1,0,124,1,83,0,124,2,100, + 3,117,1,114,48,124,2,106,1,83,0,116,2,106,3,100, + 9,116,4,100,7,100,8,141,3,1,0,124,0,100,10,25, + 0,125,1,100,11,124,0,118,1,114,71,124,1,160,5,100, + 12,161,1,100,13,25,0,125,1,124,1,83,0,41,14,122, + 167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32, + 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117, + 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97, + 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103, + 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32, + 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100, + 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10, + 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116, + 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114, + 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119, + 110,46,10,10,32,32,32,32,114,158,0,0,0,114,113,0, + 0,0,78,122,32,95,95,112,97,99,107,97,103,101,95,95, + 32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114, + 101,110,116,32,40,122,4,32,33,61,32,250,1,41,233,3, + 0,0,0,41,1,90,10,115,116,97,99,107,108,101,118,101, + 108,122,89,99,97,110,39,116,32,114,101,115,111,108,118,101, + 32,112,97,99,107,97,103,101,32,102,114,111,109,32,95,95, + 115,112,101,99,95,95,32,111,114,32,95,95,112,97,99,107, + 97,103,101,95,95,44,32,102,97,108,108,105,110,103,32,98, + 97,99,107,32,111,110,32,95,95,110,97,109,101,95,95,32, + 97,110,100,32,95,95,112,97,116,104,95,95,114,9,0,0, + 0,114,154,0,0,0,114,141,0,0,0,114,25,0,0,0, + 41,6,114,38,0,0,0,114,143,0,0,0,114,101,0,0, + 0,114,102,0,0,0,114,169,0,0,0,114,142,0,0,0, + 41,3,218,7,103,108,111,98,97,108,115,114,209,0,0,0, + 114,109,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97, + 99,107,97,103,101,95,95,66,4,0,0,115,42,0,0,0, + 10,7,10,1,8,1,18,1,6,1,2,1,4,255,4,1, + 6,255,4,2,6,254,4,3,8,1,6,1,6,2,4,2, + 6,254,8,3,8,1,14,1,4,1,114,240,0,0,0,114, + 5,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,174,0, + 0,0,124,4,100,1,107,2,114,9,116,0,124,0,131,1, + 125,5,110,18,124,1,100,2,117,1,114,15,124,1,110,1, + 105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0, + 124,7,124,4,131,3,125,5,124,3,115,74,124,4,100,1, + 107,2,114,42,116,0,124,0,160,2,100,3,161,1,100,1, + 25,0,131,1,83,0,124,0,115,46,124,5,83,0,116,3, + 124,0,131,1,116,3,124,0,160,2,100,3,161,1,100,1, + 25,0,131,1,24,0,125,8,116,4,106,5,124,5,106,6, + 100,2,116,3,124,5,106,6,131,1,124,8,24,0,133,2, + 25,0,25,0,83,0,116,7,124,5,100,4,131,2,114,85, + 116,8,124,5,124,3,116,0,131,3,83,0,124,5,83,0, + 41,5,97,215,1,0,0,73,109,112,111,114,116,32,97,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,84,104,101, + 32,39,103,108,111,98,97,108,115,39,32,97,114,103,117,109, + 101,110,116,32,105,115,32,117,115,101,100,32,116,111,32,105, + 110,102,101,114,32,119,104,101,114,101,32,116,104,101,32,105, + 109,112,111,114,116,32,105,115,32,111,99,99,117,114,114,105, + 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, + 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, + 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, + 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, + 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, + 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, + 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, + 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, + 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, + 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, + 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, + 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, + 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, + 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, + 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, + 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, + 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, + 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, + 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, + 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, + 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, + 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, + 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, + 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,25, + 0,0,0,78,114,141,0,0,0,114,154,0,0,0,41,9, + 114,229,0,0,0,114,240,0,0,0,218,9,112,97,114,116, + 105,116,105,111,110,114,208,0,0,0,114,18,0,0,0,114, + 105,0,0,0,114,9,0,0,0,114,11,0,0,0,114,234, + 0,0,0,41,9,114,20,0,0,0,114,239,0,0,0,218, + 6,108,111,99,97,108,115,114,235,0,0,0,114,210,0,0, + 0,114,110,0,0,0,90,8,103,108,111,98,97,108,115,95, + 114,209,0,0,0,90,7,99,117,116,95,111,102,102,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, + 95,105,109,112,111,114,116,95,95,93,4,0,0,115,30,0, + 0,0,8,11,10,1,16,2,8,1,12,1,4,1,8,3, + 18,1,4,1,4,1,26,4,30,3,10,1,12,1,4,2, + 114,243,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,116,0,160,1,124,0,161,1,125,1,124,1,100, + 0,117,0,114,15,116,2,100,1,124,0,23,0,131,1,130, + 1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,111, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,41,4,114,175,0,0,0,114,183, + 0,0,0,114,87,0,0,0,114,173,0,0,0,41,2,114, + 20,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,130,4,0,0, + 115,8,0,0,0,10,1,8,1,12,1,8,1,114,244,0, 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,10, 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, 124,1,97,0,124,0,97,1,116,2,116,1,131,1,125,2, @@ -1822,66 +1813,66 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 98,117,105,108,116,105,110,95,110,97,109,101,90,14,98,117, 105,108,116,105,110,95,109,111,100,117,108,101,114,5,0,0, 0,114,5,0,0,0,114,6,0,0,0,218,6,95,115,101, - 116,117,112,137,4,0,0,115,42,0,0,0,4,9,4,1, + 116,117,112,137,4,0,0,115,40,0,0,0,4,9,4,1, 8,3,18,1,10,1,10,1,6,1,10,1,6,1,2,2, 10,1,10,1,2,128,10,3,8,1,10,1,10,1,10,2, - 14,1,4,251,255,128,114,248,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,38,0,0,0,116,0,124,0,124,1,131, - 2,1,0,116,1,106,2,160,3,116,4,161,1,1,0,116, - 1,106,2,160,3,116,5,161,1,1,0,100,1,83,0,41, - 2,122,48,73,110,115,116,97,108,108,32,105,109,112,111,114, - 116,101,114,115,32,102,111,114,32,98,117,105,108,116,105,110, - 32,97,110,100,32,102,114,111,122,101,110,32,109,111,100,117, - 108,101,115,78,41,6,114,248,0,0,0,114,18,0,0,0, - 114,214,0,0,0,114,132,0,0,0,114,175,0,0,0,114, - 193,0,0,0,41,2,114,246,0,0,0,114,247,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 8,95,105,110,115,116,97,108,108,172,4,0,0,115,8,0, - 0,0,10,2,12,2,16,1,255,128,114,249,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,67,0,0,0,115,32,0,0,0,100,1,100, - 2,108,0,125,0,124,0,97,1,124,0,160,2,116,3,106, - 4,116,5,25,0,161,1,1,0,100,2,83,0,41,3,122, - 57,73,110,115,116,97,108,108,32,105,109,112,111,114,116,101, - 114,115,32,116,104,97,116,32,114,101,113,117,105,114,101,32, - 101,120,116,101,114,110,97,108,32,102,105,108,101,115,121,115, - 116,101,109,32,97,99,99,101,115,115,114,25,0,0,0,78, - 41,6,218,26,95,102,114,111,122,101,110,95,105,109,112,111, - 114,116,108,105,98,95,101,120,116,101,114,110,97,108,114,139, - 0,0,0,114,249,0,0,0,114,18,0,0,0,114,105,0, - 0,0,114,9,0,0,0,41,1,114,250,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,27,95, - 105,110,115,116,97,108,108,95,101,120,116,101,114,110,97,108, - 95,105,109,112,111,114,116,101,114,115,180,4,0,0,115,8, - 0,0,0,8,3,4,1,20,1,255,128,114,251,0,0,0, - 114,190,0,0,0,114,0,0,0,0,114,24,0,0,0,41, - 4,78,78,114,5,0,0,0,114,25,0,0,0,41,54,114, - 10,0,0,0,114,7,0,0,0,114,26,0,0,0,114,101, - 0,0,0,114,71,0,0,0,114,139,0,0,0,114,17,0, - 0,0,114,21,0,0,0,114,66,0,0,0,114,37,0,0, - 0,114,47,0,0,0,114,22,0,0,0,114,23,0,0,0, - 114,55,0,0,0,114,57,0,0,0,114,60,0,0,0,114, - 72,0,0,0,114,74,0,0,0,114,83,0,0,0,114,95, - 0,0,0,114,100,0,0,0,114,111,0,0,0,114,124,0, - 0,0,114,125,0,0,0,114,104,0,0,0,114,155,0,0, - 0,114,161,0,0,0,114,165,0,0,0,114,119,0,0,0, - 114,106,0,0,0,114,172,0,0,0,114,173,0,0,0,114, - 107,0,0,0,114,175,0,0,0,114,193,0,0,0,114,200, - 0,0,0,114,211,0,0,0,114,213,0,0,0,114,215,0, - 0,0,114,221,0,0,0,90,15,95,69,82,82,95,77,83, - 71,95,80,82,69,70,73,88,114,223,0,0,0,114,226,0, - 0,0,218,6,111,98,106,101,99,116,114,227,0,0,0,114, - 228,0,0,0,114,229,0,0,0,114,234,0,0,0,114,240, - 0,0,0,114,243,0,0,0,114,244,0,0,0,114,248,0, - 0,0,114,249,0,0,0,114,251,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,106, - 0,0,0,4,0,8,22,4,9,4,1,4,1,4,3,8, - 3,8,8,4,8,4,2,16,3,14,4,14,77,14,21,8, - 16,8,37,8,17,14,11,8,8,8,11,8,12,8,19,14, - 26,16,101,10,26,14,45,8,72,8,17,8,17,8,30,8, - 36,8,45,14,15,14,80,14,85,8,13,8,9,10,10,8, - 47,4,16,8,1,8,2,6,32,8,3,10,16,14,15,8, - 37,10,27,8,37,8,7,8,35,12,8,255,128, + 14,1,4,251,114,248,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,38,0,0,0,116,0,124,0,124,1,131,2,1, + 0,116,1,106,2,160,3,116,4,161,1,1,0,116,1,106, + 2,160,3,116,5,161,1,1,0,100,1,83,0,41,2,122, + 48,73,110,115,116,97,108,108,32,105,109,112,111,114,116,101, + 114,115,32,102,111,114,32,98,117,105,108,116,105,110,32,97, + 110,100,32,102,114,111,122,101,110,32,109,111,100,117,108,101, + 115,78,41,6,114,248,0,0,0,114,18,0,0,0,114,214, + 0,0,0,114,132,0,0,0,114,175,0,0,0,114,193,0, + 0,0,41,2,114,246,0,0,0,114,247,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,8,95, + 105,110,115,116,97,108,108,172,4,0,0,115,6,0,0,0, + 10,2,12,2,16,1,114,249,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,32,0,0,0,100,1,100,2,108,0,125, + 0,124,0,97,1,124,0,160,2,116,3,106,4,116,5,25, + 0,161,1,1,0,100,2,83,0,41,3,122,57,73,110,115, + 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,116, + 104,97,116,32,114,101,113,117,105,114,101,32,101,120,116,101, + 114,110,97,108,32,102,105,108,101,115,121,115,116,101,109,32, + 97,99,99,101,115,115,114,25,0,0,0,78,41,6,218,26, + 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, + 98,95,101,120,116,101,114,110,97,108,114,139,0,0,0,114, + 249,0,0,0,114,18,0,0,0,114,105,0,0,0,114,9, + 0,0,0,41,1,114,250,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,27,95,105,110,115,116, + 97,108,108,95,101,120,116,101,114,110,97,108,95,105,109,112, + 111,114,116,101,114,115,180,4,0,0,115,6,0,0,0,8, + 3,4,1,20,1,114,251,0,0,0,114,190,0,0,0,114, + 0,0,0,0,114,24,0,0,0,41,4,78,78,114,5,0, + 0,0,114,25,0,0,0,41,54,114,10,0,0,0,114,7, + 0,0,0,114,26,0,0,0,114,101,0,0,0,114,71,0, + 0,0,114,139,0,0,0,114,17,0,0,0,114,21,0,0, + 0,114,66,0,0,0,114,37,0,0,0,114,47,0,0,0, + 114,22,0,0,0,114,23,0,0,0,114,55,0,0,0,114, + 57,0,0,0,114,60,0,0,0,114,72,0,0,0,114,74, + 0,0,0,114,83,0,0,0,114,95,0,0,0,114,100,0, + 0,0,114,111,0,0,0,114,124,0,0,0,114,125,0,0, + 0,114,104,0,0,0,114,155,0,0,0,114,161,0,0,0, + 114,165,0,0,0,114,119,0,0,0,114,106,0,0,0,114, + 172,0,0,0,114,173,0,0,0,114,107,0,0,0,114,175, + 0,0,0,114,193,0,0,0,114,200,0,0,0,114,211,0, + 0,0,114,213,0,0,0,114,215,0,0,0,114,221,0,0, + 0,90,15,95,69,82,82,95,77,83,71,95,80,82,69,70, + 73,88,114,223,0,0,0,114,226,0,0,0,218,6,111,98, + 106,101,99,116,114,227,0,0,0,114,228,0,0,0,114,229, + 0,0,0,114,234,0,0,0,114,240,0,0,0,114,243,0, + 0,0,114,244,0,0,0,114,248,0,0,0,114,249,0,0, + 0,114,251,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,8,60,109,111,100, + 117,108,101,62,1,0,0,0,115,104,0,0,0,4,0,8, + 22,4,9,4,1,4,1,4,3,8,3,8,8,4,8,4, + 2,16,3,14,4,14,77,14,21,8,16,8,37,8,17,14, + 11,8,8,8,11,8,12,8,19,14,26,16,101,10,26,14, + 45,8,72,8,17,8,17,8,30,8,36,8,45,14,15,14, + 80,14,85,8,13,8,9,10,10,8,47,4,16,8,1,8, + 2,6,32,8,3,10,16,14,15,8,37,10,27,8,37,8, + 7,8,35,12,8, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index c5d3450b7c438a..0707657fceb969 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -82,139 +82,138 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95, 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110, 97,108,62,218,9,60,103,101,110,101,120,112,114,62,46,0, - 0,0,115,6,0,0,0,6,128,22,0,255,128,114,9,0, - 0,0,218,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,22,0, - 0,0,104,0,124,0,93,7,125,1,100,0,124,1,155,0, - 157,2,146,2,113,2,83,0,41,1,250,1,58,114,7,0, - 0,0,41,2,114,5,0,0,0,218,1,115,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,9,60,115,101, - 116,99,111,109,112,62,50,0,0,0,115,4,0,0,0,22, - 0,255,128,114,13,0,0,0,41,1,218,3,119,105,110,41, - 2,90,6,99,121,103,119,105,110,90,6,100,97,114,119,105, - 110,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,3,0,0,0,115,62,0,0,0,116, - 0,106,1,160,2,116,3,161,1,114,25,116,0,106,1,160, - 2,116,4,161,1,114,15,100,1,137,0,110,2,100,2,137, - 0,135,0,102,1,100,3,100,4,132,8,125,0,124,0,83, - 0,100,5,100,4,132,0,125,0,124,0,83,0,41,6,78, - 90,12,80,89,84,72,79,78,67,65,83,69,79,75,115,12, - 0,0,0,80,89,84,72,79,78,67,65,83,69,79,75,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,19,0,0,0,115,20,0,0,0,116,0,106, - 1,106,2,12,0,111,9,136,0,116,3,106,4,118,0,83, - 0,41,2,122,94,84,114,117,101,32,105,102,32,102,105,108, - 101,110,97,109,101,115,32,109,117,115,116,32,98,101,32,99, - 104,101,99,107,101,100,32,99,97,115,101,45,105,110,115,101, - 110,115,105,116,105,118,101,108,121,32,97,110,100,32,105,103, - 110,111,114,101,32,101,110,118,105,114,111,110,109,101,110,116, - 32,102,108,97,103,115,32,97,114,101,32,110,111,116,32,115, - 101,116,46,78,41,5,218,3,115,121,115,218,5,102,108,97, - 103,115,218,18,105,103,110,111,114,101,95,101,110,118,105,114, - 111,110,109,101,110,116,218,3,95,111,115,90,7,101,110,118, - 105,114,111,110,114,7,0,0,0,169,1,218,3,107,101,121, - 114,7,0,0,0,114,8,0,0,0,218,11,95,114,101,108, - 97,120,95,99,97,115,101,67,0,0,0,243,4,0,0,0, - 20,2,255,128,122,37,95,109,97,107,101,95,114,101,108,97, - 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, - 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 83,0,0,0,243,4,0,0,0,100,1,83,0,41,3,122, - 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 0,0,115,4,0,0,0,6,128,22,0,114,9,0,0,0, + 218,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,4,0,0,0,67,0,0,0,115,22,0,0,0, + 104,0,124,0,93,7,125,1,100,0,124,1,155,0,157,2, + 146,2,113,2,83,0,41,1,250,1,58,114,7,0,0,0, + 41,2,114,5,0,0,0,218,1,115,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,9,60,115,101,116,99, + 111,109,112,62,50,0,0,0,115,2,0,0,0,22,0,114, + 13,0,0,0,41,1,218,3,119,105,110,41,2,90,6,99, + 121,103,119,105,110,90,6,100,97,114,119,105,110,99,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,3,0,0,0,115,62,0,0,0,116,0,106,1,160, + 2,116,3,161,1,114,25,116,0,106,1,160,2,116,4,161, + 1,114,15,100,1,137,0,110,2,100,2,137,0,135,0,102, + 1,100,3,100,4,132,8,125,0,124,0,83,0,100,5,100, + 4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,89, + 84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,80, + 89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 19,0,0,0,115,20,0,0,0,116,0,106,1,106,2,12, + 0,111,9,136,0,116,3,106,4,118,0,83,0,41,2,122, + 94,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, - 105,118,101,108,121,46,70,78,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,21,0,0,0,71,0,0,0,243,4,0,0,0,4, - 2,255,128,41,5,114,15,0,0,0,218,8,112,108,97,116, - 102,111,114,109,218,10,115,116,97,114,116,115,119,105,116,104, - 218,27,95,67,65,83,69,95,73,78,83,69,78,83,73,84, - 73,86,69,95,80,76,65,84,70,79,82,77,83,218,35,95, - 67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,69, - 95,80,76,65,84,70,79,82,77,83,95,83,84,82,95,75, - 69,89,41,1,114,21,0,0,0,114,7,0,0,0,114,19, - 0,0,0,114,8,0,0,0,218,16,95,109,97,107,101,95, - 114,101,108,97,120,95,99,97,115,101,60,0,0,0,115,18, - 0,0,0,12,1,12,1,6,1,4,2,12,2,4,7,8, - 253,4,3,255,128,114,29,0,0,0,99,1,0,0,0,0, + 105,118,101,108,121,32,97,110,100,32,105,103,110,111,114,101, + 32,101,110,118,105,114,111,110,109,101,110,116,32,102,108,97, + 103,115,32,97,114,101,32,110,111,116,32,115,101,116,46,78, + 41,5,218,3,115,121,115,218,5,102,108,97,103,115,218,18, + 105,103,110,111,114,101,95,101,110,118,105,114,111,110,109,101, + 110,116,218,3,95,111,115,90,7,101,110,118,105,114,111,110, + 114,7,0,0,0,169,1,218,3,107,101,121,114,7,0,0, + 0,114,8,0,0,0,218,11,95,114,101,108,97,120,95,99, + 97,115,101,67,0,0,0,243,2,0,0,0,20,2,122,37, + 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, + 46,60,108,111,99,97,108,115,62,46,95,114,101,108,97,120, + 95,99,97,115,101,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,83,0,0,0,243,4, + 0,0,0,100,1,83,0,41,3,122,53,84,114,117,101,32, + 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, + 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, + 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, + 70,78,114,7,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,21,0,0,0, + 71,0,0,0,243,2,0,0,0,4,2,41,5,114,15,0, + 0,0,218,8,112,108,97,116,102,111,114,109,218,10,115,116, + 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, + 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, + 70,79,82,77,83,218,35,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,95,83,84,82,95,75,69,89,41,1,114,21,0,0, + 0,114,7,0,0,0,114,19,0,0,0,114,8,0,0,0, + 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, + 115,101,60,0,0,0,115,16,0,0,0,12,1,12,1,6, + 1,4,2,12,2,4,7,8,253,4,3,114,29,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,115,20,0,0,0,116,0, + 124,0,131,1,100,1,64,0,160,1,100,2,100,3,161,2, + 83,0,41,5,122,42,67,111,110,118,101,114,116,32,97,32, + 51,50,45,98,105,116,32,105,110,116,101,103,101,114,32,116, + 111,32,108,105,116,116,108,101,45,101,110,100,105,97,110,46, + 236,3,0,0,0,255,127,255,127,3,0,233,4,0,0,0, + 218,6,108,105,116,116,108,101,78,41,2,218,3,105,110,116, + 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,12, + 95,112,97,99,107,95,117,105,110,116,51,50,79,0,0,0, + 114,22,0,0,0,114,36,0,0,0,99,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, - 0,0,0,115,20,0,0,0,116,0,124,0,131,1,100,1, - 64,0,160,1,100,2,100,3,161,2,83,0,41,5,122,42, - 67,111,110,118,101,114,116,32,97,32,51,50,45,98,105,116, - 32,105,110,116,101,103,101,114,32,116,111,32,108,105,116,116, - 108,101,45,101,110,100,105,97,110,46,236,3,0,0,0,255, - 127,255,127,3,0,233,4,0,0,0,218,6,108,105,116,116, - 108,101,78,41,2,218,3,105,110,116,218,8,116,111,95,98, - 121,116,101,115,41,1,218,1,120,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,12,95,112,97,99,107,95, - 117,105,110,116,51,50,79,0,0,0,114,22,0,0,0,114, - 36,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,67,0,0,0,243,28,0, - 0,0,116,0,124,0,131,1,100,1,107,2,115,8,74,0, - 130,1,116,1,160,2,124,0,100,2,161,2,83,0,41,4, - 122,47,67,111,110,118,101,114,116,32,52,32,98,121,116,101, - 115,32,105,110,32,108,105,116,116,108,101,45,101,110,100,105, - 97,110,32,116,111,32,97,110,32,105,110,116,101,103,101,114, - 46,114,31,0,0,0,114,32,0,0,0,78,169,3,114,4, - 0,0,0,114,33,0,0,0,218,10,102,114,111,109,95,98, - 121,116,101,115,169,1,218,4,100,97,116,97,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,14,95,117,110, - 112,97,99,107,95,117,105,110,116,51,50,84,0,0,0,243, - 6,0,0,0,16,2,12,1,255,128,114,42,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 4,0,0,0,67,0,0,0,114,37,0,0,0,41,4,122, - 47,67,111,110,118,101,114,116,32,50,32,98,121,116,101,115, - 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, - 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, - 233,2,0,0,0,114,32,0,0,0,78,114,38,0,0,0, - 114,40,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,14,95,117,110,112,97,99,107,95,117,105, - 110,116,49,54,89,0,0,0,114,43,0,0,0,114,45,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,4,0,0,0,71,0,0,0,115,228,0,0,0, - 124,0,115,4,100,1,83,0,116,0,124,0,131,1,100,2, - 107,2,114,14,124,0,100,3,25,0,83,0,100,1,125,1, - 103,0,125,2,116,1,116,2,106,3,124,0,131,2,68,0, - 93,61,92,2,125,3,125,4,124,3,160,4,116,5,161,1, - 115,38,124,3,160,6,116,5,161,1,114,51,124,3,160,7, - 116,8,161,1,112,44,124,1,125,1,116,9,124,4,23,0, - 103,1,125,2,113,24,124,3,160,6,100,4,161,1,114,76, - 124,1,160,10,161,0,124,3,160,10,161,0,107,3,114,70, - 124,3,125,1,124,4,103,1,125,2,113,24,124,2,160,11, - 124,4,161,1,1,0,113,24,124,3,112,79,124,1,125,1, - 124,2,160,11,124,4,161,1,1,0,113,24,100,5,100,6, - 132,0,124,2,68,0,131,1,125,2,116,0,124,2,131,1, - 100,2,107,2,114,107,124,2,100,3,25,0,115,107,124,1, - 116,9,23,0,83,0,124,1,116,9,160,12,124,2,161,1, - 23,0,83,0,41,8,250,31,82,101,112,108,97,99,101,109, - 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, - 106,111,105,110,40,41,46,114,10,0,0,0,114,3,0,0, - 0,114,0,0,0,0,114,11,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, - 83,0,0,0,243,26,0,0,0,103,0,124,0,93,9,125, - 1,124,1,114,2,124,1,160,0,116,1,161,1,145,2,113, - 2,83,0,114,7,0,0,0,169,2,218,6,114,115,116,114, - 105,112,218,15,112,97,116,104,95,115,101,112,97,114,97,116, - 111,114,115,169,2,114,5,0,0,0,218,1,112,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,10,60,108, - 105,115,116,99,111,109,112,62,119,0,0,0,115,4,0,0, - 0,26,0,255,128,250,30,95,112,97,116,104,95,106,111,105, - 110,46,60,108,111,99,97,108,115,62,46,60,108,105,115,116, - 99,111,109,112,62,78,41,13,114,4,0,0,0,218,3,109, - 97,112,114,18,0,0,0,218,15,95,112,97,116,104,95,115, - 112,108,105,116,114,111,111,116,114,26,0,0,0,218,14,112, - 97,116,104,95,115,101,112,95,116,117,112,108,101,218,8,101, - 110,100,115,119,105,116,104,114,49,0,0,0,114,50,0,0, - 0,218,8,112,97,116,104,95,115,101,112,218,8,99,97,115, - 101,102,111,108,100,218,6,97,112,112,101,110,100,218,4,106, - 111,105,110,41,5,218,10,112,97,116,104,95,112,97,114,116, - 115,218,4,114,111,111,116,218,4,112,97,116,104,90,8,110, - 101,119,95,114,111,111,116,218,4,116,97,105,108,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,10,95,112, - 97,116,104,95,106,111,105,110,96,0,0,0,115,44,0,0, - 0,4,2,4,1,12,1,8,1,4,1,4,1,20,1,20, - 1,14,1,12,1,10,1,16,1,4,3,8,1,12,2,8, - 2,12,1,14,1,20,1,8,2,14,1,255,128,114,67,0, + 0,0,0,243,28,0,0,0,116,0,124,0,131,1,100,1, + 107,2,115,8,74,0,130,1,116,1,160,2,124,0,100,2, + 161,2,83,0,41,4,122,47,67,111,110,118,101,114,116,32, + 52,32,98,121,116,101,115,32,105,110,32,108,105,116,116,108, + 101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,105, + 110,116,101,103,101,114,46,114,31,0,0,0,114,32,0,0, + 0,78,169,3,114,4,0,0,0,114,33,0,0,0,218,10, + 102,114,111,109,95,98,121,116,101,115,169,1,218,4,100,97, + 116,97,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,14,95,117,110,112,97,99,107,95,117,105,110,116,51, + 50,84,0,0,0,243,4,0,0,0,16,2,12,1,114,42, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,67,0,0,0,114,37,0,0, + 0,41,4,122,47,67,111,110,118,101,114,116,32,50,32,98, + 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, + 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, + 103,101,114,46,233,2,0,0,0,114,32,0,0,0,78,114, + 38,0,0,0,114,40,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,14,95,117,110,112,97,99, + 107,95,117,105,110,116,49,54,89,0,0,0,114,43,0,0, + 0,114,45,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,4,0,0,0,71,0,0,0,115, + 228,0,0,0,124,0,115,4,100,1,83,0,116,0,124,0, + 131,1,100,2,107,2,114,14,124,0,100,3,25,0,83,0, + 100,1,125,1,103,0,125,2,116,1,116,2,106,3,124,0, + 131,2,68,0,93,61,92,2,125,3,125,4,124,3,160,4, + 116,5,161,1,115,38,124,3,160,6,116,5,161,1,114,51, + 124,3,160,7,116,8,161,1,112,44,124,1,125,1,116,9, + 124,4,23,0,103,1,125,2,113,24,124,3,160,6,100,4, + 161,1,114,76,124,1,160,10,161,0,124,3,160,10,161,0, + 107,3,114,70,124,3,125,1,124,4,103,1,125,2,113,24, + 124,2,160,11,124,4,161,1,1,0,113,24,124,3,112,79, + 124,1,125,1,124,2,160,11,124,4,161,1,1,0,113,24, + 100,5,100,6,132,0,124,2,68,0,131,1,125,2,116,0, + 124,2,131,1,100,2,107,2,114,107,124,2,100,3,25,0, + 115,107,124,1,116,9,23,0,83,0,124,1,116,9,160,12, + 124,2,161,1,23,0,83,0,41,8,250,31,82,101,112,108, + 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, + 97,116,104,46,106,111,105,110,40,41,46,114,10,0,0,0, + 114,3,0,0,0,114,0,0,0,0,114,11,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 5,0,0,0,83,0,0,0,243,26,0,0,0,103,0,124, + 0,93,9,125,1,124,1,114,2,124,1,160,0,116,1,161, + 1,145,2,113,2,83,0,114,7,0,0,0,169,2,218,6, + 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, + 97,114,97,116,111,114,115,169,2,114,5,0,0,0,218,1, + 112,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,10,60,108,105,115,116,99,111,109,112,62,119,0,0,0, + 115,2,0,0,0,26,0,250,30,95,112,97,116,104,95,106, + 111,105,110,46,60,108,111,99,97,108,115,62,46,60,108,105, + 115,116,99,111,109,112,62,78,41,13,114,4,0,0,0,218, + 3,109,97,112,114,18,0,0,0,218,15,95,112,97,116,104, + 95,115,112,108,105,116,114,111,111,116,114,26,0,0,0,218, + 14,112,97,116,104,95,115,101,112,95,116,117,112,108,101,218, + 8,101,110,100,115,119,105,116,104,114,49,0,0,0,114,50, + 0,0,0,218,8,112,97,116,104,95,115,101,112,218,8,99, + 97,115,101,102,111,108,100,218,6,97,112,112,101,110,100,218, + 4,106,111,105,110,41,5,218,10,112,97,116,104,95,112,97, + 114,116,115,218,4,114,111,111,116,218,4,112,97,116,104,90, + 8,110,101,119,95,114,111,111,116,218,4,116,97,105,108,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, + 95,112,97,116,104,95,106,111,105,110,96,0,0,0,115,42, + 0,0,0,4,2,4,1,12,1,8,1,4,1,4,1,20, + 1,20,1,14,1,12,1,10,1,16,1,4,3,8,1,12, + 2,8,2,12,1,14,1,20,1,8,2,14,1,114,67,0, 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,4,0,0,0,71,0,0,0,115,20,0,0,0, 116,0,160,1,100,1,100,2,132,0,124,0,68,0,131,1, @@ -223,84 +222,83 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 83,0,0,0,114,47,0,0,0,114,7,0,0,0,114,48, 0,0,0,41,2,114,5,0,0,0,218,4,112,97,114,116, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 53,0,0,0,128,0,0,0,115,8,0,0,0,6,0,6, - 1,14,255,255,128,114,54,0,0,0,78,41,2,114,59,0, - 0,0,114,62,0,0,0,41,1,114,63,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,67,0, - 0,0,126,0,0,0,115,8,0,0,0,10,2,2,1,8, - 255,255,128,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,3,0,0,0,115,66,0,0, - 0,116,0,135,0,102,1,100,1,100,2,132,8,116,1,68, - 0,131,1,131,1,125,1,124,1,100,3,107,0,114,19,100, - 4,136,0,102,2,83,0,136,0,100,5,124,1,133,2,25, - 0,136,0,124,1,100,6,23,0,100,5,133,2,25,0,102, - 2,83,0,41,7,122,32,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,115, - 112,108,105,116,40,41,46,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,4,0,0,0,51,0,0,0, - 115,26,0,0,0,129,0,124,0,93,8,125,1,136,0,160, - 0,124,1,161,1,86,0,1,0,113,2,100,0,83,0,169, - 1,78,41,1,218,5,114,102,105,110,100,114,51,0,0,0, - 169,1,114,65,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,9,0,0,0,134,0,0,0,115,6,0,0,0,6, - 128,20,0,255,128,122,30,95,112,97,116,104,95,115,112,108, - 105,116,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,114,0,0,0,0,114,10,0,0,0,78, - 114,3,0,0,0,41,2,218,3,109,97,120,114,50,0,0, - 0,41,2,114,65,0,0,0,218,1,105,114,7,0,0,0, - 114,71,0,0,0,114,8,0,0,0,218,11,95,112,97,116, - 104,95,115,112,108,105,116,132,0,0,0,115,10,0,0,0, - 22,2,8,1,8,1,28,1,255,128,114,74,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,160, - 1,124,0,161,1,83,0,41,2,122,126,83,116,97,116,32, - 116,104,101,32,112,97,116,104,46,10,10,32,32,32,32,77, - 97,100,101,32,97,32,115,101,112,97,114,97,116,101,32,102, - 117,110,99,116,105,111,110,32,116,111,32,109,97,107,101,32, - 105,116,32,101,97,115,105,101,114,32,116,111,32,111,118,101, - 114,114,105,100,101,32,105,110,32,101,120,112,101,114,105,109, - 101,110,116,115,10,32,32,32,32,40,101,46,103,46,32,99, - 97,99,104,101,32,115,116,97,116,32,114,101,115,117,108,116, - 115,41,46,10,10,32,32,32,32,78,41,2,114,18,0,0, - 0,90,4,115,116,97,116,114,71,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,10,95,112,97, - 116,104,95,115,116,97,116,140,0,0,0,115,4,0,0,0, - 10,7,255,128,114,75,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, - 0,0,115,48,0,0,0,122,6,116,0,124,0,131,1,125, - 2,87,0,110,9,4,0,116,1,121,23,1,0,1,0,1, - 0,89,0,100,1,83,0,124,2,106,2,100,2,64,0,124, - 1,107,2,83,0,119,0,41,4,122,49,84,101,115,116,32, - 119,104,101,116,104,101,114,32,116,104,101,32,112,97,116,104, - 32,105,115,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,101,32,116,121,112,101,46,70,105,0,240, - 0,0,78,41,3,114,75,0,0,0,218,7,79,83,69,114, - 114,111,114,218,7,115,116,95,109,111,100,101,41,3,114,65, - 0,0,0,218,4,109,111,100,101,90,9,115,116,97,116,95, - 105,110,102,111,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,18,95,112,97,116,104,95,105,115,95,109,111, - 100,101,95,116,121,112,101,150,0,0,0,115,14,0,0,0, - 2,2,12,1,12,1,6,1,14,1,2,254,255,128,114,79, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,10,0,0, - 0,116,0,124,0,100,1,131,2,83,0,41,3,122,31,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, - 128,0,0,78,41,1,114,79,0,0,0,114,71,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 12,95,112,97,116,104,95,105,115,102,105,108,101,159,0,0, - 0,243,4,0,0,0,10,2,255,128,114,80,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115, - 6,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131, - 2,83,0,41,3,122,30,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,100,105,114,46,105,0,64,0,0,78,41,3,114,18,0, - 0,0,218,6,103,101,116,99,119,100,114,79,0,0,0,114, + 53,0,0,0,128,0,0,0,115,6,0,0,0,6,0,6, + 1,14,255,114,54,0,0,0,78,41,2,114,59,0,0,0, + 114,62,0,0,0,41,1,114,63,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,67,0,0,0, + 126,0,0,0,115,6,0,0,0,10,2,2,1,8,255,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,3,0,0,0,115,66,0,0,0,116,0,135, + 0,102,1,100,1,100,2,132,8,116,1,68,0,131,1,131, + 1,125,1,124,1,100,3,107,0,114,19,100,4,136,0,102, + 2,83,0,136,0,100,5,124,1,133,2,25,0,136,0,124, + 1,100,6,23,0,100,5,133,2,25,0,102,2,83,0,41, + 7,122,32,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,115,112,108,105,116, + 40,41,46,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,51,0,0,0,115,26,0,0, + 0,129,0,124,0,93,8,125,1,136,0,160,0,124,1,161, + 1,86,0,1,0,113,2,100,0,83,0,169,1,78,41,1, + 218,5,114,102,105,110,100,114,51,0,0,0,169,1,114,65, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0, + 0,0,134,0,0,0,115,4,0,0,0,6,128,20,0,122, + 30,95,112,97,116,104,95,115,112,108,105,116,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, + 0,0,0,0,114,10,0,0,0,78,114,3,0,0,0,41, + 2,218,3,109,97,120,114,50,0,0,0,41,2,114,65,0, + 0,0,218,1,105,114,7,0,0,0,114,71,0,0,0,114, + 8,0,0,0,218,11,95,112,97,116,104,95,115,112,108,105, + 116,132,0,0,0,115,8,0,0,0,22,2,8,1,8,1, + 28,1,114,74,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 115,10,0,0,0,116,0,160,1,124,0,161,1,83,0,41, + 2,122,126,83,116,97,116,32,116,104,101,32,112,97,116,104, + 46,10,10,32,32,32,32,77,97,100,101,32,97,32,115,101, + 112,97,114,97,116,101,32,102,117,110,99,116,105,111,110,32, + 116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101, + 114,32,116,111,32,111,118,101,114,114,105,100,101,32,105,110, + 32,101,120,112,101,114,105,109,101,110,116,115,10,32,32,32, + 32,40,101,46,103,46,32,99,97,99,104,101,32,115,116,97, + 116,32,114,101,115,117,108,116,115,41,46,10,10,32,32,32, + 32,78,41,2,114,18,0,0,0,90,4,115,116,97,116,114, 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,95,112,97,116,104,95,105,115,100,105,114, - 164,0,0,0,115,8,0,0,0,4,2,8,1,10,1,255, - 128,114,83,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,140, + 0,0,0,115,2,0,0,0,10,7,114,75,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 8,0,0,0,67,0,0,0,115,48,0,0,0,122,6,116, + 0,124,0,131,1,125,2,87,0,110,9,4,0,116,1,121, + 23,1,0,1,0,1,0,89,0,100,1,83,0,124,2,106, + 2,100,2,64,0,124,1,107,2,83,0,119,0,41,4,122, + 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, + 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, + 101,46,70,105,0,240,0,0,78,41,3,114,75,0,0,0, + 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, + 100,101,41,3,114,65,0,0,0,218,4,109,111,100,101,90, + 9,115,116,97,116,95,105,110,102,111,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,18,95,112,97,116,104, + 95,105,115,95,109,111,100,101,95,116,121,112,101,150,0,0, + 0,115,12,0,0,0,2,2,12,1,12,1,6,1,14,1, + 2,254,114,79,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 115,10,0,0,0,116,0,124,0,100,1,131,2,83,0,41, + 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, + 101,46,105,0,128,0,0,78,41,1,114,79,0,0,0,114, + 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,12,95,112,97,116,104,95,105,115,102,105,108, + 101,159,0,0,0,243,2,0,0,0,10,2,114,80,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,22,0,0,0,124, + 0,115,6,116,0,160,1,161,0,125,0,116,2,124,0,100, + 1,131,2,83,0,41,3,122,30,82,101,112,108,97,99,101, + 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, + 46,105,115,100,105,114,46,105,0,64,0,0,78,41,3,114, + 18,0,0,0,218,6,103,101,116,99,119,100,114,79,0,0, + 0,114,71,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,11,95,112,97,116,104,95,105,115,100, + 105,114,164,0,0,0,115,6,0,0,0,4,2,8,1,10, + 1,114,83,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, 62,0,0,0,124,0,115,4,100,1,83,0,116,0,160,1, 124,0,161,1,100,2,25,0,160,2,100,3,100,4,161,2, @@ -314,350 +312,349 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,99,101,114,4,0,0,0,114,26,0,0,0,114,58,0, 0,0,41,2,114,65,0,0,0,114,64,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, - 112,97,116,104,95,105,115,97,98,115,172,0,0,0,115,10, - 0,0,0,4,2,4,1,22,1,32,1,255,128,114,86,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0, - 124,0,160,0,116,1,161,1,83,0,41,2,114,84,0,0, - 0,78,41,2,114,26,0,0,0,114,50,0,0,0,114,71, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,86,0,0,0,180,0,0,0,114,81,0,0,0, - 233,182,1,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,11,0,0,0,67,0,0,0,115,170, - 0,0,0,100,1,160,0,124,0,116,1,124,0,131,1,161, - 2,125,3,116,2,160,3,124,3,116,2,106,4,116,2,106, - 5,66,0,116,2,106,6,66,0,124,2,100,2,64,0,161, - 3,125,4,122,36,116,7,160,8,124,4,100,3,161,2,143, - 13,125,5,124,5,160,9,124,1,161,1,1,0,87,0,100, - 4,4,0,4,0,131,3,1,0,110,8,49,0,115,47,119, - 1,1,0,1,0,1,0,89,0,1,0,116,2,160,10,124, - 3,124,0,161,2,1,0,87,0,100,4,83,0,4,0,116, - 11,121,84,1,0,1,0,1,0,122,7,116,2,160,12,124, - 3,161,1,1,0,87,0,130,0,4,0,116,11,121,83,1, - 0,1,0,1,0,89,0,130,0,119,0,119,0,41,5,122, - 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110, - 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100, - 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116, - 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101, - 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110, - 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115, - 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114, - 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116, - 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121, - 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116, - 101,100,46,250,5,123,125,46,123,125,114,87,0,0,0,90, - 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, - 105,100,114,18,0,0,0,90,4,111,112,101,110,90,6,79, - 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, - 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, - 105,108,101,73,79,218,5,119,114,105,116,101,114,85,0,0, - 0,114,76,0,0,0,90,6,117,110,108,105,110,107,41,6, - 114,65,0,0,0,114,41,0,0,0,114,78,0,0,0,90, - 8,112,97,116,104,95,116,109,112,90,2,102,100,218,4,102, - 105,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,13,95,119,114,105,116,101,95,97,116,111,109,105, - 99,185,0,0,0,115,38,0,0,0,16,5,6,1,22,1, - 4,255,2,2,14,3,24,1,16,128,18,1,12,1,2,1, - 12,1,2,3,12,254,2,1,2,1,2,254,2,253,255,128, - 114,95,0,0,0,105,109,13,0,0,114,44,0,0,0,114, - 32,0,0,0,115,2,0,0,0,13,10,90,11,95,95,112, - 121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,3, - 46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,41, - 1,218,12,111,112,116,105,109,105,122,97,116,105,111,110,99, - 2,0,0,0,0,0,0,0,1,0,0,0,12,0,0,0, - 5,0,0,0,67,0,0,0,115,80,1,0,0,124,1,100, - 1,117,1,114,26,116,0,160,1,100,2,116,2,161,2,1, - 0,124,2,100,1,117,1,114,20,100,3,125,3,116,3,124, - 3,131,1,130,1,124,1,114,24,100,4,110,1,100,5,125, - 2,116,4,160,5,124,0,161,1,125,0,116,6,124,0,131, - 1,92,2,125,4,125,5,124,5,160,7,100,6,161,1,92, - 3,125,6,125,7,125,8,116,8,106,9,106,10,125,9,124, - 9,100,1,117,0,114,57,116,11,100,7,131,1,130,1,100, - 4,160,12,124,6,114,63,124,6,110,1,124,8,124,7,124, - 9,103,3,161,1,125,10,124,2,100,1,117,0,114,86,116, - 8,106,13,106,14,100,8,107,2,114,82,100,4,125,2,110, - 4,116,8,106,13,106,14,125,2,116,15,124,2,131,1,125, - 2,124,2,100,4,107,3,114,112,124,2,160,16,161,0,115, - 105,116,17,100,9,160,18,124,2,161,1,131,1,130,1,100, - 10,160,18,124,10,116,19,124,2,161,3,125,10,124,10,116, - 20,100,8,25,0,23,0,125,11,116,8,106,21,100,1,117, - 1,114,162,116,22,124,4,131,1,115,134,116,23,116,4,160, - 24,161,0,124,4,131,2,125,4,124,4,100,5,25,0,100, - 11,107,2,114,152,124,4,100,8,25,0,116,25,118,1,114, - 152,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116, - 8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83, - 0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,97, - 254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,101, - 44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,116, - 104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,105, - 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, - 32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,110, - 101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,104, - 105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,110, - 115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, - 101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,32, - 99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,102, - 32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,101, - 114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,32, - 32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,99, - 111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,115, - 117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,111, - 110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,116, - 104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,44, - 32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,114, - 101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,111, - 102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105, - 115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,105, - 102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,97, - 110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,97, - 108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,32, - 114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,104, - 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,98, - 117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110, - 111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,84, - 114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,101, - 32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,103, + 112,97,116,104,95,105,115,97,98,115,172,0,0,0,115,8, + 0,0,0,4,2,4,1,22,1,32,1,114,86,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,115,10,0,0,0,124,0, + 160,0,116,1,161,1,83,0,41,2,114,84,0,0,0,78, + 41,2,114,26,0,0,0,114,50,0,0,0,114,71,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,86,0,0,0,180,0,0,0,114,81,0,0,0,233,182, + 1,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,11,0,0,0,67,0,0,0,115,170,0,0, + 0,100,1,160,0,124,0,116,1,124,0,131,1,161,2,125, + 3,116,2,160,3,124,3,116,2,106,4,116,2,106,5,66, + 0,116,2,106,6,66,0,124,2,100,2,64,0,161,3,125, + 4,122,36,116,7,160,8,124,4,100,3,161,2,143,13,125, + 5,124,5,160,9,124,1,161,1,1,0,87,0,100,4,4, + 0,4,0,131,3,1,0,110,8,49,0,115,47,119,1,1, + 0,1,0,1,0,89,0,1,0,116,2,160,10,124,3,124, + 0,161,2,1,0,87,0,100,4,83,0,4,0,116,11,121, + 84,1,0,1,0,1,0,122,7,116,2,160,12,124,3,161, + 1,1,0,87,0,130,0,4,0,116,11,121,83,1,0,1, + 0,1,0,89,0,130,0,119,0,119,0,41,5,122,162,66, + 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, + 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, + 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, + 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, + 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, + 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, + 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, + 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, + 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, + 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, + 46,250,5,123,125,46,123,125,114,87,0,0,0,90,2,119, + 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, + 114,18,0,0,0,90,4,111,112,101,110,90,6,79,95,69, + 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, + 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, + 101,73,79,218,5,119,114,105,116,101,114,85,0,0,0,114, + 76,0,0,0,90,6,117,110,108,105,110,107,41,6,114,65, + 0,0,0,114,41,0,0,0,114,78,0,0,0,90,8,112, + 97,116,104,95,116,109,112,90,2,102,100,218,4,102,105,108, + 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,185, + 0,0,0,115,36,0,0,0,16,5,6,1,22,1,4,255, + 2,2,14,3,24,1,16,128,18,1,12,1,2,1,12,1, + 2,3,12,254,2,1,2,1,2,254,2,253,114,95,0,0, + 0,105,110,13,0,0,114,44,0,0,0,114,32,0,0,0, + 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, + 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122, + 4,46,112,121,119,122,4,46,112,121,99,41,1,218,12,111, + 112,116,105,109,105,122,97,116,105,111,110,99,2,0,0,0, + 0,0,0,0,1,0,0,0,12,0,0,0,5,0,0,0, + 67,0,0,0,115,80,1,0,0,124,1,100,1,117,1,114, + 26,116,0,160,1,100,2,116,2,161,2,1,0,124,2,100, + 1,117,1,114,20,100,3,125,3,116,3,124,3,131,1,130, + 1,124,1,114,24,100,4,110,1,100,5,125,2,116,4,160, + 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, + 4,125,5,124,5,160,7,100,6,161,1,92,3,125,6,125, + 7,125,8,116,8,106,9,106,10,125,9,124,9,100,1,117, + 0,114,57,116,11,100,7,131,1,130,1,100,4,160,12,124, + 6,114,63,124,6,110,1,124,8,124,7,124,9,103,3,161, + 1,125,10,124,2,100,1,117,0,114,86,116,8,106,13,106, + 14,100,8,107,2,114,82,100,4,125,2,110,4,116,8,106, + 13,106,14,125,2,116,15,124,2,131,1,125,2,124,2,100, + 4,107,3,114,112,124,2,160,16,161,0,115,105,116,17,100, + 9,160,18,124,2,161,1,131,1,130,1,100,10,160,18,124, + 10,116,19,124,2,161,3,125,10,124,10,116,20,100,8,25, + 0,23,0,125,11,116,8,106,21,100,1,117,1,114,162,116, + 22,124,4,131,1,115,134,116,23,116,4,160,24,161,0,124, + 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,114, + 152,124,4,100,8,25,0,116,25,118,1,114,152,124,4,100, + 12,100,1,133,2,25,0,125,4,116,23,116,8,106,21,124, + 4,160,26,116,25,161,1,124,11,131,3,83,0,116,23,124, + 4,116,27,124,11,131,3,83,0,41,13,97,254,2,0,0, + 71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,97,32,46,112,121,32,102,105,108,101,44,32,114,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,105,116,115,32,46,112,121,99,32,102,105,108,101,46,10, + 10,32,32,32,32,84,104,101,32,46,112,121,32,102,105,108, + 101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32, + 116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115, + 105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104, + 101,32,112,97,116,104,32,116,111,32,116,104,101,10,32,32, + 32,32,46,112,121,99,32,102,105,108,101,32,99,97,108,99, + 117,108,97,116,101,100,32,97,115,32,105,102,32,116,104,101, + 32,46,112,121,32,102,105,108,101,32,119,101,114,101,32,105, + 109,112,111,114,116,101,100,46,10,10,32,32,32,32,84,104, + 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,112,97,114,97,109,101,116,101,114,32,99,111,110,116,114, + 111,108,115,32,116,104,101,32,112,114,101,115,117,109,101,100, + 32,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, + 118,101,108,32,111,102,10,32,32,32,32,116,104,101,32,98, + 121,116,101,99,111,100,101,32,102,105,108,101,46,32,73,102, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 105,115,32,110,111,116,32,78,111,110,101,44,32,116,104,101, + 32,115,116,114,105,110,103,32,114,101,112,114,101,115,101,110, + 116,97,116,105,111,110,10,32,32,32,32,111,102,32,116,104, + 101,32,97,114,103,117,109,101,110,116,32,105,115,32,116,97, + 107,101,110,32,97,110,100,32,118,101,114,105,102,105,101,100, + 32,116,111,32,98,101,32,97,108,112,104,97,110,117,109,101, + 114,105,99,32,40,101,108,115,101,32,86,97,108,117,101,69, + 114,114,111,114,10,32,32,32,32,105,115,32,114,97,105,115, + 101,100,41,46,10,10,32,32,32,32,84,104,101,32,100,101, + 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, + 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,73,102,32,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,105,115,32,110,111,116,32,78, + 111,110,101,44,10,32,32,32,32,97,32,84,114,117,101,32, + 118,97,108,117,101,32,105,115,32,116,104,101,32,115,97,109, + 101,32,97,115,32,115,101,116,116,105,110,103,32,39,111,112, + 116,105,109,105,122,97,116,105,111,110,39,32,116,111,32,116, + 104,101,32,101,109,112,116,121,32,115,116,114,105,110,103,10, + 32,32,32,32,119,104,105,108,101,32,97,32,70,97,108,115, + 101,32,118,97,108,117,101,32,105,115,32,101,113,117,105,118, + 97,108,101,110,116,32,116,111,32,115,101,116,116,105,110,103, + 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, + 116,111,32,39,49,39,46,10,10,32,32,32,32,73,102,32, + 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, + 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, + 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, + 70,116,104,101,32,100,101,98,117,103,95,111,118,101,114,114, + 105,100,101,32,112,97,114,97,109,101,116,101,114,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,59,32,117,115,101, 32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32, - 116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,114, - 105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,32, - 70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,101, - 113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116, - 116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,32, - 32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, - 32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111, - 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101, - 114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59, - 32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,98, - 117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,111, - 112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,116, - 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,114, - 10,0,0,0,114,3,0,0,0,218,1,46,250,36,115,121, - 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, - 110,101,114,0,0,0,0,122,24,123,33,114,125,32,105,115, - 32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,105, - 99,122,7,123,125,46,123,125,123,125,114,11,0,0,0,114, - 44,0,0,0,41,28,218,9,95,119,97,114,110,105,110,103, - 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, - 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, - 101,69,114,114,111,114,114,18,0,0,0,218,6,102,115,112, - 97,116,104,114,74,0,0,0,218,10,114,112,97,114,116,105, - 116,105,111,110,114,15,0,0,0,218,14,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,218,9,99,97,99,104,101, - 95,116,97,103,218,19,78,111,116,73,109,112,108,101,109,101, - 110,116,101,100,69,114,114,111,114,114,62,0,0,0,114,16, - 0,0,0,218,8,111,112,116,105,109,105,122,101,218,3,115, - 116,114,218,7,105,115,97,108,110,117,109,218,10,86,97,108, - 117,101,69,114,114,111,114,114,89,0,0,0,218,4,95,79, - 80,84,218,17,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,218,14,112,121,99,97,99,104,101,95,112, - 114,101,102,105,120,114,86,0,0,0,114,67,0,0,0,114, - 82,0,0,0,114,50,0,0,0,218,6,108,115,116,114,105, - 112,218,8,95,80,89,67,65,67,72,69,41,12,114,65,0, - 0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105, - 100,101,114,96,0,0,0,218,7,109,101,115,115,97,103,101, - 218,4,104,101,97,100,114,66,0,0,0,90,4,98,97,115, - 101,114,6,0,0,0,218,4,114,101,115,116,90,3,116,97, - 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, - 109,101,218,8,102,105,108,101,110,97,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,17,99,97,99, - 104,101,95,102,114,111,109,95,115,111,117,114,99,101,122,1, - 0,0,115,74,0,0,0,8,18,6,1,2,1,4,255,8, - 2,4,1,8,1,12,1,10,1,12,1,16,1,8,1,8, - 1,8,1,24,1,8,1,12,1,6,1,8,2,8,1,8, - 1,8,1,14,1,14,1,12,1,10,1,8,9,14,1,24, - 5,12,1,2,4,4,1,8,1,2,1,4,253,12,5,255, - 128,114,121,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,10,0,0,0,5,0,0,0,67,0,0,0,115, - 40,1,0,0,116,0,106,1,106,2,100,1,117,0,114,10, - 116,3,100,2,131,1,130,1,116,4,160,5,124,0,161,1, - 125,0,116,6,124,0,131,1,92,2,125,1,125,2,100,3, - 125,3,116,0,106,7,100,1,117,1,114,51,116,0,106,7, - 160,8,116,9,161,1,125,4,124,1,160,10,124,4,116,11, - 23,0,161,1,114,51,124,1,116,12,124,4,131,1,100,1, - 133,2,25,0,125,1,100,4,125,3,124,3,115,72,116,6, - 124,1,131,1,92,2,125,1,125,5,124,5,116,13,107,3, - 114,72,116,14,116,13,155,0,100,5,124,0,155,2,157,3, - 131,1,130,1,124,2,160,15,100,6,161,1,125,6,124,6, - 100,7,118,1,114,88,116,14,100,8,124,2,155,2,157,2, - 131,1,130,1,124,6,100,9,107,2,114,132,124,2,160,16, - 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10, - 116,17,161,1,115,112,116,14,100,12,116,17,155,2,157,2, - 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2, - 25,0,125,8,124,8,160,18,161,0,115,132,116,14,100,13, - 124,7,155,2,100,14,157,3,131,1,130,1,124,2,160,19, - 100,6,161,1,100,15,25,0,125,9,116,20,124,1,124,9, - 116,21,100,15,25,0,23,0,131,2,83,0,41,16,97,110, - 1,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, - 104,32,116,111,32,97,32,46,112,121,99,46,32,102,105,108, - 101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,105,116,115,32,46,112,121,32,102,105, - 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, - 99,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32, - 110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116, - 104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114, - 110,115,32,116,104,101,32,112,97,116,104,32,116,111,10,32, - 32,32,32,116,104,101,32,46,112,121,32,102,105,108,101,32, - 99,97,108,99,117,108,97,116,101,100,32,116,111,32,99,111, - 114,114,101,115,112,111,110,100,32,116,111,32,116,104,101,32, - 46,112,121,99,32,102,105,108,101,46,32,32,73,102,32,112, - 97,116,104,32,100,111,101,115,10,32,32,32,32,110,111,116, - 32,99,111,110,102,111,114,109,32,116,111,32,80,69,80,32, - 51,49,52,55,47,52,56,56,32,102,111,114,109,97,116,44, - 32,86,97,108,117,101,69,114,114,111,114,32,119,105,108,108, - 32,98,101,32,114,97,105,115,101,100,46,32,73,102,10,32, - 32,32,32,115,121,115,46,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, - 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, - 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 105,110,115,116,101,97,100,122,50,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,111,114,32,111,112,116,105,109, + 105,122,97,116,105,111,110,32,109,117,115,116,32,98,101,32, + 115,101,116,32,116,111,32,78,111,110,101,114,10,0,0,0, + 114,3,0,0,0,218,1,46,250,36,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,114,0, + 0,0,0,122,24,123,33,114,125,32,105,115,32,110,111,116, + 32,97,108,112,104,97,110,117,109,101,114,105,99,122,7,123, + 125,46,123,125,123,125,114,11,0,0,0,114,44,0,0,0, + 41,28,218,9,95,119,97,114,110,105,110,103,115,218,4,119, + 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, + 87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,114, + 111,114,114,18,0,0,0,218,6,102,115,112,97,116,104,114, + 74,0,0,0,218,10,114,112,97,114,116,105,116,105,111,110, + 114,15,0,0,0,218,14,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103, + 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, + 69,114,114,111,114,114,62,0,0,0,114,16,0,0,0,218, + 8,111,112,116,105,109,105,122,101,218,3,115,116,114,218,7, + 105,115,97,108,110,117,109,218,10,86,97,108,117,101,69,114, + 114,111,114,114,89,0,0,0,218,4,95,79,80,84,218,17, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,218,14,112,121,99,97,99,104,101,95,112,114,101,102,105, + 120,114,86,0,0,0,114,67,0,0,0,114,82,0,0,0, + 114,50,0,0,0,218,6,108,115,116,114,105,112,218,8,95, + 80,89,67,65,67,72,69,41,12,114,65,0,0,0,90,14, + 100,101,98,117,103,95,111,118,101,114,114,105,100,101,114,96, + 0,0,0,218,7,109,101,115,115,97,103,101,218,4,104,101, + 97,100,114,66,0,0,0,90,4,98,97,115,101,114,6,0, + 0,0,218,4,114,101,115,116,90,3,116,97,103,90,15,97, + 108,109,111,115,116,95,102,105,108,101,110,97,109,101,218,8, + 102,105,108,101,110,97,109,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,17,99,97,99,104,101,95,102, + 114,111,109,95,115,111,117,114,99,101,123,1,0,0,115,72, + 0,0,0,8,18,6,1,2,1,4,255,8,2,4,1,8, + 1,12,1,10,1,12,1,16,1,8,1,8,1,8,1,24, + 1,8,1,12,1,6,1,8,2,8,1,8,1,8,1,14, + 1,14,1,12,1,10,1,8,9,14,1,24,5,12,1,2, + 4,4,1,8,1,2,1,4,253,12,5,114,121,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,10,0,0, + 0,5,0,0,0,67,0,0,0,115,40,1,0,0,116,0, + 106,1,106,2,100,1,117,0,114,10,116,3,100,2,131,1, + 130,1,116,4,160,5,124,0,161,1,125,0,116,6,124,0, + 131,1,92,2,125,1,125,2,100,3,125,3,116,0,106,7, + 100,1,117,1,114,51,116,0,106,7,160,8,116,9,161,1, + 125,4,124,1,160,10,124,4,116,11,23,0,161,1,114,51, + 124,1,116,12,124,4,131,1,100,1,133,2,25,0,125,1, + 100,4,125,3,124,3,115,72,116,6,124,1,131,1,92,2, + 125,1,125,5,124,5,116,13,107,3,114,72,116,14,116,13, + 155,0,100,5,124,0,155,2,157,3,131,1,130,1,124,2, + 160,15,100,6,161,1,125,6,124,6,100,7,118,1,114,88, + 116,14,100,8,124,2,155,2,157,2,131,1,130,1,124,6, + 100,9,107,2,114,132,124,2,160,16,100,6,100,10,161,2, + 100,11,25,0,125,7,124,7,160,10,116,17,161,1,115,112, + 116,14,100,12,116,17,155,2,157,2,131,1,130,1,124,7, + 116,12,116,17,131,1,100,1,133,2,25,0,125,8,124,8, + 160,18,161,0,115,132,116,14,100,13,124,7,155,2,100,14, + 157,3,131,1,130,1,124,2,160,19,100,6,161,1,100,15, + 25,0,125,9,116,20,124,1,124,9,116,21,100,15,25,0, + 23,0,131,2,83,0,41,16,97,110,1,0,0,71,105,118, + 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, + 32,46,112,121,99,46,32,102,105,108,101,44,32,114,101,116, + 117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32, + 105,116,115,32,46,112,121,32,102,105,108,101,46,10,10,32, + 32,32,32,84,104,101,32,46,112,121,99,32,102,105,108,101, + 32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,116, + 111,32,101,120,105,115,116,59,32,116,104,105,115,32,115,105, + 109,112,108,121,32,114,101,116,117,114,110,115,32,116,104,101, + 32,112,97,116,104,32,116,111,10,32,32,32,32,116,104,101, + 32,46,112,121,32,102,105,108,101,32,99,97,108,99,117,108, + 97,116,101,100,32,116,111,32,99,111,114,114,101,115,112,111, + 110,100,32,116,111,32,116,104,101,32,46,112,121,99,32,102, + 105,108,101,46,32,32,73,102,32,112,97,116,104,32,100,111, + 101,115,10,32,32,32,32,110,111,116,32,99,111,110,102,111, + 114,109,32,116,111,32,80,69,80,32,51,49,52,55,47,52, + 56,56,32,102,111,114,109,97,116,44,32,86,97,108,117,101, + 69,114,114,111,114,32,119,105,108,108,32,98,101,32,114,97, + 105,115,101,100,46,32,73,102,10,32,32,32,32,115,121,115, + 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, + 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, + 101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,109, + 101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,78,114,98,0,0, + 0,70,84,122,31,32,110,111,116,32,98,111,116,116,111,109, + 45,108,101,118,101,108,32,100,105,114,101,99,116,111,114,121, + 32,105,110,32,114,97,0,0,0,62,2,0,0,0,114,44, + 0,0,0,233,3,0,0,0,122,29,101,120,112,101,99,116, + 101,100,32,111,110,108,121,32,50,32,111,114,32,51,32,100, + 111,116,115,32,105,110,32,114,122,0,0,0,114,44,0,0, + 0,233,254,255,255,255,122,53,111,112,116,105,109,105,122,97, + 116,105,111,110,32,112,111,114,116,105,111,110,32,111,102,32, + 102,105,108,101,110,97,109,101,32,100,111,101,115,32,110,111, + 116,32,115,116,97,114,116,32,119,105,116,104,32,122,19,111, + 112,116,105,109,105,122,97,116,105,111,110,32,108,101,118,101, + 108,32,122,29,32,105,115,32,110,111,116,32,97,110,32,97, + 108,112,104,97,110,117,109,101,114,105,99,32,118,97,108,117, + 101,114,0,0,0,0,41,22,114,15,0,0,0,114,105,0, + 0,0,114,106,0,0,0,114,107,0,0,0,114,18,0,0, + 0,114,103,0,0,0,114,74,0,0,0,114,114,0,0,0, + 114,49,0,0,0,114,50,0,0,0,114,26,0,0,0,114, + 59,0,0,0,114,4,0,0,0,114,116,0,0,0,114,111, + 0,0,0,218,5,99,111,117,110,116,218,6,114,115,112,108, + 105,116,114,112,0,0,0,114,110,0,0,0,218,9,112,97, + 114,116,105,116,105,111,110,114,67,0,0,0,218,15,83,79, + 85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,114, + 65,0,0,0,114,118,0,0,0,90,16,112,121,99,97,99, + 104,101,95,102,105,108,101,110,97,109,101,90,23,102,111,117, + 110,100,95,105,110,95,112,121,99,97,99,104,101,95,112,114, + 101,102,105,120,90,13,115,116,114,105,112,112,101,100,95,112, + 97,116,104,90,7,112,121,99,97,99,104,101,90,9,100,111, + 116,95,99,111,117,110,116,114,96,0,0,0,90,9,111,112, + 116,95,108,101,118,101,108,90,13,98,97,115,101,95,102,105, + 108,101,110,97,109,101,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,17,115,111,117,114,99,101,95,102,114, + 111,109,95,99,97,99,104,101,194,1,0,0,115,60,0,0, + 0,12,9,8,1,10,1,12,1,4,1,10,1,12,1,14, + 1,16,1,4,1,4,1,12,1,8,1,8,1,2,1,8, + 255,10,2,8,1,14,1,8,1,16,1,10,1,4,1,2, + 1,8,255,16,2,8,1,16,1,14,2,18,1,114,128,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,9,0,0,0,67,0,0,0,115,122,0,0,0, + 116,0,124,0,131,1,100,1,107,2,114,8,100,2,83,0, + 124,0,160,1,100,3,161,1,92,3,125,1,125,2,125,3, + 124,1,114,28,124,3,160,2,161,0,100,4,100,5,133,2, + 25,0,100,6,107,3,114,30,124,0,83,0,122,6,116,3, + 124,0,131,1,125,4,87,0,110,15,4,0,116,4,116,5, + 102,2,121,60,1,0,1,0,1,0,124,0,100,2,100,5, + 133,2,25,0,125,4,89,0,116,6,124,4,131,1,114,58, + 124,4,83,0,124,0,83,0,119,0,41,7,122,188,67,111, + 110,118,101,114,116,32,97,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,32,112,97,116,104,32,116,111,32,97,32, + 115,111,117,114,99,101,32,112,97,116,104,32,40,105,102,32, + 112,111,115,115,105,98,108,101,41,46,10,10,32,32,32,32, + 84,104,105,115,32,102,117,110,99,116,105,111,110,32,101,120, + 105,115,116,115,32,112,117,114,101,108,121,32,102,111,114,32, + 98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,116, + 105,98,105,108,105,116,121,32,102,111,114,10,32,32,32,32, + 80,121,73,109,112,111,114,116,95,69,120,101,99,67,111,100, + 101,77,111,100,117,108,101,87,105,116,104,70,105,108,101,110, + 97,109,101,115,40,41,32,105,110,32,116,104,101,32,67,32, + 65,80,73,46,10,10,32,32,32,32,114,0,0,0,0,78, + 114,97,0,0,0,233,253,255,255,255,233,255,255,255,255,90, + 2,112,121,41,7,114,4,0,0,0,114,104,0,0,0,218, + 5,108,111,119,101,114,114,128,0,0,0,114,107,0,0,0, + 114,111,0,0,0,114,80,0,0,0,41,5,218,13,98,121, + 116,101,99,111,100,101,95,112,97,116,104,114,119,0,0,0, + 218,1,95,90,9,101,120,116,101,110,115,105,111,110,218,11, + 115,111,117,114,99,101,95,112,97,116,104,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,15,95,103,101,116, + 95,115,111,117,114,99,101,102,105,108,101,234,1,0,0,115, + 22,0,0,0,12,7,4,1,16,1,24,1,4,1,2,1, + 12,1,16,1,14,1,16,1,2,254,114,135,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 8,0,0,0,67,0,0,0,115,68,0,0,0,124,0,160, + 0,116,1,116,2,131,1,161,1,114,22,122,5,116,3,124, + 0,131,1,87,0,83,0,4,0,116,4,121,33,1,0,1, + 0,1,0,89,0,100,0,83,0,124,0,160,0,116,1,116, + 5,131,1,161,1,114,31,124,0,83,0,100,0,83,0,119, + 0,114,69,0,0,0,41,6,114,58,0,0,0,218,5,116, + 117,112,108,101,114,127,0,0,0,114,121,0,0,0,114,107, + 0,0,0,114,113,0,0,0,41,1,114,120,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,11, + 95,103,101,116,95,99,97,99,104,101,100,253,1,0,0,115, + 18,0,0,0,14,1,2,1,10,1,12,1,6,1,14,1, + 4,1,4,2,2,251,114,137,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0, + 67,0,0,0,115,48,0,0,0,122,7,116,0,124,0,131, + 1,106,1,125,1,87,0,110,9,4,0,116,2,121,23,1, + 0,1,0,1,0,100,1,125,1,89,0,124,1,100,2,79, + 0,125,1,124,1,83,0,119,0,41,4,122,51,67,97,108, + 99,117,108,97,116,101,32,116,104,101,32,109,111,100,101,32, + 112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32, + 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,46, + 114,87,0,0,0,233,128,0,0,0,78,41,3,114,75,0, + 0,0,114,77,0,0,0,114,76,0,0,0,41,2,114,65, + 0,0,0,114,78,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,10,95,99,97,108,99,95,109, + 111,100,101,9,2,0,0,115,14,0,0,0,2,2,14,1, + 12,1,6,1,8,3,4,1,2,251,114,139,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,3,0,0,0,115,52,0,0,0,100,6,135, + 0,102,1,100,2,100,3,132,9,125,1,116,0,100,1,117, + 1,114,15,116,0,106,1,125,2,110,4,100,4,100,5,132, + 0,125,2,124,2,124,1,136,0,131,2,1,0,124,1,83, + 0,41,7,122,252,68,101,99,111,114,97,116,111,114,32,116, + 111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,114, + 101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,115, + 32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,32, + 32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,100, + 108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,114, + 115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,108, + 102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,95, + 110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,115, + 101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105, + 115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,97, + 103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,99, + 111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,32, + 116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,114, 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,78,114,98,0,0,0,70,84,122,31,32,110,111,116,32, - 98,111,116,116,111,109,45,108,101,118,101,108,32,100,105,114, - 101,99,116,111,114,121,32,105,110,32,114,97,0,0,0,62, - 2,0,0,0,114,44,0,0,0,233,3,0,0,0,122,29, - 101,120,112,101,99,116,101,100,32,111,110,108,121,32,50,32, - 111,114,32,51,32,100,111,116,115,32,105,110,32,114,122,0, - 0,0,114,44,0,0,0,233,254,255,255,255,122,53,111,112, - 116,105,109,105,122,97,116,105,111,110,32,112,111,114,116,105, - 111,110,32,111,102,32,102,105,108,101,110,97,109,101,32,100, - 111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105, - 116,104,32,122,19,111,112,116,105,109,105,122,97,116,105,111, - 110,32,108,101,118,101,108,32,122,29,32,105,115,32,110,111, - 116,32,97,110,32,97,108,112,104,97,110,117,109,101,114,105, - 99,32,118,97,108,117,101,114,0,0,0,0,41,22,114,15, - 0,0,0,114,105,0,0,0,114,106,0,0,0,114,107,0, - 0,0,114,18,0,0,0,114,103,0,0,0,114,74,0,0, - 0,114,114,0,0,0,114,49,0,0,0,114,50,0,0,0, - 114,26,0,0,0,114,59,0,0,0,114,4,0,0,0,114, - 116,0,0,0,114,111,0,0,0,218,5,99,111,117,110,116, - 218,6,114,115,112,108,105,116,114,112,0,0,0,114,110,0, - 0,0,218,9,112,97,114,116,105,116,105,111,110,114,67,0, - 0,0,218,15,83,79,85,82,67,69,95,83,85,70,70,73, - 88,69,83,41,10,114,65,0,0,0,114,118,0,0,0,90, - 16,112,121,99,97,99,104,101,95,102,105,108,101,110,97,109, - 101,90,23,102,111,117,110,100,95,105,110,95,112,121,99,97, - 99,104,101,95,112,114,101,102,105,120,90,13,115,116,114,105, - 112,112,101,100,95,112,97,116,104,90,7,112,121,99,97,99, - 104,101,90,9,100,111,116,95,99,111,117,110,116,114,96,0, - 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, - 97,115,101,95,102,105,108,101,110,97,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,17,115,111,117, - 114,99,101,95,102,114,111,109,95,99,97,99,104,101,193,1, - 0,0,115,62,0,0,0,12,9,8,1,10,1,12,1,4, - 1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,8, - 1,8,1,2,1,8,255,10,2,8,1,14,1,8,1,16, - 1,10,1,4,1,2,1,8,255,16,2,8,1,16,1,14, - 2,18,1,255,128,114,128,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,9,0,0,0,67, - 0,0,0,115,122,0,0,0,116,0,124,0,131,1,100,1, - 107,2,114,8,100,2,83,0,124,0,160,1,100,3,161,1, - 92,3,125,1,125,2,125,3,124,1,114,28,124,3,160,2, - 161,0,100,4,100,5,133,2,25,0,100,6,107,3,114,30, - 124,0,83,0,122,6,116,3,124,0,131,1,125,4,87,0, - 110,15,4,0,116,4,116,5,102,2,121,60,1,0,1,0, - 1,0,124,0,100,2,100,5,133,2,25,0,125,4,89,0, - 116,6,124,4,131,1,114,58,124,4,83,0,124,0,83,0, - 119,0,41,7,122,188,67,111,110,118,101,114,116,32,97,32, - 98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,97, - 116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,112, - 97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,101, - 41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, - 99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,114, - 101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,100, - 115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,32, - 102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,116, - 95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,87, - 105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,105, - 110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,32, - 32,32,114,0,0,0,0,78,114,97,0,0,0,233,253,255, - 255,255,233,255,255,255,255,90,2,112,121,41,7,114,4,0, - 0,0,114,104,0,0,0,218,5,108,111,119,101,114,114,128, - 0,0,0,114,107,0,0,0,114,111,0,0,0,114,80,0, - 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, - 97,116,104,114,119,0,0,0,218,1,95,90,9,101,120,116, - 101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,112, - 97,116,104,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,15,95,103,101,116,95,115,111,117,114,99,101,102, - 105,108,101,233,1,0,0,115,24,0,0,0,12,7,4,1, - 16,1,24,1,4,1,2,1,12,1,16,1,14,1,16,1, - 2,254,255,128,114,135,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, - 0,0,115,68,0,0,0,124,0,160,0,116,1,116,2,131, - 1,161,1,114,22,122,5,116,3,124,0,131,1,87,0,83, - 0,4,0,116,4,121,33,1,0,1,0,1,0,89,0,100, - 0,83,0,124,0,160,0,116,1,116,5,131,1,161,1,114, - 31,124,0,83,0,100,0,83,0,119,0,114,69,0,0,0, - 41,6,114,58,0,0,0,218,5,116,117,112,108,101,114,127, - 0,0,0,114,121,0,0,0,114,107,0,0,0,114,113,0, - 0,0,41,1,114,120,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,11,95,103,101,116,95,99, - 97,99,104,101,100,252,1,0,0,115,20,0,0,0,14,1, - 2,1,10,1,12,1,6,1,14,1,4,1,4,2,2,251, - 255,128,114,137,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,0, - 115,48,0,0,0,122,7,116,0,124,0,131,1,106,1,125, - 1,87,0,110,9,4,0,116,2,121,23,1,0,1,0,1, - 0,100,1,125,1,89,0,124,1,100,2,79,0,125,1,124, - 1,83,0,119,0,41,4,122,51,67,97,108,99,117,108,97, - 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109, - 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,46,114,87,0,0, - 0,233,128,0,0,0,78,41,3,114,75,0,0,0,114,77, - 0,0,0,114,76,0,0,0,41,2,114,65,0,0,0,114, - 78,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,8, - 2,0,0,115,16,0,0,0,2,2,14,1,12,1,6,1, - 8,3,4,1,2,251,255,128,114,139,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,3,0,0,0,115,52,0,0,0,100,6,135,0,102, - 1,100,2,100,3,132,9,125,1,116,0,100,1,117,1,114, - 15,116,0,106,1,125,2,110,4,100,4,100,5,132,0,125, - 2,124,2,124,1,136,0,131,2,1,0,124,1,83,0,41, - 7,122,252,68,101,99,111,114,97,116,111,114,32,116,111,32, - 118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32, - 109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,113, - 117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,116, - 104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,108, - 111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,101, - 46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,116, - 32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,41, - 32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,97, - 109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,99, - 111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,10, - 32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,97, - 105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,109, - 112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,104, - 101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,4,0,0,0,31,0,0,0,115,72,0,0,0,124,1, - 100,0,117,0,114,8,124,0,106,0,125,1,110,16,124,0, - 106,0,124,1,107,3,114,24,116,1,100,1,124,0,106,0, - 124,1,102,2,22,0,124,1,100,2,141,2,130,1,136,0, - 124,0,124,1,103,2,124,2,162,1,82,0,105,0,124,3, - 164,1,142,1,83,0,41,3,78,122,30,108,111,97,100,101, - 114,32,102,111,114,32,37,115,32,99,97,110,110,111,116,32, - 104,97,110,100,108,101,32,37,115,169,1,218,4,110,97,109, - 101,41,2,114,141,0,0,0,218,11,73,109,112,111,114,116, - 69,114,114,111,114,41,4,218,4,115,101,108,102,114,141,0, - 0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,115, - 169,1,218,6,109,101,116,104,111,100,114,7,0,0,0,114, - 8,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, - 101,95,119,114,97,112,112,101,114,28,2,0,0,115,20,0, - 0,0,8,1,8,1,10,1,4,1,8,1,2,255,2,1, - 6,255,24,2,255,128,122,40,95,99,104,101,99,107,95,110, + 32,78,99,2,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,31,0,0,0,115,72,0,0,0, + 124,1,100,0,117,0,114,8,124,0,106,0,125,1,110,16, + 124,0,106,0,124,1,107,3,114,24,116,1,100,1,124,0, + 106,0,124,1,102,2,22,0,124,1,100,2,141,2,130,1, + 136,0,124,0,124,1,103,2,124,2,162,1,82,0,105,0, + 124,3,164,1,142,1,83,0,41,3,78,122,30,108,111,97, + 100,101,114,32,102,111,114,32,37,115,32,99,97,110,110,111, + 116,32,104,97,110,100,108,101,32,37,115,169,1,218,4,110, + 97,109,101,41,2,114,141,0,0,0,218,11,73,109,112,111, + 114,116,69,114,114,111,114,41,4,218,4,115,101,108,102,114, + 141,0,0,0,218,4,97,114,103,115,218,6,107,119,97,114, + 103,115,169,1,218,6,109,101,116,104,111,100,114,7,0,0, + 0,114,8,0,0,0,218,19,95,99,104,101,99,107,95,110, + 97,109,101,95,119,114,97,112,112,101,114,29,2,0,0,115, + 18,0,0,0,8,1,8,1,10,1,4,1,8,1,2,255, + 2,1,6,255,24,2,122,40,95,99,104,101,99,107,95,110, 97,109,101,46,60,108,111,99,97,108,115,62,46,95,99,104, 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, @@ -673,80 +670,147 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, 111,108,100,114,85,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,5,95,119,114,97,112,41,2, - 0,0,115,12,0,0,0,8,1,10,1,18,1,2,128,18, - 1,255,128,122,26,95,99,104,101,99,107,95,110,97,109,101, - 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,114, - 69,0,0,0,41,2,218,10,95,98,111,111,116,115,116,114, - 97,112,114,158,0,0,0,41,3,114,147,0,0,0,114,148, - 0,0,0,114,158,0,0,0,114,7,0,0,0,114,146,0, - 0,0,114,8,0,0,0,218,11,95,99,104,101,99,107,95, - 110,97,109,101,20,2,0,0,115,14,0,0,0,14,8,8, - 10,8,1,8,2,10,6,4,1,255,128,114,160,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,6,0,0,0,67,0,0,0,115,72,0,0,0,116,0, - 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, - 161,1,92,2,125,2,125,3,124,2,100,2,117,0,114,34, - 116,4,124,3,131,1,114,34,100,3,125,4,116,0,160,1, - 124,4,160,5,124,3,100,4,25,0,161,1,116,6,161,2, - 1,0,124,2,83,0,41,5,122,155,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, - 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, - 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, - 10,10,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, - 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, - 10,32,32,32,32,122,90,102,105,110,100,95,109,111,100,117, - 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, - 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, - 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, - 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, - 100,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, - 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, - 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, - 114,0,0,0,0,41,7,114,99,0,0,0,114,100,0,0, - 0,114,101,0,0,0,218,11,102,105,110,100,95,108,111,97, - 100,101,114,114,4,0,0,0,114,89,0,0,0,218,13,73, - 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,143, - 0,0,0,218,8,102,117,108,108,110,97,109,101,218,6,108, - 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, - 3,109,115,103,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, - 101,95,115,104,105,109,51,2,0,0,115,18,0,0,0,6, - 7,2,2,4,254,14,6,16,1,4,1,22,1,4,1,255, - 128,114,167,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, - 166,0,0,0,124,0,100,1,100,2,133,2,25,0,125,3, - 124,3,116,0,107,3,114,32,100,3,124,1,155,2,100,4, - 124,3,155,2,157,4,125,4,116,1,160,2,100,5,124,4, - 161,2,1,0,116,3,124,4,102,1,105,0,124,2,164,1, - 142,1,130,1,116,4,124,0,131,1,100,6,107,0,114,53, - 100,7,124,1,155,2,157,2,125,4,116,1,160,2,100,5, - 124,4,161,2,1,0,116,5,124,4,131,1,130,1,116,6, - 124,0,100,2,100,8,133,2,25,0,131,1,125,5,124,5, - 100,9,64,0,114,81,100,10,124,5,155,2,100,11,124,1, - 155,2,157,4,125,4,116,3,124,4,102,1,105,0,124,2, - 164,1,142,1,130,1,124,5,83,0,41,12,97,84,2,0, - 0,80,101,114,102,111,114,109,32,98,97,115,105,99,32,118, - 97,108,105,100,105,116,121,32,99,104,101,99,107,105,110,103, - 32,111,102,32,97,32,112,121,99,32,104,101,97,100,101,114, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 102,108,97,103,115,32,102,105,101,108,100,44,10,32,32,32, - 32,119,104,105,99,104,32,100,101,116,101,114,109,105,110,101, - 115,32,104,111,119,32,116,104,101,32,112,121,99,32,115,104, - 111,117,108,100,32,98,101,32,102,117,114,116,104,101,114,32, - 118,97,108,105,100,97,116,101,100,32,97,103,97,105,110,115, - 116,32,116,104,101,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,44,32,116,104,111,117,103,104,46,41,10,10, + 0,0,114,8,0,0,0,218,5,95,119,114,97,112,42,2, + 0,0,115,10,0,0,0,8,1,10,1,18,1,2,128,18, + 1,122,26,95,99,104,101,99,107,95,110,97,109,101,46,60, + 108,111,99,97,108,115,62,46,95,119,114,97,112,114,69,0, + 0,0,41,2,218,10,95,98,111,111,116,115,116,114,97,112, + 114,158,0,0,0,41,3,114,147,0,0,0,114,148,0,0, + 0,114,158,0,0,0,114,7,0,0,0,114,146,0,0,0, + 114,8,0,0,0,218,11,95,99,104,101,99,107,95,110,97, + 109,101,21,2,0,0,115,12,0,0,0,14,8,8,10,8, + 1,8,2,10,6,4,1,114,160,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0, + 0,67,0,0,0,115,72,0,0,0,116,0,160,1,100,1, + 116,2,161,2,1,0,124,0,160,3,124,1,161,1,92,2, + 125,2,125,3,124,2,100,2,117,0,114,34,116,4,124,3, + 131,1,114,34,100,3,125,4,116,0,160,1,124,4,160,5, + 124,3,100,4,25,0,161,1,116,6,161,2,1,0,124,2, + 83,0,41,5,122,155,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, + 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, + 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, + 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, + 32,122,90,102,105,110,100,95,109,111,100,117,108,101,40,41, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, + 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, + 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, + 51,46,49,50,59,32,117,115,101,32,102,105,110,100,95,115, + 112,101,99,40,41,32,105,110,115,116,101,97,100,78,122,44, + 78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105, + 114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115, + 105,110,103,32,95,95,105,110,105,116,95,95,114,0,0,0, + 0,41,7,114,99,0,0,0,114,100,0,0,0,114,101,0, + 0,0,218,11,102,105,110,100,95,108,111,97,100,101,114,114, + 4,0,0,0,114,89,0,0,0,218,13,73,109,112,111,114, + 116,87,97,114,110,105,110,103,41,5,114,143,0,0,0,218, + 8,102,117,108,108,110,97,109,101,218,6,108,111,97,100,101, + 114,218,8,112,111,114,116,105,111,110,115,218,3,109,115,103, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, + 105,109,52,2,0,0,115,16,0,0,0,6,7,2,2,4, + 254,14,6,16,1,4,1,22,1,4,1,114,167,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,4,0,0,0,67,0,0,0,115,166,0,0,0,124,0, + 100,1,100,2,133,2,25,0,125,3,124,3,116,0,107,3, + 114,32,100,3,124,1,155,2,100,4,124,3,155,2,157,4, + 125,4,116,1,160,2,100,5,124,4,161,2,1,0,116,3, + 124,4,102,1,105,0,124,2,164,1,142,1,130,1,116,4, + 124,0,131,1,100,6,107,0,114,53,100,7,124,1,155,2, + 157,2,125,4,116,1,160,2,100,5,124,4,161,2,1,0, + 116,5,124,4,131,1,130,1,116,6,124,0,100,2,100,8, + 133,2,25,0,131,1,125,5,124,5,100,9,64,0,114,81, + 100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,4, + 116,3,124,4,102,1,105,0,124,2,164,1,142,1,130,1, + 124,5,83,0,41,12,97,84,2,0,0,80,101,114,102,111, + 114,109,32,98,97,115,105,99,32,118,97,108,105,100,105,116, + 121,32,99,104,101,99,107,105,110,103,32,111,102,32,97,32, + 112,121,99,32,104,101,97,100,101,114,32,97,110,100,32,114, + 101,116,117,114,110,32,116,104,101,32,102,108,97,103,115,32, + 102,105,101,108,100,44,10,32,32,32,32,119,104,105,99,104, + 32,100,101,116,101,114,109,105,110,101,115,32,104,111,119,32, + 116,104,101,32,112,121,99,32,115,104,111,117,108,100,32,98, + 101,32,102,117,114,116,104,101,114,32,118,97,108,105,100,97, + 116,101,100,32,97,103,97,105,110,115,116,32,116,104,101,32, + 115,111,117,114,99,101,46,10,10,32,32,32,32,42,100,97, + 116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,101, + 110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,102, + 105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,102, + 105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,114, + 101,10,32,32,32,32,114,101,113,117,105,114,101,100,44,32, + 116,104,111,117,103,104,46,41,10,10,32,32,32,32,42,110, + 97,109,101,42,32,105,115,32,116,104,101,32,110,97,109,101, + 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,98, + 101,105,110,103,32,105,109,112,111,114,116,101,100,46,32,73, + 116,32,105,115,32,117,115,101,100,32,102,111,114,32,108,111, + 103,103,105,110,103,46,10,10,32,32,32,32,42,101,120,99, + 95,100,101,116,97,105,108,115,42,32,105,115,32,97,32,100, + 105,99,116,105,111,110,97,114,121,32,112,97,115,115,101,100, + 32,116,111,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,102,32,105,116,32,114,97,105,115,101,100,32,102,111,114, + 10,32,32,32,32,105,109,112,114,111,118,101,100,32,100,101, + 98,117,103,103,105,110,103,46,10,10,32,32,32,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,32,119,104,101,110,32,116,104,101,32,109,97,103, + 105,99,32,110,117,109,98,101,114,32,105,115,32,105,110,99, + 111,114,114,101,99,116,32,111,114,32,119,104,101,110,32,116, + 104,101,32,102,108,97,103,115,10,32,32,32,32,102,105,101, + 108,100,32,105,115,32,105,110,118,97,108,105,100,46,32,69, + 79,70,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,32,119,104,101,110,32,116,104,101,32,100,97,116,97,32, + 105,115,32,102,111,117,110,100,32,116,111,32,98,101,32,116, + 114,117,110,99,97,116,101,100,46,10,10,32,32,32,32,78, + 114,31,0,0,0,122,20,98,97,100,32,109,97,103,105,99, + 32,110,117,109,98,101,114,32,105,110,32,122,2,58,32,250, + 2,123,125,233,16,0,0,0,122,40,114,101,97,99,104,101, + 100,32,69,79,70,32,119,104,105,108,101,32,114,101,97,100, + 105,110,103,32,112,121,99,32,104,101,97,100,101,114,32,111, + 102,32,233,8,0,0,0,233,252,255,255,255,122,14,105,110, + 118,97,108,105,100,32,102,108,97,103,115,32,122,4,32,105, + 110,32,41,7,218,12,77,65,71,73,67,95,78,85,77,66, + 69,82,114,159,0,0,0,218,16,95,118,101,114,98,111,115, + 101,95,109,101,115,115,97,103,101,114,142,0,0,0,114,4, + 0,0,0,218,8,69,79,70,69,114,114,111,114,114,42,0, + 0,0,41,6,114,41,0,0,0,114,141,0,0,0,218,11, + 101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,103, + 105,99,114,117,0,0,0,114,16,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,13,95,99,108, + 97,115,115,105,102,121,95,112,121,99,72,2,0,0,115,28, + 0,0,0,12,16,8,1,16,1,12,1,16,1,12,1,10, + 1,12,1,8,1,16,1,8,2,16,1,16,1,4,1,114, + 176,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,4,0,0,0,67,0,0,0,115,124,0, + 0,0,116,0,124,0,100,1,100,2,133,2,25,0,131,1, + 124,1,100,3,64,0,107,3,114,31,100,4,124,3,155,2, + 157,2,125,5,116,1,160,2,100,5,124,5,161,2,1,0, + 116,3,124,5,102,1,105,0,124,4,164,1,142,1,130,1, + 124,2,100,6,117,1,114,60,116,0,124,0,100,2,100,7, + 133,2,25,0,131,1,124,2,100,3,64,0,107,3,114,58, + 116,3,100,4,124,3,155,2,157,2,102,1,105,0,124,4, + 164,1,142,1,130,1,100,6,83,0,100,6,83,0,41,8, + 97,7,2,0,0,86,97,108,105,100,97,116,101,32,97,32, + 112,121,99,32,97,103,97,105,110,115,116,32,116,104,101,32, + 115,111,117,114,99,101,32,108,97,115,116,45,109,111,100,105, + 102,105,101,100,32,116,105,109,101,46,10,10,32,32,32,32, + 42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,111, + 110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,121, + 99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,104, + 101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,115, + 32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,101, + 100,46,41,10,10,32,32,32,32,42,115,111,117,114,99,101, + 95,109,116,105,109,101,42,32,105,115,32,116,104,101,32,108, + 97,115,116,32,109,111,100,105,102,105,101,100,32,116,105,109, + 101,115,116,97,109,112,32,111,102,32,116,104,101,32,115,111, + 117,114,99,101,32,102,105,108,101,46,10,10,32,32,32,32, + 42,115,111,117,114,99,101,95,115,105,122,101,42,32,105,115, + 32,78,111,110,101,32,111,114,32,116,104,101,32,115,105,122, + 101,32,111,102,32,116,104,101,32,115,111,117,114,99,101,32, + 102,105,108,101,32,105,110,32,98,121,116,101,115,46,10,10, 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, @@ -758,178 +822,110 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, - 32,32,32,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, - 104,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32, - 105,115,32,105,110,99,111,114,114,101,99,116,32,111,114,32, - 119,104,101,110,32,116,104,101,32,102,108,97,103,115,10,32, - 32,32,32,102,105,101,108,100,32,105,115,32,105,110,118,97, - 108,105,100,46,32,69,79,70,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, - 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, - 111,32,98,101,32,116,114,117,110,99,97,116,101,100,46,10, - 10,32,32,32,32,78,114,31,0,0,0,122,20,98,97,100, - 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, - 32,122,2,58,32,250,2,123,125,233,16,0,0,0,122,40, - 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, - 101,32,114,101,97,100,105,110,103,32,112,121,99,32,104,101, - 97,100,101,114,32,111,102,32,233,8,0,0,0,233,252,255, - 255,255,122,14,105,110,118,97,108,105,100,32,102,108,97,103, - 115,32,122,4,32,105,110,32,41,7,218,12,77,65,71,73, - 67,95,78,85,77,66,69,82,114,159,0,0,0,218,16,95, - 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,114, - 142,0,0,0,114,4,0,0,0,218,8,69,79,70,69,114, - 114,111,114,114,42,0,0,0,41,6,114,41,0,0,0,114, - 141,0,0,0,218,11,101,120,99,95,100,101,116,97,105,108, - 115,90,5,109,97,103,105,99,114,117,0,0,0,114,16,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,13,95,99,108,97,115,115,105,102,121,95,112,121,99, - 71,2,0,0,115,30,0,0,0,12,16,8,1,16,1,12, - 1,16,1,12,1,10,1,12,1,8,1,16,1,8,2,16, - 1,16,1,4,1,255,128,114,176,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0, - 0,67,0,0,0,115,124,0,0,0,116,0,124,0,100,1, - 100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3, - 114,31,100,4,124,3,155,2,157,2,125,5,116,1,160,2, - 100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0, - 124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,60, - 116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2, - 100,3,64,0,107,3,114,58,116,3,100,4,124,3,155,2, - 157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6, - 83,0,100,6,83,0,41,8,97,7,2,0,0,86,97,108, - 105,100,97,116,101,32,97,32,112,121,99,32,97,103,97,105, - 110,115,116,32,116,104,101,32,115,111,117,114,99,101,32,108, - 97,115,116,45,109,111,100,105,102,105,101,100,32,116,105,109, - 101,46,10,10,32,32,32,32,42,100,97,116,97,42,32,105, - 115,32,116,104,101,32,99,111,110,116,101,110,116,115,32,111, - 102,32,116,104,101,32,112,121,99,32,102,105,108,101,46,32, - 40,79,110,108,121,32,116,104,101,32,102,105,114,115,116,32, - 49,54,32,98,121,116,101,115,32,97,114,101,10,32,32,32, - 32,114,101,113,117,105,114,101,100,46,41,10,10,32,32,32, - 32,42,115,111,117,114,99,101,95,109,116,105,109,101,42,32, - 105,115,32,116,104,101,32,108,97,115,116,32,109,111,100,105, - 102,105,101,100,32,116,105,109,101,115,116,97,109,112,32,111, - 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, - 101,46,10,10,32,32,32,32,42,115,111,117,114,99,101,95, - 115,105,122,101,42,32,105,115,32,78,111,110,101,32,111,114, - 32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101, - 32,115,111,117,114,99,101,32,102,105,108,101,32,105,110,32, - 98,121,116,101,115,46,10,10,32,32,32,32,42,110,97,109, - 101,42,32,105,115,32,116,104,101,32,110,97,109,101,32,111, - 102,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, - 110,103,32,105,109,112,111,114,116,101,100,46,32,73,116,32, - 105,115,32,117,115,101,100,32,102,111,114,32,108,111,103,103, - 105,110,103,46,10,10,32,32,32,32,42,101,120,99,95,100, - 101,116,97,105,108,115,42,32,105,115,32,97,32,100,105,99, - 116,105,111,110,97,114,121,32,112,97,115,115,101,100,32,116, - 111,32,73,109,112,111,114,116,69,114,114,111,114,32,105,102, - 32,105,116,32,114,97,105,115,101,100,32,102,111,114,10,32, - 32,32,32,105,109,112,114,111,118,101,100,32,100,101,98,117, - 103,103,105,110,103,46,10,10,32,32,32,32,65,110,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, - 105,115,101,100,32,105,102,32,116,104,101,32,98,121,116,101, - 99,111,100,101,32,105,115,32,115,116,97,108,101,46,10,10, - 32,32,32,32,114,170,0,0,0,233,12,0,0,0,114,30, - 0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,115, - 32,115,116,97,108,101,32,102,111,114,32,114,168,0,0,0, - 78,114,169,0,0,0,41,4,114,42,0,0,0,114,159,0, - 0,0,114,173,0,0,0,114,142,0,0,0,41,6,114,41, - 0,0,0,218,12,115,111,117,114,99,101,95,109,116,105,109, - 101,218,11,115,111,117,114,99,101,95,115,105,122,101,114,141, - 0,0,0,114,175,0,0,0,114,117,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,23,95,118, - 97,108,105,100,97,116,101,95,116,105,109,101,115,116,97,109, - 112,95,112,121,99,104,2,0,0,115,20,0,0,0,24,19, - 10,1,12,1,16,1,8,1,22,1,2,255,22,2,8,254, - 255,128,114,180,0,0,0,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, - 115,42,0,0,0,124,0,100,1,100,2,133,2,25,0,124, - 1,107,3,114,19,116,0,100,3,124,2,155,2,157,2,102, - 1,105,0,124,3,164,1,142,1,130,1,100,4,83,0,41, - 5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,97, - 32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,32, - 98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,32, - 114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,104, - 32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,101, - 32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,32, - 104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,97, - 116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,101, - 110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,102, - 105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,102, - 105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,114, - 101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,41, - 10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,97, - 115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,114, - 116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,101, - 95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, - 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110, - 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, - 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, - 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114, - 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42, - 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32, - 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115, - 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32, - 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100, - 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32, - 32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,101, - 32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97, - 108,101,46,10,10,32,32,32,32,114,170,0,0,0,114,169, - 0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,116, - 101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,97, - 116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,114, - 99,101,32,78,41,1,114,142,0,0,0,41,4,114,41,0, - 0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,114, - 141,0,0,0,114,175,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,18,95,118,97,108,105,100, - 97,116,101,95,104,97,115,104,95,112,121,99,132,2,0,0, - 115,16,0,0,0,16,17,2,1,8,1,4,255,2,2,6, - 254,4,255,255,128,114,182,0,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,76,0,0,0,116,0,160,1,124,0,161,1, - 125,4,116,2,124,4,116,3,131,2,114,28,116,4,160,5, - 100,1,124,2,161,2,1,0,124,3,100,2,117,1,114,26, - 116,6,160,7,124,4,124,3,161,2,1,0,124,4,83,0, - 116,8,100,3,160,9,124,2,161,1,124,1,124,2,100,4, - 141,3,130,1,41,5,122,35,67,111,109,112,105,108,101,32, - 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, - 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, - 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, - 114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,98, - 106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,141, - 0,0,0,114,65,0,0,0,41,10,218,7,109,97,114,115, - 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, - 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, - 112,101,114,159,0,0,0,114,173,0,0,0,218,4,95,105, - 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, - 110,97,109,101,114,142,0,0,0,114,89,0,0,0,41,5, - 114,41,0,0,0,114,141,0,0,0,114,132,0,0,0,114, - 134,0,0,0,218,4,99,111,100,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,17,95,99,111,109,112, - 105,108,101,95,98,121,116,101,99,111,100,101,156,2,0,0, - 115,20,0,0,0,10,2,10,1,12,1,8,1,12,1,4, - 1,10,2,4,1,6,255,255,128,114,189,0,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, - 0,0,0,67,0,0,0,115,70,0,0,0,116,0,116,1, - 131,1,125,3,124,3,160,2,116,3,100,1,131,1,161,1, - 1,0,124,3,160,2,116,3,124,1,131,1,161,1,1,0, - 124,3,160,2,116,3,124,2,131,1,161,1,1,0,124,3, - 160,2,116,4,160,5,124,0,161,1,161,1,1,0,124,3, - 83,0,41,3,122,43,80,114,111,100,117,99,101,32,116,104, - 101,32,100,97,116,97,32,102,111,114,32,97,32,116,105,109, - 101,115,116,97,109,112,45,98,97,115,101,100,32,112,121,99, - 46,114,0,0,0,0,78,41,6,218,9,98,121,116,101,97, - 114,114,97,121,114,172,0,0,0,218,6,101,120,116,101,110, - 100,114,36,0,0,0,114,184,0,0,0,218,5,100,117,109, - 112,115,41,4,114,188,0,0,0,218,5,109,116,105,109,101, - 114,179,0,0,0,114,41,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,22,95,99,111,100,101, - 95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,169,2,0,0,115,14,0,0,0,8,2,14,1,14,1, - 14,1,16,1,4,1,255,128,114,194,0,0,0,84,99,3, + 32,32,32,32,65,110,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,32,105,102,32, + 116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,32, + 115,116,97,108,101,46,10,10,32,32,32,32,114,170,0,0, + 0,233,12,0,0,0,114,30,0,0,0,122,22,98,121,116, + 101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,102, + 111,114,32,114,168,0,0,0,78,114,169,0,0,0,41,4, + 114,42,0,0,0,114,159,0,0,0,114,173,0,0,0,114, + 142,0,0,0,41,6,114,41,0,0,0,218,12,115,111,117, + 114,99,101,95,109,116,105,109,101,218,11,115,111,117,114,99, + 101,95,115,105,122,101,114,141,0,0,0,114,175,0,0,0, + 114,117,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,23,95,118,97,108,105,100,97,116,101,95, + 116,105,109,101,115,116,97,109,112,95,112,121,99,105,2,0, + 0,115,18,0,0,0,24,19,10,1,12,1,16,1,8,1, + 22,1,2,255,22,2,8,254,114,180,0,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,42,0,0,0,124,0,100,1,100, + 2,133,2,25,0,124,1,107,3,114,19,116,0,100,3,124, + 2,155,2,157,2,102,1,105,0,124,3,164,1,142,1,130, + 1,100,4,83,0,41,5,97,243,1,0,0,86,97,108,105, + 100,97,116,101,32,97,32,104,97,115,104,45,98,97,115,101, + 100,32,112,121,99,32,98,121,32,99,104,101,99,107,105,110, + 103,32,116,104,101,32,114,101,97,108,32,115,111,117,114,99, + 101,32,104,97,115,104,32,97,103,97,105,110,115,116,32,116, + 104,101,32,111,110,101,32,105,110,10,32,32,32,32,116,104, + 101,32,112,121,99,32,104,101,97,100,101,114,46,10,10,32, + 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, + 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, + 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, + 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, + 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, + 105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,117, + 114,99,101,95,104,97,115,104,42,32,105,115,32,116,104,101, + 32,105,109,112,111,114,116,108,105,98,46,117,116,105,108,46, + 115,111,117,114,99,101,95,104,97,115,104,40,41,32,111,102, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, + 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, + 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, + 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, + 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, + 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, + 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, + 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, + 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, + 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, + 46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, + 105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,32, + 105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,114, + 170,0,0,0,114,169,0,0,0,122,46,104,97,115,104,32, + 105,110,32,98,121,116,101,99,111,100,101,32,100,111,101,115, + 110,39,116,32,109,97,116,99,104,32,104,97,115,104,32,111, + 102,32,115,111,117,114,99,101,32,78,41,1,114,142,0,0, + 0,41,4,114,41,0,0,0,218,11,115,111,117,114,99,101, + 95,104,97,115,104,114,141,0,0,0,114,175,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,18, + 95,118,97,108,105,100,97,116,101,95,104,97,115,104,95,112, + 121,99,133,2,0,0,115,14,0,0,0,16,17,2,1,8, + 1,4,255,2,2,6,254,4,255,114,182,0,0,0,99,4, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,76,0,0,0,116,0,160,1, + 124,0,161,1,125,4,116,2,124,4,116,3,131,2,114,28, + 116,4,160,5,100,1,124,2,161,2,1,0,124,3,100,2, + 117,1,114,26,116,6,160,7,124,4,124,3,161,2,1,0, + 124,4,83,0,116,8,100,3,160,9,124,2,161,1,124,1, + 124,2,100,4,141,3,130,1,41,5,122,35,67,111,109,112, + 105,108,101,32,98,121,116,101,99,111,100,101,32,97,115,32, + 102,111,117,110,100,32,105,110,32,97,32,112,121,99,46,122, + 21,99,111,100,101,32,111,98,106,101,99,116,32,102,114,111, + 109,32,123,33,114,125,78,122,23,78,111,110,45,99,111,100, + 101,32,111,98,106,101,99,116,32,105,110,32,123,33,114,125, + 169,2,114,141,0,0,0,114,65,0,0,0,41,10,218,7, + 109,97,114,115,104,97,108,90,5,108,111,97,100,115,218,10, + 105,115,105,110,115,116,97,110,99,101,218,10,95,99,111,100, + 101,95,116,121,112,101,114,159,0,0,0,114,173,0,0,0, + 218,4,95,105,109,112,90,16,95,102,105,120,95,99,111,95, + 102,105,108,101,110,97,109,101,114,142,0,0,0,114,89,0, + 0,0,41,5,114,41,0,0,0,114,141,0,0,0,114,132, + 0,0,0,114,134,0,0,0,218,4,99,111,100,101,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,17,95, + 99,111,109,112,105,108,101,95,98,121,116,101,99,111,100,101, + 157,2,0,0,115,18,0,0,0,10,2,10,1,12,1,8, + 1,12,1,4,1,10,2,4,1,6,255,114,189,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,5,0,0,0,67,0,0,0,115,70,0,0,0,116,0, + 116,1,131,1,125,3,124,3,160,2,116,3,100,1,131,1, + 161,1,1,0,124,3,160,2,116,3,124,1,131,1,161,1, + 1,0,124,3,160,2,116,3,124,2,131,1,161,1,1,0, + 124,3,160,2,116,4,160,5,124,0,161,1,161,1,1,0, + 124,3,83,0,41,3,122,43,80,114,111,100,117,99,101,32, + 116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,116, + 105,109,101,115,116,97,109,112,45,98,97,115,101,100,32,112, + 121,99,46,114,0,0,0,0,78,41,6,218,9,98,121,116, + 101,97,114,114,97,121,114,172,0,0,0,218,6,101,120,116, + 101,110,100,114,36,0,0,0,114,184,0,0,0,218,5,100, + 117,109,112,115,41,4,114,188,0,0,0,218,5,109,116,105, + 109,101,114,179,0,0,0,114,41,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,22,95,99,111, + 100,101,95,116,111,95,116,105,109,101,115,116,97,109,112,95, + 112,121,99,170,2,0,0,115,12,0,0,0,8,2,14,1, + 14,1,14,1,16,1,4,1,114,194,0,0,0,84,99,3, 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, 0,0,0,67,0,0,0,115,80,0,0,0,116,0,116,1, 131,1,125,3,100,1,124,2,100,1,62,0,66,0,125,4, @@ -946,233 +942,232 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,90,7,99,104,101,99,107,101,100,114,41,0,0,0, 114,16,0,0,0,114,7,0,0,0,114,7,0,0,0,114, 8,0,0,0,218,17,95,99,111,100,101,95,116,111,95,104, - 97,115,104,95,112,121,99,179,2,0,0,115,16,0,0,0, - 8,2,12,1,14,1,16,1,10,1,16,1,4,1,255,128, - 114,195,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62, - 0,0,0,100,1,100,2,108,0,125,1,116,1,160,2,124, - 0,161,1,106,3,125,2,124,1,160,4,124,2,161,1,125, - 3,116,1,160,5,100,2,100,3,161,2,125,4,124,4,160, - 6,124,0,160,6,124,3,100,1,25,0,161,1,161,1,83, - 0,41,4,122,121,68,101,99,111,100,101,32,98,121,116,101, - 115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115, - 111,117,114,99,101,32,99,111,100,101,32,97,110,100,32,114, - 101,116,117,114,110,32,116,104,101,32,115,116,114,105,110,103, - 46,10,10,32,32,32,32,85,110,105,118,101,114,115,97,108, - 32,110,101,119,108,105,110,101,32,115,117,112,112,111,114,116, - 32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32, - 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,0, - 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, - 101,114,91,0,0,0,90,7,66,121,116,101,115,73,79,90, - 8,114,101,97,100,108,105,110,101,90,15,100,101,116,101,99, - 116,95,101,110,99,111,100,105,110,103,90,25,73,110,99,114, - 101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101, - 99,111,100,101,114,218,6,100,101,99,111,100,101,41,5,218, - 12,115,111,117,114,99,101,95,98,121,116,101,115,114,196,0, - 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, - 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, - 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, - 111,100,101,114,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,190,2,0,0,115,12,0,0,0,8,5,12,1,10, - 1,12,1,20,1,255,128,114,200,0,0,0,169,2,114,164, - 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, - 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, - 2,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, - 8,0,0,0,67,0,0,0,115,52,1,0,0,124,1,100, - 1,117,0,114,28,100,2,125,1,116,0,124,2,100,3,131, - 2,114,27,122,7,124,2,160,1,124,0,161,1,125,1,87, - 0,110,35,4,0,116,2,121,153,1,0,1,0,1,0,89, - 0,110,27,110,26,116,3,160,4,124,1,161,1,125,1,116, - 5,124,1,131,1,115,54,122,9,116,6,116,3,160,7,161, - 0,124,1,131,2,125,1,87,0,110,7,4,0,116,8,121, - 152,1,0,1,0,1,0,89,0,116,9,106,10,124,0,124, - 2,124,1,100,4,141,3,125,4,100,5,124,4,95,11,124, - 2,100,1,117,0,114,96,116,12,131,0,68,0,93,21,92, - 2,125,5,125,6,124,1,160,13,116,14,124,6,131,1,161, - 1,114,93,124,5,124,0,124,1,131,2,125,2,124,2,124, - 4,95,15,1,0,113,96,113,72,100,1,83,0,124,3,116, - 16,117,0,114,127,116,0,124,2,100,6,131,2,114,126,122, - 7,124,2,160,17,124,0,161,1,125,7,87,0,110,8,4, - 0,116,2,121,151,1,0,1,0,1,0,89,0,110,9,124, - 7,114,126,103,0,124,4,95,18,110,3,124,3,124,4,95, - 18,124,4,106,18,103,0,107,2,114,149,124,1,114,149,116, - 19,124,1,131,1,100,7,25,0,125,8,124,4,106,18,160, - 20,124,8,161,1,1,0,124,4,83,0,119,0,119,0,119, - 0,41,8,97,61,1,0,0,82,101,116,117,114,110,32,97, - 32,109,111,100,117,108,101,32,115,112,101,99,32,98,97,115, - 101,100,32,111,110,32,97,32,102,105,108,101,32,108,111,99, - 97,116,105,111,110,46,10,10,32,32,32,32,84,111,32,105, - 110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101, - 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, - 107,97,103,101,44,32,115,101,116,10,32,32,32,32,115,117, - 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, - 111,99,97,116,105,111,110,115,32,116,111,32,97,32,108,105, - 115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32, - 112,97,116,104,115,46,32,32,65,110,10,32,32,32,32,101, - 109,112,116,121,32,108,105,115,116,32,105,115,32,115,117,102, - 102,105,99,105,101,110,116,44,32,116,104,111,117,103,104,32, - 105,116,115,32,110,111,116,32,111,116,104,101,114,119,105,115, - 101,32,117,115,101,102,117,108,32,116,111,32,116,104,101,10, - 32,32,32,32,105,109,112,111,114,116,32,115,121,115,116,101, - 109,46,10,10,32,32,32,32,84,104,101,32,108,111,97,100, - 101,114,32,109,117,115,116,32,116,97,107,101,32,97,32,115, - 112,101,99,32,97,115,32,105,116,115,32,111,110,108,121,32, - 95,95,105,110,105,116,95,95,40,41,32,97,114,103,46,10, - 10,32,32,32,32,78,122,9,60,117,110,107,110,111,119,110, - 62,218,12,103,101,116,95,102,105,108,101,110,97,109,101,169, - 1,218,6,111,114,105,103,105,110,84,218,10,105,115,95,112, - 97,99,107,97,103,101,114,0,0,0,0,41,21,114,153,0, - 0,0,114,203,0,0,0,114,142,0,0,0,114,18,0,0, - 0,114,103,0,0,0,114,86,0,0,0,114,67,0,0,0, - 114,82,0,0,0,114,76,0,0,0,114,159,0,0,0,218, - 10,77,111,100,117,108,101,83,112,101,99,90,13,95,115,101, - 116,95,102,105,108,101,97,116,116,114,218,27,95,103,101,116, - 95,115,117,112,112,111,114,116,101,100,95,102,105,108,101,95, - 108,111,97,100,101,114,115,114,58,0,0,0,114,136,0,0, - 0,114,164,0,0,0,218,9,95,80,79,80,85,76,65,84, - 69,114,206,0,0,0,114,202,0,0,0,114,74,0,0,0, - 114,61,0,0,0,41,9,114,141,0,0,0,90,8,108,111, - 99,97,116,105,111,110,114,164,0,0,0,114,202,0,0,0, - 218,4,115,112,101,99,218,12,108,111,97,100,101,114,95,99, - 108,97,115,115,218,8,115,117,102,102,105,120,101,115,114,206, - 0,0,0,90,7,100,105,114,110,97,109,101,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,23,115,112,101, - 99,95,102,114,111,109,95,102,105,108,101,95,108,111,99,97, - 116,105,111,110,207,2,0,0,115,86,0,0,0,8,12,4, - 4,10,1,2,2,14,1,12,1,4,1,2,251,10,7,8, - 1,2,1,18,1,12,1,2,1,16,8,6,1,8,3,14, - 1,14,1,10,1,6,1,4,1,2,253,4,5,8,3,10, - 2,2,1,14,1,12,1,4,1,4,2,6,1,2,128,6, - 2,10,1,4,1,12,1,12,1,4,2,2,244,2,228,2, - 249,255,128,114,213,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, - 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, - 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, - 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, - 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, - 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, - 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, - 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, - 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, - 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, - 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, - 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, - 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, - 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, - 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, - 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, - 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, - 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, - 125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, - 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, - 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, - 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, - 69,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, - 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, - 82,82,69,78,84,95,85,83,69,82,114,76,0,0,0,90, - 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, - 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,36,3,0,0,115,12,0,0,0, - 2,2,16,1,12,1,18,1,2,255,255,128,122,36,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, - 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0, - 124,0,106,0,114,7,124,0,106,1,125,2,110,3,124,0, - 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5, - 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3, - 122,30,124,0,160,6,124,3,161,1,143,14,125,4,116,7, - 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0, - 4,0,131,3,1,0,110,8,49,0,115,47,119,1,1,0, - 1,0,1,0,89,0,1,0,87,0,124,5,83,0,4,0, - 116,9,121,64,1,0,1,0,1,0,89,0,100,0,83,0, - 119,0,41,5,78,122,5,37,100,46,37,100,114,44,0,0, - 0,41,2,114,163,0,0,0,90,11,115,121,115,95,118,101, - 114,115,105,111,110,114,10,0,0,0,41,10,218,11,68,69, - 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, - 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, - 69,71,73,83,84,82,89,95,75,69,89,114,89,0,0,0, - 114,15,0,0,0,218,12,118,101,114,115,105,111,110,95,105, - 110,102,111,114,216,0,0,0,114,215,0,0,0,90,10,81, - 117,101,114,121,86,97,108,117,101,114,76,0,0,0,41,6, - 218,3,99,108,115,114,163,0,0,0,90,12,114,101,103,105, - 115,116,114,121,95,107,101,121,114,20,0,0,0,90,4,104, - 107,101,121,218,8,102,105,108,101,112,97,116,104,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,115, - 101,97,114,99,104,95,114,101,103,105,115,116,114,121,43,3, - 0,0,115,30,0,0,0,6,2,8,1,6,2,6,1,16, - 1,6,255,2,2,12,1,26,1,18,128,4,3,12,254,6, - 1,2,255,255,128,122,38,87,105,110,100,111,119,115,82,101, - 103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,78,99,4, - 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8, - 0,0,0,67,0,0,0,115,120,0,0,0,124,0,160,0, - 124,1,161,1,125,4,124,4,100,0,117,0,114,11,100,0, - 83,0,122,6,116,1,124,4,131,1,1,0,87,0,110,9, - 4,0,116,2,121,59,1,0,1,0,1,0,89,0,100,0, - 83,0,116,3,131,0,68,0,93,26,92,2,125,5,125,6, - 124,4,160,4,116,5,124,6,131,1,161,1,114,56,116,6, - 106,7,124,1,124,5,124,1,124,4,131,2,124,4,100,1, - 141,3,125,7,124,7,2,0,1,0,83,0,113,30,100,0, - 83,0,119,0,41,2,78,114,204,0,0,0,41,8,114,223, - 0,0,0,114,75,0,0,0,114,76,0,0,0,114,208,0, - 0,0,114,58,0,0,0,114,136,0,0,0,114,159,0,0, - 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, - 100,101,114,41,8,114,221,0,0,0,114,163,0,0,0,114, - 65,0,0,0,218,6,116,97,114,103,101,116,114,222,0,0, - 0,114,164,0,0,0,114,212,0,0,0,114,210,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 9,102,105,110,100,95,115,112,101,99,58,3,0,0,115,36, - 0,0,0,10,2,8,1,4,1,2,1,12,1,12,1,6, - 1,14,1,14,1,6,1,8,1,2,1,6,254,8,3,2, - 252,4,255,2,254,255,128,122,31,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,42,0,0,0,116,0,160,1,100,1,116,2,161,2, - 1,0,124,0,160,3,124,1,124,2,161,2,125,3,124,3, - 100,2,117,1,114,19,124,3,106,4,83,0,100,2,83,0, - 41,3,122,106,70,105,110,100,32,109,111,100,117,108,101,32, - 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, - 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,112, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, - 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, - 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, - 111,110,32,51,46,49,50,59,32,117,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 78,169,5,114,99,0,0,0,114,100,0,0,0,114,101,0, - 0,0,114,226,0,0,0,114,164,0,0,0,169,4,114,221, - 0,0,0,114,163,0,0,0,114,65,0,0,0,114,210,0, + 97,115,104,95,112,121,99,180,2,0,0,115,14,0,0,0, + 8,2,12,1,14,1,16,1,10,1,16,1,4,1,114,195, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,6,0,0,0,67,0,0,0,115,62,0,0, + 0,100,1,100,2,108,0,125,1,116,1,160,2,124,0,161, + 1,106,3,125,2,124,1,160,4,124,2,161,1,125,3,116, + 1,160,5,100,2,100,3,161,2,125,4,124,4,160,6,124, + 0,160,6,124,3,100,1,25,0,161,1,161,1,83,0,41, + 4,122,121,68,101,99,111,100,101,32,98,121,116,101,115,32, + 114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,117, + 114,99,101,32,99,111,100,101,32,97,110,100,32,114,101,116, + 117,114,110,32,116,104,101,32,115,116,114,105,110,103,46,10, + 10,32,32,32,32,85,110,105,118,101,114,115,97,108,32,110, + 101,119,108,105,110,101,32,115,117,112,112,111,114,116,32,105, + 115,32,117,115,101,100,32,105,110,32,116,104,101,32,100,101, + 99,111,100,105,110,103,46,10,32,32,32,32,114,0,0,0, + 0,78,84,41,7,218,8,116,111,107,101,110,105,122,101,114, + 91,0,0,0,90,7,66,121,116,101,115,73,79,90,8,114, + 101,97,100,108,105,110,101,90,15,100,101,116,101,99,116,95, + 101,110,99,111,100,105,110,103,90,25,73,110,99,114,101,109, + 101,110,116,97,108,78,101,119,108,105,110,101,68,101,99,111, + 100,101,114,218,6,100,101,99,111,100,101,41,5,218,12,115, + 111,117,114,99,101,95,98,121,116,101,115,114,196,0,0,0, + 90,21,115,111,117,114,99,101,95,98,121,116,101,115,95,114, + 101,97,100,108,105,110,101,218,8,101,110,99,111,100,105,110, + 103,90,15,110,101,119,108,105,110,101,95,100,101,99,111,100, + 101,114,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,13,100,101,99,111,100,101,95,115,111,117,114,99,101, + 191,2,0,0,115,10,0,0,0,8,5,12,1,10,1,12, + 1,20,1,114,200,0,0,0,169,2,114,164,0,0,0,218, + 26,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, + 104,95,108,111,99,97,116,105,111,110,115,99,2,0,0,0, + 0,0,0,0,2,0,0,0,9,0,0,0,8,0,0,0, + 67,0,0,0,115,52,1,0,0,124,1,100,1,117,0,114, + 28,100,2,125,1,116,0,124,2,100,3,131,2,114,27,122, + 7,124,2,160,1,124,0,161,1,125,1,87,0,110,35,4, + 0,116,2,121,153,1,0,1,0,1,0,89,0,110,27,110, + 26,116,3,160,4,124,1,161,1,125,1,116,5,124,1,131, + 1,115,54,122,9,116,6,116,3,160,7,161,0,124,1,131, + 2,125,1,87,0,110,7,4,0,116,8,121,152,1,0,1, + 0,1,0,89,0,116,9,106,10,124,0,124,2,124,1,100, + 4,141,3,125,4,100,5,124,4,95,11,124,2,100,1,117, + 0,114,96,116,12,131,0,68,0,93,21,92,2,125,5,125, + 6,124,1,160,13,116,14,124,6,131,1,161,1,114,93,124, + 5,124,0,124,1,131,2,125,2,124,2,124,4,95,15,1, + 0,113,96,113,72,100,1,83,0,124,3,116,16,117,0,114, + 127,116,0,124,2,100,6,131,2,114,126,122,7,124,2,160, + 17,124,0,161,1,125,7,87,0,110,8,4,0,116,2,121, + 151,1,0,1,0,1,0,89,0,110,9,124,7,114,126,103, + 0,124,4,95,18,110,3,124,3,124,4,95,18,124,4,106, + 18,103,0,107,2,114,149,124,1,114,149,116,19,124,1,131, + 1,100,7,25,0,125,8,124,4,106,18,160,20,124,8,161, + 1,1,0,124,4,83,0,119,0,119,0,119,0,41,8,97, + 61,1,0,0,82,101,116,117,114,110,32,97,32,109,111,100, + 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, + 110,32,97,32,102,105,108,101,32,108,111,99,97,116,105,111, + 110,46,10,10,32,32,32,32,84,111,32,105,110,100,105,99, + 97,116,101,32,116,104,97,116,32,116,104,101,32,109,111,100, + 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, + 44,32,115,101,116,10,32,32,32,32,115,117,98,109,111,100, + 117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,116, + 105,111,110,115,32,116,111,32,97,32,108,105,115,116,32,111, + 102,32,100,105,114,101,99,116,111,114,121,32,112,97,116,104, + 115,46,32,32,65,110,10,32,32,32,32,101,109,112,116,121, + 32,108,105,115,116,32,105,115,32,115,117,102,102,105,99,105, + 101,110,116,44,32,116,104,111,117,103,104,32,105,116,115,32, + 110,111,116,32,111,116,104,101,114,119,105,115,101,32,117,115, + 101,102,117,108,32,116,111,32,116,104,101,10,32,32,32,32, + 105,109,112,111,114,116,32,115,121,115,116,101,109,46,10,10, + 32,32,32,32,84,104,101,32,108,111,97,100,101,114,32,109, + 117,115,116,32,116,97,107,101,32,97,32,115,112,101,99,32, + 97,115,32,105,116,115,32,111,110,108,121,32,95,95,105,110, + 105,116,95,95,40,41,32,97,114,103,46,10,10,32,32,32, + 32,78,122,9,60,117,110,107,110,111,119,110,62,218,12,103, + 101,116,95,102,105,108,101,110,97,109,101,169,1,218,6,111, + 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, + 103,101,114,0,0,0,0,41,21,114,153,0,0,0,114,203, + 0,0,0,114,142,0,0,0,114,18,0,0,0,114,103,0, + 0,0,114,86,0,0,0,114,67,0,0,0,114,82,0,0, + 0,114,76,0,0,0,114,159,0,0,0,218,10,77,111,100, + 117,108,101,83,112,101,99,90,13,95,115,101,116,95,102,105, + 108,101,97,116,116,114,218,27,95,103,101,116,95,115,117,112, + 112,111,114,116,101,100,95,102,105,108,101,95,108,111,97,100, + 101,114,115,114,58,0,0,0,114,136,0,0,0,114,164,0, + 0,0,218,9,95,80,79,80,85,76,65,84,69,114,206,0, + 0,0,114,202,0,0,0,114,74,0,0,0,114,61,0,0, + 0,41,9,114,141,0,0,0,90,8,108,111,99,97,116,105, + 111,110,114,164,0,0,0,114,202,0,0,0,218,4,115,112, + 101,99,218,12,108,111,97,100,101,114,95,99,108,97,115,115, + 218,8,115,117,102,102,105,120,101,115,114,206,0,0,0,90, + 7,100,105,114,110,97,109,101,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,23,115,112,101,99,95,102,114, + 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, + 208,2,0,0,115,84,0,0,0,8,12,4,4,10,1,2, + 2,14,1,12,1,4,1,2,251,10,7,8,1,2,1,18, + 1,12,1,2,1,16,8,6,1,8,3,14,1,14,1,10, + 1,6,1,4,1,2,253,4,5,8,3,10,2,2,1,14, + 1,12,1,4,1,4,2,6,1,2,128,6,2,10,1,4, + 1,12,1,12,1,4,2,2,244,2,228,2,249,114,213,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,64,0,0,0,115,88,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,90,4, + 100,3,90,5,101,6,111,15,100,4,101,7,118,0,90,8, + 101,9,100,5,100,6,132,0,131,1,90,10,101,11,100,7, + 100,8,132,0,131,1,90,12,101,11,100,14,100,10,100,11, + 132,1,131,1,90,13,101,11,100,15,100,12,100,13,132,1, + 131,1,90,14,100,9,83,0,41,16,218,21,87,105,110,100, + 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, + 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, + 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, + 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, + 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, + 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, + 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, + 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, + 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, + 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, + 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, + 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, + 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, + 103,122,6,95,100,46,112,121,100,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, + 0,0,115,50,0,0,0,122,8,116,0,160,1,116,0,106, + 2,124,0,161,2,87,0,83,0,4,0,116,3,121,24,1, + 0,1,0,1,0,116,0,160,1,116,0,106,4,124,0,161, + 2,6,0,89,0,83,0,119,0,114,69,0,0,0,41,5, + 218,6,119,105,110,114,101,103,90,7,79,112,101,110,75,101, + 121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95, + 85,83,69,82,114,76,0,0,0,90,18,72,75,69,89,95, + 76,79,67,65,76,95,77,65,67,72,73,78,69,114,19,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,102,105,110,100,95,109,111,100,117,108,101,74,3, - 0,0,115,16,0,0,0,6,7,2,2,4,254,12,3,8, - 1,6,1,4,2,255,128,122,33,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,169,2,78,78,114,69, - 0,0,0,41,15,114,150,0,0,0,114,149,0,0,0,114, - 151,0,0,0,114,152,0,0,0,114,219,0,0,0,114,218, - 0,0,0,218,11,95,77,83,95,87,73,78,68,79,87,83, - 218,18,69,88,84,69,78,83,73,79,78,95,83,85,70,70, - 73,88,69,83,114,217,0,0,0,218,12,115,116,97,116,105, - 99,109,101,116,104,111,100,114,216,0,0,0,218,11,99,108, - 97,115,115,109,101,116,104,111,100,114,223,0,0,0,114,226, - 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, - 0,24,3,0,0,115,32,0,0,0,8,0,4,2,2,3, - 2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1, - 2,14,12,1,2,15,16,1,255,128,114,214,0,0,0,99, + 0,218,14,95,111,112,101,110,95,114,101,103,105,115,116,114, + 121,37,3,0,0,115,10,0,0,0,2,2,16,1,12,1, + 18,1,2,255,122,36,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101, + 110,95,114,101,103,105,115,116,114,121,99,2,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, + 0,0,0,115,130,0,0,0,124,0,106,0,114,7,124,0, + 106,1,125,2,110,3,124,0,106,2,125,2,124,2,106,3, + 124,1,100,1,116,4,106,5,100,0,100,2,133,2,25,0, + 22,0,100,3,141,2,125,3,122,30,124,0,160,6,124,3, + 161,1,143,14,125,4,116,7,160,8,124,4,100,4,161,2, + 125,5,87,0,100,0,4,0,4,0,131,3,1,0,110,8, + 49,0,115,47,119,1,1,0,1,0,1,0,89,0,1,0, + 87,0,124,5,83,0,4,0,116,9,121,64,1,0,1,0, + 1,0,89,0,100,0,83,0,119,0,41,5,78,122,5,37, + 100,46,37,100,114,44,0,0,0,41,2,114,163,0,0,0, + 90,11,115,121,115,95,118,101,114,115,105,111,110,114,10,0, + 0,0,41,10,218,11,68,69,66,85,71,95,66,85,73,76, + 68,218,18,82,69,71,73,83,84,82,89,95,75,69,89,95, + 68,69,66,85,71,218,12,82,69,71,73,83,84,82,89,95, + 75,69,89,114,89,0,0,0,114,15,0,0,0,218,12,118, + 101,114,115,105,111,110,95,105,110,102,111,114,216,0,0,0, + 114,215,0,0,0,90,10,81,117,101,114,121,86,97,108,117, + 101,114,76,0,0,0,41,6,218,3,99,108,115,114,163,0, + 0,0,90,12,114,101,103,105,115,116,114,121,95,107,101,121, + 114,20,0,0,0,90,4,104,107,101,121,218,8,102,105,108, + 101,112,97,116,104,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101, + 103,105,115,116,114,121,44,3,0,0,115,28,0,0,0,6, + 2,8,1,6,2,6,1,16,1,6,255,2,2,12,1,26, + 1,18,128,4,3,12,254,6,1,2,255,122,38,87,105,110, + 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, + 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, + 116,114,121,78,99,4,0,0,0,0,0,0,0,0,0,0, + 0,8,0,0,0,8,0,0,0,67,0,0,0,115,120,0, + 0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0, + 117,0,114,11,100,0,83,0,122,6,116,1,124,4,131,1, + 1,0,87,0,110,9,4,0,116,2,121,59,1,0,1,0, + 1,0,89,0,100,0,83,0,116,3,131,0,68,0,93,26, + 92,2,125,5,125,6,124,4,160,4,116,5,124,6,131,1, + 161,1,114,56,116,6,106,7,124,1,124,5,124,1,124,4, + 131,2,124,4,100,1,141,3,125,7,124,7,2,0,1,0, + 83,0,113,30,100,0,83,0,119,0,41,2,78,114,204,0, + 0,0,41,8,114,223,0,0,0,114,75,0,0,0,114,76, + 0,0,0,114,208,0,0,0,114,58,0,0,0,114,136,0, + 0,0,114,159,0,0,0,218,16,115,112,101,99,95,102,114, + 111,109,95,108,111,97,100,101,114,41,8,114,221,0,0,0, + 114,163,0,0,0,114,65,0,0,0,218,6,116,97,114,103, + 101,116,114,222,0,0,0,114,164,0,0,0,114,212,0,0, + 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,9,102,105,110,100,95,115,112,101,99, + 59,3,0,0,115,34,0,0,0,10,2,8,1,4,1,2, + 1,12,1,12,1,6,1,14,1,14,1,6,1,8,1,2, + 1,6,254,8,3,2,252,4,255,2,254,122,31,87,105,110, + 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,67,0,0,0,115,42,0,0,0,116,0,160,1,100,1, + 116,2,161,2,1,0,124,0,160,3,124,1,124,2,161,2, + 125,3,124,3,100,2,117,1,114,19,124,3,106,4,83,0, + 100,2,83,0,41,3,122,106,70,105,110,100,32,109,111,100, + 117,108,101,32,110,97,109,101,100,32,105,110,32,116,104,101, + 32,114,101,103,105,115,116,114,121,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,112,87,105,110,100,111,119,115,82,101,103,105,115, + 116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,40,41,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, + 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, + 80,121,116,104,111,110,32,51,46,49,50,59,32,117,115,101, + 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, + 116,101,97,100,78,169,5,114,99,0,0,0,114,100,0,0, + 0,114,101,0,0,0,114,226,0,0,0,114,164,0,0,0, + 169,4,114,221,0,0,0,114,163,0,0,0,114,65,0,0, + 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,11,102,105,110,100,95,109,111,100,117, + 108,101,75,3,0,0,115,14,0,0,0,6,7,2,2,4, + 254,12,3,8,1,6,1,4,2,122,33,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,169,2,78,78, + 114,69,0,0,0,41,15,114,150,0,0,0,114,149,0,0, + 0,114,151,0,0,0,114,152,0,0,0,114,219,0,0,0, + 114,218,0,0,0,218,11,95,77,83,95,87,73,78,68,79, + 87,83,218,18,69,88,84,69,78,83,73,79,78,95,83,85, + 70,70,73,88,69,83,114,217,0,0,0,218,12,115,116,97, + 116,105,99,109,101,116,104,111,100,114,216,0,0,0,218,11, + 99,108,97,115,115,109,101,116,104,111,100,114,223,0,0,0, + 114,226,0,0,0,114,229,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,214, + 0,0,0,25,3,0,0,115,30,0,0,0,8,0,4,2, + 2,3,2,255,2,4,2,255,12,3,2,2,10,1,2,6, + 10,1,2,14,12,1,2,15,16,1,114,214,0,0,0,99, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,64,0,0,0,115,48,0,0,0,101,0,90, 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, @@ -1206,140 +1201,139 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,120,0,0,0,90,13,102,105,108,101,110,97, 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,206,0,0,0,96,3,0,0,115,10,0,0,0,18, - 3,16,1,14,1,16,1,255,128,122,24,95,76,111,97,100, - 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, - 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, - 0,169,2,122,42,85,115,101,32,100,101,102,97,117,108,116, - 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, - 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, - 114,7,0,0,0,169,2,114,143,0,0,0,114,210,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,104, - 3,0,0,243,4,0,0,0,4,0,255,128,122,27,95,76, - 111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97, - 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0, - 0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161, - 1,125,2,124,2,100,1,117,0,114,18,116,2,100,2,160, - 3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116, - 6,124,2,124,1,106,7,161,3,1,0,100,1,83,0,41, - 3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109, - 111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32, - 108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125, - 32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41, - 32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218, - 8,103,101,116,95,99,111,100,101,114,150,0,0,0,114,142, - 0,0,0,114,89,0,0,0,114,159,0,0,0,218,25,95, - 99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115, - 95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,156, - 0,0,0,41,3,114,143,0,0,0,218,6,109,111,100,117, - 108,101,114,188,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,11,101,120,101,99,95,109,111,100, - 117,108,101,107,3,0,0,115,14,0,0,0,12,2,8,1, - 4,1,8,1,4,255,20,2,255,128,122,25,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,109, + 0,114,206,0,0,0,97,3,0,0,115,8,0,0,0,18, + 3,16,1,14,1,16,1,122,24,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,169, + 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, + 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, + 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,7, + 0,0,0,169,2,114,143,0,0,0,114,210,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, + 99,114,101,97,116,101,95,109,111,100,117,108,101,105,3,0, + 0,243,2,0,0,0,4,0,122,27,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,12, - 0,0,0,116,0,160,1,124,0,124,1,161,2,83,0,41, - 2,122,26,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,78,41,2, - 114,159,0,0,0,218,17,95,108,111,97,100,95,109,111,100, - 117,108,101,95,115,104,105,109,169,2,114,143,0,0,0,114, - 163,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, - 115,3,0,0,115,4,0,0,0,12,3,255,128,122,25,95, - 76,111,97,100,101,114,66,97,115,105,99,115,46,108,111,97, - 100,95,109,111,100,117,108,101,78,41,8,114,150,0,0,0, - 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, - 206,0,0,0,114,239,0,0,0,114,245,0,0,0,114,248, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,235,0,0,0,91,3,0,0, - 115,14,0,0,0,8,0,4,2,8,3,8,8,8,3,12, - 8,255,128,114,235,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, - 0,115,74,0,0,0,101,0,90,1,100,0,90,2,100,1, - 100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5, - 100,6,132,0,90,5,100,7,100,8,132,0,90,6,100,9, - 100,10,132,0,90,7,100,11,100,12,156,1,100,13,100,14, - 132,2,90,8,100,15,100,16,132,0,90,9,100,17,83,0, - 41,18,218,12,83,111,117,114,99,101,76,111,97,100,101,114, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,116,0, - 130,1,41,2,122,165,79,112,116,105,111,110,97,108,32,109, - 101,116,104,111,100,32,116,104,97,116,32,114,101,116,117,114, - 110,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116, - 105,111,110,32,116,105,109,101,32,40,97,110,32,105,110,116, - 41,32,102,111,114,32,116,104,101,10,32,32,32,32,32,32, - 32,32,115,112,101,99,105,102,105,101,100,32,112,97,116,104, - 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, - 32,32,32,82,97,105,115,101,115,32,79,83,69,114,114,111, - 114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32, - 99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101, - 100,46,10,32,32,32,32,32,32,32,32,78,41,1,114,76, - 0,0,0,169,2,114,143,0,0,0,114,65,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, - 112,97,116,104,95,109,116,105,109,101,123,3,0,0,115,4, - 0,0,0,4,6,255,128,122,23,83,111,117,114,99,101,76, - 111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,4,0,0,0,67,0,0,0,115,14,0,0,0,100,1, - 124,0,160,0,124,1,161,1,105,1,83,0,41,3,97,158, - 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, - 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, - 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,10,32, - 32,32,32,32,32,32,32,112,97,116,104,32,40,97,32,115, - 116,114,41,46,10,10,32,32,32,32,32,32,32,32,80,111, - 115,115,105,98,108,101,32,107,101,121,115,58,10,32,32,32, - 32,32,32,32,32,45,32,39,109,116,105,109,101,39,32,40, - 109,97,110,100,97,116,111,114,121,41,32,105,115,32,116,104, - 101,32,110,117,109,101,114,105,99,32,116,105,109,101,115,116, - 97,109,112,32,111,102,32,108,97,115,116,32,115,111,117,114, - 99,101,10,32,32,32,32,32,32,32,32,32,32,99,111,100, - 101,32,109,111,100,105,102,105,99,97,116,105,111,110,59,10, - 32,32,32,32,32,32,32,32,45,32,39,115,105,122,101,39, - 32,40,111,112,116,105,111,110,97,108,41,32,105,115,32,116, - 104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115, - 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,99, - 111,100,101,46,10,10,32,32,32,32,32,32,32,32,73,109, - 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, - 109,101,116,104,111,100,32,97,108,108,111,119,115,32,116,104, - 101,32,108,111,97,100,101,114,32,116,111,32,114,101,97,100, - 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, + 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,56, + 0,0,0,124,0,160,0,124,1,106,1,161,1,125,2,124, + 2,100,1,117,0,114,18,116,2,100,2,160,3,124,1,106, + 1,161,1,131,1,130,1,116,4,160,5,116,6,124,2,124, + 1,106,7,161,3,1,0,100,1,83,0,41,3,122,19,69, + 120,101,99,117,116,101,32,116,104,101,32,109,111,100,117,108, + 101,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100, + 32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101, + 110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116, + 117,114,110,115,32,78,111,110,101,41,8,218,8,103,101,116, + 95,99,111,100,101,114,150,0,0,0,114,142,0,0,0,114, + 89,0,0,0,114,159,0,0,0,218,25,95,99,97,108,108, + 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, + 111,118,101,100,218,4,101,120,101,99,114,156,0,0,0,41, + 3,114,143,0,0,0,218,6,109,111,100,117,108,101,114,188, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,108, + 3,0,0,115,12,0,0,0,12,2,8,1,4,1,8,1, + 4,255,20,2,122,25,95,76,111,97,100,101,114,66,97,115, + 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, + 1,124,0,124,1,161,2,83,0,41,2,122,26,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,78,41,2,114,159,0,0,0,218, + 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, + 105,109,169,2,114,143,0,0,0,114,163,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,108, + 111,97,100,95,109,111,100,117,108,101,116,3,0,0,115,2, + 0,0,0,12,3,122,25,95,76,111,97,100,101,114,66,97, + 115,105,99,115,46,108,111,97,100,95,109,111,100,117,108,101, + 78,41,8,114,150,0,0,0,114,149,0,0,0,114,151,0, + 0,0,114,152,0,0,0,114,206,0,0,0,114,239,0,0, + 0,114,245,0,0,0,114,248,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 235,0,0,0,92,3,0,0,115,12,0,0,0,8,0,4, + 2,8,3,8,8,8,3,12,8,114,235,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,74,0,0,0,101,0,90,1, + 100,0,90,2,100,1,100,2,132,0,90,3,100,3,100,4, + 132,0,90,4,100,5,100,6,132,0,90,5,100,7,100,8, + 132,0,90,6,100,9,100,10,132,0,90,7,100,11,100,12, + 156,1,100,13,100,14,132,2,90,8,100,15,100,16,132,0, + 90,9,100,17,83,0,41,18,218,12,83,111,117,114,99,101, + 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, + 4,0,0,0,116,0,130,1,41,2,122,165,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, + 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, + 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, + 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, + 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, + 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, - 32,114,193,0,0,0,78,41,1,114,251,0,0,0,114,250, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,10,112,97,116,104,95,115,116,97,116,115,131,3, - 0,0,115,4,0,0,0,14,12,255,128,122,23,83,111,117, - 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, - 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,67,0,0,0,115,12,0, - 0,0,124,0,160,0,124,2,124,3,161,2,83,0,41,2, - 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, - 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, - 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, - 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, - 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, - 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, - 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, - 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, - 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, - 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, - 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, - 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, - 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, - 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, - 32,32,32,32,32,32,78,41,1,218,8,115,101,116,95,100, - 97,116,97,41,4,114,143,0,0,0,114,134,0,0,0,90, - 10,99,97,99,104,101,95,112,97,116,104,114,41,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, - 145,3,0,0,115,4,0,0,0,12,8,255,128,122,28,83, + 32,78,41,1,114,76,0,0,0,169,2,114,143,0,0,0, + 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, + 124,3,0,0,115,2,0,0,0,4,6,122,23,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, + 116,105,109,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,14,0, + 0,0,100,1,124,0,160,0,124,1,161,1,105,1,83,0, + 41,3,97,158,1,0,0,79,112,116,105,111,110,97,108,32, + 109,101,116,104,111,100,32,114,101,116,117,114,110,105,110,103, + 32,97,32,109,101,116,97,100,97,116,97,32,100,105,99,116, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,10,32,32,32,32,32,32,32,32,112,97,116,104,32, + 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, + 32,32,80,111,115,115,105,98,108,101,32,107,101,121,115,58, + 10,32,32,32,32,32,32,32,32,45,32,39,109,116,105,109, + 101,39,32,40,109,97,110,100,97,116,111,114,121,41,32,105, + 115,32,116,104,101,32,110,117,109,101,114,105,99,32,116,105, + 109,101,115,116,97,109,112,32,111,102,32,108,97,115,116,32, + 115,111,117,114,99,101,10,32,32,32,32,32,32,32,32,32, + 32,99,111,100,101,32,109,111,100,105,102,105,99,97,116,105, + 111,110,59,10,32,32,32,32,32,32,32,32,45,32,39,115, + 105,122,101,39,32,40,111,112,116,105,111,110,97,108,41,32, + 105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98, + 121,116,101,115,32,111,102,32,116,104,101,32,115,111,117,114, + 99,101,32,99,111,100,101,46,10,10,32,32,32,32,32,32, + 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, + 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, + 115,32,116,104,101,32,108,111,97,100,101,114,32,116,111,32, + 114,101,97,100,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,115,46,10,32,32,32,32,32,32,32,32,82,97,105, + 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, + 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, + 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, + 32,32,32,32,32,114,193,0,0,0,78,41,1,114,251,0, + 0,0,114,250,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,10,112,97,116,104,95,115,116,97, + 116,115,132,3,0,0,115,2,0,0,0,14,12,122,23,83, + 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, + 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 12,0,0,0,124,0,160,0,124,2,124,3,161,2,83,0, + 41,2,122,228,79,112,116,105,111,110,97,108,32,109,101,116, + 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, + 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, + 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, + 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, + 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, + 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, + 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, + 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,115, + 111,117,114,99,101,32,112,97,116,104,32,105,115,32,110,101, + 101,100,101,100,32,105,110,32,111,114,100,101,114,32,116,111, + 32,99,111,114,114,101,99,116,108,121,32,116,114,97,110,115, + 102,101,114,32,112,101,114,109,105,115,115,105,111,110,115,10, + 32,32,32,32,32,32,32,32,78,41,1,218,8,115,101,116, + 95,100,97,116,97,41,4,114,143,0,0,0,114,134,0,0, + 0,90,10,99,97,99,104,101,95,112,97,116,104,114,41,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,15,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,146,3,0,0,115,2,0,0,0,12,8,122,28,83, 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, 104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0, @@ -1355,7 +1349,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, 32,32,32,78,114,7,0,0,0,41,3,114,143,0,0,0, 114,65,0,0,0,114,41,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,253,0,0,0,155,3, + 7,0,0,0,114,8,0,0,0,114,253,0,0,0,156,3, 0,0,114,240,0,0,0,122,21,83,111,117,114,99,101,76, 111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2, 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,10, @@ -1375,185 +1369,184 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 142,0,0,0,114,200,0,0,0,41,5,114,143,0,0,0, 114,163,0,0,0,114,65,0,0,0,114,198,0,0,0,218, 3,101,120,99,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,162, - 3,0,0,115,26,0,0,0,10,2,2,1,12,1,8,4, + 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,163, + 3,0,0,115,24,0,0,0,10,2,2,1,12,1,8,4, 14,253,4,1,2,1,4,255,2,1,2,255,8,128,2,255, - 255,128,122,23,83,111,117,114,99,101,76,111,97,100,101,114, - 46,103,101,116,95,115,111,117,114,99,101,114,130,0,0,0, - 41,1,218,9,95,111,112,116,105,109,105,122,101,99,3,0, - 0,0,0,0,0,0,1,0,0,0,4,0,0,0,8,0, - 0,0,67,0,0,0,115,22,0,0,0,116,0,106,1,116, - 2,124,1,124,2,100,1,100,2,124,3,100,3,141,6,83, - 0,41,5,122,130,82,101,116,117,114,110,32,116,104,101,32, - 99,111,100,101,32,111,98,106,101,99,116,32,99,111,109,112, - 105,108,101,100,32,102,114,111,109,32,115,111,117,114,99,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,39, - 100,97,116,97,39,32,97,114,103,117,109,101,110,116,32,99, - 97,110,32,98,101,32,97,110,121,32,111,98,106,101,99,116, - 32,116,121,112,101,32,116,104,97,116,32,99,111,109,112,105, - 108,101,40,41,32,115,117,112,112,111,114,116,115,46,10,32, - 32,32,32,32,32,32,32,114,243,0,0,0,84,41,2,218, - 12,100,111,110,116,95,105,110,104,101,114,105,116,114,108,0, - 0,0,78,41,3,114,159,0,0,0,114,242,0,0,0,218, - 7,99,111,109,112,105,108,101,41,4,114,143,0,0,0,114, - 41,0,0,0,114,65,0,0,0,114,2,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,115, - 111,117,114,99,101,95,116,111,95,99,111,100,101,172,3,0, - 0,115,8,0,0,0,12,5,4,1,6,255,255,128,122,27, - 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, - 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,15,0,0,0,9,0,0,0, - 67,0,0,0,115,12,2,0,0,124,0,160,0,124,1,161, - 1,125,2,100,1,125,3,100,1,125,4,100,1,125,5,100, - 2,125,6,100,3,125,7,122,6,116,1,124,2,131,1,125, - 8,87,0,110,11,4,0,116,2,144,1,121,5,1,0,1, - 0,1,0,100,1,125,8,89,0,110,143,122,7,124,0,160, - 3,124,2,161,1,125,9,87,0,110,9,4,0,116,4,144, - 1,121,4,1,0,1,0,1,0,89,0,110,126,116,5,124, - 9,100,4,25,0,131,1,125,3,122,7,124,0,160,6,124, - 8,161,1,125,10,87,0,110,9,4,0,116,4,144,1,121, - 3,1,0,1,0,1,0,89,0,110,103,124,1,124,8,100, - 5,156,2,125,11,122,71,116,7,124,10,124,1,124,11,131, - 3,125,12,116,8,124,10,131,1,100,6,100,1,133,2,25, - 0,125,13,124,12,100,7,64,0,100,8,107,3,125,6,124, - 6,114,138,124,12,100,9,64,0,100,8,107,3,125,7,116, - 9,106,10,100,10,107,3,114,137,124,7,115,119,116,9,106, - 10,100,11,107,2,114,137,124,0,160,6,124,2,161,1,125, - 4,116,9,160,11,116,12,124,4,161,2,125,5,116,13,124, - 10,124,5,124,1,124,11,131,4,1,0,110,10,116,14,124, - 10,124,3,124,9,100,12,25,0,124,1,124,11,131,5,1, - 0,87,0,110,11,4,0,116,15,116,16,102,2,144,1,121, - 2,1,0,1,0,1,0,89,0,110,15,116,17,160,18,100, - 13,124,8,124,2,161,3,1,0,116,19,124,13,124,1,124, - 8,124,2,100,14,141,4,83,0,124,4,100,1,117,0,114, - 185,124,0,160,6,124,2,161,1,125,4,124,0,160,20,124, - 4,124,2,161,2,125,14,116,17,160,18,100,15,124,2,161, - 2,1,0,116,21,106,22,115,255,124,8,100,1,117,1,114, - 255,124,3,100,1,117,1,114,255,124,6,114,226,124,5,100, - 1,117,0,114,219,116,9,160,11,124,4,161,1,125,5,116, - 23,124,14,124,5,124,7,131,3,125,10,110,8,116,24,124, - 14,124,3,116,25,124,4,131,1,131,3,125,10,122,10,124, - 0,160,26,124,2,124,8,124,10,161,3,1,0,87,0,124, - 14,83,0,4,0,116,2,144,1,121,1,1,0,1,0,1, - 0,89,0,124,14,83,0,124,14,83,0,119,0,119,0,119, - 0,119,0,119,0,41,16,122,190,67,111,110,99,114,101,116, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, - 114,46,103,101,116,95,99,111,100,101,46,10,10,32,32,32, - 32,32,32,32,32,82,101,97,100,105,110,103,32,111,102,32, - 98,121,116,101,99,111,100,101,32,114,101,113,117,105,114,101, - 115,32,112,97,116,104,95,115,116,97,116,115,32,116,111,32, - 98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,32, - 84,111,32,119,114,105,116,101,10,32,32,32,32,32,32,32, - 32,98,121,116,101,99,111,100,101,44,32,115,101,116,95,100, - 97,116,97,32,109,117,115,116,32,97,108,115,111,32,98,101, - 32,105,109,112,108,101,109,101,110,116,101,100,46,10,10,32, - 32,32,32,32,32,32,32,78,70,84,114,193,0,0,0,114, - 183,0,0,0,114,169,0,0,0,114,3,0,0,0,114,0, - 0,0,0,114,44,0,0,0,90,5,110,101,118,101,114,90, - 6,97,108,119,97,121,115,218,4,115,105,122,101,122,13,123, - 125,32,109,97,116,99,104,101,115,32,123,125,41,3,114,141, - 0,0,0,114,132,0,0,0,114,134,0,0,0,122,19,99, - 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, - 123,125,41,27,114,203,0,0,0,114,121,0,0,0,114,107, - 0,0,0,114,252,0,0,0,114,76,0,0,0,114,33,0, - 0,0,114,255,0,0,0,114,176,0,0,0,218,10,109,101, - 109,111,114,121,118,105,101,119,114,187,0,0,0,90,21,99, - 104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,95, - 112,121,99,115,114,181,0,0,0,218,17,95,82,65,87,95, - 77,65,71,73,67,95,78,85,77,66,69,82,114,182,0,0, - 0,114,180,0,0,0,114,142,0,0,0,114,174,0,0,0, - 114,159,0,0,0,114,173,0,0,0,114,189,0,0,0,114, - 5,1,0,0,114,15,0,0,0,218,19,100,111,110,116,95, - 119,114,105,116,101,95,98,121,116,101,99,111,100,101,114,195, - 0,0,0,114,194,0,0,0,114,4,0,0,0,114,254,0, - 0,0,41,15,114,143,0,0,0,114,163,0,0,0,114,134, - 0,0,0,114,178,0,0,0,114,198,0,0,0,114,181,0, - 0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,12, - 99,104,101,99,107,95,115,111,117,114,99,101,114,132,0,0, - 0,218,2,115,116,114,41,0,0,0,114,175,0,0,0,114, - 16,0,0,0,90,10,98,121,116,101,115,95,100,97,116,97, - 90,11,99,111,100,101,95,111,98,106,101,99,116,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, - 0,180,3,0,0,115,170,0,0,0,10,7,4,1,4,1, - 4,1,4,1,4,1,2,1,12,1,14,1,8,1,2,2, - 14,1,14,1,4,1,12,2,2,1,14,1,14,1,4,1, - 2,3,2,1,6,254,2,4,12,1,16,1,12,1,4,1, - 12,1,10,1,2,1,2,255,8,2,2,254,10,3,4,1, - 2,1,2,1,4,254,8,4,2,1,4,255,2,128,2,3, - 2,1,2,1,6,1,2,1,2,1,4,251,4,128,18,7, - 4,1,8,2,2,1,4,255,6,2,2,1,2,1,6,254, - 8,3,10,1,12,1,12,1,14,1,6,1,2,255,4,2, - 8,1,10,1,14,1,6,2,6,1,4,255,2,2,16,1, - 4,3,14,254,2,1,8,1,2,254,2,233,2,225,2,250, - 2,251,255,128,122,21,83,111,117,114,99,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,78,41,10,114,150, - 0,0,0,114,149,0,0,0,114,151,0,0,0,114,251,0, - 0,0,114,252,0,0,0,114,254,0,0,0,114,253,0,0, - 0,114,1,1,0,0,114,5,1,0,0,114,241,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,249,0,0,0,121,3,0,0,115,18,0, - 0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,10, - 12,8,255,128,114,249,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, - 0,0,115,92,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,132,0,90,6,101,7,135,0,102, - 1,100,8,100,9,132,8,131,1,90,8,101,7,100,10,100, - 11,132,0,131,1,90,9,100,12,100,13,132,0,90,10,101, - 7,100,14,100,15,132,0,131,1,90,11,135,0,4,0,90, - 12,83,0,41,16,218,10,70,105,108,101,76,111,97,100,101, - 114,122,103,66,97,115,101,32,102,105,108,101,32,108,111,97, - 100,101,114,32,99,108,97,115,115,32,119,104,105,99,104,32, - 105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,108, - 111,97,100,101,114,32,112,114,111,116,111,99,111,108,32,109, - 101,116,104,111,100,115,32,116,104,97,116,10,32,32,32,32, - 114,101,113,117,105,114,101,32,102,105,108,101,32,115,121,115, - 116,101,109,32,117,115,97,103,101,46,99,3,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, - 0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,2, - 124,0,95,1,100,1,83,0,41,2,122,75,67,97,99,104, - 101,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, - 101,32,97,110,100,32,116,104,101,32,112,97,116,104,32,116, - 111,32,116,104,101,32,102,105,108,101,32,102,111,117,110,100, - 32,98,121,32,116,104,101,10,32,32,32,32,32,32,32,32, - 102,105,110,100,101,114,46,78,114,183,0,0,0,41,3,114, - 143,0,0,0,114,163,0,0,0,114,65,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,236,0, - 0,0,14,4,0,0,115,6,0,0,0,6,3,10,1,255, - 128,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, - 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,243, - 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,11, - 124,0,106,1,124,1,106,1,107,2,83,0,114,69,0,0, - 0,169,2,218,9,95,95,99,108,97,115,115,95,95,114,156, - 0,0,0,169,2,114,143,0,0,0,90,5,111,116,104,101, - 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,6,95,95,101,113,95,95,20,4,0,0,243,8,0,0, - 0,12,1,10,1,2,255,255,128,122,17,70,105,108,101,76, - 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,243,20,0,0,0,116,0,124,0,106,1, - 131,1,116,0,124,0,106,2,131,1,65,0,83,0,114,69, - 0,0,0,169,3,218,4,104,97,115,104,114,141,0,0,0, - 114,65,0,0,0,169,1,114,143,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,8,95,95,104, - 97,115,104,95,95,24,4,0,0,243,4,0,0,0,20,1, - 255,128,122,19,70,105,108,101,76,111,97,100,101,114,46,95, - 95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, - 115,16,0,0,0,116,0,116,1,124,0,131,2,160,2,124, - 1,161,1,83,0,41,2,122,100,76,111,97,100,32,97,32, - 109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 218,5,115,117,112,101,114,114,11,1,0,0,114,248,0,0, - 0,114,247,0,0,0,169,1,114,14,1,0,0,114,7,0, - 0,0,114,8,0,0,0,114,248,0,0,0,27,4,0,0, - 115,4,0,0,0,16,10,255,128,122,22,70,105,108,101,76, + 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,103, + 101,116,95,115,111,117,114,99,101,114,130,0,0,0,41,1, + 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0, + 67,0,0,0,115,22,0,0,0,116,0,106,1,116,2,124, + 1,124,2,100,1,100,2,124,3,100,3,141,6,83,0,41, + 5,122,130,82,101,116,117,114,110,32,116,104,101,32,99,111, + 100,101,32,111,98,106,101,99,116,32,99,111,109,112,105,108, + 101,100,32,102,114,111,109,32,115,111,117,114,99,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,101,32,39,100,97, + 116,97,39,32,97,114,103,117,109,101,110,116,32,99,97,110, + 32,98,101,32,97,110,121,32,111,98,106,101,99,116,32,116, + 121,112,101,32,116,104,97,116,32,99,111,109,112,105,108,101, + 40,41,32,115,117,112,112,111,114,116,115,46,10,32,32,32, + 32,32,32,32,32,114,243,0,0,0,84,41,2,218,12,100, + 111,110,116,95,105,110,104,101,114,105,116,114,108,0,0,0, + 78,41,3,114,159,0,0,0,114,242,0,0,0,218,7,99, + 111,109,112,105,108,101,41,4,114,143,0,0,0,114,41,0, + 0,0,114,65,0,0,0,114,2,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,14,115,111,117, + 114,99,101,95,116,111,95,99,111,100,101,173,3,0,0,115, + 6,0,0,0,12,5,4,1,6,255,122,27,83,111,117,114, + 99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95, + 116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,15,0,0,0,9,0,0,0,67,0,0,0, + 115,12,2,0,0,124,0,160,0,124,1,161,1,125,2,100, + 1,125,3,100,1,125,4,100,1,125,5,100,2,125,6,100, + 3,125,7,122,6,116,1,124,2,131,1,125,8,87,0,110, + 11,4,0,116,2,144,1,121,5,1,0,1,0,1,0,100, + 1,125,8,89,0,110,143,122,7,124,0,160,3,124,2,161, + 1,125,9,87,0,110,9,4,0,116,4,144,1,121,4,1, + 0,1,0,1,0,89,0,110,126,116,5,124,9,100,4,25, + 0,131,1,125,3,122,7,124,0,160,6,124,8,161,1,125, + 10,87,0,110,9,4,0,116,4,144,1,121,3,1,0,1, + 0,1,0,89,0,110,103,124,1,124,8,100,5,156,2,125, + 11,122,71,116,7,124,10,124,1,124,11,131,3,125,12,116, + 8,124,10,131,1,100,6,100,1,133,2,25,0,125,13,124, + 12,100,7,64,0,100,8,107,3,125,6,124,6,114,138,124, + 12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,100, + 10,107,3,114,137,124,7,115,119,116,9,106,10,100,11,107, + 2,114,137,124,0,160,6,124,2,161,1,125,4,116,9,160, + 11,116,12,124,4,161,2,125,5,116,13,124,10,124,5,124, + 1,124,11,131,4,1,0,110,10,116,14,124,10,124,3,124, + 9,100,12,25,0,124,1,124,11,131,5,1,0,87,0,110, + 11,4,0,116,15,116,16,102,2,144,1,121,2,1,0,1, + 0,1,0,89,0,110,15,116,17,160,18,100,13,124,8,124, + 2,161,3,1,0,116,19,124,13,124,1,124,8,124,2,100, + 14,141,4,83,0,124,4,100,1,117,0,114,185,124,0,160, + 6,124,2,161,1,125,4,124,0,160,20,124,4,124,2,161, + 2,125,14,116,17,160,18,100,15,124,2,161,2,1,0,116, + 21,106,22,115,255,124,8,100,1,117,1,114,255,124,3,100, + 1,117,1,114,255,124,6,114,226,124,5,100,1,117,0,114, + 219,116,9,160,11,124,4,161,1,125,5,116,23,124,14,124, + 5,124,7,131,3,125,10,110,8,116,24,124,14,124,3,116, + 25,124,4,131,1,131,3,125,10,122,10,124,0,160,26,124, + 2,124,8,124,10,161,3,1,0,87,0,124,14,83,0,4, + 0,116,2,144,1,121,1,1,0,1,0,1,0,89,0,124, + 14,83,0,124,14,83,0,119,0,119,0,119,0,119,0,119, + 0,41,16,122,190,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, + 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, + 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, + 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, + 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, + 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, + 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, + 32,32,32,78,70,84,114,193,0,0,0,114,183,0,0,0, + 114,169,0,0,0,114,3,0,0,0,114,0,0,0,0,114, + 44,0,0,0,90,5,110,101,118,101,114,90,6,97,108,119, + 97,121,115,218,4,115,105,122,101,122,13,123,125,32,109,97, + 116,99,104,101,115,32,123,125,41,3,114,141,0,0,0,114, + 132,0,0,0,114,134,0,0,0,122,19,99,111,100,101,32, + 111,98,106,101,99,116,32,102,114,111,109,32,123,125,41,27, + 114,203,0,0,0,114,121,0,0,0,114,107,0,0,0,114, + 252,0,0,0,114,76,0,0,0,114,33,0,0,0,114,255, + 0,0,0,114,176,0,0,0,218,10,109,101,109,111,114,121, + 118,105,101,119,114,187,0,0,0,90,21,99,104,101,99,107, + 95,104,97,115,104,95,98,97,115,101,100,95,112,121,99,115, + 114,181,0,0,0,218,17,95,82,65,87,95,77,65,71,73, + 67,95,78,85,77,66,69,82,114,182,0,0,0,114,180,0, + 0,0,114,142,0,0,0,114,174,0,0,0,114,159,0,0, + 0,114,173,0,0,0,114,189,0,0,0,114,5,1,0,0, + 114,15,0,0,0,218,19,100,111,110,116,95,119,114,105,116, + 101,95,98,121,116,101,99,111,100,101,114,195,0,0,0,114, + 194,0,0,0,114,4,0,0,0,114,254,0,0,0,41,15, + 114,143,0,0,0,114,163,0,0,0,114,134,0,0,0,114, + 178,0,0,0,114,198,0,0,0,114,181,0,0,0,90,10, + 104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99, + 107,95,115,111,117,114,99,101,114,132,0,0,0,218,2,115, + 116,114,41,0,0,0,114,175,0,0,0,114,16,0,0,0, + 90,10,98,121,116,101,115,95,100,97,116,97,90,11,99,111, + 100,101,95,111,98,106,101,99,116,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,241,0,0,0,181,3,0, + 0,115,168,0,0,0,10,7,4,1,4,1,4,1,4,1, + 4,1,2,1,12,1,14,1,8,1,2,2,14,1,14,1, + 4,1,12,2,2,1,14,1,14,1,4,1,2,3,2,1, + 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, + 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, + 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, + 6,1,2,1,2,1,4,251,4,128,18,7,4,1,8,2, + 2,1,4,255,6,2,2,1,2,1,6,254,8,3,10,1, + 12,1,12,1,14,1,6,1,2,255,4,2,8,1,10,1, + 14,1,6,2,6,1,4,255,2,2,16,1,4,3,14,254, + 2,1,8,1,2,254,2,233,2,225,2,250,2,251,122,21, + 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,78,41,10,114,150,0,0,0,114,149,0, + 0,0,114,151,0,0,0,114,251,0,0,0,114,252,0,0, + 0,114,254,0,0,0,114,253,0,0,0,114,1,1,0,0, + 114,5,1,0,0,114,241,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,249, + 0,0,0,122,3,0,0,115,16,0,0,0,8,0,8,2, + 8,8,8,14,8,10,8,7,14,10,12,8,114,249,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,0,0,0,0,115,92,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, + 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, + 0,90,6,101,7,135,0,102,1,100,8,100,9,132,8,131, + 1,90,8,101,7,100,10,100,11,132,0,131,1,90,9,100, + 12,100,13,132,0,90,10,101,7,100,14,100,15,132,0,131, + 1,90,11,135,0,4,0,90,12,83,0,41,16,218,10,70, + 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, + 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, + 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, + 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, + 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, + 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, + 101,46,99,3,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, + 124,1,124,0,95,0,124,2,124,0,95,1,100,1,83,0, + 41,2,122,75,67,97,99,104,101,32,116,104,101,32,109,111, + 100,117,108,101,32,110,97,109,101,32,97,110,100,32,116,104, + 101,32,112,97,116,104,32,116,111,32,116,104,101,32,102,105, + 108,101,32,102,111,117,110,100,32,98,121,32,116,104,101,10, + 32,32,32,32,32,32,32,32,102,105,110,100,101,114,46,78, + 114,183,0,0,0,41,3,114,143,0,0,0,114,163,0,0, + 0,114,65,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,236,0,0,0,15,4,0,0,115,4, + 0,0,0,6,3,10,1,122,19,70,105,108,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, + 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,2, + 83,0,114,69,0,0,0,169,2,218,9,95,95,99,108,97, + 115,115,95,95,114,156,0,0,0,169,2,114,143,0,0,0, + 90,5,111,116,104,101,114,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,6,95,95,101,113,95,95,21,4, + 0,0,243,6,0,0,0,12,1,10,1,2,255,122,17,70, + 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,243,20,0,0,0,116,0, + 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, + 83,0,114,69,0,0,0,169,3,218,4,104,97,115,104,114, + 141,0,0,0,114,65,0,0,0,169,1,114,143,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 8,95,95,104,97,115,104,95,95,25,4,0,0,243,2,0, + 0,0,20,1,122,19,70,105,108,101,76,111,97,100,101,114, + 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, + 0,0,115,16,0,0,0,116,0,116,1,124,0,131,2,160, + 2,124,1,161,1,83,0,41,2,122,100,76,111,97,100,32, + 97,32,109,111,100,117,108,101,32,102,114,111,109,32,97,32, + 102,105,108,101,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, + 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, + 41,3,218,5,115,117,112,101,114,114,11,1,0,0,114,248, + 0,0,0,114,247,0,0,0,169,1,114,14,1,0,0,114, + 7,0,0,0,114,8,0,0,0,114,248,0,0,0,28,4, + 0,0,115,2,0,0,0,16,10,122,22,70,105,108,101,76, 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,1,0,0,0,67,0,0,0,243,6,0,0,0,124, @@ -1563,130 +1556,129 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, 101,114,46,78,114,71,0,0,0,114,247,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,203,0, - 0,0,39,4,0,0,243,4,0,0,0,6,3,255,128,122, - 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, - 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, - 0,115,128,0,0,0,116,0,124,0,116,1,116,2,102,2, - 131,2,114,36,116,3,160,4,116,5,124,1,131,1,161,1, - 143,12,125,2,124,2,160,6,161,0,87,0,2,0,100,1, - 4,0,4,0,131,3,1,0,83,0,49,0,115,29,119,1, - 1,0,1,0,1,0,89,0,1,0,100,1,83,0,116,3, - 160,7,124,1,100,2,161,2,143,12,125,2,124,2,160,6, - 161,0,87,0,2,0,100,1,4,0,4,0,131,3,1,0, - 83,0,49,0,115,57,119,1,1,0,1,0,1,0,89,0, - 1,0,100,1,83,0,41,3,122,39,82,101,116,117,114,110, - 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, - 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, - 46,78,218,1,114,41,8,114,185,0,0,0,114,249,0,0, - 0,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,114,91,0,0,0,90,9,111,112,101, - 110,95,99,111,100,101,114,109,0,0,0,90,4,114,101,97, - 100,114,92,0,0,0,41,3,114,143,0,0,0,114,65,0, - 0,0,114,94,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,255,0,0,0,44,4,0,0,115, - 16,0,0,0,14,2,16,1,22,1,20,128,14,2,22,1, - 20,128,255,128,122,19,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, - 0,0,115,20,0,0,0,100,1,100,2,108,0,109,1,125, - 2,1,0,124,2,124,0,131,1,83,0,41,3,78,114,0, - 0,0,0,41,1,218,10,70,105,108,101,82,101,97,100,101, - 114,41,2,218,17,105,109,112,111,114,116,108,105,98,46,114, - 101,97,100,101,114,115,114,31,1,0,0,41,3,114,143,0, - 0,0,114,244,0,0,0,114,31,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,19,103,101,116, - 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, - 53,4,0,0,115,6,0,0,0,12,2,8,1,255,128,122, - 30,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, - 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,41, - 13,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, - 114,152,0,0,0,114,236,0,0,0,114,16,1,0,0,114, - 22,1,0,0,114,160,0,0,0,114,248,0,0,0,114,203, - 0,0,0,114,255,0,0,0,114,33,1,0,0,90,13,95, - 95,99,108,97,115,115,99,101,108,108,95,95,114,7,0,0, - 0,114,7,0,0,0,114,25,1,0,0,114,8,0,0,0, - 114,11,1,0,0,9,4,0,0,115,26,0,0,0,8,0, - 4,2,8,3,8,6,8,4,2,3,14,1,2,11,10,1, - 8,4,2,9,18,1,255,128,114,11,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,64,0,0,0,115,46,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,100,6,100,7,156,1,100,8,100, - 9,132,2,90,6,100,10,83,0,41,11,218,16,83,111,117, - 114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,67, - 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,101, - 76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,101, - 32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,22,0,0,0,116,0,124,1,131, - 1,125,2,124,2,106,1,124,2,106,2,100,1,156,2,83, - 0,41,3,122,33,82,101,116,117,114,110,32,116,104,101,32, - 109,101,116,97,100,97,116,97,32,102,111,114,32,116,104,101, - 32,112,97,116,104,46,41,2,114,193,0,0,0,114,6,1, - 0,0,78,41,3,114,75,0,0,0,218,8,115,116,95,109, - 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, - 143,0,0,0,114,65,0,0,0,114,10,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,252,0, - 0,0,63,4,0,0,115,6,0,0,0,8,2,14,1,255, - 128,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, - 0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1, - 131,1,125,4,124,0,106,1,124,2,124,3,124,4,100,1, - 141,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101, - 41,2,114,139,0,0,0,114,253,0,0,0,41,5,114,143, - 0,0,0,114,134,0,0,0,114,132,0,0,0,114,41,0, - 0,0,114,78,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,254,0,0,0,68,4,0,0,115, - 6,0,0,0,8,2,16,1,255,128,122,32,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,114,87,0,0, - 0,114,36,1,0,0,99,3,0,0,0,0,0,0,0,1, - 0,0,0,9,0,0,0,11,0,0,0,67,0,0,0,115, - 254,0,0,0,116,0,124,1,131,1,92,2,125,4,125,5, - 103,0,125,6,124,4,114,31,116,1,124,4,131,1,115,31, - 116,0,124,4,131,1,92,2,125,4,125,7,124,6,160,2, - 124,7,161,1,1,0,124,4,114,31,116,1,124,4,131,1, - 114,14,116,3,124,6,131,1,68,0,93,48,125,7,116,4, - 124,4,124,7,131,2,125,4,122,7,116,5,160,6,124,4, - 161,1,1,0,87,0,113,35,4,0,116,7,121,58,1,0, - 1,0,1,0,89,0,113,35,4,0,116,8,121,126,1,0, - 125,8,1,0,122,15,116,9,160,10,100,1,124,4,124,8, - 161,3,1,0,87,0,89,0,100,2,125,8,126,8,1,0, - 100,2,83,0,100,2,125,8,126,8,119,1,122,15,116,11, - 124,1,124,2,124,3,131,3,1,0,116,9,160,10,100,3, - 124,1,161,2,1,0,87,0,100,2,83,0,4,0,116,8, - 121,125,1,0,125,8,1,0,122,14,116,9,160,10,100,1, - 124,1,124,8,161,3,1,0,87,0,89,0,100,2,125,8, - 126,8,100,2,83,0,100,2,125,8,126,8,119,1,119,0, - 119,0,41,4,122,27,87,114,105,116,101,32,98,121,116,101, - 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, - 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, - 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, - 12,99,114,101,97,116,101,100,32,123,33,114,125,41,12,114, - 74,0,0,0,114,83,0,0,0,114,61,0,0,0,218,8, - 114,101,118,101,114,115,101,100,114,67,0,0,0,114,18,0, - 0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69, - 120,105,115,116,115,69,114,114,111,114,114,76,0,0,0,114, - 159,0,0,0,114,173,0,0,0,114,95,0,0,0,41,9, - 114,143,0,0,0,114,65,0,0,0,114,41,0,0,0,114, - 37,1,0,0,218,6,112,97,114,101,110,116,114,120,0,0, - 0,114,63,0,0,0,114,68,0,0,0,114,0,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 253,0,0,0,73,4,0,0,115,58,0,0,0,12,2,4, - 1,12,2,12,1,10,1,12,254,12,4,10,1,2,1,14, - 1,12,1,4,2,14,1,6,3,4,1,4,255,16,2,8, - 128,2,1,12,1,18,1,14,1,8,2,2,1,18,255,8, - 128,2,254,2,247,255,128,122,25,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, - 116,97,78,41,7,114,150,0,0,0,114,149,0,0,0,114, - 151,0,0,0,114,152,0,0,0,114,252,0,0,0,114,254, - 0,0,0,114,253,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,34,1,0, - 0,59,4,0,0,115,12,0,0,0,8,0,4,2,8,2, - 8,5,18,5,255,128,114,34,1,0,0,99,0,0,0,0, + 0,0,40,4,0,0,243,2,0,0,0,6,3,122,23,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, + 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115, + 128,0,0,0,116,0,124,0,116,1,116,2,102,2,131,2, + 114,36,116,3,160,4,116,5,124,1,131,1,161,1,143,12, + 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, + 4,0,131,3,1,0,83,0,49,0,115,29,119,1,1,0, + 1,0,1,0,89,0,1,0,100,1,83,0,116,3,160,7, + 124,1,100,2,161,2,143,12,125,2,124,2,160,6,161,0, + 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, + 49,0,115,57,119,1,1,0,1,0,1,0,89,0,1,0, + 100,1,83,0,41,3,122,39,82,101,116,117,114,110,32,116, + 104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,116, + 104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,78, + 218,1,114,41,8,114,185,0,0,0,114,249,0,0,0,218, + 19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,114,91,0,0,0,90,9,111,112,101,110,95, + 99,111,100,101,114,109,0,0,0,90,4,114,101,97,100,114, + 92,0,0,0,41,3,114,143,0,0,0,114,65,0,0,0, + 114,94,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,255,0,0,0,45,4,0,0,115,14,0, + 0,0,14,2,16,1,22,1,20,128,14,2,22,1,20,128, + 122,19,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,100,97,116,97,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,20, + 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, + 2,124,0,131,1,83,0,41,3,78,114,0,0,0,0,41, + 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, + 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, + 114,115,114,31,1,0,0,41,3,114,143,0,0,0,114,244, + 0,0,0,114,31,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,19,103,101,116,95,114,101,115, + 111,117,114,99,101,95,114,101,97,100,101,114,54,4,0,0, + 115,4,0,0,0,12,2,8,1,122,30,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,114,101,115,111,117,114, + 99,101,95,114,101,97,100,101,114,41,13,114,150,0,0,0, + 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, + 236,0,0,0,114,16,1,0,0,114,22,1,0,0,114,160, + 0,0,0,114,248,0,0,0,114,203,0,0,0,114,255,0, + 0,0,114,33,1,0,0,90,13,95,95,99,108,97,115,115, + 99,101,108,108,95,95,114,7,0,0,0,114,7,0,0,0, + 114,25,1,0,0,114,8,0,0,0,114,11,1,0,0,10, + 4,0,0,115,24,0,0,0,8,0,4,2,8,3,8,6, + 8,4,2,3,14,1,2,11,10,1,8,4,2,9,18,1, + 114,11,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,46, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,156,1,100,8,100,9,132,2,90,6,100,10,83, + 0,41,11,218,16,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,122,62,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,83,111,117,114,99,101,76,111,97,100,101,114,32,117, + 115,105,110,103,32,116,104,101,32,102,105,108,101,32,115,121, + 115,116,101,109,46,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,22, + 0,0,0,116,0,124,1,131,1,125,2,124,2,106,1,124, + 2,106,2,100,1,156,2,83,0,41,3,122,33,82,101,116, + 117,114,110,32,116,104,101,32,109,101,116,97,100,97,116,97, + 32,102,111,114,32,116,104,101,32,112,97,116,104,46,41,2, + 114,193,0,0,0,114,6,1,0,0,78,41,3,114,75,0, + 0,0,218,8,115,116,95,109,116,105,109,101,90,7,115,116, + 95,115,105,122,101,41,3,114,143,0,0,0,114,65,0,0, + 0,114,10,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,252,0,0,0,64,4,0,0,115,4, + 0,0,0,8,2,14,1,122,27,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115, + 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,67,0,0,0,115,24,0, + 0,0,116,0,124,1,131,1,125,4,124,0,106,1,124,2, + 124,3,124,4,100,1,141,3,83,0,41,2,78,169,1,218, + 5,95,109,111,100,101,41,2,114,139,0,0,0,114,253,0, + 0,0,41,5,114,143,0,0,0,114,134,0,0,0,114,132, + 0,0,0,114,41,0,0,0,114,78,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,254,0,0, + 0,69,4,0,0,115,4,0,0,0,8,2,16,1,122,32, + 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, + 46,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, + 114,87,0,0,0,114,36,1,0,0,99,3,0,0,0,0, + 0,0,0,1,0,0,0,9,0,0,0,11,0,0,0,67, + 0,0,0,115,254,0,0,0,116,0,124,1,131,1,92,2, + 125,4,125,5,103,0,125,6,124,4,114,31,116,1,124,4, + 131,1,115,31,116,0,124,4,131,1,92,2,125,4,125,7, + 124,6,160,2,124,7,161,1,1,0,124,4,114,31,116,1, + 124,4,131,1,114,14,116,3,124,6,131,1,68,0,93,48, + 125,7,116,4,124,4,124,7,131,2,125,4,122,7,116,5, + 160,6,124,4,161,1,1,0,87,0,113,35,4,0,116,7, + 121,58,1,0,1,0,1,0,89,0,113,35,4,0,116,8, + 121,126,1,0,125,8,1,0,122,15,116,9,160,10,100,1, + 124,4,124,8,161,3,1,0,87,0,89,0,100,2,125,8, + 126,8,1,0,100,2,83,0,100,2,125,8,126,8,119,1, + 122,15,116,11,124,1,124,2,124,3,131,3,1,0,116,9, + 160,10,100,3,124,1,161,2,1,0,87,0,100,2,83,0, + 4,0,116,8,121,125,1,0,125,8,1,0,122,14,116,9, + 160,10,100,1,124,1,124,8,161,3,1,0,87,0,89,0, + 100,2,125,8,126,8,100,2,83,0,100,2,125,8,126,8, + 119,1,119,0,119,0,41,4,122,27,87,114,105,116,101,32, + 98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,32, + 102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,116, + 32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,33, + 114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,114, + 125,41,12,114,74,0,0,0,114,83,0,0,0,114,61,0, + 0,0,218,8,114,101,118,101,114,115,101,100,114,67,0,0, + 0,114,18,0,0,0,90,5,109,107,100,105,114,218,15,70, + 105,108,101,69,120,105,115,116,115,69,114,114,111,114,114,76, + 0,0,0,114,159,0,0,0,114,173,0,0,0,114,95,0, + 0,0,41,9,114,143,0,0,0,114,65,0,0,0,114,41, + 0,0,0,114,37,1,0,0,218,6,112,97,114,101,110,116, + 114,120,0,0,0,114,63,0,0,0,114,68,0,0,0,114, + 0,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,253,0,0,0,74,4,0,0,115,56,0,0, + 0,12,2,4,1,12,2,12,1,10,1,12,254,12,4,10, + 1,2,1,14,1,12,1,4,2,14,1,6,3,4,1,4, + 255,16,2,8,128,2,1,12,1,18,1,14,1,8,2,2, + 1,18,255,8,128,2,254,2,247,122,25,83,111,117,114,99, + 101,70,105,108,101,76,111,97,100,101,114,46,115,101,116,95, + 100,97,116,97,78,41,7,114,150,0,0,0,114,149,0,0, + 0,114,151,0,0,0,114,152,0,0,0,114,252,0,0,0, + 114,254,0,0,0,114,253,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,34, + 1,0,0,60,4,0,0,115,10,0,0,0,8,0,4,2, + 8,2,8,5,18,5,114,34,1,0,0,99,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 64,0,0,0,115,32,0,0,0,101,0,90,1,100,0,90, 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, @@ -1707,157 +1699,156 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,7,1,0,0,41,5,114,143,0,0,0,114,163,0, 0,0,114,65,0,0,0,114,41,0,0,0,114,175,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,241,0,0,0,108,4,0,0,115,24,0,0,0,10,1, + 114,241,0,0,0,109,4,0,0,115,22,0,0,0,10,1, 10,1,2,4,2,1,6,254,12,4,2,1,14,1,2,1, - 2,1,6,253,255,128,122,29,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,23, - 0,0,0,41,2,122,39,82,101,116,117,114,110,32,78,111, - 110,101,32,97,115,32,116,104,101,114,101,32,105,115,32,110, - 111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114, - 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,1,1,0,0,124,4,0, - 0,114,24,0,0,0,122,31,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,115,111,117,114,99,101,78,41,6,114,150,0,0,0,114, - 149,0,0,0,114,151,0,0,0,114,152,0,0,0,114,241, - 0,0,0,114,1,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,41,1,0, - 0,104,4,0,0,115,10,0,0,0,8,0,4,2,8,2, - 12,16,255,128,114,41,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,92,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, - 0,90,7,100,10,100,11,132,0,90,8,100,12,100,13,132, - 0,90,9,100,14,100,15,132,0,90,10,100,16,100,17,132, - 0,90,11,101,12,100,18,100,19,132,0,131,1,90,13,100, - 20,83,0,41,21,114,30,1,0,0,122,93,76,111,97,100, - 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, - 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, - 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, - 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, - 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, - 0,0,115,16,0,0,0,124,1,124,0,95,0,124,2,124, - 0,95,1,100,0,83,0,114,69,0,0,0,114,183,0,0, - 0,41,3,114,143,0,0,0,114,141,0,0,0,114,65,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,236,0,0,0,137,4,0,0,115,6,0,0,0,6, - 1,10,1,255,128,122,28,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, - 116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,114,12,1,0, - 0,114,69,0,0,0,114,13,1,0,0,114,15,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 16,1,0,0,141,4,0,0,114,17,1,0,0,122,26,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,95,95,101,113,95,95,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,114,18,1,0,0,114,69,0,0,0,114,19,1,0, - 0,114,21,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,22,1,0,0,145,4,0,0,114,23, - 1,0,0,122,28,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, - 95,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, - 0,160,1,116,2,106,3,124,1,161,2,125,2,116,0,160, - 4,100,1,124,1,106,5,124,0,106,6,161,3,1,0,124, - 2,83,0,41,3,122,38,67,114,101,97,116,101,32,97,110, - 32,117,110,105,116,105,97,108,105,122,101,100,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,122,38,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 123,33,114,125,32,108,111,97,100,101,100,32,102,114,111,109, - 32,123,33,114,125,78,41,7,114,159,0,0,0,114,242,0, - 0,0,114,187,0,0,0,90,14,99,114,101,97,116,101,95, - 100,121,110,97,109,105,99,114,173,0,0,0,114,141,0,0, - 0,114,65,0,0,0,41,3,114,143,0,0,0,114,210,0, - 0,0,114,244,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,239,0,0,0,148,4,0,0,115, - 16,0,0,0,4,2,6,1,4,255,6,2,8,1,4,255, - 4,2,255,128,122,33,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,5,0,0,0,67,0,0,0, - 115,36,0,0,0,116,0,160,1,116,2,106,3,124,1,161, - 2,1,0,116,0,160,4,100,1,124,0,106,5,124,0,106, - 6,161,3,1,0,100,2,83,0,41,3,122,30,73,110,105, - 116,105,97,108,105,122,101,32,97,110,32,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,122,40,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, - 114,125,32,101,120,101,99,117,116,101,100,32,102,114,111,109, - 32,123,33,114,125,78,41,7,114,159,0,0,0,114,242,0, - 0,0,114,187,0,0,0,90,12,101,120,101,99,95,100,121, - 110,97,109,105,99,114,173,0,0,0,114,141,0,0,0,114, - 65,0,0,0,169,2,114,143,0,0,0,114,244,0,0,0, + 2,1,6,253,122,29,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, + 0,41,2,122,39,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32, + 115,111,117,114,99,101,32,99,111,100,101,46,78,114,7,0, + 0,0,114,247,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,1,1,0,0,125,4,0,0,114, + 24,0,0,0,122,31,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,78,41,6,114,150,0,0,0,114,149,0, + 0,0,114,151,0,0,0,114,152,0,0,0,114,241,0,0, + 0,114,1,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,41,1,0,0,105, + 4,0,0,115,8,0,0,0,8,0,4,2,8,2,12,16, + 114,41,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,92, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, + 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,101, + 12,100,18,100,19,132,0,131,1,90,13,100,20,83,0,41, + 21,114,30,1,0,0,122,93,76,111,97,100,101,114,32,102, + 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, + 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, + 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, + 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, + 10,32,32,32,32,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, + 0,83,0,114,69,0,0,0,114,183,0,0,0,41,3,114, + 143,0,0,0,114,141,0,0,0,114,65,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,236,0, + 0,0,138,4,0,0,115,4,0,0,0,6,1,10,1,122, + 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, + 0,0,67,0,0,0,114,12,1,0,0,114,69,0,0,0, + 114,13,1,0,0,114,15,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,16,1,0,0,142,4, + 0,0,114,17,1,0,0,122,26,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,101, + 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,114,18,1,0, + 0,114,69,0,0,0,114,19,1,0,0,114,21,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 245,0,0,0,156,4,0,0,115,10,0,0,0,14,2,6, - 1,8,1,8,255,255,128,122,31,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,101, - 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, - 0,115,36,0,0,0,116,0,124,0,106,1,131,1,100,1, - 25,0,137,0,116,2,135,0,102,1,100,2,100,3,132,8, - 116,3,68,0,131,1,131,1,83,0,41,5,122,49,82,101, - 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, - 3,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,51,0,0,0,115,28,0, - 0,0,129,0,124,0,93,9,125,1,136,0,100,0,124,1, - 23,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2, - 114,236,0,0,0,78,114,7,0,0,0,169,2,114,5,0, - 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105, - 108,101,95,110,97,109,101,114,7,0,0,0,114,8,0,0, - 0,114,9,0,0,0,165,4,0,0,115,8,0,0,0,6, - 128,2,1,20,255,255,128,122,49,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,62, - 46,60,103,101,110,101,120,112,114,62,78,41,4,114,74,0, - 0,0,114,65,0,0,0,218,3,97,110,121,114,232,0,0, - 0,114,247,0,0,0,114,7,0,0,0,114,45,1,0,0, - 114,8,0,0,0,114,206,0,0,0,162,4,0,0,115,10, - 0,0,0,14,2,12,1,2,1,8,255,255,128,122,30,69, + 22,1,0,0,146,4,0,0,114,23,1,0,0,122,28,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,114,23,0,0,0,41,2,122,63,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,97,110, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32, - 97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114, - 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,241,0,0,0,168,4,0, - 0,114,24,0,0,0,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, - 0,0,41,2,122,53,82,101,116,117,114,110,32,78,111,110, - 101,32,97,115,32,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,115, - 111,117,114,99,101,32,99,111,100,101,46,78,114,7,0,0, - 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,1,1,0,0,172,4,0,0,114,24, - 0,0,0,122,30,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,26,1,0, - 0,114,27,1,0,0,114,71,0,0,0,114,247,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 203,0,0,0,176,4,0,0,114,28,1,0,0,122,32,69, + 101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,0, + 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, + 3,124,1,161,2,125,2,116,0,160,4,100,1,124,1,106, + 5,124,0,106,6,161,3,1,0,124,2,83,0,41,3,122, + 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, + 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, + 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,78, + 41,7,114,159,0,0,0,114,242,0,0,0,114,187,0,0, + 0,90,14,99,114,101,97,116,101,95,100,121,110,97,109,105, + 99,114,173,0,0,0,114,141,0,0,0,114,65,0,0,0, + 41,3,114,143,0,0,0,114,210,0,0,0,114,244,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,239,0,0,0,149,4,0,0,115,14,0,0,0,4,2, + 6,1,4,255,6,2,8,1,4,255,4,2,122,33,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 5,0,0,0,67,0,0,0,115,36,0,0,0,116,0,160, + 1,116,2,106,3,124,1,161,2,1,0,116,0,160,4,100, + 1,124,0,106,5,124,0,106,6,161,3,1,0,100,2,83, + 0,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, + 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, + 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, + 114,159,0,0,0,114,242,0,0,0,114,187,0,0,0,90, + 12,101,120,101,99,95,100,121,110,97,109,105,99,114,173,0, + 0,0,114,141,0,0,0,114,65,0,0,0,169,2,114,143, + 0,0,0,114,244,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,245,0,0,0,157,4,0,0, + 115,8,0,0,0,14,2,6,1,8,1,8,255,122,31,69, 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,78, - 41,14,114,150,0,0,0,114,149,0,0,0,114,151,0,0, - 0,114,152,0,0,0,114,236,0,0,0,114,16,1,0,0, - 114,22,1,0,0,114,239,0,0,0,114,245,0,0,0,114, - 206,0,0,0,114,241,0,0,0,114,1,1,0,0,114,160, - 0,0,0,114,203,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,30,1,0, - 0,129,4,0,0,115,26,0,0,0,8,0,4,2,8,6, - 8,4,8,4,8,3,8,8,8,6,8,6,8,4,2,4, - 14,1,255,128,114,30,1,0,0,99,0,0,0,0,0,0, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,3,0,0,0,115,36,0,0,0,116,0,124,0, + 106,1,131,1,100,1,25,0,137,0,116,2,135,0,102,1, + 100,2,100,3,132,8,116,3,68,0,131,1,131,1,83,0, + 41,5,122,49,82,101,116,117,114,110,32,84,114,117,101,32, + 105,102,32,116,104,101,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, + 107,97,103,101,46,114,3,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, + 0,0,0,115,28,0,0,0,129,0,124,0,93,9,125,1, + 136,0,100,0,124,1,23,0,107,2,86,0,1,0,113,2, + 100,1,83,0,41,2,114,236,0,0,0,78,114,7,0,0, + 0,169,2,114,5,0,0,0,218,6,115,117,102,102,105,120, + 169,1,90,9,102,105,108,101,95,110,97,109,101,114,7,0, + 0,0,114,8,0,0,0,114,9,0,0,0,166,4,0,0, + 115,6,0,0,0,6,128,2,1,20,255,122,49,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,105,115,95,112,97,99,107,97,103,101,46,60,108,111,99, + 97,108,115,62,46,60,103,101,110,101,120,112,114,62,78,41, + 4,114,74,0,0,0,114,65,0,0,0,218,3,97,110,121, + 114,232,0,0,0,114,247,0,0,0,114,7,0,0,0,114, + 45,1,0,0,114,8,0,0,0,114,206,0,0,0,163,4, + 0,0,115,8,0,0,0,14,2,12,1,2,1,8,255,122, + 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,114,23,0,0,0,41,2,122, + 63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116, + 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, + 78,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,169, + 4,0,0,114,24,0,0,0,122,28,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, + 23,0,0,0,41,2,122,53,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,115,32,104,97,118,101,32,110,111, + 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,7, + 0,0,0,114,247,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,1,1,0,0,173,4,0,0, + 114,24,0,0,0,122,30,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,26, + 1,0,0,114,27,1,0,0,114,71,0,0,0,114,247,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,203,0,0,0,177,4,0,0,114,28,1,0,0,122, + 32,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109, + 101,78,41,14,114,150,0,0,0,114,149,0,0,0,114,151, + 0,0,0,114,152,0,0,0,114,236,0,0,0,114,16,1, + 0,0,114,22,1,0,0,114,239,0,0,0,114,245,0,0, + 0,114,206,0,0,0,114,241,0,0,0,114,1,1,0,0, + 114,160,0,0,0,114,203,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,30, + 1,0,0,130,4,0,0,115,24,0,0,0,8,0,4,2, + 8,6,8,4,8,4,8,3,8,8,8,6,8,6,8,4, + 2,4,14,1,114,30,1,0,0,99,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, 0,0,115,104,0,0,0,101,0,90,1,100,0,90,2,100, 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, @@ -1897,124 +1888,123 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 112,97,116,104,95,102,105,110,100,101,114,169,4,114,143,0, 0,0,114,141,0,0,0,114,65,0,0,0,90,11,112,97, 116,104,95,102,105,110,100,101,114,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,236,0,0,0,189,4,0, - 0,115,10,0,0,0,6,1,6,1,14,1,10,1,255,128, - 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,38,0,0,0,124,0,106,0,160,1,100,1,161, - 1,92,3,125,1,125,2,125,3,124,2,100,2,107,2,114, - 15,100,3,83,0,124,1,100,4,102,2,83,0,41,6,122, - 62,82,101,116,117,114,110,115,32,97,32,116,117,112,108,101, - 32,111,102,32,40,112,97,114,101,110,116,45,109,111,100,117, - 108,101,45,110,97,109,101,44,32,112,97,114,101,110,116,45, - 112,97,116,104,45,97,116,116,114,45,110,97,109,101,41,114, - 97,0,0,0,114,10,0,0,0,41,2,114,15,0,0,0, - 114,65,0,0,0,90,8,95,95,112,97,116,104,95,95,78, - 41,2,114,48,1,0,0,114,104,0,0,0,41,4,114,143, - 0,0,0,114,40,1,0,0,218,3,100,111,116,90,2,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,112, - 97,116,104,95,110,97,109,101,115,195,4,0,0,115,10,0, - 0,0,18,2,8,1,4,2,8,3,255,128,122,38,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, - 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, - 97,109,101,115,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,67,0,0,0,115,28,0, - 0,0,124,0,160,0,161,0,92,2,125,1,125,2,116,1, - 116,2,106,3,124,1,25,0,124,2,131,2,83,0,114,69, - 0,0,0,41,4,114,55,1,0,0,114,155,0,0,0,114, - 15,0,0,0,218,7,109,111,100,117,108,101,115,41,3,114, - 143,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, - 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, - 116,116,114,95,110,97,109,101,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,50,1,0,0,205,4,0,0, - 115,6,0,0,0,12,1,16,1,255,128,122,31,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, - 95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0, - 0,67,0,0,0,115,80,0,0,0,116,0,124,0,160,1, - 161,0,131,1,125,1,124,1,124,0,106,2,107,3,114,37, - 124,0,160,3,124,0,106,4,124,1,161,2,125,2,124,2, - 100,0,117,1,114,34,124,2,106,5,100,0,117,0,114,34, - 124,2,106,6,114,34,124,2,106,6,124,0,95,7,124,1, - 124,0,95,2,124,0,106,7,83,0,114,69,0,0,0,41, - 8,114,136,0,0,0,114,50,1,0,0,114,51,1,0,0, - 114,52,1,0,0,114,48,1,0,0,114,164,0,0,0,114, - 202,0,0,0,114,49,1,0,0,41,3,114,143,0,0,0, - 90,11,112,97,114,101,110,116,95,112,97,116,104,114,210,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,209, - 4,0,0,115,18,0,0,0,12,2,10,1,14,1,18,3, - 6,1,8,1,6,1,6,1,255,128,122,27,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, - 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 243,12,0,0,0,116,0,124,0,160,1,161,0,131,1,83, - 0,114,69,0,0,0,41,2,218,4,105,116,101,114,114,57, - 1,0,0,114,21,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,8,95,95,105,116,101,114,95, - 95,222,4,0,0,243,4,0,0,0,12,1,255,128,122,23, + 0,0,0,114,8,0,0,0,114,236,0,0,0,190,4,0, + 0,115,8,0,0,0,6,1,6,1,14,1,10,1,122,23, 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,105,116,101,114,95,95,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,12,0,0,0,124,0,160,0,161,0,124,1,25,0,83, - 0,114,69,0,0,0,169,1,114,57,1,0,0,41,2,114, - 143,0,0,0,218,5,105,110,100,101,120,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,11,95,95,103,101, - 116,105,116,101,109,95,95,225,4,0,0,114,61,1,0,0, - 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,14,0,0,0,124,2,124,0,106,0, - 124,1,60,0,100,0,83,0,114,69,0,0,0,41,1,114, - 49,1,0,0,41,3,114,143,0,0,0,114,63,1,0,0, - 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, - 95,228,4,0,0,115,4,0,0,0,14,1,255,128,122,26, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, - 0,0,0,114,58,1,0,0,114,69,0,0,0,41,2,114, - 4,0,0,0,114,57,1,0,0,114,21,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,7,95, - 95,108,101,110,95,95,231,4,0,0,114,61,1,0,0,122, - 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 243,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, - 0,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,40,123,33,114,125,41,41,2,114,89,0,0, - 0,114,49,1,0,0,114,21,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,8,95,95,114,101, - 112,114,95,95,234,4,0,0,114,61,1,0,0,122,23,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, - 114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 12,0,0,0,124,1,124,0,160,0,161,0,118,0,83,0, - 114,69,0,0,0,114,62,1,0,0,169,2,114,143,0,0, - 0,218,4,105,116,101,109,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,105, - 110,115,95,95,237,4,0,0,114,61,1,0,0,122,27,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, - 99,111,110,116,97,105,110,115,95,95,99,2,0,0,0,0, + 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, + 115,38,0,0,0,124,0,106,0,160,1,100,1,161,1,92, + 3,125,1,125,2,125,3,124,2,100,2,107,2,114,15,100, + 3,83,0,124,1,100,4,102,2,83,0,41,6,122,62,82, + 101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,111, + 102,32,40,112,97,114,101,110,116,45,109,111,100,117,108,101, + 45,110,97,109,101,44,32,112,97,114,101,110,116,45,112,97, + 116,104,45,97,116,116,114,45,110,97,109,101,41,114,97,0, + 0,0,114,10,0,0,0,41,2,114,15,0,0,0,114,65, + 0,0,0,90,8,95,95,112,97,116,104,95,95,78,41,2, + 114,48,1,0,0,114,104,0,0,0,41,4,114,143,0,0, + 0,114,40,1,0,0,218,3,100,111,116,90,2,109,101,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,23, + 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, + 104,95,110,97,109,101,115,196,4,0,0,115,8,0,0,0, + 18,2,8,1,4,2,8,3,122,38,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, + 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,28,0,0,0,124,0, + 160,0,161,0,92,2,125,1,125,2,116,1,116,2,106,3, + 124,1,25,0,124,2,131,2,83,0,114,69,0,0,0,41, + 4,114,55,1,0,0,114,155,0,0,0,114,15,0,0,0, + 218,7,109,111,100,117,108,101,115,41,3,114,143,0,0,0, + 90,18,112,97,114,101,110,116,95,109,111,100,117,108,101,95, + 110,97,109,101,90,14,112,97,116,104,95,97,116,116,114,95, + 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,50,1,0,0,206,4,0,0,115,4,0,0, + 0,12,1,16,1,122,31,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,103,101,116,95,112,97,114,101,110, + 116,95,112,97,116,104,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, + 80,0,0,0,116,0,124,0,160,1,161,0,131,1,125,1, + 124,1,124,0,106,2,107,3,114,37,124,0,160,3,124,0, + 106,4,124,1,161,2,125,2,124,2,100,0,117,1,114,34, + 124,2,106,5,100,0,117,0,114,34,124,2,106,6,114,34, + 124,2,106,6,124,0,95,7,124,1,124,0,95,2,124,0, + 106,7,83,0,114,69,0,0,0,41,8,114,136,0,0,0, + 114,50,1,0,0,114,51,1,0,0,114,52,1,0,0,114, + 48,1,0,0,114,164,0,0,0,114,202,0,0,0,114,49, + 1,0,0,41,3,114,143,0,0,0,90,11,112,97,114,101, + 110,116,95,112,97,116,104,114,210,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,12,95,114,101, + 99,97,108,99,117,108,97,116,101,210,4,0,0,115,16,0, + 0,0,12,2,10,1,14,1,18,3,6,1,8,1,6,1, + 6,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,243,12,0,0,0,116,0,124, + 0,160,1,161,0,131,1,83,0,114,69,0,0,0,41,2, + 218,4,105,116,101,114,114,57,1,0,0,114,21,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 8,95,95,105,116,101,114,95,95,223,4,0,0,243,2,0, + 0,0,12,1,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,105,116,101,114,95,95,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, + 0,0,67,0,0,0,115,12,0,0,0,124,0,160,0,161, + 0,124,1,25,0,83,0,114,69,0,0,0,169,1,114,57, + 1,0,0,41,2,114,143,0,0,0,218,5,105,110,100,101, + 120,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,11,95,95,103,101,116,105,116,101,109,95,95,226,4,0, + 0,114,61,1,0,0,122,26,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,103,101,116,105,116,101,109, + 95,95,99,3,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,14,0,0,0, + 124,2,124,0,106,0,124,1,60,0,100,0,83,0,114,69, + 0,0,0,41,1,114,49,1,0,0,41,3,114,143,0,0, + 0,114,63,1,0,0,114,65,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,11,95,95,115,101, + 116,105,116,101,109,95,95,229,4,0,0,115,2,0,0,0, + 14,1,122,26,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,115,101,116,105,116,101,109,95,95,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,114,58,1,0,0,114,69,0,0, + 0,41,2,114,4,0,0,0,114,57,1,0,0,114,21,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,7,95,95,108,101,110,95,95,232,4,0,0,114,61, + 1,0,0,122,22,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,108,101,110,95,95,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,243,12,0,0,0,100,1,160,0,124,0,106, + 1,161,1,83,0,41,2,78,122,20,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,40,123,33,114,125,41,41,2, + 114,89,0,0,0,114,49,1,0,0,114,21,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,8, + 95,95,114,101,112,114,95,95,235,4,0,0,114,61,1,0, + 0,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,16,0,0,0,124,0,106,0,160,1,124,1, - 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, - 49,1,0,0,114,61,0,0,0,114,69,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,61,0, - 0,0,240,4,0,0,243,4,0,0,0,16,1,255,128,122, - 21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 97,112,112,101,110,100,78,41,15,114,150,0,0,0,114,149, - 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, - 0,0,114,55,1,0,0,114,50,1,0,0,114,57,1,0, - 0,114,60,1,0,0,114,64,1,0,0,114,65,1,0,0, - 114,66,1,0,0,114,68,1,0,0,114,71,1,0,0,114, - 61,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,47,1,0,0,182,4,0, - 0,115,28,0,0,0,8,0,4,1,8,6,8,6,8,10, - 8,4,8,13,8,3,8,3,8,3,8,3,8,3,12,3, - 255,128,114,47,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,115,12,0,0,0,124,1,124,0,160,0,161,0, + 118,0,83,0,114,69,0,0,0,114,62,1,0,0,169,2, + 114,143,0,0,0,218,4,105,116,101,109,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,12,95,95,99,111, + 110,116,97,105,110,115,95,95,238,4,0,0,114,61,1,0, + 0,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0, + 160,1,124,1,161,1,1,0,100,0,83,0,114,69,0,0, + 0,41,2,114,49,1,0,0,114,61,0,0,0,114,69,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,61,0,0,0,241,4,0,0,243,2,0,0,0,16, + 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,97,112,112,101,110,100,78,41,15,114,150,0,0,0, + 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, + 236,0,0,0,114,55,1,0,0,114,50,1,0,0,114,57, + 1,0,0,114,60,1,0,0,114,64,1,0,0,114,65,1, + 0,0,114,66,1,0,0,114,68,1,0,0,114,71,1,0, + 0,114,61,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,47,1,0,0,183, + 4,0,0,115,26,0,0,0,8,0,4,1,8,6,8,6, + 8,10,8,4,8,13,8,3,8,3,8,3,8,3,8,3, + 12,3,114,47,1,0,0,99,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, 115,88,0,0,0,101,0,90,1,100,0,90,2,100,1,100, 2,132,0,90,3,101,4,100,3,100,4,132,0,131,1,90, @@ -2028,165 +2018,164 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,124,1,124,2,124,3,131,3,124,0,95,1,100,0,83, 0,114,69,0,0,0,41,2,114,47,1,0,0,114,49,1, 0,0,114,53,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,236,0,0,0,246,4,0,0,115, - 4,0,0,0,18,1,255,128,122,25,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,4,0,0,0,67,0,0,0,115,24,0,0, - 0,116,0,160,1,100,1,116,2,161,2,1,0,100,2,160, - 3,124,0,106,4,161,1,83,0,41,4,122,115,82,101,116, - 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, - 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, - 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,82,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,109,111,100,117,108,101,95,114,101,112,114,40,41, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, - 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, - 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, - 51,46,49,50,122,25,60,109,111,100,117,108,101,32,123,33, - 114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,78, - 41,5,114,99,0,0,0,114,100,0,0,0,114,101,0,0, - 0,114,89,0,0,0,114,150,0,0,0,41,1,114,244,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,11,109,111,100,117,108,101,95,114,101,112,114,249,4, - 0,0,115,10,0,0,0,6,7,2,1,4,255,12,2,255, - 128,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,23,0,0,0,41,2,78, - 84,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,206,0,0,0,4, - 5,0,0,243,4,0,0,0,4,1,255,128,122,27,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,114,23,0,0,0,41,2,78,114,10,0,0,0,114, - 7,0,0,0,114,247,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,1,1,0,0,7,5,0, - 0,114,75,1,0,0,122,27,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,6,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,100,1,100,2,100,3,100,4,100,5,141,4,83, - 0,41,6,78,114,10,0,0,0,122,8,60,115,116,114,105, - 110,103,62,114,243,0,0,0,84,41,1,114,3,1,0,0, - 41,1,114,4,1,0,0,114,247,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,241,0,0,0, - 10,5,0,0,114,72,1,0,0,122,25,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,114,23,0, - 0,0,114,237,0,0,0,114,7,0,0,0,114,238,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,239,0,0,0,13,5,0,0,114,240,0,0,0,122,30, + 0,114,8,0,0,0,114,236,0,0,0,247,4,0,0,115, + 2,0,0,0,18,1,122,25,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, + 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,67,0,0,0,115,24,0,0,0,116, + 0,160,1,100,1,116,2,161,2,1,0,100,2,160,3,124, + 0,106,4,161,1,83,0,41,4,122,115,82,101,116,117,114, + 110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105, + 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32, + 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115, + 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,82, 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, + 46,109,111,100,117,108,101,95,114,101,112,114,40,41,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, + 49,50,122,25,60,109,111,100,117,108,101,32,123,33,114,125, + 32,40,110,97,109,101,115,112,97,99,101,41,62,78,41,5, + 114,99,0,0,0,114,100,0,0,0,114,101,0,0,0,114, + 89,0,0,0,114,150,0,0,0,41,1,114,244,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 11,109,111,100,117,108,101,95,114,101,112,114,250,4,0,0, + 115,8,0,0,0,6,7,2,1,4,255,12,2,122,28,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,114,23,0,0,0,41,2,78,84,114,7,0, + 0,0,114,247,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,206,0,0,0,5,5,0,0,243, + 2,0,0,0,4,1,122,27,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, + 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, + 0,41,2,78,114,10,0,0,0,114,7,0,0,0,114,247, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,1,1,0,0,8,5,0,0,114,75,1,0,0, + 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, + 0,0,67,0,0,0,115,16,0,0,0,116,0,100,1,100, + 2,100,3,100,4,100,5,141,4,83,0,41,6,78,114,10, + 0,0,0,122,8,60,115,116,114,105,110,103,62,114,243,0, + 0,0,84,41,1,114,3,1,0,0,41,1,114,4,1,0, + 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,241,0,0,0,11,5,0,0,114,72, + 1,0,0,122,25,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,0, - 114,69,0,0,0,114,7,0,0,0,114,42,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,245, - 0,0,0,16,5,0,0,114,75,1,0,0,122,28,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, - 0,0,0,115,26,0,0,0,116,0,160,1,100,1,124,0, - 106,2,161,2,1,0,116,0,160,3,124,0,124,1,161,2, - 83,0,41,3,122,98,76,111,97,100,32,97,32,110,97,109, - 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, - 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, - 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, - 78,41,4,114,159,0,0,0,114,173,0,0,0,114,49,1, - 0,0,114,246,0,0,0,114,247,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,248,0,0,0, - 19,5,0,0,115,10,0,0,0,6,7,4,1,4,255,12, - 3,255,128,122,28,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,100, - 1,100,2,108,0,109,1,125,2,1,0,124,2,124,0,106, - 2,131,1,83,0,41,3,78,114,0,0,0,0,41,1,218, - 15,78,97,109,101,115,112,97,99,101,82,101,97,100,101,114, - 41,3,114,32,1,0,0,114,76,1,0,0,114,49,1,0, - 0,41,3,114,143,0,0,0,114,244,0,0,0,114,76,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,33,1,0,0,31,5,0,0,115,6,0,0,0,12, - 1,10,1,255,128,122,36,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, - 117,114,99,101,95,114,101,97,100,101,114,78,41,13,114,150, - 0,0,0,114,149,0,0,0,114,151,0,0,0,114,236,0, - 0,0,114,233,0,0,0,114,74,1,0,0,114,206,0,0, - 0,114,1,1,0,0,114,241,0,0,0,114,239,0,0,0, - 114,245,0,0,0,114,248,0,0,0,114,33,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,73,1,0,0,245,4,0,0,115,24,0,0, - 0,8,0,8,1,2,3,10,1,8,10,8,3,8,3,8, - 3,8,3,8,3,12,12,255,128,114,73,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,64,0,0,0,115,118,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, - 131,1,90,5,101,4,100,4,100,5,132,0,131,1,90,6, - 101,7,100,6,100,7,132,0,131,1,90,8,101,7,100,8, - 100,9,132,0,131,1,90,9,101,7,100,19,100,11,100,12, - 132,1,131,1,90,10,101,7,100,20,100,13,100,14,132,1, - 131,1,90,11,101,7,100,19,100,15,100,16,132,1,131,1, - 90,12,101,4,100,17,100,18,132,0,131,1,90,13,100,10, - 83,0,41,21,218,10,80,97,116,104,70,105,110,100,101,114, - 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, - 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, - 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, - 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,4,0,0,0,67,0,0,0,115,64,0,0,0,116,0, - 116,1,106,2,160,3,161,0,131,1,68,0,93,22,92,2, - 125,0,125,1,124,1,100,1,117,0,114,20,116,1,106,2, - 124,0,61,0,113,7,116,4,124,1,100,2,131,2,114,29, - 124,1,160,5,161,0,1,0,113,7,100,1,83,0,41,3, - 122,125,67,97,108,108,32,116,104,101,32,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,40,41,32,109, - 101,116,104,111,100,32,111,110,32,97,108,108,32,112,97,116, - 104,32,101,110,116,114,121,32,102,105,110,100,101,114,115,10, - 32,32,32,32,32,32,32,32,115,116,111,114,101,100,32,105, - 110,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,115,32,40,119,104,101,114, - 101,32,105,109,112,108,101,109,101,110,116,101,100,41,46,78, - 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, - 104,101,115,41,6,218,4,108,105,115,116,114,15,0,0,0, - 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,218,5,105,116,101,109,115,114,153,0,0, - 0,114,78,1,0,0,41,2,114,141,0,0,0,218,6,102, - 105,110,100,101,114,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,78,1,0,0,42,5,0,0,115,16,0, - 0,0,22,4,8,1,10,1,10,1,8,1,2,128,4,252, - 255,128,122,28,80,97,116,104,70,105,110,100,101,114,46,105, + 0,0,0,67,0,0,0,114,23,0,0,0,114,237,0,0, + 0,114,7,0,0,0,114,238,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,239,0,0,0,14, + 5,0,0,114,240,0,0,0,122,30,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,0,83,0,114,69,0,0,0,114, + 7,0,0,0,114,42,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,245,0,0,0,17,5,0, + 0,114,75,1,0,0,122,28,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,26,0, + 0,0,116,0,160,1,100,1,124,0,106,2,161,2,1,0, + 116,0,160,3,124,0,124,1,161,2,83,0,41,3,122,98, + 76,111,97,100,32,97,32,110,97,109,101,115,112,97,99,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,38,110,97,109,101,115,112,97,99,101,32,109,111, + 100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104, + 32,112,97,116,104,32,123,33,114,125,78,41,4,114,159,0, + 0,0,114,173,0,0,0,114,49,1,0,0,114,246,0,0, + 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,248,0,0,0,20,5,0,0,115,8, + 0,0,0,6,7,4,1,4,255,12,3,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,108,111, + 97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, + 0,0,115,22,0,0,0,100,1,100,2,108,0,109,1,125, + 2,1,0,124,2,124,0,106,2,131,1,83,0,41,3,78, + 114,0,0,0,0,41,1,218,15,78,97,109,101,115,112,97, + 99,101,82,101,97,100,101,114,41,3,114,32,1,0,0,114, + 76,1,0,0,114,49,1,0,0,41,3,114,143,0,0,0, + 114,244,0,0,0,114,76,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,33,1,0,0,32,5, + 0,0,115,4,0,0,0,12,1,10,1,122,36,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, + 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, + 114,78,41,13,114,150,0,0,0,114,149,0,0,0,114,151, + 0,0,0,114,236,0,0,0,114,233,0,0,0,114,74,1, + 0,0,114,206,0,0,0,114,1,1,0,0,114,241,0,0, + 0,114,239,0,0,0,114,245,0,0,0,114,248,0,0,0, + 114,33,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,73,1,0,0,246,4, + 0,0,115,22,0,0,0,8,0,8,1,2,3,10,1,8, + 10,8,3,8,3,8,3,8,3,8,3,12,12,114,73,1, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,64,0,0,0,115,118,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,101,4,100,2, + 100,3,132,0,131,1,90,5,101,4,100,4,100,5,132,0, + 131,1,90,6,101,7,100,6,100,7,132,0,131,1,90,8, + 101,7,100,8,100,9,132,0,131,1,90,9,101,7,100,19, + 100,11,100,12,132,1,131,1,90,10,101,7,100,20,100,13, + 100,14,132,1,131,1,90,11,101,7,100,19,100,15,100,16, + 132,1,131,1,90,12,101,4,100,17,100,18,132,0,131,1, + 90,13,100,10,83,0,41,21,218,10,80,97,116,104,70,105, + 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, + 102,105,110,100,101,114,32,102,111,114,32,115,121,115,46,112, + 97,116,104,32,97,110,100,32,112,97,99,107,97,103,101,32, + 95,95,112,97,116,104,95,95,32,97,116,116,114,105,98,117, + 116,101,115,46,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,64,0, + 0,0,116,0,116,1,106,2,160,3,161,0,131,1,68,0, + 93,22,92,2,125,0,125,1,124,1,100,1,117,0,114,20, + 116,1,106,2,124,0,61,0,113,7,116,4,124,1,100,2, + 131,2,114,29,124,1,160,5,161,0,1,0,113,7,100,1, + 83,0,41,3,122,125,67,97,108,108,32,116,104,101,32,105, 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,9,0,0,0,67,0,0,0,115,76,0,0,0,116,0, - 106,1,100,1,117,1,114,14,116,0,106,1,115,14,116,2, - 160,3,100,2,116,4,161,2,1,0,116,0,106,1,68,0, - 93,17,125,1,122,7,124,1,124,0,131,1,87,0,2,0, - 1,0,83,0,4,0,116,5,121,37,1,0,1,0,1,0, - 89,0,113,17,100,1,83,0,119,0,41,3,122,46,83,101, - 97,114,99,104,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, - 32,102,111,114,32,39,112,97,116,104,39,46,78,122,23,115, - 121,115,46,112,97,116,104,95,104,111,111,107,115,32,105,115, - 32,101,109,112,116,121,41,6,114,15,0,0,0,218,10,112, - 97,116,104,95,104,111,111,107,115,114,99,0,0,0,114,100, - 0,0,0,114,162,0,0,0,114,142,0,0,0,41,2,114, - 65,0,0,0,90,4,104,111,111,107,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,95,112,97,116,104, - 95,104,111,111,107,115,52,5,0,0,115,20,0,0,0,16, - 3,12,1,10,1,2,1,14,1,12,1,4,1,4,2,2, - 253,255,128,122,22,80,97,116,104,70,105,110,100,101,114,46, + 40,41,32,109,101,116,104,111,100,32,111,110,32,97,108,108, + 32,112,97,116,104,32,101,110,116,114,121,32,102,105,110,100, + 101,114,115,10,32,32,32,32,32,32,32,32,115,116,111,114, + 101,100,32,105,110,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,115,32,40, + 119,104,101,114,101,32,105,109,112,108,101,109,101,110,116,101, + 100,41,46,78,218,17,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,41,6,218,4,108,105,115,116,114, + 15,0,0,0,218,19,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,218,5,105,116,101,109,115, + 114,153,0,0,0,114,78,1,0,0,41,2,114,141,0,0, + 0,218,6,102,105,110,100,101,114,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,78,1,0,0,43,5,0, + 0,115,14,0,0,0,22,4,8,1,10,1,10,1,8,1, + 2,128,4,252,122,28,80,97,116,104,70,105,110,100,101,114, + 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,9,0,0,0,67,0,0,0,115,76,0,0,0, + 116,0,106,1,100,1,117,1,114,14,116,0,106,1,115,14, + 116,2,160,3,100,2,116,4,161,2,1,0,116,0,106,1, + 68,0,93,17,125,1,122,7,124,1,124,0,131,1,87,0, + 2,0,1,0,83,0,4,0,116,5,121,37,1,0,1,0, + 1,0,89,0,113,17,100,1,83,0,119,0,41,3,122,46, + 83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100, + 101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122, + 23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 105,115,32,101,109,112,116,121,41,6,114,15,0,0,0,218, + 10,112,97,116,104,95,104,111,111,107,115,114,99,0,0,0, + 114,100,0,0,0,114,162,0,0,0,114,142,0,0,0,41, + 2,114,65,0,0,0,90,4,104,111,111,107,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,11,95,112,97, + 116,104,95,104,111,111,107,115,53,5,0,0,115,18,0,0, + 0,16,3,12,1,10,1,2,1,14,1,12,1,4,1,4, + 2,2,253,122,22,80,97,116,104,70,105,110,100,101,114,46, 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114, @@ -2216,214 +2205,213 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,41,3,114,221,0,0,0,114,65,0,0,0,114,82,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, 0,218,20,95,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,65,5,0,0,115,30,0,0,0, + 114,95,99,97,99,104,101,66,5,0,0,115,28,0,0,0, 8,8,2,1,12,1,12,1,6,3,2,1,12,1,4,4, - 12,253,10,1,12,1,4,1,2,253,2,250,255,128,122,31, - 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,99, - 3,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 4,0,0,0,67,0,0,0,115,138,0,0,0,116,0,124, - 2,100,1,131,2,114,27,116,1,160,2,124,2,161,1,155, - 0,100,2,157,2,125,3,116,3,160,4,124,3,116,5,161, - 2,1,0,124,2,160,6,124,1,161,1,92,2,125,4,125, - 5,110,21,116,1,160,2,124,2,161,1,155,0,100,3,157, - 2,125,3,116,3,160,4,124,3,116,5,161,2,1,0,124, - 2,160,7,124,1,161,1,125,4,103,0,125,5,124,4,100, - 0,117,1,114,58,116,1,160,8,124,1,124,4,161,2,83, - 0,116,1,160,9,124,1,100,0,161,2,125,6,124,5,124, - 6,95,10,124,6,83,0,41,4,78,114,161,0,0,0,122, - 53,46,102,105,110,100,95,115,112,101,99,40,41,32,110,111, - 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, - 32,98,97,99,107,32,116,111,32,102,105,110,100,95,108,111, - 97,100,101,114,40,41,122,53,46,102,105,110,100,95,115,112, - 101,99,40,41,32,110,111,116,32,102,111,117,110,100,59,32, - 102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32, - 102,105,110,100,95,109,111,100,117,108,101,40,41,41,11,114, - 153,0,0,0,114,159,0,0,0,90,12,95,111,98,106,101, - 99,116,95,110,97,109,101,114,99,0,0,0,114,100,0,0, - 0,114,162,0,0,0,114,161,0,0,0,114,229,0,0,0, - 114,224,0,0,0,114,207,0,0,0,114,202,0,0,0,41, - 7,114,221,0,0,0,114,163,0,0,0,114,82,1,0,0, - 114,166,0,0,0,114,164,0,0,0,114,165,0,0,0,114, - 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,116, - 95,115,112,101,99,87,5,0,0,115,28,0,0,0,10,4, - 16,1,12,2,16,1,16,2,12,2,10,1,4,1,8,1, - 12,1,12,1,6,1,4,1,255,128,122,27,80,97,116,104, - 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, - 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, - 0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, - 0,115,166,0,0,0,103,0,125,4,124,2,68,0,93,67, - 125,5,116,0,124,5,116,1,116,2,102,2,131,2,115,14, - 113,4,124,0,160,3,124,5,161,1,125,6,124,6,100,1, - 117,1,114,71,116,4,124,6,100,2,131,2,114,35,124,6, - 160,5,124,1,124,3,161,2,125,7,110,6,124,0,160,6, - 124,1,124,6,161,2,125,7,124,7,100,1,117,0,114,46, - 113,4,124,7,106,7,100,1,117,1,114,55,124,7,2,0, - 1,0,83,0,124,7,106,8,125,8,124,8,100,1,117,0, - 114,66,116,9,100,3,131,1,130,1,124,4,160,10,124,8, - 161,1,1,0,113,4,116,11,160,12,124,1,100,1,161,2, - 125,7,124,4,124,7,95,8,124,7,83,0,41,4,122,63, - 70,105,110,100,32,116,104,101,32,108,111,97,100,101,114,32, - 111,114,32,110,97,109,101,115,112,97,99,101,95,112,97,116, - 104,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108, - 101,47,112,97,99,107,97,103,101,32,110,97,109,101,46,78, - 114,226,0,0,0,122,19,115,112,101,99,32,109,105,115,115, - 105,110,103,32,108,111,97,100,101,114,41,13,114,185,0,0, - 0,114,109,0,0,0,218,5,98,121,116,101,115,114,87,1, - 0,0,114,153,0,0,0,114,226,0,0,0,114,88,1,0, - 0,114,164,0,0,0,114,202,0,0,0,114,142,0,0,0, - 114,191,0,0,0,114,159,0,0,0,114,207,0,0,0,41, - 9,114,221,0,0,0,114,163,0,0,0,114,65,0,0,0, - 114,225,0,0,0,218,14,110,97,109,101,115,112,97,99,101, - 95,112,97,116,104,90,5,101,110,116,114,121,114,82,1,0, - 0,114,210,0,0,0,114,165,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,9,95,103,101,116, - 95,115,112,101,99,108,5,0,0,115,44,0,0,0,4,5, - 8,1,14,1,2,1,10,1,8,1,10,1,14,1,12,2, - 8,1,2,1,10,1,8,1,6,1,8,1,8,1,10,5, - 2,128,12,2,6,1,4,1,255,128,122,20,80,97,116,104, - 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, - 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,5,0,0,0,67,0,0,0,115,94,0,0,0,124,2, - 100,1,117,0,114,7,116,0,106,1,125,2,124,0,160,2, - 124,1,124,2,124,3,161,3,125,4,124,4,100,1,117,0, - 114,20,100,1,83,0,124,4,106,3,100,1,117,0,114,45, - 124,4,106,4,125,5,124,5,114,43,100,1,124,4,95,5, - 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, - 124,4,83,0,100,1,83,0,124,4,83,0,41,2,122,141, - 84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,112, - 101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,101, - 39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, - 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,7, - 114,15,0,0,0,114,65,0,0,0,114,91,1,0,0,114, - 164,0,0,0,114,202,0,0,0,114,205,0,0,0,114,47, - 1,0,0,41,6,114,221,0,0,0,114,163,0,0,0,114, - 65,0,0,0,114,225,0,0,0,114,210,0,0,0,114,90, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,226,0,0,0,140,5,0,0,115,28,0,0,0, - 8,6,6,1,14,1,8,1,4,1,10,1,6,1,4,1, - 6,3,16,1,4,1,4,2,4,2,255,128,122,20,80,97, - 116,104,70,105,110,100,101,114,46,102,105,110,100,95,115,112, - 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,67,0,0,0,115,42,0,0,0, - 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, - 124,1,124,2,161,2,125,3,124,3,100,2,117,0,114,18, - 100,2,83,0,124,3,106,4,83,0,41,3,122,170,102,105, - 110,100,32,116,104,101,32,109,111,100,117,108,101,32,111,110, - 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, - 116,104,39,32,98,97,115,101,100,32,111,110,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,10, - 32,32,32,32,32,32,32,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, - 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,122,101,80,97,116,104,70,105, - 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, - 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, - 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, - 110,32,51,46,49,50,59,32,117,115,101,32,102,105,110,100, - 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, - 114,227,0,0,0,114,228,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,229,0,0,0,164,5, - 0,0,115,16,0,0,0,6,8,2,2,4,254,12,3,8, - 1,4,1,6,1,255,128,122,22,80,97,116,104,70,105,110, - 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 4,0,0,0,79,0,0,0,115,28,0,0,0,100,1,100, - 2,108,0,109,1,125,2,1,0,124,2,106,2,124,0,105, - 0,124,1,164,1,142,1,83,0,41,4,97,32,1,0,0, - 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105, - 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32, - 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32, - 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, - 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, - 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, - 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, - 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, - 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, - 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110, - 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111, - 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96, - 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101, - 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116, - 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32, - 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116, - 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46, - 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32, - 114,0,0,0,0,41,1,218,18,77,101,116,97,100,97,116, - 97,80,97,116,104,70,105,110,100,101,114,78,41,3,90,18, - 105,109,112,111,114,116,108,105,98,46,109,101,116,97,100,97, - 116,97,114,92,1,0,0,218,18,102,105,110,100,95,100,105, - 115,116,114,105,98,117,116,105,111,110,115,41,3,114,144,0, - 0,0,114,145,0,0,0,114,92,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,93,1,0,0, - 180,5,0,0,115,6,0,0,0,12,10,16,1,255,128,122, - 29,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, - 95,100,105,115,116,114,105,98,117,116,105,111,110,115,114,69, - 0,0,0,114,230,0,0,0,41,14,114,150,0,0,0,114, - 149,0,0,0,114,151,0,0,0,114,152,0,0,0,114,233, - 0,0,0,114,78,1,0,0,114,84,1,0,0,114,234,0, - 0,0,114,87,1,0,0,114,88,1,0,0,114,91,1,0, - 0,114,226,0,0,0,114,229,0,0,0,114,93,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,77,1,0,0,38,5,0,0,115,38,0, - 0,0,8,0,4,2,2,2,10,1,2,9,10,1,2,12, - 10,1,2,21,10,1,2,20,12,1,2,31,12,1,2,23, - 12,1,2,15,14,1,255,128,114,77,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,64,0,0,0,115,90,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,101,6,90,7,100,6,100,7,132, - 0,90,8,100,8,100,9,132,0,90,9,100,19,100,11,100, - 12,132,1,90,10,100,13,100,14,132,0,90,11,101,12,100, - 15,100,16,132,0,131,1,90,13,100,17,100,18,132,0,90, - 14,100,10,83,0,41,20,218,10,70,105,108,101,70,105,110, - 100,101,114,122,172,70,105,108,101,45,98,97,115,101,100,32, - 102,105,110,100,101,114,46,10,10,32,32,32,32,73,110,116, - 101,114,97,99,116,105,111,110,115,32,119,105,116,104,32,116, - 104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,97, - 114,101,32,99,97,99,104,101,100,32,102,111,114,32,112,101, - 114,102,111,114,109,97,110,99,101,44,32,98,101,105,110,103, - 10,32,32,32,32,114,101,102,114,101,115,104,101,100,32,119, - 104,101,110,32,116,104,101,32,100,105,114,101,99,116,111,114, - 121,32,116,104,101,32,102,105,110,100,101,114,32,105,115,32, - 104,97,110,100,108,105,110,103,32,104,97,115,32,98,101,101, - 110,32,109,111,100,105,102,105,101,100,46,10,10,32,32,32, - 32,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,6,0,0,0,7,0,0,0,115,112,0,0,0,103, - 0,125,3,124,2,68,0,93,16,92,2,137,0,125,4,124, - 3,160,0,135,0,102,1,100,1,100,2,132,8,124,4,68, - 0,131,1,161,1,1,0,113,4,124,3,124,0,95,1,124, - 1,112,27,100,3,124,0,95,2,116,3,124,0,106,2,131, - 1,115,43,116,4,116,5,160,6,161,0,124,0,106,2,131, - 2,124,0,95,2,100,4,124,0,95,7,116,8,131,0,124, - 0,95,9,116,8,131,0,124,0,95,10,100,5,83,0,41, - 6,122,154,73,110,105,116,105,97,108,105,122,101,32,119,105, - 116,104,32,116,104,101,32,112,97,116,104,32,116,111,32,115, - 101,97,114,99,104,32,111,110,32,97,110,100,32,97,32,118, - 97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,111, - 102,10,32,32,32,32,32,32,32,32,50,45,116,117,112,108, - 101,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104, - 101,32,108,111,97,100,101,114,32,97,110,100,32,116,104,101, - 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,116, - 104,101,32,108,111,97,100,101,114,10,32,32,32,32,32,32, - 32,32,114,101,99,111,103,110,105,122,101,115,46,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,51,0,0,0,115,24,0,0,0,129,0,124,0,93, - 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, - 0,83,0,114,69,0,0,0,114,7,0,0,0,114,43,1, - 0,0,169,1,114,164,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,9,0,0,0,209,5,0,0,115,6,0,0, - 0,6,128,18,0,255,128,122,38,70,105,108,101,70,105,110, + 12,253,10,1,12,1,4,1,2,253,2,250,122,31,80,97, + 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, + 0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0, + 0,0,67,0,0,0,115,138,0,0,0,116,0,124,2,100, + 1,131,2,114,27,116,1,160,2,124,2,161,1,155,0,100, + 2,157,2,125,3,116,3,160,4,124,3,116,5,161,2,1, + 0,124,2,160,6,124,1,161,1,92,2,125,4,125,5,110, + 21,116,1,160,2,124,2,161,1,155,0,100,3,157,2,125, + 3,116,3,160,4,124,3,116,5,161,2,1,0,124,2,160, + 7,124,1,161,1,125,4,103,0,125,5,124,4,100,0,117, + 1,114,58,116,1,160,8,124,1,124,4,161,2,83,0,116, + 1,160,9,124,1,100,0,161,2,125,6,124,5,124,6,95, + 10,124,6,83,0,41,4,78,114,161,0,0,0,122,53,46, + 102,105,110,100,95,115,112,101,99,40,41,32,110,111,116,32, + 102,111,117,110,100,59,32,102,97,108,108,105,110,103,32,98, + 97,99,107,32,116,111,32,102,105,110,100,95,108,111,97,100, + 101,114,40,41,122,53,46,102,105,110,100,95,115,112,101,99, + 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, + 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, + 110,100,95,109,111,100,117,108,101,40,41,41,11,114,153,0, + 0,0,114,159,0,0,0,90,12,95,111,98,106,101,99,116, + 95,110,97,109,101,114,99,0,0,0,114,100,0,0,0,114, + 162,0,0,0,114,161,0,0,0,114,229,0,0,0,114,224, + 0,0,0,114,207,0,0,0,114,202,0,0,0,41,7,114, + 221,0,0,0,114,163,0,0,0,114,82,1,0,0,114,166, + 0,0,0,114,164,0,0,0,114,165,0,0,0,114,210,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115, + 112,101,99,88,5,0,0,115,26,0,0,0,10,4,16,1, + 12,2,16,1,16,2,12,2,10,1,4,1,8,1,12,1, + 12,1,6,1,4,1,122,27,80,97,116,104,70,105,110,100, + 101,114,46,95,108,101,103,97,99,121,95,103,101,116,95,115, + 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,166,0, + 0,0,103,0,125,4,124,2,68,0,93,67,125,5,116,0, + 124,5,116,1,116,2,102,2,131,2,115,14,113,4,124,0, + 160,3,124,5,161,1,125,6,124,6,100,1,117,1,114,71, + 116,4,124,6,100,2,131,2,114,35,124,6,160,5,124,1, + 124,3,161,2,125,7,110,6,124,0,160,6,124,1,124,6, + 161,2,125,7,124,7,100,1,117,0,114,46,113,4,124,7, + 106,7,100,1,117,1,114,55,124,7,2,0,1,0,83,0, + 124,7,106,8,125,8,124,8,100,1,117,0,114,66,116,9, + 100,3,131,1,130,1,124,4,160,10,124,8,161,1,1,0, + 113,4,116,11,160,12,124,1,100,1,161,2,125,7,124,4, + 124,7,95,8,124,7,83,0,41,4,122,63,70,105,110,100, + 32,116,104,101,32,108,111,97,100,101,114,32,111,114,32,110, + 97,109,101,115,112,97,99,101,95,112,97,116,104,32,102,111, + 114,32,116,104,105,115,32,109,111,100,117,108,101,47,112,97, + 99,107,97,103,101,32,110,97,109,101,46,78,114,226,0,0, + 0,122,19,115,112,101,99,32,109,105,115,115,105,110,103,32, + 108,111,97,100,101,114,41,13,114,185,0,0,0,114,109,0, + 0,0,218,5,98,121,116,101,115,114,87,1,0,0,114,153, + 0,0,0,114,226,0,0,0,114,88,1,0,0,114,164,0, + 0,0,114,202,0,0,0,114,142,0,0,0,114,191,0,0, + 0,114,159,0,0,0,114,207,0,0,0,41,9,114,221,0, + 0,0,114,163,0,0,0,114,65,0,0,0,114,225,0,0, + 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, + 104,90,5,101,110,116,114,121,114,82,1,0,0,114,210,0, + 0,0,114,165,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,9,95,103,101,116,95,115,112,101, + 99,109,5,0,0,115,42,0,0,0,4,5,8,1,14,1, + 2,1,10,1,8,1,10,1,14,1,12,2,8,1,2,1, + 10,1,8,1,6,1,8,1,8,1,10,5,2,128,12,2, + 6,1,4,1,122,20,80,97,116,104,70,105,110,100,101,114, + 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,67, + 0,0,0,115,94,0,0,0,124,2,100,1,117,0,114,7, + 116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,3, + 161,3,125,4,124,4,100,1,117,0,114,20,100,1,83,0, + 124,4,106,3,100,1,117,0,114,45,124,4,106,4,125,5, + 124,5,114,43,100,1,124,4,95,5,116,6,124,1,124,5, + 124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,1, + 83,0,124,4,83,0,41,2,122,141,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, + 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, + 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, + 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, + 32,32,32,32,32,32,32,78,41,7,114,15,0,0,0,114, + 65,0,0,0,114,91,1,0,0,114,164,0,0,0,114,202, + 0,0,0,114,205,0,0,0,114,47,1,0,0,41,6,114, + 221,0,0,0,114,163,0,0,0,114,65,0,0,0,114,225, + 0,0,0,114,210,0,0,0,114,90,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,226,0,0, + 0,141,5,0,0,115,26,0,0,0,8,6,6,1,14,1, + 8,1,4,1,10,1,6,1,4,1,6,3,16,1,4,1, + 4,2,4,2,122,20,80,97,116,104,70,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,2, + 161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,3, + 124,3,100,2,117,0,114,18,100,2,83,0,124,3,106,4, + 83,0,41,3,122,170,102,105,110,100,32,116,104,101,32,109, + 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, + 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 122,101,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,40,41,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, + 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, + 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, + 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,78,114,227,0,0,0,114,228,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,229,0,0,0,165,5,0,0,115,14,0,0,0,6, + 8,2,2,4,254,12,3,8,1,4,1,6,1,122,22,80, + 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,4,0,0,0,79,0,0,0,115,28, + 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, + 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, + 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, + 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, + 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, + 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, + 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, + 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, + 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, + 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, + 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, + 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, + 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, + 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, + 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, + 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, + 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, + 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, + 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, + 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, + 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, + 109,101,116,97,100,97,116,97,114,92,1,0,0,218,18,102, + 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110, + 115,41,3,114,144,0,0,0,114,145,0,0,0,114,92,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,93,1,0,0,181,5,0,0,115,4,0,0,0,12, + 10,16,1,122,29,80,97,116,104,70,105,110,100,101,114,46, + 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, + 110,115,114,69,0,0,0,114,230,0,0,0,41,14,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, + 0,0,114,233,0,0,0,114,78,1,0,0,114,84,1,0, + 0,114,234,0,0,0,114,87,1,0,0,114,88,1,0,0, + 114,91,1,0,0,114,226,0,0,0,114,229,0,0,0,114, + 93,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,77,1,0,0,39,5,0, + 0,115,36,0,0,0,8,0,4,2,2,2,10,1,2,9, + 10,1,2,12,10,1,2,21,10,1,2,20,12,1,2,31, + 12,1,2,23,12,1,2,15,14,1,114,77,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,64,0,0,0,115,90,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,101,6,90,7,100,6,100, + 7,132,0,90,8,100,8,100,9,132,0,90,9,100,19,100, + 11,100,12,132,1,90,10,100,13,100,14,132,0,90,11,101, + 12,100,15,100,16,132,0,131,1,90,13,100,17,100,18,132, + 0,90,14,100,10,83,0,41,20,218,10,70,105,108,101,70, + 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, + 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, + 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, + 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, + 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, + 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, + 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, + 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, + 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, + 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, + 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, + 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,6,0,0,0,7,0,0,0,115,112,0,0, + 0,103,0,125,3,124,2,68,0,93,16,92,2,137,0,125, + 4,124,3,160,0,135,0,102,1,100,1,100,2,132,8,124, + 4,68,0,131,1,161,1,1,0,113,4,124,3,124,0,95, + 1,124,1,112,27,100,3,124,0,95,2,116,3,124,0,106, + 2,131,1,115,43,116,4,116,5,160,6,161,0,124,0,106, + 2,131,2,124,0,95,2,100,4,124,0,95,7,116,8,131, + 0,124,0,95,9,116,8,131,0,124,0,95,10,100,5,83, + 0,41,6,122,154,73,110,105,116,105,97,108,105,122,101,32, + 119,105,116,104,32,116,104,101,32,112,97,116,104,32,116,111, + 32,115,101,97,114,99,104,32,111,110,32,97,110,100,32,97, + 32,118,97,114,105,97,98,108,101,32,110,117,109,98,101,114, + 32,111,102,10,32,32,32,32,32,32,32,32,50,45,116,117, + 112,108,101,115,32,99,111,110,116,97,105,110,105,110,103,32, + 116,104,101,32,108,111,97,100,101,114,32,97,110,100,32,116, + 104,101,32,102,105,108,101,32,115,117,102,102,105,120,101,115, + 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32, + 32,32,32,32,114,101,99,111,103,110,105,122,101,115,46,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,51,0,0,0,115,24,0,0,0,129,0,124, + 0,93,7,125,1,124,1,136,0,102,2,86,0,1,0,113, + 2,100,0,83,0,114,69,0,0,0,114,7,0,0,0,114, + 43,1,0,0,169,1,114,164,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,9,0,0,0,210,5,0,0,115,4, + 0,0,0,6,128,18,0,122,38,70,105,108,101,70,105,110, 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, 97,0,0,0,114,130,0,0,0,78,41,11,114,191,0,0, @@ -2436,220 +2424,219 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 65,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, 97,105,108,115,90,7,108,111,97,100,101,114,115,114,212,0, 0,0,114,7,0,0,0,114,95,1,0,0,114,8,0,0, - 0,114,236,0,0,0,203,5,0,0,115,22,0,0,0,4, + 0,114,236,0,0,0,204,5,0,0,115,20,0,0,0,4, 4,12,1,26,1,6,1,10,2,10,1,18,1,6,1,8, - 1,12,1,255,128,122,19,70,105,108,101,70,105,110,100,101, - 114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, - 0,0,0,115,10,0,0,0,100,1,124,0,95,0,100,2, - 83,0,41,3,122,31,73,110,118,97,108,105,100,97,116,101, - 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, - 116,105,109,101,46,114,130,0,0,0,78,41,1,114,97,1, - 0,0,114,21,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,78,1,0,0,219,5,0,0,114, - 81,0,0,0,122,28,70,105,108,101,70,105,110,100,101,114, - 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, - 101,115,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,4,0,0,0,67,0,0,0,115,54,0,0,0, - 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, - 124,1,161,1,125,2,124,2,100,2,117,0,114,19,100,2, - 103,0,102,2,83,0,124,2,106,4,124,2,106,5,112,25, - 103,0,102,2,83,0,41,3,122,197,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32, - 110,97,109,101,115,112,97,99,101,10,32,32,32,32,32,32, - 32,32,112,97,99,107,97,103,101,32,112,111,114,116,105,111, - 110,115,46,32,82,101,116,117,114,110,115,32,40,108,111,97, - 100,101,114,44,32,108,105,115,116,45,111,102,45,112,111,114, - 116,105,111,110,115,41,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 1,12,1,122,19,70,105,108,101,70,105,110,100,101,114,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, + 0,115,10,0,0,0,100,1,124,0,95,0,100,2,83,0, + 41,3,122,31,73,110,118,97,108,105,100,97,116,101,32,116, + 104,101,32,100,105,114,101,99,116,111,114,121,32,109,116,105, + 109,101,46,114,130,0,0,0,78,41,1,114,97,1,0,0, + 114,21,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,78,1,0,0,220,5,0,0,114,81,0, + 0,0,122,28,70,105,108,101,70,105,110,100,101,114,46,105, + 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, + 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,4,0,0,0,67,0,0,0,115,54,0,0,0,116,0, + 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, + 161,1,125,2,124,2,100,2,117,0,114,19,100,2,103,0, + 102,2,83,0,124,2,106,4,124,2,106,5,112,25,103,0, + 102,2,83,0,41,3,122,197,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, + 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, + 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, + 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, + 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, + 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, + 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,122,101,70, + 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,108, + 111,97,100,101,114,40,41,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, + 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, + 80,121,116,104,111,110,32,51,46,49,50,59,32,117,115,101, 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,122, - 101,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,108,111,97,100,101,114,40,41,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, - 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, - 110,32,80,121,116,104,111,110,32,51,46,49,50,59,32,117, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,78,41,6,114,99,0,0,0,114,100, - 0,0,0,114,101,0,0,0,114,226,0,0,0,114,164,0, - 0,0,114,202,0,0,0,41,3,114,143,0,0,0,114,163, - 0,0,0,114,210,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,161,0,0,0,225,5,0,0, - 115,16,0,0,0,6,7,2,2,4,254,10,3,8,1,8, - 1,16,1,255,128,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, - 0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124, - 3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100, - 1,141,4,83,0,41,2,78,114,201,0,0,0,41,1,114, - 213,0,0,0,41,7,114,143,0,0,0,114,211,0,0,0, - 114,163,0,0,0,114,65,0,0,0,90,4,115,109,115,108, - 114,225,0,0,0,114,164,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,91,1,0,0,240,5, - 0,0,115,10,0,0,0,10,1,8,1,2,1,6,255,255, - 128,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, - 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, - 0,0,0,0,0,14,0,0,0,9,0,0,0,67,0,0, - 0,115,120,1,0,0,100,1,125,3,124,1,160,0,100,2, - 161,1,100,3,25,0,125,4,122,12,116,1,124,0,106,2, - 112,17,116,3,160,4,161,0,131,1,106,5,125,5,87,0, - 110,9,4,0,116,6,121,187,1,0,1,0,1,0,100,4, - 125,5,89,0,124,5,124,0,106,7,107,3,114,43,124,0, - 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, - 114,54,124,0,106,10,125,6,124,4,160,11,161,0,125,7, - 110,5,124,0,106,12,125,6,124,4,125,7,124,7,124,6, - 118,0,114,106,116,13,124,0,106,2,124,4,131,2,125,8, - 124,0,106,14,68,0,93,29,92,2,125,9,125,10,100,5, - 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12, - 116,15,124,12,131,1,114,101,124,0,160,16,124,10,124,1, - 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0, - 113,72,116,17,124,8,131,1,125,3,124,0,106,14,68,0, - 93,54,92,2,125,9,125,10,122,10,116,13,124,0,106,2, - 124,4,124,9,23,0,131,2,125,12,87,0,110,10,4,0, - 116,18,121,186,1,0,1,0,1,0,89,0,1,0,100,6, - 83,0,116,19,106,20,100,7,124,12,100,3,100,8,141,3, - 1,0,124,7,124,9,23,0,124,6,118,0,114,163,116,15, - 124,12,131,1,114,163,124,0,160,16,124,10,124,1,124,12, - 100,6,124,2,161,5,2,0,1,0,83,0,113,109,124,3, - 114,184,116,19,160,20,100,9,124,8,161,2,1,0,116,19, - 160,21,124,1,100,6,161,2,125,13,124,8,103,1,124,13, - 95,22,124,13,83,0,100,6,83,0,119,0,119,0,41,10, - 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, - 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, - 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, - 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, - 32,70,114,97,0,0,0,114,44,0,0,0,114,130,0,0, - 0,114,236,0,0,0,78,122,9,116,114,121,105,110,103,32, - 123,125,41,1,90,9,118,101,114,98,111,115,105,116,121,122, - 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, - 97,99,101,32,102,111,114,32,123,125,41,23,114,104,0,0, - 0,114,75,0,0,0,114,65,0,0,0,114,18,0,0,0, - 114,82,0,0,0,114,35,1,0,0,114,76,0,0,0,114, - 97,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, - 101,114,21,0,0,0,114,100,1,0,0,114,131,0,0,0, - 114,99,1,0,0,114,67,0,0,0,114,96,1,0,0,114, - 80,0,0,0,114,91,1,0,0,114,83,0,0,0,114,111, - 0,0,0,114,159,0,0,0,114,173,0,0,0,114,207,0, - 0,0,114,202,0,0,0,41,14,114,143,0,0,0,114,163, - 0,0,0,114,225,0,0,0,90,12,105,115,95,110,97,109, - 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, - 117,108,101,114,193,0,0,0,90,5,99,97,99,104,101,90, - 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, - 97,115,101,95,112,97,116,104,114,44,1,0,0,114,211,0, - 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, - 101,90,9,102,117,108,108,95,112,97,116,104,114,210,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,226,0,0,0,245,5,0,0,115,88,0,0,0,4,5, - 14,1,2,1,24,1,12,1,6,1,10,1,8,1,6,1, - 6,2,6,1,10,1,6,2,4,1,8,2,12,1,14,1, - 8,1,10,1,8,1,24,1,2,255,8,5,14,2,2,1, - 20,1,12,1,8,1,16,1,12,1,8,1,10,1,4,1, - 8,255,2,128,4,2,12,1,12,1,8,1,4,1,4,1, - 2,244,2,228,255,128,122,20,70,105,108,101,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,0, - 0,0,0,0,0,0,0,0,0,9,0,0,0,10,0,0, - 0,67,0,0,0,115,190,0,0,0,124,0,106,0,125,1, - 122,11,116,1,160,2,124,1,112,11,116,1,160,3,161,0, - 161,1,125,2,87,0,110,12,4,0,116,4,116,5,116,6, - 102,3,121,94,1,0,1,0,1,0,103,0,125,2,89,0, - 116,7,106,8,160,9,100,1,161,1,115,39,116,10,124,2, - 131,1,124,0,95,11,110,37,116,10,131,0,125,3,124,2, - 68,0,93,28,125,4,124,4,160,12,100,2,161,1,92,3, - 125,5,125,6,125,7,124,6,114,65,100,3,160,13,124,5, - 124,7,160,14,161,0,161,2,125,8,110,2,124,5,125,8, - 124,3,160,15,124,8,161,1,1,0,113,44,124,3,124,0, - 95,11,116,7,106,8,160,9,116,16,161,1,114,92,100,4, - 100,5,132,0,124,2,68,0,131,1,124,0,95,17,100,6, - 83,0,100,6,83,0,119,0,41,7,122,68,70,105,108,108, - 32,116,104,101,32,99,97,99,104,101,32,111,102,32,112,111, - 116,101,110,116,105,97,108,32,109,111,100,117,108,101,115,32, - 97,110,100,32,112,97,99,107,97,103,101,115,32,102,111,114, - 32,116,104,105,115,32,100,105,114,101,99,116,111,114,121,46, - 114,14,0,0,0,114,97,0,0,0,114,88,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,83,0,0,0,115,20,0,0,0,104,0,124, - 0,93,6,125,1,124,1,160,0,161,0,146,2,113,2,83, - 0,114,7,0,0,0,41,1,114,131,0,0,0,41,2,114, - 5,0,0,0,90,2,102,110,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,13,0,0,0,69,6,0,0, - 115,4,0,0,0,20,0,255,128,122,41,70,105,108,101,70, - 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, - 101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, - 111,109,112,62,78,41,18,114,65,0,0,0,114,18,0,0, - 0,90,7,108,105,115,116,100,105,114,114,82,0,0,0,114, - 85,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, - 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, - 116,111,114,121,69,114,114,111,114,114,15,0,0,0,114,25, - 0,0,0,114,26,0,0,0,114,98,1,0,0,114,99,1, - 0,0,114,126,0,0,0,114,89,0,0,0,114,131,0,0, - 0,218,3,97,100,100,114,27,0,0,0,114,100,1,0,0, - 41,9,114,143,0,0,0,114,65,0,0,0,90,8,99,111, - 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, - 102,102,105,120,95,99,111,110,116,101,110,116,115,114,70,1, - 0,0,114,141,0,0,0,114,54,1,0,0,114,44,1,0, - 0,90,8,110,101,119,95,110,97,109,101,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,40, - 6,0,0,115,40,0,0,0,6,2,2,1,22,1,18,1, - 6,3,12,3,12,1,6,7,8,1,16,1,4,1,18,1, - 4,2,12,1,6,1,12,1,20,1,4,255,2,233,255,128, - 122,22,70,105,108,101,70,105,110,100,101,114,46,95,102,105, - 108,108,95,99,97,99,104,101,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,7,0,0, - 0,115,18,0,0,0,135,0,135,1,102,2,100,1,100,2, - 132,8,125,2,124,2,83,0,41,4,97,20,1,0,0,65, - 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, - 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, - 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, - 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, - 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, - 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, - 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, - 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, - 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, - 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, - 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, - 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, - 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, - 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, - 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, - 32,32,32,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,4,0,0,0,19,0,0,0,115,36,0,0, - 0,116,0,124,0,131,1,115,10,116,1,100,1,124,0,100, - 2,141,2,130,1,136,0,124,0,103,1,136,1,162,1,82, - 0,142,0,83,0,41,4,122,45,80,97,116,104,32,104,111, - 111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,98, - 46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,70, - 105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,114, - 101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,112, - 112,111,114,116,101,100,114,71,0,0,0,78,41,2,114,83, - 0,0,0,114,142,0,0,0,114,71,0,0,0,169,2,114, - 221,0,0,0,114,101,1,0,0,114,7,0,0,0,114,8, - 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,81,6,0, - 0,115,8,0,0,0,8,2,12,1,16,1,255,128,122,54, - 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, - 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, - 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,78,114,7,0,0,0,41,3,114,221, - 0,0,0,114,101,1,0,0,114,107,1,0,0,114,7,0, - 0,0,114,106,1,0,0,114,8,0,0,0,218,9,112,97, - 116,104,95,104,111,111,107,71,6,0,0,115,6,0,0,0, - 14,10,4,6,255,128,122,20,70,105,108,101,70,105,110,100, + 116,101,97,100,78,41,6,114,99,0,0,0,114,100,0,0, + 0,114,101,0,0,0,114,226,0,0,0,114,164,0,0,0, + 114,202,0,0,0,41,3,114,143,0,0,0,114,163,0,0, + 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,161,0,0,0,226,5,0,0,115,14, + 0,0,0,6,7,2,2,4,254,10,3,8,1,8,1,16, + 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, + 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, + 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0, + 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125, + 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83, + 0,41,2,78,114,201,0,0,0,41,1,114,213,0,0,0, + 41,7,114,143,0,0,0,114,211,0,0,0,114,163,0,0, + 0,114,65,0,0,0,90,4,115,109,115,108,114,225,0,0, + 0,114,164,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,91,1,0,0,241,5,0,0,115,8, + 0,0,0,10,1,8,1,2,1,6,255,122,20,70,105,108, + 101,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101, + 99,78,99,3,0,0,0,0,0,0,0,0,0,0,0,14, + 0,0,0,9,0,0,0,67,0,0,0,115,120,1,0,0, + 100,1,125,3,124,1,160,0,100,2,161,1,100,3,25,0, + 125,4,122,12,116,1,124,0,106,2,112,17,116,3,160,4, + 161,0,131,1,106,5,125,5,87,0,110,9,4,0,116,6, + 121,187,1,0,1,0,1,0,100,4,125,5,89,0,124,5, + 124,0,106,7,107,3,114,43,124,0,160,8,161,0,1,0, + 124,5,124,0,95,7,116,9,131,0,114,54,124,0,106,10, + 125,6,124,4,160,11,161,0,125,7,110,5,124,0,106,12, + 125,6,124,4,125,7,124,7,124,6,118,0,114,106,116,13, + 124,0,106,2,124,4,131,2,125,8,124,0,106,14,68,0, + 93,29,92,2,125,9,125,10,100,5,124,9,23,0,125,11, + 116,13,124,8,124,11,131,2,125,12,116,15,124,12,131,1, + 114,101,124,0,160,16,124,10,124,1,124,12,124,8,103,1, + 124,2,161,5,2,0,1,0,83,0,113,72,116,17,124,8, + 131,1,125,3,124,0,106,14,68,0,93,54,92,2,125,9, + 125,10,122,10,116,13,124,0,106,2,124,4,124,9,23,0, + 131,2,125,12,87,0,110,10,4,0,116,18,121,186,1,0, + 1,0,1,0,89,0,1,0,100,6,83,0,116,19,106,20, + 100,7,124,12,100,3,100,8,141,3,1,0,124,7,124,9, + 23,0,124,6,118,0,114,163,116,15,124,12,131,1,114,163, + 124,0,160,16,124,10,124,1,124,12,100,6,124,2,161,5, + 2,0,1,0,83,0,113,109,124,3,114,184,116,19,160,20, + 100,9,124,8,161,2,1,0,116,19,160,21,124,1,100,6, + 161,2,125,13,124,8,103,1,124,13,95,22,124,13,83,0, + 100,6,83,0,119,0,119,0,41,10,122,111,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, + 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, + 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, + 100,46,10,32,32,32,32,32,32,32,32,70,114,97,0,0, + 0,114,44,0,0,0,114,130,0,0,0,114,236,0,0,0, + 78,122,9,116,114,121,105,110,103,32,123,125,41,1,90,9, + 118,101,114,98,111,115,105,116,121,122,25,112,111,115,115,105, + 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, + 114,32,123,125,41,23,114,104,0,0,0,114,75,0,0,0, + 114,65,0,0,0,114,18,0,0,0,114,82,0,0,0,114, + 35,1,0,0,114,76,0,0,0,114,97,1,0,0,218,11, + 95,102,105,108,108,95,99,97,99,104,101,114,21,0,0,0, + 114,100,1,0,0,114,131,0,0,0,114,99,1,0,0,114, + 67,0,0,0,114,96,1,0,0,114,80,0,0,0,114,91, + 1,0,0,114,83,0,0,0,114,111,0,0,0,114,159,0, + 0,0,114,173,0,0,0,114,207,0,0,0,114,202,0,0, + 0,41,14,114,143,0,0,0,114,163,0,0,0,114,225,0, + 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, + 90,11,116,97,105,108,95,109,111,100,117,108,101,114,193,0, + 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, + 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, + 116,104,114,44,1,0,0,114,211,0,0,0,90,13,105,110, + 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, + 108,95,112,97,116,104,114,210,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,226,0,0,0,246, + 5,0,0,115,86,0,0,0,4,5,14,1,2,1,24,1, + 12,1,6,1,10,1,8,1,6,1,6,2,6,1,10,1, + 6,2,4,1,8,2,12,1,14,1,8,1,10,1,8,1, + 24,1,2,255,8,5,14,2,2,1,20,1,12,1,8,1, + 16,1,12,1,8,1,10,1,4,1,8,255,2,128,4,2, + 12,1,12,1,8,1,4,1,4,1,2,244,2,228,122,20, + 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,1,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,10,0,0,0,67,0,0,0,115,190,0, + 0,0,124,0,106,0,125,1,122,11,116,1,160,2,124,1, + 112,11,116,1,160,3,161,0,161,1,125,2,87,0,110,12, + 4,0,116,4,116,5,116,6,102,3,121,94,1,0,1,0, + 1,0,103,0,125,2,89,0,116,7,106,8,160,9,100,1, + 161,1,115,39,116,10,124,2,131,1,124,0,95,11,110,37, + 116,10,131,0,125,3,124,2,68,0,93,28,125,4,124,4, + 160,12,100,2,161,1,92,3,125,5,125,6,125,7,124,6, + 114,65,100,3,160,13,124,5,124,7,160,14,161,0,161,2, + 125,8,110,2,124,5,125,8,124,3,160,15,124,8,161,1, + 1,0,113,44,124,3,124,0,95,11,116,7,106,8,160,9, + 116,16,161,1,114,92,100,4,100,5,132,0,124,2,68,0, + 131,1,124,0,95,17,100,6,83,0,100,6,83,0,119,0, + 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, + 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, + 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, + 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, + 114,101,99,116,111,114,121,46,114,14,0,0,0,114,97,0, + 0,0,114,88,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,4,0,0,0,83,0,0,0, + 115,20,0,0,0,104,0,124,0,93,6,125,1,124,1,160, + 0,161,0,146,2,113,2,83,0,114,7,0,0,0,41,1, + 114,131,0,0,0,41,2,114,5,0,0,0,90,2,102,110, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 13,0,0,0,70,6,0,0,115,2,0,0,0,20,0,122, + 41,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, + 108,95,99,97,99,104,101,46,60,108,111,99,97,108,115,62, + 46,60,115,101,116,99,111,109,112,62,78,41,18,114,65,0, + 0,0,114,18,0,0,0,90,7,108,105,115,116,100,105,114, + 114,82,0,0,0,114,85,1,0,0,218,15,80,101,114,109, + 105,115,115,105,111,110,69,114,114,111,114,218,18,78,111,116, + 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, + 15,0,0,0,114,25,0,0,0,114,26,0,0,0,114,98, + 1,0,0,114,99,1,0,0,114,126,0,0,0,114,89,0, + 0,0,114,131,0,0,0,218,3,97,100,100,114,27,0,0, + 0,114,100,1,0,0,41,9,114,143,0,0,0,114,65,0, + 0,0,90,8,99,111,110,116,101,110,116,115,90,21,108,111, + 119,101,114,95,115,117,102,102,105,120,95,99,111,110,116,101, + 110,116,115,114,70,1,0,0,114,141,0,0,0,114,54,1, + 0,0,114,44,1,0,0,90,8,110,101,119,95,110,97,109, + 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,102,1,0,0,41,6,0,0,115,38,0,0,0,6,2, + 2,1,22,1,18,1,6,3,12,3,12,1,6,7,8,1, + 16,1,4,1,18,1,4,2,12,1,6,1,12,1,20,1, + 4,255,2,233,122,22,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,7,0,0,0,115,18,0,0,0,135,0,135,1,102,2, + 100,1,100,2,132,8,125,2,124,2,83,0,41,4,97,20, + 1,0,0,65,32,99,108,97,115,115,32,109,101,116,104,111, + 100,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, + 97,32,99,108,111,115,117,114,101,32,116,111,32,117,115,101, + 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,10,32,32,32,32,32,32,32,32,119,104,105,99,104,32, + 119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,105, + 110,115,116,97,110,99,101,32,117,115,105,110,103,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,108,111,97,100, + 101,114,115,32,97,110,100,32,116,104,101,32,112,97,116,104, + 10,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32, + 111,110,32,116,104,101,32,99,108,111,115,117,114,101,46,10, + 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, + 112,97,116,104,32,99,97,108,108,101,100,32,111,110,32,116, + 104,101,32,99,108,111,115,117,114,101,32,105,115,32,110,111, + 116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,10,32,32, + 32,32,32,32,32,32,114,97,105,115,101,100,46,10,10,32, + 32,32,32,32,32,32,32,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,19,0,0,0, + 115,36,0,0,0,116,0,124,0,131,1,115,10,116,1,100, + 1,124,0,100,2,141,2,130,1,136,0,124,0,103,1,136, + 1,162,1,82,0,142,0,83,0,41,4,122,45,80,97,116, + 104,32,104,111,111,107,32,102,111,114,32,105,109,112,111,114, + 116,108,105,98,46,109,97,99,104,105,110,101,114,121,46,70, + 105,108,101,70,105,110,100,101,114,46,122,30,111,110,108,121, + 32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,101, + 32,115,117,112,112,111,114,116,101,100,114,71,0,0,0,78, + 41,2,114,83,0,0,0,114,142,0,0,0,114,71,0,0, + 0,169,2,114,221,0,0,0,114,101,1,0,0,114,7,0, + 0,0,114,8,0,0,0,218,24,112,97,116,104,95,104,111, + 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, + 114,82,6,0,0,115,6,0,0,0,8,2,12,1,16,1, + 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, + 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, + 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, + 108,101,70,105,110,100,101,114,78,114,7,0,0,0,41,3, + 114,221,0,0,0,114,101,1,0,0,114,107,1,0,0,114, + 7,0,0,0,114,106,1,0,0,114,8,0,0,0,218,9, + 112,97,116,104,95,104,111,111,107,72,6,0,0,115,4,0, + 0,0,14,10,4,6,122,20,70,105,108,101,70,105,110,100, 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, 0,67,0,0,0,114,67,1,0,0,41,2,78,122,16,70, 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, 2,114,89,0,0,0,114,65,0,0,0,114,21,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 68,1,0,0,89,6,0,0,114,61,1,0,0,122,19,70, + 68,1,0,0,90,6,0,0,114,61,1,0,0,122,19,70, 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, 95,95,114,69,0,0,0,41,15,114,150,0,0,0,114,149, 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, @@ -2657,124 +2644,123 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,161,0,0,0,114,91,1,0,0,114,226,0,0,0, 114,102,1,0,0,114,234,0,0,0,114,108,1,0,0,114, 68,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,94,1,0,0,194,5,0, - 0,115,26,0,0,0,8,0,4,2,8,7,8,16,4,4, - 8,2,8,15,10,5,8,51,2,31,10,1,12,17,255,128, - 114,94,1,0,0,99,4,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,144, - 0,0,0,124,0,160,0,100,1,161,1,125,4,124,0,160, - 0,100,2,161,1,125,5,124,4,115,33,124,5,114,18,124, - 5,106,1,125,4,110,15,124,2,124,3,107,2,114,28,116, - 2,124,1,124,2,131,2,125,4,110,5,116,3,124,1,124, - 2,131,2,125,4,124,5,115,42,116,4,124,1,124,2,124, - 4,100,3,141,3,125,5,122,19,124,5,124,0,100,2,60, - 0,124,4,124,0,100,1,60,0,124,2,124,0,100,4,60, - 0,124,3,124,0,100,5,60,0,87,0,100,0,83,0,4, - 0,116,5,121,71,1,0,1,0,1,0,89,0,100,0,83, - 0,119,0,41,6,78,218,10,95,95,108,111,97,100,101,114, - 95,95,218,8,95,95,115,112,101,99,95,95,114,95,1,0, - 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, - 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,164, - 0,0,0,114,41,1,0,0,114,34,1,0,0,114,213,0, - 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, - 2,110,115,114,141,0,0,0,90,8,112,97,116,104,110,97, - 109,101,90,9,99,112,97,116,104,110,97,109,101,114,164,0, - 0,0,114,210,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,14,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,95,6,0,0,115,38,0,0,0,10, - 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, - 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, - 2,2,254,255,128,114,113,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, - 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, - 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,2, - 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, - 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, - 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, - 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, - 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, - 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, - 32,78,41,7,114,30,1,0,0,114,187,0,0,0,218,18, - 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, - 101,115,114,34,1,0,0,114,127,0,0,0,114,41,1,0, - 0,114,113,0,0,0,41,3,90,10,101,120,116,101,110,115, - 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, - 116,101,99,111,100,101,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,208,0,0,0,118,6,0,0,115,10, - 0,0,0,12,5,8,1,8,1,10,1,255,128,114,208,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, - 124,0,97,0,100,0,83,0,114,69,0,0,0,41,1,114, - 159,0,0,0,41,1,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,218,21,95,115,101,116,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,129, - 6,0,0,115,4,0,0,0,8,2,255,128,114,116,1,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,50,0,0,0,116, - 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, - 3,160,4,116,5,106,6,124,1,142,0,103,1,161,1,1, - 0,116,2,106,7,160,8,116,9,161,1,1,0,100,1,83, - 0,41,2,122,41,73,110,115,116,97,108,108,32,116,104,101, - 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, - 114,116,32,99,111,109,112,111,110,101,110,116,115,46,78,41, - 10,114,116,1,0,0,114,208,0,0,0,114,15,0,0,0, - 114,83,1,0,0,114,191,0,0,0,114,94,1,0,0,114, - 108,1,0,0,218,9,109,101,116,97,95,112,97,116,104,114, - 61,0,0,0,114,77,1,0,0,41,2,114,115,1,0,0, - 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, - 101,114,115,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,8,95,105,110,115,116,97,108,108,134,6,0,0, - 115,10,0,0,0,8,2,6,1,20,1,16,1,255,128,114, - 118,1,0,0,41,1,114,87,0,0,0,114,69,0,0,0, - 41,3,78,78,78,41,2,114,0,0,0,0,114,0,0,0, - 0,41,1,84,41,85,114,152,0,0,0,114,159,0,0,0, - 114,187,0,0,0,114,91,0,0,0,114,15,0,0,0,114, - 99,0,0,0,114,184,0,0,0,114,25,0,0,0,114,231, - 0,0,0,90,2,110,116,114,18,0,0,0,114,215,0,0, - 0,90,5,112,111,115,105,120,114,50,0,0,0,218,3,97, - 108,108,114,59,0,0,0,114,136,0,0,0,114,57,0,0, - 0,114,62,0,0,0,90,20,95,112,97,116,104,115,101,112, - 115,95,119,105,116,104,95,99,111,108,111,110,114,28,0,0, - 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, - 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, - 89,84,69,83,95,75,69,89,114,27,0,0,0,114,29,0, - 0,0,114,21,0,0,0,114,36,0,0,0,114,42,0,0, - 0,114,45,0,0,0,114,67,0,0,0,114,74,0,0,0, - 114,75,0,0,0,114,79,0,0,0,114,80,0,0,0,114, - 83,0,0,0,114,86,0,0,0,114,95,0,0,0,218,4, - 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,186, - 0,0,0,114,34,0,0,0,114,172,0,0,0,114,33,0, - 0,0,114,39,0,0,0,114,8,1,0,0,114,116,0,0, - 0,114,112,0,0,0,114,127,0,0,0,114,61,0,0,0, - 114,114,1,0,0,114,232,0,0,0,114,113,0,0,0,90, - 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, - 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,114,121,0,0,0,114,128,0,0,0,114, - 135,0,0,0,114,137,0,0,0,114,139,0,0,0,114,160, - 0,0,0,114,167,0,0,0,114,176,0,0,0,114,180,0, - 0,0,114,182,0,0,0,114,189,0,0,0,114,194,0,0, - 0,114,195,0,0,0,114,200,0,0,0,218,6,111,98,106, - 101,99,116,114,209,0,0,0,114,213,0,0,0,114,214,0, - 0,0,114,235,0,0,0,114,249,0,0,0,114,11,1,0, - 0,114,34,1,0,0,114,41,1,0,0,114,30,1,0,0, - 114,47,1,0,0,114,73,1,0,0,114,77,1,0,0,114, - 94,1,0,0,114,113,1,0,0,114,208,0,0,0,114,116, - 1,0,0,114,118,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, - 111,100,117,108,101,62,1,0,0,0,115,182,0,0,0,4, - 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, - 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, - 1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4, - 255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8, - 30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8, - 8,10,5,10,22,0,127,16,28,12,1,4,2,4,1,6, - 2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8, - 40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10, - 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, - 73,14,67,16,30,0,127,14,17,18,50,18,45,18,25,14, - 53,14,63,14,49,0,127,14,29,0,127,10,30,8,23,8, - 11,12,5,255,128, + 0,0,0,114,8,0,0,0,114,94,1,0,0,195,5,0, + 0,115,24,0,0,0,8,0,4,2,8,7,8,16,4,4, + 8,2,8,15,10,5,8,51,2,31,10,1,12,17,114,94, + 1,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,8,0,0,0,67,0,0,0,115,144,0,0, + 0,124,0,160,0,100,1,161,1,125,4,124,0,160,0,100, + 2,161,1,125,5,124,4,115,33,124,5,114,18,124,5,106, + 1,125,4,110,15,124,2,124,3,107,2,114,28,116,2,124, + 1,124,2,131,2,125,4,110,5,116,3,124,1,124,2,131, + 2,125,4,124,5,115,42,116,4,124,1,124,2,124,4,100, + 3,141,3,125,5,122,19,124,5,124,0,100,2,60,0,124, + 4,124,0,100,1,60,0,124,2,124,0,100,4,60,0,124, + 3,124,0,100,5,60,0,87,0,100,0,83,0,4,0,116, + 5,121,71,1,0,1,0,1,0,89,0,100,0,83,0,119, + 0,41,6,78,218,10,95,95,108,111,97,100,101,114,95,95, + 218,8,95,95,115,112,101,99,95,95,114,95,1,0,0,90, + 8,95,95,102,105,108,101,95,95,90,10,95,95,99,97,99, + 104,101,100,95,95,41,6,218,3,103,101,116,114,164,0,0, + 0,114,41,1,0,0,114,34,1,0,0,114,213,0,0,0, + 218,9,69,120,99,101,112,116,105,111,110,41,6,90,2,110, + 115,114,141,0,0,0,90,8,112,97,116,104,110,97,109,101, + 90,9,99,112,97,116,104,110,97,109,101,114,164,0,0,0, + 114,210,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,14,95,102,105,120,95,117,112,95,109,111, + 100,117,108,101,96,6,0,0,115,36,0,0,0,10,2,10, + 1,4,1,4,1,8,1,8,1,12,1,10,2,4,1,14, + 1,2,1,8,1,8,1,8,1,14,1,12,1,6,2,2, + 254,114,113,1,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,0, + 116,3,116,4,102,2,125,1,116,5,116,6,102,2,125,2, + 124,0,124,1,124,2,103,3,83,0,41,2,122,95,82,101, + 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, + 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, + 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, + 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, + 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, + 102,102,105,120,101,115,41,46,10,32,32,32,32,78,41,7, + 114,30,1,0,0,114,187,0,0,0,218,18,101,120,116,101, + 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,34, + 1,0,0,114,127,0,0,0,114,41,1,0,0,114,113,0, + 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, + 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, + 100,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,208,0,0,0,119,6,0,0,115,8,0,0,0,12, + 5,8,1,8,1,10,1,114,208,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, + 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, + 83,0,114,69,0,0,0,41,1,114,159,0,0,0,41,1, + 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, + 97,112,95,109,111,100,117,108,101,130,6,0,0,115,2,0, + 0,0,8,2,114,116,1,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,116, + 1,131,0,125,1,116,2,106,3,160,4,116,5,106,6,124, + 1,142,0,103,1,161,1,1,0,116,2,106,7,160,8,116, + 9,161,1,1,0,100,1,83,0,41,2,122,41,73,110,115, + 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, + 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, + 110,101,110,116,115,46,78,41,10,114,116,1,0,0,114,208, + 0,0,0,114,15,0,0,0,114,83,1,0,0,114,191,0, + 0,0,114,94,1,0,0,114,108,1,0,0,218,9,109,101, + 116,97,95,112,97,116,104,114,61,0,0,0,114,77,1,0, + 0,41,2,114,115,1,0,0,90,17,115,117,112,112,111,114, + 116,101,100,95,108,111,97,100,101,114,115,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,8,95,105,110,115, + 116,97,108,108,135,6,0,0,115,8,0,0,0,8,2,6, + 1,20,1,16,1,114,118,1,0,0,41,1,114,87,0,0, + 0,114,69,0,0,0,41,3,78,78,78,41,2,114,0,0, + 0,0,114,0,0,0,0,41,1,84,41,85,114,152,0,0, + 0,114,159,0,0,0,114,187,0,0,0,114,91,0,0,0, + 114,15,0,0,0,114,99,0,0,0,114,184,0,0,0,114, + 25,0,0,0,114,231,0,0,0,90,2,110,116,114,18,0, + 0,0,114,215,0,0,0,90,5,112,111,115,105,120,114,50, + 0,0,0,218,3,97,108,108,114,59,0,0,0,114,136,0, + 0,0,114,57,0,0,0,114,62,0,0,0,90,20,95,112, + 97,116,104,115,101,112,115,95,119,105,116,104,95,99,111,108, + 111,110,114,28,0,0,0,90,37,95,67,65,83,69,95,73, + 78,83,69,78,83,73,84,73,86,69,95,80,76,65,84,70, + 79,82,77,83,95,66,89,84,69,83,95,75,69,89,114,27, + 0,0,0,114,29,0,0,0,114,21,0,0,0,114,36,0, + 0,0,114,42,0,0,0,114,45,0,0,0,114,67,0,0, + 0,114,74,0,0,0,114,75,0,0,0,114,79,0,0,0, + 114,80,0,0,0,114,83,0,0,0,114,86,0,0,0,114, + 95,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, + 100,101,95,95,114,186,0,0,0,114,34,0,0,0,114,172, + 0,0,0,114,33,0,0,0,114,39,0,0,0,114,8,1, + 0,0,114,116,0,0,0,114,112,0,0,0,114,127,0,0, + 0,114,61,0,0,0,114,114,1,0,0,114,232,0,0,0, + 114,113,0,0,0,90,23,68,69,66,85,71,95,66,89,84, + 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,27, + 79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,114,121,0,0,0, + 114,128,0,0,0,114,135,0,0,0,114,137,0,0,0,114, + 139,0,0,0,114,160,0,0,0,114,167,0,0,0,114,176, + 0,0,0,114,180,0,0,0,114,182,0,0,0,114,189,0, + 0,0,114,194,0,0,0,114,195,0,0,0,114,200,0,0, + 0,218,6,111,98,106,101,99,116,114,209,0,0,0,114,213, + 0,0,0,114,214,0,0,0,114,235,0,0,0,114,249,0, + 0,0,114,11,1,0,0,114,34,1,0,0,114,41,1,0, + 0,114,30,1,0,0,114,47,1,0,0,114,73,1,0,0, + 114,77,1,0,0,114,94,1,0,0,114,113,1,0,0,114, + 208,0,0,0,114,116,1,0,0,114,118,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, + 115,180,0,0,0,4,0,4,22,8,3,8,1,8,1,8, + 1,8,1,10,3,4,1,8,1,10,1,8,2,4,3,10, + 1,6,2,22,2,8,1,8,1,10,1,14,1,4,4,4, + 1,2,1,2,1,4,255,8,4,6,16,8,3,8,5,8, + 5,4,6,10,1,8,30,8,6,8,8,8,10,8,9,8, + 5,4,7,10,1,8,8,10,5,10,22,0,127,16,29,12, + 1,4,2,4,1,6,2,4,1,10,1,8,2,6,2,8, + 2,16,2,8,71,8,40,8,19,8,12,8,12,8,31,8, + 20,8,33,8,28,10,24,10,13,10,10,8,11,6,14,4, + 3,2,1,12,255,14,73,14,67,16,30,0,127,14,17,18, + 50,18,45,18,25,14,53,14,63,14,49,0,127,14,29,0, + 127,10,30,8,23,8,11,12,5, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index 09a202d8358d68..b9eb5b1fc6dc10 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -73,312 +73,311 @@ const unsigned char _Py_M__zipimport[] = { 108,110,97,109,101,95,95,169,0,114,9,0,0,0,114,9, 0,0,0,250,18,60,102,114,111,122,101,110,32,122,105,112, 105,109,112,111,114,116,62,114,3,0,0,0,34,0,0,0, - 115,6,0,0,0,8,0,4,1,255,128,233,22,0,0,0, - 115,4,0,0,0,80,75,5,6,105,255,255,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,64,0,0,0,115,126,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, - 100,29,100,5,100,6,132,1,90,5,100,29,100,7,100,8, - 132,1,90,6,100,29,100,9,100,10,132,1,90,7,100,11, - 100,12,132,0,90,8,100,13,100,14,132,0,90,9,100,15, - 100,16,132,0,90,10,100,17,100,18,132,0,90,11,100,19, - 100,20,132,0,90,12,100,21,100,22,132,0,90,13,100,23, - 100,24,132,0,90,14,100,25,100,26,132,0,90,15,100,27, - 100,28,132,0,90,16,100,4,83,0,41,30,114,4,0,0, - 0,97,255,1,0,0,122,105,112,105,109,112,111,114,116,101, - 114,40,97,114,99,104,105,118,101,112,97,116,104,41,32,45, - 62,32,122,105,112,105,109,112,111,114,116,101,114,32,111,98, - 106,101,99,116,10,10,32,32,32,32,67,114,101,97,116,101, - 32,97,32,110,101,119,32,122,105,112,105,109,112,111,114,116, - 101,114,32,105,110,115,116,97,110,99,101,46,32,39,97,114, - 99,104,105,118,101,112,97,116,104,39,32,109,117,115,116,32, - 98,101,32,97,32,112,97,116,104,32,116,111,10,32,32,32, - 32,97,32,122,105,112,102,105,108,101,44,32,111,114,32,116, - 111,32,97,32,115,112,101,99,105,102,105,99,32,112,97,116, - 104,32,105,110,115,105,100,101,32,97,32,122,105,112,102,105, - 108,101,46,32,70,111,114,32,101,120,97,109,112,108,101,44, - 32,105,116,32,99,97,110,32,98,101,10,32,32,32,32,39, - 47,116,109,112,47,109,121,105,109,112,111,114,116,46,122,105, - 112,39,44,32,111,114,32,39,47,116,109,112,47,109,121,105, - 109,112,111,114,116,46,122,105,112,47,109,121,100,105,114,101, - 99,116,111,114,121,39,44,32,105,102,32,109,121,100,105,114, - 101,99,116,111,114,121,32,105,115,32,97,10,32,32,32,32, - 118,97,108,105,100,32,100,105,114,101,99,116,111,114,121,32, - 105,110,115,105,100,101,32,116,104,101,32,97,114,99,104,105, - 118,101,46,10,10,32,32,32,32,39,90,105,112,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,105,102,32,39,97,114,99,104,105,118,101,112,97, - 116,104,39,32,100,111,101,115,110,39,116,32,112,111,105,110, - 116,32,116,111,32,97,32,118,97,108,105,100,32,90,105,112, - 10,32,32,32,32,97,114,99,104,105,118,101,46,10,10,32, - 32,32,32,84,104,101,32,39,97,114,99,104,105,118,101,39, - 32,97,116,116,114,105,98,117,116,101,32,111,102,32,122,105, - 112,105,109,112,111,114,116,101,114,32,111,98,106,101,99,116, - 115,32,99,111,110,116,97,105,110,115,32,116,104,101,32,110, - 97,109,101,32,111,102,32,116,104,101,10,32,32,32,32,122, - 105,112,102,105,108,101,32,116,97,114,103,101,116,101,100,46, - 10,32,32,32,32,99,2,0,0,0,0,0,0,0,0,0, - 0,0,8,0,0,0,9,0,0,0,67,0,0,0,115,34, - 1,0,0,116,0,124,1,116,1,131,2,115,14,100,1,100, - 0,108,2,125,2,124,2,160,3,124,1,161,1,125,1,124, - 1,115,22,116,4,100,2,124,1,100,3,141,2,130,1,116, - 5,114,30,124,1,160,6,116,5,116,7,161,2,125,1,103, - 0,125,3,9,0,122,7,116,8,160,9,124,1,161,1,125, - 4,87,0,110,34,4,0,116,10,116,11,102,2,121,144,1, - 0,1,0,1,0,116,8,160,12,124,1,161,1,92,2,125, - 5,125,6,124,5,124,1,107,2,114,66,116,4,100,5,124, - 1,100,3,141,2,130,1,124,5,125,1,124,3,160,13,124, - 6,161,1,1,0,89,0,110,14,124,4,106,14,100,6,64, - 0,100,7,107,3,114,88,116,4,100,5,124,1,100,3,141, - 2,130,1,113,90,113,33,122,6,116,15,124,1,25,0,125, - 7,87,0,110,15,4,0,116,16,121,143,1,0,1,0,1, - 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60, - 0,89,0,124,7,124,0,95,18,124,1,124,0,95,19,116, - 8,106,20,124,3,100,0,100,0,100,8,133,3,25,0,142, - 0,124,0,95,21,124,0,106,21,114,141,124,0,4,0,106, - 21,116,7,55,0,2,0,95,21,100,0,83,0,100,0,83, - 0,119,0,119,0,41,9,78,114,0,0,0,0,122,21,97, - 114,99,104,105,118,101,32,112,97,116,104,32,105,115,32,101, - 109,112,116,121,169,1,218,4,112,97,116,104,84,122,14,110, - 111,116,32,97,32,90,105,112,32,102,105,108,101,105,0,240, - 0,0,105,0,128,0,0,233,255,255,255,255,41,22,218,10, - 105,115,105,110,115,116,97,110,99,101,218,3,115,116,114,218, - 2,111,115,90,8,102,115,100,101,99,111,100,101,114,3,0, - 0,0,218,12,97,108,116,95,112,97,116,104,95,115,101,112, - 218,7,114,101,112,108,97,99,101,218,8,112,97,116,104,95, - 115,101,112,218,19,95,98,111,111,116,115,116,114,97,112,95, - 101,120,116,101,114,110,97,108,90,10,95,112,97,116,104,95, - 115,116,97,116,218,7,79,83,69,114,114,111,114,218,10,86, - 97,108,117,101,69,114,114,111,114,90,11,95,112,97,116,104, - 95,115,112,108,105,116,218,6,97,112,112,101,110,100,90,7, - 115,116,95,109,111,100,101,218,20,95,122,105,112,95,100,105, - 114,101,99,116,111,114,121,95,99,97,99,104,101,218,8,75, - 101,121,69,114,114,111,114,218,15,95,114,101,97,100,95,100, - 105,114,101,99,116,111,114,121,218,6,95,102,105,108,101,115, - 218,7,97,114,99,104,105,118,101,218,10,95,112,97,116,104, - 95,106,111,105,110,218,6,112,114,101,102,105,120,41,8,218, - 4,115,101,108,102,114,13,0,0,0,114,17,0,0,0,114, - 31,0,0,0,90,2,115,116,90,7,100,105,114,110,97,109, - 101,90,8,98,97,115,101,110,97,109,101,218,5,102,105,108, - 101,115,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,8,95,95,105,110,105,116,95,95,64,0,0,0,115, - 70,0,0,0,10,1,8,1,10,1,4,1,12,1,4,1, - 12,1,4,2,2,1,2,1,14,1,16,1,14,3,8,1, - 12,1,4,1,14,1,14,3,12,2,2,1,2,240,2,18, - 12,1,12,1,8,1,10,1,6,1,6,1,22,2,6,1, - 18,1,4,255,2,249,2,239,255,128,122,20,122,105,112,105, - 109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,95, - 78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,4,0,0,0,67,0,0,0,115,90,0,0,0,116, - 0,160,1,100,1,116,2,161,2,1,0,116,3,124,0,124, - 1,131,2,125,3,124,3,100,2,117,1,114,19,124,0,103, - 0,102,2,83,0,116,4,124,0,124,1,131,2,125,4,116, - 5,124,0,124,4,131,2,114,41,100,2,124,0,106,6,155, - 0,116,7,155,0,124,4,155,0,157,3,103,1,102,2,83, - 0,100,2,103,0,102,2,83,0,41,3,97,47,2,0,0, - 102,105,110,100,95,108,111,97,100,101,114,40,102,117,108,108, - 110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,41, - 32,45,62,32,115,101,108,102,44,32,115,116,114,32,111,114, - 32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,32, - 83,101,97,114,99,104,32,102,111,114,32,97,32,109,111,100, - 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121, - 32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117, - 108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32, - 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108, - 121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116, - 116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101, - 46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101, - 32,122,105,112,105,109,112,111,114,116,101,114,10,32,32,32, - 32,32,32,32,32,105,110,115,116,97,110,99,101,32,105,116, - 115,101,108,102,32,105,102,32,116,104,101,32,109,111,100,117, - 108,101,32,119,97,115,32,102,111,117,110,100,44,32,97,32, - 115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110, - 103,32,116,104,101,10,32,32,32,32,32,32,32,32,102,117, - 108,108,32,112,97,116,104,32,110,97,109,101,32,105,102,32, - 105,116,39,115,32,112,111,115,115,105,98,108,121,32,97,32, - 112,111,114,116,105,111,110,32,111,102,32,97,32,110,97,109, - 101,115,112,97,99,101,32,112,97,99,107,97,103,101,44,10, - 32,32,32,32,32,32,32,32,111,114,32,78,111,110,101,32, - 111,116,104,101,114,119,105,115,101,46,32,84,104,101,32,111, - 112,116,105,111,110,97,108,32,39,112,97,116,104,39,32,97, - 114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,114, - 101,100,32,45,45,32,105,116,39,115,10,32,32,32,32,32, - 32,32,32,116,104,101,114,101,32,102,111,114,32,99,111,109, - 112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,32, - 116,104,101,32,105,109,112,111,114,116,101,114,32,112,114,111, - 116,111,99,111,108,46,10,10,32,32,32,32,32,32,32,32, - 68,101,112,114,101,99,97,116,101,100,32,115,105,110,99,101, - 32,80,121,116,104,111,110,32,51,46,49,48,46,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,32,32,32,32,32,32,32,32,122, - 102,122,105,112,105,109,112,111,114,116,101,114,46,102,105,110, - 100,95,108,111,97,100,101,114,40,41,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, - 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, - 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, - 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,78,41,8,218,9,95,119,97,114, - 110,105,110,103,115,218,4,119,97,114,110,218,18,68,101,112, - 114,101,99,97,116,105,111,110,87,97,114,110,105,110,103,218, - 16,95,103,101,116,95,109,111,100,117,108,101,95,105,110,102, - 111,218,16,95,103,101,116,95,109,111,100,117,108,101,95,112, - 97,116,104,218,7,95,105,115,95,100,105,114,114,29,0,0, - 0,114,20,0,0,0,41,5,114,32,0,0,0,218,8,102, - 117,108,108,110,97,109,101,114,13,0,0,0,218,2,109,105, - 218,7,109,111,100,112,97,116,104,114,9,0,0,0,114,9, - 0,0,0,114,10,0,0,0,218,11,102,105,110,100,95,108, - 111,97,100,101,114,110,0,0,0,115,22,0,0,0,6,12, - 2,2,4,254,10,3,8,1,8,2,10,7,10,1,24,4, - 8,2,255,128,122,23,122,105,112,105,109,112,111,114,116,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,3,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,28,0,0,0,116,0,160,1,100, - 1,116,2,161,2,1,0,124,0,160,3,124,1,124,2,161, - 2,100,2,25,0,83,0,41,4,97,203,1,0,0,102,105, - 110,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97, - 109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45, - 62,32,115,101,108,102,32,111,114,32,78,111,110,101,46,10, - 10,32,32,32,32,32,32,32,32,83,101,97,114,99,104,32, - 102,111,114,32,97,32,109,111,100,117,108,101,32,115,112,101, - 99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,110, - 97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,39, - 32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,32, - 32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,105, - 102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,111, - 100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,101, - 116,117,114,110,115,32,116,104,101,32,122,105,112,105,109,112, - 111,114,116,101,114,10,32,32,32,32,32,32,32,32,105,110, - 115,116,97,110,99,101,32,105,116,115,101,108,102,32,105,102, - 32,116,104,101,32,109,111,100,117,108,101,32,119,97,115,32, - 102,111,117,110,100,44,32,111,114,32,78,111,110,101,32,105, - 102,32,105,116,32,119,97,115,110,39,116,46,10,32,32,32, - 32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97, - 108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32, - 105,116,39,115,32,116,104,101,114,101,32,102,111,114,32,99, - 111,109,112,97,116,105,98,105,108,105,116,121,10,32,32,32, - 32,32,32,32,32,119,105,116,104,32,116,104,101,32,105,109, - 112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46, - 10,10,32,32,32,32,32,32,32,32,68,101,112,114,101,99, - 97,116,101,100,32,115,105,110,99,101,32,80,121,116,104,111, - 110,32,51,46,49,48,46,32,85,115,101,32,102,105,110,100, - 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, - 10,32,32,32,32,32,32,32,32,122,102,122,105,112,105,109, - 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, - 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, - 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, - 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, + 115,4,0,0,0,8,0,4,1,233,22,0,0,0,115,4, + 0,0,0,80,75,5,6,105,255,255,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,64,0,0,0,115,126,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,29, + 100,5,100,6,132,1,90,5,100,29,100,7,100,8,132,1, + 90,6,100,29,100,9,100,10,132,1,90,7,100,11,100,12, + 132,0,90,8,100,13,100,14,132,0,90,9,100,15,100,16, + 132,0,90,10,100,17,100,18,132,0,90,11,100,19,100,20, + 132,0,90,12,100,21,100,22,132,0,90,13,100,23,100,24, + 132,0,90,14,100,25,100,26,132,0,90,15,100,27,100,28, + 132,0,90,16,100,4,83,0,41,30,114,4,0,0,0,97, + 255,1,0,0,122,105,112,105,109,112,111,114,116,101,114,40, + 97,114,99,104,105,118,101,112,97,116,104,41,32,45,62,32, + 122,105,112,105,109,112,111,114,116,101,114,32,111,98,106,101, + 99,116,10,10,32,32,32,32,67,114,101,97,116,101,32,97, + 32,110,101,119,32,122,105,112,105,109,112,111,114,116,101,114, + 32,105,110,115,116,97,110,99,101,46,32,39,97,114,99,104, + 105,118,101,112,97,116,104,39,32,109,117,115,116,32,98,101, + 32,97,32,112,97,116,104,32,116,111,10,32,32,32,32,97, + 32,122,105,112,102,105,108,101,44,32,111,114,32,116,111,32, + 97,32,115,112,101,99,105,102,105,99,32,112,97,116,104,32, + 105,110,115,105,100,101,32,97,32,122,105,112,102,105,108,101, + 46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105, + 116,32,99,97,110,32,98,101,10,32,32,32,32,39,47,116, + 109,112,47,109,121,105,109,112,111,114,116,46,122,105,112,39, + 44,32,111,114,32,39,47,116,109,112,47,109,121,105,109,112, + 111,114,116,46,122,105,112,47,109,121,100,105,114,101,99,116, + 111,114,121,39,44,32,105,102,32,109,121,100,105,114,101,99, + 116,111,114,121,32,105,115,32,97,10,32,32,32,32,118,97, + 108,105,100,32,100,105,114,101,99,116,111,114,121,32,105,110, + 115,105,100,101,32,116,104,101,32,97,114,99,104,105,118,101, + 46,10,10,32,32,32,32,39,90,105,112,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 32,105,102,32,39,97,114,99,104,105,118,101,112,97,116,104, + 39,32,100,111,101,115,110,39,116,32,112,111,105,110,116,32, + 116,111,32,97,32,118,97,108,105,100,32,90,105,112,10,32, + 32,32,32,97,114,99,104,105,118,101,46,10,10,32,32,32, + 32,84,104,101,32,39,97,114,99,104,105,118,101,39,32,97, + 116,116,114,105,98,117,116,101,32,111,102,32,122,105,112,105, + 109,112,111,114,116,101,114,32,111,98,106,101,99,116,115,32, + 99,111,110,116,97,105,110,115,32,116,104,101,32,110,97,109, + 101,32,111,102,32,116,104,101,10,32,32,32,32,122,105,112, + 102,105,108,101,32,116,97,114,103,101,116,101,100,46,10,32, + 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, + 8,0,0,0,9,0,0,0,67,0,0,0,115,34,1,0, + 0,116,0,124,1,116,1,131,2,115,14,100,1,100,0,108, + 2,125,2,124,2,160,3,124,1,161,1,125,1,124,1,115, + 22,116,4,100,2,124,1,100,3,141,2,130,1,116,5,114, + 30,124,1,160,6,116,5,116,7,161,2,125,1,103,0,125, + 3,9,0,122,7,116,8,160,9,124,1,161,1,125,4,87, + 0,110,34,4,0,116,10,116,11,102,2,121,144,1,0,1, + 0,1,0,116,8,160,12,124,1,161,1,92,2,125,5,125, + 6,124,5,124,1,107,2,114,66,116,4,100,5,124,1,100, + 3,141,2,130,1,124,5,125,1,124,3,160,13,124,6,161, + 1,1,0,89,0,110,14,124,4,106,14,100,6,64,0,100, + 7,107,3,114,88,116,4,100,5,124,1,100,3,141,2,130, + 1,113,90,113,33,122,6,116,15,124,1,25,0,125,7,87, + 0,110,15,4,0,116,16,121,143,1,0,1,0,1,0,116, + 17,124,1,131,1,125,7,124,7,116,15,124,1,60,0,89, + 0,124,7,124,0,95,18,124,1,124,0,95,19,116,8,106, + 20,124,3,100,0,100,0,100,8,133,3,25,0,142,0,124, + 0,95,21,124,0,106,21,114,141,124,0,4,0,106,21,116, + 7,55,0,2,0,95,21,100,0,83,0,100,0,83,0,119, + 0,119,0,41,9,78,114,0,0,0,0,122,21,97,114,99, + 104,105,118,101,32,112,97,116,104,32,105,115,32,101,109,112, + 116,121,169,1,218,4,112,97,116,104,84,122,14,110,111,116, + 32,97,32,90,105,112,32,102,105,108,101,105,0,240,0,0, + 105,0,128,0,0,233,255,255,255,255,41,22,218,10,105,115, + 105,110,115,116,97,110,99,101,218,3,115,116,114,218,2,111, + 115,90,8,102,115,100,101,99,111,100,101,114,3,0,0,0, + 218,12,97,108,116,95,112,97,116,104,95,115,101,112,218,7, + 114,101,112,108,97,99,101,218,8,112,97,116,104,95,115,101, + 112,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,90,10,95,112,97,116,104,95,115,116, + 97,116,218,7,79,83,69,114,114,111,114,218,10,86,97,108, + 117,101,69,114,114,111,114,90,11,95,112,97,116,104,95,115, + 112,108,105,116,218,6,97,112,112,101,110,100,90,7,115,116, + 95,109,111,100,101,218,20,95,122,105,112,95,100,105,114,101, + 99,116,111,114,121,95,99,97,99,104,101,218,8,75,101,121, + 69,114,114,111,114,218,15,95,114,101,97,100,95,100,105,114, + 101,99,116,111,114,121,218,6,95,102,105,108,101,115,218,7, + 97,114,99,104,105,118,101,218,10,95,112,97,116,104,95,106, + 111,105,110,218,6,112,114,101,102,105,120,41,8,218,4,115, + 101,108,102,114,13,0,0,0,114,17,0,0,0,114,31,0, + 0,0,90,2,115,116,90,7,100,105,114,110,97,109,101,90, + 8,98,97,115,101,110,97,109,101,218,5,102,105,108,101,115, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, + 8,95,95,105,110,105,116,95,95,64,0,0,0,115,68,0, + 0,0,10,1,8,1,10,1,4,1,12,1,4,1,12,1, + 4,2,2,1,2,1,14,1,16,1,14,3,8,1,12,1, + 4,1,14,1,14,3,12,2,2,1,2,240,2,18,12,1, + 12,1,8,1,10,1,6,1,6,1,22,2,6,1,18,1, + 4,255,2,249,2,239,122,20,122,105,112,105,109,112,111,114, + 116,101,114,46,95,95,105,110,105,116,95,95,78,99,3,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0, + 0,0,67,0,0,0,115,90,0,0,0,116,0,160,1,100, + 1,116,2,161,2,1,0,116,3,124,0,124,1,131,2,125, + 3,124,3,100,2,117,1,114,19,124,0,103,0,102,2,83, + 0,116,4,124,0,124,1,131,2,125,4,116,5,124,0,124, + 4,131,2,114,41,100,2,124,0,106,6,155,0,116,7,155, + 0,124,4,155,0,157,3,103,1,102,2,83,0,100,2,103, + 0,102,2,83,0,41,3,97,47,2,0,0,102,105,110,100, + 95,108,111,97,100,101,114,40,102,117,108,108,110,97,109,101, + 44,32,112,97,116,104,61,78,111,110,101,41,32,45,62,32, + 115,101,108,102,44,32,115,116,114,32,111,114,32,78,111,110, + 101,46,10,10,32,32,32,32,32,32,32,32,83,101,97,114, + 99,104,32,102,111,114,32,97,32,109,111,100,117,108,101,32, + 115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,117, + 108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,97, + 109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,10, + 32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,117, + 97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,41, + 32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,116, + 32,114,101,116,117,114,110,115,32,116,104,101,32,122,105,112, + 105,109,112,111,114,116,101,114,10,32,32,32,32,32,32,32, + 32,105,110,115,116,97,110,99,101,32,105,116,115,101,108,102, + 32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,119, + 97,115,32,102,111,117,110,100,44,32,97,32,115,116,114,105, + 110,103,32,99,111,110,116,97,105,110,105,110,103,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,117,108,108,32,112, + 97,116,104,32,110,97,109,101,32,105,102,32,105,116,39,115, + 32,112,111,115,115,105,98,108,121,32,97,32,112,111,114,116, + 105,111,110,32,111,102,32,97,32,110,97,109,101,115,112,97, + 99,101,32,112,97,99,107,97,103,101,44,10,32,32,32,32, + 32,32,32,32,111,114,32,78,111,110,101,32,111,116,104,101, + 114,119,105,115,101,46,32,84,104,101,32,111,112,116,105,111, + 110,97,108,32,39,112,97,116,104,39,32,97,114,103,117,109, + 101,110,116,32,105,115,32,105,103,110,111,114,101,100,32,45, + 45,32,105,116,39,115,10,32,32,32,32,32,32,32,32,116, + 104,101,114,101,32,102,111,114,32,99,111,109,112,97,116,105, + 98,105,108,105,116,121,32,119,105,116,104,32,116,104,101,32, + 105,109,112,111,114,116,101,114,32,112,114,111,116,111,99,111, + 108,46,10,10,32,32,32,32,32,32,32,32,68,101,112,114, + 101,99,97,116,101,100,32,115,105,110,99,101,32,80,121,116, + 104,111,110,32,51,46,49,48,46,32,85,115,101,32,102,105, 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, - 100,114,0,0,0,0,78,41,4,114,35,0,0,0,114,36, - 0,0,0,114,37,0,0,0,114,44,0,0,0,41,3,114, - 32,0,0,0,114,41,0,0,0,114,13,0,0,0,114,9, - 0,0,0,114,9,0,0,0,114,10,0,0,0,218,11,102, - 105,110,100,95,109,111,100,117,108,101,147,0,0,0,115,10, - 0,0,0,6,11,2,2,4,254,16,3,255,128,122,23,122, - 105,112,105,109,112,111,114,116,101,114,46,102,105,110,100,95, - 109,111,100,117,108,101,99,3,0,0,0,0,0,0,0,0, - 0,0,0,7,0,0,0,5,0,0,0,67,0,0,0,115, - 108,0,0,0,116,0,124,0,124,1,131,2,125,3,124,3, - 100,1,117,1,114,17,116,1,106,2,124,1,124,0,124,3, - 100,2,141,3,83,0,116,3,124,0,124,1,131,2,125,4, - 116,4,124,0,124,4,131,2,114,52,124,0,106,5,155,0, - 116,6,155,0,124,4,155,0,157,3,125,5,116,1,106,7, - 124,1,100,1,100,3,100,4,141,3,125,6,124,6,106,8, - 160,9,124,5,161,1,1,0,124,6,83,0,100,1,83,0, - 41,5,122,107,67,114,101,97,116,101,32,97,32,77,111,100, - 117,108,101,83,112,101,99,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,114, - 110,115,32,78,111,110,101,32,105,102,32,116,104,101,32,109, - 111,100,117,108,101,32,99,97,110,110,111,116,32,98,101,32, - 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,78, - 41,1,218,10,105,115,95,112,97,99,107,97,103,101,84,41, - 3,218,4,110,97,109,101,90,6,108,111,97,100,101,114,114, - 46,0,0,0,41,10,114,38,0,0,0,218,10,95,98,111, - 111,116,115,116,114,97,112,90,16,115,112,101,99,95,102,114, - 111,109,95,108,111,97,100,101,114,114,39,0,0,0,114,40, - 0,0,0,114,29,0,0,0,114,20,0,0,0,90,10,77, - 111,100,117,108,101,83,112,101,99,90,26,115,117,98,109,111, - 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, - 116,105,111,110,115,114,24,0,0,0,41,7,114,32,0,0, - 0,114,41,0,0,0,90,6,116,97,114,103,101,116,90,11, - 109,111,100,117,108,101,95,105,110,102,111,114,43,0,0,0, - 114,13,0,0,0,90,4,115,112,101,99,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,218,9,102,105,110,100, - 95,115,112,101,99,163,0,0,0,115,26,0,0,0,10,5, - 8,1,16,1,10,7,10,1,18,4,8,1,2,1,6,255, - 12,2,4,1,4,2,255,128,122,21,122,105,112,105,109,112, - 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 3,0,0,0,67,0,0,0,115,20,0,0,0,116,0,124, - 0,124,1,131,2,92,3,125,2,125,3,125,4,124,2,83, - 0,41,2,122,166,103,101,116,95,99,111,100,101,40,102,117, - 108,108,110,97,109,101,41,32,45,62,32,99,111,100,101,32, - 111,98,106,101,99,116,46,10,10,32,32,32,32,32,32,32, - 32,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 46,32,82,97,105,115,101,32,90,105,112,73,109,112,111,114, - 116,69,114,114,111,114,10,32,32,32,32,32,32,32,32,105, - 102,32,116,104,101,32,109,111,100,117,108,101,32,99,111,117, - 108,100,110,39,116,32,98,101,32,105,109,112,111,114,116,101, - 100,46,10,32,32,32,32,32,32,32,32,78,169,1,218,16, - 95,103,101,116,95,109,111,100,117,108,101,95,99,111,100,101, - 169,5,114,32,0,0,0,114,41,0,0,0,218,4,99,111, - 100,101,218,9,105,115,112,97,99,107,97,103,101,114,43,0, - 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,8,103,101,116,95,99,111,100,101,190,0,0,0,115, - 6,0,0,0,16,6,4,1,255,128,122,20,122,105,112,105, - 109,112,111,114,116,101,114,46,103,101,116,95,99,111,100,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,8,0,0,0,67,0,0,0,115,112,0,0,0,116,0, - 114,8,124,1,160,1,116,0,116,2,161,2,125,1,124,1, - 125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,1, - 114,29,124,1,116,5,124,0,106,4,116,2,23,0,131,1, - 100,1,133,2,25,0,125,2,122,7,124,0,106,6,124,2, - 25,0,125,3,87,0,110,12,4,0,116,7,121,55,1,0, - 1,0,1,0,116,8,100,2,100,3,124,2,131,3,130,1, - 116,9,124,0,106,4,124,3,131,2,83,0,119,0,41,4, - 122,154,103,101,116,95,100,97,116,97,40,112,97,116,104,110, - 97,109,101,41,32,45,62,32,115,116,114,105,110,103,32,119, - 105,116,104,32,102,105,108,101,32,100,97,116,97,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116, - 104,101,32,100,97,116,97,32,97,115,115,111,99,105,97,116, - 101,100,32,119,105,116,104,32,39,112,97,116,104,110,97,109, - 101,39,46,32,82,97,105,115,101,32,79,83,69,114,114,111, - 114,32,105,102,10,32,32,32,32,32,32,32,32,116,104,101, - 32,102,105,108,101,32,119,97,115,110,39,116,32,102,111,117, - 110,100,46,10,32,32,32,32,32,32,32,32,78,114,0,0, - 0,0,218,0,41,10,114,18,0,0,0,114,19,0,0,0, - 114,20,0,0,0,218,10,115,116,97,114,116,115,119,105,116, - 104,114,29,0,0,0,218,3,108,101,110,114,28,0,0,0, - 114,26,0,0,0,114,22,0,0,0,218,9,95,103,101,116, - 95,100,97,116,97,41,4,114,32,0,0,0,218,8,112,97, - 116,104,110,97,109,101,90,3,107,101,121,218,9,116,111,99, - 95,101,110,116,114,121,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,8,103,101,116,95,100,97,116,97,200, - 0,0,0,115,24,0,0,0,4,6,12,1,4,2,16,1, - 22,1,2,2,14,1,12,1,12,1,12,1,2,254,255,128, - 122,20,122,105,112,105,109,112,111,114,116,101,114,46,103,101, - 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115, - 20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2, - 125,3,125,4,124,4,83,0,41,2,122,165,103,101,116,95, - 102,105,108,101,110,97,109,101,40,102,117,108,108,110,97,109, - 101,41,32,45,62,32,102,105,108,101,110,97,109,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,32, - 82,101,116,117,114,110,32,116,104,101,32,102,105,108,101,110, - 97,109,101,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,32,111,114,32, - 114,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69, - 114,114,111,114,10,32,32,32,32,32,32,32,32,105,102,32, - 105,116,32,99,111,117,108,100,110,39,116,32,98,101,32,105, + 100,46,10,32,32,32,32,32,32,32,32,122,102,122,105,112, + 105,109,112,111,114,116,101,114,46,102,105,110,100,95,108,111, + 97,100,101,114,40,41,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,32,97,110,100,32,115,108,97,116,101,100,32, + 102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,80, + 121,116,104,111,110,32,51,46,49,50,59,32,117,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,78,41,8,218,9,95,119,97,114,110,105,110,103, + 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, + 116,105,111,110,87,97,114,110,105,110,103,218,16,95,103,101, + 116,95,109,111,100,117,108,101,95,105,110,102,111,218,16,95, + 103,101,116,95,109,111,100,117,108,101,95,112,97,116,104,218, + 7,95,105,115,95,100,105,114,114,29,0,0,0,114,20,0, + 0,0,41,5,114,32,0,0,0,218,8,102,117,108,108,110, + 97,109,101,114,13,0,0,0,218,2,109,105,218,7,109,111, + 100,112,97,116,104,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,218,11,102,105,110,100,95,108,111,97,100,101, + 114,110,0,0,0,115,20,0,0,0,6,12,2,2,4,254, + 10,3,8,1,8,2,10,7,10,1,24,4,8,2,122,23, + 122,105,112,105,109,112,111,114,116,101,114,46,102,105,110,100, + 95,108,111,97,100,101,114,99,3,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, + 115,28,0,0,0,116,0,160,1,100,1,116,2,161,2,1, + 0,124,0,160,3,124,1,124,2,161,2,100,2,25,0,83, + 0,41,4,97,203,1,0,0,102,105,110,100,95,109,111,100, + 117,108,101,40,102,117,108,108,110,97,109,101,44,32,112,97, + 116,104,61,78,111,110,101,41,32,45,62,32,115,101,108,102, + 32,111,114,32,78,111,110,101,46,10,10,32,32,32,32,32, + 32,32,32,83,101,97,114,99,104,32,102,111,114,32,97,32, + 109,111,100,117,108,101,32,115,112,101,99,105,102,105,101,100, + 32,98,121,32,39,102,117,108,108,110,97,109,101,39,46,32, + 39,102,117,108,108,110,97,109,101,39,32,109,117,115,116,32, + 98,101,32,116,104,101,10,32,32,32,32,32,32,32,32,102, + 117,108,108,121,32,113,117,97,108,105,102,105,101,100,32,40, + 100,111,116,116,101,100,41,32,109,111,100,117,108,101,32,110, + 97,109,101,46,32,73,116,32,114,101,116,117,114,110,115,32, + 116,104,101,32,122,105,112,105,109,112,111,114,116,101,114,10, + 32,32,32,32,32,32,32,32,105,110,115,116,97,110,99,101, + 32,105,116,115,101,108,102,32,105,102,32,116,104,101,32,109, + 111,100,117,108,101,32,119,97,115,32,102,111,117,110,100,44, + 32,111,114,32,78,111,110,101,32,105,102,32,105,116,32,119, + 97,115,110,39,116,46,10,32,32,32,32,32,32,32,32,84, + 104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,116, + 104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,105, + 103,110,111,114,101,100,32,45,45,32,105,116,39,115,32,116, + 104,101,114,101,32,102,111,114,32,99,111,109,112,97,116,105, + 98,105,108,105,116,121,10,32,32,32,32,32,32,32,32,119, + 105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,114, + 32,112,114,111,116,111,99,111,108,46,10,10,32,32,32,32, + 32,32,32,32,68,101,112,114,101,99,97,116,101,100,32,115, + 105,110,99,101,32,80,121,116,104,111,110,32,51,46,49,48, + 46,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,32,32,32,32,32, + 32,32,32,122,102,122,105,112,105,109,112,111,114,116,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,40,41,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, + 49,50,59,32,117,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,114,0,0,0,0, + 78,41,4,114,35,0,0,0,114,36,0,0,0,114,37,0, + 0,0,114,44,0,0,0,41,3,114,32,0,0,0,114,41, + 0,0,0,114,13,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,11,102,105,110,100,95,109,111, + 100,117,108,101,147,0,0,0,115,8,0,0,0,6,11,2, + 2,4,254,16,3,122,23,122,105,112,105,109,112,111,114,116, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,3, + 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5, + 0,0,0,67,0,0,0,115,108,0,0,0,116,0,124,0, + 124,1,131,2,125,3,124,3,100,1,117,1,114,17,116,1, + 106,2,124,1,124,0,124,3,100,2,141,3,83,0,116,3, + 124,0,124,1,131,2,125,4,116,4,124,0,124,4,131,2, + 114,52,124,0,106,5,155,0,116,6,155,0,124,4,155,0, + 157,3,125,5,116,1,106,7,124,1,100,1,100,3,100,4, + 141,3,125,6,124,6,106,8,160,9,124,5,161,1,1,0, + 124,6,83,0,100,1,83,0,41,5,122,107,67,114,101,97, + 116,101,32,97,32,77,111,100,117,108,101,83,112,101,99,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,116,117,114,110,115,32,78,111,110,101,32, + 105,102,32,116,104,101,32,109,111,100,117,108,101,32,99,97, + 110,110,111,116,32,98,101,32,102,111,117,110,100,46,10,32, + 32,32,32,32,32,32,32,78,41,1,218,10,105,115,95,112, + 97,99,107,97,103,101,84,41,3,218,4,110,97,109,101,90, + 6,108,111,97,100,101,114,114,46,0,0,0,41,10,114,38, + 0,0,0,218,10,95,98,111,111,116,115,116,114,97,112,90, + 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, + 114,114,39,0,0,0,114,40,0,0,0,114,29,0,0,0, + 114,20,0,0,0,90,10,77,111,100,117,108,101,83,112,101, + 99,90,26,115,117,98,109,111,100,117,108,101,95,115,101,97, + 114,99,104,95,108,111,99,97,116,105,111,110,115,114,24,0, + 0,0,41,7,114,32,0,0,0,114,41,0,0,0,90,6, + 116,97,114,103,101,116,90,11,109,111,100,117,108,101,95,105, + 110,102,111,114,43,0,0,0,114,13,0,0,0,90,4,115, + 112,101,99,114,9,0,0,0,114,9,0,0,0,114,10,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,163,0,0, + 0,115,24,0,0,0,10,5,8,1,16,1,10,7,10,1, + 18,4,8,1,2,1,6,255,12,2,4,1,4,2,122,21, + 122,105,112,105,109,112,111,114,116,101,114,46,102,105,110,100, + 95,115,112,101,99,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,3,0,0,0,67,0,0,0,115,20, + 0,0,0,116,0,124,0,124,1,131,2,92,3,125,2,125, + 3,125,4,124,2,83,0,41,2,122,166,103,101,116,95,99, + 111,100,101,40,102,117,108,108,110,97,109,101,41,32,45,62, + 32,99,111,100,101,32,111,98,106,101,99,116,46,10,10,32, + 32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,104, + 101,32,99,111,100,101,32,111,98,106,101,99,116,32,102,111, + 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,46,32,82,97,105,115,101,32,90,105, + 112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,32, + 32,32,32,32,32,105,102,32,116,104,101,32,109,111,100,117, + 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,105, 109,112,111,114,116,101,100,46,10,32,32,32,32,32,32,32, - 32,78,114,50,0,0,0,114,52,0,0,0,114,9,0,0, - 0,114,9,0,0,0,114,10,0,0,0,218,12,103,101,116, - 95,102,105,108,101,110,97,109,101,221,0,0,0,115,6,0, - 0,0,16,8,4,1,255,128,122,24,122,105,112,105,109,112, + 32,78,169,1,218,16,95,103,101,116,95,109,111,100,117,108, + 101,95,99,111,100,101,169,5,114,32,0,0,0,114,41,0, + 0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,107, + 97,103,101,114,43,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,8,103,101,116,95,99,111,100, + 101,190,0,0,0,115,4,0,0,0,16,6,4,1,122,20, + 122,105,112,105,109,112,111,114,116,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,8,0,0,0,67,0,0,0,115,112,0, + 0,0,116,0,114,8,124,1,160,1,116,0,116,2,161,2, + 125,1,124,1,125,2,124,1,160,3,124,0,106,4,116,2, + 23,0,161,1,114,29,124,1,116,5,124,0,106,4,116,2, + 23,0,131,1,100,1,133,2,25,0,125,2,122,7,124,0, + 106,6,124,2,25,0,125,3,87,0,110,12,4,0,116,7, + 121,55,1,0,1,0,1,0,116,8,100,2,100,3,124,2, + 131,3,130,1,116,9,124,0,106,4,124,3,131,2,83,0, + 119,0,41,4,122,154,103,101,116,95,100,97,116,97,40,112, + 97,116,104,110,97,109,101,41,32,45,62,32,115,116,114,105, + 110,103,32,119,105,116,104,32,102,105,108,101,32,100,97,116, + 97,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,32,116,104,101,32,100,97,116,97,32,97,115,115,111, + 99,105,97,116,101,100,32,119,105,116,104,32,39,112,97,116, + 104,110,97,109,101,39,46,32,82,97,105,115,101,32,79,83, + 69,114,114,111,114,32,105,102,10,32,32,32,32,32,32,32, + 32,116,104,101,32,102,105,108,101,32,119,97,115,110,39,116, + 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, + 78,114,0,0,0,0,218,0,41,10,114,18,0,0,0,114, + 19,0,0,0,114,20,0,0,0,218,10,115,116,97,114,116, + 115,119,105,116,104,114,29,0,0,0,218,3,108,101,110,114, + 28,0,0,0,114,26,0,0,0,114,22,0,0,0,218,9, + 95,103,101,116,95,100,97,116,97,41,4,114,32,0,0,0, + 218,8,112,97,116,104,110,97,109,101,90,3,107,101,121,218, + 9,116,111,99,95,101,110,116,114,121,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,100, + 97,116,97,200,0,0,0,115,22,0,0,0,4,6,12,1, + 4,2,16,1,22,1,2,2,14,1,12,1,12,1,12,1, + 2,254,122,20,122,105,112,105,109,112,111,114,116,101,114,46, + 103,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,3,0,0,0,67,0,0, + 0,115,20,0,0,0,116,0,124,0,124,1,131,2,92,3, + 125,2,125,3,125,4,124,4,83,0,41,2,122,165,103,101, + 116,95,102,105,108,101,110,97,109,101,40,102,117,108,108,110, + 97,109,101,41,32,45,62,32,102,105,108,101,110,97,109,101, + 32,115,116,114,105,110,103,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,32,116,104,101,32,102,105,108, + 101,110,97,109,101,32,102,111,114,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,111, + 114,32,114,97,105,115,101,32,90,105,112,73,109,112,111,114, + 116,69,114,114,111,114,10,32,32,32,32,32,32,32,32,105, + 102,32,105,116,32,99,111,117,108,100,110,39,116,32,98,101, + 32,105,109,112,111,114,116,101,100,46,10,32,32,32,32,32, + 32,32,32,78,114,50,0,0,0,114,52,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,12,103, + 101,116,95,102,105,108,101,110,97,109,101,221,0,0,0,115, + 4,0,0,0,16,8,4,1,122,24,122,105,112,105,109,112, 111,114,116,101,114,46,103,101,116,95,102,105,108,101,110,97, 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,6, 0,0,0,8,0,0,0,67,0,0,0,115,126,0,0,0, @@ -416,530 +415,528 @@ const unsigned char _Py_M__zipimport[] = { 114,42,0,0,0,114,13,0,0,0,218,8,102,117,108,108, 112,97,116,104,114,61,0,0,0,114,9,0,0,0,114,9, 0,0,0,114,10,0,0,0,218,10,103,101,116,95,115,111, - 117,114,99,101,233,0,0,0,115,28,0,0,0,10,7,8, + 117,114,99,101,233,0,0,0,115,26,0,0,0,10,7,8, 1,18,1,10,2,4,1,14,1,10,2,2,2,14,1,12, - 1,6,2,16,1,2,253,255,128,122,22,122,105,112,105,109, - 112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,99, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,4,0,0,0,67,0,0,0,115,40,0,0,0,116, - 0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114, - 18,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141, - 2,130,1,124,2,83,0,41,4,122,171,105,115,95,112,97, - 99,107,97,103,101,40,102,117,108,108,110,97,109,101,41,32, - 45,62,32,98,111,111,108,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,32,84,114,117,101,32,105,102, - 32,116,104,101,32,109,111,100,117,108,101,32,115,112,101,99, - 105,102,105,101,100,32,98,121,32,102,117,108,108,110,97,109, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,10, - 32,32,32,32,32,32,32,32,82,97,105,115,101,32,90,105, - 112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, - 116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100, - 110,39,116,32,98,101,32,102,111,117,110,100,46,10,32,32, - 32,32,32,32,32,32,78,114,64,0,0,0,114,65,0,0, - 0,41,2,114,38,0,0,0,114,3,0,0,0,41,3,114, - 32,0,0,0,114,41,0,0,0,114,42,0,0,0,114,9, - 0,0,0,114,9,0,0,0,114,10,0,0,0,114,46,0, - 0,0,3,1,0,0,115,10,0,0,0,10,6,8,1,18, - 1,4,1,255,128,122,22,122,105,112,105,109,112,111,114,116, - 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0, - 0,0,67,0,0,0,115,252,0,0,0,100,1,125,2,116, - 0,160,1,124,2,116,2,161,2,1,0,116,3,124,0,124, - 1,131,2,92,3,125,3,125,4,125,5,116,4,106,5,160, - 6,124,1,161,1,125,6,124,6,100,2,117,0,115,31,116, - 7,124,6,116,8,131,2,115,40,116,8,124,1,131,1,125, - 6,124,6,116,4,106,5,124,1,60,0,124,0,124,6,95, - 9,122,42,124,4,114,62,116,10,124,0,124,1,131,2,125, - 7,116,11,160,12,124,0,106,13,124,7,161,2,125,8,124, - 8,103,1,124,6,95,14,116,15,124,6,100,3,131,2,115, - 70,116,16,124,6,95,16,116,11,160,17,124,6,106,18,124, - 1,124,5,161,3,1,0,116,19,124,3,124,6,106,18,131, - 2,1,0,87,0,110,8,1,0,1,0,1,0,116,4,106, - 5,124,1,61,0,130,0,122,7,116,4,106,5,124,1,25, - 0,125,6,87,0,110,14,4,0,116,20,121,125,1,0,1, - 0,1,0,116,21,100,4,124,1,155,2,100,5,157,3,131, - 1,130,1,116,22,160,23,100,6,124,1,124,5,161,3,1, - 0,124,6,83,0,119,0,41,7,97,64,1,0,0,108,111, - 97,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97, - 109,101,41,32,45,62,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,76,111,97,100,32,116,104,101, - 32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,101, - 100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,46, - 32,39,102,117,108,108,110,97,109,101,39,32,109,117,115,116, - 32,98,101,32,116,104,101,10,32,32,32,32,32,32,32,32, - 102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,32, - 40,100,111,116,116,101,100,41,32,109,111,100,117,108,101,32, - 110,97,109,101,46,32,73,116,32,114,101,116,117,114,110,115, - 32,116,104,101,32,105,109,112,111,114,116,101,100,10,32,32, - 32,32,32,32,32,32,109,111,100,117,108,101,44,32,111,114, - 32,114,97,105,115,101,115,32,90,105,112,73,109,112,111,114, - 116,69,114,114,111,114,32,105,102,32,105,116,32,99,111,117, - 108,100,32,110,111,116,32,98,101,32,105,109,112,111,114,116, - 101,100,46,10,10,32,32,32,32,32,32,32,32,68,101,112, - 114,101,99,97,116,101,100,32,115,105,110,99,101,32,80,121, - 116,104,111,110,32,51,46,49,48,46,32,85,115,101,32,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,46,10,32,32,32,32,32,32,32,32,122,114, - 122,105,112,105,109,112,111,114,116,46,122,105,112,105,109,112, - 111,114,116,101,114,46,108,111,97,100,95,109,111,100,117,108, - 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, - 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, - 111,110,32,51,46,49,50,59,32,117,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, - 97,100,78,218,12,95,95,98,117,105,108,116,105,110,115,95, - 95,122,14,76,111,97,100,101,100,32,109,111,100,117,108,101, - 32,122,25,32,110,111,116,32,102,111,117,110,100,32,105,110, - 32,115,121,115,46,109,111,100,117,108,101,115,122,30,105,109, - 112,111,114,116,32,123,125,32,35,32,108,111,97,100,101,100, - 32,102,114,111,109,32,90,105,112,32,123,125,41,24,114,35, - 0,0,0,114,36,0,0,0,114,37,0,0,0,114,51,0, - 0,0,218,3,115,121,115,218,7,109,111,100,117,108,101,115, - 218,3,103,101,116,114,15,0,0,0,218,12,95,109,111,100, - 117,108,101,95,116,121,112,101,218,10,95,95,108,111,97,100, - 101,114,95,95,114,39,0,0,0,114,21,0,0,0,114,30, - 0,0,0,114,29,0,0,0,90,8,95,95,112,97,116,104, - 95,95,218,7,104,97,115,97,116,116,114,114,71,0,0,0, - 90,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, - 218,8,95,95,100,105,99,116,95,95,218,4,101,120,101,99, - 114,26,0,0,0,218,11,73,109,112,111,114,116,69,114,114, - 111,114,114,48,0,0,0,218,16,95,118,101,114,98,111,115, - 101,95,109,101,115,115,97,103,101,41,9,114,32,0,0,0, - 114,41,0,0,0,218,3,109,115,103,114,53,0,0,0,114, - 54,0,0,0,114,43,0,0,0,90,3,109,111,100,114,13, - 0,0,0,114,69,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,11,108,111,97,100,95,109,111, - 100,117,108,101,16,1,0,0,115,56,0,0,0,4,9,12, - 2,16,1,12,1,18,1,8,1,10,1,6,1,2,2,4, - 1,10,3,14,1,8,1,10,2,6,1,16,1,16,1,6, - 1,8,1,2,1,2,2,14,1,12,1,16,1,14,1,4, - 1,2,253,255,128,122,23,122,105,112,105,109,112,111,114,116, - 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, - 0,0,0,67,0,0,0,115,64,0,0,0,122,10,124,0, - 160,0,124,1,161,1,115,9,87,0,100,1,83,0,87,0, - 110,9,4,0,116,1,121,31,1,0,1,0,1,0,89,0, - 100,1,83,0,100,2,100,3,108,2,109,3,125,2,1,0, - 124,2,124,0,124,1,131,2,83,0,119,0,41,4,122,204, - 82,101,116,117,114,110,32,116,104,101,32,82,101,115,111,117, - 114,99,101,82,101,97,100,101,114,32,102,111,114,32,97,32, - 112,97,99,107,97,103,101,32,105,110,32,97,32,122,105,112, - 32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,32, - 73,102,32,39,102,117,108,108,110,97,109,101,39,32,105,115, - 32,97,32,112,97,99,107,97,103,101,32,119,105,116,104,105, - 110,32,116,104,101,32,122,105,112,32,102,105,108,101,44,32, - 114,101,116,117,114,110,32,116,104,101,10,32,32,32,32,32, - 32,32,32,39,82,101,115,111,117,114,99,101,82,101,97,100, - 101,114,39,32,111,98,106,101,99,116,32,102,111,114,32,116, - 104,101,32,112,97,99,107,97,103,101,46,32,32,79,116,104, - 101,114,119,105,115,101,32,114,101,116,117,114,110,32,78,111, - 110,101,46,10,32,32,32,32,32,32,32,32,78,114,0,0, - 0,0,41,1,218,9,90,105,112,82,101,97,100,101,114,41, - 4,114,46,0,0,0,114,3,0,0,0,90,17,105,109,112, - 111,114,116,108,105,98,46,114,101,97,100,101,114,115,114,84, - 0,0,0,41,3,114,32,0,0,0,114,41,0,0,0,114, - 84,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,99, - 101,95,114,101,97,100,101,114,59,1,0,0,115,20,0,0, - 0,2,6,10,1,6,1,4,255,12,2,6,1,12,1,10, - 1,2,253,255,128,122,31,122,105,112,105,109,112,111,114,116, - 101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95, - 114,101,97,100,101,114,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,8,0,0,0,67,0,0,0,115, - 72,0,0,0,122,15,116,0,124,0,106,1,131,1,124,0, - 95,2,124,0,106,2,116,3,124,0,106,1,60,0,87,0, - 100,1,83,0,4,0,116,4,121,35,1,0,1,0,1,0, - 116,3,160,5,124,0,106,1,100,1,161,2,1,0,100,1, - 124,0,95,2,89,0,100,1,83,0,119,0,41,2,122,41, - 82,101,108,111,97,100,32,116,104,101,32,102,105,108,101,32, - 100,97,116,97,32,111,102,32,116,104,101,32,97,114,99,104, - 105,118,101,32,112,97,116,104,46,78,41,6,114,27,0,0, - 0,114,29,0,0,0,114,28,0,0,0,114,25,0,0,0, - 114,3,0,0,0,218,3,112,111,112,169,1,114,32,0,0, - 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, - 104,101,115,74,1,0,0,115,16,0,0,0,2,2,12,1, - 18,1,12,1,14,1,12,1,2,254,255,128,122,29,122,105, - 112,105,109,112,111,114,116,101,114,46,105,110,118,97,108,105, - 100,97,116,101,95,99,97,99,104,101,115,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0, - 67,0,0,0,115,24,0,0,0,100,1,124,0,106,0,155, - 0,116,1,155,0,124,0,106,2,155,0,100,2,157,5,83, - 0,41,3,78,122,21,60,122,105,112,105,109,112,111,114,116, - 101,114,32,111,98,106,101,99,116,32,34,122,2,34,62,41, - 3,114,29,0,0,0,114,20,0,0,0,114,31,0,0,0, - 114,87,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,218,8,95,95,114,101,112,114,95,95,84,1, - 0,0,115,4,0,0,0,24,1,255,128,122,20,122,105,112, - 105,109,112,111,114,116,101,114,46,95,95,114,101,112,114,95, - 95,169,1,78,41,17,114,6,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,7,95,95,100,111,99,95,95,114,34, - 0,0,0,114,44,0,0,0,114,45,0,0,0,114,49,0, - 0,0,114,55,0,0,0,114,62,0,0,0,114,63,0,0, - 0,114,70,0,0,0,114,46,0,0,0,114,83,0,0,0, - 114,85,0,0,0,114,88,0,0,0,114,89,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,114,4,0,0,0,46,0,0,0,115,32,0,0, - 0,8,0,4,1,8,17,10,46,10,37,10,16,8,27,8, - 10,8,21,8,12,8,26,8,13,8,43,8,15,12,10,255, - 128,122,12,95,95,105,110,105,116,95,95,46,112,121,99,84, - 114,66,0,0,0,70,41,3,122,4,46,112,121,99,84,70, - 41,3,114,67,0,0,0,70,70,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,20,0,0,0,124,0,106,0,124,1,160,1,100, - 1,161,1,100,2,25,0,23,0,83,0,41,3,78,218,1, - 46,233,2,0,0,0,41,2,114,31,0,0,0,218,10,114, - 112,97,114,116,105,116,105,111,110,41,2,114,32,0,0,0, - 114,41,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,114,39,0,0,0,102,1,0,0,115,4,0, - 0,0,20,1,255,128,114,39,0,0,0,99,2,0,0,0, + 1,6,2,16,1,2,253,122,22,122,105,112,105,109,112,111, + 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,40,0,0,0,116,0,124, + 0,124,1,131,2,125,2,124,2,100,1,117,0,114,18,116, + 1,100,2,124,1,155,2,157,2,124,1,100,3,141,2,130, + 1,124,2,83,0,41,4,122,171,105,115,95,112,97,99,107, + 97,103,101,40,102,117,108,108,110,97,109,101,41,32,45,62, + 32,98,111,111,108,46,10,10,32,32,32,32,32,32,32,32, + 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116, + 104,101,32,109,111,100,117,108,101,32,115,112,101,99,105,102, + 105,101,100,32,98,121,32,102,117,108,108,110,97,109,101,32, + 105,115,32,97,32,112,97,99,107,97,103,101,46,10,32,32, + 32,32,32,32,32,32,82,97,105,115,101,32,90,105,112,73, + 109,112,111,114,116,69,114,114,111,114,32,105,102,32,116,104, + 101,32,109,111,100,117,108,101,32,99,111,117,108,100,110,39, + 116,32,98,101,32,102,111,117,110,100,46,10,32,32,32,32, + 32,32,32,32,78,114,64,0,0,0,114,65,0,0,0,41, + 2,114,38,0,0,0,114,3,0,0,0,41,3,114,32,0, + 0,0,114,41,0,0,0,114,42,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,46,0,0,0, + 3,1,0,0,115,8,0,0,0,10,6,8,1,18,1,4, + 1,122,22,122,105,112,105,109,112,111,114,116,101,114,46,105, + 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,9,0,0,0,8,0,0,0,67,0, + 0,0,115,252,0,0,0,100,1,125,2,116,0,160,1,124, + 2,116,2,161,2,1,0,116,3,124,0,124,1,131,2,92, + 3,125,3,125,4,125,5,116,4,106,5,160,6,124,1,161, + 1,125,6,124,6,100,2,117,0,115,31,116,7,124,6,116, + 8,131,2,115,40,116,8,124,1,131,1,125,6,124,6,116, + 4,106,5,124,1,60,0,124,0,124,6,95,9,122,42,124, + 4,114,62,116,10,124,0,124,1,131,2,125,7,116,11,160, + 12,124,0,106,13,124,7,161,2,125,8,124,8,103,1,124, + 6,95,14,116,15,124,6,100,3,131,2,115,70,116,16,124, + 6,95,16,116,11,160,17,124,6,106,18,124,1,124,5,161, + 3,1,0,116,19,124,3,124,6,106,18,131,2,1,0,87, + 0,110,8,1,0,1,0,1,0,116,4,106,5,124,1,61, + 0,130,0,122,7,116,4,106,5,124,1,25,0,125,6,87, + 0,110,14,4,0,116,20,121,125,1,0,1,0,1,0,116, + 21,100,4,124,1,155,2,100,5,157,3,131,1,130,1,116, + 22,160,23,100,6,124,1,124,5,161,3,1,0,124,6,83, + 0,119,0,41,7,97,64,1,0,0,108,111,97,100,95,109, + 111,100,117,108,101,40,102,117,108,108,110,97,109,101,41,32, + 45,62,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 32,32,32,32,76,111,97,100,32,116,104,101,32,109,111,100, + 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121, + 32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117, + 108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32, + 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108, + 121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116, + 116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101, + 46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101, + 32,105,109,112,111,114,116,101,100,10,32,32,32,32,32,32, + 32,32,109,111,100,117,108,101,44,32,111,114,32,114,97,105, + 115,101,115,32,90,105,112,73,109,112,111,114,116,69,114,114, + 111,114,32,105,102,32,105,116,32,99,111,117,108,100,32,110, + 111,116,32,98,101,32,105,109,112,111,114,116,101,100,46,10, + 10,32,32,32,32,32,32,32,32,68,101,112,114,101,99,97, + 116,101,100,32,115,105,110,99,101,32,80,121,116,104,111,110, + 32,51,46,49,48,46,32,85,115,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, + 46,10,32,32,32,32,32,32,32,32,122,114,122,105,112,105, + 109,112,111,114,116,46,122,105,112,105,109,112,111,114,116,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,40,41,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, + 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, + 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, + 46,49,50,59,32,117,115,101,32,101,120,101,99,95,109,111, + 100,117,108,101,40,41,32,105,110,115,116,101,97,100,78,218, + 12,95,95,98,117,105,108,116,105,110,115,95,95,122,14,76, + 111,97,100,101,100,32,109,111,100,117,108,101,32,122,25,32, + 110,111,116,32,102,111,117,110,100,32,105,110,32,115,121,115, + 46,109,111,100,117,108,101,115,122,30,105,109,112,111,114,116, + 32,123,125,32,35,32,108,111,97,100,101,100,32,102,114,111, + 109,32,90,105,112,32,123,125,41,24,114,35,0,0,0,114, + 36,0,0,0,114,37,0,0,0,114,51,0,0,0,218,3, + 115,121,115,218,7,109,111,100,117,108,101,115,218,3,103,101, + 116,114,15,0,0,0,218,12,95,109,111,100,117,108,101,95, + 116,121,112,101,218,10,95,95,108,111,97,100,101,114,95,95, + 114,39,0,0,0,114,21,0,0,0,114,30,0,0,0,114, + 29,0,0,0,90,8,95,95,112,97,116,104,95,95,218,7, + 104,97,115,97,116,116,114,114,71,0,0,0,90,14,95,102, + 105,120,95,117,112,95,109,111,100,117,108,101,218,8,95,95, + 100,105,99,116,95,95,218,4,101,120,101,99,114,26,0,0, + 0,218,11,73,109,112,111,114,116,69,114,114,111,114,114,48, + 0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,101, + 115,115,97,103,101,41,9,114,32,0,0,0,114,41,0,0, + 0,218,3,109,115,103,114,53,0,0,0,114,54,0,0,0, + 114,43,0,0,0,90,3,109,111,100,114,13,0,0,0,114, + 69,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, + 16,1,0,0,115,54,0,0,0,4,9,12,2,16,1,12, + 1,18,1,8,1,10,1,6,1,2,2,4,1,10,3,14, + 1,8,1,10,2,6,1,16,1,16,1,6,1,8,1,2, + 1,2,2,14,1,12,1,16,1,14,1,4,1,2,253,122, + 23,122,105,112,105,109,112,111,114,116,101,114,46,108,111,97, + 100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, + 0,115,64,0,0,0,122,10,124,0,160,0,124,1,161,1, + 115,9,87,0,100,1,83,0,87,0,110,9,4,0,116,1, + 121,31,1,0,1,0,1,0,89,0,100,1,83,0,100,2, + 100,3,108,2,109,3,125,2,1,0,124,2,124,0,124,1, + 131,2,83,0,119,0,41,4,122,204,82,101,116,117,114,110, + 32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97, + 100,101,114,32,102,111,114,32,97,32,112,97,99,107,97,103, + 101,32,105,110,32,97,32,122,105,112,32,102,105,108,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,39,102,117, + 108,108,110,97,109,101,39,32,105,115,32,97,32,112,97,99, + 107,97,103,101,32,119,105,116,104,105,110,32,116,104,101,32, + 122,105,112,32,102,105,108,101,44,32,114,101,116,117,114,110, + 32,116,104,101,10,32,32,32,32,32,32,32,32,39,82,101, + 115,111,117,114,99,101,82,101,97,100,101,114,39,32,111,98, + 106,101,99,116,32,102,111,114,32,116,104,101,32,112,97,99, + 107,97,103,101,46,32,32,79,116,104,101,114,119,105,115,101, + 32,114,101,116,117,114,110,32,78,111,110,101,46,10,32,32, + 32,32,32,32,32,32,78,114,0,0,0,0,41,1,218,9, + 90,105,112,82,101,97,100,101,114,41,4,114,46,0,0,0, + 114,3,0,0,0,90,17,105,109,112,111,114,116,108,105,98, + 46,114,101,97,100,101,114,115,114,84,0,0,0,41,3,114, + 32,0,0,0,114,41,0,0,0,114,84,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,19,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,59,1,0,0,115,18,0,0,0,2,6,10,1,6, + 1,4,255,12,2,6,1,12,1,10,1,2,253,122,31,122, + 105,112,105,109,112,111,114,116,101,114,46,103,101,116,95,114, + 101,115,111,117,114,99,101,95,114,101,97,100,101,114,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8, + 0,0,0,67,0,0,0,115,72,0,0,0,122,15,116,0, + 124,0,106,1,131,1,124,0,95,2,124,0,106,2,116,3, + 124,0,106,1,60,0,87,0,100,1,83,0,4,0,116,4, + 121,35,1,0,1,0,1,0,116,3,160,5,124,0,106,1, + 100,1,161,2,1,0,100,1,124,0,95,2,89,0,100,1, + 83,0,119,0,41,2,122,41,82,101,108,111,97,100,32,116, + 104,101,32,102,105,108,101,32,100,97,116,97,32,111,102,32, + 116,104,101,32,97,114,99,104,105,118,101,32,112,97,116,104, + 46,78,41,6,114,27,0,0,0,114,29,0,0,0,114,28, + 0,0,0,114,25,0,0,0,114,3,0,0,0,218,3,112, + 111,112,169,1,114,32,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,10,0,0,0,218,17,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,74,1,0,0,115, + 14,0,0,0,2,2,12,1,18,1,12,1,14,1,12,1, + 2,254,122,29,122,105,112,105,109,112,111,114,116,101,114,46, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,5,0,0,0,67,0,0,0,115,24,0,0,0,100, + 1,124,0,106,0,155,0,116,1,155,0,124,0,106,2,155, + 0,100,2,157,5,83,0,41,3,78,122,21,60,122,105,112, + 105,109,112,111,114,116,101,114,32,111,98,106,101,99,116,32, + 34,122,2,34,62,41,3,114,29,0,0,0,114,20,0,0, + 0,114,31,0,0,0,114,87,0,0,0,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,218,8,95,95,114,101, + 112,114,95,95,84,1,0,0,115,2,0,0,0,24,1,122, + 20,122,105,112,105,109,112,111,114,116,101,114,46,95,95,114, + 101,112,114,95,95,169,1,78,41,17,114,6,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,7,95,95,100,111,99, + 95,95,114,34,0,0,0,114,44,0,0,0,114,45,0,0, + 0,114,49,0,0,0,114,55,0,0,0,114,62,0,0,0, + 114,63,0,0,0,114,70,0,0,0,114,46,0,0,0,114, + 83,0,0,0,114,85,0,0,0,114,88,0,0,0,114,89, + 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,4,0,0,0,46,0,0,0, + 115,30,0,0,0,8,0,4,1,8,17,10,46,10,37,10, + 16,8,27,8,10,8,21,8,12,8,26,8,13,8,43,8, + 15,12,10,122,12,95,95,105,110,105,116,95,95,46,112,121, + 99,84,114,66,0,0,0,70,41,3,122,4,46,112,121,99, + 84,70,41,3,114,67,0,0,0,70,70,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 67,0,0,0,115,20,0,0,0,124,0,106,0,124,1,160, + 1,100,1,161,1,100,2,25,0,23,0,83,0,41,3,78, + 218,1,46,233,2,0,0,0,41,2,114,31,0,0,0,218, + 10,114,112,97,114,116,105,116,105,111,110,41,2,114,32,0, + 0,0,114,41,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,39,0,0,0,102,1,0,0,115, + 2,0,0,0,20,1,114,39,0,0,0,99,2,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, 67,0,0,0,115,18,0,0,0,124,1,116,0,23,0,125, 2,124,2,124,0,106,1,118,0,83,0,114,90,0,0,0, 41,2,114,20,0,0,0,114,28,0,0,0,41,3,114,32, 0,0,0,114,13,0,0,0,90,7,100,105,114,112,97,116, 104,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 114,40,0,0,0,106,1,0,0,115,6,0,0,0,8,4, - 10,2,255,128,114,40,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,7,0,0,0,4,0,0,0,67,0, - 0,0,115,56,0,0,0,116,0,124,0,124,1,131,2,125, - 2,116,1,68,0,93,18,92,3,125,3,125,4,125,5,124, - 2,124,3,23,0,125,6,124,6,124,0,106,2,118,0,114, - 25,124,5,2,0,1,0,83,0,113,7,100,0,83,0,114, - 90,0,0,0,41,3,114,39,0,0,0,218,16,95,122,105, - 112,95,115,101,97,114,99,104,111,114,100,101,114,114,28,0, - 0,0,41,7,114,32,0,0,0,114,41,0,0,0,114,13, - 0,0,0,218,6,115,117,102,102,105,120,218,10,105,115,98, - 121,116,101,99,111,100,101,114,54,0,0,0,114,69,0,0, - 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, - 114,38,0,0,0,115,1,0,0,115,16,0,0,0,10,1, - 14,1,8,1,10,1,8,1,2,255,4,2,255,128,114,38, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 26,0,0,0,9,0,0,0,67,0,0,0,115,226,4,0, - 0,122,7,116,0,160,1,124,0,161,1,125,1,87,0,110, - 16,4,0,116,2,144,2,121,112,1,0,1,0,1,0,116, - 3,100,1,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,1,144,2,143,60,1,0,122,18,124,1,160,4,116, - 5,11,0,100,3,161,2,1,0,124,1,160,6,161,0,125, - 2,124,1,160,7,116,5,161,1,125,3,87,0,110,16,4, - 0,116,2,144,2,121,111,1,0,1,0,1,0,116,3,100, - 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,116, - 8,124,3,131,1,116,5,107,3,114,78,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,124,3,100, - 0,100,5,133,2,25,0,116,9,107,3,114,201,122,12,124, - 1,160,4,100,6,100,3,161,2,1,0,124,1,160,6,161, - 0,125,4,87,0,110,16,4,0,116,2,144,2,121,110,1, + 114,40,0,0,0,106,1,0,0,115,4,0,0,0,8,4, + 10,2,114,40,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,4,0,0,0,67,0,0,0, + 115,56,0,0,0,116,0,124,0,124,1,131,2,125,2,116, + 1,68,0,93,18,92,3,125,3,125,4,125,5,124,2,124, + 3,23,0,125,6,124,6,124,0,106,2,118,0,114,25,124, + 5,2,0,1,0,83,0,113,7,100,0,83,0,114,90,0, + 0,0,41,3,114,39,0,0,0,218,16,95,122,105,112,95, + 115,101,97,114,99,104,111,114,100,101,114,114,28,0,0,0, + 41,7,114,32,0,0,0,114,41,0,0,0,114,13,0,0, + 0,218,6,115,117,102,102,105,120,218,10,105,115,98,121,116, + 101,99,111,100,101,114,54,0,0,0,114,69,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,38, + 0,0,0,115,1,0,0,115,14,0,0,0,10,1,14,1, + 8,1,10,1,8,1,2,255,4,2,114,38,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0, + 9,0,0,0,67,0,0,0,115,226,4,0,0,122,7,116, + 0,160,1,124,0,161,1,125,1,87,0,110,16,4,0,116, + 2,144,2,121,112,1,0,1,0,1,0,116,3,100,1,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,1,144, + 2,143,60,1,0,122,18,124,1,160,4,116,5,11,0,100, + 3,161,2,1,0,124,1,160,6,161,0,125,2,124,1,160, + 7,116,5,161,1,125,3,87,0,110,16,4,0,116,2,144, + 2,121,111,1,0,1,0,1,0,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,116,8,124,3,131, + 1,116,5,107,3,114,78,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,124,3,100,0,100,5,133, + 2,25,0,116,9,107,3,114,201,122,12,124,1,160,4,100, + 6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,87, + 0,110,16,4,0,116,2,144,2,121,110,1,0,1,0,1, + 0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,116,10,124,4,116,11,24,0,116,5,24,0,100, + 6,131,2,125,5,122,11,124,1,160,4,124,5,161,1,1, + 0,124,1,160,7,161,0,125,6,87,0,110,16,4,0,116, + 2,144,2,121,109,1,0,1,0,1,0,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,6,160, + 12,116,9,161,1,125,7,124,7,100,6,107,0,114,170,116, + 3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,130, + 1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,125, + 3,116,8,124,3,131,1,116,5,107,3,114,193,116,3,100, + 8,124,0,155,2,157,2,124,0,100,2,141,2,130,1,124, + 4,116,8,124,6,131,1,24,0,124,7,23,0,125,2,116, + 13,124,3,100,9,100,10,133,2,25,0,131,1,125,8,116, + 13,124,3,100,10,100,11,133,2,25,0,131,1,125,9,124, + 2,124,8,107,0,114,230,116,3,100,12,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,124,2,124,9,107,0,114, + 243,116,3,100,13,124,0,155,2,157,2,124,0,100,2,141, + 2,130,1,124,2,124,8,56,0,125,2,124,2,124,9,24, + 0,125,10,124,10,100,6,107,0,144,1,114,9,116,3,100, + 14,124,0,155,2,157,2,124,0,100,2,141,2,130,1,105, + 0,125,11,100,6,125,12,122,7,124,1,160,4,124,2,161, + 1,1,0,87,0,110,16,4,0,116,2,144,2,121,108,1, 0,1,0,1,0,116,3,100,4,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,116,10,124,4,116,11,24,0,116, - 5,24,0,100,6,131,2,125,5,122,11,124,1,160,4,124, - 5,161,1,1,0,124,1,160,7,161,0,125,6,87,0,110, - 16,4,0,116,2,144,2,121,109,1,0,1,0,1,0,116, - 3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,6,160,12,116,9,161,1,125,7,124,7,100,6,107, - 0,114,170,116,3,100,7,124,0,155,2,157,2,124,0,100, - 2,141,2,130,1,124,6,124,7,124,7,116,5,23,0,133, - 2,25,0,125,3,116,8,124,3,131,1,116,5,107,3,114, - 193,116,3,100,8,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,124,4,116,8,124,6,131,1,24,0,124,7,23, - 0,125,2,116,13,124,3,100,9,100,10,133,2,25,0,131, - 1,125,8,116,13,124,3,100,10,100,11,133,2,25,0,131, - 1,125,9,124,2,124,8,107,0,114,230,116,3,100,12,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,124, - 9,107,0,114,243,116,3,100,13,124,0,155,2,157,2,124, - 0,100,2,141,2,130,1,124,2,124,8,56,0,125,2,124, - 2,124,9,24,0,125,10,124,10,100,6,107,0,144,1,114, - 9,116,3,100,14,124,0,155,2,157,2,124,0,100,2,141, - 2,130,1,105,0,125,11,100,6,125,12,122,7,124,1,160, - 4,124,2,161,1,1,0,87,0,110,16,4,0,116,2,144, - 2,121,108,1,0,1,0,1,0,116,3,100,4,124,0,155, - 2,157,2,124,0,100,2,141,2,130,1,9,0,124,1,160, - 7,100,16,161,1,125,3,116,8,124,3,131,1,100,5,107, - 0,144,1,114,54,116,14,100,17,131,1,130,1,124,3,100, - 0,100,5,133,2,25,0,100,18,107,3,144,1,114,65,144, - 2,113,80,116,8,124,3,131,1,100,16,107,3,144,1,114, - 76,116,14,100,17,131,1,130,1,116,15,124,3,100,19,100, - 20,133,2,25,0,131,1,125,13,116,15,124,3,100,20,100, - 9,133,2,25,0,131,1,125,14,116,15,124,3,100,9,100, - 21,133,2,25,0,131,1,125,15,116,15,124,3,100,21,100, - 10,133,2,25,0,131,1,125,16,116,13,124,3,100,10,100, - 11,133,2,25,0,131,1,125,17,116,13,124,3,100,11,100, - 22,133,2,25,0,131,1,125,18,116,13,124,3,100,22,100, - 23,133,2,25,0,131,1,125,4,116,15,124,3,100,23,100, - 24,133,2,25,0,131,1,125,19,116,15,124,3,100,24,100, - 25,133,2,25,0,131,1,125,20,116,15,124,3,100,25,100, - 26,133,2,25,0,131,1,125,21,116,13,124,3,100,27,100, - 16,133,2,25,0,131,1,125,22,124,19,124,20,23,0,124, - 21,23,0,125,8,124,22,124,9,107,4,144,1,114,184,116, - 3,100,28,124,0,155,2,157,2,124,0,100,2,141,2,130, - 1,124,22,124,10,55,0,125,22,122,7,124,1,160,7,124, - 19,161,1,125,23,87,0,110,16,4,0,116,2,144,2,121, - 107,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,116,8,124,23,131,1,124, - 19,107,3,144,1,114,228,116,3,100,4,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,122,25,116,8,124,1,160, - 7,124,8,124,19,24,0,161,1,131,1,124,8,124,19,24, - 0,107,3,144,1,114,252,116,3,100,4,124,0,155,2,157, - 2,124,0,100,2,141,2,130,1,87,0,110,16,4,0,116, - 2,144,2,121,106,1,0,1,0,1,0,116,3,100,4,124, - 0,155,2,157,2,124,0,100,2,141,2,130,1,124,13,100, - 29,64,0,144,2,114,24,124,23,160,16,161,0,125,23,110, - 24,122,7,124,23,160,16,100,30,161,1,125,23,87,0,110, - 16,4,0,116,17,144,2,121,105,1,0,1,0,1,0,124, - 23,160,16,100,31,161,1,160,18,116,19,161,1,125,23,89, - 0,124,23,160,20,100,32,116,21,161,2,125,23,116,22,160, - 23,124,0,124,23,161,2,125,24,124,24,124,14,124,18,124, - 4,124,22,124,15,124,16,124,17,102,8,125,25,124,25,124, - 11,124,23,60,0,124,12,100,33,55,0,125,12,144,1,113, - 38,87,0,100,0,4,0,4,0,131,3,1,0,110,9,49, - 0,144,2,115,91,119,1,1,0,1,0,1,0,89,0,1, - 0,116,24,160,25,100,34,124,12,124,0,161,3,1,0,124, - 11,83,0,119,0,119,0,119,0,119,0,119,0,119,0,119, - 0,119,0,41,35,78,122,21,99,97,110,39,116,32,111,112, - 101,110,32,90,105,112,32,102,105,108,101,58,32,114,12,0, - 0,0,114,93,0,0,0,250,21,99,97,110,39,116,32,114, - 101,97,100,32,90,105,112,32,102,105,108,101,58,32,233,4, - 0,0,0,114,0,0,0,0,122,16,110,111,116,32,97,32, - 90,105,112,32,102,105,108,101,58,32,122,18,99,111,114,114, - 117,112,116,32,90,105,112,32,102,105,108,101,58,32,233,12, - 0,0,0,233,16,0,0,0,233,20,0,0,0,122,28,98, - 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, - 116,111,114,121,32,115,105,122,101,58,32,122,30,98,97,100, - 32,99,101,110,116,114,97,108,32,100,105,114,101,99,116,111, - 114,121,32,111,102,102,115,101,116,58,32,122,38,98,97,100, - 32,99,101,110,116,114,97,108,32,100,105,114,101,99,116,111, - 114,121,32,115,105,122,101,32,111,114,32,111,102,102,115,101, - 116,58,32,84,233,46,0,0,0,250,27,69,79,70,32,114, - 101,97,100,32,119,104,101,114,101,32,110,111,116,32,101,120, - 112,101,99,116,101,100,115,4,0,0,0,80,75,1,2,233, - 8,0,0,0,233,10,0,0,0,233,14,0,0,0,233,24, - 0,0,0,233,28,0,0,0,233,30,0,0,0,233,32,0, - 0,0,233,34,0,0,0,233,42,0,0,0,122,25,98,97, - 100,32,108,111,99,97,108,32,104,101,97,100,101,114,32,111, - 102,102,115,101,116,58,32,105,0,8,0,0,218,5,97,115, - 99,105,105,90,6,108,97,116,105,110,49,250,1,47,114,5, - 0,0,0,122,33,122,105,112,105,109,112,111,114,116,58,32, - 102,111,117,110,100,32,123,125,32,110,97,109,101,115,32,105, - 110,32,123,33,114,125,41,26,218,3,95,105,111,218,9,111, - 112,101,110,95,99,111,100,101,114,22,0,0,0,114,3,0, - 0,0,218,4,115,101,101,107,218,20,69,78,68,95,67,69, - 78,84,82,65,76,95,68,73,82,95,83,73,90,69,90,4, - 116,101,108,108,218,4,114,101,97,100,114,58,0,0,0,218, - 18,83,84,82,73,78,71,95,69,78,68,95,65,82,67,72, - 73,86,69,218,3,109,97,120,218,15,77,65,88,95,67,79, - 77,77,69,78,84,95,76,69,78,218,5,114,102,105,110,100, - 114,2,0,0,0,218,8,69,79,70,69,114,114,111,114,114, - 1,0,0,0,114,68,0,0,0,218,18,85,110,105,99,111, - 100,101,68,101,99,111,100,101,69,114,114,111,114,218,9,116, - 114,97,110,115,108,97,116,101,218,11,99,112,52,51,55,95, - 116,97,98,108,101,114,19,0,0,0,114,20,0,0,0,114, - 21,0,0,0,114,30,0,0,0,114,48,0,0,0,114,81, - 0,0,0,41,26,114,29,0,0,0,218,2,102,112,90,15, - 104,101,97,100,101,114,95,112,111,115,105,116,105,111,110,218, - 6,98,117,102,102,101,114,218,9,102,105,108,101,95,115,105, - 122,101,90,17,109,97,120,95,99,111,109,109,101,110,116,95, - 115,116,97,114,116,218,4,100,97,116,97,90,3,112,111,115, - 218,11,104,101,97,100,101,114,95,115,105,122,101,90,13,104, - 101,97,100,101,114,95,111,102,102,115,101,116,90,10,97,114, - 99,95,111,102,102,115,101,116,114,33,0,0,0,218,5,99, - 111,117,110,116,218,5,102,108,97,103,115,218,8,99,111,109, - 112,114,101,115,115,218,4,116,105,109,101,218,4,100,97,116, - 101,218,3,99,114,99,218,9,100,97,116,97,95,115,105,122, - 101,218,9,110,97,109,101,95,115,105,122,101,218,10,101,120, - 116,114,97,95,115,105,122,101,90,12,99,111,109,109,101,110, - 116,95,115,105,122,101,218,11,102,105,108,101,95,111,102,102, - 115,101,116,114,47,0,0,0,114,13,0,0,0,218,1,116, - 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,114, - 27,0,0,0,146,1,0,0,115,240,0,0,0,2,1,14, - 1,14,1,18,1,8,2,2,1,14,1,8,1,14,1,14, - 1,18,1,12,1,18,1,16,1,2,3,12,1,12,1,14, - 1,10,1,2,1,6,255,8,2,2,1,2,255,2,1,4, - 255,2,2,10,1,12,1,14,1,10,1,2,1,6,255,10, - 2,8,1,10,1,2,1,6,255,16,2,12,1,10,1,2, - 1,6,255,16,2,16,2,16,1,8,1,18,1,8,1,18, - 1,8,1,8,1,10,1,18,1,4,2,4,2,2,1,14, - 1,14,1,18,1,2,1,10,1,14,1,8,1,18,2,4, - 1,14,1,8,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,12,1,10,1,18, - 1,8,1,2,2,14,1,14,1,18,1,14,1,18,1,2, - 4,28,1,18,1,4,255,14,2,18,1,10,2,10,2,2, - 3,14,1,14,1,18,1,12,2,12,1,20,1,8,1,8, - 1,4,202,14,6,18,128,14,49,4,1,2,247,2,246,2, - 246,2,227,2,227,2,248,2,246,2,248,255,128,114,27,0, - 0,0,117,190,1,0,0,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,195,135,195,188,195,169,195,162,195, - 164,195,160,195,165,195,167,195,170,195,171,195,168,195,175,195, - 174,195,172,195,132,195,133,195,137,195,166,195,134,195,180,195, - 182,195,178,195,187,195,185,195,191,195,150,195,156,194,162,194, - 163,194,165,226,130,167,198,146,195,161,195,173,195,179,195,186, - 195,177,195,145,194,170,194,186,194,191,226,140,144,194,172,194, - 189,194,188,194,161,194,171,194,187,226,150,145,226,150,146,226, - 150,147,226,148,130,226,148,164,226,149,161,226,149,162,226,149, - 150,226,149,149,226,149,163,226,149,145,226,149,151,226,149,157, - 226,149,156,226,149,155,226,148,144,226,148,148,226,148,180,226, - 148,172,226,148,156,226,148,128,226,148,188,226,149,158,226,149, - 159,226,149,154,226,149,148,226,149,169,226,149,166,226,149,160, - 226,149,144,226,149,172,226,149,167,226,149,168,226,149,164,226, - 149,165,226,149,153,226,149,152,226,149,146,226,149,147,226,149, - 171,226,149,170,226,148,152,226,148,140,226,150,136,226,150,132, - 226,150,140,226,150,144,226,150,128,206,177,195,159,206,147,207, - 128,206,163,207,131,194,181,207,132,206,166,206,152,206,169,206, - 180,226,136,158,207,134,206,181,226,136,169,226,137,161,194,177, - 226,137,165,226,137,164,226,140,160,226,140,161,195,183,226,137, - 136,194,176,226,136,153,194,183,226,136,154,226,129,191,194,178, - 226,150,160,194,160,99,0,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,8,0,0,0,67,0,0,0,115,106, - 0,0,0,116,0,114,11,116,1,160,2,100,1,161,1,1, - 0,116,3,100,2,131,1,130,1,100,3,97,0,122,28,122, - 8,100,4,100,5,108,4,109,5,125,0,1,0,87,0,110, - 15,4,0,116,6,121,52,1,0,1,0,1,0,116,1,160, - 2,100,1,161,1,1,0,116,3,100,2,131,1,130,1,87, - 0,100,6,97,0,110,3,100,6,97,0,119,0,116,1,160, - 2,100,7,161,1,1,0,124,0,83,0,119,0,41,8,78, - 122,27,122,105,112,105,109,112,111,114,116,58,32,122,108,105, - 98,32,85,78,65,86,65,73,76,65,66,76,69,250,41,99, - 97,110,39,116,32,100,101,99,111,109,112,114,101,115,115,32, - 100,97,116,97,59,32,122,108,105,98,32,110,111,116,32,97, - 118,97,105,108,97,98,108,101,84,114,0,0,0,0,169,1, - 218,10,100,101,99,111,109,112,114,101,115,115,70,122,25,122, - 105,112,105,109,112,111,114,116,58,32,122,108,105,98,32,97, - 118,97,105,108,97,98,108,101,41,7,218,15,95,105,109,112, - 111,114,116,105,110,103,95,122,108,105,98,114,48,0,0,0, - 114,81,0,0,0,114,3,0,0,0,90,4,122,108,105,98, - 114,147,0,0,0,218,9,69,120,99,101,112,116,105,111,110, - 114,146,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,218,20,95,103,101,116,95,100,101,99,111,109, - 112,114,101,115,115,95,102,117,110,99,48,2,0,0,115,30, - 0,0,0,4,2,10,3,8,1,4,2,4,1,16,1,12, - 1,10,1,8,1,2,253,12,5,10,2,4,1,2,249,255, - 128,114,150,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,17,0,0,0,9,0,0,0,67,0,0,0,115, - 120,1,0,0,124,1,92,8,125,2,125,3,125,4,125,5, - 125,6,125,7,125,8,125,9,124,4,100,1,107,0,114,18, - 116,0,100,2,131,1,130,1,116,1,160,2,124,0,161,1, - 143,127,125,10,122,7,124,10,160,3,124,6,161,1,1,0, - 87,0,110,15,4,0,116,4,121,187,1,0,1,0,1,0, - 116,0,100,3,124,0,155,2,157,2,124,0,100,4,141,2, - 130,1,124,10,160,5,100,5,161,1,125,11,116,6,124,11, - 131,1,100,5,107,3,114,62,116,7,100,6,131,1,130,1, - 124,11,100,0,100,7,133,2,25,0,100,8,107,3,114,79, - 116,0,100,9,124,0,155,2,157,2,124,0,100,4,141,2, - 130,1,116,8,124,11,100,10,100,11,133,2,25,0,131,1, - 125,12,116,8,124,11,100,11,100,5,133,2,25,0,131,1, - 125,13,100,5,124,12,23,0,124,13,23,0,125,14,124,6, - 124,14,55,0,125,6,122,7,124,10,160,3,124,6,161,1, - 1,0,87,0,110,15,4,0,116,4,121,186,1,0,1,0, - 1,0,116,0,100,3,124,0,155,2,157,2,124,0,100,4, - 141,2,130,1,124,10,160,5,124,4,161,1,125,15,116,6, - 124,15,131,1,124,4,107,3,114,143,116,4,100,12,131,1, - 130,1,87,0,100,0,4,0,4,0,131,3,1,0,110,8, - 49,0,115,153,119,1,1,0,1,0,1,0,89,0,1,0, - 124,3,100,1,107,2,114,164,124,15,83,0,122,5,116,9, - 131,0,125,16,87,0,110,10,4,0,116,10,121,185,1,0, - 1,0,1,0,116,0,100,13,131,1,130,1,124,16,124,15, - 100,14,131,2,83,0,119,0,119,0,119,0,41,15,78,114, - 0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100, - 97,116,97,32,115,105,122,101,114,98,0,0,0,114,12,0, - 0,0,114,110,0,0,0,114,104,0,0,0,114,99,0,0, - 0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32, - 108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101, - 114,58,32,233,26,0,0,0,114,109,0,0,0,122,26,122, - 105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32, - 114,101,97,100,32,100,97,116,97,114,145,0,0,0,105,241, - 255,255,255,41,11,114,3,0,0,0,114,116,0,0,0,114, - 117,0,0,0,114,118,0,0,0,114,22,0,0,0,114,120, - 0,0,0,114,58,0,0,0,114,125,0,0,0,114,1,0, - 0,0,114,150,0,0,0,114,149,0,0,0,41,17,114,29, - 0,0,0,114,61,0,0,0,90,8,100,97,116,97,112,97, - 116,104,114,136,0,0,0,114,140,0,0,0,114,131,0,0, - 0,114,143,0,0,0,114,137,0,0,0,114,138,0,0,0, - 114,139,0,0,0,114,129,0,0,0,114,130,0,0,0,114, - 141,0,0,0,114,142,0,0,0,114,133,0,0,0,90,8, - 114,97,119,95,100,97,116,97,114,147,0,0,0,114,9,0, - 0,0,114,9,0,0,0,114,10,0,0,0,114,59,0,0, - 0,69,2,0,0,115,74,0,0,0,20,1,8,1,8,1, - 12,2,2,2,14,1,12,1,18,1,10,1,12,1,8,1, - 16,2,18,2,16,2,16,1,12,1,8,1,2,1,14,1, - 12,1,18,1,10,1,12,1,8,1,14,255,16,128,8,3, - 4,2,2,3,10,1,12,1,8,1,10,1,2,254,2,243, - 2,240,255,128,114,59,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,16,0,0,0,116,0,124,0,124,1,24,0,131, - 1,100,1,107,1,83,0,41,2,78,114,5,0,0,0,41, - 1,218,3,97,98,115,41,2,90,2,116,49,90,2,116,50, - 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, - 9,95,101,113,95,109,116,105,109,101,115,2,0,0,115,4, - 0,0,0,16,2,255,128,114,153,0,0,0,99,5,0,0, - 0,0,0,0,0,0,0,0,0,14,0,0,0,6,0,0, - 0,67,0,0,0,115,254,0,0,0,124,3,124,2,100,1, - 156,2,125,5,116,0,160,1,124,4,124,3,124,5,161,3, - 125,6,124,6,100,2,64,0,100,3,107,3,125,7,124,7, - 114,63,124,6,100,4,64,0,100,3,107,3,125,8,116,2, - 106,3,100,5,107,3,114,62,124,8,115,38,116,2,106,3, - 100,6,107,2,114,62,116,4,124,0,124,2,131,2,125,9, - 124,9,100,0,117,1,114,62,116,2,160,5,116,0,106,6, - 124,9,161,2,125,10,116,0,160,7,124,4,124,10,124,3, - 124,5,161,4,1,0,110,40,116,8,124,0,124,2,131,2, - 92,2,125,11,125,12,124,11,114,103,116,9,116,10,124,4, - 100,7,100,8,133,2,25,0,131,1,124,11,131,2,114,93, - 116,10,124,4,100,8,100,9,133,2,25,0,131,1,124,12, - 107,3,114,103,116,11,160,12,100,10,124,3,155,2,157,2, - 161,1,1,0,100,0,83,0,116,13,160,14,124,4,100,9, - 100,0,133,2,25,0,161,1,125,13,116,15,124,13,116,16, - 131,2,115,125,116,17,100,11,124,1,155,2,100,12,157,3, - 131,1,130,1,124,13,83,0,41,13,78,41,2,114,47,0, - 0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0, - 0,114,93,0,0,0,90,5,110,101,118,101,114,90,6,97, - 108,119,97,121,115,114,105,0,0,0,114,100,0,0,0,114, - 101,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111, - 109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21, - 32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111, - 98,106,101,99,116,41,18,114,21,0,0,0,90,13,95,99, - 108,97,115,115,105,102,121,95,112,121,99,218,4,95,105,109, - 112,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97, - 115,101,100,95,112,121,99,115,218,15,95,103,101,116,95,112, - 121,99,95,115,111,117,114,99,101,218,11,115,111,117,114,99, - 101,95,104,97,115,104,90,17,95,82,65,87,95,77,65,71, - 73,67,95,78,85,77,66,69,82,90,18,95,118,97,108,105, - 100,97,116,101,95,104,97,115,104,95,112,121,99,218,29,95, - 103,101,116,95,109,116,105,109,101,95,97,110,100,95,115,105, - 122,101,95,111,102,95,115,111,117,114,99,101,114,153,0,0, - 0,114,2,0,0,0,114,48,0,0,0,114,81,0,0,0, - 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, - 114,15,0,0,0,218,10,95,99,111,100,101,95,116,121,112, - 101,218,9,84,121,112,101,69,114,114,111,114,41,14,114,32, - 0,0,0,114,60,0,0,0,114,69,0,0,0,114,41,0, - 0,0,114,132,0,0,0,90,11,101,120,99,95,100,101,116, - 97,105,108,115,114,135,0,0,0,90,10,104,97,115,104,95, - 98,97,115,101,100,90,12,99,104,101,99,107,95,115,111,117, - 114,99,101,90,12,115,111,117,114,99,101,95,98,121,116,101, - 115,114,156,0,0,0,90,12,115,111,117,114,99,101,95,109, - 116,105,109,101,90,11,115,111,117,114,99,101,95,115,105,122, - 101,114,53,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,15,95,117,110,109,97,114,115,104,97, - 108,95,99,111,100,101,123,2,0,0,115,74,0,0,0,2, - 2,2,1,6,254,14,5,12,2,4,1,12,1,10,1,2, - 1,2,255,8,1,2,255,10,2,8,1,4,1,4,1,2, - 1,4,254,4,5,8,1,4,255,2,128,8,4,6,255,4, - 3,22,3,18,1,2,255,4,2,8,1,4,255,4,2,18, - 2,10,1,16,1,4,1,255,128,114,161,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,67,0,0,0,115,28,0,0,0,124,0,160,0, - 100,1,100,2,161,2,125,0,124,0,160,0,100,3,100,2, - 161,2,125,0,124,0,83,0,41,4,78,115,2,0,0,0, - 13,10,243,1,0,0,0,10,243,1,0,0,0,13,41,1, - 114,19,0,0,0,41,1,218,6,115,111,117,114,99,101,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,23, - 95,110,111,114,109,97,108,105,122,101,95,108,105,110,101,95, - 101,110,100,105,110,103,115,168,2,0,0,115,8,0,0,0, - 12,1,12,1,4,1,255,128,114,165,0,0,0,99,2,0, + 0,100,2,141,2,130,1,9,0,124,1,160,7,100,16,161, + 1,125,3,116,8,124,3,131,1,100,5,107,0,144,1,114, + 54,116,14,100,17,131,1,130,1,124,3,100,0,100,5,133, + 2,25,0,100,18,107,3,144,1,114,65,144,2,113,80,116, + 8,124,3,131,1,100,16,107,3,144,1,114,76,116,14,100, + 17,131,1,130,1,116,15,124,3,100,19,100,20,133,2,25, + 0,131,1,125,13,116,15,124,3,100,20,100,9,133,2,25, + 0,131,1,125,14,116,15,124,3,100,9,100,21,133,2,25, + 0,131,1,125,15,116,15,124,3,100,21,100,10,133,2,25, + 0,131,1,125,16,116,13,124,3,100,10,100,11,133,2,25, + 0,131,1,125,17,116,13,124,3,100,11,100,22,133,2,25, + 0,131,1,125,18,116,13,124,3,100,22,100,23,133,2,25, + 0,131,1,125,4,116,15,124,3,100,23,100,24,133,2,25, + 0,131,1,125,19,116,15,124,3,100,24,100,25,133,2,25, + 0,131,1,125,20,116,15,124,3,100,25,100,26,133,2,25, + 0,131,1,125,21,116,13,124,3,100,27,100,16,133,2,25, + 0,131,1,125,22,124,19,124,20,23,0,124,21,23,0,125, + 8,124,22,124,9,107,4,144,1,114,184,116,3,100,28,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,124,22,124, + 10,55,0,125,22,122,7,124,1,160,7,124,19,161,1,125, + 23,87,0,110,16,4,0,116,2,144,2,121,107,1,0,1, + 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,116,8,124,23,131,1,124,19,107,3,144, + 1,114,228,116,3,100,4,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,122,25,116,8,124,1,160,7,124,8,124, + 19,24,0,161,1,131,1,124,8,124,19,24,0,107,3,144, + 1,114,252,116,3,100,4,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,87,0,110,16,4,0,116,2,144,2,121, + 106,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,124,13,100,29,64,0,144, + 2,114,24,124,23,160,16,161,0,125,23,110,24,122,7,124, + 23,160,16,100,30,161,1,125,23,87,0,110,16,4,0,116, + 17,144,2,121,105,1,0,1,0,1,0,124,23,160,16,100, + 31,161,1,160,18,116,19,161,1,125,23,89,0,124,23,160, + 20,100,32,116,21,161,2,125,23,116,22,160,23,124,0,124, + 23,161,2,125,24,124,24,124,14,124,18,124,4,124,22,124, + 15,124,16,124,17,102,8,125,25,124,25,124,11,124,23,60, + 0,124,12,100,33,55,0,125,12,144,1,113,38,87,0,100, + 0,4,0,4,0,131,3,1,0,110,9,49,0,144,2,115, + 91,119,1,1,0,1,0,1,0,89,0,1,0,116,24,160, + 25,100,34,124,12,124,0,161,3,1,0,124,11,83,0,119, + 0,119,0,119,0,119,0,119,0,119,0,119,0,119,0,41, + 35,78,122,21,99,97,110,39,116,32,111,112,101,110,32,90, + 105,112,32,102,105,108,101,58,32,114,12,0,0,0,114,93, + 0,0,0,250,21,99,97,110,39,116,32,114,101,97,100,32, + 90,105,112,32,102,105,108,101,58,32,233,4,0,0,0,114, + 0,0,0,0,122,16,110,111,116,32,97,32,90,105,112,32, + 102,105,108,101,58,32,122,18,99,111,114,114,117,112,116,32, + 90,105,112,32,102,105,108,101,58,32,233,12,0,0,0,233, + 16,0,0,0,233,20,0,0,0,122,28,98,97,100,32,99, + 101,110,116,114,97,108,32,100,105,114,101,99,116,111,114,121, + 32,115,105,122,101,58,32,122,30,98,97,100,32,99,101,110, + 116,114,97,108,32,100,105,114,101,99,116,111,114,121,32,111, + 102,102,115,101,116,58,32,122,38,98,97,100,32,99,101,110, + 116,114,97,108,32,100,105,114,101,99,116,111,114,121,32,115, + 105,122,101,32,111,114,32,111,102,102,115,101,116,58,32,84, + 233,46,0,0,0,250,27,69,79,70,32,114,101,97,100,32, + 119,104,101,114,101,32,110,111,116,32,101,120,112,101,99,116, + 101,100,115,4,0,0,0,80,75,1,2,233,8,0,0,0, + 233,10,0,0,0,233,14,0,0,0,233,24,0,0,0,233, + 28,0,0,0,233,30,0,0,0,233,32,0,0,0,233,34, + 0,0,0,233,42,0,0,0,122,25,98,97,100,32,108,111, + 99,97,108,32,104,101,97,100,101,114,32,111,102,102,115,101, + 116,58,32,105,0,8,0,0,218,5,97,115,99,105,105,90, + 6,108,97,116,105,110,49,250,1,47,114,5,0,0,0,122, + 33,122,105,112,105,109,112,111,114,116,58,32,102,111,117,110, + 100,32,123,125,32,110,97,109,101,115,32,105,110,32,123,33, + 114,125,41,26,218,3,95,105,111,218,9,111,112,101,110,95, + 99,111,100,101,114,22,0,0,0,114,3,0,0,0,218,4, + 115,101,101,107,218,20,69,78,68,95,67,69,78,84,82,65, + 76,95,68,73,82,95,83,73,90,69,90,4,116,101,108,108, + 218,4,114,101,97,100,114,58,0,0,0,218,18,83,84,82, + 73,78,71,95,69,78,68,95,65,82,67,72,73,86,69,218, + 3,109,97,120,218,15,77,65,88,95,67,79,77,77,69,78, + 84,95,76,69,78,218,5,114,102,105,110,100,114,2,0,0, + 0,218,8,69,79,70,69,114,114,111,114,114,1,0,0,0, + 114,68,0,0,0,218,18,85,110,105,99,111,100,101,68,101, + 99,111,100,101,69,114,114,111,114,218,9,116,114,97,110,115, + 108,97,116,101,218,11,99,112,52,51,55,95,116,97,98,108, + 101,114,19,0,0,0,114,20,0,0,0,114,21,0,0,0, + 114,30,0,0,0,114,48,0,0,0,114,81,0,0,0,41, + 26,114,29,0,0,0,218,2,102,112,90,15,104,101,97,100, + 101,114,95,112,111,115,105,116,105,111,110,218,6,98,117,102, + 102,101,114,218,9,102,105,108,101,95,115,105,122,101,90,17, + 109,97,120,95,99,111,109,109,101,110,116,95,115,116,97,114, + 116,218,4,100,97,116,97,90,3,112,111,115,218,11,104,101, + 97,100,101,114,95,115,105,122,101,90,13,104,101,97,100,101, + 114,95,111,102,102,115,101,116,90,10,97,114,99,95,111,102, + 102,115,101,116,114,33,0,0,0,218,5,99,111,117,110,116, + 218,5,102,108,97,103,115,218,8,99,111,109,112,114,101,115, + 115,218,4,116,105,109,101,218,4,100,97,116,101,218,3,99, + 114,99,218,9,100,97,116,97,95,115,105,122,101,218,9,110, + 97,109,101,95,115,105,122,101,218,10,101,120,116,114,97,95, + 115,105,122,101,90,12,99,111,109,109,101,110,116,95,115,105, + 122,101,218,11,102,105,108,101,95,111,102,102,115,101,116,114, + 47,0,0,0,114,13,0,0,0,218,1,116,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,27,0,0,0, + 146,1,0,0,115,238,0,0,0,2,1,14,1,14,1,18, + 1,8,2,2,1,14,1,8,1,14,1,14,1,18,1,12, + 1,18,1,16,1,2,3,12,1,12,1,14,1,10,1,2, + 1,6,255,8,2,2,1,2,255,2,1,4,255,2,2,10, + 1,12,1,14,1,10,1,2,1,6,255,10,2,8,1,10, + 1,2,1,6,255,16,2,12,1,10,1,2,1,6,255,16, + 2,16,2,16,1,8,1,18,1,8,1,18,1,8,1,8, + 1,10,1,18,1,4,2,4,2,2,1,14,1,14,1,18, + 1,2,1,10,1,14,1,8,1,18,2,4,1,14,1,8, + 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,12,1,10,1,18,1,8,1,2, + 2,14,1,14,1,18,1,14,1,18,1,2,4,28,1,18, + 1,4,255,14,2,18,1,10,2,10,2,2,3,14,1,14, + 1,18,1,12,2,12,1,20,1,8,1,8,1,4,202,14, + 6,18,128,14,49,4,1,2,247,2,246,2,246,2,227,2, + 227,2,248,2,246,2,248,114,27,0,0,0,117,190,1,0, + 0,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,195,135,195,188,195,169,195,162,195,164,195,160,195,165,195, + 167,195,170,195,171,195,168,195,175,195,174,195,172,195,132,195, + 133,195,137,195,166,195,134,195,180,195,182,195,178,195,187,195, + 185,195,191,195,150,195,156,194,162,194,163,194,165,226,130,167, + 198,146,195,161,195,173,195,179,195,186,195,177,195,145,194,170, + 194,186,194,191,226,140,144,194,172,194,189,194,188,194,161,194, + 171,194,187,226,150,145,226,150,146,226,150,147,226,148,130,226, + 148,164,226,149,161,226,149,162,226,149,150,226,149,149,226,149, + 163,226,149,145,226,149,151,226,149,157,226,149,156,226,149,155, + 226,148,144,226,148,148,226,148,180,226,148,172,226,148,156,226, + 148,128,226,148,188,226,149,158,226,149,159,226,149,154,226,149, + 148,226,149,169,226,149,166,226,149,160,226,149,144,226,149,172, + 226,149,167,226,149,168,226,149,164,226,149,165,226,149,153,226, + 149,152,226,149,146,226,149,147,226,149,171,226,149,170,226,148, + 152,226,148,140,226,150,136,226,150,132,226,150,140,226,150,144, + 226,150,128,206,177,195,159,206,147,207,128,206,163,207,131,194, + 181,207,132,206,166,206,152,206,169,206,180,226,136,158,207,134, + 206,181,226,136,169,226,137,161,194,177,226,137,165,226,137,164, + 226,140,160,226,140,161,195,183,226,137,136,194,176,226,136,153, + 194,183,226,136,154,226,129,191,194,178,226,150,160,194,160,99, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 8,0,0,0,67,0,0,0,115,106,0,0,0,116,0,114, + 11,116,1,160,2,100,1,161,1,1,0,116,3,100,2,131, + 1,130,1,100,3,97,0,122,28,122,8,100,4,100,5,108, + 4,109,5,125,0,1,0,87,0,110,15,4,0,116,6,121, + 52,1,0,1,0,1,0,116,1,160,2,100,1,161,1,1, + 0,116,3,100,2,131,1,130,1,87,0,100,6,97,0,110, + 3,100,6,97,0,119,0,116,1,160,2,100,7,161,1,1, + 0,124,0,83,0,119,0,41,8,78,122,27,122,105,112,105, + 109,112,111,114,116,58,32,122,108,105,98,32,85,78,65,86, + 65,73,76,65,66,76,69,250,41,99,97,110,39,116,32,100, + 101,99,111,109,112,114,101,115,115,32,100,97,116,97,59,32, + 122,108,105,98,32,110,111,116,32,97,118,97,105,108,97,98, + 108,101,84,114,0,0,0,0,169,1,218,10,100,101,99,111, + 109,112,114,101,115,115,70,122,25,122,105,112,105,109,112,111, + 114,116,58,32,122,108,105,98,32,97,118,97,105,108,97,98, + 108,101,41,7,218,15,95,105,109,112,111,114,116,105,110,103, + 95,122,108,105,98,114,48,0,0,0,114,81,0,0,0,114, + 3,0,0,0,90,4,122,108,105,98,114,147,0,0,0,218, + 9,69,120,99,101,112,116,105,111,110,114,146,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,20, + 95,103,101,116,95,100,101,99,111,109,112,114,101,115,115,95, + 102,117,110,99,48,2,0,0,115,28,0,0,0,4,2,10, + 3,8,1,4,2,4,1,16,1,12,1,10,1,8,1,2, + 253,12,5,10,2,4,1,2,249,114,150,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9, + 0,0,0,67,0,0,0,115,120,1,0,0,124,1,92,8, + 125,2,125,3,125,4,125,5,125,6,125,7,125,8,125,9, + 124,4,100,1,107,0,114,18,116,0,100,2,131,1,130,1, + 116,1,160,2,124,0,161,1,143,127,125,10,122,7,124,10, + 160,3,124,6,161,1,1,0,87,0,110,15,4,0,116,4, + 121,187,1,0,1,0,1,0,116,0,100,3,124,0,155,2, + 157,2,124,0,100,4,141,2,130,1,124,10,160,5,100,5, + 161,1,125,11,116,6,124,11,131,1,100,5,107,3,114,62, + 116,7,100,6,131,1,130,1,124,11,100,0,100,7,133,2, + 25,0,100,8,107,3,114,79,116,0,100,9,124,0,155,2, + 157,2,124,0,100,4,141,2,130,1,116,8,124,11,100,10, + 100,11,133,2,25,0,131,1,125,12,116,8,124,11,100,11, + 100,5,133,2,25,0,131,1,125,13,100,5,124,12,23,0, + 124,13,23,0,125,14,124,6,124,14,55,0,125,6,122,7, + 124,10,160,3,124,6,161,1,1,0,87,0,110,15,4,0, + 116,4,121,186,1,0,1,0,1,0,116,0,100,3,124,0, + 155,2,157,2,124,0,100,4,141,2,130,1,124,10,160,5, + 124,4,161,1,125,15,116,6,124,15,131,1,124,4,107,3, + 114,143,116,4,100,12,131,1,130,1,87,0,100,0,4,0, + 4,0,131,3,1,0,110,8,49,0,115,153,119,1,1,0, + 1,0,1,0,89,0,1,0,124,3,100,1,107,2,114,164, + 124,15,83,0,122,5,116,9,131,0,125,16,87,0,110,10, + 4,0,116,10,121,185,1,0,1,0,1,0,116,0,100,13, + 131,1,130,1,124,16,124,15,100,14,131,2,83,0,119,0, + 119,0,119,0,41,15,78,114,0,0,0,0,122,18,110,101, + 103,97,116,105,118,101,32,100,97,116,97,32,115,105,122,101, + 114,98,0,0,0,114,12,0,0,0,114,110,0,0,0,114, + 104,0,0,0,114,99,0,0,0,115,4,0,0,0,80,75, + 3,4,122,23,98,97,100,32,108,111,99,97,108,32,102,105, + 108,101,32,104,101,97,100,101,114,58,32,233,26,0,0,0, + 114,109,0,0,0,122,26,122,105,112,105,109,112,111,114,116, + 58,32,99,97,110,39,116,32,114,101,97,100,32,100,97,116, + 97,114,145,0,0,0,105,241,255,255,255,41,11,114,3,0, + 0,0,114,116,0,0,0,114,117,0,0,0,114,118,0,0, + 0,114,22,0,0,0,114,120,0,0,0,114,58,0,0,0, + 114,125,0,0,0,114,1,0,0,0,114,150,0,0,0,114, + 149,0,0,0,41,17,114,29,0,0,0,114,61,0,0,0, + 90,8,100,97,116,97,112,97,116,104,114,136,0,0,0,114, + 140,0,0,0,114,131,0,0,0,114,143,0,0,0,114,137, + 0,0,0,114,138,0,0,0,114,139,0,0,0,114,129,0, + 0,0,114,130,0,0,0,114,141,0,0,0,114,142,0,0, + 0,114,133,0,0,0,90,8,114,97,119,95,100,97,116,97, + 114,147,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,59,0,0,0,69,2,0,0,115,72,0, + 0,0,20,1,8,1,8,1,12,2,2,2,14,1,12,1, + 18,1,10,1,12,1,8,1,16,2,18,2,16,2,16,1, + 12,1,8,1,2,1,14,1,12,1,18,1,10,1,12,1, + 8,1,14,255,16,128,8,3,4,2,2,3,10,1,12,1, + 8,1,10,1,2,254,2,243,2,240,114,59,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,124, + 0,124,1,24,0,131,1,100,1,107,1,83,0,41,2,78, + 114,5,0,0,0,41,1,218,3,97,98,115,41,2,90,2, + 116,49,90,2,116,50,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,9,95,101,113,95,109,116,105,109,101, + 115,2,0,0,115,2,0,0,0,16,2,114,153,0,0,0, + 99,5,0,0,0,0,0,0,0,0,0,0,0,14,0,0, + 0,6,0,0,0,67,0,0,0,115,254,0,0,0,124,3, + 124,2,100,1,156,2,125,5,116,0,160,1,124,4,124,3, + 124,5,161,3,125,6,124,6,100,2,64,0,100,3,107,3, + 125,7,124,7,114,63,124,6,100,4,64,0,100,3,107,3, + 125,8,116,2,106,3,100,5,107,3,114,62,124,8,115,38, + 116,2,106,3,100,6,107,2,114,62,116,4,124,0,124,2, + 131,2,125,9,124,9,100,0,117,1,114,62,116,2,160,5, + 116,0,106,6,124,9,161,2,125,10,116,0,160,7,124,4, + 124,10,124,3,124,5,161,4,1,0,110,40,116,8,124,0, + 124,2,131,2,92,2,125,11,125,12,124,11,114,103,116,9, + 116,10,124,4,100,7,100,8,133,2,25,0,131,1,124,11, + 131,2,114,93,116,10,124,4,100,8,100,9,133,2,25,0, + 131,1,124,12,107,3,114,103,116,11,160,12,100,10,124,3, + 155,2,157,2,161,1,1,0,100,0,83,0,116,13,160,14, + 124,4,100,9,100,0,133,2,25,0,161,1,125,13,116,15, + 124,13,116,16,131,2,115,125,116,17,100,11,124,1,155,2, + 100,12,157,3,131,1,130,1,124,13,83,0,41,13,78,41, + 2,114,47,0,0,0,114,13,0,0,0,114,5,0,0,0, + 114,0,0,0,0,114,93,0,0,0,90,5,110,101,118,101, + 114,90,6,97,108,119,97,121,115,114,105,0,0,0,114,100, + 0,0,0,114,101,0,0,0,122,22,98,121,116,101,99,111, + 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, + 122,16,99,111,109,112,105,108,101,100,32,109,111,100,117,108, + 101,32,122,21,32,105,115,32,110,111,116,32,97,32,99,111, + 100,101,32,111,98,106,101,99,116,41,18,114,21,0,0,0, + 90,13,95,99,108,97,115,115,105,102,121,95,112,121,99,218, + 4,95,105,109,112,90,21,99,104,101,99,107,95,104,97,115, + 104,95,98,97,115,101,100,95,112,121,99,115,218,15,95,103, + 101,116,95,112,121,99,95,115,111,117,114,99,101,218,11,115, + 111,117,114,99,101,95,104,97,115,104,90,17,95,82,65,87, + 95,77,65,71,73,67,95,78,85,77,66,69,82,90,18,95, + 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121, + 99,218,29,95,103,101,116,95,109,116,105,109,101,95,97,110, + 100,95,115,105,122,101,95,111,102,95,115,111,117,114,99,101, + 114,153,0,0,0,114,2,0,0,0,114,48,0,0,0,114, + 81,0,0,0,218,7,109,97,114,115,104,97,108,90,5,108, + 111,97,100,115,114,15,0,0,0,218,10,95,99,111,100,101, + 95,116,121,112,101,218,9,84,121,112,101,69,114,114,111,114, + 41,14,114,32,0,0,0,114,60,0,0,0,114,69,0,0, + 0,114,41,0,0,0,114,132,0,0,0,90,11,101,120,99, + 95,100,101,116,97,105,108,115,114,135,0,0,0,90,10,104, + 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107, + 95,115,111,117,114,99,101,90,12,115,111,117,114,99,101,95, + 98,121,116,101,115,114,156,0,0,0,90,12,115,111,117,114, + 99,101,95,109,116,105,109,101,90,11,115,111,117,114,99,101, + 95,115,105,122,101,114,53,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,218,15,95,117,110,109,97, + 114,115,104,97,108,95,99,111,100,101,123,2,0,0,115,72, + 0,0,0,2,2,2,1,6,254,14,5,12,2,4,1,12, + 1,10,1,2,1,2,255,8,1,2,255,10,2,8,1,4, + 1,4,1,2,1,4,254,4,5,8,1,4,255,2,128,8, + 4,6,255,4,3,22,3,18,1,2,255,4,2,8,1,4, + 255,4,2,18,2,10,1,16,1,4,1,114,161,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,4,0,0,0,67,0,0,0,115,28,0,0,0,124,0, + 160,0,100,1,100,2,161,2,125,0,124,0,160,0,100,3, + 100,2,161,2,125,0,124,0,83,0,41,4,78,115,2,0, + 0,0,13,10,243,1,0,0,0,10,243,1,0,0,0,13, + 41,1,114,19,0,0,0,41,1,218,6,115,111,117,114,99, + 101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 218,23,95,110,111,114,109,97,108,105,122,101,95,108,105,110, + 101,95,101,110,100,105,110,103,115,168,2,0,0,115,6,0, + 0,0,12,1,12,1,4,1,114,165,0,0,0,99,2,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, 0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,131, 1,125,1,116,1,124,1,124,0,100,1,100,2,100,3,141, @@ -948,120 +945,119 @@ const unsigned char _Py_M__zipimport[] = { 0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,60, 0,0,0,114,164,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,15,95,99,111,109,112,105,108, - 101,95,115,111,117,114,99,101,175,2,0,0,115,6,0,0, - 0,8,1,16,1,255,128,114,167,0,0,0,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,0, - 0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,0, - 100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,4, - 64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,1, - 100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,8, - 20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,10, - 78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,0, - 233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,233, - 63,0,0,0,114,93,0,0,0,114,14,0,0,0,41,2, - 114,137,0,0,0,90,6,109,107,116,105,109,101,41,2,218, - 1,100,114,144,0,0,0,114,9,0,0,0,114,9,0,0, - 0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,100, - 111,115,116,105,109,101,181,2,0,0,115,20,0,0,0,4, - 1,10,1,10,1,6,1,6,1,10,1,10,1,6,1,6, - 249,255,128,114,175,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,10,0,0,0,67,0,0, - 0,115,110,0,0,0,122,41,124,1,100,1,100,0,133,2, - 25,0,100,2,118,0,115,11,74,0,130,1,124,1,100,0, - 100,1,133,2,25,0,125,1,124,0,106,0,124,1,25,0, - 125,2,124,2,100,3,25,0,125,3,124,2,100,4,25,0, - 125,4,124,2,100,5,25,0,125,5,116,1,124,4,124,3, - 131,2,124,5,102,2,87,0,83,0,4,0,116,2,116,3, - 116,4,102,3,121,54,1,0,1,0,1,0,89,0,100,6, - 83,0,119,0,41,7,78,114,14,0,0,0,169,2,218,1, - 99,218,1,111,114,169,0,0,0,233,6,0,0,0,233,3, - 0,0,0,41,2,114,0,0,0,0,114,0,0,0,0,41, - 5,114,28,0,0,0,114,175,0,0,0,114,26,0,0,0, - 218,10,73,110,100,101,120,69,114,114,111,114,114,160,0,0, - 0,41,6,114,32,0,0,0,114,13,0,0,0,114,61,0, - 0,0,114,137,0,0,0,114,138,0,0,0,90,17,117,110, - 99,111,109,112,114,101,115,115,101,100,95,115,105,122,101,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,157, - 0,0,0,194,2,0,0,115,24,0,0,0,2,1,20,2, - 12,1,10,1,8,3,8,1,8,1,16,1,18,1,6,1, - 2,255,255,128,114,157,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, - 0,0,115,80,0,0,0,124,1,100,1,100,0,133,2,25, - 0,100,2,118,0,115,10,74,0,130,1,124,1,100,0,100, - 1,133,2,25,0,125,1,122,7,124,0,106,0,124,1,25, - 0,125,2,87,0,110,9,4,0,116,1,121,39,1,0,1, - 0,1,0,89,0,100,0,83,0,116,2,124,0,106,3,124, - 2,131,2,83,0,119,0,41,3,78,114,14,0,0,0,114, - 176,0,0,0,41,4,114,28,0,0,0,114,26,0,0,0, - 114,59,0,0,0,114,29,0,0,0,41,3,114,32,0,0, - 0,114,13,0,0,0,114,61,0,0,0,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,114,155,0,0,0,213, - 2,0,0,115,18,0,0,0,20,2,12,1,2,2,14,1, - 12,1,6,1,12,2,2,253,255,128,114,155,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, - 11,0,0,0,67,0,0,0,115,14,1,0,0,116,0,124, - 0,124,1,131,2,125,2,100,0,125,3,116,1,68,0,93, - 100,92,3,125,4,125,5,125,6,124,2,124,4,23,0,125, - 7,116,2,106,3,100,1,124,0,106,4,116,5,124,7,100, - 2,100,3,141,5,1,0,122,7,124,0,106,6,124,7,25, - 0,125,8,87,0,110,8,4,0,116,7,121,134,1,0,1, - 0,1,0,89,0,113,9,124,8,100,4,25,0,125,9,116, - 8,124,0,106,4,124,8,131,2,125,10,100,0,125,11,124, - 5,114,89,122,10,116,9,124,0,124,9,124,7,124,1,124, - 10,131,5,125,11,87,0,110,24,4,0,116,10,121,133,1, - 0,125,12,1,0,122,8,124,12,125,3,87,0,89,0,100, - 0,125,12,126,12,110,9,100,0,125,12,126,12,119,1,116, - 11,124,9,124,10,131,2,125,11,124,11,100,0,117,0,114, - 99,113,9,124,8,100,4,25,0,125,9,124,11,124,6,124, - 9,102,3,2,0,1,0,83,0,124,3,114,124,100,5,124, - 3,155,0,157,2,125,13,116,12,124,13,124,1,100,6,141, - 2,124,3,130,2,116,12,100,7,124,1,155,2,157,2,124, - 1,100,6,141,2,130,1,119,0,119,0,41,8,78,122,13, - 116,114,121,105,110,103,32,123,125,123,125,123,125,114,93,0, - 0,0,41,1,90,9,118,101,114,98,111,115,105,116,121,114, - 0,0,0,0,122,20,109,111,100,117,108,101,32,108,111,97, - 100,32,102,97,105,108,101,100,58,32,114,65,0,0,0,114, - 64,0,0,0,41,13,114,39,0,0,0,114,95,0,0,0, - 114,48,0,0,0,114,81,0,0,0,114,29,0,0,0,114, - 20,0,0,0,114,28,0,0,0,114,26,0,0,0,114,59, - 0,0,0,114,161,0,0,0,114,80,0,0,0,114,167,0, - 0,0,114,3,0,0,0,41,14,114,32,0,0,0,114,41, - 0,0,0,114,13,0,0,0,90,12,105,109,112,111,114,116, - 95,101,114,114,111,114,114,96,0,0,0,114,97,0,0,0, - 114,54,0,0,0,114,69,0,0,0,114,61,0,0,0,114, - 43,0,0,0,114,132,0,0,0,114,53,0,0,0,90,3, - 101,120,99,114,82,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,51,0,0,0,228,2,0,0, - 115,60,0,0,0,10,1,4,1,14,1,8,1,22,1,2, - 1,14,1,12,1,4,1,8,2,12,1,4,1,4,1,2, - 1,20,1,14,1,16,1,8,128,10,2,8,1,2,3,8, - 1,14,1,4,2,10,1,14,1,18,2,2,241,2,247,255, - 128,114,51,0,0,0,41,46,114,91,0,0,0,90,26,95, - 102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,98, - 95,101,120,116,101,114,110,97,108,114,21,0,0,0,114,1, - 0,0,0,114,2,0,0,0,90,17,95,102,114,111,122,101, - 110,95,105,109,112,111,114,116,108,105,98,114,48,0,0,0, - 114,154,0,0,0,114,116,0,0,0,114,158,0,0,0,114, - 72,0,0,0,114,137,0,0,0,114,35,0,0,0,90,7, - 95,95,97,108,108,95,95,114,20,0,0,0,90,15,112,97, - 116,104,95,115,101,112,97,114,97,116,111,114,115,114,18,0, - 0,0,114,80,0,0,0,114,3,0,0,0,114,25,0,0, - 0,218,4,116,121,112,101,114,75,0,0,0,114,119,0,0, - 0,114,121,0,0,0,114,123,0,0,0,90,13,95,76,111, - 97,100,101,114,66,97,115,105,99,115,114,4,0,0,0,114, - 95,0,0,0,114,39,0,0,0,114,40,0,0,0,114,38, - 0,0,0,114,27,0,0,0,114,128,0,0,0,114,148,0, - 0,0,114,150,0,0,0,114,59,0,0,0,114,153,0,0, - 0,114,161,0,0,0,218,8,95,95,99,111,100,101,95,95, - 114,159,0,0,0,114,165,0,0,0,114,167,0,0,0,114, - 175,0,0,0,114,157,0,0,0,114,155,0,0,0,114,51, - 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,218,8,60,109,111,100,117,108,101, - 62,1,0,0,0,115,92,0,0,0,4,0,8,16,16,1, - 8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,2, - 6,3,14,1,16,3,4,4,8,2,4,2,4,1,4,1, - 18,2,0,127,0,127,12,50,12,1,2,1,2,1,4,252, - 8,9,8,4,8,9,8,31,2,126,2,254,4,29,8,5, - 8,21,8,46,8,8,10,40,8,5,8,7,8,6,8,13, - 8,19,12,15,255,128, + 101,95,115,111,117,114,99,101,175,2,0,0,115,4,0,0, + 0,8,1,16,1,114,167,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, + 0,0,0,115,68,0,0,0,116,0,160,1,124,0,100,1, + 63,0,100,2,23,0,124,0,100,3,63,0,100,4,64,0, + 124,0,100,5,64,0,124,1,100,6,63,0,124,1,100,3, + 63,0,100,7,64,0,124,1,100,5,64,0,100,8,20,0, + 100,9,100,9,100,9,102,9,161,1,83,0,41,10,78,233, + 9,0,0,0,105,188,7,0,0,233,5,0,0,0,233,15, + 0,0,0,233,31,0,0,0,233,11,0,0,0,233,63,0, + 0,0,114,93,0,0,0,114,14,0,0,0,41,2,114,137, + 0,0,0,90,6,109,107,116,105,109,101,41,2,218,1,100, + 114,144,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,218,14,95,112,97,114,115,101,95,100,111,115, + 116,105,109,101,181,2,0,0,115,18,0,0,0,4,1,10, + 1,10,1,6,1,6,1,10,1,10,1,6,1,6,249,114, + 175,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,10,0,0,0,67,0,0,0,115,110,0, + 0,0,122,41,124,1,100,1,100,0,133,2,25,0,100,2, + 118,0,115,11,74,0,130,1,124,1,100,0,100,1,133,2, + 25,0,125,1,124,0,106,0,124,1,25,0,125,2,124,2, + 100,3,25,0,125,3,124,2,100,4,25,0,125,4,124,2, + 100,5,25,0,125,5,116,1,124,4,124,3,131,2,124,5, + 102,2,87,0,83,0,4,0,116,2,116,3,116,4,102,3, + 121,54,1,0,1,0,1,0,89,0,100,6,83,0,119,0, + 41,7,78,114,14,0,0,0,169,2,218,1,99,218,1,111, + 114,169,0,0,0,233,6,0,0,0,233,3,0,0,0,41, + 2,114,0,0,0,0,114,0,0,0,0,41,5,114,28,0, + 0,0,114,175,0,0,0,114,26,0,0,0,218,10,73,110, + 100,101,120,69,114,114,111,114,114,160,0,0,0,41,6,114, + 32,0,0,0,114,13,0,0,0,114,61,0,0,0,114,137, + 0,0,0,114,138,0,0,0,90,17,117,110,99,111,109,112, + 114,101,115,115,101,100,95,115,105,122,101,114,9,0,0,0, + 114,9,0,0,0,114,10,0,0,0,114,157,0,0,0,194, + 2,0,0,115,22,0,0,0,2,1,20,2,12,1,10,1, + 8,3,8,1,8,1,16,1,18,1,6,1,2,255,114,157, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,8,0,0,0,67,0,0,0,115,80,0,0, + 0,124,1,100,1,100,0,133,2,25,0,100,2,118,0,115, + 10,74,0,130,1,124,1,100,0,100,1,133,2,25,0,125, + 1,122,7,124,0,106,0,124,1,25,0,125,2,87,0,110, + 9,4,0,116,1,121,39,1,0,1,0,1,0,89,0,100, + 0,83,0,116,2,124,0,106,3,124,2,131,2,83,0,119, + 0,41,3,78,114,14,0,0,0,114,176,0,0,0,41,4, + 114,28,0,0,0,114,26,0,0,0,114,59,0,0,0,114, + 29,0,0,0,41,3,114,32,0,0,0,114,13,0,0,0, + 114,61,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,155,0,0,0,213,2,0,0,115,16,0, + 0,0,20,2,12,1,2,2,14,1,12,1,6,1,12,2, + 2,253,114,155,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,14,0,0,0,11,0,0,0,67,0,0,0, + 115,14,1,0,0,116,0,124,0,124,1,131,2,125,2,100, + 0,125,3,116,1,68,0,93,100,92,3,125,4,125,5,125, + 6,124,2,124,4,23,0,125,7,116,2,106,3,100,1,124, + 0,106,4,116,5,124,7,100,2,100,3,141,5,1,0,122, + 7,124,0,106,6,124,7,25,0,125,8,87,0,110,8,4, + 0,116,7,121,134,1,0,1,0,1,0,89,0,113,9,124, + 8,100,4,25,0,125,9,116,8,124,0,106,4,124,8,131, + 2,125,10,100,0,125,11,124,5,114,89,122,10,116,9,124, + 0,124,9,124,7,124,1,124,10,131,5,125,11,87,0,110, + 24,4,0,116,10,121,133,1,0,125,12,1,0,122,8,124, + 12,125,3,87,0,89,0,100,0,125,12,126,12,110,9,100, + 0,125,12,126,12,119,1,116,11,124,9,124,10,131,2,125, + 11,124,11,100,0,117,0,114,99,113,9,124,8,100,4,25, + 0,125,9,124,11,124,6,124,9,102,3,2,0,1,0,83, + 0,124,3,114,124,100,5,124,3,155,0,157,2,125,13,116, + 12,124,13,124,1,100,6,141,2,124,3,130,2,116,12,100, + 7,124,1,155,2,157,2,124,1,100,6,141,2,130,1,119, + 0,119,0,41,8,78,122,13,116,114,121,105,110,103,32,123, + 125,123,125,123,125,114,93,0,0,0,41,1,90,9,118,101, + 114,98,111,115,105,116,121,114,0,0,0,0,122,20,109,111, + 100,117,108,101,32,108,111,97,100,32,102,97,105,108,101,100, + 58,32,114,65,0,0,0,114,64,0,0,0,41,13,114,39, + 0,0,0,114,95,0,0,0,114,48,0,0,0,114,81,0, + 0,0,114,29,0,0,0,114,20,0,0,0,114,28,0,0, + 0,114,26,0,0,0,114,59,0,0,0,114,161,0,0,0, + 114,80,0,0,0,114,167,0,0,0,114,3,0,0,0,41, + 14,114,32,0,0,0,114,41,0,0,0,114,13,0,0,0, + 90,12,105,109,112,111,114,116,95,101,114,114,111,114,114,96, + 0,0,0,114,97,0,0,0,114,54,0,0,0,114,69,0, + 0,0,114,61,0,0,0,114,43,0,0,0,114,132,0,0, + 0,114,53,0,0,0,90,3,101,120,99,114,82,0,0,0, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,114, + 51,0,0,0,228,2,0,0,115,58,0,0,0,10,1,4, + 1,14,1,8,1,22,1,2,1,14,1,12,1,4,1,8, + 2,12,1,4,1,4,1,2,1,20,1,14,1,16,1,8, + 128,10,2,8,1,2,3,8,1,14,1,4,2,10,1,14, + 1,18,2,2,241,2,247,114,51,0,0,0,41,46,114,91, + 0,0,0,90,26,95,102,114,111,122,101,110,95,105,109,112, + 111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,114, + 21,0,0,0,114,1,0,0,0,114,2,0,0,0,90,17, + 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, + 98,114,48,0,0,0,114,154,0,0,0,114,116,0,0,0, + 114,158,0,0,0,114,72,0,0,0,114,137,0,0,0,114, + 35,0,0,0,90,7,95,95,97,108,108,95,95,114,20,0, + 0,0,90,15,112,97,116,104,95,115,101,112,97,114,97,116, + 111,114,115,114,18,0,0,0,114,80,0,0,0,114,3,0, + 0,0,114,25,0,0,0,218,4,116,121,112,101,114,75,0, + 0,0,114,119,0,0,0,114,121,0,0,0,114,123,0,0, + 0,90,13,95,76,111,97,100,101,114,66,97,115,105,99,115, + 114,4,0,0,0,114,95,0,0,0,114,39,0,0,0,114, + 40,0,0,0,114,38,0,0,0,114,27,0,0,0,114,128, + 0,0,0,114,148,0,0,0,114,150,0,0,0,114,59,0, + 0,0,114,153,0,0,0,114,161,0,0,0,218,8,95,95, + 99,111,100,101,95,95,114,159,0,0,0,114,165,0,0,0, + 114,167,0,0,0,114,175,0,0,0,114,157,0,0,0,114, + 155,0,0,0,114,51,0,0,0,114,9,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,60, + 109,111,100,117,108,101,62,1,0,0,0,115,90,0,0,0, + 4,0,8,16,16,1,8,1,8,1,8,1,8,1,8,1, + 8,1,8,1,8,2,6,3,14,1,16,3,4,4,8,2, + 4,2,4,1,4,1,18,2,0,127,0,127,12,50,12,1, + 2,1,2,1,4,252,8,9,8,4,8,9,8,31,2,126, + 2,254,4,29,8,5,8,21,8,46,8,8,10,40,8,5, + 8,7,8,6,8,13,8,19,12,15, }; From webhook-mailer at python.org Thu Apr 29 09:47:07 2021 From: webhook-mailer at python.org (encukou) Date: Thu, 29 Apr 2021 13:47:07 -0000 Subject: [Python-checkins] bpo-28254: Add PyGC_ functions to the stable ABI manifest (GH-25720) Message-ID: https://github.com/python/cpython/commit/14fc2bdfab857718429029e53ceffca456178827 commit: 14fc2bdfab857718429029e53ceffca456178827 branch: master author: Petr Viktorin committer: encukou date: 2021-04-29T15:46:48+02:00 summary: bpo-28254: Add PyGC_ functions to the stable ABI manifest (GH-25720) Co-authored-by: Senthil Kumaran Co-authored-by: scoder files: M Misc/stable_abi.txt M PC/python3dll.c diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index efb2731f595a22..2a802bd5f4b831 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2139,6 +2139,15 @@ const Py_am_send added 3.10 +# New GC control functions in Py3.10 (https://bugs.python.org/issue28254) + +function PyGC_Disable + added 3.10 +function PyGC_Enable + added 3.10 +function PyGC_IsEnabled + added 3.10 + + # (Detailed comments aren't really needed for further entries: from here on # we can use version control logs.) - diff --git a/PC/python3dll.c b/PC/python3dll.c index a53ec63e038f9f..574d4dcad9f75b 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -271,6 +271,9 @@ EXPORT_FUNC(PyFrame_GetCode) EXPORT_FUNC(PyFrame_GetLineNumber) EXPORT_FUNC(PyFrozenSet_New) EXPORT_FUNC(PyGC_Collect) +EXPORT_FUNC(PyGC_Disable) +EXPORT_FUNC(PyGC_Enable) +EXPORT_FUNC(PyGC_IsEnabled) EXPORT_FUNC(PyGILState_Ensure) EXPORT_FUNC(PyGILState_GetThisThreadState) EXPORT_FUNC(PyGILState_Release) From webhook-mailer at python.org Thu Apr 29 13:16:56 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 17:16:56 -0000 Subject: [Python-checkins] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) Message-ID: https://github.com/python/cpython/commit/76cd81d60310d65d01f9d7b48a8985d8ab89c8b4 commit: 76cd81d60310d65d01f9d7b48a8985d8ab89c8b4 branch: master author: Senthil Kumaran committer: orsenthil date: 2021-04-29T10:16:50-07:00 summary: bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) * issue43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. Co-authored-by: Gregory P. Smith Co-authored-by: Serhiy Storchaka files: A Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst M Doc/library/urllib.parse.rst M Lib/test/test_urlparse.py M Lib/urllib/parse.py diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index 67c21208196b84..0aaac562883f18 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -312,6 +312,9 @@ or on combining URL components into a URL string. ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is decomposed before parsing, no error will be raised. + Following the `WHATWG spec`_ that updates RFC 3986, ASCII newline + ``\n``, ``\r`` and tab ``\t`` characters are stripped from the URL. + .. versionchanged:: 3.6 Out-of-range port numbers now raise :exc:`ValueError`, instead of returning :const:`None`. @@ -320,6 +323,10 @@ or on combining URL components into a URL string. Characters that affect netloc parsing under NFKC normalization will now raise :exc:`ValueError`. + .. versionchanged:: 3.10 + ASCII newline and tab characters are stripped from the URL. + +.. _WHATWG spec: https://url.spec.whatwg.org/#concept-basic-url-parser .. function:: urlunsplit(parts) @@ -674,6 +681,10 @@ task isn't already covered by the URL parsing functions above. .. seealso:: + `WHATWG`_ - URL Living standard + Working Group for the URL Standard that defines URLs, domains, IP addresses, the + application/x-www-form-urlencoded format, and their API. + :rfc:`3986` - Uniform Resource Identifiers This is the current standard (STD66). Any changes to urllib.parse module should conform to this. Certain deviations could be observed, which are @@ -697,3 +708,5 @@ task isn't already covered by the URL parsing functions above. :rfc:`1738` - Uniform Resource Locators (URL) This specifies the formal syntax and semantics of absolute URLs. + +.. _WHATWG: https://url.spec.whatwg.org/ diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index c543ac9a4ba72e..67341fecef94cd 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -612,6 +612,35 @@ def test_urlsplit_attributes(self): with self.assertRaisesRegex(ValueError, "out of range"): p.port + def test_urlsplit_remove_unsafe_bytes(self): + # Remove ASCII tabs and newlines from input + url = "http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.netloc, "www.python.org") + self.assertEqual(p.path, "/javascript:alert('msg')/") + self.assertEqual(p.query, "") + self.assertEqual(p.fragment, "frag") + self.assertEqual(p.username, None) + self.assertEqual(p.password, None) + self.assertEqual(p.hostname, "www.python.org") + self.assertEqual(p.port, None) + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/#frag") + + # Remove ASCII tabs and newlines from input as bytes. + url = b"http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.scheme, b"http") + self.assertEqual(p.netloc, b"www.python.org") + self.assertEqual(p.path, b"/javascript:alert('msg')/") + self.assertEqual(p.query, b"") + self.assertEqual(p.fragment, b"frag") + self.assertEqual(p.username, None) + self.assertEqual(p.password, None) + self.assertEqual(p.hostname, b"www.python.org") + self.assertEqual(p.port, None) + self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/#frag") + def test_attributes_bad_port(self): """Check handling of invalid ports.""" for bytes in (False, True): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 21cae47bf38a36..c11c695a741c8a 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -78,6 +78,9 @@ '0123456789' '+-.') +# Unsafe bytes to be removed per WHATWG spec +_UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] + # XXX: Consider replacing with functools.lru_cache MAX_CACHE_SIZE = 20 _parse_cache = {} @@ -469,6 +472,9 @@ def urlsplit(url, scheme='', allow_fragments=True): else: scheme, url = url[:i].lower(), url[i+1:] + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + if url[:2] == '//': netloc, url = _splitnetloc(url, 2) if (('[' in netloc and ']' not in netloc) or diff --git a/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst b/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst new file mode 100644 index 00000000000000..a326d079dff4a4 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst @@ -0,0 +1,6 @@ +The presence of newline or tab characters in parts of a URL could allow +some forms of attacks. + +Following the controlling specification for URLs defined by WHATWG +:func:`urllib.parse` now removes ASCII newlines and tabs from URLs, +preventing such attacks. From webhook-mailer at python.org Thu Apr 29 13:57:46 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 29 Apr 2021 17:57:46 -0000 Subject: [Python-checkins] [3.9] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) (GH-25725) Message-ID: https://github.com/python/cpython/commit/491fde0161d5e527eeff8586dd3972d7d3a631a7 commit: 491fde0161d5e527eeff8586dd3972d7d3a631a7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-04-29T10:57:31-07:00 summary: [3.9] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) (GH-25725) * bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) Co-authored-by: Gregory P. Smith Co-authored-by: Serhiy Storchaka (cherry picked from commit 76cd81d60310d65d01f9d7b48a8985d8ab89c8b4) Co-authored-by: Senthil Kumaran files: A Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst M Doc/library/urllib.parse.rst M Lib/test/test_urlparse.py M Lib/urllib/parse.py diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index 38e2986334c807..c03765259c3d54 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -311,6 +311,9 @@ or on combining URL components into a URL string. ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is decomposed before parsing, no error will be raised. + Following the `WHATWG spec`_ that updates RFC 3986, ASCII newline + ``\n``, ``\r`` and tab ``\t`` characters are stripped from the URL. + .. versionchanged:: 3.6 Out-of-range port numbers now raise :exc:`ValueError`, instead of returning :const:`None`. @@ -319,6 +322,10 @@ or on combining URL components into a URL string. Characters that affect netloc parsing under NFKC normalization will now raise :exc:`ValueError`. + .. versionchanged:: 3.9.5 + ASCII newline and tab characters are stripped from the URL. + +.. _WHATWG spec: https://url.spec.whatwg.org/#concept-basic-url-parser .. function:: urlunsplit(parts) @@ -673,6 +680,10 @@ task isn't already covered by the URL parsing functions above. .. seealso:: + `WHATWG`_ - URL Living standard + Working Group for the URL Standard that defines URLs, domains, IP addresses, the + application/x-www-form-urlencoded format, and their API. + :rfc:`3986` - Uniform Resource Identifiers This is the current standard (STD66). Any changes to urllib.parse module should conform to this. Certain deviations could be observed, which are @@ -696,3 +707,5 @@ task isn't already covered by the URL parsing functions above. :rfc:`1738` - Uniform Resource Locators (URL) This specifies the formal syntax and semantics of absolute URLs. + +.. _WHATWG: https://url.spec.whatwg.org/ diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index c543ac9a4ba72e..67341fecef94cd 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -612,6 +612,35 @@ def test_urlsplit_attributes(self): with self.assertRaisesRegex(ValueError, "out of range"): p.port + def test_urlsplit_remove_unsafe_bytes(self): + # Remove ASCII tabs and newlines from input + url = "http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.netloc, "www.python.org") + self.assertEqual(p.path, "/javascript:alert('msg')/") + self.assertEqual(p.query, "") + self.assertEqual(p.fragment, "frag") + self.assertEqual(p.username, None) + self.assertEqual(p.password, None) + self.assertEqual(p.hostname, "www.python.org") + self.assertEqual(p.port, None) + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/#frag") + + # Remove ASCII tabs and newlines from input as bytes. + url = b"http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.scheme, b"http") + self.assertEqual(p.netloc, b"www.python.org") + self.assertEqual(p.path, b"/javascript:alert('msg')/") + self.assertEqual(p.query, b"") + self.assertEqual(p.fragment, b"frag") + self.assertEqual(p.username, None) + self.assertEqual(p.password, None) + self.assertEqual(p.hostname, b"www.python.org") + self.assertEqual(p.port, None) + self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/#frag") + def test_attributes_bad_port(self): """Check handling of invalid ports.""" for bytes in (False, True): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 21cae47bf38a36..c11c695a741c8a 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -78,6 +78,9 @@ '0123456789' '+-.') +# Unsafe bytes to be removed per WHATWG spec +_UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] + # XXX: Consider replacing with functools.lru_cache MAX_CACHE_SIZE = 20 _parse_cache = {} @@ -469,6 +472,9 @@ def urlsplit(url, scheme='', allow_fragments=True): else: scheme, url = url[:i].lower(), url[i+1:] + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + if url[:2] == '//': netloc, url = _splitnetloc(url, 2) if (('[' in netloc and ']' not in netloc) or diff --git a/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst b/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst new file mode 100644 index 00000000000000..a326d079dff4a4 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst @@ -0,0 +1,6 @@ +The presence of newline or tab characters in parts of a URL could allow +some forms of attacks. + +Following the controlling specification for URLs defined by WHATWG +:func:`urllib.parse` now removes ASCII newlines and tabs from URLs, +preventing such attacks. From webhook-mailer at python.org Thu Apr 29 14:02:49 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 29 Apr 2021 18:02:49 -0000 Subject: [Python-checkins] bpo-42589: Change URL for 'from' link when used in a raised exception (GH-23872) Message-ID: https://github.com/python/cpython/commit/2fd928c8c1328424130cb9c51fc02ad5f9a66328 commit: 2fd928c8c1328424130cb9c51fc02ad5f9a66328 branch: master author: sblondon committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-29T11:02:40-07:00 summary: bpo-42589: Change URL for 'from' link when used in a raised exception (GH-23872) Links for 'raise Exception from x' target to 'The raise statement' (7.8) section instead of 'The import statement' (7.11) section. There are more modified links than in the bug report because I searched some other ones which can get the same improvement. files: M Doc/library/exceptions.rst M Doc/tutorial/errors.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 1b9a5facd87cdc..c83daae302c19d 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -42,12 +42,12 @@ include the originating exception(s) and the final exception. When raising a new exception (rather than using a bare ``raise`` to re-raise the exception currently being handled), the implicit exception context can be -supplemented with an explicit cause by using :keyword:`from` with +supplemented with an explicit cause by using :keyword:`from` with :keyword:`raise`:: raise new_exc from original_exc -The expression following :keyword:`from` must be an exception or ``None``. It +The expression following :keyword:`from` must be an exception or ``None``. It will be set as :attr:`__cause__` on the raised exception. Setting :attr:`__cause__` also implicitly sets the :attr:`__suppress_context__` attribute to ``True``, so that using ``raise new_exc from None`` diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index fd0477f078949a..25bb4fc567b95b 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -272,7 +272,7 @@ re-raise the exception:: Exception Chaining ================== -The :keyword:`raise` statement allows an optional :keyword:`from` which enables +The :keyword:`raise` statement allows an optional :keyword:`from` which enables chaining exceptions. For example:: # exc must be exception instance or None. From webhook-mailer at python.org Thu Apr 29 14:26:34 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 29 Apr 2021 18:26:34 -0000 Subject: [Python-checkins] bpo-42589: Change URL for 'from' link when used in a raised exception (GH-23872) Message-ID: https://github.com/python/cpython/commit/3eaa6f9d185f2a2c66d98a77d3ea3f407bc96d0e commit: 3eaa6f9d185f2a2c66d98a77d3ea3f407bc96d0e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-29T11:26:26-07:00 summary: bpo-42589: Change URL for 'from' link when used in a raised exception (GH-23872) Links for 'raise Exception from x' target to 'The raise statement' (7.8) section instead of 'The import statement' (7.11) section. There are more modified links than in the bug report because I searched some other ones which can get the same improvement. (cherry picked from commit 2fd928c8c1328424130cb9c51fc02ad5f9a66328) Co-authored-by: sblondon files: M Doc/library/exceptions.rst M Doc/tutorial/errors.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 28d1ab150c8706..7170b2c2b754f8 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -42,12 +42,12 @@ include the originating exception(s) and the final exception. When raising a new exception (rather than using a bare ``raise`` to re-raise the exception currently being handled), the implicit exception context can be -supplemented with an explicit cause by using :keyword:`from` with +supplemented with an explicit cause by using :keyword:`from` with :keyword:`raise`:: raise new_exc from original_exc -The expression following :keyword:`from` must be an exception or ``None``. It +The expression following :keyword:`from` must be an exception or ``None``. It will be set as :attr:`__cause__` on the raised exception. Setting :attr:`__cause__` also implicitly sets the :attr:`__suppress_context__` attribute to ``True``, so that using ``raise new_exc from None`` diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index efe44da3043c5e..f72da5c3404484 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -272,7 +272,7 @@ re-raise the exception:: Exception Chaining ================== -The :keyword:`raise` statement allows an optional :keyword:`from` which enables +The :keyword:`raise` statement allows an optional :keyword:`from` which enables chaining exceptions. For example:: # exc must be exception instance or None. From webhook-mailer at python.org Thu Apr 29 14:28:58 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 29 Apr 2021 18:28:58 -0000 Subject: [Python-checkins] bpo-43933: Show frame.f_lineno as None, rather than -1, if there is no line number. (GH-25717) Message-ID: https://github.com/python/cpython/commit/088a15c49d99ecb4c3bef93f8f40dd513c6cae3b commit: 088a15c49d99ecb4c3bef93f8f40dd513c6cae3b branch: master author: Mark Shannon committer: markshannon date: 2021-04-29T19:28:50+01:00 summary: bpo-43933: Show frame.f_lineno as None, rather than -1, if there is no line number. (GH-25717) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst M Lib/test/test_exceptions.py M Objects/frameobject.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 590935cb6cd62..3810108e35663 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -2081,7 +2081,10 @@ def lineno_after_raise(self, f, line): while t.tb_next: t = t.tb_next frame = t.tb_frame - self.assertEqual(frame.f_lineno-frame.f_code.co_firstlineno, line) + if line is None: + self.assertEqual(frame.f_lineno, line) + else: + self.assertEqual(frame.f_lineno-frame.f_code.co_firstlineno, line) def test_lineno_after_raise_simple(self): def simple(): @@ -2153,6 +2156,12 @@ def after_with(): pass self.lineno_after_raise(after_with, 2) + def test_missing_lineno_shows_as_none(self): + def f(): + 1/0 + self.lineno_after_raise(f, 1) + f.__code__ = f.__code__.replace(co_linetable=b'\x04\x80\xff\x80') + self.lineno_after_raise(f, None) if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst new file mode 100644 index 0000000000000..8d11a8cb3dab3 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst @@ -0,0 +1,3 @@ +If the current position in a frame has no line number then set the f_lineno +attribute to None, instead of -1, to conform to PEP 626. This should not +normally be possible, but might occur in some unusual circumstances. diff --git a/Objects/frameobject.c b/Objects/frameobject.c index b0487c2b68811..5920ed86fd923 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -53,7 +53,13 @@ PyFrame_GetLineNumber(PyFrameObject *f) static PyObject * frame_getlineno(PyFrameObject *f, void *closure) { - return PyLong_FromLong(PyFrame_GetLineNumber(f)); + int lineno = PyFrame_GetLineNumber(f); + if (lineno < 0) { + Py_RETURN_NONE; + } + else { + return PyLong_FromLong(lineno); + } } static PyObject * From webhook-mailer at python.org Thu Apr 29 19:16:03 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 29 Apr 2021 23:16:03 -0000 Subject: [Python-checkins] bpo-42800: add audit hooks for f_code and tb_frame (GH-24182) Message-ID: https://github.com/python/cpython/commit/9a2c2a9ec3140b6c54c9ef9d994311f114128ee3 commit: 9a2c2a9ec3140b6c54c9ef9d994311f114128ee3 branch: master author: Ryan Hileman committer: zooba date: 2021-04-30T00:15:55+01:00 summary: bpo-42800: add audit hooks for f_code and tb_frame (GH-24182) Accessing the following attributes will now fire PEP 578 style audit hooks as ("object.__getattr__", obj, name): * PyTracebackObject: tb_frame * PyFrameObject: f_code * PyGenObject: gi_code, gi_frame * PyCoroObject: cr_code, cr_frame * PyAsyncGenObject: ag_code, ag_frame Add an AUDIT_READ attribute flag aliased to READ_RESTRICTED. Update obsolete flag documentation. files: A Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst M Doc/extending/newtypes.rst M Doc/library/audit_events.rst M Doc/library/stdtypes.rst M Doc/reference/datamodel.rst M Include/structmember.h M Misc/ACKS M Objects/descrobject.c M Objects/frameobject.c M Objects/genobject.c M Python/traceback.c diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst index c078476aae80af..545390c2e469c2 100644 --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -287,18 +287,23 @@ combined using bitwise-OR. +===========================+==============================================+ | :const:`READONLY` | Never writable. | +---------------------------+----------------------------------------------+ -| :const:`READ_RESTRICTED` | Not readable in restricted mode. | -+---------------------------+----------------------------------------------+ -| :const:`WRITE_RESTRICTED` | Not writable in restricted mode. | -+---------------------------+----------------------------------------------+ -| :const:`RESTRICTED` | Not readable or writable in restricted mode. | +| :const:`AUDIT_READ` | Emit an ``object.__getattr__`` | +| | :ref:`audit events ` before | +| | reading. | +---------------------------+----------------------------------------------+ +.. versionchanged:: 3.10 + :const:`RESTRICTED`, :const:`READ_RESTRICTED` and :const:`WRITE_RESTRICTED` + are deprecated. However, :const:`READ_RESTRICTED` is an alias for + :const:`AUDIT_READ`, so fields that specify either :const:`RESTRICTED` or + :const:`READ_RESTRICTED` will also raise an audit event. + .. index:: single: READONLY single: READ_RESTRICTED single: WRITE_RESTRICTED single: RESTRICTED + single: AUDIT_READ An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` table to build descriptors that are used at runtime is that any attribute defined this way can diff --git a/Doc/library/audit_events.rst b/Doc/library/audit_events.rst index 367d56e4e37359..8227a7955bef81 100644 --- a/Doc/library/audit_events.rst +++ b/Doc/library/audit_events.rst @@ -7,7 +7,7 @@ Audit events table This table contains all events raised by :func:`sys.audit` or :c:func:`PySys_Audit` calls throughout the CPython runtime and the -standard library. These calls were added in 3.8.0 or later. +standard library. These calls were added in 3.8.0 or later (see :pep:`578`). See :func:`sys.addaudithook` and :c:func:`PySys_AddAuditHook` for information on handling these events. diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index b83d0d87f587fc..c4e6b4d1186d04 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -5195,6 +5195,9 @@ environment. Code objects are returned by the built-in :func:`compile` function and can be extracted from function objects through their :attr:`__code__` attribute. See also the :mod:`code` module. +Accessing ``__code__`` raises an :ref:`auditing event ` +``object.__getattr__`` with arguments ``obj`` and ``"__code__"``. + .. index:: builtin: exec builtin: eval diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 1697330cb9153b..3a812eb21471a0 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1005,6 +1005,9 @@ Internal types :attr:`f_lasti` gives the precise instruction (this is an index into the bytecode string of the code object). + Accessing ``f_code`` raises an :ref:`auditing event ` + ``object.__getattr__`` with arguments ``obj`` and ``"f_code"``. + .. index:: single: f_trace (frame attribute) single: f_trace_lines (frame attribute) @@ -1089,6 +1092,9 @@ Internal types :keyword:`try` statement with no matching except clause or with a finally clause. + Accessing ``tb_frame`` raises an :ref:`auditing event ` + ``object.__getattr__`` with arguments ``obj`` and ``"tb_frame"``. + .. index:: single: tb_next (traceback attribute) diff --git a/Include/structmember.h b/Include/structmember.h index b54f7081f458dd..955edd31c4ca54 100644 --- a/Include/structmember.h +++ b/Include/structmember.h @@ -62,6 +62,7 @@ typedef struct PyMemberDef { #define PY_WRITE_RESTRICTED 4 #define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) +#define AUDIT_READ READ_RESTRICTED /* Current API, use this */ PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); diff --git a/Misc/ACKS b/Misc/ACKS index a18ddc65b79e8b..99d39b5f38fd76 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -723,6 +723,7 @@ Kevan Heydon Wouter van Heyst Kelsey Hightower Jason Hildebrand +Ryan Hileman Aaron Hill Joel Hillacre Richie Hindle diff --git a/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst b/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst new file mode 100644 index 00000000000000..d01c0c3073a503 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst @@ -0,0 +1 @@ +Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. diff --git a/Objects/descrobject.c b/Objects/descrobject.c index 35fbffd914a94c..297b8528a648d1 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -164,7 +164,7 @@ member_get(PyMemberDescrObject *descr, PyObject *obj, PyObject *type) if (descr_check((PyDescrObject *)descr, obj, &res)) return res; - if (descr->d_member->flags & READ_RESTRICTED) { + if (descr->d_member->flags & AUDIT_READ) { if (PySys_Audit("object.__getattr__", "Os", obj ? obj : Py_None, descr->d_member->name) < 0) { return NULL; diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 5920ed86fd9230..5c337467155f42 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -13,7 +13,7 @@ static PyMemberDef frame_memberlist[] = { {"f_back", T_OBJECT, OFF(f_back), READONLY}, - {"f_code", T_OBJECT, OFF(f_code), READONLY}, + {"f_code", T_OBJECT, OFF(f_code), READONLY|AUDIT_READ}, {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, {"f_trace_lines", T_BOOL, OFF(f_trace_lines), 0}, diff --git a/Objects/genobject.c b/Objects/genobject.c index b02a5581a4042c..a922d45de10a09 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -741,8 +741,8 @@ static PyGetSetDef gen_getsetlist[] = { }; static PyMemberDef gen_memberlist[] = { - {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY}, - {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY}, + {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY|AUDIT_READ}, + {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY|AUDIT_READ}, {NULL} /* Sentinel */ }; @@ -978,8 +978,8 @@ static PyGetSetDef coro_getsetlist[] = { }; static PyMemberDef coro_memberlist[] = { - {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY}, - {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY}, + {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY|AUDIT_READ}, + {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY|AUDIT_READ}, {"cr_origin", T_OBJECT, offsetof(PyCoroObject, cr_origin), READONLY}, {NULL} /* Sentinel */ }; @@ -1360,10 +1360,10 @@ static PyGetSetDef async_gen_getsetlist[] = { }; static PyMemberDef async_gen_memberlist[] = { - {"ag_frame", T_OBJECT, offsetof(PyAsyncGenObject, ag_frame), READONLY}, + {"ag_frame", T_OBJECT, offsetof(PyAsyncGenObject, ag_frame), READONLY|AUDIT_READ}, {"ag_running", T_BOOL, offsetof(PyAsyncGenObject, ag_running_async), READONLY}, - {"ag_code", T_OBJECT, offsetof(PyAsyncGenObject, ag_code), READONLY}, + {"ag_code", T_OBJECT, offsetof(PyAsyncGenObject, ag_code), READONLY|AUDIT_READ}, {NULL} /* Sentinel */ }; diff --git a/Python/traceback.c b/Python/traceback.c index 6c0cdfa7e7a2c1..5fa6e50d33b745 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -147,7 +147,7 @@ static PyMethodDef tb_methods[] = { }; static PyMemberDef tb_memberlist[] = { - {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY}, + {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY|AUDIT_READ}, {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, {NULL} /* Sentinel */ From webhook-mailer at python.org Thu Apr 29 20:09:04 2021 From: webhook-mailer at python.org (zooba) Date: Fri, 30 Apr 2021 00:09:04 -0000 Subject: [Python-checkins] bpo-42800: Rename AUDIT_READ to PY_AUDIT_READ (GH-25736) Message-ID: https://github.com/python/cpython/commit/87655e2cf58c543914ea05ebe5a0377441da1ef2 commit: 87655e2cf58c543914ea05ebe5a0377441da1ef2 branch: master author: Steve Dower committer: zooba date: 2021-04-30T01:08:55+01:00 summary: bpo-42800: Rename AUDIT_READ to PY_AUDIT_READ (GH-25736) files: M Doc/extending/newtypes.rst M Include/structmember.h M Objects/descrobject.c M Objects/frameobject.c M Objects/genobject.c M Python/traceback.c diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst index 545390c2e469c..6e17897ed2c80 100644 --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -287,7 +287,7 @@ combined using bitwise-OR. +===========================+==============================================+ | :const:`READONLY` | Never writable. | +---------------------------+----------------------------------------------+ -| :const:`AUDIT_READ` | Emit an ``object.__getattr__`` | +| :const:`PY_AUDIT_READ` | Emit an ``object.__getattr__`` | | | :ref:`audit events ` before | | | reading. | +---------------------------+----------------------------------------------+ @@ -295,15 +295,15 @@ combined using bitwise-OR. .. versionchanged:: 3.10 :const:`RESTRICTED`, :const:`READ_RESTRICTED` and :const:`WRITE_RESTRICTED` are deprecated. However, :const:`READ_RESTRICTED` is an alias for - :const:`AUDIT_READ`, so fields that specify either :const:`RESTRICTED` or - :const:`READ_RESTRICTED` will also raise an audit event. + :const:`PY_AUDIT_READ`, so fields that specify either :const:`RESTRICTED` + or :const:`READ_RESTRICTED` will also raise an audit event. .. index:: single: READONLY single: READ_RESTRICTED single: WRITE_RESTRICTED single: RESTRICTED - single: AUDIT_READ + single: PY_AUDIT_READ An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` table to build descriptors that are used at runtime is that any attribute defined this way can diff --git a/Include/structmember.h b/Include/structmember.h index 955edd31c4ca5..93b7aff809184 100644 --- a/Include/structmember.h +++ b/Include/structmember.h @@ -62,7 +62,7 @@ typedef struct PyMemberDef { #define PY_WRITE_RESTRICTED 4 #define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) -#define AUDIT_READ READ_RESTRICTED +#define PY_AUDIT_READ READ_RESTRICTED /* Current API, use this */ PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); diff --git a/Objects/descrobject.c b/Objects/descrobject.c index 297b8528a648d..dd41620b9a9ee 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -164,7 +164,7 @@ member_get(PyMemberDescrObject *descr, PyObject *obj, PyObject *type) if (descr_check((PyDescrObject *)descr, obj, &res)) return res; - if (descr->d_member->flags & AUDIT_READ) { + if (descr->d_member->flags & PY_AUDIT_READ) { if (PySys_Audit("object.__getattr__", "Os", obj ? obj : Py_None, descr->d_member->name) < 0) { return NULL; diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 5c337467155f4..034b908ade31c 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -13,7 +13,7 @@ static PyMemberDef frame_memberlist[] = { {"f_back", T_OBJECT, OFF(f_back), READONLY}, - {"f_code", T_OBJECT, OFF(f_code), READONLY|AUDIT_READ}, + {"f_code", T_OBJECT, OFF(f_code), READONLY|PY_AUDIT_READ}, {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, {"f_trace_lines", T_BOOL, OFF(f_trace_lines), 0}, diff --git a/Objects/genobject.c b/Objects/genobject.c index a922d45de10a0..1889df1d13778 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -741,8 +741,8 @@ static PyGetSetDef gen_getsetlist[] = { }; static PyMemberDef gen_memberlist[] = { - {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY|AUDIT_READ}, - {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY|AUDIT_READ}, + {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY|PY_AUDIT_READ}, + {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY|PY_AUDIT_READ}, {NULL} /* Sentinel */ }; @@ -978,8 +978,8 @@ static PyGetSetDef coro_getsetlist[] = { }; static PyMemberDef coro_memberlist[] = { - {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY|AUDIT_READ}, - {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY|AUDIT_READ}, + {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY|PY_AUDIT_READ}, + {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY|PY_AUDIT_READ}, {"cr_origin", T_OBJECT, offsetof(PyCoroObject, cr_origin), READONLY}, {NULL} /* Sentinel */ }; @@ -1360,10 +1360,10 @@ static PyGetSetDef async_gen_getsetlist[] = { }; static PyMemberDef async_gen_memberlist[] = { - {"ag_frame", T_OBJECT, offsetof(PyAsyncGenObject, ag_frame), READONLY|AUDIT_READ}, + {"ag_frame", T_OBJECT, offsetof(PyAsyncGenObject, ag_frame), READONLY|PY_AUDIT_READ}, {"ag_running", T_BOOL, offsetof(PyAsyncGenObject, ag_running_async), READONLY}, - {"ag_code", T_OBJECT, offsetof(PyAsyncGenObject, ag_code), READONLY|AUDIT_READ}, + {"ag_code", T_OBJECT, offsetof(PyAsyncGenObject, ag_code), READONLY|PY_AUDIT_READ}, {NULL} /* Sentinel */ }; diff --git a/Python/traceback.c b/Python/traceback.c index 5fa6e50d33b74..470324b1afd83 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -147,7 +147,7 @@ static PyMethodDef tb_methods[] = { }; static PyMemberDef tb_memberlist[] = { - {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY|AUDIT_READ}, + {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY|PY_AUDIT_READ}, {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, {NULL} /* Sentinel */ From webhook-mailer at python.org Thu Apr 29 20:19:38 2021 From: webhook-mailer at python.org (brandtbucher) Date: Fri, 30 Apr 2021 00:19:38 -0000 Subject: [Python-checkins] bpo-43892: Validate the first term of complex literal value patterns (GH-25735) Message-ID: https://github.com/python/cpython/commit/dbe60ee09dc5a624cfb78dff61ecf050a5b3f105 commit: dbe60ee09dc5a624cfb78dff61ecf050a5b3f105 branch: master author: Brandt Bucher committer: brandtbucher date: 2021-04-29T17:19:28-07:00 summary: bpo-43892: Validate the first term of complex literal value patterns (GH-25735) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst M Grammar/python.gram M Lib/test/test_patma.py M Parser/parser.c M Parser/pegen.c M Parser/pegen.h M Python/ast_opt.c M Python/compile.c diff --git a/Grammar/python.gram b/Grammar/python.gram index c8d765b632909..2f553c6d390c7 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -276,13 +276,22 @@ literal_expr[expr_ty]: | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) } complex_number[expr_ty]: - | real=signed_number '+' imag=imaginary_number { _PyAST_BinOp(real, Add, imag, EXTRA) } - | real=signed_number '-' imag=imaginary_number { _PyAST_BinOp(real, Sub, imag, EXTRA) } + | real=signed_real_number '+' imag=imaginary_number { + _PyAST_BinOp(real, Add, imag, EXTRA) } + | real=signed_real_number '-' imag=imaginary_number { + _PyAST_BinOp(real, Sub, imag, EXTRA) } signed_number[expr_ty]: | NUMBER | '-' number=NUMBER { _PyAST_UnaryOp(USub, number, EXTRA) } +signed_real_number[expr_ty]: + | real_number + | '-' real=real_number { _PyAST_UnaryOp(USub, real, EXTRA) } + +real_number[expr_ty]: + | real=NUMBER { _PyPegen_ensure_real(p, real) } + imaginary_number[expr_ty]: | imag=NUMBER { _PyPegen_ensure_imaginary(p, imag) } @@ -343,7 +352,7 @@ mapping_pattern[pattern_ty]: NULL, EXTRA) } items_pattern[asdl_seq*]: - | items=','.key_value_pattern+ { items } + | ','.key_value_pattern+ key_value_pattern[KeyPatternPair*]: | key=(literal_expr | attr) ':' pattern=pattern { _PyPegen_key_pattern_pair(p, key, pattern) } @@ -373,7 +382,7 @@ class_pattern[pattern_ty]: positional_patterns[asdl_pattern_seq*]: | args[asdl_pattern_seq*]=','.pattern+ { args } keyword_patterns[asdl_seq*]: - | keywords[asdl_seq*]=','.keyword_pattern+ { keywords } + | ','.keyword_pattern+ keyword_pattern[KeyPatternPair*]: | arg=NAME '=' value=pattern { _PyPegen_key_pattern_pair(p, arg, value) } @@ -954,12 +963,12 @@ invalid_finally_stmt: | a='finally' ':' NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block after 'finally' statement on line %d", a->lineno) } invalid_except_stmt_indent: - | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT { + | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block after 'except' statement on line %d", a->lineno) } | a='except' ':' NEWLINE !INDENT { RAISE_SYNTAX_ERROR("expected an indented block after except statement on line %d", a->lineno) } invalid_match_stmt: | "match" subject_expr !':' { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) } - | a="match" subject=subject_expr ':' NEWLINE !INDENT { + | a="match" subject=subject_expr ':' NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block after 'match' statement on line %d", a->lineno) } invalid_case_block: | "case" patterns guard? !':' { RAISE_SYNTAX_ERROR("expected ':'") } diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index f3275529f22df..1f80fb48f43e3 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -2873,6 +2873,38 @@ def test_patma_284(self): pass """) + @no_perf + def test_patma_285(self): + self.assert_syntax_error(""" + match ...: + case 0j+0: + pass + """) + + @no_perf + def test_patma_286(self): + self.assert_syntax_error(""" + match ...: + case 0j+0j: + pass + """) + + @no_perf + def test_patma_287(self): + self.assert_syntax_error(""" + match ...: + case {0j+0: _}: + pass + """) + + @no_perf + def test_patma_288(self): + self.assert_syntax_error(""" + match ...: + case {0j+0j: _}: + pass + """) + class PerfPatma(TestPatma): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst new file mode 100644 index 0000000000000..f2a3dc90e556f --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst @@ -0,0 +1,2 @@ +Restore proper validation of complex literal value patterns when parsing +:keyword:`!match` blocks. diff --git a/Parser/parser.c b/Parser/parser.c index 5baf82bc627d1..6958963dfa39c 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -122,374 +122,376 @@ static char *soft_keywords[] = { #define literal_expr_type 1048 #define complex_number_type 1049 #define signed_number_type 1050 -#define imaginary_number_type 1051 -#define capture_pattern_type 1052 -#define pattern_capture_target_type 1053 -#define wildcard_pattern_type 1054 -#define value_pattern_type 1055 -#define attr_type 1056 // Left-recursive -#define name_or_attr_type 1057 // Left-recursive -#define group_pattern_type 1058 -#define sequence_pattern_type 1059 -#define open_sequence_pattern_type 1060 -#define maybe_sequence_pattern_type 1061 -#define maybe_star_pattern_type 1062 -#define star_pattern_type 1063 -#define mapping_pattern_type 1064 -#define items_pattern_type 1065 -#define key_value_pattern_type 1066 -#define double_star_pattern_type 1067 -#define class_pattern_type 1068 -#define positional_patterns_type 1069 -#define keyword_patterns_type 1070 -#define keyword_pattern_type 1071 -#define return_stmt_type 1072 -#define raise_stmt_type 1073 -#define function_def_type 1074 -#define function_def_raw_type 1075 -#define func_type_comment_type 1076 -#define params_type 1077 -#define parameters_type 1078 -#define slash_no_default_type 1079 -#define slash_with_default_type 1080 -#define star_etc_type 1081 -#define kwds_type 1082 -#define param_no_default_type 1083 -#define param_with_default_type 1084 -#define param_maybe_default_type 1085 -#define param_type 1086 -#define annotation_type 1087 -#define default_type 1088 -#define decorators_type 1089 -#define class_def_type 1090 -#define class_def_raw_type 1091 -#define block_type 1092 -#define star_expressions_type 1093 -#define star_expression_type 1094 -#define star_named_expressions_type 1095 -#define star_named_expression_type 1096 -#define named_expression_type 1097 -#define direct_named_expression_type 1098 -#define annotated_rhs_type 1099 -#define expressions_type 1100 -#define expression_type 1101 -#define lambdef_type 1102 -#define lambda_params_type 1103 -#define lambda_parameters_type 1104 -#define lambda_slash_no_default_type 1105 -#define lambda_slash_with_default_type 1106 -#define lambda_star_etc_type 1107 -#define lambda_kwds_type 1108 -#define lambda_param_no_default_type 1109 -#define lambda_param_with_default_type 1110 -#define lambda_param_maybe_default_type 1111 -#define lambda_param_type 1112 -#define disjunction_type 1113 -#define conjunction_type 1114 -#define inversion_type 1115 -#define comparison_type 1116 -#define compare_op_bitwise_or_pair_type 1117 -#define eq_bitwise_or_type 1118 -#define noteq_bitwise_or_type 1119 -#define lte_bitwise_or_type 1120 -#define lt_bitwise_or_type 1121 -#define gte_bitwise_or_type 1122 -#define gt_bitwise_or_type 1123 -#define notin_bitwise_or_type 1124 -#define in_bitwise_or_type 1125 -#define isnot_bitwise_or_type 1126 -#define is_bitwise_or_type 1127 -#define bitwise_or_type 1128 // Left-recursive -#define bitwise_xor_type 1129 // Left-recursive -#define bitwise_and_type 1130 // Left-recursive -#define shift_expr_type 1131 // Left-recursive -#define sum_type 1132 // Left-recursive -#define term_type 1133 // Left-recursive -#define factor_type 1134 -#define power_type 1135 -#define await_primary_type 1136 -#define primary_type 1137 // Left-recursive -#define slices_type 1138 -#define slice_type 1139 -#define atom_type 1140 -#define strings_type 1141 -#define list_type 1142 -#define listcomp_type 1143 -#define tuple_type 1144 -#define group_type 1145 -#define genexp_type 1146 -#define set_type 1147 -#define setcomp_type 1148 -#define dict_type 1149 -#define dictcomp_type 1150 -#define double_starred_kvpairs_type 1151 -#define double_starred_kvpair_type 1152 -#define kvpair_type 1153 -#define for_if_clauses_type 1154 -#define for_if_clause_type 1155 -#define yield_expr_type 1156 -#define arguments_type 1157 -#define args_type 1158 -#define kwargs_type 1159 -#define starred_expression_type 1160 -#define kwarg_or_starred_type 1161 -#define kwarg_or_double_starred_type 1162 -#define star_targets_type 1163 -#define star_targets_list_seq_type 1164 -#define star_targets_tuple_seq_type 1165 -#define star_target_type 1166 -#define target_with_star_atom_type 1167 -#define star_atom_type 1168 -#define single_target_type 1169 -#define single_subscript_attribute_target_type 1170 -#define del_targets_type 1171 -#define del_target_type 1172 -#define del_t_atom_type 1173 -#define targets_type 1174 -#define target_type 1175 -#define t_primary_type 1176 // Left-recursive -#define t_lookahead_type 1177 -#define t_atom_type 1178 -#define invalid_arguments_type 1179 -#define invalid_kwarg_type 1180 -#define invalid_expression_type 1181 -#define invalid_named_expression_type 1182 -#define invalid_assignment_type 1183 -#define invalid_ann_assign_target_type 1184 -#define invalid_del_stmt_type 1185 -#define invalid_block_type 1186 -#define invalid_primary_type 1187 // Left-recursive -#define invalid_comprehension_type 1188 -#define invalid_dict_comprehension_type 1189 -#define invalid_parameters_type 1190 -#define invalid_parameters_helper_type 1191 -#define invalid_lambda_parameters_type 1192 -#define invalid_lambda_parameters_helper_type 1193 -#define invalid_star_etc_type 1194 -#define invalid_lambda_star_etc_type 1195 -#define invalid_double_type_comments_type 1196 -#define invalid_with_item_type 1197 -#define invalid_for_target_type 1198 -#define invalid_group_type 1199 -#define invalid_import_from_targets_type 1200 -#define invalid_with_stmt_type 1201 -#define invalid_with_stmt_indent_type 1202 -#define invalid_try_stmt_type 1203 -#define invalid_except_stmt_type 1204 -#define invalid_finally_stmt_type 1205 -#define invalid_except_stmt_indent_type 1206 -#define invalid_match_stmt_type 1207 -#define invalid_case_block_type 1208 -#define invalid_if_stmt_type 1209 -#define invalid_elif_stmt_type 1210 -#define invalid_else_stmt_type 1211 -#define invalid_while_stmt_type 1212 -#define invalid_for_stmt_type 1213 -#define invalid_def_raw_type 1214 -#define invalid_class_def_raw_type 1215 -#define invalid_double_starred_kvpairs_type 1216 -#define invalid_kvpair_type 1217 -#define _loop0_1_type 1218 -#define _loop0_2_type 1219 -#define _loop0_4_type 1220 -#define _gather_3_type 1221 -#define _loop0_6_type 1222 -#define _gather_5_type 1223 -#define _loop0_8_type 1224 -#define _gather_7_type 1225 -#define _loop0_10_type 1226 -#define _gather_9_type 1227 -#define _loop1_11_type 1228 -#define _loop0_13_type 1229 -#define _gather_12_type 1230 -#define _tmp_14_type 1231 -#define _tmp_15_type 1232 -#define _tmp_16_type 1233 -#define _tmp_17_type 1234 -#define _tmp_18_type 1235 -#define _tmp_19_type 1236 -#define _tmp_20_type 1237 -#define _tmp_21_type 1238 -#define _loop1_22_type 1239 -#define _tmp_23_type 1240 -#define _tmp_24_type 1241 -#define _loop0_26_type 1242 -#define _gather_25_type 1243 -#define _loop0_28_type 1244 -#define _gather_27_type 1245 -#define _tmp_29_type 1246 -#define _tmp_30_type 1247 -#define _loop0_31_type 1248 -#define _loop1_32_type 1249 -#define _loop0_34_type 1250 -#define _gather_33_type 1251 -#define _tmp_35_type 1252 -#define _loop0_37_type 1253 -#define _gather_36_type 1254 -#define _tmp_38_type 1255 -#define _loop0_40_type 1256 -#define _gather_39_type 1257 -#define _loop0_42_type 1258 -#define _gather_41_type 1259 -#define _loop0_44_type 1260 -#define _gather_43_type 1261 -#define _loop0_46_type 1262 -#define _gather_45_type 1263 -#define _tmp_47_type 1264 -#define _loop1_48_type 1265 -#define _tmp_49_type 1266 -#define _loop1_50_type 1267 -#define _loop0_52_type 1268 -#define _gather_51_type 1269 -#define _tmp_53_type 1270 -#define _tmp_54_type 1271 -#define _tmp_55_type 1272 -#define _tmp_56_type 1273 -#define _loop0_58_type 1274 -#define _gather_57_type 1275 -#define _loop0_60_type 1276 -#define _gather_59_type 1277 -#define _tmp_61_type 1278 -#define _loop0_63_type 1279 -#define _gather_62_type 1280 -#define _loop0_65_type 1281 -#define _gather_64_type 1282 -#define _tmp_66_type 1283 -#define _tmp_67_type 1284 -#define _tmp_68_type 1285 -#define _tmp_69_type 1286 -#define _loop0_70_type 1287 -#define _loop0_71_type 1288 -#define _loop0_72_type 1289 -#define _loop1_73_type 1290 -#define _loop0_74_type 1291 -#define _loop1_75_type 1292 -#define _loop1_76_type 1293 -#define _loop1_77_type 1294 -#define _loop0_78_type 1295 -#define _loop1_79_type 1296 -#define _loop0_80_type 1297 -#define _loop1_81_type 1298 -#define _loop0_82_type 1299 -#define _loop1_83_type 1300 -#define _loop1_84_type 1301 -#define _tmp_85_type 1302 -#define _loop1_86_type 1303 -#define _loop0_88_type 1304 -#define _gather_87_type 1305 -#define _loop1_89_type 1306 -#define _loop0_90_type 1307 -#define _loop0_91_type 1308 -#define _loop0_92_type 1309 -#define _loop1_93_type 1310 -#define _loop0_94_type 1311 -#define _loop1_95_type 1312 -#define _loop1_96_type 1313 -#define _loop1_97_type 1314 -#define _loop0_98_type 1315 -#define _loop1_99_type 1316 -#define _loop0_100_type 1317 -#define _loop1_101_type 1318 -#define _loop0_102_type 1319 -#define _loop1_103_type 1320 -#define _loop1_104_type 1321 -#define _loop1_105_type 1322 -#define _loop1_106_type 1323 -#define _tmp_107_type 1324 -#define _loop0_109_type 1325 -#define _gather_108_type 1326 -#define _tmp_110_type 1327 -#define _tmp_111_type 1328 -#define _tmp_112_type 1329 -#define _tmp_113_type 1330 -#define _loop1_114_type 1331 -#define _tmp_115_type 1332 -#define _tmp_116_type 1333 -#define _loop0_118_type 1334 -#define _gather_117_type 1335 -#define _loop1_119_type 1336 -#define _loop0_120_type 1337 -#define _loop0_121_type 1338 -#define _loop0_123_type 1339 -#define _gather_122_type 1340 -#define _tmp_124_type 1341 -#define _loop0_126_type 1342 -#define _gather_125_type 1343 -#define _loop0_128_type 1344 -#define _gather_127_type 1345 -#define _loop0_130_type 1346 -#define _gather_129_type 1347 -#define _loop0_132_type 1348 -#define _gather_131_type 1349 -#define _loop0_133_type 1350 -#define _loop0_135_type 1351 -#define _gather_134_type 1352 -#define _loop1_136_type 1353 -#define _tmp_137_type 1354 -#define _loop0_139_type 1355 -#define _gather_138_type 1356 -#define _loop0_141_type 1357 -#define _gather_140_type 1358 -#define _tmp_142_type 1359 -#define _tmp_143_type 1360 -#define _tmp_144_type 1361 -#define _tmp_145_type 1362 -#define _tmp_146_type 1363 -#define _loop0_147_type 1364 -#define _loop0_148_type 1365 -#define _loop0_149_type 1366 -#define _tmp_150_type 1367 -#define _tmp_151_type 1368 -#define _tmp_152_type 1369 -#define _tmp_153_type 1370 -#define _loop0_154_type 1371 -#define _loop1_155_type 1372 -#define _loop0_156_type 1373 -#define _loop1_157_type 1374 -#define _tmp_158_type 1375 -#define _tmp_159_type 1376 -#define _tmp_160_type 1377 -#define _loop0_162_type 1378 -#define _gather_161_type 1379 -#define _loop0_164_type 1380 -#define _gather_163_type 1381 -#define _loop0_166_type 1382 -#define _gather_165_type 1383 -#define _loop0_168_type 1384 -#define _gather_167_type 1385 -#define _tmp_169_type 1386 -#define _tmp_170_type 1387 -#define _tmp_171_type 1388 -#define _tmp_172_type 1389 -#define _tmp_173_type 1390 -#define _loop0_175_type 1391 -#define _gather_174_type 1392 -#define _tmp_176_type 1393 -#define _tmp_177_type 1394 -#define _tmp_178_type 1395 -#define _tmp_179_type 1396 -#define _tmp_180_type 1397 -#define _tmp_181_type 1398 -#define _tmp_182_type 1399 -#define _tmp_183_type 1400 -#define _tmp_184_type 1401 -#define _tmp_185_type 1402 -#define _tmp_186_type 1403 -#define _tmp_187_type 1404 -#define _tmp_188_type 1405 -#define _tmp_189_type 1406 -#define _tmp_190_type 1407 -#define _tmp_191_type 1408 -#define _tmp_192_type 1409 -#define _tmp_193_type 1410 -#define _tmp_194_type 1411 -#define _tmp_195_type 1412 -#define _tmp_196_type 1413 -#define _tmp_197_type 1414 -#define _tmp_198_type 1415 -#define _tmp_199_type 1416 -#define _tmp_200_type 1417 -#define _tmp_201_type 1418 +#define signed_real_number_type 1051 +#define real_number_type 1052 +#define imaginary_number_type 1053 +#define capture_pattern_type 1054 +#define pattern_capture_target_type 1055 +#define wildcard_pattern_type 1056 +#define value_pattern_type 1057 +#define attr_type 1058 // Left-recursive +#define name_or_attr_type 1059 // Left-recursive +#define group_pattern_type 1060 +#define sequence_pattern_type 1061 +#define open_sequence_pattern_type 1062 +#define maybe_sequence_pattern_type 1063 +#define maybe_star_pattern_type 1064 +#define star_pattern_type 1065 +#define mapping_pattern_type 1066 +#define items_pattern_type 1067 +#define key_value_pattern_type 1068 +#define double_star_pattern_type 1069 +#define class_pattern_type 1070 +#define positional_patterns_type 1071 +#define keyword_patterns_type 1072 +#define keyword_pattern_type 1073 +#define return_stmt_type 1074 +#define raise_stmt_type 1075 +#define function_def_type 1076 +#define function_def_raw_type 1077 +#define func_type_comment_type 1078 +#define params_type 1079 +#define parameters_type 1080 +#define slash_no_default_type 1081 +#define slash_with_default_type 1082 +#define star_etc_type 1083 +#define kwds_type 1084 +#define param_no_default_type 1085 +#define param_with_default_type 1086 +#define param_maybe_default_type 1087 +#define param_type 1088 +#define annotation_type 1089 +#define default_type 1090 +#define decorators_type 1091 +#define class_def_type 1092 +#define class_def_raw_type 1093 +#define block_type 1094 +#define star_expressions_type 1095 +#define star_expression_type 1096 +#define star_named_expressions_type 1097 +#define star_named_expression_type 1098 +#define named_expression_type 1099 +#define direct_named_expression_type 1100 +#define annotated_rhs_type 1101 +#define expressions_type 1102 +#define expression_type 1103 +#define lambdef_type 1104 +#define lambda_params_type 1105 +#define lambda_parameters_type 1106 +#define lambda_slash_no_default_type 1107 +#define lambda_slash_with_default_type 1108 +#define lambda_star_etc_type 1109 +#define lambda_kwds_type 1110 +#define lambda_param_no_default_type 1111 +#define lambda_param_with_default_type 1112 +#define lambda_param_maybe_default_type 1113 +#define lambda_param_type 1114 +#define disjunction_type 1115 +#define conjunction_type 1116 +#define inversion_type 1117 +#define comparison_type 1118 +#define compare_op_bitwise_or_pair_type 1119 +#define eq_bitwise_or_type 1120 +#define noteq_bitwise_or_type 1121 +#define lte_bitwise_or_type 1122 +#define lt_bitwise_or_type 1123 +#define gte_bitwise_or_type 1124 +#define gt_bitwise_or_type 1125 +#define notin_bitwise_or_type 1126 +#define in_bitwise_or_type 1127 +#define isnot_bitwise_or_type 1128 +#define is_bitwise_or_type 1129 +#define bitwise_or_type 1130 // Left-recursive +#define bitwise_xor_type 1131 // Left-recursive +#define bitwise_and_type 1132 // Left-recursive +#define shift_expr_type 1133 // Left-recursive +#define sum_type 1134 // Left-recursive +#define term_type 1135 // Left-recursive +#define factor_type 1136 +#define power_type 1137 +#define await_primary_type 1138 +#define primary_type 1139 // Left-recursive +#define slices_type 1140 +#define slice_type 1141 +#define atom_type 1142 +#define strings_type 1143 +#define list_type 1144 +#define listcomp_type 1145 +#define tuple_type 1146 +#define group_type 1147 +#define genexp_type 1148 +#define set_type 1149 +#define setcomp_type 1150 +#define dict_type 1151 +#define dictcomp_type 1152 +#define double_starred_kvpairs_type 1153 +#define double_starred_kvpair_type 1154 +#define kvpair_type 1155 +#define for_if_clauses_type 1156 +#define for_if_clause_type 1157 +#define yield_expr_type 1158 +#define arguments_type 1159 +#define args_type 1160 +#define kwargs_type 1161 +#define starred_expression_type 1162 +#define kwarg_or_starred_type 1163 +#define kwarg_or_double_starred_type 1164 +#define star_targets_type 1165 +#define star_targets_list_seq_type 1166 +#define star_targets_tuple_seq_type 1167 +#define star_target_type 1168 +#define target_with_star_atom_type 1169 +#define star_atom_type 1170 +#define single_target_type 1171 +#define single_subscript_attribute_target_type 1172 +#define del_targets_type 1173 +#define del_target_type 1174 +#define del_t_atom_type 1175 +#define targets_type 1176 +#define target_type 1177 +#define t_primary_type 1178 // Left-recursive +#define t_lookahead_type 1179 +#define t_atom_type 1180 +#define invalid_arguments_type 1181 +#define invalid_kwarg_type 1182 +#define invalid_expression_type 1183 +#define invalid_named_expression_type 1184 +#define invalid_assignment_type 1185 +#define invalid_ann_assign_target_type 1186 +#define invalid_del_stmt_type 1187 +#define invalid_block_type 1188 +#define invalid_primary_type 1189 // Left-recursive +#define invalid_comprehension_type 1190 +#define invalid_dict_comprehension_type 1191 +#define invalid_parameters_type 1192 +#define invalid_parameters_helper_type 1193 +#define invalid_lambda_parameters_type 1194 +#define invalid_lambda_parameters_helper_type 1195 +#define invalid_star_etc_type 1196 +#define invalid_lambda_star_etc_type 1197 +#define invalid_double_type_comments_type 1198 +#define invalid_with_item_type 1199 +#define invalid_for_target_type 1200 +#define invalid_group_type 1201 +#define invalid_import_from_targets_type 1202 +#define invalid_with_stmt_type 1203 +#define invalid_with_stmt_indent_type 1204 +#define invalid_try_stmt_type 1205 +#define invalid_except_stmt_type 1206 +#define invalid_finally_stmt_type 1207 +#define invalid_except_stmt_indent_type 1208 +#define invalid_match_stmt_type 1209 +#define invalid_case_block_type 1210 +#define invalid_if_stmt_type 1211 +#define invalid_elif_stmt_type 1212 +#define invalid_else_stmt_type 1213 +#define invalid_while_stmt_type 1214 +#define invalid_for_stmt_type 1215 +#define invalid_def_raw_type 1216 +#define invalid_class_def_raw_type 1217 +#define invalid_double_starred_kvpairs_type 1218 +#define invalid_kvpair_type 1219 +#define _loop0_1_type 1220 +#define _loop0_2_type 1221 +#define _loop0_4_type 1222 +#define _gather_3_type 1223 +#define _loop0_6_type 1224 +#define _gather_5_type 1225 +#define _loop0_8_type 1226 +#define _gather_7_type 1227 +#define _loop0_10_type 1228 +#define _gather_9_type 1229 +#define _loop1_11_type 1230 +#define _loop0_13_type 1231 +#define _gather_12_type 1232 +#define _tmp_14_type 1233 +#define _tmp_15_type 1234 +#define _tmp_16_type 1235 +#define _tmp_17_type 1236 +#define _tmp_18_type 1237 +#define _tmp_19_type 1238 +#define _tmp_20_type 1239 +#define _tmp_21_type 1240 +#define _loop1_22_type 1241 +#define _tmp_23_type 1242 +#define _tmp_24_type 1243 +#define _loop0_26_type 1244 +#define _gather_25_type 1245 +#define _loop0_28_type 1246 +#define _gather_27_type 1247 +#define _tmp_29_type 1248 +#define _tmp_30_type 1249 +#define _loop0_31_type 1250 +#define _loop1_32_type 1251 +#define _loop0_34_type 1252 +#define _gather_33_type 1253 +#define _tmp_35_type 1254 +#define _loop0_37_type 1255 +#define _gather_36_type 1256 +#define _tmp_38_type 1257 +#define _loop0_40_type 1258 +#define _gather_39_type 1259 +#define _loop0_42_type 1260 +#define _gather_41_type 1261 +#define _loop0_44_type 1262 +#define _gather_43_type 1263 +#define _loop0_46_type 1264 +#define _gather_45_type 1265 +#define _tmp_47_type 1266 +#define _loop1_48_type 1267 +#define _tmp_49_type 1268 +#define _loop1_50_type 1269 +#define _loop0_52_type 1270 +#define _gather_51_type 1271 +#define _tmp_53_type 1272 +#define _tmp_54_type 1273 +#define _tmp_55_type 1274 +#define _tmp_56_type 1275 +#define _loop0_58_type 1276 +#define _gather_57_type 1277 +#define _loop0_60_type 1278 +#define _gather_59_type 1279 +#define _tmp_61_type 1280 +#define _loop0_63_type 1281 +#define _gather_62_type 1282 +#define _loop0_65_type 1283 +#define _gather_64_type 1284 +#define _tmp_66_type 1285 +#define _tmp_67_type 1286 +#define _tmp_68_type 1287 +#define _tmp_69_type 1288 +#define _loop0_70_type 1289 +#define _loop0_71_type 1290 +#define _loop0_72_type 1291 +#define _loop1_73_type 1292 +#define _loop0_74_type 1293 +#define _loop1_75_type 1294 +#define _loop1_76_type 1295 +#define _loop1_77_type 1296 +#define _loop0_78_type 1297 +#define _loop1_79_type 1298 +#define _loop0_80_type 1299 +#define _loop1_81_type 1300 +#define _loop0_82_type 1301 +#define _loop1_83_type 1302 +#define _loop1_84_type 1303 +#define _tmp_85_type 1304 +#define _loop1_86_type 1305 +#define _loop0_88_type 1306 +#define _gather_87_type 1307 +#define _loop1_89_type 1308 +#define _loop0_90_type 1309 +#define _loop0_91_type 1310 +#define _loop0_92_type 1311 +#define _loop1_93_type 1312 +#define _loop0_94_type 1313 +#define _loop1_95_type 1314 +#define _loop1_96_type 1315 +#define _loop1_97_type 1316 +#define _loop0_98_type 1317 +#define _loop1_99_type 1318 +#define _loop0_100_type 1319 +#define _loop1_101_type 1320 +#define _loop0_102_type 1321 +#define _loop1_103_type 1322 +#define _loop1_104_type 1323 +#define _loop1_105_type 1324 +#define _loop1_106_type 1325 +#define _tmp_107_type 1326 +#define _loop0_109_type 1327 +#define _gather_108_type 1328 +#define _tmp_110_type 1329 +#define _tmp_111_type 1330 +#define _tmp_112_type 1331 +#define _tmp_113_type 1332 +#define _loop1_114_type 1333 +#define _tmp_115_type 1334 +#define _tmp_116_type 1335 +#define _loop0_118_type 1336 +#define _gather_117_type 1337 +#define _loop1_119_type 1338 +#define _loop0_120_type 1339 +#define _loop0_121_type 1340 +#define _loop0_123_type 1341 +#define _gather_122_type 1342 +#define _tmp_124_type 1343 +#define _loop0_126_type 1344 +#define _gather_125_type 1345 +#define _loop0_128_type 1346 +#define _gather_127_type 1347 +#define _loop0_130_type 1348 +#define _gather_129_type 1349 +#define _loop0_132_type 1350 +#define _gather_131_type 1351 +#define _loop0_133_type 1352 +#define _loop0_135_type 1353 +#define _gather_134_type 1354 +#define _loop1_136_type 1355 +#define _tmp_137_type 1356 +#define _loop0_139_type 1357 +#define _gather_138_type 1358 +#define _loop0_141_type 1359 +#define _gather_140_type 1360 +#define _tmp_142_type 1361 +#define _tmp_143_type 1362 +#define _tmp_144_type 1363 +#define _tmp_145_type 1364 +#define _tmp_146_type 1365 +#define _loop0_147_type 1366 +#define _loop0_148_type 1367 +#define _loop0_149_type 1368 +#define _tmp_150_type 1369 +#define _tmp_151_type 1370 +#define _tmp_152_type 1371 +#define _tmp_153_type 1372 +#define _loop0_154_type 1373 +#define _loop1_155_type 1374 +#define _loop0_156_type 1375 +#define _loop1_157_type 1376 +#define _tmp_158_type 1377 +#define _tmp_159_type 1378 +#define _tmp_160_type 1379 +#define _loop0_162_type 1380 +#define _gather_161_type 1381 +#define _loop0_164_type 1382 +#define _gather_163_type 1383 +#define _loop0_166_type 1384 +#define _gather_165_type 1385 +#define _loop0_168_type 1386 +#define _gather_167_type 1387 +#define _tmp_169_type 1388 +#define _tmp_170_type 1389 +#define _tmp_171_type 1390 +#define _tmp_172_type 1391 +#define _tmp_173_type 1392 +#define _loop0_175_type 1393 +#define _gather_174_type 1394 +#define _tmp_176_type 1395 +#define _tmp_177_type 1396 +#define _tmp_178_type 1397 +#define _tmp_179_type 1398 +#define _tmp_180_type 1399 +#define _tmp_181_type 1400 +#define _tmp_182_type 1401 +#define _tmp_183_type 1402 +#define _tmp_184_type 1403 +#define _tmp_185_type 1404 +#define _tmp_186_type 1405 +#define _tmp_187_type 1406 +#define _tmp_188_type 1407 +#define _tmp_189_type 1408 +#define _tmp_190_type 1409 +#define _tmp_191_type 1410 +#define _tmp_192_type 1411 +#define _tmp_193_type 1412 +#define _tmp_194_type 1413 +#define _tmp_195_type 1414 +#define _tmp_196_type 1415 +#define _tmp_197_type 1416 +#define _tmp_198_type 1417 +#define _tmp_199_type 1418 +#define _tmp_200_type 1419 +#define _tmp_201_type 1420 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -542,6 +544,8 @@ static pattern_ty literal_pattern_rule(Parser *p); static expr_ty literal_expr_rule(Parser *p); static expr_ty complex_number_rule(Parser *p); static expr_ty signed_number_rule(Parser *p); +static expr_ty signed_real_number_rule(Parser *p); +static expr_ty real_number_rule(Parser *p); static expr_ty imaginary_number_rule(Parser *p); static pattern_ty capture_pattern_rule(Parser *p); static expr_ty pattern_capture_target_rule(Parser *p); @@ -6318,7 +6322,9 @@ literal_expr_rule(Parser *p) return _res; } -// complex_number: signed_number '+' imaginary_number | signed_number '-' imaginary_number +// complex_number: +// | signed_real_number '+' imaginary_number +// | signed_real_number '-' imaginary_number static expr_ty complex_number_rule(Parser *p) { @@ -6338,24 +6344,24 @@ complex_number_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // signed_number '+' imaginary_number + { // signed_real_number '+' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '+' imaginary_number")); + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); Token * _literal; expr_ty imag; expr_ty real; if ( - (real = signed_number_rule(p)) // signed_number + (real = signed_real_number_rule(p)) // signed_real_number && (_literal = _PyPegen_expect_token(p, 14)) // token='+' && (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '+' imaginary_number")); + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6375,26 +6381,26 @@ complex_number_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '+' imaginary_number")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '+' imaginary_number")); } - { // signed_number '-' imaginary_number + { // signed_real_number '-' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number '-' imaginary_number")); + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); Token * _literal; expr_ty imag; expr_ty real; if ( - (real = signed_number_rule(p)) // signed_number + (real = signed_real_number_rule(p)) // signed_real_number && (_literal = _PyPegen_expect_token(p, 15)) // token='-' && (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number '-' imaginary_number")); + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6414,7 +6420,7 @@ complex_number_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number '-' imaginary_number")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '-' imaginary_number")); } _res = NULL; done: @@ -6503,6 +6509,128 @@ signed_number_rule(Parser *p) return _res; } +// signed_real_number: real_number | '-' real_number +static expr_ty +signed_real_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // real_number + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number")); + expr_ty real_number_var; + if ( + (real_number_var = real_number_rule(p)) // real_number + ) + { + D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "real_number")); + _res = real_number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "real_number")); + } + { // '-' real_number + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number")); + Token * _literal; + expr_ty real; + if ( + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + && + (real = real_number_rule(p)) // real_number + ) + { + D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( USub , real , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' real_number")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// real_number: NUMBER +static expr_ty +real_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // NUMBER + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty real; + if ( + (real = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = _PyPegen_ensure_real ( p , real ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + // imaginary_number: NUMBER static expr_ty imaginary_number_rule(Parser *p) @@ -7535,18 +7663,13 @@ items_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - asdl_seq * items; + asdl_seq * _gather_59_var; if ( - (items = _gather_59_rule(p)) // ','.key_value_pattern+ + (_gather_59_var = _gather_59_rule(p)) // ','.key_value_pattern+ ) { D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - _res = items; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + _res = _gather_59_var; goto done; } p->mark = _mark; @@ -7921,18 +8044,13 @@ keyword_patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - asdl_seq* keywords; + asdl_seq * _gather_64_var; if ( - (keywords = (asdl_seq*)_gather_64_rule(p)) // ','.keyword_pattern+ + (_gather_64_var = _gather_64_rule(p)) // ','.keyword_pattern+ ) { D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - _res = keywords; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + _res = _gather_64_var; goto done; } p->mark = _mark; diff --git a/Parser/pegen.c b/Parser/pegen.c index 4d6e69edc2330..e32b2710dbda2 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -2352,7 +2352,17 @@ expr_ty _PyPegen_ensure_imaginary(Parser *p, expr_ty exp) { if (exp->kind != Constant_kind || !PyComplex_CheckExact(exp->v.Constant.value)) { - RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "Imaginary number required in complex literal"); + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "imaginary number required in complex literal"); + return NULL; + } + return exp; +} + +expr_ty +_PyPegen_ensure_real(Parser *p, expr_ty exp) +{ + if (exp->kind != Constant_kind || PyComplex_CheckExact(exp->v.Constant.value)) { + RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "real number required in complex literal"); return NULL; } return exp; diff --git a/Parser/pegen.h b/Parser/pegen.h index 2af551b706993..d591c566968c7 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -153,7 +153,7 @@ void * _PyPegen_seq_last_item(asdl_seq *seq); Py_LOCAL_INLINE(void *) RAISE_ERROR_KNOWN_LOCATION(Parser *p, PyObject *errtype, Py_ssize_t lineno, Py_ssize_t col_offset, - Py_ssize_t end_lineno, Py_ssize_t end_col_offset, + Py_ssize_t end_lineno, Py_ssize_t end_col_offset, const char *errmsg, ...) { va_list va; @@ -284,6 +284,7 @@ expr_ty _PyPegen_collect_call_seqs(Parser *, asdl_expr_seq *, asdl_seq *, int end_col_offset, PyArena *arena); expr_ty _PyPegen_concatenate_strings(Parser *p, asdl_seq *); expr_ty _PyPegen_ensure_imaginary(Parser *p, expr_ty); +expr_ty _PyPegen_ensure_real(Parser *p, expr_ty); asdl_seq *_PyPegen_join_sequences(Parser *, asdl_seq *, asdl_seq *); int _PyPegen_check_barry_as_flufl(Parser *, Token *); mod_ty _PyPegen_make_module(Parser *, asdl_stmt_seq *); diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 254dd646c467b..c1fdea3a88c9c 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -825,7 +825,7 @@ astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) break; case MatchAs_kind: if (node_->v.MatchAs.pattern) { - CALL(astfold_pattern, expr_ty, node_->v.MatchAs.pattern); + CALL(astfold_pattern, pattern_ty, node_->v.MatchAs.pattern); } break; case MatchOr_kind: diff --git a/Python/compile.c b/Python/compile.c index 1349a852a26a1..6560fd426aef9 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -5609,6 +5609,10 @@ compiler_slice(struct compiler *c, expr_ty s) static int pattern_helper_store_name(struct compiler *c, identifier n, pattern_context *pc) { + if (n == NULL) { + ADDOP(c, POP_TOP); + return 1; + } if (forbidden_name(c, n, Store)) { return 0; } @@ -5782,42 +5786,23 @@ compiler_pattern_subpattern(struct compiler *c, pattern_ty p, pattern_context *p return 1; } -static int -compiler_pattern_capture(struct compiler *c, identifier n, pattern_context *pc) -{ - RETURN_IF_FALSE(pattern_helper_store_name(c, n, pc)); - ADDOP_LOAD_CONST(c, Py_True); - return 1; -} - -static int -compiler_pattern_wildcard(struct compiler *c, pattern_ty p, pattern_context *pc) -{ - assert(p->kind == MatchAs_kind); - if (!pc->allow_irrefutable) { - // Whoops, can't have a wildcard here! - const char *e = "wildcard makes remaining patterns unreachable"; - return compiler_error(c, e); - } - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); - return 1; -} - static int compiler_pattern_as(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchAs_kind); - if (p->v.MatchAs.name == NULL) { - return compiler_pattern_wildcard(c, p, pc); - } if (p->v.MatchAs.pattern == NULL) { + // An irrefutable match: if (!pc->allow_irrefutable) { - // Whoops, can't have a name capture here! - const char *e = "name capture %R makes remaining patterns unreachable"; - return compiler_error(c, e, p->v.MatchAs.name); + if (p->v.MatchAs.name) { + const char *e = "name capture %R makes remaining patterns unreachable"; + return compiler_error(c, e, p->v.MatchAs.name); + } + const char *e = "wildcard makes remaining patterns unreachable"; + return compiler_error(c, e); } - return compiler_pattern_capture(c, p->v.MatchAs.name, pc); + RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.MatchAs.name, pc)); + ADDOP_LOAD_CONST(c, Py_True); + return 1; } basicblock *end, *fail_pop_1; RETURN_IF_FALSE(end = compiler_new_block(c)); @@ -5842,12 +5827,9 @@ static int compiler_pattern_star(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchStar_kind); - if (!pc->allow_irrefutable) { - // Whoops, can't have a star capture here! - const char *e = "star captures are only allowed as part of sequence patterns"; - return compiler_error(c, e); - } - return compiler_pattern_capture(c, p->v.MatchStar.name, pc); + RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.MatchStar.name, pc)); + ADDOP_LOAD_CONST(c, Py_True); + return 1; } static int @@ -6206,7 +6188,7 @@ compiler_pattern_value(struct compiler *c, pattern_ty p, pattern_context *pc) } static int -compiler_pattern_constant(struct compiler *c, pattern_ty p, pattern_context *pc) +compiler_pattern_singleton(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchSingleton_kind); ADDOP_LOAD_CONST(c, p->v.MatchSingleton.value); @@ -6222,7 +6204,7 @@ compiler_pattern(struct compiler *c, pattern_ty p, pattern_context *pc) case MatchValue_kind: return compiler_pattern_value(c, p, pc); case MatchSingleton_kind: - return compiler_pattern_constant(c, p, pc); + return compiler_pattern_singleton(c, p, pc); case MatchSequence_kind: return compiler_pattern_sequence(c, p, pc); case MatchMapping_kind: From webhook-mailer at python.org Thu Apr 29 23:09:15 2021 From: webhook-mailer at python.org (larryhastings) Date: Fri, 30 Apr 2021 03:09:15 -0000 Subject: [Python-checkins] bpo-43901: Lazy-create an empty annotations dict in all unannotated user classes and modules (#25623) Message-ID: https://github.com/python/cpython/commit/2f2b69855d6524e15d12c15ddc0adce629e7de84 commit: 2f2b69855d6524e15d12c15ddc0adce629e7de84 branch: master author: larryhastings committer: larryhastings date: 2021-04-29T20:09:08-07:00 summary: bpo-43901: Lazy-create an empty annotations dict in all unannotated user classes and modules (#25623) Change class and module objects to lazy-create empty annotations dicts on demand. The annotations dicts are stored in the object's `__dict__` for backwards compatibility. files: A Lib/test/ann_module4.py A Lib/test/test_type_annotations.py A Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst M Lib/test/test_grammar.py M Lib/test/test_module.py M Lib/test/test_opcodes.py M Lib/typing.py M Objects/moduleobject.c M Objects/typeobject.c diff --git a/Lib/test/ann_module4.py b/Lib/test/ann_module4.py new file mode 100644 index 0000000000000..13e9aee54c98b --- /dev/null +++ b/Lib/test/ann_module4.py @@ -0,0 +1,5 @@ +# This ann_module isn't for test_typing, +# it's for test_module + +a:int=3 +b:str=4 diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 6f79e19a54435..46f70e5d176fc 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -382,8 +382,7 @@ class CC(metaclass=CMeta): self.assertEqual(CC.__annotations__['xx'], 'ANNOT') def test_var_annot_module_semantics(self): - with self.assertRaises(AttributeError): - print(test.__annotations__) + self.assertEqual(test.__annotations__, {}) self.assertEqual(ann_module.__annotations__, {1: 2, 'x': int, 'y': str, 'f': typing.Tuple[int, int]}) self.assertEqual(ann_module.M.__annotations__, diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index 1d44563579fd2..aa5ee49854059 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -286,6 +286,60 @@ class M(ModuleType): melon = Descr() self.assertRaises(RuntimeError, getattr, M("mymod"), "melon") + def test_lazy_create_annotations(self): + # module objects lazy create their __annotations__ dict on demand. + # the annotations dict is stored in module.__dict__. + # a freshly created module shouldn't have an annotations dict yet. + foo = ModuleType("foo") + for i in range(4): + self.assertFalse("__annotations__" in foo.__dict__) + d = foo.__annotations__ + self.assertTrue("__annotations__" in foo.__dict__) + self.assertEqual(foo.__annotations__, d) + self.assertEqual(foo.__dict__['__annotations__'], d) + if i % 2: + del foo.__annotations__ + else: + del foo.__dict__['__annotations__'] + + def test_setting_annotations(self): + foo = ModuleType("foo") + for i in range(4): + self.assertFalse("__annotations__" in foo.__dict__) + d = {'a': int} + foo.__annotations__ = d + self.assertTrue("__annotations__" in foo.__dict__) + self.assertEqual(foo.__annotations__, d) + self.assertEqual(foo.__dict__['__annotations__'], d) + if i % 2: + del foo.__annotations__ + else: + del foo.__dict__['__annotations__'] + + def test_annotations_getset_raises(self): + # module has no dict, all operations fail + foo = ModuleType.__new__(ModuleType) + with self.assertRaises(TypeError): + print(foo.__annotations__) + with self.assertRaises(TypeError): + foo.__annotations__ = {} + with self.assertRaises(TypeError): + del foo.__annotations__ + + # double delete + foo = ModuleType("foo") + foo.__annotations__ = {} + del foo.__annotations__ + with self.assertRaises(AttributeError): + del foo.__annotations__ + + def test_annotations_are_created_correctly(self): + from test import ann_module4 + self.assertTrue("__annotations__" in ann_module4.__dict__) + del ann_module4.__annotations__ + self.assertFalse("__annotations__" in ann_module4.__dict__) + + # frozen and namespace module reprs are tested in importlib. diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py index d43a8303b1710..e880c3f1ac875 100644 --- a/Lib/test/test_opcodes.py +++ b/Lib/test/test_opcodes.py @@ -31,10 +31,9 @@ def test_setup_annotations_line(self): except OSError: pass - def test_no_annotations_if_not_needed(self): + def test_default_annotations_exist(self): class C: pass - with self.assertRaises(AttributeError): - C.__annotations__ + self.assertEqual(C.__annotations__, {}) def test_use_existing_annotations(self): ns = {'__annotations__': {1: 2}} diff --git a/Lib/test/test_type_annotations.py b/Lib/test/test_type_annotations.py new file mode 100644 index 0000000000000..f6c99bda3aa6f --- /dev/null +++ b/Lib/test/test_type_annotations.py @@ -0,0 +1,103 @@ +import unittest + +class TypeAnnotationTests(unittest.TestCase): + + def test_lazy_create_annotations(self): + # type objects lazy create their __annotations__ dict on demand. + # the annotations dict is stored in type.__dict__. + # a freshly created type shouldn't have an annotations dict yet. + foo = type("Foo", (), {}) + for i in range(3): + self.assertFalse("__annotations__" in foo.__dict__) + d = foo.__annotations__ + self.assertTrue("__annotations__" in foo.__dict__) + self.assertEqual(foo.__annotations__, d) + self.assertEqual(foo.__dict__['__annotations__'], d) + del foo.__annotations__ + + def test_setting_annotations(self): + foo = type("Foo", (), {}) + for i in range(3): + self.assertFalse("__annotations__" in foo.__dict__) + d = {'a': int} + foo.__annotations__ = d + self.assertTrue("__annotations__" in foo.__dict__) + self.assertEqual(foo.__annotations__, d) + self.assertEqual(foo.__dict__['__annotations__'], d) + del foo.__annotations__ + + def test_annotations_getset_raises(self): + # builtin types don't have __annotations__ (yet!) + with self.assertRaises(AttributeError): + print(float.__annotations__) + with self.assertRaises(TypeError): + float.__annotations__ = {} + with self.assertRaises(TypeError): + del float.__annotations__ + + # double delete + foo = type("Foo", (), {}) + foo.__annotations__ = {} + del foo.__annotations__ + with self.assertRaises(AttributeError): + del foo.__annotations__ + + def test_annotations_are_created_correctly(self): + class C: + a:int=3 + b:str=4 + self.assertTrue("__annotations__" in C.__dict__) + del C.__annotations__ + self.assertFalse("__annotations__" in C.__dict__) + + def test_descriptor_still_works(self): + class C: + def __init__(self, name=None, bases=None, d=None): + self.my_annotations = None + + @property + def __annotations__(self): + if not hasattr(self, 'my_annotations'): + self.my_annotations = {} + if not isinstance(self.my_annotations, dict): + self.my_annotations = {} + return self.my_annotations + + @__annotations__.setter + def __annotations__(self, value): + if not isinstance(value, dict): + raise ValueError("can only set __annotations__ to a dict") + self.my_annotations = value + + @__annotations__.deleter + def __annotations__(self): + if hasattr(self, 'my_annotations') and self.my_annotations == None: + raise AttributeError('__annotations__') + self.my_annotations = None + + c = C() + self.assertEqual(c.__annotations__, {}) + d = {'a':'int'} + c.__annotations__ = d + self.assertEqual(c.__annotations__, d) + with self.assertRaises(ValueError): + c.__annotations__ = 123 + del c.__annotations__ + with self.assertRaises(AttributeError): + del c.__annotations__ + self.assertEqual(c.__annotations__, {}) + + + class D(metaclass=C): + pass + + self.assertEqual(D.__annotations__, {}) + d = {'a':'int'} + D.__annotations__ = d + self.assertEqual(D.__annotations__, d) + with self.assertRaises(ValueError): + D.__annotations__ = 123 + del D.__annotations__ + with self.assertRaises(AttributeError): + del D.__annotations__ + self.assertEqual(D.__annotations__, {}) diff --git a/Lib/typing.py b/Lib/typing.py index d409517ff58e9..ff964343c5336 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1677,6 +1677,8 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False): else: base_globals = globalns ann = base.__dict__.get('__annotations__', {}) + if isinstance(ann, types.GetSetDescriptorType): + ann = {} base_locals = dict(vars(base)) if localns is None else localns if localns is None and globalns is None: # This is surprising, but required. Before Python 3.10, diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst new file mode 100644 index 0000000000000..2ab93d1f756f6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst @@ -0,0 +1,3 @@ +Change class and module objects to lazy-create empty annotations dicts on +demand. The annotations dicts are stored in the object's __dict__ for +backwards compatibility. diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index a6eb85bdc2a96..cdb365d29a914 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -12,6 +12,9 @@ static Py_ssize_t max_module_number; _Py_IDENTIFIER(__doc__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__spec__); +_Py_IDENTIFIER(__dict__); +_Py_IDENTIFIER(__dir__); +_Py_IDENTIFIER(__annotations__); static PyMemberDef module_members[] = { {"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY}, @@ -807,8 +810,6 @@ module_clear(PyModuleObject *m) static PyObject * module_dir(PyObject *self, PyObject *args) { - _Py_IDENTIFIER(__dict__); - _Py_IDENTIFIER(__dir__); PyObject *result = NULL; PyObject *dict = _PyObject_GetAttrId(self, &PyId___dict__); @@ -841,6 +842,71 @@ static PyMethodDef module_methods[] = { {0} }; +static PyObject * +module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored)) +{ + PyObject *dict = _PyObject_GetAttrId((PyObject *)m, &PyId___dict__); + + if ((dict == NULL) || !PyDict_Check(dict)) { + PyErr_Format(PyExc_TypeError, ".__dict__ is not a dictionary"); + return NULL; + } + + PyObject *annotations; + /* there's no _PyDict_GetItemId without WithError, so let's LBYL. */ + if (_PyDict_ContainsId(dict, &PyId___annotations__)) { + annotations = _PyDict_GetItemIdWithError(dict, &PyId___annotations__); + /* + ** _PyDict_GetItemIdWithError could still fail, + ** for instance with a well-timed Ctrl-C or a MemoryError. + ** so let's be totally safe. + */ + if (annotations) { + Py_INCREF(annotations); + } + } else { + annotations = PyDict_New(); + if (annotations) { + int result = _PyDict_SetItemId(dict, &PyId___annotations__, annotations); + if (result) { + Py_CLEAR(annotations); + } + } + } + Py_DECREF(dict); + return annotations; +} + +static int +module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored)) +{ + PyObject *dict = _PyObject_GetAttrId((PyObject *)m, &PyId___dict__); + + if ((dict == NULL) || !PyDict_Check(dict)) { + PyErr_Format(PyExc_TypeError, ".__dict__ is not a dictionary"); + return -1; + } + + if (value != NULL) { + /* set */ + return _PyDict_SetItemId(dict, &PyId___annotations__, value); + } + + /* delete */ + if (!_PyDict_ContainsId(dict, &PyId___annotations__)) { + PyErr_Format(PyExc_AttributeError, "__annotations__"); + return -1; + } + + return _PyDict_DelItemId(dict, &PyId___annotations__); +} + + +static PyGetSetDef module_getsets[] = { + {"__annotations__", (getter)module_get_annotations, (setter)module_set_annotations}, + {NULL} +}; + PyTypeObject PyModule_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "module", /* tp_name */ @@ -872,7 +938,7 @@ PyTypeObject PyModule_Type = { 0, /* tp_iternext */ module_methods, /* tp_methods */ module_members, /* tp_members */ - 0, /* tp_getset */ + module_getsets, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ diff --git a/Objects/typeobject.c b/Objects/typeobject.c index e1c8be4b81545..ac4dc1da4411d 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -52,6 +52,7 @@ typedef struct PySlot_Offset { /* alphabetical order */ _Py_IDENTIFIER(__abstractmethods__); +_Py_IDENTIFIER(__annotations__); _Py_IDENTIFIER(__class__); _Py_IDENTIFIER(__class_getitem__); _Py_IDENTIFIER(__classcell__); @@ -930,6 +931,73 @@ type_set_doc(PyTypeObject *type, PyObject *value, void *context) return _PyDict_SetItemId(type->tp_dict, &PyId___doc__, value); } +static PyObject * +type_get_annotations(PyTypeObject *type, void *context) +{ + if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + PyErr_Format(PyExc_AttributeError, "type object '%s' has no attribute '__annotations__'", type->tp_name); + return NULL; + } + + PyObject *annotations; + /* there's no _PyDict_GetItemId without WithError, so let's LBYL. */ + if (_PyDict_ContainsId(type->tp_dict, &PyId___annotations__)) { + annotations = _PyDict_GetItemIdWithError(type->tp_dict, &PyId___annotations__); + /* + ** _PyDict_GetItemIdWithError could still fail, + ** for instance with a well-timed Ctrl-C or a MemoryError. + ** so let's be totally safe. + */ + if (annotations) { + if (Py_TYPE(annotations)->tp_descr_get) { + annotations = Py_TYPE(annotations)->tp_descr_get(annotations, NULL, + (PyObject *)type); + } else { + Py_INCREF(annotations); + } + } + } else { + annotations = PyDict_New(); + if (annotations) { + int result = _PyDict_SetItemId(type->tp_dict, &PyId___annotations__, annotations); + if (result) { + Py_CLEAR(annotations); + } else { + PyType_Modified(type); + } + } + } + return annotations; +} + +static int +type_set_annotations(PyTypeObject *type, PyObject *value, void *context) +{ + if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + PyErr_Format(PyExc_TypeError, "can't set attributes of built-in/extension type '%s'", type->tp_name); + return -1; + } + + int result; + if (value != NULL) { + /* set */ + result = _PyDict_SetItemId(type->tp_dict, &PyId___annotations__, value); + } else { + /* delete */ + if (!_PyDict_ContainsId(type->tp_dict, &PyId___annotations__)) { + PyErr_Format(PyExc_AttributeError, "__annotations__"); + return -1; + } + result = _PyDict_DelItemId(type->tp_dict, &PyId___annotations__); + } + + if (result == 0) { + PyType_Modified(type); + } + return result; +} + + /*[clinic input] type.__instancecheck__ -> bool @@ -973,6 +1041,7 @@ static PyGetSetDef type_getsets[] = { {"__dict__", (getter)type_dict, NULL, NULL}, {"__doc__", (getter)type_get_doc, (setter)type_set_doc, NULL}, {"__text_signature__", (getter)type_get_text_signature, NULL, NULL}, + {"__annotations__", (getter)type_get_annotations, (setter)type_set_annotations, NULL}, {0} }; From webhook-mailer at python.org Thu Apr 29 23:13:33 2021 From: webhook-mailer at python.org (larryhastings) Date: Fri, 30 Apr 2021 03:13:33 -0000 Subject: [Python-checkins] Two minor fixes for accessing a module's name. (#25658) Message-ID: https://github.com/python/cpython/commit/175a54b2d8f967605f1d46b5cadccdcf2b54842f commit: 175a54b2d8f967605f1d46b5cadccdcf2b54842f branch: master author: larryhastings committer: larryhastings date: 2021-04-29T20:13:25-07:00 summary: Two minor fixes for accessing a module's name. (#25658) While working on another issue, I noticed two minor nits in the C implementation of the module object. Both are related to getting a module's name. First, the C function module_dir() (module.__dir__) starts by ensuring the module dict is valid. If the module dict is invalid, it wants to format an exception using the name of the module, which it gets from PyModule_GetName(). However, PyModule_GetName() gets the name of the module from the dict. So getting the name in this circumstance will never succeed. When module_dir() wants to format the error but can't get the name, it knows that PyModule_GetName() must have already raised an exception. So it leaves that exception alone and returns an error. The end result is that the exception raised here is kind of useless and misleading: dir(module) on a module with no __dict__ raises SystemError("nameless module"). I changed the code to actually raise the exception it wanted to raise, just without a real module name: TypeError(".__dict__ is not a dictionary"). This seems more useful, and would do a better job putting the programmer who encountered this on the right track of figuring out what was going on. Second, the C API function PyModule_GetNameObject() checks to see if the module has a dict. If m->md_dict is not NULL, it calls _PyDict_GetItemIdWithError(). However, it's possible for m->md_dict to be None. And if you call _PyDict_GetItemIdWithError(Py_None, ...) it will *crash*. Unfortunately, this crash was due to my own bug in the other branch. Fixing my code made the crash go away. I assert that this is still possible at the API level. The fix is easy: add a PyDict_Check() to PyModule_GetNameObject(). Unfortunately, I don't know how to add a unit test for this. Having changed module_dir() above, I can't find any other interfaces callable from Python that eventually call PyModule_GetNameObject(). So I don't know how to trick the runtime into reproducing this error. Since both these changes are minor--each entails only a small edit to only one line--I didn't bother with a news item. files: M Lib/test/test_module.py M Objects/moduleobject.c diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index aa5ee49854059..0fd82ea713f7c 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -22,7 +22,7 @@ def test_uninitialized(self): # and __doc__ is None foo = ModuleType.__new__(ModuleType) self.assertTrue(foo.__dict__ is None) - self.assertRaises(SystemError, dir, foo) + self.assertRaises(TypeError, dir, foo) try: s = foo.__name__ self.fail("__name__ = %s" % repr(s)) diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index cdb365d29a914..04346f7ad1067 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -481,7 +481,7 @@ PyModule_GetNameObject(PyObject *m) return NULL; } d = ((PyModuleObject *)m)->md_dict; - if (d == NULL || + if (d == NULL || !PyDict_Check(d) || (name = _PyDict_GetItemIdWithError(d, &PyId___name__)) == NULL || !PyUnicode_Check(name)) { @@ -824,11 +824,7 @@ module_dir(PyObject *self, PyObject *args) } } else { - const char *name = PyModule_GetName(self); - if (name) - PyErr_Format(PyExc_TypeError, - "%.200s.__dict__ is not a dictionary", - name); + PyErr_Format(PyExc_TypeError, ".__dict__ is not a dictionary"); } } From webhook-mailer at python.org Thu Apr 29 23:52:56 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 30 Apr 2021 03:52:56 -0000 Subject: [Python-checkins] bpo-43981: Fix error in idle-test leak test (GH-25739) Message-ID: https://github.com/python/cpython/commit/a62e424de0c394cda178a8d934d06f0559b5e28d commit: a62e424de0c394cda178a8d934d06f0559b5e28d branch: master author: Terry Jan Reedy committer: terryjreedy date: 2021-04-29T23:52:47-04:00 summary: bpo-43981: Fix error in idle-test leak test (GH-25739) Remove call to macosx.setupApp, which calls macosc.overrideRootMenu, which modifies the menus, which results in two failures in the second round of the leak test. files: M Lib/idlelib/idle_test/test_sidebar.py diff --git a/Lib/idlelib/idle_test/test_sidebar.py b/Lib/idlelib/idle_test/test_sidebar.py index 7228d0ee731fa..0497f6d05139e 100644 --- a/Lib/idlelib/idle_test/test_sidebar.py +++ b/Lib/idlelib/idle_test/test_sidebar.py @@ -7,11 +7,10 @@ import unittest.mock from test.support import requires, swap_attr import tkinter as tk -from .tkinter_testing_utils import run_in_tk_mainloop +from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop from idlelib.delegator import Delegator from idlelib.editor import fixwordbreaks -from idlelib import macosx from idlelib.percolator import Percolator import idlelib.pyshell from idlelib.pyshell import fix_x11_paste, PyShell, PyShellFileList @@ -408,7 +407,7 @@ def setUpClass(cls): fix_x11_paste(root) cls.flist = flist = PyShellFileList(root) - macosx.setupApp(root, flist) + # See #43981 about macosx.setupApp(root, flist) causing failure. root.update_idletasks() cls.init_shell() From webhook-mailer at python.org Fri Apr 30 00:16:36 2021 From: webhook-mailer at python.org (larryhastings) Date: Fri, 30 Apr 2021 04:16:36 -0000 Subject: [Python-checkins] bpo-43817: Add inspect.get_annotations(). (#25522) Message-ID: https://github.com/python/cpython/commit/74613a46fc79cacc88d3eae4105b12691cd4ba20 commit: 74613a46fc79cacc88d3eae4105b12691cd4ba20 branch: master author: larryhastings committer: larryhastings date: 2021-04-29T21:16:28-07:00 summary: bpo-43817: Add inspect.get_annotations(). (#25522) Add inspect.get_annotations, which safely computes the annotations defined on an object. It works around the quirks of accessing the annotations from various types of objects, and makes very few assumptions about the object passed in. inspect.get_annotations can also correctly un-stringize stringized annotations. inspect.signature, inspect.from_callable, and inspect.from_function now call inspect.get_annotations to retrieve annotations. This means inspect.signature and inspect.from_callable can now un-stringize stringized annotations, too. files: A Lib/test/inspect_stock_annotations.py A Lib/test/inspect_stringized_annotations.py A Lib/test/inspect_stringized_annotations_2.py A Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst M Doc/library/inspect.rst M Lib/inspect.py M Lib/test/test_inspect.py diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 10339641c3b43..56c2f76708d43 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -562,7 +562,7 @@ The Signature object represents the call signature of a callable object and its return annotation. To retrieve a Signature object, use the :func:`signature` function. -.. function:: signature(callable, *, follow_wrapped=True, globalns=None, localns=None) +.. function:: signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False) Return a :class:`Signature` object for the given ``callable``:: @@ -584,11 +584,20 @@ function. Accepts a wide range of Python callables, from plain functions and classes to :func:`functools.partial` objects. - Raises :exc:`ValueError` if no signature can be provided, and - :exc:`TypeError` if that type of object is not supported. + For objects defined in modules using stringized annotations + (``from __future__ import annotations``), :func:`signature` will + attempt to automatically un-stringize the annotations using + :func:`inspect.get_annotations()`. The + ``global``, ``locals``, and ``eval_str`` parameters are passed + into :func:`inspect.get_annotations()` when resolving the + annotations; see the documentation for :func:`inspect.get_annotations()` + for instructions on how to use these parameters. - ``globalns`` and ``localns`` are passed into - :func:`typing.get_type_hints` when resolving the annotations. + Raises :exc:`ValueError` if no signature can be provided, and + :exc:`TypeError` if that type of object is not supported. Also, + if the annotations are stringized, and ``eval_str`` is not false, + the ``eval()`` call(s) to un-stringize the annotations could + potentially raise any kind of exception. A slash(/) in the signature of a function denotes that the parameters prior to it are positional-only. For more info, see @@ -600,7 +609,7 @@ function. unwrap decorated callables.) .. versionadded:: 3.10 - ``globalns`` and ``localns`` parameters. + ``globals``, ``locals``, and ``eval_str`` parameters. .. note:: @@ -608,12 +617,6 @@ function. Python. For example, in CPython, some built-in functions defined in C provide no metadata about their arguments. - .. note:: - - Will first try to resolve the annotations, but when it fails and - encounters with an error while that operation, the annotations will be - returned unchanged (as strings). - .. class:: Signature(parameters=None, *, return_annotation=Signature.empty) @@ -1115,6 +1118,55 @@ Classes and functions .. versionadded:: 3.4 +.. function:: get_annotations(obj, *, globals=None, locals=None, eval_str=False) + + Compute the annotations dict for an object. + + ``obj`` may be a callable, class, or module. + Passing in an object of any other type raises :exc:`TypeError`. + + Returns a dict. ``get_annotations()`` returns a new dict every time + it's called; calling it twice on the same object will return two + different but equivalent dicts. + + This function handles several details for you: + + * If ``eval_str`` is true, values of type ``str`` will + be un-stringized using :func:`eval()`. This is intended + for use with stringized annotations + (``from __future__ import annotations``). + * If ``obj`` doesn't have an annotations dict, returns an + empty dict. (Functions and methods always have an + annotations dict; classes, modules, and other types of + callables may not.) + * Ignores inherited annotations on classes. If a class + doesn't have its own annotations dict, returns an empty dict. + * All accesses to object members and dict values are done + using ``getattr()`` and ``dict.get()`` for safety. + * Always, always, always returns a freshly-created dict. + + ``eval_str`` controls whether or not values of type ``str`` are replaced + with the result of calling :func:`eval()` on those values: + + * If eval_str is true, :func:`eval()` is called on values of type ``str``. + * If eval_str is false (the default), values of type ``str`` are unchanged. + + ``globals`` and ``locals`` are passed in to :func:`eval()`; see the documentation + for :func:`eval()` for more information. If ``globals`` or ``locals`` + is ``None``, this function may replace that value with a context-specific + default, contingent on ``type(obj)``: + + * If ``obj`` is a module, ``globals`` defaults to ``obj.__dict__``. + * If ``obj`` is a class, ``globals`` defaults to + ``sys.modules[obj.__module__].__dict__`` and ``locals`` defaults + to the ``obj`` class namespace. + * If ``obj`` is a callable, ``globals`` defaults to ``obj.__globals__``, + although if ``obj`` is a wrapped function (using + ``functools.update_wrapper()``) it is first unwrapped. + + .. versionadded:: 3.10 + + .. _inspect-stack: The interpreter stack diff --git a/Lib/inspect.py b/Lib/inspect.py index b8e247ec252bb..9f8cc01310f10 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -24,6 +24,8 @@ stack(), trace() - get info about frames on the stack or in a traceback signature() - get a Signature object for the callable + + get_annotations() - safely compute an object's annotations """ # This module is in the public domain. No warranties. @@ -60,6 +62,122 @@ # See Include/object.h TPFLAGS_IS_ABSTRACT = 1 << 20 + +def get_annotations(obj, *, globals=None, locals=None, eval_str=False): + """Compute the annotations dict for an object. + + obj may be a callable, class, or module. + Passing in an object of any other type raises TypeError. + + Returns a dict. get_annotations() returns a new dict every time + it's called; calling it twice on the same object will return two + different but equivalent dicts. + + This function handles several details for you: + + * If eval_str is true, values of type str will + be un-stringized using eval(). This is intended + for use with stringized annotations + ("from __future__ import annotations"). + * If obj doesn't have an annotations dict, returns an + empty dict. (Functions and methods always have an + annotations dict; classes, modules, and other types of + callables may not.) + * Ignores inherited annotations on classes. If a class + doesn't have its own annotations dict, returns an empty dict. + * All accesses to object members and dict values are done + using getattr() and dict.get() for safety. + * Always, always, always returns a freshly-created dict. + + eval_str controls whether or not values of type str are replaced + with the result of calling eval() on those values: + + * If eval_str is true, eval() is called on values of type str. + * If eval_str is false (the default), values of type str are unchanged. + + globals and locals are passed in to eval(); see the documentation + for eval() for more information. If either globals or locals is + None, this function may replace that value with a context-specific + default, contingent on type(obj): + + * If obj is a module, globals defaults to obj.__dict__. + * If obj is a class, globals defaults to + sys.modules[obj.__module__].__dict__ and locals + defaults to the obj class namespace. + * If obj is a callable, globals defaults to obj.__globals__, + although if obj is a wrapped function (using + functools.update_wrapper()) it is first unwrapped. + """ + if isinstance(obj, type): + # class + obj_dict = getattr(obj, '__dict__', None) + if obj_dict and hasattr(obj_dict, 'get'): + ann = obj_dict.get('__annotations__', None) + if isinstance(ann, types.GetSetDescriptorType): + ann = None + else: + ann = None + + obj_globals = None + module_name = getattr(obj, '__module__', None) + if module_name: + module = sys.modules.get(module_name, None) + if module: + obj_globals = getattr(module, '__dict__', None) + obj_locals = dict(vars(obj)) + unwrap = obj + elif isinstance(obj, types.ModuleType): + # module + ann = getattr(obj, '__annotations__', None) + obj_globals = getattr(obj, '__dict__') + obj_locals = None + unwrap = None + elif callable(obj): + # this includes types.Function, types.BuiltinFunctionType, + # types.BuiltinMethodType, functools.partial, functools.singledispatch, + # "class funclike" from Lib/test/test_inspect... on and on it goes. + ann = getattr(obj, '__annotations__', None) + obj_globals = getattr(obj, '__globals__', None) + obj_locals = None + unwrap = obj + else: + raise TypeError(f"{obj!r} is not a module, class, or callable.") + + if ann is None: + return {} + + if not isinstance(ann, dict): + raise ValueError(f"{obj!r}.__annotations__ is neither a dict nor None") + + if not ann: + return {} + + if not eval_str: + return dict(ann) + + if unwrap is not None: + while True: + if hasattr(unwrap, '__wrapped__'): + unwrap = unwrap.__wrapped__ + continue + if isinstance(unwrap, functools.partial): + unwrap = unwrap.func + continue + break + if hasattr(unwrap, "__globals__"): + obj_globals = unwrap.__globals__ + + if globals is None: + globals = obj_globals + if locals is None: + locals = obj_locals + + return_value = {key: + value if not isinstance(value, str) else eval(value, globals, locals) + for key, value in ann.items() } + return return_value + + # ----------------------------------------------------------- type-checking def ismodule(object): """Return true if the object is a module. @@ -1165,7 +1283,8 @@ def getfullargspec(func): sig = _signature_from_callable(func, follow_wrapper_chains=False, skip_bound_arg=False, - sigcls=Signature) + sigcls=Signature, + eval_str=False) except Exception as ex: # Most of the times 'signature' will raise ValueError. # But, it can also raise AttributeError, and, maybe something @@ -1898,7 +2017,7 @@ def _signature_is_functionlike(obj): isinstance(name, str) and (defaults is None or isinstance(defaults, tuple)) and (kwdefaults is None or isinstance(kwdefaults, dict)) and - isinstance(annotations, dict)) + (isinstance(annotations, (dict)) or annotations is None) ) def _signature_get_bound_param(spec): @@ -2151,7 +2270,7 @@ def _signature_from_builtin(cls, func, skip_bound_arg=True): def _signature_from_function(cls, func, skip_bound_arg=True, - globalns=None, localns=None): + globals=None, locals=None, eval_str=False): """Private helper: constructs Signature for the given python function.""" is_duck_function = False @@ -2177,7 +2296,7 @@ def _signature_from_function(cls, func, skip_bound_arg=True, positional = arg_names[:pos_count] keyword_only_count = func_code.co_kwonlyargcount keyword_only = arg_names[pos_count:pos_count + keyword_only_count] - annotations = func.__annotations__ + annotations = get_annotations(func, globals=globals, locals=locals, eval_str=eval_str) defaults = func.__defaults__ kwdefaults = func.__kwdefaults__ @@ -2248,8 +2367,9 @@ def _signature_from_function(cls, func, skip_bound_arg=True, def _signature_from_callable(obj, *, follow_wrapper_chains=True, skip_bound_arg=True, - globalns=None, - localns=None, + globals=None, + locals=None, + eval_str=False, sigcls): """Private helper function to get signature for arbitrary @@ -2259,9 +2379,10 @@ def _signature_from_callable(obj, *, _get_signature_of = functools.partial(_signature_from_callable, follow_wrapper_chains=follow_wrapper_chains, skip_bound_arg=skip_bound_arg, - globalns=globalns, - localns=localns, - sigcls=sigcls) + globals=globals, + locals=locals, + sigcls=sigcls, + eval_str=eval_str) if not callable(obj): raise TypeError('{!r} is not a callable object'.format(obj)) @@ -2330,7 +2451,7 @@ def _signature_from_callable(obj, *, # of a Python function (Cython functions, for instance), then: return _signature_from_function(sigcls, obj, skip_bound_arg=skip_bound_arg, - globalns=globalns, localns=localns) + globals=globals, locals=locals, eval_str=eval_str) if _signature_is_builtin(obj): return _signature_from_builtin(sigcls, obj, @@ -2854,11 +2975,11 @@ def from_builtin(cls, func): @classmethod def from_callable(cls, obj, *, - follow_wrapped=True, globalns=None, localns=None): + follow_wrapped=True, globals=None, locals=None, eval_str=False): """Constructs Signature for the given callable object.""" return _signature_from_callable(obj, sigcls=cls, follow_wrapper_chains=follow_wrapped, - globalns=globalns, localns=localns) + globals=globals, locals=locals, eval_str=eval_str) @property def parameters(self): @@ -3106,10 +3227,10 @@ def __str__(self): return rendered -def signature(obj, *, follow_wrapped=True, globalns=None, localns=None): +def signature(obj, *, follow_wrapped=True, globals=None, locals=None, eval_str=False): """Get a signature object for the passed callable.""" return Signature.from_callable(obj, follow_wrapped=follow_wrapped, - globalns=globalns, localns=localns) + globals=globals, locals=locals, eval_str=eval_str) def _main(): diff --git a/Lib/test/inspect_stock_annotations.py b/Lib/test/inspect_stock_annotations.py new file mode 100644 index 0000000000000..d115a25b65034 --- /dev/null +++ b/Lib/test/inspect_stock_annotations.py @@ -0,0 +1,28 @@ +a:int=3 +b:str="foo" + +class MyClass: + a:int=4 + b:str="bar" + def __init__(self, a, b): + self.a = a + self.b = b + def __eq__(self, other): + return isinstance(other, MyClass) and self.a == other.a and self.b == other.b + +def function(a:int, b:str) -> MyClass: + return MyClass(a, b) + + +def function2(a:int, b:"str", c:MyClass) -> MyClass: + pass + + +def function3(a:"int", b:"str", c:"MyClass"): + pass + + +class UnannotatedClass: + pass + +def unannotated_function(a, b, c): pass diff --git a/Lib/test/inspect_stringized_annotations.py b/Lib/test/inspect_stringized_annotations.py new file mode 100644 index 0000000000000..a56fb050ead97 --- /dev/null +++ b/Lib/test/inspect_stringized_annotations.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +a:int=3 +b:str="foo" + +class MyClass: + a:int=4 + b:str="bar" + def __init__(self, a, b): + self.a = a + self.b = b + def __eq__(self, other): + return isinstance(other, MyClass) and self.a == other.a and self.b == other.b + +def function(a:int, b:str) -> MyClass: + return MyClass(a, b) + + +def function2(a:int, b:"str", c:MyClass) -> MyClass: + pass + + +def function3(a:"int", b:"str", c:"MyClass"): + pass + + +class UnannotatedClass: + pass + +def unannotated_function(a, b, c): pass + +class MyClassWithLocalAnnotations: + mytype = int + x: mytype diff --git a/Lib/test/inspect_stringized_annotations_2.py b/Lib/test/inspect_stringized_annotations_2.py new file mode 100644 index 0000000000000..87206d5a64692 --- /dev/null +++ b/Lib/test/inspect_stringized_annotations_2.py @@ -0,0 +1,3 @@ +from __future__ import annotations + +def foo(a, b, c): pass diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index b32b3d3757750..0ab65307cdd09 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -32,6 +32,9 @@ from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 from test import support +from test import inspect_stock_annotations +from test import inspect_stringized_annotations +from test import inspect_stringized_annotations_2 from test.test_import import _ready_to_import @@ -1281,6 +1284,106 @@ class C(metaclass=M): attrs = [a[0] for a in inspect.getmembers(C)] self.assertNotIn('missing', attrs) + def test_get_annotations_with_stock_annotations(self): + def foo(a:int, b:str): pass + self.assertEqual(inspect.get_annotations(foo), {'a': int, 'b': str}) + + foo.__annotations__ = {'a': 'foo', 'b':'str'} + self.assertEqual(inspect.get_annotations(foo), {'a': 'foo', 'b': 'str'}) + + self.assertEqual(inspect.get_annotations(foo, eval_str=True, locals=locals()), {'a': foo, 'b': str}) + self.assertEqual(inspect.get_annotations(foo, eval_str=True, globals=locals()), {'a': foo, 'b': str}) + + isa = inspect_stock_annotations + self.assertEqual(inspect.get_annotations(isa), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.MyClass), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.function), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function2), {'a': int, 'b': 'str', 'c': isa.MyClass, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function3), {'a': 'int', 'b': 'str', 'c': 'MyClass'}) + self.assertEqual(inspect.get_annotations(inspect), {}) # inspect module has no annotations + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function), {}) + + self.assertEqual(inspect.get_annotations(isa, eval_str=True), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.MyClass, eval_str=True), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.function, eval_str=True), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function2, eval_str=True), {'a': int, 'b': str, 'c': isa.MyClass, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function3, eval_str=True), {'a': int, 'b': str, 'c': isa.MyClass}) + self.assertEqual(inspect.get_annotations(inspect, eval_str=True), {}) + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass, eval_str=True), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function, eval_str=True), {}) + + self.assertEqual(inspect.get_annotations(isa, eval_str=False), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.MyClass, eval_str=False), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.function, eval_str=False), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function2, eval_str=False), {'a': int, 'b': 'str', 'c': isa.MyClass, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function3, eval_str=False), {'a': 'int', 'b': 'str', 'c': 'MyClass'}) + self.assertEqual(inspect.get_annotations(inspect, eval_str=False), {}) + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass, eval_str=False), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function, eval_str=False), {}) + + def times_three(fn): + @functools.wraps(fn) + def wrapper(a, b): + return fn(a*3, b*3) + return wrapper + + wrapped = times_three(isa.function) + self.assertEqual(wrapped(1, 'x'), isa.MyClass(3, 'xxx')) + self.assertIsNot(wrapped.__globals__, isa.function.__globals__) + self.assertEqual(inspect.get_annotations(wrapped), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(wrapped, eval_str=True), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(wrapped, eval_str=False), {'a': int, 'b': str, 'return': isa.MyClass}) + + def test_get_annotations_with_stringized_annotations(self): + isa = inspect_stringized_annotations + self.assertEqual(inspect.get_annotations(isa), {'a': 'int', 'b': 'str'}) + self.assertEqual(inspect.get_annotations(isa.MyClass), {'a': 'int', 'b': 'str'}) + self.assertEqual(inspect.get_annotations(isa.function), {'a': 'int', 'b': 'str', 'return': 'MyClass'}) + self.assertEqual(inspect.get_annotations(isa.function2), {'a': 'int', 'b': "'str'", 'c': 'MyClass', 'return': 'MyClass'}) + self.assertEqual(inspect.get_annotations(isa.function3), {'a': "'int'", 'b': "'str'", 'c': "'MyClass'"}) + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function), {}) + + self.assertEqual(inspect.get_annotations(isa, eval_str=True), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.MyClass, eval_str=True), {'a': int, 'b': str}) + self.assertEqual(inspect.get_annotations(isa.function, eval_str=True), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function2, eval_str=True), {'a': int, 'b': 'str', 'c': isa.MyClass, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(isa.function3, eval_str=True), {'a': 'int', 'b': 'str', 'c': 'MyClass'}) + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass, eval_str=True), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function, eval_str=True), {}) + + self.assertEqual(inspect.get_annotations(isa, eval_str=False), {'a': 'int', 'b': 'str'}) + self.assertEqual(inspect.get_annotations(isa.MyClass, eval_str=False), {'a': 'int', 'b': 'str'}) + self.assertEqual(inspect.get_annotations(isa.function, eval_str=False), {'a': 'int', 'b': 'str', 'return': 'MyClass'}) + self.assertEqual(inspect.get_annotations(isa.function2, eval_str=False), {'a': 'int', 'b': "'str'", 'c': 'MyClass', 'return': 'MyClass'}) + self.assertEqual(inspect.get_annotations(isa.function3, eval_str=False), {'a': "'int'", 'b': "'str'", 'c': "'MyClass'"}) + self.assertEqual(inspect.get_annotations(isa.UnannotatedClass, eval_str=False), {}) + self.assertEqual(inspect.get_annotations(isa.unannotated_function, eval_str=False), {}) + + isa2 = inspect_stringized_annotations_2 + self.assertEqual(inspect.get_annotations(isa2), {}) + self.assertEqual(inspect.get_annotations(isa2, eval_str=True), {}) + self.assertEqual(inspect.get_annotations(isa2, eval_str=False), {}) + + def times_three(fn): + @functools.wraps(fn) + def wrapper(a, b): + return fn(a*3, b*3) + return wrapper + + wrapped = times_three(isa.function) + self.assertEqual(wrapped(1, 'x'), isa.MyClass(3, 'xxx')) + self.assertIsNot(wrapped.__globals__, isa.function.__globals__) + self.assertEqual(inspect.get_annotations(wrapped), {'a': 'int', 'b': 'str', 'return': 'MyClass'}) + self.assertEqual(inspect.get_annotations(wrapped, eval_str=True), {'a': int, 'b': str, 'return': isa.MyClass}) + self.assertEqual(inspect.get_annotations(wrapped, eval_str=False), {'a': 'int', 'b': 'str', 'return': 'MyClass'}) + + # test that local namespace lookups work + self.assertEqual(inspect.get_annotations(isa.MyClassWithLocalAnnotations), {'x': 'mytype'}) + self.assertEqual(inspect.get_annotations(isa.MyClassWithLocalAnnotations, eval_str=True), {'x': int}) + + class TestIsDataDescriptor(unittest.TestCase): def test_custom_descriptors(self): @@ -2786,13 +2889,13 @@ def test(it, a, *, c) -> 'spam': pass ham = partialmethod(test, c=1) - self.assertEqual(self.signature(Spam.ham), + self.assertEqual(self.signature(Spam.ham, eval_str=False), ((('it', ..., ..., 'positional_or_keyword'), ('a', ..., ..., 'positional_or_keyword'), ('c', 1, ..., 'keyword_only')), 'spam')) - self.assertEqual(self.signature(Spam().ham), + self.assertEqual(self.signature(Spam().ham, eval_str=False), ((('a', ..., ..., 'positional_or_keyword'), ('c', 1, ..., 'keyword_only')), 'spam')) @@ -2803,7 +2906,7 @@ def test(self: 'anno', x): g = partialmethod(test, 1) - self.assertEqual(self.signature(Spam.g), + self.assertEqual(self.signature(Spam.g, eval_str=False), ((('self', ..., 'anno', 'positional_or_keyword'),), ...)) @@ -3265,15 +3368,145 @@ def func2(foo: Foo, bar: 'Bar') -> int: pass self.assertEqual(sig1.return_annotation, int) self.assertEqual(sig1.parameters['foo'].annotation, Foo) - sig2 = signature_func(func, localns=locals()) + sig2 = signature_func(func, locals=locals()) self.assertEqual(sig2.return_annotation, int) self.assertEqual(sig2.parameters['foo'].annotation, Foo) - sig3 = signature_func(func2, globalns={'Bar': int}, localns=locals()) + sig3 = signature_func(func2, globals={'Bar': int}, locals=locals()) self.assertEqual(sig3.return_annotation, int) self.assertEqual(sig3.parameters['foo'].annotation, Foo) self.assertEqual(sig3.parameters['bar'].annotation, 'Bar') + def test_signature_eval_str(self): + isa = inspect_stringized_annotations + sig = inspect.Signature + par = inspect.Parameter + PORK = inspect.Parameter.POSITIONAL_OR_KEYWORD + for signature_func in (inspect.signature, inspect.Signature.from_callable): + with self.subTest(signature_func = signature_func): + self.assertEqual( + signature_func(isa.MyClass), + sig( + parameters=( + par('a', PORK), + par('b', PORK), + ))) + self.assertEqual( + signature_func(isa.function), + sig( + return_annotation='MyClass', + parameters=( + par('a', PORK, annotation='int'), + par('b', PORK, annotation='str'), + ))) + self.assertEqual( + signature_func(isa.function2), + sig( + return_annotation='MyClass', + parameters=( + par('a', PORK, annotation='int'), + par('b', PORK, annotation="'str'"), + par('c', PORK, annotation="MyClass"), + ))) + self.assertEqual( + signature_func(isa.function3), + sig( + parameters=( + par('a', PORK, annotation="'int'"), + par('b', PORK, annotation="'str'"), + par('c', PORK, annotation="'MyClass'"), + ))) + + self.assertEqual(signature_func(isa.UnannotatedClass), sig()) + self.assertEqual(signature_func(isa.unannotated_function), + sig( + parameters=( + par('a', PORK), + par('b', PORK), + par('c', PORK), + ))) + + self.assertEqual( + signature_func(isa.MyClass, eval_str=True), + sig( + parameters=( + par('a', PORK), + par('b', PORK), + ))) + self.assertEqual( + signature_func(isa.function, eval_str=True), + sig( + return_annotation=isa.MyClass, + parameters=( + par('a', PORK, annotation=int), + par('b', PORK, annotation=str), + ))) + self.assertEqual( + signature_func(isa.function2, eval_str=True), + sig( + return_annotation=isa.MyClass, + parameters=( + par('a', PORK, annotation=int), + par('b', PORK, annotation='str'), + par('c', PORK, annotation=isa.MyClass), + ))) + self.assertEqual( + signature_func(isa.function3, eval_str=True), + sig( + parameters=( + par('a', PORK, annotation='int'), + par('b', PORK, annotation='str'), + par('c', PORK, annotation='MyClass'), + ))) + + globalns = {'int': float, 'str': complex} + localns = {'str': tuple, 'MyClass': dict} + with self.assertRaises(NameError): + signature_func(isa.function, eval_str=True, globals=globalns) + + self.assertEqual( + signature_func(isa.function, eval_str=True, locals=localns), + sig( + return_annotation=dict, + parameters=( + par('a', PORK, annotation=int), + par('b', PORK, annotation=tuple), + ))) + + self.assertEqual( + signature_func(isa.function, eval_str=True, globals=globalns, locals=localns), + sig( + return_annotation=dict, + parameters=( + par('a', PORK, annotation=float), + par('b', PORK, annotation=tuple), + ))) + + def test_signature_none_annotation(self): + class funclike: + # Has to be callable, and have correct + # __code__, __annotations__, __defaults__, __name__, + # and __kwdefaults__ attributes + + def __init__(self, func): + self.__name__ = func.__name__ + self.__code__ = func.__code__ + self.__annotations__ = func.__annotations__ + self.__defaults__ = func.__defaults__ + self.__kwdefaults__ = func.__kwdefaults__ + self.func = func + + def __call__(self, *args, **kwargs): + return self.func(*args, **kwargs) + + def foo(): pass + foo = funclike(foo) + foo.__annotations__ = None + for signature_func in (inspect.signature, inspect.Signature.from_callable): + with self.subTest(signature_func = signature_func): + self.assertEqual(signature_func(foo), inspect.Signature()) + self.assertEqual(inspect.get_annotations(foo), {}) + class TestParameterObject(unittest.TestCase): def test_signature_parameter_kinds(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst b/Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst new file mode 100644 index 0000000000000..36a6018bab253 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst @@ -0,0 +1,11 @@ +Add :func:`inspect.get_annotations`, which safely computes the annotations +defined on an object. It works around the quirks of accessing the +annotations from various types of objects, and makes very few assumptions +about the object passed in. :func:`inspect.get_annotations` can also +correctly un-stringize stringized annotations. + +:func:`inspect.signature`, :func:`inspect.from_callable`, and +:func:`inspect.from_function` now call :func:`inspect.get_annotations` +to retrieve annotations. This means :func:`inspect.signature` +and :func:`inspect.from_callable` can now un-stringize stringized +annotations, too. From webhook-mailer at python.org Fri Apr 30 03:32:44 2021 From: webhook-mailer at python.org (JulienPalard) Date: Fri, 30 Apr 2021 07:32:44 -0000 Subject: [Python-checkins] bpo-43954: Fix a missing word in the unittest docs (GH-25672) Message-ID: https://github.com/python/cpython/commit/2abbd8f2add5e80b86a965625b9a77ae94a101cd commit: 2abbd8f2add5e80b86a965625b9a77ae94a101cd branch: master author: Zackery Spytz committer: JulienPalard date: 2021-04-30T09:32:19+02:00 summary: bpo-43954: Fix a missing word in the unittest docs (GH-25672) files: M Doc/library/unittest.rst diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index d413224fd4983..0c29408cb1921 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -331,8 +331,9 @@ the `load_tests protocol`_. .. versionchanged:: 3.4 Test discovery supports :term:`namespace packages ` - for start directory. Note that you need to the top level directory too. - (e.g. ``python -m unittest discover -s root/namespace -t root``). + for the start directory. Note that you need to specify the top level + directory too (e.g. + ``python -m unittest discover -s root/namespace -t root``). .. _organizing-tests: From webhook-mailer at python.org Fri Apr 30 03:57:04 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 30 Apr 2021 07:57:04 -0000 Subject: [Python-checkins] bpo-43954: Fix a missing word in the unittest docs (GH-25672) Message-ID: https://github.com/python/cpython/commit/a92d7387632de1fc64de51f22f6191acd0c6f5c0 commit: a92d7387632de1fc64de51f22f6191acd0c6f5c0 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-30T00:56:56-07:00 summary: bpo-43954: Fix a missing word in the unittest docs (GH-25672) (cherry picked from commit 2abbd8f2add5e80b86a965625b9a77ae94a101cd) Co-authored-by: Zackery Spytz files: M Doc/library/unittest.rst diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index ebed5c08082d0..9541997e3ccca 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -331,8 +331,9 @@ the `load_tests protocol`_. .. versionchanged:: 3.4 Test discovery supports :term:`namespace packages ` - for start directory. Note that you need to the top level directory too. - (e.g. ``python -m unittest discover -s root/namespace -t root``). + for the start directory. Note that you need to specify the top level + directory too (e.g. + ``python -m unittest discover -s root/namespace -t root``). .. _organizing-tests: From webhook-mailer at python.org Fri Apr 30 04:50:37 2021 From: webhook-mailer at python.org (markshannon) Date: Fri, 30 Apr 2021 08:50:37 -0000 Subject: [Python-checkins] bpo-43977: Use tp_flags for collection matching (GH-25723) Message-ID: https://github.com/python/cpython/commit/069e81ab3da46c441335ca762c4333b7bd91861d commit: 069e81ab3da46c441335ca762c4333b7bd91861d branch: master author: Mark Shannon committer: markshannon date: 2021-04-30T09:50:28+01:00 summary: bpo-43977: Use tp_flags for collection matching (GH-25723) * Add Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING, add to all relevant standard builtin classes. * Set relevant flags on collections.abc.Sequence and Mapping. * Use flags in MATCH_SEQUENCE and MATCH_MAPPING opcodes. * Inherit Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING. * Add NEWS * Remove interpreter-state map_abc and seq_abc fields. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst M Include/internal/pycore_interp.h M Include/object.h M Lib/_collections_abc.py M Modules/_abc.c M Modules/_collectionsmodule.c M Modules/arraymodule.c M Objects/descrobject.c M Objects/dictobject.c M Objects/listobject.c M Objects/memoryobject.c M Objects/rangeobject.c M Objects/tupleobject.c M Objects/typeobject.c M Python/ceval.c M Python/pystate.c diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index 11d31da382958..bfd082b588256 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -247,10 +247,6 @@ struct _is { // importlib module PyObject *importlib; - // Kept handy for pattern matching: - PyObject *map_abc; // _collections_abc.Mapping - PyObject *seq_abc; // _collections_abc.Sequence - /* Used in Modules/_threadmodule.c. */ long num_threads; /* Support for runtime thread stack size tuning. diff --git a/Include/object.h b/Include/object.h index d8476f9213760..cffe72cda869f 100644 --- a/Include/object.h +++ b/Include/object.h @@ -320,6 +320,13 @@ Code can use PyType_HasFeature(type_ob, flag_value) to test whether the given type object has a specified feature. */ +#ifndef Py_LIMITED_API +/* Set if instances of the type object are treated as sequences for pattern matching */ +#define Py_TPFLAGS_SEQUENCE (1 << 5) +/* Set if instances of the type object are treated as mappings for pattern matching */ +#define Py_TPFLAGS_MAPPING (1 << 6) +#endif + /* Set if the type object is immutable: type attributes cannot be set nor deleted */ #define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8) diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index dddf8a23ff985..d92b848e9436f 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -793,7 +793,6 @@ def __isub__(self, it): ### MAPPINGS ### - class Mapping(Collection): """A Mapping is a generic container for associating key/value pairs. @@ -804,6 +803,9 @@ class Mapping(Collection): __slots__ = () + # Tell ABCMeta.__new__ that this class should have TPFLAGS_MAPPING set. + __abc_tpflags__ = 1 << 6 # Py_TPFLAGS_MAPPING + @abstractmethod def __getitem__(self, key): raise KeyError @@ -842,7 +844,6 @@ def __eq__(self, other): __reversed__ = None - Mapping.register(mappingproxy) @@ -1011,7 +1012,6 @@ def setdefault(self, key, default=None): ### SEQUENCES ### - class Sequence(Reversible, Collection): """All the operations on a read-only sequence. @@ -1021,6 +1021,9 @@ class Sequence(Reversible, Collection): __slots__ = () + # Tell ABCMeta.__new__ that this class should have TPFLAGS_SEQUENCE set. + __abc_tpflags__ = 1 << 5 # Py_TPFLAGS_SEQUENCE + @abstractmethod def __getitem__(self, index): raise IndexError @@ -1072,7 +1075,6 @@ def count(self, value): 'S.count(value) -> integer -- return number of occurrences of value' return sum(1 for v in self if v is value or v == value) - Sequence.register(tuple) Sequence.register(str) Sequence.register(range) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst new file mode 100644 index 0000000000000..038d7390852ba --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst @@ -0,0 +1,2 @@ +Use :c:member:`~PyTypeObject.tp_flags` on the class object to determine if the subject is a sequence +or mapping when pattern matching. Avoids the need to import :mod:`collections.abc` when pattern matching. diff --git a/Modules/_abc.c b/Modules/_abc.c index 0ddc2abeee1e0..39261dd3cd579 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -15,6 +15,7 @@ PyDoc_STRVAR(_abc__doc__, _Py_IDENTIFIER(__abstractmethods__); _Py_IDENTIFIER(__class__); _Py_IDENTIFIER(__dict__); +_Py_IDENTIFIER(__abc_tpflags__); _Py_IDENTIFIER(__bases__); _Py_IDENTIFIER(_abc_impl); _Py_IDENTIFIER(__subclasscheck__); @@ -417,6 +418,8 @@ compute_abstract_methods(PyObject *self) return ret; } +#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING) + /*[clinic input] _abc._abc_init @@ -446,6 +449,31 @@ _abc__abc_init(PyObject *module, PyObject *self) return NULL; } Py_DECREF(data); + /* If __abc_tpflags__ & COLLECTION_FLAGS is set, then set the corresponding bit(s) + * in the new class. + * Used by collections.abc.Sequence and collections.abc.Mapping to indicate + * their special status w.r.t. pattern matching. */ + if (PyType_Check(self)) { + PyTypeObject *cls = (PyTypeObject *)self; + PyObject *flags = _PyDict_GetItemIdWithError(cls->tp_dict, &PyId___abc_tpflags__); + if (flags == NULL) { + if (PyErr_Occurred()) { + return NULL; + } + } + else { + if (PyLong_CheckExact(flags)) { + long val = PyLong_AsLong(flags); + if (val == -1 && PyErr_Occurred()) { + return NULL; + } + ((PyTypeObject *)self)->tp_flags |= (val & COLLECTION_FLAGS); + } + if (_PyDict_DelItemId(cls->tp_dict, &PyId___abc_tpflags__) < 0) { + return NULL; + } + } + } Py_RETURN_NONE; } @@ -499,6 +527,11 @@ _abc__abc_register_impl(PyObject *module, PyObject *self, PyObject *subclass) /* Invalidate negative cache */ get_abc_state(module)->abc_invalidation_counter++; + if (PyType_Check(subclass) && PyType_Check(self) && + !PyType_HasFeature((PyTypeObject *)subclass, Py_TPFLAGS_IMMUTABLETYPE)) + { + ((PyTypeObject *)subclass)->tp_flags |= (((PyTypeObject *)self)->tp_flags & COLLECTION_FLAGS); + } Py_INCREF(subclass); return subclass; } diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 8b01a7fad01a2..9c8701af904ab 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1662,7 +1662,8 @@ static PyTypeObject deque_type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_SEQUENCE, /* tp_flags */ deque_doc, /* tp_doc */ (traverseproc)deque_traverse, /* tp_traverse */ diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 367621fd03b88..d65c1449eb38e 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2848,7 +2848,8 @@ static PyType_Spec array_spec = { .name = "array.array", .basicsize = sizeof(arrayobject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | - Py_TPFLAGS_IMMUTABLETYPE), + Py_TPFLAGS_IMMUTABLETYPE | + Py_TPFLAGS_SEQUENCE), .slots = array_slots, }; diff --git a/Objects/descrobject.c b/Objects/descrobject.c index dd41620b9a9ee..57a9607d10c31 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -1852,7 +1852,8 @@ PyTypeObject PyDictProxy_Type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_MAPPING, /* tp_flags */ 0, /* tp_doc */ mappingproxy_traverse, /* tp_traverse */ 0, /* tp_clear */ diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 0aeee7011e844..9e2c12229df80 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3553,7 +3553,7 @@ PyTypeObject PyDict_Type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DICT_SUBCLASS | - _Py_TPFLAGS_MATCH_SELF, /* tp_flags */ + _Py_TPFLAGS_MATCH_SELF | Py_TPFLAGS_MAPPING, /* tp_flags */ dictionary_doc, /* tp_doc */ dict_traverse, /* tp_traverse */ dict_tp_clear, /* tp_clear */ diff --git a/Objects/listobject.c b/Objects/listobject.c index e7987a6d352bf..6eb7dce759cf8 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -3053,7 +3053,7 @@ PyTypeObject PyList_Type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_LIST_SUBCLASS | - _Py_TPFLAGS_MATCH_SELF, /* tp_flags */ + _Py_TPFLAGS_MATCH_SELF | Py_TPFLAGS_SEQUENCE, /* tp_flags */ list___init____doc__, /* tp_doc */ (traverseproc)list_traverse, /* tp_traverse */ (inquiry)_list_clear, /* tp_clear */ diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index d328f4d40b7a4..913d358062219 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -3287,7 +3287,8 @@ PyTypeObject PyMemoryView_Type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ &memory_as_buffer, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_SEQUENCE, /* tp_flags */ memoryview__doc__, /* tp_doc */ (traverseproc)memory_traverse, /* tp_traverse */ (inquiry)memory_clear, /* tp_clear */ diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index 530426c8ac904..3e05707b1cee6 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -735,7 +735,7 @@ PyTypeObject PyRange_Type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_SEQUENCE, /* tp_flags */ range_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 89c393ccc5fbc..6b1ab740121e8 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -918,7 +918,7 @@ PyTypeObject PyTuple_Type = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_TUPLE_SUBCLASS | - _Py_TPFLAGS_MATCH_SELF, /* tp_flags */ + _Py_TPFLAGS_MATCH_SELF | Py_TPFLAGS_SEQUENCE, /* tp_flags */ tuple_new__doc__, /* tp_doc */ (traverseproc)tupletraverse, /* tp_traverse */ 0, /* tp_clear */ diff --git a/Objects/typeobject.c b/Objects/typeobject.c index ac4dc1da4411d..19d619fada0e9 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5717,10 +5717,15 @@ inherit_special(PyTypeObject *type, PyTypeObject *base) else if (PyType_IsSubtype(base, &PyDict_Type)) { type->tp_flags |= Py_TPFLAGS_DICT_SUBCLASS; } - if (PyType_HasFeature(base, _Py_TPFLAGS_MATCH_SELF)) { type->tp_flags |= _Py_TPFLAGS_MATCH_SELF; } + if (PyType_HasFeature(base, Py_TPFLAGS_SEQUENCE)) { + type->tp_flags |= Py_TPFLAGS_SEQUENCE; + } + if (PyType_HasFeature(base, Py_TPFLAGS_MAPPING)) { + type->tp_flags |= Py_TPFLAGS_MAPPING; + } } static int diff --git a/Python/ceval.c b/Python/ceval.c index 326930b706c43..866c57afdbf9d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3889,76 +3889,20 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } case TARGET(MATCH_MAPPING): { - // PUSH(isinstance(TOS, _collections_abc.Mapping)) PyObject *subject = TOP(); - // Fast path for dicts: - if (PyDict_Check(subject)) { - Py_INCREF(Py_True); - PUSH(Py_True); - DISPATCH(); - } - // Lazily import _collections_abc.Mapping, and keep it handy on the - // PyInterpreterState struct (it gets cleaned up at exit): - PyInterpreterState *interp = PyInterpreterState_Get(); - if (interp->map_abc == NULL) { - PyObject *abc = PyImport_ImportModule("_collections_abc"); - if (abc == NULL) { - goto error; - } - interp->map_abc = PyObject_GetAttrString(abc, "Mapping"); - if (interp->map_abc == NULL) { - goto error; - } - } - int match = PyObject_IsInstance(subject, interp->map_abc); - if (match < 0) { - goto error; - } - PUSH(PyBool_FromLong(match)); + int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; + PyObject *res = match ? Py_True : Py_False; + Py_INCREF(res); + PUSH(res); DISPATCH(); } case TARGET(MATCH_SEQUENCE): { - // PUSH(not isinstance(TOS, (bytearray, bytes, str)) - // and isinstance(TOS, _collections_abc.Sequence)) PyObject *subject = TOP(); - // Fast path for lists and tuples: - if (PyType_FastSubclass(Py_TYPE(subject), - Py_TPFLAGS_LIST_SUBCLASS | - Py_TPFLAGS_TUPLE_SUBCLASS)) - { - Py_INCREF(Py_True); - PUSH(Py_True); - DISPATCH(); - } - // Bail on some possible Sequences that we intentionally exclude: - if (PyType_FastSubclass(Py_TYPE(subject), - Py_TPFLAGS_BYTES_SUBCLASS | - Py_TPFLAGS_UNICODE_SUBCLASS) || - PyByteArray_Check(subject)) - { - Py_INCREF(Py_False); - PUSH(Py_False); - DISPATCH(); - } - // Lazily import _collections_abc.Sequence, and keep it handy on the - // PyInterpreterState struct (it gets cleaned up at exit): - PyInterpreterState *interp = PyInterpreterState_Get(); - if (interp->seq_abc == NULL) { - PyObject *abc = PyImport_ImportModule("_collections_abc"); - if (abc == NULL) { - goto error; - } - interp->seq_abc = PyObject_GetAttrString(abc, "Sequence"); - if (interp->seq_abc == NULL) { - goto error; - } - } - int match = PyObject_IsInstance(subject, interp->seq_abc); - if (match < 0) { - goto error; - } - PUSH(PyBool_FromLong(match)); + int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; + PyObject *res = match ? Py_True : Py_False; + Py_INCREF(res); + PUSH(res); DISPATCH(); } diff --git a/Python/pystate.c b/Python/pystate.c index 81bcf68219a0e..aeebd6f61c6d7 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -308,8 +308,6 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) Py_CLEAR(interp->importlib); Py_CLEAR(interp->import_func); Py_CLEAR(interp->dict); - Py_CLEAR(interp->map_abc); - Py_CLEAR(interp->seq_abc); #ifdef HAVE_FORK Py_CLEAR(interp->before_forkers); Py_CLEAR(interp->after_forkers_parent); From webhook-mailer at python.org Fri Apr 30 06:07:10 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 10:07:10 -0000 Subject: [Python-checkins] bpo-43973: object_set_class() checks Py_TPFLAGS_IMMUTABLETYPE (GH-25714) Message-ID: https://github.com/python/cpython/commit/b73b5fb9ea08156991a065c1696e8d8cf7622482 commit: b73b5fb9ea08156991a065c1696e8d8cf7622482 branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-30T12:07:02+02:00 summary: bpo-43973: object_set_class() checks Py_TPFLAGS_IMMUTABLETYPE (GH-25714) Use Py_TPFLAGS_IMMUTABLETYPE to check for class assignments. files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 19d619fada0e9..1f8e2572a2daf 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4737,10 +4737,10 @@ object_set_class(PyObject *self, PyObject *value, void *closure) */ if (!(PyType_IsSubtype(newto, &PyModule_Type) && PyType_IsSubtype(oldto, &PyModule_Type)) && - (!(newto->tp_flags & Py_TPFLAGS_HEAPTYPE) || - !(oldto->tp_flags & Py_TPFLAGS_HEAPTYPE))) { + (_PyType_HasFeature(newto, Py_TPFLAGS_IMMUTABLETYPE) || + _PyType_HasFeature(oldto, Py_TPFLAGS_IMMUTABLETYPE))) { PyErr_Format(PyExc_TypeError, - "__class__ assignment only supported for heap types " + "__class__ assignment only supported for mutable types " "or ModuleType subclasses"); return -1; } From webhook-mailer at python.org Fri Apr 30 06:46:19 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 10:46:19 -0000 Subject: [Python-checkins] bpo-43916: Add Py_TPFLAGS_DISALLOW_INSTANTIATION type flag (GH-25721) Message-ID: https://github.com/python/cpython/commit/3bb09947ec4837de75532e21dd4bd25db0a1f1b7 commit: 3bb09947ec4837de75532e21dd4bd25db0a1f1b7 branch: master author: Victor Stinner committer: vstinner date: 2021-04-30T12:46:15+02:00 summary: bpo-43916: Add Py_TPFLAGS_DISALLOW_INSTANTIATION type flag (GH-25721) Add a new Py_TPFLAGS_DISALLOW_INSTANTIATION type flag to disallow creating type instances: set tp_new to NULL and don't create the "__new__" key in the type dictionary. The flag is set automatically on static types if tp_base is NULL or &PyBaseObject_Type and tp_new is NULL. Use the flag on the following types: * _curses.ncurses_version type * _curses_panel.panel * _tkinter.Tcl_Obj * _tkinter.tkapp * _tkinter.tktimertoken * _xxsubinterpretersmodule.ChannelID * sys.flags type * sys.getwindowsversion() type * sys.version_info type Update MyStr example in the C API documentation to use Py_TPFLAGS_DISALLOW_INSTANTIATION. Add _PyStructSequence_InitType() function to create a structseq type with the Py_TPFLAGS_DISALLOW_INSTANTIATION flag set. type_new() calls _PyType_CheckConsistency() at exit. files: A Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst M Doc/c-api/typeobj.rst M Doc/whatsnew/3.10.rst M Include/object.h M Include/structseq.h M Lib/test/test_sys.py M Modules/_curses_panel.c M Modules/_cursesmodule.c M Modules/_tkinter.c M Modules/_xxsubinterpretersmodule.c M Objects/structseq.c M Objects/typeobject.c M Python/sysmodule.c diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 85f0262d10138..5e731bd5a6cbd 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -1199,6 +1199,25 @@ and :c:type:`PyType_Type` effectively act as defaults.) .. versionadded:: 3.10 + .. data:: Py_TPFLAGS_DISALLOW_INSTANTIATION + + Disallow creating instances of the type: set + :c:member:`~PyTypeObject.tp_new` to NULL and don't create the ``__new__`` + key in the type dictionary. + + The flag must be set before creating the type, not after. For example, it + must be set before :c:func:`PyType_Ready` is called on the type. + + The flag is set automatically on :ref:`static types ` if + :c:member:`~PyTypeObject.tp_base` is NULL or ``&PyBaseObject_Type`` and + :c:member:`~PyTypeObject.tp_new` is NULL. + + **Inheritance:** + + This flag is not inherited. + + .. versionadded:: 3.10 + .. c:member:: const char* PyTypeObject.tp_doc @@ -1761,6 +1780,9 @@ and :c:type:`PyType_Type` effectively act as defaults.) in :c:member:`~PyTypeObject.tp_new`, while for mutable types, most initialization should be deferred to :c:member:`~PyTypeObject.tp_init`. + Set the :const:`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag to disallow creating + instances of the type in Python. + **Inheritance:** This field is inherited by subtypes, except it is not inherited by @@ -2596,7 +2618,8 @@ A type that supports weakrefs, instance dicts, and hashing:: }; A str subclass that cannot be subclassed and cannot be called -to create instances (e.g. uses a separate factory func):: +to create instances (e.g. uses a separate factory func) using +:c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag:: typedef struct { PyUnicodeObject raw; @@ -2609,8 +2632,7 @@ to create instances (e.g. uses a separate factory func):: .tp_basicsize = sizeof(MyStr), .tp_base = NULL, // set to &PyUnicode_Type in module init .tp_doc = "my custom str", - .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_new = NULL, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .tp_repr = (reprfunc)myobj_repr, }; diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 2580a0368d0b3..1a390663c8a40 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1708,6 +1708,10 @@ New Features These functions allow to activate, deactivate and query the state of the garbage collector from C code without having to import the :mod:`gc` module. +* Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow + creating type instances. + (Contributed by Victor Stinner in :issue:`43916`.) + Porting to Python 3.10 ---------------------- diff --git a/Include/object.h b/Include/object.h index cffe72cda869f..4c069998574b4 100644 --- a/Include/object.h +++ b/Include/object.h @@ -327,6 +327,10 @@ given type object has a specified feature. #define Py_TPFLAGS_MAPPING (1 << 6) #endif +/* Disallow creating instances of the type: set tp_new to NULL and don't create + * the "__new__" key in the type dictionary. */ +#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7) + /* Set if the type object is immutable: type attributes cannot be set nor deleted */ #define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8) diff --git a/Include/structseq.h b/Include/structseq.h index 8f51c89163a4e..af3af415b013a 100644 --- a/Include/structseq.h +++ b/Include/structseq.h @@ -27,6 +27,12 @@ PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc); #endif +#ifdef Py_BUILD_CORE +extern int _PyStructSequence_InitType( + PyTypeObject *type, + PyStructSequence_Desc *desc, + unsigned long tp_flags); +#endif PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index ee39375af3160..1fd5247a91bb5 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -605,11 +605,12 @@ def test_sys_flags(self): def assert_raise_on_new_sys_type(self, sys_attr): # Users are intentionally prevented from creating new instances of # sys.flags, sys.version_info, and sys.getwindowsversion. + arg = sys_attr attr_type = type(sys_attr) with self.assertRaises(TypeError): - attr_type() + attr_type(arg) with self.assertRaises(TypeError): - attr_type.__new__(attr_type) + attr_type.__new__(attr_type, arg) def test_sys_flags_no_instantiation(self): self.assert_raise_on_new_sys_type(sys.flags) diff --git a/Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst b/Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst new file mode 100644 index 0000000000000..0cec8103645e3 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst @@ -0,0 +1,2 @@ +Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow +creating type instances. Patch by Victor Stinner. diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c index 94caf8c93bc8c..0b328f9665a0a 100644 --- a/Modules/_curses_panel.c +++ b/Modules/_curses_panel.c @@ -520,7 +520,7 @@ static PyType_Slot PyCursesPanel_Type_slots[] = { static PyType_Spec PyCursesPanel_Type_spec = { .name = "_curses_panel.panel", .basicsize = sizeof(PyCursesPanelObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = PyCursesPanel_Type_slots }; @@ -656,7 +656,6 @@ _curses_panel_exec(PyObject *mod) if (state->PyCursesPanel_Type == NULL) { return -1; } - ((PyTypeObject *)state->PyCursesPanel_Type)->tp_new = NULL; if (PyModule_AddType(mod, state->PyCursesPanel_Type) < 0) { return -1; diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index d221cf1a92520..bcf9ad19386b2 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -4793,9 +4793,11 @@ PyInit__curses(void) #ifdef NCURSES_VERSION /* ncurses_version */ if (NcursesVersionType.tp_name == NULL) { - if (PyStructSequence_InitType2(&NcursesVersionType, - &ncurses_version_desc) < 0) + if (_PyStructSequence_InitType(&NcursesVersionType, + &ncurses_version_desc, + Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { return NULL; + } } v = make_ncurses_version(); if (v == NULL) { @@ -4803,15 +4805,6 @@ PyInit__curses(void) } PyDict_SetItemString(d, "ncurses_version", v); Py_DECREF(v); - - /* prevent user from creating new instances */ - NcursesVersionType.tp_init = NULL; - NcursesVersionType.tp_new = NULL; - if (PyDict_DelItemString(NcursesVersionType.tp_dict, "__new__") < 0 && - PyErr_ExceptionMatches(PyExc_KeyError)) - { - PyErr_Clear(); - } #endif /* NCURSES_VERSION */ SetDictInt("ERR", ERR); diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 46d6a6e0954f5..3a0e5def0cf3c 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1002,7 +1002,7 @@ static PyType_Spec PyTclObject_Type_spec = { "_tkinter.Tcl_Obj", sizeof(PyTclObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, PyTclObject_Type_slots, }; @@ -3294,7 +3294,7 @@ static PyType_Spec Tktt_Type_spec = { "_tkinter.tktimertoken", sizeof(TkttObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, Tktt_Type_slots, }; @@ -3349,7 +3349,7 @@ static PyType_Spec Tkapp_Type_spec = { "_tkinter.tkapp", sizeof(TkappObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, Tkapp_Type_slots, }; @@ -3537,7 +3537,6 @@ PyInit__tkinter(void) Py_DECREF(m); return NULL; } - ((PyTypeObject *)o)->tp_new = NULL; if (PyModule_AddObject(m, "TkappType", o)) { Py_DECREF(o); Py_DECREF(m); @@ -3550,7 +3549,6 @@ PyInit__tkinter(void) Py_DECREF(m); return NULL; } - ((PyTypeObject *)o)->tp_new = NULL; if (PyModule_AddObject(m, "TkttType", o)) { Py_DECREF(o); Py_DECREF(m); @@ -3563,7 +3561,6 @@ PyInit__tkinter(void) Py_DECREF(m); return NULL; } - ((PyTypeObject *)o)->tp_new = NULL; if (PyModule_AddObject(m, "Tcl_Obj", o)) { Py_DECREF(o); Py_DECREF(m); diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c index b94b130d70df7..9290255c66c3f 100644 --- a/Modules/_xxsubinterpretersmodule.c +++ b/Modules/_xxsubinterpretersmodule.c @@ -1780,7 +1780,12 @@ static PyTypeObject ChannelIDtype = { 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + // Use Py_TPFLAGS_DISALLOW_INSTANTIATION so the type cannot be instantiated + // from Python code. We do this because there is a strong relationship + // between channel IDs and the channel lifecycle, so this limitation avoids + // related complications. Use the _channel_id() function instead. + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE + | Py_TPFLAGS_DISALLOW_INSTANTIATION, /* tp_flags */ channelid_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ @@ -1791,19 +1796,6 @@ static PyTypeObject ChannelIDtype = { 0, /* tp_methods */ 0, /* tp_members */ channelid_getsets, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - // Note that we do not set tp_new to channelid_new. Instead we - // set it to NULL, meaning it cannot be instantiated from Python - // code. We do this because there is a strong relationship between - // channel IDs and the channel lifecycle, so this limitation avoids - // related complications. - NULL, /* tp_new */ }; diff --git a/Objects/structseq.c b/Objects/structseq.c index 88e63b658a420..bf59f47fcf073 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -459,8 +459,10 @@ initialize_members(PyStructSequence_Desc *desc, PyMemberDef* members, members[k].name = NULL; } + int -PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc) +_PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc, + unsigned long tp_flags) { PyMemberDef *members; Py_ssize_t n_members, n_unnamed_members; @@ -488,7 +490,7 @@ PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc) type->tp_base = &PyTuple_Type; type->tp_methods = structseq_methods; type->tp_new = structseq_new; - type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC; + type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | tp_flags; type->tp_traverse = (traverseproc) structseq_traverse; n_members = count_members(desc, &n_unnamed_members); @@ -516,6 +518,12 @@ PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc) return 0; } +int +PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc) +{ + return _PyStructSequence_InitType(type, desc, 0); +} + void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc) { diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 1f8e2572a2daf..0f7f280bca0d6 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -158,6 +158,11 @@ _PyType_CheckConsistency(PyTypeObject *type) CHECK(!(type->tp_flags & Py_TPFLAGS_READYING)); CHECK(type->tp_dict != NULL); + if (type->tp_flags & Py_TPFLAGS_DISALLOW_INSTANTIATION) { + CHECK(type->tp_new == NULL); + CHECK(_PyDict_ContainsId(type->tp_dict, &PyId___new__) == 0); + } + return 1; #undef CHECK } @@ -1111,8 +1116,7 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds) if (type->tp_new == NULL) { _PyErr_Format(tstate, PyExc_TypeError, - "cannot create '%.100s' instances", - type->tp_name); + "cannot create '%s' instances", type->tp_name); return NULL; } @@ -3185,6 +3189,8 @@ type_new_impl(type_new_ctx *ctx) if (type_new_init_subclass(type, ctx->kwds) < 0) { goto error; } + + assert(_PyType_CheckConsistency(type)); return (PyObject *)type; error: @@ -5651,7 +5657,6 @@ type_add_getset(PyTypeObject *type) static void inherit_special(PyTypeObject *type, PyTypeObject *base) { - /* Copying tp_traverse and tp_clear is connected to the GC flags */ if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC) && (base->tp_flags & Py_TPFLAGS_HAVE_GC) && @@ -5662,23 +5667,7 @@ inherit_special(PyTypeObject *type, PyTypeObject *base) if (type->tp_clear == NULL) type->tp_clear = base->tp_clear; } - { - /* The condition below could use some explanation. - It appears that tp_new is not inherited for static types - whose base class is 'object'; this seems to be a precaution - so that old extension types don't suddenly become - callable (object.__new__ wouldn't insure the invariants - that the extension type's own factory function ensures). - Heap types, of course, are under our control, so they do - inherit tp_new; static extension types that specify some - other built-in type as the default also - inherit object.__new__. */ - if (base != &PyBaseObject_Type || - (type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { - if (type->tp_new == NULL) - type->tp_new = base->tp_new; - } - } + if (type->tp_basicsize == 0) type->tp_basicsize = base->tp_basicsize; @@ -5941,6 +5930,7 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base) } static int add_operators(PyTypeObject *); +static int add_tp_new_wrapper(PyTypeObject *type); static int @@ -5991,6 +5981,7 @@ type_ready_set_bases(PyTypeObject *type) type->tp_base = base; } } + assert(type->tp_base != NULL || type == &PyBaseObject_Type); /* Now the only way base can still be NULL is if type is * &PyBaseObject_Type. */ @@ -6249,6 +6240,50 @@ type_ready_add_subclasses(PyTypeObject *type) } +// Set tp_new and the "__new__" key in the type dictionary. +// Use the Py_TPFLAGS_DISALLOW_INSTANTIATION flag. +static int +type_ready_set_new(PyTypeObject *type) +{ + PyTypeObject *base = type->tp_base; + /* The condition below could use some explanation. + + It appears that tp_new is not inherited for static types whose base + class is 'object'; this seems to be a precaution so that old extension + types don't suddenly become callable (object.__new__ wouldn't insure the + invariants that the extension type's own factory function ensures). + + Heap types, of course, are under our control, so they do inherit tp_new; + static extension types that specify some other built-in type as the + default also inherit object.__new__. */ + if (type->tp_new == NULL + && base == &PyBaseObject_Type + && !(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) + { + type->tp_flags |= Py_TPFLAGS_DISALLOW_INSTANTIATION; + } + + if (!(type->tp_flags & Py_TPFLAGS_DISALLOW_INSTANTIATION)) { + if (type->tp_new != NULL) { + // If "__new__" key does not exists in the type dictionary, + // set it to tp_new_wrapper(). + if (add_tp_new_wrapper(type) < 0) { + return -1; + } + } + else { + // tp_new is NULL: inherit tp_new from base + type->tp_new = base->tp_new; + } + } + else { + // Py_TPFLAGS_DISALLOW_INSTANTIATION sets tp_new to NULL + type->tp_new = NULL; + } + return 0; +} + + static int type_ready(PyTypeObject *type) { @@ -6275,6 +6310,9 @@ type_ready(PyTypeObject *type) if (type_ready_mro(type) < 0) { return -1; } + if (type_ready_set_new(type) < 0) { + return -1; + } if (type_ready_fill_dict(type) < 0) { return -1; } @@ -6898,8 +6936,8 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds) "__new__() called with non-type 'self'"); return NULL; } - type = (PyTypeObject *)self; + if (!PyTuple_Check(args) || PyTuple_GET_SIZE(args) < 1) { PyErr_Format(PyExc_TypeError, "%s.__new__(): not enough arguments", @@ -6961,16 +6999,18 @@ static struct PyMethodDef tp_new_methoddef[] = { static int add_tp_new_wrapper(PyTypeObject *type) { - PyObject *func; - int r = _PyDict_ContainsId(type->tp_dict, &PyId___new__); - if (r > 0) + if (r > 0) { return 0; - if (r < 0) + } + if (r < 0) { return -1; - func = PyCFunction_NewEx(tp_new_methoddef, (PyObject *)type, NULL); - if (func == NULL) + } + + PyObject *func = PyCFunction_NewEx(tp_new_methoddef, (PyObject *)type, NULL); + if (func == NULL) { return -1; + } r = _PyDict_SetItemId(type->tp_dict, &PyId___new__, func); Py_DECREF(func); return r; @@ -8558,11 +8598,6 @@ add_operators(PyTypeObject *type) Py_DECREF(descr); } } - if (type->tp_new != NULL) { - if (add_tp_new_wrapper(type) < 0) { - return -1; - } - } return 0; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 911c2d967b010..36297ff82e1c3 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2810,56 +2810,35 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) /* version_info */ if (VersionInfoType.tp_name == NULL) { - if (PyStructSequence_InitType2(&VersionInfoType, - &version_info_desc) < 0) { + if (_PyStructSequence_InitType(&VersionInfoType, + &version_info_desc, + Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { goto type_init_failed; } } version_info = make_version_info(tstate); SET_SYS("version_info", version_info); - /* prevent user from creating new instances */ - VersionInfoType.tp_init = NULL; - VersionInfoType.tp_new = NULL; - res = PyDict_DelItemString(VersionInfoType.tp_dict, "__new__"); - if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { - _PyErr_Clear(tstate); - } /* implementation */ SET_SYS("implementation", make_impl_info(version_info)); // sys.flags: updated in-place later by _PySys_UpdateConfig() if (FlagsType.tp_name == 0) { - if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) { + if (_PyStructSequence_InitType(&FlagsType, &flags_desc, + Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { goto type_init_failed; } } SET_SYS("flags", make_flags(tstate->interp)); - /* prevent user from creating new instances */ - FlagsType.tp_init = NULL; - FlagsType.tp_new = NULL; - res = PyDict_DelItemString(FlagsType.tp_dict, "__new__"); - if (res < 0) { - if (!_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { - goto err_occurred; - } - _PyErr_Clear(tstate); - } #if defined(MS_WINDOWS) /* getwindowsversion */ - if (WindowsVersionType.tp_name == 0) - if (PyStructSequence_InitType2(&WindowsVersionType, - &windows_version_desc) < 0) { + if (WindowsVersionType.tp_name == 0) { + if (_PyStructSequence_InitType(&WindowsVersionType, + &windows_version_desc, + Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { goto type_init_failed; } - /* prevent user from creating new instances */ - WindowsVersionType.tp_init = NULL; - WindowsVersionType.tp_new = NULL; - assert(!_PyErr_Occurred(tstate)); - res = PyDict_DelItemString(WindowsVersionType.tp_dict, "__new__"); - if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { - _PyErr_Clear(tstate); } #endif From webhook-mailer at python.org Fri Apr 30 08:07:06 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 12:07:06 -0000 Subject: [Python-checkins] bpo-43916: Remove _disabled_new() function (GH-25745) Message-ID: https://github.com/python/cpython/commit/0cad068ec174bbe33fb80460da56eb413f3b9359 commit: 0cad068ec174bbe33fb80460da56eb413f3b9359 branch: master author: Victor Stinner committer: vstinner date: 2021-04-30T14:06:49+02:00 summary: bpo-43916: Remove _disabled_new() function (GH-25745) posix and _hashlib use the new Py_TPFLAGS_DISALLOW_INSTANTIATION flag on their heap types, rather than using a custom tp_new function (_disabled_new). files: M Lib/test/test_hashlib.py M Lib/test/test_hmac.py M Modules/_hashopenssl.c M Modules/posixmodule.c diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 9e9c874445c27..1236aa723b199 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -905,11 +905,11 @@ def test_get_fips_mode(self): def test_internal_types(self): # internal types like _hashlib.HASH are not constructable with self.assertRaisesRegex( - TypeError, "cannot create 'HASH' instance" + TypeError, "cannot create '_hashlib.HASH' instance" ): HASH() with self.assertRaisesRegex( - TypeError, "cannot create 'HASHXOF' instance" + TypeError, "cannot create '_hashlib.HASHXOF' instance" ): HASHXOF() diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index adf52adbf22af..22d74e9a1138a 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -440,7 +440,7 @@ def test_withmodule(self): def test_internal_types(self): # internal types like _hashlib.C_HMAC are not constructable with self.assertRaisesRegex( - TypeError, "cannot create 'HMAC' instance" + TypeError, "cannot create '_hashlib.HMAC' instance" ): C_HMAC() diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 870ee89fdafc6..de9bdd4f3062d 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -118,15 +118,6 @@ _setException(PyObject *exc) } /* LCOV_EXCL_STOP */ -/* {Py_tp_new, NULL} doesn't block __new__ */ -static PyObject * -_disabled_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, - "cannot create '%.100s' instances", _PyType_Name(type)); - return NULL; -} - static PyObject* py_digest_name(const EVP_MD *md) { @@ -590,7 +581,6 @@ static PyType_Slot EVPtype_slots[] = { {Py_tp_doc, (char *)hashtype_doc}, {Py_tp_methods, EVP_methods}, {Py_tp_getset, EVP_getseters}, - {Py_tp_new, _disabled_new}, {0, 0}, }; @@ -598,7 +588,7 @@ static PyType_Spec EVPtype_spec = { "_hashlib.HASH", /*tp_name*/ sizeof(EVPobject), /*tp_basicsize*/ 0, /*tp_itemsize*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION, EVPtype_slots }; @@ -740,7 +730,6 @@ static PyType_Slot EVPXOFtype_slots[] = { {Py_tp_doc, (char *)hashxoftype_doc}, {Py_tp_methods, EVPXOF_methods}, {Py_tp_getset, EVPXOF_getseters}, - {Py_tp_new, _disabled_new}, {0, 0}, }; @@ -748,7 +737,7 @@ static PyType_Spec EVPXOFtype_spec = { "_hashlib.HASHXOF", /*tp_name*/ sizeof(EVPobject), /*tp_basicsize*/ 0, /*tp_itemsize*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION, EVPXOFtype_slots }; @@ -1734,14 +1723,13 @@ static PyType_Slot HMACtype_slots[] = { {Py_tp_dealloc,(destructor)_hmac_dealloc}, {Py_tp_methods, HMAC_methods}, {Py_tp_getset, HMAC_getset}, - {Py_tp_new, _disabled_new}, {0, NULL} }; PyType_Spec HMACtype_spec = { "_hashlib.HMAC", /* name */ sizeof(HMACobject), /* basicsize */ - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = HMACtype_slots, }; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index ecd210e4babf5..25ddc82cb893a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -13415,14 +13415,6 @@ typedef struct { #endif } DirEntry; -static PyObject * -_disabled_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, - "cannot create '%.100s' instances", _PyType_Name(type)); - return NULL; -} - static void DirEntry_dealloc(DirEntry *entry) { @@ -13781,7 +13773,6 @@ static PyMethodDef DirEntry_methods[] = { }; static PyType_Slot DirEntryType_slots[] = { - {Py_tp_new, _disabled_new}, {Py_tp_dealloc, DirEntry_dealloc}, {Py_tp_repr, DirEntry_repr}, {Py_tp_methods, DirEntry_methods}, @@ -13793,7 +13784,7 @@ static PyType_Spec DirEntryType_spec = { MODNAME ".DirEntry", sizeof(DirEntry), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, DirEntryType_slots }; @@ -14213,7 +14204,6 @@ static PyMethodDef ScandirIterator_methods[] = { }; static PyType_Slot ScandirIteratorType_slots[] = { - {Py_tp_new, _disabled_new}, {Py_tp_dealloc, ScandirIterator_dealloc}, {Py_tp_finalize, ScandirIterator_finalize}, {Py_tp_iter, PyObject_SelfIter}, @@ -14228,7 +14218,8 @@ static PyType_Spec ScandirIteratorType_spec = { 0, // bpo-40549: Py_TPFLAGS_BASETYPE should not be used, since // PyType_GetModule(Py_TYPE(self)) doesn't work on a subclass instance. - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_FINALIZE, + (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_FINALIZE + | Py_TPFLAGS_DISALLOW_INSTANTIATION), ScandirIteratorType_slots }; From webhook-mailer at python.org Fri Apr 30 08:56:31 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 12:56:31 -0000 Subject: [Python-checkins] bpo-43916: PyStdPrinter_Type uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25749) Message-ID: https://github.com/python/cpython/commit/4908fae3d57f68694cf006e89fd7761f45003447 commit: 4908fae3d57f68694cf006e89fd7761f45003447 branch: master author: Victor Stinner committer: vstinner date: 2021-04-30T14:56:27+02:00 summary: bpo-43916: PyStdPrinter_Type uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25749) The PyStdPrinter_Type type now uses the Py_TPFLAGS_DISALLOW_INSTANTIATION flag to disallow instantiation, rather than seting a tp_init method which always fail. Write also unit tests for PyStdPrinter_Type. files: M Lib/test/test_embed.py M Objects/fileobject.c M Python/sysmodule.c diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 646cd0632edd8..23cf297d4ab62 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1473,11 +1473,67 @@ def test_audit_run_stdin(self): timeout=support.SHORT_TIMEOUT, returncode=1) + class MiscTests(EmbeddingTestsMixin, unittest.TestCase): def test_unicode_id_init(self): # bpo-42882: Test that _PyUnicode_FromId() works # when Python is initialized multiples times. self.run_embedded_interpreter("test_unicode_id_init") + +class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): + # Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr(): + # "Set up a preliminary stderr printer until we have enough + # infrastructure for the io module in place." + + def get_stdout_fd(self): + return sys.__stdout__.fileno() + + def create_printer(self, fd): + ctypes = import_helper.import_module('ctypes') + PyFile_NewStdPrinter = ctypes.pythonapi.PyFile_NewStdPrinter + PyFile_NewStdPrinter.argtypes = (ctypes.c_int,) + PyFile_NewStdPrinter.restype = ctypes.py_object + return PyFile_NewStdPrinter(fd) + + def test_write(self): + message = "unicode:\xe9-\u20ac-\udc80!\n" + + stdout_fd = self.get_stdout_fd() + stdout_fd_copy = os.dup(stdout_fd) + self.addCleanup(os.close, stdout_fd_copy) + + rfd, wfd = os.pipe() + self.addCleanup(os.close, rfd) + self.addCleanup(os.close, wfd) + try: + # PyFile_NewStdPrinter() only accepts fileno(stdout) + # or fileno(stderr) file descriptor. + os.dup2(wfd, stdout_fd) + + printer = self.create_printer(stdout_fd) + printer.write(message) + finally: + os.dup2(stdout_fd_copy, stdout_fd) + + data = os.read(rfd, 100) + self.assertEqual(data, message.encode('utf8', 'backslashreplace')) + + def test_methods(self): + fd = self.get_stdout_fd() + printer = self.create_printer(fd) + self.assertEqual(printer.fileno(), fd) + self.assertEqual(printer.isatty(), os.isatty(fd)) + printer.flush() # noop + printer.close() # noop + + def test_disallow_instantiation(self): + fd = self.get_stdout_fd() + printer = self.create_printer(fd) + PyStdPrinter_Type = type(printer) + with self.assertRaises(TypeError): + PyStdPrinter_Type(fd) + + if __name__ == "__main__": unittest.main() diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 9b89448006e84..5a2816f55244b 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -325,29 +325,6 @@ typedef struct { int fd; } PyStdPrinter_Object; -static PyObject * -stdprinter_new(PyTypeObject *type, PyObject *args, PyObject *kews) -{ - PyStdPrinter_Object *self; - - assert(type != NULL && type->tp_alloc != NULL); - - self = (PyStdPrinter_Object *) type->tp_alloc(type, 0); - if (self != NULL) { - self->fd = -1; - } - - return (PyObject *) self; -} - -static int -stdprinter_init(PyObject *self, PyObject *args, PyObject *kwds) -{ - PyErr_SetString(PyExc_TypeError, - "cannot create 'stderrprinter' instances"); - return -1; -} - PyObject * PyFile_NewStdPrinter(int fd) { @@ -390,7 +367,7 @@ stdprinter_write(PyStdPrinter_Object *self, PyObject *args) return NULL; } - /* Encode Unicode to UTF-8/surrogateescape */ + /* Encode Unicode to UTF-8/backslashreplace */ str = PyUnicode_AsUTF8AndSize(unicode, &n); if (str == NULL) { PyErr_Clear(); @@ -507,7 +484,7 @@ PyTypeObject PyStdPrinter_Type = { PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ @@ -523,9 +500,9 @@ PyTypeObject PyStdPrinter_Type = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - stdprinter_init, /* tp_init */ + 0, /* tp_init */ PyType_GenericAlloc, /* tp_alloc */ - stdprinter_new, /* tp_new */ + 0, /* tp_new */ PyObject_Del, /* tp_free */ }; diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 36297ff82e1c3..2190bbf37fdae 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -3007,7 +3007,7 @@ _PySys_UpdateConfig(PyThreadState *tstate) /* Set up a preliminary stderr printer until we have enough infrastructure for the io module in place. - Use UTF-8/surrogateescape and ignore EAGAIN errors. */ + Use UTF-8/backslashreplace and ignore EAGAIN errors. */ static PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict) { From webhook-mailer at python.org Fri Apr 30 09:21:49 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 13:21:49 -0000 Subject: [Python-checkins] bpo-43667: Fix broken Unicode encoding in non-UTF locales on Solaris (GH-25096) Message-ID: https://github.com/python/cpython/commit/9032cf5cb1e33c0349089cfb0f6bf11ed3c30e86 commit: 9032cf5cb1e33c0349089cfb0f6bf11ed3c30e86 branch: master author: Jakub Kul?k committer: vstinner date: 2021-04-30T15:21:42+02:00 summary: bpo-43667: Fix broken Unicode encoding in non-UTF locales on Solaris (GH-25096) files: M Include/internal/pycore_fileutils.h M Objects/unicodeobject.c M Python/fileutils.c M configure M configure.ac M pyconfig.h.in diff --git a/Include/internal/pycore_fileutils.h b/Include/internal/pycore_fileutils.h index 9281f4eeb8b634..c1c9244a1bc7c4 100644 --- a/Include/internal/pycore_fileutils.h +++ b/Include/internal/pycore_fileutils.h @@ -53,6 +53,18 @@ PyAPI_FUNC(void) _Py_closerange(int first, int last); PyAPI_FUNC(wchar_t*) _Py_GetLocaleEncoding(void); PyAPI_FUNC(PyObject*) _Py_GetLocaleEncodingObject(void); +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION +extern int _Py_LocaleUsesNonUnicodeWchar(void); + +extern wchar_t* _Py_DecodeNonUnicodeWchar( + const wchar_t* native, + Py_ssize_t size); + +extern int _Py_EncodeNonUnicodeWchar_InPlace( + wchar_t* unicode, + Py_ssize_t size); +#endif + #ifdef __cplusplus } #endif diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 74c5888d13b225..bfd5c881215dee 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -57,6 +57,10 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #endif +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION +#include "pycore_fileutils.h" // _Py_LocaleUsesNonUnicodeWchar() +#endif + /* Uncomment to display statistics on interned strings at exit in _PyUnicode_ClearInterned(). */ /* #define INTERNED_STATS 1 */ @@ -2217,6 +2221,20 @@ PyUnicode_FromWideChar(const wchar_t *u, Py_ssize_t size) if (size == 0) _Py_RETURN_UNICODE_EMPTY(); +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + /* Oracle Solaris uses non-Unicode internal wchar_t form for + non-Unicode locales and hence needs conversion to UCS-4 first. */ + if (_Py_LocaleUsesNonUnicodeWchar()) { + wchar_t* converted = _Py_DecodeNonUnicodeWchar(u, size); + if (!converted) { + return NULL; + } + PyObject *unicode = _PyUnicode_FromUCS4(converted, size); + PyMem_Free(converted); + return unicode; + } +#endif + /* Single character Unicode objects in the Latin-1 range are shared when using this constructor */ if (size == 1 && (Py_UCS4)*u < 256) @@ -3295,6 +3313,17 @@ PyUnicode_AsWideChar(PyObject *unicode, res = size; } unicode_copy_as_widechar(unicode, w, size); + +#if HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + /* Oracle Solaris uses non-Unicode internal wchar_t form for + non-Unicode locales and hence needs conversion first. */ + if (_Py_LocaleUsesNonUnicodeWchar()) { + if (_Py_EncodeNonUnicodeWchar_InPlace(w, size) < 0) { + return -1; + } + } +#endif + return res; } @@ -3321,6 +3350,17 @@ PyUnicode_AsWideCharString(PyObject *unicode, return NULL; } unicode_copy_as_widechar(unicode, buffer, buflen + 1); + +#if HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + /* Oracle Solaris uses non-Unicode internal wchar_t form for + non-Unicode locales and hence needs conversion first. */ + if (_Py_LocaleUsesNonUnicodeWchar()) { + if (_Py_EncodeNonUnicodeWchar_InPlace(buffer, (buflen + 1)) < 0) { + return NULL; + } + } +#endif + if (size != NULL) { *size = buflen; } diff --git a/Python/fileutils.c b/Python/fileutils.c index 2a079bbadcc5f6..a8fab00629da41 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -18,6 +18,10 @@ extern int winerror_to_errno(int); #include #endif +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION +#include +#endif + #ifdef HAVE_FCNTL_H #include #endif /* HAVE_FCNTL_H */ @@ -93,6 +97,12 @@ _Py_device_encoding(int fd) static size_t is_valid_wide_char(wchar_t ch) { +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + /* Oracle Solaris doesn't use Unicode code points as wchar_t encoding + for non-Unicode locales, which makes values higher than MAX_UNICODE + possibly valid. */ + return 1; +#endif if (Py_UNICODE_IS_SURROGATE(ch)) { // Reject lone surrogate characters return 0; @@ -922,6 +932,102 @@ _Py_GetLocaleEncodingObject(void) return str; } +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + +/* Check whether current locale uses Unicode as internal wchar_t form. */ +int +_Py_LocaleUsesNonUnicodeWchar(void) +{ + /* Oracle Solaris uses non-Unicode internal wchar_t form for + non-Unicode locales and hence needs conversion to UTF first. */ + char* codeset = nl_langinfo(CODESET); + if (!codeset) { + return 0; + } + /* 646 refers to ISO/IEC 646 standard that corresponds to ASCII encoding */ + return (strcmp(codeset, "UTF-8") != 0 && strcmp(codeset, "646") != 0); +} + +static wchar_t * +_Py_ConvertWCharForm(const wchar_t *source, Py_ssize_t size, + const char *tocode, const char *fromcode) +{ + Py_BUILD_ASSERT(sizeof(wchar_t) == 4); + + /* Ensure we won't overflow the size. */ + if (size > (PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(wchar_t))) { + PyErr_NoMemory(); + return NULL; + } + + /* the string doesn't have to be NULL terminated */ + wchar_t* target = PyMem_Malloc(size * sizeof(wchar_t)); + if (target == NULL) { + PyErr_NoMemory(); + return NULL; + } + + iconv_t cd = iconv_open(tocode, fromcode); + if (cd == (iconv_t)-1) { + PyErr_Format(PyExc_ValueError, "iconv_open() failed"); + PyMem_Free(target); + return NULL; + } + + char *inbuf = (char *) source; + char *outbuf = (char *) target; + size_t inbytesleft = sizeof(wchar_t) * size; + size_t outbytesleft = inbytesleft; + + size_t ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); + if (ret == DECODE_ERROR) { + PyErr_Format(PyExc_ValueError, "iconv() failed"); + PyMem_Free(target); + iconv_close(cd); + return NULL; + } + + iconv_close(cd); + return target; +} + +/* Convert a wide character string to the UCS-4 encoded string. This + is necessary on systems where internal form of wchar_t are not Unicode + code points (e.g. Oracle Solaris). + + Return a pointer to a newly allocated string, use PyMem_Free() to free + the memory. Return NULL and raise exception on conversion or memory + allocation error. */ +wchar_t * +_Py_DecodeNonUnicodeWchar(const wchar_t *native, Py_ssize_t size) +{ + return _Py_ConvertWCharForm(native, size, "UCS-4-INTERNAL", "wchar_t"); +} + +/* Convert a UCS-4 encoded string to native wide character string. This + is necessary on systems where internal form of wchar_t are not Unicode + code points (e.g. Oracle Solaris). + + The conversion is done in place. This can be done because both wchar_t + and UCS-4 use 4-byte encoding, and one wchar_t symbol always correspond + to a single UCS-4 symbol and vice versa. (This is true for Oracle Solaris, + which is currently the only system using these functions; it doesn't have + to be for other systems). + + Return 0 on success. Return -1 and raise exception on conversion + or memory allocation error. */ +int +_Py_EncodeNonUnicodeWchar_InPlace(wchar_t *unicode, Py_ssize_t size) +{ + wchar_t* result = _Py_ConvertWCharForm(unicode, size, "wchar_t", "UCS-4-INTERNAL"); + if (!result) { + return -1; + } + memcpy(unicode, result, size * sizeof(wchar_t)); + PyMem_Free(result); + return 0; +} +#endif /* HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION */ #ifdef MS_WINDOWS static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */ diff --git a/configure b/configure index ad0367fe0e20bb..08a88aa46d5e19 100755 --- a/configure +++ b/configure @@ -15264,6 +15264,22 @@ else $as_echo "no" >&6; } fi +case $ac_sys_system/$ac_sys_release in +SunOS/*) + if test -f /etc/os-release; then + OS_NAME=$(awk -F= '/^NAME=/ {print substr($2,2,length($2)-2)}' /etc/os-release) + if test "x$OS_NAME" = "xOracle Solaris"; then + # bpo-43667: In Oracle Solaris, the internal form of wchar_t in + # non-Unicode locales is not Unicode and hence cannot be used directly. + # https://docs.oracle.com/cd/E37838_01/html/E61053/gmwke.html + +$as_echo "#define HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION 1" >>confdefs.h + + fi + fi + ;; +esac + # check for endianness { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } diff --git a/configure.ac b/configure.ac index 3df9bd0acec628..b2643292b2c3e3 100644 --- a/configure.ac +++ b/configure.ac @@ -4765,6 +4765,22 @@ else AC_MSG_RESULT(no) fi +case $ac_sys_system/$ac_sys_release in +SunOS/*) + if test -f /etc/os-release; then + OS_NAME=$(awk -F= '/^NAME=/ {print substr($2,2,length($2)-2)}' /etc/os-release) + if test "x$OS_NAME" = "xOracle Solaris"; then + # bpo-43667: In Oracle Solaris, the internal form of wchar_t in + # non-Unicode locales is not Unicode and hence cannot be used directly. + # https://docs.oracle.com/cd/E37838_01/html/E61053/gmwke.html + AC_DEFINE(HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION, 1, + [Define if the internal form of wchar_t in non-Unicode locales + is not Unicode.]) + fi + fi + ;; +esac + # check for endianness AC_C_BIGENDIAN diff --git a/pyconfig.h.in b/pyconfig.h.in index 6e54d553b7750f..63438d857a070c 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -748,6 +748,10 @@ /* Define to 1 if you have the `nice' function. */ #undef HAVE_NICE +/* Define if the internal form of wchar_t in non-Unicode locales is not + Unicode. */ +#undef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION + /* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT From webhook-mailer at python.org Fri Apr 30 09:25:51 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 13:25:51 -0000 Subject: [Python-checkins] bpo-43908: check_set_special_type_attr() checks Py_TPFLAGS_IMMUTABLETYPE (GH-25743) Message-ID: https://github.com/python/cpython/commit/64141382ecbad665d5738ff26d15505f3427c724 commit: 64141382ecbad665d5738ff26d15505f3427c724 branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-30T15:25:43+02:00 summary: bpo-43908: check_set_special_type_attr() checks Py_TPFLAGS_IMMUTABLETYPE (GH-25743) check_set_special_type_attr() and type_set_annotations() now check for immutable flag (Py_TPFLAGS_IMMUTABLETYPE). Co-authored-by: Victor Stinner files: M Lib/test/test_descr.py M Objects/typeobject.c diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 79d6c4b5e7232..3cb923ed0520a 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -4763,12 +4763,14 @@ class X: "elephant" X.__doc__ = "banana" self.assertEqual(X.__doc__, "banana") + with self.assertRaises(TypeError) as cm: type(list).__dict__["__doc__"].__set__(list, "blah") - self.assertIn("can't set list.__doc__", str(cm.exception)) + self.assertIn("cannot set '__doc__' attribute of immutable type 'list'", str(cm.exception)) + with self.assertRaises(TypeError) as cm: type(X).__dict__["__doc__"].__delete__(X) - self.assertIn("can't delete X.__doc__", str(cm.exception)) + self.assertIn("cannot delete '__doc__' attribute of immutable type 'X'", str(cm.exception)) self.assertEqual(X.__doc__, "banana") def test_qualname(self): diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 0f7f280bca0d6..621bb0ca93022 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -466,14 +466,16 @@ static PyMemberDef type_members[] = { static int check_set_special_type_attr(PyTypeObject *type, PyObject *value, const char *name) { - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { + if (_PyType_HasFeature(type, Py_TPFLAGS_IMMUTABLETYPE)) { PyErr_Format(PyExc_TypeError, - "can't set %s.%s", type->tp_name, name); + "cannot set '%s' attribute of immutable type '%s'", + name, type->tp_name); return 0; } if (!value) { PyErr_Format(PyExc_TypeError, - "can't delete %s.%s", type->tp_name, name); + "cannot delete '%s' attribute of immutable type '%s'", + name, type->tp_name); return 0; } @@ -978,8 +980,10 @@ type_get_annotations(PyTypeObject *type, void *context) static int type_set_annotations(PyTypeObject *type, PyObject *value, void *context) { - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) { - PyErr_Format(PyExc_TypeError, "can't set attributes of built-in/extension type '%s'", type->tp_name); + if (_PyType_HasFeature(type, Py_TPFLAGS_IMMUTABLETYPE)) { + PyErr_Format(PyExc_TypeError, + "cannot set '__annotations__' attribute of immutable type '%s'", + type->tp_name); return -1; } @@ -3953,8 +3957,8 @@ type_setattro(PyTypeObject *type, PyObject *name, PyObject *value) if (type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) { PyErr_Format( PyExc_TypeError, - "can't set attributes of built-in/extension type '%s'", - type->tp_name); + "cannot set %R attribute of immutable type '%s'", + name, type->tp_name); return -1; } if (PyUnicode_Check(name)) { From webhook-mailer at python.org Fri Apr 30 09:32:55 2021 From: webhook-mailer at python.org (markshannon) Date: Fri, 30 Apr 2021 13:32:55 -0000 Subject: [Python-checkins] bpo-43933: Set frame.f_lineno during call to __exit__ (GH-25719) Message-ID: https://github.com/python/cpython/commit/5979e81a212949c62c2490167c9137d233d7de64 commit: 5979e81a212949c62c2490167c9137d233d7de64 branch: master author: Mark Shannon committer: markshannon date: 2021-04-30T14:32:47+01:00 summary: bpo-43933: Set frame.f_lineno during call to __exit__ (GH-25719) * Set line number of __exit__ call in a with statement to be that of the with keyword. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst M Lib/test/test_dis.py M Lib/test/test_sys_settrace.py M Python/compile.c M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 8d059352bc6d10..21c68d488c33d3 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -1087,7 +1087,7 @@ def jumpy(): Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=154, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=156, starts_line=None, is_jump_target=False), Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=160, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=160, starts_line=25, is_jump_target=False), Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=162, starts_line=None, is_jump_target=False), Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=166, starts_line=None, is_jump_target=False), diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 49e89289956862..40dd92ca8e23ac 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -936,10 +936,11 @@ def func(): (-4, 'line'), (-4, 'return'), (2, 'line'), + (1, 'line'), (-3, 'call'), (-2, 'line'), (-2, 'return'), - (2, 'return')]) + (1, 'return')]) def test_if_false_in_try_except(self): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst new file mode 100644 index 00000000000000..d442f303edc076 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst @@ -0,0 +1,2 @@ +Set frame.f_lineno to the line number of the 'with' kweyword when executing +the call to ``__exit__``. diff --git a/Python/compile.c b/Python/compile.c index 6560fd426aef91..4411edb6678438 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1745,6 +1745,7 @@ static int compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, int preserve_tos) { + int loc; switch (info->fb_type) { case WHILE_LOOP: case EXCEPTION_HANDLER: @@ -1797,6 +1798,8 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, case WITH: case ASYNC_WITH: + loc = c->u->u_lineno; + SET_LOC(c, (stmt_ty)info->fb_datum); ADDOP(c, POP_BLOCK); if (preserve_tos) { ADDOP(c, ROT_TWO); @@ -1810,6 +1813,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, ADDOP(c, YIELD_FROM); } ADDOP(c, POP_TOP); + c->u->u_lineno = loc; return 1; case HANDLER_CLEANUP: @@ -4990,7 +4994,7 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) /* SETUP_ASYNC_WITH pushes a finally block. */ compiler_use_next_block(c, block); - if (!compiler_push_fblock(c, ASYNC_WITH, block, final, NULL)) { + if (!compiler_push_fblock(c, ASYNC_WITH, block, final, s)) { return 0; } @@ -5016,6 +5020,7 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) /* For successful outcome: * call __exit__(None, None, None) */ + SET_LOC(c, s); if(!compiler_call_exit_with_nones(c)) return 0; ADDOP(c, GET_AWAITABLE); @@ -5028,7 +5033,6 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) /* For exceptional outcome: */ compiler_use_next_block(c, final); - ADDOP(c, WITH_EXCEPT_START); ADDOP(c, GET_AWAITABLE); ADDOP_LOAD_CONST(c, Py_None); @@ -5082,7 +5086,7 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) /* SETUP_WITH pushes a finally block. */ compiler_use_next_block(c, block); - if (!compiler_push_fblock(c, WITH, block, final, NULL)) { + if (!compiler_push_fblock(c, WITH, block, final, s)) { return 0; } @@ -5112,6 +5116,7 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) /* For successful outcome: * call __exit__(None, None, None) */ + SET_LOC(c, s); if (!compiler_call_exit_with_nones(c)) return 0; ADDOP(c, POP_TOP); @@ -5119,7 +5124,6 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) /* For exceptional outcome: */ compiler_use_next_block(c, final); - ADDOP(c, WITH_EXCEPT_START); compiler_with_except_finish(c); diff --git a/Python/importlib.h b/Python/importlib.h index 19d3c45b6581e2..8156973bdeaaf7 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -149,918 +149,919 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 95,77,111,100,117,108,101,76,111,99,107,46,104,97,115,95, 100,101,97,100,108,111,99,107,99,1,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,8,0,0,0,67,0,0, - 0,115,198,0,0,0,116,0,160,1,161,0,125,1,124,0, - 116,2,124,1,60,0,122,86,9,0,124,0,106,3,143,63, + 0,115,200,0,0,0,116,0,160,1,161,0,125,1,124,0, + 116,2,124,1,60,0,122,87,9,0,124,0,106,3,143,64, 1,0,124,0,106,4,100,2,107,2,115,24,124,0,106,5, - 124,1,107,2,114,46,124,1,124,0,95,5,124,0,4,0, - 106,4,100,3,55,0,2,0,95,4,87,0,100,4,4,0, - 4,0,131,3,1,0,87,0,116,2,124,1,61,0,100,1, - 83,0,124,0,160,6,161,0,114,56,116,7,100,5,124,0, - 22,0,131,1,130,1,124,0,106,8,160,9,100,6,161,1, - 114,69,124,0,4,0,106,10,100,3,55,0,2,0,95,10, - 87,0,100,4,4,0,4,0,131,3,1,0,110,8,49,0, - 115,79,119,1,1,0,1,0,1,0,89,0,1,0,124,0, - 106,8,160,9,161,0,1,0,124,0,106,8,160,11,161,0, - 1,0,113,10,116,2,124,1,61,0,119,0,41,7,122,185, - 10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,101, + 124,1,107,2,114,47,124,1,124,0,95,5,124,0,4,0, + 106,4,100,3,55,0,2,0,95,4,9,0,87,0,100,4, + 4,0,4,0,131,3,1,0,87,0,116,2,124,1,61,0, + 100,1,83,0,124,0,160,6,161,0,114,57,116,7,100,5, + 124,0,22,0,131,1,130,1,124,0,106,8,160,9,100,6, + 161,1,114,70,124,0,4,0,106,10,100,3,55,0,2,0, + 95,10,87,0,100,4,4,0,4,0,131,3,1,0,110,8, + 49,0,115,80,119,1,1,0,1,0,1,0,89,0,1,0, + 124,0,106,8,160,9,161,0,1,0,124,0,106,8,160,11, + 161,0,1,0,113,10,116,2,124,1,61,0,119,0,41,7, + 122,185,10,32,32,32,32,32,32,32,32,65,99,113,117,105, + 114,101,32,116,104,101,32,109,111,100,117,108,101,32,108,111, + 99,107,46,32,32,73,102,32,97,32,112,111,116,101,110,116, + 105,97,108,32,100,101,97,100,108,111,99,107,32,105,115,32, + 100,101,116,101,99,116,101,100,44,10,32,32,32,32,32,32, + 32,32,97,32,95,68,101,97,100,108,111,99,107,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,46,10,32,32, + 32,32,32,32,32,32,79,116,104,101,114,119,105,115,101,44, + 32,116,104,101,32,108,111,99,107,32,105,115,32,97,108,119, + 97,121,115,32,97,99,113,117,105,114,101,100,32,97,110,100, + 32,84,114,117,101,32,105,115,32,114,101,116,117,114,110,101, + 100,46,10,32,32,32,32,32,32,32,32,84,114,25,0,0, + 0,233,1,0,0,0,78,122,23,100,101,97,100,108,111,99, + 107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114, + 70,41,12,114,26,0,0,0,114,35,0,0,0,114,37,0, + 0,0,114,27,0,0,0,114,30,0,0,0,114,29,0,0, + 0,114,41,0,0,0,114,22,0,0,0,114,28,0,0,0, + 218,7,97,99,113,117,105,114,101,114,31,0,0,0,218,7, + 114,101,108,101,97,115,101,169,2,114,33,0,0,0,114,40, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,43,0,0,0,100,0,0,0,115,44,0,0,0, + 8,6,8,1,2,1,2,1,8,1,20,1,6,1,14,1, + 2,1,12,252,2,4,10,9,8,248,12,1,12,1,14,1, + 2,128,28,248,10,10,10,1,2,244,8,14,122,19,95,77, + 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,8,0,0,0,67,0,0,0,115,144,0,0,0,116, + 0,160,1,161,0,125,1,124,0,106,2,143,55,1,0,124, + 0,106,3,124,1,107,3,114,17,116,4,100,1,131,1,130, + 1,124,0,106,5,100,2,107,4,115,24,74,0,130,1,124, + 0,4,0,106,5,100,3,56,0,2,0,95,5,124,0,106, + 5,100,2,107,2,114,54,100,0,124,0,95,3,124,0,106, + 6,114,54,124,0,4,0,106,6,100,3,56,0,2,0,95, + 6,124,0,106,7,160,8,161,0,1,0,87,0,100,0,4, + 0,4,0,131,3,1,0,100,0,83,0,49,0,115,65,119, + 1,1,0,1,0,1,0,89,0,1,0,100,0,83,0,41, + 4,78,250,31,99,97,110,110,111,116,32,114,101,108,101,97, + 115,101,32,117,110,45,97,99,113,117,105,114,101,100,32,108, + 111,99,107,114,25,0,0,0,114,42,0,0,0,41,9,114, + 26,0,0,0,114,35,0,0,0,114,27,0,0,0,114,29, + 0,0,0,218,12,82,117,110,116,105,109,101,69,114,114,111, + 114,114,30,0,0,0,114,31,0,0,0,114,28,0,0,0, + 114,44,0,0,0,114,45,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,44,0,0,0,125,0, + 0,0,115,26,0,0,0,8,1,8,1,10,1,8,1,14, + 1,14,1,10,1,6,1,6,1,14,1,10,1,2,128,34, + 247,122,19,95,77,111,100,117,108,101,76,111,99,107,46,114, + 101,108,101,97,115,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,5,0,0,0,67,0,0,0,243, + 18,0,0,0,100,1,160,0,124,0,106,1,116,2,124,0, + 131,1,161,2,83,0,41,2,78,122,23,95,77,111,100,117, + 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, + 123,125,169,3,218,6,102,111,114,109,97,116,114,20,0,0, + 0,218,2,105,100,169,1,114,33,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,8,95,95,114, + 101,112,114,95,95,138,0,0,0,243,2,0,0,0,18,1, + 122,20,95,77,111,100,117,108,101,76,111,99,107,46,95,95, + 114,101,112,114,95,95,78,41,9,114,9,0,0,0,114,8, + 0,0,0,114,1,0,0,0,114,10,0,0,0,114,34,0, + 0,0,114,41,0,0,0,114,43,0,0,0,114,44,0,0, + 0,114,53,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,23,0,0,0,65, + 0,0,0,115,14,0,0,0,8,0,4,1,8,5,8,8, + 8,21,8,25,12,13,114,23,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, + 9,132,0,90,7,100,10,83,0,41,11,218,16,95,68,117, + 109,109,121,77,111,100,117,108,101,76,111,99,107,122,86,65, + 32,115,105,109,112,108,101,32,95,77,111,100,117,108,101,76, + 111,99,107,32,101,113,117,105,118,97,108,101,110,116,32,102, + 111,114,32,80,121,116,104,111,110,32,98,117,105,108,100,115, + 32,119,105,116,104,111,117,116,10,32,32,32,32,109,117,108, + 116,105,45,116,104,114,101,97,100,105,110,103,32,115,117,112, + 112,111,114,116,46,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,1,124,0,95,0,100,1,124,0,95,1,100, + 0,83,0,114,24,0,0,0,41,2,114,20,0,0,0,114, + 30,0,0,0,114,32,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,34,0,0,0,146,0,0, + 0,243,4,0,0,0,6,1,10,1,122,25,95,68,117,109, + 109,121,77,111,100,117,108,101,76,111,99,107,46,95,95,105, + 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,18, + 0,0,0,124,0,4,0,106,0,100,1,55,0,2,0,95, + 0,100,2,83,0,41,3,78,114,42,0,0,0,84,41,1, + 114,30,0,0,0,114,52,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,43,0,0,0,150,0, + 0,0,115,4,0,0,0,14,1,4,1,122,24,95,68,117, + 109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,99, + 113,117,105,114,101,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,36, + 0,0,0,124,0,106,0,100,1,107,2,114,9,116,1,100, + 2,131,1,130,1,124,0,4,0,106,0,100,3,56,0,2, + 0,95,0,100,0,83,0,41,4,78,114,25,0,0,0,114, + 46,0,0,0,114,42,0,0,0,41,2,114,30,0,0,0, + 114,47,0,0,0,114,52,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,44,0,0,0,154,0, + 0,0,115,6,0,0,0,10,1,8,1,18,1,122,24,95, + 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, + 114,101,108,101,97,115,101,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,0, + 114,48,0,0,0,41,2,78,122,28,95,68,117,109,109,121, + 77,111,100,117,108,101,76,111,99,107,40,123,33,114,125,41, + 32,97,116,32,123,125,114,49,0,0,0,114,52,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 53,0,0,0,159,0,0,0,114,54,0,0,0,122,25,95, + 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, + 95,95,114,101,112,114,95,95,78,41,8,114,9,0,0,0, + 114,8,0,0,0,114,1,0,0,0,114,10,0,0,0,114, + 34,0,0,0,114,43,0,0,0,114,44,0,0,0,114,53, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,55,0,0,0,142,0,0,0, + 115,12,0,0,0,8,0,4,1,8,3,8,4,8,4,12, + 5,114,55,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, + 36,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, + 132,0,90,5,100,7,83,0,41,8,218,18,95,77,111,100, + 117,108,101,76,111,99,107,77,97,110,97,103,101,114,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,16,0,0,0,124,1,124,0, + 95,0,100,0,124,0,95,1,100,0,83,0,114,0,0,0, + 0,41,2,218,5,95,110,97,109,101,218,5,95,108,111,99, + 107,114,32,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,34,0,0,0,165,0,0,0,114,56, + 0,0,0,122,27,95,77,111,100,117,108,101,76,111,99,107, + 77,97,110,97,103,101,114,46,95,95,105,110,105,116,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,67,0,0,0,115,26,0,0,0,116,0, + 124,0,106,1,131,1,124,0,95,2,124,0,106,2,160,3, + 161,0,1,0,100,0,83,0,114,0,0,0,0,41,4,218, + 16,95,103,101,116,95,109,111,100,117,108,101,95,108,111,99, + 107,114,58,0,0,0,114,59,0,0,0,114,43,0,0,0, + 114,52,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,9,95,95,101,110,116,101,114,95,95,169, + 0,0,0,115,4,0,0,0,12,1,14,1,122,28,95,77, + 111,100,117,108,101,76,111,99,107,77,97,110,97,103,101,114, + 46,95,95,101,110,116,101,114,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,79, + 0,0,0,115,14,0,0,0,124,0,106,0,160,1,161,0, + 1,0,100,0,83,0,114,0,0,0,0,41,2,114,59,0, + 0,0,114,44,0,0,0,41,3,114,33,0,0,0,218,4, + 97,114,103,115,90,6,107,119,97,114,103,115,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,8,95,95,101, + 120,105,116,95,95,173,0,0,0,115,2,0,0,0,14,1, + 122,27,95,77,111,100,117,108,101,76,111,99,107,77,97,110, + 97,103,101,114,46,95,95,101,120,105,116,95,95,78,41,6, + 114,9,0,0,0,114,8,0,0,0,114,1,0,0,0,114, + 34,0,0,0,114,61,0,0,0,114,63,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,57,0,0,0,163,0,0,0,115,8,0,0,0, + 8,0,8,2,8,4,12,4,114,57,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,0, + 0,0,67,0,0,0,115,132,0,0,0,116,0,160,1,161, + 0,1,0,122,55,122,7,116,2,124,0,25,0,131,0,125, + 1,87,0,110,9,4,0,116,3,121,65,1,0,1,0,1, + 0,100,1,125,1,89,0,124,1,100,1,117,0,114,53,116, + 4,100,1,117,0,114,35,116,5,124,0,131,1,125,1,110, + 4,116,6,124,0,131,1,125,1,124,0,102,1,100,2,100, + 3,132,1,125,2,116,7,160,8,124,1,124,2,161,2,116, + 2,124,0,60,0,87,0,116,0,160,9,161,0,1,0,124, + 1,83,0,116,0,160,9,161,0,1,0,119,0,119,0,41, + 4,122,139,71,101,116,32,111,114,32,99,114,101,97,116,101, 32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107, - 46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,97, - 108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,101, - 116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,32, - 97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,32, - 32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,116, - 104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,121, - 115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,84, - 114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,46, - 10,32,32,32,32,32,32,32,32,84,114,25,0,0,0,233, - 1,0,0,0,78,122,23,100,101,97,100,108,111,99,107,32, - 100,101,116,101,99,116,101,100,32,98,121,32,37,114,70,41, - 12,114,26,0,0,0,114,35,0,0,0,114,37,0,0,0, - 114,27,0,0,0,114,30,0,0,0,114,29,0,0,0,114, - 41,0,0,0,114,22,0,0,0,114,28,0,0,0,218,7, - 97,99,113,117,105,114,101,114,31,0,0,0,218,7,114,101, - 108,101,97,115,101,169,2,114,33,0,0,0,114,40,0,0, + 32,102,111,114,32,97,32,103,105,118,101,110,32,109,111,100, + 117,108,101,32,110,97,109,101,46,10,10,32,32,32,32,65, + 99,113,117,105,114,101,47,114,101,108,101,97,115,101,32,105, + 110,116,101,114,110,97,108,108,121,32,116,104,101,32,103,108, + 111,98,97,108,32,105,109,112,111,114,116,32,108,111,99,107, + 32,116,111,32,112,114,111,116,101,99,116,10,32,32,32,32, + 95,109,111,100,117,108,101,95,108,111,99,107,115,46,78,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 8,0,0,0,83,0,0,0,115,54,0,0,0,116,0,160, + 1,161,0,1,0,122,17,116,2,160,3,124,1,161,1,124, + 0,117,0,114,15,116,2,124,1,61,0,87,0,116,0,160, + 4,161,0,1,0,100,0,83,0,116,0,160,4,161,0,1, + 0,119,0,114,0,0,0,0,41,5,218,4,95,105,109,112, + 218,12,97,99,113,117,105,114,101,95,108,111,99,107,218,13, + 95,109,111,100,117,108,101,95,108,111,99,107,115,114,38,0, + 0,0,218,12,114,101,108,101,97,115,101,95,108,111,99,107, + 41,2,218,3,114,101,102,114,20,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,218,2,99,98,198, + 0,0,0,115,12,0,0,0,8,1,2,1,14,4,6,1, + 2,128,22,2,122,28,95,103,101,116,95,109,111,100,117,108, + 101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46, + 99,98,41,10,114,64,0,0,0,114,65,0,0,0,114,66, + 0,0,0,218,8,75,101,121,69,114,114,111,114,114,26,0, + 0,0,114,55,0,0,0,114,23,0,0,0,218,8,95,119, + 101,97,107,114,101,102,114,68,0,0,0,114,67,0,0,0, + 41,3,114,20,0,0,0,114,27,0,0,0,114,69,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,43,0,0,0,100,0,0,0,115,38,0,0,0,8,6, - 8,1,2,1,2,1,8,1,20,1,6,1,14,1,14,1, - 10,9,8,248,12,1,12,1,14,1,30,128,10,2,10,1, - 2,244,8,14,122,19,95,77,111,100,117,108,101,76,111,99, - 107,46,97,99,113,117,105,114,101,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0, - 0,0,115,144,0,0,0,116,0,160,1,161,0,125,1,124, - 0,106,2,143,55,1,0,124,0,106,3,124,1,107,3,114, - 17,116,4,100,1,131,1,130,1,124,0,106,5,100,2,107, - 4,115,24,74,0,130,1,124,0,4,0,106,5,100,3,56, - 0,2,0,95,5,124,0,106,5,100,2,107,2,114,54,100, - 0,124,0,95,3,124,0,106,6,114,54,124,0,4,0,106, - 6,100,3,56,0,2,0,95,6,124,0,106,7,160,8,161, - 0,1,0,87,0,100,0,4,0,4,0,131,3,1,0,100, - 0,83,0,49,0,115,65,119,1,1,0,1,0,1,0,89, - 0,1,0,100,0,83,0,41,4,78,250,31,99,97,110,110, - 111,116,32,114,101,108,101,97,115,101,32,117,110,45,97,99, - 113,117,105,114,101,100,32,108,111,99,107,114,25,0,0,0, - 114,42,0,0,0,41,9,114,26,0,0,0,114,35,0,0, - 0,114,27,0,0,0,114,29,0,0,0,218,12,82,117,110, - 116,105,109,101,69,114,114,111,114,114,30,0,0,0,114,31, - 0,0,0,114,28,0,0,0,114,44,0,0,0,114,45,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,44,0,0,0,125,0,0,0,115,24,0,0,0,8, - 1,8,1,10,1,8,1,14,1,14,1,10,1,6,1,6, - 1,14,1,10,1,36,128,122,19,95,77,111,100,117,108,101, - 76,111,99,107,46,114,101,108,101,97,115,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0, - 0,67,0,0,0,243,18,0,0,0,100,1,160,0,124,0, - 106,1,116,2,124,0,131,1,161,2,83,0,41,2,78,122, - 23,95,77,111,100,117,108,101,76,111,99,107,40,123,33,114, - 125,41,32,97,116,32,123,125,169,3,218,6,102,111,114,109, - 97,116,114,20,0,0,0,218,2,105,100,169,1,114,33,0, + 114,60,0,0,0,179,0,0,0,115,34,0,0,0,8,6, + 2,1,2,1,14,1,12,1,6,1,8,2,8,1,10,1, + 8,2,12,2,16,11,2,128,8,2,4,2,10,254,2,234, + 114,60,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,54, + 0,0,0,116,0,124,0,131,1,125,1,122,6,124,1,160, + 1,161,0,1,0,87,0,110,9,4,0,116,2,121,26,1, + 0,1,0,1,0,89,0,100,1,83,0,124,1,160,3,161, + 0,1,0,100,1,83,0,119,0,41,2,122,189,65,99,113, + 117,105,114,101,115,32,116,104,101,110,32,114,101,108,101,97, + 115,101,115,32,116,104,101,32,109,111,100,117,108,101,32,108, + 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, + 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, + 32,32,84,104,105,115,32,105,115,32,117,115,101,100,32,116, + 111,32,101,110,115,117,114,101,32,97,32,109,111,100,117,108, + 101,32,105,115,32,99,111,109,112,108,101,116,101,108,121,32, + 105,110,105,116,105,97,108,105,122,101,100,44,32,105,110,32, + 116,104,101,10,32,32,32,32,101,118,101,110,116,32,105,116, + 32,105,115,32,98,101,105,110,103,32,105,109,112,111,114,116, + 101,100,32,98,121,32,97,110,111,116,104,101,114,32,116,104, + 114,101,97,100,46,10,32,32,32,32,78,41,4,114,60,0, + 0,0,114,43,0,0,0,114,22,0,0,0,114,44,0,0, + 0,41,2,114,20,0,0,0,114,27,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,218,19,95,108, + 111,99,107,95,117,110,108,111,99,107,95,109,111,100,117,108, + 101,216,0,0,0,115,14,0,0,0,8,6,2,1,12,1, + 12,1,6,3,12,2,2,251,114,72,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, + 0,0,79,0,0,0,115,14,0,0,0,124,0,124,1,105, + 0,124,2,164,1,142,1,83,0,41,2,97,46,1,0,0, + 114,101,109,111,118,101,95,105,109,112,111,114,116,108,105,98, + 95,102,114,97,109,101,115,32,105,110,32,105,109,112,111,114, + 116,46,99,32,119,105,108,108,32,97,108,119,97,121,115,32, + 114,101,109,111,118,101,32,115,101,113,117,101,110,99,101,115, + 10,32,32,32,32,111,102,32,105,109,112,111,114,116,108,105, + 98,32,102,114,97,109,101,115,32,116,104,97,116,32,101,110, + 100,32,119,105,116,104,32,97,32,99,97,108,108,32,116,111, + 32,116,104,105,115,32,102,117,110,99,116,105,111,110,10,10, + 32,32,32,32,85,115,101,32,105,116,32,105,110,115,116,101, + 97,100,32,111,102,32,97,32,110,111,114,109,97,108,32,99, + 97,108,108,32,105,110,32,112,108,97,99,101,115,32,119,104, + 101,114,101,32,105,110,99,108,117,100,105,110,103,32,116,104, + 101,32,105,109,112,111,114,116,108,105,98,10,32,32,32,32, + 102,114,97,109,101,115,32,105,110,116,114,111,100,117,99,101, + 115,32,117,110,119,97,110,116,101,100,32,110,111,105,115,101, + 32,105,110,116,111,32,116,104,101,32,116,114,97,99,101,98, + 97,99,107,32,40,101,46,103,46,32,119,104,101,110,32,101, + 120,101,99,117,116,105,110,103,10,32,32,32,32,109,111,100, + 117,108,101,32,99,111,100,101,41,10,32,32,32,32,78,114, + 5,0,0,0,41,3,218,1,102,114,62,0,0,0,90,4, + 107,119,100,115,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, + 102,114,97,109,101,115,95,114,101,109,111,118,101,100,233,0, + 0,0,115,2,0,0,0,14,8,114,74,0,0,0,114,42, + 0,0,0,41,1,218,9,118,101,114,98,111,115,105,116,121, + 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,4,0,0,0,71,0,0,0,115,58,0,0,0,116,0, + 106,1,106,2,124,1,107,5,114,27,124,0,160,3,100,1, + 161,1,115,15,100,2,124,0,23,0,125,0,116,4,124,0, + 106,5,124,2,142,0,116,0,106,6,100,3,141,2,1,0, + 100,4,83,0,100,4,83,0,41,5,122,61,80,114,105,110, + 116,32,116,104,101,32,109,101,115,115,97,103,101,32,116,111, + 32,115,116,100,101,114,114,32,105,102,32,45,118,47,80,89, + 84,72,79,78,86,69,82,66,79,83,69,32,105,115,32,116, + 117,114,110,101,100,32,111,110,46,41,2,250,1,35,122,7, + 105,109,112,111,114,116,32,122,2,35,32,41,1,90,4,102, + 105,108,101,78,41,7,114,18,0,0,0,218,5,102,108,97, + 103,115,218,7,118,101,114,98,111,115,101,218,10,115,116,97, + 114,116,115,119,105,116,104,218,5,112,114,105,110,116,114,50, + 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, + 101,115,115,97,103,101,114,75,0,0,0,114,62,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, + 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, + 101,244,0,0,0,115,10,0,0,0,12,2,10,1,8,1, + 24,1,4,253,114,83,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, + 0,0,243,26,0,0,0,135,0,102,1,100,1,100,2,132, + 8,125,1,116,0,124,1,136,0,131,2,1,0,124,1,83, + 0,41,4,122,49,68,101,99,111,114,97,116,111,114,32,116, + 111,32,118,101,114,105,102,121,32,116,104,101,32,110,97,109, + 101,100,32,109,111,100,117,108,101,32,105,115,32,98,117,105, + 108,116,45,105,110,46,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,19,0,0,0,115, + 38,0,0,0,124,1,116,0,106,1,118,1,114,14,116,2, + 100,1,160,3,124,1,161,1,124,1,100,2,141,2,130,1, + 136,0,124,0,124,1,131,2,83,0,41,3,78,250,29,123, + 33,114,125,32,105,115,32,110,111,116,32,97,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,114,19,0,0, + 0,41,4,114,18,0,0,0,218,20,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,95,110,97,109,101,115,218,11, + 73,109,112,111,114,116,69,114,114,111,114,114,50,0,0,0, + 169,2,114,33,0,0,0,218,8,102,117,108,108,110,97,109, + 101,169,1,218,3,102,120,110,114,5,0,0,0,114,6,0, + 0,0,218,25,95,114,101,113,117,105,114,101,115,95,98,117, + 105,108,116,105,110,95,119,114,97,112,112,101,114,254,0,0, + 0,243,10,0,0,0,10,1,10,1,2,1,6,255,10,2, + 122,52,95,114,101,113,117,105,114,101,115,95,98,117,105,108, + 116,105,110,46,60,108,111,99,97,108,115,62,46,95,114,101, + 113,117,105,114,101,115,95,98,117,105,108,116,105,110,95,119, + 114,97,112,112,101,114,78,169,1,114,17,0,0,0,41,2, + 114,91,0,0,0,114,92,0,0,0,114,5,0,0,0,114, + 90,0,0,0,114,6,0,0,0,218,17,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,252,0,0,0, + 243,6,0,0,0,12,2,10,5,4,1,114,95,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,3,0,0,0,114,84,0,0,0,41,4, + 122,47,68,101,99,111,114,97,116,111,114,32,116,111,32,118, + 101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,32, + 109,111,100,117,108,101,32,105,115,32,102,114,111,122,101,110, + 46,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,19,0,0,0,115,38,0,0,0,116, + 0,160,1,124,1,161,1,115,14,116,2,100,1,160,3,124, + 1,161,1,124,1,100,2,141,2,130,1,136,0,124,0,124, + 1,131,2,83,0,169,3,78,122,27,123,33,114,125,32,105, + 115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,114,19,0,0,0,41,4,114,64,0,0, + 0,218,9,105,115,95,102,114,111,122,101,110,114,87,0,0, + 0,114,50,0,0,0,114,88,0,0,0,114,90,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,24,95,114,101,113, + 117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,97, + 112,112,101,114,9,1,0,0,114,93,0,0,0,122,50,95, + 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,46, + 60,108,111,99,97,108,115,62,46,95,114,101,113,117,105,114, + 101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101, + 114,78,114,94,0,0,0,41,2,114,91,0,0,0,114,99, + 0,0,0,114,5,0,0,0,114,90,0,0,0,114,6,0, + 0,0,218,16,95,114,101,113,117,105,114,101,115,95,102,114, + 111,122,101,110,7,1,0,0,114,96,0,0,0,114,100,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,4,0,0,0,67,0,0,0,115,74,0,0,0, + 100,1,125,2,116,0,160,1,124,2,116,2,161,2,1,0, + 116,3,124,1,124,0,131,2,125,3,124,1,116,4,106,5, + 118,0,114,33,116,4,106,5,124,1,25,0,125,4,116,6, + 124,3,124,4,131,2,1,0,116,4,106,5,124,1,25,0, + 83,0,116,7,124,3,131,1,83,0,41,3,122,130,76,111, + 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, + 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, + 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, + 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 122,103,116,104,101,32,108,111,97,100,95,109,111,100,117,108, + 101,40,41,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, + 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, + 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, + 117,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, + 41,32,105,110,115,116,101,97,100,78,41,8,218,9,95,119, + 97,114,110,105,110,103,115,218,4,119,97,114,110,218,18,68, + 101,112,114,101,99,97,116,105,111,110,87,97,114,110,105,110, + 103,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, + 100,101,114,114,18,0,0,0,218,7,109,111,100,117,108,101, + 115,218,5,95,101,120,101,99,218,5,95,108,111,97,100,41, + 5,114,33,0,0,0,114,89,0,0,0,218,3,109,115,103, + 218,4,115,112,101,99,218,6,109,111,100,117,108,101,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,218,17,95, + 108,111,97,100,95,109,111,100,117,108,101,95,115,104,105,109, + 19,1,0,0,115,16,0,0,0,4,6,12,2,10,1,10, + 1,10,1,10,1,10,1,8,2,114,111,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,8, + 0,0,0,67,0,0,0,115,184,0,0,0,116,0,124,0, + 100,1,100,2,131,3,125,1,116,0,124,0,100,3,100,2, + 131,3,4,0,125,2,114,18,116,1,124,2,131,1,83,0, + 116,2,124,1,100,4,131,2,114,37,122,6,124,1,160,3, + 124,0,161,1,87,0,83,0,4,0,116,4,121,91,1,0, + 1,0,1,0,89,0,122,5,124,0,106,5,125,3,87,0, + 110,9,4,0,116,6,121,90,1,0,1,0,1,0,100,5, + 125,3,89,0,122,5,124,0,106,7,125,4,87,0,110,25, + 4,0,116,6,121,89,1,0,1,0,1,0,124,1,100,2, + 117,0,114,75,100,6,160,8,124,3,161,1,6,0,89,0, + 83,0,100,7,160,8,124,3,124,1,161,2,6,0,89,0, + 83,0,100,8,160,8,124,3,124,4,161,2,83,0,119,0, + 119,0,119,0,41,9,122,44,84,104,101,32,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,32,111,102,32,77,111, + 100,117,108,101,84,121,112,101,46,95,95,114,101,112,114,95, + 95,40,41,46,218,10,95,95,108,111,97,100,101,114,95,95, + 78,218,8,95,95,115,112,101,99,95,95,218,11,109,111,100, + 117,108,101,95,114,101,112,114,250,1,63,250,13,60,109,111, + 100,117,108,101,32,123,33,114,125,62,250,20,60,109,111,100, + 117,108,101,32,123,33,114,125,32,40,123,33,114,125,41,62, + 250,23,60,109,111,100,117,108,101,32,123,33,114,125,32,102, + 114,111,109,32,123,33,114,125,62,41,9,114,13,0,0,0, + 218,22,95,109,111,100,117,108,101,95,114,101,112,114,95,102, + 114,111,109,95,115,112,101,99,114,11,0,0,0,114,114,0, + 0,0,218,9,69,120,99,101,112,116,105,111,110,114,9,0, + 0,0,114,2,0,0,0,218,8,95,95,102,105,108,101,95, + 95,114,50,0,0,0,41,5,114,110,0,0,0,218,6,108, + 111,97,100,101,114,114,109,0,0,0,114,20,0,0,0,218, + 8,102,105,108,101,110,97,109,101,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,12,95,109,111,100,117,108, + 101,95,114,101,112,114,38,1,0,0,115,44,0,0,0,12, + 2,16,1,8,1,10,1,2,1,12,1,12,1,2,1,2, + 2,10,1,12,1,6,1,2,1,10,1,12,1,8,1,14, + 1,16,2,12,2,2,250,2,252,2,251,114,124,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,64,0,0,0,115,114,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,2,100,2, + 100,3,156,3,100,4,100,5,132,2,90,4,100,6,100,7, + 132,0,90,5,100,8,100,9,132,0,90,6,101,7,100,10, + 100,11,132,0,131,1,90,8,101,8,106,9,100,12,100,11, + 132,0,131,1,90,8,101,7,100,13,100,14,132,0,131,1, + 90,10,101,7,100,15,100,16,132,0,131,1,90,11,101,11, + 106,9,100,17,100,16,132,0,131,1,90,11,100,2,83,0, + 41,18,218,10,77,111,100,117,108,101,83,112,101,99,97,208, + 5,0,0,84,104,101,32,115,112,101,99,105,102,105,99,97, + 116,105,111,110,32,102,111,114,32,97,32,109,111,100,117,108, + 101,44,32,117,115,101,100,32,102,111,114,32,108,111,97,100, + 105,110,103,46,10,10,32,32,32,32,65,32,109,111,100,117, + 108,101,39,115,32,115,112,101,99,32,105,115,32,116,104,101, + 32,115,111,117,114,99,101,32,102,111,114,32,105,110,102,111, + 114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104, + 101,32,109,111,100,117,108,101,46,32,32,70,111,114,10,32, + 32,32,32,100,97,116,97,32,97,115,115,111,99,105,97,116, + 101,100,32,119,105,116,104,32,116,104,101,32,109,111,100,117, + 108,101,44,32,105,110,99,108,117,100,105,110,103,32,115,111, + 117,114,99,101,44,32,117,115,101,32,116,104,101,32,115,112, + 101,99,39,115,10,32,32,32,32,108,111,97,100,101,114,46, + 10,10,32,32,32,32,96,110,97,109,101,96,32,105,115,32, + 116,104,101,32,97,98,115,111,108,117,116,101,32,110,97,109, + 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,46, + 32,32,96,108,111,97,100,101,114,96,32,105,115,32,116,104, + 101,32,108,111,97,100,101,114,10,32,32,32,32,116,111,32, + 117,115,101,32,119,104,101,110,32,108,111,97,100,105,110,103, + 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,112, + 97,114,101,110,116,96,32,105,115,32,116,104,101,32,110,97, + 109,101,32,111,102,32,116,104,101,10,32,32,32,32,112,97, + 99,107,97,103,101,32,116,104,101,32,109,111,100,117,108,101, + 32,105,115,32,105,110,46,32,32,84,104,101,32,112,97,114, + 101,110,116,32,105,115,32,100,101,114,105,118,101,100,32,102, + 114,111,109,32,116,104,101,32,110,97,109,101,46,10,10,32, + 32,32,32,96,105,115,95,112,97,99,107,97,103,101,96,32, + 100,101,116,101,114,109,105,110,101,115,32,105,102,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,99,111,110,115, + 105,100,101,114,101,100,32,97,32,112,97,99,107,97,103,101, + 32,111,114,10,32,32,32,32,110,111,116,46,32,32,79,110, + 32,109,111,100,117,108,101,115,32,116,104,105,115,32,105,115, + 32,114,101,102,108,101,99,116,101,100,32,98,121,32,116,104, + 101,32,96,95,95,112,97,116,104,95,95,96,32,97,116,116, + 114,105,98,117,116,101,46,10,10,32,32,32,32,96,111,114, + 105,103,105,110,96,32,105,115,32,116,104,101,32,115,112,101, + 99,105,102,105,99,32,108,111,99,97,116,105,111,110,32,117, + 115,101,100,32,98,121,32,116,104,101,32,108,111,97,100,101, + 114,32,102,114,111,109,32,119,104,105,99,104,32,116,111,10, + 32,32,32,32,108,111,97,100,32,116,104,101,32,109,111,100, + 117,108,101,44,32,105,102,32,116,104,97,116,32,105,110,102, + 111,114,109,97,116,105,111,110,32,105,115,32,97,118,97,105, + 108,97,98,108,101,46,32,32,87,104,101,110,32,102,105,108, + 101,110,97,109,101,32,105,115,10,32,32,32,32,115,101,116, + 44,32,111,114,105,103,105,110,32,119,105,108,108,32,109,97, + 116,99,104,46,10,10,32,32,32,32,96,104,97,115,95,108, + 111,99,97,116,105,111,110,96,32,105,110,100,105,99,97,116, + 101,115,32,116,104,97,116,32,97,32,115,112,101,99,39,115, + 32,34,111,114,105,103,105,110,34,32,114,101,102,108,101,99, + 116,115,32,97,32,108,111,99,97,116,105,111,110,46,10,32, + 32,32,32,87,104,101,110,32,116,104,105,115,32,105,115,32, + 84,114,117,101,44,32,96,95,95,102,105,108,101,95,95,96, + 32,97,116,116,114,105,98,117,116,101,32,111,102,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,115,101,116,46, + 10,10,32,32,32,32,96,99,97,99,104,101,100,96,32,105, + 115,32,116,104,101,32,108,111,99,97,116,105,111,110,32,111, + 102,32,116,104,101,32,99,97,99,104,101,100,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,44,32,105,102,32,97, + 110,121,46,32,32,73,116,10,32,32,32,32,99,111,114,114, + 101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,96, + 95,95,99,97,99,104,101,100,95,95,96,32,97,116,116,114, + 105,98,117,116,101,46,10,10,32,32,32,32,96,115,117,98, + 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, + 99,97,116,105,111,110,115,96,32,105,115,32,116,104,101,32, + 115,101,113,117,101,110,99,101,32,111,102,32,112,97,116,104, + 32,101,110,116,114,105,101,115,32,116,111,10,32,32,32,32, + 115,101,97,114,99,104,32,119,104,101,110,32,105,109,112,111, + 114,116,105,110,103,32,115,117,98,109,111,100,117,108,101,115, + 46,32,32,73,102,32,115,101,116,44,32,105,115,95,112,97, + 99,107,97,103,101,32,115,104,111,117,108,100,32,98,101,10, + 32,32,32,32,84,114,117,101,45,45,97,110,100,32,70,97, + 108,115,101,32,111,116,104,101,114,119,105,115,101,46,10,10, + 32,32,32,32,80,97,99,107,97,103,101,115,32,97,114,101, + 32,115,105,109,112,108,121,32,109,111,100,117,108,101,115,32, + 116,104,97,116,32,40,109,97,121,41,32,104,97,118,101,32, + 115,117,98,109,111,100,117,108,101,115,46,32,32,73,102,32, + 97,32,115,112,101,99,10,32,32,32,32,104,97,115,32,97, + 32,110,111,110,45,78,111,110,101,32,118,97,108,117,101,32, + 105,110,32,96,115,117,98,109,111,100,117,108,101,95,115,101, + 97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,44, + 32,116,104,101,32,105,109,112,111,114,116,10,32,32,32,32, + 115,121,115,116,101,109,32,119,105,108,108,32,99,111,110,115, + 105,100,101,114,32,109,111,100,117,108,101,115,32,108,111,97, + 100,101,100,32,102,114,111,109,32,116,104,101,32,115,112,101, + 99,32,97,115,32,112,97,99,107,97,103,101,115,46,10,10, + 32,32,32,32,79,110,108,121,32,102,105,110,100,101,114,115, + 32,40,115,101,101,32,105,109,112,111,114,116,108,105,98,46, + 97,98,99,46,77,101,116,97,80,97,116,104,70,105,110,100, + 101,114,32,97,110,100,10,32,32,32,32,105,109,112,111,114, + 116,108,105,98,46,97,98,99,46,80,97,116,104,69,110,116, + 114,121,70,105,110,100,101,114,41,32,115,104,111,117,108,100, + 32,109,111,100,105,102,121,32,77,111,100,117,108,101,83,112, + 101,99,32,105,110,115,116,97,110,99,101,115,46,10,10,32, + 32,32,32,78,41,3,218,6,111,114,105,103,105,110,218,12, + 108,111,97,100,101,114,95,115,116,97,116,101,218,10,105,115, + 95,112,97,99,107,97,103,101,99,3,0,0,0,0,0,0, + 0,3,0,0,0,6,0,0,0,2,0,0,0,67,0,0, + 0,115,54,0,0,0,124,1,124,0,95,0,124,2,124,0, + 95,1,124,3,124,0,95,2,124,4,124,0,95,3,124,5, + 114,16,103,0,110,1,100,0,124,0,95,4,100,1,124,0, + 95,5,100,0,124,0,95,6,100,0,83,0,41,2,78,70, + 41,7,114,20,0,0,0,114,122,0,0,0,114,126,0,0, + 0,114,127,0,0,0,218,26,115,117,98,109,111,100,117,108, + 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, + 110,115,218,13,95,115,101,116,95,102,105,108,101,97,116,116, + 114,218,7,95,99,97,99,104,101,100,41,6,114,33,0,0, + 0,114,20,0,0,0,114,122,0,0,0,114,126,0,0,0, + 114,127,0,0,0,114,128,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,34,0,0,0,101,1, + 0,0,115,14,0,0,0,6,2,6,1,6,1,6,1,14, + 1,6,3,10,1,122,19,77,111,100,117,108,101,83,112,101, + 99,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,67, + 0,0,0,115,102,0,0,0,100,1,160,0,124,0,106,1, + 161,1,100,2,160,0,124,0,106,2,161,1,103,2,125,1, + 124,0,106,3,100,0,117,1,114,26,124,1,160,4,100,3, + 160,0,124,0,106,3,161,1,161,1,1,0,124,0,106,5, + 100,0,117,1,114,40,124,1,160,4,100,4,160,0,124,0, + 106,5,161,1,161,1,1,0,100,5,160,0,124,0,106,6, + 106,7,100,6,160,8,124,1,161,1,161,2,83,0,41,7, + 78,122,9,110,97,109,101,61,123,33,114,125,122,11,108,111, + 97,100,101,114,61,123,33,114,125,122,11,111,114,105,103,105, + 110,61,123,33,114,125,122,29,115,117,98,109,111,100,117,108, + 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, + 110,115,61,123,125,122,6,123,125,40,123,125,41,122,2,44, + 32,41,9,114,50,0,0,0,114,20,0,0,0,114,122,0, + 0,0,114,126,0,0,0,218,6,97,112,112,101,110,100,114, + 129,0,0,0,218,9,95,95,99,108,97,115,115,95,95,114, + 9,0,0,0,218,4,106,111,105,110,41,2,114,33,0,0, + 0,114,62,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,53,0,0,0,113,1,0,0,115,20, + 0,0,0,10,1,10,1,4,255,10,2,18,1,10,1,6, + 1,8,1,4,255,22,2,122,19,77,111,100,117,108,101,83, + 112,101,99,46,95,95,114,101,112,114,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, + 0,67,0,0,0,115,102,0,0,0,124,0,106,0,125,2, + 122,36,124,0,106,1,124,1,106,1,107,2,111,38,124,0, + 106,2,124,1,106,2,107,2,111,38,124,0,106,3,124,1, + 106,3,107,2,111,38,124,2,124,1,106,0,107,2,111,38, + 124,0,106,4,124,1,106,4,107,2,111,38,124,0,106,5, + 124,1,106,5,107,2,87,0,83,0,4,0,116,6,121,50, + 1,0,1,0,1,0,116,7,6,0,89,0,83,0,119,0, + 114,0,0,0,0,41,8,114,129,0,0,0,114,20,0,0, + 0,114,122,0,0,0,114,126,0,0,0,218,6,99,97,99, + 104,101,100,218,12,104,97,115,95,108,111,99,97,116,105,111, + 110,114,2,0,0,0,218,14,78,111,116,73,109,112,108,101, + 109,101,110,116,101,100,41,3,114,33,0,0,0,90,5,111, + 116,104,101,114,90,4,115,109,115,108,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,6,95,95,101,113,95, + 95,123,1,0,0,115,32,0,0,0,6,1,2,1,12,1, + 10,1,2,255,10,2,2,254,8,3,2,253,10,4,2,252, + 10,5,4,251,12,6,8,1,2,255,122,17,77,111,100,117, + 108,101,83,112,101,99,46,95,95,101,113,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,67,0,0,0,115,58,0,0,0,124,0,106,0,100, + 0,117,0,114,26,124,0,106,1,100,0,117,1,114,26,124, + 0,106,2,114,26,116,3,100,0,117,0,114,19,116,4,130, + 1,116,3,160,5,124,0,106,1,161,1,124,0,95,0,124, + 0,106,0,83,0,114,0,0,0,0,41,6,114,131,0,0, + 0,114,126,0,0,0,114,130,0,0,0,218,19,95,98,111, + 111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,108, + 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, + 69,114,114,111,114,90,11,95,103,101,116,95,99,97,99,104, + 101,100,114,52,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,135,0,0,0,135,1,0,0,115, + 12,0,0,0,10,2,16,1,8,1,4,1,14,1,6,1, + 122,17,77,111,100,117,108,101,83,112,101,99,46,99,97,99, + 104,101,100,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,10,0,0, + 0,124,1,124,0,95,0,100,0,83,0,114,0,0,0,0, + 41,1,114,131,0,0,0,41,2,114,33,0,0,0,114,135, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,135,0,0,0,144,1,0,0,115,2,0,0,0, + 10,2,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,32,0,0,0, + 124,0,106,0,100,1,117,0,114,13,124,0,106,1,160,2, + 100,2,161,1,100,3,25,0,83,0,124,0,106,1,83,0, + 41,4,122,32,84,104,101,32,110,97,109,101,32,111,102,32, + 116,104,101,32,109,111,100,117,108,101,39,115,32,112,97,114, + 101,110,116,46,78,218,1,46,114,25,0,0,0,41,3,114, + 129,0,0,0,114,20,0,0,0,218,10,114,112,97,114,116, + 105,116,105,111,110,114,52,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,218,6,112,97,114,101,110, + 116,148,1,0,0,115,6,0,0,0,10,3,16,1,6,2, + 122,17,77,111,100,117,108,101,83,112,101,99,46,112,97,114, + 101,110,116,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,1,0,0,0,67,0,0,0,115,6,0,0, + 0,124,0,106,0,83,0,114,0,0,0,0,41,1,114,130, + 0,0,0,114,52,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,136,0,0,0,156,1,0,0, + 115,2,0,0,0,6,2,122,23,77,111,100,117,108,101,83, + 112,101,99,46,104,97,115,95,108,111,99,97,116,105,111,110, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,14,0,0,0,116,0, + 124,1,131,1,124,0,95,1,100,0,83,0,114,0,0,0, + 0,41,2,218,4,98,111,111,108,114,130,0,0,0,41,2, + 114,33,0,0,0,218,5,118,97,108,117,101,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,136,0,0,0, + 160,1,0,0,115,2,0,0,0,14,2,41,12,114,9,0, + 0,0,114,8,0,0,0,114,1,0,0,0,114,10,0,0, + 0,114,34,0,0,0,114,53,0,0,0,114,138,0,0,0, + 218,8,112,114,111,112,101,114,116,121,114,135,0,0,0,218, + 6,115,101,116,116,101,114,114,143,0,0,0,114,136,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,125,0,0,0,64,1,0,0,115,34, + 0,0,0,8,0,4,1,4,36,2,1,12,255,8,12,8, + 10,2,12,10,1,4,8,10,1,2,3,10,1,2,7,10, + 1,4,3,14,1,114,125,0,0,0,169,2,114,126,0,0, + 0,114,128,0,0,0,99,2,0,0,0,0,0,0,0,2, + 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115, + 150,0,0,0,116,0,124,1,100,1,131,2,114,37,116,1, + 100,2,117,0,114,11,116,2,130,1,116,1,106,3,125,4, + 124,3,100,2,117,0,114,24,124,4,124,0,124,1,100,3, + 141,2,83,0,124,3,114,28,103,0,110,1,100,2,125,5, + 124,4,124,0,124,1,124,5,100,4,141,3,83,0,124,3, + 100,2,117,0,114,66,116,0,124,1,100,5,131,2,114,64, + 122,7,124,1,160,4,124,0,161,1,125,3,87,0,110,12, + 4,0,116,5,121,74,1,0,1,0,1,0,100,2,125,3, + 89,0,110,2,100,6,125,3,116,6,124,0,124,1,124,2, + 124,3,100,7,141,4,83,0,119,0,41,8,122,53,82,101, + 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, + 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105, + 111,117,115,32,108,111,97,100,101,114,32,109,101,116,104,111, + 100,115,46,90,12,103,101,116,95,102,105,108,101,110,97,109, + 101,78,41,1,114,122,0,0,0,41,2,114,122,0,0,0, + 114,129,0,0,0,114,128,0,0,0,70,114,148,0,0,0, + 41,7,114,11,0,0,0,114,139,0,0,0,114,140,0,0, + 0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,108, + 101,95,108,111,99,97,116,105,111,110,114,128,0,0,0,114, + 87,0,0,0,114,125,0,0,0,41,6,114,20,0,0,0, + 114,122,0,0,0,114,126,0,0,0,114,128,0,0,0,114, + 149,0,0,0,90,6,115,101,97,114,99,104,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,104,0,0,0, + 165,1,0,0,115,38,0,0,0,10,2,8,1,4,1,6, + 1,8,2,12,1,12,1,6,1,2,1,6,255,8,3,10, + 1,2,1,14,1,12,1,8,1,4,3,16,2,2,250,114, + 104,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, + 0,8,0,0,0,8,0,0,0,67,0,0,0,115,30,1, + 0,0,122,5,124,0,106,0,125,3,87,0,110,8,4,0, + 116,1,121,142,1,0,1,0,1,0,89,0,110,6,124,3, + 100,0,117,1,114,20,124,3,83,0,124,0,106,2,125,4, + 124,1,100,0,117,0,114,40,122,5,124,0,106,3,125,1, + 87,0,110,7,4,0,116,1,121,141,1,0,1,0,1,0, + 89,0,122,5,124,0,106,4,125,5,87,0,110,9,4,0, + 116,1,121,140,1,0,1,0,1,0,100,0,125,5,89,0, + 124,2,100,0,117,0,114,81,124,5,100,0,117,0,114,79, + 122,5,124,1,106,5,125,2,87,0,110,12,4,0,116,1, + 121,139,1,0,1,0,1,0,100,0,125,2,89,0,110,2, + 124,5,125,2,122,5,124,0,106,6,125,6,87,0,110,9, + 4,0,116,1,121,138,1,0,1,0,1,0,100,0,125,6, + 89,0,122,7,116,7,124,0,106,8,131,1,125,7,87,0, + 110,9,4,0,116,1,121,137,1,0,1,0,1,0,100,0, + 125,7,89,0,116,9,124,4,124,1,124,2,100,1,141,3, + 125,3,124,5,100,0,117,0,114,126,100,2,110,1,100,3, + 124,3,95,10,124,6,124,3,95,11,124,7,124,3,95,12, + 124,3,83,0,119,0,119,0,119,0,119,0,119,0,119,0, + 41,4,78,169,1,114,126,0,0,0,70,84,41,13,114,113, + 0,0,0,114,2,0,0,0,114,9,0,0,0,114,112,0, + 0,0,114,121,0,0,0,218,7,95,79,82,73,71,73,78, + 218,10,95,95,99,97,99,104,101,100,95,95,218,4,108,105, + 115,116,218,8,95,95,112,97,116,104,95,95,114,125,0,0, + 0,114,130,0,0,0,114,135,0,0,0,114,129,0,0,0, + 41,8,114,110,0,0,0,114,122,0,0,0,114,126,0,0, + 0,114,109,0,0,0,114,20,0,0,0,90,8,108,111,99, + 97,116,105,111,110,114,135,0,0,0,114,129,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, + 95,115,112,101,99,95,102,114,111,109,95,109,111,100,117,108, + 101,191,1,0,0,115,84,0,0,0,2,2,10,1,12,1, + 4,1,8,2,4,1,6,2,8,1,2,1,10,1,12,1, + 2,2,2,1,10,1,12,1,6,1,8,1,8,1,2,1, + 10,1,12,1,8,1,4,2,2,1,10,1,12,1,6,1, + 2,1,14,1,12,1,6,1,14,2,18,1,6,1,6,1, + 4,1,2,249,2,252,2,250,2,250,2,251,2,246,114,155, + 0,0,0,70,169,1,218,8,111,118,101,114,114,105,100,101, + 99,2,0,0,0,0,0,0,0,1,0,0,0,5,0,0, + 0,8,0,0,0,67,0,0,0,115,178,1,0,0,124,2, + 115,10,116,0,124,1,100,1,100,0,131,3,100,0,117,0, + 114,24,122,6,124,0,106,1,124,1,95,2,87,0,110,7, + 4,0,116,3,121,216,1,0,1,0,1,0,89,0,124,2, + 115,34,116,0,124,1,100,2,100,0,131,3,100,0,117,0, + 114,83,124,0,106,4,125,3,124,3,100,0,117,0,114,70, + 124,0,106,5,100,0,117,1,114,70,116,6,100,0,117,0, + 114,52,116,7,130,1,116,6,106,8,125,4,124,4,160,9, + 124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3, + 124,0,95,4,100,0,124,1,95,11,122,5,124,3,124,1, + 95,12,87,0,110,7,4,0,116,3,121,215,1,0,1,0, + 1,0,89,0,124,2,115,93,116,0,124,1,100,3,100,0, + 131,3,100,0,117,0,114,107,122,6,124,0,106,13,124,1, + 95,14,87,0,110,7,4,0,116,3,121,214,1,0,1,0, + 1,0,89,0,122,5,124,0,124,1,95,15,87,0,110,7, + 4,0,116,3,121,213,1,0,1,0,1,0,89,0,124,2, + 115,130,116,0,124,1,100,4,100,0,131,3,100,0,117,0, + 114,149,124,0,106,5,100,0,117,1,114,149,122,6,124,0, + 106,5,124,1,95,16,87,0,110,7,4,0,116,3,121,212, + 1,0,1,0,1,0,89,0,124,0,106,17,114,208,124,2, + 115,162,116,0,124,1,100,5,100,0,131,3,100,0,117,0, + 114,176,122,6,124,0,106,18,124,1,95,11,87,0,110,7, + 4,0,116,3,121,211,1,0,1,0,1,0,89,0,124,2, + 115,186,116,0,124,1,100,6,100,0,131,3,100,0,117,0, + 114,208,124,0,106,19,100,0,117,1,114,208,122,7,124,0, + 106,19,124,1,95,20,87,0,124,1,83,0,4,0,116,3, + 121,210,1,0,1,0,1,0,89,0,124,1,83,0,124,1, + 83,0,119,0,119,0,119,0,119,0,119,0,119,0,119,0, + 41,7,78,114,9,0,0,0,114,112,0,0,0,218,11,95, + 95,112,97,99,107,97,103,101,95,95,114,154,0,0,0,114, + 121,0,0,0,114,152,0,0,0,41,21,114,13,0,0,0, + 114,20,0,0,0,114,9,0,0,0,114,2,0,0,0,114, + 122,0,0,0,114,129,0,0,0,114,139,0,0,0,114,140, + 0,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,218,7,95,95,110,101,119,95,95,90,5, + 95,112,97,116,104,114,121,0,0,0,114,112,0,0,0,114, + 143,0,0,0,114,158,0,0,0,114,113,0,0,0,114,154, + 0,0,0,114,136,0,0,0,114,126,0,0,0,114,135,0, + 0,0,114,152,0,0,0,41,5,114,109,0,0,0,114,110, + 0,0,0,114,157,0,0,0,114,122,0,0,0,114,159,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,8,95,95,114,101,112,114,95,95,138,0,0,0,243, - 2,0,0,0,18,1,122,20,95,77,111,100,117,108,101,76, - 111,99,107,46,95,95,114,101,112,114,95,95,78,41,9,114, - 9,0,0,0,114,8,0,0,0,114,1,0,0,0,114,10, - 0,0,0,114,34,0,0,0,114,41,0,0,0,114,43,0, - 0,0,114,44,0,0,0,114,53,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,23,0,0,0,65,0,0,0,115,14,0,0,0,8,0, - 4,1,8,5,8,8,8,21,8,25,12,13,114,23,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,64,0,0,0,115,48,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, - 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, - 0,90,6,100,8,100,9,132,0,90,7,100,10,83,0,41, - 11,218,16,95,68,117,109,109,121,77,111,100,117,108,101,76, - 111,99,107,122,86,65,32,115,105,109,112,108,101,32,95,77, - 111,100,117,108,101,76,111,99,107,32,101,113,117,105,118,97, - 108,101,110,116,32,102,111,114,32,80,121,116,104,111,110,32, - 98,117,105,108,100,115,32,119,105,116,104,111,117,116,10,32, - 32,32,32,109,117,108,116,105,45,116,104,114,101,97,100,105, - 110,103,32,115,117,112,112,111,114,116,46,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, - 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,100, - 1,124,0,95,1,100,0,83,0,114,24,0,0,0,41,2, - 114,20,0,0,0,114,30,0,0,0,114,32,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,34, - 0,0,0,146,0,0,0,243,4,0,0,0,6,1,10,1, - 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,18,0,0,0,124,0,4,0,106,0,100, - 1,55,0,2,0,95,0,100,2,83,0,41,3,78,114,42, - 0,0,0,84,41,1,114,30,0,0,0,114,52,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 43,0,0,0,150,0,0,0,115,4,0,0,0,14,1,4, - 1,122,24,95,68,117,109,109,121,77,111,100,117,108,101,76, - 111,99,107,46,97,99,113,117,105,114,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,36,0,0,0,124,0,106,0,100,1,107, - 2,114,9,116,1,100,2,131,1,130,1,124,0,4,0,106, - 0,100,3,56,0,2,0,95,0,100,0,83,0,41,4,78, - 114,25,0,0,0,114,46,0,0,0,114,42,0,0,0,41, - 2,114,30,0,0,0,114,47,0,0,0,114,52,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 44,0,0,0,154,0,0,0,115,6,0,0,0,10,1,8, - 1,18,1,122,24,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,46,114,101,108,101,97,115,101,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0, - 0,0,67,0,0,0,114,48,0,0,0,41,2,78,122,28, - 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, - 40,123,33,114,125,41,32,97,116,32,123,125,114,49,0,0, - 0,114,52,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,53,0,0,0,159,0,0,0,114,54, - 0,0,0,122,25,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,46,95,95,114,101,112,114,95,95,78,41, - 8,114,9,0,0,0,114,8,0,0,0,114,1,0,0,0, - 114,10,0,0,0,114,34,0,0,0,114,43,0,0,0,114, - 44,0,0,0,114,53,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,55,0, - 0,0,142,0,0,0,115,12,0,0,0,8,0,4,1,8, - 3,8,4,8,4,12,5,114,55,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,36,0,0,0,101,0,90,1,100,0, - 90,2,100,1,100,2,132,0,90,3,100,3,100,4,132,0, - 90,4,100,5,100,6,132,0,90,5,100,7,83,0,41,8, - 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, - 97,103,101,114,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,124,1,124,0,95,0,100,0,124,0,95,1,100,0, - 83,0,114,0,0,0,0,41,2,218,5,95,110,97,109,101, - 218,5,95,108,111,99,107,114,32,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,114,34,0,0,0, - 165,0,0,0,114,56,0,0,0,122,27,95,77,111,100,117, - 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 26,0,0,0,116,0,124,0,106,1,131,1,124,0,95,2, - 124,0,106,2,160,3,161,0,1,0,100,0,83,0,114,0, - 0,0,0,41,4,218,16,95,103,101,116,95,109,111,100,117, - 108,101,95,108,111,99,107,114,58,0,0,0,114,59,0,0, - 0,114,43,0,0,0,114,52,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,9,95,95,101,110, - 116,101,114,95,95,169,0,0,0,115,4,0,0,0,12,1, - 14,1,122,28,95,77,111,100,117,108,101,76,111,99,107,77, - 97,110,97,103,101,114,46,95,95,101,110,116,101,114,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,2,0,0,0,79,0,0,0,115,14,0,0,0,124,0, - 106,0,160,1,161,0,1,0,100,0,83,0,114,0,0,0, - 0,41,2,114,59,0,0,0,114,44,0,0,0,41,3,114, - 33,0,0,0,218,4,97,114,103,115,90,6,107,119,97,114, - 103,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,8,95,95,101,120,105,116,95,95,173,0,0,0,115, - 2,0,0,0,14,1,122,27,95,77,111,100,117,108,101,76, - 111,99,107,77,97,110,97,103,101,114,46,95,95,101,120,105, - 116,95,95,78,41,6,114,9,0,0,0,114,8,0,0,0, - 114,1,0,0,0,114,34,0,0,0,114,61,0,0,0,114, - 63,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,57,0,0,0,163,0,0, - 0,115,8,0,0,0,8,0,8,2,8,4,12,4,114,57, + 0,218,18,95,105,110,105,116,95,109,111,100,117,108,101,95, + 97,116,116,114,115,236,1,0,0,115,112,0,0,0,20,4, + 2,1,12,1,12,1,2,1,20,2,6,1,8,1,10,2, + 8,1,4,1,6,1,10,2,8,1,6,1,6,11,2,1, + 10,1,12,1,2,1,20,2,2,1,12,1,12,1,2,1, + 2,2,10,1,12,1,2,1,20,2,10,1,2,1,12,1, + 12,1,2,1,6,2,20,1,2,1,12,1,12,1,2,1, + 20,2,10,1,2,1,10,1,4,3,12,254,2,1,8,1, + 2,254,2,249,2,249,2,249,2,251,2,250,2,228,114,161, 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,8,0,0,0,67,0,0,0,115,132,0,0, - 0,116,0,160,1,161,0,1,0,122,55,122,7,116,2,124, - 0,25,0,131,0,125,1,87,0,110,9,4,0,116,3,121, - 65,1,0,1,0,1,0,100,1,125,1,89,0,124,1,100, - 1,117,0,114,53,116,4,100,1,117,0,114,35,116,5,124, - 0,131,1,125,1,110,4,116,6,124,0,131,1,125,1,124, - 0,102,1,100,2,100,3,132,1,125,2,116,7,160,8,124, - 1,124,2,161,2,116,2,124,0,60,0,87,0,116,0,160, - 9,161,0,1,0,124,1,83,0,116,0,160,9,161,0,1, - 0,119,0,119,0,41,4,122,139,71,101,116,32,111,114,32, - 99,114,101,97,116,101,32,116,104,101,32,109,111,100,117,108, - 101,32,108,111,99,107,32,102,111,114,32,97,32,103,105,118, - 101,110,32,109,111,100,117,108,101,32,110,97,109,101,46,10, - 10,32,32,32,32,65,99,113,117,105,114,101,47,114,101,108, - 101,97,115,101,32,105,110,116,101,114,110,97,108,108,121,32, - 116,104,101,32,103,108,111,98,97,108,32,105,109,112,111,114, - 116,32,108,111,99,107,32,116,111,32,112,114,111,116,101,99, - 116,10,32,32,32,32,95,109,111,100,117,108,101,95,108,111, - 99,107,115,46,78,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,8,0,0,0,83,0,0,0,115,54, - 0,0,0,116,0,160,1,161,0,1,0,122,17,116,2,160, - 3,124,1,161,1,124,0,117,0,114,15,116,2,124,1,61, - 0,87,0,116,0,160,4,161,0,1,0,100,0,83,0,116, - 0,160,4,161,0,1,0,119,0,114,0,0,0,0,41,5, - 218,4,95,105,109,112,218,12,97,99,113,117,105,114,101,95, - 108,111,99,107,218,13,95,109,111,100,117,108,101,95,108,111, - 99,107,115,114,38,0,0,0,218,12,114,101,108,101,97,115, - 101,95,108,111,99,107,41,2,218,3,114,101,102,114,20,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,2,99,98,198,0,0,0,115,12,0,0,0,8,1, - 2,1,14,4,6,1,2,128,22,2,122,28,95,103,101,116, - 95,109,111,100,117,108,101,95,108,111,99,107,46,60,108,111, - 99,97,108,115,62,46,99,98,41,10,114,64,0,0,0,114, - 65,0,0,0,114,66,0,0,0,218,8,75,101,121,69,114, - 114,111,114,114,26,0,0,0,114,55,0,0,0,114,23,0, - 0,0,218,8,95,119,101,97,107,114,101,102,114,68,0,0, - 0,114,67,0,0,0,41,3,114,20,0,0,0,114,27,0, - 0,0,114,69,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,60,0,0,0,179,0,0,0,115, - 34,0,0,0,8,6,2,1,2,1,14,1,12,1,6,1, - 8,2,8,1,10,1,8,2,12,2,16,11,2,128,8,2, - 4,2,10,254,2,234,114,60,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0, - 67,0,0,0,115,54,0,0,0,116,0,124,0,131,1,125, - 1,122,6,124,1,160,1,161,0,1,0,87,0,110,9,4, - 0,116,2,121,26,1,0,1,0,1,0,89,0,100,1,83, - 0,124,1,160,3,161,0,1,0,100,1,83,0,119,0,41, - 2,122,189,65,99,113,117,105,114,101,115,32,116,104,101,110, - 32,114,101,108,101,97,115,101,115,32,116,104,101,32,109,111, - 100,117,108,101,32,108,111,99,107,32,102,111,114,32,97,32, - 103,105,118,101,110,32,109,111,100,117,108,101,32,110,97,109, - 101,46,10,10,32,32,32,32,84,104,105,115,32,105,115,32, - 117,115,101,100,32,116,111,32,101,110,115,117,114,101,32,97, - 32,109,111,100,117,108,101,32,105,115,32,99,111,109,112,108, - 101,116,101,108,121,32,105,110,105,116,105,97,108,105,122,101, - 100,44,32,105,110,32,116,104,101,10,32,32,32,32,101,118, - 101,110,116,32,105,116,32,105,115,32,98,101,105,110,103,32, - 105,109,112,111,114,116,101,100,32,98,121,32,97,110,111,116, - 104,101,114,32,116,104,114,101,97,100,46,10,32,32,32,32, - 78,41,4,114,60,0,0,0,114,43,0,0,0,114,22,0, - 0,0,114,44,0,0,0,41,2,114,20,0,0,0,114,27, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, - 95,109,111,100,117,108,101,216,0,0,0,115,14,0,0,0, - 8,6,2,1,12,1,12,1,6,3,12,2,2,251,114,72, + 2,0,0,0,3,0,0,0,67,0,0,0,115,82,0,0, + 0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114, + 15,124,0,106,1,160,2,124,0,161,1,125,1,110,10,116, + 0,124,0,106,1,100,3,131,2,114,25,116,3,100,4,131, + 1,130,1,124,1,100,1,117,0,114,34,116,4,124,0,106, + 5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124, + 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32, + 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, + 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101, + 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117, + 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122, + 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101, + 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101, + 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102, + 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108, + 101,40,41,41,7,114,11,0,0,0,114,122,0,0,0,114, + 162,0,0,0,114,87,0,0,0,114,21,0,0,0,114,20, + 0,0,0,114,161,0,0,0,169,2,114,109,0,0,0,114, + 110,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,16,109,111,100,117,108,101,95,102,114,111,109, + 95,115,112,101,99,52,2,0,0,115,18,0,0,0,4,3, + 12,1,14,3,12,1,8,1,8,2,10,1,10,1,4,1, + 114,165,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,100, + 0,0,0,124,0,106,0,100,1,117,0,114,7,100,2,110, + 2,124,0,106,0,125,1,124,0,106,1,100,1,117,0,114, + 32,124,0,106,2,100,1,117,0,114,25,100,3,160,3,124, + 1,161,1,83,0,100,4,160,3,124,1,124,0,106,2,161, + 2,83,0,124,0,106,4,114,42,100,5,160,3,124,1,124, + 0,106,1,161,2,83,0,100,6,160,3,124,0,106,0,124, + 0,106,1,161,2,83,0,41,7,122,38,82,101,116,117,114, + 110,32,116,104,101,32,114,101,112,114,32,116,111,32,117,115, + 101,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, + 46,78,114,115,0,0,0,114,116,0,0,0,114,117,0,0, + 0,114,118,0,0,0,250,18,60,109,111,100,117,108,101,32, + 123,33,114,125,32,40,123,125,41,62,41,5,114,20,0,0, + 0,114,126,0,0,0,114,122,0,0,0,114,50,0,0,0, + 114,136,0,0,0,41,2,114,109,0,0,0,114,20,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,119,0,0,0,69,2,0,0,115,16,0,0,0,20,3, + 10,1,10,1,10,1,14,2,6,2,14,1,16,2,114,119, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,10,0,0,0,67,0,0,0,115,24,1,0, + 0,124,0,106,0,125,2,116,1,124,2,131,1,143,123,1, + 0,116,2,106,3,160,4,124,2,161,1,124,1,117,1,114, + 27,100,1,160,5,124,2,161,1,125,3,116,6,124,3,124, + 2,100,2,141,2,130,1,122,80,124,0,106,7,100,3,117, + 0,114,53,124,0,106,8,100,3,117,0,114,45,116,6,100, + 4,124,0,106,0,100,2,141,2,130,1,116,9,124,0,124, + 1,100,5,100,6,141,3,1,0,110,40,116,9,124,0,124, + 1,100,5,100,6,141,3,1,0,116,10,124,0,106,7,100, + 7,131,2,115,87,116,11,124,0,106,7,131,1,155,0,100, + 8,157,2,125,3,116,12,160,13,124,3,116,14,161,2,1, + 0,124,0,106,7,160,15,124,2,161,1,1,0,110,6,124, + 0,106,7,160,16,124,1,161,1,1,0,87,0,116,2,106, + 3,160,17,124,0,106,0,161,1,125,1,124,1,116,2,106, + 3,124,0,106,0,60,0,110,14,116,2,106,3,160,17,124, + 0,106,0,161,1,125,1,124,1,116,2,106,3,124,0,106, + 0,60,0,119,0,87,0,100,3,4,0,4,0,131,3,1, + 0,124,1,83,0,49,0,115,133,119,1,1,0,1,0,1, + 0,89,0,1,0,124,1,83,0,41,9,122,70,69,120,101, + 99,117,116,101,32,116,104,101,32,115,112,101,99,39,115,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 32,105,110,32,97,110,32,101,120,105,115,116,105,110,103,32, + 109,111,100,117,108,101,39,115,32,110,97,109,101,115,112,97, + 99,101,46,122,30,109,111,100,117,108,101,32,123,33,114,125, + 32,110,111,116,32,105,110,32,115,121,115,46,109,111,100,117, + 108,101,115,114,19,0,0,0,78,250,14,109,105,115,115,105, + 110,103,32,108,111,97,100,101,114,84,114,156,0,0,0,114, + 163,0,0,0,250,55,46,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,110,111,116,32,102,111,117,110,100,59,32, + 102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32, + 108,111,97,100,95,109,111,100,117,108,101,40,41,41,18,114, + 20,0,0,0,114,57,0,0,0,114,18,0,0,0,114,105, + 0,0,0,114,38,0,0,0,114,50,0,0,0,114,87,0, + 0,0,114,122,0,0,0,114,129,0,0,0,114,161,0,0, + 0,114,11,0,0,0,114,7,0,0,0,114,101,0,0,0, + 114,102,0,0,0,218,13,73,109,112,111,114,116,87,97,114, + 110,105,110,103,218,11,108,111,97,100,95,109,111,100,117,108, + 101,114,163,0,0,0,218,3,112,111,112,41,4,114,109,0, + 0,0,114,110,0,0,0,114,20,0,0,0,114,108,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,106,0,0,0,86,2,0,0,115,50,0,0,0,6,2, + 10,1,16,1,10,1,12,1,2,1,10,1,10,1,14,1, + 16,2,14,2,12,1,16,1,12,2,14,1,12,2,2,128, + 14,4,14,1,14,255,16,1,10,233,4,24,16,232,4,24, + 114,106,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,10, + 1,0,0,122,9,124,0,106,0,160,1,124,0,106,2,161, + 1,1,0,87,0,110,23,1,0,1,0,1,0,124,0,106, + 2,116,3,106,4,118,0,114,32,116,3,106,4,160,5,124, + 0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,106, + 2,60,0,130,0,116,3,106,4,160,5,124,0,106,2,161, + 1,125,1,124,1,116,3,106,4,124,0,106,2,60,0,116, + 6,124,1,100,1,100,0,131,3,100,0,117,0,114,68,122, + 6,124,0,106,0,124,1,95,7,87,0,110,7,4,0,116, + 8,121,132,1,0,1,0,1,0,89,0,116,6,124,1,100, + 2,100,0,131,3,100,0,117,0,114,104,122,20,124,1,106, + 9,124,1,95,10,116,11,124,1,100,3,131,2,115,95,124, + 0,106,2,160,12,100,4,161,1,100,5,25,0,124,1,95, + 10,87,0,110,7,4,0,116,8,121,131,1,0,1,0,1, + 0,89,0,116,6,124,1,100,6,100,0,131,3,100,0,117, + 0,114,128,122,6,124,0,124,1,95,13,87,0,124,1,83, + 0,4,0,116,8,121,130,1,0,1,0,1,0,89,0,124, + 1,83,0,124,1,83,0,119,0,119,0,119,0,41,7,78, + 114,112,0,0,0,114,158,0,0,0,114,154,0,0,0,114, + 141,0,0,0,114,25,0,0,0,114,113,0,0,0,41,14, + 114,122,0,0,0,114,170,0,0,0,114,20,0,0,0,114, + 18,0,0,0,114,105,0,0,0,114,171,0,0,0,114,13, + 0,0,0,114,112,0,0,0,114,2,0,0,0,114,9,0, + 0,0,114,158,0,0,0,114,11,0,0,0,114,142,0,0, + 0,114,113,0,0,0,114,164,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,218,25,95,108,111,97, + 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, + 116,105,98,108,101,116,2,0,0,115,64,0,0,0,2,3, + 18,1,6,1,12,1,14,1,12,1,2,1,14,3,12,1, + 16,1,2,1,12,1,12,1,2,1,16,1,2,1,8,4, + 10,1,18,1,4,128,12,1,2,1,16,1,2,1,8,1, + 4,3,12,254,2,1,8,1,2,254,2,251,2,246,114,172, 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,4,0,0,0,79,0,0,0,115,14,0,0, - 0,124,0,124,1,105,0,124,2,164,1,142,1,83,0,41, - 2,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, - 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, - 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, - 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, - 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, - 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, - 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, - 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, - 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, - 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, - 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, - 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, - 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, - 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, - 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, - 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, - 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, - 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, - 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, - 32,32,32,32,78,114,5,0,0,0,41,3,218,1,102,114, - 62,0,0,0,90,4,107,119,100,115,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,25,95,99,97,108,108, - 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, - 111,118,101,100,233,0,0,0,115,2,0,0,0,14,8,114, - 74,0,0,0,114,42,0,0,0,41,1,218,9,118,101,114, - 98,111,115,105,116,121,99,1,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, - 58,0,0,0,116,0,106,1,106,2,124,1,107,5,114,27, - 124,0,160,3,100,1,161,1,115,15,100,2,124,0,23,0, - 125,0,116,4,124,0,106,5,124,2,142,0,116,0,106,6, - 100,3,141,2,1,0,100,4,83,0,100,4,83,0,41,5, - 122,61,80,114,105,110,116,32,116,104,101,32,109,101,115,115, - 97,103,101,32,116,111,32,115,116,100,101,114,114,32,105,102, - 32,45,118,47,80,89,84,72,79,78,86,69,82,66,79,83, - 69,32,105,115,32,116,117,114,110,101,100,32,111,110,46,41, - 2,250,1,35,122,7,105,109,112,111,114,116,32,122,2,35, - 32,41,1,90,4,102,105,108,101,78,41,7,114,18,0,0, - 0,218,5,102,108,97,103,115,218,7,118,101,114,98,111,115, - 101,218,10,115,116,97,114,116,115,119,105,116,104,218,5,112, - 114,105,110,116,114,50,0,0,0,218,6,115,116,100,101,114, - 114,41,3,218,7,109,101,115,115,97,103,101,114,75,0,0, - 0,114,62,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,218,16,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,244,0,0,0,115,10,0,0,0, - 12,2,10,1,8,1,24,1,4,253,114,83,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,3,0,0,0,243,26,0,0,0,135,0,102, - 1,100,1,100,2,132,8,125,1,116,0,124,1,136,0,131, - 2,1,0,124,1,83,0,41,4,122,49,68,101,99,111,114, - 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, - 104,101,32,110,97,109,101,100,32,109,111,100,117,108,101,32, - 105,115,32,98,117,105,108,116,45,105,110,46,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,19,0,0,0,115,38,0,0,0,124,1,116,0,106,1, - 118,1,114,14,116,2,100,1,160,3,124,1,161,1,124,1, - 100,2,141,2,130,1,136,0,124,0,124,1,131,2,83,0, - 41,3,78,250,29,123,33,114,125,32,105,115,32,110,111,116, - 32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117, - 108,101,114,19,0,0,0,41,4,114,18,0,0,0,218,20, - 98,117,105,108,116,105,110,95,109,111,100,117,108,101,95,110, - 97,109,101,115,218,11,73,109,112,111,114,116,69,114,114,111, - 114,114,50,0,0,0,169,2,114,33,0,0,0,218,8,102, - 117,108,108,110,97,109,101,169,1,218,3,102,120,110,114,5, - 0,0,0,114,6,0,0,0,218,25,95,114,101,113,117,105, - 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, - 112,101,114,254,0,0,0,243,10,0,0,0,10,1,10,1, - 2,1,6,255,10,2,122,52,95,114,101,113,117,105,114,101, - 115,95,98,117,105,108,116,105,110,46,60,108,111,99,97,108, - 115,62,46,95,114,101,113,117,105,114,101,115,95,98,117,105, - 108,116,105,110,95,119,114,97,112,112,101,114,78,169,1,114, - 17,0,0,0,41,2,114,91,0,0,0,114,92,0,0,0, - 114,5,0,0,0,114,90,0,0,0,114,6,0,0,0,218, - 17,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, - 105,110,252,0,0,0,243,6,0,0,0,12,2,10,5,4, - 1,114,95,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,114, - 84,0,0,0,41,4,122,47,68,101,99,111,114,97,116,111, - 114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,32, - 110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,32, - 102,114,111,122,101,110,46,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,4,0,0,0,19,0,0,0, - 115,38,0,0,0,116,0,160,1,124,1,161,1,115,14,116, - 2,100,1,160,3,124,1,161,1,124,1,100,2,141,2,130, - 1,136,0,124,0,124,1,131,2,83,0,169,3,78,122,27, - 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,114,19,0,0,0, - 41,4,114,64,0,0,0,218,9,105,115,95,102,114,111,122, - 101,110,114,87,0,0,0,114,50,0,0,0,114,88,0,0, - 0,114,90,0,0,0,114,5,0,0,0,114,6,0,0,0, - 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, - 101,110,95,119,114,97,112,112,101,114,9,1,0,0,114,93, - 0,0,0,122,50,95,114,101,113,117,105,114,101,115,95,102, - 114,111,122,101,110,46,60,108,111,99,97,108,115,62,46,95, - 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,95, - 119,114,97,112,112,101,114,78,114,94,0,0,0,41,2,114, - 91,0,0,0,114,99,0,0,0,114,5,0,0,0,114,90, - 0,0,0,114,6,0,0,0,218,16,95,114,101,113,117,105, - 114,101,115,95,102,114,111,122,101,110,7,1,0,0,114,96, - 0,0,0,114,100,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, - 0,115,74,0,0,0,100,1,125,2,116,0,160,1,124,2, - 116,2,161,2,1,0,116,3,124,1,124,0,131,2,125,3, - 124,1,116,4,106,5,118,0,114,33,116,4,106,5,124,1, - 25,0,125,4,116,6,124,3,124,4,131,2,1,0,116,4, - 106,5,124,1,25,0,83,0,116,7,124,3,131,1,83,0, - 41,3,122,130,76,111,97,100,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,32,105,110, - 116,111,32,115,121,115,46,109,111,100,117,108,101,115,32,97, - 110,100,32,114,101,116,117,114,110,32,105,116,46,10,10,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,108,111,97,100,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,122,103,116,104,101,32,108,111,97,100, - 95,109,111,100,117,108,101,40,41,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, - 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, - 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, - 51,46,49,50,59,32,117,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,78, - 41,8,218,9,95,119,97,114,110,105,110,103,115,218,4,119, - 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, - 87,97,114,110,105,110,103,218,16,115,112,101,99,95,102,114, - 111,109,95,108,111,97,100,101,114,114,18,0,0,0,218,7, - 109,111,100,117,108,101,115,218,5,95,101,120,101,99,218,5, - 95,108,111,97,100,41,5,114,33,0,0,0,114,89,0,0, - 0,218,3,109,115,103,218,4,115,112,101,99,218,6,109,111, - 100,117,108,101,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,19,1,0,0,115,16,0,0,0,4, - 6,12,2,10,1,10,1,10,1,10,1,10,1,8,2,114, - 111,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,8,0,0,0,67,0,0,0,115,184,0, - 0,0,116,0,124,0,100,1,100,2,131,3,125,1,116,0, - 124,0,100,3,100,2,131,3,4,0,125,2,114,18,116,1, - 124,2,131,1,83,0,116,2,124,1,100,4,131,2,114,37, - 122,6,124,1,160,3,124,0,161,1,87,0,83,0,4,0, - 116,4,121,91,1,0,1,0,1,0,89,0,122,5,124,0, - 106,5,125,3,87,0,110,9,4,0,116,6,121,90,1,0, - 1,0,1,0,100,5,125,3,89,0,122,5,124,0,106,7, - 125,4,87,0,110,25,4,0,116,6,121,89,1,0,1,0, - 1,0,124,1,100,2,117,0,114,75,100,6,160,8,124,3, - 161,1,6,0,89,0,83,0,100,7,160,8,124,3,124,1, - 161,2,6,0,89,0,83,0,100,8,160,8,124,3,124,4, - 161,2,83,0,119,0,119,0,119,0,41,9,122,44,84,104, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,77,111,100,117,108,101,84,121,112,101,46,95, - 95,114,101,112,114,95,95,40,41,46,218,10,95,95,108,111, - 97,100,101,114,95,95,78,218,8,95,95,115,112,101,99,95, - 95,218,11,109,111,100,117,108,101,95,114,101,112,114,250,1, - 63,250,13,60,109,111,100,117,108,101,32,123,33,114,125,62, - 250,20,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 123,33,114,125,41,62,250,23,60,109,111,100,117,108,101,32, - 123,33,114,125,32,102,114,111,109,32,123,33,114,125,62,41, - 9,114,13,0,0,0,218,22,95,109,111,100,117,108,101,95, - 114,101,112,114,95,102,114,111,109,95,115,112,101,99,114,11, - 0,0,0,114,114,0,0,0,218,9,69,120,99,101,112,116, - 105,111,110,114,9,0,0,0,114,2,0,0,0,218,8,95, - 95,102,105,108,101,95,95,114,50,0,0,0,41,5,114,110, - 0,0,0,218,6,108,111,97,100,101,114,114,109,0,0,0, - 114,20,0,0,0,218,8,102,105,108,101,110,97,109,101,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,12, - 95,109,111,100,117,108,101,95,114,101,112,114,38,1,0,0, - 115,44,0,0,0,12,2,16,1,8,1,10,1,2,1,12, - 1,12,1,2,1,2,2,10,1,12,1,6,1,2,1,10, - 1,12,1,8,1,14,1,16,2,12,2,2,250,2,252,2, - 251,114,124,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, - 114,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,2,100,2,100,3,156,3,100,4,100,5,132,2, - 90,4,100,6,100,7,132,0,90,5,100,8,100,9,132,0, - 90,6,101,7,100,10,100,11,132,0,131,1,90,8,101,8, - 106,9,100,12,100,11,132,0,131,1,90,8,101,7,100,13, - 100,14,132,0,131,1,90,10,101,7,100,15,100,16,132,0, - 131,1,90,11,101,11,106,9,100,17,100,16,132,0,131,1, - 90,11,100,2,83,0,41,18,218,10,77,111,100,117,108,101, - 83,112,101,99,97,208,5,0,0,84,104,101,32,115,112,101, - 99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,97, - 32,109,111,100,117,108,101,44,32,117,115,101,100,32,102,111, - 114,32,108,111,97,100,105,110,103,46,10,10,32,32,32,32, - 65,32,109,111,100,117,108,101,39,115,32,115,112,101,99,32, - 105,115,32,116,104,101,32,115,111,117,114,99,101,32,102,111, - 114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98, - 111,117,116,32,116,104,101,32,109,111,100,117,108,101,46,32, - 32,70,111,114,10,32,32,32,32,100,97,116,97,32,97,115, - 115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104, - 101,32,109,111,100,117,108,101,44,32,105,110,99,108,117,100, - 105,110,103,32,115,111,117,114,99,101,44,32,117,115,101,32, - 116,104,101,32,115,112,101,99,39,115,10,32,32,32,32,108, - 111,97,100,101,114,46,10,10,32,32,32,32,96,110,97,109, - 101,96,32,105,115,32,116,104,101,32,97,98,115,111,108,117, - 116,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, - 111,100,117,108,101,46,32,32,96,108,111,97,100,101,114,96, - 32,105,115,32,116,104,101,32,108,111,97,100,101,114,10,32, - 32,32,32,116,111,32,117,115,101,32,119,104,101,110,32,108, - 111,97,100,105,110,103,32,116,104,101,32,109,111,100,117,108, - 101,46,32,32,96,112,97,114,101,110,116,96,32,105,115,32, - 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,10, - 32,32,32,32,112,97,99,107,97,103,101,32,116,104,101,32, - 109,111,100,117,108,101,32,105,115,32,105,110,46,32,32,84, - 104,101,32,112,97,114,101,110,116,32,105,115,32,100,101,114, - 105,118,101,100,32,102,114,111,109,32,116,104,101,32,110,97, - 109,101,46,10,10,32,32,32,32,96,105,115,95,112,97,99, - 107,97,103,101,96,32,100,101,116,101,114,109,105,110,101,115, - 32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,105, - 115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,112, - 97,99,107,97,103,101,32,111,114,10,32,32,32,32,110,111, - 116,46,32,32,79,110,32,109,111,100,117,108,101,115,32,116, - 104,105,115,32,105,115,32,114,101,102,108,101,99,116,101,100, - 32,98,121,32,116,104,101,32,96,95,95,112,97,116,104,95, - 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, - 32,32,32,96,111,114,105,103,105,110,96,32,105,115,32,116, - 104,101,32,115,112,101,99,105,102,105,99,32,108,111,99,97, - 116,105,111,110,32,117,115,101,100,32,98,121,32,116,104,101, - 32,108,111,97,100,101,114,32,102,114,111,109,32,119,104,105, - 99,104,32,116,111,10,32,32,32,32,108,111,97,100,32,116, - 104,101,32,109,111,100,117,108,101,44,32,105,102,32,116,104, - 97,116,32,105,110,102,111,114,109,97,116,105,111,110,32,105, - 115,32,97,118,97,105,108,97,98,108,101,46,32,32,87,104, - 101,110,32,102,105,108,101,110,97,109,101,32,105,115,10,32, - 32,32,32,115,101,116,44,32,111,114,105,103,105,110,32,119, - 105,108,108,32,109,97,116,99,104,46,10,10,32,32,32,32, - 96,104,97,115,95,108,111,99,97,116,105,111,110,96,32,105, - 110,100,105,99,97,116,101,115,32,116,104,97,116,32,97,32, - 115,112,101,99,39,115,32,34,111,114,105,103,105,110,34,32, - 114,101,102,108,101,99,116,115,32,97,32,108,111,99,97,116, - 105,111,110,46,10,32,32,32,32,87,104,101,110,32,116,104, - 105,115,32,105,115,32,84,114,117,101,44,32,96,95,95,102, - 105,108,101,95,95,96,32,97,116,116,114,105,98,117,116,101, - 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,105, - 115,32,115,101,116,46,10,10,32,32,32,32,96,99,97,99, - 104,101,100,96,32,105,115,32,116,104,101,32,108,111,99,97, - 116,105,111,110,32,111,102,32,116,104,101,32,99,97,99,104, - 101,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 44,32,105,102,32,97,110,121,46,32,32,73,116,10,32,32, - 32,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111, - 32,116,104,101,32,96,95,95,99,97,99,104,101,100,95,95, - 96,32,97,116,116,114,105,98,117,116,101,46,10,10,32,32, - 32,32,96,115,117,98,109,111,100,117,108,101,95,115,101,97, - 114,99,104,95,108,111,99,97,116,105,111,110,115,96,32,105, - 115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,111, - 102,32,112,97,116,104,32,101,110,116,114,105,101,115,32,116, - 111,10,32,32,32,32,115,101,97,114,99,104,32,119,104,101, - 110,32,105,109,112,111,114,116,105,110,103,32,115,117,98,109, - 111,100,117,108,101,115,46,32,32,73,102,32,115,101,116,44, - 32,105,115,95,112,97,99,107,97,103,101,32,115,104,111,117, - 108,100,32,98,101,10,32,32,32,32,84,114,117,101,45,45, - 97,110,100,32,70,97,108,115,101,32,111,116,104,101,114,119, - 105,115,101,46,10,10,32,32,32,32,80,97,99,107,97,103, - 101,115,32,97,114,101,32,115,105,109,112,108,121,32,109,111, - 100,117,108,101,115,32,116,104,97,116,32,40,109,97,121,41, - 32,104,97,118,101,32,115,117,98,109,111,100,117,108,101,115, - 46,32,32,73,102,32,97,32,115,112,101,99,10,32,32,32, - 32,104,97,115,32,97,32,110,111,110,45,78,111,110,101,32, - 118,97,108,117,101,32,105,110,32,96,115,117,98,109,111,100, - 117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,116, - 105,111,110,115,96,44,32,116,104,101,32,105,109,112,111,114, - 116,10,32,32,32,32,115,121,115,116,101,109,32,119,105,108, - 108,32,99,111,110,115,105,100,101,114,32,109,111,100,117,108, - 101,115,32,108,111,97,100,101,100,32,102,114,111,109,32,116, - 104,101,32,115,112,101,99,32,97,115,32,112,97,99,107,97, - 103,101,115,46,10,10,32,32,32,32,79,110,108,121,32,102, - 105,110,100,101,114,115,32,40,115,101,101,32,105,109,112,111, - 114,116,108,105,98,46,97,98,99,46,77,101,116,97,80,97, - 116,104,70,105,110,100,101,114,32,97,110,100,10,32,32,32, - 32,105,109,112,111,114,116,108,105,98,46,97,98,99,46,80, - 97,116,104,69,110,116,114,121,70,105,110,100,101,114,41,32, - 115,104,111,117,108,100,32,109,111,100,105,102,121,32,77,111, - 100,117,108,101,83,112,101,99,32,105,110,115,116,97,110,99, - 101,115,46,10,10,32,32,32,32,78,41,3,218,6,111,114, - 105,103,105,110,218,12,108,111,97,100,101,114,95,115,116,97, - 116,101,218,10,105,115,95,112,97,99,107,97,103,101,99,3, - 0,0,0,0,0,0,0,3,0,0,0,6,0,0,0,2, - 0,0,0,67,0,0,0,115,54,0,0,0,124,1,124,0, - 95,0,124,2,124,0,95,1,124,3,124,0,95,2,124,4, - 124,0,95,3,124,5,114,16,103,0,110,1,100,0,124,0, - 95,4,100,1,124,0,95,5,100,0,124,0,95,6,100,0, - 83,0,41,2,78,70,41,7,114,20,0,0,0,114,122,0, - 0,0,114,126,0,0,0,114,127,0,0,0,218,26,115,117, - 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, - 111,99,97,116,105,111,110,115,218,13,95,115,101,116,95,102, - 105,108,101,97,116,116,114,218,7,95,99,97,99,104,101,100, - 41,6,114,33,0,0,0,114,20,0,0,0,114,122,0,0, - 0,114,126,0,0,0,114,127,0,0,0,114,128,0,0,0, + 3,0,0,0,11,0,0,0,67,0,0,0,115,242,0,0, + 0,124,0,106,0,100,0,117,1,114,29,116,1,124,0,106, + 0,100,1,131,2,115,29,116,2,124,0,106,0,131,1,155, + 0,100,2,157,2,125,1,116,3,160,4,124,1,116,5,161, + 2,1,0,116,6,124,0,131,1,83,0,116,7,124,0,131, + 1,125,2,100,3,124,0,95,8,122,79,124,2,116,9,106, + 10,124,0,106,11,60,0,122,26,124,0,106,0,100,0,117, + 0,114,62,124,0,106,12,100,0,117,0,114,61,116,13,100, + 4,124,0,106,11,100,5,141,2,130,1,110,6,124,0,106, + 0,160,14,124,2,161,1,1,0,87,0,110,19,1,0,1, + 0,1,0,122,7,116,9,106,10,124,0,106,11,61,0,87, + 0,130,0,4,0,116,15,121,120,1,0,1,0,1,0,89, + 0,130,0,116,9,106,10,160,16,124,0,106,11,161,1,125, + 2,124,2,116,9,106,10,124,0,106,11,60,0,116,17,100, + 6,124,0,106,11,124,0,106,0,131,3,1,0,87,0,100, + 7,124,0,95,8,124,2,83,0,100,7,124,0,95,8,119, + 0,119,0,41,8,78,114,163,0,0,0,114,168,0,0,0, + 84,114,167,0,0,0,114,19,0,0,0,122,18,105,109,112, + 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,70, + 41,18,114,122,0,0,0,114,11,0,0,0,114,7,0,0, + 0,114,101,0,0,0,114,102,0,0,0,114,169,0,0,0, + 114,172,0,0,0,114,165,0,0,0,90,13,95,105,110,105, + 116,105,97,108,105,122,105,110,103,114,18,0,0,0,114,105, + 0,0,0,114,20,0,0,0,114,129,0,0,0,114,87,0, + 0,0,114,163,0,0,0,114,70,0,0,0,114,171,0,0, + 0,114,83,0,0,0,41,3,114,109,0,0,0,114,108,0, + 0,0,114,110,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,218,14,95,108,111,97,100,95,117,110, + 108,111,99,107,101,100,152,2,0,0,115,60,0,0,0,10, + 2,12,2,16,1,12,2,8,1,8,2,6,5,2,1,12, + 1,2,1,10,1,10,1,14,1,2,255,12,4,4,128,6, + 1,2,1,12,1,2,3,12,254,2,1,2,1,14,5,12, + 1,18,1,6,2,4,2,8,254,2,245,114,173,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,8,0,0,0,67,0,0,0,115,54,0,0,0,116,0, + 124,0,106,1,131,1,143,12,1,0,116,2,124,0,131,1, + 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, + 49,0,115,20,119,1,1,0,1,0,1,0,89,0,1,0, + 100,1,83,0,41,2,122,191,82,101,116,117,114,110,32,97, + 32,110,101,119,32,109,111,100,117,108,101,32,111,98,106,101, + 99,116,44,32,108,111,97,100,101,100,32,98,121,32,116,104, + 101,32,115,112,101,99,39,115,32,108,111,97,100,101,114,46, + 10,10,32,32,32,32,84,104,101,32,109,111,100,117,108,101, + 32,105,115,32,110,111,116,32,97,100,100,101,100,32,116,111, + 32,105,116,115,32,112,97,114,101,110,116,46,10,10,32,32, + 32,32,73,102,32,97,32,109,111,100,117,108,101,32,105,115, + 32,97,108,114,101,97,100,121,32,105,110,32,115,121,115,46, + 109,111,100,117,108,101,115,44,32,116,104,97,116,32,101,120, + 105,115,116,105,110,103,32,109,111,100,117,108,101,32,103,101, + 116,115,10,32,32,32,32,99,108,111,98,98,101,114,101,100, + 46,10,10,32,32,32,32,78,41,3,114,57,0,0,0,114, + 20,0,0,0,114,173,0,0,0,169,1,114,109,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 34,0,0,0,101,1,0,0,115,14,0,0,0,6,2,6, - 1,6,1,6,1,14,1,6,3,10,1,122,19,77,111,100, - 117,108,101,83,112,101,99,46,95,95,105,110,105,116,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,6,0,0,0,67,0,0,0,115,102,0,0,0,100,1, - 160,0,124,0,106,1,161,1,100,2,160,0,124,0,106,2, - 161,1,103,2,125,1,124,0,106,3,100,0,117,1,114,26, - 124,1,160,4,100,3,160,0,124,0,106,3,161,1,161,1, - 1,0,124,0,106,5,100,0,117,1,114,40,124,1,160,4, - 100,4,160,0,124,0,106,5,161,1,161,1,1,0,100,5, - 160,0,124,0,106,6,106,7,100,6,160,8,124,1,161,1, - 161,2,83,0,41,7,78,122,9,110,97,109,101,61,123,33, - 114,125,122,11,108,111,97,100,101,114,61,123,33,114,125,122, - 11,111,114,105,103,105,110,61,123,33,114,125,122,29,115,117, - 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, - 111,99,97,116,105,111,110,115,61,123,125,122,6,123,125,40, - 123,125,41,122,2,44,32,41,9,114,50,0,0,0,114,20, - 0,0,0,114,122,0,0,0,114,126,0,0,0,218,6,97, - 112,112,101,110,100,114,129,0,0,0,218,9,95,95,99,108, - 97,115,115,95,95,114,9,0,0,0,218,4,106,111,105,110, - 41,2,114,33,0,0,0,114,62,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,114,53,0,0,0, - 113,1,0,0,115,20,0,0,0,10,1,10,1,4,255,10, - 2,18,1,10,1,6,1,8,1,4,255,22,2,122,19,77, - 111,100,117,108,101,83,112,101,99,46,95,95,114,101,112,114, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,8,0,0,0,67,0,0,0,115,102,0,0,0, - 124,0,106,0,125,2,122,36,124,0,106,1,124,1,106,1, - 107,2,111,38,124,0,106,2,124,1,106,2,107,2,111,38, - 124,0,106,3,124,1,106,3,107,2,111,38,124,2,124,1, - 106,0,107,2,111,38,124,0,106,4,124,1,106,4,107,2, - 111,38,124,0,106,5,124,1,106,5,107,2,87,0,83,0, - 4,0,116,6,121,50,1,0,1,0,1,0,116,7,6,0, - 89,0,83,0,119,0,114,0,0,0,0,41,8,114,129,0, - 0,0,114,20,0,0,0,114,122,0,0,0,114,126,0,0, - 0,218,6,99,97,99,104,101,100,218,12,104,97,115,95,108, - 111,99,97,116,105,111,110,114,2,0,0,0,218,14,78,111, - 116,73,109,112,108,101,109,101,110,116,101,100,41,3,114,33, - 0,0,0,90,5,111,116,104,101,114,90,4,115,109,115,108, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 6,95,95,101,113,95,95,123,1,0,0,115,32,0,0,0, - 6,1,2,1,12,1,10,1,2,255,10,2,2,254,8,3, - 2,253,10,4,2,252,10,5,4,251,12,6,8,1,2,255, - 122,17,77,111,100,117,108,101,83,112,101,99,46,95,95,101, - 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,58,0,0, - 0,124,0,106,0,100,0,117,0,114,26,124,0,106,1,100, - 0,117,1,114,26,124,0,106,2,114,26,116,3,100,0,117, - 0,114,19,116,4,130,1,116,3,160,5,124,0,106,1,161, - 1,124,0,95,0,124,0,106,0,83,0,114,0,0,0,0, - 41,6,114,131,0,0,0,114,126,0,0,0,114,130,0,0, - 0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120, - 116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101, - 109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101, - 116,95,99,97,99,104,101,100,114,52,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,135,0,0, - 0,135,1,0,0,115,12,0,0,0,10,2,16,1,8,1, - 4,1,14,1,6,1,122,17,77,111,100,117,108,101,83,112, - 101,99,46,99,97,99,104,101,100,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,10,0,0,0,124,1,124,0,95,0,100,0,83, - 0,114,0,0,0,0,41,1,114,131,0,0,0,41,2,114, - 33,0,0,0,114,135,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,135,0,0,0,144,1,0, - 0,115,2,0,0,0,10,2,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,32,0,0,0,124,0,106,0,100,1,117,0,114,13, - 124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0, - 124,0,106,1,83,0,41,4,122,32,84,104,101,32,110,97, - 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 39,115,32,112,97,114,101,110,116,46,78,218,1,46,114,25, - 0,0,0,41,3,114,129,0,0,0,114,20,0,0,0,218, - 10,114,112,97,114,116,105,116,105,111,110,114,52,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, - 6,112,97,114,101,110,116,148,1,0,0,115,6,0,0,0, - 10,3,16,1,6,2,122,17,77,111,100,117,108,101,83,112, - 101,99,46,112,97,114,101,110,116,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,1,0,0,0,67,0, - 0,0,115,6,0,0,0,124,0,106,0,83,0,114,0,0, - 0,0,41,1,114,130,0,0,0,114,52,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,136,0, - 0,0,156,1,0,0,115,2,0,0,0,6,2,122,23,77, - 111,100,117,108,101,83,112,101,99,46,104,97,115,95,108,111, - 99,97,116,105,111,110,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 14,0,0,0,116,0,124,1,131,1,124,0,95,1,100,0, - 83,0,114,0,0,0,0,41,2,218,4,98,111,111,108,114, - 130,0,0,0,41,2,114,33,0,0,0,218,5,118,97,108, - 117,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,136,0,0,0,160,1,0,0,115,2,0,0,0,14, - 2,41,12,114,9,0,0,0,114,8,0,0,0,114,1,0, - 0,0,114,10,0,0,0,114,34,0,0,0,114,53,0,0, - 0,114,138,0,0,0,218,8,112,114,111,112,101,114,116,121, - 114,135,0,0,0,218,6,115,101,116,116,101,114,114,143,0, - 0,0,114,136,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,114,125,0,0,0, - 64,1,0,0,115,34,0,0,0,8,0,4,1,4,36,2, - 1,12,255,8,12,8,10,2,12,10,1,4,8,10,1,2, - 3,10,1,2,7,10,1,4,3,14,1,114,125,0,0,0, - 169,2,114,126,0,0,0,114,128,0,0,0,99,2,0,0, - 0,0,0,0,0,2,0,0,0,6,0,0,0,8,0,0, - 0,67,0,0,0,115,150,0,0,0,116,0,124,1,100,1, - 131,2,114,37,116,1,100,2,117,0,114,11,116,2,130,1, - 116,1,106,3,125,4,124,3,100,2,117,0,114,24,124,4, - 124,0,124,1,100,3,141,2,83,0,124,3,114,28,103,0, - 110,1,100,2,125,5,124,4,124,0,124,1,124,5,100,4, - 141,3,83,0,124,3,100,2,117,0,114,66,116,0,124,1, - 100,5,131,2,114,64,122,7,124,1,160,4,124,0,161,1, - 125,3,87,0,110,12,4,0,116,5,121,74,1,0,1,0, - 1,0,100,2,125,3,89,0,110,2,100,6,125,3,116,6, - 124,0,124,1,124,2,124,3,100,7,141,4,83,0,119,0, - 41,8,122,53,82,101,116,117,114,110,32,97,32,109,111,100, - 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, - 110,32,118,97,114,105,111,117,115,32,108,111,97,100,101,114, - 32,109,101,116,104,111,100,115,46,90,12,103,101,116,95,102, - 105,108,101,110,97,109,101,78,41,1,114,122,0,0,0,41, - 2,114,122,0,0,0,114,129,0,0,0,114,128,0,0,0, - 70,114,148,0,0,0,41,7,114,11,0,0,0,114,139,0, - 0,0,114,140,0,0,0,218,23,115,112,101,99,95,102,114, - 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, - 114,128,0,0,0,114,87,0,0,0,114,125,0,0,0,41, - 6,114,20,0,0,0,114,122,0,0,0,114,126,0,0,0, - 114,128,0,0,0,114,149,0,0,0,90,6,115,101,97,114, - 99,104,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,104,0,0,0,165,1,0,0,115,38,0,0,0,10, - 2,8,1,4,1,6,1,8,2,12,1,12,1,6,1,2, - 1,6,255,8,3,10,1,2,1,14,1,12,1,8,1,4, - 3,16,2,2,250,114,104,0,0,0,99,3,0,0,0,0, - 0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,67, - 0,0,0,115,30,1,0,0,122,5,124,0,106,0,125,3, - 87,0,110,8,4,0,116,1,121,142,1,0,1,0,1,0, - 89,0,110,6,124,3,100,0,117,1,114,20,124,3,83,0, - 124,0,106,2,125,4,124,1,100,0,117,0,114,40,122,5, - 124,0,106,3,125,1,87,0,110,7,4,0,116,1,121,141, - 1,0,1,0,1,0,89,0,122,5,124,0,106,4,125,5, - 87,0,110,9,4,0,116,1,121,140,1,0,1,0,1,0, - 100,0,125,5,89,0,124,2,100,0,117,0,114,81,124,5, - 100,0,117,0,114,79,122,5,124,1,106,5,125,2,87,0, - 110,12,4,0,116,1,121,139,1,0,1,0,1,0,100,0, - 125,2,89,0,110,2,124,5,125,2,122,5,124,0,106,6, - 125,6,87,0,110,9,4,0,116,1,121,138,1,0,1,0, - 1,0,100,0,125,6,89,0,122,7,116,7,124,0,106,8, - 131,1,125,7,87,0,110,9,4,0,116,1,121,137,1,0, - 1,0,1,0,100,0,125,7,89,0,116,9,124,4,124,1, - 124,2,100,1,141,3,125,3,124,5,100,0,117,0,114,126, - 100,2,110,1,100,3,124,3,95,10,124,6,124,3,95,11, - 124,7,124,3,95,12,124,3,83,0,119,0,119,0,119,0, - 119,0,119,0,119,0,41,4,78,169,1,114,126,0,0,0, - 70,84,41,13,114,113,0,0,0,114,2,0,0,0,114,9, - 0,0,0,114,112,0,0,0,114,121,0,0,0,218,7,95, - 79,82,73,71,73,78,218,10,95,95,99,97,99,104,101,100, - 95,95,218,4,108,105,115,116,218,8,95,95,112,97,116,104, - 95,95,114,125,0,0,0,114,130,0,0,0,114,135,0,0, - 0,114,129,0,0,0,41,8,114,110,0,0,0,114,122,0, - 0,0,114,126,0,0,0,114,109,0,0,0,114,20,0,0, - 0,90,8,108,111,99,97,116,105,111,110,114,135,0,0,0, - 114,129,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,17,95,115,112,101,99,95,102,114,111,109, - 95,109,111,100,117,108,101,191,1,0,0,115,84,0,0,0, - 2,2,10,1,12,1,4,1,8,2,4,1,6,2,8,1, - 2,1,10,1,12,1,2,2,2,1,10,1,12,1,6,1, - 8,1,8,1,2,1,10,1,12,1,8,1,4,2,2,1, - 10,1,12,1,6,1,2,1,14,1,12,1,6,1,14,2, - 18,1,6,1,6,1,4,1,2,249,2,252,2,250,2,250, - 2,251,2,246,114,155,0,0,0,70,169,1,218,8,111,118, - 101,114,114,105,100,101,99,2,0,0,0,0,0,0,0,1, - 0,0,0,5,0,0,0,8,0,0,0,67,0,0,0,115, - 178,1,0,0,124,2,115,10,116,0,124,1,100,1,100,0, - 131,3,100,0,117,0,114,24,122,6,124,0,106,1,124,1, - 95,2,87,0,110,7,4,0,116,3,121,216,1,0,1,0, - 1,0,89,0,124,2,115,34,116,0,124,1,100,2,100,0, - 131,3,100,0,117,0,114,83,124,0,106,4,125,3,124,3, - 100,0,117,0,114,70,124,0,106,5,100,0,117,1,114,70, - 116,6,100,0,117,0,114,52,116,7,130,1,116,6,106,8, - 125,4,124,4,160,9,124,4,161,1,125,3,124,0,106,5, - 124,3,95,10,124,3,124,0,95,4,100,0,124,1,95,11, - 122,5,124,3,124,1,95,12,87,0,110,7,4,0,116,3, - 121,215,1,0,1,0,1,0,89,0,124,2,115,93,116,0, - 124,1,100,3,100,0,131,3,100,0,117,0,114,107,122,6, - 124,0,106,13,124,1,95,14,87,0,110,7,4,0,116,3, - 121,214,1,0,1,0,1,0,89,0,122,5,124,0,124,1, - 95,15,87,0,110,7,4,0,116,3,121,213,1,0,1,0, - 1,0,89,0,124,2,115,130,116,0,124,1,100,4,100,0, - 131,3,100,0,117,0,114,149,124,0,106,5,100,0,117,1, - 114,149,122,6,124,0,106,5,124,1,95,16,87,0,110,7, - 4,0,116,3,121,212,1,0,1,0,1,0,89,0,124,0, - 106,17,114,208,124,2,115,162,116,0,124,1,100,5,100,0, - 131,3,100,0,117,0,114,176,122,6,124,0,106,18,124,1, - 95,11,87,0,110,7,4,0,116,3,121,211,1,0,1,0, - 1,0,89,0,124,2,115,186,116,0,124,1,100,6,100,0, - 131,3,100,0,117,0,114,208,124,0,106,19,100,0,117,1, - 114,208,122,7,124,0,106,19,124,1,95,20,87,0,124,1, - 83,0,4,0,116,3,121,210,1,0,1,0,1,0,89,0, - 124,1,83,0,124,1,83,0,119,0,119,0,119,0,119,0, - 119,0,119,0,119,0,41,7,78,114,9,0,0,0,114,112, - 0,0,0,218,11,95,95,112,97,99,107,97,103,101,95,95, - 114,154,0,0,0,114,121,0,0,0,114,152,0,0,0,41, - 21,114,13,0,0,0,114,20,0,0,0,114,9,0,0,0, - 114,2,0,0,0,114,122,0,0,0,114,129,0,0,0,114, - 139,0,0,0,114,140,0,0,0,218,16,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,218,7,95,95,110, - 101,119,95,95,90,5,95,112,97,116,104,114,121,0,0,0, - 114,112,0,0,0,114,143,0,0,0,114,158,0,0,0,114, - 113,0,0,0,114,154,0,0,0,114,136,0,0,0,114,126, - 0,0,0,114,135,0,0,0,114,152,0,0,0,41,5,114, - 109,0,0,0,114,110,0,0,0,114,157,0,0,0,114,122, - 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,218,18,95,105,110,105,116,95,109, - 111,100,117,108,101,95,97,116,116,114,115,236,1,0,0,115, - 112,0,0,0,20,4,2,1,12,1,12,1,2,1,20,2, - 6,1,8,1,10,2,8,1,4,1,6,1,10,2,8,1, - 6,1,6,11,2,1,10,1,12,1,2,1,20,2,2,1, - 12,1,12,1,2,1,2,2,10,1,12,1,2,1,20,2, - 10,1,2,1,12,1,12,1,2,1,6,2,20,1,2,1, - 12,1,12,1,2,1,20,2,10,1,2,1,10,1,4,3, - 12,254,2,1,8,1,2,254,2,249,2,249,2,249,2,251, - 2,250,2,228,114,161,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,82,0,0,0,100,1,125,1,116,0,124,0,106, - 1,100,2,131,2,114,15,124,0,106,1,160,2,124,0,161, - 1,125,1,110,10,116,0,124,0,106,1,100,3,131,2,114, - 25,116,3,100,4,131,1,130,1,124,1,100,1,117,0,114, - 34,116,4,124,0,106,5,131,1,125,1,116,6,124,0,124, - 1,131,2,1,0,124,1,83,0,41,5,122,43,67,114,101, - 97,116,101,32,97,32,109,111,100,117,108,101,32,98,97,115, - 101,100,32,111,110,32,116,104,101,32,112,114,111,118,105,100, - 101,100,32,115,112,101,99,46,78,218,13,99,114,101,97,116, - 101,95,109,111,100,117,108,101,218,11,101,120,101,99,95,109, - 111,100,117,108,101,122,66,108,111,97,100,101,114,115,32,116, - 104,97,116,32,100,101,102,105,110,101,32,101,120,101,99,95, - 109,111,100,117,108,101,40,41,32,109,117,115,116,32,97,108, - 115,111,32,100,101,102,105,110,101,32,99,114,101,97,116,101, - 95,109,111,100,117,108,101,40,41,41,7,114,11,0,0,0, - 114,122,0,0,0,114,162,0,0,0,114,87,0,0,0,114, - 21,0,0,0,114,20,0,0,0,114,161,0,0,0,169,2, - 114,109,0,0,0,114,110,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,16,109,111,100,117,108, - 101,95,102,114,111,109,95,115,112,101,99,52,2,0,0,115, - 18,0,0,0,4,3,12,1,14,3,12,1,8,1,8,2, - 10,1,10,1,4,1,114,165,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 67,0,0,0,115,100,0,0,0,124,0,106,0,100,1,117, - 0,114,7,100,2,110,2,124,0,106,0,125,1,124,0,106, - 1,100,1,117,0,114,32,124,0,106,2,100,1,117,0,114, - 25,100,3,160,3,124,1,161,1,83,0,100,4,160,3,124, - 1,124,0,106,2,161,2,83,0,124,0,106,4,114,42,100, - 5,160,3,124,1,124,0,106,1,161,2,83,0,100,6,160, - 3,124,0,106,0,124,0,106,1,161,2,83,0,41,7,122, - 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, - 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, - 109,111,100,117,108,101,46,78,114,115,0,0,0,114,116,0, - 0,0,114,117,0,0,0,114,118,0,0,0,250,18,60,109, - 111,100,117,108,101,32,123,33,114,125,32,40,123,125,41,62, - 41,5,114,20,0,0,0,114,126,0,0,0,114,122,0,0, - 0,114,50,0,0,0,114,136,0,0,0,41,2,114,109,0, - 0,0,114,20,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,119,0,0,0,69,2,0,0,115, - 16,0,0,0,20,3,10,1,10,1,10,1,14,2,6,2, - 14,1,16,2,114,119,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,10,0,0,0,67,0, - 0,0,115,24,1,0,0,124,0,106,0,125,2,116,1,124, - 2,131,1,143,123,1,0,116,2,106,3,160,4,124,2,161, - 1,124,1,117,1,114,27,100,1,160,5,124,2,161,1,125, - 3,116,6,124,3,124,2,100,2,141,2,130,1,122,80,124, - 0,106,7,100,3,117,0,114,53,124,0,106,8,100,3,117, - 0,114,45,116,6,100,4,124,0,106,0,100,2,141,2,130, - 1,116,9,124,0,124,1,100,5,100,6,141,3,1,0,110, - 40,116,9,124,0,124,1,100,5,100,6,141,3,1,0,116, - 10,124,0,106,7,100,7,131,2,115,87,116,11,124,0,106, - 7,131,1,155,0,100,8,157,2,125,3,116,12,160,13,124, - 3,116,14,161,2,1,0,124,0,106,7,160,15,124,2,161, - 1,1,0,110,6,124,0,106,7,160,16,124,1,161,1,1, - 0,87,0,116,2,106,3,160,17,124,0,106,0,161,1,125, - 1,124,1,116,2,106,3,124,0,106,0,60,0,110,14,116, - 2,106,3,160,17,124,0,106,0,161,1,125,1,124,1,116, - 2,106,3,124,0,106,0,60,0,119,0,87,0,100,3,4, - 0,4,0,131,3,1,0,124,1,83,0,49,0,115,133,119, - 1,1,0,1,0,1,0,89,0,1,0,124,1,83,0,41, - 9,122,70,69,120,101,99,117,116,101,32,116,104,101,32,115, - 112,101,99,39,115,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,32,105,110,32,97,110,32,101,120,105, - 115,116,105,110,103,32,109,111,100,117,108,101,39,115,32,110, - 97,109,101,115,112,97,99,101,46,122,30,109,111,100,117,108, - 101,32,123,33,114,125,32,110,111,116,32,105,110,32,115,121, - 115,46,109,111,100,117,108,101,115,114,19,0,0,0,78,250, - 14,109,105,115,115,105,110,103,32,108,111,97,100,101,114,84, - 114,156,0,0,0,114,163,0,0,0,250,55,46,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,110,111,116,32,102, - 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,116,111,32,108,111,97,100,95,109,111,100,117,108, - 101,40,41,41,18,114,20,0,0,0,114,57,0,0,0,114, - 18,0,0,0,114,105,0,0,0,114,38,0,0,0,114,50, - 0,0,0,114,87,0,0,0,114,122,0,0,0,114,129,0, - 0,0,114,161,0,0,0,114,11,0,0,0,114,7,0,0, - 0,114,101,0,0,0,114,102,0,0,0,218,13,73,109,112, - 111,114,116,87,97,114,110,105,110,103,218,11,108,111,97,100, - 95,109,111,100,117,108,101,114,163,0,0,0,218,3,112,111, - 112,41,4,114,109,0,0,0,114,110,0,0,0,114,20,0, - 0,0,114,108,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,106,0,0,0,86,2,0,0,115, - 48,0,0,0,6,2,10,1,16,1,10,1,12,1,2,1, - 10,1,10,1,14,1,16,2,14,2,12,1,16,1,12,2, - 14,1,12,2,2,128,14,4,14,1,14,255,26,1,4,1, - 16,128,4,0,114,106,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0, - 0,0,115,10,1,0,0,122,9,124,0,106,0,160,1,124, - 0,106,2,161,1,1,0,87,0,110,23,1,0,1,0,1, - 0,124,0,106,2,116,3,106,4,118,0,114,32,116,3,106, - 4,160,5,124,0,106,2,161,1,125,1,124,1,116,3,106, - 4,124,0,106,2,60,0,130,0,116,3,106,4,160,5,124, - 0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,106, - 2,60,0,116,6,124,1,100,1,100,0,131,3,100,0,117, - 0,114,68,122,6,124,0,106,0,124,1,95,7,87,0,110, - 7,4,0,116,8,121,132,1,0,1,0,1,0,89,0,116, - 6,124,1,100,2,100,0,131,3,100,0,117,0,114,104,122, - 20,124,1,106,9,124,1,95,10,116,11,124,1,100,3,131, - 2,115,95,124,0,106,2,160,12,100,4,161,1,100,5,25, - 0,124,1,95,10,87,0,110,7,4,0,116,8,121,131,1, - 0,1,0,1,0,89,0,116,6,124,1,100,6,100,0,131, - 3,100,0,117,0,114,128,122,6,124,0,124,1,95,13,87, - 0,124,1,83,0,4,0,116,8,121,130,1,0,1,0,1, - 0,89,0,124,1,83,0,124,1,83,0,119,0,119,0,119, - 0,41,7,78,114,112,0,0,0,114,158,0,0,0,114,154, - 0,0,0,114,141,0,0,0,114,25,0,0,0,114,113,0, - 0,0,41,14,114,122,0,0,0,114,170,0,0,0,114,20, - 0,0,0,114,18,0,0,0,114,105,0,0,0,114,171,0, - 0,0,114,13,0,0,0,114,112,0,0,0,114,2,0,0, - 0,114,9,0,0,0,114,158,0,0,0,114,11,0,0,0, - 114,142,0,0,0,114,113,0,0,0,114,164,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,25, - 95,108,111,97,100,95,98,97,99,107,119,97,114,100,95,99, - 111,109,112,97,116,105,98,108,101,116,2,0,0,115,64,0, - 0,0,2,3,18,1,6,1,12,1,14,1,12,1,2,1, - 14,3,12,1,16,1,2,1,12,1,12,1,2,1,16,1, - 2,1,8,4,10,1,18,1,4,128,12,1,2,1,16,1, - 2,1,8,1,4,3,12,254,2,1,8,1,2,254,2,251, - 2,246,114,172,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,11,0,0,0,67,0,0,0, - 115,242,0,0,0,124,0,106,0,100,0,117,1,114,29,116, - 1,124,0,106,0,100,1,131,2,115,29,116,2,124,0,106, - 0,131,1,155,0,100,2,157,2,125,1,116,3,160,4,124, - 1,116,5,161,2,1,0,116,6,124,0,131,1,83,0,116, - 7,124,0,131,1,125,2,100,3,124,0,95,8,122,79,124, - 2,116,9,106,10,124,0,106,11,60,0,122,26,124,0,106, - 0,100,0,117,0,114,62,124,0,106,12,100,0,117,0,114, - 61,116,13,100,4,124,0,106,11,100,5,141,2,130,1,110, - 6,124,0,106,0,160,14,124,2,161,1,1,0,87,0,110, - 19,1,0,1,0,1,0,122,7,116,9,106,10,124,0,106, - 11,61,0,87,0,130,0,4,0,116,15,121,120,1,0,1, - 0,1,0,89,0,130,0,116,9,106,10,160,16,124,0,106, - 11,161,1,125,2,124,2,116,9,106,10,124,0,106,11,60, - 0,116,17,100,6,124,0,106,11,124,0,106,0,131,3,1, - 0,87,0,100,7,124,0,95,8,124,2,83,0,100,7,124, - 0,95,8,119,0,119,0,41,8,78,114,163,0,0,0,114, - 168,0,0,0,84,114,167,0,0,0,114,19,0,0,0,122, - 18,105,109,112,111,114,116,32,123,33,114,125,32,35,32,123, - 33,114,125,70,41,18,114,122,0,0,0,114,11,0,0,0, - 114,7,0,0,0,114,101,0,0,0,114,102,0,0,0,114, - 169,0,0,0,114,172,0,0,0,114,165,0,0,0,90,13, - 95,105,110,105,116,105,97,108,105,122,105,110,103,114,18,0, - 0,0,114,105,0,0,0,114,20,0,0,0,114,129,0,0, - 0,114,87,0,0,0,114,163,0,0,0,114,70,0,0,0, - 114,171,0,0,0,114,83,0,0,0,41,3,114,109,0,0, - 0,114,108,0,0,0,114,110,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,14,95,108,111,97, - 100,95,117,110,108,111,99,107,101,100,152,2,0,0,115,60, - 0,0,0,10,2,12,2,16,1,12,2,8,1,8,2,6, - 5,2,1,12,1,2,1,10,1,10,1,14,1,2,255,12, - 4,4,128,6,1,2,1,12,1,2,3,12,254,2,1,2, - 1,14,5,12,1,18,1,6,2,4,2,8,254,2,245,114, - 173,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,8,0,0,0,67,0,0,0,115,54,0, - 0,0,116,0,124,0,106,1,131,1,143,12,1,0,116,2, - 124,0,131,1,87,0,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,49,0,115,20,119,1,1,0,1,0,1,0, - 89,0,1,0,100,1,83,0,41,2,122,191,82,101,116,117, - 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, - 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, - 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, - 100,101,114,46,10,10,32,32,32,32,84,104,101,32,109,111, - 100,117,108,101,32,105,115,32,110,111,116,32,97,100,100,101, - 100,32,116,111,32,105,116,115,32,112,97,114,101,110,116,46, - 10,10,32,32,32,32,73,102,32,97,32,109,111,100,117,108, - 101,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32, - 115,121,115,46,109,111,100,117,108,101,115,44,32,116,104,97, - 116,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108, - 101,32,103,101,116,115,10,32,32,32,32,99,108,111,98,98, - 101,114,101,100,46,10,10,32,32,32,32,78,41,3,114,57, - 0,0,0,114,20,0,0,0,114,173,0,0,0,169,1,114, - 109,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,107,0,0,0,197,2,0,0,115,6,0,0, - 0,12,9,22,1,20,128,114,107,0,0,0,99,0,0,0, + 107,0,0,0,197,2,0,0,115,10,0,0,0,12,9,6, + 1,14,255,2,1,20,255,114,107,0,0,0,99,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, 0,64,0,0,0,115,140,0,0,0,101,0,90,1,100,0, 90,2,100,1,90,3,100,2,90,4,101,5,100,3,100,4, @@ -1478,401 +1479,401 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 111,97,100,114,212,0,0,0,114,183,0,0,0,114,109,0, 0,0,114,110,0,0,0,114,113,0,0,0,114,5,0,0, 0,114,5,0,0,0,114,6,0,0,0,218,10,95,102,105, - 110,100,95,115,112,101,99,153,3,0,0,115,64,0,0,0, + 110,100,95,115,112,101,99,153,3,0,0,115,70,0,0,0, 6,2,8,1,8,2,4,3,12,1,10,5,8,1,8,1, - 2,1,10,1,12,1,12,1,8,1,16,1,4,255,12,3, - 30,128,8,1,14,2,10,1,2,1,10,1,12,1,12,4, - 8,2,8,1,8,2,8,2,2,239,4,19,2,243,2,244, - 114,215,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,110, - 0,0,0,116,0,124,0,116,1,131,2,115,14,116,2,100, - 1,160,3,116,4,124,0,131,1,161,1,131,1,130,1,124, - 2,100,2,107,0,114,22,116,5,100,3,131,1,130,1,124, - 2,100,2,107,4,114,41,116,0,124,1,116,1,131,2,115, - 35,116,2,100,4,131,1,130,1,124,1,115,41,116,6,100, - 5,131,1,130,1,124,0,115,53,124,2,100,2,107,2,114, - 51,116,5,100,6,131,1,130,1,100,7,83,0,100,7,83, - 0,41,8,122,28,86,101,114,105,102,121,32,97,114,103,117, - 109,101,110,116,115,32,97,114,101,32,34,115,97,110,101,34, - 46,122,31,109,111,100,117,108,101,32,110,97,109,101,32,109, - 117,115,116,32,98,101,32,115,116,114,44,32,110,111,116,32, - 123,125,114,25,0,0,0,122,18,108,101,118,101,108,32,109, - 117,115,116,32,98,101,32,62,61,32,48,122,31,95,95,112, - 97,99,107,97,103,101,95,95,32,110,111,116,32,115,101,116, - 32,116,111,32,97,32,115,116,114,105,110,103,122,54,97,116, - 116,101,109,112,116,101,100,32,114,101,108,97,116,105,118,101, - 32,105,109,112,111,114,116,32,119,105,116,104,32,110,111,32, - 107,110,111,119,110,32,112,97,114,101,110,116,32,112,97,99, - 107,97,103,101,122,17,69,109,112,116,121,32,109,111,100,117, - 108,101,32,110,97,109,101,78,41,7,218,10,105,115,105,110, - 115,116,97,110,99,101,218,3,115,116,114,218,9,84,121,112, - 101,69,114,114,111,114,114,50,0,0,0,114,3,0,0,0, - 218,10,86,97,108,117,101,69,114,114,111,114,114,87,0,0, - 0,169,3,114,20,0,0,0,114,209,0,0,0,114,210,0, - 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,107, - 200,3,0,0,115,24,0,0,0,10,2,18,1,8,1,8, - 1,8,1,10,1,8,1,4,1,8,1,12,2,8,1,8, - 255,114,221,0,0,0,122,16,78,111,32,109,111,100,117,108, - 101,32,110,97,109,101,100,32,122,4,123,33,114,125,99,2, - 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,8, - 0,0,0,67,0,0,0,115,16,1,0,0,100,0,125,2, - 124,0,160,0,100,1,161,1,100,2,25,0,125,3,124,3, - 114,63,124,3,116,1,106,2,118,1,114,21,116,3,124,1, - 124,3,131,2,1,0,124,0,116,1,106,2,118,0,114,31, - 116,1,106,2,124,0,25,0,83,0,116,1,106,2,124,3, - 25,0,125,4,122,5,124,4,106,4,125,2,87,0,110,21, - 4,0,116,5,121,135,1,0,1,0,1,0,116,6,100,3, - 23,0,160,7,124,0,124,3,161,2,125,5,116,8,124,5, - 124,0,100,4,141,2,100,0,130,2,116,9,124,0,124,2, - 131,2,125,6,124,6,100,0,117,0,114,81,116,8,116,6, - 160,7,124,0,161,1,124,0,100,4,141,2,130,1,116,10, - 124,6,131,1,125,7,124,3,114,132,116,1,106,2,124,3, - 25,0,125,4,124,0,160,0,100,1,161,1,100,5,25,0, - 125,8,122,9,116,11,124,4,124,8,124,7,131,3,1,0, - 87,0,124,7,83,0,4,0,116,5,121,134,1,0,1,0, - 1,0,100,6,124,3,155,2,100,7,124,8,155,2,157,4, - 125,5,116,12,160,13,124,5,116,14,161,2,1,0,89,0, - 124,7,83,0,124,7,83,0,119,0,119,0,41,8,78,114, - 141,0,0,0,114,25,0,0,0,122,23,59,32,123,33,114, - 125,32,105,115,32,110,111,116,32,97,32,112,97,99,107,97, - 103,101,114,19,0,0,0,233,2,0,0,0,122,27,67,97, - 110,110,111,116,32,115,101,116,32,97,110,32,97,116,116,114, - 105,98,117,116,101,32,111,110,32,122,18,32,102,111,114,32, - 99,104,105,108,100,32,109,111,100,117,108,101,32,41,15,114, - 142,0,0,0,114,18,0,0,0,114,105,0,0,0,114,74, - 0,0,0,114,154,0,0,0,114,2,0,0,0,218,8,95, - 69,82,82,95,77,83,71,114,50,0,0,0,218,19,77,111, - 100,117,108,101,78,111,116,70,111,117,110,100,69,114,114,111, - 114,114,215,0,0,0,114,173,0,0,0,114,12,0,0,0, - 114,101,0,0,0,114,102,0,0,0,114,169,0,0,0,41, - 9,114,20,0,0,0,218,7,105,109,112,111,114,116,95,114, - 181,0,0,0,114,143,0,0,0,90,13,112,97,114,101,110, - 116,95,109,111,100,117,108,101,114,108,0,0,0,114,109,0, - 0,0,114,110,0,0,0,90,5,99,104,105,108,100,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,23,95, - 102,105,110,100,95,97,110,100,95,108,111,97,100,95,117,110, - 108,111,99,107,101,100,219,3,0,0,115,58,0,0,0,4, - 1,14,1,4,1,10,1,10,1,10,2,10,1,10,1,2, - 1,10,1,12,1,16,1,14,1,10,1,8,1,18,1,8, - 2,4,1,10,2,14,1,2,1,14,1,4,4,12,253,16, - 1,14,1,8,1,2,253,2,242,114,226,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8, - 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, - 131,1,143,31,1,0,116,1,106,2,160,3,124,0,116,4, - 161,2,125,2,124,2,116,4,117,0,114,28,116,5,124,0, - 124,1,131,2,87,0,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,87,0,100,1,4,0,4,0,131,3,1,0, - 110,8,49,0,115,38,119,1,1,0,1,0,1,0,89,0, - 1,0,124,2,100,1,117,0,114,58,100,2,160,6,124,0, - 161,1,125,3,116,7,124,3,124,0,100,3,141,2,130,1, - 116,8,124,0,131,1,1,0,124,2,83,0,41,4,122,25, - 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104, - 101,32,109,111,100,117,108,101,46,78,122,40,105,109,112,111, - 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, - 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, - 117,108,101,115,114,19,0,0,0,41,9,114,57,0,0,0, - 114,18,0,0,0,114,105,0,0,0,114,38,0,0,0,218, - 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, - 226,0,0,0,114,50,0,0,0,114,224,0,0,0,114,72, - 0,0,0,41,4,114,20,0,0,0,114,225,0,0,0,114, - 110,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,14,95,102,105,110,100,95, - 97,110,100,95,108,111,97,100,254,3,0,0,115,26,0,0, - 0,10,2,14,1,8,1,24,1,14,255,16,128,8,3,2, - 1,6,1,2,255,12,2,8,2,4,1,114,228,0,0,0, - 114,25,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,42, - 0,0,0,116,0,124,0,124,1,124,2,131,3,1,0,124, - 2,100,1,107,4,114,16,116,1,124,0,124,1,124,2,131, - 3,125,0,116,2,124,0,116,3,131,2,83,0,41,3,97, - 50,1,0,0,73,109,112,111,114,116,32,97,110,100,32,114, - 101,116,117,114,110,32,116,104,101,32,109,111,100,117,108,101, - 32,98,97,115,101,100,32,111,110,32,105,116,115,32,110,97, - 109,101,44,32,116,104,101,32,112,97,99,107,97,103,101,32, - 116,104,101,32,99,97,108,108,32,105,115,10,32,32,32,32, - 98,101,105,110,103,32,109,97,100,101,32,102,114,111,109,44, - 32,97,110,100,32,116,104,101,32,108,101,118,101,108,32,97, - 100,106,117,115,116,109,101,110,116,46,10,10,32,32,32,32, - 84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101, - 112,114,101,115,101,110,116,115,32,116,104,101,32,103,114,101, - 97,116,101,115,116,32,99,111,109,109,111,110,32,100,101,110, - 111,109,105,110,97,116,111,114,32,111,102,32,102,117,110,99, - 116,105,111,110,97,108,105,116,121,10,32,32,32,32,98,101, - 116,119,101,101,110,32,105,109,112,111,114,116,95,109,111,100, - 117,108,101,32,97,110,100,32,95,95,105,109,112,111,114,116, - 95,95,46,32,84,104,105,115,32,105,110,99,108,117,100,101, - 115,32,115,101,116,116,105,110,103,32,95,95,112,97,99,107, - 97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101, - 32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46, - 10,10,32,32,32,32,114,25,0,0,0,78,41,4,114,221, - 0,0,0,114,211,0,0,0,114,228,0,0,0,218,11,95, - 103,99,100,95,105,109,112,111,114,116,114,220,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,229, - 0,0,0,14,4,0,0,115,8,0,0,0,12,9,8,1, - 12,1,10,1,114,229,0,0,0,169,1,218,9,114,101,99, - 117,114,115,105,118,101,99,3,0,0,0,0,0,0,0,1, - 0,0,0,8,0,0,0,11,0,0,0,67,0,0,0,115, - 218,0,0,0,124,1,68,0,93,103,125,4,116,0,124,4, - 116,1,131,2,115,32,124,3,114,17,124,0,106,2,100,1, - 23,0,125,5,110,2,100,2,125,5,116,3,100,3,124,5, - 155,0,100,4,116,4,124,4,131,1,106,2,155,0,157,4, - 131,1,130,1,124,4,100,5,107,2,114,53,124,3,115,52, - 116,5,124,0,100,6,131,2,114,52,116,6,124,0,124,0, - 106,7,124,2,100,7,100,8,141,4,1,0,113,2,116,5, - 124,0,124,4,131,2,115,105,100,9,160,8,124,0,106,2, - 124,4,161,2,125,6,122,7,116,9,124,2,124,6,131,2, - 1,0,87,0,113,2,4,0,116,10,121,108,1,0,125,7, - 1,0,122,21,124,7,106,11,124,6,107,2,114,100,116,12, - 106,13,160,14,124,6,116,15,161,2,100,10,117,1,114,100, - 87,0,89,0,100,10,125,7,126,7,113,2,130,0,100,10, - 125,7,126,7,119,1,113,2,124,0,83,0,119,0,41,11, - 122,238,70,105,103,117,114,101,32,111,117,116,32,119,104,97, - 116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,111, - 117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,32, - 32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,108, - 97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,100, - 117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,114, - 116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,101, - 100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,104, - 101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,32, - 97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,108, - 105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,105, - 115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,32, - 122,8,46,95,95,97,108,108,95,95,122,13,96,96,102,114, - 111,109,32,108,105,115,116,39,39,122,8,73,116,101,109,32, - 105,110,32,122,18,32,109,117,115,116,32,98,101,32,115,116, - 114,44,32,110,111,116,32,250,1,42,218,7,95,95,97,108, - 108,95,95,84,114,230,0,0,0,114,206,0,0,0,78,41, - 16,114,216,0,0,0,114,217,0,0,0,114,9,0,0,0, - 114,218,0,0,0,114,3,0,0,0,114,11,0,0,0,218, - 16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, - 116,114,233,0,0,0,114,50,0,0,0,114,74,0,0,0, - 114,224,0,0,0,114,20,0,0,0,114,18,0,0,0,114, - 105,0,0,0,114,38,0,0,0,114,227,0,0,0,41,8, - 114,110,0,0,0,218,8,102,114,111,109,108,105,115,116,114, - 225,0,0,0,114,231,0,0,0,218,1,120,90,5,119,104, - 101,114,101,90,9,102,114,111,109,95,110,97,109,101,90,3, - 101,120,99,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,234,0,0,0,29,4,0,0,115,56,0,0,0, - 8,10,10,1,4,1,12,1,4,2,10,1,8,1,8,255, - 8,2,14,1,10,1,2,1,6,255,2,128,10,2,14,1, - 2,1,14,1,14,1,10,4,16,1,2,255,12,2,2,1, - 8,128,2,245,4,12,2,248,114,234,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0, - 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100, - 1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124, - 1,100,3,117,1,114,41,124,2,100,3,117,1,114,39,124, - 1,124,2,106,1,107,3,114,39,116,2,106,3,100,4,124, - 1,155,2,100,5,124,2,106,1,155,2,100,6,157,5,116, - 4,100,7,100,8,141,3,1,0,124,1,83,0,124,2,100, - 3,117,1,114,48,124,2,106,1,83,0,116,2,106,3,100, - 9,116,4,100,7,100,8,141,3,1,0,124,0,100,10,25, - 0,125,1,100,11,124,0,118,1,114,71,124,1,160,5,100, - 12,161,1,100,13,25,0,125,1,124,1,83,0,41,14,122, - 167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32, - 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117, - 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97, - 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103, - 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32, - 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100, - 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10, - 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116, - 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114, - 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119, - 110,46,10,10,32,32,32,32,114,158,0,0,0,114,113,0, - 0,0,78,122,32,95,95,112,97,99,107,97,103,101,95,95, - 32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114, - 101,110,116,32,40,122,4,32,33,61,32,250,1,41,233,3, - 0,0,0,41,1,90,10,115,116,97,99,107,108,101,118,101, - 108,122,89,99,97,110,39,116,32,114,101,115,111,108,118,101, - 32,112,97,99,107,97,103,101,32,102,114,111,109,32,95,95, - 115,112,101,99,95,95,32,111,114,32,95,95,112,97,99,107, - 97,103,101,95,95,44,32,102,97,108,108,105,110,103,32,98, - 97,99,107,32,111,110,32,95,95,110,97,109,101,95,95,32, - 97,110,100,32,95,95,112,97,116,104,95,95,114,9,0,0, - 0,114,154,0,0,0,114,141,0,0,0,114,25,0,0,0, - 41,6,114,38,0,0,0,114,143,0,0,0,114,101,0,0, - 0,114,102,0,0,0,114,169,0,0,0,114,142,0,0,0, - 41,3,218,7,103,108,111,98,97,108,115,114,209,0,0,0, - 114,109,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97, - 99,107,97,103,101,95,95,66,4,0,0,115,42,0,0,0, - 10,7,10,1,8,1,18,1,6,1,2,1,4,255,4,1, - 6,255,4,2,6,254,4,3,8,1,6,1,6,2,4,2, - 6,254,8,3,8,1,14,1,4,1,114,240,0,0,0,114, - 5,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0, - 0,9,0,0,0,5,0,0,0,67,0,0,0,115,174,0, - 0,0,124,4,100,1,107,2,114,9,116,0,124,0,131,1, - 125,5,110,18,124,1,100,2,117,1,114,15,124,1,110,1, - 105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0, - 124,7,124,4,131,3,125,5,124,3,115,74,124,4,100,1, - 107,2,114,42,116,0,124,0,160,2,100,3,161,1,100,1, - 25,0,131,1,83,0,124,0,115,46,124,5,83,0,116,3, - 124,0,131,1,116,3,124,0,160,2,100,3,161,1,100,1, - 25,0,131,1,24,0,125,8,116,4,106,5,124,5,106,6, - 100,2,116,3,124,5,106,6,131,1,124,8,24,0,133,2, - 25,0,25,0,83,0,116,7,124,5,100,4,131,2,114,85, - 116,8,124,5,124,3,116,0,131,3,83,0,124,5,83,0, - 41,5,97,215,1,0,0,73,109,112,111,114,116,32,97,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,84,104,101, - 32,39,103,108,111,98,97,108,115,39,32,97,114,103,117,109, - 101,110,116,32,105,115,32,117,115,101,100,32,116,111,32,105, - 110,102,101,114,32,119,104,101,114,101,32,116,104,101,32,105, - 109,112,111,114,116,32,105,115,32,111,99,99,117,114,114,105, - 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, - 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, - 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, + 2,1,10,1,12,1,12,1,8,1,2,1,12,250,2,6, + 4,255,12,3,2,128,28,248,8,9,14,2,10,1,2,1, + 10,1,12,1,12,4,8,2,8,1,8,2,8,2,2,239, + 4,19,2,243,2,244,114,215,0,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,0, + 67,0,0,0,115,110,0,0,0,116,0,124,0,116,1,131, + 2,115,14,116,2,100,1,160,3,116,4,124,0,131,1,161, + 1,131,1,130,1,124,2,100,2,107,0,114,22,116,5,100, + 3,131,1,130,1,124,2,100,2,107,4,114,41,116,0,124, + 1,116,1,131,2,115,35,116,2,100,4,131,1,130,1,124, + 1,115,41,116,6,100,5,131,1,130,1,124,0,115,53,124, + 2,100,2,107,2,114,51,116,5,100,6,131,1,130,1,100, + 7,83,0,100,7,83,0,41,8,122,28,86,101,114,105,102, + 121,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32, + 34,115,97,110,101,34,46,122,31,109,111,100,117,108,101,32, + 110,97,109,101,32,109,117,115,116,32,98,101,32,115,116,114, + 44,32,110,111,116,32,123,125,114,25,0,0,0,122,18,108, + 101,118,101,108,32,109,117,115,116,32,98,101,32,62,61,32, + 48,122,31,95,95,112,97,99,107,97,103,101,95,95,32,110, + 111,116,32,115,101,116,32,116,111,32,97,32,115,116,114,105, + 110,103,122,54,97,116,116,101,109,112,116,101,100,32,114,101, + 108,97,116,105,118,101,32,105,109,112,111,114,116,32,119,105, + 116,104,32,110,111,32,107,110,111,119,110,32,112,97,114,101, + 110,116,32,112,97,99,107,97,103,101,122,17,69,109,112,116, + 121,32,109,111,100,117,108,101,32,110,97,109,101,78,41,7, + 218,10,105,115,105,110,115,116,97,110,99,101,218,3,115,116, + 114,218,9,84,121,112,101,69,114,114,111,114,114,50,0,0, + 0,114,3,0,0,0,218,10,86,97,108,117,101,69,114,114, + 111,114,114,87,0,0,0,169,3,114,20,0,0,0,114,209, + 0,0,0,114,210,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,13,95,115,97,110,105,116,121, + 95,99,104,101,99,107,200,3,0,0,115,24,0,0,0,10, + 2,18,1,8,1,8,1,8,1,10,1,8,1,4,1,8, + 1,12,2,8,1,8,255,114,221,0,0,0,122,16,78,111, + 32,109,111,100,117,108,101,32,110,97,109,101,100,32,122,4, + 123,33,114,125,99,2,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,8,0,0,0,67,0,0,0,115,16,1, + 0,0,100,0,125,2,124,0,160,0,100,1,161,1,100,2, + 25,0,125,3,124,3,114,63,124,3,116,1,106,2,118,1, + 114,21,116,3,124,1,124,3,131,2,1,0,124,0,116,1, + 106,2,118,0,114,31,116,1,106,2,124,0,25,0,83,0, + 116,1,106,2,124,3,25,0,125,4,122,5,124,4,106,4, + 125,2,87,0,110,21,4,0,116,5,121,135,1,0,1,0, + 1,0,116,6,100,3,23,0,160,7,124,0,124,3,161,2, + 125,5,116,8,124,5,124,0,100,4,141,2,100,0,130,2, + 116,9,124,0,124,2,131,2,125,6,124,6,100,0,117,0, + 114,81,116,8,116,6,160,7,124,0,161,1,124,0,100,4, + 141,2,130,1,116,10,124,6,131,1,125,7,124,3,114,132, + 116,1,106,2,124,3,25,0,125,4,124,0,160,0,100,1, + 161,1,100,5,25,0,125,8,122,9,116,11,124,4,124,8, + 124,7,131,3,1,0,87,0,124,7,83,0,4,0,116,5, + 121,134,1,0,1,0,1,0,100,6,124,3,155,2,100,7, + 124,8,155,2,157,4,125,5,116,12,160,13,124,5,116,14, + 161,2,1,0,89,0,124,7,83,0,124,7,83,0,119,0, + 119,0,41,8,78,114,141,0,0,0,114,25,0,0,0,122, + 23,59,32,123,33,114,125,32,105,115,32,110,111,116,32,97, + 32,112,97,99,107,97,103,101,114,19,0,0,0,233,2,0, + 0,0,122,27,67,97,110,110,111,116,32,115,101,116,32,97, + 110,32,97,116,116,114,105,98,117,116,101,32,111,110,32,122, + 18,32,102,111,114,32,99,104,105,108,100,32,109,111,100,117, + 108,101,32,41,15,114,142,0,0,0,114,18,0,0,0,114, + 105,0,0,0,114,74,0,0,0,114,154,0,0,0,114,2, + 0,0,0,218,8,95,69,82,82,95,77,83,71,114,50,0, + 0,0,218,19,77,111,100,117,108,101,78,111,116,70,111,117, + 110,100,69,114,114,111,114,114,215,0,0,0,114,173,0,0, + 0,114,12,0,0,0,114,101,0,0,0,114,102,0,0,0, + 114,169,0,0,0,41,9,114,20,0,0,0,218,7,105,109, + 112,111,114,116,95,114,181,0,0,0,114,143,0,0,0,90, + 13,112,97,114,101,110,116,95,109,111,100,117,108,101,114,108, + 0,0,0,114,109,0,0,0,114,110,0,0,0,90,5,99, + 104,105,108,100,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,23,95,102,105,110,100,95,97,110,100,95,108, + 111,97,100,95,117,110,108,111,99,107,101,100,219,3,0,0, + 115,58,0,0,0,4,1,14,1,4,1,10,1,10,1,10, + 2,10,1,10,1,2,1,10,1,12,1,16,1,14,1,10, + 1,8,1,18,1,8,2,4,1,10,2,14,1,2,1,14, + 1,4,4,12,253,16,1,14,1,8,1,2,253,2,242,114, + 226,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,8,0,0,0,67,0,0,0,115,128,0, + 0,0,116,0,124,0,131,1,143,31,1,0,116,1,106,2, + 160,3,124,0,116,4,161,2,125,2,124,2,116,4,117,0, + 114,28,116,5,124,0,124,1,131,2,87,0,2,0,100,1, + 4,0,4,0,131,3,1,0,83,0,87,0,100,1,4,0, + 4,0,131,3,1,0,110,8,49,0,115,38,119,1,1,0, + 1,0,1,0,89,0,1,0,124,2,100,1,117,0,114,58, + 100,2,160,6,124,0,161,1,125,3,116,7,124,3,124,0, + 100,3,141,2,130,1,116,8,124,0,131,1,1,0,124,2, + 83,0,41,4,122,25,70,105,110,100,32,97,110,100,32,108, + 111,97,100,32,116,104,101,32,109,111,100,117,108,101,46,78, + 122,40,105,109,112,111,114,116,32,111,102,32,123,125,32,104, + 97,108,116,101,100,59,32,78,111,110,101,32,105,110,32,115, + 121,115,46,109,111,100,117,108,101,115,114,19,0,0,0,41, + 9,114,57,0,0,0,114,18,0,0,0,114,105,0,0,0, + 114,38,0,0,0,218,14,95,78,69,69,68,83,95,76,79, + 65,68,73,78,71,114,226,0,0,0,114,50,0,0,0,114, + 224,0,0,0,114,72,0,0,0,41,4,114,20,0,0,0, + 114,225,0,0,0,114,110,0,0,0,114,82,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,14, + 95,102,105,110,100,95,97,110,100,95,108,111,97,100,254,3, + 0,0,115,30,0,0,0,10,2,14,1,8,1,8,1,14, + 253,2,3,2,255,28,254,8,5,2,1,6,1,2,255,12, + 2,8,2,4,1,114,228,0,0,0,114,25,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,42,0,0,0,116,0,124, + 0,124,1,124,2,131,3,1,0,124,2,100,1,107,4,114, + 16,116,1,124,0,124,1,124,2,131,3,125,0,116,2,124, + 0,116,3,131,2,83,0,41,3,97,50,1,0,0,73,109, + 112,111,114,116,32,97,110,100,32,114,101,116,117,114,110,32, + 116,104,101,32,109,111,100,117,108,101,32,98,97,115,101,100, + 32,111,110,32,105,116,115,32,110,97,109,101,44,32,116,104, + 101,32,112,97,99,107,97,103,101,32,116,104,101,32,99,97, + 108,108,32,105,115,10,32,32,32,32,98,101,105,110,103,32, + 109,97,100,101,32,102,114,111,109,44,32,97,110,100,32,116, + 104,101,32,108,101,118,101,108,32,97,100,106,117,115,116,109, + 101,110,116,46,10,10,32,32,32,32,84,104,105,115,32,102, + 117,110,99,116,105,111,110,32,114,101,112,114,101,115,101,110, + 116,115,32,116,104,101,32,103,114,101,97,116,101,115,116,32, + 99,111,109,109,111,110,32,100,101,110,111,109,105,110,97,116, + 111,114,32,111,102,32,102,117,110,99,116,105,111,110,97,108, + 105,116,121,10,32,32,32,32,98,101,116,119,101,101,110,32, + 105,109,112,111,114,116,95,109,111,100,117,108,101,32,97,110, + 100,32,95,95,105,109,112,111,114,116,95,95,46,32,84,104, + 105,115,32,105,110,99,108,117,100,101,115,32,115,101,116,116, + 105,110,103,32,95,95,112,97,99,107,97,103,101,95,95,32, + 105,102,10,32,32,32,32,116,104,101,32,108,111,97,100,101, + 114,32,100,105,100,32,110,111,116,46,10,10,32,32,32,32, + 114,25,0,0,0,78,41,4,114,221,0,0,0,114,211,0, + 0,0,114,228,0,0,0,218,11,95,103,99,100,95,105,109, + 112,111,114,116,114,220,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,229,0,0,0,14,4,0, + 0,115,8,0,0,0,12,9,8,1,12,1,10,1,114,229, + 0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,101, + 99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,0, + 0,11,0,0,0,67,0,0,0,115,218,0,0,0,124,1, + 68,0,93,103,125,4,116,0,124,4,116,1,131,2,115,32, + 124,3,114,17,124,0,106,2,100,1,23,0,125,5,110,2, + 100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,4, + 124,4,131,1,106,2,155,0,157,4,131,1,130,1,124,4, + 100,5,107,2,114,53,124,3,115,52,116,5,124,0,100,6, + 131,2,114,52,116,6,124,0,124,0,106,7,124,2,100,7, + 100,8,141,4,1,0,113,2,116,5,124,0,124,4,131,2, + 115,105,100,9,160,8,124,0,106,2,124,4,161,2,125,6, + 122,7,116,9,124,2,124,6,131,2,1,0,87,0,113,2, + 4,0,116,10,121,108,1,0,125,7,1,0,122,21,124,7, + 106,11,124,6,107,2,114,100,116,12,106,13,160,14,124,6, + 116,15,161,2,100,10,117,1,114,100,87,0,89,0,100,10, + 125,7,126,7,113,2,130,0,100,10,125,7,126,7,119,1, + 113,2,124,0,83,0,119,0,41,11,122,238,70,105,103,117, + 114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,109, + 112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,101, + 116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,105, + 109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,114, + 32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,119, + 104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,111, + 10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,32, + 105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,100, + 101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,99, + 116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,105, + 110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,32, + 32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,105, + 114,101,100,46,10,10,32,32,32,32,122,8,46,95,95,97, + 108,108,95,95,122,13,96,96,102,114,111,109,32,108,105,115, + 116,39,39,122,8,73,116,101,109,32,105,110,32,122,18,32, + 109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,116, + 32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,230, + 0,0,0,114,206,0,0,0,78,41,16,114,216,0,0,0, + 114,217,0,0,0,114,9,0,0,0,114,218,0,0,0,114, + 3,0,0,0,114,11,0,0,0,218,16,95,104,97,110,100, + 108,101,95,102,114,111,109,108,105,115,116,114,233,0,0,0, + 114,50,0,0,0,114,74,0,0,0,114,224,0,0,0,114, + 20,0,0,0,114,18,0,0,0,114,105,0,0,0,114,38, + 0,0,0,114,227,0,0,0,41,8,114,110,0,0,0,218, + 8,102,114,111,109,108,105,115,116,114,225,0,0,0,114,231, + 0,0,0,218,1,120,90,5,119,104,101,114,101,90,9,102, + 114,111,109,95,110,97,109,101,90,3,101,120,99,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,234,0,0, + 0,29,4,0,0,115,56,0,0,0,8,10,10,1,4,1, + 12,1,4,2,10,1,8,1,8,255,8,2,14,1,10,1, + 2,1,6,255,2,128,10,2,14,1,2,1,14,1,14,1, + 10,4,16,1,2,255,12,2,2,1,8,128,2,245,4,12, + 2,248,114,234,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,0, + 115,146,0,0,0,124,0,160,0,100,1,161,1,125,1,124, + 0,160,0,100,2,161,1,125,2,124,1,100,3,117,1,114, + 41,124,2,100,3,117,1,114,39,124,1,124,2,106,1,107, + 3,114,39,116,2,106,3,100,4,124,1,155,2,100,5,124, + 2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,141, + 3,1,0,124,1,83,0,124,2,100,3,117,1,114,48,124, + 2,106,1,83,0,116,2,106,3,100,9,116,4,100,7,100, + 8,141,3,1,0,124,0,100,10,25,0,125,1,100,11,124, + 0,118,1,114,71,124,1,160,5,100,12,161,1,100,13,25, + 0,125,1,124,1,83,0,41,14,122,167,67,97,108,99,117, + 108,97,116,101,32,119,104,97,116,32,95,95,112,97,99,107, + 97,103,101,95,95,32,115,104,111,117,108,100,32,98,101,46, + 10,10,32,32,32,32,95,95,112,97,99,107,97,103,101,95, + 95,32,105,115,32,110,111,116,32,103,117,97,114,97,110,116, + 101,101,100,32,116,111,32,98,101,32,100,101,102,105,110,101, + 100,32,111,114,32,99,111,117,108,100,32,98,101,32,115,101, + 116,32,116,111,32,78,111,110,101,10,32,32,32,32,116,111, + 32,114,101,112,114,101,115,101,110,116,32,116,104,97,116,32, + 105,116,115,32,112,114,111,112,101,114,32,118,97,108,117,101, + 32,105,115,32,117,110,107,110,111,119,110,46,10,10,32,32, + 32,32,114,158,0,0,0,114,113,0,0,0,78,122,32,95, + 95,112,97,99,107,97,103,101,95,95,32,33,61,32,95,95, + 115,112,101,99,95,95,46,112,97,114,101,110,116,32,40,122, + 4,32,33,61,32,250,1,41,233,3,0,0,0,41,1,90, + 10,115,116,97,99,107,108,101,118,101,108,122,89,99,97,110, + 39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97, + 103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95, + 32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44, + 32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110, + 32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95, + 112,97,116,104,95,95,114,9,0,0,0,114,154,0,0,0, + 114,141,0,0,0,114,25,0,0,0,41,6,114,38,0,0, + 0,114,143,0,0,0,114,101,0,0,0,114,102,0,0,0, + 114,169,0,0,0,114,142,0,0,0,41,3,218,7,103,108, + 111,98,97,108,115,114,209,0,0,0,114,109,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,17, + 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95, + 95,66,4,0,0,115,42,0,0,0,10,7,10,1,8,1, + 18,1,6,1,2,1,4,255,4,1,6,255,4,2,6,254, + 4,3,8,1,6,1,6,2,4,2,6,254,8,3,8,1, + 14,1,4,1,114,240,0,0,0,114,5,0,0,0,99,5, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,5, + 0,0,0,67,0,0,0,115,174,0,0,0,124,4,100,1, + 107,2,114,9,116,0,124,0,131,1,125,5,110,18,124,1, + 100,2,117,1,114,15,124,1,110,1,105,0,125,6,116,1, + 124,6,131,1,125,7,116,0,124,0,124,7,124,4,131,3, + 125,5,124,3,115,74,124,4,100,1,107,2,114,42,116,0, + 124,0,160,2,100,3,161,1,100,1,25,0,131,1,83,0, + 124,0,115,46,124,5,83,0,116,3,124,0,131,1,116,3, + 124,0,160,2,100,3,161,1,100,1,25,0,131,1,24,0, + 125,8,116,4,106,5,124,5,106,6,100,2,116,3,124,5, + 106,6,131,1,124,8,24,0,133,2,25,0,25,0,83,0, + 116,7,124,5,100,4,131,2,114,85,116,8,124,5,124,3, + 116,0,131,3,83,0,124,5,83,0,41,5,97,215,1,0, + 0,73,109,112,111,114,116,32,97,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,84,104,101,32,39,103,108,111,98, 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, - 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, - 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, - 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, - 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, - 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, - 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, - 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, - 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, - 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, - 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, - 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, - 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, - 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, - 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, - 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, - 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, - 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, - 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, - 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, - 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,25, - 0,0,0,78,114,141,0,0,0,114,154,0,0,0,41,9, - 114,229,0,0,0,114,240,0,0,0,218,9,112,97,114,116, - 105,116,105,111,110,114,208,0,0,0,114,18,0,0,0,114, - 105,0,0,0,114,9,0,0,0,114,11,0,0,0,114,234, - 0,0,0,41,9,114,20,0,0,0,114,239,0,0,0,218, - 6,108,111,99,97,108,115,114,235,0,0,0,114,210,0,0, - 0,114,110,0,0,0,90,8,103,108,111,98,97,108,115,95, - 114,209,0,0,0,90,7,99,117,116,95,111,102,102,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, - 95,105,109,112,111,114,116,95,95,93,4,0,0,115,30,0, - 0,0,8,11,10,1,16,2,8,1,12,1,4,1,8,3, - 18,1,4,1,4,1,26,4,30,3,10,1,12,1,4,2, - 114,243,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,38, - 0,0,0,116,0,160,1,124,0,161,1,125,1,124,1,100, - 0,117,0,114,15,116,2,100,1,124,0,23,0,131,1,130, - 1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,111, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 32,110,97,109,101,100,32,41,4,114,175,0,0,0,114,183, - 0,0,0,114,87,0,0,0,114,173,0,0,0,41,2,114, - 20,0,0,0,114,109,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, - 105,110,95,102,114,111,109,95,110,97,109,101,130,4,0,0, - 115,8,0,0,0,10,1,8,1,12,1,8,1,114,244,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,10, - 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, - 124,1,97,0,124,0,97,1,116,2,116,1,131,1,125,2, - 116,1,106,3,160,4,161,0,68,0,93,36,92,2,125,3, - 125,4,116,5,124,4,124,2,131,2,114,49,124,3,116,1, - 106,6,118,0,114,30,116,7,125,5,110,9,116,0,160,8, - 124,3,161,1,114,38,116,9,125,5,110,1,113,13,116,10, - 124,4,124,5,131,2,125,6,116,11,124,6,124,4,131,2, - 1,0,113,13,116,1,106,3,116,12,25,0,125,7,100,1, - 68,0,93,23,125,8,124,8,116,1,106,3,118,1,114,69, - 116,13,124,8,131,1,125,9,110,5,116,1,106,3,124,8, - 25,0,125,9,116,14,124,7,124,8,124,9,131,3,1,0, - 113,57,100,2,83,0,41,3,122,250,83,101,116,117,112,32, - 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, - 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, - 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, - 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, - 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, - 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, - 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, - 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, - 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, - 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, - 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, - 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, - 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, - 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, - 32,32,32,32,41,3,114,26,0,0,0,114,101,0,0,0, - 114,71,0,0,0,78,41,15,114,64,0,0,0,114,18,0, - 0,0,114,3,0,0,0,114,105,0,0,0,218,5,105,116, - 101,109,115,114,216,0,0,0,114,86,0,0,0,114,175,0, - 0,0,114,98,0,0,0,114,193,0,0,0,114,155,0,0, - 0,114,161,0,0,0,114,9,0,0,0,114,244,0,0,0, - 114,12,0,0,0,41,10,218,10,115,121,115,95,109,111,100, - 117,108,101,218,11,95,105,109,112,95,109,111,100,117,108,101, - 90,11,109,111,100,117,108,101,95,116,121,112,101,114,20,0, - 0,0,114,110,0,0,0,114,122,0,0,0,114,109,0,0, - 0,90,11,115,101,108,102,95,109,111,100,117,108,101,90,12, - 98,117,105,108,116,105,110,95,110,97,109,101,90,14,98,117, - 105,108,116,105,110,95,109,111,100,117,108,101,114,5,0,0, - 0,114,5,0,0,0,114,6,0,0,0,218,6,95,115,101, - 116,117,112,137,4,0,0,115,40,0,0,0,4,9,4,1, - 8,3,18,1,10,1,10,1,6,1,10,1,6,1,2,2, - 10,1,10,1,2,128,10,3,8,1,10,1,10,1,10,2, - 14,1,4,251,114,248,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,38,0,0,0,116,0,124,0,124,1,131,2,1, - 0,116,1,106,2,160,3,116,4,161,1,1,0,116,1,106, - 2,160,3,116,5,161,1,1,0,100,1,83,0,41,2,122, - 48,73,110,115,116,97,108,108,32,105,109,112,111,114,116,101, - 114,115,32,102,111,114,32,98,117,105,108,116,105,110,32,97, - 110,100,32,102,114,111,122,101,110,32,109,111,100,117,108,101, - 115,78,41,6,114,248,0,0,0,114,18,0,0,0,114,214, - 0,0,0,114,132,0,0,0,114,175,0,0,0,114,193,0, - 0,0,41,2,114,246,0,0,0,114,247,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,218,8,95, - 105,110,115,116,97,108,108,172,4,0,0,115,6,0,0,0, - 10,2,12,2,16,1,114,249,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 67,0,0,0,115,32,0,0,0,100,1,100,2,108,0,125, - 0,124,0,97,1,124,0,160,2,116,3,106,4,116,5,25, - 0,161,1,1,0,100,2,83,0,41,3,122,57,73,110,115, - 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,116, - 104,97,116,32,114,101,113,117,105,114,101,32,101,120,116,101, - 114,110,97,108,32,102,105,108,101,115,121,115,116,101,109,32, - 97,99,99,101,115,115,114,25,0,0,0,78,41,6,218,26, - 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, - 98,95,101,120,116,101,114,110,97,108,114,139,0,0,0,114, - 249,0,0,0,114,18,0,0,0,114,105,0,0,0,114,9, - 0,0,0,41,1,114,250,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,6,0,0,0,218,27,95,105,110,115,116, - 97,108,108,95,101,120,116,101,114,110,97,108,95,105,109,112, - 111,114,116,101,114,115,180,4,0,0,115,6,0,0,0,8, - 3,4,1,20,1,114,251,0,0,0,114,190,0,0,0,114, - 0,0,0,0,114,24,0,0,0,41,4,78,78,114,5,0, - 0,0,114,25,0,0,0,41,54,114,10,0,0,0,114,7, - 0,0,0,114,26,0,0,0,114,101,0,0,0,114,71,0, - 0,0,114,139,0,0,0,114,17,0,0,0,114,21,0,0, - 0,114,66,0,0,0,114,37,0,0,0,114,47,0,0,0, - 114,22,0,0,0,114,23,0,0,0,114,55,0,0,0,114, - 57,0,0,0,114,60,0,0,0,114,72,0,0,0,114,74, - 0,0,0,114,83,0,0,0,114,95,0,0,0,114,100,0, - 0,0,114,111,0,0,0,114,124,0,0,0,114,125,0,0, - 0,114,104,0,0,0,114,155,0,0,0,114,161,0,0,0, - 114,165,0,0,0,114,119,0,0,0,114,106,0,0,0,114, - 172,0,0,0,114,173,0,0,0,114,107,0,0,0,114,175, - 0,0,0,114,193,0,0,0,114,200,0,0,0,114,211,0, - 0,0,114,213,0,0,0,114,215,0,0,0,114,221,0,0, - 0,90,15,95,69,82,82,95,77,83,71,95,80,82,69,70, - 73,88,114,223,0,0,0,114,226,0,0,0,218,6,111,98, - 106,101,99,116,114,227,0,0,0,114,228,0,0,0,114,229, - 0,0,0,114,234,0,0,0,114,240,0,0,0,114,243,0, - 0,0,114,244,0,0,0,114,248,0,0,0,114,249,0,0, - 0,114,251,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,218,8,60,109,111,100, - 117,108,101,62,1,0,0,0,115,104,0,0,0,4,0,8, - 22,4,9,4,1,4,1,4,3,8,3,8,8,4,8,4, - 2,16,3,14,4,14,77,14,21,8,16,8,37,8,17,14, - 11,8,8,8,11,8,12,8,19,14,26,16,101,10,26,14, - 45,8,72,8,17,8,17,8,30,8,36,8,45,14,15,14, - 80,14,85,8,13,8,9,10,10,8,47,4,16,8,1,8, - 2,6,32,8,3,10,16,14,15,8,37,10,27,8,37,8, - 7,8,35,12,8, + 32,117,115,101,100,32,116,111,32,105,110,102,101,114,32,119, + 104,101,114,101,32,116,104,101,32,105,109,112,111,114,116,32, + 105,115,32,111,99,99,117,114,114,105,110,103,32,102,114,111, + 109,10,32,32,32,32,116,111,32,104,97,110,100,108,101,32, + 114,101,108,97,116,105,118,101,32,105,109,112,111,114,116,115, + 46,32,84,104,101,32,39,108,111,99,97,108,115,39,32,97, + 114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,114, + 101,100,46,32,84,104,101,10,32,32,32,32,39,102,114,111, + 109,108,105,115,116,39,32,97,114,103,117,109,101,110,116,32, + 115,112,101,99,105,102,105,101,115,32,119,104,97,116,32,115, + 104,111,117,108,100,32,101,120,105,115,116,32,97,115,32,97, + 116,116,114,105,98,117,116,101,115,32,111,110,32,116,104,101, + 32,109,111,100,117,108,101,10,32,32,32,32,98,101,105,110, + 103,32,105,109,112,111,114,116,101,100,32,40,101,46,103,46, + 32,96,96,102,114,111,109,32,109,111,100,117,108,101,32,105, + 109,112,111,114,116,32,60,102,114,111,109,108,105,115,116,62, + 96,96,41,46,32,32,84,104,101,32,39,108,101,118,101,108, + 39,10,32,32,32,32,97,114,103,117,109,101,110,116,32,114, + 101,112,114,101,115,101,110,116,115,32,116,104,101,32,112,97, + 99,107,97,103,101,32,108,111,99,97,116,105,111,110,32,116, + 111,32,105,109,112,111,114,116,32,102,114,111,109,32,105,110, + 32,97,32,114,101,108,97,116,105,118,101,10,32,32,32,32, + 105,109,112,111,114,116,32,40,101,46,103,46,32,96,96,102, + 114,111,109,32,46,46,112,107,103,32,105,109,112,111,114,116, + 32,109,111,100,96,96,32,119,111,117,108,100,32,104,97,118, + 101,32,97,32,39,108,101,118,101,108,39,32,111,102,32,50, + 41,46,10,10,32,32,32,32,114,25,0,0,0,78,114,141, + 0,0,0,114,154,0,0,0,41,9,114,229,0,0,0,114, + 240,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, + 208,0,0,0,114,18,0,0,0,114,105,0,0,0,114,9, + 0,0,0,114,11,0,0,0,114,234,0,0,0,41,9,114, + 20,0,0,0,114,239,0,0,0,218,6,108,111,99,97,108, + 115,114,235,0,0,0,114,210,0,0,0,114,110,0,0,0, + 90,8,103,108,111,98,97,108,115,95,114,209,0,0,0,90, + 7,99,117,116,95,111,102,102,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,10,95,95,105,109,112,111,114, + 116,95,95,93,4,0,0,115,30,0,0,0,8,11,10,1, + 16,2,8,1,12,1,4,1,8,3,18,1,4,1,4,1, + 26,4,30,3,10,1,12,1,4,2,114,243,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,160, + 1,124,0,161,1,125,1,124,1,100,0,117,0,114,15,116, + 2,100,1,124,0,23,0,131,1,130,1,116,3,124,1,131, + 1,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100, + 32,41,4,114,175,0,0,0,114,183,0,0,0,114,87,0, + 0,0,114,173,0,0,0,41,2,114,20,0,0,0,114,109, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111, + 109,95,110,97,109,101,130,4,0,0,115,8,0,0,0,10, + 1,8,1,12,1,8,1,114,244,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,10,0,0,0,5,0,0, + 0,67,0,0,0,115,166,0,0,0,124,1,97,0,124,0, + 97,1,116,2,116,1,131,1,125,2,116,1,106,3,160,4, + 161,0,68,0,93,36,92,2,125,3,125,4,116,5,124,4, + 124,2,131,2,114,49,124,3,116,1,106,6,118,0,114,30, + 116,7,125,5,110,9,116,0,160,8,124,3,161,1,114,38, + 116,9,125,5,110,1,113,13,116,10,124,4,124,5,131,2, + 125,6,116,11,124,6,124,4,131,2,1,0,113,13,116,1, + 106,3,116,12,25,0,125,7,100,1,68,0,93,23,125,8, + 124,8,116,1,106,3,118,1,114,69,116,13,124,8,131,1, + 125,9,110,5,116,1,106,3,124,8,25,0,125,9,116,14, + 124,7,124,8,124,9,131,3,1,0,113,57,100,2,83,0, + 41,3,122,250,83,101,116,117,112,32,105,109,112,111,114,116, + 108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, + 32,110,101,101,100,101,100,32,98,117,105,108,116,45,105,110, + 32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,106, + 101,99,116,105,110,103,32,116,104,101,109,10,32,32,32,32, + 105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,32, + 110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,32, + 65,115,32,115,121,115,32,105,115,32,110,101,101,100,101,100, + 32,102,111,114,32,115,121,115,46,109,111,100,117,108,101,115, + 32,97,99,99,101,115,115,32,97,110,100,32,95,105,109,112, + 32,105,115,32,110,101,101,100,101,100,32,116,111,32,108,111, + 97,100,32,98,117,105,108,116,45,105,110,10,32,32,32,32, + 109,111,100,117,108,101,115,44,32,116,104,111,115,101,32,116, + 119,111,32,109,111,100,117,108,101,115,32,109,117,115,116,32, + 98,101,32,101,120,112,108,105,99,105,116,108,121,32,112,97, + 115,115,101,100,32,105,110,46,10,10,32,32,32,32,41,3, + 114,26,0,0,0,114,101,0,0,0,114,71,0,0,0,78, + 41,15,114,64,0,0,0,114,18,0,0,0,114,3,0,0, + 0,114,105,0,0,0,218,5,105,116,101,109,115,114,216,0, + 0,0,114,86,0,0,0,114,175,0,0,0,114,98,0,0, + 0,114,193,0,0,0,114,155,0,0,0,114,161,0,0,0, + 114,9,0,0,0,114,244,0,0,0,114,12,0,0,0,41, + 10,218,10,115,121,115,95,109,111,100,117,108,101,218,11,95, + 105,109,112,95,109,111,100,117,108,101,90,11,109,111,100,117, + 108,101,95,116,121,112,101,114,20,0,0,0,114,110,0,0, + 0,114,122,0,0,0,114,109,0,0,0,90,11,115,101,108, + 102,95,109,111,100,117,108,101,90,12,98,117,105,108,116,105, + 110,95,110,97,109,101,90,14,98,117,105,108,116,105,110,95, + 109,111,100,117,108,101,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,218,6,95,115,101,116,117,112,137,4,0, + 0,115,40,0,0,0,4,9,4,1,8,3,18,1,10,1, + 10,1,6,1,10,1,6,1,2,2,10,1,10,1,2,128, + 10,3,8,1,10,1,10,1,10,2,14,1,4,251,114,248, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,38,0,0, + 0,116,0,124,0,124,1,131,2,1,0,116,1,106,2,160, + 3,116,4,161,1,1,0,116,1,106,2,160,3,116,5,161, + 1,1,0,100,1,83,0,41,2,122,48,73,110,115,116,97, + 108,108,32,105,109,112,111,114,116,101,114,115,32,102,111,114, + 32,98,117,105,108,116,105,110,32,97,110,100,32,102,114,111, + 122,101,110,32,109,111,100,117,108,101,115,78,41,6,114,248, + 0,0,0,114,18,0,0,0,114,214,0,0,0,114,132,0, + 0,0,114,175,0,0,0,114,193,0,0,0,41,2,114,246, + 0,0,0,114,247,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,218,8,95,105,110,115,116,97,108, + 108,172,4,0,0,115,6,0,0,0,10,2,12,2,16,1, + 114,249,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,32, + 0,0,0,100,1,100,2,108,0,125,0,124,0,97,1,124, + 0,160,2,116,3,106,4,116,5,25,0,161,1,1,0,100, + 2,83,0,41,3,122,57,73,110,115,116,97,108,108,32,105, + 109,112,111,114,116,101,114,115,32,116,104,97,116,32,114,101, + 113,117,105,114,101,32,101,120,116,101,114,110,97,108,32,102, + 105,108,101,115,121,115,116,101,109,32,97,99,99,101,115,115, + 114,25,0,0,0,78,41,6,218,26,95,102,114,111,122,101, + 110,95,105,109,112,111,114,116,108,105,98,95,101,120,116,101, + 114,110,97,108,114,139,0,0,0,114,249,0,0,0,114,18, + 0,0,0,114,105,0,0,0,114,9,0,0,0,41,1,114, + 250,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,218,27,95,105,110,115,116,97,108,108,95,101,120, + 116,101,114,110,97,108,95,105,109,112,111,114,116,101,114,115, + 180,4,0,0,115,6,0,0,0,8,3,4,1,20,1,114, + 251,0,0,0,114,190,0,0,0,114,0,0,0,0,114,24, + 0,0,0,41,4,78,78,114,5,0,0,0,114,25,0,0, + 0,41,54,114,10,0,0,0,114,7,0,0,0,114,26,0, + 0,0,114,101,0,0,0,114,71,0,0,0,114,139,0,0, + 0,114,17,0,0,0,114,21,0,0,0,114,66,0,0,0, + 114,37,0,0,0,114,47,0,0,0,114,22,0,0,0,114, + 23,0,0,0,114,55,0,0,0,114,57,0,0,0,114,60, + 0,0,0,114,72,0,0,0,114,74,0,0,0,114,83,0, + 0,0,114,95,0,0,0,114,100,0,0,0,114,111,0,0, + 0,114,124,0,0,0,114,125,0,0,0,114,104,0,0,0, + 114,155,0,0,0,114,161,0,0,0,114,165,0,0,0,114, + 119,0,0,0,114,106,0,0,0,114,172,0,0,0,114,173, + 0,0,0,114,107,0,0,0,114,175,0,0,0,114,193,0, + 0,0,114,200,0,0,0,114,211,0,0,0,114,213,0,0, + 0,114,215,0,0,0,114,221,0,0,0,90,15,95,69,82, + 82,95,77,83,71,95,80,82,69,70,73,88,114,223,0,0, + 0,114,226,0,0,0,218,6,111,98,106,101,99,116,114,227, + 0,0,0,114,228,0,0,0,114,229,0,0,0,114,234,0, + 0,0,114,240,0,0,0,114,243,0,0,0,114,244,0,0, + 0,114,248,0,0,0,114,249,0,0,0,114,251,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,218,8,60,109,111,100,117,108,101,62,1,0, + 0,0,115,104,0,0,0,4,0,8,22,4,9,4,1,4, + 1,4,3,8,3,8,8,4,8,4,2,16,3,14,4,14, + 77,14,21,8,16,8,37,8,17,14,11,8,8,8,11,8, + 12,8,19,14,26,16,101,10,26,14,45,8,72,8,17,8, + 17,8,30,8,36,8,45,14,15,14,80,14,85,8,13,8, + 9,10,10,8,47,4,16,8,1,8,2,6,32,8,3,10, + 16,14,15,8,37,10,27,8,37,8,7,8,35,12,8, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 0707657fceb969..6b9bd0df8135d7 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -355,7 +355,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,185, 0,0,0,115,36,0,0,0,16,5,6,1,22,1,4,255, - 2,2,14,3,24,1,16,128,18,1,12,1,2,1,12,1, + 2,2,14,3,12,1,28,255,18,2,12,1,2,1,12,1, 2,3,12,254,2,1,2,1,2,254,2,253,114,95,0,0, 0,105,110,13,0,0,114,44,0,0,0,114,32,0,0,0, 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, @@ -1101,1666 +1101,1667 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,20,0,0,0,90,4,104,107,101,121,218,8,102,105,108, 101,112,97,116,104,114,7,0,0,0,114,7,0,0,0,114, 8,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101, - 103,105,115,116,114,121,44,3,0,0,115,28,0,0,0,6, - 2,8,1,6,2,6,1,16,1,6,255,2,2,12,1,26, - 1,18,128,4,3,12,254,6,1,2,255,122,38,87,105,110, + 103,105,115,116,114,121,44,3,0,0,115,30,0,0,0,6, + 2,8,1,6,2,6,1,16,1,6,255,2,2,12,1,14, + 1,28,255,2,128,4,4,12,254,6,1,2,255,122,38,87, + 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, + 110,100,101,114,46,95,115,101,97,114,99,104,95,114,101,103, + 105,115,116,114,121,78,99,4,0,0,0,0,0,0,0,0, + 0,0,0,8,0,0,0,8,0,0,0,67,0,0,0,115, + 120,0,0,0,124,0,160,0,124,1,161,1,125,4,124,4, + 100,0,117,0,114,11,100,0,83,0,122,6,116,1,124,4, + 131,1,1,0,87,0,110,9,4,0,116,2,121,59,1,0, + 1,0,1,0,89,0,100,0,83,0,116,3,131,0,68,0, + 93,26,92,2,125,5,125,6,124,4,160,4,116,5,124,6, + 131,1,161,1,114,56,116,6,106,7,124,1,124,5,124,1, + 124,4,131,2,124,4,100,1,141,3,125,7,124,7,2,0, + 1,0,83,0,113,30,100,0,83,0,119,0,41,2,78,114, + 204,0,0,0,41,8,114,223,0,0,0,114,75,0,0,0, + 114,76,0,0,0,114,208,0,0,0,114,58,0,0,0,114, + 136,0,0,0,114,159,0,0,0,218,16,115,112,101,99,95, + 102,114,111,109,95,108,111,97,100,101,114,41,8,114,221,0, + 0,0,114,163,0,0,0,114,65,0,0,0,218,6,116,97, + 114,103,101,116,114,222,0,0,0,114,164,0,0,0,114,212, + 0,0,0,114,210,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,9,102,105,110,100,95,115,112, + 101,99,59,3,0,0,115,34,0,0,0,10,2,8,1,4, + 1,2,1,12,1,12,1,6,1,14,1,14,1,6,1,8, + 1,2,1,6,254,8,3,2,252,4,255,2,254,122,31,87, + 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, + 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4, + 0,0,0,67,0,0,0,115,42,0,0,0,116,0,160,1, + 100,1,116,2,161,2,1,0,124,0,160,3,124,1,124,2, + 161,2,125,3,124,3,100,2,117,1,114,19,124,3,106,4, + 83,0,100,2,83,0,41,3,122,106,70,105,110,100,32,109, + 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, + 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, + 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,112,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,102,105,110,100, + 95,109,111,100,117,108,101,40,41,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, + 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, + 110,32,80,121,116,104,111,110,32,51,46,49,50,59,32,117, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,78,169,5,114,99,0,0,0,114,100, + 0,0,0,114,101,0,0,0,114,226,0,0,0,114,164,0, + 0,0,169,4,114,221,0,0,0,114,163,0,0,0,114,65, + 0,0,0,114,210,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,218,11,102,105,110,100,95,109,111, + 100,117,108,101,75,3,0,0,115,14,0,0,0,6,7,2, + 2,4,254,12,3,8,1,6,1,4,2,122,33,87,105,110, 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, - 116,114,121,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,8,0,0,0,8,0,0,0,67,0,0,0,115,120,0, - 0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0, - 117,0,114,11,100,0,83,0,122,6,116,1,124,4,131,1, - 1,0,87,0,110,9,4,0,116,2,121,59,1,0,1,0, - 1,0,89,0,100,0,83,0,116,3,131,0,68,0,93,26, - 92,2,125,5,125,6,124,4,160,4,116,5,124,6,131,1, - 161,1,114,56,116,6,106,7,124,1,124,5,124,1,124,4, - 131,2,124,4,100,1,141,3,125,7,124,7,2,0,1,0, - 83,0,113,30,100,0,83,0,119,0,41,2,78,114,204,0, - 0,0,41,8,114,223,0,0,0,114,75,0,0,0,114,76, - 0,0,0,114,208,0,0,0,114,58,0,0,0,114,136,0, - 0,0,114,159,0,0,0,218,16,115,112,101,99,95,102,114, - 111,109,95,108,111,97,100,101,114,41,8,114,221,0,0,0, - 114,163,0,0,0,114,65,0,0,0,218,6,116,97,114,103, - 101,116,114,222,0,0,0,114,164,0,0,0,114,212,0,0, - 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,9,102,105,110,100,95,115,112,101,99, - 59,3,0,0,115,34,0,0,0,10,2,8,1,4,1,2, - 1,12,1,12,1,6,1,14,1,14,1,6,1,8,1,2, - 1,6,254,8,3,2,252,4,255,2,254,122,31,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,67,0,0,0,115,42,0,0,0,116,0,160,1,100,1, - 116,2,161,2,1,0,124,0,160,3,124,1,124,2,161,2, - 125,3,124,3,100,2,117,1,114,19,124,3,106,4,83,0, - 100,2,83,0,41,3,122,106,70,105,110,100,32,109,111,100, - 117,108,101,32,110,97,109,101,100,32,105,110,32,116,104,101, - 32,114,101,103,105,115,116,114,121,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, - 32,32,122,112,87,105,110,100,111,119,115,82,101,103,105,115, - 116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,109, - 111,100,117,108,101,40,41,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, - 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, - 80,121,116,104,111,110,32,51,46,49,50,59,32,117,115,101, - 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,78,169,5,114,99,0,0,0,114,100,0,0, - 0,114,101,0,0,0,114,226,0,0,0,114,164,0,0,0, - 169,4,114,221,0,0,0,114,163,0,0,0,114,65,0,0, - 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,218,11,102,105,110,100,95,109,111,100,117, - 108,101,75,3,0,0,115,14,0,0,0,6,7,2,2,4, - 254,12,3,8,1,6,1,4,2,122,33,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,169,2,78,78, - 114,69,0,0,0,41,15,114,150,0,0,0,114,149,0,0, - 0,114,151,0,0,0,114,152,0,0,0,114,219,0,0,0, - 114,218,0,0,0,218,11,95,77,83,95,87,73,78,68,79, - 87,83,218,18,69,88,84,69,78,83,73,79,78,95,83,85, - 70,70,73,88,69,83,114,217,0,0,0,218,12,115,116,97, - 116,105,99,109,101,116,104,111,100,114,216,0,0,0,218,11, - 99,108,97,115,115,109,101,116,104,111,100,114,223,0,0,0, - 114,226,0,0,0,114,229,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,214, - 0,0,0,25,3,0,0,115,30,0,0,0,8,0,4,2, - 2,3,2,255,2,4,2,255,12,3,2,2,10,1,2,6, - 10,1,2,14,12,1,2,15,16,1,114,214,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,64,0,0,0,115,48,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, - 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, - 6,100,8,100,9,132,0,90,7,100,10,83,0,41,11,218, - 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, - 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, - 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, - 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, - 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, - 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,4,0,0,0,67,0,0,0,115,64,0,0, - 0,116,0,124,0,160,1,124,1,161,1,131,1,100,1,25, - 0,125,2,124,2,160,2,100,2,100,1,161,2,100,3,25, - 0,125,3,124,1,160,3,100,2,161,1,100,4,25,0,125, - 4,124,3,100,5,107,2,111,31,124,4,100,5,107,3,83, - 0,41,7,122,141,67,111,110,99,114,101,116,101,32,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, - 73,110,115,112,101,99,116,76,111,97,100,101,114,46,105,115, - 95,112,97,99,107,97,103,101,32,98,121,32,99,104,101,99, - 107,105,110,103,32,105,102,10,32,32,32,32,32,32,32,32, - 116,104,101,32,112,97,116,104,32,114,101,116,117,114,110,101, - 100,32,98,121,32,103,101,116,95,102,105,108,101,110,97,109, - 101,32,104,97,115,32,97,32,102,105,108,101,110,97,109,101, - 32,111,102,32,39,95,95,105,110,105,116,95,95,46,112,121, - 39,46,114,3,0,0,0,114,97,0,0,0,114,0,0,0, - 0,114,44,0,0,0,218,8,95,95,105,110,105,116,95,95, - 78,41,4,114,74,0,0,0,114,203,0,0,0,114,125,0, - 0,0,114,104,0,0,0,41,5,114,143,0,0,0,114,163, - 0,0,0,114,120,0,0,0,90,13,102,105,108,101,110,97, - 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, - 109,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,206,0,0,0,97,3,0,0,115,8,0,0,0,18, - 3,16,1,14,1,16,1,122,24,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,114,23,0,0,0,169, - 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, - 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, - 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,7, - 0,0,0,169,2,114,143,0,0,0,114,210,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,105,3,0, - 0,243,2,0,0,0,4,0,122,27,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,56, - 0,0,0,124,0,160,0,124,1,106,1,161,1,125,2,124, - 2,100,1,117,0,114,18,116,2,100,2,160,3,124,1,106, - 1,161,1,131,1,130,1,116,4,160,5,116,6,124,2,124, - 1,106,7,161,3,1,0,100,1,83,0,41,3,122,19,69, - 120,101,99,117,116,101,32,116,104,101,32,109,111,100,117,108, - 101,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100, - 32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101, - 110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116, - 117,114,110,115,32,78,111,110,101,41,8,218,8,103,101,116, - 95,99,111,100,101,114,150,0,0,0,114,142,0,0,0,114, - 89,0,0,0,114,159,0,0,0,218,25,95,99,97,108,108, - 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, - 111,118,101,100,218,4,101,120,101,99,114,156,0,0,0,41, - 3,114,143,0,0,0,218,6,109,111,100,117,108,101,114,188, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,11,101,120,101,99,95,109,111,100,117,108,101,108, - 3,0,0,115,12,0,0,0,12,2,8,1,4,1,8,1, - 4,255,20,2,122,25,95,76,111,97,100,101,114,66,97,115, - 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, - 1,124,0,124,1,161,2,83,0,41,2,122,26,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,78,41,2,114,159,0,0,0,218, - 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, - 105,109,169,2,114,143,0,0,0,114,163,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,108, - 111,97,100,95,109,111,100,117,108,101,116,3,0,0,115,2, - 0,0,0,12,3,122,25,95,76,111,97,100,101,114,66,97, - 115,105,99,115,46,108,111,97,100,95,109,111,100,117,108,101, - 78,41,8,114,150,0,0,0,114,149,0,0,0,114,151,0, - 0,0,114,152,0,0,0,114,206,0,0,0,114,239,0,0, - 0,114,245,0,0,0,114,248,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 235,0,0,0,92,3,0,0,115,12,0,0,0,8,0,4, - 2,8,3,8,8,8,3,12,8,114,235,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,64,0,0,0,115,74,0,0,0,101,0,90,1, - 100,0,90,2,100,1,100,2,132,0,90,3,100,3,100,4, - 132,0,90,4,100,5,100,6,132,0,90,5,100,7,100,8, - 132,0,90,6,100,9,100,10,132,0,90,7,100,11,100,12, - 156,1,100,13,100,14,132,2,90,8,100,15,100,16,132,0, - 90,9,100,17,83,0,41,18,218,12,83,111,117,114,99,101, - 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 4,0,0,0,116,0,130,1,41,2,122,165,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, - 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, - 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, - 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, - 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, - 32,78,41,1,114,76,0,0,0,169,2,114,143,0,0,0, - 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, - 124,3,0,0,115,2,0,0,0,4,6,122,23,83,111,117, - 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, - 116,105,109,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,14,0, - 0,0,100,1,124,0,160,0,124,1,161,1,105,1,83,0, - 41,3,97,158,1,0,0,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,114,101,116,117,114,110,105,110,103, - 32,97,32,109,101,116,97,100,97,116,97,32,100,105,99,116, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,10,32,32,32,32,32,32,32,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,80,111,115,115,105,98,108,101,32,107,101,121,115,58, - 10,32,32,32,32,32,32,32,32,45,32,39,109,116,105,109, - 101,39,32,40,109,97,110,100,97,116,111,114,121,41,32,105, - 115,32,116,104,101,32,110,117,109,101,114,105,99,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,108,97,115,116,32, - 115,111,117,114,99,101,10,32,32,32,32,32,32,32,32,32, - 32,99,111,100,101,32,109,111,100,105,102,105,99,97,116,105, - 111,110,59,10,32,32,32,32,32,32,32,32,45,32,39,115, - 105,122,101,39,32,40,111,112,116,105,111,110,97,108,41,32, - 105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98, - 121,116,101,115,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,116,104,101,32,108,111,97,100,101,114,32,116,111,32, - 114,101,97,100,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,32,32,32,32,32,32,32,32,82,97,105, - 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, - 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, - 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, - 32,32,32,32,32,114,193,0,0,0,78,41,1,114,251,0, - 0,0,114,250,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,10,112,97,116,104,95,115,116,97, - 116,115,132,3,0,0,115,2,0,0,0,14,12,122,23,83, - 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, - 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, - 12,0,0,0,124,0,160,0,124,2,124,3,161,2,83,0, - 41,2,122,228,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, - 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, - 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, - 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, - 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, - 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, - 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, - 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,115, - 111,117,114,99,101,32,112,97,116,104,32,105,115,32,110,101, - 101,100,101,100,32,105,110,32,111,114,100,101,114,32,116,111, - 32,99,111,114,114,101,99,116,108,121,32,116,114,97,110,115, - 102,101,114,32,112,101,114,109,105,115,115,105,111,110,115,10, - 32,32,32,32,32,32,32,32,78,41,1,218,8,115,101,116, - 95,100,97,116,97,41,4,114,143,0,0,0,114,134,0,0, - 0,90,10,99,97,99,104,101,95,112,97,116,104,114,41,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,15,95,99,97,99,104,101,95,98,121,116,101,99,111, - 100,101,146,3,0,0,115,2,0,0,0,12,8,122,28,83, - 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, - 104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0, - 67,0,0,0,114,23,0,0,0,41,2,122,150,79,112,116, - 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, - 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, - 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, - 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, - 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, - 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, - 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, - 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, - 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, - 32,32,32,78,114,7,0,0,0,41,3,114,143,0,0,0, - 114,65,0,0,0,114,41,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,253,0,0,0,156,3, - 0,0,114,240,0,0,0,122,21,83,111,117,114,99,101,76, - 111,97,100,101,114,46,115,101,116,95,100,97,116,97,99,2, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,10, - 0,0,0,67,0,0,0,115,70,0,0,0,124,0,160,0, - 124,1,161,1,125,2,122,10,124,0,160,1,124,2,161,1, - 125,3,87,0,116,4,124,3,131,1,83,0,4,0,116,2, - 121,34,1,0,125,4,1,0,122,7,116,3,100,1,124,1, - 100,2,141,2,124,4,130,2,100,3,125,4,126,4,119,1, - 119,0,41,4,122,52,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103, - 101,116,95,115,111,117,114,99,101,46,122,39,115,111,117,114, - 99,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101, - 32,116,104,114,111,117,103,104,32,103,101,116,95,100,97,116, - 97,40,41,114,140,0,0,0,78,41,5,114,203,0,0,0, - 218,8,103,101,116,95,100,97,116,97,114,76,0,0,0,114, - 142,0,0,0,114,200,0,0,0,41,5,114,143,0,0,0, - 114,163,0,0,0,114,65,0,0,0,114,198,0,0,0,218, - 3,101,120,99,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,163, - 3,0,0,115,24,0,0,0,10,2,2,1,12,1,8,4, - 14,253,4,1,2,1,4,255,2,1,2,255,8,128,2,255, - 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,103, - 101,116,95,115,111,117,114,99,101,114,130,0,0,0,41,1, - 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0, - 67,0,0,0,115,22,0,0,0,116,0,106,1,116,2,124, - 1,124,2,100,1,100,2,124,3,100,3,141,6,83,0,41, - 5,122,130,82,101,116,117,114,110,32,116,104,101,32,99,111, - 100,101,32,111,98,106,101,99,116,32,99,111,109,112,105,108, - 101,100,32,102,114,111,109,32,115,111,117,114,99,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,101,32,39,100,97, - 116,97,39,32,97,114,103,117,109,101,110,116,32,99,97,110, - 32,98,101,32,97,110,121,32,111,98,106,101,99,116,32,116, - 121,112,101,32,116,104,97,116,32,99,111,109,112,105,108,101, - 40,41,32,115,117,112,112,111,114,116,115,46,10,32,32,32, - 32,32,32,32,32,114,243,0,0,0,84,41,2,218,12,100, - 111,110,116,95,105,110,104,101,114,105,116,114,108,0,0,0, - 78,41,3,114,159,0,0,0,114,242,0,0,0,218,7,99, - 111,109,112,105,108,101,41,4,114,143,0,0,0,114,41,0, - 0,0,114,65,0,0,0,114,2,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,14,115,111,117, - 114,99,101,95,116,111,95,99,111,100,101,173,3,0,0,115, - 6,0,0,0,12,5,4,1,6,255,122,27,83,111,117,114, - 99,101,76,111,97,100,101,114,46,115,111,117,114,99,101,95, - 116,111,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,15,0,0,0,9,0,0,0,67,0,0,0, - 115,12,2,0,0,124,0,160,0,124,1,161,1,125,2,100, - 1,125,3,100,1,125,4,100,1,125,5,100,2,125,6,100, - 3,125,7,122,6,116,1,124,2,131,1,125,8,87,0,110, - 11,4,0,116,2,144,1,121,5,1,0,1,0,1,0,100, - 1,125,8,89,0,110,143,122,7,124,0,160,3,124,2,161, - 1,125,9,87,0,110,9,4,0,116,4,144,1,121,4,1, - 0,1,0,1,0,89,0,110,126,116,5,124,9,100,4,25, - 0,131,1,125,3,122,7,124,0,160,6,124,8,161,1,125, - 10,87,0,110,9,4,0,116,4,144,1,121,3,1,0,1, - 0,1,0,89,0,110,103,124,1,124,8,100,5,156,2,125, - 11,122,71,116,7,124,10,124,1,124,11,131,3,125,12,116, - 8,124,10,131,1,100,6,100,1,133,2,25,0,125,13,124, - 12,100,7,64,0,100,8,107,3,125,6,124,6,114,138,124, - 12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,100, - 10,107,3,114,137,124,7,115,119,116,9,106,10,100,11,107, - 2,114,137,124,0,160,6,124,2,161,1,125,4,116,9,160, - 11,116,12,124,4,161,2,125,5,116,13,124,10,124,5,124, - 1,124,11,131,4,1,0,110,10,116,14,124,10,124,3,124, - 9,100,12,25,0,124,1,124,11,131,5,1,0,87,0,110, - 11,4,0,116,15,116,16,102,2,144,1,121,2,1,0,1, - 0,1,0,89,0,110,15,116,17,160,18,100,13,124,8,124, - 2,161,3,1,0,116,19,124,13,124,1,124,8,124,2,100, - 14,141,4,83,0,124,4,100,1,117,0,114,185,124,0,160, - 6,124,2,161,1,125,4,124,0,160,20,124,4,124,2,161, - 2,125,14,116,17,160,18,100,15,124,2,161,2,1,0,116, - 21,106,22,115,255,124,8,100,1,117,1,114,255,124,3,100, - 1,117,1,114,255,124,6,114,226,124,5,100,1,117,0,114, - 219,116,9,160,11,124,4,161,1,125,5,116,23,124,14,124, - 5,124,7,131,3,125,10,110,8,116,24,124,14,124,3,116, - 25,124,4,131,1,131,3,125,10,122,10,124,0,160,26,124, - 2,124,8,124,10,161,3,1,0,87,0,124,14,83,0,4, - 0,116,2,144,1,121,1,1,0,1,0,1,0,89,0,124, - 14,83,0,124,14,83,0,119,0,119,0,119,0,119,0,119, - 0,41,16,122,190,67,111,110,99,114,101,116,101,32,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, - 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, - 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, - 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, - 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, - 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, - 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, - 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, - 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, - 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, - 32,32,32,78,70,84,114,193,0,0,0,114,183,0,0,0, - 114,169,0,0,0,114,3,0,0,0,114,0,0,0,0,114, - 44,0,0,0,90,5,110,101,118,101,114,90,6,97,108,119, - 97,121,115,218,4,115,105,122,101,122,13,123,125,32,109,97, - 116,99,104,101,115,32,123,125,41,3,114,141,0,0,0,114, - 132,0,0,0,114,134,0,0,0,122,19,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,125,41,27, - 114,203,0,0,0,114,121,0,0,0,114,107,0,0,0,114, - 252,0,0,0,114,76,0,0,0,114,33,0,0,0,114,255, - 0,0,0,114,176,0,0,0,218,10,109,101,109,111,114,121, - 118,105,101,119,114,187,0,0,0,90,21,99,104,101,99,107, - 95,104,97,115,104,95,98,97,115,101,100,95,112,121,99,115, - 114,181,0,0,0,218,17,95,82,65,87,95,77,65,71,73, - 67,95,78,85,77,66,69,82,114,182,0,0,0,114,180,0, - 0,0,114,142,0,0,0,114,174,0,0,0,114,159,0,0, - 0,114,173,0,0,0,114,189,0,0,0,114,5,1,0,0, - 114,15,0,0,0,218,19,100,111,110,116,95,119,114,105,116, - 101,95,98,121,116,101,99,111,100,101,114,195,0,0,0,114, - 194,0,0,0,114,4,0,0,0,114,254,0,0,0,41,15, - 114,143,0,0,0,114,163,0,0,0,114,134,0,0,0,114, - 178,0,0,0,114,198,0,0,0,114,181,0,0,0,90,10, - 104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99, - 107,95,115,111,117,114,99,101,114,132,0,0,0,218,2,115, - 116,114,41,0,0,0,114,175,0,0,0,114,16,0,0,0, - 90,10,98,121,116,101,115,95,100,97,116,97,90,11,99,111, - 100,101,95,111,98,106,101,99,116,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,241,0,0,0,181,3,0, - 0,115,168,0,0,0,10,7,4,1,4,1,4,1,4,1, - 4,1,2,1,12,1,14,1,8,1,2,2,14,1,14,1, - 4,1,12,2,2,1,14,1,14,1,4,1,2,3,2,1, - 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, - 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, - 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, - 6,1,2,1,2,1,4,251,4,128,18,7,4,1,8,2, - 2,1,4,255,6,2,2,1,2,1,6,254,8,3,10,1, - 12,1,12,1,14,1,6,1,2,255,4,2,8,1,10,1, - 14,1,6,2,6,1,4,255,2,2,16,1,4,3,14,254, - 2,1,8,1,2,254,2,233,2,225,2,250,2,251,122,21, - 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,78,41,10,114,150,0,0,0,114,149,0, - 0,0,114,151,0,0,0,114,251,0,0,0,114,252,0,0, - 0,114,254,0,0,0,114,253,0,0,0,114,1,1,0,0, - 114,5,1,0,0,114,241,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,249, - 0,0,0,122,3,0,0,115,16,0,0,0,8,0,8,2, - 8,8,8,14,8,10,8,7,14,10,12,8,114,249,0,0, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,169,2, + 78,78,114,69,0,0,0,41,15,114,150,0,0,0,114,149, + 0,0,0,114,151,0,0,0,114,152,0,0,0,114,219,0, + 0,0,114,218,0,0,0,218,11,95,77,83,95,87,73,78, + 68,79,87,83,218,18,69,88,84,69,78,83,73,79,78,95, + 83,85,70,70,73,88,69,83,114,217,0,0,0,218,12,115, + 116,97,116,105,99,109,101,116,104,111,100,114,216,0,0,0, + 218,11,99,108,97,115,115,109,101,116,104,111,100,114,223,0, + 0,0,114,226,0,0,0,114,229,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,214,0,0,0,25,3,0,0,115,30,0,0,0,8,0, + 4,2,2,3,2,255,2,4,2,255,12,3,2,2,10,1, + 2,6,10,1,2,14,12,1,2,15,16,1,114,214,0,0, 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,0,0,0,0,115,92,0,0,0,101, + 0,0,2,0,0,0,64,0,0,0,115,48,0,0,0,101, 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, - 0,90,6,101,7,135,0,102,1,100,8,100,9,132,8,131, - 1,90,8,101,7,100,10,100,11,132,0,131,1,90,9,100, - 12,100,13,132,0,90,10,101,7,100,14,100,15,132,0,131, - 1,90,11,135,0,4,0,90,12,83,0,41,16,218,10,70, - 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, - 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, - 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, - 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, - 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, - 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, - 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, - 101,46,99,3,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, - 124,1,124,0,95,0,124,2,124,0,95,1,100,1,83,0, - 41,2,122,75,67,97,99,104,101,32,116,104,101,32,109,111, - 100,117,108,101,32,110,97,109,101,32,97,110,100,32,116,104, - 101,32,112,97,116,104,32,116,111,32,116,104,101,32,102,105, - 108,101,32,102,111,117,110,100,32,98,121,32,116,104,101,10, - 32,32,32,32,32,32,32,32,102,105,110,100,101,114,46,78, - 114,183,0,0,0,41,3,114,143,0,0,0,114,163,0,0, - 0,114,65,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,236,0,0,0,15,4,0,0,115,4, - 0,0,0,6,3,10,1,122,19,70,105,108,101,76,111,97, - 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, - 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,2, - 83,0,114,69,0,0,0,169,2,218,9,95,95,99,108,97, - 115,115,95,95,114,156,0,0,0,169,2,114,143,0,0,0, - 90,5,111,116,104,101,114,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,6,95,95,101,113,95,95,21,4, - 0,0,243,6,0,0,0,12,1,10,1,2,255,122,17,70, - 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,243,20,0,0,0,116,0, - 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, - 83,0,114,69,0,0,0,169,3,218,4,104,97,115,104,114, - 141,0,0,0,114,65,0,0,0,169,1,114,143,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 8,95,95,104,97,115,104,95,95,25,4,0,0,243,2,0, - 0,0,20,1,122,19,70,105,108,101,76,111,97,100,101,114, - 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, - 0,0,115,16,0,0,0,116,0,116,1,124,0,131,2,160, - 2,124,1,161,1,83,0,41,2,122,100,76,111,97,100,32, - 97,32,109,111,100,117,108,101,32,102,114,111,109,32,97,32, - 102,105,108,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, - 41,3,218,5,115,117,112,101,114,114,11,1,0,0,114,248, - 0,0,0,114,247,0,0,0,169,1,114,14,1,0,0,114, - 7,0,0,0,114,8,0,0,0,114,248,0,0,0,28,4, - 0,0,115,2,0,0,0,16,10,122,22,70,105,108,101,76, - 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,243,6,0,0,0,124, - 0,106,0,83,0,169,2,122,58,82,101,116,117,114,110,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, - 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, - 101,114,46,78,114,71,0,0,0,114,247,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,203,0, - 0,0,40,4,0,0,243,2,0,0,0,6,3,122,23,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, - 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115, - 128,0,0,0,116,0,124,0,116,1,116,2,102,2,131,2, - 114,36,116,3,160,4,116,5,124,1,131,1,161,1,143,12, - 125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,0, - 4,0,131,3,1,0,83,0,49,0,115,29,119,1,1,0, - 1,0,1,0,89,0,1,0,100,1,83,0,116,3,160,7, - 124,1,100,2,161,2,143,12,125,2,124,2,160,6,161,0, - 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0, - 49,0,115,57,119,1,1,0,1,0,1,0,89,0,1,0, - 100,1,83,0,41,3,122,39,82,101,116,117,114,110,32,116, - 104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,116, - 104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,78, - 218,1,114,41,8,114,185,0,0,0,114,249,0,0,0,218, - 19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,114,91,0,0,0,90,9,111,112,101,110,95, - 99,111,100,101,114,109,0,0,0,90,4,114,101,97,100,114, - 92,0,0,0,41,3,114,143,0,0,0,114,65,0,0,0, - 114,94,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,255,0,0,0,45,4,0,0,115,14,0, - 0,0,14,2,16,1,22,1,20,128,14,2,22,1,20,128, - 122,19,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,100,97,116,97,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,20, - 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, - 2,124,0,131,1,83,0,41,3,78,114,0,0,0,0,41, - 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, - 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, - 114,115,114,31,1,0,0,41,3,114,143,0,0,0,114,244, - 0,0,0,114,31,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,19,103,101,116,95,114,101,115, - 111,117,114,99,101,95,114,101,97,100,101,114,54,4,0,0, - 115,4,0,0,0,12,2,8,1,122,30,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,114,101,115,111,117,114, - 99,101,95,114,101,97,100,101,114,41,13,114,150,0,0,0, - 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, - 236,0,0,0,114,16,1,0,0,114,22,1,0,0,114,160, - 0,0,0,114,248,0,0,0,114,203,0,0,0,114,255,0, - 0,0,114,33,1,0,0,90,13,95,95,99,108,97,115,115, - 99,101,108,108,95,95,114,7,0,0,0,114,7,0,0,0, - 114,25,1,0,0,114,8,0,0,0,114,11,1,0,0,10, - 4,0,0,115,24,0,0,0,8,0,4,2,8,3,8,6, - 8,4,2,3,14,1,2,11,10,1,8,4,2,9,18,1, - 114,11,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,46, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,156,1,100,8,100,9,132,2,90,6,100,10,83, - 0,41,11,218,16,83,111,117,114,99,101,70,105,108,101,76, - 111,97,100,101,114,122,62,67,111,110,99,114,101,116,101,32, + 0,90,6,100,8,100,9,132,0,90,7,100,10,83,0,41, + 11,218,13,95,76,111,97,100,101,114,66,97,115,105,99,115, + 122,83,66,97,115,101,32,99,108,97,115,115,32,111,102,32, + 99,111,109,109,111,110,32,99,111,100,101,32,110,101,101,100, + 101,100,32,98,121,32,98,111,116,104,32,83,111,117,114,99, + 101,76,111,97,100,101,114,32,97,110,100,10,32,32,32,32, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,64, + 0,0,0,116,0,124,0,160,1,124,1,161,1,131,1,100, + 1,25,0,125,2,124,2,160,2,100,2,100,1,161,2,100, + 3,25,0,125,3,124,1,160,3,100,2,161,1,100,4,25, + 0,125,4,124,3,100,5,107,2,111,31,124,4,100,5,107, + 3,83,0,41,7,122,141,67,111,110,99,114,101,116,101,32, 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, - 102,32,83,111,117,114,99,101,76,111,97,100,101,114,32,117, - 115,105,110,103,32,116,104,101,32,102,105,108,101,32,115,121, - 115,116,101,109,46,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,22, - 0,0,0,116,0,124,1,131,1,125,2,124,2,106,1,124, - 2,106,2,100,1,156,2,83,0,41,3,122,33,82,101,116, - 117,114,110,32,116,104,101,32,109,101,116,97,100,97,116,97, - 32,102,111,114,32,116,104,101,32,112,97,116,104,46,41,2, - 114,193,0,0,0,114,6,1,0,0,78,41,3,114,75,0, - 0,0,218,8,115,116,95,109,116,105,109,101,90,7,115,116, - 95,115,105,122,101,41,3,114,143,0,0,0,114,65,0,0, - 0,114,10,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,252,0,0,0,64,4,0,0,115,4, - 0,0,0,8,2,14,1,122,27,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115, - 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,24,0, - 0,0,116,0,124,1,131,1,125,4,124,0,106,1,124,2, - 124,3,124,4,100,1,141,3,83,0,41,2,78,169,1,218, - 5,95,109,111,100,101,41,2,114,139,0,0,0,114,253,0, - 0,0,41,5,114,143,0,0,0,114,134,0,0,0,114,132, - 0,0,0,114,41,0,0,0,114,78,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,254,0,0, - 0,69,4,0,0,115,4,0,0,0,8,2,16,1,122,32, - 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, - 46,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, - 114,87,0,0,0,114,36,1,0,0,99,3,0,0,0,0, - 0,0,0,1,0,0,0,9,0,0,0,11,0,0,0,67, - 0,0,0,115,254,0,0,0,116,0,124,1,131,1,92,2, - 125,4,125,5,103,0,125,6,124,4,114,31,116,1,124,4, - 131,1,115,31,116,0,124,4,131,1,92,2,125,4,125,7, - 124,6,160,2,124,7,161,1,1,0,124,4,114,31,116,1, - 124,4,131,1,114,14,116,3,124,6,131,1,68,0,93,48, - 125,7,116,4,124,4,124,7,131,2,125,4,122,7,116,5, - 160,6,124,4,161,1,1,0,87,0,113,35,4,0,116,7, - 121,58,1,0,1,0,1,0,89,0,113,35,4,0,116,8, - 121,126,1,0,125,8,1,0,122,15,116,9,160,10,100,1, - 124,4,124,8,161,3,1,0,87,0,89,0,100,2,125,8, - 126,8,1,0,100,2,83,0,100,2,125,8,126,8,119,1, - 122,15,116,11,124,1,124,2,124,3,131,3,1,0,116,9, - 160,10,100,3,124,1,161,2,1,0,87,0,100,2,83,0, - 4,0,116,8,121,125,1,0,125,8,1,0,122,14,116,9, - 160,10,100,1,124,1,124,8,161,3,1,0,87,0,89,0, - 100,2,125,8,126,8,100,2,83,0,100,2,125,8,126,8, - 119,1,119,0,119,0,41,4,122,27,87,114,105,116,101,32, - 98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,32, - 102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,116, - 32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,33, - 114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,114, - 125,41,12,114,74,0,0,0,114,83,0,0,0,114,61,0, - 0,0,218,8,114,101,118,101,114,115,101,100,114,67,0,0, - 0,114,18,0,0,0,90,5,109,107,100,105,114,218,15,70, - 105,108,101,69,120,105,115,116,115,69,114,114,111,114,114,76, - 0,0,0,114,159,0,0,0,114,173,0,0,0,114,95,0, - 0,0,41,9,114,143,0,0,0,114,65,0,0,0,114,41, - 0,0,0,114,37,1,0,0,218,6,112,97,114,101,110,116, - 114,120,0,0,0,114,63,0,0,0,114,68,0,0,0,114, - 0,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,253,0,0,0,74,4,0,0,115,56,0,0, - 0,12,2,4,1,12,2,12,1,10,1,12,254,12,4,10, - 1,2,1,14,1,12,1,4,2,14,1,6,3,4,1,4, - 255,16,2,8,128,2,1,12,1,18,1,14,1,8,2,2, - 1,18,255,8,128,2,254,2,247,122,25,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,46,115,101,116,95, - 100,97,116,97,78,41,7,114,150,0,0,0,114,149,0,0, - 0,114,151,0,0,0,114,152,0,0,0,114,252,0,0,0, - 114,254,0,0,0,114,253,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,34, - 1,0,0,60,4,0,0,115,10,0,0,0,8,0,4,2, - 8,2,8,5,18,5,114,34,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 64,0,0,0,115,32,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,83,0,41,7,218,20,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,122,45,76,111,97,100,101,114,32,119,104,105,99,104,32, - 104,97,110,100,108,101,115,32,115,111,117,114,99,101,108,101, - 115,115,32,102,105,108,101,32,105,109,112,111,114,116,115,46, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 105,115,95,112,97,99,107,97,103,101,32,98,121,32,99,104, + 101,99,107,105,110,103,32,105,102,10,32,32,32,32,32,32, + 32,32,116,104,101,32,112,97,116,104,32,114,101,116,117,114, + 110,101,100,32,98,121,32,103,101,116,95,102,105,108,101,110, + 97,109,101,32,104,97,115,32,97,32,102,105,108,101,110,97, + 109,101,32,111,102,32,39,95,95,105,110,105,116,95,95,46, + 112,121,39,46,114,3,0,0,0,114,97,0,0,0,114,0, + 0,0,0,114,44,0,0,0,218,8,95,95,105,110,105,116, + 95,95,78,41,4,114,74,0,0,0,114,203,0,0,0,114, + 125,0,0,0,114,104,0,0,0,41,5,114,143,0,0,0, + 114,163,0,0,0,114,120,0,0,0,90,13,102,105,108,101, + 110,97,109,101,95,98,97,115,101,90,9,116,97,105,108,95, + 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,206,0,0,0,97,3,0,0,115,8,0,0, + 0,18,3,16,1,14,1,16,1,122,24,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, + 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, + 0,169,2,122,42,85,115,101,32,100,101,102,97,117,108,116, + 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, + 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, + 114,7,0,0,0,169,2,114,143,0,0,0,114,210,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,105, + 3,0,0,243,2,0,0,0,4,0,122,27,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, + 115,56,0,0,0,124,0,160,0,124,1,106,1,161,1,125, + 2,124,2,100,1,117,0,114,18,116,2,100,2,160,3,124, + 1,106,1,161,1,131,1,130,1,116,4,160,5,116,6,124, + 2,124,1,106,7,161,3,1,0,100,1,83,0,41,3,122, + 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, + 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, + 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, + 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, + 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, + 101,116,95,99,111,100,101,114,150,0,0,0,114,142,0,0, + 0,114,89,0,0,0,114,159,0,0,0,218,25,95,99,97, + 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, + 101,109,111,118,101,100,218,4,101,120,101,99,114,156,0,0, + 0,41,3,114,143,0,0,0,218,6,109,111,100,117,108,101, + 114,188,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, + 101,108,3,0,0,115,12,0,0,0,12,2,8,1,4,1, + 8,1,4,255,20,2,122,25,95,76,111,97,100,101,114,66, + 97,115,105,99,115,46,101,120,101,99,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,160,1,124,0,124,1,161,2,83,0,41,2,122,26,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,78,41,2,114,159,0,0, + 0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,95, + 115,104,105,109,169,2,114,143,0,0,0,114,163,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 11,108,111,97,100,95,109,111,100,117,108,101,116,3,0,0, + 115,2,0,0,0,12,3,122,25,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,117, + 108,101,78,41,8,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,206,0,0,0,114,239, + 0,0,0,114,245,0,0,0,114,248,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,235,0,0,0,92,3,0,0,115,12,0,0,0,8, + 0,4,2,8,3,8,8,8,3,12,8,114,235,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,64,0,0,0,115,74,0,0,0,101,0, + 90,1,100,0,90,2,100,1,100,2,132,0,90,3,100,3, + 100,4,132,0,90,4,100,5,100,6,132,0,90,5,100,7, + 100,8,132,0,90,6,100,9,100,10,132,0,90,7,100,11, + 100,12,156,1,100,13,100,14,132,2,90,8,100,15,100,16, + 132,0,90,9,100,17,83,0,41,18,218,12,83,111,117,114, + 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,116,0,130,1,41,2,122,165,79,112, + 116,105,111,110,97,108,32,109,101,116,104,111,100,32,116,104, + 97,116,32,114,101,116,117,114,110,115,32,116,104,101,32,109, + 111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101, + 32,40,97,110,32,105,110,116,41,32,102,111,114,32,116,104, + 101,10,32,32,32,32,32,32,32,32,115,112,101,99,105,102, + 105,101,100,32,112,97,116,104,32,40,97,32,115,116,114,41, + 46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101, + 115,32,79,83,69,114,114,111,114,32,119,104,101,110,32,116, + 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, + 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, + 32,32,32,78,41,1,114,76,0,0,0,169,2,114,143,0, + 0,0,114,65,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,218,10,112,97,116,104,95,109,116,105, + 109,101,124,3,0,0,115,2,0,0,0,4,6,122,23,83, + 111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104, + 95,109,116,105,109,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 14,0,0,0,100,1,124,0,160,0,124,1,161,1,105,1, + 83,0,41,3,97,158,1,0,0,79,112,116,105,111,110,97, + 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, + 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, + 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,10,32,32,32,32,32,32,32,32,112,97,116, + 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, + 32,32,32,32,80,111,115,115,105,98,108,101,32,107,101,121, + 115,58,10,32,32,32,32,32,32,32,32,45,32,39,109,116, + 105,109,101,39,32,40,109,97,110,100,97,116,111,114,121,41, + 32,105,115,32,116,104,101,32,110,117,109,101,114,105,99,32, + 116,105,109,101,115,116,97,109,112,32,111,102,32,108,97,115, + 116,32,115,111,117,114,99,101,10,32,32,32,32,32,32,32, + 32,32,32,99,111,100,101,32,109,111,100,105,102,105,99,97, + 116,105,111,110,59,10,32,32,32,32,32,32,32,32,45,32, + 39,115,105,122,101,39,32,40,111,112,116,105,111,110,97,108, + 41,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110, + 32,98,121,116,101,115,32,111,102,32,116,104,101,32,115,111, + 117,114,99,101,32,99,111,100,101,46,10,10,32,32,32,32, + 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, + 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, + 111,119,115,32,116,104,101,32,108,111,97,100,101,114,32,116, + 111,32,114,101,97,100,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, + 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, + 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, + 32,32,32,32,32,32,32,114,193,0,0,0,78,41,1,114, + 251,0,0,0,114,250,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,10,112,97,116,104,95,115, + 116,97,116,115,132,3,0,0,115,2,0,0,0,14,12,122, + 23,83,111,117,114,99,101,76,111,97,100,101,114,46,112,97, + 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, + 0,115,12,0,0,0,124,0,160,0,124,2,124,3,161,2, + 83,0,41,2,122,228,79,112,116,105,111,110,97,108,32,109, + 101,116,104,111,100,32,119,104,105,99,104,32,119,114,105,116, + 101,115,32,100,97,116,97,32,40,98,121,116,101,115,41,32, + 116,111,32,97,32,102,105,108,101,32,112,97,116,104,32,40, + 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, + 32,73,109,112,108,101,109,101,110,116,105,110,103,32,116,104, + 105,115,32,109,101,116,104,111,100,32,97,108,108,111,119,115, + 32,102,111,114,32,116,104,101,32,119,114,105,116,105,110,103, + 32,111,102,32,98,121,116,101,99,111,100,101,32,102,105,108, + 101,115,46,10,10,32,32,32,32,32,32,32,32,84,104,101, + 32,115,111,117,114,99,101,32,112,97,116,104,32,105,115,32, + 110,101,101,100,101,100,32,105,110,32,111,114,100,101,114,32, + 116,111,32,99,111,114,114,101,99,116,108,121,32,116,114,97, + 110,115,102,101,114,32,112,101,114,109,105,115,115,105,111,110, + 115,10,32,32,32,32,32,32,32,32,78,41,1,218,8,115, + 101,116,95,100,97,116,97,41,4,114,143,0,0,0,114,134, + 0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,114, + 41,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,15,95,99,97,99,104,101,95,98,121,116,101, + 99,111,100,101,146,3,0,0,115,2,0,0,0,12,8,122, + 28,83,111,117,114,99,101,76,111,97,100,101,114,46,95,99, + 97,99,104,101,95,98,121,116,101,99,111,100,101,99,3,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,41,2,122,150,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, + 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, + 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, + 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, + 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, + 32,32,32,32,32,78,114,7,0,0,0,41,3,114,143,0, + 0,0,114,65,0,0,0,114,41,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,253,0,0,0, + 156,3,0,0,114,240,0,0,0,122,21,83,111,117,114,99, + 101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97, 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,5,0,0,0,67,0,0,0,115,68,0,0,0,124,0, - 160,0,124,1,161,1,125,2,124,0,160,1,124,2,161,1, - 125,3,124,1,124,2,100,1,156,2,125,4,116,2,124,3, - 124,1,124,4,131,3,1,0,116,3,116,4,124,3,131,1, - 100,2,100,0,133,2,25,0,124,1,124,2,100,3,141,3, - 83,0,41,4,78,114,183,0,0,0,114,169,0,0,0,41, - 2,114,141,0,0,0,114,132,0,0,0,41,5,114,203,0, - 0,0,114,255,0,0,0,114,176,0,0,0,114,189,0,0, - 0,114,7,1,0,0,41,5,114,143,0,0,0,114,163,0, - 0,0,114,65,0,0,0,114,41,0,0,0,114,175,0,0, + 0,10,0,0,0,67,0,0,0,115,70,0,0,0,124,0, + 160,0,124,1,161,1,125,2,122,10,124,0,160,1,124,2, + 161,1,125,3,87,0,116,4,124,3,131,1,83,0,4,0, + 116,2,121,34,1,0,125,4,1,0,122,7,116,3,100,1, + 124,1,100,2,141,2,124,4,130,2,100,3,125,4,126,4, + 119,1,119,0,41,4,122,52,67,111,110,99,114,101,116,101, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, + 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, + 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, + 97,116,97,40,41,114,140,0,0,0,78,41,5,114,203,0, + 0,0,218,8,103,101,116,95,100,97,116,97,114,76,0,0, + 0,114,142,0,0,0,114,200,0,0,0,41,5,114,143,0, + 0,0,114,163,0,0,0,114,65,0,0,0,114,198,0,0, + 0,218,3,101,120,99,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,10,103,101,116,95,115,111,117,114,99, + 101,163,3,0,0,115,24,0,0,0,10,2,2,1,12,1, + 8,4,14,253,4,1,2,1,4,255,2,1,2,255,8,128, + 2,255,122,23,83,111,117,114,99,101,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,114,130,0,0,0, + 41,1,218,9,95,111,112,116,105,109,105,122,101,99,3,0, + 0,0,0,0,0,0,1,0,0,0,4,0,0,0,8,0, + 0,0,67,0,0,0,115,22,0,0,0,116,0,106,1,116, + 2,124,1,124,2,100,1,100,2,124,3,100,3,141,6,83, + 0,41,5,122,130,82,101,116,117,114,110,32,116,104,101,32, + 99,111,100,101,32,111,98,106,101,99,116,32,99,111,109,112, + 105,108,101,100,32,102,114,111,109,32,115,111,117,114,99,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,39, + 100,97,116,97,39,32,97,114,103,117,109,101,110,116,32,99, + 97,110,32,98,101,32,97,110,121,32,111,98,106,101,99,116, + 32,116,121,112,101,32,116,104,97,116,32,99,111,109,112,105, + 108,101,40,41,32,115,117,112,112,111,114,116,115,46,10,32, + 32,32,32,32,32,32,32,114,243,0,0,0,84,41,2,218, + 12,100,111,110,116,95,105,110,104,101,114,105,116,114,108,0, + 0,0,78,41,3,114,159,0,0,0,114,242,0,0,0,218, + 7,99,111,109,112,105,108,101,41,4,114,143,0,0,0,114, + 41,0,0,0,114,65,0,0,0,114,2,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,218,14,115, + 111,117,114,99,101,95,116,111,95,99,111,100,101,173,3,0, + 0,115,6,0,0,0,12,5,4,1,6,255,122,27,83,111, + 117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99, + 101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,15,0,0,0,9,0,0,0,67,0, + 0,0,115,12,2,0,0,124,0,160,0,124,1,161,1,125, + 2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125, + 6,100,3,125,7,122,6,116,1,124,2,131,1,125,8,87, + 0,110,11,4,0,116,2,144,1,121,5,1,0,1,0,1, + 0,100,1,125,8,89,0,110,143,122,7,124,0,160,3,124, + 2,161,1,125,9,87,0,110,9,4,0,116,4,144,1,121, + 4,1,0,1,0,1,0,89,0,110,126,116,5,124,9,100, + 4,25,0,131,1,125,3,122,7,124,0,160,6,124,8,161, + 1,125,10,87,0,110,9,4,0,116,4,144,1,121,3,1, + 0,1,0,1,0,89,0,110,103,124,1,124,8,100,5,156, + 2,125,11,122,71,116,7,124,10,124,1,124,11,131,3,125, + 12,116,8,124,10,131,1,100,6,100,1,133,2,25,0,125, + 13,124,12,100,7,64,0,100,8,107,3,125,6,124,6,114, + 138,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, + 10,100,10,107,3,114,137,124,7,115,119,116,9,106,10,100, + 11,107,2,114,137,124,0,160,6,124,2,161,1,125,4,116, + 9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124, + 5,124,1,124,11,131,4,1,0,110,10,116,14,124,10,124, + 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87, + 0,110,11,4,0,116,15,116,16,102,2,144,1,121,2,1, + 0,1,0,1,0,89,0,110,15,116,17,160,18,100,13,124, + 8,124,2,161,3,1,0,116,19,124,13,124,1,124,8,124, + 2,100,14,141,4,83,0,124,4,100,1,117,0,114,185,124, + 0,160,6,124,2,161,1,125,4,124,0,160,20,124,4,124, + 2,161,2,125,14,116,17,160,18,100,15,124,2,161,2,1, + 0,116,21,106,22,115,255,124,8,100,1,117,1,114,255,124, + 3,100,1,117,1,114,255,124,6,114,226,124,5,100,1,117, + 0,114,219,116,9,160,11,124,4,161,1,125,5,116,23,124, + 14,124,5,124,7,131,3,125,10,110,8,116,24,124,14,124, + 3,116,25,124,4,131,1,131,3,125,10,122,10,124,0,160, + 26,124,2,124,8,124,10,161,3,1,0,87,0,124,14,83, + 0,4,0,116,2,144,1,121,1,1,0,1,0,1,0,89, + 0,124,14,83,0,124,14,83,0,119,0,119,0,119,0,119, + 0,119,0,41,16,122,190,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,97,100,105,110,103,32,111,102,32,98,121, + 116,101,99,111,100,101,32,114,101,113,117,105,114,101,115,32, + 112,97,116,104,95,115,116,97,116,115,32,116,111,32,98,101, + 32,105,109,112,108,101,109,101,110,116,101,100,46,32,84,111, + 32,119,114,105,116,101,10,32,32,32,32,32,32,32,32,98, + 121,116,101,99,111,100,101,44,32,115,101,116,95,100,97,116, + 97,32,109,117,115,116,32,97,108,115,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,10,10,32,32,32, + 32,32,32,32,32,78,70,84,114,193,0,0,0,114,183,0, + 0,0,114,169,0,0,0,114,3,0,0,0,114,0,0,0, + 0,114,44,0,0,0,90,5,110,101,118,101,114,90,6,97, + 108,119,97,121,115,218,4,115,105,122,101,122,13,123,125,32, + 109,97,116,99,104,101,115,32,123,125,41,3,114,141,0,0, + 0,114,132,0,0,0,114,134,0,0,0,122,19,99,111,100, + 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,125, + 41,27,114,203,0,0,0,114,121,0,0,0,114,107,0,0, + 0,114,252,0,0,0,114,76,0,0,0,114,33,0,0,0, + 114,255,0,0,0,114,176,0,0,0,218,10,109,101,109,111, + 114,121,118,105,101,119,114,187,0,0,0,90,21,99,104,101, + 99,107,95,104,97,115,104,95,98,97,115,101,100,95,112,121, + 99,115,114,181,0,0,0,218,17,95,82,65,87,95,77,65, + 71,73,67,95,78,85,77,66,69,82,114,182,0,0,0,114, + 180,0,0,0,114,142,0,0,0,114,174,0,0,0,114,159, + 0,0,0,114,173,0,0,0,114,189,0,0,0,114,5,1, + 0,0,114,15,0,0,0,218,19,100,111,110,116,95,119,114, + 105,116,101,95,98,121,116,101,99,111,100,101,114,195,0,0, + 0,114,194,0,0,0,114,4,0,0,0,114,254,0,0,0, + 41,15,114,143,0,0,0,114,163,0,0,0,114,134,0,0, + 0,114,178,0,0,0,114,198,0,0,0,114,181,0,0,0, + 90,10,104,97,115,104,95,98,97,115,101,100,90,12,99,104, + 101,99,107,95,115,111,117,114,99,101,114,132,0,0,0,218, + 2,115,116,114,41,0,0,0,114,175,0,0,0,114,16,0, + 0,0,90,10,98,121,116,101,115,95,100,97,116,97,90,11, + 99,111,100,101,95,111,98,106,101,99,116,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,181, + 3,0,0,115,168,0,0,0,10,7,4,1,4,1,4,1, + 4,1,4,1,2,1,12,1,14,1,8,1,2,2,14,1, + 14,1,4,1,12,2,2,1,14,1,14,1,4,1,2,3, + 2,1,6,254,2,4,12,1,16,1,12,1,4,1,12,1, + 10,1,2,1,2,255,8,2,2,254,10,3,4,1,2,1, + 2,1,4,254,8,4,2,1,4,255,2,128,2,3,2,1, + 2,1,6,1,2,1,2,1,4,251,4,128,18,7,4,1, + 8,2,2,1,4,255,6,2,2,1,2,1,6,254,8,3, + 10,1,12,1,12,1,14,1,6,1,2,255,4,2,8,1, + 10,1,14,1,6,2,6,1,4,255,2,2,16,1,4,3, + 14,254,2,1,8,1,2,254,2,233,2,225,2,250,2,251, + 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, + 101,116,95,99,111,100,101,78,41,10,114,150,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,251,0,0,0,114,252, + 0,0,0,114,254,0,0,0,114,253,0,0,0,114,1,1, + 0,0,114,5,1,0,0,114,241,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,241,0,0,0,109,4,0,0,115,22,0,0,0,10,1, - 10,1,2,4,2,1,6,254,12,4,2,1,14,1,2,1, - 2,1,6,253,122,29,83,111,117,114,99,101,108,101,115,115, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, - 0,41,2,122,39,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32, - 115,111,117,114,99,101,32,99,111,100,101,46,78,114,7,0, - 0,0,114,247,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,1,1,0,0,125,4,0,0,114, - 24,0,0,0,122,31,83,111,117,114,99,101,108,101,115,115, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,78,41,6,114,150,0,0,0,114,149,0, - 0,0,114,151,0,0,0,114,152,0,0,0,114,241,0,0, - 0,114,1,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,41,1,0,0,105, - 4,0,0,115,8,0,0,0,8,0,4,2,8,2,12,16, - 114,41,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,92, + 114,249,0,0,0,122,3,0,0,115,16,0,0,0,8,0, + 8,2,8,8,8,14,8,10,8,7,14,10,12,8,114,249, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,0,0,0,0,115,92,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,101,7,135,0,102,1,100,8,100,9,132, + 8,131,1,90,8,101,7,100,10,100,11,132,0,131,1,90, + 9,100,12,100,13,132,0,90,10,101,7,100,14,100,15,132, + 0,131,1,90,11,135,0,4,0,90,12,83,0,41,16,218, + 10,70,105,108,101,76,111,97,100,101,114,122,103,66,97,115, + 101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,108, + 97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,109, + 101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,32, + 112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,115, + 32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,114, + 101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,115, + 97,103,101,46,99,3,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,1, + 83,0,41,2,122,75,67,97,99,104,101,32,116,104,101,32, + 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, + 46,78,114,183,0,0,0,41,3,114,143,0,0,0,114,163, + 0,0,0,114,65,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,236,0,0,0,15,4,0,0, + 115,4,0,0,0,6,3,10,1,122,19,70,105,108,101,76, + 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,243,24,0,0,0,124,0,106,0, + 124,1,106,0,107,2,111,11,124,0,106,1,124,1,106,1, + 107,2,83,0,114,69,0,0,0,169,2,218,9,95,95,99, + 108,97,115,115,95,95,114,156,0,0,0,169,2,114,143,0, + 0,0,90,5,111,116,104,101,114,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,6,95,95,101,113,95,95, + 21,4,0,0,243,6,0,0,0,12,1,10,1,2,255,122, + 17,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,243,20,0,0,0, + 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, + 65,0,83,0,114,69,0,0,0,169,3,218,4,104,97,115, + 104,114,141,0,0,0,114,65,0,0,0,169,1,114,143,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,8,95,95,104,97,115,104,95,95,25,4,0,0,243, + 2,0,0,0,20,1,122,19,70,105,108,101,76,111,97,100, + 101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 3,0,0,0,115,16,0,0,0,116,0,116,1,124,0,131, + 2,160,2,124,1,161,1,83,0,41,2,122,100,76,111,97, + 100,32,97,32,109,111,100,117,108,101,32,102,114,111,109,32, + 97,32,102,105,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,3,218,5,115,117,112,101,114,114,11,1,0,0, + 114,248,0,0,0,114,247,0,0,0,169,1,114,14,1,0, + 0,114,7,0,0,0,114,8,0,0,0,114,248,0,0,0, + 28,4,0,0,115,2,0,0,0,16,10,122,22,70,105,108, + 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,243,6,0,0, + 0,124,0,106,0,83,0,169,2,122,58,82,101,116,117,114, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115, + 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105, + 110,100,101,114,46,78,114,71,0,0,0,114,247,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 203,0,0,0,40,4,0,0,243,2,0,0,0,6,3,122, + 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, + 0,115,128,0,0,0,116,0,124,0,116,1,116,2,102,2, + 131,2,114,36,116,3,160,4,116,5,124,1,131,1,161,1, + 143,12,125,2,124,2,160,6,161,0,87,0,2,0,100,1, + 4,0,4,0,131,3,1,0,83,0,49,0,115,29,119,1, + 1,0,1,0,1,0,89,0,1,0,100,1,83,0,116,3, + 160,7,124,1,100,2,161,2,143,12,125,2,124,2,160,6, + 161,0,87,0,2,0,100,1,4,0,4,0,131,3,1,0, + 83,0,49,0,115,57,119,1,1,0,1,0,1,0,89,0, + 1,0,100,1,83,0,41,3,122,39,82,101,116,117,114,110, + 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, + 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, + 46,78,218,1,114,41,8,114,185,0,0,0,114,249,0,0, + 0,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,114,91,0,0,0,90,9,111,112,101, + 110,95,99,111,100,101,114,109,0,0,0,90,4,114,101,97, + 100,114,92,0,0,0,41,3,114,143,0,0,0,114,65,0, + 0,0,114,94,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,255,0,0,0,45,4,0,0,115, + 22,0,0,0,14,2,16,1,6,1,14,255,2,1,20,255, + 14,3,6,1,14,255,2,1,20,255,122,19,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,20,0,0,0,100,1,100, + 2,108,0,109,1,125,2,1,0,124,2,124,0,131,1,83, + 0,41,3,78,114,0,0,0,0,41,1,218,10,70,105,108, + 101,82,101,97,100,101,114,41,2,218,17,105,109,112,111,114, + 116,108,105,98,46,114,101,97,100,101,114,115,114,31,1,0, + 0,41,3,114,143,0,0,0,114,244,0,0,0,114,31,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, + 114,101,97,100,101,114,54,4,0,0,115,4,0,0,0,12, + 2,8,1,122,30,70,105,108,101,76,111,97,100,101,114,46, + 103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97, + 100,101,114,41,13,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,236,0,0,0,114,16, + 1,0,0,114,22,1,0,0,114,160,0,0,0,114,248,0, + 0,0,114,203,0,0,0,114,255,0,0,0,114,33,1,0, + 0,90,13,95,95,99,108,97,115,115,99,101,108,108,95,95, + 114,7,0,0,0,114,7,0,0,0,114,25,1,0,0,114, + 8,0,0,0,114,11,1,0,0,10,4,0,0,115,24,0, + 0,0,8,0,4,2,8,3,8,6,8,4,2,3,14,1, + 2,11,10,1,8,4,2,9,18,1,114,11,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,64,0,0,0,115,46,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,100,6,100,7,156,1,100, + 8,100,9,132,2,90,6,100,10,83,0,41,11,218,16,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,122, + 62,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,83,111,117,114, + 99,101,76,111,97,100,101,114,32,117,115,105,110,103,32,116, + 104,101,32,102,105,108,101,32,115,121,115,116,101,109,46,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,67,0,0,0,115,22,0,0,0,116,0,124, + 1,131,1,125,2,124,2,106,1,124,2,106,2,100,1,156, + 2,83,0,41,3,122,33,82,101,116,117,114,110,32,116,104, + 101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,116, + 104,101,32,112,97,116,104,46,41,2,114,193,0,0,0,114, + 6,1,0,0,78,41,3,114,75,0,0,0,218,8,115,116, + 95,109,116,105,109,101,90,7,115,116,95,115,105,122,101,41, + 3,114,143,0,0,0,114,65,0,0,0,114,10,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 252,0,0,0,64,4,0,0,115,4,0,0,0,8,2,14, + 1,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97, + 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1, + 131,1,125,4,124,0,106,1,124,2,124,3,124,4,100,1, + 141,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101, + 41,2,114,139,0,0,0,114,253,0,0,0,41,5,114,143, + 0,0,0,114,134,0,0,0,114,132,0,0,0,114,41,0, + 0,0,114,78,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,254,0,0,0,69,4,0,0,115, + 4,0,0,0,8,2,16,1,122,32,83,111,117,114,99,101, + 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, + 101,95,98,121,116,101,99,111,100,101,114,87,0,0,0,114, + 36,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, + 0,9,0,0,0,11,0,0,0,67,0,0,0,115,254,0, + 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0, + 125,6,124,4,114,31,116,1,124,4,131,1,115,31,116,0, + 124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7, + 161,1,1,0,124,4,114,31,116,1,124,4,131,1,114,14, + 116,3,124,6,131,1,68,0,93,48,125,7,116,4,124,4, + 124,7,131,2,125,4,122,7,116,5,160,6,124,4,161,1, + 1,0,87,0,113,35,4,0,116,7,121,58,1,0,1,0, + 1,0,89,0,113,35,4,0,116,8,121,126,1,0,125,8, + 1,0,122,15,116,9,160,10,100,1,124,4,124,8,161,3, + 1,0,87,0,89,0,100,2,125,8,126,8,1,0,100,2, + 83,0,100,2,125,8,126,8,119,1,122,15,116,11,124,1, + 124,2,124,3,131,3,1,0,116,9,160,10,100,3,124,1, + 161,2,1,0,87,0,100,2,83,0,4,0,116,8,121,125, + 1,0,125,8,1,0,122,14,116,9,160,10,100,1,124,1, + 124,8,161,3,1,0,87,0,89,0,100,2,125,8,126,8, + 100,2,83,0,100,2,125,8,126,8,119,1,119,0,119,0, + 41,4,122,27,87,114,105,116,101,32,98,121,116,101,115,32, + 100,97,116,97,32,116,111,32,97,32,102,105,108,101,46,122, + 27,99,111,117,108,100,32,110,111,116,32,99,114,101,97,116, + 101,32,123,33,114,125,58,32,123,33,114,125,78,122,12,99, + 114,101,97,116,101,100,32,123,33,114,125,41,12,114,74,0, + 0,0,114,83,0,0,0,114,61,0,0,0,218,8,114,101, + 118,101,114,115,101,100,114,67,0,0,0,114,18,0,0,0, + 90,5,109,107,100,105,114,218,15,70,105,108,101,69,120,105, + 115,116,115,69,114,114,111,114,114,76,0,0,0,114,159,0, + 0,0,114,173,0,0,0,114,95,0,0,0,41,9,114,143, + 0,0,0,114,65,0,0,0,114,41,0,0,0,114,37,1, + 0,0,218,6,112,97,114,101,110,116,114,120,0,0,0,114, + 63,0,0,0,114,68,0,0,0,114,0,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,253,0, + 0,0,74,4,0,0,115,56,0,0,0,12,2,4,1,12, + 2,12,1,10,1,12,254,12,4,10,1,2,1,14,1,12, + 1,4,2,14,1,6,3,4,1,4,255,16,2,8,128,2, + 1,12,1,18,1,14,1,8,2,2,1,18,255,8,128,2, + 254,2,247,122,25,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,41, + 7,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, + 114,152,0,0,0,114,252,0,0,0,114,254,0,0,0,114, + 253,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,34,1,0,0,60,4,0, + 0,115,10,0,0,0,8,0,4,2,8,2,8,5,18,5, + 114,34,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,32, 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, - 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, - 10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,100, - 14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,101, - 12,100,18,100,19,132,0,131,1,90,13,100,20,83,0,41, - 21,114,30,1,0,0,122,93,76,111,97,100,101,114,32,102, - 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, - 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, - 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, - 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, - 10,32,32,32,32,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, - 0,83,0,114,69,0,0,0,114,183,0,0,0,41,3,114, - 143,0,0,0,114,141,0,0,0,114,65,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,236,0, - 0,0,138,4,0,0,115,4,0,0,0,6,1,10,1,122, - 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,114,12,1,0,0,114,69,0,0,0, - 114,13,1,0,0,114,15,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,16,1,0,0,142,4, - 0,0,114,17,1,0,0,122,26,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,101, - 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,114,18,1,0, - 0,114,69,0,0,0,114,19,1,0,0,114,21,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 22,1,0,0,146,4,0,0,114,23,1,0,0,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,0, - 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, - 3,124,1,161,2,125,2,116,0,160,4,100,1,124,1,106, - 5,124,0,106,6,161,3,1,0,124,2,83,0,41,3,122, - 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, - 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, - 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,78, - 41,7,114,159,0,0,0,114,242,0,0,0,114,187,0,0, - 0,90,14,99,114,101,97,116,101,95,100,121,110,97,109,105, - 99,114,173,0,0,0,114,141,0,0,0,114,65,0,0,0, - 41,3,114,143,0,0,0,114,210,0,0,0,114,244,0,0, + 6,83,0,41,7,218,20,83,111,117,114,99,101,108,101,115, + 115,70,105,108,101,76,111,97,100,101,114,122,45,76,111,97, + 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, + 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, + 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,68,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,0,160,1,124,2,161,1,125,3,124,1,124,2, + 100,1,156,2,125,4,116,2,124,3,124,1,124,4,131,3, + 1,0,116,3,116,4,124,3,131,1,100,2,100,0,133,2, + 25,0,124,1,124,2,100,3,141,3,83,0,41,4,78,114, + 183,0,0,0,114,169,0,0,0,41,2,114,141,0,0,0, + 114,132,0,0,0,41,5,114,203,0,0,0,114,255,0,0, + 0,114,176,0,0,0,114,189,0,0,0,114,7,1,0,0, + 41,5,114,143,0,0,0,114,163,0,0,0,114,65,0,0, + 0,114,41,0,0,0,114,175,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,109, + 4,0,0,115,22,0,0,0,10,1,10,1,2,4,2,1, + 6,254,12,4,2,1,14,1,2,1,2,1,6,253,122,29, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,41,2,122,39,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,116,104, + 101,114,101,32,105,115,32,110,111,32,115,111,117,114,99,101, + 32,99,111,100,101,46,78,114,7,0,0,0,114,247,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,239,0,0,0,149,4,0,0,115,14,0,0,0,4,2, - 6,1,4,255,6,2,8,1,4,255,4,2,122,33,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 5,0,0,0,67,0,0,0,115,36,0,0,0,116,0,160, - 1,116,2,106,3,124,1,161,2,1,0,116,0,160,4,100, - 1,124,0,106,5,124,0,106,6,161,3,1,0,100,2,83, - 0,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, - 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, - 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, - 114,159,0,0,0,114,242,0,0,0,114,187,0,0,0,90, - 12,101,120,101,99,95,100,121,110,97,109,105,99,114,173,0, - 0,0,114,141,0,0,0,114,65,0,0,0,169,2,114,143, - 0,0,0,114,244,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,245,0,0,0,157,4,0,0, - 115,8,0,0,0,14,2,6,1,8,1,8,255,122,31,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,3,0,0,0,115,36,0,0,0,116,0,124,0, - 106,1,131,1,100,1,25,0,137,0,116,2,135,0,102,1, - 100,2,100,3,132,8,116,3,68,0,131,1,131,1,83,0, - 41,5,122,49,82,101,116,117,114,110,32,84,114,117,101,32, - 105,102,32,116,104,101,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, - 107,97,103,101,46,114,3,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, - 0,0,0,115,28,0,0,0,129,0,124,0,93,9,125,1, - 136,0,100,0,124,1,23,0,107,2,86,0,1,0,113,2, - 100,1,83,0,41,2,114,236,0,0,0,78,114,7,0,0, - 0,169,2,114,5,0,0,0,218,6,115,117,102,102,105,120, - 169,1,90,9,102,105,108,101,95,110,97,109,101,114,7,0, - 0,0,114,8,0,0,0,114,9,0,0,0,166,4,0,0, - 115,6,0,0,0,6,128,2,1,20,255,122,49,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,105,115,95,112,97,99,107,97,103,101,46,60,108,111,99, - 97,108,115,62,46,60,103,101,110,101,120,112,114,62,78,41, - 4,114,74,0,0,0,114,65,0,0,0,218,3,97,110,121, - 114,232,0,0,0,114,247,0,0,0,114,7,0,0,0,114, - 45,1,0,0,114,8,0,0,0,114,206,0,0,0,163,4, - 0,0,115,8,0,0,0,14,2,12,1,2,1,8,255,122, + 114,1,1,0,0,125,4,0,0,114,24,0,0,0,122,31, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,78, + 41,6,114,150,0,0,0,114,149,0,0,0,114,151,0,0, + 0,114,152,0,0,0,114,241,0,0,0,114,1,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,41,1,0,0,105,4,0,0,115,8,0, + 0,0,8,0,4,2,8,2,12,16,114,41,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,64,0,0,0,115,92,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, + 6,100,8,100,9,132,0,90,7,100,10,100,11,132,0,90, + 8,100,12,100,13,132,0,90,9,100,14,100,15,132,0,90, + 10,100,16,100,17,132,0,90,11,101,12,100,18,100,19,132, + 0,131,1,90,13,100,20,83,0,41,21,114,30,1,0,0, + 122,93,76,111,97,100,101,114,32,102,111,114,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,84,104,101,32,99,111,110,115,116,114,117, + 99,116,111,114,32,105,115,32,100,101,115,105,103,110,101,100, + 32,116,111,32,119,111,114,107,32,119,105,116,104,32,70,105, + 108,101,70,105,110,100,101,114,46,10,10,32,32,32,32,99, + 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,124, + 0,95,0,124,2,124,0,95,1,100,0,83,0,114,69,0, + 0,0,114,183,0,0,0,41,3,114,143,0,0,0,114,141, + 0,0,0,114,65,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,236,0,0,0,138,4,0,0, + 115,4,0,0,0,6,1,10,1,122,28,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, + 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 114,12,1,0,0,114,69,0,0,0,114,13,1,0,0,114, + 15,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,16,1,0,0,142,4,0,0,114,17,1,0, + 0,122,26,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,67,0,0,0,114,18,1,0,0,114,69,0,0,0, + 114,19,1,0,0,114,21,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,22,1,0,0,146,4, + 0,0,114,23,1,0,0,122,28,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,104, + 97,115,104,95,95,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,36, + 0,0,0,116,0,160,1,116,2,106,3,124,1,161,2,125, + 2,116,0,160,4,100,1,124,1,106,5,124,0,106,6,161, + 3,1,0,124,2,83,0,41,3,122,38,67,114,101,97,116, + 101,32,97,110,32,117,110,105,116,105,97,108,105,122,101,100, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,122,38,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,123,33,114,125,32,108,111,97,100,101,100,32, + 102,114,111,109,32,123,33,114,125,78,41,7,114,159,0,0, + 0,114,242,0,0,0,114,187,0,0,0,90,14,99,114,101, + 97,116,101,95,100,121,110,97,109,105,99,114,173,0,0,0, + 114,141,0,0,0,114,65,0,0,0,41,3,114,143,0,0, + 0,114,210,0,0,0,114,244,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,239,0,0,0,149, + 4,0,0,115,14,0,0,0,4,2,6,1,4,255,6,2, + 8,1,4,255,4,2,122,33,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,5,0,0,0,67,0, + 0,0,115,36,0,0,0,116,0,160,1,116,2,106,3,124, + 1,161,2,1,0,116,0,160,4,100,1,124,0,106,5,124, + 0,106,6,161,3,1,0,100,2,83,0,41,3,122,30,73, + 110,105,116,105,97,108,105,122,101,32,97,110,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,122,40,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, + 123,33,114,125,32,101,120,101,99,117,116,101,100,32,102,114, + 111,109,32,123,33,114,125,78,41,7,114,159,0,0,0,114, + 242,0,0,0,114,187,0,0,0,90,12,101,120,101,99,95, + 100,121,110,97,109,105,99,114,173,0,0,0,114,141,0,0, + 0,114,65,0,0,0,169,2,114,143,0,0,0,114,244,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,245,0,0,0,157,4,0,0,115,8,0,0,0,14, + 2,6,1,8,1,8,255,122,31,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,101, + 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, + 0,115,36,0,0,0,116,0,124,0,106,1,131,1,100,1, + 25,0,137,0,116,2,135,0,102,1,100,2,100,3,132,8, + 116,3,68,0,131,1,131,1,83,0,41,5,122,49,82,101, + 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, + 3,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,51,0,0,0,115,28,0, + 0,0,129,0,124,0,93,9,125,1,136,0,100,0,124,1, + 23,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2, + 114,236,0,0,0,78,114,7,0,0,0,169,2,114,5,0, + 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105, + 108,101,95,110,97,109,101,114,7,0,0,0,114,8,0,0, + 0,114,9,0,0,0,166,4,0,0,115,6,0,0,0,6, + 128,2,1,20,255,122,49,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,105,115,95,112,97, + 99,107,97,103,101,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,78,41,4,114,74,0,0,0, + 114,65,0,0,0,218,3,97,110,121,114,232,0,0,0,114, + 247,0,0,0,114,7,0,0,0,114,45,1,0,0,114,8, + 0,0,0,114,206,0,0,0,163,4,0,0,115,8,0,0, + 0,14,2,12,1,2,1,8,255,122,30,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, + 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,23,0,0,0,41,2,122,63,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97, + 110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111, + 100,101,32,111,98,106,101,99,116,46,78,114,7,0,0,0, + 114,247,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,241,0,0,0,169,4,0,0,114,24,0, + 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,114,23,0,0,0,41,2, + 122,53,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,7,0,0,0,114,247,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,1,1,0,0,173,4,0,0,114,24,0,0,0,122, 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,114,23,0,0,0,41,2,122, - 63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116, - 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, - 78,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,169, - 4,0,0,114,24,0,0,0,122,28,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, - 23,0,0,0,41,2,122,53,82,101,116,117,114,110,32,78, - 111,110,101,32,97,115,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,115,32,104,97,118,101,32,110,111, - 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,7, - 0,0,0,114,247,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,1,1,0,0,173,4,0,0, - 114,24,0,0,0,122,30,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,26, - 1,0,0,114,27,1,0,0,114,71,0,0,0,114,247,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,203,0,0,0,177,4,0,0,114,28,1,0,0,122, - 32,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109, - 101,78,41,14,114,150,0,0,0,114,149,0,0,0,114,151, - 0,0,0,114,152,0,0,0,114,236,0,0,0,114,16,1, - 0,0,114,22,1,0,0,114,239,0,0,0,114,245,0,0, - 0,114,206,0,0,0,114,241,0,0,0,114,1,1,0,0, - 114,160,0,0,0,114,203,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,30, - 1,0,0,130,4,0,0,115,24,0,0,0,8,0,4,2, - 8,6,8,4,8,4,8,3,8,8,8,6,8,6,8,4, - 2,4,14,1,114,30,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,104,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, - 0,90,7,100,10,100,11,132,0,90,8,100,12,100,13,132, - 0,90,9,100,14,100,15,132,0,90,10,100,16,100,17,132, - 0,90,11,100,18,100,19,132,0,90,12,100,20,100,21,132, - 0,90,13,100,22,100,23,132,0,90,14,100,24,83,0,41, - 25,218,14,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,97,38,1,0,0,82,101,112,114,101,115,101,110,116,115, - 32,97,32,110,97,109,101,115,112,97,99,101,32,112,97,99, - 107,97,103,101,39,115,32,112,97,116,104,46,32,32,73,116, - 32,117,115,101,115,32,116,104,101,32,109,111,100,117,108,101, - 32,110,97,109,101,10,32,32,32,32,116,111,32,102,105,110, - 100,32,105,116,115,32,112,97,114,101,110,116,32,109,111,100, - 117,108,101,44,32,97,110,100,32,102,114,111,109,32,116,104, - 101,114,101,32,105,116,32,108,111,111,107,115,32,117,112,32, - 116,104,101,32,112,97,114,101,110,116,39,115,10,32,32,32, - 32,95,95,112,97,116,104,95,95,46,32,32,87,104,101,110, - 32,116,104,105,115,32,99,104,97,110,103,101,115,44,32,116, - 104,101,32,109,111,100,117,108,101,39,115,32,111,119,110,32, - 112,97,116,104,32,105,115,32,114,101,99,111,109,112,117,116, - 101,100,44,10,32,32,32,32,117,115,105,110,103,32,112,97, - 116,104,95,102,105,110,100,101,114,46,32,32,70,111,114,32, - 116,111,112,45,108,101,118,101,108,32,109,111,100,117,108,101, - 115,44,32,116,104,101,32,112,97,114,101,110,116,32,109,111, - 100,117,108,101,39,115,32,112,97,116,104,10,32,32,32,32, - 105,115,32,115,121,115,46,112,97,116,104,46,99,4,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,67,0,0,0,115,36,0,0,0,124,1,124,0,95,0, - 124,2,124,0,95,1,116,2,124,0,160,3,161,0,131,1, - 124,0,95,4,124,3,124,0,95,5,100,0,83,0,114,69, - 0,0,0,41,6,218,5,95,110,97,109,101,218,5,95,112, - 97,116,104,114,136,0,0,0,218,16,95,103,101,116,95,112, - 97,114,101,110,116,95,112,97,116,104,218,17,95,108,97,115, - 116,95,112,97,114,101,110,116,95,112,97,116,104,218,12,95, - 112,97,116,104,95,102,105,110,100,101,114,169,4,114,143,0, - 0,0,114,141,0,0,0,114,65,0,0,0,90,11,112,97, - 116,104,95,102,105,110,100,101,114,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,236,0,0,0,190,4,0, - 0,115,8,0,0,0,6,1,6,1,14,1,10,1,122,23, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, - 115,38,0,0,0,124,0,106,0,160,1,100,1,161,1,92, - 3,125,1,125,2,125,3,124,2,100,2,107,2,114,15,100, - 3,83,0,124,1,100,4,102,2,83,0,41,6,122,62,82, - 101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,111, - 102,32,40,112,97,114,101,110,116,45,109,111,100,117,108,101, - 45,110,97,109,101,44,32,112,97,114,101,110,116,45,112,97, - 116,104,45,97,116,116,114,45,110,97,109,101,41,114,97,0, - 0,0,114,10,0,0,0,41,2,114,15,0,0,0,114,65, - 0,0,0,90,8,95,95,112,97,116,104,95,95,78,41,2, - 114,48,1,0,0,114,104,0,0,0,41,4,114,143,0,0, - 0,114,40,1,0,0,218,3,100,111,116,90,2,109,101,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,23, - 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,196,4,0,0,115,8,0,0,0, - 18,2,8,1,4,2,8,3,122,38,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, - 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 1,0,0,0,67,0,0,0,114,26,1,0,0,114,27,1, + 0,0,114,71,0,0,0,114,247,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,203,0,0,0, + 177,4,0,0,114,28,1,0,0,122,32,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,102,105,108,101,110,97,109,101,78,41,14,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, + 0,0,114,236,0,0,0,114,16,1,0,0,114,22,1,0, + 0,114,239,0,0,0,114,245,0,0,0,114,206,0,0,0, + 114,241,0,0,0,114,1,1,0,0,114,160,0,0,0,114, + 203,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,30,1,0,0,130,4,0, + 0,115,24,0,0,0,8,0,4,2,8,6,8,4,8,4, + 8,3,8,8,8,6,8,6,8,4,2,4,14,1,114,30, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,64,0,0,0,115,104,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,100, + 11,132,0,90,8,100,12,100,13,132,0,90,9,100,14,100, + 15,132,0,90,10,100,16,100,17,132,0,90,11,100,18,100, + 19,132,0,90,12,100,20,100,21,132,0,90,13,100,22,100, + 23,132,0,90,14,100,24,83,0,41,25,218,14,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,97,38,1,0,0, + 82,101,112,114,101,115,101,110,116,115,32,97,32,110,97,109, + 101,115,112,97,99,101,32,112,97,99,107,97,103,101,39,115, + 32,112,97,116,104,46,32,32,73,116,32,117,115,101,115,32, + 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,10, + 32,32,32,32,116,111,32,102,105,110,100,32,105,116,115,32, + 112,97,114,101,110,116,32,109,111,100,117,108,101,44,32,97, + 110,100,32,102,114,111,109,32,116,104,101,114,101,32,105,116, + 32,108,111,111,107,115,32,117,112,32,116,104,101,32,112,97, + 114,101,110,116,39,115,10,32,32,32,32,95,95,112,97,116, + 104,95,95,46,32,32,87,104,101,110,32,116,104,105,115,32, + 99,104,97,110,103,101,115,44,32,116,104,101,32,109,111,100, + 117,108,101,39,115,32,111,119,110,32,112,97,116,104,32,105, + 115,32,114,101,99,111,109,112,117,116,101,100,44,10,32,32, + 32,32,117,115,105,110,103,32,112,97,116,104,95,102,105,110, + 100,101,114,46,32,32,70,111,114,32,116,111,112,45,108,101, + 118,101,108,32,109,111,100,117,108,101,115,44,32,116,104,101, + 32,112,97,114,101,110,116,32,109,111,100,117,108,101,39,115, + 32,112,97,116,104,10,32,32,32,32,105,115,32,115,121,115, + 46,112,97,116,104,46,99,4,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, + 36,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, + 116,2,124,0,160,3,161,0,131,1,124,0,95,4,124,3, + 124,0,95,5,100,0,83,0,114,69,0,0,0,41,6,218, + 5,95,110,97,109,101,218,5,95,112,97,116,104,114,136,0, + 0,0,218,16,95,103,101,116,95,112,97,114,101,110,116,95, + 112,97,116,104,218,17,95,108,97,115,116,95,112,97,114,101, + 110,116,95,112,97,116,104,218,12,95,112,97,116,104,95,102, + 105,110,100,101,114,169,4,114,143,0,0,0,114,141,0,0, + 0,114,65,0,0,0,90,11,112,97,116,104,95,102,105,110, + 100,101,114,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,236,0,0,0,190,4,0,0,115,8,0,0,0, + 6,1,6,1,14,1,10,1,122,23,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,95,95,105,110,105,116,95, + 95,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,124, + 0,106,0,160,1,100,1,161,1,92,3,125,1,125,2,125, + 3,124,2,100,2,107,2,114,15,100,3,83,0,124,1,100, + 4,102,2,83,0,41,6,122,62,82,101,116,117,114,110,115, + 32,97,32,116,117,112,108,101,32,111,102,32,40,112,97,114, + 101,110,116,45,109,111,100,117,108,101,45,110,97,109,101,44, + 32,112,97,114,101,110,116,45,112,97,116,104,45,97,116,116, + 114,45,110,97,109,101,41,114,97,0,0,0,114,10,0,0, + 0,41,2,114,15,0,0,0,114,65,0,0,0,90,8,95, + 95,112,97,116,104,95,95,78,41,2,114,48,1,0,0,114, + 104,0,0,0,41,4,114,143,0,0,0,114,40,1,0,0, + 218,3,100,111,116,90,2,109,101,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,23,95,102,105,110,100,95, + 112,97,114,101,110,116,95,112,97,116,104,95,110,97,109,101, + 115,196,4,0,0,115,8,0,0,0,18,2,8,1,4,2, + 8,3,122,38,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,102,105,110,100,95,112,97,114,101,110,116,95, + 112,97,116,104,95,110,97,109,101,115,99,1,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,28,0,0,0,124,0,160,0,161,0,92,2, + 125,1,125,2,116,1,116,2,106,3,124,1,25,0,124,2, + 131,2,83,0,114,69,0,0,0,41,4,114,55,1,0,0, + 114,155,0,0,0,114,15,0,0,0,218,7,109,111,100,117, + 108,101,115,41,3,114,143,0,0,0,90,18,112,97,114,101, + 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, + 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,50,1, + 0,0,206,4,0,0,115,4,0,0,0,12,1,16,1,122, + 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,28,0,0,0,124,0, - 160,0,161,0,92,2,125,1,125,2,116,1,116,2,106,3, - 124,1,25,0,124,2,131,2,83,0,114,69,0,0,0,41, - 4,114,55,1,0,0,114,155,0,0,0,114,15,0,0,0, - 218,7,109,111,100,117,108,101,115,41,3,114,143,0,0,0, - 90,18,112,97,114,101,110,116,95,109,111,100,117,108,101,95, - 110,97,109,101,90,14,112,97,116,104,95,97,116,116,114,95, - 110,97,109,101,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,50,1,0,0,206,4,0,0,115,4,0,0, - 0,12,1,16,1,122,31,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,103,101,116,95,112,97,114,101,110, - 116,95,112,97,116,104,99,1,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, - 80,0,0,0,116,0,124,0,160,1,161,0,131,1,125,1, - 124,1,124,0,106,2,107,3,114,37,124,0,160,3,124,0, - 106,4,124,1,161,2,125,2,124,2,100,0,117,1,114,34, - 124,2,106,5,100,0,117,0,114,34,124,2,106,6,114,34, - 124,2,106,6,124,0,95,7,124,1,124,0,95,2,124,0, - 106,7,83,0,114,69,0,0,0,41,8,114,136,0,0,0, - 114,50,1,0,0,114,51,1,0,0,114,52,1,0,0,114, - 48,1,0,0,114,164,0,0,0,114,202,0,0,0,114,49, - 1,0,0,41,3,114,143,0,0,0,90,11,112,97,114,101, - 110,116,95,112,97,116,104,114,210,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,12,95,114,101, - 99,97,108,99,117,108,97,116,101,210,4,0,0,115,16,0, - 0,0,12,2,10,1,14,1,18,3,6,1,8,1,6,1, - 6,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,243,12,0,0,0,116,0,124, - 0,160,1,161,0,131,1,83,0,114,69,0,0,0,41,2, - 218,4,105,116,101,114,114,57,1,0,0,114,21,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 8,95,95,105,116,101,114,95,95,223,4,0,0,243,2,0, - 0,0,12,1,122,23,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,105,116,101,114,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,12,0,0,0,124,0,160,0,161, - 0,124,1,25,0,83,0,114,69,0,0,0,169,1,114,57, - 1,0,0,41,2,114,143,0,0,0,218,5,105,110,100,101, - 120,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 218,11,95,95,103,101,116,105,116,101,109,95,95,226,4,0, - 0,114,61,1,0,0,122,26,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,103,101,116,105,116,101,109, - 95,95,99,3,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,14,0,0,0, - 124,2,124,0,106,0,124,1,60,0,100,0,83,0,114,69, - 0,0,0,41,1,114,49,1,0,0,41,3,114,143,0,0, - 0,114,63,1,0,0,114,65,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,11,95,95,115,101, - 116,105,116,101,109,95,95,229,4,0,0,115,2,0,0,0, - 14,1,122,26,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,95,115,101,116,105,116,101,109,95,95,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,114,58,1,0,0,114,69,0,0, - 0,41,2,114,4,0,0,0,114,57,1,0,0,114,21,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,7,95,95,108,101,110,95,95,232,4,0,0,114,61, - 1,0,0,122,22,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,108,101,110,95,95,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,243,12,0,0,0,100,1,160,0,124,0,106, - 1,161,1,83,0,41,2,78,122,20,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,40,123,33,114,125,41,41,2, - 114,89,0,0,0,114,49,1,0,0,114,21,1,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,8, - 95,95,114,101,112,114,95,95,235,4,0,0,114,61,1,0, - 0,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,12,0,0,0,124,1,124,0,160,0,161,0, - 118,0,83,0,114,69,0,0,0,114,62,1,0,0,169,2, - 114,143,0,0,0,218,4,105,116,101,109,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,12,95,95,99,111, - 110,116,97,105,110,115,95,95,238,4,0,0,114,61,1,0, - 0,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0, - 160,1,124,1,161,1,1,0,100,0,83,0,114,69,0,0, - 0,41,2,114,49,1,0,0,114,61,0,0,0,114,69,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,61,0,0,0,241,4,0,0,243,2,0,0,0,16, - 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,97,112,112,101,110,100,78,41,15,114,150,0,0,0, - 114,149,0,0,0,114,151,0,0,0,114,152,0,0,0,114, - 236,0,0,0,114,55,1,0,0,114,50,1,0,0,114,57, - 1,0,0,114,60,1,0,0,114,64,1,0,0,114,65,1, - 0,0,114,66,1,0,0,114,68,1,0,0,114,71,1,0, - 0,114,61,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,47,1,0,0,183, - 4,0,0,115,26,0,0,0,8,0,4,1,8,6,8,6, - 8,10,8,4,8,13,8,3,8,3,8,3,8,3,8,3, - 12,3,114,47,1,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, - 115,88,0,0,0,101,0,90,1,100,0,90,2,100,1,100, - 2,132,0,90,3,101,4,100,3,100,4,132,0,131,1,90, - 5,100,5,100,6,132,0,90,6,100,7,100,8,132,0,90, - 7,100,9,100,10,132,0,90,8,100,11,100,12,132,0,90, - 9,100,13,100,14,132,0,90,10,100,15,100,16,132,0,90, - 11,100,17,100,18,132,0,90,12,100,19,83,0,41,20,218, - 16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,4,0,0,0,67,0,0,0,115,18,0,0,0,116, - 0,124,1,124,2,124,3,131,3,124,0,95,1,100,0,83, - 0,114,69,0,0,0,41,2,114,47,1,0,0,114,49,1, - 0,0,114,53,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,236,0,0,0,247,4,0,0,115, - 2,0,0,0,18,1,122,25,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, - 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,67,0,0,0,115,24,0,0,0,116, - 0,160,1,100,1,116,2,161,2,1,0,100,2,160,3,124, - 0,106,4,161,1,83,0,41,4,122,115,82,101,116,117,114, - 110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, - 84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105, - 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32, - 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115, - 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,82, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,109,111,100,117,108,101,95,114,101,112,114,40,41,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, - 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, - 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, - 49,50,122,25,60,109,111,100,117,108,101,32,123,33,114,125, - 32,40,110,97,109,101,115,112,97,99,101,41,62,78,41,5, - 114,99,0,0,0,114,100,0,0,0,114,101,0,0,0,114, - 89,0,0,0,114,150,0,0,0,41,1,114,244,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, - 11,109,111,100,117,108,101,95,114,101,112,114,250,4,0,0, - 115,8,0,0,0,6,7,2,1,4,255,12,2,122,28,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,114,23,0,0,0,41,2,78,84,114,7,0, - 0,0,114,247,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,206,0,0,0,5,5,0,0,243, - 2,0,0,0,4,1,122,27,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, - 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, - 0,41,2,78,114,10,0,0,0,114,7,0,0,0,114,247, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,1,1,0,0,8,5,0,0,114,75,1,0,0, + 0,4,0,0,0,67,0,0,0,115,80,0,0,0,116,0, + 124,0,160,1,161,0,131,1,125,1,124,1,124,0,106,2, + 107,3,114,37,124,0,160,3,124,0,106,4,124,1,161,2, + 125,2,124,2,100,0,117,1,114,34,124,2,106,5,100,0, + 117,0,114,34,124,2,106,6,114,34,124,2,106,6,124,0, + 95,7,124,1,124,0,95,2,124,0,106,7,83,0,114,69, + 0,0,0,41,8,114,136,0,0,0,114,50,1,0,0,114, + 51,1,0,0,114,52,1,0,0,114,48,1,0,0,114,164, + 0,0,0,114,202,0,0,0,114,49,1,0,0,41,3,114, + 143,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, + 104,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,12,95,114,101,99,97,108,99,117,108, + 97,116,101,210,4,0,0,115,16,0,0,0,12,2,10,1, + 14,1,18,3,6,1,8,1,6,1,6,1,122,27,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101, + 99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,243,12,0,0,0,116,0,124,0,160,1,161,0,131, + 1,83,0,114,69,0,0,0,41,2,218,4,105,116,101,114, + 114,57,1,0,0,114,21,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,8,95,95,105,116,101, + 114,95,95,223,4,0,0,243,2,0,0,0,12,1,122,23, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,105,116,101,114,95,95,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,12,0,0,0,124,0,160,0,161,0,124,1,25,0,83, + 0,114,69,0,0,0,169,1,114,57,1,0,0,41,2,114, + 143,0,0,0,218,5,105,110,100,101,120,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,218,11,95,95,103,101, + 116,105,116,101,109,95,95,226,4,0,0,114,61,1,0,0, + 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,14,0,0,0,124,2,124,0,106,0, + 124,1,60,0,100,0,83,0,114,69,0,0,0,41,1,114, + 49,1,0,0,41,3,114,143,0,0,0,114,63,1,0,0, + 114,65,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, + 95,229,4,0,0,115,2,0,0,0,14,1,122,26,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,115, + 101,116,105,116,101,109,95,95,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,114,58,1,0,0,114,69,0,0,0,41,2,114,4,0, + 0,0,114,57,1,0,0,114,21,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,7,95,95,108, + 101,110,95,95,232,4,0,0,114,61,1,0,0,122,22,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 108,101,110,95,95,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,243,12, + 0,0,0,100,1,160,0,124,0,106,1,161,1,83,0,41, + 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,40,123,33,114,125,41,41,2,114,89,0,0,0,114, + 49,1,0,0,114,21,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,218,8,95,95,114,101,112,114, + 95,95,235,4,0,0,114,61,1,0,0,122,23,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,114,101, + 112,114,95,95,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,3,0,0,0,67,0,0,0,115,12,0, + 0,0,124,1,124,0,160,0,161,0,118,0,83,0,114,69, + 0,0,0,114,62,1,0,0,169,2,114,143,0,0,0,218, + 4,105,116,101,109,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,12,95,95,99,111,110,116,97,105,110,115, + 95,95,238,4,0,0,114,61,1,0,0,122,27,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,99,111, + 110,116,97,105,110,115,95,95,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, + 0,115,16,0,0,0,124,0,106,0,160,1,124,1,161,1, + 1,0,100,0,83,0,114,69,0,0,0,41,2,114,49,1, + 0,0,114,61,0,0,0,114,69,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,61,0,0,0, + 241,4,0,0,243,2,0,0,0,16,1,122,21,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,97,112,112,101, + 110,100,78,41,15,114,150,0,0,0,114,149,0,0,0,114, + 151,0,0,0,114,152,0,0,0,114,236,0,0,0,114,55, + 1,0,0,114,50,1,0,0,114,57,1,0,0,114,60,1, + 0,0,114,64,1,0,0,114,65,1,0,0,114,66,1,0, + 0,114,68,1,0,0,114,71,1,0,0,114,61,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,47,1,0,0,183,4,0,0,115,26,0, + 0,0,8,0,4,1,8,6,8,6,8,10,8,4,8,13, + 8,3,8,3,8,3,8,3,8,3,12,3,114,47,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,64,0,0,0,115,88,0,0,0,101, + 0,90,1,100,0,90,2,100,1,100,2,132,0,90,3,101, + 4,100,3,100,4,132,0,131,1,90,5,100,5,100,6,132, + 0,90,6,100,7,100,8,132,0,90,7,100,9,100,10,132, + 0,90,8,100,11,100,12,132,0,90,9,100,13,100,14,132, + 0,90,10,100,15,100,16,132,0,90,11,100,17,100,18,132, + 0,90,12,100,19,83,0,41,20,218,16,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,99,4,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 67,0,0,0,115,18,0,0,0,116,0,124,1,124,2,124, + 3,131,3,124,0,95,1,100,0,83,0,114,69,0,0,0, + 41,2,114,47,1,0,0,114,49,1,0,0,114,53,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,236,0,0,0,247,4,0,0,115,2,0,0,0,18,1, + 122,25,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,24,0,0,0,116,0,160,1,100,1,116, + 2,161,2,1,0,100,2,160,3,124,0,106,4,161,1,83, + 0,41,4,122,115,82,101,116,117,114,110,32,114,101,112,114, + 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, + 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, + 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, + 32,32,32,32,32,32,32,32,122,82,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,109,111,100,117,108, + 101,95,114,101,112,114,40,41,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,32,97,110,100,32,115,108,97,116,101, + 100,32,102,111,114,32,114,101,109,111,118,97,108,32,105,110, + 32,80,121,116,104,111,110,32,51,46,49,50,122,25,60,109, + 111,100,117,108,101,32,123,33,114,125,32,40,110,97,109,101, + 115,112,97,99,101,41,62,78,41,5,114,99,0,0,0,114, + 100,0,0,0,114,101,0,0,0,114,89,0,0,0,114,150, + 0,0,0,41,1,114,244,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,218,11,109,111,100,117,108, + 101,95,114,101,112,114,250,4,0,0,115,8,0,0,0,6, + 7,2,1,4,255,12,2,122,28,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, + 95,114,101,112,114,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,23, + 0,0,0,41,2,78,84,114,7,0,0,0,114,247,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,206,0,0,0,5,5,0,0,243,2,0,0,0,4,1, 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, - 0,0,67,0,0,0,115,16,0,0,0,116,0,100,1,100, - 2,100,3,100,4,100,5,141,4,83,0,41,6,78,114,10, - 0,0,0,122,8,60,115,116,114,105,110,103,62,114,243,0, - 0,0,84,41,1,114,3,1,0,0,41,1,114,4,1,0, - 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,241,0,0,0,11,5,0,0,114,72, - 1,0,0,122,25,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,114,23,0,0,0,114,237,0,0, - 0,114,7,0,0,0,114,238,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,239,0,0,0,14, - 5,0,0,114,240,0,0,0,122,30,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116, - 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,114,23,0,0,0,41,2,78,114,10, + 0,0,0,114,7,0,0,0,114,247,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,1,1,0, + 0,8,5,0,0,114,75,1,0,0,122,27,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,6,0,0,0,67,0,0,0, + 115,16,0,0,0,116,0,100,1,100,2,100,3,100,4,100, + 5,141,4,83,0,41,6,78,114,10,0,0,0,122,8,60, + 115,116,114,105,110,103,62,114,243,0,0,0,84,41,1,114, + 3,1,0,0,41,1,114,4,1,0,0,114,247,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 241,0,0,0,11,5,0,0,114,72,1,0,0,122,25,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,0,83,0,114,69,0,0,0,114, - 7,0,0,0,114,42,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,245,0,0,0,17,5,0, - 0,114,75,1,0,0,122,28,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,26,0, - 0,0,116,0,160,1,100,1,124,0,106,2,161,2,1,0, - 116,0,160,3,124,0,124,1,161,2,83,0,41,3,122,98, - 76,111,97,100,32,97,32,110,97,109,101,115,112,97,99,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, - 32,32,122,38,110,97,109,101,115,112,97,99,101,32,109,111, - 100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104, - 32,112,97,116,104,32,123,33,114,125,78,41,4,114,159,0, - 0,0,114,173,0,0,0,114,49,1,0,0,114,246,0,0, - 0,114,247,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,248,0,0,0,20,5,0,0,115,8, - 0,0,0,6,7,4,1,4,255,12,3,122,28,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,108,111, - 97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, - 0,0,115,22,0,0,0,100,1,100,2,108,0,109,1,125, - 2,1,0,124,2,124,0,106,2,131,1,83,0,41,3,78, - 114,0,0,0,0,41,1,218,15,78,97,109,101,115,112,97, - 99,101,82,101,97,100,101,114,41,3,114,32,1,0,0,114, - 76,1,0,0,114,49,1,0,0,41,3,114,143,0,0,0, - 114,244,0,0,0,114,76,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,33,1,0,0,32,5, - 0,0,115,4,0,0,0,12,1,10,1,122,36,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, - 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, - 114,78,41,13,114,150,0,0,0,114,149,0,0,0,114,151, - 0,0,0,114,236,0,0,0,114,233,0,0,0,114,74,1, - 0,0,114,206,0,0,0,114,1,1,0,0,114,241,0,0, - 0,114,239,0,0,0,114,245,0,0,0,114,248,0,0,0, - 114,33,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,73,1,0,0,246,4, - 0,0,115,22,0,0,0,8,0,8,1,2,3,10,1,8, - 10,8,3,8,3,8,3,8,3,8,3,12,12,114,73,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,64,0,0,0,115,118,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,101,4,100,2, - 100,3,132,0,131,1,90,5,101,4,100,4,100,5,132,0, - 131,1,90,6,101,7,100,6,100,7,132,0,131,1,90,8, - 101,7,100,8,100,9,132,0,131,1,90,9,101,7,100,19, - 100,11,100,12,132,1,131,1,90,10,101,7,100,20,100,13, - 100,14,132,1,131,1,90,11,101,7,100,19,100,15,100,16, - 132,1,131,1,90,12,101,4,100,17,100,18,132,0,131,1, - 90,13,100,10,83,0,41,21,218,10,80,97,116,104,70,105, - 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, - 102,105,110,100,101,114,32,102,111,114,32,115,121,115,46,112, - 97,116,104,32,97,110,100,32,112,97,99,107,97,103,101,32, - 95,95,112,97,116,104,95,95,32,97,116,116,114,105,98,117, - 116,101,115,46,99,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,64,0, - 0,0,116,0,116,1,106,2,160,3,161,0,131,1,68,0, - 93,22,92,2,125,0,125,1,124,1,100,1,117,0,114,20, - 116,1,106,2,124,0,61,0,113,7,116,4,124,1,100,2, - 131,2,114,29,124,1,160,5,161,0,1,0,113,7,100,1, - 83,0,41,3,122,125,67,97,108,108,32,116,104,101,32,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 40,41,32,109,101,116,104,111,100,32,111,110,32,97,108,108, - 32,112,97,116,104,32,101,110,116,114,121,32,102,105,110,100, - 101,114,115,10,32,32,32,32,32,32,32,32,115,116,111,114, - 101,100,32,105,110,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,115,32,40, - 119,104,101,114,101,32,105,109,112,108,101,109,101,110,116,101, - 100,41,46,78,218,17,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,41,6,218,4,108,105,115,116,114, - 15,0,0,0,218,19,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,218,5,105,116,101,109,115, - 114,153,0,0,0,114,78,1,0,0,41,2,114,141,0,0, - 0,218,6,102,105,110,100,101,114,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,78,1,0,0,43,5,0, - 0,115,14,0,0,0,22,4,8,1,10,1,10,1,8,1, - 2,128,4,252,122,28,80,97,116,104,70,105,110,100,101,114, - 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, - 101,115,99,1,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,9,0,0,0,67,0,0,0,115,76,0,0,0, - 116,0,106,1,100,1,117,1,114,14,116,0,106,1,115,14, - 116,2,160,3,100,2,116,4,161,2,1,0,116,0,106,1, - 68,0,93,17,125,1,122,7,124,1,124,0,131,1,87,0, - 2,0,1,0,83,0,4,0,116,5,121,37,1,0,1,0, - 1,0,89,0,113,17,100,1,83,0,119,0,41,3,122,46, - 83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95, - 104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100, - 101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122, - 23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 105,115,32,101,109,112,116,121,41,6,114,15,0,0,0,218, - 10,112,97,116,104,95,104,111,111,107,115,114,99,0,0,0, - 114,100,0,0,0,114,162,0,0,0,114,142,0,0,0,41, - 2,114,65,0,0,0,90,4,104,111,111,107,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,11,95,112,97, - 116,104,95,104,111,111,107,115,53,5,0,0,115,18,0,0, - 0,16,3,12,1,10,1,2,1,14,1,12,1,4,1,4, - 2,2,253,122,22,80,97,116,104,70,105,110,100,101,114,46, - 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, - 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114, - 20,122,6,116,0,160,1,161,0,125,1,87,0,110,9,4, - 0,116,2,121,49,1,0,1,0,1,0,89,0,100,2,83, - 0,122,8,116,3,106,4,124,1,25,0,125,2,87,0,124, - 2,83,0,4,0,116,5,121,48,1,0,1,0,1,0,124, - 0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124, - 1,60,0,89,0,124,2,83,0,119,0,119,0,41,3,122, - 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, - 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, - 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, - 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, - 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, - 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, - 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, - 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, - 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, - 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, - 32,32,32,114,10,0,0,0,78,41,7,114,18,0,0,0, - 114,82,0,0,0,218,17,70,105,108,101,78,111,116,70,111, - 117,110,100,69,114,114,111,114,114,15,0,0,0,114,80,1, - 0,0,218,8,75,101,121,69,114,114,111,114,114,84,1,0, - 0,41,3,114,221,0,0,0,114,65,0,0,0,114,82,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,20,95,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,66,5,0,0,115,28,0,0,0, - 8,8,2,1,12,1,12,1,6,3,2,1,12,1,4,4, - 12,253,10,1,12,1,4,1,2,253,2,250,122,31,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0, - 0,0,67,0,0,0,115,138,0,0,0,116,0,124,2,100, - 1,131,2,114,27,116,1,160,2,124,2,161,1,155,0,100, - 2,157,2,125,3,116,3,160,4,124,3,116,5,161,2,1, - 0,124,2,160,6,124,1,161,1,92,2,125,4,125,5,110, - 21,116,1,160,2,124,2,161,1,155,0,100,3,157,2,125, - 3,116,3,160,4,124,3,116,5,161,2,1,0,124,2,160, - 7,124,1,161,1,125,4,103,0,125,5,124,4,100,0,117, - 1,114,58,116,1,160,8,124,1,124,4,161,2,83,0,116, - 1,160,9,124,1,100,0,161,2,125,6,124,5,124,6,95, - 10,124,6,83,0,41,4,78,114,161,0,0,0,122,53,46, - 102,105,110,100,95,115,112,101,99,40,41,32,110,111,116,32, - 102,111,117,110,100,59,32,102,97,108,108,105,110,103,32,98, - 97,99,107,32,116,111,32,102,105,110,100,95,108,111,97,100, - 101,114,40,41,122,53,46,102,105,110,100,95,115,112,101,99, - 40,41,32,110,111,116,32,102,111,117,110,100,59,32,102,97, - 108,108,105,110,103,32,98,97,99,107,32,116,111,32,102,105, - 110,100,95,109,111,100,117,108,101,40,41,41,11,114,153,0, - 0,0,114,159,0,0,0,90,12,95,111,98,106,101,99,116, - 95,110,97,109,101,114,99,0,0,0,114,100,0,0,0,114, - 162,0,0,0,114,161,0,0,0,114,229,0,0,0,114,224, - 0,0,0,114,207,0,0,0,114,202,0,0,0,41,7,114, - 221,0,0,0,114,163,0,0,0,114,82,1,0,0,114,166, - 0,0,0,114,164,0,0,0,114,165,0,0,0,114,210,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115, - 112,101,99,88,5,0,0,115,26,0,0,0,10,4,16,1, - 12,2,16,1,16,2,12,2,10,1,4,1,8,1,12,1, - 12,1,6,1,4,1,122,27,80,97,116,104,70,105,110,100, - 101,114,46,95,108,101,103,97,99,121,95,103,101,116,95,115, - 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,9,0,0,0,5,0,0,0,67,0,0,0,115,166,0, - 0,0,103,0,125,4,124,2,68,0,93,67,125,5,116,0, - 124,5,116,1,116,2,102,2,131,2,115,14,113,4,124,0, - 160,3,124,5,161,1,125,6,124,6,100,1,117,1,114,71, - 116,4,124,6,100,2,131,2,114,35,124,6,160,5,124,1, - 124,3,161,2,125,7,110,6,124,0,160,6,124,1,124,6, - 161,2,125,7,124,7,100,1,117,0,114,46,113,4,124,7, - 106,7,100,1,117,1,114,55,124,7,2,0,1,0,83,0, - 124,7,106,8,125,8,124,8,100,1,117,0,114,66,116,9, - 100,3,131,1,130,1,124,4,160,10,124,8,161,1,1,0, - 113,4,116,11,160,12,124,1,100,1,161,2,125,7,124,4, - 124,7,95,8,124,7,83,0,41,4,122,63,70,105,110,100, - 32,116,104,101,32,108,111,97,100,101,114,32,111,114,32,110, - 97,109,101,115,112,97,99,101,95,112,97,116,104,32,102,111, - 114,32,116,104,105,115,32,109,111,100,117,108,101,47,112,97, - 99,107,97,103,101,32,110,97,109,101,46,78,114,226,0,0, - 0,122,19,115,112,101,99,32,109,105,115,115,105,110,103,32, - 108,111,97,100,101,114,41,13,114,185,0,0,0,114,109,0, - 0,0,218,5,98,121,116,101,115,114,87,1,0,0,114,153, - 0,0,0,114,226,0,0,0,114,88,1,0,0,114,164,0, - 0,0,114,202,0,0,0,114,142,0,0,0,114,191,0,0, - 0,114,159,0,0,0,114,207,0,0,0,41,9,114,221,0, - 0,0,114,163,0,0,0,114,65,0,0,0,114,225,0,0, - 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, - 104,90,5,101,110,116,114,121,114,82,1,0,0,114,210,0, - 0,0,114,165,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,9,95,103,101,116,95,115,112,101, - 99,109,5,0,0,115,42,0,0,0,4,5,8,1,14,1, - 2,1,10,1,8,1,10,1,14,1,12,2,8,1,2,1, - 10,1,8,1,6,1,8,1,8,1,10,5,2,128,12,2, - 6,1,4,1,122,20,80,97,116,104,70,105,110,100,101,114, - 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,67, - 0,0,0,115,94,0,0,0,124,2,100,1,117,0,114,7, - 116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,3, - 161,3,125,4,124,4,100,1,117,0,114,20,100,1,83,0, - 124,4,106,3,100,1,117,0,114,45,124,4,106,4,125,5, - 124,5,114,43,100,1,124,4,95,5,116,6,124,1,124,5, - 124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,1, - 83,0,124,4,83,0,41,2,122,141,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, - 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, - 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, - 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, - 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, - 32,32,32,32,32,32,32,78,41,7,114,15,0,0,0,114, - 65,0,0,0,114,91,1,0,0,114,164,0,0,0,114,202, - 0,0,0,114,205,0,0,0,114,47,1,0,0,41,6,114, - 221,0,0,0,114,163,0,0,0,114,65,0,0,0,114,225, - 0,0,0,114,210,0,0,0,114,90,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,226,0,0, - 0,141,5,0,0,115,26,0,0,0,8,6,6,1,14,1, - 8,1,4,1,10,1,6,1,4,1,6,3,16,1,4,1, - 4,2,4,2,122,20,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,2, - 161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,3, - 124,3,100,2,117,0,114,18,100,2,83,0,124,3,106,4, - 83,0,41,3,122,170,102,105,110,100,32,116,104,101,32,109, - 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, - 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, + 0,114,23,0,0,0,114,237,0,0,0,114,7,0,0,0, + 114,238,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,239,0,0,0,14,5,0,0,114,240,0, + 0,0,122,30,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,99,114,101,97,116,101,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,0,83,0,114,69,0,0,0,114,7,0,0,0,114,42, + 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,245,0,0,0,17,5,0,0,114,75,1,0,0, + 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,26,0,0,0,116,0,160,1, + 100,1,124,0,106,2,161,2,1,0,116,0,160,3,124,0, + 124,1,161,2,83,0,41,3,122,98,76,111,97,100,32,97, + 32,110,97,109,101,115,112,97,99,101,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,122,38,110,97, + 109,101,115,112,97,99,101,32,109,111,100,117,108,101,32,108, + 111,97,100,101,100,32,119,105,116,104,32,112,97,116,104,32, + 123,33,114,125,78,41,4,114,159,0,0,0,114,173,0,0, + 0,114,49,1,0,0,114,246,0,0,0,114,247,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 248,0,0,0,20,5,0,0,115,8,0,0,0,6,7,4, + 1,4,255,12,3,122,28,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, + 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,124, + 0,106,2,131,1,83,0,41,3,78,114,0,0,0,0,41, + 1,218,15,78,97,109,101,115,112,97,99,101,82,101,97,100, + 101,114,41,3,114,32,1,0,0,114,76,1,0,0,114,49, + 1,0,0,41,3,114,143,0,0,0,114,244,0,0,0,114, + 76,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,33,1,0,0,32,5,0,0,115,4,0,0, + 0,12,1,10,1,122,36,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111, + 117,114,99,101,95,114,101,97,100,101,114,78,41,13,114,150, + 0,0,0,114,149,0,0,0,114,151,0,0,0,114,236,0, + 0,0,114,233,0,0,0,114,74,1,0,0,114,206,0,0, + 0,114,1,1,0,0,114,241,0,0,0,114,239,0,0,0, + 114,245,0,0,0,114,248,0,0,0,114,33,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,73,1,0,0,246,4,0,0,115,22,0,0, + 0,8,0,8,1,2,3,10,1,8,10,8,3,8,3,8, + 3,8,3,8,3,12,12,114,73,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,118,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, + 90,5,101,4,100,4,100,5,132,0,131,1,90,6,101,7, + 100,6,100,7,132,0,131,1,90,8,101,7,100,8,100,9, + 132,0,131,1,90,9,101,7,100,19,100,11,100,12,132,1, + 131,1,90,10,101,7,100,20,100,13,100,14,132,1,131,1, + 90,11,101,7,100,19,100,15,100,16,132,1,131,1,90,12, + 101,4,100,17,100,18,132,0,131,1,90,13,100,10,83,0, + 41,21,218,10,80,97,116,104,70,105,110,100,101,114,122,62, + 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, + 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, + 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, + 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,64,0,0,0,116,0,116,1, + 106,2,160,3,161,0,131,1,68,0,93,22,92,2,125,0, + 125,1,124,1,100,1,117,0,114,20,116,1,106,2,124,0, + 61,0,113,7,116,4,124,1,100,2,131,2,114,29,124,1, + 160,5,161,0,1,0,113,7,100,1,83,0,41,3,122,125, + 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, + 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, + 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, + 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 122,101,80,97,116,104,70,105,110,100,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,40,41,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, - 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, - 105,110,32,80,121,116,104,111,110,32,51,46,49,50,59,32, - 117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,78,114,227,0,0,0,114,228,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,229,0,0,0,165,5,0,0,115,14,0,0,0,6, - 8,2,2,4,254,12,3,8,1,4,1,6,1,122,22,80, - 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, - 111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,4,0,0,0,79,0,0,0,115,28, - 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, - 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, - 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, - 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, - 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, - 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, - 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, - 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, - 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, - 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, - 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, - 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, - 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, - 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, - 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, - 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, - 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, - 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, - 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, - 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, - 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, - 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, - 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, - 109,101,116,97,100,97,116,97,114,92,1,0,0,218,18,102, - 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110, - 115,41,3,114,144,0,0,0,114,145,0,0,0,114,92,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,93,1,0,0,181,5,0,0,115,4,0,0,0,12, - 10,16,1,122,29,80,97,116,104,70,105,110,100,101,114,46, - 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, - 110,115,114,69,0,0,0,114,230,0,0,0,41,14,114,150, - 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, - 0,0,114,233,0,0,0,114,78,1,0,0,114,84,1,0, - 0,114,234,0,0,0,114,87,1,0,0,114,88,1,0,0, - 114,91,1,0,0,114,226,0,0,0,114,229,0,0,0,114, - 93,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,77,1,0,0,39,5,0, - 0,115,36,0,0,0,8,0,4,2,2,2,10,1,2,9, - 10,1,2,12,10,1,2,21,10,1,2,20,12,1,2,31, - 12,1,2,23,12,1,2,15,14,1,114,77,1,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,64,0,0,0,115,90,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, - 4,100,4,100,5,132,0,90,5,101,6,90,7,100,6,100, - 7,132,0,90,8,100,8,100,9,132,0,90,9,100,19,100, - 11,100,12,132,1,90,10,100,13,100,14,132,0,90,11,101, - 12,100,15,100,16,132,0,131,1,90,13,100,17,100,18,132, - 0,90,14,100,10,83,0,41,20,218,10,70,105,108,101,70, - 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, - 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, - 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, - 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, - 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, - 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, - 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, - 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, - 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, - 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, - 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, - 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,6,0,0,0,7,0,0,0,115,112,0,0, - 0,103,0,125,3,124,2,68,0,93,16,92,2,137,0,125, - 4,124,3,160,0,135,0,102,1,100,1,100,2,132,8,124, - 4,68,0,131,1,161,1,1,0,113,4,124,3,124,0,95, - 1,124,1,112,27,100,3,124,0,95,2,116,3,124,0,106, - 2,131,1,115,43,116,4,116,5,160,6,161,0,124,0,106, - 2,131,2,124,0,95,2,100,4,124,0,95,7,116,8,131, - 0,124,0,95,9,116,8,131,0,124,0,95,10,100,5,83, - 0,41,6,122,154,73,110,105,116,105,97,108,105,122,101,32, - 119,105,116,104,32,116,104,101,32,112,97,116,104,32,116,111, - 32,115,101,97,114,99,104,32,111,110,32,97,110,100,32,97, - 32,118,97,114,105,97,98,108,101,32,110,117,109,98,101,114, - 32,111,102,10,32,32,32,32,32,32,32,32,50,45,116,117, - 112,108,101,115,32,99,111,110,116,97,105,110,105,110,103,32, - 116,104,101,32,108,111,97,100,101,114,32,97,110,100,32,116, - 104,101,32,102,105,108,101,32,115,117,102,102,105,120,101,115, - 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32, - 32,32,32,32,114,101,99,111,103,110,105,122,101,115,46,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,51,0,0,0,115,24,0,0,0,129,0,124, - 0,93,7,125,1,124,1,136,0,102,2,86,0,1,0,113, - 2,100,0,83,0,114,69,0,0,0,114,7,0,0,0,114, - 43,1,0,0,169,1,114,164,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,9,0,0,0,210,5,0,0,115,4, - 0,0,0,6,128,18,0,122,38,70,105,108,101,70,105,110, - 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, - 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, - 97,0,0,0,114,130,0,0,0,78,41,11,114,191,0,0, - 0,218,8,95,108,111,97,100,101,114,115,114,65,0,0,0, - 114,86,0,0,0,114,67,0,0,0,114,18,0,0,0,114, - 82,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, - 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, - 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, - 116,104,95,99,97,99,104,101,41,5,114,143,0,0,0,114, - 65,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, - 97,105,108,115,90,7,108,111,97,100,101,114,115,114,212,0, - 0,0,114,7,0,0,0,114,95,1,0,0,114,8,0,0, - 0,114,236,0,0,0,204,5,0,0,115,20,0,0,0,4, - 4,12,1,26,1,6,1,10,2,10,1,18,1,6,1,8, - 1,12,1,122,19,70,105,108,101,70,105,110,100,101,114,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,10,0,0,0,100,1,124,0,95,0,100,2,83,0, - 41,3,122,31,73,110,118,97,108,105,100,97,116,101,32,116, - 104,101,32,100,105,114,101,99,116,111,114,121,32,109,116,105, - 109,101,46,114,130,0,0,0,78,41,1,114,97,1,0,0, - 114,21,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,78,1,0,0,220,5,0,0,114,81,0, - 0,0,122,28,70,105,108,101,70,105,110,100,101,114,46,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,4,0,0,0,67,0,0,0,115,54,0,0,0,116,0, - 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, - 161,1,125,2,124,2,100,2,117,0,114,19,100,2,103,0, - 102,2,83,0,124,2,106,4,124,2,106,5,112,25,103,0, - 102,2,83,0,41,3,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,122,101,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,108, - 111,97,100,101,114,40,41,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, - 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, - 80,121,116,104,111,110,32,51,46,49,50,59,32,117,115,101, - 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,78,41,6,114,99,0,0,0,114,100,0,0, - 0,114,101,0,0,0,114,226,0,0,0,114,164,0,0,0, - 114,202,0,0,0,41,3,114,143,0,0,0,114,163,0,0, - 0,114,210,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,161,0,0,0,226,5,0,0,115,14, - 0,0,0,6,7,2,2,4,254,10,3,8,1,8,1,16, - 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, - 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, - 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0, - 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125, - 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83, - 0,41,2,78,114,201,0,0,0,41,1,114,213,0,0,0, - 41,7,114,143,0,0,0,114,211,0,0,0,114,163,0,0, - 0,114,65,0,0,0,90,4,115,109,115,108,114,225,0,0, - 0,114,164,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,91,1,0,0,241,5,0,0,115,8, - 0,0,0,10,1,8,1,2,1,6,255,122,20,70,105,108, - 101,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101, - 99,78,99,3,0,0,0,0,0,0,0,0,0,0,0,14, - 0,0,0,9,0,0,0,67,0,0,0,115,120,1,0,0, - 100,1,125,3,124,1,160,0,100,2,161,1,100,3,25,0, - 125,4,122,12,116,1,124,0,106,2,112,17,116,3,160,4, - 161,0,131,1,106,5,125,5,87,0,110,9,4,0,116,6, - 121,187,1,0,1,0,1,0,100,4,125,5,89,0,124,5, - 124,0,106,7,107,3,114,43,124,0,160,8,161,0,1,0, - 124,5,124,0,95,7,116,9,131,0,114,54,124,0,106,10, - 125,6,124,4,160,11,161,0,125,7,110,5,124,0,106,12, - 125,6,124,4,125,7,124,7,124,6,118,0,114,106,116,13, - 124,0,106,2,124,4,131,2,125,8,124,0,106,14,68,0, - 93,29,92,2,125,9,125,10,100,5,124,9,23,0,125,11, - 116,13,124,8,124,11,131,2,125,12,116,15,124,12,131,1, - 114,101,124,0,160,16,124,10,124,1,124,12,124,8,103,1, - 124,2,161,5,2,0,1,0,83,0,113,72,116,17,124,8, - 131,1,125,3,124,0,106,14,68,0,93,54,92,2,125,9, - 125,10,122,10,116,13,124,0,106,2,124,4,124,9,23,0, - 131,2,125,12,87,0,110,10,4,0,116,18,121,186,1,0, - 1,0,1,0,89,0,1,0,100,6,83,0,116,19,106,20, - 100,7,124,12,100,3,100,8,141,3,1,0,124,7,124,9, - 23,0,124,6,118,0,114,163,116,15,124,12,131,1,114,163, - 124,0,160,16,124,10,124,1,124,12,100,6,124,2,161,5, - 2,0,1,0,83,0,113,109,124,3,114,184,116,19,160,20, - 100,9,124,8,161,2,1,0,116,19,160,21,124,1,100,6, - 161,2,125,13,124,8,103,1,124,13,95,22,124,13,83,0, - 100,6,83,0,119,0,119,0,41,10,122,111,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, - 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, - 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, - 100,46,10,32,32,32,32,32,32,32,32,70,114,97,0,0, - 0,114,44,0,0,0,114,130,0,0,0,114,236,0,0,0, - 78,122,9,116,114,121,105,110,103,32,123,125,41,1,90,9, - 118,101,114,98,111,115,105,116,121,122,25,112,111,115,115,105, - 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, - 114,32,123,125,41,23,114,104,0,0,0,114,75,0,0,0, - 114,65,0,0,0,114,18,0,0,0,114,82,0,0,0,114, - 35,1,0,0,114,76,0,0,0,114,97,1,0,0,218,11, - 95,102,105,108,108,95,99,97,99,104,101,114,21,0,0,0, - 114,100,1,0,0,114,131,0,0,0,114,99,1,0,0,114, - 67,0,0,0,114,96,1,0,0,114,80,0,0,0,114,91, - 1,0,0,114,83,0,0,0,114,111,0,0,0,114,159,0, - 0,0,114,173,0,0,0,114,207,0,0,0,114,202,0,0, - 0,41,14,114,143,0,0,0,114,163,0,0,0,114,225,0, - 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, - 90,11,116,97,105,108,95,109,111,100,117,108,101,114,193,0, - 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, - 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, - 116,104,114,44,1,0,0,114,211,0,0,0,90,13,105,110, - 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, - 108,95,112,97,116,104,114,210,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,226,0,0,0,246, - 5,0,0,115,86,0,0,0,4,5,14,1,2,1,24,1, - 12,1,6,1,10,1,8,1,6,1,6,2,6,1,10,1, - 6,2,4,1,8,2,12,1,14,1,8,1,10,1,8,1, - 24,1,2,255,8,5,14,2,2,1,20,1,12,1,8,1, - 16,1,12,1,8,1,10,1,4,1,8,255,2,128,4,2, - 12,1,12,1,8,1,4,1,4,1,2,244,2,228,122,20, - 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, - 115,112,101,99,99,1,0,0,0,0,0,0,0,0,0,0, - 0,9,0,0,0,10,0,0,0,67,0,0,0,115,190,0, - 0,0,124,0,106,0,125,1,122,11,116,1,160,2,124,1, - 112,11,116,1,160,3,161,0,161,1,125,2,87,0,110,12, - 4,0,116,4,116,5,116,6,102,3,121,94,1,0,1,0, - 1,0,103,0,125,2,89,0,116,7,106,8,160,9,100,1, - 161,1,115,39,116,10,124,2,131,1,124,0,95,11,110,37, - 116,10,131,0,125,3,124,2,68,0,93,28,125,4,124,4, - 160,12,100,2,161,1,92,3,125,5,125,6,125,7,124,6, - 114,65,100,3,160,13,124,5,124,7,160,14,161,0,161,2, - 125,8,110,2,124,5,125,8,124,3,160,15,124,8,161,1, - 1,0,113,44,124,3,124,0,95,11,116,7,106,8,160,9, - 116,16,161,1,114,92,100,4,100,5,132,0,124,2,68,0, - 131,1,124,0,95,17,100,6,83,0,100,6,83,0,119,0, - 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, - 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, - 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, - 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, - 114,101,99,116,111,114,121,46,114,14,0,0,0,114,97,0, - 0,0,114,88,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,4,0,0,0,83,0,0,0, - 115,20,0,0,0,104,0,124,0,93,6,125,1,124,1,160, - 0,161,0,146,2,113,2,83,0,114,7,0,0,0,41,1, - 114,131,0,0,0,41,2,114,5,0,0,0,90,2,102,110, + 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, + 105,109,112,108,101,109,101,110,116,101,100,41,46,78,218,17, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,41,6,218,4,108,105,115,116,114,15,0,0,0,218,19, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,218,5,105,116,101,109,115,114,153,0,0,0,114, + 78,1,0,0,41,2,114,141,0,0,0,218,6,102,105,110, + 100,101,114,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,78,1,0,0,43,5,0,0,115,14,0,0,0, + 22,4,8,1,10,1,10,1,8,1,2,128,4,252,122,28, + 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,9,0,0, + 0,67,0,0,0,115,76,0,0,0,116,0,106,1,100,1, + 117,1,114,14,116,0,106,1,115,14,116,2,160,3,100,2, + 116,4,161,2,1,0,116,0,106,1,68,0,93,17,125,1, + 122,7,124,1,124,0,131,1,87,0,2,0,1,0,83,0, + 4,0,116,5,121,37,1,0,1,0,1,0,89,0,113,17, + 100,1,83,0,119,0,41,3,122,46,83,101,97,114,99,104, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, + 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, + 116,121,41,6,114,15,0,0,0,218,10,112,97,116,104,95, + 104,111,111,107,115,114,99,0,0,0,114,100,0,0,0,114, + 162,0,0,0,114,142,0,0,0,41,2,114,65,0,0,0, + 90,4,104,111,111,107,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,11,95,112,97,116,104,95,104,111,111, + 107,115,53,5,0,0,115,18,0,0,0,16,3,12,1,10, + 1,2,1,14,1,12,1,4,1,4,2,2,253,122,22,80, + 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, + 104,111,111,107,115,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,100, + 0,0,0,124,1,100,1,107,2,114,20,122,6,116,0,160, + 1,161,0,125,1,87,0,110,9,4,0,116,2,121,49,1, + 0,1,0,1,0,89,0,100,2,83,0,122,8,116,3,106, + 4,124,1,25,0,125,2,87,0,124,2,83,0,4,0,116, + 5,121,48,1,0,1,0,1,0,124,0,160,6,124,1,161, + 1,125,2,124,2,116,3,106,4,124,1,60,0,89,0,124, + 2,83,0,119,0,119,0,41,3,122,210,71,101,116,32,116, + 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, + 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, + 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, + 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, + 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, + 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, + 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, + 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, + 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, + 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, + 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, + 110,101,46,10,10,32,32,32,32,32,32,32,32,114,10,0, + 0,0,78,41,7,114,18,0,0,0,114,82,0,0,0,218, + 17,70,105,108,101,78,111,116,70,111,117,110,100,69,114,114, + 111,114,114,15,0,0,0,114,80,1,0,0,218,8,75,101, + 121,69,114,114,111,114,114,84,1,0,0,41,3,114,221,0, + 0,0,114,65,0,0,0,114,82,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,20,95,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,66,5,0,0,115,28,0,0,0,8,8,2,1,12,1, + 12,1,6,3,2,1,12,1,4,4,12,253,10,1,12,1, + 4,1,2,253,2,250,122,31,80,97,116,104,70,105,110,100, + 101,114,46,95,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,99,3,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,4,0,0,0,67,0,0,0, + 115,138,0,0,0,116,0,124,2,100,1,131,2,114,27,116, + 1,160,2,124,2,161,1,155,0,100,2,157,2,125,3,116, + 3,160,4,124,3,116,5,161,2,1,0,124,2,160,6,124, + 1,161,1,92,2,125,4,125,5,110,21,116,1,160,2,124, + 2,161,1,155,0,100,3,157,2,125,3,116,3,160,4,124, + 3,116,5,161,2,1,0,124,2,160,7,124,1,161,1,125, + 4,103,0,125,5,124,4,100,0,117,1,114,58,116,1,160, + 8,124,1,124,4,161,2,83,0,116,1,160,9,124,1,100, + 0,161,2,125,6,124,5,124,6,95,10,124,6,83,0,41, + 4,78,114,161,0,0,0,122,53,46,102,105,110,100,95,115, + 112,101,99,40,41,32,110,111,116,32,102,111,117,110,100,59, + 32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111, + 32,102,105,110,100,95,108,111,97,100,101,114,40,41,122,53, + 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, + 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, + 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, + 117,108,101,40,41,41,11,114,153,0,0,0,114,159,0,0, + 0,90,12,95,111,98,106,101,99,116,95,110,97,109,101,114, + 99,0,0,0,114,100,0,0,0,114,162,0,0,0,114,161, + 0,0,0,114,229,0,0,0,114,224,0,0,0,114,207,0, + 0,0,114,202,0,0,0,41,7,114,221,0,0,0,114,163, + 0,0,0,114,82,1,0,0,114,166,0,0,0,114,164,0, + 0,0,114,165,0,0,0,114,210,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,16,95,108,101, + 103,97,99,121,95,103,101,116,95,115,112,101,99,88,5,0, + 0,115,26,0,0,0,10,4,16,1,12,2,16,1,16,2, + 12,2,10,1,4,1,8,1,12,1,12,1,6,1,4,1, + 122,27,80,97,116,104,70,105,110,100,101,114,46,95,108,101, + 103,97,99,121,95,103,101,116,95,115,112,101,99,78,99,4, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,5, + 0,0,0,67,0,0,0,115,166,0,0,0,103,0,125,4, + 124,2,68,0,93,67,125,5,116,0,124,5,116,1,116,2, + 102,2,131,2,115,14,113,4,124,0,160,3,124,5,161,1, + 125,6,124,6,100,1,117,1,114,71,116,4,124,6,100,2, + 131,2,114,35,124,6,160,5,124,1,124,3,161,2,125,7, + 110,6,124,0,160,6,124,1,124,6,161,2,125,7,124,7, + 100,1,117,0,114,46,113,4,124,7,106,7,100,1,117,1, + 114,55,124,7,2,0,1,0,83,0,124,7,106,8,125,8, + 124,8,100,1,117,0,114,66,116,9,100,3,131,1,130,1, + 124,4,160,10,124,8,161,1,1,0,113,4,116,11,160,12, + 124,1,100,1,161,2,125,7,124,4,124,7,95,8,124,7, + 83,0,41,4,122,63,70,105,110,100,32,116,104,101,32,108, + 111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,97, + 99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,115, + 32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,32, + 110,97,109,101,46,78,114,226,0,0,0,122,19,115,112,101, + 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, + 41,13,114,185,0,0,0,114,109,0,0,0,218,5,98,121, + 116,101,115,114,87,1,0,0,114,153,0,0,0,114,226,0, + 0,0,114,88,1,0,0,114,164,0,0,0,114,202,0,0, + 0,114,142,0,0,0,114,191,0,0,0,114,159,0,0,0, + 114,207,0,0,0,41,9,114,221,0,0,0,114,163,0,0, + 0,114,65,0,0,0,114,225,0,0,0,218,14,110,97,109, + 101,115,112,97,99,101,95,112,97,116,104,90,5,101,110,116, + 114,121,114,82,1,0,0,114,210,0,0,0,114,165,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,9,95,103,101,116,95,115,112,101,99,109,5,0,0,115, + 42,0,0,0,4,5,8,1,14,1,2,1,10,1,8,1, + 10,1,14,1,12,2,8,1,2,1,10,1,8,1,6,1, + 8,1,8,1,10,5,2,128,12,2,6,1,4,1,122,20, + 80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95, + 115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,5,0,0,0,67,0,0,0,115,94,0, + 0,0,124,2,100,1,117,0,114,7,116,0,106,1,125,2, + 124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4, + 100,1,117,0,114,20,100,1,83,0,124,4,106,3,100,1, + 117,0,114,45,124,4,106,4,125,5,124,5,114,43,100,1, + 124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3, + 124,4,95,4,124,4,83,0,100,1,83,0,124,4,83,0, + 41,2,122,141,84,114,121,32,116,111,32,102,105,110,100,32, + 97,32,115,112,101,99,32,102,111,114,32,39,102,117,108,108, + 110,97,109,101,39,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,101,97,114,99,104, + 32,105,115,32,98,97,115,101,100,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,32,32,32,32,32,32,32, + 32,78,41,7,114,15,0,0,0,114,65,0,0,0,114,91, + 1,0,0,114,164,0,0,0,114,202,0,0,0,114,205,0, + 0,0,114,47,1,0,0,41,6,114,221,0,0,0,114,163, + 0,0,0,114,65,0,0,0,114,225,0,0,0,114,210,0, + 0,0,114,90,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,226,0,0,0,141,5,0,0,115, + 26,0,0,0,8,6,6,1,14,1,8,1,4,1,10,1, + 6,1,4,1,6,3,16,1,4,1,4,2,4,2,122,20, + 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,3,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,42,0, + 0,0,116,0,160,1,100,1,116,2,161,2,1,0,124,0, + 160,3,124,1,124,2,161,2,125,3,124,3,100,2,117,0, + 114,18,100,2,83,0,124,3,106,4,83,0,41,3,122,170, + 102,105,110,100,32,116,104,101,32,109,111,100,117,108,101,32, + 111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,39, + 112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,110, + 100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,100, + 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, + 10,10,32,32,32,32,32,32,32,32,122,101,80,97,116,104, + 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,40,41,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,32,97,110,100,32,115,108,97,116,101,100,32,102,111, + 114,32,114,101,109,111,118,97,108,32,105,110,32,80,121,116, + 104,111,110,32,51,46,49,50,59,32,117,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,78,114,227,0,0,0,114,228,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,229,0,0,0, + 165,5,0,0,115,14,0,0,0,6,8,2,2,4,254,12, + 3,8,1,4,1,6,1,122,22,80,97,116,104,70,105,110, + 100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,79,0,0,0,115,28,0,0,0,100,1,100, + 2,108,0,109,1,125,2,1,0,124,2,106,2,124,0,105, + 0,124,1,164,1,142,1,83,0,41,4,97,32,1,0,0, + 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105, + 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32, + 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32, + 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, + 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, + 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, + 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, + 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, + 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, + 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110, + 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111, + 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96, + 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101, + 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116, + 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32, + 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116, + 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46, + 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32, + 114,0,0,0,0,41,1,218,18,77,101,116,97,100,97,116, + 97,80,97,116,104,70,105,110,100,101,114,78,41,3,90,18, + 105,109,112,111,114,116,108,105,98,46,109,101,116,97,100,97, + 116,97,114,92,1,0,0,218,18,102,105,110,100,95,100,105, + 115,116,114,105,98,117,116,105,111,110,115,41,3,114,144,0, + 0,0,114,145,0,0,0,114,92,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,93,1,0,0, + 181,5,0,0,115,4,0,0,0,12,10,16,1,122,29,80, + 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,100, + 105,115,116,114,105,98,117,116,105,111,110,115,114,69,0,0, + 0,114,230,0,0,0,41,14,114,150,0,0,0,114,149,0, + 0,0,114,151,0,0,0,114,152,0,0,0,114,233,0,0, + 0,114,78,1,0,0,114,84,1,0,0,114,234,0,0,0, + 114,87,1,0,0,114,88,1,0,0,114,91,1,0,0,114, + 226,0,0,0,114,229,0,0,0,114,93,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,77,1,0,0,39,5,0,0,115,36,0,0,0, + 8,0,4,2,2,2,10,1,2,9,10,1,2,12,10,1, + 2,21,10,1,2,20,12,1,2,31,12,1,2,23,12,1, + 2,15,14,1,114,77,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100, + 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90, + 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132, + 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83, + 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122, + 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100, + 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99, + 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102, + 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99, + 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114, + 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32, + 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32, + 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104, + 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100, + 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111, + 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, + 0,0,7,0,0,0,115,112,0,0,0,103,0,125,3,124, + 2,68,0,93,16,92,2,137,0,125,4,124,3,160,0,135, + 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161, + 1,1,0,113,4,124,3,124,0,95,1,124,1,112,27,100, + 3,124,0,95,2,116,3,124,0,106,2,131,1,115,43,116, + 4,116,5,160,6,161,0,124,0,106,2,131,2,124,0,95, + 2,100,4,124,0,95,7,116,8,131,0,124,0,95,9,116, + 8,131,0,124,0,95,10,100,5,83,0,41,6,122,154,73, + 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, + 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, + 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, + 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, + 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, + 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, + 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, + 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, + 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, + 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,0, + 0,0,115,24,0,0,0,129,0,124,0,93,7,125,1,124, + 1,136,0,102,2,86,0,1,0,113,2,100,0,83,0,114, + 69,0,0,0,114,7,0,0,0,114,43,1,0,0,169,1, + 114,164,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 9,0,0,0,210,5,0,0,115,4,0,0,0,6,128,18, + 0,122,38,70,105,108,101,70,105,110,100,101,114,46,95,95, + 105,110,105,116,95,95,46,60,108,111,99,97,108,115,62,46, + 60,103,101,110,101,120,112,114,62,114,97,0,0,0,114,130, + 0,0,0,78,41,11,114,191,0,0,0,218,8,95,108,111, + 97,100,101,114,115,114,65,0,0,0,114,86,0,0,0,114, + 67,0,0,0,114,18,0,0,0,114,82,0,0,0,218,11, + 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, + 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, + 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, + 104,101,41,5,114,143,0,0,0,114,65,0,0,0,218,14, + 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, + 108,111,97,100,101,114,115,114,212,0,0,0,114,7,0,0, + 0,114,95,1,0,0,114,8,0,0,0,114,236,0,0,0, + 204,5,0,0,115,20,0,0,0,4,4,12,1,26,1,6, + 1,10,2,10,1,18,1,6,1,8,1,12,1,122,19,70, + 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, + 100,1,124,0,95,0,100,2,83,0,41,3,122,31,73,110, + 118,97,108,105,100,97,116,101,32,116,104,101,32,100,105,114, + 101,99,116,111,114,121,32,109,116,105,109,101,46,114,130,0, + 0,0,78,41,1,114,97,1,0,0,114,21,1,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,78, + 1,0,0,220,5,0,0,114,81,0,0,0,122,28,70,105, + 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67, + 0,0,0,115,54,0,0,0,116,0,160,1,100,1,116,2, + 161,2,1,0,124,0,160,3,124,1,161,1,125,2,124,2, + 100,2,117,0,114,19,100,2,103,0,102,2,83,0,124,2, + 106,4,124,2,106,5,112,25,103,0,102,2,83,0,41,3, + 122,197,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44, + 32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99, + 101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103, + 101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117, + 114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115, + 116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, + 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,122,101,70,105,108,101,70,105,110, + 100,101,114,46,102,105,110,100,95,108,111,97,100,101,114,40, + 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, + 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, + 32,51,46,49,50,59,32,117,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,78,41, + 6,114,99,0,0,0,114,100,0,0,0,114,101,0,0,0, + 114,226,0,0,0,114,164,0,0,0,114,202,0,0,0,41, + 3,114,143,0,0,0,114,163,0,0,0,114,210,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 13,0,0,0,70,6,0,0,115,2,0,0,0,20,0,122, - 41,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, - 108,95,99,97,99,104,101,46,60,108,111,99,97,108,115,62, - 46,60,115,101,116,99,111,109,112,62,78,41,18,114,65,0, - 0,0,114,18,0,0,0,90,7,108,105,115,116,100,105,114, - 114,82,0,0,0,114,85,1,0,0,218,15,80,101,114,109, - 105,115,115,105,111,110,69,114,114,111,114,218,18,78,111,116, - 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, - 15,0,0,0,114,25,0,0,0,114,26,0,0,0,114,98, - 1,0,0,114,99,1,0,0,114,126,0,0,0,114,89,0, - 0,0,114,131,0,0,0,218,3,97,100,100,114,27,0,0, - 0,114,100,1,0,0,41,9,114,143,0,0,0,114,65,0, - 0,0,90,8,99,111,110,116,101,110,116,115,90,21,108,111, - 119,101,114,95,115,117,102,102,105,120,95,99,111,110,116,101, - 110,116,115,114,70,1,0,0,114,141,0,0,0,114,54,1, - 0,0,114,44,1,0,0,90,8,110,101,119,95,110,97,109, - 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,102,1,0,0,41,6,0,0,115,38,0,0,0,6,2, - 2,1,22,1,18,1,6,3,12,3,12,1,6,7,8,1, - 16,1,4,1,18,1,4,2,12,1,6,1,12,1,20,1, - 4,255,2,233,122,22,70,105,108,101,70,105,110,100,101,114, - 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,7,0,0,0,115,18,0,0,0,135,0,135,1,102,2, - 100,1,100,2,132,8,125,2,124,2,83,0,41,4,97,20, - 1,0,0,65,32,99,108,97,115,115,32,109,101,116,104,111, - 100,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, - 97,32,99,108,111,115,117,114,101,32,116,111,32,117,115,101, - 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, - 107,10,32,32,32,32,32,32,32,32,119,104,105,99,104,32, - 119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,105, - 110,115,116,97,110,99,101,32,117,115,105,110,103,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,108,111,97,100, - 101,114,115,32,97,110,100,32,116,104,101,32,112,97,116,104, - 10,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32, - 111,110,32,116,104,101,32,99,108,111,115,117,114,101,46,10, - 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, - 112,97,116,104,32,99,97,108,108,101,100,32,111,110,32,116, - 104,101,32,99,108,111,115,117,114,101,32,105,115,32,110,111, - 116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,115,10,32,32, - 32,32,32,32,32,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,32,32,32,32,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,19,0,0,0, - 115,36,0,0,0,116,0,124,0,131,1,115,10,116,1,100, - 1,124,0,100,2,141,2,130,1,136,0,124,0,103,1,136, - 1,162,1,82,0,142,0,83,0,41,4,122,45,80,97,116, - 104,32,104,111,111,107,32,102,111,114,32,105,109,112,111,114, - 116,108,105,98,46,109,97,99,104,105,110,101,114,121,46,70, - 105,108,101,70,105,110,100,101,114,46,122,30,111,110,108,121, - 32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,101, - 32,115,117,112,112,111,114,116,101,100,114,71,0,0,0,78, - 41,2,114,83,0,0,0,114,142,0,0,0,114,71,0,0, - 0,169,2,114,221,0,0,0,114,101,1,0,0,114,7,0, - 0,0,114,8,0,0,0,218,24,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, - 114,82,6,0,0,115,6,0,0,0,8,2,12,1,16,1, - 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, - 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,78,114,7,0,0,0,41,3, - 114,221,0,0,0,114,101,1,0,0,114,107,1,0,0,114, - 7,0,0,0,114,106,1,0,0,114,8,0,0,0,218,9, - 112,97,116,104,95,104,111,111,107,72,6,0,0,115,4,0, - 0,0,14,10,4,6,122,20,70,105,108,101,70,105,110,100, - 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,67,0,0,0,114,67,1,0,0,41,2,78,122,16,70, - 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, - 2,114,89,0,0,0,114,65,0,0,0,114,21,1,0,0, + 161,0,0,0,226,5,0,0,115,14,0,0,0,6,7,2, + 2,4,254,10,3,8,1,8,1,16,1,122,22,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,97, + 100,101,114,99,6,0,0,0,0,0,0,0,0,0,0,0, + 7,0,0,0,6,0,0,0,67,0,0,0,115,26,0,0, + 0,124,1,124,2,124,3,131,2,125,6,116,0,124,2,124, + 3,124,6,124,4,100,1,141,4,83,0,41,2,78,114,201, + 0,0,0,41,1,114,213,0,0,0,41,7,114,143,0,0, + 0,114,211,0,0,0,114,163,0,0,0,114,65,0,0,0, + 90,4,115,109,115,108,114,225,0,0,0,114,164,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 68,1,0,0,90,6,0,0,114,61,1,0,0,122,19,70, - 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, - 95,95,114,69,0,0,0,41,15,114,150,0,0,0,114,149, - 0,0,0,114,151,0,0,0,114,152,0,0,0,114,236,0, - 0,0,114,78,1,0,0,114,167,0,0,0,114,229,0,0, - 0,114,161,0,0,0,114,91,1,0,0,114,226,0,0,0, - 114,102,1,0,0,114,234,0,0,0,114,108,1,0,0,114, - 68,1,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,94,1,0,0,195,5,0, - 0,115,24,0,0,0,8,0,4,2,8,7,8,16,4,4, - 8,2,8,15,10,5,8,51,2,31,10,1,12,17,114,94, - 1,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,8,0,0,0,67,0,0,0,115,144,0,0, - 0,124,0,160,0,100,1,161,1,125,4,124,0,160,0,100, - 2,161,1,125,5,124,4,115,33,124,5,114,18,124,5,106, - 1,125,4,110,15,124,2,124,3,107,2,114,28,116,2,124, - 1,124,2,131,2,125,4,110,5,116,3,124,1,124,2,131, - 2,125,4,124,5,115,42,116,4,124,1,124,2,124,4,100, - 3,141,3,125,5,122,19,124,5,124,0,100,2,60,0,124, - 4,124,0,100,1,60,0,124,2,124,0,100,4,60,0,124, - 3,124,0,100,5,60,0,87,0,100,0,83,0,4,0,116, - 5,121,71,1,0,1,0,1,0,89,0,100,0,83,0,119, - 0,41,6,78,218,10,95,95,108,111,97,100,101,114,95,95, - 218,8,95,95,115,112,101,99,95,95,114,95,1,0,0,90, - 8,95,95,102,105,108,101,95,95,90,10,95,95,99,97,99, - 104,101,100,95,95,41,6,218,3,103,101,116,114,164,0,0, - 0,114,41,1,0,0,114,34,1,0,0,114,213,0,0,0, - 218,9,69,120,99,101,112,116,105,111,110,41,6,90,2,110, - 115,114,141,0,0,0,90,8,112,97,116,104,110,97,109,101, - 90,9,99,112,97,116,104,110,97,109,101,114,164,0,0,0, + 91,1,0,0,241,5,0,0,115,8,0,0,0,10,1,8, + 1,2,1,6,255,122,20,70,105,108,101,70,105,110,100,101, + 114,46,95,103,101,116,95,115,112,101,99,78,99,3,0,0, + 0,0,0,0,0,0,0,0,0,14,0,0,0,9,0,0, + 0,67,0,0,0,115,120,1,0,0,100,1,125,3,124,1, + 160,0,100,2,161,1,100,3,25,0,125,4,122,12,116,1, + 124,0,106,2,112,17,116,3,160,4,161,0,131,1,106,5, + 125,5,87,0,110,9,4,0,116,6,121,187,1,0,1,0, + 1,0,100,4,125,5,89,0,124,5,124,0,106,7,107,3, + 114,43,124,0,160,8,161,0,1,0,124,5,124,0,95,7, + 116,9,131,0,114,54,124,0,106,10,125,6,124,4,160,11, + 161,0,125,7,110,5,124,0,106,12,125,6,124,4,125,7, + 124,7,124,6,118,0,114,106,116,13,124,0,106,2,124,4, + 131,2,125,8,124,0,106,14,68,0,93,29,92,2,125,9, + 125,10,100,5,124,9,23,0,125,11,116,13,124,8,124,11, + 131,2,125,12,116,15,124,12,131,1,114,101,124,0,160,16, + 124,10,124,1,124,12,124,8,103,1,124,2,161,5,2,0, + 1,0,83,0,113,72,116,17,124,8,131,1,125,3,124,0, + 106,14,68,0,93,54,92,2,125,9,125,10,122,10,116,13, + 124,0,106,2,124,4,124,9,23,0,131,2,125,12,87,0, + 110,10,4,0,116,18,121,186,1,0,1,0,1,0,89,0, + 1,0,100,6,83,0,116,19,106,20,100,7,124,12,100,3, + 100,8,141,3,1,0,124,7,124,9,23,0,124,6,118,0, + 114,163,116,15,124,12,131,1,114,163,124,0,160,16,124,10, + 124,1,124,12,100,6,124,2,161,5,2,0,1,0,83,0, + 113,109,124,3,114,184,116,19,160,20,100,9,124,8,161,2, + 1,0,116,19,160,21,124,1,100,6,161,2,125,13,124,8, + 103,1,124,13,95,22,124,13,83,0,100,6,83,0,119,0, + 119,0,41,10,122,111,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103, + 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105, + 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32, + 32,32,32,32,32,70,114,97,0,0,0,114,44,0,0,0, + 114,130,0,0,0,114,236,0,0,0,78,122,9,116,114,121, + 105,110,103,32,123,125,41,1,90,9,118,101,114,98,111,115, + 105,116,121,122,25,112,111,115,115,105,98,108,101,32,110,97, + 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,23, + 114,104,0,0,0,114,75,0,0,0,114,65,0,0,0,114, + 18,0,0,0,114,82,0,0,0,114,35,1,0,0,114,76, + 0,0,0,114,97,1,0,0,218,11,95,102,105,108,108,95, + 99,97,99,104,101,114,21,0,0,0,114,100,1,0,0,114, + 131,0,0,0,114,99,1,0,0,114,67,0,0,0,114,96, + 1,0,0,114,80,0,0,0,114,91,1,0,0,114,83,0, + 0,0,114,111,0,0,0,114,159,0,0,0,114,173,0,0, + 0,114,207,0,0,0,114,202,0,0,0,41,14,114,143,0, + 0,0,114,163,0,0,0,114,225,0,0,0,90,12,105,115, + 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, + 95,109,111,100,117,108,101,114,193,0,0,0,90,5,99,97, + 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, + 101,90,9,98,97,115,101,95,112,97,116,104,114,44,1,0, + 0,114,211,0,0,0,90,13,105,110,105,116,95,102,105,108, + 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, 114,210,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,14,95,102,105,120,95,117,112,95,109,111, - 100,117,108,101,96,6,0,0,115,36,0,0,0,10,2,10, - 1,4,1,4,1,8,1,8,1,12,1,10,2,4,1,14, - 1,2,1,8,1,8,1,8,1,14,1,12,1,6,2,2, - 254,114,113,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, - 38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,0, - 116,3,116,4,102,2,125,1,116,5,116,6,102,2,125,2, - 124,0,124,1,124,2,103,3,83,0,41,2,122,95,82,101, - 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, - 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, - 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, - 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, - 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, - 102,102,105,120,101,115,41,46,10,32,32,32,32,78,41,7, - 114,30,1,0,0,114,187,0,0,0,218,18,101,120,116,101, - 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,34, - 1,0,0,114,127,0,0,0,114,41,1,0,0,114,113,0, - 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, - 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, - 100,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,208,0,0,0,119,6,0,0,115,8,0,0,0,12, - 5,8,1,8,1,10,1,114,208,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, - 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, - 83,0,114,69,0,0,0,41,1,114,159,0,0,0,41,1, - 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, - 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,130,6,0,0,115,2,0, - 0,0,8,2,114,116,1,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,116, - 1,131,0,125,1,116,2,106,3,160,4,116,5,106,6,124, - 1,142,0,103,1,161,1,1,0,116,2,106,7,160,8,116, - 9,161,1,1,0,100,1,83,0,41,2,122,41,73,110,115, - 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, - 110,101,110,116,115,46,78,41,10,114,116,1,0,0,114,208, - 0,0,0,114,15,0,0,0,114,83,1,0,0,114,191,0, - 0,0,114,94,1,0,0,114,108,1,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,61,0,0,0,114,77,1,0, - 0,41,2,114,115,1,0,0,90,17,115,117,112,112,111,114, - 116,101,100,95,108,111,97,100,101,114,115,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,8,95,105,110,115, - 116,97,108,108,135,6,0,0,115,8,0,0,0,8,2,6, - 1,20,1,16,1,114,118,1,0,0,41,1,114,87,0,0, - 0,114,69,0,0,0,41,3,78,78,78,41,2,114,0,0, - 0,0,114,0,0,0,0,41,1,84,41,85,114,152,0,0, - 0,114,159,0,0,0,114,187,0,0,0,114,91,0,0,0, - 114,15,0,0,0,114,99,0,0,0,114,184,0,0,0,114, - 25,0,0,0,114,231,0,0,0,90,2,110,116,114,18,0, - 0,0,114,215,0,0,0,90,5,112,111,115,105,120,114,50, - 0,0,0,218,3,97,108,108,114,59,0,0,0,114,136,0, - 0,0,114,57,0,0,0,114,62,0,0,0,90,20,95,112, - 97,116,104,115,101,112,115,95,119,105,116,104,95,99,111,108, - 111,110,114,28,0,0,0,90,37,95,67,65,83,69,95,73, - 78,83,69,78,83,73,84,73,86,69,95,80,76,65,84,70, - 79,82,77,83,95,66,89,84,69,83,95,75,69,89,114,27, - 0,0,0,114,29,0,0,0,114,21,0,0,0,114,36,0, - 0,0,114,42,0,0,0,114,45,0,0,0,114,67,0,0, - 0,114,74,0,0,0,114,75,0,0,0,114,79,0,0,0, - 114,80,0,0,0,114,83,0,0,0,114,86,0,0,0,114, - 95,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, - 100,101,95,95,114,186,0,0,0,114,34,0,0,0,114,172, - 0,0,0,114,33,0,0,0,114,39,0,0,0,114,8,1, - 0,0,114,116,0,0,0,114,112,0,0,0,114,127,0,0, - 0,114,61,0,0,0,114,114,1,0,0,114,232,0,0,0, - 114,113,0,0,0,90,23,68,69,66,85,71,95,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,27, - 79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,114,121,0,0,0, - 114,128,0,0,0,114,135,0,0,0,114,137,0,0,0,114, - 139,0,0,0,114,160,0,0,0,114,167,0,0,0,114,176, - 0,0,0,114,180,0,0,0,114,182,0,0,0,114,189,0, - 0,0,114,194,0,0,0,114,195,0,0,0,114,200,0,0, - 0,218,6,111,98,106,101,99,116,114,209,0,0,0,114,213, - 0,0,0,114,214,0,0,0,114,235,0,0,0,114,249,0, - 0,0,114,11,1,0,0,114,34,1,0,0,114,41,1,0, - 0,114,30,1,0,0,114,47,1,0,0,114,73,1,0,0, - 114,77,1,0,0,114,94,1,0,0,114,113,1,0,0,114, - 208,0,0,0,114,116,1,0,0,114,118,1,0,0,114,7, + 8,0,0,0,114,226,0,0,0,246,5,0,0,115,86,0, + 0,0,4,5,14,1,2,1,24,1,12,1,6,1,10,1, + 8,1,6,1,6,2,6,1,10,1,6,2,4,1,8,2, + 12,1,14,1,8,1,10,1,8,1,24,1,2,255,8,5, + 14,2,2,1,20,1,12,1,8,1,16,1,12,1,8,1, + 10,1,4,1,8,255,2,128,4,2,12,1,12,1,8,1, + 4,1,4,1,2,244,2,228,122,20,70,105,108,101,70,105, + 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,1, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,10, + 0,0,0,67,0,0,0,115,190,0,0,0,124,0,106,0, + 125,1,122,11,116,1,160,2,124,1,112,11,116,1,160,3, + 161,0,161,1,125,2,87,0,110,12,4,0,116,4,116,5, + 116,6,102,3,121,94,1,0,1,0,1,0,103,0,125,2, + 89,0,116,7,106,8,160,9,100,1,161,1,115,39,116,10, + 124,2,131,1,124,0,95,11,110,37,116,10,131,0,125,3, + 124,2,68,0,93,28,125,4,124,4,160,12,100,2,161,1, + 92,3,125,5,125,6,125,7,124,6,114,65,100,3,160,13, + 124,5,124,7,160,14,161,0,161,2,125,8,110,2,124,5, + 125,8,124,3,160,15,124,8,161,1,1,0,113,44,124,3, + 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,92, + 100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17, + 100,6,83,0,100,6,83,0,119,0,41,7,122,68,70,105, + 108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32, + 112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101, + 115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102, + 111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114, + 121,46,114,14,0,0,0,114,97,0,0,0,114,88,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,83,0,0,0,115,20,0,0,0,104, + 0,124,0,93,6,125,1,124,1,160,0,161,0,146,2,113, + 2,83,0,114,7,0,0,0,41,1,114,131,0,0,0,41, + 2,114,5,0,0,0,90,2,102,110,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,13,0,0,0,70,6, + 0,0,115,2,0,0,0,20,0,122,41,70,105,108,101,70, + 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, + 101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, + 111,109,112,62,78,41,18,114,65,0,0,0,114,18,0,0, + 0,90,7,108,105,115,116,100,105,114,114,82,0,0,0,114, + 85,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,15,0,0,0,114,25, + 0,0,0,114,26,0,0,0,114,98,1,0,0,114,99,1, + 0,0,114,126,0,0,0,114,89,0,0,0,114,131,0,0, + 0,218,3,97,100,100,114,27,0,0,0,114,100,1,0,0, + 41,9,114,143,0,0,0,114,65,0,0,0,90,8,99,111, + 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, + 102,102,105,120,95,99,111,110,116,101,110,116,115,114,70,1, + 0,0,114,141,0,0,0,114,54,1,0,0,114,44,1,0, + 0,90,8,110,101,119,95,110,97,109,101,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,41, + 6,0,0,115,38,0,0,0,6,2,2,1,22,1,18,1, + 6,3,12,3,12,1,6,7,8,1,16,1,4,1,18,1, + 4,2,12,1,6,1,12,1,20,1,4,255,2,233,122,22, + 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, + 95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, + 18,0,0,0,135,0,135,1,102,2,100,1,100,2,132,8, + 125,2,124,2,83,0,41,4,97,20,1,0,0,65,32,99, + 108,97,115,115,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,114,101,116,117,114,110,115,32,97,32,99,108,111,115, + 117,114,101,32,116,111,32,117,115,101,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,10,32,32,32,32, + 32,32,32,32,119,104,105,99,104,32,119,105,108,108,32,114, + 101,116,117,114,110,32,97,110,32,105,110,115,116,97,110,99, + 101,32,117,115,105,110,103,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,108,111,97,100,101,114,115,32,97,110, + 100,32,116,104,101,32,112,97,116,104,10,32,32,32,32,32, + 32,32,32,99,97,108,108,101,100,32,111,110,32,116,104,101, + 32,99,108,111,115,117,114,101,46,10,10,32,32,32,32,32, + 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,99, + 97,108,108,101,100,32,111,110,32,116,104,101,32,99,108,111, + 115,117,114,101,32,105,115,32,110,111,116,32,97,32,100,105, + 114,101,99,116,111,114,121,44,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,115,10,32,32,32,32,32,32,32,32, + 114,97,105,115,101,100,46,10,10,32,32,32,32,32,32,32, + 32,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,19,0,0,0,115,36,0,0,0,116, + 0,124,0,131,1,115,10,116,1,100,1,124,0,100,2,141, + 2,130,1,136,0,124,0,103,1,136,1,162,1,82,0,142, + 0,83,0,41,4,122,45,80,97,116,104,32,104,111,111,107, + 32,102,111,114,32,105,109,112,111,114,116,108,105,98,46,109, + 97,99,104,105,110,101,114,121,46,70,105,108,101,70,105,110, + 100,101,114,46,122,30,111,110,108,121,32,100,105,114,101,99, + 116,111,114,105,101,115,32,97,114,101,32,115,117,112,112,111, + 114,116,101,100,114,71,0,0,0,78,41,2,114,83,0,0, + 0,114,142,0,0,0,114,71,0,0,0,169,2,114,221,0, + 0,0,114,101,1,0,0,114,7,0,0,0,114,8,0,0, + 0,218,24,112,97,116,104,95,104,111,111,107,95,102,111,114, + 95,70,105,108,101,70,105,110,100,101,114,82,6,0,0,115, + 6,0,0,0,8,2,12,1,16,1,122,54,70,105,108,101, + 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, + 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,78,114,7,0,0,0,41,3,114,221,0,0,0,114, + 101,1,0,0,114,107,1,0,0,114,7,0,0,0,114,106, + 1,0,0,114,8,0,0,0,218,9,112,97,116,104,95,104, + 111,111,107,72,6,0,0,115,4,0,0,0,14,10,4,6, + 122,20,70,105,108,101,70,105,110,100,101,114,46,112,97,116, + 104,95,104,111,111,107,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, + 67,1,0,0,41,2,78,122,16,70,105,108,101,70,105,110, + 100,101,114,40,123,33,114,125,41,41,2,114,89,0,0,0, + 114,65,0,0,0,114,21,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,68,1,0,0,90,6, + 0,0,114,61,1,0,0,122,19,70,105,108,101,70,105,110, + 100,101,114,46,95,95,114,101,112,114,95,95,114,69,0,0, + 0,41,15,114,150,0,0,0,114,149,0,0,0,114,151,0, + 0,0,114,152,0,0,0,114,236,0,0,0,114,78,1,0, + 0,114,167,0,0,0,114,229,0,0,0,114,161,0,0,0, + 114,91,1,0,0,114,226,0,0,0,114,102,1,0,0,114, + 234,0,0,0,114,108,1,0,0,114,68,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, - 115,180,0,0,0,4,0,4,22,8,3,8,1,8,1,8, - 1,8,1,10,3,4,1,8,1,10,1,8,2,4,3,10, - 1,6,2,22,2,8,1,8,1,10,1,14,1,4,4,4, - 1,2,1,2,1,4,255,8,4,6,16,8,3,8,5,8, - 5,4,6,10,1,8,30,8,6,8,8,8,10,8,9,8, - 5,4,7,10,1,8,8,10,5,10,22,0,127,16,29,12, - 1,4,2,4,1,6,2,4,1,10,1,8,2,6,2,8, - 2,16,2,8,71,8,40,8,19,8,12,8,12,8,31,8, - 20,8,33,8,28,10,24,10,13,10,10,8,11,6,14,4, - 3,2,1,12,255,14,73,14,67,16,30,0,127,14,17,18, - 50,18,45,18,25,14,53,14,63,14,49,0,127,14,29,0, - 127,10,30,8,23,8,11,12,5, + 0,0,114,94,1,0,0,195,5,0,0,115,24,0,0,0, + 8,0,4,2,8,7,8,16,4,4,8,2,8,15,10,5, + 8,51,2,31,10,1,12,17,114,94,1,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,8,0, + 0,0,67,0,0,0,115,144,0,0,0,124,0,160,0,100, + 1,161,1,125,4,124,0,160,0,100,2,161,1,125,5,124, + 4,115,33,124,5,114,18,124,5,106,1,125,4,110,15,124, + 2,124,3,107,2,114,28,116,2,124,1,124,2,131,2,125, + 4,110,5,116,3,124,1,124,2,131,2,125,4,124,5,115, + 42,116,4,124,1,124,2,124,4,100,3,141,3,125,5,122, + 19,124,5,124,0,100,2,60,0,124,4,124,0,100,1,60, + 0,124,2,124,0,100,4,60,0,124,3,124,0,100,5,60, + 0,87,0,100,0,83,0,4,0,116,5,121,71,1,0,1, + 0,1,0,89,0,100,0,83,0,119,0,41,6,78,218,10, + 95,95,108,111,97,100,101,114,95,95,218,8,95,95,115,112, + 101,99,95,95,114,95,1,0,0,90,8,95,95,102,105,108, + 101,95,95,90,10,95,95,99,97,99,104,101,100,95,95,41, + 6,218,3,103,101,116,114,164,0,0,0,114,41,1,0,0, + 114,34,1,0,0,114,213,0,0,0,218,9,69,120,99,101, + 112,116,105,111,110,41,6,90,2,110,115,114,141,0,0,0, + 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, + 104,110,97,109,101,114,164,0,0,0,114,210,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,14, + 95,102,105,120,95,117,112,95,109,111,100,117,108,101,96,6, + 0,0,115,36,0,0,0,10,2,10,1,4,1,4,1,8, + 1,8,1,12,1,10,2,4,1,14,1,2,1,8,1,8, + 1,8,1,14,1,12,1,6,2,2,254,114,113,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0, + 116,1,160,2,161,0,102,2,125,0,116,3,116,4,102,2, + 125,1,116,5,116,6,102,2,125,2,124,0,124,1,124,2, + 103,3,83,0,41,2,122,95,82,101,116,117,114,110,115,32, + 97,32,108,105,115,116,32,111,102,32,102,105,108,101,45,98, + 97,115,101,100,32,109,111,100,117,108,101,32,108,111,97,100, + 101,114,115,46,10,10,32,32,32,32,69,97,99,104,32,105, + 116,101,109,32,105,115,32,97,32,116,117,112,108,101,32,40, + 108,111,97,100,101,114,44,32,115,117,102,102,105,120,101,115, + 41,46,10,32,32,32,32,78,41,7,114,30,1,0,0,114, + 187,0,0,0,218,18,101,120,116,101,110,115,105,111,110,95, + 115,117,102,102,105,120,101,115,114,34,1,0,0,114,127,0, + 0,0,114,41,1,0,0,114,113,0,0,0,41,3,90,10, + 101,120,116,101,110,115,105,111,110,115,90,6,115,111,117,114, + 99,101,90,8,98,121,116,101,99,111,100,101,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,208,0,0,0, + 119,6,0,0,115,8,0,0,0,12,5,8,1,8,1,10, + 1,114,208,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,115, + 8,0,0,0,124,0,97,0,100,0,83,0,114,69,0,0, + 0,41,1,114,159,0,0,0,41,1,218,17,95,98,111,111, + 116,115,116,114,97,112,95,109,111,100,117,108,101,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,21,95,115, + 101,116,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,130,6,0,0,115,2,0,0,0,8,2,114,116, + 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0, + 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, + 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161, + 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100, + 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116, + 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, + 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46, + 78,41,10,114,116,1,0,0,114,208,0,0,0,114,15,0, + 0,0,114,83,1,0,0,114,191,0,0,0,114,94,1,0, + 0,114,108,1,0,0,218,9,109,101,116,97,95,112,97,116, + 104,114,61,0,0,0,114,77,1,0,0,41,2,114,115,1, + 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, + 97,100,101,114,115,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,8,95,105,110,115,116,97,108,108,135,6, + 0,0,115,8,0,0,0,8,2,6,1,20,1,16,1,114, + 118,1,0,0,41,1,114,87,0,0,0,114,69,0,0,0, + 41,3,78,78,78,41,2,114,0,0,0,0,114,0,0,0, + 0,41,1,84,41,85,114,152,0,0,0,114,159,0,0,0, + 114,187,0,0,0,114,91,0,0,0,114,15,0,0,0,114, + 99,0,0,0,114,184,0,0,0,114,25,0,0,0,114,231, + 0,0,0,90,2,110,116,114,18,0,0,0,114,215,0,0, + 0,90,5,112,111,115,105,120,114,50,0,0,0,218,3,97, + 108,108,114,59,0,0,0,114,136,0,0,0,114,57,0,0, + 0,114,62,0,0,0,90,20,95,112,97,116,104,115,101,112, + 115,95,119,105,116,104,95,99,111,108,111,110,114,28,0,0, + 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, + 89,84,69,83,95,75,69,89,114,27,0,0,0,114,29,0, + 0,0,114,21,0,0,0,114,36,0,0,0,114,42,0,0, + 0,114,45,0,0,0,114,67,0,0,0,114,74,0,0,0, + 114,75,0,0,0,114,79,0,0,0,114,80,0,0,0,114, + 83,0,0,0,114,86,0,0,0,114,95,0,0,0,218,4, + 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,186, + 0,0,0,114,34,0,0,0,114,172,0,0,0,114,33,0, + 0,0,114,39,0,0,0,114,8,1,0,0,114,116,0,0, + 0,114,112,0,0,0,114,127,0,0,0,114,61,0,0,0, + 114,114,1,0,0,114,232,0,0,0,114,113,0,0,0,90, + 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, + 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,114,121,0,0,0,114,128,0,0,0,114, + 135,0,0,0,114,137,0,0,0,114,139,0,0,0,114,160, + 0,0,0,114,167,0,0,0,114,176,0,0,0,114,180,0, + 0,0,114,182,0,0,0,114,189,0,0,0,114,194,0,0, + 0,114,195,0,0,0,114,200,0,0,0,218,6,111,98,106, + 101,99,116,114,209,0,0,0,114,213,0,0,0,114,214,0, + 0,0,114,235,0,0,0,114,249,0,0,0,114,11,1,0, + 0,114,34,1,0,0,114,41,1,0,0,114,30,1,0,0, + 114,47,1,0,0,114,73,1,0,0,114,77,1,0,0,114, + 94,1,0,0,114,113,1,0,0,114,208,0,0,0,114,116, + 1,0,0,114,118,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,60,109, + 111,100,117,108,101,62,1,0,0,0,115,180,0,0,0,4, + 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, + 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, + 1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4, + 255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8, + 30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8, + 8,10,5,10,22,0,127,16,29,12,1,4,2,4,1,6, + 2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8, + 40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10, + 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, + 73,14,67,16,30,0,127,14,17,18,50,18,45,18,25,14, + 53,14,63,14,49,0,127,14,29,0,127,10,30,8,23,8, + 11,12,5, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index b9eb5b1fc6dc10..fa00ffc89ea268 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -760,8 +760,8 @@ const unsigned char _Py_M__zipimport[] = { 1,16,1,16,1,16,1,12,1,10,1,18,1,8,1,2, 2,14,1,14,1,18,1,14,1,18,1,2,4,28,1,18, 1,4,255,14,2,18,1,10,2,10,2,2,3,14,1,14, - 1,18,1,12,2,12,1,20,1,8,1,8,1,4,202,14, - 6,18,128,14,49,4,1,2,247,2,246,2,246,2,227,2, + 1,18,1,12,2,12,1,20,1,8,1,8,1,4,202,2, + 6,30,196,14,109,4,1,2,247,2,246,2,246,2,227,2, 227,2,248,2,246,2,248,114,27,0,0,0,117,190,1,0, 0,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, @@ -864,7 +864,7 @@ const unsigned char _Py_M__zipimport[] = { 0,0,20,1,8,1,8,1,12,2,2,2,14,1,12,1, 18,1,10,1,12,1,8,1,16,2,18,2,16,2,16,1, 12,1,8,1,2,1,14,1,12,1,18,1,10,1,12,1, - 8,1,14,255,16,128,8,3,4,2,2,3,10,1,12,1, + 8,1,2,255,28,233,8,26,4,2,2,3,10,1,12,1, 8,1,10,1,2,254,2,243,2,240,114,59,0,0,0,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,124, From webhook-mailer at python.org Fri Apr 30 09:49:25 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 13:49:25 -0000 Subject: [Python-checkins] bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750) Message-ID: https://github.com/python/cpython/commit/387397f8a4244c983f4568c16a28842e3268fe5d commit: 387397f8a4244c983f4568c16a28842e3268fe5d branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-30T15:49:17+02:00 summary: bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750) files: M Lib/test/test_select.py M Modules/selectmodule.c diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index f63564e6b0ee6..1ef5624354987 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -87,6 +87,10 @@ def fileno(self): a[:] = [F()] * 10 self.assertEqual(select.select([], a, []), ([], a[:5], [])) + def test_disallow_instantiation(self): + tp = type(select.poll()) + self.assertRaises(TypeError, tp) + def tearDownModule(): support.reap_children() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index f80da5895401f..5038c325faa4e 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -728,13 +728,6 @@ newPollObject(PyObject *module) return self; } -static PyObject * -poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type)); - return NULL; -} - static void poll_dealloc(pollObject *self) { @@ -2275,16 +2268,14 @@ static PyMethodDef poll_methods[] = { static PyType_Slot poll_Type_slots[] = { {Py_tp_dealloc, poll_dealloc}, {Py_tp_methods, poll_methods}, - {Py_tp_new, poll_new}, {0, 0}, }; static PyType_Spec poll_Type_spec = { - "select.poll", - sizeof(pollObject), - 0, - Py_TPFLAGS_DEFAULT, - poll_Type_slots + .name = "select.poll", + .basicsize = sizeof(pollObject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots = poll_Type_slots, }; #ifdef HAVE_SYS_DEVPOLL_H From webhook-mailer at python.org Fri Apr 30 10:05:05 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 14:05:05 -0000 Subject: [Python-checkins] bpo-43916: Apply Py_TPFLAGS_DISALLOW_INSTANTIATION to selected types (GH-25748) Message-ID: https://github.com/python/cpython/commit/9746cda705decebc0ba572d95612796afd06dcd4 commit: 9746cda705decebc0ba572d95612796afd06dcd4 branch: master author: Erlend Egeberg Aasland committer: vstinner date: 2021-04-30T16:04:57+02:00 summary: bpo-43916: Apply Py_TPFLAGS_DISALLOW_INSTANTIATION to selected types (GH-25748) Apply Py_TPFLAGS_DISALLOW_INSTANTIATION to the following types: * _dbm.dbm * _gdbm.gdbm * _multibytecodec.MultibyteCodec * _sre..SRE_Scanner * _thread._localdummy * _thread.lock * _winapi.Overlapped * array.arrayiterator * functools.KeyWrapper * functools._lru_list_elem * pyexpat.xmlparser * re.Match * re.Pattern * unicodedata.UCD * zlib.Compress * zlib.Decompress files: M Lib/test/test_array.py M Lib/test/test_curses.py M Lib/test/test_dbm_gnu.py M Lib/test/test_functools.py M Lib/test/test_re.py M Lib/test/test_tcl.py M Lib/test/test_threading.py M Lib/test/test_unicodedata.py M Lib/test/test_zlib.py M Modules/_dbmmodule.c M Modules/_functoolsmodule.c M Modules/_gdbmmodule.c M Modules/_sre.c M Modules/_threadmodule.c M Modules/_winapi.c M Modules/arraymodule.c M Modules/cjkcodecs/multibytecodec.c M Modules/pyexpat.c M Modules/unicodedata.c M Modules/zlibmodule.c diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 11184add6d399b..b18467fb889d8b 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -40,6 +40,12 @@ def test_bad_constructor(self): self.assertRaises(TypeError, array.array, 'xx') self.assertRaises(ValueError, array.array, 'x') + @support.cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + tp = type(iter(array.array('I'))) + self.assertRaises(TypeError, tp) + @support.cpython_only def test_immutable(self): # bpo-43908: check that array.array is immutable diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 280a9dc0eedfce..8bf48a6454d691 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -6,7 +6,7 @@ import tempfile import unittest -from test.support import requires, verbose, SaveSignals +from test.support import requires, verbose, SaveSignals, cpython_only from test.support.import_helper import import_module # Optionally test curses module. This currently requires that the @@ -1046,8 +1046,10 @@ def __del__(self): panel.set_userptr(A()) panel.set_userptr(None) + @cpython_only @requires_curses_func('panel') - def test_new_curses_panel(self): + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) w = curses.newwin(10, 10) panel = curses.panel.new_panel(w) self.assertRaises(TypeError, type(panel)) diff --git a/Lib/test/test_dbm_gnu.py b/Lib/test/test_dbm_gnu.py index 017d0ffa658bd6..b3e55728c8e70d 100644 --- a/Lib/test/test_dbm_gnu.py +++ b/Lib/test/test_dbm_gnu.py @@ -1,5 +1,5 @@ from test import support -from test.support import import_helper +from test.support import import_helper, cpython_only gdbm = import_helper.import_module("dbm.gnu") #skip if not supported import unittest import os @@ -27,6 +27,13 @@ def tearDown(self): self.g.close() unlink(filename) + @cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + self.g = gdbm.open(filename, 'c') + tp = type(self.g) + self.assertRaises(TypeError, tp) + def test_key_methods(self): self.g = gdbm.open(filename, 'c') self.assertEqual(self.g.keys(), []) diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index fba9281deb3763..3320ab7ec6649d 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -948,6 +948,12 @@ class TestCmpToKeyC(TestCmpToKey, unittest.TestCase): if c_functools: cmp_to_key = c_functools.cmp_to_key + @support.cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + tp = type(c_functools.cmp_to_key(None)) + self.assertRaises(TypeError, tp) + class TestCmpToKeyPy(TestCmpToKey, unittest.TestCase): cmp_to_key = staticmethod(py_functools.cmp_to_key) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 96d0cdb17a7ee3..e1b2c794291848 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -2215,6 +2215,15 @@ def test_signedness(self): self.assertGreaterEqual(sre_compile.MAXREPEAT, 0) self.assertGreaterEqual(sre_compile.MAXGROUPS, 0) + @cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + self.assertRaises(TypeError, re.Match) + self.assertRaises(TypeError, re.Pattern) + pat = re.compile("") + tp = type(pat.scanner("")) + self.assertRaises(TypeError, tp) + class ExternalTests(unittest.TestCase): diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py index ee7344c48ed0be..cd3aacf6f8844c 100644 --- a/Lib/test/test_tcl.py +++ b/Lib/test/test_tcl.py @@ -736,8 +736,11 @@ def check(value): check('{\n') check('}\n') + @support.cpython_only def test_new_tcl_obj(self): self.assertRaises(TypeError, _tkinter.Tcl_Obj) + self.assertRaises(TypeError, _tkinter.TkttType) + self.assertRaises(TypeError, _tkinter.TkappType) class BigmemTclTest(unittest.TestCase): diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index f44f17f2978f7b..546773e3329afa 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -119,6 +119,13 @@ def func(): pass thread = threading.Thread(target=func) self.assertEqual(thread.name, "Thread-5 (func)") + @cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + lock = threading.Lock() + tp = type(lock) + self.assertRaises(TypeError, tp) + # Create a bunch of threads, let each do some work, wait until all are # done. def test_various_ops(self): diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index edfd860fd5f12f..c6bbe3f5ff2b33 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -11,7 +11,8 @@ import sys import unicodedata import unittest -from test.support import open_urlresource, requires_resource, script_helper +from test.support import (open_urlresource, requires_resource, script_helper, + cpython_only) class UnicodeMethodsTest(unittest.TestCase): @@ -225,6 +226,11 @@ def test_east_asian_width_9_0_changes(self): class UnicodeMiscTest(UnicodeDatabaseTest): + @cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + self.assertRaises(TypeError, unicodedata.UCD) + def test_failed_import_during_compiling(self): # Issue 4367 # Decoding \N escapes requires the unicodedata module. If it can't be diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 7f30cac64f71b9..694ef6e48757b4 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -129,6 +129,14 @@ def test_overflow(self): with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompressobj().flush(sys.maxsize + 1) + @support.cpython_only + def test_disallow_instantiation(self): + # Ensure that the type disallows instantiation (bpo-43916) + comp_type = type(zlib.compressobj()) + decomp_type = type(zlib.decompressobj()) + self.assertRaises(TypeError, comp_type) + self.assertRaises(TypeError, decomp_type) + class BaseCompressTestCase(object): def check_big_compress_buffer(self, size, compress_func): diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 97772a04d08fe0..58f9c2c357b2c6 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -414,7 +414,7 @@ static PyType_Spec dbmtype_spec = { // dbmtype_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = dbmtype_spec_slots, }; diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index eea542e18c92d2..19cfa9b07b340d 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -546,7 +546,7 @@ static PyType_Slot keyobject_type_slots[] = { static PyType_Spec keyobject_type_spec = { .name = "functools.KeyWrapper", .basicsize = sizeof(keyobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = keyobject_type_slots }; @@ -766,7 +766,7 @@ static PyType_Slot lru_list_elem_type_slots[] = { static PyType_Spec lru_list_elem_type_spec = { .name = "functools._lru_list_elem", .basicsize = sizeof(lru_list_elem), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = lru_list_elem_type_slots }; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index 9e843acbaa6ba5..c52190a7ed2db5 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -570,7 +570,7 @@ static PyType_Spec gdbmtype_spec = { // dbmtype_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = gdbmtype_spec_slots, }; diff --git a/Modules/_sre.c b/Modules/_sre.c index 59f7551a227cd3..9d0fc4ab7c03ab 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2690,7 +2690,8 @@ static PyType_Spec pattern_spec = { .name = "re.Pattern", .basicsize = sizeof(PatternObject), .itemsize = sizeof(SRE_CODE), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = pattern_slots, }; @@ -2755,7 +2756,8 @@ static PyType_Spec match_spec = { .name = "re.Match", .basicsize = sizeof(MatchObject), .itemsize = sizeof(Py_ssize_t), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = match_slots, }; @@ -2781,7 +2783,8 @@ static PyType_Slot scanner_slots[] = { static PyType_Spec scanner_spec = { .name = "_" SRE_MODULE ".SRE_Scanner", .basicsize = sizeof(ScannerObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = scanner_slots, }; diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 7feb0b8a1f1f4d..6924d6553a1ff8 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -312,7 +312,8 @@ static PyType_Slot lock_type_slots[] = { static PyType_Spec lock_type_spec = { .name = "_thread.lock", .basicsize = sizeof(lockobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = lock_type_slots, }; @@ -683,7 +684,7 @@ static PyType_Slot local_dummy_type_slots[] = { static PyType_Spec local_dummy_type_spec = { .name = "_thread._localdummy", .basicsize = sizeof(localdummyobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = local_dummy_type_slots, }; diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 9d5a45adac59d0..bc2126c8e2ee99 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -331,7 +331,7 @@ static PyType_Slot winapi_overlapped_type_slots[] = { static PyType_Spec winapi_overlapped_type_spec = { .name = "_winapi.Overlapped", .basicsize = sizeof(OverlappedObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = winapi_overlapped_type_slots, }; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index d65c1449eb38e5..aa5886f4af7f69 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2987,7 +2987,8 @@ static PyType_Slot arrayiter_slots[] = { static PyType_Spec arrayiter_spec = { .name = "array.arrayiterator", .basicsize = sizeof(arrayiterobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = arrayiter_slots, }; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 5070c983d402c3..cb7182ff21fbcd 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -748,7 +748,8 @@ static PyType_Slot multibytecodec_slots[] = { static PyType_Spec multibytecodec_spec = { .name = MODULE_NAME ".MultibyteCodec", .basicsize = sizeof(MultibyteCodecObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = multibytecodec_slots, }; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index a13d340a3ea0f0..7f727a86f5f47d 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1506,7 +1506,8 @@ static PyType_Slot _xml_parse_type_spec_slots[] = { static PyType_Spec _xml_parse_type_spec = { .name = "pyexpat.xmlparser", .basicsize = sizeof(xmlparseobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = _xml_parse_type_spec_slots, }; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index aebae7da576561..1a41e1c2c527f4 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1454,7 +1454,7 @@ static PyType_Slot ucd_type_slots[] = { static PyType_Spec ucd_type_spec = { .name = "unicodedata.UCD", .basicsize = sizeof(PreviousDBVersion), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = ucd_type_slots }; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 8a20dfcbf9e27a..fc63ca9445a8a5 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1386,11 +1386,10 @@ static PyType_Slot Comptype_slots[] = { }; static PyType_Spec Comptype_spec = { - "zlib.Compress", - sizeof(compobject), - 0, - Py_TPFLAGS_DEFAULT, - Comptype_slots + .name = "zlib.Compress", + .basicsize = sizeof(compobject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots= Comptype_slots, }; static PyType_Slot Decomptype_slots[] = { @@ -1401,11 +1400,10 @@ static PyType_Slot Decomptype_slots[] = { }; static PyType_Spec Decomptype_spec = { - "zlib.Decompress", - sizeof(compobject), - 0, - Py_TPFLAGS_DEFAULT, - Decomptype_slots + .name = "zlib.Decompress", + .basicsize = sizeof(compobject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots = Decomptype_slots, }; PyDoc_STRVAR(zlib_module_documentation, From webhook-mailer at python.org Fri Apr 30 12:20:02 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 16:20:02 -0000 Subject: [Python-checkins] bpo-43916: select.devpoll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25751) Message-ID: https://github.com/python/cpython/commit/7dcf0f6db38b7ab6918608542d3a0c6da0a286af commit: 7dcf0f6db38b7ab6918608542d3a0c6da0a286af branch: master author: Victor Stinner committer: vstinner date: 2021-04-30T18:19:57+02:00 summary: bpo-43916: select.devpoll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25751) files: M Lib/test/test_select.py M Modules/selectmodule.c diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index 1ef5624354987..957a633f3230e 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -91,6 +91,10 @@ def test_disallow_instantiation(self): tp = type(select.poll()) self.assertRaises(TypeError, tp) + if hasattr(select, 'devpoll'): + tp = type(select.devpoll()) + self.assertRaises(TypeError, tp) + def tearDownModule(): support.reap_children() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 5038c325faa4e..3ecd0c32b3038 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1110,13 +1110,6 @@ newDevPollObject(PyObject *module) return self; } -static PyObject * -devpoll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type)); - return NULL; -} - static void devpoll_dealloc(devpollObject *self) { @@ -1131,7 +1124,6 @@ static PyType_Slot devpoll_Type_slots[] = { {Py_tp_dealloc, devpoll_dealloc}, {Py_tp_getset, devpoll_getsetlist}, {Py_tp_methods, devpoll_methods}, - {Py_tp_new, devpoll_new}, {0, 0}, }; @@ -1139,7 +1131,7 @@ static PyType_Spec devpoll_Type_spec = { "select.devpoll", sizeof(devpollObject), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, devpoll_Type_slots }; From webhook-mailer at python.org Fri Apr 30 12:26:00 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 30 Apr 2021 16:26:00 -0000 Subject: [Python-checkins] =?utf-8?q?=5B3=2E8=5D_bpo-42589=3A_Change_URL_?= =?utf-8?q?for_=27from=27_link_when_used_in_a_raised_exc=E2=80=A6_=28GH-25?= =?utf-8?q?755=29?= Message-ID: https://github.com/python/cpython/commit/ea6ec96c379a77ae827e844d840a9fd773781124 commit: ea6ec96c379a77ae827e844d840a9fd773781124 branch: 3.8 author: sblondon committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-30T09:25:51-07:00 summary: [3.8] bpo-42589: Change URL for 'from' link when used in a raised exc? (GH-25755) ?eption (GH-23872) Links for 'raise Exception from x' target to 'The raise statement' (7.8) section instead of 'The import statement' (7.11) section. There are more modified links than in the bug report because I searched some other ones which can get the same improvement.. (cherry picked from commit 2fd928c8c1328424130cb9c51fc02ad5f9a66328) This PR is a cherry pick to python 3.8 from https://github.com/python/cpython/pull/23872. The fix was the removal of the change in the other file because the fixed section was introduced in 3.9. So the file does not need to be fixed in 3.8. Co-authored-by: sblondon Automerge-Triggered-By: GH:Mariatta files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 519862cc09d708..368ae45e5815b1 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -42,12 +42,12 @@ include the originating exception(s) and the final exception. When raising a new exception (rather than using a bare ``raise`` to re-raise the exception currently being handled), the implicit exception context can be -supplemented with an explicit cause by using :keyword:`from` with +supplemented with an explicit cause by using :keyword:`from` with :keyword:`raise`:: raise new_exc from original_exc -The expression following :keyword:`from` must be an exception or ``None``. It +The expression following :keyword:`from` must be an exception or ``None``. It will be set as :attr:`__cause__` on the raised exception. Setting :attr:`__cause__` also implicitly sets the :attr:`__suppress_context__` attribute to ``True``, so that using ``raise new_exc from None`` From webhook-mailer at python.org Fri Apr 30 12:26:49 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 30 Apr 2021 16:26:49 -0000 Subject: [Python-checkins] bpo-43901: Fix refleaks in test_module (GH-25754) Message-ID: https://github.com/python/cpython/commit/e374a40afa09be728b01653a06c9febfad9c9c50 commit: e374a40afa09be728b01653a06c9febfad9c9c50 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-30T17:26:45+01:00 summary: bpo-43901: Fix refleaks in test_module (GH-25754) files: M Lib/test/test_module.py M Objects/moduleobject.c diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index 0fd82ea713f7c..65319d5dca6d5 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -2,6 +2,7 @@ import unittest import weakref from test.support import gc_collect +from test.support import import_helper from test.support.script_helper import assert_python_ok import sys @@ -334,7 +335,7 @@ def test_annotations_getset_raises(self): del foo.__annotations__ def test_annotations_are_created_correctly(self): - from test import ann_module4 + ann_module4 = import_helper.import_fresh_module('test.ann_module4') self.assertTrue("__annotations__" in ann_module4.__dict__) del ann_module4.__annotations__ self.assertFalse("__annotations__" in ann_module4.__dict__) diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index 04346f7ad1067..b69e5cedbb5f3 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -845,6 +845,7 @@ module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored)) if ((dict == NULL) || !PyDict_Check(dict)) { PyErr_Format(PyExc_TypeError, ".__dict__ is not a dictionary"); + Py_XDECREF(dict); return NULL; } @@ -876,25 +877,31 @@ module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored)) static int module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored)) { + int ret = -1; PyObject *dict = _PyObject_GetAttrId((PyObject *)m, &PyId___dict__); if ((dict == NULL) || !PyDict_Check(dict)) { PyErr_Format(PyExc_TypeError, ".__dict__ is not a dictionary"); - return -1; + goto exit; } if (value != NULL) { /* set */ - return _PyDict_SetItemId(dict, &PyId___annotations__, value); + ret = _PyDict_SetItemId(dict, &PyId___annotations__, value); + goto exit; } /* delete */ if (!_PyDict_ContainsId(dict, &PyId___annotations__)) { PyErr_Format(PyExc_AttributeError, "__annotations__"); - return -1; + goto exit; } - return _PyDict_DelItemId(dict, &PyId___annotations__); + ret = _PyDict_DelItemId(dict, &PyId___annotations__); + +exit: + Py_XDECREF(dict); + return ret; } From webhook-mailer at python.org Fri Apr 30 12:40:38 2021 From: webhook-mailer at python.org (vstinner) Date: Fri, 30 Apr 2021 16:40:38 -0000 Subject: [Python-checkins] bpo-43916: _md5.md5 uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25753) Message-ID: https://github.com/python/cpython/commit/665c7746fca180266b121183c2d5136c547006e0 commit: 665c7746fca180266b121183c2d5136c547006e0 branch: master author: Victor Stinner committer: vstinner date: 2021-04-30T18:40:30+02:00 summary: bpo-43916: _md5.md5 uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25753) The following types use Py_TPFLAGS_DISALLOW_INSTANTIATION flag: * _md5.md5 * _sha1.sha1 * _sha256.sha224 * _sha256.sha256 * _sha512.sha384 * _sha512.sha512 files: M Lib/test/test_hashlib.py M Modules/md5module.c M Modules/sha1module.c M Modules/sha256module.c M Modules/sha512module.c diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 1236aa723b199..c7c128e75568e 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -901,8 +901,39 @@ def test_get_fips_mode(self): if fips_mode is not None: self.assertIsInstance(fips_mode, int) + def test_disallow_instanciation(self): + constructors = [] + try: + import _md5 + constructors.append(_md5.md5) + except ImportError: + pass + try: + import _sha1 + constructors.append(_sha1.sha1) + except ImportError: + pass + try: + import _sha256 + constructors.append(_sha256.sha224) + constructors.append(_sha256.sha256) + except ImportError: + pass + try: + import _sha512 + constructors.append(_sha512.sha384) + constructors.append(_sha512.sha512) + except ImportError: + pass + + for constructor in constructors: + h = constructor() + with self.subTest(constructor=constructor): + hash_type = type(h) + self.assertRaises(TypeError, hash_type) + @unittest.skipUnless(HASH is not None, 'need _hashlib') - def test_internal_types(self): + def test_hash_disallow_instanciation(self): # internal types like _hashlib.HASH are not constructable with self.assertRaisesRegex( TypeError, "cannot create '_hashlib.HASH' instance" diff --git a/Modules/md5module.c b/Modules/md5module.c index b2e65a0a5ffd2..2ae94a456fdb3 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -484,7 +484,7 @@ static PyType_Slot md5_type_slots[] = { static PyType_Spec md5_type_spec = { .name = "_md5.md5", .basicsize = sizeof(MD5object), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = md5_type_slots }; diff --git a/Modules/sha1module.c b/Modules/sha1module.c index 7126db93b1a3f..9ac46c58a7f34 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -462,7 +462,7 @@ static PyType_Slot sha1_type_slots[] = { static PyType_Spec sha1_type_spec = { .name = "_sha1.sha1", .basicsize = sizeof(SHA1object), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = sha1_type_slots }; @@ -554,7 +554,7 @@ _sha1_exec(PyObject *module) } Py_INCREF(st->sha1_type); - if (PyModule_AddObject(module, + if (PyModule_AddObject(module, "SHA1Type", (PyObject *)st->sha1_type) < 0) { Py_DECREF(st->sha1_type); diff --git a/Modules/sha256module.c b/Modules/sha256module.c index b90e5df782674..ccb1862a99f19 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -544,14 +544,14 @@ static PyType_Slot sha256_types_slots[] = { static PyType_Spec sha224_type_spec = { .name = "_sha256.sha224", .basicsize = sizeof(SHAobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = sha256_types_slots }; static PyType_Spec sha256_type_spec = { .name = "_sha256.sha256", .basicsize = sizeof(SHAobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = sha256_types_slots }; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 0d8f51e5ae5e0..5e8572caf5518 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -602,7 +602,7 @@ static PyType_Slot sha512_sha384_type_slots[] = { static PyType_Spec sha512_sha384_type_spec = { .name = "_sha512.sha384", .basicsize = sizeof(SHAobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = sha512_sha384_type_slots }; @@ -619,7 +619,7 @@ static PyType_Slot sha512_sha512_type_slots[] = { static PyType_Spec sha512_sha512_type_spec = { .name = "_sha512.sha512", .basicsize = sizeof(SHAobject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .slots = sha512_sha512_type_slots }; From webhook-mailer at python.org Fri Apr 30 14:34:36 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 30 Apr 2021 18:34:36 -0000 Subject: [Python-checkins] bpo-43981: Fix reference leaks in test_squeezer (GH-25758) Message-ID: https://github.com/python/cpython/commit/6689e45dfee75d756c540ff0946ebf0ae8847f43 commit: 6689e45dfee75d756c540ff0946ebf0ae8847f43 branch: master author: Pablo Galindo committer: pablogsal date: 2021-04-30T19:34:29+01:00 summary: bpo-43981: Fix reference leaks in test_squeezer (GH-25758) files: A Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst M Lib/idlelib/idle_test/test_squeezer.py diff --git a/Lib/idlelib/idle_test/test_squeezer.py b/Lib/idlelib/idle_test/test_squeezer.py index eaf81a5fc1a053..86c5d41b629719 100644 --- a/Lib/idlelib/idle_test/test_squeezer.py +++ b/Lib/idlelib/idle_test/test_squeezer.py @@ -311,6 +311,7 @@ def make_mock_squeezer(self): squeezer = Mock() squeezer.editwin.text = Text(root) squeezer.editwin.per = Percolator(squeezer.editwin.text) + self.addCleanup(squeezer.editwin.per.close) # Set default values for the configuration settings. squeezer.auto_squeeze_min_lines = 50 diff --git a/Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst b/Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst new file mode 100644 index 00000000000000..10eb8b01d13a48 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst @@ -0,0 +1 @@ +Fix reference leak in test_squeezer. Patch by Pablo Galindo \ No newline at end of file From webhook-mailer at python.org Fri Apr 30 15:02:06 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 30 Apr 2021 19:02:06 -0000 Subject: [Python-checkins] bpo-43979: Remove unnecessary operation from urllib.parse.parse_qsl (GH-25756) Message-ID: https://github.com/python/cpython/commit/6143fcdf8bfe54c24e3081bcee423f4d51f35c4e commit: 6143fcdf8bfe54c24e3081bcee423f4d51f35c4e branch: master author: Dong-hee Na committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-30T12:01:55-07:00 summary: bpo-43979: Remove unnecessary operation from urllib.parse.parse_qsl (GH-25756) Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst M Lib/urllib/parse.py diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index c11c695a741c8a..4249163f0edde7 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -752,9 +752,8 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, if max_num_fields < num_fields: raise ValueError('Max number of fields exceeded') - pairs = [s1 for s1 in qs.split(separator)] r = [] - for name_value in pairs: + for name_value in qs.split(separator): if not name_value and not strict_parsing: continue nv = name_value.split('=', 1) diff --git a/Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst b/Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst new file mode 100644 index 00000000000000..d5d1caa3e56827 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst @@ -0,0 +1,2 @@ +Removed an unnecessary list comprehension before looping from +:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee Na. From webhook-mailer at python.org Fri Apr 30 17:04:48 2021 From: webhook-mailer at python.org (brettcannon) Date: Fri, 30 Apr 2021 21:04:48 -0000 Subject: [Python-checkins] bpo-43888: Remove coverage builds from CI (GH-25679) Message-ID: https://github.com/python/cpython/commit/726c931b3896dc73fd156e2340b5ef0b8f55cfb7 commit: 726c931b3896dc73fd156e2340b5ef0b8f55cfb7 branch: master author: Ammar Askar committer: brettcannon date: 2021-04-30T14:04:40-07:00 summary: bpo-43888: Remove coverage builds from CI (GH-25679) The coverage builds were consistently timing out in CI, suggesting that people were not reviewing the uploaded reports. files: D .github/codecov.yml D .github/workflows/coverage.yml M .travis.yml M README.rst diff --git a/.github/codecov.yml b/.github/codecov.yml deleted file mode 100644 index ea504f48672eac..00000000000000 --- a/.github/codecov.yml +++ /dev/null @@ -1,30 +0,0 @@ -codecov: - strict_yaml_branch: master - notify: - require_ci_to_pass: true -comment: off -ignore: - - "Doc/**/*" - - "Misc/**/*" - - "Mac/**/*" - - "PC/**/*" - - "PCbuild/**/*" - - "Tools/**/*" - - "Grammar/*" -coverage: - precision: 2 - range: 70...90 - round: down - status: - changes: off - project: off - patch: off -parsers: - gcov: - branch_detection: - conditional: true - loop: true - macro: false - method: false - javascript: - enable_partials: false diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml deleted file mode 100644 index 1480a92b5c4400..00000000000000 --- a/.github/workflows/coverage.yml +++ /dev/null @@ -1,95 +0,0 @@ -name: Coverage - -on: - push: - branches: - - master - - 3.9 - - 3.8 - - 3.7 - paths-ignore: - - 'Doc/**' - - 'Misc/**' - #pull_request: - # branches: - # - master - # - 3.9 - # - 3.8 - # - 3.7 - # paths-ignore: - # - 'Doc/**' - # - 'Misc/**' - -jobs: - coverage_ubuntu: - name: 'Ubuntu (Coverage)' - runs-on: ubuntu-latest - env: - OPENSSL_VER: 1.1.1k - steps: - - uses: actions/checkout at v2 - - name: Install Dependencies - run: sudo ./.github/workflows/posix-deps-apt.sh - - name: 'Restore OpenSSL build' - id: cache-openssl - uses: actions/cache at v2.1.4 - with: - path: ./multissl/openssl/${{ env.OPENSSL_VER }} - key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - - name: Install OpenSSL - if: steps.cache-openssl.outputs.cache-hit != 'true' - run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $OPENSSL_VER --system Linux - - name: Configure CPython - run: ./configure --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER - - name: Build CPython - run: make -j4 - - name: Display build info - run: make pythoninfo - - name: 'Coverage Preparation' - run: | - ./python -m venv .venv - source ./.venv/bin/activate - python -m pip install -U coverage - python -m pip install -r Misc/requirements-test.txt - python -m test.pythoninfo - export PYTHONPATH=`find .venv -name fullcoverage` - - name: 'Tests with coverage' - timeout-minutes: 100 # 1h40m, ref https://bugs.python.org/issue43888 - run: > - source ./.venv/bin/activate && - xvfb-run python -m coverage - run --branch --pylib - -m test - --fail-env-changed - -uall,-cpu - -x test_multiprocessing_fork - -x test_multiprocessing_forkserver - -x test_multiprocessing_spawn - -x test_concurrent_futures - || true - - name: 'Publish code coverage results' - run: | - export PYTHONPATH= - source ./.venv/bin/activate - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - - c_coverage_ubuntu: - name: 'Ubuntu (C Coverage)' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout at v2 - - name: Install Dependencies - run: sudo ./.github/workflows/posix-deps-apt.sh - - name: Configure CPython - run: ./configure - - name: 'Build CPython and measure coverage' - run: xvfb-run make -j4 coverage-report - - name: 'Publish code coverage results' - if: always() - run: | - make pythoninfo - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.travis.yml b/.travis.yml index fc063216914446..1112a0b266227b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,61 +69,6 @@ matrix: - make -C Doc/ PYTHON=../python venv script: xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W -j4" doctest - - name: "Test code coverage (Python)" - os: linux - language: c - compiler: gcc - env: OPTIONAL=true - addons: - apt: - packages: - - xvfb - before_script: - - | - if [[ "$TRAVIS_PULL_REQUEST" != "false" ]] - then - echo "Don't run Python coverage on pull requests." - exit - fi - - ./configure - - make -j4 - # Need a venv that can parse covered code. - - ./python -m venv venv - - ./venv/bin/python -m pip install -U coverage - - ./venv/bin/python -m pip install -r Misc/requirements-test.txt - - ./venv/bin/python -m test.pythoninfo - - export PYTHONPATH=`find venv -name fullcoverage` - script: - # Skip tests that re-run the entire test suite. - - xvfb-run ./venv/bin/python -m coverage run --branch --pylib -m test --fail-env-changed -uall,-cpu -x test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_multiprocessing_spawn -x test_concurrent_futures || true - after_script: # Probably should be after_success once test suite updated to run under coverage.py. - # Make the `coverage` command available to Codecov w/ a version of Python that can parse all source files. - - export PYTHONPATH= - - source ./venv/bin/activate - - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml - - name: "Test code coverage (C)" - os: linux - language: c - compiler: gcc - env: OPTIONAL=true - addons: - apt: - packages: - - lcov - - xvfb - before_script: - - | - if [[ "$TRAVIS_PULL_REQUEST" != "false" ]] - then - echo "Don't run C coverage on pull requests." - exit - fi - - ./configure - script: - - xvfb-run make -j4 coverage-report - after_script: # Probably should be after_success once test suite updated to run under coverage.py. - - make pythoninfo - - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml before_install: diff --git a/README.rst b/README.rst index 02a34d28aa489a..18d6e6a96f937e 100644 --- a/README.rst +++ b/README.rst @@ -13,10 +13,6 @@ This is Python version 3.10.0 alpha 7 :alt: CPython build status on Azure DevOps :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=master -.. image:: https://codecov.io/gh/python/cpython/branch/master/graph/badge.svg - :alt: CPython code coverage on Codecov - :target: https://codecov.io/gh/python/cpython - .. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg :alt: Python Discourse chat :target: https://discuss.python.org/ From webhook-mailer at python.org Fri Apr 30 18:06:14 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 30 Apr 2021 22:06:14 -0000 Subject: [Python-checkins] bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) Message-ID: https://github.com/python/cpython/commit/0048c60f01deec4435748e851f9ec21b504d2d2f commit: 0048c60f01deec4435748e851f9ec21b504d2d2f branch: master author: Tarjei B?rland committer: terryjreedy date: 2021-04-30T18:05:45-04:00 summary: bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) 'e ,' to 'e, '. files: M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 08c5b473df287..7d94720f8131d 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -1645,7 +1645,7 @@ def back(self, distance): Argument: distance -- a number - Move the turtle backward by distance ,opposite to the direction the + Move the turtle backward by distance, opposite to the direction the turtle is headed. Do not change the turtle's heading. Example (for a Turtle instance named turtle): From webhook-mailer at python.org Fri Apr 30 18:27:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 30 Apr 2021 22:27:58 -0000 Subject: [Python-checkins] bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) Message-ID: https://github.com/python/cpython/commit/a7f15ba5476051471638957b4d028097d080b290 commit: a7f15ba5476051471638957b4d028097d080b290 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-04-30T15:27:48-07:00 summary: bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) 'e ,' to 'e, '. (cherry picked from commit 0048c60f01deec4435748e851f9ec21b504d2d2f) Co-authored-by: Tarjei B?rland files: M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 024fed858f683f..6e19032cce2a43 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -1645,7 +1645,7 @@ def back(self, distance): Argument: distance -- a number - Move the turtle backward by distance ,opposite to the direction the + Move the turtle backward by distance, opposite to the direction the turtle is headed. Do not change the turtle's heading. Example (for a Turtle instance named turtle): From webhook-mailer at python.org Fri Apr 30 18:35:14 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 30 Apr 2021 22:35:14 -0000 Subject: [Python-checkins] bpo-43928: Fix 'succesfully' typo in document (GH-25569) Message-ID: https://github.com/python/cpython/commit/e08c67372d62236409da296353827985a3202e8a commit: e08c67372d62236409da296353827985a3202e8a branch: master author: JT committer: terryjreedy date: 2021-04-30T18:35:07-04:00 summary: bpo-43928: Fix 'succesfully' typo in document (GH-25569) files: M Doc/c-api/memory.rst diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst index 1cb0990f5d0115..efddc6f7be5e71 100644 --- a/Doc/c-api/memory.rst +++ b/Doc/c-api/memory.rst @@ -306,7 +306,7 @@ memory from the Python heap. .. note:: There is no guarantee that the memory returned by these allocators can be - succesfully casted to a Python object when intercepting the allocating + successfully casted to a Python object when intercepting the allocating functions in this domain by the methods described in the :ref:`Customize Memory Allocators ` section. From webhook-mailer at python.org Fri Apr 30 18:35:53 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 30 Apr 2021 22:35:53 -0000 Subject: [Python-checkins] bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) Message-ID: https://github.com/python/cpython/commit/e377ecf3b496c7719e6dffe3ebf3d0ef512cfb5b commit: e377ecf3b496c7719e6dffe3ebf3d0ef512cfb5b branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-30T18:35:45-04:00 summary: bpo-43935: Fix typo in Turtle.back() docstring (GH-25581) 'e ,' to 'e, '. (cherry picked from commit 0048c60f01deec4435748e851f9ec21b504d2d2f) Co-authored-by: Tarjei B?rland files: M Lib/turtle.py diff --git a/Lib/turtle.py b/Lib/turtle.py index 024fed858f683f..6e19032cce2a43 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -1645,7 +1645,7 @@ def back(self, distance): Argument: distance -- a number - Move the turtle backward by distance ,opposite to the direction the + Move the turtle backward by distance, opposite to the direction the turtle is headed. Do not change the turtle's heading. Example (for a Turtle instance named turtle): From webhook-mailer at python.org Fri Apr 30 19:07:22 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 30 Apr 2021 23:07:22 -0000 Subject: [Python-checkins] bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Message-ID: https://github.com/python/cpython/commit/e726a902b7c73a7056b7421d801e47ffff255873 commit: e726a902b7c73a7056b7421d801e47ffff255873 branch: master author: Mohamed Moselhy committer: terryjreedy date: 2021-04-30T19:06:55-04:00 summary: bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Result: "quantity_on_hand: int = 0". files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index e4d2b57fd4292..0e8db5003f5fe 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -33,7 +33,7 @@ using :pep:`526` type annotations. For example this code:: Will add, among other things, a :meth:`__init__` that looks like:: - def __init__(self, name: str, unit_price: float, quantity_on_hand: int=0): + def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name self.unit_price = unit_price self.quantity_on_hand = quantity_on_hand From webhook-mailer at python.org Fri Apr 30 19:23:22 2021 From: webhook-mailer at python.org (pablogsal) Date: Fri, 30 Apr 2021 23:23:22 -0000 Subject: [Python-checkins] bpo-43995: Fix reference leak in test_grammar (GH-25764) Message-ID: https://github.com/python/cpython/commit/e467ec476f624323b8638cf100d1bfbf1d6a21c6 commit: e467ec476f624323b8638cf100d1bfbf1d6a21c6 branch: master author: Erlend Egeberg Aasland committer: pablogsal date: 2021-05-01T00:23:14+01:00 summary: bpo-43995: Fix reference leak in test_grammar (GH-25764) files: M Lib/test/test_grammar.py diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 46f70e5d176fc..ebc9dde97e730 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -2,6 +2,7 @@ # This just tests whether the parser accepts them all. from test.support import check_syntax_error +from test.support import import_helper from test.support.warnings_helper import check_syntax_warning import inspect import unittest @@ -392,13 +393,13 @@ def test_var_annot_module_semantics(self): def test_var_annot_in_module(self): # check that functions fail the same way when executed # outside of module where they were defined - from test.ann_module3 import f_bad_ann, g_bad_ann, D_bad_ann + ann_module3 = import_helper.import_fresh_module("test.ann_module3") with self.assertRaises(NameError): - f_bad_ann() + ann_module3.f_bad_ann() with self.assertRaises(NameError): - g_bad_ann() + ann_module3.g_bad_ann() with self.assertRaises(NameError): - D_bad_ann(5) + ann_module3.D_bad_ann(5) def test_var_annot_simple_exec(self): gns = {}; lns= {} From webhook-mailer at python.org Fri Apr 30 19:33:01 2021 From: webhook-mailer at python.org (gpshead) Date: Fri, 30 Apr 2021 23:33:01 -0000 Subject: [Python-checkins] bpo-41486: Fix initial buffer size can't > UINT32_MAX in zlib module (GH-25738) Message-ID: https://github.com/python/cpython/commit/251ffa9d2b16b091046720628deb6a7906c35d29 commit: 251ffa9d2b16b091046720628deb6a7906c35d29 branch: master author: Ma Lin committer: gpshead date: 2021-04-30T16:32:49-07:00 summary: bpo-41486: Fix initial buffer size can't > UINT32_MAX in zlib module (GH-25738) * Fix initial buffer size can't > UINT32_MAX in zlib module After commit f9bedb630e8a0b7d94e1c7e609b20dfaa2b22231, in 64-bit build, if the initial buffer size > UINT32_MAX, ValueError will be raised. These two functions are affected: 1. zlib.decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE) 2. zlib.Decompress.flush([length]) This commit re-allows the size > UINT32_MAX. * adds curly braces per PEP 7. * Renames `Buffer_*` to `OutputBuffer_*` for clarity files: M Modules/_bz2module.c M Modules/_lzmamodule.c M Modules/zlibmodule.c diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 9893a63726291..d75bb32d2fc5e 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -18,8 +18,8 @@ /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, - char **next_out, uint32_t *avail_out) +OutputBuffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + char **next_out, uint32_t *avail_out) { Py_ssize_t allocated; @@ -32,8 +32,8 @@ Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_Grow(_BlocksOutputBuffer *buffer, - char **next_out, uint32_t *avail_out) +OutputBuffer_Grow(_BlocksOutputBuffer *buffer, + char **next_out, uint32_t *avail_out) { Py_ssize_t allocated; @@ -44,19 +44,19 @@ Buffer_Grow(_BlocksOutputBuffer *buffer, } static inline Py_ssize_t -Buffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) +OutputBuffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) { return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); } static inline PyObject * -Buffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) +OutputBuffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) { return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); } static inline void -Buffer_OnError(_BlocksOutputBuffer *buffer) +OutputBuffer_OnError(_BlocksOutputBuffer *buffer) { _BlocksOutputBuffer_OnError(buffer); } @@ -177,7 +177,7 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) PyObject *result; _BlocksOutputBuffer buffer = {.list = NULL}; - if (Buffer_InitAndGrow(&buffer, -1, &c->bzs.next_out, &c->bzs.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, -1, &c->bzs.next_out, &c->bzs.avail_out) < 0) { goto error; } c->bzs.next_in = data; @@ -198,7 +198,7 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) break; if (c->bzs.avail_out == 0) { - if (Buffer_Grow(&buffer, &c->bzs.next_out, &c->bzs.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &c->bzs.next_out, &c->bzs.avail_out) < 0) { goto error; } } @@ -215,13 +215,13 @@ compress(BZ2Compressor *c, char *data, size_t len, int action) break; } - result = Buffer_Finish(&buffer, c->bzs.avail_out); + result = OutputBuffer_Finish(&buffer, c->bzs.avail_out); if (result != NULL) { return result; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } @@ -442,7 +442,7 @@ decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length) _BlocksOutputBuffer buffer = {.list = NULL}; bz_stream *bzs = &d->bzs; - if (Buffer_InitAndGrow(&buffer, max_length, &bzs->next_out, &bzs->avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, max_length, &bzs->next_out, &bzs->avail_out) < 0) { goto error; } @@ -469,21 +469,22 @@ decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length) } else if (d->bzs_avail_in_real == 0) { break; } else if (bzs->avail_out == 0) { - if (Buffer_GetDataSize(&buffer, bzs->avail_out) == max_length) + if (OutputBuffer_GetDataSize(&buffer, bzs->avail_out) == max_length) { break; - if (Buffer_Grow(&buffer, &bzs->next_out, &bzs->avail_out) < 0) { + } + if (OutputBuffer_Grow(&buffer, &bzs->next_out, &bzs->avail_out) < 0) { goto error; } } } - result = Buffer_Finish(&buffer, bzs->avail_out); + result = OutputBuffer_Finish(&buffer, bzs->avail_out); if (result != NULL) { return result; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 0d6231953a3e7..2f80bf0496bb3 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -25,8 +25,8 @@ /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, - uint8_t **next_out, size_t *avail_out) +OutputBuffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + uint8_t **next_out, size_t *avail_out) { Py_ssize_t allocated; @@ -39,8 +39,8 @@ Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_Grow(_BlocksOutputBuffer *buffer, - uint8_t **next_out, size_t *avail_out) +OutputBuffer_Grow(_BlocksOutputBuffer *buffer, + uint8_t **next_out, size_t *avail_out) { Py_ssize_t allocated; @@ -51,19 +51,19 @@ Buffer_Grow(_BlocksOutputBuffer *buffer, } static inline Py_ssize_t -Buffer_GetDataSize(_BlocksOutputBuffer *buffer, size_t avail_out) +OutputBuffer_GetDataSize(_BlocksOutputBuffer *buffer, size_t avail_out) { return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); } static inline PyObject * -Buffer_Finish(_BlocksOutputBuffer *buffer, size_t avail_out) +OutputBuffer_Finish(_BlocksOutputBuffer *buffer, size_t avail_out) { return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); } static inline void -Buffer_OnError(_BlocksOutputBuffer *buffer) +OutputBuffer_OnError(_BlocksOutputBuffer *buffer) { _BlocksOutputBuffer_OnError(buffer); } @@ -550,7 +550,7 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) _lzma_state *state = PyType_GetModuleState(Py_TYPE(c)); assert(state != NULL); - if (Buffer_InitAndGrow(&buffer, -1, &c->lzs.next_out, &c->lzs.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, -1, &c->lzs.next_out, &c->lzs.avail_out) < 0) { goto error; } c->lzs.next_in = data; @@ -573,19 +573,19 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) (action == LZMA_FINISH && lzret == LZMA_STREAM_END)) { break; } else if (c->lzs.avail_out == 0) { - if (Buffer_Grow(&buffer, &c->lzs.next_out, &c->lzs.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &c->lzs.next_out, &c->lzs.avail_out) < 0) { goto error; } } } - result = Buffer_Finish(&buffer, c->lzs.avail_out); + result = OutputBuffer_Finish(&buffer, c->lzs.avail_out); if (result != NULL) { return result; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } @@ -934,7 +934,7 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) _lzma_state *state = PyType_GetModuleState(Py_TYPE(d)); assert(state != NULL); - if (Buffer_InitAndGrow(&buffer, max_length, &lzs->next_out, &lzs->avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, max_length, &lzs->next_out, &lzs->avail_out) < 0) { goto error; } @@ -962,10 +962,10 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) Maybe lzs's internal state still have a few bytes can be output, grow the output buffer and continue if max_lengh < 0. */ - if (Buffer_GetDataSize(&buffer, lzs->avail_out) == max_length) { + if (OutputBuffer_GetDataSize(&buffer, lzs->avail_out) == max_length) { break; } - if (Buffer_Grow(&buffer, &lzs->next_out, &lzs->avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &lzs->next_out, &lzs->avail_out) < 0) { goto error; } } else if (lzs->avail_in == 0) { @@ -973,13 +973,13 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) } } - result = Buffer_Finish(&buffer, lzs->avail_out); + result = OutputBuffer_Finish(&buffer, lzs->avail_out); if (result != NULL) { return result; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index fc63ca9445a8a..fe06094b0027a 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -19,8 +19,8 @@ /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, - Bytef **next_out, uint32_t *avail_out) +OutputBuffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, + Bytef **next_out, uint32_t *avail_out) { Py_ssize_t allocated; @@ -33,15 +33,17 @@ Buffer_InitAndGrow(_BlocksOutputBuffer *buffer, Py_ssize_t max_length, /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_InitWithSize(_BlocksOutputBuffer *buffer, Py_ssize_t init_size, - Bytef **next_out, uint32_t *avail_out) +OutputBuffer_InitWithSize(_BlocksOutputBuffer *buffer, Py_ssize_t init_size, + Bytef **next_out, uint32_t *avail_out) { Py_ssize_t allocated; - if (init_size < 0 || (size_t)init_size > UINT32_MAX) { - PyErr_SetString(PyExc_ValueError, - "Initial buffer size should (0 <= size <= UINT32_MAX)"); - return -1; + if (init_size >= 0 && // ensure (size_t) cast is safe + (size_t)init_size > UINT32_MAX) + { + /* In 32-bit build, never reach this conditional branch. + The maximum block size accepted by zlib is UINT32_MAX. */ + init_size = UINT32_MAX; } allocated = _BlocksOutputBuffer_InitWithSize( @@ -53,8 +55,8 @@ Buffer_InitWithSize(_BlocksOutputBuffer *buffer, Py_ssize_t init_size, /* On success, return value >= 0 On failure, return -1 */ static inline Py_ssize_t -Buffer_Grow(_BlocksOutputBuffer *buffer, - Bytef **next_out, uint32_t *avail_out) +OutputBuffer_Grow(_BlocksOutputBuffer *buffer, + Bytef **next_out, uint32_t *avail_out) { Py_ssize_t allocated; @@ -65,19 +67,19 @@ Buffer_Grow(_BlocksOutputBuffer *buffer, } static inline Py_ssize_t -Buffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) +OutputBuffer_GetDataSize(_BlocksOutputBuffer *buffer, uint32_t avail_out) { return _BlocksOutputBuffer_GetDataSize(buffer, (Py_ssize_t) avail_out); } static inline PyObject * -Buffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) +OutputBuffer_Finish(_BlocksOutputBuffer *buffer, uint32_t avail_out) { return _BlocksOutputBuffer_Finish(buffer, (Py_ssize_t) avail_out); } static inline void -Buffer_OnError(_BlocksOutputBuffer *buffer) +OutputBuffer_OnError(_BlocksOutputBuffer *buffer) { _BlocksOutputBuffer_OnError(buffer); } @@ -248,7 +250,7 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) Byte *ibuf = data->buf; Py_ssize_t ibuflen = data->len; - if (Buffer_InitAndGrow(&buffer, -1, &zst.next_out, &zst.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, -1, &zst.next_out, &zst.avail_out) < 0) { goto error; } @@ -280,7 +282,7 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) do { if (zst.avail_out == 0) { - if (Buffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { deflateEnd(&zst); goto error; } @@ -304,7 +306,7 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) err = deflateEnd(&zst); if (err == Z_OK) { - RetVal = Buffer_Finish(&buffer, zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, zst.avail_out); if (RetVal == NULL) { goto error; } @@ -313,7 +315,7 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) else zlib_error(state, zst, err, "while finishing compression"); error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } @@ -352,7 +354,7 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, bufsize = 1; } - if (Buffer_InitWithSize(&buffer, bufsize, &zst.next_out, &zst.avail_out) < 0) { + if (OutputBuffer_InitWithSize(&buffer, bufsize, &zst.next_out, &zst.avail_out) < 0) { goto error; } @@ -385,7 +387,7 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, do { if (zst.avail_out == 0) { - if (Buffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &zst.next_out, &zst.avail_out) < 0) { inflateEnd(&zst); goto error; } @@ -428,13 +430,13 @@ zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, goto error; } - RetVal = Buffer_Finish(&buffer, zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, zst.avail_out); if (RetVal != NULL) { return RetVal; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); return NULL; } @@ -677,7 +679,7 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, self->zst.next_in = data->buf; Py_ssize_t ibuflen = data->len; - if (Buffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { goto error; } @@ -686,8 +688,9 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, do { if (self->zst.avail_out == 0) { - if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) + if (OutputBuffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { goto error; + } } Py_BEGIN_ALLOW_THREADS @@ -704,13 +707,13 @@ zlib_Compress_compress_impl(compobject *self, PyTypeObject *cls, } while (ibuflen != 0); - RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, self->zst.avail_out); if (RetVal != NULL) { goto success; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); RetVal = NULL; success: LEAVE_ZLIB(self); @@ -799,15 +802,16 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, if (max_length < 0) { PyErr_SetString(PyExc_ValueError, "max_length must be non-negative"); return NULL; - } else if (max_length == 0) + } else if (max_length == 0) { max_length = -1; + } ENTER_ZLIB(self); self->zst.next_in = data->buf; ibuflen = data->len; - if (Buffer_InitAndGrow(&buffer, max_length, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, max_length, &self->zst.next_out, &self->zst.avail_out) < 0) { goto abort; } @@ -816,10 +820,10 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, do { if (self->zst.avail_out == 0) { - if (Buffer_GetDataSize(&buffer, self->zst.avail_out) == max_length) { + if (OutputBuffer_GetDataSize(&buffer, self->zst.avail_out) == max_length) { goto save; } - if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { goto abort; } } @@ -865,13 +869,13 @@ zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls, goto abort; } - RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, self->zst.avail_out); if (RetVal != NULL) { goto success; } abort: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); RetVal = NULL; success: LEAVE_ZLIB(self); @@ -911,13 +915,13 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) self->zst.avail_in = 0; - if (Buffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_InitAndGrow(&buffer, -1, &self->zst.next_out, &self->zst.avail_out) < 0) { goto error; } do { if (self->zst.avail_out == 0) { - if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { goto error; } } @@ -954,13 +958,13 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject *cls, int mode) goto error; } - RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, self->zst.avail_out); if (RetVal != NULL) { goto success; } error: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); RetVal = NULL; success: LEAVE_ZLIB(self); @@ -1189,7 +1193,7 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, self->zst.next_in = data.buf; ibuflen = data.len; - if (Buffer_InitWithSize(&buffer, length, &self->zst.next_out, &self->zst.avail_out) < 0) { + if (OutputBuffer_InitWithSize(&buffer, length, &self->zst.next_out, &self->zst.avail_out) < 0) { goto abort; } @@ -1199,8 +1203,9 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, do { if (self->zst.avail_out == 0) { - if (Buffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) + if (OutputBuffer_Grow(&buffer, &self->zst.next_out, &self->zst.avail_out) < 0) { goto abort; + } } Py_BEGIN_ALLOW_THREADS @@ -1243,13 +1248,13 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, } } - RetVal = Buffer_Finish(&buffer, self->zst.avail_out); + RetVal = OutputBuffer_Finish(&buffer, self->zst.avail_out); if (RetVal != NULL) { goto success; } abort: - Buffer_OnError(&buffer); + OutputBuffer_OnError(&buffer); RetVal = NULL; success: PyBuffer_Release(&data); From webhook-mailer at python.org Fri Apr 30 20:30:46 2021 From: webhook-mailer at python.org (terryjreedy) Date: Sat, 01 May 2021 00:30:46 -0000 Subject: [Python-checkins] bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Message-ID: https://github.com/python/cpython/commit/e48405a9be067d50d6d0d83dc22013fc68f15657 commit: e48405a9be067d50d6d0d83dc22013fc68f15657 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-30T20:30:38-04:00 summary: bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Result: "quantity_on_hand: int = 0". (cherry picked from commit e726a902b7c73a7056b7421d801e47ffff255873) Co-authored-by: Mohamed Moselhy Co-authored-by: Mohamed Moselhy files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 6cd8d8ed0c264..8711191500c60 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -33,7 +33,7 @@ using :pep:`526` type annotations. For example this code:: Will add, among other things, a :meth:`__init__` that looks like:: - def __init__(self, name: str, unit_price: float, quantity_on_hand: int=0): + def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name self.unit_price = unit_price self.quantity_on_hand = quantity_on_hand From webhook-mailer at python.org Fri Apr 30 20:31:07 2021 From: webhook-mailer at python.org (terryjreedy) Date: Sat, 01 May 2021 00:31:07 -0000 Subject: [Python-checkins] bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Message-ID: https://github.com/python/cpython/commit/606bb1c77c66eca081d03374ad4b53d9e603dd9d commit: 606bb1c77c66eca081d03374ad4b53d9e603dd9d branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-04-30T20:31:00-04:00 summary: bpo-43971: Add spaces around annotated arg default '=' (GH-25702) Result: "quantity_on_hand: int = 0". (cherry picked from commit e726a902b7c73a7056b7421d801e47ffff255873) Co-authored-by: Mohamed Moselhy Co-authored-by: Mohamed Moselhy files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 9b53372b3d3ab..c47ee0a932ae2 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -33,7 +33,7 @@ using :pep:`526` type annotations. For example this code:: Will add, among other things, a :meth:`__init__` that looks like:: - def __init__(self, name: str, unit_price: float, quantity_on_hand: int=0): + def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name self.unit_price = unit_price self.quantity_on_hand = quantity_on_hand From webhook-mailer at python.org Fri Apr 30 21:21:27 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 01 May 2021 01:21:27 -0000 Subject: [Python-checkins] bpo-43916: Export the _PyStructSequence_InitType to fix build errors in the curses module (GH-25768) Message-ID: https://github.com/python/cpython/commit/558df9010915c8fe94f4d7f842e7c5aabbb06b14 commit: 558df9010915c8fe94f4d7f842e7c5aabbb06b14 branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-01T02:21:19+01:00 summary: bpo-43916: Export the _PyStructSequence_InitType to fix build errors in the curses module (GH-25768) files: M Doc/data/stable_abi.dat M Include/structseq.h M Misc/stable_abi.txt M PC/python3dll.c diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 833228f7fd755d..b21374a05cb6a5 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -918,6 +918,7 @@ Py_tp_setattro Py_tp_str Py_tp_traverse Py_uintptr_t +_PyStructSequence_InitType _frame _node allocfunc diff --git a/Include/structseq.h b/Include/structseq.h index af3af415b013a7..890e03130b4edb 100644 --- a/Include/structseq.h +++ b/Include/structseq.h @@ -27,12 +27,10 @@ PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc); #endif -#ifdef Py_BUILD_CORE -extern int _PyStructSequence_InitType( +PyAPI_FUNC(int) _PyStructSequence_InitType( PyTypeObject *type, PyStructSequence_Desc *desc, unsigned long tp_flags); -#endif PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index 2a802bd5f4b831..d79746e0a4ec04 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2121,6 +2121,8 @@ function PyObject_GetAiter added 3.10 data PyExc_EncodingWarning added 3.10 +function _PyStructSequence_InitType + added 3.10 # Support for Stable ABI in debug builds diff --git a/PC/python3dll.c b/PC/python3dll.c index 574d4dcad9f75b..30868c1864622e 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -35,6 +35,7 @@ EXPORT_FUNC(_PyObject_GC_Resize) EXPORT_FUNC(_PyObject_New) EXPORT_FUNC(_PyObject_NewVar) EXPORT_FUNC(_PyState_AddModule) +EXPORT_FUNC(_PyStructSequence_InitType) EXPORT_FUNC(_PyThreadState_Init) EXPORT_FUNC(_PyThreadState_Prealloc) EXPORT_FUNC(_PyTrash_deposit_object) From webhook-mailer at python.org Fri Apr 30 22:14:37 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 02:14:37 -0000 Subject: [Python-checkins] bpo-42269: Add slots parameter to dataclass decorator (GH-24171) Message-ID: https://github.com/python/cpython/commit/c24199184bea0c851c1a7296ae54aaf18ee56752 commit: c24199184bea0c851c1a7296ae54aaf18ee56752 branch: master author: Yurii Karabas <1998uriyyo at gmail.com> committer: ericvsmith date: 2021-04-30T22:14:30-04:00 summary: bpo-42269: Add slots parameter to dataclass decorator (GH-24171) Add slots parameter to dataclass decorator and make_dataclass function. files: A Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst M Doc/library/dataclasses.rst M Doc/whatsnew/3.10.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 0e8db5003f5fe4..dbbc5d66c410be 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -46,7 +46,7 @@ directly specified in the ``InventoryItem`` definition shown above. Module-level decorators, classes, and functions ----------------------------------------------- -.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) +.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False) This function is a :term:`decorator` that is used to add generated :term:`special method`\s to classes, as described below. @@ -79,7 +79,7 @@ Module-level decorators, classes, and functions class C: ... - @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) + @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False) class C: ... @@ -173,6 +173,11 @@ Module-level decorators, classes, and functions glossary entry for details. Also see the ``dataclasses.KW_ONLY`` section. + - ``slots``: If true (the default is ``False``), :attr:`__slots__` attribute + will be generated and new class will be returned instead of the original one. + If :attr:`__slots__` is already defined in the class, then :exc:`TypeError` + is raised. + ``field``\s may optionally specify a default value, using normal Python syntax:: @@ -337,7 +342,7 @@ Module-level decorators, classes, and functions Raises :exc:`TypeError` if ``instance`` is not a dataclass instance. -.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False) +.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False) Creates a new dataclass with name ``cls_name``, fields as defined in ``fields``, base classes as given in ``bases``, and initialized @@ -346,8 +351,8 @@ Module-level decorators, classes, and functions or ``(name, type, Field)``. If just ``name`` is supplied, ``typing.Any`` is used for ``type``. The values of ``init``, ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``, - ``match_args``, and ``kw_only`` have the same meaning as they do - in :func:`dataclass`. + ``match_args``, ``kw_only``, and ``slots`` have the same meaning as + they do in :func:`dataclass`. This function is not strictly required, because any Python mechanism for creating a new class with ``__annotations__`` can diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1a390663c8a404..9c8e2969938798 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -895,6 +895,12 @@ The ``BUTTON5_*`` constants are now exposed in the :mod:`curses` module if they are provided by the underlying curses library. (Contributed by Zackery Spytz in :issue:`39273`.) +dataclasses +----------- + +Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator. +(Contributed by Yurii Karabas in :issue:`42269`) + .. _distutils-deprecated: distutils diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 3de50cf390cc37..5e5716316f0954 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -874,7 +874,7 @@ def _hash_exception(cls, fields, globals): def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, - match_args, kw_only): + match_args, kw_only, slots): # Now that dicts retain insertion order, there's no reason to use # an ordered dict. I am leveraging that ordering here, because # derived class fields overwrite base class fields, but the order @@ -1086,14 +1086,46 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, _set_new_attribute(cls, '__match_args__', tuple(f.name for f in std_init_fields)) + if slots: + cls = _add_slots(cls) + abc.update_abstractmethods(cls) return cls +def _add_slots(cls): + # Need to create a new class, since we can't set __slots__ + # after a class has been created. + + # Make sure __slots__ isn't already set. + if '__slots__' in cls.__dict__: + raise TypeError(f'{cls.__name__} already specifies __slots__') + + # Create a new dict for our new class. + cls_dict = dict(cls.__dict__) + field_names = tuple(f.name for f in fields(cls)) + cls_dict['__slots__'] = field_names + for field_name in field_names: + # Remove our attributes, if present. They'll still be + # available in _MARKER. + cls_dict.pop(field_name, None) + + # Remove __dict__ itself. + cls_dict.pop('__dict__', None) + + # And finally create the class. + qualname = getattr(cls, '__qualname__', None) + cls = type(cls)(cls.__name__, cls.__bases__, cls_dict) + if qualname is not None: + cls.__qualname__ = qualname + + return cls + + def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, - kw_only=False): + kw_only=False, slots=False): """Returns the same class as was passed in, with dunder methods added based on the fields defined in the class. @@ -1105,12 +1137,13 @@ def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, __hash__() method function is added. If frozen is true, fields may not be assigned to after instance creation. If match_args is true, the __match_args__ tuple is added. If kw_only is true, then by - default all fields are keyword-only. + default all fields are keyword-only. If slots is true, an + __slots__ attribute is added. """ def wrap(cls): return _process_class(cls, init, repr, eq, order, unsafe_hash, - frozen, match_args, kw_only) + frozen, match_args, kw_only, slots) # See if we're being called as @dataclass or @dataclass(). if cls is None: @@ -1269,7 +1302,7 @@ def _astuple_inner(obj, tuple_factory): def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, - frozen=False, match_args=True): + frozen=False, match_args=True, slots=False): """Return a new dynamically created dataclass. The dataclass name will be 'cls_name'. 'fields' is an iterable @@ -1336,7 +1369,7 @@ def exec_body_callback(ns): # Apply the normal decorator. return dataclass(cls, init=init, repr=repr, eq=eq, order=order, unsafe_hash=unsafe_hash, frozen=frozen, - match_args=match_args) + match_args=match_args, slots=slots) def replace(obj, /, **changes): diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 670648a1b112b0..2fa0ae0126bf88 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2781,6 +2781,59 @@ class Derived(Base): # We can add a new field to the derived instance. d.z = 10 + def test_generated_slots(self): + @dataclass(slots=True) + class C: + x: int + y: int + + c = C(1, 2) + self.assertEqual((c.x, c.y), (1, 2)) + + c.x = 3 + c.y = 4 + self.assertEqual((c.x, c.y), (3, 4)) + + with self.assertRaisesRegex(AttributeError, "'C' object has no attribute 'z'"): + c.z = 5 + + def test_add_slots_when_slots_exists(self): + with self.assertRaisesRegex(TypeError, '^C already specifies __slots__$'): + @dataclass(slots=True) + class C: + __slots__ = ('x',) + x: int + + def test_generated_slots_value(self): + @dataclass(slots=True) + class Base: + x: int + + self.assertEqual(Base.__slots__, ('x',)) + + @dataclass(slots=True) + class Delivered(Base): + y: int + + self.assertEqual(Delivered.__slots__, ('x', 'y')) + + @dataclass + class AnotherDelivered(Base): + z: int + + self.assertTrue('__slots__' not in AnotherDelivered.__dict__) + + def test_returns_new_class(self): + class A: + x: int + + B = dataclass(A, slots=True) + self.assertIsNot(A, B) + + self.assertFalse(hasattr(A, "__slots__")) + self.assertTrue(hasattr(B, "__slots__")) + + class TestDescriptors(unittest.TestCase): def test_set_name(self): # See bpo-33141. diff --git a/Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst b/Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst new file mode 100644 index 00000000000000..595f8733d0eab9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst @@ -0,0 +1,3 @@ +Add ``slots`` parameter to ``dataclasses.dataclass`` decorator to +automatically generate ``__slots__`` for class. Patch provided by Yurii +Karabas.